Commit Graph
100 Commits
Author SHA1 Message Date
aj f71cf8ab0a fix: remove debug TEST123 text from Stock Items heading 2026-08-01 10:37:00 -04:00
aj fd6e8d632c refactor: remove QuantityOnHand display from stock and job UI
First step of removing inventory quantity tracking (see
docs/superpowers/specs/2026-08-01-remove-inventory-quantity-tracking-design.md).
UI no longer shows on-hand counts or offers transaction entry; the
underlying field/service methods are removed in follow-up commits.
2026-08-01 10:32:12 -04:00
ajandClaude Sonnet 5 69c993fcb2 docs: add design spec for removing inventory quantity tracking
Users need to enter parts/stock and get results without a disconnected
inventory system to manage; StockItem.QuantityOnHand and StockTransaction
today aren't read or written by the job workflow anywhere except an
auto-discovery fallback that silently assumes unlimited purchasing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 10:12:56 -04:00
aj 7b210f518b docs: remove last stale StockItemService pricing reference; ignore playwright-mcp logs
Build CutList image / build-and-push (push) Successful in 1m11s
CLAUDE.md still listed GetAverageCostAsync/GetLastPurchasePriceAsync, which
Task 1 of the vendor-data removal already deleted. Also stop tracking the
Playwright MCP browser session logs left behind by Task 10's smoke test.
2026-08-01 09:33:53 -04:00
aj 3244e15593 fix: address final review findings in vendor-data removal (catalog save, job locking, DB collision, docs) 2026-08-01 09:32:16 -04:00
aj b77d0d971d feat: remove supplier MCP tools, add plain add_stock convenience tool 2026-08-01 08:55:49 -04:00
aj f75c205bc5 chore: strip vendor data from oneals-catalog.json seed file 2026-08-01 08:52:25 -04:00
aj 1b4d5f76a8 feat: remove Supplier/SupplierOffering/PurchaseItem entities and migrate schema 2026-08-01 08:49:05 -04:00
ajandClaude Sonnet 5 41944638c6 feat: drop supplier import/export from the catalog format
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-01 08:45:21 -04:00
aj 063c844310 feat: delete SupplierService, PurchaseItemService, and their API surface 2026-08-01 08:41:28 -04:00
aj 597181bd78 feat: replace Add to Order List with a direct Lock Job action 2026-08-01 08:38:20 -04:00
aj 8d6ada35e5 feat: remove Suppliers and Orders pages and nav entries 2026-08-01 08:34:47 -04:00
aj b51d936b78 fix: make stock item length editable and drop vendor UI from Stock Edit page 2026-08-01 08:31:40 -04:00
aj e7248be9a4 refactor: strip supplier/pricing from StockItemService and stock-items API 2026-08-01 08:27:55 -04:00
aj 06f0c2032d chore: ignore .superpowers/ SDD scratch workspace directory
Keeps subagent-driven-development's per-plan ledger/briefs/reports out
of version control.
2026-08-01 08:24:47 -04:00
aj 9296bea0bc docs: add implementation plan for removing vendor/supplier data
Ten-task plan ordered so the build stays green at each step: strip
consumers first (StockItemService/DTOs/Controller, Stock/Edit.razor,
Suppliers/Orders pages, Jobs/Edit.razor, CatalogService), delete the
now-unused services, then remove the entities and migrate the schema
last. Closes with CutList.Mcp cleanup and a manual smoke test.
2026-07-31 22:56:41 -04:00
aj 4e874df22f docs: add design spec for removing vendor/supplier data from CutList
Scopes out Supplier, SupplierOffering, PurchaseItem, and cost tracking
as out-of-scope for a 1D nesting optimizer, while fixing the actual
reported bug (read-only stock length field) and keeping a stripped
quantity-only transaction log.
2026-07-31 22:44:13 -04:00
ajandClaude Sonnet 5 7574476d7f feat: add Docker deployment for CutList.Web and update CLAUDE.md docs
Adds a Dockerfile and Gitea Actions workflow to build/push the
CutList.Web image to the registry on push to master, enabling
containerized deployment to forge. Also updates CLAUDE.md to reflect
the CutList.Mcp project, REST API surface, and CatalogService, and
tweaks the cut-length badge styling in the job editor.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 18:50:06 -04:00
ajandClaude Opus 4.6 48b8936266 feat: remove source column from cut list and increase cut length text size
Drop the Stock/Purchase source badge column from the results cut list
table (purchase list card remains). Bump cut length badges to fs-6 for
better readability.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:08:26 -04:00
ajandClaude Opus 4.6 700aa726fc fix: update MCP server base URL to port 5270 and suppress logging
Point API client at the deployed service port and clear logging
providers to prevent interference with MCP stdio transport.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:04:32 -04:00
ajandClaude Opus 4.6 2f2b9f71e1 feat: show inches value alongside formatted length in job editor
Display raw inches in parentheses next to the architectural format
in both Parts and Stock tables for easier reference.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:04:31 -04:00
ajandClaude Opus 4.6 65e0247a7d chore: default OpenFirewall to true in deploy script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:48:41 -04:00
ajandClaude Opus 4.6 545678c30f feat: add error handling to job editor and Error page
Wrap job editor initialization in try/catch to display errors instead of
crashing the circuit. Make LoadSavedResults async. Add a simple Error
page for the production exception handler.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:48:36 -04:00
ajandClaude Opus 4.6 b5bef23c1d refactor: migrate to IDbContextFactory and Windows Service hosting
Replace AddDbContext with AddDbContextFactory for Blazor Server circuit
safety — each service method now creates a short-lived DbContext via the
factory. Configure Windows Service hosting with ContentRootPath and
remove HSTS/HTTPS redirect for reverse-proxy deployment.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:48:30 -04:00
ajandClaude Opus 4.6 f66fd3eaa7 chore: upgrade solution from .NET 8 to .NET 10
Update all project TFMs to net10.0, EF Core to 10.0.4, add
Microsoft.Extensions.Hosting.WindowsServices, and suppress WFO1000
warning for WinForms project.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:48:23 -04:00
ajandClaude Opus 4.6 7d3c92226c refactor: replace generic catalog DTOs with shape-typed DTOs for type safety
Replace the single CatalogMaterialDto + CatalogDimensionsDto (bag of nullable
fields) with per-shape DTOs that have strongly-typed dimension properties.
Catalog JSON now groups materials by shape key instead of a flat array.
Delete the old SeedController/SeedDataDtos (superseded by CatalogService).
Scraper updated to emit the new grouped format, resume by default, and
save items incrementally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 15:48:35 -05:00
ajandClaude Opus 4.6 c31769a746 chore: standardize deploy script to match template
Remove unused $PublishTimeoutSeconds param. Add sc.exe description for
service metadata.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 08:14:29 -05:00
ajandClaude Opus 4.6 f04bf02c42 feat: Migrate MaterialDimensions from TPH to TPC and add Alro catalog seeding
Switch MaterialDimensions inheritance from TPH (single table with discriminator)
to TPC (table per concrete type) with individual tables per shape. Add Swagger
for dev API exploration, expand SeedController with export/import endpoints and
Alro catalog JSON dataset, and include Python scraper for Alro catalog PDFs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 14:23:01 -05:00
ajandClaude Opus 4.6 dac2833dd1 chore: Remove ExportData script
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 01:01:22 -05:00
ajandClaude Opus 4.6 a226a1f652 feat: Redesign job editor with multi-row parts and unified cut list results
- Part form now supports adding multiple parts at once via a table with
  add/remove row controls; edit mode stays single-row
