from app.extensions import db from app.models.base import TimestampMixin class Customer(TimestampMixin, db.Model): id = db.Column(db.Integer, primary_key=True) company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False, index=True) name = db.Column(db.String(255), nullable=False) tax_id = db.Column(db.String(32), index=True, default='') email = db.Column(db.String(255), default='') address = db.Column(db.String(255), default='') regon = db.Column(db.String(32), default='') is_active = db.Column(db.Boolean, default=True, nullable=False) company = db.relationship('Company', backref=db.backref('customers', lazy='dynamic', cascade='all, delete-orphan')) __table_args__ = (db.UniqueConstraint('company_id', 'name', name='uq_customer_company_name'),) class Product(TimestampMixin, db.Model): id = db.Column(db.Integer, primary_key=True) company_id = db.Column(db.Integer, db.ForeignKey('company.id'), nullable=False, index=True) name = db.Column(db.String(255), nullable=False) sku = db.Column(db.String(64), default='') unit = db.Column(db.String(16), default='szt.') net_price = db.Column(db.Numeric(12, 2), nullable=False, default=0) vat_rate = db.Column(db.Numeric(5, 2), nullable=False, default=23) split_payment_default = db.Column(db.Boolean, default=False, nullable=False) is_active = db.Column(db.Boolean, default=True, nullable=False) company = db.relationship('Company', backref=db.backref('products', lazy='dynamic', cascade='all, delete-orphan')) __table_args__ = (db.UniqueConstraint('company_id', 'name', name='uq_product_company_name'),) class InvoiceLine(TimestampMixin, db.Model): id = db.Column(db.Integer, primary_key=True) invoice_id = db.Column(db.Integer, db.ForeignKey('invoice.id'), nullable=False, index=True) product_id = db.Column(db.Integer, db.ForeignKey('product.id'), index=True) description = db.Column(db.String(255), nullable=False) quantity = db.Column(db.Numeric(12, 2), nullable=False, default=1) unit = db.Column(db.String(16), default='szt.') unit_net = db.Column(db.Numeric(12, 2), nullable=False, default=0) vat_rate = db.Column(db.Numeric(5, 2), nullable=False, default=23) net_amount = db.Column(db.Numeric(12, 2), nullable=False, default=0) vat_amount = db.Column(db.Numeric(12, 2), nullable=False, default=0) gross_amount = db.Column(db.Numeric(12, 2), nullable=False, default=0) invoice = db.relationship('Invoice', backref=db.backref('lines', lazy='dynamic', cascade='all, delete-orphan')) product = db.relationship('Product')