dev #10
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|
||||||
|
|||||||
@@ -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
35
db.sql
@@ -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'
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user