- Shape and size dropdowns lock when editing an existing part
- Results tab replaces split in-stock/purchase cards with a unified table
  per material showing source badges (Stock/Purchase) for each bar
- New Purchase List card summarizes materials to order with quantities
- Print styles use repeating thead headers per material for multi-page
  cut lists; large cards can now break across pages

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 01:01:01 -05:00
ajandClaude Opus 4.6 5000021193 feat: Add catalog import/export API endpoints
Replace the standalone ExportData console app and hardcoded SeedController
with generic GET /api/catalog/export and POST /api/catalog/import endpoints.
Import uses upsert semantics with per-item error handling, preserving
existing inventory quantities.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 00:09:53 -05:00
ajandClaude Opus 4.6 02e936febb feat: Add database export script and O'Neal Steel catalog dataset
Export tool queries all active materials, stock items, suppliers, and
offerings from the database and writes a clean JSON file for version
control. Includes 616 materials and 810 stock items with part numbers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 22:34:35 -05:00
ajandClaude Opus 4.6 e13f876da6 feat: Add MCP tools for job management and optimization
Add JobTools class exposing MCP tools for:
- Job CRUD (list, get, create, update, delete)
- Part management (add single, batch add, delete)
- Stock assignments (add, delete)
- Bin packing optimization with kerf override
- Cutting tool listing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 22:20:59 -05:00
ajandClaude Opus 4.6 1f3eb67eb7 feat: Add job and cutting tool API client methods
Add HTTP client methods for job CRUD, parts, stock, packing, and
cutting tool endpoints. Includes response DTOs for all job-related
API responses.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 22:20:53 -05:00
ajandClaude Opus 4.6 2fdf006a8e docs: Update CLAUDE.md with optimization persistence and Results tab
Document new Job entity fields, serialization DTOs, JobService
optimization methods, and merged Results tab in Edit page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:13:12 -05:00
ajandClaude Opus 4.6 eee38a8473 chore: Add Windows Service deployment script
PowerShell script to publish CutList.Web, register as a Windows
Service with auto-restart on failure, and optionally open firewall.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:13:05 -05:00
ajandClaude Opus 4.6 59f86c8e79 refactor: Merge Results page into Job Edit as a tab
Move optimization results UI from separate Results.razor page into
the Edit.razor tabbed editor. Results are now loaded from saved JSON
on page load instead of re-running on every visit. Remove the
standalone optimize button from Jobs index.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:12:57 -05:00
ajandClaude Opus 4.6 891b214b29 feat: Add serialization DTOs for optimization results
Add SavedOptimizationResult DTO layer with SerializeResult and
LoadSavedResult methods for JSON round-trip persistence, since
Core types use encapsulated collections that aren't serializable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:12:47 -05:00
ajandClaude Opus 4.6 c5f366a3ef feat: Add optimization result persistence to Job entity
Add OptimizationResultJson and OptimizedAt columns to Job table.
JobService now saves/clears optimization results and auto-clears
stale results when parts, stock, or cutting tool change.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:12:38 -05:00
ajandClaude Opus 4.6 8926d44969 perf: Add lower-bound pruning to ExhaustiveFitEngine
Precompute suffix sums of remaining item volumes and use them
to prune branches that cannot beat the current best solution.
Raises DefaultMaxItems from 20 to 25 (~84ms worst case).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 22:12:28 -05:00
ajandClaude Opus 4.6 c23c92e852 docs: Update CLAUDE.md with CutList.Web entities, services, and pages
Comprehensive rewrite covering all three projects, entity definitions,
service APIs, page routes, shared components, and key patterns including
purchase flow and job locking conventions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 23:03:33 -05:00
ajandClaude Opus 4.6 2586f99c63 feat: Add purchase order flow with Orders pages
Add "Add to Order List" button on Results page that creates PurchaseItems
from optimization results and locks the job. Add Orders Index page with
tabbed view (Pending/Ordered/All), supplier assignment, status
transitions, and MaterialFilter. Add manual order item creation page.
Add Orders link to navigation menu.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 23:03:17 -05:00
ajandClaude Opus 4.6 5f4e36c688 feat: Add job locking UI to Edit and Index pages
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>
2026-02-07 23:02:59 -05:00
ajandClaude Opus 4.6 ed705625e9 feat: Add PurchaseItem entity and job locking data layer
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>
2026-02-07 23:02:40 -05:00
ajandClaude Opus 4.6 1ccdeb6817 fix: Print report showing blank preview and wasted first page
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>
2026-02-07 14:37:13 -05:00
ajandClaude Opus 4.6 69b282aaf3 feat: Add material filtering to Materials and Stock pages
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>
2026-02-07 14:37:04 -05:00
ajandClaude Opus 4.6 f932e8ba13 feat: Add reusable MaterialFilter component
Provides shape, type, grade dropdowns and text search
for filtering material-based list pages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:36:58 -05:00
ajandClaude Opus 4.6 141176cc5d feat: Replace text buttons with icons across all pages
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>
2026-02-07 14:36:51 -05:00
ajandClaude Opus 4.6 3fd354aff0 feat: Add Bootstrap Icons CDN for icon-based UI
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 14:36:44 -05:00
ajandClaude Opus 4.6 b603a4b3e7 chore: Update connection string to SQL Server Express
Switch from localdb to SQLEXPRESS instance with TrustServerCertificate.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 13:46:20 -05:00
ajandClaude Opus 4.6 5468b2748d feat: Add pagination to all list pages
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>
2026-02-07 13:46:12 -05:00
ajandClaude Opus 4.6 8ed10939d4 feat: Add reusable Pager component for list pagination
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>
2026-02-07 13:45:41 -05:00
ajandClaude Opus 4.6 2a94ad63cb fix: Correct indentation in MaterialService
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 23:17:58 -05:00
ajandClaude Opus 4.6 b0a9d7fdcc docs: Add descriptive intro text to index pages
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>
2026-02-05 23:17:53 -05:00
ajandClaude Opus 4.6 f20770d03e style: Update UI with warmer, softer color palette
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>
2026-02-05 23:17:48 -05:00
ajandClaude Opus 4.6 4aec4c2275 feat: Add bulk stock import modal to job editor
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>
2026-02-05 23:17:42 -05:00
ajandClaude Opus 4.6 261f64a895 chore: Remove MCP server build artifacts from repo
These compiled binaries and runtime files should not be tracked in source control.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-05 23:17:36 -05:00
ajandClaude Opus 4.6 9b757acac3 fix: Correct TPH discriminator values and empty MaterialType
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>
2026-02-05 16:54:17 -05:00
ajandClaude Opus 4.6 177affabf0 refactor: Decouple MCP server from direct DB access
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>
2026-02-05 16:54:05 -05:00
ajandClaude Opus 4.6 17f16901ef feat: Add full REST API with controllers, DTOs, and service layer
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>
2026-02-05 16:53:53 -05:00
ajandClaude Opus 4.5 21d50e7c20 fix: Prevent shape change after material creation
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>
2026-02-05 00:19:01 -05:00
ajandClaude Opus 4.5 f723661696 feat: Convert part form to modal dialog and improve material ordering
- 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>
2026-02-05 00:18:56 -05:00
ajandClaude Opus 4.5 c795c129e5 feat: Improve material ordering and default type in MCP tools
- 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>
2026-02-05 00:18:51 -05:00
ajandClaude Opus 4.5 30071469bc chore: Add Claude Code project configuration
Add .claude directory with settings and memory files for
consistent AI-assisted development.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:38:33 -05:00
ajandClaude Opus 4.5 c9a2583f26 feat: Add MCP inventory management tools
Add comprehensive MCP tools for inventory management:
- list_suppliers, add_supplier
- list_materials, add_material, search_materials
- list_stock_items, add_stock_item
- list_supplier_offerings, add_supplier_offering
- add_stock_with_offering (convenience method)

