init PaymentInstrument

This commit is contained in:
MahanCh
2025-07-30 17:03:01 +03:30
parent e3f29e5efa
commit 9879857a97
24 changed files with 11102 additions and 12 deletions

View File

@@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public interface IPaymentInstrumentGroupRepository:IRepository<long,PaymentInstrumentGroup>
{
void Remove(PaymentInstrumentGroup paymentInstrumentGroup);
Task<List<PaymentInstrumentGroupsViewModel>> GetList();
}

View File

@@ -0,0 +1,10 @@
using System.Threading.Tasks;
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public interface IPaymentInstrumentRepository:IRepository<long,PaymentInstrument>
{
Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel);
}

View File

@@ -0,0 +1,52 @@
using _0_Framework.Domain;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace Company.Domain.PaymentInstrumentAgg;
public class PaymentInstrument:EntityBase
{
private PaymentInstrument(string cardNumber, string accountHolderName, string accountNumber,string iBan,bool isAuth,long paymentInstrumentGroupId)
{
CardNumber = cardNumber;
AccountHolderName = accountHolderName;
AccountNumber = accountNumber;
IBan = iBan;
IsAuth = isAuth;
PaymentInstrumentGroupId = paymentInstrumentGroupId;
Type = PaymentInstrumentType.BankAccount;
}
private PaymentInstrument(string posTerminalId , string description,long paymentInstrumentGroupId)
{
PosTerminalId = posTerminalId;
Description = description;
PaymentInstrumentGroupId = paymentInstrumentGroupId;
Type = PaymentInstrumentType.BankAccount;
}
public static PaymentInstrument CreatePosType(string posTerminalId, string description, long paymentInstrumentGroupId)
{
return new PaymentInstrument(posTerminalId, description, paymentInstrumentGroupId);
}
public static PaymentInstrument CreateBankAccount(string cardNumber, string accountHolderName, string accountNumber,
string iBan, bool isAuth, long paymentInstrumentGroupId)
{
return new PaymentInstrument(cardNumber, accountHolderName, accountNumber, iBan, isAuth, paymentInstrumentGroupId);
}
public string CardNumber { get; private set; }
public string AccountHolderName { get; private set; }
public string AccountNumber { get; private set; }
public string IBan { get; private set; }
public string PosTerminalId { get; private set; }
public string Description { get; set; }
public PaymentInstrumentType Type { get; private set; }
public bool IsAuth { get; private set; }
public long PaymentInstrumentGroupId { get; private set; }
public PaymentInstrumentGroup PaymentInstrumentGroup { get; private set; }
}

View File

@@ -0,0 +1,20 @@
using System.Collections.Generic;
using _0_Framework.Domain;
namespace Company.Domain.PaymentInstrumentAgg;
public class PaymentInstrumentGroup:EntityBase
{
public PaymentInstrumentGroup(string name)
{
Name = name;
}
public string Name { get; private set; }
public List<PaymentInstrument> PaymentInstruments { get; set; }
public void Edit(string name)
{
Name = name;
}
}

View File

