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):
|
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.
|
:param session: Current DB session.
|
||||||
|
|
||||||
|
@ -341,17 +341,33 @@ class POSBatchHandler(BatchHandler):
|
||||||
:returns: List of rows which were added to the batch.
|
:returns: List of rows which were added to the batch.
|
||||||
"""
|
"""
|
||||||
session = self.app.get_session(batch)
|
session = self.app.get_session(batch)
|
||||||
|
model = self.model
|
||||||
|
|
||||||
# TODO: this could probably be improved. any validation needed?
|
tender_info = tender
|
||||||
if isinstance(tender, str):
|
tender = None
|
||||||
item_entry = tender
|
item_entry = None
|
||||||
description = f"TENDER '{tender}'"
|
description = None
|
||||||
elif hasattr(tender, 'code'):
|
|
||||||
|
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
|
item_entry = tender.code
|
||||||
description = tender.name
|
description = tender.name
|
||||||
else:
|
|
||||||
item_entry = tender['code']
|
if tender.disabled:
|
||||||
description = tender['name']
|
# 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 = []
|
rows = []
|
||||||
|
|
||||||
|
@ -362,6 +378,7 @@ class POSBatchHandler(BatchHandler):
|
||||||
row.item_entry = item_entry
|
row.item_entry = item_entry
|
||||||
row.description = description
|
row.description = description
|
||||||
row.tender_total = amount
|
row.tender_total = amount
|
||||||
|
row.tender = tender
|
||||||
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
||||||
self.add_row(batch, row)
|
self.add_row(batch, row)
|
||||||
rows.append(row)
|
rows.append(row)
|
||||||
|
@ -380,12 +397,18 @@ class POSBatchHandler(BatchHandler):
|
||||||
raise ValueError(f"tender '{tender.name}' does not allow "
|
raise ValueError(f"tender '{tender.name}' does not allow "
|
||||||
f" cash back: ${-balance:0.2f}")
|
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 = self.make_row()
|
||||||
row.user = user
|
row.user = user
|
||||||
row.row_type = self.enum.POS_ROW_TYPE_CHANGE_BACK
|
row.row_type = self.enum.POS_ROW_TYPE_CHANGE_BACK
|
||||||
row.item_entry = item_entry
|
row.item_entry = item_entry
|
||||||
row.description = "CHANGE BACK"
|
row.description = "CHANGE BACK"
|
||||||
row.tender_total = -balance
|
row.tender_total = -balance
|
||||||
|
row.tender = cash
|
||||||
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
batch.tender_total = (batch.tender_total or 0) + row.tender_total
|
||||||
self.add_row(batch, row)
|
self.add_row(batch, row)
|
||||||
rows.append(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'),
|
name='batch_pos_row_fk_user'),
|
||||||
sa.ForeignKeyConstraint(['product_uuid'], ['product.uuid'],
|
sa.ForeignKeyConstraint(['product_uuid'], ['product.uuid'],
|
||||||
name='batch_pos_row_fk_item'),
|
name='batch_pos_row_fk_item'),
|
||||||
|
sa.ForeignKeyConstraint(['tender_uuid'], ['tender.uuid'],
|
||||||
|
name='batch_pos_row_fk_tender'),
|
||||||
)
|
)
|
||||||
|
|
||||||
STATUS_OK = 1
|
STATUS_OK = 1
|
||||||
|
@ -307,6 +309,13 @@ class POSBatchRow(BatchRowMixin, Base):
|
||||||
Tender total for the item.
|
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="""
|
void = sa.Column(sa.Boolean(), nullable=False, default=False, doc="""
|
||||||
Flag indicating the line item was voided.
|
Flag indicating the line item was voided.
|
||||||
""")
|
""")
|
||||||
|
|
|
@ -66,5 +66,14 @@ class Tender(Base):
|
||||||
transaction balance.
|
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):
|
def __str__(self):
|
||||||
return str(self.name or '')
|
return str(self.name or '')
|
||||||
|
|
Loading…
Reference in a new issue