add institution contract extension plan service and integrate with controller

This commit is contained in:
2025-10-07 17:05:11 +03:30
parent 8912215bbc
commit dbe7aebf37
7 changed files with 137 additions and 13 deletions

View File

@@ -56,4 +56,5 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
}

View File

@@ -221,17 +221,17 @@ public interface IInstitutionContractApplication
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
Task<InstitutionContractExtensionInquiryResult> GetExtenstionInquiry(long previousContractId);
Task<InstitutionContractExtensionWorkshopsResponse> GetExtenstionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
//Task<>
//TODO:Calculate one workshop
//TODO:Calculate total InstitutionContract Amount
//TODO:calculate Payment method
//TODO:Complete Data.
}
public class InstitutionContractExtensionWorkshopsRequest
{
public Guid TempId { get; set; }
@@ -245,4 +245,10 @@ public class InstitutionContractExtensionWorkshopsResponse
{
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
}
public class InstitutionContractExtensionPlanRequest
{
public List<WorkshopTempViewModel> WorkshopTemps { get; set; }
public string TotalAmount { get; set; }
public Guid TempId { get; set; }
}

View File

@@ -23,4 +23,5 @@ public class InstitutionContractExtensionInquiryResult
public string City { get; set; }
public string Province { get; set; }
public List<EditContactInfo> ContactInfoViewModels { get; set; }
public long RepresentativeId { get; set; }
}

View File

@@ -0,0 +1,20 @@
namespace CompanyManagment.App.Contracts.InstitutionContract;
public class InstitutionContractExtensionPlanResponse
{
public InstitutionContractExtensionPlanDetail OneMonth { get; set; }
public InstitutionContractExtensionPlanDetail ThreeMonths { get; set; }
public InstitutionContractExtensionPlanDetail SixMonths { get; set; }
public InstitutionContractExtensionPlanDetail TwelveMonths { get; set; }
}
public class InstitutionContractExtensionPlanDetail
{
public string ContractStart { get; set; }
public string ContractEnd { get; set; }
public string OneMonthPaymentDiscounted { get; set; }
public string OneMonthDiscount { get; set; }
public string OneMonthOriginalPayment { get; set; }
public string TotalPayment { get; set; }
public string DailyCompenseation { get; set; }
public string Obligation { get; set; }
}

View File

@@ -1282,6 +1282,11 @@ public class InstitutionContractApplication : IInstitutionContractApplication
return await _institutionContractRepository.GetExtenstionWorkshops(request);
}
public async Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request)
{
return await _institutionContractRepository.GetExtenstionInstitutionPlan(request);
}
private async Task<OperationResult<PersonalContractingParty>> CreateLegalContractingPartyEntity(
CreateInstitutionContractLegalPartyRequest request, long representativeId, string address, string city,
string state)

View File