@@ -0,0 +1,37 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ایجاد اطلاعات بانکی
/// </summary>
public class CreateBankPaymentInstrument
{
/// <summary>
/// آیدی عنوان
/// </summary>
public long PaymentInstrumentGroupId { get; set; }
/// <summary>
/// نام صاحب حساب
/// </summary>
public string AccountHolderName { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string IBan { get; set; }
/// <summary>
/// آیا احزار هویت شده است
/// </summary>
public bool IsAuth { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ایجاد عنوان
/// </summary>
public class CreateBankPaymentInstrumentGroup
{
/// <summary>
/// نام
/// </summary>
public string Name { get; set; }
}

View File

@@ -0,0 +1,22 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
///
/// </summary>
public class CreatePosPaymentInstrument
{
/// <summary>
/// آیدی عنوان
/// </summary>
public long PaymentInstrumentGroupId { get; set; }
/// <summary>
/// شناسه دستگاه پوز
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Description { get; set; }
}

View File

@@ -0,0 +1,12 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// ویرایش عنوان
/// </summary>
public class EditBankPaymentInstrumentGroup : CreateBankPaymentInstrumentGroup
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
}

View File

@@ -0,0 +1,63 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class GetPaymentInstrumentListViewModel
{
/// <summary>
/// تعداد آیتم
/// </summary>
public int Count { get; set; }
/// <summary>
/// لیست گروهی
/// </summary>
public List<PaymentInstrumentGroupedViewModel> GropedViewModels { get; set; }
}
public class PaymentInstrumentGroupedViewModel
{
/// <summary>
/// نام
/// </summary>
public string Name { get; set; }
/// <summary>
/// آیتم های گروه
/// </summary>
public List<PaymentInstrumentItemsViewModel> Items { get; set; }
}
/// <summary>
///
/// </summary>
public class PaymentInstrumentItemsViewModel
{
/// <summary>
/// آیدی
/// </summary>
public long Id { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره شبا
/// </summary>
public string IBan { get; set; }
/// <summary>
/// شناسه دستگاه
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// توضیحات
/// </summary>
public string Description { get; set; }
}

View File

@@ -0,0 +1,54 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// اپلیکیشن جاری شرکا
/// </summary>
public interface IPaymentInstrumentApplication
{
/// <summary>
/// ایجاد حساب اطلاعات بانکی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateBankAccount(CreateBankPaymentInstrument command);
/// <summary>
/// ایجاد اطلاعات دستگاه پوز
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreatePos(CreatePosPaymentInstrument command);
/// <summary>
/// گرفتن لیست
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel);
/// <summary>
/// ایجاد عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> CreateGroup(CreateBankPaymentInstrumentGroup command);
/// <summary>
/// ویرایش عنوان
/// </summary>
/// <returns></returns>
Task<OperationResult> EditGroup(EditBankPaymentInstrumentGroup command);
/// <summary>
/// حذف عنوان
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<OperationResult> DeleteGroup(long id);
Task<List<PaymentInstrumentGroupsViewModel>> GetGroup();
}

View File

@@ -0,0 +1,5 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
public class PaymentInstrumentGroupsViewModel:EditBankPaymentInstrumentGroup
{
}

View File

@@ -0,0 +1,32 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// سرچ مدل
/// </summary>
public class PaymentInstrumentSearchModel
{
/// <summary>
/// نام صاحب حساب
/// </summary>
public string AccountHolderName { get; set; }
/// <summary>
/// شناسه دستگاه
/// </summary>
public string PosTerminalId { get; set; }
/// <summary>
/// شماره کارت
/// </summary>
public string CardNumber { get; set; }
/// <summary>
/// شماره حساب
/// </summary>
public string AccountNumber { get; set; }
/// <summary>
/// شماره شبا
/// </summary>
public string IBan { get; set; }
}

View File

@@ -0,0 +1,15 @@
namespace CompanyManagment.App.Contracts.PaymentInstrument;
/// <summary>
/// نوع حساب های جاری شرکا
/// </summary>
public enum PaymentInstrumentType
{
/// <summary>
/// حساب بانکی
/// </summary>
BankAccount,
/// <summary>
/// دستگاه پوز
/// </summary>
Pos
}

View File

@@ -0,0 +1,123 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using _0_Framework.Application;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
namespace CompanyManagment.Application;
public class PaymentInstrumentApplication:IPaymentInstrumentApplication
{
private readonly IPaymentInstrumentRepository _paymentInstrumentRepository;
private readonly IPaymentInstrumentGroupRepository _paymentInstrumentGroupRepository;
public PaymentInstrumentApplication(IPaymentInstrumentRepository paymentInstrumentRepository,
IPaymentInstrumentGroupRepository paymentInstrumentGroupRepository)
{
_paymentInstrumentRepository = paymentInstrumentRepository;
_paymentInstrumentGroupRepository = paymentInstrumentGroupRepository;
}
public async Task<OperationResult> CreateBankAccount(CreateBankPaymentInstrument command)
{
var op = new OperationResult();
if (command.IsAuth)
{
if (string.IsNullOrWhiteSpace(command.AccountNumber))
{
return op.Failed("شماره حساب نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.IBan))
{
return op.Failed("شماره شبا نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.CardNumber))
{
return op.Failed("شماره کارت نمیتواند خالی باشد");
}
if (string.IsNullOrWhiteSpace(command.AccountHolderName))
{
return op.Failed("نام صاحب حساب نمیتواند خالی باشد");
}
}
var entity = PaymentInstrument.CreateBankAccount(command.CardNumber, command.AccountHolderName, command.AccountNumber,
command.IBan, command.IsAuth,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> CreatePos(CreatePosPaymentInstrument command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.PosTerminalId))
{
return op.Failed("شناسه دستگاه یوزر نمیتواند خالی باشد");
}
var entity = PaymentInstrument.CreatePosType(command.PosTerminalId, command.Description,command.PaymentInstrumentGroupId);
await _paymentInstrumentRepository.CreateAsync(entity);
await _paymentInstrumentRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel)
{
return await _paymentInstrumentRepository.GetList(searchModel);
}
public async Task<OperationResult> CreateGroup(CreateBankPaymentInstrumentGroup command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Name))
{
return op.Failed("لطفا عنوان خودرا وارد کنید");
}
var instrumentGroup = new PaymentInstrumentGroup(command.Name);
await _paymentInstrumentGroupRepository.CreateAsync(instrumentGroup);
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> EditGroup(EditBankPaymentInstrumentGroup command)
{
var op = new OperationResult();
if (string.IsNullOrWhiteSpace(command.Name))
{
return op.Failed("لطفا عنوان خودرا وارد کنید");
}
var paymentInstrumentGroup = _paymentInstrumentGroupRepository.Get(command.Id);
if (paymentInstrumentGroup == null)
{
return op.Failed("عنوان مورد نظر یافت نشد");
}
paymentInstrumentGroup.Edit(command.Name);
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<OperationResult> DeleteGroup(long id)
{
var op = new OperationResult();
var paymentInstrumentGroup = _paymentInstrumentGroupRepository.Get(id);
if (paymentInstrumentGroup == null)
{
return op.Failed("عنوان مورد نظر یافت نشد");
}
_paymentInstrumentGroupRepository.Remove(paymentInstrumentGroup);
await _paymentInstrumentGroupRepository.SaveChangesAsync();
return op.Succcedded();
}
public async Task<List<PaymentInstrumentGroupsViewModel>> GetGroup()
{
return await _paymentInstrumentGroupRepository.GetList();
}
}

View File

@@ -77,6 +77,7 @@ using Company.Domain.MasterWorkHistory;
using Company.Domain.ModuleAgg;
using Company.Domain.ModuleTextManagerAgg;
using Company.Domain.OriginalTitleAgg;
using Company.Domain.PaymentInstrumentAgg;
using Company.Domain.PaymentToEmployeeAgg;
using Company.Domain.PaymentToEmployeeItemAgg;
using Company.Domain.PaymentTransactionAgg;
@@ -132,7 +133,9 @@ public class CompanyContext : DbContext
public DbSet<EntityModule> EntityModules { get; set; }
public DbSet<EntityModuleTextManager> EntityModuleTextManagers { get; set; }
public DbSet<EntityBill> EntityBills { get; set; }
public DbSet<EntityContact> EntityContacts { get; set; }
//---------Files------------------------------
public DbSet<Board> Boards { get; set; }
public DbSet<BoardType> BoardTypes { get; set; }
@@ -149,6 +152,7 @@ public class CompanyContext : DbContext
public DbSet<FileTitle> FileTitles { get; set; }
public DbSet<FileTiming> FileTimings { get; set; }
public DbSet<FileState> FileStates { get; set; }
public DbSet<FileAlert> FileAlerts { get; set; }
//-------Task Manager----------------------------
//public DbSet<Task> Tasks { get; set; }
@@ -184,9 +188,13 @@ public class CompanyContext : DbContext
public DbSet<EmployeeAuthorizeTemp> EmployeeAuthorizeTemps { get; set; }
public DbSet<AdminMonthlyOverview> AdminMonthlyOverviews { get; set; }
public DbSet<PaymentTransaction> PaymentTransactions{ get; set; }
public DbSet<PaymentTransaction> PaymentTransactions { get; set; }
public DbSet<ContractingPartyBankAccount> ContractingPartyBankAccounts { get; set; }
public DbSet<PaymentInstrument> PaymentInstruments { get; set; }
public DbSet<PaymentInstrumentGroup> PaymentInstrumentGroups { get; set; }
#endregion
#region Pooya
@@ -209,7 +217,9 @@ public class CompanyContext : DbContext
public DbSet<WorkshopTemp> WorkshopTemps { get; set; }
public DbSet<WorkshopServicesTemp> WorkshopServicesTemps { get; set; }
public DbSet<InstitutionContractTemp> InstitutionContractTemps { get; set; }
#endregion
public DbSet<CustomizeCheckout> CustomizeCheckouts { get; set; }
public DbSet<CustomizeCheckoutTemp> CustomizeCheckoutTemps { get; set; }
public DbSet<TaxLeftWorkItem> TaxLeftWorkItems { get; set; }
@@ -251,7 +261,7 @@ public class CompanyContext : DbContext
public DbSet<DateSalary> DateSalaries { get; set; }
public DbSet<DateSalaryItem> DateSalaryItems { get; set; }
public DbSet<Percentage> Percentages { get; set; }
public DbSet<InsuranceJobItem> InsuranceJobItems { get; set; }
public DbSet<InsuranceJob> InsuranceJobs { get; set; }
@@ -269,14 +279,14 @@ public class CompanyContext : DbContext
public DbSet<WorkingHours> WorkingHoursSet { get; set; }
public DbSet<HolidayItem> HolidayItems { get; set; }
public DbSet<Holiday> Holidays { get; set; }
public DbSet<MandatoryHours> MandatoryHoursDbSet { get; set; }
public DbSet<MandatoryHours> MandatoryHoursDbSet { get; set; }
public DbSet<WorkshopEmployer> WorkshopEmployers { get; set; }
public DbSet<Job> Jobs { get; set; }
public DbSet<Job> Jobs { get; set; }
public DbSet<Contract> Contracts { get; set; }
public DbSet<YearlySalaryTitle> YearlySalaryTitles { get; set; }
public DbSet<YearlySalaryItem> YearlySalaryItems { get; set; }
public DbSet<YearlySalary> YearlySalaries { get; set; }
public DbSet<EmployeeChildren> EmployeeChildrenSet { get; set; }
public DbSet<EmployeeChildren> EmployeeChildrenSet { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Workshop> Workshops { get; set; }
public DbSet<PersonalContractingParty> PersonalContractingParties { get; set; }
@@ -291,17 +301,15 @@ public class CompanyContext : DbContext
public DbSet<Employer> Employers { get; set; }
public CompanyContext(DbContextOptions<CompanyContext> options) :base(options)
public CompanyContext(DbContextOptions<CompanyContext> options) : base(options)
{
}
public CompanyContext()
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
@@ -309,6 +317,5 @@ public class CompanyContext : DbContext
modelBuilder.ApplyConfigurationsFromAssembly(assembly);
modelBuilder.Entity<RollCall>().HasQueryFilter(x => x.RollCallModifyType != RollCallModifyType.Undefined);
base.OnModelCreating(modelBuilder);
}
}

View File

@@ -0,0 +1,19 @@
using Company.Domain.PaymentInstrumentAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using OfficeOpenXml.Drawing.Chart;
namespace CompanyManagment.EFCore.Mapping;
public class PaymentInstrumentGroupMapping:IEntityTypeConfiguration<PaymentInstrumentGroup>
{
public void Configure(EntityTypeBuilder<PaymentInstrumentGroup> builder)
{
builder.HasKey(x => x.id);
builder.Property(x => x.Name).IsRequired().HasMaxLength(120);
builder.HasMany(x => x.PaymentInstruments)
.WithOne(x=>x.PaymentInstrumentGroup)
.HasForeignKey(x=>x.PaymentInstrumentGroupId);
}
}

View File

@@ -0,0 +1,24 @@
using Company.Domain.PaymentInstrumentAgg;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace CompanyManagment.EFCore.Mapping;
public class PaymentInstrumentMapping : IEntityTypeConfiguration<PaymentInstrument>
{
public void Configure(EntityTypeBuilder<PaymentInstrument> builder)
{
builder.HasKey(x => x.id);
builder.Property(x => x.AccountHolderName).HasMaxLength(50);
builder.Property(x => x.AccountNumber).HasMaxLength(25);
builder.Property(x => x.PosTerminalId).HasMaxLength(25);
builder.Property(x => x.Description).HasMaxLength(200);
builder.Property(x => x.Type).HasConversion<string>().HasMaxLength(50);
builder.Property(x => x.CardNumber).HasMaxLength(50);
builder.Property(x => x.IBan).HasMaxLength(50);
builder.HasOne(x => x.PaymentInstrumentGroup)
.WithMany(x => x.PaymentInstruments)
.HasForeignKey(x => x.PaymentInstrumentGroupId);
}
}

View File

@@ -0,0 +1,72 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class createpaymentinstrumentsanditsgroups : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "PaymentInstrumentGroups",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(120)", maxLength: 120, nullable: false),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PaymentInstrumentGroups", x => x.id);
});
migrationBuilder.CreateTable(
name: "PaymentInstruments",
columns: table => new
{
id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
CardNumber = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
AccountHolderName = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
AccountNumber = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
IBan = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
PosTerminalId = table.Column<string>(type: "nvarchar(25)", maxLength: 25, nullable: true),
Description = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
Type = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
IsAuth = table.Column<bool>(type: "bit", nullable: false),
PaymentInstrumentGroupId = table.Column<long>(type: "bigint", nullable: false),
CreationDate = table.Column<DateTime>(type: "datetime2", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_PaymentInstruments", x => x.id);
table.ForeignKey(
name: "FK_PaymentInstruments_PaymentInstrumentGroups_PaymentInstrumentGroupId",
column: x => x.PaymentInstrumentGroupId,
principalTable: "PaymentInstrumentGroups",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_PaymentInstruments_PaymentInstrumentGroupId",
table: "PaymentInstruments",
column: "PaymentInstrumentGroupId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "PaymentInstruments");
migrationBuilder.DropTable(
name: "PaymentInstrumentGroups");
}
}
}

View File

@@ -872,7 +872,7 @@ namespace CompanyManagment.EFCore.Migrations
b.ToTable("ContractingPartyAccount", (string)null);
});
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccounts", b =>
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
@@ -4279,6 +4279,80 @@ namespace CompanyManagment.EFCore.Migrations
b.ToTable("TextManager_OriginalTitle", (string)null);
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrument", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<string>("AccountHolderName")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<string>("AccountNumber")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b.Property<string>("CardNumber")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Description")
.HasMaxLength(200)
.HasColumnType("nvarchar(200)");
b.Property<string>("IBan")
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.Property<bool>("IsAuth")
.HasColumnType("bit");
b.Property<long>("PaymentInstrumentGroupId")
.HasColumnType("bigint");
b.Property<string>("PosTerminalId")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b.Property<string>("Type")
.IsRequired()
.HasMaxLength(50)
.HasColumnType("nvarchar(50)");
b.HasKey("id");
b.HasIndex("PaymentInstrumentGroupId");
b.ToTable("PaymentInstruments");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", b =>
{
b.Property<long>("id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<long>("id"));
b.Property<DateTime>("CreationDate")
.HasColumnType("datetime2");
b.Property<string>("Name")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("nvarchar(120)");
b.HasKey("id");
b.ToTable("PaymentInstrumentGroups");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b =>
{
b.Property<long>("id")
@@ -6644,7 +6718,7 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("PersonalContractingParty");
});
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccounts", b =>
modelBuilder.Entity("Company.Domain.ContractingPartyBankAccountsAgg.ContractingPartyBankAccount", b =>
{
b.HasOne("Company.Domain.ContarctingPartyAgg.PersonalContractingParty", "ContractingParty")
.WithMany("ContractingPartyBankAccounts")
@@ -9518,6 +9592,17 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("TextManager");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrument", b =>
{
b.HasOne("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", "PaymentInstrumentGroup")
.WithMany("PaymentInstruments")
.HasForeignKey("PaymentInstrumentGroupId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("PaymentInstrumentGroup");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeItemAgg.PaymentToEmployeeItem", b =>
{
b.HasOne("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", "PaymentToEmployee")
@@ -9983,6 +10068,11 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("Subtitles");
});
modelBuilder.Entity("Company.Domain.PaymentInstrumentAgg.PaymentInstrumentGroup", b =>
{
b.Navigation("PaymentInstruments");
});
modelBuilder.Entity("Company.Domain.PaymentToEmployeeAgg.PaymentToEmployee", b =>
{
b.Navigation("PaymentToEmployeeItemList");

View File

@@ -0,0 +1,30 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.InfraStructure;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class PaymentInstrumentGroupRepository : RepositoryBase<long, PaymentInstrumentGroup>,
IPaymentInstrumentGroupRepository
{
private readonly CompanyContext _context;
public PaymentInstrumentGroupRepository(CompanyContext context) : base(context)
{
_context = context;
}
public async Task<List<PaymentInstrumentGroupsViewModel>> GetList()
{
return await _context.PaymentInstrumentGroups.AsNoTracking()
.Select(x => new PaymentInstrumentGroupsViewModel()
{
Name = x.Name,
Id = x.id
}).ToListAsync();
}
}

View File

@@ -0,0 +1,77 @@
using System.Linq;
using System.Threading.Tasks;
using _0_Framework.InfraStructure;
using Company.Domain.PaymentInstrumentAgg;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.EntityFrameworkCore;
namespace CompanyManagment.EFCore.Repository;
public class PaymentInstrumentRepository : RepositoryBase<long, PaymentInstrument>, IPaymentInstrumentRepository
{
private readonly CompanyContext _companyContext;
public PaymentInstrumentRepository(CompanyContext context) : base(context)
{
_companyContext = context;
}
public async Task<GetPaymentInstrumentListViewModel> GetList(PaymentInstrumentSearchModel searchModel)
{
var query = _companyContext.PaymentInstruments
.Include(x => x.PaymentInstrumentGroup)
.AsSplitQuery()
.AsNoTracking();
#region Search
if (!string.IsNullOrWhiteSpace(searchModel.AccountHolderName))
{
query = query.Where(x => x.AccountHolderName.Contains(searchModel.AccountHolderName));
}
if (!string.IsNullOrWhiteSpace(searchModel.AccountNumber))
{
query = query.Where(x => x.AccountNumber.Contains(searchModel.AccountNumber));
}
if (!string.IsNullOrWhiteSpace(searchModel.PosTerminalId))
{
query = query.Where(x => x.PosTerminalId.Contains(searchModel.PosTerminalId));
}
if (!string.IsNullOrWhiteSpace(searchModel.CardNumber))
{
query = query.Where(x => x.CardNumber.Contains(searchModel.CardNumber));
}
if (!string.IsNullOrWhiteSpace(searchModel.IBan))
{
query = query.Where(x => x.IBan.Contains(searchModel.IBan));
}
#endregion
var count = query.Count();
var list = new GetPaymentInstrumentListViewModel()
{
Count = count,
GropedViewModels = await query.GroupBy(x => x.PaymentInstrumentGroupId)
.Select(x => new PaymentInstrumentGroupedViewModel()
{
Name = x.First().PaymentInstrumentGroup.Name,
Items = x.Select(i => new PaymentInstrumentItemsViewModel()
{
Id = i.id,
Description = i.Description,
IBan = i.IBan,
PosTerminalId = i.PosTerminalId,
CardNumber = i.CardNumber,
AccountNumber = i.AccountNumber,
}).ToList()
}).ToListAsync()
};
return list;
}
}

View File

@@ -210,9 +210,11 @@ using CompanyManagment.App.Contracts.ContactUs;
using Company.Domain.EmployeeAuthorizeTempAgg;
using Company.Domain.AdminMonthlyOverviewAgg;
using Company.Domain.ContractingPartyBankAccountsAgg;
using Company.Domain.PaymentInstrumentAgg;
using Company.Domain.PaymentTransactionAgg;
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.App.Contracts.ContractingPartyBankAccounts;
using CompanyManagment.App.Contracts.PaymentInstrument;
using CompanyManagment.App.Contracts.PaymentTransaction;
namespace PersonalContractingParty.Config;
@@ -446,6 +448,11 @@ public class PersonalBootstrapper
services.AddTransient<IContractingPartyBankAccountsApplication, ContractingPartyBankAccountsApplication>();
services.AddTransient<IContractingPartyBankAccountsRepository, ContractingPartyBankAccountsRepository>();
services.AddTransient<IPaymentInstrumentRepository, PaymentInstrumentRepository>();
services.AddTransient<IPaymentInstrumentApplication, PaymentInstrumentApplication>();
services.AddTransient<IPaymentInstrumentGroupRepository, PaymentInstrumentGroupRepository>();
#endregion
#region Pooya

View File

@@ -0,0 +1,95 @@
using _0_Framework.Application;
using CompanyManagment.App.Contracts.PaymentInstrument;
using Microsoft.AspNetCore.Mvc;
using ServiceHost.BaseControllers;
namespace ServiceHost.Areas.Admin.Controllers;
public class PaymentInstrumentController:AdminBaseController
{
private readonly IPaymentInstrumentApplication _paymentInstrumentApplication;
public PaymentInstrumentController(IPaymentInstrumentApplication paymentInstrumentApplication)
{
_paymentInstrumentApplication = paymentInstrumentApplication;
}
/// <summary>
///لیست اطلاعات بانکی جاری شرکا
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
[HttpGet]
public async Task<ActionResult<GetPaymentInstrumentListViewModel>> List(PaymentInstrumentSearchModel searchModel)
{
var list =await _paymentInstrumentApplication.GetList(searchModel);
return list;
}
/// <summary>
/// ایجاد اطلاعات بانکی
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("bankAccount")]
public async Task<ActionResult<OperationResult>> CreateBankAccount([FromBody] CreateBankPaymentInstrument command)
{
var result = await _paymentInstrumentApplication.CreateBankAccount(command);
return result;
}
/// <summary>
/// ایجاد اطلاعات دستگاه پوز
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("pos")]
public async Task<ActionResult<OperationResult>> CreatePos([FromBody]CreatePosPaymentInstrument command)
{
var result =await _paymentInstrumentApplication.CreatePos(command);
return result;
}
/// <summary>
/// گرفتن عنوان ها
/// </summary>
/// <returns></returns>
[HttpGet("group")]
public async Task<ActionResult<List<PaymentInstrumentGroupsViewModel>>> GetGroups()
{
var result = await _paymentInstrumentApplication.GetGroup();
return result;
}
/// <summary>
/// ایجاد عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPost("group")]
public async Task<ActionResult<OperationResult>> CreateGroup([FromBody]CreateBankPaymentInstrumentGroup command)
{
var result = await _paymentInstrumentApplication.CreateGroup(command);
return result;
}
/// <summary>
/// ویرایش عنوان
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
[HttpPut("group")]
public async Task<ActionResult<OperationResult>> EditGroup([FromBody]EditBankPaymentInstrumentGroup command)
{
var result = await _paymentInstrumentApplication.EditGroup(command);
return result;
}
/// <summary>
/// حذف عنوان
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("group/{id}")]
public async Task<ActionResult<OperationResult>> DeleteGroup(long id)
{
var result = await _paymentInstrumentApplication.DeleteGroup(id);
return result;
}
}