diff --git a/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs b/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs new file mode 100644 index 00000000..bcb351bd --- /dev/null +++ b/0_Framework/InfraStructure/Mongo/MongoDbConfig.cs @@ -0,0 +1,8 @@ +namespace _0_Framework.InfraStructure.Mongo; + +public class MongoDbConfig +{ + public string ConnectionString { get; set; } = null!; + + public string DatabaseName { get; set; } = null!; +} \ No newline at end of file diff --git a/Company.Domain/Company.Domain.csproj b/Company.Domain/Company.Domain.csproj index 76106517..09e112b7 100644 --- a/Company.Domain/Company.Domain.csproj +++ b/Company.Domain/Company.Domain.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs index 323a499b..d900c8bb 100644 --- a/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs +++ b/Company.Domain/InstitutionContractAgg/IInstitutionContractRepository.cs @@ -54,4 +54,6 @@ public interface IInstitutionContractRepository : IRepository GetVerificationDetails(Guid id); Task GetByPublicIdAsync(Guid id); + Task GetExtenstionInquiry(long previousContractId); + Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); } \ No newline at end of file diff --git a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs index 4f25f642..0aa5ce99 100644 --- a/Company.Domain/InstitutionContractAgg/InstitutionContract.cs +++ b/Company.Domain/InstitutionContractAgg/InstitutionContract.cs @@ -248,6 +248,11 @@ public class InstitutionContract : EntityBase ValueAddedTax = tax; HasValueAddedTax = tax > 0 ? "true" : "false"; } + + public void ClearGroup() + { + WorkshopGroup = null; + } } public class InstitutionContractAmendment : EntityBase diff --git a/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs b/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs new file mode 100644 index 00000000..e5d4b024 --- /dev/null +++ b/Company.Domain/InstitutionContractInsertTempAgg/IInstitutionContractExtenstionTempRepository.cs @@ -0,0 +1,13 @@ +using System; +using System.Threading.Tasks; +using _0_Framework.Application; + +namespace Company.Domain.InstitutionContractInsertTempAgg; + +public interface IInstitutionContractExtenstionTempRepository +{ + Task Create(InstitutionContractExtenstionTemp institutionContract); + + Task GetPreviousExtenstionData(long contractingPartyId); + Task Remove(Guid id); +} \ No newline at end of file diff --git a/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs b/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs new file mode 100644 index 00000000..d6170528 --- /dev/null +++ b/Company.Domain/InstitutionContractInsertTempAgg/InstitutionContractExtenstionTemp.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using CompanyManagment.App.Contracts.InstitutionContractContactinfo; +using MongoDB.Bson; +using MongoDB.Bson.Serialization.Attributes; + +namespace Company.Domain.InstitutionContractInsertTempAgg; + +public class InstitutionContractExtenstionTemp +{ + public InstitutionContractExtenstionTemp(long previousContractingPartyId) + { + Id = Guid.NewGuid(); + PreviousId = previousContractingPartyId; + } + + [BsonId] // Specifies this field as the _id in MongoDB + [BsonRepresentation(BsonType.String)] // Ensures the GUID is stored as a string + public Guid Id { get; set; } + public long PreviousId { get; set; } + public string Address { get; set; } + public string City { get; set; } + public string Province { get; set; } + public List ContactInfos { get; set; } + + public void SetContractingPartyInfos(string address, string city, string province, List contactInfos) + { + Address = address; + City = city; + Province = province; + ContactInfos = contactInfos; + } +} + diff --git a/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj b/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj new file mode 100644 index 00000000..4c09d4ae --- /dev/null +++ b/CompanyManagement.Infrastructure.Mongo/CompanyManagement.Infrastructure.Mongo.csproj @@ -0,0 +1,17 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + diff --git a/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs new file mode 100644 index 00000000..13e1fd37 --- /dev/null +++ b/CompanyManagement.Infrastructure.Mongo/InstitutionContractInsertTempRepo/InstitutionContractExtenstionTempRepository.cs @@ -0,0 +1,32 @@ +using Company.Domain.InstitutionContractInsertTempAgg; +using MongoDB.Driver; + +namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; + +public class InstitutionContractExtenstionTempRepository:IInstitutionContractExtenstionTempRepository +{ + private readonly IMongoCollection _institutionExtenstionTemp; + + public InstitutionContractExtenstionTempRepository(IMongoDatabase database) + { + _institutionExtenstionTemp = database.GetCollection("InstitutionContractExtenstionTemp"); + } + + public async Task Create(InstitutionContractExtenstionTemp institutionContract) + { + await _institutionExtenstionTemp.InsertOneAsync(institutionContract); + } + + public async Task GetPreviousExtenstionData(long contractingPartyId) + { + var entity = await _institutionExtenstionTemp + .Find(x => x.PreviousId == contractingPartyId) + .FirstOrDefaultAsync(); + return entity; + } + + public async Task Remove(Guid id) + { + await _institutionExtenstionTemp.DeleteOneAsync(x=>x.Id == id); + } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/ExtenstionInstitutionContractRequest.cs b/CompanyManagment.App.Contracts/InstitutionContract/ExtenstionInstitutionContractRequest.cs new file mode 100644 index 00000000..ddb67145 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/ExtenstionInstitutionContractRequest.cs @@ -0,0 +1,13 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +/// +/// درخواست تمدید قرارداد مؤسسه +/// شامل اطلاعات قرارداد قبلی برای فرآیند تمدید +/// +public class ExtenstionInstitutionContractRequest : EditInstitutionContractRequest +{ + /// + /// شناسه قرارداد قبلی که قرار است تمدید شود + /// + public long PreviousContractId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListStatsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListStatsViewModel.cs new file mode 100644 index 00000000..4c47e047 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionContractListStatsViewModel.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class GetInstitutionContractListStatsViewModel +{ + /// + /// مجموع بدهی قراردادهای مؤسسه + /// این ویژگی بدهی‌های قراردادهای مربوطه را تجمیع می‌کند و + /// یک معیار واحد برای اندازه‌گیری تعهدات مالی ارائه می‌دهد + /// + public double TotalDebt { get; set; } + + /// + /// مجموع ارزش پولی مرتبط با قراردادهای مؤسسه + /// این ویژگی مبلغ کل قراردادهای مربوطه را برای + /// گزارش‌گیری و تجزیه و تحلیل مالی تجمیع می‌کند + /// + public double TotalAmount { get; set; } + + /// + /// مجموعه‌ای از تعداد قراردادهای مؤسسه دسته‌بندی شده بر اساس وضعیت + /// این ویژگی تعداد قراردادها را برای هر وضعیت تعریف شده در + /// شمارش InstitutionContractStatus ارائه می‌دهد که امکان تجزیه و تحلیل و نظارت بر توزیع قراردادها را فراهم می‌کند + /// + public List Counts { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsViewModel.cs new file mode 100644 index 00000000..0e3cc092 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsViewModel.cs @@ -0,0 +1,31 @@ +using _0_Framework.Application.Enums; + +using System.Collections.Generic; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class GetInstitutionVerificationDetailsViewModel +{ + public InstitutionContratVerificationParty FirstParty { get; set; } + public InstitutionContratVerificationParty SecondParty { get; set; } + public string ContractNo { get; set; } + public string CreationDate { get; set; } + public string ContractStart { get; set; } + public string ContractEnd { get; set; } + public List Workshops { get; set; } + public string TotalPrice { get; set; } + public string TaxPrice { get; set; } + public string PaymentPrice { get; set; } + public List Installments { get; set; } + public bool IsInstallment { get; set; } +} +public class InstitutionContratVerificationParty +{ + public string CompanyNameOrFullName { get; set; } + public string NationalCodeOrNationalId { get; set; } + public string CeoName { get; set; } + public string Address { get; set; } + public string PostalCode { get; set; } + public string PhoneNumber { get; set; } + public LegalType LegalType { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsWorkshopsViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsWorkshopsViewModel.cs new file mode 100644 index 00000000..cd1ef514 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/GetInstitutionVerificationDetailsWorkshopsViewModel.cs @@ -0,0 +1,9 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class GetInstitutionVerificationDetailsWorkshopsViewModel +{ + public string Name { get; set; } + public int PersonnelCount { get; set; } + public WorkshopServicesViewModel Services { get; set; } + public string Price { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs index aa4d4df8..3a246251 100644 --- a/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs +++ b/CompanyManagment.App.Contracts/InstitutionContract/IInstitutionContractApplication.cs @@ -5,10 +5,12 @@ using System.Drawing; using System.Linq; using System.Threading.Tasks; using _0_Framework.Application; -using _0_Framework.Application.Enums; using _0_Framework.Application.Sms; using CompanyManagment.App.Contracts.Checkout; +using CompanyManagment.App.Contracts.InstitutionContractContactinfo; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; using CompanyManagment.App.Contracts.Workshop; +using CompanyManagment.App.Contracts.WorkshopPlan; using Microsoft.AspNetCore.Mvc; namespace CompanyManagment.App.Contracts.InstitutionContract; @@ -194,7 +196,7 @@ public interface IInstitutionContractApplication /// /// /// - Task ExtensionَAsync(CreateInstitutionContractRequest command); + Task ExtensionAsync(CreateInstitutionContractRequest command); /// /// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده @@ -217,134 +219,27 @@ public interface IInstitutionContractApplication Task> SendVerifyOtp(Guid id); Task VerifyOtp(Guid publicId, string code); Task GetWorkshopInitialDetails(long workshopDetailsId); + Task GetExtenstionInquiry(long previousContractId); + Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request); + //TODO:Calculate one workshop + //TODO:Calculate total InstitutionContract Amount + //TODO:calculate Payment method + //TODO:Complete Data. + + } -public class InstitutionContractWorkshopDetailViewModel +public class InstitutionContractExtensionWorkshopsRequest { - public WorkshopServicesViewModel ServicesViewModel { get; set; } -} - -public class GetInstitutionVerificationDetailsViewModel -{ - public InstitutionContratVerificationParty FirstParty { get; set; } - public InstitutionContratVerificationParty SecondParty { get; set; } - public string ContractNo { get; set; } - public string CreationDate { get; set; } - public string ContractStart { get; set; } - public string ContractEnd { get; set; } - public List Workshops { get; set; } - public string TotalPrice { get; set; } - public string TaxPrice { get; set; } - public string PaymentPrice { get; set; } - public List Installments { get; set; } - public bool IsInstallment { get; set; } -} - -public class InstitutionContratVerificationParty -{ - public string CompanyNameOrFullName { get; set; } - public string NationalCodeOrNationalId { get; set; } - public string CeoName { get; set; } + public Guid TempId { get; set; } + public string City {get; set;} + public string Province { get; set; } public string Address { get; set; } - public string PostalCode { get; set; } - public string PhoneNumber { get; set; } - public LegalType LegalType { get; set; } + public List ContactInfos { get; set; } } -public class GetInstitutionVerificationDetailsWorkshopsViewModel +public class InstitutionContractExtensionWorkshopsResponse { - public string Name { get; set; } - public int PersonnelCount { get; set; } - public WorkshopServicesViewModel Services { get; set; } - public string Price { get; set; } -} - -public class GetInstitutionContractListStatsViewModel -{ - /// - /// مجموع بدهی قراردادهای مؤسسه - /// این ویژگی بدهی‌های قراردادهای مربوطه را تجمیع می‌کند و - /// یک معیار واحد برای اندازه‌گیری تعهدات مالی ارائه می‌دهد - /// - public double TotalDebt { get; set; } - - /// - /// مجموع ارزش پولی مرتبط با قراردادهای مؤسسه - /// این ویژگی مبلغ کل قراردادهای مربوطه را برای - /// گزارش‌گیری و تجزیه و تحلیل مالی تجمیع می‌کند - /// - public double TotalAmount { get; set; } - - /// - /// مجموعه‌ای از تعداد قراردادهای مؤسسه دسته‌بندی شده بر اساس وضعیت - /// این ویژگی تعداد قراردادها را برای هر وضعیت تعریف شده در - /// شمارش InstitutionContractStatus ارائه می‌دهد که امکان تجزیه و تحلیل و نظارت بر توزیع قراردادها را فراهم می‌کند - /// - public List Counts { get; set; } -} - -/// -/// شمارش وضعیت قراردادهای مؤسسه -/// نمایش تعداد قراردادها برای هر وضعیت خاص -/// -public class InstitutionContractStatusCount -{ - /// - /// وضعیت لیست قرارداد - /// - public InstitutionContractListStatus ListStatus { get; set; } - - /// - /// تعداد قراردادها در این وضعیت - /// - public int Count { get; set; } -} - -/// -/// درخواست تمدید قرارداد مؤسسه -/// شامل اطلاعات قرارداد قبلی برای فرآیند تمدید -/// -public class ExtenstionInstitutionContractRequest : EditInstitutionContractRequest -{ - /// - /// شناسه قرارداد قبلی که قرار است تمدید شود - /// - public long PreviousContractId { get; set; } -} - -/// -/// مدل نمایش اقساط قرارداد مؤسسه -/// شامل اطلاعات مربوط به هر قسط از قرارداد -/// -public class InstitutionContractInstallmentViewModel -{ - /// - /// شناسه یکتای قسط - /// - public long Id { get; set; } - - /// - /// تاریخ میلادی قسط - /// - public DateTime InstallmentDateGr { get; set; } - - /// - /// تاریخ فارسی قسط - /// - public string InstallmentDateFa { get; set; } - - /// - /// مبلغ قسط - /// - public string Amount { get; set; } - - /// - /// عدد قسط فارسی - /// - public string InstallmentIndex { get; set; } - - /// - /// شناسه قرارداد مؤسسه مربوط به این قسط - /// - public long InstitutionContractId { get; set; } -} + public List WorkshopTemps { get; set; } + public string TotalAmount { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs new file mode 100644 index 00000000..a30c8274 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractExtensionInquiryResult.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using _0_Framework.Application.Enums; +using CompanyManagment.App.Contracts.InstitutionContractContactinfo; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractExtensionInquiryResult +{ + /// + /// اطلاعات شخص حقیقی + /// + public CreateInstitutionContractRealPartyRequest RealParty { get; set; } + + /// + /// اطلاعات شخص حقوقی + /// + public CreateInstitutionContractLegalPartyRequest LegalParty { get; set; } + + public LegalType LegalType { get; set; } + public Guid TemporaryId { get; set; } + public string Address { get; set; } + public string City { get; set; } + public string Province { get; set; } + public List ContactInfoViewModels { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractInstallmentViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractInstallmentViewModel.cs new file mode 100644 index 00000000..86655873 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractInstallmentViewModel.cs @@ -0,0 +1,40 @@ +using System; + +namespace CompanyManagment.App.Contracts.InstitutionContract; + +/// +/// مدل نمایش اقساط قرارداد مؤسسه +/// شامل اطلاعات مربوط به هر قسط از قرارداد +/// +public class InstitutionContractInstallmentViewModel +{ + /// + /// شناسه یکتای قسط + /// + public long Id { get; set; } + + /// + /// تاریخ میلادی قسط + /// + public DateTime InstallmentDateGr { get; set; } + + /// + /// تاریخ فارسی قسط + /// + public string InstallmentDateFa { get; set; } + + /// + /// مبلغ قسط + /// + public string Amount { get; set; } + + /// + /// عدد قسط فارسی + /// + public string InstallmentIndex { get; set; } + + /// + /// شناسه قرارداد مؤسسه مربوط به این قسط + /// + public long InstitutionContractId { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractStatusCount.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractStatusCount.cs new file mode 100644 index 00000000..a6f6bf35 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractStatusCount.cs @@ -0,0 +1,18 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +/// +/// شمارش وضعیت قراردادهای مؤسسه +/// نمایش تعداد قراردادها برای هر وضعیت خاص +/// +public class InstitutionContractStatusCount +{ + /// + /// وضعیت لیست قرارداد + /// + public InstitutionContractListStatus ListStatus { get; set; } + + /// + /// تعداد قراردادها در این وضعیت + /// + public int Count { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractWorkshopDetailViewModel.cs b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractWorkshopDetailViewModel.cs new file mode 100644 index 00000000..4916ac39 --- /dev/null +++ b/CompanyManagment.App.Contracts/InstitutionContract/InstitutionContractWorkshopDetailViewModel.cs @@ -0,0 +1,6 @@ +namespace CompanyManagment.App.Contracts.InstitutionContract; + +public class InstitutionContractWorkshopDetailViewModel +{ + public WorkshopServicesViewModel ServicesViewModel { get; set; } +} \ No newline at end of file diff --git a/CompanyManagment.Application/InstitutionContractApplication.cs b/CompanyManagment.Application/InstitutionContractApplication.cs index 9e7aa732..75356991 100644 --- a/CompanyManagment.Application/InstitutionContractApplication.cs +++ b/CompanyManagment.Application/InstitutionContractApplication.cs @@ -1145,8 +1145,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication { throw new NotImplementedException(); } - - public async Task ExtensionَAsync(CreateInstitutionContractRequest command) + public async Task ExtensionAsync(CreateInstitutionContractRequest command) { throw new NotImplementedException(); } @@ -1272,6 +1271,16 @@ public class InstitutionContractApplication : IInstitutionContractApplication return res; } + public async Task GetExtenstionInquiry(long previousContractId) + { + return await _institutionContractRepository.GetExtenstionInquiry(previousContractId); + } + + public async Task GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request) + { + return await _institutionContractRepository.GetExtenstionWorkshops(request); + } + private async Task> CreateLegalContractingPartyEntity( CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city, string state) diff --git a/CompanyManagment.EFCore/CompanyManagment.EFCore.csproj b/CompanyManagment.EFCore/CompanyManagment.EFCore.csproj index b239dda4..7c4c515d 100644 --- a/CompanyManagment.EFCore/CompanyManagment.EFCore.csproj +++ b/CompanyManagment.EFCore/CompanyManagment.EFCore.csproj @@ -12,6 +12,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs index d9c4ff55..09a4d893 100644 --- a/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs +++ b/CompanyManagment.EFCore/Repository/InstitutionContractRepository.cs @@ -15,13 +15,18 @@ using Company.Domain.empolyerAgg; using Company.Domain.FinancialStatmentAgg; using Company.Domain.FinancialTransactionAgg; using Company.Domain.InstitutionContractAgg; +using Company.Domain.InstitutionContractInsertTempAgg; using Company.Domain.WorkshopAgg; using CompanyManagment.App.Contracts.Employer; using CompanyManagment.App.Contracts.InstitutionContract; +using CompanyManagment.App.Contracts.InstitutionContractContactinfo; +using CompanyManagment.App.Contracts.TemporaryClientRegistration; using CompanyManagment.App.Contracts.Workshop; +using CompanyManagment.App.Contracts.WorkshopPlan; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MongoDB.Driver; using OfficeOpenXml.Packaging.Ionic.Zip; using PersianTools.Core; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; @@ -33,13 +38,16 @@ public class InstitutionContractRepository : RepositoryBase _institutionExtensionTemp; public InstitutionContractRepository(CompanyContext context, IEmployerRepository employerRepository, - IWorkshopRepository workshopRepository) : base(context) + IWorkshopRepository workshopRepository, IMongoDatabase database) : base(context) { _context = context; _employerRepository = employerRepository; _workshopRepository = workshopRepository; + _institutionExtensionTemp = + database.GetCollection("InstitutionContractExtenstionTemp"); } public EditInstitutionContract GetDetails(long id) @@ -1209,14 +1217,14 @@ public class InstitutionContractRepository : RepositoryBase x.contractingParty.id).ToList(); var financialStatements = _context.FinancialStatments.Include(x => x.FinancialTransactionList) .Where(x => contractingPartyIds.Contains(x.ContractingPartyId)).ToList(); var res = new PagedResult() { - TotalCount =await joinedQuery.CountAsync(), + TotalCount = await joinedQuery.CountAsync(), List = list.Select(x => { Console.WriteLine(x.contractingParty.id); @@ -1271,7 +1279,7 @@ public class InstitutionContractRepository : RepositoryBase ft.Deptor - ft.Creditor)??0, + Balance = statement?.FinancialTransactionList.Sum(ft => ft.Deptor - ft.Creditor) ?? 0, WorkshopsCount = workshops.Count(), ContractStartFa = x.contract.ContractStartGr.ToFarsi(), ContractEndFa = x.contract.ContractEndGr.ToFarsi(), @@ -1802,6 +1810,148 @@ public class InstitutionContractRepository : RepositoryBase x.PublicId == id); } + public async Task GetExtenstionInquiry(long previousContractId) + { + var institutionContracts = await _context.InstitutionContractSet + .Include(institutionContract => institutionContract.ContactInfoList) + .FirstOrDefaultAsync(x => x.id == previousContractId); + + var contractingParty = await + _context.PersonalContractingParties.FirstOrDefaultAsync(x => + x.id == institutionContracts.ContractingPartyId); + + + var legalType = contractingParty.IsLegal == "حقیقی" ? LegalType.Real : LegalType.Legal; + CreateInstitutionContractLegalPartyRequest legalPartyRequest = null; + CreateInstitutionContractRealPartyRequest realPartyRequest = null; + + if (legalType == LegalType.Legal) + { + legalPartyRequest = new CreateInstitutionContractLegalPartyRequest() + { + NationalCode = contractingParty.Nationalcode, + BirthDateFa = contractingParty.DateOfBirth.ToFarsi(), + PhoneNumber = contractingParty.Phone, + FatherName = contractingParty.FatherName, + FName = contractingParty.CeoFName, + LName = contractingParty.CeoLName, + CompanyName = contractingParty.LName, + Gender = contractingParty.Gender, + IdNumber = contractingParty.IdNumber, + RegisterId = contractingParty.RegisterId, + IsAuth = contractingParty.IsAuthenticated, + NationalId = contractingParty.NationalId, + Position = contractingParty.LegalPosition, + ContractingPartyTempId = 0 + }; + } + else + { + realPartyRequest = new CreateInstitutionContractRealPartyRequest() + { + NationalCode = contractingParty.Nationalcode, + BirthDateFa = contractingParty.DateOfBirth.ToFarsi(), + PhoneNumber = contractingParty.Phone, + FatherName = contractingParty.FatherName, + FName = contractingParty.FName, + Gender = contractingParty.Gender, + IdNumber = contractingParty.IdNumber, + IsAuth = contractingParty.IsAuthenticated, + LName = contractingParty.LName, + ContractingPartyTempId = 0 + }; + } + + var previousContractTemp = await _institutionExtensionTemp + .Find(x => x.PreviousId == previousContractId) + .FirstOrDefaultAsync(); + + if (previousContractTemp != null) + { + await _institutionExtensionTemp.DeleteOneAsync(x => x.Id == previousContractTemp.Id); + } + + var institutionContractTemp = new InstitutionContractExtenstionTemp(previousContractId); + + await _institutionExtensionTemp.InsertOneAsync(institutionContractTemp); + + + var res = new InstitutionContractExtensionInquiryResult() + { + LegalType = legalType, + Address = contractingParty.Address, + City = contractingParty.City, + ContactInfoViewModels = institutionContracts.ContactInfoList.Select(x => new EditContactInfo() + { + Id = x.id, + FnameLname = x.FnameLname, + InstitutionContractId = x.InstitutionContractId, + PhoneNumber = x.PhoneNumber, + PhoneType = x.PhoneType, + Position = x.Position, + SendSms = x.SendSms + }).ToList(), + Province = contractingParty.State, + LegalParty = legalPartyRequest, + RealParty = realPartyRequest, + TemporaryId = institutionContractTemp.Id + }; + return res; + } + + public async Task GetExtenstionWorkshops( + InstitutionContractExtensionWorkshopsRequest request) + { + var extenstionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId) + .FirstOrDefaultAsync(); + if (extenstionTemp == null) + { + throw new BadRequestException("دیتای درخواست شده نامعتبر است"); + } + + var prevInstitutionContracts = await _context.InstitutionContractSet + .Include(x => x.WorkshopGroup) + .ThenInclude(institutionContractWorkshopGroup => institutionContractWorkshopGroup.CurrentWorkshops).FirstOrDefaultAsync(x => x.id == extenstionTemp.PreviousId); + if (prevInstitutionContracts == null) + { + throw new BadRequestException("قرارداد مالی قبلی یافت نشد"); + } + + extenstionTemp.SetContractingPartyInfos(request.Address, request.City, request.Province, request.ContactInfos); + await _institutionExtensionTemp.ReplaceOneAsync( + x => x.Id == extenstionTemp.Id, + extenstionTemp + ); + + var workshopIds = prevInstitutionContracts.WorkshopGroup.CurrentWorkshops.Select(x => x.WorkshopId.Value); + var workshops =await _context.Workshops.Where(x => workshopIds.Contains(x.id)).ToListAsync(); + var workshopDetails =prevInstitutionContracts.WorkshopGroup.CurrentWorkshops + .Select(x => + { + var workshop = workshops.FirstOrDefault(w=>w.id == x.WorkshopId); + return new WorkshopTempViewModel() + { + Id = x.id, + ContractAndCheckout = x.Services.Contract, + ContractAndCheckoutInPerson = x.Services.ContractInPerson, + CustomizeCheckout = x.Services.ContractInPerson, + CountPerson = x.PersonnelCount, + Insurance = x.Services.Insurance, + InsuranceInPerson = x.Services.InsuranceInPerson, + RollCall = x.Services.RollCall, + WorkshopName = workshop?.WorkshopName??"فاقد کارگاه", + WorkshopServicesAmount = x.Price, + WorkshopServicesAmountStr = x.Price.ToMoney() + }; + }).ToList(); + var res = new InstitutionContractExtensionWorkshopsResponse() + { + TotalAmount = workshopDetails.Sum(x => x.WorkshopServicesAmount).ToMoney(), + WorkshopTemps = workshopDetails + }; + return res; + } + #endregion diff --git a/DadmehrGostar.sln b/DadmehrGostar.sln index 2a84d932..cc871722 100644 --- a/DadmehrGostar.sln +++ b/DadmehrGostar.sln @@ -80,6 +80,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Query.Bootstrapper", "Query EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompanyManagement.Infrastructure.Excel", "CompanyManagement.Infrastructure.Excel\CompanyManagement.Infrastructure.Excel.csproj", "{BF98173C-42AF-4897-A7CB-4CACEB2B52A2}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CompanyManagement.Infrastructure.Mongo", "CompanyManagement.Infrastructure.Mongo\CompanyManagement.Infrastructure.Mongo.csproj", "{4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -178,6 +180,10 @@ Global {BF98173C-42AF-4897-A7CB-4CACEB2B52A2}.Debug|Any CPU.Build.0 = Debug|Any CPU {BF98173C-42AF-4897-A7CB-4CACEB2B52A2}.Release|Any CPU.ActiveCfg = Release|Any CPU {BF98173C-42AF-4897-A7CB-4CACEB2B52A2}.Release|Any CPU.Build.0 = Release|Any CPU + {4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -212,6 +218,7 @@ Global {339E05B6-E99F-4403-AFDF-CD0540E96C8D} = {708E8D7E-F190-47C5-B78E-F43131FB7D6D} {02892882-2A02-484B-BAF9-7E63F6BDCFA0} = {708E8D7E-F190-47C5-B78E-F43131FB7D6D} {BF98173C-42AF-4897-A7CB-4CACEB2B52A2} = {86921E1B-2AFA-4B8A-9403-EE16D58B5B26} + {4CDAA60E-C7DD-4883-85CC-E7E26CCC6ED3} = {86921E1B-2AFA-4B8A-9403-EE16D58B5B26} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E6CFB3A7-A7C8-4E82-8F06-F750408F0BA9} diff --git a/PersonalContractingParty.Config/PersonalBootstrapper.cs b/PersonalContractingParty.Config/PersonalBootstrapper.cs index 3b401bb6..fac195ef 100644 --- a/PersonalContractingParty.Config/PersonalBootstrapper.cs +++ b/PersonalContractingParty.Config/PersonalBootstrapper.cs @@ -218,7 +218,9 @@ using CompanyManagment.App.Contracts.PaymentInstrument; using CompanyManagment.App.Contracts.PaymentTransaction; using CompanyManagment.App.Contracts.AuthorizedPerson; using Company.Domain.AuthorizedPersonAgg; +using Company.Domain.InstitutionContractInsertTempAgg; using Company.Domain.LawAgg; +using CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo; using CompanyManagment.App.Contracts.Law; using CompanyManagment.EFCore.Repository; @@ -469,6 +471,9 @@ public class PersonalBootstrapper services.AddTransient(); services.AddTransient(); + + services + .AddTransient(); #endregion #region Pooya diff --git a/PersonalContractingParty.Config/PersonalContractingParty.Config.csproj b/PersonalContractingParty.Config/PersonalContractingParty.Config.csproj index ecb756e9..3e55f945 100644 --- a/PersonalContractingParty.Config/PersonalContractingParty.Config.csproj +++ b/PersonalContractingParty.Config/PersonalContractingParty.Config.csproj @@ -10,6 +10,7 @@ + diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 6eb89f88..df100245 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -490,7 +490,7 @@ public class institutionContractController : AdminBaseController var counter = command.ContactInfos.Count; - var result = await _institutionContractApplication.ExtensionَAsync(command); + var result = await _institutionContractApplication.ExtensionAsync(command); if (result.IsSuccedded && counter > 0) { @@ -737,6 +737,24 @@ public class institutionContractController : AdminBaseController sem.Release(); } } + + + [HttpGet("extenstion/inquiry/{previousContractId}")] + public async Task> GetExtenstionInquiry(long previousContractId) + { + var res= await _institutionContractApplication.GetExtenstionInquiry(previousContractId); + return res; + } + + [HttpPost("extenstion/workshops")] + public async Task> GetExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request) + { + InstitutionContractExtensionWorkshopsResponse res =await _institutionContractApplication.GetExtenstionWorkshops(request); + return res; + } + + + } public class VerifyOtpRequest diff --git a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs index d2352464..708d9ed4 100644 --- a/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs +++ b/ServiceHost/Areas/AdminNew/Pages/Company/AndroidApk/Index.cshtml.cs @@ -690,6 +690,8 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk foreach (var item in remoteContracts) { + item.contract.ClearGroup(); + await _context.SaveChangesAsync(); //TODO: set data for institution price var workshops = item.contractingParty.Employers .SelectMany(e => e.WorkshopEmployers.Select(we => we.Workshop)).ToList(); @@ -744,14 +746,14 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk await _context.AddAsync(group); await _context.SaveChangesAsync(); - var oneMonthSum = current.Sum(x => x.Price); + //var oneMonthSum = current.Sum(x => x.Price); item.contract.SetWorkshopGroup(group); - var totalPaymentAndWorkshopList = await _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(oneMonthSum,duration: InstitutionContractDuration.TwelveMonths,false); - item.contract.SetAmount(totalPaymentAndWorkshopList.OneTimeTotalPaymentStr.MoneyToDouble(), - totalPaymentAndWorkshopList.OneTimeValueAddedTaxStr.MoneyToDouble(),totalPaymentAndWorkshopList.DiscountedAmountForOneMonth.MoneyToDouble()); + // var totalPaymentAndWorkshopList = await _clientRegistrationApplication.GetTotalPaymentAndWorkshopList(oneMonthSum,duration: InstitutionContractDuration.TwelveMonths,false); + // item.contract.SetAmount(totalPaymentAndWorkshopList.OneTimeTotalPaymentStr.MoneyToDouble(), + // totalPaymentAndWorkshopList.OneTimeValueAddedTaxStr.MoneyToDouble(),totalPaymentAndWorkshopList.DiscountedAmountForOneMonth.MoneyToDouble()); } - var remoteIds = query.Select(x => x.contract.id).ToList(); + var remoteIds = remoteContractsQuery.Select(x => x.contract.id); var inPersonContracts =await query .Where(x=>!remoteIds.Contains(x.contractingParty.id)).ToListAsync(); foreach (var item in inPersonContracts) diff --git a/ServiceHost/Program.cs b/ServiceHost/Program.cs index 0fb19640..bf46f1d7 100644 --- a/ServiceHost/Program.cs +++ b/ServiceHost/Program.cs @@ -23,11 +23,13 @@ using Microsoft.OpenApi.Models; using ServiceHost.Test; using System.Text.Json.Serialization; using System.Text.Json; +using _0_Framework.InfraStructure.Mongo; using CompanyManagment.EFCore.Services; using Microsoft.AspNetCore.CookiePolicy; using Microsoft.AspNetCore.Mvc.Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Diagnostics; +using MongoDB.Driver; using Swashbuckle.AspNetCore.SwaggerUI; @@ -48,12 +50,12 @@ var connectionStringTestDb = builder.Configuration.GetConnectionString("TestDb") #region MongoDb -//var mongoConnectionSection = builder.Configuration.GetSection("MongoDb"); -//var mongoDbSettings = mongoConnectionSection.Get(); -//var mongoClient = new MongoClient(mongoDbSettings.ConnectionString); -//var mongoDatabase = mongoClient.GetDatabase(mongoDbSettings.DatabaseName); +var mongoConnectionSection = builder.Configuration.GetSection("MongoDb"); +var mongoDbSettings = mongoConnectionSection.Get(); +var mongoClient = new MongoClient(mongoDbSettings.ConnectionString); +var mongoDatabase = mongoClient.GetDatabase(mongoDbSettings.DatabaseName); -//builder.Services.AddSingleton(mongoDatabase); +builder.Services.AddSingleton(mongoDatabase); #endregion diff --git a/ServiceHost/ServiceHost.csproj b/ServiceHost/ServiceHost.csproj index 805389c4..fe979c5d 100644 --- a/ServiceHost/ServiceHost.csproj +++ b/ServiceHost/ServiceHost.csproj @@ -89,6 +89,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/ServiceHost/Test/Tester.cs b/ServiceHost/Test/Tester.cs index 30898ac0..9d9e337b 100644 --- a/ServiceHost/Test/Tester.cs +++ b/ServiceHost/Test/Tester.cs @@ -1,4 +1,5 @@ using System.Diagnostics; +using _0_Framework.Application.Sms; using _0_Framework.Domain.CustomizeCheckoutShared.Enums; using AccountMangement.Infrastructure.EFCore; using CompanyManagment.App.Contracts.AdminMonthlyOverview; @@ -13,20 +14,24 @@ public class Tester private readonly IAdminMonthlyOverviewApplication _adminMonthlyOverviewApplication; private readonly CompanyContext _companyContext; private readonly AccountContext _accountContext; - public Tester(IAdminMonthlyOverviewApplication adminMonthlyOverviewApplication, CompanyContext companyContext, AccountContext accountContext) + private readonly ISmsService _smsService; + public Tester(IAdminMonthlyOverviewApplication adminMonthlyOverviewApplication, CompanyContext companyContext, AccountContext accountContext, ISmsService smsService) { _adminMonthlyOverviewApplication = adminMonthlyOverviewApplication; _companyContext = companyContext; _accountContext = accountContext; + _smsService = smsService; } public async Task Test() { - // await AdminMonthlyOverviewTest(); - //await MoveTasksToAnotherPerson(423, 434); + // await _smsService.SendInstitutionVerificationLink("09116967898", "ماهان چمنی", Guid.NewGuid()); + //await _smsService.SendInstitutionVerificationCode("09116967898", "0154"); + // await AdminMonthlyOverviewTest(); + //await MoveTasksToAnotherPerson(423, 434); - } + } public async Task MoveTasksToAnotherPerson(long oldAccount, long newAccount) { diff --git a/ServiceHost/appsettings.Development.json b/ServiceHost/appsettings.Development.json index 457aa95e..39c0d1f3 100644 --- a/ServiceHost/appsettings.Development.json +++ b/ServiceHost/appsettings.Development.json @@ -34,7 +34,11 @@ "ApiKey": "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa", "SecretKey": "dadmehr" }, - "Domain": ".dadmehrg.ir" + "Domain": ".dadmehrg.ir", + "MongoDb": { + "ConnectionString": "mongodb://localhost:27017", + "DatabaseName": "Gozareshgir" + } } diff --git a/ServiceHost/appsettings.json b/ServiceHost/appsettings.json index 4f9769ec..eb956d2d 100644 --- a/ServiceHost/appsettings.json +++ b/ServiceHost/appsettings.json @@ -27,6 +27,9 @@ }, "AllowedHosts": "*", //"Domain": ".dad-mehr.ir" - "Domain": ".gozareshgir.ir" - + "Domain": ".gozareshgir.ir", + "MongoDb": { + "ConnectionString": "mongodb://localhost:27017", + "DatabaseName": "Gozareshgir" + } }