104 lines
3.1 KiB
Python
104 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
"""
|
|
pyjeeves.models
|
|
~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
Jeeves raw data models
|
|
"""
|
|
# from sqlalchemy import Column, String
|
|
from sqlalchemy.schema import MetaData, ForeignKey, Column
|
|
from sqlalchemy.orm import relationship
|
|
from sqlalchemy.types import Integer, String
|
|
from sqlalchemy.ext.automap import automap_base
|
|
from sqlalchemy.sql.expression import and_
|
|
|
|
# from pyjeeves.session import raw_engine
|
|
from . import db
|
|
|
|
from pyjeeves import logging
|
|
from .abc import RawBaseModel
|
|
|
|
logger = logging.getLogger("PyJeeves." + __name__)
|
|
logger.info("Reading Jeeves DB structure")
|
|
|
|
meta = MetaData()
|
|
meta.reflect(bind=db.raw_session.connection(), only=['ar', 'ars', 'fr', 'kus', 'oh', 'lp', 'vg'])
|
|
|
|
# Table('fr', meta, implicit_returning=False)
|
|
|
|
Base = automap_base(cls=db.Model, name='Model', metadata=meta)
|
|
|
|
|
|
class CommodityGroup(Base, RawBaseModel):
|
|
__tablename__ = 'vg'
|
|
column_map = {'VaruGruppKod': 'CommodityGroupNumber', 'VaruGruppBeskr': 'CommodityGroupName'}
|
|
print_only = ('VaruGruppKod', 'VaruGruppBeskr')
|
|
print_filter = ('Articles', 'articles_collection')
|
|
# to_json_filter = ('Articles', 'articles_collection')
|
|
|
|
|
|
class ArticleBalance(Base, RawBaseModel):
|
|
__tablename__ = 'ars'
|
|
column_map = {'LagSaldo': 'Balance',
|
|
'LagResAnt': 'ReservedBalance',
|
|
'LagsaldoAltEnh': 'BalanceAlternative',
|
|
'LagResAntAltEnh': 'ReservedAlternativeBalance',
|
|
'LagStalle': 'StorageLocationNumber'}
|
|
print_only = ('LagSaldo',
|
|
'LagResAnt',
|
|
'LagsaldoAltEnh',
|
|
'LagResAntAltEnh',
|
|
'LagStalle')
|
|
# print_filter = ('Articles', 'articles_collection')
|
|
# to_json_filter = ('Articles', 'articles_collection')
|
|
|
|
ArtNr = Column(Integer, ForeignKey('ar.ArtNr'), primary_key=True)
|
|
|
|
|
|
class Articles(Base, RawBaseModel):
|
|
__tablename__ = 'ar'
|
|
|
|
column_map = {'ArtNr': 'ArticleNumber',
|
|
'ArtBeskr': 'ArticleName',
|
|
'LagSaldoArtikel': 'Balance',
|
|
'EnhetsKod': 'Unit',
|
|
'ArtListPris': 'ListPrice'}
|
|
print_only = (
|
|
'ArtNr',
|
|
'ArtBeskr',
|
|
'CommodityGroup',
|
|
'ArticleBalance',
|
|
'EnhetsKod',
|
|
'LagSaldoArtikel',
|
|
'RowCreatedDt',
|
|
'ArtListPris')
|
|
|
|
ArtNr = Column(Integer, primary_key=True)
|
|
|
|
VaruGruppKod = Column(Integer, ForeignKey('vg.VaruGruppKod'), primary_key=True)
|
|
|
|
CommodityGroup = relationship(CommodityGroup)
|
|
ArticleBalance = relationship(ArticleBalance)
|
|
|
|
@classmethod
|
|
def _base_filters(self, obj):
|
|
return RawBaseModel._base_filters(
|
|
obj,
|
|
and_(obj.LagTyp == 0)
|
|
)
|
|
|
|
|
|
class Companies(Base, RawBaseModel):
|
|
__tablename__ = 'fr'
|
|
column_map = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'}
|
|
print_only = ('CompanyNumber', 'CompanyName')
|
|
|
|
FtgNr = Column(String, primary_key=True)
|
|
|
|
|
|
Base.prepare()
|
|
|
|
# Base companies for cusomters and suppliers
|
|
Customers = Base.classes.kus # Customer information
|
|
Orders = Base.classes.oh # Orders by customers
|
|
DelivLoc = Base.classes.lp # Connections between a delivery company and customer company
|