Cum funcționează wave pricing
Wave pricing (prețuri pe tranșe) permite vânzarea produselor la prețuri diferite în funcție de momentul înregistrării. Fiecare tranșă are un preț și un stoc propriu; când stocul unei tranșe se epuizează, următoarea tranșă devine automat activă, la un preț mai mare.
Sistemul este identic pe toate tipurile de produse: pass-uri, workshop-uri și add-on-uri.
Conceptul de bază
O tranșă (wave) este o etapă de vânzare definită prin trei câmpuri:
| Câmp | Descriere | Exemplu |
|---|---|---|
| Etichetă | Numele tranșei, vizibil și în interfața de înregistrare | „Early Bird" |
| Preț (RON) | Prețul produsului în cadrul acestei tranșe | 350 |
| Cantitate | Numărul de locuri disponibile la acest preț | 50 |
Sub tranșe există un rând fix — prețul standard — care se activează automat când toate tranșele s-au epuizat. Acesta funcționează ca plasă de siguranță: vânzările continuă la acest preț folosind stocul rezidual.
Relația dintre stoc și tranșe
Aceasta este partea cea mai importantă de înțeles.
Stocul total al produsului (câmpul „Stoc" din cardul „Stoc & Wave Pricing") reprezintă numărul curent de locuri disponibile. Suma cantităților tuturor tranșelor nu poate depăși stocul total.
Formula
Stoc rezidual (preț standard) = Stoc total − Suma cantităților tranșelor
Exemplu concret:
| Element | Valoare |
|---|---|
| Stoc total | 200 |
| Early Bird | 50 locuri |
| Standard | 100 locuri |
| Last Minute | 30 locuri |
| Stoc rezidual (preț standard) | 20 locuri |
Cele 20 de locuri rămase sunt vândute automat la prețul standard, fără tranșă.
Cantitățile tranșelor reprezintă stocul curent, nu stocul inițial. Cantitatea unei tranșe scade cu 1 când o comandă este finalizată — adică plătită — nu când este plasată.
Între plasare și plată, locul este totuși rezervat: vezi Locuri rezervate de comenzi neplătite mai jos.
Ce se întâmplă când suma depășește stocul
Dacă suma cantităților tranșelor depășește stocul total:
- Vizual — apare un mesaj de eroare roșu sub câmpul de stoc: „Suma cantităților tranșelor (X) depășește stocul total (Y). Salvarea nu este permisă."
- Salvare blocată — formularul nu poate fi trimis (butonul de salvare este dezactivat client-side)
- Server-side — chiar dacă se ocolește validarea client, serverul respinge salvarea cu aceeași eroare
Când modifici cantitatea unei tranșe, stocul rezidual din coloana „Cantitate" de pe rândul prețului standard se actualizează instant, fără a fi nevoie să salvezi.
Activarea automată a tranșelor
Tranșele sunt secvențiale — ordinea din tabel determină ordinea de activare:
- Prima tranșă (cea mai de sus) este activă de la început.
- Când stocul primei tranșe ajunge la 0, a doua tranșă devine activă automat.
- Procesul continuă până la ultima tranșă.
- Când toate tranșele s-au epuizat, prețul standard devine activ.
Nu este necesară nicio intervenție manuală — funcția dentisity_get_active_wave_price() determină automat prețul corect la fiecare afișare.
Locuri rezervate de comenzi neplătite
Cantitatea unei tranșe scade abia la plată. O comandă plasată și neplătită nu a scăzut încă nimic — dar locul ei nu mai este liber.
Fără această regulă, o tranșă de 25 de locuri putea fi vândută la nesfârșit: 50 de persoane plasau comenzi cât timp cantitatea arăta încă 25, toate primeau prețul ieftin, și toate îl plăteau. WooCommerce nu recalculează niciodată o comandă deja plasată, deci prețul rămânea înghețat pe fiecare linie.
De aceea tranșa activă se calculează scăzând și locurile ținute de comenzile deschise (în așteptare, în procesare sau în așteptarea plății):
| Situație | Cantitate în tabel | Locuri ținute | Ce vede următorul cumpărător |
|---|---|---|---|
| Nicio comandă deschisă | 25 | 0 | Prețul tranșei, 25 locuri |
| 10 comenzi neplătite | 25 | 10 | Prețul tranșei, 15 locuri |
| 25 comenzi neplătite | 25 | 25 | Prețul tranșei următoare |
Rezervarea se desface singură: dacă o comandă este anulată sau expiră, locul redevine disponibil imediat, fără nicio acțiune. Nu există niciun contor de întreținut și nicio restituire care să poată eșua.
Locurile ținute se impută tranșelor de la cea mai ieftină în sus, în aceeași ordine în care le consumă o vânzare plătită. Fiecare tranșă își vede în raport propriile locuri ținute, nu doar cea activă.
Un workshop plătit cu un credit rezervă un loc doar când setarea „sursa stocului pentru workshopurile gratuite" este tranșa curentă. Pe standard tranșa nu este atinsă deloc (WooCommerce scade _stock), iar pe ultima tranșă plătește alta — în ambele cazuri o rezervare pe tranșa activă ar împinge cumpărătorii plătitori pe tranșa următoare pentru un loc care nu s-ar fi luat niciodată de acolo.
Regula închide scurgerea pentru comenzile noi. O comandă plasată deja la prețul ieftin rămâne la acel preț — a fost cotată corect în momentul acela. Expunerea este astfel mărginită exact la dimensiunea tranșei.
Coloana „Rezervat" din raportul de vânzări și indicatorul „+N rez." din statistici arată aceste locuri, ca să vezi suprapunerea înainte să coste ceva.
Indicatori vizuali
În tabelul de administrare, fiecare rând indică starea tranșei:
| Indicator | Stare | Descriere |
|---|---|---|
| Bară verde pe stânga | Activ | Tranșa are stoc disponibil |
| Rând estompat | Epuizat | Cantitatea a ajuns la 0 |
| Rând galben (preț standard) | Rezidual | Locurile rămase după epuizarea tuturor tranșelor |

