Spaces:
Running
Running
| @page | |
| @using BakeryErp.Infrastructure.Database | |
| @using BakeryErp.Infrastructure.Repositories | |
| @model TransfersModel | |
| @{ | |
| ViewData["Title"] = "中央廚房調撥"; | |
| } | |
| <header class="page-header"> | |
| <div> | |
| <p class="eyebrow">中央廚房調撥</p> | |
| <h1>門市叫貨、備貨、出庫與收貨</h1> | |
| </div> | |
| <a class="button-link" href="/">返回總覽</a> | |
| </header> | |
| @if (!string.IsNullOrWhiteSpace(Model.Message)) | |
| { | |
| <div class="notice success">@Model.Message</div> | |
| } | |
| @if (!string.IsNullOrWhiteSpace(Model.ErrorMessage)) | |
| { | |
| <div class="notice error">@Model.ErrorMessage</div> | |
| } | |
| <section class="metrics compact"> | |
| <article> | |
| <span>調撥單數</span> | |
| <strong>@Model.Report.OrderCount</strong> | |
| </article> | |
| <article> | |
| <span>門市叫貨</span> | |
| <strong>@Model.Report.StoreRequestedCount</strong> | |
| </article> | |
| <article> | |
| <span>已備貨</span> | |
| <strong>@Model.Report.PreparedCount</strong> | |
| </article> | |
| <article> | |
| <span>配送中</span> | |
| <strong>@Model.Report.InTransitCount</strong> | |
| </article> | |
| <article> | |
| <span>差異數量</span> | |
| <strong>@Model.Report.DifferenceQuantityTotal.ToString("N0")</strong> | |
| </article> | |
| </section> | |
| <section class="form-panel"> | |
| <h2>@(Model.Form.Id == Guid.Empty ? "門市叫貨" : "編輯調撥單")</h2> | |
| <form method="post" class="data-form"> | |
| <input type="hidden" asp-for="Form.Id" /> | |
| <div class="field"> | |
| <label asp-for="Form.TransferNumber">調撥單號</label> | |
| <input asp-for="Form.TransferNumber" placeholder="例如 TRF-20260525-002" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.StoreName">叫貨門市</label> | |
| <input asp-for="Form.StoreName" list="storeOptions" placeholder="例如 直營一店" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="RequestDateText">叫貨日期</label> | |
| <input asp-for="RequestDateText" type="date" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.FromWarehouseName">出貨倉</label> | |
| <input asp-for="Form.FromWarehouseName" list="warehouseOptions" placeholder="中央廚房主倉" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.ToWarehouseName">收貨倉</label> | |
| <input asp-for="Form.ToWarehouseName" list="warehouseOptions" placeholder="直營一店倉" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.ItemSku">品項代號</label> | |
| <input asp-for="Form.ItemSku" list="itemSkuOptions" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.ItemName">品項名稱</label> | |
| <input asp-for="Form.ItemName" list="itemNameOptions" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.RequestedQuantity">叫貨數量</label> | |
| <input asp-for="Form.RequestedQuantity" type="number" min="0" step="0.01" /> | |
| </div> | |
| <div class="field"> | |
| <label asp-for="Form.Unit">單位</label> | |
| <input asp-for="Form.Unit" list="unitOptions" placeholder="kg / 個 / 箱" /> | |
| </div> | |
| <div class="field wide"> | |
| <label asp-for="Form.Note">備註</label> | |
| <textarea asp-for="Form.Note" rows="3"></textarea> | |
| </div> | |
| <div class="form-actions"> | |
| <button class="primary-button" type="submit" asp-page-handler="Save">儲存叫貨單</button> | |
| <a class="secondary-button" href="/Transfers">清空表單</a> | |
| </div> | |
| <datalist id="storeOptions"> | |
| @foreach (var store in Model.StoreOptions) | |
| { | |
| <option value="@store.Value">@store.Label</option> | |
| } | |
| </datalist> | |
| <datalist id="warehouseOptions"> | |
| @foreach (var warehouse in Model.WarehouseOptions) | |
| { | |
| <option value="@warehouse.Value">@warehouse.Label</option> | |
| } | |
| </datalist> | |
| <datalist id="itemSkuOptions"> | |
| @foreach (var item in Model.ItemOptions) | |
| { | |
| <option value="@item.Sku">@item.Label</option> | |
| } | |
| </datalist> | |
| <datalist id="itemNameOptions"> | |
| @foreach (var item in Model.ItemOptions) | |
| { | |
| <option value="@item.Name">@item.Label</option> | |
| } | |
| </datalist> | |
| <datalist id="unitOptions"> | |
| @foreach (var unit in Model.ItemOptions.Select(item => item.Unit).Distinct()) | |
| { | |
| <option value="@unit"></option> | |
| } | |
| </datalist> | |
| </form> | |
| </section> | |
| <section class="table-panel"> | |
| <div class="section-title"> | |
| <h2>中央廚房調撥清單</h2> | |
| <span>@Model.Orders.Count 筆</span> | |
| </div> | |
| <div class="table-wrap"> | |
| <table> | |
| <thead> | |
| <tr> | |
| <th>狀態</th> | |
| <th>調撥單號</th> | |
| <th>門市</th> | |
| <th>品項</th> | |
| <th>叫貨</th> | |
| <th>備貨</th> | |
| <th>出庫</th> | |
| <th>收貨</th> | |
| <th>差異</th> | |
| <th>操作</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| @foreach (var order in Model.Orders) | |
| { | |
| <tr> | |
| <td> | |
| <span class="badge @Model.GetStatusClass(order.Status)"> | |
| @TransferRepository.GetStatusName(order.Status) | |
| </span> | |
| </td> | |
| <td>@order.TransferNumber</td> | |
| <td>@order.StoreName</td> | |
| <td>@order.ItemName</td> | |
| <td>@order.RequestedQuantity.ToString("N2") @order.Unit</td> | |
| <td>@order.PreparedQuantity.ToString("N2")</td> | |
| <td>@order.ShippedQuantity.ToString("N2")</td> | |
| <td>@order.ReceivedQuantity.ToString("N2")</td> | |
| <td>@order.DifferenceQuantity.ToString("N2")</td> | |
| <td class="row-actions"> | |
| @if (order.Status is LocalTransferStatus.StoreRequested or LocalTransferStatus.Prepared) | |
| { | |
| <a class="small-link" href="/Transfers?editId=@order.Id">編輯</a> | |
| } | |
| @if (order.Status == LocalTransferStatus.StoreRequested) | |
| { | |
| <form method="post" class="inline-form"> | |
| <input type="hidden" name="id" value="@order.Id" /> | |
| <input class="mini-input" type="number" name="preparedQuantity" value="@order.RequestedQuantity" min="0" step="0.01" /> | |
| <button class="text-button" type="submit" asp-page-handler="Prepare">備貨</button> | |
| </form> | |
| } | |
| @if (order.Status == LocalTransferStatus.Prepared) | |
| { | |
| <form method="post"> | |
| <input type="hidden" name="id" value="@order.Id" /> | |
| <button class="text-button" type="submit" asp-page-handler="Ship">出庫</button> | |
| </form> | |
| } | |
| @if (order.Status == LocalTransferStatus.InTransit) | |
| { | |
| <form method="post" class="inline-form"> | |
| <input type="hidden" name="id" value="@order.Id" /> | |
| <input class="mini-input" type="number" name="receivedQuantity" value="@order.ShippedQuantity" min="0" step="0.01" /> | |
| <button class="text-button" type="submit" asp-page-handler="Receive">收貨</button> | |
| </form> | |
| } | |
| @if (order.Status is not LocalTransferStatus.Completed and not LocalTransferStatus.Cancelled) | |
| { | |
| <form method="post"> | |
| <input type="hidden" name="id" value="@order.Id" /> | |
| <button class="text-button" type="submit" asp-page-handler="Cancel">取消</button> | |
| </form> | |
| } | |
| </td> | |
| </tr> | |
| } | |
| </tbody> | |
| </table> | |
| </div> | |
| </section> | |