From dd7e816767e05abf14f0200598e03842a96f89d4 Mon Sep 17 00:00:00 2001 From: mahan Date: Wed, 7 Jan 2026 14:46:34 +0330 Subject: [PATCH] feat: add SetContractSendFlag method and related request for contract send tracking --- .../InstitutionContractSendFlag.cs | 2 +- .../IInstitutionContractApplication.cs | 8 +++ .../SetInstitutionContractSendFlagRequest.cs | 19 ++++++ .../InstitutionContractApplication.cs | 59 ++++++++++++++++++- 4 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 CompanyManagment.App.Contracts/InstitutionContract/SetInstitutionContractSendFlagRequest.cs diff --git a/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs index 20d951a0..2b3a7137 100644 --- a/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs +++ b/Company.Domain/InstitutionContractSendFlagAgg/InstitutionContractSendFlag.cs @@ -54,7 +54,7 @@ public class InstitutionContractSendFlag /// /// علامت‌گذاری قرارداد به عنوان ارسال‌شده /// - public void MarkAsSent(string reason = null) + public void MarkAsSent() { IsSent = true; SentDate = DateTime.Now; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 10266d6c..dc8edb1e 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -305,6 +305,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 5790aaee..94da79fc 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) @@ -1820,7 +1824,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