From aeec27f7af64fd6018e6f09cad21d8bdfb55d00c Mon Sep 17 00:00:00 2001 From: luklpz Date: Fri, 15 May 2026 08:05:18 +0200 Subject: [PATCH] fix: correct Dolibarr/PS filters and handle guest orders - DolibarrClient.getProductByRef: use sqlfilters=(t.ref:=:'x') instead of unsupported ref query param (caused StockSync to push wrong stock) - PrestashopClient.getProductByReference: wrap value in [x] for PS exact-match filter syntax (root cause of createProduct returning null) - OrderSyncService.resolveCustomer: skip getCustomer when id_customer is 0 or null (guest orders returned 404 and failed import) - StockSyncService: parse stock quantity as Double to handle "5.000" Co-Authored-By: Claude Sonnet 4.6 --- .../integration/dolibarr/DolibarrClient.java | 3 ++- .../integration/prestashop/PrestashopClient.java | 4 +++- .../tfg/sync_service/sync/OrderSyncService.java | 11 +++++++++-- .../tfg/sync_service/sync/StockSyncService.java | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/dolibarr/DolibarrClient.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/dolibarr/DolibarrClient.java index 308cc10..01268a6 100644 --- a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/dolibarr/DolibarrClient.java +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/dolibarr/DolibarrClient.java @@ -49,9 +49,10 @@ public class DolibarrClient { * @param ref SKU value, e.g. "PROD-001" */ public DolibarrProductDto getProductByRef(String ref) { + String filter = "(t.ref:=:'%s')".formatted(ref); List results = restClient.get() .uri(u -> u.path("/products") - .queryParam("ref", ref) + .queryParam("sqlfilters", filter) .queryParam("limit", 1) .build()) .retrieve() diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/PrestashopClient.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/PrestashopClient.java index 4cd2c78..dbf5374 100644 --- a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/PrestashopClient.java +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/PrestashopClient.java @@ -68,12 +68,14 @@ public class PrestashopClient { * @param reference SKU value, e.g. "PROD-001" */ public Optional getProductByReference(String reference) { + // PS WebService requires [value] brackets for exact-match filtering + String exactRef = "[" + reference + "]"; PrestashopProductDto.ListResponse response = restClient.get() .uri(u -> u.path("/products") .queryParam("ws_key", wsKey) .queryParam("output_format", "JSON") .queryParam("display", "full") - .queryParam("filter[reference]", reference) + .queryParam("filter[reference]", exactRef) .build()) .retrieve() .body(PrestashopProductDto.ListResponse.class); diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/OrderSyncService.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/OrderSyncService.java index 13ceee4..cc0a25a 100644 --- a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/OrderSyncService.java +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/OrderSyncService.java @@ -147,8 +147,15 @@ public class OrderSyncService { } private DolibarrThirdpartyDto resolveCustomer(PrestashopOrderDto psOrder) { - PrestashopCustomerDto psCustomer = prestashopClient.getCustomer( - Integer.parseInt(psOrder.idCustomer())); + // Guest orders have id_customer=0 — skip getCustomer call to avoid 404 + boolean isGuest = psOrder.idCustomer() == null + || psOrder.idCustomer().isBlank() + || "0".equals(psOrder.idCustomer()); + + PrestashopCustomerDto psCustomer = null; + if (!isGuest) { + psCustomer = prestashopClient.getCustomer(Integer.parseInt(psOrder.idCustomer())); + } String name = psCustomer != null ? (psCustomer.firstname() + " " + psCustomer.lastname()).trim() diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/StockSyncService.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/StockSyncService.java index 0b3dbee..fb7057f 100644 --- a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/StockSyncService.java +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/sync/StockSyncService.java @@ -106,7 +106,7 @@ public class StockSyncService { PrestashopStockAvailableDto current = stockOpt.get(); int targetQty = dolProduct.stockReel().intValue(); - int currentQty = Integer.parseInt(current.quantity()); + int currentQty = (int) Double.parseDouble(current.quantity()); if (targetQty == currentQty) { return false;