Point of Sale

Comercios y restaurantes

MarketplaceOperacionesVersión 0.1.0manifest

Para qué sirve ​

Model a shop till: configuration, cash-controlled sessions, orders with lines and payment lines per method. It records what happened at the till; it is not a payment terminal integration, and card numbers must never be stored.

Qué hace y qué no hace el paquete ​

Shop tills: a point-of-sale configuration, cash-controlled sessions that are opened and closed, orders with lines, and payment lines per method. A refund and the closing of a session need a human approval from a manager; agents may only propose them. Totals, change and cash differences are entered, not computed. Card numbers must never be stored; keep only the payment provider's reference. Needs the Products package.

Modelos ​

pos_config ​

A point of sale (a till or a shop) and its rules

Grupo de lectura: pos.user. Grupo de escritura: pos.manager.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
nametextnonenopos.useren claroName of the till or shop, for example Main street shop
currencytextnonenopos.useren claroISO 4217 currency code, for example EUR
receipt_headerlongtextnonenopos.useren claroText printed at the top of receipts
cash_controlboolnonenopos.useren claroWhether sessions must count the cash in the drawer when they open and close
default_opening_cashmoneynonenopos.useren claroCash normally left in the drawer overnight (minor currency units)
allow_refundsboolnonenopos.useren claroWhether cashiers may propose refunds at this point of sale
activeboolnonenopos.useren claroWhether the point of sale is in use

pos_session ​

One shift of selling at a point of sale, from opening to closing the cash drawer

Grupo de lectura: pos.user. Grupo de escritura: pos.user.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
config_idref → pos_confignonenopos.useren claroThe point of sale the session belongs to
cashiertextinternalsípos.userenmascaradoName of the cashier who opened the session
opened_ondatenonenopos.useren claroDay the session was opened (YYYY-MM-DD)
closed_ondatenonenopos.useren claroDay the session was closed (YYYY-MM-DD)
opening_cashmoneyfinancialnopos.userretenidoCash counted in the drawer at opening (minor currency units)
expected_cashmoneyfinancialnopos.userretenidoCash the drawer should hold at closing: opening cash plus cash payments (entered, not computed)
closing_cashmoneyfinancialnopos.userretenidoCash actually counted in the drawer at closing
cash_differencemoneyfinancialnopos.userretenidoClosing cash minus expected cash; negative means money is missing
notelongtextnonenopos.useren claroExplanation for any cash difference
stateselect (open, closed)nonenopos.useren claroSession status: open, closed

pos_order ​

A sale rung up at a point of sale

Grupo de lectura: pos.user. Grupo de escritura: pos.user.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
session_idref → pos_sessionnonenopos.useren claroThe session the sale was made in
receipt_numbertextnonenopos.useren claroNumber printed on the receipt. Free text: packages cannot generate sequences
ordered_ondatenonenopos.useren claroDay of the sale (YYYY-MM-DD)
customer_idref → partynonenopos.useren claroThe customer, when one was identified
tax_totalmoneynonenopos.useren claroTax included in the total (minor currency units)
totalmoneynonenopos.useren claroTotal paid by the customer including tax (minor currency units, entered not computed)
notelongtextnonenopos.useren claroRemark about the sale
stateselect (draft, paid, refunded, cancelled)nonenopos.useren claroSale status: draft, paid, refunded, cancelled

pos_order_line ​

One product line of a sale

Grupo de lectura: pos.user. Grupo de escritura: pos.user.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
order_idref → pos_ordernonenopos.useren claroThe sale the line belongs to
product_idref → productnonenopos.useren claroThe product sold
descriptiontextnonenopos.useren claroText shown on the receipt
quantitynumbernonenopos.useren claroUnits sold
unit_pricemoneynonenopos.useren claroPrice per unit including tax (minor currency units)
discount_bpnumbernonenopos.useren claroDiscount in basis points: 1000 means 10.00 percent
subtotalmoneynonenopos.useren claroLine total after discount (minor currency units, entered not computed)

pos_payment ​

A payment received against a sale; a sale may be paid with several methods

Grupo de lectura: pos.user. Grupo de escritura: pos.user.

CampoTipoClase de datosDatos personalesGrupoLos agentes venDescripción
order_idref → pos_ordernonenopos.useren claroThe sale the payment is for
methodselect (cash, card, bank_transfer, voucher, other)nonenopos.useren claroHow the customer paid: cash, card, bank_transfer, voucher, other
amountmoneyfinancialnopos.userretenidoAmount paid with this method (minor currency units)
paid_ondatenonenopos.useren claroDay of the payment (YYYY-MM-DD)
provider_referencetextfinancialsípos.userretenidoReference from the card terminal or payment provider; never a card number

Flujos de trabajo ​

pos_session ​

AcciónMueveQuién puede ejecutarlaAprobación
pos_session.closestate: open → closedpos.managersí

pos_order ​

AcciónMueveQuién puede ejecutarlaAprobación
pos_order.paystate: draft → paidpos.userno
pos_order.cancelstate: draft → cancelledpos.userno
pos_order.refundstate: paid → refundedpos.managersí

Grupos de permisos ​

Grupos que usa esta aplicación:

  • pos.manager
  • pos.user

Pasos con aprobación ​

Pasos que un agente solo puede proponer:

  • pos_session.close
  • pos_order.refund

Qué pueden y qué no pueden hacer los agentes ​

Un agente puede leer, buscar, crear y actualizar registros de esta aplicación, y ejecutar las acciones que no requieren aprobación, dentro de los grupos de permisos de su token.

Solo puede proponer estos pasos, y una persona debe aprobarlos: pos_session.close, pos_order.refund, pos_config.delete, pos_session.delete, pos_order.delete, pos_order_line.delete, pos_payment.delete.

Los datos personales se enmascaran como tokens marcadores: pos_session.cashier.

Estos campos se retienen por completo y los agentes no los ven: pos_session.opening_cash, pos_session.expected_cash, pos_session.closing_cash, pos_session.cash_difference, pos_payment.amount, pos_payment.provider_reference.

Dependencias ​

  • base
  • product

Instalación ​

Instálala desde la aplicación Customize (Marketplace) o desde la línea de comandos:

bash
obop modules install-from pos

Requiere una base de datos y derechos de administrador.

Crea la tuya ​

La guía de módulos explica cómo se escriben aplicaciones como esta