From 6b31b9f9b8ef96da12591b1d5c88a854fc3d3bbd Mon Sep 17 00:00:00 2001 From: mmrbnjd Date: Mon, 13 May 2024 16:50:26 +0330 Subject: [PATCH] invoice --- Back/Back.csproj | 2 +- Back/Controllers/InvoiceController.cs | 271 +++++++++++++++++++++++++- Back/Services/servInvoice.cs | 116 ++++++++++- Back/Services/servTaxPayer.cs | 5 + TaxPayerFull/Program.cs | 4 +- 5 files changed, 386 insertions(+), 12 deletions(-) diff --git a/Back/Back.csproj b/Back/Back.csproj index 69ae328..18bc412 100644 --- a/Back/Back.csproj +++ b/Back/Back.csproj @@ -34,7 +34,7 @@ - ..\..\Dlls\Service.dll + ..\..\..\LocalGit\TaxPayerTools\Service\bin\Debug\Service.dll diff --git a/Back/Controllers/InvoiceController.cs b/Back/Controllers/InvoiceController.cs index ffe3242..06e4630 100644 --- a/Back/Controllers/InvoiceController.cs +++ b/Back/Controllers/InvoiceController.cs @@ -16,11 +16,13 @@ namespace Back.Controllers private readonly servInvoice _servInvoice; private readonly servUser _servUser; private readonly AddOrUpdateInvoiceValidation _validationInvoice; - public InvoiceController(servInvoice servInvoice, servUser servUser, AddOrUpdateInvoiceValidation validationInvoice) + private readonly servTaxPayer _servTaxPayer; + public InvoiceController(servInvoice servInvoice, servUser servUser, AddOrUpdateInvoiceValidation validationInvoice, servTaxPayer servTaxPayer) { _servInvoice = servInvoice; _servUser = servUser; _validationInvoice = validationInvoice; + _servTaxPayer = servTaxPayer; } [HttpPost("GetAll")] @@ -33,8 +35,8 @@ namespace Back.Controllers return Ok(await _servInvoice.GetInvoices(user.RolUsers.First().CompanyID, itemSerch)); } - [HttpPost("AddORUpdateInvoice/{CompanyID}")]//ok - public async Task> AddORUpdateInvoice(int CompanyID, [FromBody] NUInvoiceDTO item) + [HttpPost("Add")] + public async Task> Add([FromBody] NUInvoiceDTO item) { if (!ModelState.IsValid) return BadRequest(item); @@ -66,7 +68,7 @@ namespace Back.Controllers Des = item.Des, invoiceType = InvoiceType.Bidding, CustomerID = item.CustomerID, - CompanyID = CompanyID, + CompanyID = user.RolUsers.First().CompanyID, InvoicIssueDate = item.InvoicIssueDate.Replace("/", ""), InvoiceDate = item.InvoicIssueDate.Replace("/", ""), LastChangeUserID = Convert.ToInt32(UserID), @@ -77,6 +79,267 @@ namespace Back.Controllers + } + [HttpPut("Update")] + public async Task> Update([FromBody] NUInvoiceDTO item) + { + if (!ModelState.IsValid) + return BadRequest(item); + + //-----GetUserAndCompany + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + + //-----Validaton + var resultValidationmodel = await _validationInvoice.ValidateAsync(Tuple.Create(user.RolUsers.First().CompanyID, item, eActionValidation.update)); + if (!resultValidationmodel.IsValid) + return BadRequest(resultValidationmodel.Errors.Select(s => s.ErrorMessage).ToList()); + + //-----Get invoice + 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.CustomerID != item.CustomerID + || invoice.InvoicIssueDate != item.InvoicIssueDate || invoice.InvoiceDate != item.InvoiceDate) + { + //----Check TaxPayer + if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(invoice)) + return BadRequest(new List { "این صورتحساب به سازمان ارسال شده"+'\n'+ + "برای ویرایش ،صورتحساب را ابطال/اصلاح یا برگشت بزنید"}); + } + + + + //-----change invoice + invoice.Title = item.Title; + invoice.PatternID = item.PatternID; + invoice.CustomerID = item.CustomerID; + invoice.InvoicIssueDate = item.InvoicIssueDate; + invoice.InvoiceDate = item.InvoiceDate; + invoice.Des = item.Des; + invoice.LastChangeUserID = Convert.ToInt32(UserID); + + return Ok(await _servInvoice.UpdateInvoice(invoice)); + } + [HttpDelete("Delete/{ID}")] + public async Task> Delete(int ID) + { + //-----GetUserAndCompany + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + + //-----Get invoice + Invoice invoice = await _servInvoice.GetInvoiceByInvoiceID(user.RolUsers.First().CompanyID,ID); + if (invoice == null) + return NotFound(); + + invoice.LastChangeUserID = Convert.ToInt32(UserID); + //----Update and sendResult + return Ok(await _servInvoice.DeleteInvoice(invoice)); + } + [HttpPost("ChangeInvoiceType/{InvoiceID}")]// ok + public async Task> ChangeInvoiceType(int InvoiceID, InvoiceType invoiceType) + { + //-----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(); + + if (Invoice.invoiceType == InvoiceType.CANCEL) return BadRequest(new List { "این صورتحساب لغو شده" }); + var sent = await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(Invoice); + Invoice.LastChangeUserID = Convert.ToInt32(UserID); + if (Invoice.invoiceType == InvoiceType.Bidding) + { + switch (invoiceType) + { + case InvoiceType.Sale: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + case InvoiceType.CANCEL: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست" }); + } + } + if (Invoice.invoiceType == InvoiceType.Sale) + { + if (sent) + { + switch (invoiceType) + { + case InvoiceType.Cancellation: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + case InvoiceType.Repair: + await _servInvoice.ChangeInvoiceType(Invoice, invoiceType, false); + return Ok(await _servInvoice.AddInvoice(new Invoice() + { + + Title = Invoice.Title, + Des = Invoice.Des, + invoiceType = invoiceType, + 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 + }, false)); + + case InvoiceType.BackFrmSale: + await _servInvoice.ChangeInvoiceType(Invoice, invoiceType, false); + return Ok(await _servInvoice.AddInvoice(new Invoice() + { + + Title = Invoice.Title, + Des = Invoice.Des, + invoiceType = invoiceType, + 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 + }, false)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" }); + } + } + else + { + switch (invoiceType) + { + case InvoiceType.CANCEL: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست" }); + } + + } + } + if (Invoice.invoiceType == InvoiceType.Cancellation) + { + if (!sent) + { + switch (invoiceType) + { + case InvoiceType.Sale: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + case InvoiceType.CANCEL: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست" }); + } + } + else return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" }); + } + if (Invoice.invoiceType == InvoiceType.Repair) + { + if (!sent) + { + switch (invoiceType) + { + case InvoiceType.CANCEL: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست" }); + } + } + else + { + switch (invoiceType) + { + case InvoiceType.Cancellation: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + case InvoiceType.BackFrmSale: + await _servInvoice.ChangeInvoiceType(Invoice, invoiceType, false); + return Ok(await _servInvoice.AddInvoice(new Invoice() + { + + Title = Invoice.Title, + Des = Invoice.Des, + invoiceType = invoiceType, + 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 + }, false)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" }); + + } + } + } + if (Invoice.invoiceType == InvoiceType.BackFrmSale) + { + if (!sent) + { + switch (invoiceType) + { + case InvoiceType.CANCEL: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست" }); + } + } + else + { + switch (invoiceType) + { + case InvoiceType.Cancellation: + return Ok(await _servInvoice.ChangeInvoiceType(Invoice, invoiceType)); + + case InvoiceType.Repair: + await _servInvoice.ChangeInvoiceType(Invoice, invoiceType, false); + return Ok(await _servInvoice.AddInvoice(new Invoice() + { + + Title = Invoice.Title, + Des = Invoice.Des, + invoiceType = invoiceType, + 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 + }, false)); + + default: + return BadRequest(new List { $"تغییر وضعیت از {Invoice.invoiceType.GetEnumDisplayName()} به {invoiceType.GetEnumDisplayName()} امکان پذیر نیست این صورتحساب به سامانه مودیان ارسال شده" }); + + } + } + } + + + return NoContent(); + } } } diff --git a/Back/Services/servInvoice.cs b/Back/Services/servInvoice.cs index 435078e..e725908 100644 --- a/Back/Services/servInvoice.cs +++ b/Back/Services/servInvoice.cs @@ -12,11 +12,15 @@ namespace Back.Services private readonly IAsyncRepository _invoiceRepo; private readonly IAsyncRepository _invoiceItemRepo; private readonly IAsyncRepository _invoicePaymentRepo; + private readonly IAsyncRepository _invoiceStatusChangPaymentRepo; private readonly CheckPermission _checkPermission; public servInvoice(IAsyncRepository invoiceRepo , IAsyncRepository invoiceItemRepo - , IAsyncRepository invoicePaymentRepo, CheckPermission checkPermission) + , IAsyncRepository invoicePaymentRepo + , CheckPermission checkPermission + , IAsyncRepository invoiceStatusChangPaymentRepo) { + _invoiceStatusChangPaymentRepo= invoiceStatusChangPaymentRepo; _invoiceItemRepo = invoiceItemRepo; _invoiceRepo = invoiceRepo; _invoicePaymentRepo = invoicePaymentRepo; @@ -101,15 +105,117 @@ namespace Back.Services return await _invoiceRepo.Get(w => w.ID == InvoiceID && w.CompanyID == CompanyID && !w.IsDeleted).AnyAsync(); } - public async Task AddInvoice(Invoice invoice) + public async Task AddInvoice(Invoice invoice, bool calculate = true) { invoice.Cdate = DateTime.Now.ConvertMiladiToShamsi(); + invoice.Udate = DateTime.Now.ConvertMiladiToShamsi(); + invoice.PreparedtoSendtoTax = false; + if (calculate) + { + if (await _checkPermission.ExtensionofAccess(invoice.CompanyID.Value, 3, "-1")) + return await _invoiceRepo.AddBoolResultAsync(invoice); + return false; + } + else + { + return await _invoiceRepo.AddBoolResultAsync(invoice); + } + + } + public async Task UpdateInvoice(Invoice invoice) + { invoice.Udate = DateTime.Now.ConvertMiladiToShamsi(); invoice.PreparedtoSendtoTax = false; - if(await _checkPermission.ExtensionofAccess(invoice.CompanyID.Value, 3, "-1")) - return await _invoiceRepo.AddBoolResultAsync(invoice); - return false; + + return await _invoiceRepo.UpdateAsync(invoice); + } + public async Task GetInvoiceByInvoiceID(int CompanyID, int InvoiceID) + { + return await _invoiceRepo + .Get(w => w.ID == InvoiceID && w.CompanyID == CompanyID && !w.IsDeleted) + .FirstOrDefaultAsync(); + } + public async Task DeleteInvoice(Invoice item) + { + + try + { + item.Udate = DateTime.Now.ConvertMiladiToShamsi(); + item.IsDeleted = true; + return await _invoiceRepo.UpdateAsync(item); + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/DeleteCustomer", + // Value = JsonConvert.SerializeObject(item.ID), + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "User" + //}; + //_contextMongodb.InsertItem(log); + } + catch (Exception ex) + { + //SysLog log = new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/DeleteCustomer", + // Value = ex.Message, + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "catch" + //}; + //_contextMongodb.InsertItem(log); + return false; + + } + } + public async Task ChangeInvoiceType(Invoice invoiceitem, InvoiceType item, bool action = true) + { + string old = invoiceitem.invoiceType.GetEnumDisplayName(); + invoiceitem.invoiceType = item; + invoiceitem.Udate = DateTime.Now.ConvertMiladiToShamsi(); + invoiceitem.PreparedtoSendtoTax = false; + try + { + await _invoiceStatusChangPaymentRepo.AddBoolResultAsync(new InvoiceStatusChang() + { + InvoiceID = invoiceitem.ID, + ToStatus = item.GetEnumDisplayName(), + FromStatus = old, + Date = DateTime.Now.ConvertMiladiToShamsi(), + UserID = invoiceitem.LastChangeUserID + }); + if(action) + return await _invoiceRepo.UpdateAsync(invoiceitem); + else return true; + //_contextMongodb.InsertItem(new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/ChangeInvoiceType", + // Value = $"From {old} to {item.ToString()}", + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "User" + //}); + } + catch (Exception ex) + { + //_contextMongodb.InsertItem(new SysLog() + //{ + // TraceIdentifierID = _httpContextAccessor.HttpContext.TraceIdentifier, + // Datetime = DateTime.Now.ConvertMiladiToShamsi(), + // Method = $"{_httpContextAccessor.HttpContext.Request.Method}/{this.GetType().FullName}/ChangeInvoiceType", + // Value = $"From {old} to {item.ToString()}" + '\n' + ex.Message, + // Route = _httpContextAccessor.HttpContext.Request.Path, + // Type = "catch" + //}); + return false; + } + + + } } } diff --git a/Back/Services/servTaxPayer.cs b/Back/Services/servTaxPayer.cs index 39ebcf8..78599b1 100644 --- a/Back/Services/servTaxPayer.cs +++ b/Back/Services/servTaxPayer.cs @@ -16,6 +16,11 @@ namespace Back.Services { return await _repoSentTax.Get(w => w.invoice.CompanyID == CompanyID && (w.SentStatus == SentStatus.Successful || w.SentStatus == SentStatus.Send || w.SentStatus == SentStatus.pending)).AnyAsync(); } + public async Task ExistSuccessfulorSendorpendingInvoice(Invoice invoice) + { + return _repoSentTax.Get(w => w.InvoiceType == invoice.invoiceType && w.InvoiceID == invoice.ID && + (w.SentStatus == SentStatus.Successful || w.SentStatus == SentStatus.Send || w.SentStatus == SentStatus.pending)).Any(); + } public async Task CheckingTheCompanyKeyInformation(int CompanyID, string UniqeMemory, string PrivateKey, string EconomicCode) { return await _repoSentTax.Get(w => (w.invoice.company.UniqeMemory == UniqeMemory || w.invoice.company.PrivateKey == PrivateKey || w.invoice.company.EconomicCode == EconomicCode) diff --git a/TaxPayerFull/Program.cs b/TaxPayerFull/Program.cs index 02ee651..f226d1a 100644 --- a/TaxPayerFull/Program.cs +++ b/TaxPayerFull/Program.cs @@ -33,9 +33,9 @@ builder.Services.AddScoped(sp => new UserAuthenticationDTO() }) ; -builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://localhost:7075/api/") }); +//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("https://localhost:7075/api/") }); -//builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://localhost:5271/api/") }); +builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://localhost:5271/api/") }); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fa-Ir");