From 95891d5baee592b9e3895e55b2998113307458e7 Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 27 Nov 2025 21:12:52 +0330 Subject: [PATCH] Handle BuyInstitutionContractInstallment items in invoice processing and add GetIdByInstallmentId method --- .../IInstitutionContractRepository.cs | 2 + .../IInstitutionContractApplication.cs | 2 + .../EmployerApplication.cs | 12 +- .../InstitutionContractApplication.cs | 2340 +++++++++-------- .../InstitutionContractRepository.cs | 10 +- ServiceHost/Controllers/GeneralController.cs | 12 +- 6 files changed, 1208 insertions(+), 1170 deletions(-) diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index 1cc32693..33ced579 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -145,4 +145,6 @@ public interface IInstitutionContractRepository : IRepository GetIdByInstallmentId(long installmentId); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index 4730338d..710530f2 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -253,6 +253,8 @@ public interface IInstitutionContractApplication Task PrintOneAsync(long id); Task SetPendingWorkflow(long entityId); + Task GetIdByInstallmentId(long installmentId); + } public class InstitutionContractPrintViewModel diff --git a/CompanyManagment.Application/EmployerApplication.cs b/CompanyManagment.Application/EmployerApplication.cs index 8e7d6663..5270231a 100644 --- a/CompanyManagment.Application/EmployerApplication.cs +++ b/CompanyManagment.Application/EmployerApplication.cs @@ -1485,12 +1485,12 @@ public class EmployerApplication : IEmployerApplication return opration.Failed("نام شرکت وارد شده تکراری است"); } - if (_EmployerRepository.Exists(x => - x.RegisterId == command.RegisterId && !string.IsNullOrWhiteSpace(command.RegisterId) && - x.RegisterId != null)) - { - return opration.Failed(" شماره ثبت وارد شده تکراری است"); - } + // if (_EmployerRepository.Exists(x => + // x.RegisterId == command.RegisterId && !string.IsNullOrWhiteSpace(command.RegisterId) && + // x.RegisterId != null)) + // { + // return opration.Failed(" شماره ثبت وارد شده تکراری است"); + // } if (!string.IsNullOrEmpty(command.NationalId) && command.NationalId.Length != 11) { diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index a36449e3..e693865e 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -42,53 +42,54 @@ namespace CompanyManagment.Application; public class InstitutionContractApplication : IInstitutionContractApplication { - private readonly IInstitutionContractRepository _institutionContractRepository; - private readonly IPersonalContractingPartyRepository _contractingPartyRepository; - private readonly IRepresentativeRepository _representativeRepository; - private readonly IFinancialStatmentApplication _financialStatmentApplication; - private readonly IEmployerRepository _employerRepository; - private readonly IWorkshopRepository _workshopRepository; - private readonly ILeftWorkRepository _leftWorkRepository; - private readonly IWorkshopApplication _workshopApplication; - private readonly IContractingPartyTempRepository _contractingPartyTempRepository; - private readonly IFinancialStatmentRepository _financialStatmentRepository; - private readonly IContactInfoApplication _contactInfoApplication; - private readonly IAccountApplication _accountApplication; - private readonly ISmsService _smsService; - private readonly IUidService _uidService; - private readonly IFinancialInvoiceRepository _financialInvoiceRepository; - private readonly IPaymentGateway _paymentGateway; - private readonly IPaymentTransactionRepository _paymentTransactionRepository; + private readonly IInstitutionContractRepository _institutionContractRepository; + private readonly IPersonalContractingPartyRepository _contractingPartyRepository; + private readonly IRepresentativeRepository _representativeRepository; + private readonly IFinancialStatmentApplication _financialStatmentApplication; + private readonly IEmployerRepository _employerRepository; + private readonly IWorkshopRepository _workshopRepository; + private readonly ILeftWorkRepository _leftWorkRepository; + private readonly IWorkshopApplication _workshopApplication; + private readonly IContractingPartyTempRepository _contractingPartyTempRepository; + private readonly IFinancialStatmentRepository _financialStatmentRepository; + private readonly IContactInfoApplication _contactInfoApplication; + private readonly IAccountApplication _accountApplication; + private readonly ISmsService _smsService; + private readonly IUidService _uidService; + private readonly IFinancialInvoiceRepository _financialInvoiceRepository; + private readonly IPaymentGateway _paymentGateway; + private readonly IPaymentTransactionRepository _paymentTransactionRepository; - public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository, - IPersonalContractingPartyRepository contractingPartyRepository, - IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository, - IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository, - IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication, - IContractingPartyTempRepository contractingPartyTempRepository, - IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication, - IAccountApplication accountApplication, ISmsService smsService, IUidService uidService, - IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory, IPaymentTransactionRepository paymentTransactionRepository) - { - _institutionContractRepository = institutionContractRepository; - _contractingPartyRepository = contractingPartyRepository; - _representativeRepository = representativeRepository; - _employerRepository = employerRepository; - _workshopRepository = workshopRepository; - _leftWorkRepository = leftWorkRepository; - _financialStatmentApplication = financialStatmentApplication; - _workshopApplication = workshopApplication; - _contractingPartyTempRepository = contractingPartyTempRepository; - _financialStatmentRepository = financialStatmentRepository; - _contactInfoApplication = contactInfoApplication; - _accountApplication = accountApplication; - _smsService = smsService; - _uidService = uidService; - _financialInvoiceRepository = financialInvoiceRepository; - _paymentTransactionRepository = paymentTransactionRepository; - _paymentGateway = new SepehrPaymentGateway(httpClientFactory); - } + public InstitutionContractApplication(IInstitutionContractRepository institutionContractRepository, + IPersonalContractingPartyRepository contractingPartyRepository, + IRepresentativeRepository representativeRepository, IEmployerRepository employerRepository, + IWorkshopRepository workshopRepository, ILeftWorkRepository leftWorkRepository, + IFinancialStatmentApplication financialStatmentApplication, IWorkshopApplication workshopApplication, + IContractingPartyTempRepository contractingPartyTempRepository, + IFinancialStatmentRepository financialStatmentRepository, IContactInfoApplication contactInfoApplication, + IAccountApplication accountApplication, ISmsService smsService, IUidService uidService, + IFinancialInvoiceRepository financialInvoiceRepository, IHttpClientFactory httpClientFactory, + IPaymentTransactionRepository paymentTransactionRepository) + { + _institutionContractRepository = institutionContractRepository; + _contractingPartyRepository = contractingPartyRepository; + _representativeRepository = representativeRepository; + _employerRepository = employerRepository; + _workshopRepository = workshopRepository; + _leftWorkRepository = leftWorkRepository; + _financialStatmentApplication = financialStatmentApplication; + _workshopApplication = workshopApplication; + _contractingPartyTempRepository = contractingPartyTempRepository; + _financialStatmentRepository = financialStatmentRepository; + _contactInfoApplication = contactInfoApplication; + _accountApplication = accountApplication; + _smsService = smsService; + _uidService = uidService; + _financialInvoiceRepository = financialInvoiceRepository; + _paymentTransactionRepository = paymentTransactionRepository; + _paymentGateway = new SepehrPaymentGateway(httpClientFactory); + } public OperationResult Create(CreateInstitutionContract command) { @@ -340,640 +341,639 @@ public class InstitutionContractApplication : IInstitutionContractApplication return opration.Succcedded(createContract.id); } - public OperationResult Edit(EditInstitutionContract command) - { - bool dateMessages = false; - string dateMaessageResult = String.Empty; - var opration = new OperationResult(); - var ContractEdit = _institutionContractRepository.Get(command.Id); - if (ContractEdit == null) - opration.Failed("رکورد مورد نظر وجود ندارد"); - - var contractStartGr = command.ContractStartFa.ToGeorgianDateTime(); - var contractEndGr = command.ContractEndFa.ToGeorgianDateTime(); - - var contractDateGr = command.ContractDateFa.ToGeorgianDateTime(); - - if (_institutionContractRepository.Exists(x => - x.ContractingPartyId == ContractEdit.ContractingPartyId && - ((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) || - (contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.id != command.Id && - x.TypeOfContract == command.TypeOfContract)) - return opration.Failed("در بازه تاریخ وارد شده قرارداد دیگری وجود دارد"); - //if (_institutionContractRepository.Exists(x => - // x.ContractingPartyId == ContractEdit.ContractingPartyId && (x.ContractStartGr <= contractDateGr || x.ContractDateGr <= contractDateGr) && x.id != command.Id)) - // return opration.Failed("تاریخ عقد قرارداد با قرارداد دیگری تداخل دارد"); - if (string.IsNullOrWhiteSpace(command.ContractDateFa)) - { - dateMaessageResult = "تاریخ قراراداد اجباری است. "; - dateMessages = true; - } - - if (string.IsNullOrWhiteSpace(command.ContractStartFa)) - { - dateMaessageResult += "تاریخ شروع قراراداد اجباری است. "; - dateMessages = true; - } - - if (string.IsNullOrWhiteSpace(command.ContractEndFa)) - { - dateMaessageResult += "تاریخ پایان قراراداد اجباری است. "; - dateMessages = true; - } - - if (dateMessages) - return opration.Failed(dateMaessageResult); - if (command.Address != null && command.State == null) - { - return opration.Failed("لطفا استان و شهر را انتخاب کنید"); - } - - if ((command.Address != null && command.State != null) && command.City == "شهرستان") - { - return opration.Failed("لطفا شهر را انتخاب کنید"); - } - - if (command.Address == null && command.State != null) - { - return opration.Failed("لطفا آدرس را وارد کنید"); - } - - if (string.IsNullOrWhiteSpace(command.OfficialCompany)) - return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید"); - if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax)) - return opration.Failed("وضعیت ارزش افزوده را مشخص کنید"); - if (string.IsNullOrWhiteSpace(command.TypeOfContract)) - return opration.Failed("عنوان قرارداد را انتخاب کنید"); - - if (string.IsNullOrWhiteSpace(command.ContractAmountString)) - command.ContractAmountString = "0"; - if (string.IsNullOrWhiteSpace(command.DailyCompenseationString)) - command.DailyCompenseationString = "0"; - if (string.IsNullOrWhiteSpace(command.ObligationString)) - command.ObligationString = "0"; - if (string.IsNullOrWhiteSpace(command.TotalAmountString)) - command.TotalAmountString = "0"; - - command.ValueAddedTax = command.ValueAddedTaxStr.MoneyToDouble(); - var contractAmount = command.ContractAmountString.ToDoubleMoney(); - command.ContractAmount = Convert.ToDouble(contractAmount); - var DailyCompenseation = command.DailyCompenseationString.ToDoubleMoney(); - command.DailyCompenseation = Convert.ToDouble(DailyCompenseation); - var Obligation = command.ObligationString.ToDoubleMoney(); - command.Obligation = Convert.ToDouble(Obligation); - var TotalAmount = command.TotalAmountString.ToDoubleMoney(); - command.TotalAmount = Convert.ToDouble(TotalAmount); - - ContractEdit.Edit(contractDateGr, command.ContractDateFa, command.State, command.City, command.Address, - contractStartGr, - command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount, - command.DailyCompenseation, - command.Obligation, command.TotalAmount, command.WorkshopManualCount, command.EmployeeManualCount, - command.Description, command.OfficialCompany, command.TypeOfContract, command.ValueAddedTax, - command.HasValueAddedTax); - _institutionContractRepository.SaveChanges(); - return opration.Succcedded(command.Id); - } - - public EditInstitutionContract GetDetails(long id) - { - return _institutionContractRepository.GetDetails(id); - } - - public List Search(InstitutionContractSearchModel searchModel) - { - var query = _institutionContractRepository.Search(searchModel); - var join = new List(); - - var now = DateTime.Now; - var nowFa = now.ToFarsi(); - - var endFa = nowFa.FindeEndOfMonth(); - var endThisMontGr = endFa.ToGeorgianDateTime(); - //var watch = System.Diagnostics.Stopwatch.StartNew(); - - - var newResult = query.Select(x => new InstitutionContractViewModel - { - Id = x.Id, - ContractNo = x.ContractNo, - ContractStartGr = x.ContractStartGr, - ContractStartFa = x.ContractStartFa, - ContractEndGr = x.ContractEndGr, - ContractEndFa = x.ContractEndFa, - //RepresentativeId = x.RepresentativeId, - RepresentativeName = x.RepresentativeName, - //ContractingPartyName = _contractingPartyRepository.GetDetails(x.ContractingPartyId).LName, - //IsContractingPartyBlock = _contractingPartyRepository.GetDetails(x.ContractingPartyId).IsBlock, - //BlockTimes = _contractingPartyRepository.GetDetails(x.ContractingPartyId).BlockTimes, - ContractingPartyId = x.ContractingPartyId, - EmployerViewModels = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId), - EmployerNo = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId) - .FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.EmployerNo, - EmployerName = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId) - .FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.FullName, - //EmployerId = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.Id == null ? 0 : - // _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)!.Id, - ContractAmount = x.ContractAmount, - TotalAmount = x.TotalAmount, - SearchAmount = x.SearchAmount, - IsActiveString = x.IsActiveString, - OfficialCompany = x.OfficialCompany, - Signature = x.Signature, - ExpireColor = ExpCheckColor(now, x.ContractEndGr, endThisMontGr, x.ContractAmount, x.IsActiveString), - BalanceDouble = TotalBalance(x.ContractingPartyId).TotalBalanceDbl, - BalanceStr = TotalBalance(x.ContractingPartyId).TotalBalanceStr, - //WorkshopViewModels = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).WorkshopViewModels, - //WorkshopCount = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).WorkshopCount, - //EmployeeCount = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).EmployeeCount, - //ArchiveCode = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).ArchiveCode, - TypeOfContract = x.TypeOfContract - }).ToList(); - //Console.WriteLine("efTime : " + watch.Elapsed); - - //var watchw = System.Diagnostics.Stopwatch.StartNew(); - foreach (var item in newResult) - { - //string totalBalanceStr = "0"; - //double totalBalance = 0; - //var firstGetStatement = _financialStatmentApplication.GetDetailsByContractingPartyId(item.ContractingPartyId); - //var allTransactions = firstGetStatement.FinancialTransactionViewModels; - //if (allTransactions != null) - //{ - // allTransactions = allTransactions.OrderBy(x => x.TdateGr).ToList(); - // var debt = allTransactions.Sum(x => x.Deptor); - // var credit = allTransactions.Sum(x => x.Creditor); - // totalBalance = debt - credit; - // totalBalanceStr = totalBalance.ToMoney(); - //} - var contractingParty = _contractingPartyRepository.GetDetails(item.ContractingPartyId); - if (contractingParty != null) - { - item.ContractingPartyName = contractingParty.LName; - item.IsContractingPartyBlock = contractingParty.IsBlock; - item.BlockTimes = contractingParty.BlockTimes; - } - - - var employer = _employerRepository.GetEmployerByContracrtingPartyID(item.ContractingPartyId); - item.EmployerViewModels = employer; - item.EmployerName = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.FullName; - var id = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.Id; - item.EmployerNo = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.EmployerNo; - if (id != null) item.EmployerId = (long)id; - - var emplId = item.EmployerViewModels.Select(x => x.Id).ToList(); - - item.WorkshopViewModels = _workshopRepository.GetWorkshopsByEmployerId(emplId); - var workshopIds = item.WorkshopViewModels.Select(x => x.Id).ToList(); - var left = 0; - item.WorkshopCount = Convert.ToString(item.WorkshopViewModels.Count); - //var joinPersonelList = new List(); - int pCount = 0; - foreach (var workshopId in workshopIds) - { - //var reslt = _workshopApplication.GetConnectedPersonnels(workshopId); - //var noBlock = reslt.Where(x => x.Black == false).ToList(); - //joinPersonelList.AddRange(noBlock); - var p = _workshopApplication.PersonnelCount(workshopId); - pCount += p; - } - //var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList(); - //left = joinlistWithoutDuplicat.Count(); - // var left= _leftWorkRepository.GetLeftPersonelByWorkshopId(workshopIds).Count(); - - item.EmployeeCount = Convert.ToString(pCount); - //if (item.ContractEndGr < now) - // item.ExpireColor = "black"; - //if (item.ContractEndGr >= now && item.ContractEndGr <= endThisMontGr) - // item.ExpireColor = "red"; - //if (item.ContractAmount == "0") - // item.ExpireColor = "purple"; - int archiveCode = 0; - if (item.WorkshopViewModels.Count > 0) - { - var workshop = item.WorkshopViewModels.OrderBy(x => x.Id)?.ToList(); - - var arc = workshop.Select(x => new ArchiveCodConvertoint - { - ArchiveCodeInt = x.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : x.ArchiveCode.ConvertToInt(), - }).OrderBy(x => x.ArchiveCodeInt).ToList(); - var minArchiveCode = arc.Min(x => x.ArchiveCodeInt); - archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode; - } - - var result = new InstitutionContractViewModel() - { - Id = item.Id, - ContractNo = item.ContractNo, - ContractStartGr = item.ContractStartGr, - ContractStartFa = item.ContractStartFa, - ContractEndGr = item.ContractEndGr, - ContractEndFa = item.ContractEndFa, - RepresentativeName = item.RepresentativeName, - ContractingPartyName = item.ContractingPartyName, - ContractingPartyId = item.ContractingPartyId, - EmployerNo = item.EmployerNo, - ContractAmount = item.ContractAmount, - EmployerName = item.EmployerName, - EmployerViewModels = item.EmployerViewModels, - IsActiveString = item.IsActiveString, - WorkshopCount = item.WorkshopCount, - WorkshopViewModels = item.WorkshopViewModels, - EmployeeCount = item.EmployeeCount, - ExpireColor = item.ExpireColor, - SearchAmount = item.SearchAmount, - BalanceDouble = item.BalanceDouble, - BalanceStr = item.BalanceStr, - Signature = item.Signature, - ArchiveCode = archiveCode, - TypeOfContract = item.TypeOfContract, - IsContractingPartyBlock = item.IsContractingPartyBlock, - BlockTimes = item.BlockTimes, - }; - join.Add(result); - } - - //Console.WriteLine("forEchTime : " + watchw.Elapsed); - var findeByFilter = new List(); - if (searchModel.WorkshopId != 0) - { - foreach (var item in join) - { - var check = item.WorkshopViewModels.Where(x => x.Id == searchModel.WorkshopId).ToList(); - if (check.Count > 0) - findeByFilter.Add(item); - } - - join = findeByFilter; - } - - var findeByFilter2 = new List(); - if (searchModel.EmployerId != 0) - { - foreach (var item in join) - { - var check = item.EmployerViewModels.Where(x => x.Id == searchModel.EmployerId).ToList(); - if (check.Count > 0) - findeByFilter2.Add(item); - } - - join = findeByFilter2; - } - - - join = join.OrderBy(x => x.WorkshopCount != "0" && string.IsNullOrWhiteSpace(x.ExpireColor)) - .ThenBy(x => x.WorkshopCount == "0" && string.IsNullOrWhiteSpace(x.ExpireColor)) - .ThenBy(x => x.ExpireColor == "red") - .ThenBy(x => x.ExpireColor == "purple") - .ThenBy(x => x.ExpireColor == "black").ToList(); - - return join; - } - - public List NewSearch(InstitutionContractSearchModel searchModel) - { - return _institutionContractRepository.NewSearch(searchModel); - } - - - public List GetInstitutionContractToSetServicesExcelImport() - { - var result = _institutionContractRepository.NewSearch(new InstitutionContractSearchModel()); - - return result.Where(x => - x.IsActiveString == "true" && x.IsContractingPartyBlock != "true" && x.WorkshopCount != "0" && - x.ContractStartGr <= DateTime.Now && x.ContractEndGr >= DateTime.Now).ToList(); - } - - public string ExpCheckColor(DateTime now, DateTime ContractEndGr, DateTime endThisMontGr, string ContractAmount, - string isActiveString) - { - string result = ""; - - if (ContractEndGr < now) - result = "black"; - if (ContractEndGr >= now && ContractEndGr <= endThisMontGr) - result = "red"; - if (ContractAmount == "0") - result = "purple"; - if (isActiveString == "blue") - result = "blue"; - return result; - } - - public TotalbalancViewModel TotalBalance(long contractingPartyId) - { - var result = new TotalbalancViewModel(); - - var firstGetStatement = _financialStatmentApplication.GetDetailsByContractingPartyId(contractingPartyId); - var allTransactions = firstGetStatement.FinancialTransactionViewModels; - if (allTransactions != null) - { - allTransactions = allTransactions.OrderBy(x => x.TdateGr).ToList(); - var debt = allTransactions.Sum(x => x.Deptor); - var credit = allTransactions.Sum(x => x.Creditor); - result.TotalBalanceDbl = debt - credit; - result.TotalBalanceStr = result.TotalBalanceDbl.ToMoney(); - } - - return result; - } - - public WorkshopsAndEmployeeViewModel WorkShopDetailsAndEmployeeCount(long contractingPartyId) - { - var result = new WorkshopsAndEmployeeViewModel(); - - var emplId = _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId).Select(x => x.Id) - .ToList(); - ; - result.WorkshopViewModels = _workshopRepository.GetWorkshopsByEmployerId(emplId); - var workshopIds = result.WorkshopViewModels.Select(x => x.Id).ToList(); - var left = 0; - result.WorkshopCount = Convert.ToString(workshopIds.Count); - var joinPersonelList = new List(); - foreach (var workshopId in workshopIds) - { - //var reslt = _workshopApplication.GetConnectedPersonnels(workshopId); - //var noBlock = reslt.Where(x => x.Black == false).ToList(); - //joinPersonelList.AddRange(noBlock); - var pCount = _workshopApplication.PersonnelCount(workshopId); - result.EmployeeCount = Convert.ToString(pCount); - } - //var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList(); - //left = joinlistWithoutDuplicat.Count(); - //result.EmployeeCount = Convert.ToString(left); - - - result.ArchiveCode = 0; - if (workshopIds.Count > 0) - { - var workshop = result.WorkshopViewModels.OrderBy(x => x.Id)?.ToList(); - - var arc = workshop.Select(x => new ArchiveCodConvertoint - { - ArchiveCodeInt = x.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : x.ArchiveCode.ConvertToInt(), - }).OrderBy(x => x.ArchiveCodeInt).ToList(); - var minArchiveCode = arc.Min(x => x.ArchiveCodeInt); - result.ArchiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode; - } - - return result; - } - - public List PrintAll(List id) - { - throw new NotImplementedException(); - } - - public InstitutionContractViewModel PrintOne(long id) - { - var get = _institutionContractRepository.GetDetails(id); - var employer = _employerRepository.GetEmployerByContracrtingPartyID(get.ContractingPartyId); - var employerViewModels = employer; - var emplId = employerViewModels.Select(x => x.Id).ToList(); - var workshops = _workshopRepository.GetWorkshopsByEmployerId(emplId); - var res = new InstitutionContractViewModel() - { - Id = get.Id, - ContractNo = get.ContractNo, - - ContractStartFa = get.ContractStartFa, - - ContractEndFa = get.ContractEndFa, - - ContractingPartyName = get.ContractingPartyName, - - ContractingPartyId = get.ContractingPartyId, - ContractDateFa = get.ContractDateFa, - State = get.State, - City = get.City, - Address = get.Address, - Description = get.Description, - HasValueAddedTax = get.HasValueAddedTax, - ValueAddedTax = get.ValueAddedTax, - ContractAmount = get.ContractAmountString, - DailyCompenseation = get.DailyCompenseationString, - Obligation = get.ObligationString, - TotalAmount = get.TotalAmountString, - WorkshopViewModels = workshops - }; - return res; - } - - - public OperationResult Active(long id) - { - var opration = new OperationResult(); - var contract = _institutionContractRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.Active(); - - _institutionContractRepository.SaveChanges(); - return opration.Succcedded(); - } - - public OperationResult DeActive(long id) - { - var opration = new OperationResult(); - var contract = _institutionContractRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.DeActive(); - - - _institutionContractRepository.SaveChanges(); - return opration.Succcedded(); - } - - public OperationResult DeActiveBlue(long id) - { - var opration = new OperationResult(); - var institutionContract = _institutionContractRepository.Get(id); - if (institutionContract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - institutionContract.DeActiveBlue(); - _institutionContractRepository.SaveChanges(); - - return opration.Succcedded(); - } - - public OperationResult DeActiveAllConnections(long id) - { - var opration = new OperationResult(); - var institutionContract = _institutionContractRepository.Get(id); - if (institutionContract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - - var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); - if (contractingParty != null) - { - contractingParty.DeActive(); - _contractingPartyRepository.SaveChanges(); - var employers = - _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId); - //var employersIdList = employers.Select(x => x.Id).ToList(); - //var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList); - //foreach (var workshop in workshops) - //{ - // var res = _workshopApplication.DeActive(workshop.Id); - //} - foreach (var employer in employers) - { - var res = _employerRepository.DeActiveAll(employer.Id); - } - } - - return opration.Succcedded(); - } - - public OperationResult ReActiveAllConnections(long id) - { - var opration = new OperationResult(); - var institutionContract = _institutionContractRepository.Get(id); - if (institutionContract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - - var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); - if (contractingParty != null) - { - contractingParty.Active(); - _contractingPartyRepository.SaveChanges(); - var employers = - _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId); - //var employersIdList = employers.Select(x => x.Id).ToList(); - //var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList); - //foreach (var workshop in workshops) - //{ - // var res = _workshopApplication.DeActive(workshop.Id); - //} - foreach (var employer in employers) - { - var res = _employerRepository.ActiveAll(employer.Id); - } - } - - return opration.Succcedded(); - } - - public void ReActiveAllAfterCreateNew(long contractingPartyId) - { - var contractingParty = _contractingPartyRepository.Get(contractingPartyId); - if (contractingParty != null) - { - if (contractingParty.IsActiveString == "false") - { - contractingParty.Active(); - _contractingPartyRepository.SaveChanges(); - } - - var employers = - _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId); - - foreach (var employer in employers) - { - var res = _employerRepository.ActiveAll(employer.Id); - } - } - } - - - public void RemoveContract(long id) - { - _institutionContractRepository.RemoveContract(id); - } - - - public OperationResult Sign(long id) - { - var opration = new OperationResult(); - var contract = _institutionContractRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.Sign(); - - - _institutionContractRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } - - public OperationResult UnSign(long id) - { - var opration = new OperationResult(); - var contract = _institutionContractRepository.Get(id); - if (contract == null) - return opration.Failed("رکورد مورد نظر یافت نشد"); - - contract.UnSign(); - - - _institutionContractRepository.SaveChanges(); - opration.IsSuccedded = true; - return opration.Succcedded(); - } - - public void CreateContractingPartyAccount(long contractingPartyid, long accountId) - { - _institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId); - } - - public double GetcontractAmount(int countPerson) - { - return _institutionContractRepository.GetcontractAmount(countPerson); - } - - public async Task> GetList( - InstitutionContractListSearchModel searchModel) - { - return await _institutionContractRepository.GetList(searchModel); - } - - public Task GetListStats(InstitutionContractListSearchModel searchModel) - { - return _institutionContractRepository.GetListStats(searchModel); - } - - public async Task CreateAsync(CreateInstitutionContractRequest command) - { - - var opration = new OperationResult(); - var syear = command.ContractStartFa.Substring(0, 4); - var smonth = command.ContractStartFa.Substring(5, 2); - var sday = command.ContractStartFa.Substring(8, 2); - - var transaction = await _contractingPartyRepository.BeginTransactionAsync(); - - if (command.ContractStartFa.TryToGeorgianDateTime(out var contractStartGr) == false) - return opration.Failed("تاریخ شروع قرارداد معتبر نیست"); - - contractStartGr.AddMonthsFa((int)command.Duration, out var contractEndGr); - - contractEndGr = contractEndGr.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); - - PersonalContractingParty existingContractingParty = null; - if (command.ContractingPartyLegalType == LegalType.Legal) - { - existingContractingParty = - await _contractingPartyRepository.GetByNationalId(command.LegalParty.NationalId); - if (_contractingPartyRepository.Exists(x => - x.LName == command.LegalParty.CompanyName && x.RegisterId == command.LegalParty.RegisterId)) - { - if (_institutionContractRepository.Exists(x => x.ContractStartGr < contractEndGr - && contractStartGr < x.ContractEndGr - && x.ContractingPartyId == existingContractingParty.id - && x.IsActiveString == "true")) - { - throw new BadRequestException("امکان ایجاد قرارداد تکراری وجود ندارد"); - } - } + public OperationResult Edit(EditInstitutionContract command) + { + bool dateMessages = false; + string dateMaessageResult = String.Empty; + var opration = new OperationResult(); + var ContractEdit = _institutionContractRepository.Get(command.Id); + if (ContractEdit == null) + opration.Failed("رکورد مورد نظر وجود ندارد"); + + var contractStartGr = command.ContractStartFa.ToGeorgianDateTime(); + var contractEndGr = command.ContractEndFa.ToGeorgianDateTime(); + + var contractDateGr = command.ContractDateFa.ToGeorgianDateTime(); + + if (_institutionContractRepository.Exists(x => + x.ContractingPartyId == ContractEdit.ContractingPartyId && + ((contractStartGr >= x.ContractStartGr && contractStartGr <= x.ContractEndGr) || + (contractEndGr >= x.ContractStartGr && contractEndGr <= x.ContractEndGr)) && x.id != command.Id && + x.TypeOfContract == command.TypeOfContract)) + return opration.Failed("در بازه تاریخ وارد شده قرارداد دیگری وجود دارد"); + //if (_institutionContractRepository.Exists(x => + // x.ContractingPartyId == ContractEdit.ContractingPartyId && (x.ContractStartGr <= contractDateGr || x.ContractDateGr <= contractDateGr) && x.id != command.Id)) + // return opration.Failed("تاریخ عقد قرارداد با قرارداد دیگری تداخل دارد"); + if (string.IsNullOrWhiteSpace(command.ContractDateFa)) + { + dateMaessageResult = "تاریخ قراراداد اجباری است. "; + dateMessages = true; + } + + if (string.IsNullOrWhiteSpace(command.ContractStartFa)) + { + dateMaessageResult += "تاریخ شروع قراراداد اجباری است. "; + dateMessages = true; + } + + if (string.IsNullOrWhiteSpace(command.ContractEndFa)) + { + dateMaessageResult += "تاریخ پایان قراراداد اجباری است. "; + dateMessages = true; + } + + if (dateMessages) + return opration.Failed(dateMaessageResult); + if (command.Address != null && command.State == null) + { + return opration.Failed("لطفا استان و شهر را انتخاب کنید"); + } + + if ((command.Address != null && command.State != null) && command.City == "شهرستان") + { + return opration.Failed("لطفا شهر را انتخاب کنید"); + } + + if (command.Address == null && command.State != null) + { + return opration.Failed("لطفا آدرس را وارد کنید"); + } + + if (string.IsNullOrWhiteSpace(command.OfficialCompany)) + return opration.Failed("رسمی یا غیر رسمی بودن پرداخت را مشخص کنید"); + if (command.OfficialCompany == "Official" && string.IsNullOrWhiteSpace(command.HasValueAddedTax)) + return opration.Failed("وضعیت ارزش افزوده را مشخص کنید"); + if (string.IsNullOrWhiteSpace(command.TypeOfContract)) + return opration.Failed("عنوان قرارداد را انتخاب کنید"); + + if (string.IsNullOrWhiteSpace(command.ContractAmountString)) + command.ContractAmountString = "0"; + if (string.IsNullOrWhiteSpace(command.DailyCompenseationString)) + command.DailyCompenseationString = "0"; + if (string.IsNullOrWhiteSpace(command.ObligationString)) + command.ObligationString = "0"; + if (string.IsNullOrWhiteSpace(command.TotalAmountString)) + command.TotalAmountString = "0"; + + command.ValueAddedTax = command.ValueAddedTaxStr.MoneyToDouble(); + var contractAmount = command.ContractAmountString.ToDoubleMoney(); + command.ContractAmount = Convert.ToDouble(contractAmount); + var DailyCompenseation = command.DailyCompenseationString.ToDoubleMoney(); + command.DailyCompenseation = Convert.ToDouble(DailyCompenseation); + var Obligation = command.ObligationString.ToDoubleMoney(); + command.Obligation = Convert.ToDouble(Obligation); + var TotalAmount = command.TotalAmountString.ToDoubleMoney(); + command.TotalAmount = Convert.ToDouble(TotalAmount); + + ContractEdit.Edit(contractDateGr, command.ContractDateFa, command.State, command.City, command.Address, + contractStartGr, + command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount, + command.DailyCompenseation, + command.Obligation, command.TotalAmount, command.WorkshopManualCount, command.EmployeeManualCount, + command.Description, command.OfficialCompany, command.TypeOfContract, command.ValueAddedTax, + command.HasValueAddedTax); + _institutionContractRepository.SaveChanges(); + return opration.Succcedded(command.Id); + } + + public EditInstitutionContract GetDetails(long id) + { + return _institutionContractRepository.GetDetails(id); + } + + public List Search(InstitutionContractSearchModel searchModel) + { + var query = _institutionContractRepository.Search(searchModel); + var join = new List(); + + var now = DateTime.Now; + var nowFa = now.ToFarsi(); + + var endFa = nowFa.FindeEndOfMonth(); + var endThisMontGr = endFa.ToGeorgianDateTime(); + //var watch = System.Diagnostics.Stopwatch.StartNew(); + + + var newResult = query.Select(x => new InstitutionContractViewModel + { + Id = x.Id, + ContractNo = x.ContractNo, + ContractStartGr = x.ContractStartGr, + ContractStartFa = x.ContractStartFa, + ContractEndGr = x.ContractEndGr, + ContractEndFa = x.ContractEndFa, + //RepresentativeId = x.RepresentativeId, + RepresentativeName = x.RepresentativeName, + //ContractingPartyName = _contractingPartyRepository.GetDetails(x.ContractingPartyId).LName, + //IsContractingPartyBlock = _contractingPartyRepository.GetDetails(x.ContractingPartyId).IsBlock, + //BlockTimes = _contractingPartyRepository.GetDetails(x.ContractingPartyId).BlockTimes, + ContractingPartyId = x.ContractingPartyId, + EmployerViewModels = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId), + EmployerNo = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId) + .FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.EmployerNo, + EmployerName = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId) + .FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.FullName, + //EmployerId = _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)?.Id == null ? 0 : + // _employerRepository.GetEmployerByContracrtingPartyID(x.ContractingPartyId).FirstOrDefault(xn => xn.ContractingPartyID == x.ContractingPartyId)!.Id, + ContractAmount = x.ContractAmount, + TotalAmount = x.TotalAmount, + SearchAmount = x.SearchAmount, + IsActiveString = x.IsActiveString, + OfficialCompany = x.OfficialCompany, + Signature = x.Signature, + ExpireColor = ExpCheckColor(now, x.ContractEndGr, endThisMontGr, x.ContractAmount, x.IsActiveString), + BalanceDouble = TotalBalance(x.ContractingPartyId).TotalBalanceDbl, + BalanceStr = TotalBalance(x.ContractingPartyId).TotalBalanceStr, + //WorkshopViewModels = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).WorkshopViewModels, + //WorkshopCount = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).WorkshopCount, + //EmployeeCount = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).EmployeeCount, + //ArchiveCode = WorkShopDetailsAndEmployeeCount(x.ContractingPartyId).ArchiveCode, + TypeOfContract = x.TypeOfContract + }).ToList(); + //Console.WriteLine("efTime : " + watch.Elapsed); + + //var watchw = System.Diagnostics.Stopwatch.StartNew(); + foreach (var item in newResult) + { + //string totalBalanceStr = "0"; + //double totalBalance = 0; + //var firstGetStatement = _financialStatmentApplication.GetDetailsByContractingPartyId(item.ContractingPartyId); + //var allTransactions = firstGetStatement.FinancialTransactionViewModels; + //if (allTransactions != null) + //{ + // allTransactions = allTransactions.OrderBy(x => x.TdateGr).ToList(); + // var debt = allTransactions.Sum(x => x.Deptor); + // var credit = allTransactions.Sum(x => x.Creditor); + // totalBalance = debt - credit; + // totalBalanceStr = totalBalance.ToMoney(); + //} + var contractingParty = _contractingPartyRepository.GetDetails(item.ContractingPartyId); + if (contractingParty != null) + { + item.ContractingPartyName = contractingParty.LName; + item.IsContractingPartyBlock = contractingParty.IsBlock; + item.BlockTimes = contractingParty.BlockTimes; + } + + + var employer = _employerRepository.GetEmployerByContracrtingPartyID(item.ContractingPartyId); + item.EmployerViewModels = employer; + item.EmployerName = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.FullName; + var id = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.Id; + item.EmployerNo = employer.FirstOrDefault(x => x.ContractingPartyID == item.ContractingPartyId)?.EmployerNo; + if (id != null) item.EmployerId = (long)id; + + var emplId = item.EmployerViewModels.Select(x => x.Id).ToList(); + + item.WorkshopViewModels = _workshopRepository.GetWorkshopsByEmployerId(emplId); + var workshopIds = item.WorkshopViewModels.Select(x => x.Id).ToList(); + var left = 0; + item.WorkshopCount = Convert.ToString(item.WorkshopViewModels.Count); + //var joinPersonelList = new List(); + int pCount = 0; + foreach (var workshopId in workshopIds) + { + //var reslt = _workshopApplication.GetConnectedPersonnels(workshopId); + //var noBlock = reslt.Where(x => x.Black == false).ToList(); + //joinPersonelList.AddRange(noBlock); + var p = _workshopApplication.PersonnelCount(workshopId); + pCount += p; + } + //var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList(); + //left = joinlistWithoutDuplicat.Count(); + // var left= _leftWorkRepository.GetLeftPersonelByWorkshopId(workshopIds).Count(); + + item.EmployeeCount = Convert.ToString(pCount); + //if (item.ContractEndGr < now) + // item.ExpireColor = "black"; + //if (item.ContractEndGr >= now && item.ContractEndGr <= endThisMontGr) + // item.ExpireColor = "red"; + //if (item.ContractAmount == "0") + // item.ExpireColor = "purple"; + int archiveCode = 0; + if (item.WorkshopViewModels.Count > 0) + { + var workshop = item.WorkshopViewModels.OrderBy(x => x.Id)?.ToList(); + + var arc = workshop.Select(x => new ArchiveCodConvertoint + { + ArchiveCodeInt = x.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : x.ArchiveCode.ConvertToInt(), + }).OrderBy(x => x.ArchiveCodeInt).ToList(); + var minArchiveCode = arc.Min(x => x.ArchiveCodeInt); + archiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode; + } + + var result = new InstitutionContractViewModel() + { + Id = item.Id, + ContractNo = item.ContractNo, + ContractStartGr = item.ContractStartGr, + ContractStartFa = item.ContractStartFa, + ContractEndGr = item.ContractEndGr, + ContractEndFa = item.ContractEndFa, + RepresentativeName = item.RepresentativeName, + ContractingPartyName = item.ContractingPartyName, + ContractingPartyId = item.ContractingPartyId, + EmployerNo = item.EmployerNo, + ContractAmount = item.ContractAmount, + EmployerName = item.EmployerName, + EmployerViewModels = item.EmployerViewModels, + IsActiveString = item.IsActiveString, + WorkshopCount = item.WorkshopCount, + WorkshopViewModels = item.WorkshopViewModels, + EmployeeCount = item.EmployeeCount, + ExpireColor = item.ExpireColor, + SearchAmount = item.SearchAmount, + BalanceDouble = item.BalanceDouble, + BalanceStr = item.BalanceStr, + Signature = item.Signature, + ArchiveCode = archiveCode, + TypeOfContract = item.TypeOfContract, + IsContractingPartyBlock = item.IsContractingPartyBlock, + BlockTimes = item.BlockTimes, + }; + join.Add(result); + } + + //Console.WriteLine("forEchTime : " + watchw.Elapsed); + var findeByFilter = new List(); + if (searchModel.WorkshopId != 0) + { + foreach (var item in join) + { + var check = item.WorkshopViewModels.Where(x => x.Id == searchModel.WorkshopId).ToList(); + if (check.Count > 0) + findeByFilter.Add(item); + } + + join = findeByFilter; + } + + var findeByFilter2 = new List(); + if (searchModel.EmployerId != 0) + { + foreach (var item in join) + { + var check = item.EmployerViewModels.Where(x => x.Id == searchModel.EmployerId).ToList(); + if (check.Count > 0) + findeByFilter2.Add(item); + } + + join = findeByFilter2; + } + + + join = join.OrderBy(x => x.WorkshopCount != "0" && string.IsNullOrWhiteSpace(x.ExpireColor)) + .ThenBy(x => x.WorkshopCount == "0" && string.IsNullOrWhiteSpace(x.ExpireColor)) + .ThenBy(x => x.ExpireColor == "red") + .ThenBy(x => x.ExpireColor == "purple") + .ThenBy(x => x.ExpireColor == "black").ToList(); + + return join; + } + + public List NewSearch(InstitutionContractSearchModel searchModel) + { + return _institutionContractRepository.NewSearch(searchModel); + } + + + public List GetInstitutionContractToSetServicesExcelImport() + { + var result = _institutionContractRepository.NewSearch(new InstitutionContractSearchModel()); + + return result.Where(x => + x.IsActiveString == "true" && x.IsContractingPartyBlock != "true" && x.WorkshopCount != "0" && + x.ContractStartGr <= DateTime.Now && x.ContractEndGr >= DateTime.Now).ToList(); + } + + public string ExpCheckColor(DateTime now, DateTime ContractEndGr, DateTime endThisMontGr, string ContractAmount, + string isActiveString) + { + string result = ""; + + if (ContractEndGr < now) + result = "black"; + if (ContractEndGr >= now && ContractEndGr <= endThisMontGr) + result = "red"; + if (ContractAmount == "0") + result = "purple"; + if (isActiveString == "blue") + result = "blue"; + return result; + } + + public TotalbalancViewModel TotalBalance(long contractingPartyId) + { + var result = new TotalbalancViewModel(); + + var firstGetStatement = _financialStatmentApplication.GetDetailsByContractingPartyId(contractingPartyId); + var allTransactions = firstGetStatement.FinancialTransactionViewModels; + if (allTransactions != null) + { + allTransactions = allTransactions.OrderBy(x => x.TdateGr).ToList(); + var debt = allTransactions.Sum(x => x.Deptor); + var credit = allTransactions.Sum(x => x.Creditor); + result.TotalBalanceDbl = debt - credit; + result.TotalBalanceStr = result.TotalBalanceDbl.ToMoney(); + } + + return result; + } + + public WorkshopsAndEmployeeViewModel WorkShopDetailsAndEmployeeCount(long contractingPartyId) + { + var result = new WorkshopsAndEmployeeViewModel(); + + var emplId = _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId).Select(x => x.Id) + .ToList(); + ; + result.WorkshopViewModels = _workshopRepository.GetWorkshopsByEmployerId(emplId); + var workshopIds = result.WorkshopViewModels.Select(x => x.Id).ToList(); + var left = 0; + result.WorkshopCount = Convert.ToString(workshopIds.Count); + var joinPersonelList = new List(); + foreach (var workshopId in workshopIds) + { + //var reslt = _workshopApplication.GetConnectedPersonnels(workshopId); + //var noBlock = reslt.Where(x => x.Black == false).ToList(); + //joinPersonelList.AddRange(noBlock); + var pCount = _workshopApplication.PersonnelCount(workshopId); + result.EmployeeCount = Convert.ToString(pCount); + } + //var joinlistWithoutDuplicat = joinPersonelList.GroupBy(x => x.PersonName).Select(x => x.First()).ToList(); + //left = joinlistWithoutDuplicat.Count(); + //result.EmployeeCount = Convert.ToString(left); + + + result.ArchiveCode = 0; + if (workshopIds.Count > 0) + { + var workshop = result.WorkshopViewModels.OrderBy(x => x.Id)?.ToList(); + + var arc = workshop.Select(x => new ArchiveCodConvertoint + { + ArchiveCodeInt = x.ArchiveCode.Substring(0, 1) == "b" ? 10000000 : x.ArchiveCode.ConvertToInt(), + }).OrderBy(x => x.ArchiveCodeInt).ToList(); + var minArchiveCode = arc.Min(x => x.ArchiveCodeInt); + result.ArchiveCode = minArchiveCode == 10000000 ? 0 : minArchiveCode; + } + + return result; + } + + public List PrintAll(List id) + { + throw new NotImplementedException(); + } + + public InstitutionContractViewModel PrintOne(long id) + { + var get = _institutionContractRepository.GetDetails(id); + var employer = _employerRepository.GetEmployerByContracrtingPartyID(get.ContractingPartyId); + var employerViewModels = employer; + var emplId = employerViewModels.Select(x => x.Id).ToList(); + var workshops = _workshopRepository.GetWorkshopsByEmployerId(emplId); + var res = new InstitutionContractViewModel() + { + Id = get.Id, + ContractNo = get.ContractNo, + + ContractStartFa = get.ContractStartFa, + + ContractEndFa = get.ContractEndFa, + + ContractingPartyName = get.ContractingPartyName, + + ContractingPartyId = get.ContractingPartyId, + ContractDateFa = get.ContractDateFa, + State = get.State, + City = get.City, + Address = get.Address, + Description = get.Description, + HasValueAddedTax = get.HasValueAddedTax, + ValueAddedTax = get.ValueAddedTax, + ContractAmount = get.ContractAmountString, + DailyCompenseation = get.DailyCompenseationString, + Obligation = get.ObligationString, + TotalAmount = get.TotalAmountString, + WorkshopViewModels = workshops + }; + return res; + } + + + public OperationResult Active(long id) + { + var opration = new OperationResult(); + var contract = _institutionContractRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.Active(); + + _institutionContractRepository.SaveChanges(); + return opration.Succcedded(); + } + + public OperationResult DeActive(long id) + { + var opration = new OperationResult(); + var contract = _institutionContractRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.DeActive(); + + + _institutionContractRepository.SaveChanges(); + return opration.Succcedded(); + } + + public OperationResult DeActiveBlue(long id) + { + var opration = new OperationResult(); + var institutionContract = _institutionContractRepository.Get(id); + if (institutionContract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + institutionContract.DeActiveBlue(); + _institutionContractRepository.SaveChanges(); + + return opration.Succcedded(); + } + + public OperationResult DeActiveAllConnections(long id) + { + var opration = new OperationResult(); + var institutionContract = _institutionContractRepository.Get(id); + if (institutionContract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + + var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); + if (contractingParty != null) + { + contractingParty.DeActive(); + _contractingPartyRepository.SaveChanges(); + var employers = + _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId); + //var employersIdList = employers.Select(x => x.Id).ToList(); + //var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList); + //foreach (var workshop in workshops) + //{ + // var res = _workshopApplication.DeActive(workshop.Id); + //} + foreach (var employer in employers) + { + var res = _employerRepository.DeActiveAll(employer.Id); + } + } + + return opration.Succcedded(); + } + + public OperationResult ReActiveAllConnections(long id) + { + var opration = new OperationResult(); + var institutionContract = _institutionContractRepository.Get(id); + if (institutionContract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + + var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); + if (contractingParty != null) + { + contractingParty.Active(); + _contractingPartyRepository.SaveChanges(); + var employers = + _employerRepository.GetEmployerByContracrtingPartyID(institutionContract.ContractingPartyId); + //var employersIdList = employers.Select(x => x.Id).ToList(); + //var workshops = _workshopApplication.GetWorkshopsByEmployerId(employersIdList); + //foreach (var workshop in workshops) + //{ + // var res = _workshopApplication.DeActive(workshop.Id); + //} + foreach (var employer in employers) + { + var res = _employerRepository.ActiveAll(employer.Id); + } + } + + return opration.Succcedded(); + } + + public void ReActiveAllAfterCreateNew(long contractingPartyId) + { + var contractingParty = _contractingPartyRepository.Get(contractingPartyId); + if (contractingParty != null) + { + if (contractingParty.IsActiveString == "false") + { + contractingParty.Active(); + _contractingPartyRepository.SaveChanges(); + } + + var employers = + _employerRepository.GetEmployerByContracrtingPartyID(contractingPartyId); + + foreach (var employer in employers) + { + var res = _employerRepository.ActiveAll(employer.Id); + } + } + } + + + public void RemoveContract(long id) + { + _institutionContractRepository.RemoveContract(id); + } + + + public OperationResult Sign(long id) + { + var opration = new OperationResult(); + var contract = _institutionContractRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.Sign(); + + + _institutionContractRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } + + public OperationResult UnSign(long id) + { + var opration = new OperationResult(); + var contract = _institutionContractRepository.Get(id); + if (contract == null) + return opration.Failed("رکورد مورد نظر یافت نشد"); + + contract.UnSign(); + + + _institutionContractRepository.SaveChanges(); + opration.IsSuccedded = true; + return opration.Succcedded(); + } + + public void CreateContractingPartyAccount(long contractingPartyid, long accountId) + { + _institutionContractRepository.CreateContractingPartyAccount(contractingPartyid, accountId); + } + + public double GetcontractAmount(int countPerson) + { + return _institutionContractRepository.GetcontractAmount(countPerson); + } + + public async Task> GetList( + InstitutionContractListSearchModel searchModel) + { + return await _institutionContractRepository.GetList(searchModel); + } + + public Task GetListStats(InstitutionContractListSearchModel searchModel) + { + return _institutionContractRepository.GetListStats(searchModel); + } + + public async Task CreateAsync(CreateInstitutionContractRequest command) + { + var opration = new OperationResult(); + var syear = command.ContractStartFa.Substring(0, 4); + var smonth = command.ContractStartFa.Substring(5, 2); + var sday = command.ContractStartFa.Substring(8, 2); + + var transaction = await _contractingPartyRepository.BeginTransactionAsync(); + + if (command.ContractStartFa.TryToGeorgianDateTime(out var contractStartGr) == false) + return opration.Failed("تاریخ شروع قرارداد معتبر نیست"); + + contractStartGr.AddMonthsFa((int)command.Duration, out var contractEndGr); + + contractEndGr = contractEndGr.ToFarsi().FindeEndOfMonth().ToGeorgianDateTime(); + + PersonalContractingParty existingContractingParty = null; + if (command.ContractingPartyLegalType == LegalType.Legal) + { + existingContractingParty = + await _contractingPartyRepository.GetByNationalId(command.LegalParty.NationalId); + if (_contractingPartyRepository.Exists(x => + x.LName == command.LegalParty.CompanyName && x.RegisterId == command.LegalParty.RegisterId)) + { + if (_institutionContractRepository.Exists(x => x.ContractStartGr < contractEndGr + && contractStartGr < x.ContractEndGr + && x.ContractingPartyId == existingContractingParty.id + && x.IsActiveString == "true")) + { + throw new BadRequestException("امکان ایجاد قرارداد تکراری وجود ندارد"); + } + } if (!command.LegalParty.IsAuth && existingContractingParty != null) { @@ -1005,88 +1005,87 @@ public class InstitutionContractApplication : IInstitutionContractApplication } } - await _institutionContractRepository.SaveChangesAsync(); - PersonalContractingParty contractingParty; - if (existingContractingParty != null) - { - contractingParty = existingContractingParty; - } - else - { - OperationResult contractingPartyResult = command.ContractingPartyLegalType switch - { - LegalType.Legal => await CreateLegalContractingPartyEntity(command.LegalParty, command.RepresentativeId, - command.Address, - command.City, command.Province), - LegalType.Real => await CreateRealContractingPartyEntity(command.RealParty, command.RepresentativeId, - command.Address, - command.City, command.Province), - _ => throw new BadRequestException("نوع طرف قرارداد مشخص نشده است") - }; + await _institutionContractRepository.SaveChangesAsync(); + PersonalContractingParty contractingParty; + if (existingContractingParty != null) + { + contractingParty = existingContractingParty; + } + else + { + OperationResult contractingPartyResult = command.ContractingPartyLegalType switch + { + LegalType.Legal => await CreateLegalContractingPartyEntity(command.LegalParty, command.RepresentativeId, + command.Address, + command.City, command.Province), + LegalType.Real => await CreateRealContractingPartyEntity(command.RealParty, command.RepresentativeId, + command.Address, + command.City, command.Province), + _ => throw new BadRequestException("نوع طرف قرارداد مشخص نشده است") + }; - if (!contractingPartyResult.IsSuccedded) - return opration.Failed(contractingPartyResult.Message); + if (!contractingPartyResult.IsSuccedded) + return opration.Failed(contractingPartyResult.Message); contractingParty = contractingPartyResult.Data; } - if (_institutionContractRepository.Exists(x => - x.ContractingPartyId == contractingParty.id && x.RepresentativeId == command.RepresentativeId && - x.TypeOfContract == "JobRelation")) - return opration.Failed( - "برای این معرف و طرف حساب قبلا قرارداد ایجاد شده است، شما میتوانید از تمدید استفاده کنید"); + if (_institutionContractRepository.Exists(x => + x.ContractingPartyId == contractingParty.id && x.RepresentativeId == command.RepresentativeId && + x.TypeOfContract == "JobRelation")) + return opration.Failed( + "برای این معرف و طرف حساب قبلا قرارداد ایجاد شده است، شما میتوانید از تمدید استفاده کنید"); - var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/0"; + var contractNo = $"{syear}{smonth}{sday}/{contractingParty.ArchiveCode}/0"; - var representative = _representativeRepository.Get(command.RepresentativeId); - if (representative == null) - return opration.Failed("معرف مورد نظر یافت نشد"); + var representative = _representativeRepository.Get(command.RepresentativeId); + if (representative == null) + return opration.Failed("معرف مورد نظر یافت نشد"); - if (command.IsInstallment && - !command.Workshops.Any(x => x.HasContractPlanInPerson || x.HasInsurancePlanInPerson)) - { - return opration.Failed("برای قراردادهای اقساطی حداقل یک کارگاه باید دارای طرح حضوری باشد"); - } + if (command.IsInstallment && + !command.Workshops.Any(x => x.HasContractPlanInPerson || x.HasInsurancePlanInPerson)) + { + return opration.Failed("برای قراردادهای اقساطی حداقل یک کارگاه باید دارای طرح حضوری باشد"); + } - var today = DateTime.Today; + var today = DateTime.Today; - var contractDateGr = today; - var contractDateFa = contractDateGr.ToFarsi(); + var contractDateGr = today; + var contractDateFa = contractDateGr.ToFarsi(); - var hasValueAddedTax = command.TaxAmount > 0 ? "true" : "false"; + var hasValueAddedTax = command.TaxAmount > 0 ? "true" : "false"; - var contractingPartyFullName = ""; - if (contractingParty.IsLegal == "حقیقی") - { + var contractingPartyFullName = ""; + if (contractingParty.IsLegal == "حقیقی") + { + contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName; + } + else + { + contractingPartyFullName = contractingParty.CeoFName + " " + contractingParty.CeoLName; + } - contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName; - } - else - { - contractingPartyFullName = contractingParty.CeoFName + " " + contractingParty.CeoLName; - } - - var workshopDetails = command.Workshops.Select(x => - new InstitutionContractWorkshopInitial(x.WorkshopName, x.HasRollCallPlan, false, x.HasCustomizeCheckoutPlan, - x.HasContractPlan, x.HasContractPlanInPerson, x.HasInsurancePlan, x.HasInsurancePlanInPerson, - x.PersonnelCount, x.Price)).ToList(); + var workshopDetails = command.Workshops.Select(x => + new InstitutionContractWorkshopInitial(x.WorkshopName, x.HasRollCallPlan, false, x.HasCustomizeCheckoutPlan, + x.HasContractPlan, x.HasContractPlanInPerson, x.HasInsurancePlan, x.HasInsurancePlanInPerson, + x.PersonnelCount, x.Price)).ToList(); - var entity = new InstitutionContract(contractNo, command.RepresentativeId, representative.FullName, - contractingParty.id, - contractingPartyFullName, contractDateGr, contractDateFa, command.Province, command.City, command.Address, - contractStartGr, - contractStartGr.ToFarsi(), contractEndGr, contractEndGr.ToFarsi(), command.OneMonthAmount, - command.DailyCompensation, - command.Obligation, command.TotalAmount, 0, - command.Workshops.Count.ToString(), - command.Workshops.Sum(x => x.PersonnelCount).ToString(), command.Description, - "NotOfficial", "JobRelation", hasValueAddedTax, - command.TaxAmount, workshopDetails, command.LawId); + var entity = new InstitutionContract(contractNo, command.RepresentativeId, representative.FullName, + contractingParty.id, + contractingPartyFullName, contractDateGr, contractDateFa, command.Province, command.City, command.Address, + contractStartGr, + contractStartGr.ToFarsi(), contractEndGr, contractEndGr.ToFarsi(), command.OneMonthAmount, + command.DailyCompensation, + command.Obligation, command.TotalAmount, 0, + command.Workshops.Count.ToString(), + command.Workshops.Sum(x => x.PersonnelCount).ToString(), command.Description, + "NotOfficial", "JobRelation", hasValueAddedTax, + command.TaxAmount, workshopDetails, command.LawId); FinancialStatment financialStatement; @@ -1108,21 +1107,21 @@ public class InstitutionContractApplication : IInstitutionContractApplication CalculateInstallment(command.TotalAmount, (int)command.Duration, command.ContractStartFa, true); - // دریافت مبلغ اولین قسط - //این کار برای این هست که اولین قسط باید با تاریخ امروز باشد و باید به وضعیت مالی بدهی ایجاد شود که یوزر اولین بدهی را وارد کند - var firstInstallmentAmount = installments.First().Amount; + // دریافت مبلغ اولین قسط + //این کار برای این هست که اولین قسط باید با تاریخ امروز باشد و باید به وضعیت مالی بدهی ایجاد شود که یوزر اولین بدهی را وارد کند + var firstInstallmentAmount = installments.First().Amount; - // حذف اولین قسط - installments.RemoveAt(0); + // حذف اولین قسط + installments.RemoveAt(0); - // ایجاد قسط جدید با تاریخ امروز - var todayInstallment = new InstitutionContractInstallment(DateTime.Today, firstInstallmentAmount, ""); + // ایجاد قسط جدید با تاریخ امروز + var todayInstallment = new InstitutionContractInstallment(DateTime.Today, firstInstallmentAmount, ""); - // اضافه کردن قسط جدید به ابتدای لیست - installments.Insert(0, todayInstallment); + // اضافه کردن قسط جدید به ابتدای لیست + installments.Insert(0, todayInstallment); - entity.SetInstallments(installments); + entity.SetInstallments(installments); await _institutionContractRepository.SaveChangesAsync(); @@ -1139,108 +1138,108 @@ public class InstitutionContractApplication : IInstitutionContractApplication }; _contactInfoApplication.Create(mainContactInfo); - foreach (var contactInfo in command.ContactInfos) - { - if (contactInfo.PhoneNumber != null) - { - var contactinfo = new CreateContactInfo - { - InstitutionContractId = entity.id, - PhoneType = contactInfo.PhoneType, - Position = contactInfo.Position, - PhoneNumber = contactInfo.PhoneNumber, - FnameLname = contactInfo.FnameLname, - SendSms = contactInfo.SendSmsString == "true" ? true : false - }; - _contactInfoApplication.Create(contactinfo); - } - } + foreach (var contactInfo in command.ContactInfos) + { + if (contactInfo.PhoneNumber != null) + { + var contactinfo = new CreateContactInfo + { + InstitutionContractId = entity.id, + PhoneType = contactInfo.PhoneType, + Position = contactInfo.Position, + PhoneNumber = contactInfo.PhoneNumber, + FnameLname = contactInfo.FnameLname, + SendSms = contactInfo.SendSmsString == "true" ? true : false + }; + _contactInfoApplication.Create(contactinfo); + } + } - var userPass = contractingParty.IsLegal == "حقیقی" - ? contractingParty.Nationalcode - : contractingParty.NationalId; - var createAcc = new RegisterAccount - { - Fullname = contractingParty.LName, - Username = userPass, - Password = userPass, - Mobile = contractingParty.Phone, - NationalCode = userPass - }; - var res = _accountApplication.RegisterClient(createAcc); - if (res.IsSuccedded) - CreateContractingPartyAccount(contractingParty.id, res.SendId); + var userPass = contractingParty.IsLegal == "حقیقی" + ? contractingParty.Nationalcode + : contractingParty.NationalId; + var createAcc = new RegisterAccount + { + Fullname = contractingParty.LName, + Username = userPass, + Password = userPass, + Mobile = contractingParty.Phone, + NationalCode = userPass + }; + var res = _accountApplication.RegisterClient(createAcc); + if (res.IsSuccedded) + CreateContractingPartyAccount(contractingParty.id, res.SendId); - await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName, - entity.PublicId, contractingParty.id, entity.id); + await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName, + entity.PublicId, contractingParty.id, entity.id); - await _institutionContractRepository.SaveChangesAsync(); + await _institutionContractRepository.SaveChangesAsync(); - await transaction.CommitAsync(); - return opration.Succcedded(); - } + await transaction.CommitAsync(); + return opration.Succcedded(); + } - public async Task EditAsync(EditInstitutionContractRequest command) - { - throw new NotImplementedException(); - } + public async Task EditAsync(EditInstitutionContractRequest command) + { + throw new NotImplementedException(); + } - public Task> RegistrationWorkflowMainList() - { - return _institutionContractRepository.RegistrationWorkflowMainList(); - } + public Task> RegistrationWorkflowMainList() + { + return _institutionContractRepository.RegistrationWorkflowMainList(); + } - public Task> RegistrationWorkflowItems(long institutionContractId) - { - return _institutionContractRepository.RegistrationWorkflowItems(institutionContractId); - } + public Task> RegistrationWorkflowItems(long institutionContractId) + { + return _institutionContractRepository.RegistrationWorkflowItems(institutionContractId); + } - public async Task GetVerificationDetails(Guid id) - { - return await _institutionContractRepository.GetVerificationDetails(id); - } + public async Task GetVerificationDetails(Guid id) + { + return await _institutionContractRepository.GetVerificationDetails(id); + } - public async Task> SendVerifyOtp(Guid id) - { - var institutionContract = await _institutionContractRepository.GetByPublicIdAsync(id); - if (institutionContract == null) - { - throw new NotFoundException("رکورد مورد نظر یافت نشد"); - } + public async Task> SendVerifyOtp(Guid id) + { + var institutionContract = await _institutionContractRepository.GetByPublicIdAsync(id); + if (institutionContract == null) + { + throw new NotFoundException("رکورد مورد نظر یافت نشد"); + } - if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) - throw new BadRequestException("این قرارداد مالی قبلا تایید شده است"); + if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) + throw new BadRequestException("این قرارداد مالی قبلا تایید شده است"); - if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && - institutionContract.VerifyCodeCreation != DateTime.MinValue) - { - if (!institutionContract.CanResendVerifyCode) - { - throw new BadRequestException("کد تایید قبلی هنوز منقضی نشده است", - new Dictionary - { - { - "expireTime", (int)institutionContract.ReSendTime.TotalSeconds - - (int)(DateTime.Now - institutionContract.VerifyCodeCreation).TotalSeconds - } - }); - } - } + if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && + institutionContract.VerifyCodeCreation != DateTime.MinValue) + { + if (!institutionContract.CanResendVerifyCode) + { + throw new BadRequestException("کد تایید قبلی هنوز منقضی نشده است", + new Dictionary + { + { + "expireTime", (int)institutionContract.ReSendTime.TotalSeconds - + (int)(DateTime.Now - institutionContract.VerifyCodeCreation).TotalSeconds + } + }); + } + } - var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); - if (contractingParty == null) - throw new NotFoundException("طرف قرارداد یافت نشد"); + var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); + if (contractingParty == null) + throw new NotFoundException("طرف قرارداد یافت نشد"); - var code = new Random().Next(1000, 9999).ToString(); + var code = new Random().Next(1000, 9999).ToString(); - var contractingPartyFullName = contractingParty.IsLegal == "حقیقی" - ? contractingParty.FName + " " + contractingParty.LName - : contractingParty.CeoFName + " " + contractingParty.CeoLName; + var contractingPartyFullName = contractingParty.IsLegal == "حقیقی" + ? contractingParty.FName + " " + contractingParty.LName + : contractingParty.CeoFName + " " + contractingParty.CeoLName; - institutionContract.SetVerifyCode(code, contractingPartyFullName, contractingParty.Phone); + institutionContract.SetVerifyCode(code, contractingPartyFullName, contractingParty.Phone); var transaction = await _institutionContractRepository.BeginTransactionAsync(); try @@ -1256,34 +1255,34 @@ public class InstitutionContractApplication : IInstitutionContractApplication throw; } - await transaction.CommitAsync(); - var result = new OtpResultViewModel - { - ExpireTimeSec = (int)institutionContract.ExpireTime.TotalSeconds, - ReSendTimeSec = (int)institutionContract.ReSendTime.TotalSeconds - }; - return new OperationResult().Succcedded(result); - } + await transaction.CommitAsync(); + var result = new OtpResultViewModel + { + ExpireTimeSec = (int)institutionContract.ExpireTime.TotalSeconds, + ReSendTimeSec = (int)institutionContract.ReSendTime.TotalSeconds + }; + return new OperationResult().Succcedded(result); + } - public async Task> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl) - { - var op = new OperationResult(); - var institutionContract = await _institutionContractRepository.GetByPublicIdAsync(publicId); - if (institutionContract == null) - { - throw new NotFoundException("رکورد مورد نظر یافت نشد"); - } + public async Task> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl) + { + var op = new OperationResult(); + var institutionContract = await _institutionContractRepository.GetByPublicIdAsync(publicId); + if (institutionContract == null) + { + throw new NotFoundException("رکورد مورد نظر یافت نشد"); + } - if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) - throw new BadRequestException("این قرارداد مالی قبلا تایید شده است"); + if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.Verified) + throw new BadRequestException("این قرارداد مالی قبلا تایید شده است"); - if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && - institutionContract.VerifyCodeExpired) - throw new BadRequestException("کد تایید منقضی شده است"); + if (institutionContract.VerificationStatus == InstitutionContractVerificationStatus.PendingForVerify && + institutionContract.VerifyCodeExpired) + throw new BadRequestException("کد تایید منقضی شده است"); - var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); - if (contractingParty == null) - throw new NotFoundException("طرف قرارداد یافت نشد"); + var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); + if (contractingParty == null) + throw new NotFoundException("طرف قرارداد یافت نشد"); if (institutionContract.VerifyCode != code) return op.Failed("کد وارد شده صحیح نمی باشد"); @@ -1373,356 +1372,373 @@ public class InstitutionContractApplication : IInstitutionContractApplication return op.Failed("خطا در ایجاد درگاه پرداخت: " + gatewayResponse.Message + gatewayResponse.ErrorCode); - // institutionContract.SetPendingWorkflow(); - // - // var phone = institutionContract.ContactInfoList.FirstOrDefault(x => - // x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); - // if (phone !=null) - // { - // var userPass = contractingParty.IsLegal == "حقیقی" - // ? contractingParty.Nationalcode - // : contractingParty.NationalId; - // var createAcc = new RegisterAccount - // { - // Fullname = contractingParty.LName, - // Username = userPass, - // Password = userPass, - // Mobile = phone.PhoneNumber, - // NationalCode = userPass - // }; - // var res = _accountApplication.RegisterClient(createAcc); - // if (res.IsSuccedded) - // CreateContractingPartyAccount(contractingParty.id, res.SendId); - // } + // institutionContract.SetPendingWorkflow(); + // + // var phone = institutionContract.ContactInfoList.FirstOrDefault(x => + // x.SendSms && x.Position == "طرف قرارداد" && x.PhoneType == "شماره همراه"); + // if (phone !=null) + // { + // var userPass = contractingParty.IsLegal == "حقیقی" + // ? contractingParty.Nationalcode + // : contractingParty.NationalId; + // var createAcc = new RegisterAccount + // { + // Fullname = contractingParty.LName, + // Username = userPass, + // Password = userPass, + // Mobile = phone.PhoneNumber, + // NationalCode = userPass + // }; + // var res = _accountApplication.RegisterClient(createAcc); + // if (res.IsSuccedded) + // CreateContractingPartyAccount(contractingParty.id, res.SendId); + // } - await dbTransaction.CommitAsync(); - await _institutionContractRepository.SaveChangesAsync(); - return op.Succcedded(gatewayResponse.Token); - } + await dbTransaction.CommitAsync(); + await _institutionContractRepository.SaveChangesAsync(); + return op.Succcedded(gatewayResponse.Token); + } - public async Task GetWorkshopInitialDetails(long workshopDetailsId) + public async Task GetWorkshopInitialDetails(long workshopDetailsId) + { + var details = await _institutionContractRepository.GetInstitutionWorkshopInitialDetails(workshopDetailsId); + var services = details.Services; + var newArchiveCode = _workshopRepository.GetLastArchiveCode() + 1; + + var res = new InstitutionContractWorkshopDetailViewModel() + { + ServicesViewModel = new WorkshopServicesViewModel() + { + Contract = services.Contract, + ContractInPerson = services.ContractInPerson, + CustomizeCheckout = services.CustomizeCheckout, + Insurance = services.Insurance, + InsuranceInPerson = services.InsuranceInPerson, + RollCall = services.RollCall, + RollCallInPerson = services.RollCallInPerson + }, + WorkshopName = details.WorkshopName, + ArchiveCode = newArchiveCode + }; + return res; + } + + public async Task GetExtensionInquiry(long previousContractId) + { + return await _institutionContractRepository.GetExtensionInquiry(previousContractId); + } + + public async Task GetExtensionWorkshops( + InstitutionContractExtensionWorkshopsRequest request) + { + return await _institutionContractRepository.GetExtensionWorkshops(request); + } + + public async Task GetExtensionInstitutionPlan( + InstitutionContractExtensionPlanRequest request) + { + return await _institutionContractRepository.GetExtensionInstitutionPlan(request); + } + + public async Task GetExtensionPaymentMethod( + InstitutionContractExtensionPaymentRequest request) + { + return await _institutionContractRepository.GetExtensionPaymentMethod(request); + } + + public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) + { + return await _institutionContractRepository.ExtensionComplete(request); + } + + public async Task> GetInstitutionContractSelectList(string search, + string selected) + { + return await _institutionContractRepository.GetInstitutionContractSelectList(search, selected); + } + + public async Task GetAmendmentWorkshops(long institutionContractId) + { + return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId); + } + + public async Task InsertAmendmentTempWorkshops( + InstitutionContractAmendmentTempWorkshopViewModel request) + { + return await _institutionContractRepository.InsertAmendmentTempWorkshops(request); + } + + public Task RemoveAmendmentWorkshops(Guid workshopTempId) + { + return _institutionContractRepository.RemoveAmendmentWorkshops(workshopTempId); + } + + public Task GetAmendmentPaymentDetails( + InsitutionContractAmendmentPaymentRequest request) + { + return _institutionContractRepository.GetAmendmentPaymentDetails(request); + } + + public async Task ResendVerifyLink(long institutionContractId) + { + var institutionContract = _institutionContractRepository.Get(institutionContractId); + + if (institutionContract == null) + { + throw new NotFoundException("رکورد مورد نظر یافت نشد"); + } + + if (institutionContract.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify) + { + throw new BadRequestException("این قرارداد مالی در وضعیت مناسبی برای ارسال مجدد لینک تایید نمی باشد"); + } + + var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); + if (contractingParty == null) + throw new NotFoundException("طرف قرارداد یافت نشد"); + var contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName; + await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName, + institutionContract.PublicId, contractingParty.id, institutionContract.id); + return new OperationResult().Succcedded(); + } + + public async Task PrintOneAsync(long id) + { + return (await _institutionContractRepository.PrintAllAsync([id])).FirstOrDefault(); + } + + public async Task SetPendingWorkflow(long entityId) + { + var op = new OperationResult(); + var institutionContract = await _institutionContractRepository.GetIncludeWorkshopDetailsAsync(entityId); + if (institutionContract == null) + { + return op.Failed("قرارداد مالی یافت نشد"); + } + + if (institutionContract.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify) + { + return op.Failed("وضعیت قرارداد مالی برای این عملیات مناسب نمی باشد"); + } + + if (institutionContract.WorkshopGroup.InitialWorkshops.All(x => x.WorkshopCreated && x.WorkshopId is > 0)) + { + institutionContract.Verified(); + } + else + { + institutionContract.SetPendingWorkflow(); + } + + await _institutionContractRepository.SaveChangesAsync(); + return op.Succcedded(); + } + + public async Task GetIdByInstallmentId(long installmentId) { - var details = await _institutionContractRepository.GetInstitutionWorkshopInitialDetails(workshopDetailsId); - var services = details.Services; - var newArchiveCode = _workshopRepository.GetLastArchiveCode() + 1; - - var res = new InstitutionContractWorkshopDetailViewModel() - { - ServicesViewModel = new WorkshopServicesViewModel() - { - Contract = services.Contract, - ContractInPerson = services.ContractInPerson, - CustomizeCheckout = services.CustomizeCheckout, - Insurance = services.Insurance, - InsuranceInPerson = services.InsuranceInPerson, - RollCall = services.RollCall, - RollCallInPerson = services.RollCallInPerson - }, - WorkshopName = details.WorkshopName, - ArchiveCode = newArchiveCode - }; - return res; + return await _institutionContractRepository.GetIdByInstallmentId(installmentId); } - public async Task GetExtensionInquiry(long previousContractId) - { - return await _institutionContractRepository.GetExtensionInquiry(previousContractId); - } - - public async Task GetExtensionWorkshops( - InstitutionContractExtensionWorkshopsRequest request) - { - return await _institutionContractRepository.GetExtensionWorkshops(request); - } - - public async Task GetExtensionInstitutionPlan( - InstitutionContractExtensionPlanRequest request) - { - return await _institutionContractRepository.GetExtensionInstitutionPlan(request); - } - - public async Task GetExtensionPaymentMethod( - InstitutionContractExtensionPaymentRequest request) - { - return await _institutionContractRepository.GetExtensionPaymentMethod(request); - } - - public async Task ExtensionComplete(InstitutionContractExtensionCompleteRequest request) - { - return await _institutionContractRepository.ExtensionComplete(request); - } - - public async Task> GetInstitutionContractSelectList(string search, string selected) - { - return await _institutionContractRepository.GetInstitutionContractSelectList(search, selected); - } - - public async Task GetAmendmentWorkshops(long institutionContractId) - { - return await _institutionContractRepository.GetAmendmentWorkshops(institutionContractId); - } - - public async Task InsertAmendmentTempWorkshops(InstitutionContractAmendmentTempWorkshopViewModel request) - { - return await _institutionContractRepository.InsertAmendmentTempWorkshops(request); - } - - public Task RemoveAmendmentWorkshops(Guid workshopTempId) - { - return _institutionContractRepository.RemoveAmendmentWorkshops(workshopTempId); - } - - public Task GetAmendmentPaymentDetails(InsitutionContractAmendmentPaymentRequest request) - { - return _institutionContractRepository.GetAmendmentPaymentDetails(request); - } - - public async Task ResendVerifyLink(long institutionContractId) - { - var institutionContract = _institutionContractRepository.Get(institutionContractId); - - if (institutionContract == null) - { - throw new NotFoundException("رکورد مورد نظر یافت نشد"); - } - - if (institutionContract.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify) - { - throw new BadRequestException("این قرارداد مالی در وضعیت مناسبی برای ارسال مجدد لینک تایید نمی باشد"); - } - var contractingParty = _contractingPartyRepository.Get(institutionContract.ContractingPartyId); - if (contractingParty == null) - throw new NotFoundException("طرف قرارداد یافت نشد"); - var contractingPartyFullName = contractingParty.FName + " " + contractingParty.LName; - await _smsService.SendInstitutionCreationVerificationLink(contractingParty.Phone, contractingPartyFullName, - institutionContract.PublicId, contractingParty.id, institutionContract.id); - return new OperationResult().Succcedded(); - } - - public async Task PrintOneAsync(long id) - { - return (await _institutionContractRepository.PrintAllAsync([id])).FirstOrDefault(); - } - - public async Task SetPendingWorkflow(long entityId) - { - var op = new OperationResult(); - var institutionContract = _institutionContractRepository.Get(entityId); - if (institutionContract == null) - { - return op.Failed("قرارداد مالی یافت نشد"); - } - - if (institutionContract.VerificationStatus != InstitutionContractVerificationStatus.PendingForVerify) - { - return op.Failed("وضعیت قرارداد مالی برای این عملیات مناسب نمی باشد"); - } - institutionContract.SetPendingWorkflow(); - await _institutionContractRepository.SaveChangesAsync(); - return op.Succcedded(); - } + private async Task> CreateLegalContractingPartyEntity( + CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, + string state) + { + var opration = new OperationResult(); - private async Task> CreateLegalContractingPartyEntity( - CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, - string state) - { - var opration = new OperationResult(); + if (representativeId < 1) + return opration.Failed("لطفا معرف را انتخاب کنید"); + + if (_contractingPartyRepository.Exists(x => + x.LName == request.CompanyName && x.NationalId == request.NationalId)) + return opration.Failed("نام شرکت وارد شده تکراری است"); - if (representativeId < 1) - return opration.Failed("لطفا معرف را انتخاب کنید"); - - if (_contractingPartyRepository.Exists(x => - x.LName == request.CompanyName && x.NationalId == request.NationalId)) - return opration.Failed("نام شرکت وارد شده تکراری است"); + //if (_contractingPartyRepository.Exists(x => + // x.RegisterId == request.RegisterId && x.LName != request.CompanyName)) + // return opration.Failed("شماره ثبت وارد شده تکراری است"); - //if (_contractingPartyRepository.Exists(x => - // x.RegisterId == request.RegisterId && x.LName != request.CompanyName)) - // return opration.Failed("شماره ثبت وارد شده تکراری است"); + if (_contractingPartyRepository.Exists(x => + x.NationalId == request.NationalId && x.LName != request.CompanyName)) + { + return opration.Failed("شناسه ملی وارد شده تکراری است"); + } + + var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode(); - if (_contractingPartyRepository.Exists(x => - x.NationalId == request.NationalId && x.LName != request.CompanyName)) - { - return opration.Failed("شناسه ملی وارد شده تکراری است"); - } + var representative = _representativeRepository.GetDetails(representativeId); + var legalContractingParty = new PersonalContractingParty("*", request.CompanyName, + "*", "*", request.RegisterId, request.NationalId, + "حقوقی", + request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName, + archiveCode, state, city, null, null, + request.FName, request.LName, request.Position); - var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode(); + if (request.IsAuth) + { + legalContractingParty.LegalAuthentication(request.FName, request.LName, request.FatherName, + request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); + } + + await _contractingPartyRepository.CreateAsync(legalContractingParty); + await _contractingPartyRepository.SaveChangesAsync(); + + return opration.Succcedded(legalContractingParty); + } + + private async Task> CreateRealContractingPartyEntity( + CreateInstitutionContractRealPartyRequest request, long representativeId, string address, + string city, string province) + { + var operation = new OperationResult(); - var representative = _representativeRepository.GetDetails(representativeId); - var legalContractingParty = new PersonalContractingParty("*", request.CompanyName, - "*", "*", request.RegisterId, request.NationalId, - "حقوقی", - request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName, - archiveCode, state, city, null, null, - request.FName, request.LName, request.Position); + if (representativeId < 1) + return operation.Failed("لطفا معرف را انتخاب کنید"); - if (request.IsAuth) - { - legalContractingParty.LegalAuthentication(request.FName, request.LName, request.FatherName, - request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); - } + if (_contractingPartyRepository.Exists(x => x.Nationalcode == request.NationalCode)) + { + return operation.Failed("کد ملی وارد شده تکراری است"); + } - await _contractingPartyRepository.CreateAsync(legalContractingParty); - await _contractingPartyRepository.SaveChangesAsync(); + var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode(); - return opration.Succcedded(legalContractingParty); - } + if (request.NationalCode.NationalCodeValid() != "valid") + { + return operation.Failed("کد ملی وارد شده نا معتبر است"); + } - private async Task> CreateRealContractingPartyEntity( - CreateInstitutionContractRealPartyRequest request, long representativeId, string address, - string city, string province) - { - var operation = new OperationResult(); + var representative = _representativeRepository.GetDetails(representativeId); + + if (representative == null) + return operation.Failed("معرف مورد نظر یافت نشد"); + + var personalContractingParty = new PersonalContractingParty(request.FName, request.LName, + request.NationalCode, request.IdNumber, "*", "*", + "حقیقی", + request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName, archiveCode, + province, city, null, null, null, null); + + if (request.IsAuth) + { + personalContractingParty.Authentication(request.FName, request.LName, request.FatherName, + request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); + } + + await _contractingPartyRepository.CreateAsync(personalContractingParty); + await _contractingPartyRepository.SaveChangesAsync(); + + return operation.Succcedded(personalContractingParty); + } + + public static List CalculateInstallment(double amount, int installmentCount, + string loanStartDate, bool getRounded) + { + int day = Convert.ToInt32(loanStartDate.Substring(8, 2)); + int month = Convert.ToInt32(loanStartDate.Substring(5, 2)); + int year = Convert.ToInt32(loanStartDate.Substring(0, 4)); + + var installments = new List(); - if (representativeId < 1) - return operation.Failed("لطفا معرف را انتخاب کنید"); - - if (_contractingPartyRepository.Exists(x => x.Nationalcode == request.NationalCode)) - { - return operation.Failed("کد ملی وارد شده تکراری است"); - } - - var archiveCode = _contractingPartyRepository.GetLastNewArchiveCode(); - - if (request.NationalCode.NationalCodeValid() != "valid") - { - return operation.Failed("کد ملی وارد شده نا معتبر است"); - } - - var representative = _representativeRepository.GetDetails(representativeId); - - if (representative == null) - return operation.Failed("معرف مورد نظر یافت نشد"); - - var personalContractingParty = new PersonalContractingParty(request.FName, request.LName, - request.NationalCode, request.IdNumber, "*", "*", - "حقیقی", - request.PhoneNumber, request.PhoneNumber, address, representativeId, representative.FullName, archiveCode, - province, city, null, null, null, null); - - if (request.IsAuth) - { - personalContractingParty.Authentication(request.FName, request.LName, request.FatherName, - request.IdNumber, null, null, request.BirthDateFa, request.Gender, request.PhoneNumber); - } - - await _contractingPartyRepository.CreateAsync(personalContractingParty); - await _contractingPartyRepository.SaveChangesAsync(); - - return operation.Succcedded(personalContractingParty); - } - - public static List CalculateInstallment(double amount, int installmentCount, - string loanStartDate, bool getRounded) - { - int day = Convert.ToInt32(loanStartDate.Substring(8, 2)); - int month = Convert.ToInt32(loanStartDate.Substring(5, 2)); - int year = Convert.ToInt32(loanStartDate.Substring(0, 4)); - - var installments = new List(); + bool endOfMonth = day == 31; - bool endOfMonth = day == 31; + var dividedAmount = amount / installmentCount; + double moneyPerMonth = 0; - var dividedAmount = amount / installmentCount; + if (getRounded) + moneyPerMonth = Math.Floor(dividedAmount / 1000) * 1000; + else + moneyPerMonth = Math.Floor(dividedAmount); - double moneyPerMonth = 0; + double lastLoan = amount - (moneyPerMonth * (installmentCount - 1)); - if (getRounded) - moneyPerMonth = Math.Floor(dividedAmount / 1000) * 1000; - else - moneyPerMonth = Math.Floor(dividedAmount); + if (endOfMonth) + { + for (int i = 1; i < installmentCount; i++) + { + var installment = + new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), moneyPerMonth, ""); - double lastLoan = amount - (moneyPerMonth * (installmentCount - 1)); + installments.Add(installment); - if (endOfMonth) - { - for (int i = 1; i < installmentCount; i++) - { - var installment = - new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), moneyPerMonth, ""); + if (month == 12) + { + year++; + month = 1; + } + else + { + month++; + } - installments.Add(installment); + loanStartDate = $"{year:0000}/{month:00}/01".FindeEndOfMonth(); + } - if (month == 12) - { - year++; - month = 1; - } - else - { - month++; - } + var lastInstallment = new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), lastLoan, ""); - loanStartDate = $"{year:0000}/{month:00}/01".FindeEndOfMonth(); - } + installments.Add(lastInstallment); + return installments; + } + else + { + for (int i = 1; i < installmentCount; i++) + { + var installment = + new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), moneyPerMonth, ""); - var lastInstallment = new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), lastLoan, ""); + installments.Add(installment); + var endDay = 0; - installments.Add(lastInstallment); - return installments; - } - else - { - for (int i = 1; i < installmentCount; i++) - { - var installment = - new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), moneyPerMonth, ""); + if (month == 12) + { + year++; + month = 1; + } + else + { + month++; + } - installments.Add(installment); - var endDay = 0; + if (day == 30) + { + if (month == 12) + { + var lastYearDay = + Convert.ToInt32($"{year:0000}/{month:00}/1".FindeEndOfMonth().Substring(8, 2)); + endDay = lastYearDay == 30 ? lastYearDay : 29; + } + } - if (month == 12) - { - year++; - month = 1; - } - else - { - month++; - } + loanStartDate = + endDay == 0 ? $"{year:0000}/{month:00}/{day:00}" : $"{year:0000}/{month:00}/{endDay:00}"; + } - if (day == 30) - { - if (month == 12) - { - var lastYearDay = - Convert.ToInt32($"{year:0000}/{month:00}/1".FindeEndOfMonth().Substring(8, 2)); - endDay = lastYearDay == 30 ? lastYearDay : 29; - } - } - - loanStartDate = - endDay == 0 ? $"{year:0000}/{month:00}/{day:00}" : $"{year:0000}/{month:00}/{endDay:00}"; - } - - var lastInstallment = new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), lastLoan, ""); - installments.Add(lastInstallment); - return installments; - } - } + var lastInstallment = new InstitutionContractInstallment(loanStartDate.ToGeorgianDateTime(), lastLoan, ""); + installments.Add(lastInstallment); + return installments; + } + } } #region CustomViewModels public class TotalbalancViewModel { - public string TotalBalanceStr { get; set; } = "0"; - public double TotalBalanceDbl { get; set; } = 0; + public string TotalBalanceStr { get; set; } = "0"; + public double TotalBalanceDbl { get; set; } = 0; } public class WorkshopsAndEmployeeViewModel { - public List WorkshopViewModels { get; set; } - public string WorkshopCount { get; set; } - public string EmployeeCount { get; set; } - public int ArchiveCode { get; set; } + public List WorkshopViewModels { get; set; } + public string WorkshopCount { get; set; } + public string EmployeeCount { get; set; } + public int ArchiveCode { get; set; } } #endregion diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index 0ec4ba60..8bf55d43 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -1726,6 +1726,9 @@ public class InstitutionContractRepository : RepositoryBase x.WorkshopGroup) + .ThenInclude(x=> x.InitialWorkshops) + .Include(x=>x.WorkshopGroup) + .ThenInclude(x=>x.CurrentWorkshops) .FirstOrDefaultAsync(x => x.id == institutionContractId); } @@ -4201,7 +4204,12 @@ public class InstitutionContractRepository : RepositoryBase GetIdByInstallmentId(long installmentId) + { + return await _context.InstitutionContractSet.Include(x=>x.Installments) + .Where(x=>x.Installments.Any(i=>i.Id==installmentId)) + .Select(x=>x.id).FirstOrDefaultAsync(); + } #endregion diff --git a/ServiceHost/Controllers/GeneralController.cs b/ServiceHost/Controllers/GeneralController.cs index e15ae033..e19d1c45 100644 --- a/ServiceHost/Controllers/GeneralController.cs +++ b/ServiceHost/Controllers/GeneralController.cs @@ -150,7 +150,7 @@ public class GeneralController : GeneralBaseController payResponse.cardnumber, payResponse.issuerbank, payResponse.rrn.ToString(), payResponse.digitalreceipt); - if (financialInvoice.Items?.Any(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract) ?? false) + if (financialInvoice.Items?.Any(x => x.Type is FinancialInvoiceItemType.BuyInstitutionContract or FinancialInvoiceItemType.BuyInstitutionContractInstallment) ?? false) { var financialItems = financialInvoice.Items .Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContract); @@ -158,6 +158,16 @@ public class GeneralController : GeneralBaseController { await _institutionContractApplication.SetPendingWorkflow(editFinancialInvoiceItem.EntityId); } + var financialInstallmentItems = financialInvoice.Items + .Where(x => x.Type == FinancialInvoiceItemType.BuyInstitutionContractInstallment); + + foreach (var editFinancialInvoiceItem in financialInstallmentItems) + { + var institutionContractId = + await _institutionContractApplication.GetIdByInstallmentId( + editFinancialInvoiceItem.Id); + await _institutionContractApplication.SetPendingWorkflow(institutionContractId); + } } if (!setSuccessResult.IsSuccedded)