From 1dcadf1a351efbd5a500cd1189963d5a548a93cc Mon Sep 17 00:00:00 2001 From: mmrbnjd Date: Tue, 23 Jul 2024 22:30:52 +0330 Subject: [PATCH] copy invoice --- Back/Common/eActionValidation.cs | 3 +- Back/Controllers/InvoiceController.cs | 56 ++++++++++++++- Back/Validations/AUInvoiceItemValidation.cs | 3 +- .../AddOrUpdateInvoiceValidation.cs | 68 ++++++++++--------- .../Pages/UserPanel/InvoiceItem.razor | 33 ++++++++- TaxPayerFull/wwwroot/css/app.css | 4 ++ 6 files changed, 129 insertions(+), 38 deletions(-) diff --git a/Back/Common/eActionValidation.cs b/Back/Common/eActionValidation.cs index 6084955..4e4f790 100644 --- a/Back/Common/eActionValidation.cs +++ b/Back/Common/eActionValidation.cs @@ -4,6 +4,7 @@ { add, update, - delete + delete, + copy } } diff --git a/Back/Controllers/InvoiceController.cs b/Back/Controllers/InvoiceController.cs index 8fa99af..a636b24 100644 --- a/Back/Controllers/InvoiceController.cs +++ b/Back/Controllers/InvoiceController.cs @@ -131,7 +131,11 @@ namespace Back.Controllers Invoice invoice = await _servInvoice.GetInvoiceByInvoiceID(user.RolUsers.First().CompanyID, item.ID.Value); if (invoice == null) return BadRequest(new List { "invoice notFound..." }); - + if (invoice.PatternID != item.PatternID && invoice.invoice!=null) + { + return BadRequest(new List { "این صورتحساب دارای مرجع می باشد"+'\n'+ + "امکان تغییر الگو امکان پذیر نیست"}); + } if (invoice.PatternID != item.PatternID || invoice.CustomerID != item.CustomerID || invoice.InvoicIssueDate != item.InvoicIssueDate || invoice.InvoiceDate != item.InvoiceDate) { @@ -352,6 +356,56 @@ namespace Back.Controllers } + return NoContent(); + + } + [HttpPost("CopyInvoice/{InvoiceID}")]// ok + public async Task> CopyInvoice(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)); + + + + Invoice? Invoice = await _servInvoice.GetInvoiceByInvoiceID(user.RolUsers.First().CompanyID, InvoiceID); + if (Invoice == null) return NotFound(); + + //-----Validaton + var resultValidationmodel = await _validationInvoice.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, new NUInvoiceDTO(), eActionValidation.copy)); + if (!resultValidationmodel.IsValid) + return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); + + + var result = await _servInvoice.AddInvoice(new Invoice() + { + + Title = Invoice.Title, + Des = Invoice.Des, + invoiceType = InvoiceType.Bidding, + CustomerID = Invoice.CustomerID, + CompanyID = Invoice.CompanyID, + InvoicIssueDate = Invoice.InvoicIssueDate.Replace("/", ""), + InvoiceDate = Invoice.InvoicIssueDate.Replace("/", ""), + LastChangeUserID = Convert.ToInt32(UserID), + BillReference = Invoice.ID, + IsDeleted = false, + PatternID = Invoice.PatternID, + setm = Invoice.setm, + invoiceDetails = Invoice.invoiceDetails.Select(s => new InvoiceItem + { + CODID = s.CODID, + am = s.am, + fee = s.fee, + dis = s.dis, + + }).ToList() + }, true); + if (result > 0) + return Ok(await _servInvoice.GetInvoice(user.RolUsers.First().CompanyID, result)); + + return NoContent(); } diff --git a/Back/Validations/AUInvoiceItemValidation.cs b/Back/Validations/AUInvoiceItemValidation.cs index 5cbc1d5..896443d 100644 --- a/Back/Validations/AUInvoiceItemValidation.cs +++ b/Back/Validations/AUInvoiceItemValidation.cs @@ -43,7 +43,8 @@ namespace Back.Validations }); RuleFor(r => r.Item3.am) .NotEmpty().WithMessage("تعداد مشخص نشده") - .NotNull().WithMessage("تعداد مشخص نشده"); + .NotNull().WithMessage("تعداد مشخص نشده") + .LessThanOrEqualTo(0).WithMessage("تعداد نمی تواند صفر یا کمتر باشد"); RuleFor(r => r.Item3.fee) .NotEmpty().WithMessage("مبلغ واحد مشخص نشده") diff --git a/Back/Validations/AddOrUpdateInvoiceValidation.cs b/Back/Validations/AddOrUpdateInvoiceValidation.cs index 120d074..0dec3a6 100644 --- a/Back/Validations/AddOrUpdateInvoiceValidation.cs +++ b/Back/Validations/AddOrUpdateInvoiceValidation.cs @@ -30,7 +30,7 @@ namespace Back.Validations }); }); - When(m => m.Item3 == eActionValidation.add, () => + When(m => m.Item3 == eActionValidation.add || m.Item3 == eActionValidation.copy, () => { RuleFor(r => r.Item1) .Custom((CompanyID, context) => @@ -41,48 +41,50 @@ namespace Back.Validations }); }); - - RuleFor(r => r.Item2.Title) + When(m => m.Item3 == eActionValidation.add || m.Item3 == eActionValidation.update, () => + { + RuleFor(r => r.Item2.Title) .NotNull().WithMessage("عنوان نمی تواند خالی باشد") .NotEmpty().WithMessage("عنوان نمی تواند خالی باشد") .MinimumLength(3).WithMessage("عنوان حداقل باید 3 کاراکتر باشد"); - RuleFor(r => r.Item2.PatternID) - .Custom((PatternID, context) => - { - if (PatternID!=null && PatternID > 0 && !patternRepo.Get(w => w.Status && w.ID == PatternID).AnyAsync().Result) - context.AddFailure("الگوی صورتحساب معتبر نیست"); - }); - - RuleFor(r => r) - .Custom((model, context) => - { - if (model.Item2.CustomerID == null || model.Item2.CustomerID <=0) - context.AddFailure("برای صدور صورتحساب باید مشتری تعریف شود"); - - else if (!servCustomer.ExistCustomerByCustomerID(model.Item2.CustomerID, model.Item1).Result) - context.AddFailure("مشتری یافت نشد"); - }); - - RuleFor(r => r.Item2.InvoiceDate) - .Custom((InvoiceDate, context) => + RuleFor(r => r.Item2.PatternID) + .Custom((PatternID, context) => { - if (string.IsNullOrEmpty(InvoiceDate)) - context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند خالی باشد"); - - else if (InvoiceDate.Trim().ToMiladi() > DateTime.Now) - context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند از امروز جلوتر باشد"); + if (PatternID != null && PatternID > 0 && !patternRepo.Get(w => w.Status && w.ID == PatternID).AnyAsync().Result) + context.AddFailure("الگوی صورتحساب معتبر نیست"); }); - RuleFor(r => r.Item2.InvoicIssueDate) - .Custom((InvoicIssueDate, context) => + RuleFor(r => r) + .Custom((model, context) => { - if (string.IsNullOrEmpty(InvoicIssueDate)) - context.AddFailure("تاریخ صدور صورتحساب نمی تواند خالی باشد"); + if (model.Item2.CustomerID == null || model.Item2.CustomerID <= 0) + context.AddFailure("برای صدور صورتحساب باید مشتری تعریف شود"); - else if (InvoicIssueDate.Trim().ToMiladi() > DateTime.Now) - context.AddFailure("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد"); + else if (!servCustomer.ExistCustomerByCustomerID(model.Item2.CustomerID, model.Item1).Result) + context.AddFailure("مشتری یافت نشد"); }); + + RuleFor(r => r.Item2.InvoiceDate) + .Custom((InvoiceDate, context) => + { + if (string.IsNullOrEmpty(InvoiceDate)) + context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند خالی باشد"); + + else if (InvoiceDate.Trim().ToMiladi() > DateTime.Now) + context.AddFailure("تاریخ ایجاد صورتحساب نمی تواند از امروز جلوتر باشد"); + }); + + RuleFor(r => r.Item2.InvoicIssueDate) + .Custom((InvoicIssueDate, context) => + { + if (string.IsNullOrEmpty(InvoicIssueDate)) + context.AddFailure("تاریخ صدور صورتحساب نمی تواند خالی باشد"); + + else if (InvoicIssueDate.Trim().ToMiladi() > DateTime.Now) + context.AddFailure("تاریخ صدور صورتحساب نمی تواند از امروز جلوتر باشد"); + }); + }); } } } diff --git a/TaxPayerFull/Pages/UserPanel/InvoiceItem.razor b/TaxPayerFull/Pages/UserPanel/InvoiceItem.razor index 1de3614..1ea4cc6 100644 --- a/TaxPayerFull/Pages/UserPanel/InvoiceItem.razor +++ b/TaxPayerFull/Pages/UserPanel/InvoiceItem.razor @@ -56,7 +56,7 @@ @if (InvoiceID == 0 || InvoiceID == null ? false : true && !invoice.IsDeleted) {
- +
@switch (invoice.invoiceType) { @@ -88,10 +88,17 @@ break; *@ } - +
+
+
+ + +
+
+
@if (invoice.InvoiceSendTaxs.Count > 0) { @@ -465,6 +472,28 @@ } + } + private async Task CopyInvoice() + { + + var rsp = await hc.Post($"Invoice/CopyInvoice/{InvoiceID}"); + if (rsp.IsSuccessStatusCode) + { + var resinvoice = await rsp.Content.ReadFromJsonAsync(); + if (resinvoice != null) + { + invoice = resinvoice; + InvoiceID = resinvoice.ID; + ShowSuccessAlert("صورتحساب جدید با موفقیت ایجاد شد"); + } + else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); + } + else + { + var request = await rsp.Content.ReadFromJsonAsync>(); + ShowDangerAlert(request[0]); + } + } private async Task ChangeStatus(int type) { diff --git a/TaxPayerFull/wwwroot/css/app.css b/TaxPayerFull/wwwroot/css/app.css index 06d333a..f233989 100644 --- a/TaxPayerFull/wwwroot/css/app.css +++ b/TaxPayerFull/wwwroot/css/app.css @@ -136,6 +136,10 @@ code { background-color: rgb(242 42 42); border: 1px solid rgb(242 42 42); } +#sbg { + background-color: rgb(122, 188, 188); + border: 1px solid rgb(122, 188, 188); +} #sred1 { background-color: #ff7373; border: 1px solid #ff7373;