@page "/salesdocuments/{Id:int}" @using Domain.Constants @using Domain.Dtos.Sales @using phronCare.UIBlazor.Services.Sales.SalesDocuments @inject NavigationManager Navigation @inject ISalesDocumentService SalesDocumentService @inject IToastService toastService

Sales Document

@if (IsLoading) {
Cargando...
} else if (Document is null) {
No se pudo cargar el Sales Document.
} else {
@(string.IsNullOrWhiteSpace(Document.InternalDocumentNumber) ? $"#{Document.Id}" : Document.InternalDocumentNumber)
@GetStatusLabel(Document.Status)
@FormatDate(Document.IssueDate)
@GetDocumentTypeLabel(Document.DocumentType)
@GetOriginSummary()
@Document.Currency @Document.TotalAmount.ToString("N2")
@Document.CustomerName
@Document.BillToCustomerName
@(Document.QuoteId?.ToString() ?? "—")
@Document.NetAmount.ToString("N2")
@Document.TaxAmount.ToString("N2")
@Document.ExchangeRate.ToString("N4")
@(string.IsNullOrWhiteSpace(Document.Observations) ? "—" : Document.Observations)
Coverage
@if (Document.Coverage.Any()) { @foreach (var coverage in Document.Coverage) { } } else { }
Tipo Presupuesto Quote detail Porcentaje Importe Desde Hasta Notas
@GetCoverageTypeLabel(coverage.CoverageType) @coverage.QuoteId @(coverage.QuoteDetailId?.ToString() ?? "—") @(coverage.CoveragePercentage?.ToString("N2") ?? "—") @(coverage.CoverageAmount?.ToString("N2") ?? "—") @FormatDate(coverage.PeriodFrom) @FormatDate(coverage.PeriodTo) @(string.IsNullOrWhiteSpace(coverage.Notes) ? "—" : coverage.Notes)
Sin coverage informado.
Detalles
@if (Document.Details.Any()) { @foreach (var item in Document.Details.OrderBy(x => x.LineNumber)) { } } else { }
# Origen Descripción Cantidad Unitario Neto Impuesto Total
@item.LineNumber @GetOriginTypeLabel(item.OriginType) @item.Description @item.Quantity.ToString("N2") @item.UnitPrice.ToString("N2") @item.NetAmount.ToString("N2") @item.TaxAmount.ToString("N2") @item.TotalAmount.ToString("N2")
Sin detalles.
}
@code { [Parameter] public int Id { get; set; } private SalesDocumentDto? Document; private bool IsLoading; protected override async Task OnInitializedAsync() { await LoadAsync(); } private async Task LoadAsync() { try { IsLoading = true; Document = await SalesDocumentService.GetByIdAsync(Id); } catch (Exception ex) { toastService.ShowError(ex.Message); } finally { IsLoading = false; } } private void BackToList() => Navigation.NavigateTo("/salesdocuments"); private string GetOriginSummary() { if (Document?.Details?.Any() != true) return "—"; var origins = Document.Details .Select(x => GetOriginTypeLabel(x.OriginType)) .Distinct() .ToList(); return origins.Count == 1 ? origins[0] : string.Join(" / ", origins); } private static string FormatDate(DateTime? value) => value.HasValue ? value.Value.ToString("dd/MM/yyyy") : "—"; private static string GetDocumentTypeLabel(int value) => Enum.IsDefined(typeof(SalesDocumentType), value) ? ((SalesDocumentType)value) switch { SalesDocumentType.Invoice => "Factura", SalesDocumentType.DebitNote => "Nota de débito", SalesDocumentType.CreditNote => "Nota de crédito", SalesDocumentType.CreditInvoice => "Factura crédito", SalesDocumentType.CreditDebitNote => "N/D crédito", SalesDocumentType.CreditCreditNote => "N/C crédito", _ => value.ToString() } : value.ToString(); private static string GetStatusLabel(int value) => Enum.IsDefined(typeof(SalesDocumentStatus), value) ? ((SalesDocumentStatus)value) switch { SalesDocumentStatus.Draft => "Borrador", SalesDocumentStatus.Validated => "Validado", SalesDocumentStatus.Issued => "Emitido", SalesDocumentStatus.Cancelled => "Anulado", _ => value.ToString() } : value.ToString(); private static string GetCoverageTypeLabel(int value) => Enum.IsDefined(typeof(SalesDocumentCoverageType), value) ? ((SalesDocumentCoverageType)value) switch { SalesDocumentCoverageType.Direct => "Directa", SalesDocumentCoverageType.Capita => "Cápita", SalesDocumentCoverageType.Adjustment => "Ajuste", SalesDocumentCoverageType.Manual => "Manual", _ => value.ToString() } : value.ToString(); private static string GetOriginTypeLabel(string value) => value switch { "MANUAL" => "Manual", "QUOTE" => "Presupuesto", "ADJUSTMENT" => "Ajuste", "CAPITA" => "Cápita", "DELIVERY_NOTE" => "Remito", _ => string.IsNullOrWhiteSpace(value) ? "—" : value }; private static string GetStatusBadge(int value) => value switch { (int)SalesDocumentStatus.Draft => "bg-secondary text-white", (int)SalesDocumentStatus.Validated => "bg-info text-dark", (int)SalesDocumentStatus.Issued => "bg-primary text-white", (int)SalesDocumentStatus.Cancelled => "bg-danger text-white", _ => "bg-light text-dark" }; }