e-bon
e-bon.ro
Aplicația E-BON

Tab-ul Bonuri — istoric, previzualizare, tipărire

Tab-ul Bonuri din bara inferioară a aplicației Android E-BON — un istoric cronologic al fiecărui bon emis, ecranul de previzualizare și tipărire per bon și punctul de intrare standalone Bon Nou.

Tab-ul Bonuri este al patrulea tab din bara inferioară a aplicației, alături de E-BON (Acasă), Dispozitive și Setări. Este un jurnal de bonuri standalone, independent de locație: fiecare bon pe care operatorul l-a emis de pe această instalare — fie prin fluxul Creează Bon propriu acestui tab, fie prin fluxul per dispozitiv din Detaliu dispozitiv → Operațiuni — apare aici în ordine cronologică inversă. Apăsarea unui rând deschide ecranul de previzualizare și tipărire; butonul flotant deschide un formular de creare standalone.

Această pagină acoperă tab-ul standalone Bonuri din bara inferioară. Varianta per dispozitiv a formularului Bon Nou, accesată din interiorul Detaliu dispozitiv, este documentată sub Operațiuni zilnice și nu este duplicată aici. Emiterea de Storno (anulare) este doar din portal — vezi Bonuri în Portal.

Răsfoiește istoricul bonurilor

Tab-ul se deschide direct pe un FlatList cu fiecare bon din ReceiptStore-ul local. Nu există bară de antet, nu există căsuță de căutare, nu există chip-uri de filtru, nu există selector pe interval de date, nu există editare/ștergere per rând și nu există buton de export — este un istoric plat, cronologic.

Stare goală

Când receipts.length === 0, lista este înlocuită cu un EmptyState unificat cu:

  • titlul Niciun Bon
  • descrierea Bonurile emise vor apărea aici. Apasă butonul de mai jos pentru a crea primul bon.
  • o acțiune primară Creează Bon care deschide formularul standalone Bon Nou

Forma rândului

Fiecare rând este un card apăsabil cu trei blocuri:

  • Un badge de tip la stânga, codificat color de receiptTypeColor:
    • VÂNZARE — verde (colors.success)
    • RETUR — chihlimbar (colors.warning)
    • STORNO — roșu (colors.error)
  • O coloană de mijloc cu totalul (formatat prin formatCurrency, ex. 123,45 RON), data și ora la care a fost creat bonul (toLocaleDateString + toLocaleTimeString) și o linie de stare fiscală:
    • Fiscal: <id> în verde atunci când bonul are un fiscalId (a fost tipărit)
    • Netipărit în chihlimbar atunci când fiscalId este gol
  • Un număr de articole în partea dreaptă (5 articole / 1 articol)

Apăsarea oriunde pe rând navighează la Previzualizare Bon pentru id-ul acelui bon.

Buton de acțiune flotant

Când există cel puțin un bon, un buton de acțiune flotant + Creează Bon ancorat în jos-dreapta ia locul CTA-ului din starea goală. Apăsarea lui deschide formularul standalone Bon Nou.

Tipul STORNO apare în această listă atunci când un bon de storno există în ReceiptStore-ul local, dar tab-ul standalone Bonuri nu emite stornouri. Anularea de tip storno este un flux doar din portal — vezi Bonuri în Portal.

Previzualizează și tipărește un bon

Apăsarea unui rând din istoric deschide ecranul Previzualizare Bon, care este și locul în care aterizează fluxul standalone de creare după Previzualizare & Tipărire. Este o singură vedere cu derulare care reafișează bonul și expune acțiunea de tipărire.

Dacă id-ul bonului nu mai există în store, ecranul afișează o singură linie de eroare Bonul nu a fost găsit. și se oprește — nu există revenire automată.

Aspect

De sus în jos, atunci când bonul este găsit:

  • Banner de succes — vizibil doar după o tipărire reușită. Afișează Bon Tipărit (mare, verde) și ID Fiscal: <id> dedesubt.
  • Card antetreceipt.type.toUpperCase() (ex. SALE, REFUND, STORNO) și data/ora creării pe un card centrat.
  • Secțiunea ARTICOLE — un rând per intrare din receipt.items: numele la stânga, cantitate x preț unitar dedesubt, totalul liniei la dreapta.
  • Total — un rând cu bordură superioară groasă cu Total la stânga și totalul formatat la dreapta.
  • Card DEFALCARE TVA — un rând per intrare din receipt.vatBreakdown: cota (19%, 9%, 5%, 0%), Bază: <sumă> și TVA: <sumă>.
  • Secțiunea PLATĂ — un card per intrare din receipt.payments: METODA de plată cu majuscule (CASH, CARD, VOUCHER) la stânga, suma la dreapta.
  • Rândul de acțiune — fie butonul de tipărire (înainte de tipărire), fie butonul gata (după tipărire).

