Lance Edgar 2023-03-25 11:11:55 -05:00
parent bfd9f43080
commit 71f6ac0ef9
20 changed files with 135 additions and 152 deletions

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2021 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,8 +24,6 @@
Models for customer order batches Models for customer order batches
""" """
from __future__ import unicode_literals, absolute_import
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -68,6 +66,7 @@ class CustomerOrderBatch(BatchMixin, CustomerOrderBase, Base):
backref=orm.backref( backref=orm.backref(
'batches', 'batches',
order_by='CustomerOrderBatch.id', order_by='CustomerOrderBatch.id',
cascade_backrefs=False,
doc=""" doc="""
List of batches associated with the customer order. List of batches associated with the customer order.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2021 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,8 +24,6 @@
Model for inventory batches Model for inventory batches
""" """
from __future__ import unicode_literals, absolute_import
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -57,9 +55,13 @@ class InventoryBatch(BatchMixin, Base):
doc=""" doc="""
Reference to the handheld batch from which this inventory batch originated. Reference to the handheld batch from which this inventory batch originated.
""", """,
backref=orm.backref('inventory_batch', uselist=False, doc=""" backref=orm.backref(
Reference to the inventory batch to which this handheld batch was converted. 'inventory_batch',
""")) uselist=False,
cascade_backrefs=False,
doc="""
Reference to the inventory batch to which this handheld batch was converted.
"""))
mode = sa.Column(sa.Integer(), nullable=True, doc=""" mode = sa.Column(sa.Integer(), nullable=True, doc="""
Specifies the "mode" for the inventory count batch, i.e. how the count data Specifies the "mode" for the inventory count batch, i.e. how the count data
@ -103,6 +105,7 @@ class InventoryBatchFromHandheld(Base):
collection_class=ordering_list('ordinal', count_from=1), collection_class=ordering_list('ordinal', count_from=1),
order_by=ordinal, order_by=ordinal,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Sequence of raw inventory / handheld batch associations. Sequence of raw inventory / handheld batch associations.
""")) """))
@ -117,6 +120,7 @@ class InventoryBatchFromHandheld(Base):
'_inventory_batch', '_inventory_batch',
uselist=False, uselist=False,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Indirect reference to the inventory batch to which this handheld batch was converted. Indirect reference to the inventory batch to which this handheld batch was converted.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,8 +24,6 @@
Data model for label batches Data model for label batches
""" """
from __future__ import unicode_literals, absolute_import
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -65,6 +63,7 @@ class LabelBatch(BatchMixin, Base):
backref=orm.backref( backref=orm.backref(
'label_batch', 'label_batch',
uselist=False, uselist=False,
cascade_backrefs=False,
doc=""" doc="""
Reference to the label batch to which this handheld batch was converted. Reference to the label batch to which this handheld batch was converted.
""")) """))
@ -117,6 +116,7 @@ class LabelBatchFromHandheld(Base):
collection_class=ordering_list('ordinal', count_from=1), collection_class=ordering_list('ordinal', count_from=1),
order_by=ordinal, order_by=ordinal,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Sequence of raw label / handheld batch associations. Sequence of raw label / handheld batch associations.
""")) """))
@ -131,6 +131,7 @@ class LabelBatchFromHandheld(Base):
'_label_batch', '_label_batch',
uselist=False, uselist=False,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Indirect reference to the label batch to which this handheld batch was converted. Indirect reference to the label batch to which this handheld batch was converted.
""")) """))
@ -185,7 +186,10 @@ class LabelBatchRow(ProductBatchRowMixin, Base):
doc=""" doc="""
Reference to the :class:`LabelProfile` with which the row is associated. Reference to the :class:`LabelProfile` with which the row is associated.
""", """,
backref=orm.backref('_print_labels_rows', cascade='all')) backref=orm.backref(
'_print_labels_rows',
cascade='all',
cascade_backrefs=False))
label_quantity = sa.Column(sa.Integer(), nullable=False, default=1, doc=""" label_quantity = sa.Column(sa.Integer(), nullable=False, default=1, doc="""
Number of labels to print for this row/product. Number of labels to print for this row/product.

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,9 +24,6 @@
Models for purchase order batches Models for purchase order batches
""" """
from __future__ import unicode_literals, absolute_import
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -81,6 +78,7 @@ class PurchaseBatch(BatchMixin, PurchaseBase, Base):
backref=orm.backref( backref=orm.backref(
'batches', 'batches',
order_by='PurchaseBatch.id', order_by='PurchaseBatch.id',
cascade_backrefs=False,
doc=""" doc="""
List of batches associated with the purchase. List of batches associated with the purchase.
""")) """))
@ -155,6 +153,7 @@ class PurchaseBatch(BatchMixin, PurchaseBase, Base):
backref=orm.backref( backref=orm.backref(
'truck_dump_children', 'truck_dump_children',
order_by='PurchaseBatch.id', order_by='PurchaseBatch.id',
cascade_backrefs=False,
doc=""" doc="""
List of batches which are "children" of the current batch, which is List of batches which are "children" of the current batch, which is
assumed to be a truck dump. assumed to be a truck dump.
@ -312,6 +311,7 @@ class PurchaseBatchRowClaim(Base):
backref=orm.backref( backref=orm.backref(
'truck_dump_claims', 'truck_dump_claims',
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
List of claims which this "child" row makes against rows within a List of claims which this "child" row makes against rows within a
truck dump batch. truck dump batch.
@ -327,6 +327,7 @@ class PurchaseBatchRowClaim(Base):
backref=orm.backref( backref=orm.backref(
'claims', 'claims',
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
List of claims made by "child" rows against this truck dump batch row. List of claims made by "child" rows against this truck dump batch row.
""")) """))
@ -405,6 +406,7 @@ class PurchaseBatchCredit(PurchaseCreditBase, Base):
backref=orm.backref( backref=orm.backref(
'credits', 'credits',
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
List of :class:`PurchaseBatchCredit` instances for the row. List of :class:`PurchaseBatchCredit` instances for the row.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2021 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,8 +24,6 @@
Models for vendor catalog batches Models for vendor catalog batches
""" """
from __future__ import unicode_literals, absolute_import
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -126,7 +124,9 @@ class VendorCatalogBatchRow(ProductBatchRowMixin, Base):
associated, if any. associated, if any.
""", """,
backref=orm.backref( backref=orm.backref(
'_vendor_catalog_batch_rows', doc=""" '_vendor_catalog_batch_rows',
cascade_backrefs=False,
doc="""
List of vendor catalog batch rows which associate directly with List of vendor catalog batch rows which associate directly with
this cost record. this cost record.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,11 +24,8 @@
Data Models for Customers Data Models for Customers
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.associationproxy import association_proxy
@ -86,14 +83,8 @@ class Customer(ContactMixin, Base):
""") """)
def __str__(self): def __str__(self):
if six.PY2:
return unicode(self).encode('utf8')
return self.name or "" return self.name or ""
if six.PY2:
def __unicode__(self):
return self.name or ""
def add_email_address(self, address, type='Home'): def add_email_address(self, address, type='Home'):
email = CustomerEmailAddress(address=address, type=type) email = CustomerEmailAddress(address=address, type=type)
self.emails.append(email) self.emails.append(email)
@ -254,12 +245,12 @@ class CustomerNote(Note):
foreign_keys='CustomerNote.parent_uuid', foreign_keys='CustomerNote.parent_uuid',
order_by='CustomerNote.created', order_by='CustomerNote.created',
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Sequence of notes which belong to the customer. Sequence of notes which belong to the customer.
""")) """))
@six.python_2_unicode_compatible
class CustomerGroup(Base): class CustomerGroup(Base):
""" """
Represents an arbitrary group to which customers may belong. Represents an arbitrary group to which customers may belong.
@ -295,7 +286,8 @@ class CustomerGroupAssignment(Base):
CustomerGroup, CustomerGroup,
backref=orm.backref( backref=orm.backref(
'_customers', '_customers',
cascade='all, delete-orphan')) cascade='all, delete-orphan',
cascade_backrefs=False))
Customer._groups = orm.relationship( Customer._groups = orm.relationship(
@ -421,10 +413,4 @@ class PendingCustomer(Base):
""") """)
def __str__(self): def __str__(self):
if six.PY2:
return (self.display_name or "").encode('utf_8')
return self.display_name or "" return self.display_name or ""
if six.PY2:
def __unicode__(self):
return self.display_name or ""

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2021 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,11 +24,8 @@
Data Models for Customer Orders Data Models for Customer Orders
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.orderinglist import ordering_list from sqlalchemy.ext.orderinglist import ordering_list
@ -123,7 +120,6 @@ class CustomerOrderBase(object):
""") """)
@six.python_2_unicode_compatible
class CustomerOrder(CustomerOrderBase, Base): class CustomerOrder(CustomerOrderBase, Base):
""" """
Represents an order placed by the customer. Represents an order placed by the customer.
@ -171,7 +167,6 @@ class CustomerOrder(CustomerOrderBase, Base):
return "(pending)" return "(pending)"
@six.python_2_unicode_compatible
class CustomerOrderItemBase(object): class CustomerOrderItemBase(object):
""" """
Base class for customer order line items. Base class for customer order line items.
@ -407,7 +402,8 @@ class CustomerOrderItemEvent(Base):
backref=orm.backref( backref=orm.backref(
'events', 'events',
order_by='CustomerOrderItemEvent.occurred', order_by='CustomerOrderItemEvent.occurred',
cascade='all, delete-orphan')) cascade='all, delete-orphan',
cascade_backrefs=False))
type_code = sa.Column(sa.Integer, nullable=False) type_code = sa.Column(sa.Integer, nullable=False)
@ -445,6 +441,7 @@ CustomerOrderItem.notes = orm.relationship(
""", """,
backref=orm.backref( backref=orm.backref(
'person', 'person',
cascade_backrefs=False,
doc=""" doc="""
Reference to the order item to which the note is attached. Reference to the order item to which the note is attached.
""")) """))

View file

@ -213,12 +213,18 @@ class EmployeeStore(Base):
employee = orm.relationship( employee = orm.relationship(
Employee, Employee,
backref=orm.backref('_stores', cascade='all, delete-orphan')) backref=orm.backref(
'_stores',
cascade='all, delete-orphan',
cascade_backrefs=False))
store = orm.relationship( store = orm.relationship(
Store, Store,
order_by=Store.name, order_by=Store.name,
backref=orm.backref('_employees', cascade='all, delete-orphan')) backref=orm.backref(
'_employees',
cascade='all, delete-orphan',
cascade_backrefs=False))
Employee.stores = association_proxy( Employee.stores = association_proxy(
'_stores', 'store', '_stores', 'store',
@ -248,12 +254,18 @@ class EmployeeDepartment(Base):
employee = orm.relationship( employee = orm.relationship(
Employee, Employee,
backref=orm.backref('_departments', cascade='all, delete-orphan')) backref=orm.backref(
'_departments',
cascade='all, delete-orphan',
cascade_backrefs=False))
department = orm.relationship( department = orm.relationship(
Department, Department,
order_by=Department.name, order_by=Department.name,
backref=orm.backref('_employees', cascade='all, delete-orphan')) backref=orm.backref(
'_employees',
cascade='all, delete-orphan',
cascade_backrefs=False))
Employee.departments = association_proxy( Employee.departments = association_proxy(
'_departments', 'department', '_departments', 'department',
@ -286,6 +298,7 @@ class EmployeeHistory(Base):
backref=orm.backref( backref=orm.backref(
'history', 'history',
order_by='EmployeeHistory.start_date', order_by='EmployeeHistory.start_date',
cascade_backrefs=False,
doc=""" doc="""
Sequence of history records for the employee. Sequence of history records for the employee.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2020 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,9 +24,6 @@
Data Models for Members Data Models for Members
""" """
from __future__ import unicode_literals, absolute_import
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.orderinglist import ordering_list from sqlalchemy.ext.orderinglist import ordering_list
@ -69,6 +66,7 @@ class Member(ContactMixin, Base):
""", """,
backref=orm.backref( backref=orm.backref(
'members', 'members',
cascade_backrefs=False,
doc=""" doc="""
Sequence of member records with which this person is associated. Sequence of member records with which this person is associated.
"""), """),
@ -82,6 +80,7 @@ class Member(ContactMixin, Base):
""", """,
backref=orm.backref( backref=orm.backref(
'members', 'members',
cascade_backrefs=False,
doc=""" doc="""
Sequence of member records with which this customer is associated. Sequence of member records with which this customer is associated.
"""), """),
@ -126,14 +125,8 @@ class Member(ContactMixin, Base):
""") """)
def __str__(self): def __str__(self):
if six.PY2:
return unicode(self).encode('utf_8')
return str(self.person or self.customer or "") return str(self.person or self.customer or "")
if six.PY2:
def __unicode__(self):
return unicode(self.person or self.customer or "")
# TODO: deprecate / remove this # TODO: deprecate / remove this
def add_email_address(self, address, type='Home'): def add_email_address(self, address, type='Home'):
email = MemberEmailAddress(address=address, type=type) email = MemberEmailAddress(address=address, type=type)

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2018 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,11 +24,8 @@
Data Models for User Messages Data Models for User Messages
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
@ -52,9 +49,13 @@ class Message(Base):
User, doc=""" User, doc="""
Reference to the user who sent the message. Reference to the user who sent the message.
""", """,
backref=orm.backref('sent_messages', cascade='all, delete-orphan', doc=""" backref=orm.backref(
List of all messages which have ever been sent by the user. 'sent_messages',
""")) cascade='all, delete-orphan',
cascade_backrefs=False,
doc="""
List of all messages which have ever been sent by the user.
"""))
subject = sa.Column(sa.String(length=255), nullable=True, doc=""" subject = sa.Column(sa.String(length=255), nullable=True, doc="""
Subject for the message. Subject for the message.
@ -69,14 +70,8 @@ class Message(Base):
""") """)
def __str__(self): def __str__(self):
if six.PY2:
return (self.subject or '').encode('utf8')
return (self.subject or '') return (self.subject or '')
if six.PY2:
def __unicode__(self):
return (self.subject or '')
def add_recipient(self, user, **kwargs): def add_recipient(self, user, **kwargs):
""" """
Add the given user to the message's recipients list, unless it's Add the given user to the message's recipients list, unless it's
@ -97,7 +92,6 @@ class Message(Base):
return False return False
@six.python_2_unicode_compatible
class MessageRecipient(Base): class MessageRecipient(Base):
""" """
Represents the combination of a single message and a single recipient. Represents the combination of a single message and a single recipient.
@ -123,16 +117,21 @@ class MessageRecipient(Base):
Message, doc=""" Message, doc="""
Reference to the message which has been "received". Reference to the message which has been "received".
""", """,
backref=orm.backref('recipients', cascade='all, delete-orphan', doc=""" backref=orm.backref(
List of recipients for the message. 'recipients',
""", cascade='all, delete-orphan',
)) cascade_backrefs=False,
doc="""
List of recipients for the message.
"""))
recipient = orm.relationship( recipient = orm.relationship(
User, doc=""" User, doc="""
Reference to the user who "received" the message. Reference to the user who "received" the message.
""", """,
backref=orm.backref('_messages')) backref=orm.backref(
'_messages',
cascade_backrefs=False))
def __str__(self): def __str__(self):
return str(self.recipient) return str(self.recipient)

View file

@ -158,6 +158,7 @@ Person.phones = orm.relationship(
""", """,
backref=orm.backref( backref=orm.backref(
'person', 'person',
cascade_backrefs=False,
doc=""" doc="""
Reference to the :class:`Person` instance to which the phone number Reference to the :class:`Person` instance to which the phone number
belongs. belongs.
@ -197,6 +198,7 @@ Person.emails = orm.relationship(
""", """,
backref=orm.backref( backref=orm.backref(
'person', 'person',
cascade_backrefs=False,
doc=""" doc="""
Reference to the :class:`Person` instance to which the email address Reference to the :class:`Person` instance to which the email address
belongs. belongs.
@ -261,6 +263,7 @@ Person.notes = orm.relationship(
""", """,
backref=orm.backref( backref=orm.backref(
'person', 'person',
cascade_backrefs=False,
doc=""" doc="""
Reference to the person to which the note is attached. Reference to the person to which the note is attached.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,12 +24,9 @@
Data Models for Products Data Models for Products
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import logging import logging
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.orderinglist import ordering_list from sqlalchemy.ext.orderinglist import ordering_list
@ -47,7 +44,6 @@ from rattail.util import pretty_quantity
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@six.python_2_unicode_compatible
class UnitOfMeasure(Base): class UnitOfMeasure(Base):
""" """
Maps a UOM abbreviation used by the organization, to the proper UOM code Maps a UOM abbreviation used by the organization, to the proper UOM code
@ -106,16 +102,8 @@ class Brand(Base):
def __str__(self): def __str__(self):
text = self.name or '' text = self.name or ''
if six.PY2:
return text.encode('utf8')
return text
if six.PY2:
def __unicode__(self):
return self.name or ''
@six.python_2_unicode_compatible
class Tax(Base): class Tax(Base):
""" """
Represents a sales tax rate to be applied to products. Represents a sales tax rate to be applied to products.
@ -267,6 +255,7 @@ class Product(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'packs', 'packs',
cascade_backrefs=False,
doc=""" doc="""
List of products which reference the current product as their unit. List of products which reference the current product as their unit.
""")) """))
@ -392,11 +381,15 @@ class Product(Base):
subdepartment = orm.relationship( subdepartment = orm.relationship(
Subdepartment, Subdepartment,
order_by=Subdepartment.name, order_by=Subdepartment.name,
backref=orm.backref('products')) backref=orm.backref(
'products',
cascade_backrefs=False))
category = orm.relationship( category = orm.relationship(
Category, Category,
backref=orm.backref('products')) backref=orm.backref(
'products',
cascade_backrefs=False))
brand = orm.relationship( brand = orm.relationship(
Brand, Brand,
@ -405,6 +398,7 @@ class Product(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'products', 'products',
cascade_backrefs=False,
doc=""" doc="""
List of products for the brand. List of products for the brand.
""")) """))
@ -417,6 +411,7 @@ class Product(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'products', 'products',
cascade_backrefs=False,
doc=""" doc="""
List of :class:`Product` objects which belong to this family. List of :class:`Product` objects which belong to this family.
""")) """))
@ -429,19 +424,14 @@ class Product(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'products', 'products',
cascade_backrefs=False,
doc=""" doc="""
List of :class:`Product` objects which associate with this report code. List of :class:`Product` objects which associate with this report code.
""")) """))
def __str__(self): def __str__(self):
if six.PY2:
return self.full_description.encode('utf8')
return self.full_description return self.full_description
if six.PY2:
def __unicode__(self):
return self.full_description
@property @property
def full_description(self): def full_description(self):
""" """
@ -552,6 +542,7 @@ class ProductImage(Base):
backref=orm.backref( backref=orm.backref(
'image', 'image',
uselist=False, uselist=False,
cascade_backrefs=False,
doc=""" doc="""
Reference to the product's image, if any. Reference to the product's image, if any.
""")) """))
@ -559,7 +550,6 @@ class ProductImage(Base):
bytes = sa.Column(sa.LargeBinary(), nullable=False) bytes = sa.Column(sa.LargeBinary(), nullable=False)
@six.python_2_unicode_compatible
class ProductCode(Base): class ProductCode(Base):
""" """
Represents an arbitrary "code" for a product. Represents an arbitrary "code" for a product.
@ -681,7 +671,10 @@ class ProductCost(Base):
vendor = orm.relationship( vendor = orm.relationship(
Vendor, Vendor,
backref=orm.backref('product_costs', cascade='all')) backref=orm.backref(
'product_costs',
cascade='all',
cascade_backrefs=False))
Product.costs = orm.relationship( Product.costs = orm.relationship(
@ -738,7 +731,9 @@ class ProductFutureCost(Base):
will be applied (when the time comes), if applicable. If this is will be applied (when the time comes), if applicable. If this is
``None``, then a new "current" cost record would be created instead. ``None``, then a new "current" cost record would be created instead.
""", """,
backref=orm.backref('futures')) backref=orm.backref(
'futures',
cascade_backrefs=False))
product_uuid = sa.Column(sa.String(length=32), nullable=False) product_uuid = sa.Column(sa.String(length=32), nullable=False)
product = orm.relationship( product = orm.relationship(
@ -748,6 +743,7 @@ class ProductFutureCost(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'future_costs', 'future_costs',
cascade_backrefs=False,
doc=""" doc="""
Sequence of future cost records for the product, i.e. which have Sequence of future cost records for the product, i.e. which have
yet to become "current" costs. yet to become "current" costs.
@ -761,6 +757,7 @@ class ProductFutureCost(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'future_costs', 'future_costs',
cascade_backrefs=False,
doc=""" doc="""
Sequence of future cost records for the vendor, i.e. which have yet Sequence of future cost records for the vendor, i.e. which have yet
to become "current" costs. to become "current" costs.
@ -888,6 +885,7 @@ class ProductInventory(Base):
'inventory', 'inventory',
uselist=False, uselist=False,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Inventory data for the product, if any. Inventory data for the product, if any.
""")) """))
@ -923,6 +921,7 @@ class ProductStoreInfo(Base):
'store_infos', 'store_infos',
collection_class=attribute_mapped_collection('store_uuid'), collection_class=attribute_mapped_collection('store_uuid'),
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
List of store-specific info records for the product. List of store-specific info records for the product.
""")) """))
@ -969,6 +968,7 @@ class ProductVolatile(Base):
'volatile', 'volatile',
uselist=False, uselist=False,
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
"Volatile" data record for the product, if any. "Volatile" data record for the product, if any.
""")) """))
@ -1057,16 +1057,9 @@ class PendingProduct(Base):
self.size) self.size)
def __str__(self): def __str__(self):
if six.PY2:
return self.full_description.encode('utf8')
return self.full_description return self.full_description
if six.PY2:
def __unicode__(self):
return self.full_description
@six.python_2_unicode_compatible
class InventoryAdjustmentReason(Base): class InventoryAdjustmentReason(Base):
""" """
Reasons for adjusting product inventory. Reasons for adjusting product inventory.

View file

@ -24,11 +24,8 @@
Data model for purchase orders Data model for purchase orders
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -38,7 +35,6 @@ from rattail.db.types import GPCType
from rattail.util import pretty_quantity from rattail.util import pretty_quantity
@six.python_2_unicode_compatible
class PurchaseBase(object): class PurchaseBase(object):
""" """
Base class for purchases; defines common fields. Base class for purchases; defines common fields.
@ -321,7 +317,6 @@ class PurchaseItemBase(object):
""") """)
@six.python_2_unicode_compatible
class PurchaseCreditBase(object): class PurchaseCreditBase(object):
""" """
Base class for purchase credits. Base class for purchase credits.
@ -584,6 +579,7 @@ class PurchaseItem(PurchaseItemBase, Base):
backref=orm.backref( backref=orm.backref(
'items', 'items',
cascade='all', cascade='all',
cascade_backrefs=False,
doc=""" doc="""
List of :class:`PurchaseItem` instances for the purchase. List of :class:`PurchaseItem` instances for the purchase.
""")) """))
@ -618,6 +614,7 @@ class PurchaseCredit(PurchaseCreditBase, Base):
""", """,
backref=orm.backref( backref=orm.backref(
'credits', 'credits',
cascade_backrefs=False,
doc=""" doc="""
List of :class:`PurchaseCredit` instances for the purchase. List of :class:`PurchaseCredit` instances for the purchase.
""")) """))

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2017 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,10 +24,6 @@
Data models for employee work shifts Data models for employee work shifts
""" """
from __future__ import unicode_literals, absolute_import
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
@ -90,10 +86,13 @@ class ScheduledShift(Base, ShiftMixin):
Reference to the :class:`rattail.db.model.Employee` instance whose Reference to the :class:`rattail.db.model.Employee` instance whose
shift this is. shift this is.
""", """,
backref=orm.backref('scheduled_shifts', doc=""" backref=orm.backref(
Sequence of :class:`rattail.db.model.ScheduledShift` instances for the 'scheduled_shifts',
employee. cascade_backrefs=False,
""")) doc="""
Sequence of :class:`rattail.db.model.ScheduledShift` instances for the
employee.
"""))
store_uuid = sa.Column(sa.String(length=32), nullable=True) store_uuid = sa.Column(sa.String(length=32), nullable=True)
@ -113,7 +112,6 @@ class ScheduledShift(Base, ShiftMixin):
""") """)
@six.python_2_unicode_compatible
class WorkedShift(Base, ShiftMixin): class WorkedShift(Base, ShiftMixin):
""" """
Represents a shift actually *worked* by an employee. (Either ``punch_in`` Represents a shift actually *worked* by an employee. (Either ``punch_in``
@ -136,10 +134,13 @@ class WorkedShift(Base, ShiftMixin):
Reference to the :class:`rattail.db.model.Employee` instance whose Reference to the :class:`rattail.db.model.Employee` instance whose
shift this is. shift this is.
""", """,
backref=orm.backref('worked_shifts', doc=""" backref=orm.backref(
Sequence of :class:`rattail.db.model.WorkedShift` instances for the 'worked_shifts',
employee. cascade_backrefs=False,
""")) doc="""
Sequence of :class:`rattail.db.model.WorkedShift` instances for the
employee.
"""))
store_uuid = sa.Column(sa.String(length=32), nullable=True) store_uuid = sa.Column(sa.String(length=32), nullable=True)

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2020 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,9 +24,6 @@
Base data model for "shopfoo" pattern Base data model for "shopfoo" pattern
""" """
from __future__ import unicode_literals, absolute_import
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from sqlalchemy.ext.declarative import declared_attr from sqlalchemy.ext.declarative import declared_attr
@ -68,12 +65,12 @@ class ShopfooProductBase(object):
backref=orm.backref( backref=orm.backref(
backref_name, backref_name,
uselist=False, uselist=False,
cascade_backrefs=False,
doc=""" doc="""
Reference to the local/cached {} record for this product. Reference to the local/cached {} record for this product.
""".format(backref_name))) """.format(backref_name)))
@six.python_2_unicode_compatible
class ShopfooProductExportBase(model.ExportMixin): class ShopfooProductExportBase(model.ExportMixin):
""" """
Product export table, specific to the target system. Each record in this Product export table, specific to the target system. Each record in this

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2018 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,18 +24,14 @@
Data models for tempmon Data models for tempmon
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from rattail.db.model import Base, uuid_column from rattail.db.model import Base, uuid_column
@six.python_2_unicode_compatible
class TempmonClient(Base): class TempmonClient(Base):
""" """
Represents a tempmon client. Represents a tempmon client.
@ -60,7 +56,6 @@ class TempmonClient(Base):
return [probe for probe in self.probes if probe.enabled] return [probe for probe in self.probes if probe.enabled]
@six.python_2_unicode_compatible
class TempmonProbe(Base): class TempmonProbe(Base):
""" """
Represents a probe connected to a tempmon client. Represents a probe connected to a tempmon client.
@ -82,6 +77,7 @@ class TempmonProbe(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'probes', 'probes',
cascade_backrefs=False,
doc=""" doc="""
List of probes connected to this client. List of probes connected to this client.
""")) """))
@ -107,7 +103,6 @@ class TempmonProbe(Base):
return str(self.description or '') return str(self.description or '')
@six.python_2_unicode_compatible
class TempmonReading(Base): class TempmonReading(Base):
""" """
Represents a single tempurate reading from a tempmon probe. Represents a single tempurate reading from a tempmon probe.

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,18 +24,14 @@
Data models for scheduled app upgrades Data models for scheduled app upgrades
""" """
from __future__ import unicode_literals, absolute_import
import datetime import datetime
import six
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
from rattail.db.model import Base, uuid_column, User from rattail.db.model import Base, uuid_column, User
@six.python_2_unicode_compatible
class Upgrade(Base): class Upgrade(Base):
""" """
Represents a scheduled app upgrade. Represents a scheduled app upgrade.
@ -125,7 +121,8 @@ class UpgradeRequirement(Base):
upgrade = orm.relationship( upgrade = orm.relationship(
Upgrade, Upgrade,
backref=orm.backref( backref=orm.backref(
'requirements')) 'requirements',
cascade_backrefs=False))
package = sa.Column(sa.String(length=255), nullable=False, doc=""" package = sa.Column(sa.String(length=255), nullable=False, doc="""
Package name as found on PyPI (or at least interpretable by pip). Package name as found on PyPI (or at least interpretable by pip).

View file

@ -181,6 +181,7 @@ class User(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'users', 'users',
cascade_backrefs=False,
doc=""" doc="""
List of user accounts for the person. Typically there is List of user accounts for the person. Typically there is
only one user account per person, but technically multiple only one user account per person, but technically multiple
@ -347,6 +348,7 @@ class UserEvent(Base):
backref=orm.backref( backref=orm.backref(
'events', 'events',
cascade='all, delete-orphan', cascade='all, delete-orphan',
cascade_backrefs=False,
doc=""" doc="""
Sequence of events for the user. Sequence of events for the user.
""")) """))

View file

@ -176,7 +176,8 @@ class VendorContact(Base):
Person, Person,
backref=orm.backref( backref=orm.backref(
'_vendor_contacts', '_vendor_contacts',
cascade='all, delete-orphan')) cascade='all, delete-orphan',
cascade_backrefs=False))
def __str__(self): def __str__(self):
return str(self.person) return str(self.person)

