Files
Annamaria Sassi d3b2b9e329 Correzioni
2026-05-11 11:24:46 +02:00

568 lines
35 KiB
Plaintext

@if (EditRecord != null && (CurrEditMode == EditMode.SerStruc || CurrEditMode == EditMode.File))
{
if (EditRecord.Envir == EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW || CurrEditMode == EditMode.SerStruc)
{
<WebWindowComplex.TableComp ListPayload="SetupList"
LiveData="CurrData"
EC_ActionReq="DoAction"
EC_DoUpdate="ExecRequest"
EC_OnClose="CloseEditJwd">
</WebWindowComplex.TableComp>
}
else
{
@* <BtlPreview CurrItem="EditRecord"
ApiUrl="@apiUrl"
CalcTag="@calcTag"
GenericBasePath="@genericBasePath"
ImgBasePath="@imgBasePath"
EC_ReqSave="SaveFile"
EC_OnClose="CloseEdit">
</BtlPreview> *@
<h2>da sistemare BtlPreview da ordine</h2>
}
}
else
{
<div class="card shadow">
<div class="card-header bg-success bg-opacity-50 bg-gradient">
<div class="d-flex justify-content-between">
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Preview)
{
<div class="px-0 d-flex justify-content-between">
<div class="px-1">
<b>@CurrRecord.OrderCode</b> <span class="small text-secondary">@CurrRecord.Envir</span>
</div>
</div>
}
else
{
<div class="px-0 d-flex">
<div class="px-1">
<button class="btn btn-sm btn-success" @onclick="() => ForceReloadData()">Prodotto a Catalogo <i class="fa-solid fa-plus"></i></button>
</div>
<div class="px-1">
<button class="btn btn-sm @noteCss" @onclick="() => DoAddNote()">Nota <i class="fa-solid fa-plus"></i></button>
</div>
</div>
}
<div class="px-0 d-flex justify-content-end">
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Preview)
{
<div class="px-1">
<b>@CurrRecord.CustomerNav.FirstName</b> @CurrRecord.CustomerNav.LastName
</div>
}
else if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<div class="px-1">
<button class="btn btn-sm btn-primary" @onclick="() => OrderForceParameters()">Forza Parametri <i class="fa-solid fa-hammer"></i></button>
</div>
<div class="px-1">
<button class="btn btn-sm btn-primary" @onclick="() => OrderUpdatePrices()">Aggiorna Prezzi <i class="fa-solid fa-calculator"></i></button>
</div>
<div class="px-1">
<button class="btn btn-sm btn-primary" @onclick="() => OrderUpdateAllCosting()">Ricalcolo Completo <i class="fa-solid fa-calculator"></i></button>
</div>
}
</div>
</div>
</div>
<div class="cad-body px-2">
@if (isLoading || ListRecords == null)
{
<LoadingData></LoadingData>
}
else if (totalCount == 0)
{
<div class="alert alert-info text-center fs-5">Nessun record trovato</div>
}
else
{
<table class="table table-sm table-striped">
<thead>
<tr>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th>
<button class="btn btn-sm btn-primary" style="min-width: 4rem;" @onclick="ForceReloadData"><i class="fa-solid fa-rotate-right"></i></button>
</th>
}
<th class="text-start">Preview</th>
<th>Codice</th>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th>Descrizione</th>
}
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th class="text-center" title="Quantità Articoli">Qty <i class="fa-regular fa-file-lines"></i></th>
}
else
{
<th class="text-center" title="Quantità Articoli"><i class="fa-regular fa-file-lines"></i></th>
}
@if (DisplayMode != EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th class="text-center" title="Macchine"><i class="fa-solid fa-industry"></i></th>
}
<th class="text-center" title="Quantità Prodotti"><i class="fa-solid fa-folder-tree"></i></th>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th class="text-end">Importo</th>
}
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th class="text-center" title="Cambio Materiali">Materiali</th>
<th class="text-center" title="Ciclo Lavoro">Lavorazioni</th>
}
<th class="text-center" title="# Prodotti producibili su OGNI macchina"><i class="fa-solid fa-puzzle-piece"></i> Parts</th>
<th class="text-center" title="Range tempi prod. previsti"><i class="fa-solid fa-stopwatch"></i> Hour</th>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<th></th>
}
</tr>
</thead>
<tbody>
@foreach (var item in ListRecords)
{
bool isNote = item.Original.SellingItemID == null;
<tr class="@RowClass(item.Original)">
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-nowrap align-top">
@if (CurrEditMode == EditMode.None)
{
<button class="btn btn-sm btn-info" @onclick="() => DoEdit(item.Original)"><i class="fa-solid fa-pencil" title="Modifica riga Offerta"></i></button>
<button class="btn btn-sm btn-warning" @onclick="() => DoClone(item.Original)"><i class="fa-solid fa-wand-magic" title="Duplica riga Offerta"></i></button>
}
else
{
if (EditRecord != null && EditRecord.OrderRowID == item.Original.OrderRowID)
{
<button class="btn btn-sm btn-success" title="Salva Modifiche" @onclick="() => DoSave(item.Original)"><i class="fa-solid fa-floppy-disk"></i></button>
}
}
</td>
}
@if (isNote)
{
<td colspan="9" class="small align-top">
@if (CurrEditMode == EditMode.RecData && EditRecord != null && EditRecord.OrderRowID == item.Original.OrderRowID)
{
<div class="input-group">
<textarea class="form-input w-100" style="height: 4rem;" type="text" @bind="@item.Original.Note" />
</div>
}
else
{
@HtmlConv(item.Original.Note)
}
</td>
}
else
{
<td class="align-top">
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
@if (item.Original.CalcEnabled)
{
if (item.Original.Envir == EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW)
{
<img class="@cssReqPend(item.Original.HasPendReq) img-fluid image-hover-pop p-1" src="@imgSrc(item.Original.ImgUrl)" width="64" @onclick="() => DoEditJwd(item.Original)" title="Edit Item" />
}
else
{
<img class="@cssReqPend(item.Original.HasPendReq) img-fluid image-hover-pop" src="@imgSrc(item.Original.ImgUrl)" width="150" @onclick="() => DoEditFile(item.Original)" title="Edit Item" />
}
}
else
{
if (!isNote)
{
<img class="img-fluid p-1" src="@imgSrc(item.Original.ImgUrl)" width="64" />
}
}
}
else if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Preview)
{
if (item.Original.CalcEnabled)
{
if (item.Original.Envir == EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW)
{
<img class="@cssReqPend(item.Original.HasPendReq) img-fluid image-hover-pop p-1" src="@imgSrc(item.Original.ImgUrl)" width="48" @onclick="() => ReqEditRow()" title="Edit Item" />
}
else
{
<img class="@cssReqPend(item.Original.HasPendReq) img-fluid image-hover-pop" src="@imgSrc(item.Original.ImgUrl)" width="64" @onclick="() => ReqEditRow()" title="Edit Item" />
}
}
else
{
if (!isNote)
{
<img class="img-fluid p-1" src="@imgSrc(item.Original.ImgUrl)" width="48" @onclick="() => ReqEditRow()" />
}
}
}
</td>
<td class="align-top">
<div class="align-content-center">
<ul class="list-group">
@* <li class="list-group-item d-flex justify-content-between align-items-start align-items-center px-2 py-1 active">
@item.Original.Note
</li> *@
<li class="list-group-item d-flex justify-content-between align-items-start align-items-center px-2 py-1">
<div class="fw-bold">@item.Original.OrderRowUID</div>
@if (ShowBom(item.Original))
{
@if (CurrEditMode == EditMode.None)
{
<button class="btn btn-sm btn-primary" @onclick="() => RequestBom(item.Original)" title="Richiesta ricalcolo BOM">
BOM <i class="fa-solid fa-arrow-right-arrow-left pe-2"></i>
@if (item.Original.AwaitBom)
{
<span class="text-warning spinner-grow spinner-grow-sm" aria-hidden="true"></span>
}
</button>
}
else
{
<button class="btn btn-sm btn-secondary disabled">
BOM <i class="fa-solid fa-arrow-right-arrow-left pe-2"></i>
@if (item.Original.AwaitBom)
{
<span class="text-warning spinner-grow spinner-grow-sm" aria-hidden="true"></span>
}
</button>
}
}
</li>
@if (item.Original.Envir != EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW || !string.IsNullOrEmpty(item.Original.FileName))
{
<li class="list-group-item d-flex justify-content-between align-items-start px-2 py-1 small">
<div class="mx-0">
<div class="">@item.Original.FileName</div>
</div>
<span class="small">@fSize(item.Original.FileSize)</span>
</li>
}
<li class="list-group-item d-flex justify-content-between align-items-start px-2 py-1 small">
<button class="btn btn-sm btn-warning" @onclick="()=>DoGenFabbisogni(item.Original)"><i class="fa-solid fa-basket-shopping"></i></button>
</li>
</ul>
</div>
</td>
@if (CurrEditMode == EditMode.RecData && EditRecord != null && EditRecord.OrderRowID == item.Original.OrderRowID)
{
if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="align-top">
<div class="input-group align-content-center">
<input class="form-control w-100" style="width: 16rem;" type="text" @bind="@item.Original.Note" />
</div>
</td>
}
<td class="text-end align-top">
<input class="form-control text-end" style="width: 4rem;" type="number" @bind="@item.Original.Qty" />
</td>
}
else
{
if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="align-top">@item.Original.Note</td>
}
<td class="text-center align-top fs-4">
<b>@item.Original.Qty</b>
</td>
}
@if (DisplayMode != EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-center align-top fs-4" title="@(item.WorkLoad?.ListMachinesJoin ?? "")">
<span class="px-2">
@(item.WorkLoad?.NumMachines ?? 0)
</span>
@*@if (@item.WorkLoad.Workable)
{
<i class="fa-solid fa-thumbs-up text-success"></i>
}
else
{
<i class="fa-solid fa-thumbs-down text-danger"></i>
} *@
</td>
}
<td class="text-center align-top text-nowrap">
<div class="fw-bold fs-4" title="# Totale Prodotti">
@($"{item.Original.ProdItemQtyTot:N0}")
</div>
</td>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-end text-nowrap align-top">
<div class="fw-bold" title="Prezzo Finito">
@if (!(item.Original.BomOk && item.Original.ItemOk))
{
<span class="text-danger me-2" title=""><i class="fa-solid fa-triangle-exclamation"></i></span>
}
@if (item.Original.AwaitPrice)
{
<span class="text-warning spinner-grow spinner-grow-sm" aria-hidden="true"></span>
}
@($"{item.Original.UnitPrice:C2}")
</div>
<div class="small text-secondary" title="RockBottom Price">(@item.Original.UnitCost.ToString("C2"))</div>
</td>
}
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-center align-top">
@if (!string.IsNullOrEmpty(item.Original.ItemBOM))
{
<div>
<button class="btn btn-sm btn-info" title="Cambio materiali assegnati" @onclick="() => DoSwapMat(item.Original)"><i class="fa-solid fa-arrow-right-arrow-left"></i></button>
</div>
}
</td>
<td class="text-center align-top">
@if (!string.IsNullOrEmpty(item.Original.ItemSteps))
{
<button class="btn btn-sm btn-info" title="Verifica Ciclo/Fasi di Lavoro" @onclick="() => DoSwapJobCycle(item.Original)"><i class="fa-solid fa-arrow-right-arrow-left"></i></button>
}
</td>
}
<td class="text-center align-top text-nowrap">
@if (item.WorkLoad != null)
{
if (item.WorkLoad.NumKo > 0)
{
<button class="btn btn-lg btn-danger shadow w-100" @onclick="() => ShowWLD(item, EditMode.WorkLoadDetailTag)">
<span class="fw-bold px-1" title="# Pezzi KO">
@($"{item.WorkLoad.NumKo:N0}")
</span>
<i class="fa-solid fa-thumbs-down"></i>
</button>
}
else if (item.WorkLoad.NumOkVin > 0)
{
<button class="btn btn-lg btn-primary shadow w-100" @onclick="() => ShowWLD(item, EditMode.WorkLoadDetailTag)">
<span class="fw-bold px-1" title="# Pezzi Vinc">
@($"{item.WorkLoad.NumOkVin:N0}")
</span>
</button>
}
else if (item.WorkLoad.NumOk > 0)
{
<button class="btn btn-lg btn-success shadow w-100" @onclick="() => ShowWLD(item, EditMode.WorkLoadDetailTag)">
<span class="fw-bold px-1" title="# Pezzi OK">
@($"{item.WorkLoad.NumOk:N0}")
</span>
<i class="fa-solid fa-thumbs-up"></i>
</button>
}
}
</td>
<td class="text-end text-nowrap align-top" title="Tempi Stimati">
@if (item.WorkLoad != null)
{
<button class="btn btn-lg btn-primary shadow w-100" @onclick="() => ShowWLD(item, EditMode.WorkLoadDetailTime)">
@FormatDatetime(item.WorkLoad.TotMaxTime)
</button>
}
else
{
<button class="btn btn-lg btn-secondary disabled w-100">???</button>
}
</td>
}
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-end align-top">
@if (CurrEditMode == EditMode.RecData && EditRecord != null && EditRecord.OrderRowID == item.Original.OrderRowID)
{
<button class="btn btn-sm btn-warning" title="Annulla Modifiche" @onclick="DoCancel"><i class="fa-solid fa-ban"></i></button>
}
else
{
<button class="btn btn-sm btn-danger" title="Eliminazione riga" @onclick="() => DoDelete(item.Original)"><i class="fa-solid fa-trash"></i></button>
}
</td>
}
</tr>
}
</tbody>
<tfoot>
<tr class="table-success">
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td colspan="4"></td>
}
else
{
<td colspan="2"></td>
}
@if (DisplayMode != EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-center">@($"{GrandTotQty:N0}")</td>
}
<td colspan="1"></td>
<td class="text-center">@($"{GrandTotNumItems:N0}")</td>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td class="text-end">
@($"{GrandTotPrice:C2}")
<div class="small text-secondary" title="RockBottom Price">(@($"{GrandTotCost:C2}"))</div>
</td>
<td colspan="2"></td>
}
<td class="text-center text-nowrap">
<span class="text-success">@GrandTotNumOk</span> | <span class="text-primary">@GrandTotNumOkVin</span> | <span class="text-danger">@GrandTotNumKo</span>
</td>
<td class="text-center fs-5">
@FormatDatetime(GrandTotMaxTime)
</td>
@if (DisplayMode == EgwCoreLib.Lux.Core.Enums.DisplayMode.Edit)
{
<td></td>
}
</tr>
</tfoot>
</table>
}
</div>
</div>
}
@if (EditRecord != null)
{
if (CurrEditMode == EditMode.BOM)
{
<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">
<div class="row w-100">
<div class="col-4 fs-3">
Materiali (BOM)
</div>
<div class="col-4 text-center text-bg-secondary bg-gradient border border-2 rounded">
<div class="fw-bold">@EditRecord.Note</div>
<small class="small">@EditRecord.OrderRowUID</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
</button>
<div class="form-check form-switch small" title="Abilita editing massivo">
<input class="form-check-input" type="checkbox" role="switch" @bind="enableMassEdit">
<label class="form-check-label">Mass Edit</label>
</div>
</div>
</div>
</div>
<div class="modal-body">
<h2> fix edit BOM da ordine</h2>
@* <EditBom CurrRowRec="@EditRecord" MassEdit="enableMassEdit" BomList="CurrBomList" EC_Updated="UpdateBom"></EditBom> *@
</div>
</div>
</div>
</div>
}
else if (CurrEditMode == EditMode.JobCycle)
{
<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 row modal-title">
<div class="col-4 fs-3">
Lavorazioni (Cicli)
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">@EditRecord.Note</div>
<small class="small">@EditRecord.OrderRowUID</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
</button>
</div>
</div>
<div class="modal-body">
<EditJob></EditJob>
</div>
</div>
</div>
</div>
}
}
else if (WorkLoadRecord != null)
{
if (CurrEditMode == EditMode.WorkLoadDetailTime)
{
<TimeEstim DetailRecord="WorkLoadRecord" OrderRowRecord="SelRecord" AllProdGroup="ListProdAssign" EC_ReRunReq="ReRunJob" EC_ClosePopup="ClosePopup" EC_RunBalance="ReqBalance" EC_DirectAssign="DirectAssign" EC_ResetAssign="ResetAssign"></TimeEstim>
}
else if (CurrEditMode == EditMode.WorkLoadDetailTag)
{
<PartStatus DetailRecord="@WorkLoadRecord" EC_ReRunReq="ReRunJob" EC_ClosePopup="ClosePopup"></PartStatus>
}
@* else if (CurrEditMode == EditMode.DetailOkVin)
{
<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 row modal-title">
<div class="col-4 fs-3">
Elenco Pezzi KO
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Vincolated Parts: @WorkLoadRecord.NumKo</div>
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
</button>
</div>
</div>
<div class="modal-body">
<div class="row gx-2">
<p>lista pezzi vincolati</p>
</div>
</div>
</div>
</div>
</div>
}
else if (CurrEditMode == EditMode.DetailKO)
{
<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 row modal-title">
<div class="col-4 fs-3">
Elenco Pezzi KO
</div>
<div class="col-4 text-center border border-2 rounded">
<div class="fw-bold">Unworkable Parts: @WorkLoadRecord.NumKo</div>
<small class="small">@WorkLoadRecord.ListMachinesJoin</small>
</div>
<div class="col-4 text-end fs-4">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close" @onclick="ClosePopup">
</button>
</div>
</div>
<div class="modal-body">
<div class="row gx-2">
@foreach (var item in WorkLoadRecord.ListUnWorkable)
{
<div class="col-2">
<div class="alert alert-danger p-1 mb-2 text-center align-content-center">@item</div>
</div>
}
</div>
</div>
</div>
</div>
</div>
} *@
}
<BootstrapModal @ref=Modal Title=@mTitle Message=@mMessage Mode="BootstrapModal.ModalMode.Confirm" UserOptions=@modalOpt></BootstrapModal>