imgw.py 4.89 KB
from datetime import datetime
from sqlalchemy import (
    Column,
    Integer,
    Float,
    Text,
    String,
    Boolean,
    DateTime,
    Date,
    ForeignKey,
    Sequence,
    func,
    text,
    )
from sqlalchemy.orm import relationship
from . import (
    Base,
    DBSession,
    DefaultModel,
    CommonModel,
    )
    

class Jalur(Base, DefaultModel):
    __tablename__ = 'jalur'
    nama = Column(String(15), unique=True, nullable=False)


class Status(Base, DefaultModel):
    __tablename__ = 'status'
    __table_args__ = dict(schema='im')
    ket = Column(String(100), unique=True, nullable=False)


class Antrian(Base, DefaultModel):
    __tablename__ = 'antrian'
    __table_args__ = dict(schema='im')
    jalur = Column(
            Integer, ForeignKey(Jalur.id), nullable=False, server_default='1')
    kirim = Column(Boolean, nullable=False, server_default='true')
    tgl = Column(
            DateTime(timezone=True), server_default=func.now(), nullable=False)
    tgl_operator = Column(DateTime(timezone=True))
    pengirim = Column(String(64))
    penerima = Column(String(64))
    pesan = Column(Text, nullable=False)
    jawaban = Column(Text)
    parser = Column(String(64))
    status = Column(
            Integer, ForeignKey(Status.id), server_default='1', nullable=False)
        

class Selesai(Base, CommonModel):
    __tablename__ = 'selesai'
    __table_args__ = dict(schema='im')
    id = Column(
            Integer, primary_key=True,
            server_default=text("nextval('im.antrian_id_seq')"))
    jalur = Column(
            Integer, ForeignKey(Jalur.id), nullable=False, server_default='1')
    kirim = Column(Boolean, nullable=False)
    tgl = Column(
            DateTime(timezone=True), server_default=func.now(), nullable=False)
    tgl_operator = Column(DateTime(timezone=True))
    pengirim = Column(String(64))
    penerima = Column(String(64))
    pesan = Column(Text, nullable=False)
    jawaban = Column(Text)
    parser = Column(String(64))
    status = Column(Integer, ForeignKey(Status.id), nullable=False)
    

#########
# Agent #
#########
class StatusAgent(Base, DefaultModel):
    __tablename__ = 'status_agent'
    __table_args__ = dict(schema='im')
    ket = Column(String(100), unique=True, nullable=False)
    

class Agent(Base, CommonModel):
    __tablename__ = 'agent'
    __table_args__ = dict(schema='im')
    id = Column(String(64), primary_key=True)
    jalur = Column(Integer, ForeignKey(Jalur.id), nullable=False)
    #jalur_ref = relationship('Jalur', foreign_keys='Agent.jalur')
    jalur_ref = relationship(Jalur)
    status = Column(
            Integer, ForeignKey(StatusAgent.id), nullable=False,
            server_default='0')
    #status_ref = relationship('StatusAgent', foreign_keys='Agent.status')
    status_ref = relationship(StatusAgent)
    job = Column(Integer, nullable=False, server_default='0')
    lastjob = Column(
            DateTime(timezone=True), nullable=False, server_default=func.now())
    startup = Column(
            DateTime(timezone=True), nullable=False, server_default=func.now())
    ket = Column(Text)
    lasterr = Column(Text)
    url = Column(String(64))
    modem = relationship('Modem', backref='im.agent', uselist=False)
    

class Produk(Base, CommonModel):
    __tablename__ = 'produk'
    nama = Column(String(20), primary_key=True)


class MSISDN(Base, CommonModel):
    __tablename__ = 'msisdn'
    awalan = Column(String(10), primary_key=True)
    produk = Column(String(20), ForeignKey(Produk.nama), nullable=False)
    wilayah = Column(String(30))


class Modem(Base, CommonModel):
    __tablename__ = 'modem'
    __table_args__ = dict(schema='im')
    msisdn = Column(String(64), nullable=False, primary_key=True)
    imei = Column(String(64), ForeignKey(Agent.id, ondelete='cascade'), nullable=False)
    device = Column(String(20))
    sn = Column(String(20))
    merk = Column(String(64))
    signal = Column(Integer, nullable=False, server_default='0')
    produk = Column(String(20), ForeignKey(Produk.nama), nullable=False)
    wilayah = Column(String(30))
    pulsa = relationship('Pulsa', backref='im.modem', uselist=False)  
    reply_for = relationship('ModemPengirim', backref='im.modem_pengirim', order_by='ModemPengirim.produk')  
        

class Pulsa(Base, CommonModel):
    __tablename__ = 'pulsa'
    __table_args__ = dict(schema='im')
    msisdn = Column(
            String(20), ForeignKey(Modem.msisdn, ondelete='cascade'),
            primary_key=True)
    request = Column(String(10), nullable=False)
    response = Column(Text)
    tgl = Column(DateTime(timezone=True))
 

class ModemPengirim(Base, CommonModel):
    __tablename__ = 'modem_pengirim'
    __table_args__ = dict(schema='im')
    produk = Column(String(20), ForeignKey(Produk.nama), primary_key=True)
    msisdn = Column(String(20), ForeignKey(Modem.msisdn, ondelete='cascade'), primary_key=True)
    msisdn_produk = Column(
            String(20), ForeignKey(Produk.nama), nullable=False)