add InstitutionContractExtenstionTemp - add mongodb Config

This commit is contained in:
2025-10-06 15:04:26 +03:30
parent 76013946bd
commit 6d0072c8ac
30 changed files with 538 additions and 150 deletions

View File

@@ -0,0 +1,8 @@
namespace _0_Framework.InfraStructure.Mongo;
public class MongoDbConfig
{
public string ConnectionString { get; set; } = null!;
public string DatabaseName { get; set; } = null!;
}

View File

@@ -18,4 +18,8 @@
<Folder Include="CheckoutAgg\ValueObjects\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Bson" Version="3.5.0" />
</ItemGroup>
</Project>

View File

@@ -54,4 +54,6 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
void UpdateStatusIfNeeded(long institutionContractId);
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
}

View File

@@ -248,6 +248,11 @@ public class InstitutionContract : EntityBase
ValueAddedTax = tax;
HasValueAddedTax = tax > 0 ? "true" : "false";
}
public void ClearGroup()
{
WorkshopGroup = null;
}
}
public class InstitutionContractAmendment : EntityBase

View File

@@ -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<InstitutionContractExtenstionTemp> GetPreviousExtenstionData(long contractingPartyId);
Task Remove(Guid id);
}

View File

@@ -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<EditContactInfo> ContactInfos { get; set; }
public void SetContractingPartyInfos(string address, string city, string province, List<EditContactInfo> contactInfos)
{
Address = address;
City = city;
Province = province;
ContactInfos = contactInfos;
}
}

View File

@@ -0,0 +1,17 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Company.Domain\Company.Domain.csproj" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="MongoDB.Driver" Version="3.5.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,32 @@
using Company.Domain.InstitutionContractInsertTempAgg;
using MongoDB.Driver;
namespace CompanyManagement.Infrastructure.Mongo.InstitutionContractInsertTempRepo;
public class InstitutionContractExtenstionTempRepository:IInstitutionContractExtenstionTempRepository
{
private readonly IMongoCollection<InstitutionContractExtenstionTemp> _institutionExtenstionTemp;
public InstitutionContractExtenstionTempRepository(IMongoDatabase database)
{
_institutionExtenstionTemp = database.GetCollection<InstitutionContractExtenstionTemp>("InstitutionContractExtenstionTemp");
}
public async Task Create(InstitutionContractExtenstionTemp institutionContract)
{
await _institutionExtenstionTemp.InsertOneAsync(institutionContract);
}
public async Task<InstitutionContractExtenstionTemp> 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);
}
}

View File

@@ -0,0 +1,13 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
/// <summary>
/// درخواست تمدید قرارداد مؤسسه
/// شامل اطلاعات قرارداد قبلی برای فرآیند تمدید
/// </summary>
public class ExtenstionInstitutionContractRequest : EditInstitutionContractRequest
{
/// <summary>
/// شناسه قرارداد قبلی که قرار است تمدید شود
/// </summary>
public long PreviousContractId { get; set; }
}

View File

@@ -0,0 +1,27 @@
using System.Collections.Generic;
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class GetInstitutionContractListStatsViewModel
{
/// <summary>
/// مجموع بدهی قراردادهای مؤسسه
/// این ویژگی بدهی‌های قراردادهای مربوطه را تجمیع می‌کند و
/// یک معیار واحد برای اندازه‌گیری تعهدات مالی ارائه می‌دهد
/// </summary>
public double TotalDebt { get; set; }
/// <summary>
/// مجموع ارزش پولی مرتبط با قراردادهای مؤسسه
/// این ویژگی مبلغ کل قراردادهای مربوطه را برای
/// گزارش‌گیری و تجزیه و تحلیل مالی تجمیع می‌کند
/// </summary>
public double TotalAmount { get; set; }
/// <summary>
/// مجموعه‌ای از تعداد قراردادهای مؤسسه دسته‌بندی شده بر اساس وضعیت
/// این ویژگی تعداد قراردادها را برای هر وضعیت تعریف شده در
/// شمارش InstitutionContractStatus ارائه می‌دهد که امکان تجزیه و تحلیل و نظارت بر توزیع قراردادها را فراهم می‌کند
/// </summary>
public List<InstitutionContractStatusCount> Counts { get; set; }
}

