Refactor discount calculation and response models for institution contracts
- Replace InstitutionContractExtensionPaymentResponse with InstitutionContractDiscountResponse in discount-related methods and endpoints - Update request and response models to include OneMonthAmount, Obligation, and improved discount fields - Adjust method signatures and controller actions to use new response types - Refactor discount calculation logic to support new structure and ensure correct plan updates for both installment and one-time payments - Improve naming consistency for discount percentage fields
This commit is contained in:
@@ -56,8 +56,8 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
void UpdateStatusIfNeeded(long institutionContractId);
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
||||
InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractExtensionPaymentResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
|
||||
#region Extension
|
||||
@@ -66,8 +66,9 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
|
||||
Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request);
|
||||
Task<InstitutionContractExtensionPaymentResponse> SetDiscountForExtension(InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractExtensionPaymentResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ public class CreateInstitutionContractRequest
|
||||
/// <summary>
|
||||
/// مبلغ کل قرارداد
|
||||
/// </summary>
|
||||
public double TotalAmount { get; set; }
|
||||
public double PaymentAmount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا قرارداد اقساطی است؟
|
||||
|
||||
@@ -215,8 +215,8 @@ public interface IInstitutionContractApplication
|
||||
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
||||
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
||||
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
||||
InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractExtensionPaymentResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
#region Extension
|
||||
|
||||
@@ -231,9 +231,10 @@ public interface IInstitutionContractApplication
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
||||
InstitutionContractExtensionPaymentRequest request);
|
||||
|
||||
Task<InstitutionContractExtensionPaymentResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<ActionResult<InstitutionContractExtensionPaymentResponse>> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
@@ -264,12 +265,48 @@ public interface IInstitutionContractApplication
|
||||
|
||||
}
|
||||
|
||||
public class InstitutionContractDiscountResponse
|
||||
{
|
||||
public InstitutionContractDiscountOneTimeViewModel OneTime { get; set; }
|
||||
public InstitutionContractDiscountMonthlyViewModel Monthly { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractDiscountMonthlyViewModel:InstitutionContractDiscountOneTimeViewModel
|
||||
{
|
||||
public List<MonthlyInstallment> Installments { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractDiscountOneTimeViewModel
|
||||
{
|
||||
/// <summary>
|
||||
/// مجموع مبالغ
|
||||
/// </summary>
|
||||
public string TotalAmount { get; set; }
|
||||
/// <summary>
|
||||
/// ارزش افزوده
|
||||
/// </summary>
|
||||
public string Tax { get; set; }
|
||||
/// <summary>
|
||||
/// مبلغ قابل پرداخت
|
||||
/// </summary>
|
||||
public string PaymentAmount { get; set; }
|
||||
|
||||
public string DiscountedAmount { get; set; }
|
||||
|
||||
public int DiscountPercetage { get; set; }
|
||||
|
||||
public string Obligation { get; set; }
|
||||
|
||||
public string OneMonthAmount { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractResetDiscountForCreateRequest
|
||||
{
|
||||
public int Percentage { get; set; }
|
||||
public int DiscountPercentage { get; set; }
|
||||
public double TotalAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public double OneMonthAmount { get; set; }
|
||||
}
|
||||
|
||||
public class InstitutionContractSetDiscountForExtensionRequest
|
||||
@@ -291,6 +328,7 @@ public class InstitutionContractSetDiscountRequest
|
||||
public int DiscountPercentage { get; set; }
|
||||
public double TotalAmount { get; set; }
|
||||
public InstitutionContractDuration Duration { get; set; }
|
||||
public double OneMonthAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
|
||||
|
||||
@@ -1081,7 +1081,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
contractStartGr,
|
||||
contractStartGr.ToFarsi(), contractEndGr, contractEndGr.ToFarsi(), command.OneMonthAmount,
|
||||
command.DailyCompensation,
|
||||
command.Obligation, command.TotalAmount, 0,
|
||||
command.Obligation, command.PaymentAmount, 0,
|
||||
command.Workshops.Count.ToString(),
|
||||
command.Workshops.Sum(x => x.PersonnelCount).ToString(), command.Description,
|
||||
"NotOfficial", "JobRelation", hasValueAddedTax,
|
||||
@@ -1104,7 +1104,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
if (command.IsInstallment)
|
||||
{
|
||||
var installments =
|
||||
CalculateInstallment(command.TotalAmount, (int)command.Duration, command.ContractStartFa, true);
|
||||
CalculateInstallment(command.PaymentAmount, (int)command.Duration, command.ContractStartFa, true);
|
||||
|
||||
|
||||
// دریافت مبلغ اولین قسط
|
||||
@@ -1423,12 +1423,12 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return res;
|
||||
}
|
||||
|
||||
public InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request)
|
||||
public InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
return _institutionContractRepository.CalculateDiscount(request);
|
||||
}
|
||||
|
||||
public InstitutionContractExtensionPaymentResponse ResetDiscountCreate(
|
||||
public InstitutionContractDiscountResponse ResetDiscountCreate(
|
||||
InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
return _institutionContractRepository.ResetDiscountCreate(request);
|
||||
@@ -1457,13 +1457,14 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return await _institutionContractRepository.GetExtensionPaymentMethod(request);
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractExtensionPaymentResponse> SetDiscountForExtension(
|
||||
public async Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request)
|
||||
{
|
||||
return await _institutionContractRepository.SetDiscountForExtension(request);
|
||||
}
|
||||
|
||||
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request)
|
||||
public async Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
return await _institutionContractRepository.ResetDiscountForExtension(request);
|
||||
}
|
||||
|
||||
@@ -1870,19 +1870,21 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
.FirstOrDefaultAsync(x => x.PublicId == id);
|
||||
}
|
||||
|
||||
public InstitutionContractExtensionPaymentResponse CalculateDiscount(InstitutionContractSetDiscountRequest request)
|
||||
public InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
var baseAmount = request.TotalAmount;
|
||||
var discountAmount = (baseAmount * request.DiscountPercentage) / 100;
|
||||
var discountOneMonthAmount = (request.OneMonthAmount * request.DiscountPercentage) / 100;
|
||||
var discountedOneMonthAmount = request.OneMonthAmount - discountOneMonthAmount;
|
||||
var totalAmount = baseAmount - discountAmount;
|
||||
var taxAmount = totalAmount * 0.10;
|
||||
var paymentAmount = totalAmount + taxAmount;
|
||||
InstitutionContractPaymentMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractPaymentOneTimeViewModel oneTimePayment = null;
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
monthlyPayment = new InstitutionContractPaymentMonthlyViewModel()
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
TotalAmount = totalAmount.ToMoney(),
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
@@ -1890,43 +1892,49 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
DiscountedAmount = discountAmount.ToMoney(),
|
||||
DiscountPercetage = request.DiscountPercentage,
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)request.Duration,
|
||||
totalAmount, DateTime.Now.ToFarsi())
|
||||
totalAmount, DateTime.Now.ToFarsi()),
|
||||
OneMonthAmount = discountedOneMonthAmount.ToMoney(),
|
||||
Obligation = totalAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
oneTimePayment = new InstitutionContractPaymentOneTimeViewModel()
|
||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||
{
|
||||
TotalAmount = totalAmount.ToMoney(),
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
DiscountedAmount = discountAmount.ToMoney(),
|
||||
DiscountPercetage = request.DiscountPercentage
|
||||
DiscountPercetage = request.DiscountPercentage,
|
||||
OneMonthAmount = discountedOneMonthAmount.ToMoney(),
|
||||
Obligation = totalAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
|
||||
if (discountAmount > baseAmount)
|
||||
throw new BadRequestException("مقدار تخفیف نمیتواند بیشتر از مبلغ کل باشد");
|
||||
|
||||
return new InstitutionContractExtensionPaymentResponse()
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
Monthly = monthlyPayment,
|
||||
OneTime = oneTimePayment
|
||||
};
|
||||
}
|
||||
|
||||
public InstitutionContractExtensionPaymentResponse ResetDiscountCreate(
|
||||
public InstitutionContractDiscountResponse ResetDiscountCreate(
|
||||
InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
InstitutionContractPaymentMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractPaymentOneTimeViewModel oneTimePayment = null;
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
var newTotalAmount = request.TotalAmount / (1 - (request.Percentage / 100));
|
||||
var newTotalAmount = request.TotalAmount / (1 - (request.DiscountPercentage / 100.0));
|
||||
var taxAmount = (newTotalAmount * 0.10);
|
||||
var paymentAmount = (newTotalAmount + taxAmount);
|
||||
monthlyPayment = new InstitutionContractPaymentMonthlyViewModel()
|
||||
var newOneMonthAmount = request.OneMonthAmount / (1 - (request.DiscountPercentage / 100.0));
|
||||
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
TotalAmount = newTotalAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
@@ -1934,25 +1942,31 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
DiscountPercetage = 0,
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)request.Duration,
|
||||
paymentAmount, DateTime.Now.ToFarsi())
|
||||
paymentAmount, DateTime.Now.ToFarsi()),
|
||||
Obligation = newTotalAmount.ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
var newTotalAmount = request.TotalAmount / (1 - (request.Percentage / 100));
|
||||
var newTotalAmount = request.TotalAmount / (1 - ((double)request.DiscountPercentage / 100));
|
||||
var taxAmount = (newTotalAmount * 0.10);
|
||||
var paymentAmount = (newTotalAmount + taxAmount);
|
||||
oneTimePayment = new InstitutionContractPaymentOneTimeViewModel()
|
||||
var newOneMonthAmount = request.OneMonthAmount / (1 - ((double)request.DiscountPercentage / 100));
|
||||
|
||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||
{
|
||||
TotalAmount = newTotalAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
DiscountedAmount = "0",
|
||||
DiscountPercetage = 0
|
||||
DiscountPercetage = 0,
|
||||
Obligation = newTotalAmount.ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
|
||||
return new InstitutionContractExtensionPaymentResponse()
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
Monthly = monthlyPayment,
|
||||
OneTime = oneTimePayment
|
||||
@@ -2266,7 +2280,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractExtensionPaymentResponse> SetDiscountForExtension(InstitutionContractSetDiscountForExtensionRequest request)
|
||||
public async Task<InstitutionContractDiscountResponse> SetDiscountForExtension(InstitutionContractSetDiscountForExtensionRequest request)
|
||||
{
|
||||
|
||||
if (request.DiscountPercentage <= 0)
|
||||
@@ -2288,26 +2302,96 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
if(institutionTemp.OneTimePayment.DiscountPercetage>0)
|
||||
throw new BadRequestException("تخفیف قبلا برای این قرارداد اعمال شده است");
|
||||
}
|
||||
|
||||
var selectedPlan = institutionTemp.Duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
var calculateRequest = new InstitutionContractSetDiscountRequest()
|
||||
{
|
||||
Duration = institutionTemp.Duration.Value,
|
||||
TotalAmount = request.TotalAmount,
|
||||
DiscountPercentage = request.DiscountPercentage,
|
||||
IsInstallment = request.IsInstallment
|
||||
IsInstallment = request.IsInstallment,
|
||||
OneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble()
|
||||
|
||||
};
|
||||
var res = CalculateDiscount(calculateRequest);
|
||||
|
||||
|
||||
//این به این دلیل هست که متد caclulate discount یکی از مقادیر رو پر میکنه و ما نیاز داریم هر دو مقدار رو داشته باشیم
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
res.OneTime = institutionTemp.OneTimePayment;
|
||||
var onetime = institutionTemp.OneTimePayment;
|
||||
res.OneTime = new()
|
||||
{
|
||||
PaymentAmount = onetime.PaymentAmount,
|
||||
Tax = onetime.Tax,
|
||||
TotalAmount = onetime.TotalAmount,
|
||||
DiscountedAmount = onetime.DiscountedAmount,
|
||||
DiscountPercetage = onetime.DiscountPercetage,
|
||||
};
|
||||
institutionTemp.MonthlyPayment = new()
|
||||
{
|
||||
Installments = res.Monthly.Installments,
|
||||
PaymentAmount = res.Monthly.PaymentAmount,
|
||||
Tax = res.Monthly.Tax,
|
||||
TotalAmount = res.Monthly.TotalAmount,
|
||||
DiscountedAmount = res.Monthly.DiscountedAmount,
|
||||
DiscountPercetage = res.Monthly.DiscountPercetage,
|
||||
};
|
||||
|
||||
selectedPlan.TotalPayment = res.Monthly.TotalAmount;
|
||||
selectedPlan.Obligation = res.Monthly.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = res.Monthly.PaymentAmount;
|
||||
selectedPlan.DailyCompenseation = (res.Monthly.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
}
|
||||
else
|
||||
{
|
||||
res.Monthly = institutionTemp.MonthlyPayment;
|
||||
var monthly = institutionTemp.MonthlyPayment;
|
||||
res.Monthly = new()
|
||||
{
|
||||
PaymentAmount = monthly.PaymentAmount,
|
||||
Tax = monthly.Tax,
|
||||
TotalAmount = monthly.TotalAmount,
|
||||
DiscountedAmount = monthly.DiscountedAmount,
|
||||
DiscountPercetage = monthly.DiscountPercetage,
|
||||
Installments = monthly.Installments,
|
||||
};
|
||||
institutionTemp.OneTimePayment = new()
|
||||
{
|
||||
PaymentAmount = res.OneTime.PaymentAmount,
|
||||
Tax = res.OneTime.Tax,
|
||||
TotalAmount = res.OneTime.TotalAmount,
|
||||
DiscountedAmount = res.OneTime.DiscountedAmount,
|
||||
DiscountPercetage = res.OneTime.DiscountPercetage,
|
||||
};
|
||||
selectedPlan.TotalPayment = res.OneTime.TotalAmount;
|
||||
selectedPlan.Obligation = res.OneTime.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = res.OneTime.PaymentAmount;
|
||||
selectedPlan.DailyCompenseation = (res.OneTime.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
}
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
|
||||
}
|
||||
institutionTemp.SetAmountAndDuration(institutionTemp.Duration.Value, res.Monthly, res.OneTime);
|
||||
await _institutionExtensionTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
|
||||
@@ -2318,7 +2402,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractExtensionPaymentResponse> ResetDiscountForExtension
|
||||
public async Task<InstitutionContractDiscountResponse> ResetDiscountForExtension
|
||||
(InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
|
||||
@@ -2328,8 +2412,16 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
InstitutionContractPaymentMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractPaymentOneTimeViewModel oneTimePayment = null;
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
var selectedPlan = institutionTemp.Duration switch
|
||||
{
|
||||
InstitutionContractDuration.OneMonth => institutionTemp.OneMonth,
|
||||
InstitutionContractDuration.ThreeMonths => institutionTemp.ThreeMonths,
|
||||
InstitutionContractDuration.SixMonths => institutionTemp.SixMonths,
|
||||
InstitutionContractDuration.TwelveMonths => institutionTemp.TwelveMonths,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
var prevMonthlyPayment = institutionTemp.MonthlyPayment;
|
||||
@@ -2337,7 +2429,8 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
(1 - (prevMonthlyPayment.DiscountPercetage / 100.0));
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
var paymentAmount = (resetTotalAmount + resetTax);
|
||||
monthlyPayment = new InstitutionContractPaymentMonthlyViewModel()
|
||||
var newOneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble() / (1 - (prevMonthlyPayment.DiscountPercetage / 100));
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
DiscountPercetage = 0,
|
||||
DiscountedAmount = "0",
|
||||
@@ -2346,8 +2439,41 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
TotalAmount = resetTotalAmount.ToMoney(),
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)institutionTemp.Duration.Value,
|
||||
paymentAmount, DateTime.Now.ToFarsi()),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney(),
|
||||
Obligation = resetTotalAmount.ToMoney()
|
||||
|
||||
};
|
||||
institutionTemp.MonthlyPayment = monthlyPayment;
|
||||
institutionTemp.MonthlyPayment = new InstitutionContractPaymentMonthlyViewModel()
|
||||
{
|
||||
Installments = monthlyPayment.Installments,
|
||||
PaymentAmount = monthlyPayment.PaymentAmount,
|
||||
Tax = monthlyPayment.Tax,
|
||||
TotalAmount = monthlyPayment.TotalAmount,
|
||||
DiscountedAmount = monthlyPayment.DiscountedAmount,
|
||||
DiscountPercetage = monthlyPayment.DiscountPercetage,
|
||||
};
|
||||
selectedPlan.TotalPayment = monthlyPayment.TotalAmount;
|
||||
selectedPlan.Obligation = monthlyPayment.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = monthlyPayment.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (monthlyPayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
await _institutionExtensionTemp.ReplaceOneAsync(x=>x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
|
||||
@@ -2358,20 +2484,53 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
var resetTotalAmount = prevOneTimePayment.TotalAmount.MoneyToDouble() /
|
||||
(1 - (prevOneTimePayment.DiscountPercetage / 100.0));
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
oneTimePayment = new InstitutionContractPaymentOneTimeViewModel()
|
||||
var newOneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble() / (1 - (prevOneTimePayment.DiscountPercetage / 100));
|
||||
|
||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||
{
|
||||
DiscountPercetage = 0,
|
||||
DiscountedAmount = "0",
|
||||
TotalAmount = resetTotalAmount.ToMoney(),
|
||||
Tax = resetTax.ToMoney(),
|
||||
PaymentAmount = (resetTotalAmount + resetTax).ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney(),
|
||||
Obligation = resetTotalAmount.ToMoney()
|
||||
};
|
||||
institutionTemp.OneTimePayment = oneTimePayment;
|
||||
institutionTemp.OneTimePayment = new InstitutionContractPaymentOneTimeViewModel()
|
||||
{
|
||||
PaymentAmount = oneTimePayment.PaymentAmount,
|
||||
Tax = oneTimePayment.Tax,
|
||||
TotalAmount = oneTimePayment.TotalAmount,
|
||||
DiscountedAmount = oneTimePayment.DiscountedAmount,
|
||||
DiscountPercetage = oneTimePayment.DiscountPercetage,
|
||||
};
|
||||
selectedPlan.TotalPayment = oneTimePayment.TotalAmount;
|
||||
selectedPlan.Obligation = oneTimePayment.Obligation;
|
||||
selectedPlan.OneMonthPaymentDiscounted = oneTimePayment.OneMonthAmount;
|
||||
selectedPlan.DailyCompenseation = (oneTimePayment.OneMonthAmount.MoneyToDouble() * 0.10).ToMoney();
|
||||
|
||||
switch (institutionTemp.Duration)
|
||||
{
|
||||
case InstitutionContractDuration.OneMonth:
|
||||
institutionTemp.OneMonth = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.ThreeMonths:
|
||||
institutionTemp.ThreeMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.SixMonths:
|
||||
institutionTemp.SixMonths = selectedPlan;
|
||||
break;
|
||||
case InstitutionContractDuration.TwelveMonths:
|
||||
institutionTemp.TwelveMonths = selectedPlan;
|
||||
break;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
}
|
||||
await _institutionExtensionTemp.ReplaceOneAsync(x=>x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
}
|
||||
|
||||
return new()
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
OneTime = oneTimePayment,
|
||||
Monthly = monthlyPayment
|
||||
|
||||
@@ -452,14 +452,14 @@ public class institutionContractController : AdminBaseController
|
||||
return operationResult;
|
||||
}
|
||||
[HttpPost("create/set-discount")]
|
||||
public ActionResult<InstitutionContractExtensionPaymentResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request)
|
||||
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.CalculateDiscount(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("create/reset-discount")]
|
||||
public ActionResult<InstitutionContractExtensionPaymentResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request)
|
||||
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.ResetDiscountCreate(request);
|
||||
return res;
|
||||
@@ -558,14 +558,14 @@ public class institutionContractController : AdminBaseController
|
||||
}
|
||||
|
||||
[HttpPost("extension/set-discount")]
|
||||
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request)
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> SetDiscountForExtension([FromBody]InstitutionContractSetDiscountForExtensionRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.SetDiscountForExtension(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extension/reset-discount")]
|
||||
public async Task<ActionResult<InstitutionContractExtensionPaymentResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request)
|
||||
public async Task<ActionResult<InstitutionContractDiscountResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.ResetDiscountForExtension(request);
|
||||
return res;
|
||||
|
||||
Reference in New Issue
Block a user