Merge branch 'Feature/InstitutionContract/set-discount'
This commit is contained in:
@@ -56,6 +56,9 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
void UpdateStatusIfNeeded(long institutionContractId);
|
||||
Task<GetInstitutionVerificationDetailsViewModel> GetVerificationDetails(Guid id);
|
||||
Task<InstitutionContract> GetByPublicIdAsync(Guid id);
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
|
||||
#region Extension
|
||||
|
||||
@@ -63,9 +66,13 @@ public interface IInstitutionContractRepository : IRepository<long, InstitutionC
|
||||
Task<InstitutionContractExtensionWorkshopsResponse> GetExtensionWorkshops(InstitutionContractExtensionWorkshopsRequest request);
|
||||
Task<InstitutionContractExtensionPlanResponse> GetExtensionInstitutionPlan(InstitutionContractExtensionPlanRequest request);
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(InstitutionContractExtensionPaymentRequest request);
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region Upgrade(Amendment)
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@ public class InstitutionContract : EntityBase
|
||||
string contractEndFa, double contractAmount, double dailyCompenseation, double obligation,
|
||||
double totalAmount, int extensionNo, string workshopManualCount, string employeeManualCount, string description,
|
||||
string officialCompany, string typeOfcontract, string hasValueAddedTax, double valueAddedTax,
|
||||
List<InstitutionContractWorkshopInitial> workshopDetails, long lawId)
|
||||
List<InstitutionContractWorkshopInitial> workshopDetails, long lawId,
|
||||
int discountPercentage, double discountAmount)
|
||||
{
|
||||
ContractNo = contractNo;
|
||||
RepresentativeId = representativeId;
|
||||
@@ -57,8 +58,12 @@ public class InstitutionContract : EntityBase
|
||||
WorkshopGroup = new InstitutionContractWorkshopGroup(id, workshopDetails);
|
||||
PublicId = Guid.NewGuid();
|
||||
LawId = lawId;
|
||||
DiscountPercentage = discountPercentage;
|
||||
DiscountAmount = discountAmount;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public long LawId { get; private set; }
|
||||
|
||||
public string ContractNo { get; private set; }
|
||||
@@ -128,6 +133,10 @@ public class InstitutionContract : EntityBase
|
||||
public DateTime VerifyCodeCreation { get; private set; }
|
||||
public string VerifierFullName { get; private set; }
|
||||
public string VerifierPhoneNumber { get; private set; }
|
||||
|
||||
public double DiscountAmount { get; private set; }
|
||||
|
||||
public int DiscountPercentage { get; private set; }
|
||||
|
||||
[NotMapped] public bool VerifyCodeExpired => VerifyCodeCreation.Add(ExpireTime) <= DateTime.Now;
|
||||
|
||||
|
||||
@@ -65,6 +65,7 @@ public class InstitutionContractExtensionTemp
|
||||
MonthlyPayment = monthly;
|
||||
OneTimePayment = oneTime;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ public class CreateInstitutionContractRequest
|
||||
/// <summary>
|
||||
/// مبلغ کل قرارداد
|
||||
/// </summary>
|
||||
public double TotalAmount { get; set; }
|
||||
public double PaymentAmount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// آیا قرارداد اقساطی است؟
|
||||
@@ -102,6 +102,10 @@ public class CreateInstitutionContractRequest
|
||||
public double OneMonthAmount { get; set; }
|
||||
|
||||
public long LawId { get; set; }
|
||||
|
||||
public int DiscountPercentage { get; set; }
|
||||
|
||||
public double DiscountAmount { get; set; }
|
||||
}
|
||||
/// <summary>
|
||||
/// مدت زمان قرارداد نهاد
|
||||
|
||||
@@ -215,7 +215,9 @@ public interface IInstitutionContractApplication
|
||||
Task<OperationResult<OtpResultViewModel>> SendVerifyOtp(Guid id);
|
||||
Task<OperationResult<string>> VerifyOtpAndMakeGateway(Guid publicId, string code, string callbackUrl);
|
||||
Task<InstitutionContractWorkshopDetailViewModel> GetWorkshopInitialDetails(long workshopDetailsId);
|
||||
|
||||
InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request);
|
||||
InstitutionContractDiscountResponse ResetDiscountCreate(InstitutionContractResetDiscountForCreateRequest request);
|
||||
|
||||
#region Extension
|
||||
|
||||
Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId);
|
||||
@@ -228,6 +230,12 @@ public interface IInstitutionContractApplication
|
||||
|
||||
Task<InstitutionContractExtensionPaymentResponse> GetExtensionPaymentMethod(
|
||||
InstitutionContractExtensionPaymentRequest request);
|
||||
|
||||
Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request);
|
||||
Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request);
|
||||
|
||||
|
||||
Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request);
|
||||
Task<List<InstitutionContractSelectListViewModel>> GetInstitutionContractSelectList(string search,string selected);
|
||||
@@ -254,7 +262,74 @@ public interface IInstitutionContractApplication
|
||||
|
||||
Task<OperationResult> SetPendingWorkflow(long entityId);
|
||||
Task<long> GetIdByInstallmentId(long installmentId);
|
||||
|
||||
}
|
||||
|
||||
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 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
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public int DiscountPercentage { get; set; }
|
||||
public double TotalAmount { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
public class InstitutionContractResetDiscountForExtensionRequest
|
||||
{
|
||||
public Guid TempId { get; set; }
|
||||
public bool IsInstallment { get; set; }
|
||||
}
|
||||
|
||||
|
||||
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; }
|
||||
}
|
||||
|
||||
public class InstitutionContractPrintViewModel
|
||||
|
||||
@@ -17,6 +17,9 @@ public class InstitutionContractPaymentOneTimeViewModel
|
||||
/// مبلغ قابل پرداخت
|
||||
/// </summary>
|
||||
public string PaymentAmount { get; set; }
|
||||
|
||||
public string DiscountedAmount { get; set; }
|
||||
public int DiscountPercetage { get; set; }
|
||||
}
|
||||
public class InstitutionContractPaymentMonthlyViewModel:InstitutionContractPaymentOneTimeViewModel
|
||||
{
|
||||
|
||||
@@ -223,7 +223,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
command.ContractStartFa, contractEndGr, command.ContractEndFa, command.ContractAmount,
|
||||
command.DailyCompenseation, command.Obligation,
|
||||
command.TotalAmount, 0, command.WorkshopManualCount, command.EmployeeManualCount, command.Description,
|
||||
command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, command.ValueAddedTax, [], command.LawId);
|
||||
command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax, command.ValueAddedTax, [], command.LawId,0,0);
|
||||
|
||||
_institutionContractRepository.Create(createContract);
|
||||
_institutionContractRepository.SaveChanges();
|
||||
@@ -332,7 +332,7 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
command.DailyCompenseation, command.Obligation,
|
||||
command.TotalAmount, command.ExtensionNo, command.WorkshopManualCount, command.EmployeeManualCount,
|
||||
command.Description, command.OfficialCompany, command.TypeOfContract, command.HasValueAddedTax,
|
||||
command.ValueAddedTax, [], command.LawId);
|
||||
command.ValueAddedTax, [], command.LawId,0,0);
|
||||
|
||||
_institutionContractRepository.Create(createContract);
|
||||
_institutionContractRepository.SaveChanges();
|
||||
@@ -1081,11 +1081,11 @@ 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,
|
||||
command.TaxAmount, workshopDetails, command.LawId);
|
||||
command.TaxAmount, workshopDetails, command.LawId,command.DiscountPercentage,command.DiscountAmount );
|
||||
|
||||
|
||||
FinancialStatment financialStatement;
|
||||
@@ -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,6 +1423,17 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return res;
|
||||
}
|
||||
|
||||
public InstitutionContractDiscountResponse CalculateDiscount(InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
return _institutionContractRepository.CalculateDiscount(request);
|
||||
}
|
||||
|
||||
public InstitutionContractDiscountResponse ResetDiscountCreate(
|
||||
InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
return _institutionContractRepository.ResetDiscountCreate(request);
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
||||
{
|
||||
return await _institutionContractRepository.GetExtensionInquiry(previousContractId);
|
||||
@@ -1446,6 +1457,18 @@ public class InstitutionContractApplication : IInstitutionContractApplication
|
||||
return await _institutionContractRepository.GetExtensionPaymentMethod(request);
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> SetDiscountForExtension(
|
||||
InstitutionContractSetDiscountForExtensionRequest request)
|
||||
{
|
||||
return await _institutionContractRepository.SetDiscountForExtension(request);
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> ResetDiscountForExtension(
|
||||
InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
return await _institutionContractRepository.ResetDiscountForExtension(request);
|
||||
}
|
||||
|
||||
public async Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
return await _institutionContractRepository.ExtensionComplete(request);
|
||||
|
||||
11347
CompanyManagment.EFCore/Migrations/20251129103132_add discount to institutioncontract.Designer.cs
generated
Normal file
11347
CompanyManagment.EFCore/Migrations/20251129103132_add discount to institutioncontract.Designer.cs
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,40 @@
|
||||
using Microsoft.EntityFrameworkCore.Migrations;
|
||||
|
||||
#nullable disable
|
||||
|
||||
namespace CompanyManagment.EFCore.Migrations
|
||||
{
|
||||
/// <inheritdoc />
|
||||
public partial class adddiscounttoinstitutioncontract : Migration
|
||||
{
|
||||
/// <inheritdoc />
|
||||
protected override void Up(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.AddColumn<double>(
|
||||
name: "DiscountAmount",
|
||||
table: "InstitutionContracts",
|
||||
type: "float",
|
||||
nullable: false,
|
||||
defaultValue: 0.0);
|
||||
|
||||
migrationBuilder.AddColumn<int>(
|
||||
name: "DiscountPercentage",
|
||||
table: "InstitutionContracts",
|
||||
type: "int",
|
||||
nullable: false,
|
||||
defaultValue: 0);
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
protected override void Down(MigrationBuilder migrationBuilder)
|
||||
{
|
||||
migrationBuilder.DropColumn(
|
||||
name: "DiscountAmount",
|
||||
table: "InstitutionContracts");
|
||||
|
||||
migrationBuilder.DropColumn(
|
||||
name: "DiscountPercentage",
|
||||
table: "InstitutionContracts");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3265,6 +3265,12 @@ namespace CompanyManagment.EFCore.Migrations
|
||||
.HasMaxLength(10000)
|
||||
.HasColumnType("nvarchar(max)");
|
||||
|
||||
b.Property<double>("DiscountAmount")
|
||||
.HasColumnType("float");
|
||||
|
||||
b.Property<int>("DiscountPercentage")
|
||||
.HasColumnType("int");
|
||||
|
||||
b.Property<string>("EmployeeManualCount")
|
||||
.HasMaxLength(10)
|
||||
.HasColumnType("nvarchar(10)");
|
||||
|
||||
@@ -1870,6 +1870,109 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
.FirstOrDefaultAsync(x => x.PublicId == id);
|
||||
}
|
||||
|
||||
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;
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
TotalAmount = totalAmount.ToMoney(),
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
DiscountedAmount = discountAmount.ToMoney(),
|
||||
DiscountPercetage = request.DiscountPercentage,
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)request.Duration,
|
||||
totalAmount, DateTime.Now.ToFarsi()),
|
||||
OneMonthAmount = discountedOneMonthAmount.ToMoney(),
|
||||
Obligation = totalAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
oneTimePayment = new InstitutionContractDiscountOneTimeViewModel()
|
||||
{
|
||||
TotalAmount = totalAmount.ToMoney(),
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
DiscountedAmount = discountAmount.ToMoney(),
|
||||
DiscountPercetage = request.DiscountPercentage,
|
||||
OneMonthAmount = discountedOneMonthAmount.ToMoney(),
|
||||
Obligation = totalAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
|
||||
if (discountAmount > baseAmount)
|
||||
throw new BadRequestException("مقدار تخفیف نمیتواند بیشتر از مبلغ کل باشد");
|
||||
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
Monthly = monthlyPayment,
|
||||
OneTime = oneTimePayment
|
||||
};
|
||||
}
|
||||
|
||||
public InstitutionContractDiscountResponse ResetDiscountCreate(
|
||||
InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
InstitutionContractDiscountMonthlyViewModel monthlyPayment = null;
|
||||
InstitutionContractDiscountOneTimeViewModel oneTimePayment = null;
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
var newTotalAmount = request.TotalAmount / (1 - (request.DiscountPercentage / 100.0));
|
||||
var taxAmount = (newTotalAmount * 0.10);
|
||||
var paymentAmount = (newTotalAmount + taxAmount);
|
||||
var newOneMonthAmount = request.OneMonthAmount / (1 - (request.DiscountPercentage / 100.0));
|
||||
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
TotalAmount = newTotalAmount.ToMoney(),
|
||||
Tax = taxAmount.ToMoney(),
|
||||
DiscountedAmount = "0",
|
||||
DiscountPercetage = 0,
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)request.Duration,
|
||||
paymentAmount, DateTime.Now.ToFarsi()),
|
||||
Obligation = newTotalAmount.ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
var newTotalAmount = request.TotalAmount / (1 - ((double)request.DiscountPercentage / 100));
|
||||
var taxAmount = (newTotalAmount * 0.10);
|
||||
var paymentAmount = (newTotalAmount + taxAmount);
|
||||
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,
|
||||
Obligation = newTotalAmount.ToMoney(),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney()
|
||||
};
|
||||
}
|
||||
|
||||
return new InstitutionContractDiscountResponse()
|
||||
{
|
||||
Monthly = monthlyPayment,
|
||||
OneTime = oneTimePayment
|
||||
};
|
||||
}
|
||||
|
||||
#region Extension
|
||||
|
||||
public async Task<InstitutionContractExtensionInquiryResult> GetExtensionInquiry(long previousContractId)
|
||||
@@ -2177,6 +2280,264 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
return res;
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> SetDiscountForExtension(InstitutionContractSetDiscountForExtensionRequest request)
|
||||
{
|
||||
|
||||
if (request.DiscountPercentage <= 0)
|
||||
throw new BadRequestException("مقدار تخفیف نمیتواند برابر یا کمتر از صفر باشد");
|
||||
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
if (institutionTemp == null)
|
||||
{
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
if(institutionTemp.MonthlyPayment.DiscountPercetage>0)
|
||||
throw new BadRequestException("تخفیف قبلا برای این قرارداد اعمال شده است");
|
||||
}
|
||||
else
|
||||
{
|
||||
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,
|
||||
OneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble()
|
||||
|
||||
};
|
||||
var res = CalculateDiscount(calculateRequest);
|
||||
|
||||
//این به این دلیل هست که متد caclulate discount یکی از مقادیر رو پر میکنه و ما نیاز داریم هر دو مقدار رو داشته باشیم
|
||||
if (request.IsInstallment)
|
||||
{
|
||||
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
|
||||
{
|
||||
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();
|
||||
|
||||
}
|
||||
await _institutionExtensionTemp.ReplaceOneAsync(x => x.Id == institutionTemp.Id,
|
||||
institutionTemp);
|
||||
|
||||
return new()
|
||||
{
|
||||
OneTime = res.OneTime,
|
||||
Monthly = res.Monthly
|
||||
};
|
||||
}
|
||||
|
||||
public async Task<InstitutionContractDiscountResponse> ResetDiscountForExtension
|
||||
(InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var institutionTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TempId)
|
||||
.FirstOrDefaultAsync();
|
||||
if (institutionTemp == null)
|
||||
{
|
||||
throw new BadRequestException("اطلاعات وارد شده نامعتبر است");
|
||||
}
|
||||
|
||||
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;
|
||||
var resetTotalAmount = prevMonthlyPayment.TotalAmount.MoneyToDouble() /
|
||||
(1 - (prevMonthlyPayment.DiscountPercetage / 100.0));
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
var paymentAmount = (resetTotalAmount + resetTax);
|
||||
var newOneMonthAmount = selectedPlan.OneMonthPaymentDiscounted.MoneyToDouble() / (1 - (prevMonthlyPayment.DiscountPercetage / 100));
|
||||
monthlyPayment = new InstitutionContractDiscountMonthlyViewModel()
|
||||
{
|
||||
DiscountPercetage = 0,
|
||||
DiscountedAmount = "0",
|
||||
PaymentAmount = paymentAmount.ToMoney(),
|
||||
Tax = resetTax.ToMoney(),
|
||||
TotalAmount = resetTotalAmount.ToMoney(),
|
||||
Installments = InstitutionMonthlyInstallmentCaculation((int)institutionTemp.Duration.Value,
|
||||
paymentAmount, DateTime.Now.ToFarsi()),
|
||||
OneMonthAmount = newOneMonthAmount.ToMoney(),
|
||||
Obligation = resetTotalAmount.ToMoney()
|
||||
|
||||
};
|
||||
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);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var prevOneTimePayment = institutionTemp.OneTimePayment;
|
||||
var resetTotalAmount = prevOneTimePayment.TotalAmount.MoneyToDouble() /
|
||||
(1 - (prevOneTimePayment.DiscountPercetage / 100.0));
|
||||
var resetTax = (resetTotalAmount * 0.10);
|
||||
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 = 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 InstitutionContractDiscountResponse()
|
||||
{
|
||||
OneTime = oneTimePayment,
|
||||
Monthly = monthlyPayment
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
public async Task<OperationResult> ExtensionComplete(InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
var institutionContractTemp = await _institutionExtensionTemp.Find(x => x.Id == request.TemporaryId)
|
||||
@@ -2321,7 +2682,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
previousInstitutionContract.Description,
|
||||
"NotOfficial", "JobRelation", hasValueAddedTax,
|
||||
payment.Tax.MoneyToDouble(), [],
|
||||
request.LawId);
|
||||
request.LawId,payment.DiscountPercetage,payment.DiscountedAmount.MoneyToDouble());
|
||||
|
||||
await CreateAsync(entity);
|
||||
await SaveChangesAsync();
|
||||
@@ -2841,7 +3202,7 @@ public class InstitutionContractRepository : RepositoryBase<long, InstitutionCon
|
||||
{
|
||||
OneTime = new()
|
||||
{
|
||||
TotalAmount = selectedPlan.TotalPayment,
|
||||
TotalAmount = oneTimeBase.ToMoney(),
|
||||
Tax = oneTimeTax.ToMoney(),
|
||||
PaymentAmount = oneTimeTotal.ToMoney()
|
||||
}
|
||||
|
||||
@@ -451,8 +451,19 @@ public class institutionContractController : AdminBaseController
|
||||
|
||||
return operationResult;
|
||||
}
|
||||
|
||||
|
||||
[HttpPost("create/set-discount")]
|
||||
public ActionResult<InstitutionContractDiscountResponse> SetDiscountForInstitutionContract([FromBody]InstitutionContractSetDiscountRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.CalculateDiscount(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("create/reset-discount")]
|
||||
public ActionResult<InstitutionContractDiscountResponse> ResetDiscountForCreate([FromBody]InstitutionContractResetDiscountForCreateRequest request)
|
||||
{
|
||||
var res = _institutionContractApplication.ResetDiscountCreate(request);
|
||||
return res;
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
@@ -545,7 +556,21 @@ public class institutionContractController : AdminBaseController
|
||||
var res =await _institutionContractApplication.GetExtensionPaymentMethod(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extension/set-discount")]
|
||||
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<InstitutionContractDiscountResponse>> ResetDiscountForExtension([FromBody]InstitutionContractResetDiscountForExtensionRequest request)
|
||||
{
|
||||
var res =await _institutionContractApplication.ResetDiscountForExtension(request);
|
||||
return res;
|
||||
}
|
||||
|
||||
[HttpPost("extenstion/complete")]
|
||||
public async Task<ActionResult<OperationResult>> ExtensionComplete([FromBody]InstitutionContractExtensionCompleteRequest request)
|
||||
{
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
"sqlDebugging": true,
|
||||
"dotnetRunMessages": "true",
|
||||
"nativeDebugging": true,
|
||||
"applicationUrl": "https://localhost:5004;http://localhost:5003;",
|
||||
"applicationUrl": "https://localhost:5004;http://localhost:5003;https://192.168.0.117:5005",
|
||||
"jsWebView2Debugging": false,
|
||||
"hotReloadEnabled": true
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user