208 lines
8.0 KiB
C#
208 lines
8.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using _0_Framework.Application;
|
|
using Company.Domain.ContarctingPartyAgg;
|
|
using Company.Domain.FinancialStatmentAgg;
|
|
using CompanyManagment.App.Contracts.FinancialStatment;
|
|
using CompanyManagment.App.Contracts.FinancilTransaction;
|
|
using Microsoft.AspNetCore.Components.Forms;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace CompanyManagment.Application;
|
|
|
|
public class FinancialStatmentApplication : IFinancialStatmentApplication
|
|
{
|
|
private readonly IFinancialStatmentRepository _financialStatmentRepository;
|
|
private readonly IFinancialTransactionApplication _financialTransactionApplication;
|
|
private readonly IPersonalContractingPartyRepository _contractingPartyRepository;
|
|
|
|
public FinancialStatmentApplication(IFinancialStatmentRepository financialStatmentRepository, IFinancialTransactionApplication financialTransactionApplication, IPersonalContractingPartyRepository contractingPartyRepository)
|
|
{
|
|
_financialStatmentRepository = financialStatmentRepository;
|
|
_financialTransactionApplication = financialTransactionApplication;
|
|
_contractingPartyRepository = contractingPartyRepository;
|
|
}
|
|
|
|
public OperationResult CreateFromBankGateway(CreateFinancialStatment command)
|
|
{
|
|
var op = new OperationResult();
|
|
|
|
if (command.Creditor == 0)
|
|
return op.Failed("فیلد بدهکار خالیاست");
|
|
|
|
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
|
{
|
|
var financialStatment =
|
|
_financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
|
var transaction = new CreateFinancialTransaction()
|
|
{
|
|
FinancialStatementId = financialStatment.Id,
|
|
TdateGr = DateTime.Now,
|
|
TdateFa = DateTime.Now.ToFarsi(),
|
|
Description = command.Description,
|
|
Deptor = 0,
|
|
Creditor = command.Creditor,
|
|
TypeOfTransaction = command.TypeOfTransaction,
|
|
DescriptionOption = command.DescriptionOption
|
|
};
|
|
|
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
|
if (createTransaction.IsSuccedded)
|
|
return op.Succcedded();
|
|
return op.Failed("خطا در انجام عملیات");
|
|
|
|
}
|
|
else
|
|
{
|
|
var contractingPartyName = _contractingPartyRepository.GetFullName(command.ContractingPartyId);
|
|
var statement = new FinancialStatment(command.ContractingPartyId, contractingPartyName);
|
|
_financialStatmentRepository.Create(statement);
|
|
_financialStatmentRepository.SaveChanges();
|
|
|
|
var transaction = new CreateFinancialTransaction()
|
|
{
|
|
FinancialStatementId = statement.id,
|
|
TdateGr = DateTime.Now,
|
|
TdateFa = DateTime.Now.ToFarsi(),
|
|
Description = command.Description,
|
|
Deptor = 0,
|
|
Creditor = command.Creditor,
|
|
Balance = 0,
|
|
TypeOfTransaction = command.TypeOfTransaction,
|
|
DescriptionOption = command.DescriptionOption
|
|
|
|
|
|
};
|
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
|
if (createTransaction.IsSuccedded)
|
|
return op.Succcedded();
|
|
return op.Failed("خطا در انجام عملیات");
|
|
}
|
|
}
|
|
|
|
public OperationResult Create(CreateFinancialStatment command)
|
|
{
|
|
var op = new OperationResult();
|
|
|
|
double creditor = 0;
|
|
double debtor = 0;
|
|
if (command.TypeOfTransaction == "debt" && string.IsNullOrWhiteSpace(command.DeptorString))
|
|
return op.Failed("فیلد بدهکار خالیاست");
|
|
if (command.TypeOfTransaction == "credit" && string.IsNullOrWhiteSpace(command.CreditorString))
|
|
return op.Failed("فیلد بستانکار خالی است");
|
|
if (string.IsNullOrWhiteSpace(command.TdateFa))
|
|
return op.Failed("فیلد تاریخ خالی است");
|
|
|
|
if (command.TypeOfTransaction == "credit")
|
|
{
|
|
debtor = 0;
|
|
creditor = command.CreditorString.MoneyToDouble();
|
|
|
|
}
|
|
else if (command.TypeOfTransaction == "debt")
|
|
{
|
|
creditor = 0;
|
|
debtor = command.DeptorString.MoneyToDouble();
|
|
|
|
}
|
|
|
|
if (!command.TdateFa.TryToGeorgianDateTime(out var tDateGr))
|
|
{
|
|
return op.Failed("تاریخ وارد شده صحیح نمی باشد");
|
|
}
|
|
if (_financialStatmentRepository.Exists(x => x.ContractingPartyId == command.ContractingPartyId))
|
|
{
|
|
var financialStatment = _financialStatmentRepository.GetDetailsByContractingPartyId(command.ContractingPartyId);
|
|
var transaction = new CreateFinancialTransaction()
|
|
{
|
|
FinancialStatementId = financialStatment.Id,
|
|
TdateGr = tDateGr,
|
|
TdateFa = command.TdateFa,
|
|
Description = command.Description,
|
|
Deptor = debtor,
|
|
Creditor = creditor,
|
|
TypeOfTransaction = command.TypeOfTransaction,
|
|
DescriptionOption = command.DescriptionOption
|
|
|
|
|
|
|
|
};
|
|
|
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
|
if (createTransaction.IsSuccedded)
|
|
return op.Succcedded();
|
|
return op.Failed("خطا در انجام عملیات");
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
var statement = new FinancialStatment(command.ContractingPartyId, command.ContractingPartyName);
|
|
_financialStatmentRepository.Create(statement);
|
|
_financialStatmentRepository.SaveChanges();
|
|
|
|
var transaction = new CreateFinancialTransaction()
|
|
{
|
|
FinancialStatementId = statement.id,
|
|
TdateGr = tDateGr,
|
|
TdateFa = command.TdateFa,
|
|
Description = command.Description,
|
|
Deptor = debtor,
|
|
Creditor = creditor,
|
|
Balance = 0,
|
|
TypeOfTransaction = command.TypeOfTransaction,
|
|
DescriptionOption = command.DescriptionOption
|
|
|
|
|
|
};
|
|
var createTransaction = _financialTransactionApplication.Create(transaction);
|
|
if (createTransaction.IsSuccedded)
|
|
return op.Succcedded();
|
|
return op.Failed("خطا در انجام عملیات");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<FinancialStatmentViewModel> Search(FinancialStatmentSearchModel searchModel)
|
|
{
|
|
return _financialStatmentRepository.Search(searchModel);
|
|
}
|
|
|
|
public FinancialStatmentViewModel GetDetailsByContractingPartyId(long contractingPartyId)
|
|
{
|
|
return _financialStatmentRepository.GetDetailsByContractingPartyId(contractingPartyId);
|
|
}
|
|
|
|
public async Task<ClientFinancialStatementViewModel> GetClientFinancialStatement(
|
|
FinancialStatementSearchModel searchModel, long accountId)
|
|
{
|
|
return await _financialStatmentRepository.GetClientFinancialStatement(accountId, searchModel);
|
|
}
|
|
|
|
public async Task<OperationResult<ClientFinancialStatementViewModel>> GetDetailsByPublicId(
|
|
string publicId)
|
|
{
|
|
return await _financialStatmentRepository.GetDetailsByPublicId(publicId);
|
|
}
|
|
|
|
public Task<GetFinancialStatementBalanceAmount> GetBalanceAmount(long id)
|
|
{
|
|
return _financialStatmentRepository.GetBalanceAmount(id);
|
|
}
|
|
|
|
public Task<double> GetClientDebtAmount(long accountId)
|
|
{
|
|
return _financialStatmentRepository.GetClientDebtAmount(accountId);
|
|
}
|
|
|
|
public async Task<FinancialStatmentDetailsByContractingPartyViewModel> GetDetailsByContractingParty(
|
|
long contractingPartyId, FinancialStatementSearchModel searchModel)
|
|
{
|
|
return await _financialStatmentRepository.GetDetailsByContractingParty(contractingPartyId,searchModel);
|
|
}
|
|
} |