feat(129): erli status mapping sync

Phase 129 complete:
- Add Erli pull/push status mapping tables, seeds and repositories
- Wire Erli status sync cron for inbox pull and manual-only push
- Add tabbed Erli settings UI, tests and documentation

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-05-16 00:27:08 +02:00
parent c127ebf04d
commit 7972bb9fa4
28 changed files with 2021 additions and 57 deletions

View File

@@ -35,6 +35,8 @@ use App\Modules\Settings\ErliIntegrationRepository;
use App\Modules\Settings\ErliOrderMapper;
use App\Modules\Settings\ErliOrderSyncStateRepository;
use App\Modules\Settings\ErliOrdersSyncService;
use App\Modules\Settings\ErliPullStatusMappingRepository;
use App\Modules\Settings\ErliStatusMappingRepository;
use App\Modules\Settings\FakturowniaApiClient;
use App\Modules\Settings\FakturowniaIntegrationController;
use App\Modules\Settings\FakturowniaIntegrationRepository;
@@ -239,6 +241,8 @@ return static function (Application $app): void {
$app->db(),
(string) $app->config('app.integrations.secret', '')
);
$erliPullStatusMappingRepository = new ErliPullStatusMappingRepository($app->db());
$erliStatusMappingRepository = new ErliStatusMappingRepository($app->db());
$notificationRepository = new NotificationRepository($app->db());
$smsMessageRepository = new SmsMessageRepository($app->db());
$smsConversationService = new SmsConversationService(
@@ -389,8 +393,9 @@ return static function (Application $app): void {
new ErliApiClient(),
new OrderImportRepository($app->db()),
new OrdersRepository($app->db()),
new ErliOrderMapper(),
$automationService
new ErliOrderMapper($erliPullStatusMappingRepository),
$automationService,
$erliPullStatusMappingRepository
);
$erliIntegrationController = new ErliIntegrationController(
$template,
@@ -400,7 +405,10 @@ return static function (Application $app): void {
new ErliApiClient(),
new IntegrationsRepository($app->db()),
$cronRepository,
$erliOrdersSyncService
$erliOrdersSyncService,
$app->orderStatuses(),
$erliStatusMappingRepository,
$erliPullStatusMappingRepository
);
$allegroIntegrationController = new AllegroIntegrationController(
$template,
@@ -650,6 +658,8 @@ return static function (Application $app): void {
$router->post('/settings/integrations/erli/save', [$erliIntegrationController, 'save'], [$authMiddleware]);
$router->post('/settings/integrations/erli/test', [$erliIntegrationController, 'test'], [$authMiddleware]);
$router->post('/settings/integrations/erli/import', [$erliIntegrationController, 'importNow'], [$authMiddleware]);
$router->post('/settings/integrations/erli/statuses/save-pull', [$erliIntegrationController, 'savePullStatusMappings'], [$authMiddleware]);
$router->post('/settings/integrations/erli/statuses/save-push', [$erliIntegrationController, 'savePushStatusMappings'], [$authMiddleware]);
$router->get('/settings/integrations/shoppro', [$shopproIntegrationsController, 'index'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/save', [$shopproIntegrationsController, 'save'], [$authMiddleware]);
$router->post('/settings/integrations/shoppro/test', [$shopproIntegrationsController, 'test'], [$authMiddleware]);