This commit is contained in:
mmrbnjd
2025-01-24 19:18:17 +03:30
parent 505adf6ab2
commit 48072d6e00
14 changed files with 389 additions and 67 deletions

View File

@@ -31,7 +31,7 @@ namespace Back.Controllers
private readonly WarehouseService _warehouseService;
private readonly ReceiptService _receiptService;
public InvoiceController(IConfiguration configuration, servInvoice servInvoice, servUser servUser, AddOrUpdateInvoiceValidation validationInvoice, servTaxPayer servTaxPayer, servReport servReport, IAsyncRepository<rptQueue> rptQueueRepository, RemittanceService remittanceService, WarehouseService warehouseService)
public InvoiceController(IConfiguration configuration, servInvoice servInvoice, servUser servUser, AddOrUpdateInvoiceValidation validationInvoice, servTaxPayer servTaxPayer, servReport servReport, IAsyncRepository<rptQueue> rptQueueRepository, RemittanceService remittanceService, WarehouseService warehouseService, ReceiptService receiptService)
{
_configuration = configuration;
_servInvoice = servInvoice;
@@ -42,6 +42,7 @@ namespace Back.Controllers
_rptQueueRepository = rptQueueRepository;
_remittanceService = remittanceService;
_warehouseService = warehouseService;
_receiptService = receiptService;
}
[HttpPost("GetAll")]
@@ -233,7 +234,41 @@ namespace Back.Controllers
//{
// return BadRequest(new List<string> { $"صورتحساب در حالت {invoice.invoiceType.GetEnumDisplayName()} نمی تواند ویرایش شود" });
//}
if (invoice.invoiceType!=InvoiceType.Cancellation)
{
bool InvoiceHasaRemittanceBillReference = invoice.BillReference.HasValue && await _remittanceService.HasaRemittance(invoice.BillReference.Value);
foreach (var item in invoice.invoiceDetails)
{
if (await _remittanceService.HasaRemittance(invoice.ID, item.CODID))
{
await _receiptService.ADD(new Shared.DTOs.Warehouse.ReceiptDto()
{
CODID = item.CODID,
Count = item.am.GetValueOrDefault(),
Date = DateTime.Now.ConvertMiladiToShamsi(),
ForSale = true,
InvoiceID = item.InvoiceID,
Type = TypeReceipt.Shopping,
info = $"حذف صورتحساب {item.InvoiceID}",
}, user.RolUsers.First().CompanyID, true);
//if (invoice.BillReference.HasValue && InvoiceHasaRemittanceBillReference)
//{
// await _remittanceService.ADD(new Shared.DTOs.Warehouse.RemittanceDto()
// {
// CODID = item.CODID,
// Count = item.am.GetValueOrDefault(),
// Date = DateTime.Now.ConvertMiladiToShamsi(),
// InvoiceID = invoice.BillReference.Value,
// Type = TypeRemittance.Sale,
// info = $"حواله خودکار از صورتحساب {invoice.BillReference.Value}",
// });
//}
}
}
}
invoice.LastChangeUserID = Convert.ToInt32(UserID);
//----Update and sendResult
return Ok(await _servInvoice.DeleteInvoice(invoice));
@@ -359,7 +394,29 @@ namespace Back.Controllers
foreach (var item in Invoice.invoiceDetails)
{
if (await _remittanceService.HasaRemittance(Invoice.ID, item.CODID))
await _remittanceService.ChangeRemittance(Invoice.ID, item.CODID, result);
{
await _remittanceService.DeleteByCODIDAndInvoiceID(Invoice.ID,item.CODID, user.RolUsers.First().CompanyID);
//await _receiptService.ADD(new Shared.DTOs.Warehouse.ReceiptDto()
//{
// CODID = item.CODID,
// Count = item.am.GetValueOrDefault(),
// Date = DateTime.Now.ConvertMiladiToShamsi(),
// ForSale = true,
// InvoiceID = item.InvoiceID,
// Type = TypeReceipt.Shopping,
// info = $"رسید خودکار: صورتحساب {item.InvoiceID} از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()}",
//}, user.RolUsers.First().CompanyID, true);
await _remittanceService.ADD(new Shared.DTOs.Warehouse.RemittanceDto()
{
CODID = item.CODID,
Count = item.am.GetValueOrDefault(),
Date = DateTime.Now.ConvertMiladiToShamsi(),
InvoiceID = result,
Type = TypeRemittance.Sale,
info = $"حواله خودکار: از صورتحساب {result}"
});
}
}
return Ok(await _servInvoice.GetInvoice(user.RolUsers.First().CompanyID, result));
}
@@ -434,7 +491,29 @@ namespace Back.Controllers
foreach (var item in Invoice.invoiceDetails)
{
if (await _remittanceService.HasaRemittance(Invoice.ID, item.CODID))
await _remittanceService.ChangeRemittance(Invoice.ID, item.CODID, result1);
{
await _remittanceService.DeleteByCODIDAndInvoiceID(Invoice.ID, item.CODID, user.RolUsers.First().CompanyID);
//await _receiptService.ADD(new Shared.DTOs.Warehouse.ReceiptDto()
//{
// CODID = item.CODID,
// Count = item.am.GetValueOrDefault(),
// Date = DateTime.Now.ConvertMiladiToShamsi(),
// ForSale = true,
// InvoiceID = item.InvoiceID,
// Type = TypeReceipt.Shopping,
// info = $"رسید خودکار: صورتحساب {item.InvoiceID} از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()}",
//}, user.RolUsers.First().CompanyID, true);
await _remittanceService.ADD(new Shared.DTOs.Warehouse.RemittanceDto()
{
CODID = item.CODID,
Count = item.am.GetValueOrDefault(),
Date = DateTime.Now.ConvertMiladiToShamsi(),
InvoiceID = result1,
Type = TypeRemittance.Sale,
info = $"حواله خودکار: از صورتحساب {result1}"
});
}
}
return Ok(await _servInvoice.GetInvoice(user.RolUsers.First().CompanyID, result1));
}
@@ -537,7 +616,29 @@ namespace Back.Controllers
foreach (var item in Invoice.invoiceDetails)
{
if (await _remittanceService.HasaRemittance(Invoice.ID, item.CODID))
await _remittanceService.ChangeRemittance(Invoice.ID, item.CODID, result2);
{
await _remittanceService.DeleteByCODIDAndInvoiceID(Invoice.ID, item.CODID, user.RolUsers.First().CompanyID);
//await _receiptService.ADD(new Shared.DTOs.Warehouse.ReceiptDto()
//{
// CODID = item.CODID,
// Count = item.am.GetValueOrDefault(),
// Date = DateTime.Now.ConvertMiladiToShamsi(),
// ForSale = true,
// InvoiceID = item.InvoiceID,
// Type = TypeReceipt.Shopping,
// info = $"رسید خودکار: صورتحساب {item.InvoiceID} از {Invoice.invoiceType.GetEnumDisplayName()} به {((InvoiceType)invoiceType).GetEnumDisplayName()}",
//}, user.RolUsers.First().CompanyID, true);
await _remittanceService.ADD(new Shared.DTOs.Warehouse.RemittanceDto()
{
CODID = item.CODID,
Count = item.am.GetValueOrDefault(),
Date = DateTime.Now.ConvertMiladiToShamsi(),
InvoiceID = result2,
Type = TypeRemittance.Sale,
info = $"حواله خودکار: از صورتحساب {result2}"
});
}
}
return Ok(await _servInvoice.GetInvoice(user.RolUsers.First().CompanyID, result2));
}
@@ -709,6 +810,11 @@ namespace Back.Controllers
}
else
{
if (_servInvoice.checkFatherInvoiceByInvoiceID(user.RolUsers.First().CompanyID, InvoiceID).Result)
return BadRequest(new List<string> {"این صورتحساب، مرجع چند صورتحساب دیگر می باشد " +'\n'+'\r'+
"نمیتواند برای این صورتحساب حواله صادر کنید، ابتدا صورتحساب هایی که ارتباط دارند را حذف کنید" });
List<string> errors = new List<string>();
var result = await _servInvoice.GetInvoice(user.RolUsers.First().CompanyID, InvoiceID);
if (result.invoiceType == InvoiceType.Bidding || result.invoiceType == InvoiceType.Cancellation)
@@ -720,9 +826,9 @@ namespace Back.Controllers
.GroupBy(i => i.CODID).Select(g => new { CODID = g.Key, TotalAm = g.Sum(i => i.am) }))
{
var Inventory = await _warehouseService.Inventory(CompanyID.Value, item.CODID);
if (Inventory - item.TotalAm <= 0)
if (Inventory - item.TotalAm < 0)
{
errors.Add($"موجودی کالا {item.CODID} کمتر از درخواست شماست");
errors.Add($"موجودی کالا {result.items.First(w => w.CODID == item.CODID).sstt} کمتر از درخواست شماست");
}
}
if (errors.Count == 0)
@@ -751,6 +857,28 @@ namespace Back.Controllers
}
[HttpPost("FreeRemittance/{InvoiceID}")]
public async Task<ActionResult> FreeRemittance(int InvoiceID)
{
//-----GetUserAndCompany
var claim = HttpContext.User.Claims.First(c => c.Type == "UserID");
var UserID = claim.Value;
var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
var CompanyID = user?.RolUsers.First().CompanyID;
if (!await _servInvoice.ExistInvoiceByInvoiceID(CompanyID.Value, InvoiceID))
return NotFound();
await _receiptService.DeleteByInvoiceID(InvoiceID, CompanyID.Value);
await _remittanceService.DeleteByInvoiceID(InvoiceID, CompanyID.Value);
return Ok();
//return BadRequest(new List<string>() { $"حواله ای یافت نشد" });
}
[HttpGet("HasaRemittance/{InvoiceID}")]
public async Task<ActionResult> HasaRemittance(int InvoiceID)

