diff --git a/CutList.Web/Components/App.razor b/CutList.Web/Components/App.razor new file mode 100644 index 0000000..f81a386 --- /dev/null +++ b/CutList.Web/Components/App.razor @@ -0,0 +1,21 @@ + + + +
+ + +1D Bin Packing Optimization for Material Cutting
+ +Create and manage cut list projects. Add parts and stock bins, then optimize to minimize waste.
+ Go to Projects +Manage material types (tube, bar, angle, etc.) with their shapes and sizes.
+ Manage Materials +Track suppliers and their available stock lengths for quick project setup.
+ Manage Suppliers +Configure cutting tools with their kerf widths for accurate waste calculations.
+ Manage Tools +Loading...
+} +else +{ +Loading...
+} +else if (materials.Count == 0) +{ +| Shape | +Size | +Description | +Actions | +
|---|---|---|---|
| @material.Shape | +@material.Size | +@material.Description | ++ Edit + + | +
Loading...
+} +else +{ +No parts added yet.
+ } + else + { +| Name | +Length | +Qty | ++ |
|---|---|---|---|
| @part.Name | +@ArchUnits.FormatFromInches((double)part.LengthInches) | +@part.Quantity | ++ + + | +
No stock bins added yet.
+ } + else + { +| Length | +Qty | +Priority | ++ |
|---|---|---|---|
| @ArchUnits.FormatFromInches((double)bin.LengthInches) | +@(bin.Quantity == -1 ? "Unlimited" : bin.Quantity.ToString()) | +@bin.Priority | ++ + + | +
Loading...
+} +else if (projects.Count == 0) +{ +| Name | +Material | +Cutting Tool | +Last Modified | +Actions | +
|---|---|---|---|---|
| @project.Name | +@(project.Material?.DisplayName ?? "-") | +@(project.CuttingTool?.Name ?? "-") | +@((project.UpdatedAt ?? project.CreatedAt).ToLocalTime().ToString("g")) | ++ Edit + Optimize + + + | +
Loading...
+} +else if (project == null) +{ +Optimization Results
+The following @packResult.ItemsNotUsed.Count item(s) could not be placed (probably too long for available stock):
+Stock Bars
+Total Pieces
+Total Waste
+Efficiency
+Loading...
+} +else +{ +No stock lengths configured yet.
+ } + else + { +| Material | +Length | +Price | +Actions | +
|---|---|---|---|
| @stock.Material.DisplayName | +@ArchUnits.FormatFromInches((double)stock.LengthInches) | +@(stock.Price.HasValue ? stock.Price.Value.ToString("C") : "-") | ++ + + | +
Loading...
+} +else if (suppliers.Count == 0) +{ +| Name | +Contact Info | +Notes | +Actions | +
|---|---|---|---|
| @supplier.Name | +@supplier.ContactInfo | +@TruncateText(supplier.Notes, 50) | ++ Edit + + | +
Loading...
+} +else +{ + @if (showForm) + { +| Name | +Kerf Width | +Default | +Actions | +
|---|---|---|---|
| @tool.Name | +@FormatKerf(tool.KerfInches) | ++ @if (tool.IsDefault) + { + Default + } + | ++ + + | +
| Qty | +Length | +Label | +
|---|---|---|
| @group.Count | +@ReportService.FormatLength(group.Length) | +@group.Name | +
@Project.Notes
+