Skip to content

feat: add piece_count and piece_size fields to BomItem for cut-to-length parts - #12422

Open
amanjain57-gif wants to merge 3 commits into
inventree:masterfrom
amanjain57-gif:feature/bom-cut-to-length-parts
Open

feat: add piece_count and piece_size fields to BomItem for cut-to-length parts#12422
amanjain57-gif wants to merge 3 commits into
inventree:masterfrom
amanjain57-gif:feature/bom-cut-to-length-parts

Conversation

@amanjain57-gif

Copy link
Copy Markdown

Summary

Addresses #10274

Manufacturing BOMs frequently require multiple pieces of a specific size cut from continuous stock (cables, tubing,
structural profiles). Currently the only way to express "10 pieces of 250mm cable" is to enter the total length (2.5m)
as quantity, which loses the piece-count information that purchasing and production need.

Changes

Adds two optional fields to BomItem:

  • piece_count: number of discrete pieces required (default: 1)
  • piece_size: size/length of each piece (e.g. "250 mm")

When piece_size is specified, the total quantity is auto-calculated as piece_count × piece_size, maintaining full
backward compatibility (existing items effectively have piece_count=1 and empty piece_size).

Backend

  • New model fields with migration
  • Updated recalculate_quantity() to compute total from piece_count × piece_size when piece_size is set
  • Added fields to BOM item hash for validation checksum

API

  • Serializer exposes piece_count and piece_size fields

Frontend

  • BOM creation/edit form includes the new fields
  • BOM table shows piece_count and piece_size as optional (hidden by default) columns

Example

A BOM line for "10 pieces of 250mm aluminum profile" (part units: m):

  • piece_count: 10
  • piece_size: "250 mm"
  • Auto-calculated quantity: 2.5 (meters)

This preserves the per-piece information for production while correctly computing total material requirement for
purchasing.

…gth parts

Manufacturing BOMs frequently require multiple pieces of a specific size
cut from continuous stock (cables, tubing, structural profiles). Currently
the only way to express "10 pieces of 250mm cable" is to enter the total
length (2.5m) as quantity, which loses the piece-count information that
purchasing and production need.

This adds two optional fields to BomItem:
- piece_count: number of discrete pieces required (default: 1)
- piece_size: size/length of each piece (e.g. "250 mm")

When piece_size is specified, the total quantity is auto-calculated as
piece_count × piece_size, maintaining full backward compatibility (existing
items effectively have piece_count=1 and empty piece_size).

Changes:
- Backend: new model fields, migration, updated recalculate_quantity()
  logic, hash_fields for BOM validation
- API: serializer exposes piece_count and piece_size
- Frontend: BOM form includes the new fields, BOM table shows them as
  optional columns

Addresses inventree#10274
@netlify

netlify Bot commented Jul 19, 2026

Copy link
Copy Markdown

Deploy Preview for inventree-web-pui-preview ready!

Name Link
🔨 Latest commit cdcf59f
🔍 Latest deploy log https://app.netlify.com/projects/inventree-web-pui-preview/deploys/6a68eb829019930008394bbc
😎 Deploy Preview https://deploy-preview-12422--inventree-web-pui-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 97 (no change from production)
Accessibility: 81 (no change from production)
Best Practices: 100 (no change from production)
SEO: 78 (no change from production)
PWA: -
View the detailed breakdown and full score reports
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@SchrodingersGat

Copy link
Copy Markdown
Member

@amanjain57-gif an interesting idea here, thanks for submitting.

I think that you can achieve this with a single additional field, not two.

If you remove the "piece_size" field and just use quantity, then the additional "piece_count" field can be used to reflect multiple pieces.

e.g. a BOM with multiple lengths of wire

Field Value Description
quantity 200mm Length of individual cut wires
piece_count 10 10x separate multiples of 200mm

Thus the total requirement is 2m of wire, but we can see it is in 10x pieces of 200mm

@SchrodingersGat SchrodingersGat left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reduce to a single additional field as discussed

Remove the piece_size field entirely. The existing quantity field already
represents the per-piece size/length, so piece_count multiplied by
quantity gives the total material requirement.

Example: quantity=200mm, piece_count=10 → total 2m of wire in 10 pieces.

Changes:
- Remove piece_size model field, serializer field, and frontend column/form
- Update migration to only add piece_count
- Update get_required_quantity() to multiply by piece_count
- Restore original recalculate_quantity() without piece_size logic
@amanjain57-gif

Copy link
Copy Markdown
Author

Thanks for the feedback! Simplified to a single piece_count field as suggested. quantity now represents per-piece size, and total material = quantity × piece_count. Removed piece_size from model, migration, serializer, and frontend.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants