diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index 34f955b5..20627991 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -54,10 +54,23 @@ public interface IInstitutionContractRepository : IRepository GetVerificationDetails(Guid id); Task GetByPublicIdAsync(Guid id); + + #region Extension + Task GetExtensionInquiry(long previousContractId); Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); Task GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request); Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); + + #endregion + + #region Upgrade(Amendment) + + Task GetAmendmentWorkshops(long institutionContractId); + Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); + + #endregion + Task> GetInstitutionContractSelectList(string search, string selected); } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs index e61770ee..1193023d 100644 --- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs +++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations.Schema; +using System.Linq; using System.Security.Cryptography; using _0_Framework.Domain; using Company.Domain.InstitutionContractContactInfoAgg; @@ -119,26 +120,23 @@ public class InstitutionContract : EntityBase public string HasValueAddedTax { get; private set; } public double ValueAddedTax { get; private set; } - + public Guid PublicId { get; private set; } public string VerifyCode { get; private set; } public DateTime VerifyCodeCreation { get; private set; } - - [NotMapped] - public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now; - [NotMapped] - public bool CanResendVerifyCode => VerifyCodeCreation.Add(ReSendTime) <= DateTime.Now; - + [NotMapped] public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now; + + [NotMapped] public bool CanResendVerifyCode => VerifyCodeCreation.Add(ReSendTime) <= DateTime.Now; + [NotMapped] public TimeSpan ExpireTime => TimeSpan.FromMinutes(5); - - - + + [NotMapped] public TimeSpan ReSendTime => TimeSpan.FromMinutes(2); - + public bool IsInstallment { get; set; } - + public InstitutionContractVerificationStatus VerificationStatus { get; private set; } public InstitutionContractWorkshopGroup WorkshopGroup { get; private set; } @@ -254,6 +252,19 @@ public class InstitutionContract : EntityBase public class InstitutionContractAmendment : EntityBase { + public InstitutionContractAmendment(long institutionContractId, InstitutionContract institutionContract, + List installments, double amount, bool hasInstallment, + InstitutionContractAmendmentChange amendmentChange, long lawId) + { + InstitutionContractId = institutionContractId; + InstitutionContract = institutionContract; + Installments = installments is { Count: > 0} ? installments : []; + Amount = amount; + HasInstallment = hasInstallment; + AmendmentChanges = [amendmentChange]; + LawId = lawId; + } + public long InstitutionContractId { get; set; } public InstitutionContract InstitutionContract { get; set; } public List Installments { get; set; } @@ -262,10 +273,38 @@ public class InstitutionContractAmendment : EntityBase public string VerifyCode { get; set; } public DateTime VerificationCreation { get; set; } public List AmendmentChanges { get; set; } + + public long LawId { get; set; } + + public void SetVerifyCode(string code) + { + VerifyCode = code; + VerificationCreation = DateTime.Now; + } } public class InstitutionContractAmendmentChange : EntityBase { + private InstitutionContractAmendmentChange(long institutionContractAmendmentId, + InstitutionContractAmendment institutionContractAmendment, InstitutionContractAmendmentChangeType changeType, + DateTime changeDateGr, bool? hasRollCallPlan, bool? hasCustomizeCheckoutPlan, bool? hasContractPlan, + bool? hasContractPlanInPerson, bool? hasInsurancePlan, bool? hasInsurancePlanInPerson, int? personnelCount, + long? workshopDetailsId) + { + InstitutionContractAmendmentId = institutionContractAmendmentId; + InstitutionContractAmendment = institutionContractAmendment; + ChangeType = changeType; + ChangeDateGr = changeDateGr; + HasRollCallPlan = hasRollCallPlan; + HasCustomizeCheckoutPlan = hasCustomizeCheckoutPlan; + HasContractPlan = hasContractPlan; + HasContractPlanInPerson = hasContractPlanInPerson; + HasInsurancePlan = hasInsurancePlan; + HasInsurancePlanInPerson = hasInsurancePlanInPerson; + PersonnelCount = personnelCount; + WorkshopDetailsId = workshopDetailsId; + } + public long InstitutionContractAmendmentId { get; private set; } public InstitutionContractAmendment InstitutionContractAmendment { get; private set; } public InstitutionContractAmendmentChangeType ChangeType { get; private set; } @@ -310,8 +349,6 @@ public class InstitutionContractAmendmentChange : EntityBase /// تعداد کارگاه /// public long? WorkshopDetailsId { get; private set; } - - } public enum InstitutionContractAmendmentChangeType diff --git a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs similarity index 76% rename from Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs rename to Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs index e85b9377..020200f5 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs +++ b/Company.Domain/InstitutionContractExtensionTempAgg/IInstitutionContractExtenstionTempRepository.cs @@ -1,8 +1,7 @@ using System; using System.Threading.Tasks; -using _0_Framework.Application; -namespace Company.Domain.InstitutionContractInsertTempAgg; +namespace Company.Domain.InstitutionContractExtensionTempAgg; public interface IInstitutionContractExtenstionTempRepository { diff --git a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs similarity index 94% rename from Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs rename to Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs index 219c6dbe..568ae4a5 100644 --- a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtensionTemp.cs +++ b/Company.Domain/InstitutionContractExtensionTempAgg/InstitutionContractExtensionTemp.cs @@ -5,7 +5,7 @@ using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; -namespace Company.Domain.InstitutionContractInsertTempAgg; +namespace Company.Domain.InstitutionContractExtensionTempAgg; public class InstitutionContractExtensionTemp { @@ -30,8 +30,8 @@ public class InstitutionContractExtensionTemp public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; } public InstitutionContractExtensionPlanDetail SixMonths { get; set; } public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; } - public InstitutionContractExtensionPaymentMonthly MonthlyPayment { get; set; } - public InstitutionContractExtensionPaymentOneTime OneTimePayment { get; set; } + public InstitutionContractPaymentMonthlyViewModel MonthlyPayment { get; set; } + public InstitutionContractPaymentOneTimeViewModel OneTimePayment { get; set; } public bool HasContractInPerson { get; set; } @@ -58,8 +58,8 @@ public class InstitutionContractExtensionTemp HasContractInPerson = hasContractInPerson; } - public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractExtensionPaymentMonthly monthly, - InstitutionContractExtensionPaymentOneTime oneTime) + public void SetAmountAndDuration(InstitutionContractDuration duration,InstitutionContractPaymentMonthlyViewModel monthly, + InstitutionContractPaymentOneTimeViewModel oneTime) { Duration = duration; MonthlyPayment = monthly; diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs index 71ddf741..2b959872 100644 --- a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs +++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs @@ -1,4 +1,4 @@ -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using MongoDB.Driver; namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs index c32f345d..65392104 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListItemsViewModel.cs @@ -102,13 +102,13 @@ public class WorkshopServicesViewModel public string InsuranceLabel => "ارسال لیست بیمه"; public bool InsuranceInPerson { get; set; } - public string InsuranceInPersonLabel => "خدمات حضوری"; + public string InsuranceInPersonLabel => "خدمات مستقیم"; public bool Contract { get; set; } public string ContractLabel => "قرارداد و تصفیه حساب"; public bool ContractInPerson { get; set; } - public string ContractInPersonLabel => "خدمات حضوری"; + public string ContractInPersonLabel => "خدمات مستقیم"; public bool RollCall { get; set; } public string RollCallLabel => "ساعت حضور و غیاب"; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 2ae1ecff..d15c8da2 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -212,14 +212,57 @@ public interface IInstitutionContractApplication Task> SendVerifyOtp(Guid id); Task VerifyOtp(Guid publicId, string code); Task GetWorkshopInitialDetails(long workshopDetailsId); + + #region Extension + Task GetExtensionInquiry(long previousContractId); - Task GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request); - Task GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request); + + Task GetExtensionWorkshops( + InstitutionContractExtensionWorkshopsRequest request); + + Task GetExtensionInstitutionPlan( + InstitutionContractExtensionPlanRequest request); + Task GetExtensionPaymentMethod( InstitutionContractExtensionPaymentRequest request); - + Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request); Task> GetInstitutionContractSelectList(string search,string selected); + + #endregion + + #region Upgrade (Amendment) + + Task GetAmendmentWorkshops(long institutionContractId); + Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request); + + + #endregion +} + +public class InsitutionContractAmendmentPaymentRequest +{ + List Workshops { get; set; } + public long InstitutionContractId { get; set; } +} + +public class InsitutionContractAmendmentPaymentResponse +{ + public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; } + public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; } + public string ContractStart { get; set; } + public string ContractEnd { get; set; } + public string OneMonthAmount { get; set; } + public string TotalAmount { get; set; } +} + +public class InstitutionContractAmendmentWorkshopsResponse +{ + /// + /// + /// + public List Workshops { get; set; } + } public class InstitutionContractSelectListViewModel : SelectListViewModel; diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs new file mode 100644 index 00000000..f232760c --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionCompleteRequest.cs @@ -0,0 +1,10 @@ +using System; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionCompleteRequest +{ + public Guid TemporaryId { get; set; } + public bool IsInstallment { get; set; } + public long LawId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs new file mode 100644 index 00000000..84906caf --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionPaymentResponse.cs @@ -0,0 +1,8 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionPaymentResponse +{ + public InstitutionContractPaymentOneTimeViewModel OneTime { get; set; } + public InstitutionContractPaymentMonthlyViewModel Monthly { get; set; } + +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs new file mode 100644 index 00000000..fcc28d47 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractPaymentOneTimeViewModel.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractPaymentOneTimeViewModel +{ + /// + /// مجموع مبالغ + /// + public string TotalAmount { get; set; } + /// + /// ارزش افزوده + /// + public string Tax { get; set; } + /// + /// مبلغ قابل پرداخت + /// + public string PaymentAmount { get; set; } +} +public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel +{ + public List Installments { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 90042878..257df50d 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1335,6 +1335,16 @@ public class InstitutionContractApplication : IInstitutionContractApplication return await _institutionContractRepository.GetInstitutionContractSelectList(search,selected); } + public async Task GetAmendmentWorkshops(long institutionContractId) + { + return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId); + } + + public Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request) + { + return _institutionContractRepository.GetAmendmentPaymentDetails(request); + } + 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 03b709f0..0a2b0709 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -17,7 +17,7 @@ using Company.Domain.FinancialStatmentAgg; using Company.Domain.FinancialTransactionAgg; using Company.Domain.InstitutionContractAgg; using Company.Domain.InstitutionContractContactInfoAgg; -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.InstitutionPlanAgg; using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.Employer; @@ -1476,6 +1476,11 @@ public class InstitutionContractRepository : RepositoryBase x.contract.ContractEndGr < now); break; + + case InstitutionContractListStatus.PendingForVerify: + joinedQuery = joinedQuery.Where(x => + x.contract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify); + break; } } else @@ -1823,6 +1828,8 @@ public class InstitutionContractRepository : RepositoryBasex.ContactInfoList).FirstOrDefaultAsync(x => x.PublicId == id); } + #region Extension + public async Task GetExtensionInquiry(long previousContractId) { var institutionContracts = await _context.InstitutionContractSet @@ -2035,7 +2042,7 @@ public class InstitutionContractRepository : RepositoryBase new InstitutionContractExtensionTempWorkshop(x.WorkshopName, x.CountPerson, x.ContractAndCheckout, x.ContractAndCheckoutInPerson, x.Insurance, x.InsuranceInPerson, x.RollCall, x.RollCall, - x.RollCallInPerson, x.WorkshopServicesAmount,x.WorkshopId)).ToList(); + x.RollCallInPerson, x.WorkshopServicesAmount, x.WorkshopId)).ToList(); institutionTemp.SetWorkshopsAndPlanAmounts(workshops, res.OneMonth, res.ThreeMonths, res.SixMonths, res.TwelveMonths, hasInPerson); @@ -2275,7 +2282,7 @@ public class InstitutionContractRepository : RepositoryBase new InstitutionContractInstallment(x.InstalmentDate.ToGeorgianDateTime(), @@ -2331,6 +2338,55 @@ public class InstitutionContractRepository : RepositoryBase GetAmendmentWorkshops(long institutionContractId) + { + var institutionContract = await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(x => x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == institutionContractId); + + var workshops = institutionContract.WorkshopGroup.CurrentWorkshops.Select(x => new WorkshopTempViewModel() + { + Id = x.id, + ContractAndCheckout = x.Services.Contract, + ContractAndCheckoutInPerson = x.Services.ContractInPerson, + CustomizeCheckout = x.Services.CustomizeCheckout, + CountPerson = x.PersonnelCount, + Insurance = x.Services.Insurance, + InsuranceInPerson = x.Services.InsuranceInPerson, + RollCall = x.Services.RollCall, + WorkshopName = x.WorkshopName, + WorkshopServicesAmountStr = x.Price.ToMoney(), + WorkshopServicesAmount = x.Price, + WorkshopId = x.WorkshopId ?? 0, + RollCallInPerson = x.Services.RollCallInPerson, + + }).ToList(); + var res = new InstitutionContractAmendmentWorkshopsResponse() + { + Workshops = workshops + }; + return res; + } + + public async Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request) + { + var institutionContract =await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(x => x.CurrentWorkshops) + .FirstOrDefaultAsync(x => x.id == request.InstitutionContractId); + if (institutionContract == null) + throw new NotFoundException("قرارداد مالی یافت نشد"); + + var amendmentStart = DateTime.Now; + var amendmentEnd = institutionContract.ContractEndGr; +//TODO : محاسبه مبلغ بر اساس کارگاه های انتخاب شده + var res = new InsitutionContractAmendmentPaymentResponse(); + return res; + + } public async Task> GetInstitutionContractSelectList(string search, string selected) { diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index fac195ef..319ca091 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -218,7 +218,7 @@ using CompanyManagment.App.Contracts.PaymentInstrument; using CompanyManagment.App.Contracts.PaymentTransaction; using CompanyManagment.App.Contracts.AuthorizedPerson; using Company.Domain.AuthorizedPersonAgg; -using Company.Domain.InstitutionContractInsertTempAgg; +using Company.Domain.InstitutionContractExtensionTempAgg; using Company.Domain.LawAgg; using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; using CompanyManagment.App.Contracts.Law; diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 3c8b0ddb..0844af92 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -520,6 +520,13 @@ public class institutionContractController : AdminBaseController var res =await _institutionContractApplication.ExtensionComplete(request); return res; } + + [HttpGet("amendment/workshops/{institutionContractId}")] + public async Task> GetAmendmentWorkshops(long institutionContractId) + { + var res =await _institutionContractApplication.GetAmendmentWorkshops(institutionContractId); + return res; + } }