Implement support for contact persons and web users. Also show addr info for company.

This commit is contained in:
Marcus Lindvall 2019-09-09 17:13:10 +02:00
parent a23e88ff2f
commit fc7c1e13bc
2 changed files with 97 additions and 5 deletions

View file

@ -192,14 +192,92 @@ class Article(RawBaseModel):
)
class ContactInformationType(RawBaseModel):
__tablename__ = 'X4'
__to_dict_only__ = ('ComKod', 'ComBeskr')
class ContactInformation(RawBaseModel):
__tablename__ = 'cr'
__column_map__ = {'ComNr': 'Information'}
__to_dict_only__ = ('InformationType', 'ComNr')
FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True)
FtgKontaktNr = Column(Integer, ForeignKey('kp.FtgKontaktNr'), primary_key=True)
ComKod = Column(String, ForeignKey('X4.ComKod'), primary_key=True)
ContactInformationType = relationship(ContactInformationType)
@hybrid_property
def InformationType(self):
return self.ContactInformationType.ComBeskr if self.ContactInformationType else ""
class ContactPerson(RawBaseModel):
__tablename__ = 'kp'
__column_map__ = {'FtgKontaktNr': 'ContactNumber', 'FtgPerson': 'ContactName'}
__to_dict_only__ = ('FtgKontaktNr', 'FtgPerson', 'ContactInformation')
FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True)
FtgKontaktNr = Column(Integer, primary_key=True)
ContactInformation = relationship(
"ContactInformation", lazy='joined',
foreign_keys='ContactInformation.FtgNr, ContactInformation.FtgKontaktNr',
primaryjoin="and_(ContactInformation.FtgNr==ContactPerson.FtgNr,"
"ContactInformation.FtgKontaktNr==ContactPerson.FtgKontaktNr)")
class WebUser(RawBaseModel):
__tablename__ = 'kpw'
__to_dict_only__ = ('WebUserName', 'ValidToUse', 'ContactPersonName', 'ContactPersonNumber')
FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True)
FtgKontaktNr = Column(Integer, ForeignKey('kp.FtgKontaktNr'), primary_key=True)
ContactPerson = relationship(
ContactPerson, uselist=False, lazy='joined',
foreign_keys='ContactPerson.FtgNr, ContactPerson.FtgKontaktNr',
primaryjoin="and_(ContactPerson.FtgNr==WebUser.FtgNr,"
"ContactPerson.FtgKontaktNr==WebUser.FtgKontaktNr)")
@hybrid_property
def ContactPersonName(self):
return self.ContactPerson.FtgPerson if self.ContactPerson else ""
@hybrid_property
def ContactPersonNumber(self):
return self.ContactPerson.FtgKontaktNr if self.ContactPerson else ""
class LanguageCodes(RawBaseModel):
__tablename__ = 'xw'
SprakKod = Column(Integer, primary_key=True)
class Company(RawBaseModel):
__tablename__ = 'fr'
__column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName'}
__to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer')
__column_map__ = {'FtgNr': 'CompanyNumber', 'FtgNamn': 'CompanyName',
'OrgNr': 'CompanyIdentityNumber', 'EUMomsNr': 'CompanyVATNumber',
'FtgPostAdr1': 'AddrCO', 'FtgPostadr5': 'AddrStreet',
'FtgLevPostNr': 'AddrPostalCode', 'FtgPostLevAdr3': 'AddrCity',
'LandsKod': 'AddrCountry',
'FtgPostAdr2': 'PostAddrStreet', 'FtgPostnr': 'PostAddrPostalCode',
'FtgPostAdr3': 'PostAddrCity'}
__to_dict_only__ = ('FtgNr', 'FtgNamn', 'Customer', 'ContactPersons', 'ContactInformation',
'FtgPostadr5', 'FtgPostAdr1', 'FtgPostLevAdr3', 'FtgLevPostNr', 'LandsKod',
'FtgPostAdr2', 'FtgPostnr', 'FtgPostAdr3', 'OrgNr', 'EUMomsNr')
FtgNr = Column(String, primary_key=True)
Customer = relationship('Customer', uselist=False, back_populates='Company', lazy='joined')
ContactPersons = relationship("ContactPerson", lazy='joined')
ContactInformation = relationship(
"ContactInformation", lazy='joined',
foreign_keys='ContactInformation.FtgNr',
primaryjoin="and_(ContactInformation.FtgNr==Company.FtgNr,"
"ContactInformation.FtgKontaktNr==null())")
class DelivLoc(RawBaseModel):
@ -215,12 +293,16 @@ class CustomerCategory(RawBaseModel):
class Customer(RawBaseModel):
__tablename__ = 'kus'
__column_map__ = {'FtgNr': 'CompanyNumber', 'kundkategorikod': 'CustomerCategoryCode',
'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary'}
'PrisListaKundSpec': 'PriceListPrimary', 'PrisLista': 'PriceListSecondary',
'GodsMarke1': 'DefaultShippingInfo', 'GodsMarke2': 'InternalInfo',
'LevSattKod': 'DefaultShippingTypeCode', 'ValKod': 'CustomerCurrency'}
__to_dict_only__ = ('kundkategorikod', 'PriceList', 'PriceListCommon', 'CustomerCategory',
'PrisLista', 'PrisListaKundSpec')
'PrisLista', 'PrisListaKundSpec', 'WebUsers', 'GodsMarke1',
'GodsMarke2', 'LevSattKod', 'Language', 'ValKod')
FtgNr = Column(String, ForeignKey('fr.FtgNr'), primary_key=True)
KundKategoriKod = Column(Integer, ForeignKey('x1k.KundKategoriKod'))
SprakKod = Column(Integer, ForeignKey('xw.SprakKod'))
PrisLista = Column(Integer, ForeignKey('prh.PrisLista'))
PrisListaKundSpec = Column(Integer, ForeignKey('prh.PrisLista'))
@ -233,11 +315,20 @@ class Customer(RawBaseModel):
primaryjoin="Customer.PrisLista==PriceList.PrisLista")
KundKategori = relationship("CustomerCategory")
LanguageCodes = relationship("LanguageCodes")
WebUsers = relationship(
WebUser, uselist=True, lazy='joined',
foreign_keys='WebUser.FtgNr', primaryjoin="Customer.FtgNr==WebUser.FtgNr")
@hybrid_property
def CustomerCategory(self):
return self.KundKategori.KundKatBeskr if self.KundKategori else ""
@hybrid_property
def Language(self):
return self.LanguageCodes.Sprak if self.LanguageCodes else ""
class PriceList(RawBaseModel):
__tablename__ = 'prh'