# Moduł Optyka PrestaShop: instalacja i konfiguracja

> Wprowadzenie Moduł dfopticlens pozwala sprzedawać okulary korekcyjne w PrestaShop 8 i 9. Na stronie oprawki klient wybiera typ soczewek, wpisuje receptę, wybiera soczewkę spośród proponowanych indeksów, dodaje powłoki i zatwierdza…

- Strona: <https://www.datafirefly.com/pl/documentation/dfopticlens/>
- Język: pl
- Zaktualizowano: 2026-09-24
- Inne języki: [fr](https://www.datafirefly.com/documentation/dfopticlens/index.md), [en](https://www.datafirefly.com/en/documentation/dfopticlens/index.md), [es](https://www.datafirefly.com/es/documentation/dfopticlens/index.md), [de](https://www.datafirefly.com/de/documentation/dfopticlens/index.md), [it](https://www.datafirefly.com/it/documentation/dfopticlens/index.md), [nl](https://www.datafirefly.com/nl/documentation/dfopticlens/index.md), [pt](https://www.datafirefly.com/pt/documentation/dfopticlens/index.md)
- Indeks: <https://www.datafirefly.com/pl/documentation/llms.txt>

## Wprowadzenie

Moduł **dfopticlens** pozwala sprzedawać okulary korekcyjne w PrestaShop 8 i 9. Na stronie oprawki klient wybiera typ soczewek, wpisuje receptę, wybiera soczewkę spośród proponowanych indeksów, dodaje powłoki i zatwierdza podsumowanie. Serwer sprawdza każdą wartość, oblicza cenę i sprawdza, czy korekcję da się wykonać w oprawce. Cena soczewek jest doliczana do pozycji oprawki przez natywną personalizację PrestaShop, a recepta towarzyszy zamówieniu aż do faktury.

## Instalacja

1. W _Moduły > Menedżer modułów_ kliknij _Prześlij moduł_ i wyślij plik `dfopticlens-1.1.0.zip`.
2. Instalacja tworzy menu _Sprzedaż > Optyka_ z czterema stronami: Recepty, Oprawki, Soczewki i indeksy, Powłoki.
3. Tworzonych jest pięć soczewek (1.50, 1.59 poliwęglan, 1.60, 1.67, 1.74) i siedem powłok z przykładowymi cenami. Dostosuj je przed uruchomieniem.
4. Tworzony jest folder `upload/dfopticlens/` chroniony plikiem `.htaccess`: pliki recept nigdy nie są dostępne z sieci.

Aktualizacja z 1.0.0: prześlij ZIP 1.1.0 na istniejącą wersję. Skrypt aktualizacji dodaje nowe ustawienia i hooki bez utraty danych.

## Konfiguracja modułu

Strona konfiguracji (przycisk _Konfiguruj_ modułu) grupuje ustawienia w trzech blokach.

### Wprowadzanie recepty

- **Zapis cylindra wysyłany do laboratorium**: cylinder ujemny, dodatni lub bez zmian. Klient zawsze wpisuje wartości z recepty, transpozycja następuje przy zapisie.
- **Przesyłanie pliku recepty**: wyłączone, opcjonalne lub wymagane, z maksymalnym rozmiarem w MB. Formaty: PDF, JPG, PNG, sprawdzane po zawartości.
- **Ostrzegaj, gdy recepta jest starsza niż** X lat (0 wyłącza).
- **Usuwaj recepty z porzuconych koszyków po** X dniach.
- **Przesyłanie pliku z konta po zamówieniu**: dodaje stronę Moje recepty do konta klienta.
- **Opcja Nie znam swojego rozstawu źrenic** i **używany średni rozstaw źrenic** (domyślnie 63 mm). Zamówienie jest wtedy oznaczane do sprawdzenia.

### Zasady wykonalności

- **Blokuj soczewki, których nie można wykonać**: domyślnie włączone. Po wyłączeniu zamówienie jest przyjmowane z ostrzeżeniem.
- **Naddatek na szlifowanie** i **naddatek średnicy efektywnej**, gdy ED oprawki jest nieznane (szacowane ED = A + naddatek).
- **Minimalna wysokość soczewki dla progresywnych** (28 mm) i **krótki kanał poniżej** (32 mm).
- Progi ostrzeżeń: różnica między oczami, decentracja na oko, moc dodatnia w oprawkach żyłkowych.
- **Grubość docelowa** polecanej soczewki, **grubość środka** soczewek ujemnych i **krawędzi** soczewek dodatnich (wierconych lub nie).

### Ceny

- **Ceny wpisywane z podatkiem** lub bez. Do soczewek stosowana jest reguła podatkowa produktu oprawki.
- **Dopłaty** za wysoką moc i wysoki cylinder: próg w dioptriach i kwota (0 wyłącza).

## Soczewki i indeksy

W _Sprzedaż > Optyka > Soczewki i indeksy_ każda soczewka ma:

- nazwę i krótki opis widoczne dla klienta, w każdym języku;
- współczynnik załamania, używany do szacowania grubości, i materiał do zlecenia warsztatowego;
- typy soczewek, dla których jest oferowana, z ceną za parę dla każdego: jednoogniskowe, progresywne, bez korekcji;
- minimalną i maksymalną sferę oraz maksymalny cylinder (wartość bezwzględna, w zapisie z cylindrem ujemnym jak zakresy producentów);
- największą dostępną średnicę półfabrykatu (0 wyłącza kontrolę) i możliwość wiercenia dla oprawek bezramkowych.

## Powłoki

W _Powłoki_ każda powłoka ma cenę za parę (0 pokazuje ją jako wliczoną). **Grupa wykluczająca** uniemożliwia łączenie dwóch powłok: powłoki z tym samym kodem, na przykład `tint` dla fotochromowej, barwienia przeciwsłonecznego i polaryzacji, wykluczają się nawzajem. Możesz też ograniczyć powłokę do wybranych soczewek, na przykład polaryzację do indeksów 1.50 i 1.60.

## Oprawki

Oprawka łączy produkt lub jedną z jego kombinacji z jego wymiarami. Blok soczewek pojawia się tylko przy produktach z włączoną oprawką.

### Tworzenie oprawki

1. W _Oprawki_ kliknij _Dodaj oprawkę_ albo na stronie produktu, w zakładce _Moduły_, kliknij _Dodaj wymiary oprawki_.
2. Wyszukaj produkt po nazwie, indeksie lub ID i wybierz _Wszystkie kombinacje_ albo konkretną kombinację. Oprawka ustawiona dla kombinacji ma pierwszeństwo.
3. Podaj typ (pełna, żyłkowa, bezramkowa), szerokość soczewki A, mostek DBL i wysokość soczewki B, wszystkie wymagane. To liczby nadrukowane na zauszniku: 52□18 daje A = 52 i DBL = 18.
4. Opcjonalnie: średnicę efektywną ED (w przeciwnym razie szacowaną) i maksymalną moc akceptowaną przez oprawkę.
5. Zaznacz oferowane typy soczewek i w razie potrzeby **Sprzedawaj tylko z soczewkami**.

Przy opcji Sprzedawaj tylko z soczewkami natywny przycisk koszyka otwiera wybór soczewek. Jeśli bezpośrednie wywołanie koszyka mimo to doda samą oprawkę, moduł usunie ją z koszyka.

### Import i eksport CSV

Przycisk _Eksportuj CSV_ daje plik we właściwym formacie. Import akceptuje średnik lub przecinek i te kolumny:

```
product;combination;frame_type;lens_width;lens_height;bridge;ed;max_power;vision_types;lens_required;active
```

- `product`: ID lub indeks produktu; `combination`: ID lub indeks kombinacji, puste lub 0 dla wszystkich.
- `frame_type`: full, semi lub rimless; `vision_types`: single|progressive|plano.
- Istniejąca oprawka (ten sam produkt i kombinacja) jest aktualizowana. Odrzucone wiersze są wyświetlane z numerem.

Przycisk _Ponownie synchronizuj produkty_ odbudowuje pola personalizacji produktów, przydatne, gdy pracownik bez uprawnień do modułu edytował produkty.

## Ścieżka klienta

1. **Typ**: jednoogniskowe, progresywne lub bez korekcji, zależnie od oferty oprawki. Bez korekcji krok recepty jest pomijany.
2. **Recepta**: tabela OP / OL, rozstaw źrenic jako jedna lub dwie wartości, data, plik i uwaga dla optyka. Zalogowany klient może użyć recepty z poprzedniego zamówienia.
3. **Soczewka**: karty z ceną za parę, przekrojem w skali, szacowaną grubością i polecaną soczewką. Soczewki niewykonalne są wyszarzone z podaniem powodu.
4. **Powłoki**: niedostępne dla wybranej soczewki są wyszarzone.
5. **Podsumowanie**: status wykonalności, uwagi, szczegóły ceny i suma za oprawkę i soczewki.

Wpisane dane zostają po odświeżeniu strony i są usuwane po dodaniu do koszyka.

## Zasady wykonalności

| Kontrola | Skutek |
| --- | --- |
| Sfera lub cylinder poza zakresem soczewki | Soczewka niedostępna |
| Potrzebna średnica półfabrykatu (ED + 2 × decentracja + naddatek) większa niż półfabrykat soczewki | Soczewka niedostępna, gdy blokada jest włączona |
| Oprawka bezramkowa i materiał niewiercony | Soczewka niedostępna, gdy blokada jest włączona |
| Wysokość B poniżej minimum dla progresywnych | Blokada (lub ostrzeżenie) |
| Wysokość B poniżej progu krótkiego kanału | Informacja |
| Moc powyżej maksimum oprawki | Blokada (lub ostrzeżenie) |
| Różnica między oczami, duża decentracja, wysoka moc dodatnia w żyłkowej, stara recepta, nieznany rozstaw źrenic | Ostrzeżenie, zamówienie oznaczone do sprawdzenia |

Obliczenia wykonywane są w zapisie z cylindrem ujemnym. Grubość jest szacowana wzorem na strzałkę: służy do porównania indeksów, a nie jest obliczeniem laboratorium.

## Ceny, rabaty i faktura

Cena soczewek jest zapisywana netto w personalizacji pozycji koszyka. PrestaShop dolicza ją do ceny oprawki i stosuje VAT produktu. Jeśli oprawka ma rabat procentowy (cena specyficzna lub grupa klientów), PrestaShop stosuje go także do soczewek: panel pokazuje przekreśloną cenę i wiersz Promocja oprawki obejmuje także soczewki, aby podana suma zgadzała się z koszykiem.

## Zamówienia i zlecenie warsztatowe

- Strona zamówienia w panelu administracyjnym pokazuje blok dla każdej recepty: wartości po transpozycji, soczewkę, powłoki, wymiary oprawki, decentrację i minimalny półfabrykat dla każdego oka, uwagi o wykonalności i szczegóły ceny.
- **Drukuj zlecenie warsztatowe** otwiera stronę A4 gotową do druku.
- **Pobierz plik recepty** pobiera skan przesłany przez klienta.
- _Sprzedaż > Optyka > Recepty_ wyświetla wszystkie recepty ze statusem: OK, do sprawdzenia, niewykonalne.

## Konto klienta: Moje recepty

Klient, który zamówił soczewki, widzi na swoim koncie link _Moje recepty_. Strona pokazuje każdą receptę z powiązanym zamówieniem. Jeśli przesyłanie pliku jest opcjonalne, a klient go nie dołączył, może go wysłać z tej strony; optyk znajdzie go potem w zamówieniu.

## Dane o zdrowiu i RODO

- Pliki recept są przechowywane poza folderem publicznym i można je pobrać tylko w panelu administracyjnym.
- Recepty z koszyków, które nigdy nie zostały zamówione, są usuwane po ustawionym czasie, razem z odpowiednią pozycją koszyka.
- Z oficjalnym modułem psgdpr eksport i usunięcie danych klienta obejmują jego recepty.

## Rozwiązywanie problemów

### Blok soczewek nie pojawia się na stronie produktu

Sprawdź, czy produkt ma włączoną oprawkę i czy motyw wyświetla hook `displayProductAdditionalInfo`. Wyczyść pamięć podręczną PrestaShop.

### Natywny przycisk koszyka nie otwiera panelu przy oprawce tylko z soczewkami

Moduł przechwytuje przyciski z atrybutem `data-button-action="add-to-cart"`. Jeśli motyw używa innego atrybutu, blokada po stronie serwera nadal działa: sama oprawka jest usuwana z koszyka.

### Suma w panelu różni się od koszyka

Rabat kwotowy dotyczy tylko oprawki, a reguła koszyka (kupon) dotyczy całego koszyka: nie pojawiają się w panelu soczewek.
