213 lines
7.5 KiB
C#
213 lines
7.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using _0_Framework.Application;
|
|
using _0_Framework.InfraStructure;
|
|
using Company.Domain.FinancialInvoiceAgg;
|
|
using CompanyManagment.App.Contracts.FinancialInvoice;
|
|
using CompanyManagment.EFCore;
|
|
|
|
namespace CompanyManagment.Application;
|
|
|
|
public class FinancialInvoiceApplication : IFinancialInvoiceApplication
|
|
{
|
|
private readonly IFinancialInvoiceRepository _financialInvoiceRepository;
|
|
|
|
public FinancialInvoiceApplication(IFinancialInvoiceRepository financialInvoiceRepository)
|
|
{
|
|
_financialInvoiceRepository = financialInvoiceRepository;
|
|
}
|
|
|
|
public OperationResult Create(CreateFinancialInvoice command)
|
|
{
|
|
var operation = new OperationResult();
|
|
|
|
if (command.Amount <= 0)
|
|
return operation.Failed("مبلغ فاکتور باید بزرگتر از صفر باشد");
|
|
|
|
if (command.ContractingPartyId <= 0)
|
|
return operation.Failed("طرف قرارداد نامعتبر است");
|
|
|
|
if (string.IsNullOrWhiteSpace(command.Description))
|
|
return operation.Failed("توضیحات فاکتور الزامی است");
|
|
|
|
var financialInvoice = new FinancialInvoice(command.Amount, command.ContractingPartyId, command.Description);
|
|
|
|
if (command.Items != null && command.Items.Any())
|
|
{
|
|
foreach (var item in command.Items)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(item.Description))
|
|
return operation.Failed("توضیحات آیتم الزامی است");
|
|
|
|
if (item.Amount <= 0)
|
|
return operation.Failed("مبلغ آیتم باید بزرگتر از صفر باشد");
|
|
|
|
var invoiceItem = new FinancialInvoiceItem(item.Description, item.Amount,
|
|
financialInvoice.id, item.Type, item.EntityId);
|
|
|
|
financialInvoice.AddItem(invoiceItem);
|
|
}
|
|
}
|
|
|
|
_financialInvoiceRepository.Create(financialInvoice);
|
|
_financialInvoiceRepository.SaveChanges();
|
|
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public OperationResult Edit(EditFinancialInvoice command)
|
|
{
|
|
var operation = new OperationResult();
|
|
var financialInvoice = _financialInvoiceRepository.Get(command.Id);
|
|
|
|
if (financialInvoice == null)
|
|
return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
if (financialInvoice.Status == FinancialInvoiceStatus.Paid)
|
|
return operation.Failed("امکان ویرایش فاکتور پرداخت شده وجود ندارد");
|
|
|
|
if (string.IsNullOrWhiteSpace(command.Description))
|
|
return operation.Failed("توضیحات فاکتور الزامی است");
|
|
|
|
// Update description
|
|
financialInvoice.Description = command.Description;
|
|
|
|
// Update items if provided
|
|
if (command.Items != null)
|
|
{
|
|
// Clear existing items
|
|
if (financialInvoice.Items != null)
|
|
{
|
|
financialInvoice.Items.Clear();
|
|
}
|
|
else
|
|
{
|
|
financialInvoice.SetItems([]);
|
|
}
|
|
|
|
// Add updated items
|
|
foreach (var item in command.Items)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(item.Description))
|
|
return operation.Failed("توضیحات آیتم الزامی است");
|
|
|
|
if (item.Amount <= 0)
|
|
return operation.Failed("مبلغ آیتم باید بزرگتر از صفر باشد");
|
|
|
|
var invoiceItem = new FinancialInvoiceItem(item.Description, item.Amount,
|
|
financialInvoice.id, item.Type, item.EntityId);
|
|
|
|
financialInvoice.AddItem(invoiceItem);
|
|
}
|
|
}
|
|
|
|
_financialInvoiceRepository.SaveChanges();
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public OperationResult SetPaid(long id, DateTime paidAt)
|
|
{
|
|
var operation = new OperationResult();
|
|
var financialInvoice = _financialInvoiceRepository.Get(id);
|
|
|
|
if (financialInvoice == null)
|
|
return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
if (financialInvoice.Status == FinancialInvoiceStatus.Paid)
|
|
return operation.Failed("فاکتور قبلاً پرداخت شده است");
|
|
|
|
if (financialInvoice.Status == FinancialInvoiceStatus.Cancelled)
|
|
return operation.Failed("امکان پرداخت فاکتور لغو شده وجود ندارد");
|
|
|
|
financialInvoice.SetPaid(paidAt);
|
|
_financialInvoiceRepository.SaveChanges();
|
|
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public OperationResult SetUnpaid(long id)
|
|
{
|
|
var operation = new OperationResult();
|
|
var financialInvoice = _financialInvoiceRepository.Get(id);
|
|
|
|
if (financialInvoice == null)
|
|
return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
financialInvoice.SetUnpaid();
|
|
_financialInvoiceRepository.SaveChanges();
|
|
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public OperationResult SetCancelled(long id)
|
|
{
|
|
var operation = new OperationResult();
|
|
var financialInvoice = _financialInvoiceRepository.Get(id);
|
|
|
|
if (financialInvoice == null)
|
|
return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
if (financialInvoice.Status == FinancialInvoiceStatus.Paid)
|
|
return operation.Failed("امکان لغو فاکتور پرداخت شده وجود ندارد");
|
|
|
|
financialInvoice.SetCancelled();
|
|
_financialInvoiceRepository.SaveChanges();
|
|
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public OperationResult SetRefunded(long id)
|
|
{
|
|
var operation = new OperationResult();
|
|
var financialInvoice = _financialInvoiceRepository.Get(id);
|
|
|
|
if (financialInvoice == null)
|
|
return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
if (financialInvoice.Status != FinancialInvoiceStatus.Paid)
|
|
return operation.Failed("فقط فاکتورهای پرداخت شده قابل بازپرداخت هستند");
|
|
|
|
financialInvoice.SetRefunded();
|
|
_financialInvoiceRepository.SaveChanges();
|
|
|
|
return operation.Succcedded();
|
|
}
|
|
|
|
public EditFinancialInvoice GetDetails(long id)
|
|
{
|
|
return _financialInvoiceRepository.GetDetails(id);
|
|
}
|
|
|
|
public List<FinancialInvoiceViewModel> Search(FinancialInvoiceSearchModel searchModel)
|
|
{
|
|
return _financialInvoiceRepository.Search(searchModel);
|
|
}
|
|
|
|
|
|
//public OperationResult Remove(long id)
|
|
//{
|
|
// var operation = new OperationResult();
|
|
|
|
// try
|
|
// {
|
|
// var financialInvoice = _financialInvoiceRepository.Get(id);
|
|
|
|
// if (financialInvoice == null)
|
|
// return operation.Failed("فاکتور مورد نظر یافت نشد");
|
|
|
|
// if (financialInvoice.Status == FinancialInvoiceStatus.Paid)
|
|
// return operation.Failed("امکان حذف فاکتور پرداخت شده وجود ندارد");
|
|
|
|
// // Remove the entity using the context directly since Remove method might not be available
|
|
// _context.FinancialInvoiceSet.Remove(financialInvoice);
|
|
// _financialInvoiceRepository.SaveChanges();
|
|
|
|
// return operation.Succcedded();
|
|
// }
|
|
// catch (Exception ex)
|
|
// {
|
|
// return operation.Failed("خطا در حذف فاکتور");
|
|
// }
|
|
//}
|
|
} |