diff --git a/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs b/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs
new file mode 100644
index 00000000..b847d2e0
--- /dev/null
+++ b/Company.Domain/InstitutionContractSendFlagAgg/IInstitutionContractSendFlagRepository.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Company.Domain.InstitutionContractSendFlagAgg;
+
+///
+/// Interface برای Repository مربوط به فلگ ارسال قرارداد
+///
+public interface IInstitutionContractSendFlagRepository
+{
+ ///
+ /// ایجاد یک رکورد جدید برای فلگ ارسال قرارداد
+ ///
+ Task Create(InstitutionContractSendFlag flag);
+
+ ///
+ /// بازیابی فلگ بر اساس شناسه قرارداد
+ ///
+ Task GetByContractId(long contractId);
+
+ ///
+ /// بهروزرسانی فلگ ارسال
+ ///
+ Task Update(InstitutionContractSendFlag flag);
+
+ ///
+ /// بررسی اینکه آیا قرارداد ارسال شده است
+ ///
+ Task IsContractSent(long contractId);
+
+
+}
+
diff --git a/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs
new file mode 100644
index 00000000..2b3a7137
--- /dev/null
+++ b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs
@@ -0,0 +1,82 @@
+using System;
+using MongoDB.Bson;
+using MongoDB.Bson.Serialization.Attributes;
+
+namespace Company.Domain.InstitutionContractSendFlagAgg;
+
+///
+/// نمایندگی فلگ ارسال قرارداد در MongoDB
+/// این موجودیت برای ردیابی اینکه آیا قرارداد ارسال شده است استفاده میشود
+///
+public class InstitutionContractSendFlag
+{
+ public InstitutionContractSendFlag(long institutionContractId,bool isSent)
+ {
+ Id = Guid.NewGuid();
+ InstitutionContractId = institutionContractId;
+ IsSent = isSent;
+ CreatedDate = DateTime.Now;
+ }
+
+ ///
+ /// شناسه یکتای MongoDB
+ ///
+ [BsonId]
+ [BsonRepresentation(BsonType.String)]
+ public Guid Id { get; set; }
+
+ ///
+ /// شناسه قرارداد در SQL
+ ///
+ public long InstitutionContractId { get; set; }
+
+ ///
+ /// آیا قرارداد ارسال شده است
+ ///
+ public bool IsSent { get; set; }
+
+ ///
+ /// تاریخ و زمان ارسال
+ ///
+ public DateTime? SentDate { get; set; }
+
+ ///
+ /// تاریخ و زمان ایجاد رکورد
+ ///
+ public DateTime CreatedDate { get; set; }
+
+ ///
+ /// تاریخ و زمان آخرین بهروزرسانی
+ ///
+ public DateTime? LastModifiedDate { get; set; }
+
+
+ ///
+ /// علامتگذاری قرارداد به عنوان ارسالشده
+ ///
+ public void MarkAsSent()
+ {
+ IsSent = true;
+ SentDate = DateTime.Now;
+ LastModifiedDate = DateTime.Now;
+ }
+
+ ///
+ /// بازگردانی علامت ارسال
+ ///
+ public void MarkAsNotSent()
+ {
+ IsSent = false;
+ SentDate = null;
+ LastModifiedDate = DateTime.Now;
+ }
+
+ ///
+ /// بهروزرسانی علامت آخری اصلاح
+ ///
+ public void UpdateLastModified()
+ {
+ LastModifiedDate = DateTime.Now;
+ }
+}
+
diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs
new file mode 100644
index 00000000..ccc45260
--- /dev/null
+++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractSendFlagRepo/InstitutionContractSendFlagRepository.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Company.Domain.InstitutionContractSendFlagAgg;
+using MongoDB.Driver;
+
+namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo;
+
+///
+/// Repository برای مدیریت فلگ ارسال قرارداد در MongoDB
+///
+public class InstitutionContractSendFlagRepository : IInstitutionContractSendFlagRepository
+{
+ private readonly IMongoCollection _collection;
+
+ public InstitutionContractSendFlagRepository(IMongoDatabase database)
+ {
+ _collection = database.GetCollection("InstitutionContractSendFlag");
+ }
+
+ public async Task Create(InstitutionContractSendFlag flag)
+ {
+ await _collection.InsertOneAsync(flag);
+ }
+
+ public async Task GetByContractId(long contractId)
+ {
+ var filter = Builders.Filter
+ .Eq(x => x.InstitutionContractId, contractId);
+
+ return await _collection.Find(filter).FirstOrDefaultAsync();
+ }
+
+
+ public async Task Update(InstitutionContractSendFlag flag)
+ {
+ var filter = Builders.Filter
+ .Eq(x => x.InstitutionContractId, flag.InstitutionContractId);
+
+ await _collection.ReplaceOneAsync(filter, flag);
+ }
+
+ public async Task IsContractSent(long contractId)
+ {
+ var flag = await GetByContractId(contractId);
+ return flag != null && flag.IsSent;
+ }
+
+ public async Task Remove(long contractId)
+ {
+ var filter = Builders.Filter
+ .Eq(x => x.InstitutionContractId, contractId);
+
+ await _collection.DeleteOneAsync(filter);
+ }
+
+}
+
diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs
index cb346dc3..2dea59c0 100644
--- a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs
+++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs
@@ -99,6 +99,8 @@ public class GetInstitutionContractListItemsViewModel
/// مبلغ قسط
///
public double InstallmentAmount { get; set; }
+
+ public bool InstitutionContractIsSentFlag { get; set; }
}
public class InstitutionContractListWorkshop
diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs
index b747183f..f8aa2fc5 100644
--- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs
+++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs
@@ -148,7 +148,7 @@ public interface IInstitutionContractApplication
/// شناسه قرارداد
/// نتیجه عملیات
OperationResult UnSign(long id);
-
+
///
/// ایجاد حساب کاربری برای طرف قرارداد
///
@@ -308,6 +308,14 @@ public interface IInstitutionContractApplication
Task SetDiscountForCreation(InstitutionContractSetDiscountForCreationRequest request);
Task ResetDiscountForCreation(InstitutionContractResetDiscountForExtensionRequest request);
Task CreationComplete(InstitutionContractExtensionCompleteRequest request);
+
+ ///
+ /// تعیین فلگ ارسال قرارداد در MongoDB
+ /// اگر فلگ وجود نداشتند ایجاد میکند
+ ///
+ /// درخواست تعیین فلگ
+ /// نتیجه عملیات
+ Task SetContractSendFlag(SetInstitutionContractSendFlagRequest request);
}
public class CreationSetContractingPartyResponse
diff --git a/CompanyManagment.App.Contracts/InstitutionContract/SetInstitutionContractSendFlagRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/SetInstitutionContractSendFlagRequest.cs
new file mode 100644
index 00000000..e19bacf5
--- /dev/null
+++ b/CompanyManagment.App.Contracts/InstitutionContract/SetInstitutionContractSendFlagRequest.cs
@@ -0,0 +1,19 @@
+namespace CompanyManagment.App.Contracts.InstitutionContract;
+
+///
+/// درخواست برای تعیین فلگ ارسال قرارداد
+///
+public class SetInstitutionContractSendFlagRequest
+{
+ ///
+ /// شناسه قرارداد
+ ///
+ public long InstitutionContractId { get; set; }
+
+ ///
+ /// آیا قرارداد ارسال شده است
+ ///
+ public bool IsSent { get; set; }
+
+}
+
diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs
index fa925516..81e7283f 100644
--- a/CompanyManagment.Application/InstitutionContractApplication.cs
+++ b/CompanyManagment.Application/InstitutionContractApplication.cs
@@ -19,6 +19,7 @@ using Company.Domain.PaymentTransactionAgg;
using Company.Domain.RepresentativeAgg;
using Company.Domain.RollCallServiceAgg;
using Company.Domain.WorkshopAgg;
+using Company.Domain.InstitutionContractSendFlagAgg;
using CompanyManagment.App.Contracts.FinancialInvoice;
using CompanyManagment.App.Contracts.FinancialStatment;
using CompanyManagment.App.Contracts.InstitutionContract;
@@ -51,6 +52,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
private readonly IPaymentTransactionRepository _paymentTransactionRepository;
private readonly IRollCallServiceRepository _rollCallServiceRepository;
private readonly ISepehrPaymentGatewayService _sepehrPaymentGatewayService;
+ private readonly IInstitutionContractSendFlagRepository _institutionContractSendFlagRepository;
public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository,
@@ -62,7 +64,8 @@ public class InstitutionContractApplication : IInstitutionContractApplication
IAccountApplication accountApplication, ISmsService smsService,
IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory,
IPaymentTransactionRepository paymentTransactionRepository, IRollCallServiceRepository rollCallServiceRepository,
- ISepehrPaymentGatewayService sepehrPaymentGatewayService,ILogger sepehrGatewayLogger)
+ ISepehrPaymentGatewayService sepehrPaymentGatewayService,ILogger sepehrGatewayLogger,
+ IInstitutionContractSendFlagRepository institutionContractSendFlagRepository)
{
_institutionContractRepository = institutionContractRepository;
_contractingPartyRepository = contractingPartyRepository;
@@ -80,6 +83,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
_rollCallServiceRepository = rollCallServiceRepository;
_sepehrPaymentGatewayService = sepehrPaymentGatewayService;
_paymentGateway = new SepehrPaymentGateway(httpClientFactory,sepehrGatewayLogger);
+ _institutionContractSendFlagRepository = institutionContractSendFlagRepository;
}
public OperationResult Create(CreateInstitutionContract command)
@@ -894,6 +898,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return opration.Succcedded();
}
+
public void CreateContractingPartyAccount(long contractingPartyid, long accountId)
{
_institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId);
@@ -1836,7 +1841,60 @@ public class InstitutionContractApplication : IInstitutionContractApplication
installments.Add(lastInstallment);
return installments;
}
+
+
}
+ ///
+ /// تعیین فلگ ارسال قرارداد
+ /// اگر فلگ وجود نداشتند ایجاد میکند
+ ///
+ public async Task SetContractSendFlag(SetInstitutionContractSendFlagRequest request)
+ {
+ var operationResult = new OperationResult();
+
+ try
+ {
+ // بازیابی قرارداد از SQL
+ var contract = _institutionContractRepository.Get(request.InstitutionContractId);
+ if (contract == null)
+ return operationResult.Failed("قرارداد مورد نظر یافت نشد");
+
+ // بررسی اینکه آیا فلگ در MongoDB وجود دارد
+ var existingFlag = await _institutionContractSendFlagRepository
+ .GetByContractId(request.InstitutionContractId);
+
+ if (existingFlag != null)
+ {
+ // اگر فلگ وجود داشتند، آن را اپدیت کنیم
+ if (request.IsSent)
+ {
+ existingFlag.MarkAsSent();
+ }
+ else
+ {
+ existingFlag.MarkAsNotSent();
+ }
+ existingFlag.UpdateLastModified();
+ await _institutionContractSendFlagRepository.Update(existingFlag);
+ }
+ else
+ {
+ // اگر فلگ وجود ندارد، آن را ایجاد کنیم
+ var newFlag = new InstitutionContractSendFlag(
+ request.InstitutionContractId,
+ request.IsSent
+ );
+
+ await _institutionContractSendFlagRepository.Create(newFlag);
+ }
+
+ return operationResult.Succcedded();
+ }
+ catch (Exception ex)
+ {
+ return operationResult.Failed($"خطا در تعیین فلگ ارسال: {ex.Message}");
+ }
+ }
}
#region CustomViewModels
diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
index dfeb033d..406ed056 100644
--- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
+++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs
@@ -11,6 +11,7 @@ using Company.Domain.InstitutionContractAgg;
using Company.Domain.InstitutionContractAmendmentTempAgg;
using Company.Domain.InstitutionContractContactInfoAgg;
using Company.Domain.InstitutionContractExtensionTempAgg;
+using Company.Domain.InstitutionContractSendFlagAgg;
using Company.Domain.InstitutionPlanAgg;
using Company.Domain.SmsResultAgg;
using Company.Domain.WorkshopAgg;
@@ -42,6 +43,7 @@ using AccountManagement.Application.Contracts.Account;
using Company.Domain.InstitutionContractCreationTempAgg;
using Company.Domain.RepresentativeAgg;
using Company.Domain.TemporaryClientRegistrationAgg;
+using Company.Domain.InstitutionContractSendFlagAgg;
using ContractingPartyAccount = Company.Domain.ContractingPartyAccountAgg.ContractingPartyAccount;
using FinancialStatment = Company.Domain.FinancialStatmentAgg.FinancialStatment;
using String = System.String;
@@ -57,6 +59,7 @@ public class InstitutionContractRepository : RepositoryBase _institutionExtensionTemp;
private readonly IMongoCollection _institutionAmendmentTemp;
private readonly IMongoCollection _institutionContractCreationTemp;
+ private readonly IMongoCollection _institutionContractSendFlag;
private readonly IPlanPercentageRepository _planPercentageRepository;
private readonly ISmsService _smsService;
private readonly ISmsResultRepository _smsResultRepository;
@@ -114,6 +117,8 @@ public class InstitutionContractRepository : RepositoryBase("InstitutionContractAmendmentTemp");
_institutionContractCreationTemp =
database.GetCollection("InstitutionContractCreationTemp");
+ _institutionContractSendFlag =
+ database.GetCollection("InstitutionContractSendFlag");
}
public EditInstitutionContract GetDetails(long id)
@@ -1353,6 +1358,12 @@ public class InstitutionContractRepository : RepositoryBase contractIds.Contains(x.InstitutionContractId))
.ToDictionaryAsync(x => x.InstitutionContractId, x => x);
+ // بارگذاری وضعیت ارسال قراردادها از MongoDB - کوئری مستقیم
+ var filter = Builders.Filter
+ .In(x => x.InstitutionContractId, contractIds);
+ var sendFlagsList = await _institutionContractSendFlag.Find(filter).ToListAsync();
+ var sendFlags = sendFlagsList.ToDictionary(x => x.InstitutionContractId, x => x.IsSent);
+
var financialStatements = _context.FinancialStatments.Include(x => x.FinancialTransactionList)
.Where(x => contractingPartyIds.Contains(x.ContractingPartyId)).ToList();
var res = new PagedResult()
@@ -1465,7 +1476,8 @@ public class InstitutionContractRepository : RepositoryBase y.Services.ContractInPerson) ?? true,
- IsOldContract = x.contract.SigningType == InstitutionContractSigningType.Legacy
+ IsOldContract = x.contract.SigningType == InstitutionContractSigningType.Legacy,
+ InstitutionContractIsSentFlag = sendFlags.ContainsKey(x.contract.id) ? sendFlags[x.contract.id] : false
};
}).ToList()
};
diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs
index 840f8faf..69a4f60d 100644
--- a/PersonalContractingParty.Config/PersonalBootstrapper.cs
+++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs
@@ -61,6 +61,7 @@ using Company.Domain.HolidayItemAgg;
using Company.Domain.InstitutionContractAgg;
using Company.Domain.InstitutionContractContactInfoAgg;
using Company.Domain.InstitutionContractExtensionTempAgg;
+using Company.Domain.InstitutionContractSendFlagAgg;
using Company.Domain.InstitutionPlanAgg;
using Company.Domain.InsuranceAgg;
using Company.Domain.InsuranceEmployeeInfoAgg;
@@ -123,6 +124,7 @@ using Company.Domain.ZoneAgg;
using CompanyManagement.Infrastructure.Excel.SalaryAid;
using CompanyManagement.Infrastructure.Mongo.EmployeeFaceEmbeddingRepo;
using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo;
+using CompanyManagement.Infrastructure.Mongo.InstitutionContractSendFlagRepo;
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.App.Contracts.AndroidApkVersion;
using CompanyManagment.App.Contracts.AuthorizedPerson;
@@ -795,6 +797,9 @@ public class PersonalBootstrapper
services.AddTransient();
services.AddTransient(); // MongoDB Implementation
+ // InstitutionContractSendFlag - MongoDB
+ services.AddTransient();
+
services.AddDbContext(x => x.UseSqlServer(connectionString));
}
}
\ No newline at end of file
diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs
index 62535914..c5613422 100644
--- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs
+++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs
@@ -955,6 +955,17 @@ public class institutionContractController : AdminBaseController
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"قرارداد های مالی.xlsx");
}
+
+ ///
+ /// تنظیم وضعیت ارسال قرارداد
+ ///
+ [HttpPost("set-is-sent")]
+ public async Task> SetIsSent([FromBody] SetInstitutionContractSendFlagRequest request)
+ {
+ var result = await _institutionContractApplication.SetContractSendFlag(request);
+ return result;
+ }
+
}
public class InstitutionContractCreationGetRepresentativeIdResponse
@@ -1008,4 +1019,4 @@ public class VerifyCodeRequest
{
public long ContractingPartyId { get; set; }
public string verifyCode { get; set; }
-}
\ No newline at end of file
+}