Fluxul de tipărire

Apasă Tipărește Bon

Butonul apelează printReceipt(receipt, devices[0]) din services/device/FiscalPrinterService, trece într-o stare dezactivată și afișează un spinner inline cu Se tipărește....

Așteaptă driverul

La succes, bonul este actualizat în ReceiptStore cu fiscalId și fiscalDate returnate, banner-ul de succes apare în partea de sus a ecranului cu noul id fiscal, iar butonul de tipărire este înlocuit cu un buton Gata.

Apasă Gata

Gata apelează clearDraft() pe store-ul de bonuri și navigation.popToTop(), returnând operatorul la rădăcina stivei de navigare curente.

Dacă driverul aruncă o eroare, eroarea este înregistrată și o alertă nativă este ridicată cu titlul Tipărire Eșuată și message-ul erorii. Bonul este lăsat ca atare (fără fiscalId), iar butonul de tipărire se reactivează — operatorul poate reîncerca.

Primul dispozitiv câștigă. Bonul este tipărit pe prima imprimantă fiscală asociată locației tale active. Nu există un selector de dispozitiv pe acest ecran. Pentru a tipări pe un alt dispozitiv, schimbă locația activă la una asociată cu imprimanta dorită (vezi Setări și schimbarea locației) sau șterge imprimanta pe care nu vrei să o folosești (vezi Lista dispozitivelor).
Dacă nicio imprimantă fiscală nu este asociată locației tale active, apăsarea butonului Tipărește afișează alerta Niciun Dispozitiv cu mesajul Vă rugăm asociați o imprimantă fiscală mai întâi. Adaugă o imprimantă din Dispozitive → Adaugă Dispozitiv înainte de a tipări orice bon.

Creează un bon nou

Apăsarea + Creează Bon (FAB) sau a CTA-ului din starea goală deschide formularul standalone Bon Nou. Formularul are trei blocuri stivuite de sus în jos și o acțiune Anulează care apelează clearDraft() și revine la lista Bonuri.

  • ADAUGĂ ARTICOL — câmpuri text pentru Denumire articol, Cantitate și Preț, un rând de chip-uri COTĂ TVA (cotele TVA românești din ROMANIA_VAT_RATES, ex. 19%, 9%, 5%, 0%) și un rând de chip-uri DEPARTAMENT (19). Butonul Adaugă Articol validează intrările (denumire ne-goală, cantitate numerică pozitivă, preț numeric pozitiv — fiecare ridicând o alertă nativă cu titlul Validare dacă eșuează) și împinge un articol nou în ciornă.
  • ARTICOLE (<număr>) — apare odată ce cel puțin un articol este în ciornă. Fiecare card de articol afișează numele, cantitate x preț = total linie, un badge TVA <cotă>% și un badge Dept <n>, plus un buton destructiv Șterge. Sub listă, un rând Total însumează totul (rotunjit la 2 zecimale).
  • PLATĂ — apare odată ce cel puțin un articol este în ciornă. Un rând de chip-uri METODĂ (Numerar, Card, Voucher) și un câmp SUMĂ care implicit este totalul curent. Butonul Previzualizare & Tipărire validează că există cel puțin un articol (alerta Niciun Articol) și că suma plății este cel puțin totalul (alerta Plată Insuficientă), finalizează ciorna și navighează la Previzualizare Bon.
Formularul Bon Nou al tab-ului Bonuri este un punct de intrare standalone — nu se pre-leagă de un dispozitiv specific, iar pasul de tipărire de pe Previzualizare Bon revine la devices[0] conform ADR-001 (vezi mai sus). Pentru varianta per dispozitiv a aceluiași formular — accesată din interiorul Detaliu dispozitiv și legată de acel dispozitiv pentru pasul de tipărire — vezi Operațiuni zilnice.
Formularul standalone permite operatorului să creeze bonuri de Vânzare. Storno (anularea unui bon fiscalizat anterior) este un flux doar din portal cu propriul jurnal de audit — vezi Bonuri în Portal.

Ce urmează