View File

@@ -26,15 +26,17 @@ namespace Back.Controllers
private readonly servInvoice _servInvoice;
private readonly RemittanceService _remittanceService;
private readonly WarehouseService _warehouseService;
public InvoiceItemController(servInvoiceItem servInvoiceItem, AUInvoiceItemValidation validationInvoiceItem
, servUser servUser, servInvoice servInvoice)
public InvoiceItemController(servInvoiceItem servInvoiceItem, servUser servUser, AUInvoiceItemValidation validationInvoiceItem, servInvoice servInvoice, RemittanceService remittanceService, WarehouseService warehouseService)
{
_servInvoiceItem = servInvoiceItem;
_validationInvoiceItem = validationInvoiceItem;
_servUser = servUser;
_validationInvoiceItem = validationInvoiceItem;
_servInvoice = servInvoice;
_remittanceService = remittanceService;
_warehouseService = warehouseService;
}
[HttpPost("AddItem")]
public async Task<ActionResult<bool>> AddItem([FromBody] InvoiceItemAction<InvoiceItemDTO> model)
{
@@ -53,6 +55,10 @@ namespace Back.Controllers
if (invoice == null)
return BadRequest(new List<string> { "invoice notFound..." });
if (_servInvoice.checkFatherInvoiceByInvoiceID(user.RolUsers.First().CompanyID, model.invoiceID).Result)
return BadRequest(new List<string> {"این صورتحساب، مرجع چند صورتحساب دیگر می باشد " +'\n'+
"برای تغییر در آیتم ها ابتدا صورتحساب هایی که ارتباط دارند را حذف کنید" });
if (invoice.invoiceType == InvoiceType.Repair)
{
return BadRequest(new List<string> { "امکان افزودن کالا جدید در صورتحساب اصلاحی وجود ندارد" });
@@ -123,7 +129,9 @@ namespace Back.Controllers
if (invoice == null)
return BadRequest(new List<string> { "invoice notFound..." });
if (_servInvoice.checkFatherInvoiceByInvoiceID(user.RolUsers.First().CompanyID, model.invoiceID).Result)
return BadRequest(new List<string> {"این صورتحساب، مرجع چند صورتحساب دیگر می باشد " +'\n'+
"برای تغییر در آیتم ها ابتدا صورتحساب هایی که ارتباط دارند را حذف کنید" });
//-----Validaton
var resultValidationmodel = await _validationInvoiceItem.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, model.invoiceID, model.item, eActionValidation.update));
@@ -178,6 +186,8 @@ namespace Back.Controllers
invoice.LastChangeUserID = Convert.ToInt32(UserID);
var copyInvoice = (InvoiceItem)invoiceitem.Clone();
if (invoice.invoiceType == InvoiceType.BackFrmSale)
invoiceitem.am = model.item.am;
else
@@ -190,14 +200,14 @@ namespace Back.Controllers
if (await _servInvoice.UpdateInvoice(invoice))
{
if (invoiceitem.am != model.item.am || invoiceitem.CODID != model.item.CODID)
if (copyInvoice.am != model.item.am || copyInvoice.CODID != model.item.CODID)
{
if (await _remittanceService.HasaRemittance(invoiceitem.invoice.ID, invoiceitem.CODID))
if (await _remittanceService.HasaRemittance(model.invoiceID, copyInvoice.CODID))
{
var inv = await _warehouseService.Inventory(user.RolUsers.First().CompanyID, model.item.CODID);
if (inv - model.item.am <= 0)
return BadRequest(new List<string> { "موجودی کالا کمتر از درخواست شماست" });
else await _remittanceService.DeleteByInvoiceIDandCODID(invoiceitem.invoice.ID, invoiceitem.CODID);
if (inv+ copyInvoice.am - model.item.am < 0)
return BadRequest(new List<string> { "خطای انبار :"+"موجودی کالا کمتر از درخواست شماست" });
else await _remittanceService.DeleteByInvoiceIDandCODID(model.invoiceID, copyInvoice.CODID);
// حواله جئدید
await _remittanceService.ADD(new Shared.DTOs.Warehouse.RemittanceDto()
@@ -205,9 +215,9 @@ namespace Back.Controllers
CODID = model.item.CODID,
Count = model.item.am,
Date = DateTime.Now.ConvertMiladiToShamsi(),
info = $"حواله خودکار از صورتحساب {invoiceitem.invoice.ID}",
info = $"حواله خودکار از صورتحساب {model.invoiceID}",
Type = TypeRemittance.Sale,
InvoiceID = invoiceitem.invoice.ID
InvoiceID = model.invoiceID
});
}
@@ -233,6 +243,10 @@ namespace Back.Controllers
if (invoiceitem == null)
return NotFound(new List<string> { "invoice Item notFound..." });
if (_servInvoice.checkFatherInvoiceByInvoiceID(user.RolUsers.First().CompanyID, InvoiceItemID).Result)
return BadRequest(new List<string> {"این صورتحساب، مرجع چند صورتحساب دیگر می باشد " +'\n'+
"برای تغییر در آیتم ها ابتدا صورتحساب هایی که ارتباط دارند را حذف کنید" });
//-----Validaton
var resultValidationmodel = await _validationInvoiceItem.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, invoiceitem.InvoiceID.Value, new InvoiceItemDTO(), eActionValidation.delete));
if (!resultValidationmodel.IsValid)

View File

@@ -27,7 +27,7 @@ namespace Back.Controllers.Warehouse
var UserID = claim.Value;
var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID));
var CompanyID = user.RolUsers.First().CompanyID;
return Ok(await _warehouseService.Circulation(CompanyID,date,CODID));
return Ok(await _warehouseService.Circulation(CompanyID,date,CODID,PageIndex,PageSize));
}
[HttpGet("Inventory/{CODID}")]
public async Task<IActionResult> Inventory(int CODID)