Files
lux/Lux.UI/Components/Pages/Orders.razor
T
2026-06-11 12:19:00 +02:00

320 lines
20 KiB
Plaintext

@page "/Orders"
@inherits BaseComp
@if (EditRecord != null)
{
<div class="p-2 shadow rounded-2 border">
<div class="d-flex fs-4 align-items-center justify-content-between">
<div class="px-1 fs-3">
<b>@EditRecord.OrderCode</b>
</div>
<button type="button" class="btn-close shadow-sm rounded-4 px-3" data-bs-dismiss="card" aria-label="Close" @onclick="DoReset">
</button>
</div>
<div class="my-2 py-1 rounded-2">
<OrderRowMan CurrRecord="EditRecord" DisplayMode="EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit" EC_Updated="() => ForceReload()" EC_Action="DoAction"></OrderRowMan>
</div>
</div>
}
else
{
if (EditStateRec != null)
{
<div class="modal" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" role="dialog">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header text-bg-info bg-gradient bg-opacity-50">
<div class="modal-title fs-3">@Traduci("ordine_stimeProd")</div>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="() => ManageCalcReq(null)">
</button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-6">
<div class="card">
<div class="card-header">
@Traduci("ordine_corrente")
</div>
<div class="card-body">
@if (EditStateRec.LogHistory.Count > 0)
{
<div class="col-12">
<button class="btn btn-primary w-100" @onclick="() => SendEstim(EditStateRec)">@Traduci("ordine_reqStimaTempi")</button>
</div>
<div class="col-12">
<ol class="list-group list-group-numbered">
@foreach (var item in OrderHist)
{
<li class="list-group-item d-flex justify-content-between align-items-start2">
<div class="ms-2 me-auto">
<div class="fw-bold">@item.Message</div>
<div class="small d-flex justify-content-between">
<div class="px-0">
@($"{item.DtEvent:yyyy-MM-dd HH:mm:ss}")
</div>
<div class="px-0">
<i class="fa-regular fa-user px-1"></i>@item.UserName
</div>
</div>
</div>
@if (!string.IsNullOrEmpty(item.IconCss))
{
<span class="badge text-bg-primary rounded-pill align-content-center"><i class="@item.IconCss"></i></span>
}
</li>
}
</ol>
</div>
}
else
{
<div class="col-12">
<div class="alert alert-warning">
<div class="fs-4">Nessuna History registrata</div>
<button class="btn btn-primary w-100" @onclick="() => SendEstim(EditStateRec)">@Traduci("ordine_reqStimaTempi")</button>
</div>
</div>
}
</div>
@if (EditStateRec.LogHistory.Count > 0)
{
<div class="card-footer">
<div class="row">
<div class="col-12">
<button class="btn btn-danger w-100" @onclick="() => ResetHistory(EditStateRec)">@Traduci("ordine_cancStorico")</button>
</div>
</div>
</div>
}
</div>
</div>
<div class="col-6">
<div class="card">
<div class="card-header">
@Traduci("ordine_listaCalc")
</div>
<div class="card-body">
<JobQueueDisplay QueueRun="JobQueueRun" QueueWait="JobQueueWait" QueueDone="JobQueueDone" EC_ReRunJob="ReRunJob" EC_ResetQueue="ResetQueue"></JobQueueDisplay>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
}
<div class="p-2 shadow rounded-2 border">
<div class="d-flex align-items-center justify-content-end">
<div class="row">
<div class="col-3">
<div class="input-group">
<label class="input-group-text bg-opacity-50 px-2">@Traduci("stato")</label>
<select @bind="@FiltState" class="form-select form-select-sm px-2">
<option value="">-- @Traduci("tutti") --</option>
@foreach (var sType in Enum.GetValues(typeof(EgwCoreLib.Lux.Core.Enums.OrderStates)))
{
@* <option value="@sType">@Traduci("ordine_" + sType.ToString().ToLower())</option> *@
<option value="@sType">@Traduci($"ordine_{sType}".ToLower())</option>
}
</select>
</div>
</div>
<div class="col-3">
<div class="input-group" title="@Traduci("ricerca")">
<span class="input-group-text"><i class="fas fa-search"></i></span>
<input type="text" class="form-control px-2" accesskey="/" placeholder="Cerca [/] (3+ char)" @bind="@SearchVal">
<button class="btn @btnResetCss" @onclick="ResetSearch"><i class="fas fa-ban"></i></button>
</div>
</div>
<div class="col-6">
<PeriodoSel E_PeriodoSel="SetPeriodo" CurrPeriodo="PeriodoSel" PeriodoLabel="@Traduci("periodo")" DictSelect="CustomSelDict"></PeriodoSel>
</div>
</div>
</div>
<div class="py-2 rounded-2">
@if (isLoading)
{
<div class="col-12">
<LoadingData></LoadingData>
</div>
}
else if (totalCount == 0)
{
<div class="col-12">
<div class="alert alert-info text-center display-4">@Traduci("noRecord")</div>
</div>
}
else
{
<div class="row">
<div class="@DivMainCss">
<table class="table table-sm table-striped">
<thead>
<tr>
<th>
<button class="btn btn-sm btn-primary" title="Reset selezione" @onclick="DoReset"><i class="fa-solid fa-arrow-rotate-right"></i></button>
</th>
<th>@Traduci("id")</th>
<th>@Traduci("data")</th>
<th>@Traduci("stato")</th>
<th>@Traduci("materiali")</th>
<th>@Traduci("codice")</th>
@if (SelRecord == null)
{
<th>@Traduci("venditore")</th>
}
<th>@Traduci("cliente")</th>
@if (SelRecord == null)
{
<th>@Traduci("descrizione")</th>
}
<th class="text-end" title="# Righe"><i class="fa-solid fa-list"></i></th>
<th class="text-end" title="# Articoli"><i class="fa-regular fa-file-lines"></i></th>
<th class="text-end" title="# Componenti Ordine"><i class="fa-solid fa-folder-tree"></i></th>
@if (SelRecord == null)
{
<th class="text-end">@Traduci("importo")</th>
<th class="text-end">@Traduci("margine")</th>
}
<th> </th>
</tr>
</thead>
<tbody>
@foreach (var item in ListRecords)
{
<tr class="@CheckSelect(item)">
<td>
<button class="btn btn-sm btn-primary" @onclick="() => DoSelect(item)"><i class="fa-solid fa-magnifying-glass"></i></button>
<button class="btn btn-sm btn-info" @onclick="() => DoEdit(item)"><i class="fa-solid fa-pencil"></i></button>
</td>
<td>@item.OrderID</td>
<td>
<div class="small" title="Inserita"><i class="fa-solid fa-circle"></i> @($"{item.Inserted:yyyy-MM-dd}")</div>
<div class="small text-secondary" title="Scadenza"><i class="fa-solid fa-hourglass-half"></i> @($"{item.ValidUntil:yyyy-MM-dd}")</div>
</td>
<td>
<button class="btn btn-sm bg-@ButtonStateCss(item) bg-gradient bg-opacity-25 text-dark rounded-pill" @onclick="() => ManageCalcReq(item)">
@Traduci("ordine_"+@item.OrderState.ToString().ToLower())
</button>
</td>
<td>
<div class="text-center">
<div class="btn-group" role="group">
<a href="@(DownloadMatUrl(item.OrderID))" target="_blank" title="Stampa" class="btn btn-sm btn-primary">
<i class="fa-solid fa-print"></i>
</a>
@if (SelRecord == null)
{
<button class="btn btn-sm btn-primary" title="@Traduci("print_scegliTemplate")" @onclick="() => SelectOptMatPrint(item.OrderID)">
<i class="fa-solid fa-up-right-from-square"></i>
</button>
}
</div>
@if(item.AllRowsWithReq)
{
<button class="btn btn-sm btn-outline-success mx-1" title="Fabbisogni generati">
<i class="fa-solid fa-basket-shopping"></i>
</button>
}
else
{
<button class="btn btn-sm btn-warning mx-1" title="Genera Fabbisogni mancanti" @onclick="()=>DoGenFabbisogni(item)">
<i class="fa-solid fa-basket-shopping"></i>
</button>
}
</div>
</td>
<td>
@item.OrderCode
<div class="small text-secondary">@item.Envir</div>
</td>
@if (SelRecord == null)
{
<td>
@if (item.DealerNav != null)
{
<div class=""><b>@item.DealerNav.FirstName</b> @item.DealerNav.LastName</div>
<div class="small">@item.DealerNav.VAT</div>
}
</td>
}
<td>
@if (item.CustomerNav != null)
{
<div class=""><b>@item.CustomerNav.FirstName</b> @item.CustomerNav.LastName</div>
<div class="small">@item.CustomerNav.VAT</div>
}
</td>
@if (SelRecord == null)
{
<td>@item.Description</td>
}
<td class="text-end">
@item.NumRows
</td>
<td class="text-end">
@item.NumItems
</td>
<td class="text-end">
@item.NumProdItems
</td> @if (SelRecord == null)
{
<td class="text-end">
<div class="fw-bold" title="Prezzo Finito">@item.TotalPrice.ToString("C2")</div>
<div class="small text-secondary" title="RockBottom Price">(@item.TotalCost.ToString("C2"))</div>
</td>
<td class="text-end" title="Margine / Sconto MAX applicabile">
@item.MaxDiscount.ToString("P2")
</td>
}
<td class="text-center">
<div class="btn-group" role="group">
<a href="@(DownloadOrdineUrl(item.OrderID))" target="_blank" title="Stampa" class="btn btn-sm btn-primary">
<i class="fa-solid fa-print"></i>
</a>
@if (SelRecord == null)
{
<button class="btn btn-sm btn-primary" title="@Traduci("print_scegliTemplate")" @onclick="() => SelectOptPrint(item.OrderID)">
<i class="fa-solid fa-up-right-from-square"></i>
</button>
}
</div>
</td>
</tr>
}
</tbody>
@if (totalCount > numRecord)
{
<tfoot>
<tr>
<td colspan="15">
<EgwCoreLib.Razor.DataPager currPage="@currPage" PageSize="@numRecord" totalCount="@totalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
</td>
</tr>
</tfoot>
}
</table>
</div>
@if (SelRecord != null)
{
<div class="col-6">
<OrderRowMan CurrRecord="@SelRecord" DisplayMode="EgwCoreLib.Lux.Core.Enums.DisplayMode.Preview" EC_Updated="() => ForceReload()" EC_Action="DoAction"></OrderRowMan>
</div>
}
</div>
}
</div>
</div>
}
@if (selectOptPrint)
{
<PrintModal url="@apiUrl" currId="@currId" repType="Ordine" EC_Close="ClosePrintModal"></PrintModal>
}
@if (selectOptMatPrint)
{
<PrintModal url="@apiUrl" currId="@currId" repType="MaterialReqOrd" EC_Close="ClosePrintModal"></PrintModal>
}
<BootstrapModal @ref=Modal Title=@mTitle Message=@mMessage Mode="mMode" UserOptions=@modalOpt></BootstrapModal>