From 9cfae54db342f95e462ee6d714ea670c7e008db7 Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 1 Jan 2026 13:13:04 +0330 Subject: [PATCH 1/6] feat: add LoanController for managing loan applications and details --- .../Client/Controllers/LoanController.cs | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 ServiceHost/Areas/Client/Controllers/LoanController.cs diff --git a/ServiceHost/Areas/Client/Controllers/LoanController.cs b/ServiceHost/Areas/Client/Controllers/LoanController.cs new file mode 100644 index 00000000..17240076 --- /dev/null +++ b/ServiceHost/Areas/Client/Controllers/LoanController.cs @@ -0,0 +1,29 @@ +using CompanyManagment.App.Contracts.Loan; +using Microsoft.AspNetCore.Mvc; +using ServiceHost.BaseControllers; + +namespace ServiceHost.Areas.Client.Controllers; + +public class LoanController: ClientBaseController +{ + private readonly ILoanApplication _loanApplication; + + public LoanController(ILoanApplication loanApplication) + { + _loanApplication = loanApplication; + } + [HttpGet] + public ActionResult GetList(LoanSearchViewModel searchModel) + { + var loans = _loanApplication.GetSearchListAsGrouped(searchModel); + return loans; + } + + [HttpGet("{id}")] + public async Task> GetDetails(long id) + { + var loan = await _loanApplication.GetDetails(id); + return loan; + } + +} \ No newline at end of file From 4ab9f60932995b6f5130e3662205be15e98a8144 Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 1 Jan 2026 14:41:13 +0330 Subject: [PATCH 2/6] feat: add methods for creating, calculating installments, and removing loans in LoanController --- .../Client/Controllers/LoanController.cs | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/ServiceHost/Areas/Client/Controllers/LoanController.cs b/ServiceHost/Areas/Client/Controllers/LoanController.cs index 17240076..2fb46bf3 100644 --- a/ServiceHost/Areas/Client/Controllers/LoanController.cs +++ b/ServiceHost/Areas/Client/Controllers/LoanController.cs @@ -1,3 +1,4 @@ +using _0_Framework.Application; using CompanyManagment.App.Contracts.Loan; using Microsoft.AspNetCore.Mvc; using ServiceHost.BaseControllers; @@ -25,5 +26,30 @@ public class LoanController: ClientBaseController var loan = await _loanApplication.GetDetails(id); return loan; } + + [HttpPost] + public ActionResult Create([FromBody] CreateLoanViewModel command) + { + var result = _loanApplication.Create(command); + return result; + } + + [HttpGet("create/installments")] + public ActionResult> CalculateLoanInstallment(string amount, + int installmentCount, string loanStartDate, bool getRounded) + { + var installments = + _loanApplication.CalculateLoanInstallment(amount, installmentCount, loanStartDate, getRounded); + return installments; + } + + [HttpDelete("{id}")] + public ActionResult Remove(long id) + { + var result = _loanApplication.Remove(id); + return result; + } + + } \ No newline at end of file From ef49302f8ac802b9c100d45818f02cbffbc59f57 Mon Sep 17 00:00:00 2001 From: mahan Date: Thu, 8 Jan 2026 12:03:54 +0330 Subject: [PATCH 3/6] feat: add workshop ID handling in LoanController for loan search filtering --- ServiceHost/Areas/Client/Controllers/LoanController.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/ServiceHost/Areas/Client/Controllers/LoanController.cs b/ServiceHost/Areas/Client/Controllers/LoanController.cs index 2fb46bf3..f5b00d8f 100644 --- a/ServiceHost/Areas/Client/Controllers/LoanController.cs +++ b/ServiceHost/Areas/Client/Controllers/LoanController.cs @@ -1,4 +1,5 @@ using _0_Framework.Application; +using _0_Framework.Domain.CustomizeCheckoutShared.Enums; using CompanyManagment.App.Contracts.Loan; using Microsoft.AspNetCore.Mvc; using ServiceHost.BaseControllers; @@ -8,14 +9,17 @@ namespace ServiceHost.Areas.Client.Controllers; public class LoanController: ClientBaseController { private readonly ILoanApplication _loanApplication; + private long _workshopId; - public LoanController(ILoanApplication loanApplication) + public LoanController(ILoanApplication loanApplication, IAuthHelper authHelper) { _loanApplication = loanApplication; + _workshopId= authHelper.GetWorkshopId(); } [HttpGet] public ActionResult GetList(LoanSearchViewModel searchModel) { + searchModel.WorkshopId = _workshopId; var loans = _loanApplication.GetSearchListAsGrouped(searchModel); return loans; } From 87c3cebb605ca0f2e338c61906451410a2753a86 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 13 Jan 2026 09:38:44 +0330 Subject: [PATCH 4/6] set workshopId to readonly --- ServiceHost/Areas/Client/Controllers/LoanController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ServiceHost/Areas/Client/Controllers/LoanController.cs b/ServiceHost/Areas/Client/Controllers/LoanController.cs index f5b00d8f..b13e6bfc 100644 --- a/ServiceHost/Areas/Client/Controllers/LoanController.cs +++ b/ServiceHost/Areas/Client/Controllers/LoanController.cs @@ -9,7 +9,7 @@ namespace ServiceHost.Areas.Client.Controllers; public class LoanController: ClientBaseController { private readonly ILoanApplication _loanApplication; - private long _workshopId; + private readonly long _workshopId; public LoanController(ILoanApplication loanApplication, IAuthHelper authHelper) { From 0e7787dd569b898243be7a2efd46cd3cb966af04 Mon Sep 17 00:00:00 2001 From: mahan Date: Sun, 1 Feb 2026 18:14:28 +0330 Subject: [PATCH 5/6] add page size for search model --- CompanyManagment.App.Contracts/Loan/LoanSearchViewModel.cs | 1 + CompanyManagment.EFCore/Repository/LoanRepository.cs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CompanyManagment.App.Contracts/Loan/LoanSearchViewModel.cs b/CompanyManagment.App.Contracts/Loan/LoanSearchViewModel.cs index f1bf0c5a..8a5b5b8b 100644 --- a/CompanyManagment.App.Contracts/Loan/LoanSearchViewModel.cs +++ b/CompanyManagment.App.Contracts/Loan/LoanSearchViewModel.cs @@ -16,5 +16,6 @@ public class LoanSearchViewModel public string EndDate { get; set; } public int PageIndex { get; set; } + public int PageSize { get; set; } = 30; public bool ShowAsGrouped { get; set; } } diff --git a/CompanyManagment.EFCore/Repository/LoanRepository.cs b/CompanyManagment.EFCore/Repository/LoanRepository.cs index 05c681e7..fdcd58d0 100644 --- a/CompanyManagment.EFCore/Repository/LoanRepository.cs +++ b/CompanyManagment.EFCore/Repository/LoanRepository.cs @@ -171,7 +171,7 @@ public class LoanRepository : RepositoryBase, ILoanRepository query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate); } - result.LoanListViewModel = query.OrderByDescending(x => x.StartInstallmentPayment).Skip(searchModel.PageIndex) + result.LoanListViewModel = query.OrderByDescending(x => x.StartInstallmentPayment).ApplyPagination(searchModel.PageIndex,searchModel.PageSize) .Take(30).ToList() .Select(x => new LoanViewModel() { From fa4c39904af3e5636ef0dc3b79317e3b9fdb0e89 Mon Sep 17 00:00:00 2001 From: mahan Date: Tue, 3 Feb 2026 13:44:47 +0330 Subject: [PATCH 6/6] chnage loan list to new type --- .../Loan/ILoanApplication.cs | 2 +- .../Repository/LoanRepository.cs | 37 +++++++++++-------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/CompanyManagment.App.Contracts/Loan/ILoanApplication.cs b/CompanyManagment.App.Contracts/Loan/ILoanApplication.cs index f55f3132..0e29fb6a 100644 --- a/CompanyManagment.App.Contracts/Loan/ILoanApplication.cs +++ b/CompanyManagment.App.Contracts/Loan/ILoanApplication.cs @@ -21,6 +21,6 @@ public class LoanGroupedViewModel { public List GroupedByDate { get; set; } public ListGroupedByEmployee { get; set; } - public List LoanListViewModel { get; set; } + public PagedResult LoanListViewModel { get; set; } } diff --git a/CompanyManagment.EFCore/Repository/LoanRepository.cs b/CompanyManagment.EFCore/Repository/LoanRepository.cs index fdcd58d0..bdfcec42 100644 --- a/CompanyManagment.EFCore/Repository/LoanRepository.cs +++ b/CompanyManagment.EFCore/Repository/LoanRepository.cs @@ -171,22 +171,29 @@ public class LoanRepository : RepositoryBase, ILoanRepository query = query.Where(x => x.StartInstallmentPayment >= startDate && x.StartInstallmentPayment <= endDate); } - result.LoanListViewModel = query.OrderByDescending(x => x.StartInstallmentPayment).ApplyPagination(searchModel.PageIndex,searchModel.PageSize) - .Take(30).ToList() - .Select(x => new LoanViewModel() - { - EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName, - PersonnelCode = personnelCodes.FirstOrDefault(p => p.EmployeeId == x.EmployeeId).PersonnelCode.ToString(), - Amount = x.Amount.ToMoney(), - AmountPerMonth = x.AmountPerMonth.ToMoney(), - StartDateTime = x.StartInstallmentPayment.ToFarsi(), - Count = x.Count, - Id = x.id, - WorkshopId = x.WorkshopId, - EmployeeId = x.EmployeeId, - YearFa = pc.GetYear(x.StartInstallmentPayment).ToString(), + result.LoanListViewModel = new PagedResult() + { + TotalCount = query.Count(), + List = query.OrderByDescending(x => x.StartInstallmentPayment) + .ApplyPagination(searchModel.PageIndex, searchModel.PageSize) + .Take(30).ToList() + .Select(x => new LoanViewModel() + { + EmployeeFullName = employees.FirstOrDefault(e => e.id == x.EmployeeId).FullName, + PersonnelCode = personnelCodes.FirstOrDefault(p => p.EmployeeId == x.EmployeeId).PersonnelCode + .ToString(), + Amount = x.Amount.ToMoney(), + AmountPerMonth = x.AmountPerMonth.ToMoney(), + StartDateTime = x.StartInstallmentPayment.ToFarsi(), + Count = x.Count, + Id = x.id, + WorkshopId = x.WorkshopId, + EmployeeId = x.EmployeeId, + YearFa = pc.GetYear(x.StartInstallmentPayment).ToString(), + + }).ToList() + }; - }).ToList(); return result; }