Box registry: new fp.box model (fusion_plating_receiving), one record per received box, auto-created when a receiving is marked Counted (idempotent _fp_sync_boxes — grows/shrinks with box_count_in, never touches an advanced box). Status received -> racked -> in_process -> packed -> shipped, per-box scannable QR (/fp/box/<id> controller). Backfill migration for receivings counted before tracking shipped. Boxes list/kanban/form + receiving smart button. Job stickers redesigned (thermal label, 6x4 in / 152x102mm, mm layout @ paperformat dpi=96 so mm maps 1:1 in wkhtmltopdf — see rule 14): - Internal Job Sticker = Layout A, ONE per job (shop notes from x_fc_internal_description, job QR). - External Job Sticker = Layout B, ONE per fp.box (BOX n/N, per-box QR, factory company logo, customer-facing notes). Dynamic MASK badge (x_fc_masking_enabled) + BAKE block (x_fc_bake_instructions), length-tiered notes font. Display logic in fp.job._fp_sticker_data(). Also retains the SO/WO box-sticker MemoryError fix in report_fp_wo_sticker.xml (per-box loop sourced from fp.receiving.box_count_in + 100-label safety cap). Verified live on entech: 111 boxes backfilled (31 receivings), External renders one page per box, Internal one per job, scan endpoint 303->login. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
4.0 KiB
4.0 KiB
| 1 | id | name | model_id:id | group_id:id | perm_read | perm_write | perm_create | perm_unlink |
|---|---|---|---|---|---|---|---|---|
| 2 | access_fp_receiving_operator | fp.receiving.operator | model_fp_receiving | fusion_plating.group_fp_technician | 1 | 1 | 1 | 0 |
| 3 | access_fp_receiving_receiver | fp.receiving.receiver | model_fp_receiving | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 0 |
| 4 | access_fp_receiving_manager | fp.receiving.manager | model_fp_receiving | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 5 | access_fp_receiving_line_operator | fp.receiving.line.operator | model_fp_receiving_line | fusion_plating.group_fp_technician | 1 | 1 | 1 | 0 |
| 6 | access_fp_receiving_line_receiver | fp.receiving.line.receiver | model_fp_receiving_line | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 0 |
| 7 | access_fp_receiving_line_manager | fp.receiving.line.manager | model_fp_receiving_line | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 8 | access_fp_receiving_damage_operator | fp.receiving.damage.operator | model_fp_receiving_damage | fusion_plating.group_fp_technician | 1 | 1 | 1 | 0 |
| 9 | access_fp_receiving_damage_receiver | fp.receiving.damage.receiver | model_fp_receiving_damage | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 0 |
| 10 | access_fp_receiving_damage_manager | fp.receiving.damage.manager | model_fp_receiving_damage | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 11 | access_fp_racking_inspection_operator | fp.racking.inspection.operator | model_fp_racking_inspection | fusion_plating.group_fp_technician | 1 | 1 | 1 | 0 |
| 12 | access_fp_racking_inspection_supervisor | fp.racking.inspection.supervisor | model_fp_racking_inspection | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 0 |
| 13 | access_fp_racking_inspection_manager | fp.racking.inspection.manager | model_fp_racking_inspection | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 14 | access_fp_racking_inspection_line_operator | fp.racking.inspection.line.operator | model_fp_racking_inspection_line | fusion_plating.group_fp_technician | 1 | 1 | 1 | 1 |
| 15 | access_fp_racking_inspection_line_supervisor | fp.racking.inspection.line.supervisor | model_fp_racking_inspection_line | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 16 | access_fp_racking_inspection_line_manager | fp.racking.inspection.line.manager | model_fp_racking_inspection_line | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 17 | access_fp_label_manual_wizard_operator | fp.label.manual.wizard.operator | model_fp_label_manual_wizard | fusion_plating.group_fp_technician | 1 | 1 | 1 | 1 |
| 18 | access_fp_label_generate_wizard_operator | fp.label.generate.wizard.operator | model_fp_label_generate_wizard | fusion_plating.group_fp_technician | 1 | 1 | 1 | 1 |
| 19 | access_fp_outbound_package_operator | fp.outbound.package.operator | model_fp_outbound_package | fusion_plating.group_fp_technician | 1 | 1 | 1 | 1 |
| 20 | access_fp_label_manual_wizard_receiver | fp.label.manual.wizard.receiver | model_fp_label_manual_wizard | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 21 | access_fp_label_manual_wizard_supervisor | fp.label.manual.wizard.supervisor | model_fp_label_manual_wizard | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 22 | access_fp_label_manual_wizard_manager | fp.label.manual.wizard.manager | model_fp_label_manual_wizard | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 23 | access_fp_label_generate_wizard_receiver | fp.label.generate.wizard.receiver | model_fp_label_generate_wizard | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 24 | access_fp_label_generate_wizard_supervisor | fp.label.generate.wizard.supervisor | model_fp_label_generate_wizard | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 25 | access_fp_label_generate_wizard_manager | fp.label.generate.wizard.manager | model_fp_label_generate_wizard | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 26 | access_fp_outbound_package_receiver | fp.outbound.package.receiver | model_fp_outbound_package | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 27 | access_fp_outbound_package_supervisor | fp.outbound.package.supervisor | model_fp_outbound_package | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 1 |
| 28 | access_fp_outbound_package_manager | fp.outbound.package.manager | model_fp_outbound_package | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |
| 29 | access_fp_box_operator | fp.box.operator | model_fp_box | fusion_plating.group_fp_technician | 1 | 1 | 1 | 0 |
| 30 | access_fp_box_supervisor | fp.box.supervisor | model_fp_box | fusion_plating.group_fp_shop_manager_v2 | 1 | 1 | 1 | 0 |
| 31 | access_fp_box_manager | fp.box.manager | model_fp_box | fusion_plating.group_fp_manager | 1 | 1 | 1 | 1 |