"""Vendor Advance model.""" from sqlalchemy import Column, Date, Float, ForeignKey, Integer from sqlalchemy.orm import relationship from contracts import response from contracts.connectors import mysql from contracts.models.vendor_contract import VendorContract class VendorAdvance(mysql.BaseModel): """VendorAdvance class.""" __tablename__ = 'vendor_contract_advance' id = Column(Integer, primary_key=True) # noqa B001, B003 amount = Column(Float) date_paid = Column(Date) exchange_rate = Column(Float) contract_id = Column(Integer, ForeignKey('vendor_contract.id')) vendor_contract = relationship('VendorContract') def get_advances(vendor_id, date_start=None, date_end=None): """Get advances by vendor id. Args: vendor_id (int): vendor id. date_start (str): start date filter (optional). date_end (str): end date filter (optional). Returns: response.Response: advances data. """ fields = ( VendorAdvance.id.label('advance_id'), VendorAdvance.amount, VendorAdvance.date_paid, VendorAdvance.exchange_rate, ) filters = [VendorContract.vendor_id == vendor_id] if date_start: filters.append(VendorAdvance.date_paid >= date_start) if date_end: filters.append(VendorAdvance.date_paid <= date_end) with mysql.db_session() as session: rows = ( session.query(*fields) .select_from(VendorAdvance) .join(VendorAdvance.vendor_contract) .filter(*filters) ) if rows: return response.Response(rows.all()) return response.Response([])