Locked jobs show a warning banner with unlock button on the Edit page.
All form fields, part/stock add/edit/delete buttons are disabled via
fieldset when locked. Jobs Index shows a lock icon badge next to locked
job numbers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add PurchaseItem entity with status tracking (Pending/Ordered/Received),
supplier and job relationships. Add LockedAt timestamp to Job entity for
controlling editability after materials are ordered. Includes
PurchaseItemService (CRUD + bulk create), JobService Lock/Unlock methods,
EF Core migrations, and DI registration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The print CSS was hiding all .card elements, which contained the
actual results content. Replaced with compact print-friendly styles:
summary cards display as an inline row, redundant stock summary is
hidden, and spacing is tightened throughout.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Integrate MaterialFilter component for filtering by shape,
type, grade, and free-text search. Pagination now reflects
filtered results.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use Bootstrap Icons for Edit, Delete, Copy, and Optimize actions
to reduce table column widths and improve visual consistency.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>