Integrate Pager component into Jobs, Materials, Stock, Suppliers,
and Tools index pages with a page size of 25. Handles page
adjustment on delete when the last page becomes empty.
Also removes the Description column from the Materials table.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shared Blazor component with page windowing, ellipsis for large
page counts, and "Showing X-Y of Z" summary text.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds brief explanatory paragraphs to Jobs, Materials, and Stock index
pages to help users understand each section's purpose.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace default Bootstrap grays with warm off-whites and subtle borders.
Adds consistent styling for cards, forms, headings, and tables.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows importing multiple stock items from inventory at once, matching
against materials already in the job's parts list. Includes select
all/none, quantity, and priority controls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix two data issues preventing material loading:
- Update MaterialDimensions DimensionType from class names (e.g.
'AngleDimensions') to configured short names (e.g. 'Angle')
- Set empty Material.Type values to 'Steel' and change column default
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace direct EF Core/DbContext usage in MCP tools with HTTP calls
to the CutList.Web REST API via new ApiClient. Removes CutList.Web
project reference from MCP, adds Microsoft.Extensions.Http instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add controllers for suppliers, stock items, jobs, cutting tools, and
packing. Refactor MaterialsController to use MaterialService with
dimension-aware CRUD, search, and bulk operations. Extract DTOs into
dedicated files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Disable Shape dropdown on existing materials since changing shape would
require completely different dimension properties.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Replace inline part form with Bootstrap modal dialog for better UX
- Add SortOrder to material dropdown ordering in Parts and Stock tabs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add SortOrder as secondary ordering key after Shape across all material
queries (list_materials, search methods)
- Default material type to "Steel" when not specified in add_stock_with_offering
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
MaterialsController:
- Update to use MaterialShape enum
- Add Type and Grade to imports
- Fix display name formatting
SeedController:
- Update seed data to use MaterialShape enum
- Add MaterialType assignments
CuttingTool:
- Add Notes property
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Navigation:
- Rename Projects to Jobs in NavMenu
- Add new icon for multi-material boxes
Home page:
- Update references from Projects to Jobs
Materials pages:
- Add Type and Grade columns to index
- Shape-specific dimension editing with typed inputs
- Error handling with detailed messages
Stock pages:
- Show Shape, Type, Grade, Size columns
- Display QuantityOnHand with badges
Shared components:
- LengthInput: Add nullable binding mode for optional dimensions
- LengthInput: Format on blur for better UX
- CutListReport: Update for Job model references
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
MaterialService:
- Include Dimensions in queries
- Add CreateWithDimensionsAsync for typed dimension creation
- Add UpdateWithDimensionsAsync with optional size regeneration
- Add dimension search methods by value with tolerance
- Sort by SortOrder for numeric ordering
StockItemService:
- Add stock transaction methods (AddStock, UseStock, AdjustStock)
- Add GetAverageCost and GetLastPurchasePrice for costing
- Add GetTransactionHistory for audit
CutListPackingService:
- Update to use JobPart instead of ProjectPart
- Support job-specific stock (JobStock) with priorities
- Fall back to all available stock when no job stock configured
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove files superseded by the Job model:
- Project, ProjectPart entities (replaced by Job, JobPart, JobStock)
- ProjectService (replaced by JobService)
- Projects UI pages (replaced by Jobs pages)
- MaterialStockLength entity (consolidated into StockItem)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add StockTransaction entity for audit trail
- Track received, used, adjusted, scrapped, and returned stock
- Include unit price tracking for cost analysis
- Link transactions to jobs and suppliers
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Rename the Project concept to Job for clarity:
- Add Job, JobPart, JobStock entities
- JobStock supports both inventory stock and custom lengths
- Add JobNumber field for job identification
- Add priority-based stock allocation for cut optimization
- Include Jobs UI pages (Index, Edit, Results)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add fallback to parse plain decimal inches without unit symbols
- Fix fraction-only display to show "1/2" instead of "0-1/2"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add Stock Items index page listing all stock items
- Add Stock Items edit page with supplier offerings management
- Update Suppliers edit page to manage offerings (select from stock
items instead of material+length)
- Add Stock Items navigation link to sidebar
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add StockItemService for CRUD operations on stock items
- Update SupplierService to manage SupplierOfferings instead of
SupplierStock (GetOfferingsForSupplierAsync, AddOfferingAsync, etc.)
- Update CutListPackingService to use StockItems for available lengths
- Register StockItemService in Program.cs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Migration drops SupplierStocks table and creates StockItems and
SupplierOfferings tables with appropriate indexes and foreign keys.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove SupplierStock entity
- Update Material navigation from SupplierStocks to StockItems
- Update Supplier navigation from Stocks to Offerings
- Update ApplicationDbContext with new DbSets and configurations
- Add unique constraints: StockItem(MaterialId, LengthInches) and
SupplierOffering(SupplierId, StockItemId)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduce new data model that separates stock catalog (StockItem) from
supplier-specific pricing/catalog info (SupplierOffering). StockItem
represents a Material+Length combination, while SupplierOffering links
suppliers to stock items with part numbers, descriptions, and pricing.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Changes sidebar gradient to neutral gray and adds compact print styles
for better paper usage when printing reports.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds printWithTitle function to set document title before printing for
better file naming when saving as PDF.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates Results page to display packing results grouped by material,
showing in-stock vs. to-be-purchased breakdown with order summaries.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Redesigns Project Edit with a tabbed interface and adds material
selection (shape -> size) when adding parts. Updates Index to show
customer instead of material.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Extends the Material Edit page with a side panel to manage available
stock lengths, including quantity tracking and CRUD operations.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds MaterialsController with bulk import support and SeedController
for development data seeding.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Refactors CutListPackingService to:
- Pack parts grouped by material type
- Distinguish between in-stock and to-be-purchased bins
- Use material stock lengths for finite inventory
- Use supplier stock for unlimited purchase options
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Removes project-level stock bin methods since stock is now derived from
material stock lengths. Updates queries to include Material on parts.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds CRUD methods for managing material stock lengths, including
duplicate checking and quantity tracking.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Updates ApplicationDbContext to configure MaterialStockLength and
revised ProjectPart relationships.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Each project part now references its own material, allowing a single
project to use multiple material types. Removes ProjectStockBin entity
since stock is now derived from material stock lengths.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduces a new entity to track available stock lengths per material,
enabling in-stock vs. purchase-needed distinction during optimization.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
UI improvements:
- Add material shape dropdown (Round Tube, Square Tube, Angle, etc.)
- Add Save As toolbar button for saving to a new file
- Simplify toolbar button styling (show text with icons)
- Expose SelectedMaterialShape property for report generation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Include cutting tool name and material shape in the text report output.
This provides better context when reviewing saved cut lists.
Changes:
- BinFileSaver: Add CutMethod and MaterialShape properties
- ResultsForm: Pass cut method and material to file saver
- IMainView: Extend ShowResults with additional parameters
- MainFormPresenter: Use document name for save filename if available
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add a new web-based frontend for cut list optimization using:
- Blazor Server with .NET 8
- Entity Framework Core with MSSQL LocalDB
- Full CRUD for Materials, Suppliers, Projects, and Cutting Tools
- Supplier stock length management for quick project setup
- Integration with CutList.Core for bin packing optimization
- Print-friendly HTML reports with efficiency statistics
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Track file path after save/load so Save doesn't prompt again
- Add Save As (Ctrl+Shift+S) to always prompt for location
- Update window title to show current filename
- Generate incremental default filenames (CutList_1.json, etc.)
- Add keyboard shortcuts: Ctrl+S (Save), Ctrl+O (Open), Ctrl+N (New)
- Enter key in items grid moves to Length column on next row
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Rename Result to PackResult to avoid confusion with Result<T>
- Add PackingRequest as immutable configuration replacing mutable engine state
- Add PackingStrategy enum (AdvancedFit, BestFit, Exhaustive)
- Implement pipeline pattern for composable packing steps
- Rewrite AdvancedFitEngine as stateless using pipeline
- Rewrite BestFitEngine as stateless
- Add ExhaustiveFitEngine with symmetry breaking for optimal solutions
- Tries all bin assignments to find minimum bins
- Falls back to AdvancedFit for >20 items
- Configurable threshold via constructor
- Update IEngine/IEngineFactory interfaces for new pattern
- Add strategy parameter to MCP tools
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>