View file

@ -2,7 +2,7 @@
################################################################################ ################################################################################
# #
# Rattail -- Retail Software Framework # Rattail -- Retail Software Framework
# Copyright © 2010-2022 Lance Edgar # Copyright © 2010-2023 Lance Edgar
# #
# This file is part of Rattail. # This file is part of Rattail.
# #
@ -24,8 +24,6 @@
Data Models for Work Orders Data Models for Work Orders
""" """
from __future__ import unicode_literals, absolute_import
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy import orm from sqlalchemy import orm
@ -57,6 +55,7 @@ class WorkOrder(Base):
""", """,
backref=orm.backref( backref=orm.backref(
'workorders', 'workorders',
cascade_backrefs=False,
doc=""" doc="""
Sequence of all work orders for this customer. Sequence of all work orders for this customer.
""")) """))
@ -131,7 +130,8 @@ class WorkOrderEvent(Base):
backref=orm.backref( backref=orm.backref(
'events', 'events',
order_by='WorkOrderEvent.occurred', order_by='WorkOrderEvent.occurred',
cascade='all, delete-orphan')) cascade='all, delete-orphan',
cascade_backrefs=False))
type_code = sa.Column(sa.Integer, nullable=False, doc=""" type_code = sa.Column(sa.Integer, nullable=False, doc="""
Code specifying the type of event this is. Code specifying the type of event this is.