diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index b861f758..7157b669 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -56,6 +56,7 @@ public interface IInstitutionContractRepository : IRepository GetVerificationDetails(Guid id); Task GetByPublicIdAsync(Guid id); InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request); + InstitutionContractExtensionPaymentResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request); #region Extension @@ -65,6 +66,8 @@ public interface IInstitutionContractRepository : IRepository GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request); Task SetDiscountForExtension(InstitutionContractSetDiscountForExtensionRequest request); + Task ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request); + Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); #endregion diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 4f051177..1cb06890 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -215,7 +215,9 @@ public interface IInstitutionContractApplication Task> SendVerifyOtp(Guid id); Task> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl); Task GetWorkshopInitialDetails(long workshopDetailsId); - + InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request); + InstitutionContractExtensionPaymentResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request); + #region Extension Task GetExtensionInquiry(long previousContractId); @@ -231,6 +233,7 @@ public interface IInstitutionContractApplication Task SetDiscountForExtension( InstitutionContractSetDiscountForExtensionRequest request); + Task> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request); Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); @@ -262,7 +265,15 @@ public interface IInstitutionContractApplication Task GetAmendmentVerificationDetails(Guid id, long amendmentId); Task GetIdByInstallmentId(long installmentId); - + +} + +public class InstitutionContractResetDiscountForCreateRequest +{ + public int Percentage { get; set; } + public double PaymentAmount { get; set; } + public bool IsInstallment { get; set; } + public InstitutionContractDuration Duration { get; set; } } public class GetInstitutionAmendmentVerificationDetailsViewModel @@ -290,6 +301,12 @@ public class InstitutionContractSetDiscountForExtensionRequest public double PaymentAmount { get; set; } public bool IsInstallment { get; set; } } +public class InstitutionContractResetDiscountForExtensionRequest +{ + public Guid TempId { get; set; } + public bool IsInstallment { get; set; } +} + public class InstitutionContractSetDiscountRequest { diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 745b3346..2911685e 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1423,6 +1423,17 @@ public class InstitutionContractApplication : IInstitutionContractApplication return res; } + public InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request) + { + return _institutionContractRepository.CalculateDiscount(request); + } + + public InstitutionContractExtensionPaymentResponse ResetDiscountCreate( + InstitutionContractResetDiscountForCreateRequest request) + { + return _institutionContractRepository.ResetDiscountCreate(request); + } + public async Task GetExtensionInquiry(long previousContractId) { return await _institutionContractRepository.GetExtensionInquiry(previousContractId); @@ -1451,7 +1462,12 @@ public class InstitutionContractApplication : IInstitutionContractApplication { return await _institutionContractRepository.SetDiscountForExtension(request); } - + + public async Task> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request) + { + return await _institutionContractRepository.ResetDiscountForExtension(request); + } + public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) { return await _institutionContractRepository.ExtensionComplete(request); diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 725fc618..d2a5bad8 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -1918,6 +1918,50 @@ public class InstitutionContractRepository : RepositoryBase GetExtensionInquiry(long previousContractId) @@ -2272,11 +2316,71 @@ public class InstitutionContractRepository : RepositoryBase ResetDiscountForExtension + (InstitutionContractResetDiscountForExtensionRequest request) + { + var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId) + .FirstOrDefaultAsync(); + if (institutionTemp == null) + { + throw new BadRequestException("اطلاعات وارد شده نامعتبر است"); + } + + InstitutionContractPaymentMonthlyViewModel monthlyPayment = null; + InstitutionContractPaymentOneTimeViewModel oneTimePayment = null; + if (request.IsInstallment) + { + var prevMonthlyPayment = institutionTemp.MonthlyPayment; + var resetPaymentAmount = prevMonthlyPayment.PaymentAmount.MoneyToDouble() / (1 - (prevMonthlyPayment.DiscountPercetage / 100.0)); + var resetTax = (resetPaymentAmount * 0.10); + var totalAmount = (resetPaymentAmount + resetTax); + monthlyPayment = new InstitutionContractPaymentMonthlyViewModel() + { + DiscountPercetage = 0, + DiscountedAmount = "0", + PaymentAmount = resetPaymentAmount.ToMoney(), + Tax = resetTax.ToMoney(), + TotalAmount = totalAmount.ToMoney(), + Installments = InstitutionMonthlyInstallmentCaculation((int)institutionTemp.Duration.Value, + totalAmount, DateTime.Now.ToFarsi()), + }; + institutionTemp.MonthlyPayment = monthlyPayment; + await _institutionExtensionTemp.ReplaceOneAsync(x=>x.Id == institutionTemp.Id, + institutionTemp); + + } + else + { + var prevOneTimePayment = institutionTemp.OneTimePayment; + var resetPaymentAmount = prevOneTimePayment.PaymentAmount.MoneyToDouble() / + (1 - (prevOneTimePayment.DiscountPercetage / 100.0)); + var resetTax = (resetPaymentAmount * 0.10); + oneTimePayment = new InstitutionContractPaymentOneTimeViewModel() + { + DiscountPercetage = 0, + DiscountedAmount = "0", + PaymentAmount = resetPaymentAmount.ToMoney(), + Tax = resetTax.ToMoney(), + TotalAmount = (resetPaymentAmount + resetTax).ToMoney(), + }; + institutionTemp.OneTimePayment = oneTimePayment; + await _institutionExtensionTemp.ReplaceOneAsync(x=>x.Id == institutionTemp.Id, + institutionTemp); + } + + return new() + { + OneTime = oneTimePayment, + Monthly = monthlyPayment + }; + + } + public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) { var institutionContractTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TemporaryId) diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 413927a6..60c54228 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -458,8 +458,19 @@ public class institutionContractController : AdminBaseController return operationResult; } - - + [HttpPost("create/set-discount")] + public ActionResult SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request) + { + var res = _institutionContractApplication.CalculateDiscount(request); + return res; + } + + [HttpPost("create/reset-discount")] + public ActionResult ResetDiscountForCreate(InstitutionContractResetDiscountForCreateRequest request) + { + var res = _institutionContractApplication.ResetDiscountCreate(request); + return res; + } /// /// /// @@ -560,6 +571,12 @@ public class institutionContractController : AdminBaseController return res; } + [HttpPost("extension/reset-discount")] + public async Task> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request) + { + var res =await _institutionContractApplication.ResetDiscountForExtension(request); + return res; + } [HttpPost("extenstion/complete")] public async Task> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request) {