diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index d900c8bb..0a4ff75a 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -56,4 +56,5 @@ public interface IInstitutionContractRepository : IRepository GetByPublicIdAsync(Guid id); Task GetExtenstionInquiry(long previousContractId); Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); + Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 3e7803d3..d8e8dec9 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -221,17 +221,17 @@ public interface IInstitutionContractApplication Task GetWorkshopInitialDetails(long workshopDetailsId); Task GetExtenstionInquiry(long previousContractId); Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); + Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request); - //Task<> - - //TODO:Calculate one workshop //TODO:Calculate total InstitutionContract Amount //TODO:calculate Payment method //TODO:Complete Data. - - + + } + + public class InstitutionContractExtensionWorkshopsRequest { public Guid TempId { get; set; } @@ -245,4 +245,10 @@ public class InstitutionContractExtensionWorkshopsResponse { public List WorkshopTemps { get; set; } public string TotalAmount { get; set; } +} +public class InstitutionContractExtensionPlanRequest +{ + public List WorkshopTemps { get; set; } + public string TotalAmount { get; set; } + public Guid TempId { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs index a30c8274..b11bcbf8 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs @@ -23,4 +23,5 @@ public class InstitutionContractExtensionInquiryResult public string City { get; set; } public string Province { get; set; } public List ContactInfoViewModels { get; set; } + public long RepresentativeId { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPlanResponse.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPlanResponse.cs new file mode 100644 index 00000000..dcdff4ca --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPlanResponse.cs @@ -0,0 +1,20 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionPlanResponse +{ + public InstitutionContractExtensionPlanDetail OneMonth { get; set; } + public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; } + public InstitutionContractExtensionPlanDetail SixMonths { get; set; } + public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; } +} +public class InstitutionContractExtensionPlanDetail +{ + public string ContractStart { get; set; } + public string ContractEnd { get; set; } + public string OneMonthPaymentDiscounted { get; set; } + public string OneMonthDiscount { get; set; } + public string OneMonthOriginalPayment { get; set; } + public string TotalPayment { get; set; } + public string DailyCompenseation { get; set; } + public string Obligation { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 470069f9..62e8b50b 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1282,6 +1282,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication return await _institutionContractRepository.GetExtenstionWorkshops(request); } + public async Task GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request) + { + return await _institutionContractRepository.GetExtenstionInstitutionPlan(request); + } + private async Task> CreateLegalContractingPartyEntity( CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, string state) diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 09a4d893..5f18b1a6 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -1894,7 +1894,9 @@ public class InstitutionContractRepository : RepositoryBase GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request) + { + if (request.WorkshopTemps.Count == 0) + throw new BadRequestException("هیچ کارگاهی یافت نشد"); + + bool hasInPerson = request.WorkshopTemps.Any(x => x.ContractAndCheckoutInPerson); + double amount = request.TotalAmount.MoneyToDouble(); + + var institutionTemp =await _institutionExtensionTemp.Find(x => x.Id == request.TempId).FirstOrDefaultAsync(); + + var previousInstitution =await _context.InstitutionContractSet.FirstOrDefaultAsync(x=>x.id == institutionTemp.PreviousId); + + var res = new InstitutionContractExtensionPlanResponse(); + + var newContractStart = previousInstitution.ContractEndGr; + if (hasInPerson) + { + res.OneMonth = null; + + res.ThreeMonths = null; + + res.SixMonths = null; + + res.TwelveMonths = CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths,amount, true,newContractStart); + } + else + { + res.OneMonth= CalculateInstitutionPlan(InstitutionContractDuration.OneMonth,amount,false,newContractStart); + + res.ThreeMonths= CalculateInstitutionPlan(InstitutionContractDuration.ThreeMonths,amount,false,newContractStart); + + res.SixMonths= CalculateInstitutionPlan(InstitutionContractDuration.SixMonths,amount,false,newContractStart); + + res.TwelveMonths= CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths,amount,false,newContractStart); + } + return res; + + } + + private InstitutionContractExtensionPlanDetail CalculateInstitutionPlan(InstitutionContractDuration duration,double amount, + bool hasInPersonContract,DateTime contractStart) + { + var result = new InstitutionContractExtensionPlanDetail(); + var months = (int)duration; + //بدست آوردن جمع کل مبالغ کارگاه بر اساس مدت قراداد + var totalPrice = months * amount; + + var contractStartFa = contractStart.ToFarsi(); + + var findeEnd = Tools.FindEndOfContract(contractStartFa, ((int)duration).ToString()); + + var contractEndDate = findeEnd.endDateGr; + + result.ContractEnd = contractEndDate.ToFarsi(); + result.ContractStart =contractStartFa; + + result.Obligation = totalPrice.ToMoney(); + result.DailyCompenseation = ((amount * 10) / 100).ToMoney(); + + + if (hasInPersonContract) + { + result.OneMonthDiscount = "0"; + result.OneMonthOriginalPayment = totalPrice.ToMoney(); + result.OneMonthPaymentDiscounted = totalPrice.ToMoney(); + } + else + { + var discount = duration switch + { + InstitutionContractDuration.OneMonth => 0, + InstitutionContractDuration.ThreeMonths => 5, + InstitutionContractDuration.SixMonths => 10, + InstitutionContractDuration.TwelveMonths => 15, + _ => throw new ArgumentOutOfRangeException(nameof(duration), duration, null) + }; + var oneMonthDiscountAmount = (amount * discount) / 100; + var oneMonthDiscountedPayment = amount - oneMonthDiscountAmount; + var totalDiscount = oneMonthDiscountAmount * months; + var discountedPayment = totalPrice - totalDiscount; + result.OneMonthDiscount = oneMonthDiscountAmount.ToMoney(); + result.OneMonthPaymentDiscounted = oneMonthDiscountedPayment.ToMoney(); + result.TotalPayment = discountedPayment.ToMoney(); + + } + return result; + + } + #endregion diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 4597cf9e..0e1281e1 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -749,16 +749,16 @@ public class institutionContractController : AdminBaseController [HttpPost("extenstion/workshops")] public async Task> GetExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) { - InstitutionContractExtensionWorkshopsResponse res =await _institutionContractApplication.GetExtenstionWorkshops(request); + var res =await _institutionContractApplication.GetExtenstionWorkshops(request); return res; } - // [HttpPost("extenstion/institution-plan")] - // public async Task> GetExtenstionInstitutionPlan() - // { - // var res =await _institutionContractApplication.; - // return res; - // } + [HttpPost("extenstion/institution-plan")] + public async Task> GetExtenstionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request) + { + var res =await _institutionContractApplication.GetExtenstionInstitutionPlan(request); + return res; + } }