Workflow: Portal B2B — Comandă Client Self-Service
Modules involved: Client Portal · Price Lists · Estimates · Clients & Client Groups · Invoices · Warehouse · Proposals · Workflow Automation · Sales Agent
Who uses it: Clienți B2B (Revânzători, Distribuitori, Corporate), Agent Vânzări, Depozit, Financiar
Durata tipică: Ore – zile (de la plasarea comenzii în portal la livrare și facturare)
Overview
Portalul B2B permite revânzătorilor, distribuitorilor și clienților corporate să plaseze comenzi direct în CRMConnect, fără a implica agentul de vânzări pentru fiecare tranzacție. Clientul se autentifică în portalul propriu (/clientarea), vede catalogul cu prețurile sale negociate (din Price List asignată clientului sau grupului de clienți), adaugă produse în coș și plasează comanda — care devine automat un Estimate în CRM.
Scenariul ideal: comenzi recurente de reaprovizionare, distribuitori cu volum constant care nu mai au nevoie de negociere la fiecare comandă. Agentul de vânzări este notificat automat și poate revizui/aproba comanda înainte de procesare.
Legătură cu alte workflow-uri: Odată comanda aprobată și ajunsă la depozit, fluxul de picking → packing → AWB urmează același traseu ca OmniSales Fulfillment. Acest document acoperă specific aspectele B2B: portalul client, prețurile personalizate și aprobarea internă.
Diagrama fluxului (ASCII)
CLIENT B2B (Revânzător / Distribuitor / Corporate)
│ autentificat în portal: /clientarea
│ (credențiale create de agent sau trimise automat la signup)
│
↓
[CATALOG CU PREȚURI PERSONALIZATE]
│ Price List asignată clientului (sau grupului din care face parte)
│ prețuri negociate, nu prețurile publice
│ stoc vizibil (dacă permisiunea e activă în setările portalului)
│ filtrare categorii, căutare cod produs, cantitate minimă
│
↓
[PLASARE COMANDĂ DIN PORTAL]
│ client selectează produse + cantități → coș → finalizare
│ → Estimate creat în CRM cu status "Draft" sau "Sent"
│ → notificare automată agent responsabil (Workflow Automation)
│ → email confirmare client (dacă configurat)
│
↓
[REVIZIE INTERNĂ (opțional, configurabil)]
│ agentul verifică: stoc, credit limit, prețuri speciale, discount suplimentar
│ ├── Aprobat → Estimate confirmat → status "Accepted"
│ ├── Modificat → agent ajustează liniile → clientul notificat în portal
│ └── Respins → client notificat cu motiv → poate plasa comandă nouă
│
↓
[PROCESARE DEPOZIT]
│ Aviz de Livrare generat din Estimate confirmat
│ Packing List → Picking → AWB generat (Innoship / Couriers)
│ status vizibil în portalul clientului (dacă permisiunea e activă)
│
↓
[FACTURARE]
│ factură generată din Estimate sau la expediere
│ vizibilă în portal → tab Invoices
│ client poate descărca PDF
│ plată online prin gateway (dacă configurat)
│
↓
[ISTORIC ÎN PORTAL]
│ clientul vede toate comenzile + statusuri + facturi + avize
│ poate relansa o comandă anterioară (dacă funcționalitate activă)
│
[COMANDĂ COMPLETĂ ✓]
Pas cu pas
1. Configurarea accesului clientului B2B în portal
Unde: /admin/clients → fișa clientului → tab Portal
Înainte ca un client să poată folosi portalul B2B, agentul configurează:
Credențiale portal:
| Câmp | Unde | Note |
|---|---|---|
| Email portal | Fișa clientului → Contact principal | Emailul de autentificare |
| Parolă | Trimisă prin email automat sau setată manual | Clientul o schimbă la primul login |
| Permisiuni portal | Setări per client: vizualizare stoc, descărcare documente, plasare comenzi | Configurabil granular |
Grup de clienți:
Dacă mai mulți clienți au aceleași condiții comerciale, grupează-i:
/admin/clients→ Client Groups → Crează grup (ex. "Distribuitori Tier 1", "Revânzători Sud")- Asignează clientul la grup
- Asignează Price List la grup (prețul se aplică automat tuturor clienților din grup)
Verificare acces: Clientul se autentifică la /clientarea cu emailul și parola setate.
2. Catalogul cu prețuri personalizate
Unde: Portal client /clientarea → Secțiunea Comenzi / Catalog
Clientul vede doar prețurile sale, nu prețurile publice. Mecanismul:
Ierarhia de prețuri aplicată în portal:
| Prioritate | Sursă preț | Condiție |
|---|---|---|
| 1 (cel mai specific) | Price List asignată direct clientului | partner_client = id_client |
| 2 | Price List asignată grupului clientului | partner_group = id_grup |
| 3 | Price List promoțională activă | ispromotion = 1 + în fereastra de date |
| 4 | Price List implicită | is_default = 1 |
| 5 | Prețul standard al produsului | Fallback — dacă produsul nu e în nicio price list |
Configurare Price List per client:
/admin/sales/price_lists→ Add sau Edit price list existentă- Câmp Partner Client → selectează clientul
- Sau câmp Partner Group → selectează grupul de clienți
- Completează prețurile pentru fiecare produs din catalog
Sfat practic: Folosește funcția Clone pe o Price List existentă pentru a crea rapid variante pentru clienți similari. Ajustezi doar produsele cu prețuri diferite.
Stoc vizibil în catalog:
- Configurabil în setările portalului per client sau global
- Clientul poate vedea
qty_available— cantitatea disponibilă pentru rezervare - Util pentru a preveni comenzile pe stoc 0; dezactivează dacă nu vrei să dezvălui stocul real
3. Plasarea comenzii din portal
Unde: Portal /clientarea → Nou comandă / Coș
Fluxul de plasare:
- Clientul navighează catalogul sau caută după cod produs / denumire
- Adaugă produsele dorite cu cantitățile (respectând cantitatea minimă dacă e setată)
- Revizuiește coșul: produse, cantități, prețuri unitare, total
- Selectează adresa de livrare (din adresele salvate sau introduce una nouă)
- Opțional: adaugă note / referință comandă proprie (ex. numărul PO intern al clientului)
- Finalizează comanda → Commandă plasată
Ce se creează în CRM la plasarea comenzii:
| Document | Status inițial | Observație |
|---|---|---|
| Estimate (Sales Order) | Draft (1) sau Sent (2) | Configurabil — trimis direct sau în draft pentru revizie |
| Notificare agent | — | Email/task automat prin Workflow Automation |
| Confirmare client | — | Email automat opțional |
Câmpuri cheie pe Estimate creat din portal:
| Câmp | Valoare | Note |
|---|---|---|
clientid |
ID clientul autentificat | Legătura cu fișa clientului |
sale_agent |
ID agentul responsabil | Agentul asociat clientului |
price_list_id |
ID Price List aplicată | Prețurile clientului |
| Linii produse | Din coșul clientului | Cantități + prețuri din Price List |
| Note client | Câmpul de note din portal | Referință PO intern, instrucțiuni livrare |
Statusurile Estimate:
| Cod | Status | Descriere |
|---|---|---|
| 1 | Draft | Creat, nerevizuit de agent |
| 2 | Sent | Vizibil clientului în portal ca trimis |
| 3 | Declined | Respins intern (clientul notificat) |
| 4 | Accepted | Confirmat → poate genera factură/aviz livrare |
| 5 | Expired | Data de expirare depășită |
4. Notificarea și revizia internă (opțional)
Unde: /admin/estimates · /admin/workflow_automation
4.1 Notificarea automată a agentului
La plasarea comenzii din portal, Workflow Automation declanșează automat notificarea:
Configurare Workflow Automation:
- Trigger: Estimate → Created (sau Status Changed to Draft)
- Condiție (opțional):
sale_agent = Agent X→ notifică doar agentul responsabil - Acțiuni:
- Send Email → agent responsabil: "Comandă nouă de la [Client] — [sumă] lei"
- Create Task → task de revizie asignat agentului (dacă aprobare obligatorie)
- Webhook → integrare externă (Slack, Teams) dacă folosiți
4.2 Revizia agentului
Agentul deschide Estimate-ul din notificare sau din /admin/estimates:
Ce verifică agentul:
| Verificare | Unde | Acțiune dacă problemă |
|---|---|---|
| Stoc disponibil | Fișa produsului → Inventory | Contactează depozitul; propune dată livrare alternativă |
| Credit limit client | Fișa clientului → Sold | Dacă depășit: Hold până la regularizare |
| Prețuri corecte | Liniile Estimate | Compară cu Price List; corectează dacă eroare |
| Discount suplimentar | Negociat telefonic | Adaugă discount pe linie sau global pe Estimate |
| Adresă livrare | Tab livrare | Verifică dacă adresa nouă e corectă |
Scenarii de revizie:
Comandă OK → Estimate: status Accepted (4) → continuă la depozit
Comandă necesită modificare →
Agentul editează liniile
Clientul notificat prin portal / email
Clientul confirmă modificările (sau plasează comandă nouă)
Comandă respinsă (ex. client blocat la plată) →
Estimate: status Declined (3)
Email automat client cu motiv
Aprobare fără revizie: Dacă clientul este de încredere și prețurile sunt standardizate, poți configura aprobarea automată — Estimate trece direct la Accepted fără intervenție umană (Workflow Automation → Update Field: status = 4).
5. Dacă clientul cere ofertă înainte de comandă — Proposals
Unde: /admin/proposals
Unii clienți B2B solicită o ofertă formală înainte de a plasa comanda (licitații, bugete de aprobare internă).
Fluxul cu Proposal:
Client solicită ofertă (telefon/email) → Agentul crează Proposal în CRM
│ Proposal trimis → link portal sau email
│ Client revizuiește în portal
│
├── Acceptat → Convert Proposal → Estimate (comandă)
│ → restul fluxului normal
│
└── Negocieri → agent actualizează Proposal (versiuni)
→ trimite din nou
Statusuri Proposal:
| Cod | Status |
|---|---|
| 6 | Draft |
| 4 | Sent — trimis clientului |
| 1 | Open/Viewed — clientul a deschis link-ul |
| 3 | Accepted |
| 2 | Declined |
| 5 | Revised — versiune nouă trimisă |
6. Procesarea la depozit
Unde: /admin/warehouse/manage_delivery · /admin/warehouse/manage_packing_list
Odată Estimate-ul confirmat (status Accepted), fluxul intră în depozit:
Creare Aviz de Livrare:
- Automată din Estimate confirmat → dacă
auto_create_goods_delivery = 1 - Sau manuală: din Estimate → buton Generează Aviz Livrare
Picking → Packing → AWB: Același flux ca în OmniSales Fulfillment, secțiunile 2-4:
- Aviz de Livrare (
ready_for_packing) - Packing List cu dimensiuni colet
- AWB generat prin Innoship sau Couriers direct
- Status actualizat → vizibil în portalul clientului
Vizibilitate status în portal:
| Ce vede clientul | Condiție |
|---|---|
| Status Estimate: Draft / Accepted / Declined | Întotdeauna |
| Status livrare: În pregătire / Expediat / Livrat | Dacă permisiunea vizualizare status e activă |
| Număr AWB + link tracking curier | Dacă trimis în email sau afișat în portal |
7. Facturarea și plata
Unde: /admin/invoices · Portal client /clientarea → tab Invoices
Generare factură:
| Mod | Trigger | Configurare |
|---|---|---|
| Automată la Estimate Accepted | Estimate confirmat | estimate_auto_convert_to_invoice_on_client_accept = 1 |
| Automată la expediere | AWB generat / Shipping status | Setări canal sau Workflow Automation |
| Manuală | Operator din Estimate → Convert to Invoice | Implicit |
Factura în portalul clientului:
Odată generată, factura apare în portalul clientului:
- Tab Invoices → lista facturilor cu status (Draft / Trimisă / Plătită / Întârziată)
- Download PDF — clientul descarcă factura pentru contabilitate proprie
- Plată online — dacă gateway de plată configurat (Stripe, PayU, etc.) → buton "Plătește acum"
- Sold total — rezumat sume datorate per client
Termene de plată B2B: Termenul de plată (30, 60, 90 zile) se setează pe fișa clientului și se preia automat pe factură. Factura apare cu status Overdue (4) dacă termenul e depășit — declanșează automat emailuri de reminder prin Workflow Automation.
eFactura B2B: Dacă clientul e persoană juridică cu CIF → eFactura trimisă automat la ANAF la emiterea facturii (același mecanism ca în E-commerce Fulfillment).
8. Istoricul comenzilor în portal
Unde: Portal /clientarea → Secțiunea Comenzi / Invoices
Clientul B2B are vizibilitate completă asupra istoricului relației comerciale:
| Secțiune portal | Ce conține | Acțiuni disponibile |
|---|---|---|
| Comenzi | Toate Estimate-urile (statusuri, date, sume) | Vizualizare detaliu, plasare comandă similară |
| Facturi | Toate facturile cu statusul de plată | Descărcare PDF, plată online |
| Avize | Avize de livrare emise | Descărcare PDF |
| Propuneri | Oferte trimise de agent | Acceptare / Refuzare |
| Profil | Date firmă, adrese, persoane de contact | Editare self-service |
Sfat practic — comenzi recurente: Dacă clientul plasează lunar aceeași comandă (ex. reaprovizionare standard), agentul poate crea un Estimate Template sau activa facturarea recurentă pentru a automatiza comenzile periodice.
Ce se creează automat
| Eveniment trigger | Document creat automat | Condiție |
|---|---|---|
| Client plasat comandă din portal | Estimate (Sales Order) cu liniile comenzii | Portal activ, client autentificat |
| Estimate creat | Notificare agent (email + task) | Workflow Automation configurat |
| Estimate creat | Email confirmare client | Template email configurat pe eveniment |
| Estimate Accepted | Aviz de Livrare | auto_create_goods_delivery = 1 |
| Aviz de Livrare aprobat | Stoc decrementat din depozit | Automat la aprobare |
| Packing List + AWB generat | wh_omni_shipments, tracking number |
API Innoship configurat |
| Estimate Accepted | Factură (dacă auto-convert activ) | estimate_auto_convert_to_invoice_on_client_accept = 1 |
| Factură emisă, client B2B cu CIF | eFactura XML trimisă ANAF | Modul eFactura activ |
| Factură Overdue | Email reminder plată client | Workflow Automation configurat |
Puncte unde fluxul poate bloca
| Problemă | Cauză probabilă | Soluție |
|---|---|---|
| Clientul nu se poate autentifica în portal | Credențiale incorecte sau cont dezactivat | Resetare parolă din fișa clientului → /admin/clients |
| Clientul nu vede prețurile negociate | Price List neassignată clientului sau grupului | Verifică în /admin/sales/price_lists că clientul e setat ca Partner Client |
| Clientul vede prețuri publice, nu cele negociate | Price List default activă și are prioritate greșită | Verifică ierarhia: Price List per client > per grup > default |
| Stoc 0 vizibil în catalog, dar există fizic | Inventarul CRM nu e actualizat | Verifică avize de recepție pending; actualizează stocul manual dacă necesar |
Comanda plasată nu apare în /admin/estimates |
Workflow portal nedeclanșat, eroare aplicație | Verifică logurile aplicației; dacă persistent, contactați suportul tehnic |
| Agentul nu primește notificarea | Workflow Automation inactiv sau condiție greșită | Verifică /admin/workflow_automation → Estimate Created workflow |
| Estimate blocat în Draft — nimeni nu aprobă | Agent responsabil absent sau proces neclar | Delegare automată: Workflow Automation → dacă Draft > 24h → task manager |
| Aviz de livrare blocat (stoc insuficient) | Stoc consumat între plasarea comenzii și procesare | Contactează clientul; propune dată livrare alternativă sau livrare parțială |
| Factura nu apare în portalul clientului | Status factură în Draft, nu Sent | Schimbă statusul facturii la Trimisă (status = 1) |
| Credit limit depășit, comanda blocată | Soldul datorat depășește limita de credit setată | Regularizare sold client sau majorare credit limit temporar |
| Clientul nu poate descărca factura PDF | Permisiune descărcare dezactivată pe cont portal | Activează din setările portalului per client |
Rapoarte relevante
| Raport | URL | Ce monitorizezi |
|---|---|---|
| Comenzi B2B (Estimates) per client | /admin/estimates filtru pe client |
Volumul comenzilor per client, frecvența |
| Estimates neconfirmate | /admin/estimates?status=1 (Draft) |
Comenzi în așteptare revizie — SLA aprobare |
| Facturi neîncasate B2B | /admin/invoices?status=1 |
Cash flow, creanțe client |
| Facturi întârziate | /admin/invoices?status=4 |
Colectare creanțe, escaladare |
| Clienți per grup / Price List | /admin/clients filtru grup |
Segmentare portofoliu |
| Raport agent vânzări | /admin/sales/sales_agent |
Comenzi atribuite per agent |
| Activitate portal client | Log-uri portal | Frecvența de acces, ultimul login |
| Stoc curent vs minim | /admin/warehouse/warehouse_history + Commodities |
Anticipare rupturi pentru comenzile B2B recurente |
Module implicate — documentație detaliată
Portal & Clienți: Client Portal · Clients & Client Groups
Prețuri & Comenzi: Price Lists · Estimates / Sales Orders · Proposals
Financiar: Invoices · Payments
Depozit: Delivery Notes · Packing Lists · Inventory History
Automatizare: Workflow Automation
Echipa de vânzări: Sales Agent
Workflow-uri înrudite: Lead → Cash · OmniSales Fulfillment · E-commerce Fulfillment · Full Commercial Cycle