Misc. tweaks to product-related schema, for sake of generating SQL
e.g. from IFPS data
This commit is contained in:
parent
29638c062c
commit
ff428c4635
|
@ -24,6 +24,7 @@
|
||||||
Data model for CORE POS "office_op" DB
|
Data model for CORE POS "office_op" DB
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import datetime
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
|
@ -37,6 +38,23 @@ log = logging.getLogger(__name__)
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
|
class StringableDateTime(sa.TypeDecorator):
|
||||||
|
"""
|
||||||
|
Sort of a hack, to let us string-ify certain DateTime values when
|
||||||
|
generating "raw" SQL output.
|
||||||
|
|
||||||
|
cf. https://docs.sqlalchemy.org/en/14/faq/sqlexpressions.html#rendering-bound-parameters-inline
|
||||||
|
"""
|
||||||
|
impl = sa.DateTime
|
||||||
|
|
||||||
|
def process_literal_param(self, value, dialect):
|
||||||
|
if value is None:
|
||||||
|
return 'NULL'
|
||||||
|
if isinstance(value, datetime.datetime):
|
||||||
|
return "'{}'".format(value.strftime('%Y-%m-%d %H:%M:%S'))
|
||||||
|
raise NotImplementedError
|
||||||
|
|
||||||
|
|
||||||
class Change(Base):
|
class Change(Base):
|
||||||
"""
|
"""
|
||||||
Represents a changed (or deleted) record, which is pending synchronization
|
Represents a changed (or deleted) record, which is pending synchronization
|
||||||
|
@ -135,11 +153,11 @@ class Department(Base):
|
||||||
|
|
||||||
modified_by_id = sa.Column('modifiedby', sa.Integer(), nullable=True)
|
modified_by_id = sa.Column('modifiedby', sa.Integer(), nullable=True)
|
||||||
|
|
||||||
margin = sa.Column(sa.Float(), nullable=False, default=0)
|
margin = sa.Column(sa.Float(), nullable=False)
|
||||||
|
|
||||||
sales_code = sa.Column('salesCode', sa.Integer(), nullable=False, default=0)
|
sales_code = sa.Column('salesCode', sa.Integer(), nullable=False)
|
||||||
|
|
||||||
member_only = sa.Column('memberOnly', sa.SmallInteger(), nullable=False, default=0)
|
member_only = sa.Column('memberOnly', sa.SmallInteger(), nullable=False)
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name or ''
|
return self.name or ''
|
||||||
|
@ -488,6 +506,8 @@ class Product(Base):
|
||||||
|
|
||||||
mix_match_code = sa.Column('mixmatchcode', sa.String(length=13), nullable=True)
|
mix_match_code = sa.Column('mixmatchcode', sa.String(length=13), nullable=True)
|
||||||
|
|
||||||
|
created = sa.Column(StringableDateTime(), nullable=True)
|
||||||
|
|
||||||
modified = sa.Column(sa.DateTime(), nullable=True)
|
modified = sa.Column(sa.DateTime(), nullable=True)
|
||||||
|
|
||||||
# advertised = sa.Column(sa.Boolean(), nullable=True)
|
# advertised = sa.Column(sa.Boolean(), nullable=True)
|
||||||
|
@ -649,7 +669,7 @@ class ProductUser(Base):
|
||||||
|
|
||||||
enable_online = sa.Column('enableOnline', sa.Boolean(), nullable=True)
|
enable_online = sa.Column('enableOnline', sa.Boolean(), nullable=True)
|
||||||
|
|
||||||
sold_out = sa.Column('soldOut', sa.Boolean(), nullable=True, default=False)
|
sold_out = sa.Column('soldOut', sa.Boolean(), nullable=True)
|
||||||
|
|
||||||
# TODO: this was not in some older DBs
|
# TODO: this was not in some older DBs
|
||||||
# sign_count = sa.Column('signCount', sa.SmallInteger(), nullable=True, default=1)
|
# sign_count = sa.Column('signCount', sa.SmallInteger(), nullable=True, default=1)
|
||||||
|
@ -657,6 +677,9 @@ class ProductUser(Base):
|
||||||
# TODO: this was not in some older DBs
|
# TODO: this was not in some older DBs
|
||||||
# narrow = sa.Column(sa.Boolean(), nullable=True, default=False)
|
# narrow = sa.Column(sa.Boolean(), nullable=True, default=False)
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
return str(self.product or '')
|
||||||
|
|
||||||
|
|
||||||
class VendorItem(Base):
|
class VendorItem(Base):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue