DeltaPlus Integrare ERP
Portal B2B Laravel conectat la ERP ManFin pentru sincronizarea catalogului și localităților, prețuri diferențiate per client, feed-uri XML/CSV/JSON, comenzi online și export asincron al comenzilor în ERP.

Stack principal
Provocarea
Provocarea principală este menținerea unui catalog B2B coerent între o aplicație Laravel și un ERP ManFin accesat prin stored procedures, păstrând în același timp prețuri diferențiate pe client, stoc și parametri tehnici actualizați, feed-uri externe și un checkout care trebuie să transforme o comandă web într-o structură compatibilă cu ERP-ul, inclusiv ecotaxă și linii auxiliare.
Soluția
Soluția separă integrarea ManFin într-un ErpService și mută operațiile lente în joburi Laravel Queue. Produsele, categoriile și localitățile sunt sincronizate în tabele locale MySQL, portalul Blade/Tailwind consumă aceste date pentru experiența B2B, iar FeedService generează exporturi personalizate pe cont. Comenzile sunt create tranzacțional în baza locală și apoi exportate asincron prin stored procedures, cu retry și verificarea ID-ului ERP deja salvat. Filament oferă administrare și declanșarea manuală a sincronizărilor, iar Sanctum protejează API-ul de feed.
Complexitate notabilă
DeltaPlus Integrare ERP conectează un portal B2B modern cu sistemul ERP ManFin folosit ca sursă operațională pentru produse, categorii, localități și înregistrarea comenzilor. Integrarea nu tratează ERP-ul ca pe un API generic: serviciul dedicat folosește PDO/FreeTDS și stored procedures specifice ManFin, verifică un endpoint primar și unul fallback și expune operațiile necesare pentru catalog, parametri tehnici, ecotaxă, clienți și comenzi.
Catalogul local este sincronizat prin joburi Laravel Queue. Produsele sunt aduse după CodStoc și actualizate împreună cu denumirea, prețurile de listă și promo, stocul, EAN-ul, imaginea, specificațiile, garanția și alți indicatori ERP. Parametrii tehnici sunt reîmprospătați per produs, asocierea de categorie este sincronizată, iar ecotaxa este rezolvată separat și persistată pentru exportul corect al comenzilor. Categoriile folosesc relația ierarhică din ERP, iar județele și localitățile sunt importate în bulk în loturi de 500 de rânduri pentru checkout.
Pe partea de client, aplicația oferă autentificare, dashboard, catalog filtrabil și paginat, pagină de produs, coș, checkout și istoric de comenzi. Prețul afișat pornește din prețul de listă sau promo configurat pe cont și aplică discountul ori adaosul comercial al clientului. Stocul expus în portal și feed este plafonat la 50 de unități, iar căutarea catalogului acoperă denumire, SKU și EAN. Checkout-ul suportă persoană fizică sau juridică și selectarea județului/localității din datele sincronizate din ERP.
Comanda este persistată local înainte de integrarea externă, iar exportul către ManFin rulează asincron. Jobul creează clientul ERP, antetul comenzii și liniile de produs, convertește prețurile la valoarea fără TVA folosită de ERP, separă ecotaxa în linii proprii și poate adăuga liniile tehnice pentru transport și ramburs. Exportul are trei încercări cu backoff de 60 de secunde și evită relansarea atunci când ID-ul ERP a fost deja salvat local. Codul nu implementează însă un mecanism distribuit de idempotency sau locking între crearea comenzii în ERP și salvarea ID-ului local, deci această zonă rămâne una dintre direcțiile importante de hardening.
Aplicația expune și un API v1 protejat cu Laravel Sanctum. Utilizatorii autentificați pot obține feed-ul personalizat în XML, CSV sau JSON, iar feed-ul generat este salvat per cont. Există și un endpoint intern pentru regenerarea CSV, protejat suplimentar prin restricție de IP. Separat, o comandă CLI poate genera toate cele trei formate pentru un utilizator sau pentru toate conturile. Generarea este corect personalizată pe prețul clientului, dar în implementarea actuală încarcă întregul catalog activ în memorie pentru fiecare utilizator, fără streaming sau chunking.
Panoul de administrare Filament gestionează utilizatori, produse, categorii și comenzi și include o pagină dedicată sincronizării ERP. Administratorul poate verifica reachability pentru hostul primar și fallback, poate trimite în coadă sincronizarea categoriilor, localităților și produselor și poate retrimite manual o comandă spre ERP atunci când aceasta nu are încă ID extern. Accesul la Filament este limitat conturilor active cu flag de administrator; portalul și login-ul API folosesc autentificarea standard, dar codul actual nu adaugă explicit filtrul is_active la autentificarea clienților.
Repository-ul include o cale de migrare din vechile tabele wpke_erp_* către schema erp_*, ceea ce indică modernizarea unui flux existent, nu un proiect demonstrat ca fiind construit complet de la zero. Totodată, manifestele curente cer PHP 8.2 și Laravel 12, în timp ce imaginea Docker legacy pornește de la PHP 8.0, iar compose-ul denumit prod este practic identic cu cel local și nu definește worker de queue, scheduler, healthcheck sau CI/CD. Testele existente sunt doar exemplele Laravel implicite. În consecință, seed-ul tratează integrarea, modelul de date și fluxurile B2B ca funcționalități confirmate, dar nu revendică deployment automatizat, acoperire reală de teste, plăți online, sincronizare programată, email/SMS, analytics sau AI.
Rezultate cheie
- Portal B2B autentificat cu dashboard, catalog, pagină de produs, coș, checkout și istoric de comenzi
- Catalog cu căutare după denumire, SKU sau EAN, filtrare pe categorie și paginare la 24 de produse
- Preț de listă sau promo selectabil per cont, completat de discount sau adaos comercial per client
- Sincronizare asincronă din ManFin pentru produse, parametri tehnici, categorii și localități
- Rezolvare și persistență separată a ecotaxei pentru produsele care o folosesc
- Import de localități în batch-uri de 500 de rânduri pentru alimentarea checkout-ului
- Export asincron al comenzilor către ERP cu creare client, antet și linii de comandă
- Separarea ecotaxei, transportului și taxei de ramburs în linii ERP distincte atunci când se aplică
- Retry pentru exportul comenzilor către ERP: trei încercări cu backoff de 60 de secunde
- Feed-uri personalizate per client în formatele XML, CSV și JSON
- API v1 autentificat cu Laravel Sanctum pentru login, profil și feed
- Endpoint intern de regenerare CSV cu autentificare și restricție suplimentară de IP
- Panou Filament pentru produse, categorii, utilizatori, comenzi și operații de sincronizare ERP
- Verificarea disponibilității unui host ERP primar și a unui host fallback
- Comandă CLI pentru testarea conectivității ERP și a stored procedures esențiale
- Script de migrare a datelor din schema legacy wpke_erp_* către noua schemă erp_*
Proiecte asemănătoare
- Farmadati Laravel APIBackend de integrare care preia nomenclatoare Farmadati prin SOAP, descarcă dataset-uri paginate, parsează XML în streaming, normalizează schema și persistă produse, producători, descrieri și metadate de imagini pentru consum prin API.
- Platformă Comenzi SamedayConcept tehnic pentru centralizarea comenzilor din mai multe magazine WooCommerce și declanșarea generării AWB dintr-un singur panou, reutilizând integrarea de curier existentă în fiecare magazin în locul reconstruirii ei în backend-ul central.
- Migrare Avanticart → WooCommerceDiscovery tehnic pentru migrarea unui magazin Avanticart în WooCommerce: inventarierea modelului de date, maparea produselor și variațiilor, analiza prețurilor și relațiilor și utilitare PHP pentru verificarea imaginilor din CDN.
Vrei ceva similar?
Începe cu wizard-ul de estimare — răspunzi la câteva întrebări și primești un range de preț + timeline realist.