feat(back-end): pla tought
Some checks failed
Build, Test, Deploy and Analysis / qodana (push) Failing after 8s
Build, Test, Deploy and Analysis / test-backend (push) Successful in 37s
Build, Test, Deploy and Analysis / build-and-push (push) Successful in 41s
Build, Test, Deploy and Analysis / deploy (push) Successful in 9s

This commit is contained in:
2026-03-03 10:24:21 +01:00
parent 654aa775db
commit 5c27d4d16b
7 changed files with 52 additions and 6 deletions

View File

@@ -296,9 +296,7 @@ public class QuoteSessionController {
return variant; return variant;
} }
String requestedMaterialCode = settings.getMaterial() != null String requestedMaterialCode = normalizeRequestedMaterialCode(settings.getMaterial());
? settings.getMaterial().trim().toUpperCase()
: "PLA";
FilamentMaterialType materialType = materialRepo.findByMaterialCode(requestedMaterialCode) FilamentMaterialType materialType = materialRepo.findByMaterialCode(requestedMaterialCode)
.orElseGet(() -> materialRepo.findByMaterialCode("PLA") .orElseGet(() -> materialRepo.findByMaterialCode("PLA")
@@ -316,6 +314,18 @@ public class QuoteSessionController {
.orElseThrow(() -> new RuntimeException("No active variant for material: " + requestedMaterialCode)); .orElseThrow(() -> new RuntimeException("No active variant for material: " + requestedMaterialCode));
} }
private String normalizeRequestedMaterialCode(String value) {
if (value == null || value.isBlank()) {
return "PLA";
}
return value.trim()
.toUpperCase(Locale.ROOT)
.replace('_', ' ')
.replace('-', ' ')
.replaceAll("\\s+", " ");
}
// 3. Update Line Item // 3. Update Line Item
@PatchMapping("/line-items/{lineItemId}") @PatchMapping("/line-items/{lineItemId}")
@Transactional @Transactional

View File

@@ -8,7 +8,7 @@ public class PrintSettingsDto {
private String complexityMode; private String complexityMode;
// Common // Common
private String material; // e.g. "PLA", "PETG" private String material; // e.g. "PLA", "PLA TOUGH", "PETG"
private String color; // e.g. "White", "#FFFFFF" private String color; // e.g. "White", "#FFFFFF"
private Long filamentVariantId; private Long filamentVariantId;
private Long printerMachineId; private Long printerMachineId;

View File

@@ -116,6 +116,7 @@ public class OrcaProfileResolver {
: "PLA"; : "PLA";
return switch (materialCode) { return switch (materialCode) {
case "PLA TOUGH" -> "Bambu PLA Tough @BBL A1";
case "PETG" -> "Generic PETG"; case "PETG" -> "Generic PETG";
case "TPU" -> "Generic TPU"; case "TPU" -> "Generic TPU";
case "PC" -> "Generic PC"; case "PC" -> "Generic PC";

View File

@@ -46,6 +46,7 @@ public class ProfileManager {
// Material Aliases // Material Aliases
profileAliases.put("pla_basic", "Bambu PLA Basic @BBL A1"); profileAliases.put("pla_basic", "Bambu PLA Basic @BBL A1");
profileAliases.put("pla_tough", "Bambu PLA Tough @BBL A1");
profileAliases.put("petg_basic", "Bambu PETG Basic @BBL A1"); profileAliases.put("petg_basic", "Bambu PETG Basic @BBL A1");
profileAliases.put("tpu_95a", "Bambu TPU 95A @BBL A1"); profileAliases.put("tpu_95a", "Bambu TPU 95A @BBL A1");

View File

@@ -175,6 +175,7 @@ public class QuoteCalculator {
private String detectMaterialCode(String profileName) { private String detectMaterialCode(String profileName) {
String lower = profileName.toLowerCase(); String lower = profileName.toLowerCase();
if (lower.contains("pla tough") || lower.contains("pla_tough")) return "PLA TOUGH";
if (lower.contains("petg")) return "PETG"; if (lower.contains("petg")) return "PETG";
if (lower.contains("tpu")) return "TPU"; if (lower.contains("tpu")) return "TPU";
if (lower.contains("abs")) return "ABS"; if (lower.contains("abs")) return "ABS";

35
db.sql
View File

@@ -285,6 +285,7 @@ insert into filament_material_type (material_code,
is_technical, is_technical,
technical_type_label) technical_type_label)
values ('PLA', false, false, null), values ('PLA', false, false, null),
('PLA TOUGH', false, false, null),
('PETG', false, false, null), ('PETG', false, false, null),
('TPU', true, false, null), ('TPU', true, false, null),
('PC', false, true, 'engineering'), ('PC', false, true, 'engineering'),
@@ -355,6 +356,37 @@ on conflict (filament_material_type_id, variant_display_name) do update
is_active = excluded.is_active; is_active = excluded.is_active;
-- Varianti base per materiali principali del calcolatore -- Varianti base per materiali principali del calcolatore
with mat as (select filament_material_type_id
from filament_material_type
where material_code = 'PLA TOUGH')
insert
into filament_variant (filament_material_type_id, variant_display_name, color_name, color_hex, finish_type, brand,
is_matte, is_special, cost_chf_per_kg, stock_spools, spool_net_kg, is_active)
select mat.filament_material_type_id,
'PLA Tough Nero',
'Nero',
'#1A1A1A',
'GLOSSY',
'Bambu',
false,
false,
18.00,
1.000,
1.000,
true
from mat
on conflict (filament_material_type_id, variant_display_name) do update
set color_name = excluded.color_name,
color_hex = excluded.color_hex,
finish_type = excluded.finish_type,
brand = excluded.brand,
is_matte = excluded.is_matte,
is_special = excluded.is_special,
cost_chf_per_kg = excluded.cost_chf_per_kg,
stock_spools = excluded.stock_spools,
spool_net_kg = excluded.spool_net_kg,
is_active = excluded.is_active;
with mat as (select filament_material_type_id with mat as (select filament_material_type_id
from filament_material_type from filament_material_type
where material_code = 'PETG') where material_code = 'PETG')
@@ -491,13 +523,14 @@ with p as (select printer_machine_profile_id
and pmp.nozzle_diameter_mm = 0.40::numeric), and pmp.nozzle_diameter_mm = 0.40::numeric),
m as (select filament_material_type_id, material_code m as (select filament_material_type_id, material_code
from filament_material_type from filament_material_type
where material_code in ('PLA', 'PETG', 'TPU', 'PC')) where material_code in ('PLA', 'PLA TOUGH', 'PETG', 'TPU', 'PC'))
insert insert
into material_orca_profile_map (printer_machine_profile_id, filament_material_type_id, orca_filament_profile_name, is_active) into material_orca_profile_map (printer_machine_profile_id, filament_material_type_id, orca_filament_profile_name, is_active)
select p.printer_machine_profile_id, select p.printer_machine_profile_id,
m.filament_material_type_id, m.filament_material_type_id,
case m.material_code case m.material_code
when 'PLA' then 'Bambu PLA Basic @BBL A1' when 'PLA' then 'Bambu PLA Basic @BBL A1'
when 'PLA TOUGH' then 'Bambu PLA Tough @BBL A1'
when 'PETG' then 'Bambu PETG Basic @BBL A1' when 'PETG' then 'Bambu PETG Basic @BBL A1'
when 'TPU' then 'Bambu TPU 95A @BBL A1' when 'TPU' then 'Bambu TPU 95A @BBL A1'
when 'PC' then 'Generic PC @BBL A1' when 'PC' then 'Generic PC @BBL A1'

View File

@@ -316,7 +316,7 @@
<div class="dialog-backdrop" *ngIf="variantToDelete" (click)="closeDeleteVariantDialog()"></div> <div class="dialog-backdrop" *ngIf="variantToDelete" (click)="closeDeleteVariantDialog()"></div>
<div class="confirm-dialog" *ngIf="variantToDelete"> <div class="confirm-dialog" *ngIf="variantToDelete">
<h4>Sei sicuro?</h4> <h4>Sei sicuro?</h4>
<p>Vuoi eliminare la variante <strong>{{ variantToDelete?.variantDisplayName }}</strong>?</p> <p>Vuoi eliminare la variante <strong>{{ variantToDelete.variantDisplayName }}</strong>?</p>
<p class="muted">L'operazione non è reversibile.</p> <p class="muted">L'operazione non è reversibile.</p>
<div class="dialog-actions"> <div class="dialog-actions">
<button type="button" class="btn-secondary" (click)="closeDeleteVariantDialog()">Annulla</button> <button type="button" class="btn-secondary" (click)="closeDeleteVariantDialog()">Annulla</button>