diff --git a/Back/Back.csproj b/Back/Back.csproj index 899d7e4..fd97cd7 100644 --- a/Back/Back.csproj +++ b/Back/Back.csproj @@ -36,7 +36,7 @@ - ..\..\..\LocalGit\TaxPayerTools\Service\bin\Debug\Service.dll + ..\..\Dlls\Service.dll diff --git a/Back/Common/ExtentionMethods.cs b/Back/Common/ExtentionMethods.cs index 542165c..849ee31 100644 --- a/Back/Common/ExtentionMethods.cs +++ b/Back/Common/ExtentionMethods.cs @@ -12,6 +12,11 @@ namespace Back.Common { public static class ExtentionMethods { + public static List Clone(this IList listToClone) where T : ICloneable + { + return listToClone.Select(item => (T)item.Clone()).ToList(); + } + public static string GetEnumDisplayName(this Enum enumType) { return enumType.GetType().GetMember(enumType.ToString()) diff --git a/Back/Controllers/TaxPayerController.cs b/Back/Controllers/TaxPayerController.cs index 665cbbe..5d0b40f 100644 --- a/Back/Controllers/TaxPayerController.cs +++ b/Back/Controllers/TaxPayerController.cs @@ -72,6 +72,38 @@ namespace Back.Controllers } [HttpPost("PreparationInvoiceBeforeSending")] public async Task> PreparationInvoiceBeforeSending([FromBody] Atemplatefield item) + { + var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); + var UserID = claim.Value; + var user = await _servUser.GetUserByUserID(Convert.ToInt32(UserID)); + var result = await _servTaxPayer.GetInvoice(user.RolUsers.First().CompanyID, item.header.ID); + if (result == null) + return BadRequest(new List { "صورتحساب یافت نشد" }); + + else + { + if (result.invoiceType == InvoiceType.Bidding) + return BadRequest(new List { "صورتحساب در وضعیت پیش نویس نمیتواند آماده ارسال شود" }); + + if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(result)) + return BadRequest(new List { "این صورتحساب قبلا به سازمان ارسال شده" }); + + if ((result.invoiceType == InvoiceType.BackFrmSale || result.invoiceType == InvoiceType.Repair) + && !result.BillReference.HasValue) + return BadRequest(new List { "در وضعیت برگشت از فروش و اصلاحی باید صورتحساب مرجع وجود داشته باشد" }); + + + if ((result.invoiceType == InvoiceType.BackFrmSale || result.invoiceType == InvoiceType.Repair) + && !await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(result.invoice)) + return BadRequest(new List { "در وضعیت برگشت از فروش و اصلاحی باید صورتحساب مرجع به سامانه مودیان ارسال شده باشد" }); + + } + + + return Ok(await _servTaxPayer.PreparationInvoiceBeforeSending(item, result)); + } + [HttpPost("UpdateInvoice")] + public async Task> UpdateInvoice([FromBody] Atemplatefield item) { var claim = HttpContext.User.Claims.First(c => c.Type == "UserID"); var UserID = claim.Value; @@ -85,8 +117,9 @@ namespace Back.Controllers // if (result.invoiceType == InvoiceType.Bidding) // return BadRequest(new List { "صورتحساب در وضعیت پیش نویس نمیتواند آماده ارسال شود" }); - // if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(result)) - // return BadRequest(new List { "این صورتحساب قبلا به سازمان ارسال شده" }); + if (await _servTaxPayer.ExistSuccessfulorSendorpendingInvoice(result)) + return BadRequest(new List { "این صورتحساب به سازمان ارسال شده"+'\n'+ + "برای تغییر ،صورتحساب را ابطال/اصلاح یا برگشت بزنید" }); // if ((result.invoiceType == InvoiceType.BackFrmSale || result.invoiceType == InvoiceType.Repair) // && !result.BillReference.HasValue) diff --git a/Back/Services/servInvoice.cs b/Back/Services/servInvoice.cs index 56bbc87..d9e5d08 100644 --- a/Back/Services/servInvoice.cs +++ b/Back/Services/servInvoice.cs @@ -223,7 +223,12 @@ namespace Back.Services { return await _invoiceRepo .Get(w => w.ID == InvoiceID && w.CompanyID == CompanyID && !w.IsDeleted) - .Include(inc => inc.invoiceDetails) + .Include(inc => inc.invoiceDetails) + .ThenInclude(inc => inc.cODItem) + .ThenInclude(inc => inc.CODUnit) + .Include(inc => inc.Customer) + .Include(inc => inc.sentTax) + .Include(inc => inc.pattern) .FirstOrDefaultAsync(); } public async Task DeleteInvoice(Invoice item) diff --git a/Back/Services/servTaxPayer.cs b/Back/Services/servTaxPayer.cs index acf036e..de11207 100644 --- a/Back/Services/servTaxPayer.cs +++ b/Back/Services/servTaxPayer.cs @@ -130,14 +130,15 @@ namespace Back.Services }).ToListAsync(); foreach (var invoicedetail in InvoiceItem.invoiceDetails) { - foreach (_TaxPayer.Fild item in body) + var Bmodel = body.Clone(); + foreach (_TaxPayer.Fild item in Bmodel) { var resval = invoicedetail.GetType().GetProperties().Where(w => w.Name == item.eName).Select(s => s.GetValue(invoicedetail)).FirstOrDefault(); item.Value = resval == null ? "" : resval.ToString().Split('.').Length == 2 ? ((decimal)resval).ToString("N0") : resval.ToString(); item.DefVals = item.InputBox == "fromdb" ? _codingRepo.Get(w => w.FildID == item.FildID).Select(ss => new _TaxPayer.Coding() { ID = ss.Code, Name = ss.Title }).ToList() : new List<_TaxPayer.Coding>(); item.Des = item.ModeID == 3 ? _specialConditionRepo.Get(w => w.FildID == item.FildID).Select(ss => ss.condition).ToArray() : null; } - ret.Bodys.Add(new _TaxPayer.Filds() { ID = invoicedetail.ID, filds = body }); + ret.Bodys.Add(new _TaxPayer.Filds() { ID = invoicedetail.ID, filds = Bmodel }); } //-----------------payment var pay = await invok.Where(w => w.Fild.Title == "P").Select(s => new _TaxPayer.Fild() diff --git a/Shared/DTOs/_TaxPayer.cs b/Shared/DTOs/_TaxPayer.cs index ad481b9..6bf1fcf 100644 --- a/Shared/DTOs/_TaxPayer.cs +++ b/Shared/DTOs/_TaxPayer.cs @@ -20,7 +20,7 @@ namespace Shared.DTOs public int ID { get; set; } public List filds { get; set; } } - public class Fild + public class Fild:ICloneable { public int FildID { get; set; } public string fName { get; set; } @@ -32,6 +32,11 @@ namespace Shared.DTOs public List DefVals { get; set; } public string? Value { get; set; } public string[]? Des { get; set; } + + public object Clone() + { + return this.MemberwiseClone(); + } } public class Coding { diff --git a/TaxPayerFull/Pages/UserPanel/TaxPayerInvoiceItem.razor b/TaxPayerFull/Pages/UserPanel/TaxPayerInvoiceItem.razor index 7bdb87e..aa2ffd2 100644 --- a/TaxPayerFull/Pages/UserPanel/TaxPayerInvoiceItem.razor +++ b/TaxPayerFull/Pages/UserPanel/TaxPayerInvoiceItem.razor @@ -312,8 +312,11 @@ else } else { - - var rsp = await hc.Post<_TaxPayer.Atemplatefield>($"TaxPayer/PreparationInvoiceBeforeSending", invoice); + string route = "PreparationInvoiceBeforeSending"; + if (FullInvoice) + route = "UpdateInvoice"; + + var rsp = await hc.Post<_TaxPayer.Atemplatefield>($"TaxPayer/{route}", invoice); if (rsp.IsSuccessStatusCode) { var response = await rsp.Content.ReadFromJsonAsync(); @@ -322,7 +325,7 @@ else if (FullInvoice) ShowMessage(ToastType.Success, "تغییرات با موفقیت انجام شد"); - if (!FullInvoice) + else { ShowMessage(ToastType.Light, "در حال ارسال صورتحساب"); rsp = await hc.Get($"TaxPayer/SendInvoice/{InvoiceID}"); @@ -349,9 +352,6 @@ else } else { - if (FullInvoice) - ShowMessage(ToastType.Danger, "خطای در ذخیره سازی اطلاعات رخ داده"); - else ShowMessage(ToastType.Danger, "خطای در آماده سازی اطلاعات رخ داده"); } } diff --git a/TaxPayerFull/Program.cs b/TaxPayerFull/Program.cs index 670070e..ea0270a 100644 --- a/TaxPayerFull/Program.cs +++ b/TaxPayerFull/Program.cs @@ -37,10 +37,10 @@ builder.Services.AddScoped(sp => new UserAuthenticationDTO() //builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri("http://195.88.208.142:7075/api/") }); //Home -//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/") }); //farzan -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");