add institution contract extension plan service and integrate with controller
This commit is contained in:
@@ -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);
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user