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"
+ }
}