aktualizacja modułu
This commit is contained in:
134
docs/empik.md
Normal file
134
docs/empik.md
Normal file
@@ -0,0 +1,134 @@
|
||||
# Modyfikacje modułu empikmarketplace
|
||||
|
||||
Data modyfikacji: 2026-03-11
|
||||
|
||||
## Problem
|
||||
|
||||
Moduł empikmarketplace przy nieudanym imporcie zamówienia z EMPIK do PrestaShop powodował:
|
||||
1. Brak powiadomienia o błędzie — nikt nie wiedział, że zamówienie nie przeszło
|
||||
2. Dziury w numeracji zamówień (`id_order`) — MySQL AUTO_INCREMENT nie cofa się po ROLLBACK transakcji
|
||||
|
||||
## Zmodyfikowane pliki
|
||||
|
||||
### `src/Processor/OrderProcessor.php`
|
||||
|
||||
Dodany import `Mail` na górze pliku:
|
||||
|
||||
```php
|
||||
use Mail;
|
||||
```
|
||||
|
||||
Dodana stała z adresem email do powiadomień:
|
||||
|
||||
```php
|
||||
class OrderProcessor
|
||||
{
|
||||
const CODE_WAITING_ACCEPTANCE = 'WAITING_ACCEPTANCE';
|
||||
const CODE_SHIPPING = 'SHIPPING';
|
||||
const ERROR_NOTIFICATION_EMAIL = 'jacek.pyziak@project-pro.pl';
|
||||
```
|
||||
|
||||
Zmodyfikowana metoda `import()` — dodano wywołanie resetu AUTO_INCREMENT i wysyłki emaila w bloku catch:
|
||||
|
||||
```php
|
||||
protected function import(EmpikOrderWrapper $empikOrder)
|
||||
{
|
||||
try {
|
||||
Db::getInstance()->execute('START TRANSACTION');
|
||||
$this->orderFulfiller->fulfill($empikOrder);
|
||||
Db::getInstance()->execute('COMMIT');
|
||||
} catch (Exception $e) {
|
||||
Db::getInstance()->execute('ROLLBACK');
|
||||
$this->resetOrderAutoIncrement();
|
||||
|
||||
$data = $empikOrder->getData();
|
||||
$empikOrderId = isset($data['order_id']) ? $data['order_id'] : 'unknown';
|
||||
$errorMsg = sprintf('Error importing EMPIK order [%s]: %s', $empikOrderId, $e->getMessage());
|
||||
$this->logger->logError($errorMsg);
|
||||
$this->sendFailureNotification($empikOrderId, $e);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dodana metoda `resetOrderAutoIncrement()` — zapobiega dziurom w numeracji zamówień:
|
||||
|
||||
```php
|
||||
protected function resetOrderAutoIncrement()
|
||||
{
|
||||
try {
|
||||
$lastId = (int) Db::getInstance()->getValue(
|
||||
'SELECT MAX(id_order) FROM ' . _DB_PREFIX_ . 'orders'
|
||||
);
|
||||
Db::getInstance()->execute(
|
||||
'ALTER TABLE ' . _DB_PREFIX_ . 'orders AUTO_INCREMENT = ' . ($lastId + 1)
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
$this->logger->logError(sprintf('Error resetting AUTO_INCREMENT: %s', $e->getMessage()));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Dodana metoda `sendFailureNotification()` — wysyła email z informacją o błędzie:
|
||||
|
||||
```php
|
||||
protected function sendFailureNotification($empikOrderId, Exception $exception)
|
||||
{
|
||||
try {
|
||||
$shopName = Configuration::get('PS_SHOP_NAME');
|
||||
$subject = sprintf('[%s] Błąd importu zamówienia EMPIK: %s', $shopName, $empikOrderId);
|
||||
|
||||
$body = sprintf(
|
||||
"Zamówienie EMPIK: %s\nData: %s\nBłąd: %s\n\nStack trace:\n%s",
|
||||
$empikOrderId,
|
||||
date('Y-m-d H:i:s'),
|
||||
$exception->getMessage(),
|
||||
$exception->getTraceAsString()
|
||||
);
|
||||
|
||||
Mail::send(
|
||||
(int) Configuration::get('PS_LANG_DEFAULT'),
|
||||
'empik_import_error',
|
||||
$subject,
|
||||
[
|
||||
'{empik_order_id}' => $empikOrderId,
|
||||
'{error_message}' => $exception->getMessage(),
|
||||
'{error_date}' => date('Y-m-d H:i:s'),
|
||||
'{stack_trace}' => nl2br($exception->getTraceAsString()),
|
||||
],
|
||||
self::ERROR_NOTIFICATION_EMAIL,
|
||||
null,
|
||||
Configuration::get('PS_SHOP_EMAIL'),
|
||||
$shopName,
|
||||
null,
|
||||
null,
|
||||
_PS_MODULE_DIR_ . 'empikmarketplace/mails/'
|
||||
);
|
||||
} catch (Exception $e) {
|
||||
$this->logger->logError(sprintf('Error sending failure notification email: %s', $e->getMessage()));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Dodane pliki
|
||||
|
||||
### `mails/pl/empik_import_error.html`
|
||||
|
||||
Szablon HTML emaila z powiadomieniem o błędzie. Zawiera placeholdery:
|
||||
- `{empik_order_id}` — ID zamówienia EMPIK
|
||||
- `{error_date}` — data błędu
|
||||
- `{error_message}` — komunikat błędu
|
||||
- `{stack_trace}` — stack trace wyjątku
|
||||
|
||||
### `mails/pl/empik_import_error.txt`
|
||||
|
||||
Wersja tekstowa tego samego szablonu (wymagana przez PrestaShop `Mail::send()`).
|
||||
|
||||
## Po aktualizacji modułu
|
||||
|
||||
Jeśli moduł empikmarketplace zostanie zaktualizowany, powyższe zmiany zostaną nadpisane. Należy ponownie:
|
||||
|
||||
1. Dodać `use Mail;` do importów w `OrderProcessor.php`
|
||||
2. Dodać stałą `ERROR_NOTIFICATION_EMAIL`
|
||||
3. Zmodyfikować metodę `import()` zgodnie z powyższym kodem
|
||||
4. Dodać metody `resetOrderAutoIncrement()` i `sendFailureNotification()`
|
||||
5. Skopiować szablony emaili do `mails/pl/`
|
||||
Reference in New Issue
Block a user