Parowanie produktów z istniejącą ofertą w sklepie – integracja MobyDick

Dokument opisuje sposób parowania produktów z hurtowni MobyDick z istniejącą ofertą w sklepie, a także procedurę naprawy błędnych powiązań, jeśli dane zostały wcześniej źle sparowane.


Cel

  • Sparowanie produktów z hurtowni z już istniejącymi produktami w sklepie
  • Uniknięcie tworzenia duplikatów
  • Możliwość naprawy błędnych parowań bez czyszczenia całej bazy produktów

Jak działa parowanie

Podczas importu integracja próbuje:

  1. Znaleźć istniejący produkt w sklepie
  2. Jeśli znajdzie dopasowanie → produkt zostaje sparowany
  3. Jeśli nie znajdzie → w standardowym trybie może zostać utworzony nowy produkt

Funkcja mobydick_custom_matcher() pozwala:

  • wymusić własną logikę dopasowania,
  • tymczasowo zablokować dodawanie nowych produktów,
  • przeprowadzić kontrolowane parowanie z istniejącą ofertą.

Podstawowy scenariusz – parowanie z istniejącą ofertą

Krok 1 – aktualizacja modułu

Zaktualizuj moduł seigimobydick do najnowszej wersji.


Krok 2 – dodanie tymczasowej funkcji parującej

Dodaj funkcję mobydick_custom_matcher() tymczasowo w sklepie, np. w pliku:

config/defines.inc.php

Funkcja musi być dostępna globalnie.


Krok 3 – sprawdzenie danych przekazywanych do funkcji (opcjonalnie)

Aby sprawdzić, jakie dane przekazuje integracja:

function mobydick_custom_matcher($param) {
    var_dump($param);
    die;
}

Uruchom integrację ręcznie w nowej zakładce:

https://{domena}/modules/seigimobydick/cron/{nazwa_hurtowni}.php

Przykładowe dostępne klucze w $param:

  • supplier_id
  • supplier_reference
  • reference
  • ean13
  • settings
  • raw
  • wholesaler

Krok 4 – właściwe parowanie produktów

Po ustaleniu, które pola są właściwe, użyj docelowej funkcji parującej.

Przykładowa uniwersalna funkcja parująca

function mobydick_custom_matcher($param) {

    $query = new DbQuery();
    $query->select('p.id_product');
    $query->from('product', 'p');
    $query->where(
        'p.reference = \'' . pSQL($param['ean13']) . '\' 
         AND p.ean13 = \'' . pSQL($param['reference']) . '\''
    );

    $id_product = (int)Db::getInstance()->getValue($query);

    if ($id_product) {
        return new \Product($id_product);
    }
    // Tymaczoso zablokuje dodawanie nowych produktów, na czas parowania
    throw new \seigi\seigimobydick\Exception\skipProduct('Custom Matcher: Blokuj dodawanie nowych do czasu sparowania.');
}

Uwagi

  • Warunek WHERE można dowolnie zmodyfikować, np.:

    • po reference,
    • po ean13,
    • po supplier_reference,
    • po kombinacji pól.
  • Funkcja jest wywoływana w trakcie importu, w momencie próby dopasowania produktu z hurtowni do produktu w sklepie.


Krok 5 – uruchomienie importu

Uruchom import MobyDick.

Efekt:

  • produkty zostaną sparowane z istniejącą ofertą w sklepie,
  • nowe produkty mogą zostać zablokowane (w zależności od warunku).

Krok 6 – usunięcie kodu tymczasowego

Po zakończeniu parowania:

  1. Usuń funkcję mobydick_custom_matcher() z defines.inc.php
  2. Przywróć standardową konfigurację sklepu

Krok 7 – finalny import

Uruchom import ponownie, aby integracja mogła:

  • dociągnąć brakujące produkty,
  • działać w standardowym trybie.

Sekcja naprawcza – gdy parowania są błędne

Jeśli produkty zostały wcześniej źle sparowane lub powstały nieprawidłowe relacje, należy najpierw wyczyścić mapowania integracji.


Krok N1 – usunięcie błędnych produktów

Usuń produkty, które:

  • są zdublowane,
  • są błędnie sparowane,
  • nie powinny istnieć w sklepie.

Poprawne produkty pozostają bez zmian.


Krok N2 – wyczyszczenie tabeli powiązań

Tabela:

ps_mobydick_relations

Scenariusz 1 – jedna hurtownia

Jeśli w sklepie działa jedna integracja / jedna hurtownia:

TRUNCATE TABLE ps_mobydick_relations;

Rozpoczynamy parowanie od zera.

Scenariusz 2 – wiele hurtowni

Jeśli w sklepie działa więcej niż jedna hurtownia:

  • nie wykonujemy TRUNCATE
  • usuwamy tylko wpisy odpowiadające danej hurtowni (np. PBS)

Krok N3 – ponowne parowanie

Po wyczyszczeniu powiązań:

  1. Dodaj funkcję mobydick_custom_matcher()
  2. Uruchom import
  3. Sparuj produkty z istniejącą ofertą
  4. Usuń kod tymczasowy
  5. Wykonaj finalny import

Podsumowanie

  • Parowanie odbywa się z istniejącą ofertą w sklepie
  • Błędne parowania można naprawić bez czyszczenia całej bazy produktów
  • ps_mobydick_relations kontroluje mapowania integracji
  • Funkcja mobydick_custom_matcher() jest rozwiązaniem tymczasowym i kontrolnym