From 8b39eed7bb4a9ebd4d3ce671a7cd5ee34fb82f67 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 18 Nov 2025 14:53:08 +0330 Subject: [PATCH] Add workshop total amount details: include price properties in InstitutionContract and implement GetContractWorkshopsDetails method --- .../IInstitutionContractRepository.cs | 1 + ...etInstitutionContractListItemsViewModel.cs | 22 ++++++-- .../IInstitutionContractApplication.cs | 9 +++ .../InstitutionContractApplication.cs | 5 ++ .../InstitutionContractRepository.cs | 55 +++++++++++++++++++ .../institutionContractController.cs | 6 ++ 6 files changed, 93 insertions(+), 5 deletions(-) diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index 3a91fcdf..e3a439f6 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -77,4 +77,5 @@ public interface IInstitutionContractRepository : IRepository> GetInstitutionContractSelectList(string search, string selected); Task> PrintAllAsync(List ids); + Task GetContractWorkshopsDetails(long id); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs index 3e0a38f0..7cd81760 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs @@ -1,4 +1,7 @@ using System.Collections.Generic; +using System.Security.AccessControl; +using CompanyManagment.App.Contracts.Workshop; +using Microsoft.AspNetCore.Server.HttpSys; namespace CompanyManagment.App.Contracts.InstitutionContract; @@ -105,22 +108,31 @@ public class WorkshopServicesViewModel { public bool Insurance { get; set; } public string InsuranceLabel => "ارسال لیست بیمه"; + public string InsurancePrice { get; set; } public bool InsuranceInPerson { get; set; } public string InsuranceInPersonLabel => "خدمات مستقیم"; - + public string InsuranceInPersonPrice { get; set; } + + public bool Contract { get; set; } public string ContractLabel => "قرارداد و تصفیه حساب"; - + public string ContractPrice { get; set; } + + public bool ContractInPerson { get; set; } public string ContractInPersonLabel => "خدمات مستقیم"; - + public string ContractInPersonPrice { get; set; } + public bool RollCall { get; set; } public string RollCallLabel => "ساعت حضور و غیاب"; - + public string RollCallPrice { get; set; } + public bool RollCallInPerson { get; set; } public string RollCallInPersonLabel => "خدمات مستقیم"; - + public string RollCallInPersonPrice { get; set; } + public bool CustomizeCheckout { get; set; } public string CustomizeCheckoutLabel => "فیش غیر رسمی"; + public string CustomizeCheckoutPrice { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 92463672..637a2a02 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -251,8 +251,17 @@ public interface IInstitutionContractApplication /// /// Task PrintOneAsync(long id); + + Task GetContractWorkshopsDetails(long id); } +public class GetInstitutionContractWorkshopsDetails +{ + public List Workshops { get; set; } + +} + + public class InstitutionContractPrintViewModel { public InstitutionContratVerificationParty FirstParty { get; set; } diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 85504468..fb955cee 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1387,6 +1387,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication return (await _institutionContractRepository.PrintAllAsync([id])).FirstOrDefault(); } + public Task GetContractWorkshopsDetails(long id) + { + return _institutionContractRepository.GetContractWorkshopsDetails(id); + } + private async Task> CreateLegalContractingPartyEntity( CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index d7cd7d2f..c2d1ca32 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -2771,6 +2771,61 @@ public class InstitutionContractRepository : RepositoryBase GetContractWorkshopsDetails(long id) + { + var institutionContract = await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(x => x.InitialWorkshops) + .FirstOrDefaultAsync(x => x.id == id); + if (institutionContract == null) + throw new NotFoundException("قرارداد مؤسسه یافت نشد"); + + var workshops = institutionContract.WorkshopGroup.InitialWorkshops + .Select(x => + { + var plan = _planPercentageRepository.GetInstitutionPlanForWorkshop(new WorkshopTempViewModel() + { + CountPerson = x.PersonnelCount, + ContractAndCheckout = x.Services.Contract, + ContractAndCheckoutInPerson = x.Services.ContractInPerson, + Insurance = x.Services.Insurance, + InsuranceInPerson = x.Services.InsuranceInPerson, + RollCall = x.Services.RollCall, + RollCallInPerson = x.Services.RollCallInPerson, + CustomizeCheckout = x.Services.CustomizeCheckout, + }); + + return new InstitutionContractListWorkshop() + { + EmployeeCount = x.PersonnelCount, + Price = x.Price.ToMoney(), + WorkshopName = x.WorkshopName, + WorkshopServices = new WorkshopServicesViewModel() + { + Contract = x.Services.Contract, + ContractPrice =plan.ContractAndCheckout , + ContractInPerson = x.Services.ContractInPerson, + ContractInPersonPrice = plan.ContractAndCheckoutInPerson, + CustomizeCheckout = x.Services.CustomizeCheckout, + CustomizeCheckoutPrice = plan.CustomizeCheckout, + Insurance = x.Services.Insurance, + InsurancePrice =plan.Insurance , + InsuranceInPerson = x.Services.InsuranceInPerson, + InsuranceInPersonPrice = plan.InsuranceInPerson, + RollCall = x.Services.RollCall, + RollCallPrice =plan.RollCall , + RollCallInPerson = x.Services.RollCallInPerson, + RollCallInPersonPrice = "0", + } + }; + }).ToList(); + return new GetInstitutionContractWorkshopsDetails() + { + Workshops = workshops + }; + + } + private InstitutionContractExtensionPaymentResponse CalculateInPersonPayment( InstitutionContractExtensionPlanDetail selectedPlan, double baseAmount, double tenPercent, diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index a1087f28..181a99cf 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -88,6 +88,11 @@ public class institutionContractController : AdminBaseController return await _institutionContractApplication.GetListStats(searchModel); } + public async Task> GetWorkshopsDetials(long id) + { + var result = await _institutionContractApplication.GetContractWorkshopsDetails(id); + return result; + } /// /// ویرایش @@ -218,6 +223,7 @@ public class institutionContractController : AdminBaseController [HttpDelete("{id}")] public async Task> Remove(long id) { + return BadRequest("امکان حذف قرارداد وجود ندارد"); _institutionContractApplication.RemoveContract(id); return new OperationResult().Succcedded();