Correcion pendiente, colores de background, textos, menues y login redirect #80
@ -21,7 +21,7 @@
|
||||
<div class="@($"{NavMenuCssClass} nav-scrollable {(navMenuService.Minimized ? "nav-minimized" : string.Empty)}")" @onclick="ToggleNavMenu">
|
||||
<nav class="flex-column" aria-label="Navegación principal">
|
||||
<div class="nav-item px-2 py-0">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="/" Match="NavLinkMatch.All" activeClass="bg-secondary text-white">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="/" Match="NavLinkMatch.All" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-home" aria-hidden="true"></span>
|
||||
@if (!navMenuService.Minimized)
|
||||
{
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
<AuthorizeView Roles="Admin">
|
||||
<div class="nav-item px-2 py-0">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="roles" activeClass="bg-secondary text-white">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="roles" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-shield" aria-hidden="true"></span>
|
||||
@if (!navMenuService.Minimized)
|
||||
{
|
||||
@ -41,7 +41,7 @@
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item px-2 py-0">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="users" activeClass="bg-secondary text-white">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="users" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-people" aria-hidden="true"></span>
|
||||
@if (!navMenuService.Minimized)
|
||||
{
|
||||
@ -64,46 +64,46 @@
|
||||
<ul class="nav flex-column">
|
||||
<!-- Expediciones -->
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="expeditions" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="expeditions" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-data-transfer-download me-2 text-danger"></span> Expediciones
|
||||
</NavLink>
|
||||
</div>
|
||||
|
||||
<!-- Productos -->
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/products" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/products" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-tags me-2 text-warning"></span> Productos
|
||||
</NavLink>
|
||||
</div>
|
||||
<!-- Divisiones de productos -->
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/productdivisions" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/productdivisions" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-grid-three-up me-2 text-info"></span> Divisiones
|
||||
</NavLink>
|
||||
</div>
|
||||
<!-- Unidades de medida -->
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/units" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/units" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-resize-both me-2 text-success"></span> Unidades
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/locations" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/locations" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-map-marker me-2 text-success"></span> Ubicaciones
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/current" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/current" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-inbox me-2 text-info"></span> Stock actual
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/movements" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/movements" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-loop-circular me-2 text-primary"></span> Movimientos
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/consumes" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="stock/consumes" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-check me-2 text-secondary"></span> Consumos
|
||||
</NavLink>
|
||||
</div>
|
||||
@ -124,47 +124,47 @@
|
||||
{
|
||||
<ul class="nav flex-column">
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/customers/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/customers/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-person-lines-fill me-2 text-primary"></i> Clientes
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="quotes/dashboard" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="quotes/dashboard" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-receipt me-2 text-white"></i> Presupuesto
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="deliverynotes" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="deliverynotes" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-truck me-2 text-warning"></i> Remitos
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="salesdocuments" activeClass="bg-secondary text-white fw-semibold">
|
||||
<i class="bi bi-receipt-cutoff me-2 text-success"></i> Sales Documents
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="salesdocuments" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-receipt-cutoff me-2 text-success"></i> Facturación
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/institutions/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/institutions/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-building me-2 text-info"></i> Instituciones
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/patients/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/patients/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-person-heart me-2 text-danger"></i> Pacientes
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/products/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/products/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-box-seam me-2 text-warning"></i> Productos
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/professionals/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/professionals/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-person-badge me-2 text-info"></i> Profesionales
|
||||
</NavLink>
|
||||
</div>
|
||||
<div class="nav-item ps-4 py-0 border-start border-2 border-white">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/people/" activeClass="bg-secondary text-white fw-semibold">
|
||||
<NavLink class="nav-link small py-0 px-2 text-start d-flex align-items-center" href="sales/people/" activeClass="active text-white fw-semibold">
|
||||
<i class="bi bi-people me-2 text-success"></i> Vendedores
|
||||
</NavLink>
|
||||
</div>
|
||||
@ -173,7 +173,7 @@
|
||||
</div>
|
||||
|
||||
<div class="nav-item px-2 py-0">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="tickets/ticketform/" activeClass="bg-secondary text-white">
|
||||
<NavLink class="nav-link text-white d-flex align-items-center gap-2 py-0 px-2" href="tickets/ticketform/" activeClass="active text-white fw-semibold">
|
||||
<span class="oi oi-list-rich" aria-hidden="true"></span>
|
||||
@if (!navMenuService.Minimized)
|
||||
{
|
||||
|
||||
@ -153,7 +153,7 @@
|
||||
|
||||
await _iLoginService.Login(tokenResponse);
|
||||
|
||||
_navigationManager.NavigateTo("/registration-confirmation");
|
||||
_navigationManager.NavigateTo("/");
|
||||
}
|
||||
else if (response.StatusCode == HttpStatusCode.BadRequest)
|
||||
{
|
||||
|
||||
@ -2,19 +2,20 @@
|
||||
@using Domain.Constants
|
||||
@using Domain.Dtos.Sales
|
||||
@using Domain.Generics
|
||||
@using System.Globalization
|
||||
@using phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
@inject NavigationManager Navigation
|
||||
@inject ISalesDocumentService SalesDocumentService
|
||||
@inject IToastService toastService
|
||||
|
||||
<div class="container mt-4" style="zoom:.8;">
|
||||
<div class="sales-document-create container mt-4" style="zoom:.8;">
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header d-flex justify-content-center align-items-center">
|
||||
<h3 class="mb-0">Nuevo Sales Document desde remitos</h3>
|
||||
<h3 class="mb-0">Nuevo documento de venta desde remitos</h3>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info mb-3">
|
||||
Sales Document representa el documento comercial facturable. No emite comprobante fiscal ni integra ARCA/AFIP.
|
||||
El documento de venta representa el documento comercial facturable. No emite comprobante fiscal ni integra ARCA/AFIP.
|
||||
</div>
|
||||
|
||||
<div class="row g-2 mb-3">
|
||||
@ -24,7 +25,7 @@
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Remito</label>
|
||||
<input class="form-control" @bind="DeliveryNoteNumber" placeholder="Numero de remito..." />
|
||||
<input class="form-control" @bind="DeliveryNoteNumber" placeholder="Número de remito..." />
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
<label class="form-label">Presupuesto ID</label>
|
||||
@ -56,13 +57,13 @@
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">Remitos emitidos</h5>
|
||||
<span class="badge bg-secondary">Seleccionados: @SelectedIds.Count</span>
|
||||
<span class="badge sales-count-badge">Seleccionados: @SelectedIds.Count</span>
|
||||
</div>
|
||||
<div class="card-body p-2">
|
||||
@if (Candidates.Items.Any())
|
||||
{
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover align-middle mb-0">
|
||||
<table class="table table-sm table-hover align-middle mb-0 sales-table remittances-table">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th style="width:48px;"></th>
|
||||
@ -70,14 +71,14 @@
|
||||
<th>Fecha</th>
|
||||
<th>Cliente fiscal</th>
|
||||
<th>Presupuesto</th>
|
||||
<th class="text-end">Items</th>
|
||||
<th class="text-end">Ítems</th>
|
||||
<th class="text-end">Importe aprobado</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in Candidates.Items)
|
||||
{
|
||||
<tr class="@(SelectedIds.Contains(item.Id) ? "table-primary" : string.Empty)">
|
||||
<tr class="@(SelectedIds.Contains(item.Id) ? "sales-row-selected" : string.Empty)">
|
||||
<td class="text-center">
|
||||
<input type="checkbox" class="form-check-input" checked="@SelectedIds.Contains(item.Id)" @onchange="async args => await ToggleSelectionAsync(item, args)" />
|
||||
</td>
|
||||
@ -95,34 +96,34 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="text-center text-muted py-4">Busca remitos emitidos para seleccionar sus items facturables.</div>
|
||||
<div class="text-center text-muted py-4">Buscá remitos emitidos para seleccionar sus ítems facturables.</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="card shadow-sm mb-3">
|
||||
<div class="card-header d-flex justify-content-between align-items-center">
|
||||
<h5 class="mb-0">Items facturables</h5>
|
||||
<span class="badge bg-secondary">Lineas: @SelectedItemIds.Count</span>
|
||||
<h5 class="mb-0">Ítems facturables</h5>
|
||||
<span class="badge sales-count-badge">Líneas: @SelectedItemIds.Count</span>
|
||||
</div>
|
||||
<div class="card-body p-2">
|
||||
@if (IsLoadingItems)
|
||||
{
|
||||
<div class="text-center text-muted py-4">
|
||||
<span class="spinner-border spinner-border-sm me-2"></span>
|
||||
Cargando items...
|
||||
Cargando ítems...
|
||||
</div>
|
||||
}
|
||||
else if (ItemCandidates.Any())
|
||||
{
|
||||
<div class="table-responsive">
|
||||
<table class="table table-sm table-hover align-middle mb-0">
|
||||
<table class="table table-sm table-hover align-middle mb-0 sales-table billable-items-table">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th style="width:48px;"></th>
|
||||
<th>Remito</th>
|
||||
<th>Linea</th>
|
||||
<th>Descripcion</th>
|
||||
<th>Línea</th>
|
||||
<th>Descripción</th>
|
||||
<th class="text-end">Entregado</th>
|
||||
<th class="text-end">Facturado</th>
|
||||
<th class="text-end">Pendiente</th>
|
||||
@ -135,25 +136,25 @@
|
||||
@foreach (var item in ItemCandidates)
|
||||
{
|
||||
var isSelected = SelectedItemIds.Contains(item.DeliveryNoteDetailId);
|
||||
<tr class="@(isSelected ? "table-primary" : string.Empty)">
|
||||
<tr class="@(isSelected ? "sales-row-selected" : string.Empty)">
|
||||
<td class="text-center">
|
||||
<input type="checkbox" class="form-check-input" checked="@isSelected" @onchange="args => ToggleItemSelection(item, args)" />
|
||||
</td>
|
||||
<td>@item.DeliveryNoteNumber</td>
|
||||
<td>@item.LineNumber</td>
|
||||
<td>@item.Description</td>
|
||||
<td class="description-cell">
|
||||
<span class="item-description" title="@item.Description">@item.Description</span>
|
||||
</td>
|
||||
<td class="text-end">@item.DeliveredQuantity.ToString("N2")</td>
|
||||
<td class="text-end">@item.AlreadyBilledQuantity.ToString("N2")</td>
|
||||
<td class="text-end">@item.PendingQuantity.ToString("N2")</td>
|
||||
<td>
|
||||
<input type="number"
|
||||
<input type="text"
|
||||
class="form-control form-control-sm text-end"
|
||||
min="0"
|
||||
step="0.01"
|
||||
max="@item.PendingQuantity"
|
||||
inputmode="decimal"
|
||||
disabled="@(!isSelected)"
|
||||
@bind="item.SelectedQuantity"
|
||||
@bind:event="oninput" />
|
||||
value="@FormatQuantity(item.SelectedQuantity)"
|
||||
@oninput="args => UpdateSelectedQuantity(item, args.Value?.ToString())" />
|
||||
</td>
|
||||
<td class="text-end">@item.ApprovedUnitPrice.ToString("N2")</td>
|
||||
<td class="text-end">@GetSelectedAmount(item).ToString("N2")</td>
|
||||
@ -165,7 +166,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="text-center text-muted py-4">Selecciona uno o mas remitos para ver sus items con saldo pendiente.</div>
|
||||
<div class="text-center text-muted py-4">Seleccioná uno o más remitos para ver sus ítems con saldo pendiente.</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -187,14 +188,14 @@
|
||||
<strong>Total:</strong><br />@SelectedTotal.ToString("N2")
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<strong>Validacion:</strong><br />
|
||||
<strong>Validación:</strong><br />
|
||||
@if (HasSingleFiscalCustomer && HasValidSelectedQuantities)
|
||||
{
|
||||
<span class="badge bg-success">Seleccion valida</span>
|
||||
<span class="badge bg-success">Selección válida</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="badge bg-danger">Revisar seleccion</span>
|
||||
<span class="badge bg-danger">Revisar selección</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -205,7 +206,7 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="text-muted">Selecciona items facturables para ver el resumen.</div>
|
||||
<div class="text-muted">Seleccioná ítems facturables para ver el resumen.</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@ -219,7 +220,7 @@
|
||||
{
|
||||
<span class="spinner-border spinner-border-sm me-2"></span>
|
||||
}
|
||||
<i class="fas fa-save me-1"></i> Crear Sales Document
|
||||
<i class="fas fa-save me-1"></i> Crear documento de venta
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
@ -336,6 +337,22 @@
|
||||
SelectedItemIds.Remove(item.DeliveryNoteDetailId);
|
||||
}
|
||||
|
||||
private static string FormatQuantity(decimal value) =>
|
||||
value.ToString("N2", CultureInfo.GetCultureInfo("es-AR"));
|
||||
|
||||
private static void UpdateSelectedQuantity(SalesDocumentDeliveryNoteItemCandidateDto item, string? rawValue)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(rawValue))
|
||||
{
|
||||
item.SelectedQuantity = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
var normalizedValue = rawValue.Trim().Replace(".", ",");
|
||||
if (decimal.TryParse(normalizedValue, NumberStyles.Number, CultureInfo.GetCultureInfo("es-AR"), out var quantity))
|
||||
item.SelectedQuantity = Math.Clamp(quantity, 0, item.PendingQuantity);
|
||||
}
|
||||
|
||||
private void ClearFilters()
|
||||
{
|
||||
CustomerText = null;
|
||||
@ -354,7 +371,7 @@
|
||||
{
|
||||
if (!CanCreate)
|
||||
{
|
||||
toastService.ShowError("Debe seleccionar items pendientes de un unico cliente fiscal y cantidades validas.");
|
||||
toastService.ShowError("Debe seleccionar ítems pendientes de un único cliente fiscal y cantidades válidas.");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -375,7 +392,7 @@
|
||||
Observations = Observations
|
||||
});
|
||||
|
||||
toastService.ShowSuccess("Sales Document creado correctamente desde items de remitos.");
|
||||
toastService.ShowSuccess("Documento de venta creado correctamente desde ítems de remitos.");
|
||||
Navigation.NavigateTo($"/salesdocuments/{created.Id}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
||||
@ -0,0 +1,69 @@
|
||||
.sales-document-create .card {
|
||||
box-shadow: 0 8px 24px color-mix(in srgb, var(--ph-canvas) 35%, transparent);
|
||||
}
|
||||
|
||||
.sales-document-create .card-header {
|
||||
background: linear-gradient(
|
||||
90deg,
|
||||
color-mix(in srgb, var(--ph-primary-soft) 72%, var(--ph-surface)),
|
||||
var(--ph-surface)
|
||||
);
|
||||
}
|
||||
|
||||
.sales-document-create .sales-count-badge {
|
||||
color: var(--ph-primary);
|
||||
background: var(--ph-primary-soft);
|
||||
border: 1px solid color-mix(in srgb, var(--ph-primary) 32%, var(--ph-border));
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table {
|
||||
min-width: 900px;
|
||||
}
|
||||
|
||||
.sales-document-create .billable-items-table {
|
||||
min-width: 1280px;
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table thead th {
|
||||
color: var(--ph-text);
|
||||
background: color-mix(in srgb, var(--ph-primary-soft) 52%, var(--ph-surface-subtle));
|
||||
border-bottom-color: var(--ph-border-strong);
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table tbody tr:nth-child(even):not(.sales-row-selected) > * {
|
||||
background: color-mix(in srgb, var(--ph-surface-subtle) 72%, transparent);
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table tbody tr.sales-row-selected > * {
|
||||
color: var(--ph-text) !important;
|
||||
background: color-mix(in srgb, var(--ph-primary-soft) 78%, var(--ph-surface)) !important;
|
||||
border-bottom-color: color-mix(in srgb, var(--ph-primary) 28%, var(--ph-border)) !important;
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table tbody tr.sales-row-selected > *:first-child {
|
||||
box-shadow: inset 4px 0 0 var(--ph-primary);
|
||||
}
|
||||
|
||||
.sales-document-create .sales-table tbody tr:hover > * {
|
||||
color: var(--ph-text) !important;
|
||||
}
|
||||
|
||||
.sales-document-create .description-cell {
|
||||
width: 42%;
|
||||
min-width: 390px;
|
||||
}
|
||||
|
||||
.sales-document-create .item-description {
|
||||
display: -webkit-box;
|
||||
overflow: hidden;
|
||||
color: var(--ph-text);
|
||||
line-height: 1.45;
|
||||
text-transform: none;
|
||||
-webkit-box-orient: vertical;
|
||||
-webkit-line-clamp: 3;
|
||||
}
|
||||
|
||||
.sales-document-create .billable-items-table td:not(.description-cell),
|
||||
.sales-document-create .billable-items-table th:not(:nth-child(4)) {
|
||||
white-space: nowrap;
|
||||
}
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
<div class="container mt-4" style="zoom:.8;">
|
||||
<div class="d-flex justify-content-between align-items-center mb-3">
|
||||
<h3 class="mb-0">Sales Document</h3>
|
||||
<h3 class="mb-0">Documento de venta</h3>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
@if (Document?.Status == (int)SalesDocumentStatus.Draft)
|
||||
{
|
||||
@ -28,7 +28,7 @@
|
||||
}
|
||||
else if (Document is null)
|
||||
{
|
||||
<div class="alert alert-warning">No se pudo cargar el Sales Document.</div>
|
||||
<div class="alert alert-warning">No se pudo cargar el documento de venta.</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<div class="d-flex flex-wrap justify-content-between align-items-center gap-2 mb-3">
|
||||
<div>
|
||||
<h3 class="mb-1">Revision administrativa</h3>
|
||||
<div class="text-muted">Sales Document Draft Review & Validation</div>
|
||||
<div class="text-muted">Revisión y validación del borrador del documento de venta</div>
|
||||
</div>
|
||||
<div class="d-flex flex-wrap gap-2">
|
||||
<button type="button" class="btn btn-secondary rounded-pill" @onclick="BackToList">
|
||||
@ -30,7 +30,7 @@
|
||||
}
|
||||
else if (Document is null)
|
||||
{
|
||||
<div class="alert alert-warning">No se pudo cargar el Sales Document.</div>
|
||||
<div class="alert alert-warning">No se pudo cargar el documento de venta.</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -361,7 +361,7 @@
|
||||
IsSaving = true;
|
||||
var preview = await SalesDocumentService.ValidateDraftAsync(Id);
|
||||
ApplyPreview(preview);
|
||||
toastService.ShowSuccess("Sales Document validado correctamente.");
|
||||
toastService.ShowSuccess("Documento de venta validado correctamente.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<div class="card shadow-sm mb-3" style="zoom: 0.8;">
|
||||
<div class="card-header py-2">
|
||||
<div class="d-flex justify-content-center align-items-center">
|
||||
<h3 class="card-title m-0">Consulta de Sales Documents</h3>
|
||||
<h3 class="card-title m-0">Consulta de documentos de venta</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body pt-2 pb-0">
|
||||
|
||||
@ -89,7 +89,7 @@ namespace phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
{
|
||||
var serverMessage = await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.IsNullOrWhiteSpace(serverMessage)
|
||||
? "No se pudo crear el Sales Document desde remitos."
|
||||
? "No se pudo crear el documento de venta desde remitos."
|
||||
: serverMessage);
|
||||
}
|
||||
|
||||
@ -125,7 +125,7 @@ namespace phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
{
|
||||
var serverMessage = await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.IsNullOrWhiteSpace(serverMessage)
|
||||
? "No se pudo crear el Sales Document desde items de remitos."
|
||||
? "No se pudo crear el documento de venta desde ítems de remitos."
|
||||
: serverMessage);
|
||||
}
|
||||
|
||||
@ -153,7 +153,7 @@ namespace phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
{
|
||||
var serverMessage = await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.IsNullOrWhiteSpace(serverMessage)
|
||||
? "No se pudo guardar la revision del Sales Document."
|
||||
? "No se pudo guardar la revisión del documento de venta."
|
||||
: serverMessage);
|
||||
}
|
||||
|
||||
@ -169,7 +169,7 @@ namespace phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
{
|
||||
var serverMessage = await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.IsNullOrWhiteSpace(serverMessage)
|
||||
? "No se pudo validar el Sales Document."
|
||||
? "No se pudo validar el documento de venta."
|
||||
: serverMessage);
|
||||
}
|
||||
|
||||
@ -187,7 +187,7 @@ namespace phronCare.UIBlazor.Services.Sales.SalesDocuments
|
||||
{
|
||||
var serverMessage = await response.Content.ReadAsStringAsync();
|
||||
throw new Exception(string.IsNullOrWhiteSpace(serverMessage)
|
||||
? "No se pudo crear el Sales Document."
|
||||
? "No se pudo crear el documento de venta."
|
||||
: serverMessage);
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user