View File

@@ -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<GetInstitutionVerificationDetailsWorkshopsViewModel> Workshops { get; set; }
public string TotalPrice { get; set; }
public string TaxPrice { get; set; }
public string PaymentPrice { get; set; }
public List<InstitutionContractInstallmentViewModel> 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; }
}

View File

@@ -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; }
}

View File

@@ -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
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
Task<OperationResult> ExtensionَAsync(CreateInstitutionContractRequest command);
Task<OperationResult> ExtensionAsync(CreateInstitutionContractRequest command);
/// <summary>
/// دریافت لیست طرف حساب هایی که ثبت نام آنها تکمیل شده
@@ -217,134 +219,27 @@ public interface IInstitutionContractApplication
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
Task<OperationResult> VerifyOtp(Guid publicId, string code);
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> 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<GetInstitutionVerificationDetailsWorkshopsViewModel> Workshops { get; set; }
public string TotalPrice { get; set; }
public string TaxPrice { get; set; }
public string PaymentPrice { get; set; }
public List<InstitutionContractInstallmentViewModel> 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<EditContactInfo> 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
{
/// <summary>
/// مجموع بدهی قراردادهای مؤسسه
/// این ویژگی بدهی‌های قراردادهای مربوطه را تجمیع می‌کند و
/// یک معیار واحد برای اندازه‌گیری تعهدات مالی ارائه می‌دهد
/// </summary>
public double TotalDebt { get; set; }
/// <summary>
/// مجموع ارزش پولی مرتبط با قراردادهای مؤسسه
/// این ویژگی مبلغ کل قراردادهای مربوطه را برای
/// گزارش‌گیری و تجزیه و تحلیل مالی تجمیع می‌کند
/// </summary>
public double TotalAmount { get; set; }
/// <summary>
/// مجموعه‌ای از تعداد قراردادهای مؤسسه دسته‌بندی شده بر اساس وضعیت
/// این ویژگی تعداد قراردادها را برای هر وضعیت تعریف شده در
/// شمارش InstitutionContractStatus ارائه می‌دهد که امکان تجزیه و تحلیل و نظارت بر توزیع قراردادها را فراهم می‌کند
/// </summary>
public List<InstitutionContractStatusCount> Counts { get; set; }
}
/// <summary>
/// شمارش وضعیت قراردادهای مؤسسه
/// نمایش تعداد قراردادها برای هر وضعیت خاص
/// </summary>
public class InstitutionContractStatusCount
{
/// <summary>
/// وضعیت لیست قرارداد
/// </summary>
public InstitutionContractListStatus ListStatus { get; set; }
/// <summary>
/// تعداد قراردادها در این وضعیت
/// </summary>
public int Count { get; set; }
}
/// <summary>
/// درخواست تمدید قرارداد مؤسسه
/// شامل اطلاعات قرارداد قبلی برای فرآیند تمدید
/// </summary>
public class ExtenstionInstitutionContractRequest : EditInstitutionContractRequest
{
/// <summary>
/// شناسه قرارداد قبلی که قرار است تمدید شود
/// </summary>
public long PreviousContractId { get; set; }
}
/// <summary>
/// مدل نمایش اقساط قرارداد مؤسسه
/// شامل اطلاعات مربوط به هر قسط از قرارداد
/// </summary>
public class InstitutionContractInstallmentViewModel
{
/// <summary>
/// شناسه یکتای قسط
/// </summary>
public long Id { get; set; }
/// <summary>
/// تاریخ میلادی قسط
/// </summary>
public DateTime InstallmentDateGr { get; set; }
/// <summary>
/// تاریخ فارسی قسط
/// </summary>
public string InstallmentDateFa { get; set; }
/// <summary>
/// مبلغ قسط
/// </summary>
public string Amount { get; set; }
/// <summary>
/// عدد قسط فارسی
/// </summary>
public string InstallmentIndex { get; set; }
/// <summary>
/// شناسه قرارداد مؤسسه مربوط به این قسط
/// </summary>
public long InstitutionContractId { get; set; }
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
}

