@using Front.Services @using Shared.DTOs @using Shared @inject IJSRuntime JS @inject HttpClientController hc; @layout PanelLayout @inject Fixedvalues fv; @page "/InvoiceDetails/{InvoiceID:int}" @page "/InvoiceDetails" جزئیات صورتحساب @if (invoice.IsDeleted) {

این صورتحساب حذف شده و در دسترس نمی باشد



}
@if (InvoiceID.HasValue) {

سرویس ها / صورتحساب / @invoice?.Title

} else {

سرویس ها / صورتحساب / جدید

} @* alert *@
@if (InvoiceID == 0 || InvoiceID == null ? false : true && !invoice.IsDeleted) {
@if (invoice.invoiceType!=InvoiceType.Cancellation) {
@switch (invoice.invoiceType) { case (InvoiceType.Bidding): break; case (InvoiceType.Sale): @* *@ break; case (InvoiceType.BackFrmSale): @* *@ break; case (InvoiceType.Repair): @* *@ break; @* case (InvoiceType.Cancellation): break; *@ }
}
@if (invoice.invoiceType != InvoiceType.Bidding && invoice.invoiceType != InvoiceType.Cancellation) { @if (invoice.HasaRemittance) { } else { } }

@if (invoice.InvoiceSendTaxs.Count > 0) { if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType == invoice.invoiceType && a.SentStatus == SentStatus.Send)) { SendInvoice = false;
این صورتحساب با این وضعیت به سامانه مودیان ارسال شده ،برای اطلاع از وضعیت لطفا تعیین وضعیت کنید
} else if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType == invoice.invoiceType && a.SentStatus == SentStatus.Successful)) { SendInvoice = false;
این صورتحساب با این وضعیت به سامانه مودیان ارسال و تائید شده
} else if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType == invoice.invoiceType && a.SentStatus == SentStatus.Unsuccessful)) { SendInvoice = true;
این صورتحساب با این وضعیت به سامانه مودیان ارسال ولی تائید نشده
} else if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType == invoice.invoiceType && (a.SentStatus == SentStatus.pending || a.SentStatus == SentStatus.IN_PROGRESS))) { SendInvoice = false;
این صورتحساب با این وضعیت به سامانه مودیان ارسال و در حال بررسی می باشد
} else if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType == invoice.invoiceType && (a.SentStatus == SentStatus.NOT_FOUND || a.SentStatus == SentStatus.Unknown))) { SendInvoice = false;
این صورتحساب با این وضعیت به سامانه مودیان ارسال شده ولی وضعیت آن مشخص نیست
} else if (invoice.InvoiceSendTaxs.Any(a => a.InvoiceType != invoice.invoiceType)) { SendInvoice = true;
این صورتحساب با این وضعیت به سامانه مودیان ارسال نشده
} } else SendInvoice = true;
}
@if (InvoiceID == 0 || InvoiceID == null ? false : true) {

@* *@
@if (InvoiceID.HasValue && invoice.items.Count > 0) { }
@if (!invoice.IsDeleted) { }
@*
*@ @*
*@ @*
*@
}



@if (!invoice.IsDeleted) { @if (InvoiceID == 0 || InvoiceID == null) {
} else {
@if (!invoice.IsDeleted && invoice.invoiceType != InvoiceType.Bidding && SendInvoice) { }
} }

@if (!(!invoice.IsDeleted && invoice.invoiceType != InvoiceType.Bidding && SendInvoice) && !string.IsNullOrEmpty(invoice.inno)) {
}

