Save tender ref when applying to POS batch; add flag to kick drawer
This commit is contained in:
parent
31e23690c3
commit
f8ea49d7f3
|
@ -214,7 +214,7 @@ class POSBatchHandler(BatchHandler):
|
|||
|
||||
def get_tender(self, session, key, **kwargs):
|
||||
"""
|
||||
Return the tender record for Cash.
|
||||
Return the tender record corresponding to the given key.
|
||||
|
||||
:param session: Current DB session.
|
||||
|
||||
|
@ -341,17 +341,33 @@ class POSBatchHandler(BatchHandler):
|
|||
:returns: List of rows which were added to the batch.
|
||||
"""
|
||||
session = self.app.get_session(batch)
|
||||
model = self.model
|
||||
|
||||
# TODO: this could probably be improved. any validation needed?
|
||||
if isinstance(tender, str):
|
||||
item_entry = tender
|
||||
description = f"TENDER '{tender}'"
|
||||
elif hasattr(tender, 'code'):
|
||||
tender_info = tender
|
||||
tender = None
|
||||
item_entry = None
|
||||
description = None
|
||||
|
||||
if isinstance(tender_info, model.Tender):
|
||||
tender = tender_info
|
||||
else:
|
||||
if isinstance(tender_info, str):
|
||||
tender_code = tender_info
|
||||
else:
|
||||
tender_code = tender_info['code']
|
||||
item_entry = tender_code
|
||||
description = f"TENDER '{tender_code}'"
|
||||
tender = self.get_tender(session, tender_code)
|
||||
|
||||
if tender:
|
||||
item_entry = tender.code
|
||||
description = tender.name
|
||||
else:
|
||||
item_entry = tender['code']
|
||||
description = tender['name']
|
||||
|
||||
if tender.disabled:
|
||||
# TODO: behavior here should be configurable, probably
|
||||
# needs a dedicated email etc. ..or maybe just ignore
|
||||
log.error("disabled tender '%s' being applied to POS batch: %s",
|
||||
tender, batch)
|
||||
|
||||
rows = []
|
||||
|
||||
|
@ -362,6 +378,7 @@ class POSBatchHandler(BatchHandler):
|
|||
row.item_entry = item_entry
|
||||
row.description = description
|
||||
row.tender_total = amount
|
||||
row.tender = tender
|
||||
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
||||
self.add_row(batch, row)
|
||||
rows.append(row)
|
||||
|
@ -380,12 +397,18 @@ class POSBatchHandler(BatchHandler):
|
|||
raise ValueError(f"tender '{tender.name}' does not allow "
|
||||
f" cash back: ${-balance:0.2f}")
|
||||
|
||||
if tender and tender.is_cash:
|
||||
cash = tender
|
||||
else:
|
||||
cash = self.get_tender(session, 'cash')
|
||||
|
||||
row = self.make_row()
|
||||
row.user = user
|
||||
row.row_type = self.enum.POS_ROW_TYPE_CHANGE_BACK
|
||||
row.item_entry = item_entry
|
||||
row.description = "CHANGE BACK"
|
||||
row.tender_total = -balance
|
||||
row.tender = cash
|
||||
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
||||
self.add_row(batch, row)
|
||||
rows.append(row)
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
# -*- coding: utf-8; -*-
|
||||
"""add tender.kick_drawer
|
||||
|
||||
Revision ID: d69dd44f495c
|
||||
Revises: 9cc5b433fb1d
|
||||
Create Date: 2023-10-06 20:06:56.557531
|
||||
|
||||
"""
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = 'd69dd44f495c'
|
||||
down_revision = '9cc5b433fb1d'
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
from alembic import op
|
||||
import sqlalchemy as sa
|
||||
import rattail.db.types
|
||||
|
||||
|
||||
|
||||
def upgrade():
|
||||
|
||||
# tender
|
||||
op.add_column('tender', sa.Column('kick_drawer', sa.Boolean(), nullable=True))
|
||||
op.add_column('tender', sa.Column('disabled', sa.Boolean(), nullable=True))
|
||||
op.add_column('tender_version', sa.Column('kick_drawer', sa.Boolean(), autoincrement=False, nullable=True))
|
||||
op.add_column('tender_version', sa.Column('disabled', sa.Boolean(), autoincrement=False, nullable=True))
|
||||
|
||||
# batch_pow_row
|
||||
op.add_column('batch_pos_row', sa.Column('tender_uuid', sa.String(length=32), nullable=True))
|
||||
op.create_foreign_key('batch_pos_row_fk_tender', 'batch_pos_row', 'tender', ['tender_uuid'], ['uuid'])
|
||||
|
||||
|
||||
def downgrade():
|
||||
|
||||
# batch_pos_row
|
||||
op.drop_constraint('batch_pos_row_fk_tender', 'batch_pos_row', type_='foreignkey')
|
||||
op.drop_column('batch_pos_row', 'tender_uuid')
|
||||
|
||||
# tender
|
||||
op.drop_column('tender_version', 'disabled')
|
||||
op.drop_column('tender_version', 'kick_drawer')
|
||||
op.drop_column('tender', 'disabled')
|
||||
op.drop_column('tender', 'kick_drawer')
|
|
@ -185,6 +185,8 @@ class POSBatchRow(BatchRowMixin, Base):
|
|||
name='batch_pos_row_fk_user'),
|
||||
sa.ForeignKeyConstraint(['product_uuid'], ['product.uuid'],
|
||||
name='batch_pos_row_fk_item'),
|
||||
sa.ForeignKeyConstraint(['tender_uuid'], ['tender.uuid'],
|
||||
name='batch_pos_row_fk_tender'),
|
||||
)
|
||||
|
||||
STATUS_OK = 1
|
||||
|
@ -307,6 +309,13 @@ class POSBatchRow(BatchRowMixin, Base):
|
|||
Tender total for the item.
|
||||
""")
|
||||
|
||||
tender_uuid = sa.Column(sa.String(length=32), nullable=True)
|
||||
tender = orm.relationship(
|
||||
'Tender',
|
||||
doc="""
|
||||
Reference to the associated tender, if applicable.
|
||||
""")
|
||||
|
||||
void = sa.Column(sa.Boolean(), nullable=False, default=False, doc="""
|
||||
Flag indicating the line item was voided.
|
||||
""")
|
||||
|
|
|
@ -66,5 +66,14 @@ class Tender(Base):
|
|||
transaction balance.
|
||||
""")
|
||||
|
||||
kick_drawer = sa.Column(sa.Boolean(), nullable=True, doc="""
|
||||
Flag indicating the drawer should be kicked open when a
|
||||
transaction is finalized which includes this tender.
|
||||
""")
|
||||
|
||||
disabled = sa.Column(sa.Boolean(), nullable=True, doc="""
|
||||
Flag indicating the tender is disabled, and should not be used.
|
||||
""")
|
||||
|
||||
def __str__(self):
|
||||
return str(self.name or '')
|
||||
|
|
Loading…
Reference in a new issue