Konfiguracja
Wszystko ustawiasz w jednym miejscu: Stores → Configuration → SISL → Optima Connector.
Sekcja 0. Licencja
| Pole | Opis | Domyślnie |
|---|---|---|
| Klucz licencji | Format SISL-OPT-XXXX-XXXX-XXXX-XXXX |
(puste — wpisz po zakupie) |
| Serwer licencyjny | URL serwera weryfikacji | https://license.sisl.pl |
Klucz zostaje zaszyfrowany przez Magento Encryptor i zapisany w core_config_data. Plugin sprawdza go raz na 24h (lub na żądanie z Diagnostyki).
Sekcja 1. Połączenie z mikrouslugą
| Pole | Opis | Przykład |
|---|---|---|
| Włączone | Master switch całego pluginu | Yes |
| URL Sisl.Sync.Service | Adres mikrousługi w sieci | http://192.168.1.50:5000 |
| HMAC shared secret | 32-bajtowy hex, identyczny po obu stronach | (wygenerowany openssl rand -hex 32) |
| HTTP timeout (s) | Timeout requestu HTTP | 15 |
Ważne: URL musi być osiągalny z kontenera/serwera Magento. Jeśli używasz Dockera, użyj host.docker.internal lub LAN IP.
Sekcja 2. Synchronizacja
| Pole | Opis | Domyślnie |
|---|---|---|
| Pobieraj produkty | Włącz ProductSync |
Yes |
| Synchronizuj stany | Włącz StockSync |
Yes |
| Wyślij zamówienia do Optimy | Włącz OrderForward |
Yes |
| Synchronizuj ceny | Czy nadpisywać ceny w Magento | No |
| Magazyn (Mag_Symbol) | Z którego magazynu Optimy ciągnąć stany | MAGAZYN |
| Cennik nr | Który cennik (TwC_TwCNumer) | 1 (detal) |
| Cennik zawiera VAT | Czy cena z Optimy jest brutto | Yes |
| Default attribute set ID | Dla nowych produktów | 4 (Default) |
| Filtr SKU (prefix) | Sync tylko SKU z tym prefixem | (puste = wszystkie) |
| Pomijaj usługi | Filtr Twr_Typ != 0 |
Yes |
| Bufor magazynowy | Odejmij N szt jako rezerwa | 0 |
| Próg "out of stock" | Jeśli qty - bufor <= próg → OOS |
0 |
| Rozmiar strony | Batch dla API (50-1000) | 200 |
Sync cen — kiedy włączyć
Domyślnie wyłączone. Włącz tylko jeśli ceny w Optimie są autorytatywne. Inaczej ceny w Magento (ustawione ręcznie lub przez kampanię marketingową) nie będą nadpisywane przy każdym cyklu.
Bufor magazynowy
Przykład: produkt ma w Optimie 5 szt, bufor=2, próg=0:
- Magento qty = 5 - 2 = 3
- Sklep dalej "in stock"
Gdy w Optimie zostanie 2 szt: qty = 0, plugin automatycznie ustawi is_in_stock=0. Zabezpiecza przed sprzedażą ostatniego kawałka który mógł zostać już sprzedany offline.
Sekcja 3. Domyślne wartości dla NOWYCH produktów
| Pole | Opis | Domyślnie |
|---|---|---|
| Status nowego produktu | Enabled / Disabled | Enabled |
| Widoczność nowego produktu | Niewidoczny / Katalog / Wyszukiwarka / Oba | Katalog i wyszukiwarka |
Stosowane tylko przy pierwszym imporcie SKU. Późniejsze syncy nie ruszają tych pól.
Sekcja 4. Harmonogram (cron)
Wymaga aktywnego cron Magento (bin/magento cron:run w systemowym crontab co minutę, lub kontener cron w Docker).
| Pole | Dropdown |
|---|---|
| Synchronizacja produktów | Wyłączone / Co 5 min / Co 15 min / Co 30 min / Co 1 godz. / 2h / 6h / 12h / Codziennie 02:00 / Codziennie 04:00 |
| Synchronizacja stanów | jw. |
| Sprawdzanie licencji | jw. (zalecane: Codziennie 03:00) |
Sekcja 5. v0.3 — Funkcje rozszerzone (opt-in)
Trzy duże, opcjonalne funkcje. Wszystkie domyślnie wyłączone — włączasz świadomie kiedy ich potrzebujesz. Wyłączone nie wpływają na zachowanie modułu.
F1. Multi-store — różne cenniki/SKU per website
Każdy website Magento może pobierać ceny z innego cennika Optimy. Format pola Multi-store: Per-website overrides:
hurt=2:HURT-
detal=1:
partner=3:PARTNER-
Każda linia to website_code=cennik:sku_prefix:
- website_code — Stores → All Stores → Website → Code w Magento
- cennik — numer cennika Optimy (TwC_TwCNumer), np. 1 = detal, 2 = hurt
- sku_prefix — filtruj produkty dla tego website po prefiksie SKU (pusty = wszystkie)
Ceny default scope (z sekcji 2) pozostają — multi-store nakłada się na nie jako warstwa website-scoped.
Włączasz w 5. v0.3 → Multi-store: Enabled = Yes + wpisujesz overrides.
F2. Order updates — pełen cykl zamówienia (FA/PAR/WZ)
Cron pobiera z mikrousługi faktury/paragony/WZ utworzone w Optimie i automatycznie tworzy w Magento odpowiednio Invoice (zamówienie → "Complete") lub Shipment.
Wymagany workflow w Optimie: w polu Opis dokumentu (TraNag.TrN_Opis) handlowiec wpisuje MG-<numer_zamowienia_magento>, np. MG-100000123. Plugin filtruje po tym prefiksie i dopasowuje do increment_id.
Pola w configu:
| Pole | Opis | Domyślnie |
|---|---|---|
| Order updates: Enabled | Master switch F2 | No |
| Order updates: Reference prefix | Prefiks w TrN_Opis |
MG- |
| Order updates: Cron schedule | Cron expression (puste = nie odpala) | (puste) |
Zalecane harmonogramy: */15 * * * * (co 15 min) lub */30 * * * *.
Idempotentny — pomija zamówienia już zafakturowane / zashippowane.
F3. Bidirectional customer sync — karty kontrahentów Optima → Magento
Cron pobiera z mikrousługi karty kontrahentów (CDN.KntKarty) zmodyfikowane od ostatniego polla (delta sync) i upsertuje je do customer_entity w Magento. Pierwszy poll = full sync, kolejne = tylko delta.
Match: po email + websiteId (Magento wymaga email — kontrahenci bez emaila są pomijane).
Pola w configu:
| Pole | Opis | Domyślnie |
|---|---|---|
| Customers: Enabled | Master switch F3 | No |
| Customers: Default group | Customer Group ID dla nowych klientów | 1 (General) |
| Customers: Default website | Website ID dla nowych klientów | 1 |
| Customers: Cron schedule | Cron expression | (puste) |
Zalecane harmonogramy: 0 */2 * * * (co 2h) lub raz na noc 0 3 * * *.
Wykluczenie pojedynczego produktu
Catalog → Products → kliknij produkt → tab SISL Optima → ustaw "Wykluczony z synchronizacji" na Yes.
Plugin pominie ten SKU w obu ProductSync i StockSync. Cena, nazwa, stan w Magento nie będą dotykane.
Konfiguracja po stronie microservice'u
Plik C:\Sisl\sync\publish\appsettings.Local.json:
{
"Sisl": {
"Backend": "optima",
"ListenUrl": "http://0.0.0.0:5000",
"AllowedTimestampDriftSeconds": 300,
"SharedSecret": "<HMAC, ten sam co w Magento>",
"Optima": {
"Server": "TWOJ-SERWER\\OPTIMA",
"Database": "CDN_Firma_Twoja",
"IntegratedSecurity": true
},
"License": {
"Key": "<klucz licencji>",
"ServerUrl": "https://license.sisl.pl",
"ProductCode": "sisl_optima",
"Enforce": "true"
}
}
}
Po zmianie wymagany restart Windows Service:
Restart-Service SislSyncService
Następny krok: Licencjonowanie →