View File

@@ -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
{
/// <summary>
/// اطلاعات شخص حقیقی
/// </summary>
public CreateInstitutionContractRealPartyRequest RealParty { get; set; }
/// <summary>
/// اطلاعات شخص حقوقی
/// </summary>
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<EditContactInfo> ContactInfoViewModels { get; set; }
}

View File

@@ -0,0 +1,40 @@
using System;
namespace CompanyManagment.App.Contracts.InstitutionContract;
/// <summary>
/// مدل نمایش اقساط قرارداد مؤسسه
/// شامل اطلاعات مربوط به هر قسط از قرارداد
/// </summary>
public class InstitutionContractInstallmentViewModel
{
/// <summary>
/// شناسه یکتای قسط
/// </summary>
public long Id { get; set; }
/// <summary>
/// تاریخ میلادی قسط
/// </summary>
public DateTime InstallmentDateGr { get; set; }
/// <summary>
/// تاریخ فارسی قسط
/// </summary>
public string InstallmentDateFa { get; set; }
/// <summary>
/// مبلغ قسط
/// </summary>
public string Amount { get; set; }
/// <summary>
/// عدد قسط فارسی
/// </summary>
public string InstallmentIndex { get; set; }
/// <summary>
/// شناسه قرارداد مؤسسه مربوط به این قسط
/// </summary>
public long InstitutionContractId { get; set; }
}

View File

@@ -0,0 +1,18 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
/// <summary>
/// شمارش وضعیت قراردادهای مؤسسه
/// نمایش تعداد قراردادها برای هر وضعیت خاص
/// </summary>
public class InstitutionContractStatusCount
{
/// <summary>
/// وضعیت لیست قرارداد
/// </summary>
public InstitutionContractListStatus ListStatus { get; set; }
/// <summary>
/// تعداد قراردادها در این وضعیت
/// </summary>
public int Count { get; set; }
}

View File

@@ -0,0 +1,6 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractWorkshopDetailViewModel
{
public WorkshopServicesViewModel ServicesViewModel { get; set; }
}

View File

@@ -1145,8 +1145,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
{
throw new NotImplementedException();
}
public async Task<OperationResult> ExtensionَAsync(CreateInstitutionContractRequest command)
public async Task<OperationResult> ExtensionAsync(CreateInstitutionContractRequest command)
{
throw new NotImplementedException();
}
@@ -1272,6 +1271,16 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return res;
}
public async Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId)
{
return await _institutionContractRepository.GetExtenstionInquiry(previousContractId);
}
public async Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request)
{
return await _institutionContractRepository.GetExtenstionWorkshops(request);
}
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
string state)

View File

@@ -12,6 +12,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.QualityTools.Testing.Fakes" Version="16.11.230815" />
<PackageReference Include="MongoDB.Driver" Version="3.5.0" />
<PackageReference Include="PersianTools.Core" Version="2.0.4" />
</ItemGroup>

View File