@@ -1894,7 +1894,9 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
Province = contractingParty.State,
LegalParty = legalPartyRequest,
RealParty = realPartyRequest,
TemporaryId = institutionContractTemp.Id
TemporaryId = institutionContractTemp.Id,
RepresentativeId = institutionContracts.RepresentativeId
};
return res;
}
@@ -1952,6 +1954,95 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
return res;
}
public async Task<InstitutionContractExtensionPlanResponse> GetExtenstionInstitutionPlan(InstitutionContractExtensionPlanRequest request)
{
if (request.WorkshopTemps.Count == 0)
throw new BadRequestException("هیچ کارگاهی یافت نشد");
bool hasInPerson = request.WorkshopTemps.Any(x => x.ContractAndCheckoutInPerson);
double amount = request.TotalAmount.MoneyToDouble();
var institutionTemp =await _institutionExtensionTemp.Find(x => x.Id == request.TempId).FirstOrDefaultAsync();
var previousInstitution =await _context.InstitutionContractSet.FirstOrDefaultAsync(x=>x.id == institutionTemp.PreviousId);
var res = new InstitutionContractExtensionPlanResponse();
var newContractStart = previousInstitution.ContractEndGr;
if (hasInPerson)
{
res.OneMonth = null;
res.ThreeMonths = null;
res.SixMonths = null;
res.TwelveMonths = CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths,amount, true,newContractStart);
}
else
{
res.OneMonth= CalculateInstitutionPlan(InstitutionContractDuration.OneMonth,amount,false,newContractStart);
res.ThreeMonths= CalculateInstitutionPlan(InstitutionContractDuration.ThreeMonths,amount,false,newContractStart);
res.SixMonths= CalculateInstitutionPlan(InstitutionContractDuration.SixMonths,amount,false,newContractStart);
res.TwelveMonths= CalculateInstitutionPlan(InstitutionContractDuration.TwelveMonths,amount,false,newContractStart);
}
return res;
}
private InstitutionContractExtensionPlanDetail CalculateInstitutionPlan(InstitutionContractDuration duration,double amount,
bool hasInPersonContract,DateTime contractStart)
{
var result = new InstitutionContractExtensionPlanDetail();
var months = (int)duration;
//بدست آوردن جمع کل مبالغ کارگاه بر اساس مدت قراداد
var totalPrice = months * amount;
var contractStartFa = contractStart.ToFarsi();
var findeEnd = Tools.FindEndOfContract(contractStartFa, ((int)duration).ToString());
var contractEndDate = findeEnd.endDateGr;
result.ContractEnd = contractEndDate.ToFarsi();
result.ContractStart =contractStartFa;
result.Obligation = totalPrice.ToMoney();
result.DailyCompenseation = ((amount * 10) / 100).ToMoney();
if (hasInPersonContract)
{
result.OneMonthDiscount = "0";
result.OneMonthOriginalPayment = totalPrice.ToMoney();
result.OneMonthPaymentDiscounted = totalPrice.ToMoney();
}
else
{
var discount = duration switch
{
InstitutionContractDuration.OneMonth => 0,
InstitutionContractDuration.ThreeMonths => 5,
InstitutionContractDuration.SixMonths => 10,
InstitutionContractDuration.TwelveMonths => 15,
_ => throw new ArgumentOutOfRangeException(nameof(duration), duration, null)
};
var oneMonthDiscountAmount = (amount * discount) / 100;
var oneMonthDiscountedPayment = amount - oneMonthDiscountAmount;
var totalDiscount = oneMonthDiscountAmount * months;
var discountedPayment = totalPrice - totalDiscount;
result.OneMonthDiscount = oneMonthDiscountAmount.ToMoney();
result.OneMonthPaymentDiscounted = oneMonthDiscountedPayment.ToMoney();
result.TotalPayment = discountedPayment.ToMoney();
}
return result;
}
#endregion

View File

@@ -749,16 +749,16 @@ public class institutionContractController : AdminBaseController
[HttpPost("extenstion/workshops")]
public async Task<ActionResult<InstitutionContractExtensionWorkshopsResponse>> GetExtenstionWorkshops([FromBody] InstitutionContractExtensionWorkshopsRequest request)
{
InstitutionContractExtensionWorkshopsResponse res =await _institutionContractApplication.GetExtenstionWorkshops(request);
var res =await _institutionContractApplication.GetExtenstionWorkshops(request);
return res;
}
// [HttpPost("extenstion/institution-plan")]
// public async Task<ActionResult<>> GetExtenstionInstitutionPlan()
// {
// var res =await _institutionContractApplication.;
// return res;
// }
[HttpPost("extenstion/institution-plan")]
public async Task<ActionResult<InstitutionContractExtensionPlanResponse>> GetExtenstionInstitutionPlan([FromBody]InstitutionContractExtensionPlanRequest request)
{
var res =await _institutionContractApplication.GetExtenstionInstitutionPlan(request);
return res;
}
}