class Product(db.Model): __tablename__ = 'product' id = db.Column(db.Integer, primary_key=True) code = db.Column(db.Unicode(14), nullable=False, unique=True) description = db.Column(db.Unicode(40), nullable=False) brand = db.Column(db.UnicodeText) suppliers = association_proxy('suppliers_info', 'supplier')
class Email(RefEntityMixin, db.Model): "Model to store entity's email information" __tablename__ = 'email' id = db.Column(db.Integer, primary_key=True) email_type = db.Column(db.Unicode(50)) email = db.Column(db.Unicode(50), nullable=False) def __str__(self): retval = self.email_type + ': ' if self.email_type else '' retval += self.email return retval
class Entity(db.Model, TimestampMixin): """ Base class for entity submodels. An entity is a model that has two names, one required and one optional, and a series of address, phone, emails and extra fields. Models to be suitable to this description are for example: User, Employee, Supplier, Customer, Contact, Branch, etc. """ __tablename__ = 'entity' id = db.Column(db.Integer, primary_key=True) _name_1 = db.Column('name_1', db.Unicode, nullable=False) _name_2 = db.Column('name_2', db.Unicode) entity_type = db.Column(db.Unicode(50)) notes = db.Column(db.UnicodeText) __mapper_args__ = {'polymorphic_on': entity_type} @property def full_name(self): ln = " {0}".format(self._name_2) if self._name_2 else "" return "{0}{1}".format(self._name_1, ln) def __repr__(self): return "<{0} '{1}'>".format(self.__class__.__name__, self.full_name)
class FiscalData(db.Model): __tablename__ = 'fiscal_data' FISCAL_CONSUMIDOR_FINAL = 'CONSUMIDOR FINAL' FISCAL_RESPONSABLE_INSCRIPTO = 'RESPONSABLE INSCRIPTO' FISCAL_EXCENTO = 'EXCENTO' FISCAL_MONOTRIBUTO = 'MONOTRIBUTO' _fiscal_types = { FISCAL_CONSUMIDOR_FINAL: 'Consumidor Final', FISCAL_RESPONSABLE_INSCRIPTO: 'Responsable Inscripto', FISCAL_EXCENTO: 'Excento', FISCAL_MONOTRIBUTO: 'Monotributo', } id = db.Column(db.Integer, primary_key=True) cuit = db.Column(db.Unicode(13)) fiscal_type = db.Column(db.Enum(*_fiscal_types.keys(), name='fiscal_type'), default=FISCAL_CONSUMIDOR_FINAL) iibb = db.Column(db.Unicode, nullable=True) @property def needs_cuit(self): return self.fiscal_type not in (self.FISCAL_CONSUMIDOR_FINAL, ) @property def type(self): return self._fiscal_types.get(self.fiscal_type) def __repr__(self): return "<FiscalData '{} {}' of '{}'>".format( self.type, self.cuit, self.entity.full_name, )
class Address(RefEntityMixin, db.Model): "Stores entity's addresses information" __tablename__ = 'address' id = db.Column(db.Integer, primary_key=True) street = db.Column(db.Unicode(64), nullable=False) streetnumber = db.Column(db.Unicode(64)) city = db.Column(db.Unicode(64)) province = db.Column(db.Unicode(32), nullable=False) zip_code = db.Column(db.Unicode(32)) address_type = db.Column(db.Unicode) def __str__(self): retval = self.street retval += " %s" % self.streetnumber if self.streetnumber else 'S/N' if self.city: retval += ", %s" % self.city retval += ", %s" % self.province if self.postal_code: retval += " (%s)" % self.postal_code return retval
class ProductSupplierInfo(db.Model): __tablename__ = 'productsupplier_info' supplier_id = db.Column(db.Integer, db.ForeignKey('supplier.supplier_id'), primary_key=True) supplier = db.relationship('Supplier', backref='products_info', lazy='joined') product_id = db.Column(db.Integer, db.ForeignKey('product.id'), primary_key=True) product = db.relationship('Product', backref='suppliers_info', lazy='joined') code = db.Column(db.Unicode(80)) description = db.Column(db.Unicode) base_cost = db.Column(db.Numeric(10, 2)) minimum_purchase = db.Column(db.Integer, default=1)
class PurchaseOrderItem(db.Model): __tablename__ = 'purchaseorder_item' id = db.Column(db.Integer, primary_key=True) sku = db.Column(db.Unicode(40)) description = db.Column(db.UnicodeText) quantity = db.Column(db.Integer, default=0) quantity_received = db.Column(db.Integer, default=0) quantity_returned = db.Column(db.Integer, default=0) order_id = db.Column(db.Integer, db.ForeignKey('purchaseorder.id'), nullable=False) order = db.relationship('PurchaseOrder', backref='items') @property def pending_quantity(self): return self.quantity - self.quantity_received