@@ -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<long, InstitutionCon
private readonly CompanyContext _context;
private readonly IEmployerRepository _employerRepository;
private readonly IWorkshopRepository _workshopRepository;
private readonly IMongoCollection<InstitutionContractExtenstionTemp> _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>("InstitutionContractExtenstionTemp");
}
public EditInstitutionContract GetDetails(long id)
@@ -1209,14 +1217,14 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
5 // Active
);
var list = await orderedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var list = await orderedQuery.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync();
var contractingPartyIds = list.Select(x => x.contractingParty.id).ToList();
var financialStatements = _context.FinancialStatments.Include(x => x.FinancialTransactionList)
.Where(x => contractingPartyIds.Contains(x.ContractingPartyId)).ToList();
var res = new PagedResult<GetInstitutionContractListItemsViewModel>()
{
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<long, InstitutionCon
return new GetInstitutionContractListItemsViewModel()
{
ContractAmount = x.contract.ContractAmount,
Balance = statement?.FinancialTransactionList.Sum(ft => 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<long, InstitutionCon
return await _context.InstitutionContractSet.FirstOrDefaultAsync(x => x.PublicId == id);
}
public async Task<InstitutionContractExtensionInquiryResult> 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<InstitutionContractExtensionWorkshopsResponse> 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

View File

@@ -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}

View File

@@ -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<ILawApplication,LawApplication>();
services.AddTransient<ILawRepository,LawRepository>();
services
.AddTransient<IInstitutionContractExtenstionTempRepository, InstitutionContractExtenstionTempRepository>();
#endregion
#region Pooya

View File

@@ -10,6 +10,7 @@
<ItemGroup>
<ProjectReference Include="..\CompanyManagement.Infrastructure.Excel\CompanyManagement.Infrastructure.Excel.csproj" />
<ProjectReference Include="..\CompanyManagement.Infrastructure.Mongo\CompanyManagement.Infrastructure.Mongo.csproj" />
<ProjectReference Include="..\CompanyManagment.App.Contracts\CompanyManagment.App.Contracts.csproj" />
<ProjectReference Include="..\CompanyManagment.Application\CompanyManagment.Application.csproj" />
<ProjectReference Include="..\CompanyManagment.EFCore\CompanyManagment.EFCore.csproj" />

View File

@@ -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<ActionResult<InstitutionContractExtensionInquiryResult>> GetExtenstionInquiry(long previousContractId)
{
var res= await _institutionContractApplication.GetExtenstionInquiry(previousContractId);
return res;
}
[HttpPost("extenstion/workshops")]
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> GetExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request)
{
InstitutionContractExtensionWorkshopsResponse res =await _institutionContractApplication.GetExtenstionWorkshops(request);
return res;
}
}
public class VerifyOtpRequest

View File

@@ -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)

View File

@@ -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<MongoDbConfig>();
//var mongoClient = new MongoClient(mongoDbSettings.ConnectionString);
//var mongoDatabase = mongoClient.GetDatabase(mongoDbSettings.DatabaseName);
var mongoConnectionSection = builder.Configuration.GetSection("MongoDb");
var mongoDbSettings = mongoConnectionSection.Get<MongoDbConfig>();
var mongoClient = new MongoClient(mongoDbSettings.ConnectionString);
var mongoDatabase = mongoClient.GetDatabase(mongoDbSettings.DatabaseName);
//builder.Services.AddSingleton<IMongoDatabase>(mongoDatabase);
builder.Services.AddSingleton<IMongoDatabase>(mongoDatabase);
#endregion

View File

@@ -89,6 +89,7 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.2" />
<PackageReference Include="MongoDB.Driver" Version="3.5.0" />
<PackageReference Include="SocialExplorer.FastDBF" Version="1.0.0" />
<PackageReference Include="System.Data.OleDb" Version="8.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="8.1.4" />

View File

@@ -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)
{

View File

@@ -34,7 +34,11 @@
"ApiKey": "Og5M562igmzJRhQPnq0GdtieYdLgtfikjzxOmeQBPxJjZtyge5Klc046Lfw1mxSa",
"SecretKey": "dadmehr"
},
"Domain": ".dadmehrg.ir"
"Domain": ".dadmehrg.ir",
"MongoDb": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "Gozareshgir"
}
}

View File

@@ -27,6 +27,9 @@
},
"AllowedHosts": "*",
//"Domain": ".dad-mehr.ir"
"Domain": ".gozareshgir.ir"
"Domain": ".gozareshgir.ir",
"MongoDb": {
"ConnectionString": "mongodb://localhost:27017",
"DatabaseName": "Gozareshgir"
}
}