diff --git a/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs b/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs index a418a733..b4802c2f 100644 --- a/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs +++ b/Company.Domain/FinancialStatmentAgg/IFinancialStatmentRepository.cs @@ -13,6 +13,7 @@ namespace Company.Domain.FinancialStatmentAgg; public interface IFinancialStatmentRepository : IRepository { + [Obsolete("این متد منسوخ شده است. لطفاً از متد GetDetailsByContractingParty استفاده کنید.")] FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId); List Search(FinancialStatmentSearchModel searchModel); Task GetClientFinancialStatement(long accountId, @@ -21,4 +22,5 @@ public interface IFinancialStatmentRepository : IRepository> GetDetailsByPublicId(string publicId); Task GetBalanceAmount(long id); Task GetClientDebtAmount(long accountId); + Task GetDetailsByContractingParty(long contractingPartyId); } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialStatementViewModel.cs b/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialStatementViewModel.cs index 8104af65..bc1565fe 100644 --- a/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialStatementViewModel.cs +++ b/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialStatementViewModel.cs @@ -30,5 +30,5 @@ public class ClientFinancialStatementViewModel /// /// تراکنش ها /// - public List Transactions { get; set; } + public List Transactions { get; set; } } \ No newline at end of file diff --git a/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialTransactionViewModel.cs b/CompanyManagment.App.Contracts/FinancialStatment/FinancialTransactionDetailViewModel.cs similarity index 95% rename from CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialTransactionViewModel.cs rename to CompanyManagment.App.Contracts/FinancialStatment/FinancialTransactionDetailViewModel.cs index 172ad8cb..e2d24ec4 100644 --- a/CompanyManagment.App.Contracts/FinancialStatment/ClientFinancialTransactionViewModel.cs +++ b/CompanyManagment.App.Contracts/FinancialStatment/FinancialTransactionDetailViewModel.cs @@ -2,7 +2,7 @@ namespace CompanyManagment.App.Contracts.FinancialStatment; -public class ClientFinancialTransactionViewModel +public class FinancialTransactionDetailViewModel { /// /// زمان و تاریخ میلادی diff --git a/CompanyManagment.App.Contracts/FinancialStatment/IFinancialStatmentApplication.cs b/CompanyManagment.App.Contracts/FinancialStatment/IFinancialStatmentApplication.cs index 8fcfc6a5..53e1e79a 100644 --- a/CompanyManagment.App.Contracts/FinancialStatment/IFinancialStatmentApplication.cs +++ b/CompanyManagment.App.Contracts/FinancialStatment/IFinancialStatmentApplication.cs @@ -1,4 +1,5 @@ -using _0_Framework.Application; +using System; +using _0_Framework.Application; using CompanyManagment.App.Contracts.FinancilTransaction; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; @@ -19,6 +20,7 @@ public interface IFinancialStatmentApplication OperationResult Create(CreateFinancialStatment command); List Search(FinancialStatmentSearchModel searchModel); + [Obsolete("این متد منسوخ شده است. لطفاً از متد GetDetailsByContractingParty استفاده کنید.")] FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId); /// @@ -30,6 +32,7 @@ public interface IFinancialStatmentApplication Task GetClientFinancialStatement(ClientFinancialStatementSearchModel searchModel, long accountId); + /// /// نمایش اطلاعات صورت حساب مالی کلاینت بر اساس کد هش /// @@ -50,6 +53,44 @@ public interface IFinancialStatmentApplication /// /// Task GetClientDebtAmount(long accountId); + + /// + /// جزئیات بر اساس + /// + /// + /// + Task GetDetailsByContractingParty(long contractingPartyId); +} + +public class FinancialStatmentDetailsByContractingPartyViewModel +{ + /// + /// آیدی FinancialStatement + /// + public long Id { get; set; } + + /// + /// نام طرف حساب + /// + public string ContractingPartyName { get; set; } + + /// + /// جمع بدهکاری + /// + public double TotalDebt { get; set; } + /// + /// جمع بستانکاری + /// + public double TotalCredit { get; set; } + /// + /// مبلغ قابل پرداخت + /// + public double TotalAmountPayable { get; set; } + + /// + /// تراکنش ها + /// + public List List { get; set; } } public class GetFinancialStatementBalanceAmount diff --git a/CompanyManagment.Application/FinancialStatmentApplication.cs b/CompanyManagment.Application/FinancialStatmentApplication.cs index 74adafd7..1bbc83ce 100644 --- a/CompanyManagment.Application/FinancialStatmentApplication.cs +++ b/CompanyManagment.Application/FinancialStatmentApplication.cs @@ -196,4 +196,9 @@ public class FinancialStatmentApplication : IFinancialStatmentApplication { return _financialStatmentRepository.GetClientDebtAmount(accountId); } + + public async Task GetDetailsByContractingParty(long contractingPartyId) + { + return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId); + } } \ No newline at end of file diff --git a/CompanyManagment.EFCore/Repository/FinancialStatmentRepository.cs b/CompanyManagment.EFCore/Repository/FinancialStatmentRepository.cs index 560b6168..cbb58657 100644 --- a/CompanyManagment.EFCore/Repository/FinancialStatmentRepository.cs +++ b/CompanyManagment.EFCore/Repository/FinancialStatmentRepository.cs @@ -153,7 +153,7 @@ public class FinancialStatmentRepository : RepositoryBase x.Creditor), TotalDebt = financialStatement.FinancialTransactionList.Sum(x => x.Deptor), ContractingPartyName = financialStatement.ContractingPartyName, - Transactions = financialStatement.FinancialTransactionList.Select(t => new ClientFinancialTransactionViewModel() + Transactions = financialStatement.FinancialTransactionList.Select(t => new FinancialTransactionDetailViewModel() { DateTimeGr = t.TdateGr, DateFa = t.TdateGr.ToFarsi(), @@ -248,5 +248,39 @@ public class FinancialStatmentRepository : RepositoryBase GetDetailsByContractingParty(long contractingPartyId) + { + + + var financialStatement = await _context.FinancialStatments + .Include(x=>x.FinancialTransactionList) + .FirstOrDefaultAsync(x=>x.ContractingPartyId == contractingPartyId); + + if (financialStatement == null) + { + throw new NotFoundException("وضعیت مالی مورد نظر یافت نشد"); + } + + var res = new FinancialStatmentDetailsByContractingPartyViewModel() + { + Id = financialStatement.id, + TotalAmountPayable = financialStatement.FinancialTransactionList.Sum(x => x.Deptor) - financialStatement.FinancialTransactionList.Sum(x => x.Creditor), + TotalCredit = financialStatement.FinancialTransactionList.Sum(x => x.Creditor), + TotalDebt = financialStatement.FinancialTransactionList.Sum(x => x.Deptor), + ContractingPartyName = financialStatement.ContractingPartyName, + List = financialStatement.FinancialTransactionList.Select(t => new FinancialTransactionDetailViewModel() + { + DateTimeGr = t.TdateGr, + DateFa = t.TdateGr.ToFarsi(), + TimeFa = $"{t.TdateGr:HH:mm}", + Description = t.DescriptionOption + " " + t.Description, + Debtor = t.Deptor, + Creditor = t.Creditor, + Balance = t.Balance, + Type = t.TypeOfTransaction == "debt" ? FinancialTransactionType.Debt : FinancialTransactionType.Credit, + TypeStr = t.TypeOfTransaction == "debt" ? "ایجاد درآمد" : "دریافت درآمد" + }).OrderByDescending(t => t.DateTimeGr).ToList(), + }; + return res; + } } \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/FinancialStatementController.cs b/ServiceHost/Areas/Admin/Controllers/FinancialStatementController.cs new file mode 100644 index 00000000..a8fbe8d5 --- /dev/null +++ b/ServiceHost/Areas/Admin/Controllers/FinancialStatementController.cs @@ -0,0 +1,122 @@ +using _0_Framework.Application; +using CompanyManagment.App.Contracts.FinancialStatment; +using CompanyManagment.App.Contracts.FinancilTransaction; +using Microsoft.AspNetCore.Mvc; +using PersianTools.Core; +using ServiceHost.BaseControllers; + +namespace ServiceHost.Areas.Admin.Controllers; + +public class FinancialStatementController : AdminBaseController +{ + private readonly IFinancialStatmentApplication _financialStatementApplication; + private readonly IFinancialTransactionApplication _financialTransactionApplication; + + public FinancialStatementController(IFinancialStatmentApplication financialStatementApplication, + IFinancialTransactionApplication financialTransactionApplication) + { + _financialStatementApplication = financialStatementApplication; + _financialTransactionApplication = financialTransactionApplication; + } + + /// + /// گرفتن جزئیات وضعیت مالی با آیدی طرف حساب + /// + /// + /// + [HttpGet("contracting-party/{id}")] + public async Task> + GetDetailsByContractingParty(long id) + { + var data = await _financialStatementApplication.GetDetailsByContractingParty(id); + return data; + } + + /// + /// گرفتن جزییات ویرایش + /// + /// + /// + [HttpGet("edit/{id}")] + public ActionResult GetEditDetails(long id) + { + var res = _financialTransactionApplication.GetDetails(id); + return res; + } + + /// + /// حذف بلاک + /// + /// + /// + [HttpPost("removeBlocked/{id}")] + public ActionResult RemoveBlocked(long id) + { + var res = _financialTransactionApplication.RemoveBlocked(id); + return res; + } + + /// + /// ایجاد + /// + /// + /// + [HttpPost] + public ActionResult Create([FromBody] CreateFinancialStatment command) + { + var res = _financialStatementApplication.Create(command); + + return res; + } + + /// + /// ویرایش + /// + /// + /// + [HttpPut] + public ActionResult Edit([FromBody] EditFinancialTransactionRequest request) + { + var command = new EditFinancialTransaction + { + Id = request.Id, + TdateFa = request.TDateFa, + TypeOfTransaction = request.TypeOfTransaction, + DescriptionOption = request.DescriptionOption, + Description = request.Description, + DeptorString = request.DeptorString, + CreditorString = request.CreditorString + }; + var result = _financialTransactionApplication.Edit(command); + return result; + } + + /// + /// حذف + /// + /// + /// + [HttpDelete("{id}")] + public IActionResult RemoveTransaction(long id) + { + var res = _financialTransactionApplication.RemoveFinancialTransaction(id); + if (res.IsSuccedded) + return new JsonResult(new + { + success = true + }); + return new JsonResult(new + { + success = false + }); + } +} + +public record EditFinancialTransactionRequest( + long Id, + string TDateFa, + string TypeOfTransaction, + string DescriptionOption, + string Description, + string DeptorString, + string CreditorString); \ No newline at end of file diff --git a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs index 744b3fbe..77df5269 100644 --- a/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs +++ b/ServiceHost/Areas/Admin/Controllers/institutionContractController.cs @@ -1,5 +1,6 @@ using _0_Framework.Application; using AccountManagement.Application.Contracts.Account; +using CompanyManagement.Infrastructure.Excel.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContract; using CompanyManagment.App.Contracts.InstitutionContractContactinfo; using CompanyManagment.App.Contracts.PersonalContractingParty; @@ -51,6 +52,7 @@ public class institutionContractController : AdminBaseController { return await _institutionContractApplication.GetListStats(searchModel); } + /// /// ایجاد /// @@ -306,4 +308,55 @@ public class institutionContractController : AdminBaseController }); } + /// + /// بلاک طرف حساب + /// + /// + /// + [HttpPost("block-contracting-party")] + public IActionResult OnPostBlockContractingParty(long id) + { + var result = _contractingPartyApplication.Block(id); + var afterActtion = _contractingPartyApplication.GetDetails(id); + return new JsonResult(new + { + isSuccedded = result.IsSuccedded, + isBlock = afterActtion.IsBlock, + blockTimes = afterActtion.BlockTimes + }); + } + + /// + /// آنبلاک طرف حساب + /// + /// + /// + [HttpPost("unblock-contracting-party")] + public IActionResult OnPostUnBlockContractingParty(long id) + { + var result = _contractingPartyApplication.DisableBlock(id); + var afterActtion = _contractingPartyApplication.GetDetails(id); + return new JsonResult(new + { + isSuccedded = result.IsSuccedded, + isBlock = afterActtion.IsBlock, + blockTimes = afterActtion.BlockTimes + }); + } + + + /// + /// دانلود اکسل + /// + /// + [HttpGet("excel")] + public IActionResult OnGetDownloadExcel() + { + var institutionContractViewModels = + _institutionContractApplication.NewSearch(new() { IsActiveString = "both", TypeOfContract = "both" }); + var bytes = InstitutionContractExcelGenerator.GenerateExcel(institutionContractViewModels); + return File(bytes, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + $"قرارداد های مالی.xlsx"); + } } \ No newline at end of file