update
This commit is contained in:
122
.claude/commands/wygeneruj-projekty.md
Normal file
122
.claude/commands/wygeneruj-projekty.md
Normal file
@@ -0,0 +1,122 @@
|
||||
# Generowanie projektów graficznych z zamówień
|
||||
|
||||
Jesteś silnikiem generowania projektów graficznych dla zamówień w orderPRO. Twoje zadanie to znaleźć zamówienia wymagające generacji, zinterpretować dane klienta i uruchomić odpowiedni skrypt.
|
||||
|
||||
## Przepływ
|
||||
|
||||
### 1. Połącz się z bazą danych
|
||||
|
||||
Wczytaj dane z pliku `.env` w katalogu projektu:
|
||||
- `DB_HOST_REMOTE` — host bazy (użyj remote, nie localhost)
|
||||
- `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD`, `DB_PORT`
|
||||
|
||||
Użyj `"C:/xampp/mysql/bin/mysql.exe"` do zapytań (z flagą `--default-character-set=utf8mb4`).
|
||||
|
||||
### 2. Pobierz aktywne mapowania
|
||||
|
||||
```sql
|
||||
SELECT id, product_name_pattern, script_name, output_dir
|
||||
FROM project_mappings
|
||||
WHERE is_active = 1;
|
||||
```
|
||||
|
||||
Jeśli brak mapowań — poinformuj użytkownika i zakończ.
|
||||
|
||||
### 3. Znajdź zamówienia do generacji (z dopasowaniem do mapowań)
|
||||
|
||||
Schemat bazy danych — kluczowe kolumny:
|
||||
- `orders.status_code` — aktualny kod statusu wewnętrznego orderPRO
|
||||
- `order_statuses.code` — kody statusów, wiązanie: `orders.status_code = order_statuses.code`
|
||||
- `order_statuses.group_id` → `order_status_groups.id` — grupy statusów
|
||||
- `order_items.original_name` — nazwa produktu
|
||||
- `order_items.personalization` — dane personalizacji (plain text, linie oddzielone \n)
|
||||
- `order_items.project_generated` — 0 = nie wygenerowano, 1 = wygenerowano
|
||||
- `order_addresses.address_type` — typ adresu ('customer', 'delivery', 'invoice')
|
||||
- `order_addresses.name` — pełne imię i nazwisko kupującego
|
||||
|
||||
Jedno zapytanie łączy zamówienia z mapowaniami (JOIN eliminuje produkty bez mapowania):
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
oi.id AS item_id,
|
||||
oi.original_name AS product_name,
|
||||
oi.personalization,
|
||||
oi.quantity,
|
||||
o.id AS order_id,
|
||||
o.internal_order_number,
|
||||
o.status_code AS status_code,
|
||||
oa.name AS buyer_name,
|
||||
pm.script_name,
|
||||
pm.output_dir
|
||||
FROM order_items oi
|
||||
JOIN orders o ON oi.order_id = o.id
|
||||
JOIN order_statuses os ON o.status_code = os.code
|
||||
JOIN order_status_groups osg ON os.group_id = osg.id
|
||||
JOIN project_mappings pm ON pm.is_active = 1
|
||||
AND oi.original_name LIKE CONCAT('%', pm.product_name_pattern, '%')
|
||||
LEFT JOIN order_addresses oa ON o.id = oa.order_id AND oa.address_type = 'customer'
|
||||
WHERE osg.id = 2
|
||||
AND oi.project_generated = 0
|
||||
AND oi.personalization IS NOT NULL
|
||||
AND oi.personalization <> ''
|
||||
ORDER BY o.id;
|
||||
```
|
||||
|
||||
Jeśli brak wyników — poinformuj użytkownika że nie ma zamówień do generacji pasujących do aktywnych mapowań.
|
||||
|
||||
### 5. Zinterpretuj dane klienta (AI normalizacja)
|
||||
|
||||
Dla każdego pasującego produktu:
|
||||
- Przeczytaj pole `personalization` z `order_items`
|
||||
- Zinterpretuj dane kontekstowo. Typowe dane to:
|
||||
- **Imię żeńskie i męskie** — mogą być w formacie "Kasia i Tomek", "Imiona: Kasia, Tomek", "Imię żeńskie: Kasia\nImię męskie: Tomek", "Imiona młodej pary: Kasia i Tomek", itp.
|
||||
- **Data uroczystości** — format DD.MM.YYYY, może być opisana jako "Data: 30.04.2026" lub "Data uroczystości: 30.04.2026" lub po prostu "30.04.2026"
|
||||
- **Życzenia** — opcjonalny tekst (np. "Na zdrowie!", "Dziękujemy!"). Jeśli brak — zostaw domyślne z szablonu
|
||||
- Ignoruj pola takie jak "Kolor tekstu", "Zakrętka" — te dotyczą produkcji, nie projektu
|
||||
- **Nazwa klienta** (do nazwy pliku wyjściowego) — z `order_addresses.name` (pole `buyer_name` w zapytaniu)
|
||||
|
||||
### 6. Przedstaw plan i czekaj na potwierdzenie
|
||||
|
||||
Wyświetl tabelę:
|
||||
```
|
||||
Zamówienie | Produkt | Imię żeńskie | Imię męskie | Data | Życzenia | Klient (nazwa pliku)
|
||||
OP000123 | Buteleczka... | Kinga | Łukasz | 30.04.2026 | (domyślne) | Kinga Klimczak
|
||||
```
|
||||
|
||||
Zapytaj: "Wygenerować projekty? (tak/nie)"
|
||||
|
||||
### 7. Uruchom generowanie
|
||||
|
||||
Przed generowaniem sprawdź czy Photoshop jest uruchomiony:
|
||||
```bash
|
||||
tasklist //FI "IMAGENAME eq Photoshop.exe" 2>/dev/null | grep -i photoshop
|
||||
```
|
||||
Jeśli Photoshop nie jest uruchomiony — poinformuj użytkownika i poczekaj aż go uruchomi.
|
||||
|
||||
Dla każdego potwierdzonego produktu:
|
||||
1. Uruchom skrypt: `python tools/generowanie/{script_name} --imie_zenskie "X" --imie_meskie "Y" --data "DD.MM.YYYY" --klient "Imię Nazwisko"` (dodaj `--zyczenia` jeśli klient podał niestandardowe)
|
||||
2. Jeśli mapowanie ma `output_dir` — skrypt powinien zapisać tam (jeśli obsługuje)
|
||||
|
||||
### 8. Oznacz w bazie
|
||||
|
||||
Po udanym generowaniu:
|
||||
```sql
|
||||
UPDATE order_items
|
||||
SET project_generated = 1, project_generated_at = NOW()
|
||||
WHERE id = {item_id};
|
||||
```
|
||||
|
||||
### 9. Raport końcowy
|
||||
|
||||
Wyświetl podsumowanie:
|
||||
- Ile projektów wygenerowano
|
||||
- Ile pominięto (brak mapowania, brak personalizacji)
|
||||
- Ewentualne błędy
|
||||
|
||||
## Ważne zasady
|
||||
|
||||
- **Zawsze pytaj o potwierdzenie** przed generowaniem
|
||||
- **Photoshop musi być uruchomiony** — sprawdź przed generowaniem
|
||||
- **Nie oznaczaj jako wygenerowane** jeśli skrypt zwrócił błąd
|
||||
- **Jeśli nie potrafisz zinterpretować personalizacji** — wyświetl surowe dane i zapytaj użytkownika
|
||||
- Skrypty generujące znajdują się w `tools/generowanie/` w katalogu projektu orderPRO
|
||||
Reference in New Issue
Block a user