Structura cardului „Stoc & Wave Pricing"
Cardul apare identic în editorul de pass-uri, workshop-uri și add-on-uri:
┌─────────────────────────────────────────┐
│ Stoc & Wave Pricing │
│ Prețuri pe tranșe │
├─────────────────────────────────────────┤
│ │
│ Stoc [pass/workshop/add-on] │
│ ☐ Nelimitat │
│ [___] locuri disponibile acum │
│ │
│ ┌──┬──────────┬──────┬─────┬──┐ │
│ │⠿ │ Tranșă │ Preț │ Qty │✕ │ │
│ ├──┼──────────┼──────┼─────┼──┤ │
│ │⠿ │ Early B. │ 350 │ 50 │✕ │ ← activ│
│ │⠿ │ Standard │ 450 │ 100 │✕ │ │
│ ├──┼──────────┼──────┼─────┼──┤ │
│ │🔒│ Preț std │ 550 │ 50 │ │ ← fix │
│ └──┴──────────┴──────┴─────┴──┘ │
│ [+ Adaugă tranșă] │
│ │
└─────────────────────────────────────────┘
Elementele cardului
| Element | Funcție |
|---|---|
| Stoc total | Numărul curent de locuri disponibile. Poate fi setat pe „Nelimitat". |
| Tranșe (rânduri albe) | Fiecare tranșă are etichetă, preț și cantitate. Se pot adăuga, șterge și reordona. |
| Preț standard (rând galben) | Rând fix, nu poate fi șters. Prețul la care se vinde când toate tranșele s-au epuizat. Coloana „Cantitate" arată stocul rezidual calculat automat. |
| Buton „+ Adaugă tranșă" | Adaugă un rând nou gol sub ultima tranșă. |
Configurare pas cu pas
1. Setează stocul total
Deschide editorul produsului (pass, workshop sau add-on) și în cardul Stoc & Wave Pricing:
- Dacă produsul are locuri limitate: introdu numărul în câmpul de stoc (ex.:
200) - Dacă produsul nu are limită: bifează Nelimitat — în acest caz validarea cantitate-vs-stoc este dezactivată
2. Adaugă tranșele
Apasă + Adaugă tranșă pentru fiecare etapă de preț. Completează:
- Etichetă: un nume clar (ex.: „Early Bird", „Standard", „Last Minute")
- Preț (RON): prețul la care se vinde în această tranșă
- Cantitate: câte locuri sunt disponibile la acest preț
Adaugă tranșele în ordinea în care vrei să se activeze — de obicei de la cel mai ieftin la cel mai scump. Poți reordona oricând prin drag and drop (trage de handlerul ⠿ din stânga).
3. Setează prețul standard
Pe rândul galben (ultimul rând din tabel), introdu prețul la care se vinde produsul după epuizarea tuturor tranșelor.
Coloana „Cantitate" de pe acest rând arată automat câte locuri rămân pentru prețul standard — nu trebuie completată manual.
4. Verifică validarea
Înainte de salvare, verifică:
- Stocul rezidual (pe rândul galben) este un număr pozitiv sau zero
- Nu apare mesajul roșu de eroare sub câmpul de stoc
5. Salvează
Apasă butonul de salvare din bara fixă de jos.
Exemple practice
Configurare tipică — pass de congres
| Tranșă | Preț (RON) | Cantitate |
|---|---|---|
| Early Bird | 350 | 50 |
| Înregistrare standard | 450 | 150 |
| Last Minute | 550 | 50 |
Cu stoc total = 250, stocul rezidual (preț standard) = 0. Toate locurile sunt distribuite în tranșe.
Cronologie automată:
- Primii 50 de participanți plătesc 350 RON
- Următorii 150 plătesc 450 RON
- Ultimii 50 plătesc 550 RON
- Produsul devine indisponibil (stoc epuizat)
Configurare cu stoc rezidual — workshop
| Tranșă | Preț (RON) | Cantitate |
|---|---|---|
| Preînregistrare | 100 | 20 |
Cu stoc total = 50 și preț standard = 150 RON:
- Primii 20 de participanți plătesc 100 RON (tranșa „Preînregistrare")
- Următorii 30 plătesc 150 RON (prețul standard, stoc rezidual = 30)
Configurare fără tranșe — preț fix
Dacă nu adaugi nicio tranșă, toți participanții plătesc prețul standard. Tabelul arată doar rândul galben cu prețul și stocul total.
Simulare interactivă
Componenta de mai jos reproduce fidel tabelul de wave pricing din admin. Modifică valorile pentru a vedea cum se calculează stocul rezidual și cum se comportă validarea:
Stoc & wave pricing
Prețuri pe tranșeCând o tranșă se epuizează, se trece automat la tranșa următoare (mai scumpă), apoi la prețul standard.
| Tranșă | Preț (RON) | Cantitate | ||
|---|---|---|---|---|
| 🔒 | Preț standard | 0 |
Cât s-a vândut la fiecare preț
Fiecare produs cu tranșe are un raport „Vândut pe fiecare preț", vizibil în două locuri:
- în Statistici, ca modul propriu, pentru toate produsele deodată;
- în cardul de editare al pass-ului, workshop-ului sau add-on-ului — chiar lângă tabelul de tranșe, ca să vezi ce s-a vândut deja înainte să schimbi o cantitate.
| Coloană | Ce arată |
|---|---|
| Preț / tranșă | Prețul facturat, adnotat cu eticheta tranșei actuale care are acel preț |
| Vândut | Numărul de locuri vândute la acel preț, pe toate comenzile trecute prin finalizare |
| Încasat | Suma efectiv încasată pe acele linii |
| Rezervat | Locuri ținute de comenzi plasate și neplătite |
| Rămas | Cantitatea de acum la acel preț, minus rezervările |
Fiecare treaptă de preț apare, nu doar cele active
Raportul acoperă întreaga scară de prețuri a produsului:
| Treaptă | Cum apare |
|---|---|
| Tranșa activă | Cu eticheta ei, marcată activă |
| Tranșă epuizată (cantitate 0) | Cu eticheta ei și cu ce a vândut; „rămas" 0 |
| Tranșă ștearsă din tabel | Rând propriu, marcat „tranșă care nu mai există" |
| Prețul standard | Rând propriu, marcat „preț standard"; „rămas" este stocul nealocat niciunei tranșe |
Un produs care nu a avut niciodată tranșe își arată vânzările pe rândul prețului standard. O tranșă configurată exact la prețul standard își păstrează propriul rând și eticheta dată de admin — istoricul comenzilor nu le poate distinge, iar eticheta este răspunsul mai precis.
Toate trei tipurile de produse — passuri, workshopuri și add-on-uri — au același raport.
De ce raportul grupează după preț, nu după tranșă
O tranșă nu are identitate stabilă. La fiecare salvare a produsului, tabelul de tranșe este rescris integral: etichetă, preț, cantitate, ordine și număr de tranșe. O tranșă poate fi redenumită, reprețuită, mutată sau ștearsă între două vânzări.
Ce rămâne adevărat este prețul de pe linia de comandă. „S-au vândut 40 de locuri la 100 RON" este o afirmație despre istoric, adevărată indiferent ce s-a întâmplat cu tabelul după aceea.
De aceea raportul grupează după prețul facturat și doar adnotează un rând cu eticheta unei tranșe atunci când o tranșă actuală are exact acel preț. Un preț care nu se mai regăsește în tabel primește rând propriu, marcat „tranșă care nu mai există" — este informație reală, nu o eroare.
Din același motiv, raportul nu arată o cantitate originală și nu prezintă „Rămas" ca „X din Y consumate". Cantitatea este o pârghie pe care o muți, nu restul unui buget.
Rânduri care nu sunt prețuri
Trei categorii consumă locuri fără să încaseze bani și primesc rânduri proprii, ca „Vândut" să rămână în acord cu locurile pe care tranșele chiar le-au cedat:
| Rând | Ce înseamnă |
|---|---|
| Acoperit de credit | Workshop plătit cu un credit inclus în pass |
| Inclus gratuit în pass | Add-on acordat automat odată cu pass-ul |
| Atribuit de admin | Loc dat manual din wp-admin, cu scăderea stocului |
| Atribuit de admin · nu se știe | Atribuire manuală făcută înainte ca alegerea de stoc să fie înregistrată |
Când atribui manual un pass, un workshop sau un add-on, întrebarea „scade stocul?" decide dacă se consumă un loc din tranșă. Numai „da" consumă. Atribuirile făcute înainte de versiunea 5.26.0 nu au alegerea înregistrată — nu se poate reconstrui, deci apar pe rând separat în loc să fie presupuse într-un fel sau altul.
Se contopesc într-un singur rând, cu ambele etichete („100 lei · Early Bird + Preview"). Cantitățile și rezervările se adună. Istoricul comenzilor nu poate spune din care s-a vândut, iar raportul o spune deschis în loc să atribuie arbitrar.
Linii reduse
Un pass cumpărat prin upgrade este facturat la prețul tranșei minus discountul de upgrade. Rândul acelui preț este marcat „include linii reduse față de prețul tranșei", ca să nu fie confundat cu o vânzare la o tranșă mai ieftină care nu a existat niciodată.
Distincția este disponibilă doar pentru comenzile plasate începând cu versiunea 5.25.0 — liniile mai vechi nu au înregistrat prețul tranșei, deci pentru ele diferența nu se poate recupera.
Comportament pe stoc nelimitat
Dacă bifezi Nelimitat pe câmpul de stoc:
- Validarea cantitate-vs-stoc este dezactivată
- Rândul prețului standard arată „Nelimitat" în loc de un număr
- Poți configura tranșe cu orice cantitate — nu există limită superioară
- Tranșele funcționează la fel: se epuizează secvențial, apoi prețul standard preia
Întrebări frecvente
Pot modifica o tranșă după ce s-au vândut locuri din ea?
Da, dar cu atenție. Cantitatea reflectă stocul curent (nu cel inițial), deci dacă s-au vândut 30 din 50 de locuri Early Bird, cantitatea arată 20. Dacă reduci cantitatea sub 0, validarea blochează salvarea.
Ce se întâmplă dacă șterg o tranșă activă?
Următoarea tranșă devine activă automat. Dacă nu mai există tranșe, prețul standard preia.
Pot avea tranșe cu preț 0?
Nu. O tranșă fără preț (sau cu preț 0) nu se salvează — este ignorată la salvare.
O comandă neplătită blochează tranșa la nesfârșit?
Nu. Locul este ținut doar cât timp comanda rămâne deschisă. Când comanda este anulată — manual, sau automat prin „Hold stock (minutes)" din WooCommerce → Setări → Produse → Inventar — locul redevine disponibil de la sine.
Dacă participantul anulează plata la bancă, ce se întâmplă cu prețul?
Comanda trece în eșuată, iar de acolo pornește o fereastră de 30 de minute:
- În fereastră — locul rămâne ținut, iar comanda mai poate fi plătită la prețul de pe ea. Ăsta e cazul real: cardul a fost refuzat, participantul reia peste un minut. Tot ce conține comanda rămâne blocat pentru o a doua cumpărare — pass, workshop, add-on și creditele folosite.
- După fereastră — locul se eliberează, iar comanda nu mai poate fi plătită. Când participantul deschide vechiul link de plată, comanda se anulează și e trimis să plaseze una nouă, la prețul curent.
Statusul nu poate deosebi un card refuzat de o anulare deliberată — ambele dau „eșuată". Doar timpul le separă. Fără fereastră, cine anula la bancă își păstra prețul ieftin la nesfârșit și putea plăti după ce tranșa se epuiza pentru toți ceilalți.
Ce se întâmplă cu tranșa dacă o comandă finalizată este rambursată?
Locul se întoarce în tranșa activă în momentul rambursării, nu în cea la care a fost vândut. Astfel capacitatea este refăcută fără să se redeschidă un preț early bird pe care organizatorii l-au închis deja.
Ordinea tranșelor contează?
Da. Ordinea din tabel = ordinea de activare. Prima tranșă (cea de sus) este activă prima. Reordonează prin drag and drop dacă vrei să schimbi succesiunea.