Пример #1
0
class rc1030(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlmst", "rcaprm", "rcaowm", "rcatnm", "rcacon", "rcatnt",
            "chglog"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        own = {
            "stype":
            "R",
            "tables": ("rcaowm", ),
            "cols":
            (("rom_acno", "", 0, "Acc-Num"), ("rom_name", "", 0, "Name", "Y")),
            "where": [("rom_cono", "=", self.opts["conum"])]
        }
        prm = {
            "stype":
            "R",
            "tables": ("rcaprm", ),
            "cols": (("rcp_code", "", 0, "Prm-Code"), ("rcp_addr1", "", 0,
                                                       "Address-Line-1")),
            "where": [("rcp_cono", "=", self.opts["conum"])],
            "whera": (("T", "rcp_owner", 0, 0), )
        }
        acc = {
            "stype":
            "R",
            "tables": ("rcatnm", ),
            "cols":
            (("rtn_acno", "", 0, "Acc-Num"), ("rtn_name", "", 0, "Name", "Y")),
            "where": [("rtn_cono", "=", self.opts["conum"])],
            "whera": (("T", "rtn_owner", 0, 0), ("T", "rtn_code", 1, 0))
        }
        typ = {
            "stype": "C",
            "titl": "Select the Required Type",
            "head": ("C", "Type"),
            "data": ((4, "Services (Owner)"), (5, "Services (Agency)"))
        }
        r1s = (("Monthly", "M"), ("Quarterly", "3"), ("Bi-Annually", "6"),
               ("Annually", "A"))
        self.fld = ((("T", 0, 0, 0), "INA", 7, "Owners Code", "", "", "Y",
                     self.doOwner, own, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 7, "Premises Code", "", "", "Y",
                     self.doPremises, prm, None, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 7, "Account Code", "", "", "N",
                     self.doAccount, acc, None, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Tenant Name", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 1", "", "", "N",
                     self.doAddr, None, None,
                     ("efld", )), (("T", 0, 5, 0), "INA", 30, "Address Line 2",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 6, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 7, 0), "INA", 4, "Postal Code", "",
                                   "", "N", None, None, None, ("efld", )),
                    (("T", 0, 8, 0), "INA", 20, "Telephone Number", "", "",
                     "N", None, None, None,
                     ("efld", )), (("T", 0, 9, 0), "ITX", 50, "E-Mail Address",
                                   "", "", "N", None, None, None, ("email", )),
                    (("T", 0, 10, 0), "INA", 10, "VAT Number", "", "", "N",
                     self.doVatNum, None, None, ("efld", )),
                    (("T", 0, 11, 0), ("IRB", r1s), 0, "Payment Frequency", "",
                     "M", "N", None, None, None,
                     None), (("T", 0, 12, 0), "ID1", 10, "Start Date", "", "",
                             "N", None, None, None, ("notzero", )),
                    (("T", 0, 13, 0), "IUI", 3, "Number of Periods", "Periods",
                     "", "N", None, None, None, ("notzero", )),
                    (("T", 0, 14, 0), "IUD", 12.2, "Rental Amount", "",
                     "", "N", None, None, None,
                     ("notzero", )), (("T", 0, 15, 0), "IUD", 12.2,
                                      "Deposit Amount", "", "", "N", None,
                                      None, None, ("efld", )),
                    (("T", 0, 16, 0), "IUD", 12.2, "Basic Water Amount", "",
                     "", "N", self.doBWater, None, None,
                     ("efld", )), (("T", 0, 16, 0), "IUI", 1, "Type", "", "",
                                   "N", None, typ, None, ("efld", )),
                    (("T", 0, 17, 0), "IUD", 12.2, "Basic Exlectricity Amount",
                     "", "", "N", self.doBElec, None, None,
                     ("efld", )), (("T", 0, 17, 0), "IUI", 1, "Type", "", "",
                                   "N", self.doEType, typ, None,
                                   ("efld", )), (("T", 0, 18, 0), "IUA", 1,
                                                 "Status", "", "", "N", None,
                                                 None, None, ("in", ("C",
                                                                     "X"))))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2),
                ("T", 0, 0)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doOwner(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("rcaowm",
                              cols=["rom_name"],
                              where=[("rom_cono", "=", self.opts["conum"]),
                                     ("rom_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Owner"
        self.owner = w

    def doPremises(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("rcaprm",
                              cols=["rcp_desc"],
                              where=[("rcp_cono", "=", self.opts["conum"]),
                                     ("rcp_owner", "=", self.owner),
                                     ("rcp_code", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Premises"
        self.code = w

    def doAccount(self, frt, pag, r, c, p, i, w):
        self.acno = w
        self.oldm = self.sql.getRec("rcatnm",
                                    where=[("rtn_cono", "=",
                                            self.opts["conum"]),
                                           ("rtn_owner", "=", self.owner),
                                           ("rtn_code", "=", self.code),
                                           ("rtn_acno", "=", self.acno)],
                                    limit=1)
        if not self.oldm:
            self.new = "y"
            for num in range(4, self.df.topq[0]):
                self.df.clearEntry(frt, pag, num + 1)
            con = self.sql.getRec("rcacon",
                                  cols=["count(*)"],
                                  where=[("rcc_cono", "=", self.opts["conum"]),
                                         ("rcc_owner", "=", self.owner),
                                         ("rcc_code", "=", self.code),
                                         ("rcc_acno", "=", self.acno)],
                                  limit=1)
            if not con[0]:
                self.cnum = 1
            else:
                self.cnum = con[0] + 1
        else:
            self.new = "n"
            for num, fld in enumerate(self.oldm[3:]):
                self.df.loadEntry(frt, pag, p + num, data=fld)
            oldc = self.sql.getRec("rcacon",
                                   where=[("rcc_cono", "=",
                                           self.opts["conum"]),
                                          ("rcc_owner", "=", self.owner),
                                          ("rcc_code", "=", self.code),
                                          ("rcc_acno", "=", self.acno)],
                                   order="rcc_cnum")
            self.oldc = oldc[-1:][0]
            self.cnum = self.oldc[4]
            for num, fld in enumerate(self.oldc[5:-1]):
                self.df.loadEntry(frt, pag, num + 11, data=fld)
            trn = self.sql.getRec("rcatnt",
                                  cols=["count(*)"],
                                  where=[("rtu_cono", "=", self.opts["conum"]),
                                         ("rtu_owner", "=", self.owner),
                                         ("rtu_code", "=", self.code),
                                         ("rtu_acno", "=", self.acno)],
                                  limit=1)
            if trn[0]:
                self.trn = True
            else:
                self.trn = False

    def doAddr(self, frt, pag, r, c, p, i, w):
        if not w:
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 2, data="")
            self.df.loadEntry(frt, pag, p + 3, data="")
            return "sk3"

    def doVatNum(self, frt, pag, r, c, p, i, w):
        if self.new == "n" and self.trn:
            return "sk1"

    def doBWater(self, frt, pag, r, c, p, i, w):
        if not w:
            self.df.loadEntry(frt, pag, p + 1, data=0)
            return "sk1"

    def doBElec(self, frt, pag, r, c, p, i, w):
        if not w:
            self.df.loadEntry(frt, pag, p + 1, data=0)
            return "sk1"

    def doEType(self, frt, pag, r, c, p, i, w):
        if self.new == "y":
            self.df.loadEntry(frt, pag, p + 1, data="C")

    def doDelete(self):
        if self.trn:
            return "Transactions Exist, Not Deleted"
        self.sql.delRec("rcatnm",
                        where=[("rtn_cono", "=", self.opts["conum"]),
                               ("rtn_owner", "=", self.owner),
                               ("rtn_code", "=", self.code),
                               ("rtn_acno", "=", self.acno)])
        self.sql.delRec("rcacon",
                        where=[("rcc_cono", "=", self.opts["conum"]),
                               ("rcc_owner", "=", self.owner),
                               ("rcc_code", "=", self.code),
                               ("rcc_acno", "=", self.acno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["rcatnm", "D", "%03i%-7s" % \
            (self.opts["conum"], self.code), "", dte, self.opts["capnm"],
            "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        datm = [self.opts["conum"]]
        datc = [
            self.opts["conum"], self.owner, self.code, self.acno, self.cnum
        ]
        for num, fld in enumerate(self.df.t_work[0][0]):
            if num < 11:
                datm.append(fld)
            if num > 10:
                datc.append(fld)
        if self.new == "y":
            self.sql.insRec("rcatnm", data=datm)
            self.sql.insRec("rcacon", data=datc)
        else:
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            if datm != self.oldm[:len(datm)]:
                col = self.sql.rcatnm_col
                datm.append(self.oldm[col.index("rtn_xflag")])
                self.sql.updRec("rcatnm",
                                data=datm,
                                where=[("rtn_cono", "=", self.opts["conum"]),
                                       ("rtn_owner", "=", self.owner),
                                       ("rtn_code", "=", self.code),
                                       ("rtn_acno", "=", self.acno)])
                for num, dat in enumerate(self.oldm):
                    if dat != datm[num]:
                        self.sql.insRec(
                            "chglog",
                            data=[
                                "rcatnm", "U",
                                "%03i%-7s%-7s" %
                                (self.opts["conum"], self.owner, self.code),
                                col[num], dte, self.opts["capnm"],
                                str(dat),
                                str(datm[num]), "", 0
                            ])
            if datc != self.oldc[:len(datc)]:
                col = self.sql.rcacon_col
                datc.append(self.oldc[col.index("rcc_xflag")])
                self.sql.updRec("rcacon",
                                data=datc,
                                where=[("rcc_cono", "=", self.opts["conum"]),
                                       ("rcc_owner", "=", self.owner),
                                       ("rcc_code", "=", self.code),
                                       ("rcc_acno", "=", self.acno),
                                       ("rcc_cnum", "=", self.cnum)])
                for num, dat in enumerate(self.oldc):
                    if dat != datc[num]:
                        self.sql.insRec("chglog",
                                        data=[
                                            "rcacon", "U",
                                            "%03i%-7s%-7s%-7s%03i" %
                                            (self.opts["conum"], self.owner,
                                             self.code, self.acno, self.cnum),
                                            col[num], dte, self.opts["capnm"],
                                            str(dat),
                                            str(datc[num]), "", 0
                                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doAccept(self):
        frt, pag, col, mes = self.df.doCheckFields()
        if mes:
            self.df.focusField(frt, pag, (col + 1), err=mes)
        else:
            self.df.doEndFrame("T", 0, cnf="N")

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.focusField("T", 0, 1)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()