From e2b6966cefcf83e7bd459f637f76e22f2f6b5450 Mon Sep 17 00:00:00 2001 From: Mireya Serrano Date: Sun, 24 May 2026 13:22:30 +0200 Subject: [PATCH] Manejo de direcciones de cliente --- .../prestashop/PrestashopClient.java | 19 ++++++++++++++++ .../prestashop/dto/PrestashopAddressDto.java | 22 +++++++++++++++++++ .../sync_service/sync/OrderSyncService.java | 18 +++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/dto/PrestashopAddressDto.java 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 95f9303..c2be447 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 @@ -238,6 +238,25 @@ public class PrestashopClient { return response != null ? response.customer() : null; } + public PrestashopAddressDto getAddress(Integer id) { + try { + PrestashopAddressDto.SingleResponse response = restClient.get() + .uri(u -> u.path("/addresses/{id}") + .queryParam("ws_key", wsKey) + .queryParam("output_format", "JSON") + .build(id)) + .retrieve() + .body(PrestashopAddressDto.SingleResponse.class); + return response != null ? response.address() : null; + } catch (PrestashopApiException e) { + if (e.getStatusCode() != null && e.getStatusCode().value() == 404) { + log.debug("PS address not found id={}", id); + return null; + } + throw e; + } + } + // ── XML builders ────────────────────────────────────────────────────── // PS WebService requires XML body for writes; output_format=JSON only affects the response. diff --git a/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/dto/PrestashopAddressDto.java b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/dto/PrestashopAddressDto.java new file mode 100644 index 0000000..9b14307 --- /dev/null +++ b/sync-service/src/main/java/com/teterialosjuanjos/tfg/sync_service/integration/prestashop/dto/PrestashopAddressDto.java @@ -0,0 +1,22 @@ +package com.teterialosjuanjos.tfg.sync_service.integration.prestashop.dto; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) +public record PrestashopAddressDto ( + Integer id, + @JsonProperty("id_customer") String idCustomer, + @JsonProperty("id_country") String idCountry, + String firstname, + String lastname, + String address1, + String address2, + String city, + @JsonProperty("postcode") String postcode, + String phone, + String phone_mobile +){ + @JsonIgnoreProperties(ignoreUnknown = true) + public record SingleResponse(PrestashopAddressDto address){} +} 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 70078ef..3d8a152 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 @@ -7,6 +7,7 @@ import com.teterialosjuanjos.tfg.sync_service.integration.dolibarr.dto.DolibarrO import com.teterialosjuanjos.tfg.sync_service.integration.dolibarr.dto.DolibarrThirdpartyDto; import com.teterialosjuanjos.tfg.sync_service.integration.dolibarr.exception.DolibarrApiException; import com.teterialosjuanjos.tfg.sync_service.integration.prestashop.PrestashopClient; +import com.teterialosjuanjos.tfg.sync_service.integration.prestashop.dto.PrestashopAddressDto; import com.teterialosjuanjos.tfg.sync_service.integration.prestashop.dto.PrestashopCustomerDto; import com.teterialosjuanjos.tfg.sync_service.integration.prestashop.dto.PrestashopOrderDto; import com.teterialosjuanjos.tfg.sync_service.integration.prestashop.exception.PrestashopApiException; @@ -170,6 +171,23 @@ public class OrderSyncService { String city = null; String zip = null; + if (psCustomer != null && psCustomer.idDefaultAddress() != null && !psCustomer.idDefaultAddress().isBlank()) { + try { + Integer addressId = Integer.parseInt(psCustomer.idDefaultAddress()); + PrestashopAddressDto psAddress = prestashopClient.getAddress(addressId); + if (psAddress != null) { + address = psAddress.address1(); + if (psAddress.address2() != null && !psAddress.address2().isBlank()) { + address = (address != null ? address + " " : "") + psAddress.address2(); + } + city = psAddress.city(); + zip = psAddress.postcode(); + } + } catch (NumberFormatException e) { + log.warn("Invalid address ID for customer {}: {}", psOrder.idCustomer(), psCustomer.idDefaultAddress()); + } + } + return dolibarrClient.getOrCreateThirdparty(email, name, address, city, zip); }