372 lines
22 KiB
Plaintext
372 lines
22 KiB
Plaintext
@page "/Orders"
|
|
|
|
@if (EditRecord != null)
|
|
{
|
|
<div class="card shadow">
|
|
<div class="card-header">
|
|
<div class="card-title mb-0">
|
|
<div class="d-flex justify-content-between align-items-center fs-4">
|
|
<div class="px-0 fs-3">
|
|
<b>@EditRecord.OrderCode</b>
|
|
</div>
|
|
<div class="px-4">
|
|
<div class="d-flex">
|
|
<div class="px-0 row">
|
|
<div class="col px-0">
|
|
<span @onclick="() => AdvStep(CompileStep.Header)">
|
|
<StepArrow ObjId="1" StepText="Testata" BlockStyle="@(ArrowBackCol(CompileStep.Header))" StrokeWidth="4" ObjW="360" ObjH="60" StrokeColors="@listBord01" TipAngle="90" TextStyle="@txtStyle"></StepArrow>
|
|
</span>
|
|
</div>
|
|
<div class="col px-0">
|
|
<span @onclick="() => AdvStep(CompileStep.General)">
|
|
<StepArrow ObjId="2" StepText="Generale" BlockStyle="@(ArrowBackCol(CompileStep.General))" StrokeWidth="4" ObjW="360" ObjH="60" StrokeColors="@listBord01" TipAngle="90" TextStyle="@txtStyle"></StepArrow>
|
|
</span>
|
|
</div>
|
|
<div class="col px-0">
|
|
<span @onclick="() => AdvStep(CompileStep.Rows)">
|
|
<StepArrow ObjId="3" StepText="Righe" BlockStyle="@(ArrowBackCol(CompileStep.Rows))" StrokeWidth="4" ObjW="360" ObjH="60" StrokeColors="@listBord01" TipAngle="90" TextStyle="@txtStyle"></StepArrow>
|
|
</span>
|
|
</div>
|
|
<div class="col px-0">
|
|
<span @onclick="() => AdvStep(CompileStep.Delivery)">
|
|
<StepArrow ObjId="4" StepText="Consegna" BlockStyle="@(ArrowBackCol(CompileStep.Delivery))" StrokeWidth="4" ObjW="360" ObjH="60" StrokeColors="@listBord01" TipAngle="90" TextStyle="@txtStyle"></StepArrow>
|
|
</span>
|
|
</div>
|
|
<div class="col px-0">
|
|
<span @onclick="() => AdvStep(CompileStep.FinalCheck)">
|
|
<StepArrow ObjId="5" StepText="Controlli" BlockStyle="@(ArrowBackCol(CompileStep.FinalCheck))" StrokeWidth="4" ObjW="360" ObjH="60" StrokeColors="@listBord01" TipAngle="90" TextStyle="@txtStyle"></StepArrow>
|
|
</span>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="px-0">
|
|
<button type="button" class="btn-close" data-bs-dismiss="card" aria-label="Close" @onclick="DoReset">
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="card-body">
|
|
|
|
@* @if (currStep == CompileStep.Header)
|
|
{
|
|
<OfferMan CurrRecord="EditRecord" EC_Close="DoClose" EC_Updated="DoSave"></OfferMan>
|
|
}
|
|
else if (currStep == CompileStep.General)
|
|
{
|
|
<OfferCommonPar CurrRecord="EditRecord" EC_Close="DoClose" EC_Updated="DoSave"></OfferCommonPar>
|
|
}
|
|
else if (currStep == CompileStep.Rows)
|
|
{
|
|
<OfferRowMan CurrRecord="EditRecord" DisplayMode="EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit"></OfferRowMan>
|
|
}
|
|
else if (currStep == CompileStep.Delivery)
|
|
{
|
|
<OfferDelivery CurrRecord="EditRecord" EC_Close="DoClose" EC_Updated="DoSave"></OfferDelivery>
|
|
}
|
|
else if (currStep == CompileStep.FinalCheck)
|
|
{
|
|
<OfferCheck CurrRecord="EditRecord" EC_Close="DoClose"></OfferCheck>
|
|
} *@
|
|
</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">Gestione Stime Produzione</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">
|
|
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)">Richiesta Stima Tempi</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)">Richiesta Stima Tempi</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)">Delete History</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
<div class="col-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
Code Calcoli
|
|
</div>
|
|
<div class="card-body">
|
|
<JobQueueDisplay QueueRun="@JobQueueRun" QueueWait="@JobQueueWait" EC_ReRunJob="ReRunJob" EC_ResetQueue="ResetQueue"></JobQueueDisplay>
|
|
|
|
|
|
@* <div class="row">
|
|
<div class="col-12 mb-2">
|
|
<ol class="list-group">
|
|
<li class="list-group-item align-items-lg-start bg-success text-light">Job Eseguiti</li>
|
|
@if (JobQueueRun.Count == 0)
|
|
{
|
|
<li class="list-group-item align-items-lg-start">Nessun Job Eseguito!</li>
|
|
}
|
|
else
|
|
{
|
|
foreach (var item in JobQueueRun)
|
|
{
|
|
<li class="list-group-item align-items-lg-start">
|
|
<div class="d-flex justify-content-between">
|
|
<div class="px-0">
|
|
@item
|
|
</div>
|
|
<div class="px-0">
|
|
<button class="btn btn-sm btn-primary" @onclick="() => ReRunJob(item)"><i class="fa-solid fa-share-from-square" title="Riesecuzione Estimate"></i> Re-Run</button>
|
|
</div>
|
|
</div>
|
|
</li>
|
|
}
|
|
}
|
|
@if (JobQueueRun.Count > 0)
|
|
{
|
|
<li class="list-group-item align-items-lg-start p-0">
|
|
<button class="btn btn-warning w-100" @onclick="() => ResetRunQueue()">Reset Queue to Waiting</button>
|
|
</li>
|
|
}
|
|
</ol>
|
|
</div>
|
|
<div class="col-12">
|
|
<ol class="list-group">
|
|
<li class="list-group-item align-items-lg-start text-bg-warning">Job in Attesa</li>
|
|
@if (JobQueueWait.Count == 0)
|
|
{
|
|
<li class="list-group-item align-items-lg-start">Nessun job in Attesa!</li>
|
|
}
|
|
else
|
|
{
|
|
foreach (var item in JobQueueWait)
|
|
{
|
|
<li class="list-group-item align-items-lg-start">@item</li>
|
|
}
|
|
}
|
|
@if (JobQueueWait.Count > 0)
|
|
{
|
|
<li class="list-group-item align-items-lg-start p-0">
|
|
<button class="btn btn-warning w-100" @onclick="() => ResetWaitQueue()">Reset Queue</button>
|
|
</li>
|
|
}
|
|
</ol>
|
|
</div>
|
|
</div> *@
|
|
</div>
|
|
@* <div class="card-footer"></div> *@
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
}
|
|
<div class="card shadow">
|
|
<div class="card-header">
|
|
<div class=" d-flex justify-content-between">
|
|
<div class="px-0 fs-3">
|
|
<b>Ordini</b> @* <button class="btn btn-success" @onclick="DoAdd"><i class="fa-solid fa-cart-plus"></i> Nuova</button> *@
|
|
</div>
|
|
<div class="px-0">
|
|
<div class="d-flex">
|
|
<div class="px-1">
|
|
<div class="input-group">
|
|
<label class="input-group-text bg-opacity-50">Stato</label>
|
|
<select @bind="@FiltState" class="form-select form-select-sm">
|
|
<option value="">-- Tutti --</option>
|
|
@foreach (var sType in Enum.GetValues(typeof(EgwCoreLib.Lux.Core.Enums.OrderStates)))
|
|
{
|
|
<option value="@sType">@sType</option>
|
|
}
|
|
</select>
|
|
|
|
<input type="text" class="form-control" placeholder="ctrl-/" accesskey="/">
|
|
<button class="btn btn-outline-secondary" type="button"><i class="fa-solid fa-rotate-right"></i></button>
|
|
</div>
|
|
</div>
|
|
<div class="px-1">
|
|
<PeriodoSel E_PeriodoSel="SetPeriodo" CurrPeriodo="PeriodoSel"></PeriodoSel>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="card-body">
|
|
@if (isLoading)
|
|
{
|
|
<LoadingData></LoadingData>
|
|
}
|
|
else if (totalCount == 0)
|
|
{
|
|
<div class="alert alert-info text-center display-4">Nessun record trovato</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>ID</th>
|
|
<th>Date</th>
|
|
<th>Stato</th>
|
|
<th>Codice</th>
|
|
@if (SelRecord == null)
|
|
{
|
|
<th>Agente/Riv</th>
|
|
}
|
|
<th>Cliente</th>
|
|
@if (SelRecord == null)
|
|
{
|
|
<th>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">Importo</th>
|
|
<th class="text-end">Marg.</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.OfferID</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 btn-outline-dark" @onclick="() => ManageCalcReq(item)">@item.OrderState</button>
|
|
</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>
|
|
}
|
|
</tr>
|
|
}
|
|
</tbody>
|
|
</table>
|
|
|
|
</div>
|
|
@if (SelRecord != null)
|
|
{
|
|
<div class="col-6">
|
|
<OrderRowMan CurrRecord="@SelRecord" DisplayMode="EgwCoreLib.Lux.Core.Enums.DisplayMode.Preview" EC_Updated="() => ForceReload()"></OrderRowMan>
|
|
</div>
|
|
}
|
|
</div>
|
|
}
|
|
</div>
|
|
</div>
|
|
}
|