From cd95332a3d7e1d32c683aa67a4fd4d62f00e6079 Mon Sep 17 00:00:00 2001 From: mmrbnjd Date: Thu, 8 Aug 2024 00:28:17 +0330 Subject: [PATCH] ... --- Back/Controllers/InvoiceController.cs | 30 +++++++++++++++---- Back/Data/Models/Invoice.cs | 1 + Back/Services/ServCOD.cs | 2 +- Back/Services/servInvoice.cs | 6 +++- Back/Services/servUser.cs | 10 +++---- .../AddOrUpdateInvoiceValidation.cs | 6 ++++ 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/Back/Controllers/InvoiceController.cs b/Back/Controllers/InvoiceController.cs index 8587046..9e1c859 100644 --- a/Back/Controllers/InvoiceController.cs +++ b/Back/Controllers/InvoiceController.cs @@ -136,17 +136,19 @@ namespace Back.Controllers return BadRequest(new List { "این صورتحساب دارای مرجع می باشد"+'\n'+ "امکان تغییر الگو امکان پذیر نیست"}); } - if (invoice.PatternID != item.PatternID || invoice.CustomerID != item.CustomerID - || invoice.InvoicIssueDate != item.InvoicIssueDate || invoice.InvoiceDate != item.InvoiceDate) + var CheckTaxPayer = await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(invoice); + if (invoice.PatternID != item.PatternID || invoice.CustomerID != item.CustomerID) { //----Check TaxPayer - if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(invoice)) + + if (CheckTaxPayer) return BadRequest(new List { "این صورتحساب به سازمان ارسال شده"+'\n'+ "برای تغییر ،صورتحساب را ابطال/اصلاح یا برگشت بزنید"}); else if (invoice.invoiceType == InvoiceType.BackFrmSale) { return BadRequest(new List - { "صورتحساب در وضعیت برگشت از فروش نمی تواند ویرایش شود" }); + { "صورتحساب در وضعیت برگشت از فروش امکان تغییر مشتری یا الگو را ندارد"+'\n'+ + "بهتر است صورتحساب دیگر صادر کنید" }); } else if (invoice.invoiceType != InvoiceType.Bidding && invoice.invoiceType != InvoiceType.Sale && invoice.invoiceType != InvoiceType.Repair) @@ -155,7 +157,25 @@ namespace Back.Controllers $"فقط در حالت پیش نویس ، فاکتور و اصلاح (که به سازمان ارسال نشده باشد) میتوان سند را ویرایش کرد" }); } } - + else if (invoice.InvoicIssueDate != item.InvoicIssueDate || invoice.InvoiceDate != item.InvoiceDate) + { + if(CheckTaxPayer) + return BadRequest(new List { "این صورتحساب به سازمان ارسال شده"+'\n'+ + "امکان تغییر تاریخ را ندارد"}); + else if(invoice.BillReference.HasValue) + { + if (invoice.InvoicIssueDate != item.InvoicIssueDate && Convert.ToInt32(invoice.invoice.InvoicIssueDate) > Convert.ToInt32(item.InvoicIssueDate)) + { + return BadRequest(new List { "این صورتحساب مرجع دارد"+'\n'+ + $"تاریخ صدور نمیتواند از تاریخ صدور مرجع ({invoice.invoice.InvoicIssueDate.ShamciToFormatShamci()}) کمتر باشد"}); + } + if (invoice.InvoiceDate != item.InvoiceDate && Convert.ToInt32(invoice.invoice.InvoiceDate) > Convert.ToInt32(item.InvoiceDate)) + { + return BadRequest(new List { "این صورتحساب مرجع دارد"+'\n'+ + $"تاریخ صورتحساب نمیتواند از تاریخ صورتحساب مرجع ({invoice.invoice.InvoiceDate.ShamciToFormatShamci()}) کمتر باشد"}); + } + } + } //-----change invoice diff --git a/Back/Data/Models/Invoice.cs b/Back/Data/Models/Invoice.cs index a9fab92..5cf7186 100644 --- a/Back/Data/Models/Invoice.cs +++ b/Back/Data/Models/Invoice.cs @@ -176,6 +176,7 @@ namespace Back.Data.Models public virtual ICollection invoiceDetails { get; set; } [ForeignKey("BillReference")] public virtual Invoice? invoice { get; set; } + public virtual ICollection Childinvoice { get; set; } public virtual ICollection payments { get; set; } public virtual ICollection invoiceStatusChangs { get; set; } public virtual ICollection sentTax { get; set; } diff --git a/Back/Services/ServCOD.cs b/Back/Services/ServCOD.cs index 2499ed2..b6a46c7 100644 --- a/Back/Services/ServCOD.cs +++ b/Back/Services/ServCOD.cs @@ -43,7 +43,7 @@ namespace Back.Services #endregion //----------------------- - return await invok.Select(s => new RCOD() + return await invok.OrderByDescending(o=>o.ID).Select(s => new RCOD() { ID = s.ID, TaxID = s.ItemTaxID, diff --git a/Back/Services/servInvoice.cs b/Back/Services/servInvoice.cs index 65a0a5d..b07016b 100644 --- a/Back/Services/servInvoice.cs +++ b/Back/Services/servInvoice.cs @@ -41,7 +41,9 @@ namespace Back.Services .Include(inc => inc.sentTax) //.Include(inc => inc.payments) .Include(inc => inc.pattern) - .ThenInclude(inc => inc.BillType).FirstOrDefaultAsync(); + .ThenInclude(inc => inc.BillType) + + .FirstOrDefaultAsync(); return new InvoiceDTO() { @@ -143,6 +145,7 @@ namespace Back.Services .ThenInclude(inc => inc.CODUnit) //.Include(inc => inc.payments) .Include(inc => inc.pattern) + .OrderByDescending(o=>o.ID) .Select(s => new InvoiceGridDTO() { @@ -229,6 +232,7 @@ namespace Back.Services .Include(inc => inc.Customer) .Include(inc => inc.sentTax) .Include(inc => inc.pattern) + .Include(inc => inc.invoice) .FirstOrDefaultAsync(); } public async Task DeleteInvoice(Invoice item) diff --git a/Back/Services/servUser.cs b/Back/Services/servUser.cs index 1afb24f..ebbd0d9 100644 --- a/Back/Services/servUser.cs +++ b/Back/Services/servUser.cs @@ -304,7 +304,7 @@ namespace Back.Services dt.Add(DateTime.Now.AddDays(i).ConvertMiladiToShamsi()); request.MostInvoicedProduct = await _invoiceitemRepo.Get(w => w.invoice.CompanyID == user.RolUsers.First().CompanyID && !w.invoice.IsDeleted - && ((w.invoice.invoiceType == InvoiceType.Sale || w.invoice.invoiceType == InvoiceType.Repair) && !w.invoice.BillReference.HasValue || (w.invoice.invoiceType == InvoiceType.BackFrmSale)) + && (w.invoice.invoiceType == InvoiceType.BackFrmSale || w.invoice.invoiceType == InvoiceType.Repair || (w.invoice.invoiceType == InvoiceType.Sale && !w.invoice.Childinvoice.Any(a => !a.IsDeleted))) && (dt.Contains(w.invoice.InvoiceDate))) .Include(inc => inc.cODItem) .GroupBy(g => g.CODID) @@ -317,7 +317,7 @@ namespace Back.Services .ToListAsync(); request.MostInvoicedCustomer = await _RepoInvoice.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted - && ((w.invoiceType == InvoiceType.Sale || w.invoiceType == InvoiceType.Repair) && !w.BillReference.HasValue || (w.invoiceType == InvoiceType.BackFrmSale)) + && (w.invoiceType == InvoiceType.BackFrmSale || w.invoiceType == InvoiceType.Repair || (w.invoiceType == InvoiceType.Sale && !w.Childinvoice.Any(a => !a.IsDeleted) )) && dt.Contains(w.InvoiceDate)) .Include(inc => inc.Customer) .GroupBy(g => g.CustomerID) @@ -333,7 +333,7 @@ namespace Back.Services var sale = await _RepoInvoice.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted - && ((w.invoiceType == InvoiceType.Sale || w.invoiceType == InvoiceType.Repair) && !w.BillReference.HasValue || (w.invoiceType == InvoiceType.BackFrmSale)) + && (w.invoiceType == InvoiceType.BackFrmSale || w.invoiceType == InvoiceType.Repair || (w.invoiceType == InvoiceType.Sale && !w.Childinvoice.Any(a => !a.IsDeleted))) && w.InvoiceDate.StartsWith(cdate)) .Include(inc => inc.invoiceDetails) .ThenInclude(inc => inc.cODItem) @@ -346,7 +346,7 @@ namespace Back.Services cdate = DateTime.Now.AddMonths(-1).ConvertMiladiToShamsiAndGetYearMonth(); var lastonthsale = await _RepoInvoice.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted - && ((w.invoiceType == InvoiceType.Sale || w.invoiceType == InvoiceType.Repair) && !w.BillReference.HasValue || (w.invoiceType == InvoiceType.BackFrmSale)) + && (w.invoiceType == InvoiceType.BackFrmSale || w.invoiceType == InvoiceType.Repair || (w.invoiceType == InvoiceType.Sale && !w.Childinvoice.Any(a => !a.IsDeleted))) && w.InvoiceDate.StartsWith(cdate)) .Include(inc => inc.invoiceDetails) .ThenInclude(inc => inc.cODItem) @@ -376,7 +376,7 @@ namespace Back.Services for (int i = 1; i <= Convert.ToInt32(dateTime.Substring(6, 2)); i++) { var sumsale = await _RepoInvoice.Get(w => w.CompanyID == user.RolUsers.First().CompanyID && !w.IsDeleted - && ((w.invoiceType == InvoiceType.Sale || w.invoiceType == InvoiceType.Repair) && !w.BillReference.HasValue || (w.invoiceType == InvoiceType.BackFrmSale)) + && (w.invoiceType == InvoiceType.BackFrmSale || w.invoiceType == InvoiceType.Repair || (w.invoiceType == InvoiceType.Sale && !w.Childinvoice.Any(a => !a.IsDeleted))) && w.InvoiceDate == dateTime.Substring(0, 4) + dateTime.Substring(4, 2) + i.ToString("00")) .Include(inc => inc.invoiceDetails) .ThenInclude(inc => inc.cODItem) diff --git a/Back/Validations/AddOrUpdateInvoiceValidation.cs b/Back/Validations/AddOrUpdateInvoiceValidation.cs index 0dec3a6..7fa68b6 100644 --- a/Back/Validations/AddOrUpdateInvoiceValidation.cs +++ b/Back/Validations/AddOrUpdateInvoiceValidation.cs @@ -5,6 +5,7 @@ using Back.Services; using FluentValidation; using Microsoft.EntityFrameworkCore; using Shared.DTOs; +using TaxCollectData.Library.Dto.Content; namespace Back.Validations { @@ -71,6 +72,9 @@ namespace Back.Validations if (string.IsNullOrEmpty(InvoiceDate)) context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند خالی باشد"); + else if(InvoiceDate.Length!=8) + context.AddFailure("تاریخ ایجاد صورتحساب صحیح نمی باشد"); + else if (InvoiceDate.Trim().ToMiladi() > DateTime.Now) context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند از امروز جلوتر باشد"); }); @@ -80,6 +84,8 @@ namespace Back.Validations { if (string.IsNullOrEmpty(InvoicIssueDate)) context.AddFailure("تاریخ صدور صورتحساب نمی تواند خالی باشد"); + else if (InvoicIssueDate.Length != 8) + context.AddFailure("تاریخ صدور صورتحساب صحیح نمی باشد"); else if (InvoicIssueDate.Trim().ToMiladi() > DateTime.Now) context.AddFailure("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد");