diff --git a/backend/build.gradle b/backend/build.gradle index b465785..6a74ea1 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -26,7 +26,8 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'xyz.capybara:clamav-client:2.1.2' - runtimeOnly 'org.postgresql:postgresql' + implementation 'org.springframework.boot:spring-boot-starter-actuator' + runtimeOnly 'org.postgresql:postgresql' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation 'org.springframework.boot:spring-boot-starter-test' testRuntimeOnly 'com.h2database:h2' diff --git a/backend/src/main/java/com/printcalculator/event/listener/OrderEmailListener.java b/backend/src/main/java/com/printcalculator/event/listener/OrderEmailListener.java index bd7761d..df361eb 100644 --- a/backend/src/main/java/com/printcalculator/event/listener/OrderEmailListener.java +++ b/backend/src/main/java/com/printcalculator/event/listener/OrderEmailListener.java @@ -122,6 +122,6 @@ public class OrderEmailListener { private String buildOrderDetailsUrl(Order order) { String baseUrl = frontendBaseUrl == null ? "" : frontendBaseUrl.replaceAll("/+$", ""); - return baseUrl + "/ordine/" + order.getId(); + return baseUrl + "/co/" + order.getId(); } } diff --git a/backend/src/main/java/com/printcalculator/service/PaymentService.java b/backend/src/main/java/com/printcalculator/service/PaymentService.java index 2588523..3948d22 100644 --- a/backend/src/main/java/com/printcalculator/service/PaymentService.java +++ b/backend/src/main/java/com/printcalculator/service/PaymentService.java @@ -38,7 +38,8 @@ public class PaymentService { Payment payment = new Payment(); payment.setOrder(order); - payment.setMethod(defaultMethod != null ? defaultMethod : "OTHER"); + // Default to "OTHER" always, as payment method should only be set by the admin explicitly + payment.setMethod("OTHER"); payment.setStatus("PENDING"); payment.setCurrency(order.getCurrency() != null ? order.getCurrency() : "CHF"); payment.setAmountChf(order.getTotalChf() != null ? order.getTotalChf() : BigDecimal.ZERO); @@ -53,7 +54,7 @@ public class PaymentService { .orElseThrow(() -> new RuntimeException("Order not found with id " + orderId)); Payment payment = paymentRepo.findByOrder_Id(orderId) - .orElseThrow(() -> new RuntimeException("No active payment found for order " + orderId)); + .orElseGet(() -> getOrCreatePaymentForOrder(order, "OTHER")); if (!"PENDING".equals(payment.getStatus())) { throw new IllegalStateException("Payment is not in PENDING state. Current state: " + payment.getStatus()); @@ -61,9 +62,10 @@ public class PaymentService { payment.setStatus("REPORTED"); payment.setReportedAt(OffsetDateTime.now()); - if (method != null && !method.isBlank()) { - payment.setMethod(method); - } + + // We intentionally do not update the payment method here based on user input, + // because the user cannot reliably determine the actual method without an integration. + // It will be updated by the backoffice admin manually. payment = paymentRepo.save(payment); diff --git a/backend/src/main/resources/templates/invoice.html b/backend/src/main/resources/templates/invoice.html index 87677d3..3f6cb55 100644 --- a/backend/src/main/resources/templates/invoice.html +++ b/backend/src/main/resources/templates/invoice.html @@ -1,358 +1,379 @@
- - + .qr-bill-bottom { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 105mm; + overflow: hidden; + background: #fff; + } + + .qr-bill-bottom svg { + width: 100% !important; + height: 105mm !important; + display: block; + } +|
- Conferma ordine
- Ricevuta semplificata
- |
-
- 3D Fab Switzerland
- Sede Ticino, Svizzera
- Sede Bienne, Svizzera
- info@3dfab.ch
- |
-
| + 3D-fab.ch + | +
+ 3D Fab Switzerland
+ Sede Ticino, Svizzera
+ Sede Bienne, Svizzera
+ |
+ + www.3d-fab.ch + | +
-
|
-
- Cliente
- Cliente SA
- Via Cliente 7
- 8000 Zürich, CH
- |
-
| Descrizione | -Qtà | -Prezzo unit. | -Totale | -
|---|---|---|---|
| Stampa 3D pezzo X | -1 | -CHF 10.00 | -CHF 10.00 | -
|
- Informazioni
-
- Appena riceviamo il pagamento l'ordine entra nella coda di stampa. Grazie per la fiducia.
-
-
- Verifica i dettagli dell'ordine al ricevimento. Per assistenza, rispondi alla nostra email di conferma.
-
- |
-
-
|
| Importo totale | +1'012.86 | +
| Totale di tutte le consegne e di tutti i servizi CHF | +1'094.90 | +
| Importo dovuto | +1'094.90 | +
| Informazioni | ++ Appena riceviamo il pagamento l'ordine entra nella coda di stampa. Grazie per la fiducia. + | +
| Generale | ++ Si applicano le nostre condizioni generali di contratto. Verifica i dettagli dell'ordine al ricevimento. Per assistenza, rispondi alla nostra email di conferma. + | +
{{ 'ORDER_CONFIRMED.SUBTITLE' | translate }}
-- {{ 'ORDER_CONFIRMED.ORDER_REF' | translate }}: #{{ orderNumber }} -
- -{{ 'TRACKING.SUBTITLE' | translate }}
+{{ 'PAYMENT.STATUS_REPORTED_DESC' | translate }}
+{{ 'PAYMENT.TWINT_DESC' | translate }}
+{{ 'PAYMENT.BILLING_INFO_HINT' | translate }}
+{{ 'PAYMENT.TOTAL' | translate }}: {{ o.totalChf | currency:'CHF' }}
+{{ 'PAYMENT.BANK_OWNER' | translate }}: Küng, Joe
+{{ 'PAYMENT.BANK_IBAN' | translate }}: CH74 0900 0000 1548 2158 1
+{{ 'PAYMENT.BANK_REF' | translate }}: {{ getDisplayOrderNumber(o) }}
+{{ 'PAYMENT.BILLING_INFO_HINT' | translate }}
+ +#{{ getDisplayOrderNumber(o) }}
+{{ 'PAYMENT.LOADING' | translate }}
+{{ 'CHECKOUT.SUBTITLE' | translate }}
-{{ 'PAYMENT.STATUS_REPORTED_DESC' | translate }}
-{{ 'PAYMENT.TWINT_DESC' | translate }}
-{{ 'PAYMENT.BILLING_INFO_HINT' | translate }}
-{{ 'PAYMENT.TOTAL' | translate }}: {{ o.totalChf | currency:'CHF' }}
-{{ 'PAYMENT.BANK_OWNER' | translate }}: 3D Fab Switzerland
-{{ 'PAYMENT.BANK_IBAN' | translate }}: CH98 0000 0000 0000 0000 0
-{{ 'PAYMENT.BANK_REF' | translate }}: {{ getDisplayOrderNumber(o) }}
-{{ 'PAYMENT.BILLING_INFO_HINT' | translate }}
- -#{{ getDisplayOrderNumber(o) }}
-{{ 'PAYMENT.LOADING' | translate }}
-{{ 'SHOP.SUBTITLE' | translate }}
-{{ 'SHOP.WIP_EYEBROW' | translate }}
+{{ 'SHOP.WIP_SUBTITLE' | translate }}
-{{ 'SHOP.WIP_RETURN_LATER' | translate }}
+{{ 'SHOP.WIP_NOTE' | translate }}
+