Source code for MambuPy.orm.schema_customfields

"""Schema tables for Mambu Custom fields.

.. autosummary::
   :nosignatures:
   :toctree: _autosummary
"""

from sqlalchemy import (Column, DateTime, ForeignKey, Integer, Numeric, String,
                        Table)
from sqlalchemy.orm import backref, relationship
from sqlalchemy.orm.exc import NoResultFound

from . import schema_orm as orm

dbname = orm.dbname
session = orm.session
Base = orm.Base


[docs]class CustomFieldSet(Base): """CustomFieldValue table.""" __tablename__ = "customfieldset" __table_args__ = {"schema": dbname, "keep_existing": True} # Columns encodedKey = Column(String, primary_key=True) id = Column(String) name = Column(String) type = Column(String) indexInList = Column(Integer) # Relationships customField = relationship("CustomField", back_populates="customFieldSet")
[docs] def __repr__(self): return "<CustomFieldSet(name={}, id={})>".format(self.name, self.id)
[docs]class CustomField(Base): """CustomField table. Related with CustomFieldValue """ __tablename__ = "customfield" __table_args__ = {"schema": dbname, "keep_existing": True} # Columns encodedKey = Column(String, primary_key=True) name = Column(String) description = Column(String) id = Column(String) type = Column(String) indexInList = Column(Integer) state = Column(String) valueLength = Column(String) dataType = Column(String) creationDate = Column(DateTime) lastModifiedDate = Column(DateTime) customFieldValues = relationship("CustomFieldValue", back_populates="customField") customFieldSet_encodedKey_oid = Column( String, ForeignKey(CustomFieldSet.encodedKey) ) customFieldSet = relationship(CustomFieldSet, back_populates="customField") customFieldSelection = relationship( "CustomFieldSelection", back_populates="customField" )
[docs] def __repr__(self): return "<CustomField(name={})>".format(self.name)
[docs]class CustomFieldValue(Base): """CustomFieldValue table.""" __tablename__ = "customfieldvalue" __table_args__ = {"schema": dbname, "keep_existing": True} # Columns encodedKey = Column(String, primary_key=True) parentKey = Column(String) indexInList = Column(Integer) value = Column(String) linkedEntityKeyValue = Column(String) amount = Column(Numeric(50, 10)) customFieldSetGroupIndex = Column(Integer) # Relationships customFieldKey = Column(String, ForeignKey(CustomField.encodedKey)) customField = relationship(CustomField, back_populates="customFieldValues") loan = relationship( "LoanAccount", back_populates="customInformation", foreign_keys="CustomFieldValue.parentKey", primaryjoin="CustomFieldValue.parentKey == LoanAccount.encodedKey", ) client = relationship( "Client", back_populates="customInformation", foreign_keys="CustomFieldValue.parentKey", primaryjoin="CustomFieldValue.parentKey == Client.encodedKey", ) group = relationship( "Group", back_populates="customInformation", foreign_keys="CustomFieldValue.parentKey", primaryjoin="CustomFieldValue.parentKey == Group.encodedKey", ) user = relationship( "User", back_populates="customInformation", foreign_keys="CustomFieldValue.parentKey", primaryjoin="CustomFieldValue.parentKey == User.encodedKey", ) branch = relationship( "Branch", back_populates="customInformation", foreign_keys="CustomFieldValue.parentKey", primaryjoin="CustomFieldValue.parentKey == Branch.encodedKey", ) @property def linkedclient(self): from .schema_clients import Client try: if self.customField.dataType == "CLIENT_LINK": return ( session.query(Client) .filter(Client.encodedKey == self.linkedEntityKeyValue) .one() ) else: return None except NoResultFound: return None @property def linkedgroup(self): from .schema_groups import Group try: if self.customField.dataType == "GROUP_LINK": return ( session.query(Group) .filter(Group.encodedKey == self.linkedEntityKeyValue) .one() ) else: return None except NoResultFound: return None @property def linkeduser(self): from .schema_users import User try: if self.customField.dataType == "USER_LINK": return ( session.query(User) .filter(User.encodedKey == self.linkedEntityKeyValue) .one() ) else: return None except NoResultFound: return None
[docs] def __repr__(self): if self.value: value = self.value elif self.linkedclient: value = self.linkedclient elif self.linkedgroup: value = self.linkedgroup elif self.linkeduser: value = self.linkeduser else: value = "None" return "<CustomFieldValue(customField={},value={})>".format( self.customField, value )
[docs]class CustomFieldSelection(Base): """CustomFieldValue table.""" __tablename__ = "customfieldselection" __table_args__ = {"schema": dbname, "keep_existing": True} # Columns encodedKey = Column(String, primary_key=True) id = Column(String) value = Column(String) score = Column(Integer) selectionindex = Column(Integer) # Relationships customfieldkey = Column(String, ForeignKey(CustomField.encodedKey)) customField = relationship(CustomField, back_populates="customFieldSelection")
[docs] def __repr__(self): try: return "<CustomFieldSet(id={}, value={})>".format(self.id, self.value) except UnicodeEncodeError: return "<CustomFieldSet(id={}, value={})>".format( self.id, self.value.encode("utf8") )