Exemple #1
0
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')
Exemple #2
0
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
Exemple #3
0
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)
Exemple #4
0
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,
        )
Exemple #5
0
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
Exemple #6
0
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)
Exemple #7
0
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