Features:
- Dimension-based material search with tolerance
- Auto-generate size strings from dimensions
- Parse size strings to typed dimensions
- Type/Grade support for material categorization

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:38:27 -05:00
ajandClaude Opus 4.5 0e5b63c557 refactor: Update controllers for new Material model
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>
2026-02-04 23:38:21 -05:00
ajandClaude Opus 4.5 6388e003d3 feat: Update UI for Jobs and enhanced Materials
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>
2026-02-04 23:38:15 -05:00
ajandClaude Opus 4.5 c5da5dda98 feat: Update service layer for new data model
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>
2026-02-04 23:38:06 -05:00
ajandClaude Opus 4.5 21cddb22c7 chore: Remove deprecated Project entities and pages
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>
2026-02-04 23:37:57 -05:00
ajandClaude Opus 4.5 3b036308c8 refactor: Update Material and StockItem entities
Material entity changes:
- Shape property now uses MaterialShape enum
- Add Type (MaterialType) and Grade properties
- Add SortOrder for numeric sorting
- Add Dimensions navigation property (1:1)
- Replace ProjectParts with JobParts collection

StockItem entity changes:
- Add QuantityOnHand for inventory tracking
- Add Notes field
- Add Transactions navigation property

DbContext updates:
- Configure MaterialDimensions TPH inheritance
- Add enum-to-string conversions for MaterialShape and MaterialType
- Configure shared column names for TPH properties
- Add indexes on primary dimension columns
- Update all entity relationships for Job model

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:37:51 -05:00
ajandClaude Opus 4.5 4f6d986dc9 feat: Add material dimensions with typed properties
Implement TPH inheritance for material dimensions:
- MaterialShape enum with display names and parsing
- MaterialType enum (Steel, Aluminum, Stainless, etc.)
- MaterialDimensions base class with derived types per shape
- Auto-generate size strings from typed dimensions
- SortOrder field for numeric dimension sorting

