Navigation

CollabCart: Delad kundvagn för B2B

Problemet med B2B-varukorgar

I en konsumentwebbshop finns det en person som handlar. En varukorg, en beställare, en betalare. I B2B-världen ser det annorlunda ut. Ett företag kan ha tre inköpare som alla behöver lägga till saker i samma order. Projektledaren vill granska innan beställningen skickas. Ekonomichefen behöver godkänna ordrar över ett visst belopp.

Odoo har ingen lösning för detta. Varje användare har sin egen varukorg. Om Anna lägger till polykarbonatskivor och Bengt lägger till PTFE-stänger blir det två separata ordrar. Det är inte så företag fungerar.

CollabCart – konceptet

CollabCart (arc_collab_cart) låter flera användare från samma företag dela en varukorg. Anna lägger till sina produkter, Bengt lägger till sina, och när de är klara skickar chefen beställningen. Alla ser samma varukorg i realtid.

Det låter enkelt. Det var det inte.

Teknisk implementation

CollabCart bygger på en ny modell – arc.collab.cart – som existerar parallellt med Odoos vanliga sale.order. Varje företag (res.partner med is_company=True) kan ha en aktiv CollabCart. Användare som tillhör företaget ser och kan modifiera samma cart.

Varukorgsrader sparas i arc.collab.cart.line med referens till produkt, antal, vem som la till raden och när. Varje rad har en status: utkast, godkänd eller borttagen. Det ger spårbarhet – chefen ser vem som la till vad.

class CollabCart(models.Model):
    _name = 'arc.collab.cart'
    _description = 'Collaborative B2B Shopping Cart'

    company_partner_id = fields.Many2one('res.partner')
    line_ids = fields.One2many('arc.collab.cart.line', 'cart_id')
    state = fields.Selection([
        ('draft', 'Aktiv'),
        ('review', 'Granskning'),
        ('approved', 'Godkänd'),
        ('ordered', 'Beställd'),
    ])

Realtidssynk

När Anna lägger till en produkt ska Bengt se det direkt i sin webbläsare. Odoo har en inbyggd bus-mekanism (longpolling) som jag utnyttjar för detta. När en varukorgsrad skapas eller ändras skickas en notifikation via bussen till alla användare som har varukorgen öppen.

Frontendkomponenten lyssnar på buss-kanalen och uppdaterar varukorgen utan sidladdning. Det ger en känsla av realtidssamarbete liknande Google Docs – fast för en varukorg.

Godkännandeflöde

Inte alla anställda ska kunna beställa fritt. CollabCart har ett konfigurerbart godkännandeflöde:

  1. Inköpare lägger till produkter (status: draft)
  2. När alla är klara skickas varukorgen till granskning (status: review)
  3. Godkännare granskar, kan justera kvantiteter eller ta bort rader
  4. Godkännare godkänner (status: approved)
  5. Ordern skapas i Odoo som en vanlig sale.order (status: ordered)

Godkännarens roll definieras per företag. Ett litet företag kanske inte behöver godkännande alls – alla kan beställa direkt. Ett stort företag kan kräva godkännande på ordrar över 10 000 kr.

Tröskelvärden och regler konfigureras i företagets inställningar i Odoo-backend. Det gör att vi kan anpassa flödet per kund utan kodändringar.

Konvertering till sale.order

När en CollabCart godkänns konverteras den till en vanlig Odoo sale.order. Alla rader kopieras, priser beräknas enligt kundens prislista och ordern hamnar i säljteamets arbetsflöde som vilken annan order som helst.

Det var viktigt att CollabCart inte ersätter Odoos orderhantering utan bygger ovanpå den. Alla befintliga funktioner – lagerbokningar, fakturering, leveransplanering – fungerar som vanligt efter konvertering.

Portalintegrationen

I kundportalen (från arc_industrial_ops) ser användaren ett nytt menyalternativ: ”Delad varukorg”. Sidan visar den aktiva varukorgen med alla rader, vem som la till dem och aktuell status.

Användare kan:

  • Lägga till produkter (via webbshopen – ”Lägg till i delad varukorg” som alternativ till personlig varukorg)
  • Ändra kvantitet på sina egna rader
  • Kommentera rader (t.ex. ”Behöver vi verkligen 50 meter? 30 räcker.”)
  • Se historik över ändringar

Godkännare har extra funktioner: godkänna/avslå hela varukorgen, justera vilken rad som helst och konvertera till order.

Utmaningar

Concurrency. När två användare ändrar samma rad samtidigt måste systemet hantera det. Jag implementerade optimistic locking – varje rad har en write_date och om den ändrats sedan du laddade sidan får du ett meddelande att uppdatera innan du kan spara.

Prestanda med stora varukorgar. Vissa kunder lägger 200+ rader i en beställning. Realtidsuppdateringar av 200 rader kräver att frontend-komponenten är smart med rendering. Jag använder virtuell scrollning – bara synliga rader renderas i DOM:en.

Prisuppdateringar. Om prislistan ändras medan varukorgen är aktiv – vilket händer om ett avtal förnyas – ska priserna i varukorgen uppdateras. Det sker automatiskt via en hook som triggas vid prislisteändringar.

Resultat

CollabCart förenklar B2B-beställningsprocessen. Företag med flera inköpare slipper koordinera via e-post eller telefon. Godkännandeflödet ger kontroll utan att bromsa processen. Och all data loggas – vem la till vad, vem godkände, när konverterades ordern.

Det är den typ av funktion som inte finns i någon standardwebbshop. Och det är poängen med att bygga eget – du löser dina kunders faktiska problem, inte de problem som produktchefen på Shopify tror att kunder har.

Vad tycker du?

Jag vill gärna höra dina tankar. Kommentera nedan eller nå mig på LinkedIn.

0 0 röster
Article Rating
Prenumerera
Meddela vid
guest
0 Kommentarer
Äldsta
Senaste Mest omröstade
Inline feedback
Visa alla kommentarer

Relaterade inlägg

Vad är ett förlossningsbrev och varför är det bra att ha?
Vård
Vad är ett förlossningsbrev?

Inför en förlossning är det en strålande iidé att skriva ett förlossningsbrev! En förlossning är en av livets mest intensiva upplevelser. Det är också en

Chrille Hedberg logotyp
Chrille Hedberg

Använd gärna detta formulär för att komma i kontakt med mig.

0
Lämna gärna en kommentarx
()
x