Workflow: Portal B2B — Comandă Client Self-Service
Modules involved: Client Portal · Price Lists · Sales Orders · 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 Sales Order î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
│ → Sales Order 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 → Sales Order 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 Sales Order confirmat
│ Packing List → Picking → AWB generat (Innoship / Couriers)
│ status vizibil în portalul clientului (dacă permisiunea e activă)
│
↓
[FACTURARE]
│ factură generată din Sales Order 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 |
|---|---|---|
| Sales Order (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 Sales Order 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 Sales Order:
| 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: Sales Order → 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 Sales Order-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 Sales Order | Compară cu Price List; corectează dacă eroare |
| Discount suplimentar | Negociat telefonic | Adaugă discount pe linie sau global pe Sales Order |
| Adresă livrare | Tab livrare | Verifică dacă adresa nouă e corectă |
Scenarii de revizie:
Comandă OK → Sales Order: 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ă) →
Sales Order: 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ă — Sales Order 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 → Sales Order (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ă Sales Order-ul confirmat (status Accepted), fluxul intră în depozit:
Creare Aviz de Livrare:
- Automată din Sales Order confirmat → dacă
auto_create_goods_delivery = 1 - Sau manuală: din Sales Order → 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 Sales Order: 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 Sales Order Accepted | Sales Order 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 Sales Order → 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 Sales Order-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 Sales Order 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 | Sales Order (Sales Order) cu liniile comenzii | Portal activ, client autentificat |
| Sales Order creat | Notificare agent (email + task) | Workflow Automation configurat |
| Sales Order creat | Email confirmare client | Template email configurat pe eveniment |
| Sales Order 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 |
| Sales Order 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 → Sales Order Created workflow |
| Sales Order 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 (Sales Orders) per client | /admin/estimates filtru pe client |
Volumul comenzilor per client, frecvența |
| Sales Orders 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 · Sales Orders / 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
Asignați Lista de Prețuri corectă fiecărui client înainte de a-i acorda acces la portal — catalogul portalului B2B afișează prețuri personalizate din lista asignată, deci fără lista corectă un client vede prețuri incorecte de la prima autentificare.
Permisiunile portalului B2B sunt granulare per contact, nu per companie. O singură companie poate avea mai multe contacte cu niveluri diferite de acces — configurați permisiunile per contact, nu presupuneți că toate contactele aceleiași firme văd aceleași date.