Each shape has specific dimension properties:
- RoundBar: Diameter
- RoundTube: OuterDiameter, Wall
- FlatBar: Width, Thickness
- SquareBar/Tube: Size, Wall
- RectangularTube: Width, Height, Wall
- Angle: Leg1, Leg2, Thickness
- Channel: Height, Flange, Web
- IBeam: Height, WeightPerFoot
- Pipe: NominalSize, Wall, Schedule

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 23:37:43 -05:00
ajandClaude Opus 4.5 254066c989 feat: Add stock transaction tracking system
- 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>
2026-02-04 23:37:31 -05:00
ajandClaude Opus 4.5 ce14dd50cb refactor: Rename Project to Job with enhanced model
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>
2026-02-04 23:37:24 -05:00
ajandClaude Opus 4.5 dfc767320a fix: Improve architectural unit parsing and formatting
- 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>
2026-02-04 23:37:15 -05:00
ajandClaude Opus 4.5 5cc088ea6b feat: Add Stock Items UI and update Supplier offerings
- 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>
2026-02-02 22:32:32 -05:00
ajandClaude Opus 4.5 6797d1e4fd feat: Update service layer for new stock model
- 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>
2026-02-02 22:32:25 -05:00
ajandClaude Opus 4.5 c4fc88f7d2 chore: Add migration for StockItem and SupplierOffering
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>
2026-02-02 22:32:20 -05:00
ajandClaude Opus 4.5 9929d82768 refactor: Replace SupplierStock with StockItem/SupplierOffering model
- 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>
2026-02-02 22:32:14 -05:00
ajandClaude Opus 4.5 0ded77ce8b feat: Add StockItem and SupplierOffering entities
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>
2026-02-02 22:32:07 -05:00
ajandClaude Opus 4.5 8e73d630d5 chore: Change development port to 5009
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:57:13 -05:00
ajandClaude Opus 4.5 079f5b1085 style: Update sidebar color and optimize print layout
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>
2026-02-01 23:57:02 -05:00
ajandClaude Opus 4.5 97fa90357b fix: Minor UI improvements to layout and LengthInput
Removes unnecessary top row link and adds default placeholder to
LengthInput component.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:56:47 -05:00
ajandClaude Opus 4.5 bf6c4764ed feat: Add custom print title JS function
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>
2026-02-01 23:56:37 -05:00
ajandClaude Opus 4.5 ed911a13ba feat: Redesign Results page for multi-material output
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>
2026-02-01 23:56:28 -05:00
ajandClaude Opus 4.5 c99de55fe1 feat: Update Project pages for multi-material parts
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>
2026-02-01 23:56:19 -05:00
ajandClaude Opus 4.5 8b16cbd79f feat: Add stock lengths management UI to Material Edit page
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>
2026-02-01 23:56:06 -05:00
ajandClaude Opus 4.5 cad5ab790a chore: Register API controllers in Program.cs
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:55:57 -05:00
ajandClaude Opus 4.5 f8020549fe feat: Add REST API controllers for materials
Adds MaterialsController with bulk import support and SeedController
for development data seeding.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:55:48 -05:00
ajandClaude Opus 4.5 66ed19a1ac feat: Implement multi-material packing with inventory awareness
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>
2026-02-01 23:55:38 -05:00
ajandClaude Opus 4.5 051b866c6d refactor: Remove stock bin management from ProjectService
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>
2026-02-01 23:55:28 -05:00
ajandClaude Opus 4.5 3d80adbfff feat: Add stock length management to MaterialService
Adds CRUD methods for managing material stock lengths, including
duplicate checking and quantity tracking.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:55:18 -05:00
ajandClaude Opus 4.5 b7b98d4338 chore: Update DbContext for new entity relationships
Updates ApplicationDbContext to configure MaterialStockLength and
revised ProjectPart relationships.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:55:07 -05:00
ajandClaude Opus 4.5 ced272d3e3 feat: Support multi-material project parts
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>
2026-02-01 23:54:59 -05:00
ajandClaude Opus 4.5 35b26e673e feat: Add Customer field to Project entity
Adds a customer name field to projects for better job tracking and
identification on reports.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-01 23:54:48 -05:00
ajandClaude Opus 4.5 cca569ae81 feat: Add MaterialStockLength entity for inventory tracking
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>
2026-02-01 23:54:23 -05:00
ajandClaude Opus 4.5 fa36d82285 feat: Add material shape dropdown and Save As button to MainForm
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>
2026-02-01 21:56:42 -05:00
ajandClaude Opus 4.5 b0c9470bb7 feat: Add cut method and material shape to saved reports
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>
2026-02-01 21:56:33 -05:00
ajandClaude Opus 4.5 9868df162d feat: Add CutList.Web Blazor Server application
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>
2026-02-01 21:56:21 -05:00
ajandClaude Opus 4.5 6db8ab21f4 feat: Improve document management with Save/Save As and keyboard shortcuts
- 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>
2026-02-01 16:20:59 -05:00
ajandClaude Opus 4.5 b19ecf3610 refactor: Redesign nesting engines with pipeline pattern and add exhaustive search
- 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>
2026-02-01 15:16:40 -05:00