@if (invoice.BillReference.HasValue) {
@{ string Prefence = "InvoiceDetails/" + invoice.BillReference.Value.ToString(); }
}
@code { public bool SpinnerVisible { get; set; } = false; public bool SendInvoice { get; set; } = false; List messages = new List(); private ConfirmDialog dialog = default!; private Modal modal = default!; [Inject] protected PreloadService PreloadService { get; set; } = default!; // alert AlertColor alertColor = AlertColor.Primary; IconName alertIconName = IconName.CheckCircleFill; bool Hidealert = true; string alertMessage = ""; [Parameter] public int? InvoiceID { get; set; } public List? Cus { get; set; } public List>? Patterns { get; set; } public InvoiceDTO? invoice { get; set; } public string ExUrl { get; set; } = ""; private bool warwhouse = false; protected override async Task OnInitializedAsync() { SpinnerVisible = false; fv.invoice = null; invoice = new InvoiceDTO(); await base.OnInitializedAsync(); } protected override async Task OnParametersSetAsync() { SpinnerVisible = true; Cus = await fv.GetCustomers(); Patterns = await fv.GetPatterns(); if (InvoiceID != null && InvoiceID > 0) { await LoadData(); } else { invoice = new InvoiceDTO() { invoiceType = InvoiceType.Bidding, ID = 0, InvoiceDate = DateTime.Now.ConvertMiladiToShamsiinFront().ShamciToFormatShamciinFront(), InvoicIssueDate = DateTime.Now.ConvertMiladiToShamsiinFront().ShamciToFormatShamciinFront(), Udate = DateTime.Now.ConvertMiladiToShamsiinFront().ShamciToFormatShamciinFront() }; } Hidealert = true; alertMessage = ""; SpinnerVisible = false; await base.OnParametersSetAsync(); } } @functions { private void ShowMessage(ToastType toastType, string msg) => messages.Add(CreateToastMessage(toastType, msg)); private ToastMessage CreateToastMessage(ToastType toastType, string msg) => new ToastMessage { Type = toastType, Message = msg, }; private async Task NewItemClick() { if (InvoiceID.HasValue) { modal.Size = ModalSize.Large; var parameters = new Dictionary(); parameters.Add("InvoiceID", InvoiceID); parameters.Add("itemDTO", new InvoiceItemDTO()); parameters.Add("OnMultipleOfThree", EventCallback.Factory.Create(this, CallBack)); await modal.ShowAsync(title: "آیتم جدید", parameters: parameters); } } private async Task OnClickCancelRemittance() { if (InvoiceID.HasValue) { SpinnerVisible = true; var confirmation = await dialog.ShowAsync( title: "عملیات لغو حواله", message1: $"با انجام این عملیات حواله های این صورتحساب لغو میشوند،صورتحساب از انبار آزاد میشود و موجودی به انبار برمیگردد", message2: "اطمینان دارید?"); if (!confirmation) return; var rsp = await hc.Post($"Invoice/FreeRemittance/{InvoiceID}"); if (rsp.IsSuccessStatusCode) { invoice.HasaRemittance = false; ShowSuccessAlert("حواله لغو شد"); } else { try { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } catch (Exception) { ShowDangerAlert("خطای سیستمی"); } } SpinnerVisible = false; } } private async Task OnClickRemittance() { if (InvoiceID.HasValue) { SpinnerVisible = true; var confirmation = await dialog.ShowAsync( title: "عملیات صدور حواله", message1: $"با انجام این عملیات حواله ای برای آیتم های صورتحساب صادر میشود و با ویرایش هر آیتم صورتحساب تغییرات روی حواله صادر شده هم تائیر میگذارید", message2: "اطمینان دارید?"); if (!confirmation) return; var rsp = await hc.Post($"Invoice/IssuingRemittance/{InvoiceID}"); if (rsp.IsSuccessStatusCode) { invoice.HasaRemittance = true; ShowSuccessAlert("حواله ثبت شد"); } else { try { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } catch (Exception) { ShowDangerAlert("خطای سیستمی"); } } SpinnerVisible = false; } } private async Task OnClickPayment() { if (invoice!=null) { modal.Size = ModalSize.ExtraLarge; var parameters = new Dictionary(); parameters.Add("invoice", invoice); await modal.ShowAsync("پرداختی ها", parameters: parameters); } } private async Task CopyInvoice() { SpinnerVisible = true; 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 if (rsp.StatusCode==System.Net.HttpStatusCode.NotFound) { ShowDangerAlert("صورتحساب یافت نشد"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } SpinnerVisible = false; } private async Task ChangeStatus(int type) { SpinnerVisible = true; var rsp = await hc.Post($"Invoice/ChangeInvoiceType/{InvoiceID}?invoiceType={type}"); if (rsp.IsSuccessStatusCode) { var resinvoice = await rsp.Content.ReadFromJsonAsync(); if (resinvoice != null) { invoice = resinvoice; InvoiceID = resinvoice.ID; ShowSuccessAlert("تغییر وضعیت با موفقیت انجام شد"); } else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); } else if (rsp.StatusCode == System.Net.HttpStatusCode.NotFound) { ShowDangerAlert("صورتحساب یافت نشد"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } SpinnerVisible = false; } private async Task showTaxPayer() { if (InvoiceID.HasValue) { hc._nav.NavigateTo($"TaxPayerInvoiceItem/{InvoiceID}"); } } private async Task OnClickReport() { SpinnerVisible = true; var rsp = await hc.Get($"Invoice/GetReport/{InvoiceID}"); if (rsp.IsSuccessStatusCode) { var imginvoice = await rsp.Content.ReadAsStringAsync(); if (imginvoice != null) { await DownloadFileFromStream(imginvoice, $"{invoice.Title}.png"); } else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); } else if (rsp.StatusCode == System.Net.HttpStatusCode.NotFound) { ShowDangerAlert("صورتحساب یافت نشد"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } SpinnerVisible = false; } private Stream GetFileStream(byte[] bytes) { SpinnerVisible = true; var fileStream = new MemoryStream(bytes); SpinnerVisible = false; return fileStream; } private async Task DownloadFileFromStream(string Base64, string FileName) { SpinnerVisible = true; byte[] bytes = System.Convert.FromBase64String(Base64); var fileStream = GetFileStream(bytes); // var fileName = "log.bin"; using var streamRef = new DotNetStreamReference(stream: fileStream); SpinnerVisible = false; await JS.InvokeVoidAsync("downloadFileFromStream", FileName, streamRef); } private async Task showFullInvoiceItem() { if (InvoiceID.HasValue) { hc._nav.NavigateTo($"FullInvoiceItem/{InvoiceID}"); } } private async Task LoadData() { SpinnerVisible = true; PreloadService.Show(SpinnerColor.Dark); var rsp = await hc.Get($"Invoice/Get/{InvoiceID}/{true}"); if (rsp.IsSuccessStatusCode) { invoice = await rsp.Content.ReadFromJsonAsync(); if (!Cus.Any(w => w.ID == invoice.CustomerID)) invoice.CustomerID = 0; } else if (rsp.StatusCode == System.Net.HttpStatusCode.BadRequest) { ShowDangerAlert("صورتحساب مرجع یافت نشد"); } else { ShowDangerAlert("خطایی در بارگذاری"); } PreloadService.Hide(); SpinnerVisible = false; } public async Task CallBack(ActionInResultComponent result) { string msg = ""; if (result.Action == ComponentAction.add) { if (result.Status == ComponentStatus.success) msg = "آیتم جدید با موفقیت اضافه شد"; } else if (result.Action == ComponentAction.update) { if (result.Status == ComponentStatus.success) msg = "اطلاعات آیتم با موفقیت ویرایش شد"; } else if (result.Action == ComponentAction.delete) { if (result.Status == ComponentStatus.success) msg = "آیتم با موفقیت حذف شد"; } await CallBack(msg); // if (result.Status == ComponentStatus.success) //await LoadData(); await modal.HideAsync(); } private async Task CallBack(string result) { if (!string.IsNullOrEmpty(result)) { ShowSuccessAlert(result); await LoadData(); } } private void ShowSuccessAlert(string msg) { Hidealert = false; alertColor = AlertColor.Success; alertIconName = IconName.CheckCircleFill; alertMessage = msg; } private void ShowDangerAlert(string msg) { Hidealert = false; alertColor = AlertColor.Danger; alertIconName = IconName.ExclamationTriangleFill; alertMessage = msg; } public async Task OnClickDelete() { SpinnerVisible = true; if (InvoiceID.HasValue) { var rsp = await hc.Delete($"Invoice/Delete/{InvoiceID.Value}"); if (rsp.IsSuccessStatusCode) { var request = await rsp.Content.ReadFromJsonAsync(); if (request) { //ToastService.Notify(new ToastMessage(ToastType.Success, $"عملیات حذف با موفقیت انجام شد")); hc._nav.NavigateTo("Invoice"); } else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); } else if (rsp.StatusCode == System.Net.HttpStatusCode.NotFound) { ShowDangerAlert("صورتحساب با این شناسه یافت نشد"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } } SpinnerVisible = false; } public async Task OnClickUpdate() { SpinnerVisible = true; if (InvoiceID.HasValue) { if (await Validate()) { var rsp = await hc.Put("Invoice/Update", new NUInvoiceDTO { ID = InvoiceID, CustomerID = invoice.CustomerID, Des = invoice.Des, InvoiceDate = invoice.InvoiceDate.Replace("/", ""), InvoicIssueDate = invoice.InvoicIssueDate.Replace("/", ""), PatternID = invoice.PatternID, Title = invoice.Title }); if (rsp.IsSuccessStatusCode) { var request = await rsp.Content.ReadFromJsonAsync(); if (request) { ShowSuccessAlert("ویرایش با موفقیت انجام شد"); } else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } } } // if (Cod.UnitID > 0 && Cod.TaxRate > 0 && !string.IsNullOrEmpty(Cod.Title)) // { // var rsp = await hc.Put("Cod/Update", Cod); // if (rsp.IsSuccessStatusCode) // { // var request = await rsp.Content.ReadFromJsonAsync(); // if (request) // { // result.Status = ComponentStatus.success; // result.Action = ComponentAction.update; // await OnMultipleOfThree.InvokeAsync(result); // } // else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); // } // else // { // var request = await rsp.Content.ReadFromJsonAsync>(); // ShowDangerAlert(request[0]); // } // } // else ShowDangerAlert("فیلدهای قرمز باید مقدار دهی شوند"); SpinnerVisible = false; } public async Task OnClickAdd() { SpinnerVisible = true; if (await Validate()) { var rsp = await hc.Post("Invoice/Add", new NUInvoiceDTO { CustomerID = invoice.CustomerID, Des = invoice.Des, InvoiceDate = invoice.InvoiceDate.Replace("/", ""), InvoicIssueDate = invoice.InvoicIssueDate.Replace("/", ""), PatternID = invoice.PatternID, Title = invoice.Title }); if (rsp.IsSuccessStatusCode) { var request = await rsp.Content.ReadFromJsonAsync(); if (request > 0) { InvoiceID = request; ShowSuccessAlert("صورتحساب با موفقیت ایجاد شد"); } else ShowDangerAlert("خطایی در اجرای عملیات رخ داده"); } else { var request = await rsp.Content.ReadFromJsonAsync>(); ShowDangerAlert(request[0]); } } SpinnerVisible = false; } public async Task Validate() { if (string.IsNullOrEmpty(invoice.Title)) { ShowDangerAlert("عنوان نمی تواند خالی باشد"); return false; } if (string.IsNullOrEmpty(invoice.InvoiceDate)) { ShowDangerAlert("تاریخ صورتحساب نمی تواند خالی باشد"); return false; } else { int InvoiceDate = 0; if (invoice.InvoiceDate.Replace("/", "").Length != 8 || !int.TryParse(invoice.InvoiceDate.Replace("/", ""), out InvoiceDate)) { ShowDangerAlert("تاریخ صورتحساب صحیح نمی باشد"); return false; } else if (InvoiceDate.ToString().Trim().ToMiladiinFront() > DateTime.Now) { ShowDangerAlert("تاریخ صورتحساب نمی تواند از امروز جلوتر باشد"); return false; } } if (string.IsNullOrEmpty(invoice.InvoicIssueDate)) { ShowDangerAlert("تاریخ صدور نمی تواند خالی باشد"); return false; } else { int InvoicIssueDate = 0; if (invoice.InvoicIssueDate.Replace("/", "").Length != 8 || !int.TryParse(invoice.InvoicIssueDate.Replace("/", ""), out InvoicIssueDate)) { ShowDangerAlert("تاریخ صدور صحیح نمی باشد"); return false; } else if (InvoicIssueDate.ToString().Trim().ToMiladiinFront() > DateTime.Now) { ShowDangerAlert("تاریخ صدور نمی تواند از امروز جلوتر باشد"); return false; } } if (invoice.PatternID.HasValue && invoice.PatternID > 0) if (!Patterns.Any(w => w.ID == invoice.PatternID.Value)) { ShowDangerAlert("شناسه الگو صحیح نمی باشد"); return false; } if (invoice.CustomerID == null || invoice.CustomerID <= 0 || !Cus.Any(w => w.ID == invoice.CustomerID)) { ShowDangerAlert("مشتری صحیح نمی باشد"); return false; } return true; } private async Task ShowConfirmationDeleteAsync() { if (InvoiceID.HasValue) { var confirmation = await dialog.ShowAsync( title: "عملیات حذف صورتحساب", message1: $"از حذف صورتحساب {InvoiceID}", message2: "اطمینان دارید?"); if (confirmation) { await OnClickDelete(); } else { ShowMessage(ToastType.Secondary, "عملیات حذف متوقف شد"); } } } }