Пример #1
0
class arc310(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,
                       ["assdep", "assgrp", "assmst", "genmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        assctl = gc.getCtl("assctl", self.opts["conum"])
        if not assctl:
            return
        self.glint = assctl["cta_glint"]
        return True

    def mainProcess(self):
        grp = {
            "stype":
            "R",
            "tables": ("assgrp", ),
            "cols": (("asg_group", "", 0, "Grp"), ("asg_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("asg_cono", "=", self.opts["conum"])]
        }
        dep = {
            "stype":
            "R",
            "tables": ("assdep", ),
            "cols": (("asd_code", "", 0, "Cod"), ("asd_desc", "", 0,
                                                  "Description", "Y")),
            "where": [("asd_cono", "=", self.opts["conum"])]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])],
            "order":
            "glm_acno"
        }
        fld = [(("T", 0, 0, 0), "IUA", 3, "Asset Group", "", "", "N",
                self.doGroup, grp, None, ("notblank", )),
               (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N", None,
                None, self.doDelete, ("notblank", )),
               (("T", 0, 2, 0), "INa", 3, "Depreciation Code", "", "", "N",
                self.doDepCode, dep, None, None),
               (("T", 0, 2, 0), "ONA", 34, "")]
        if self.glint == "Y":
            fld.extend([(("T", 0, 3, 0), "IUI", 7, "Asset Account", "", "",
                         "N", self.doAsset, glm, None, ("notzero", )),
                        (("T", 0, 3, 0), "ONA", 30, ""),
                        (("T", 0, 4, 0), "IUI", 7, "Accum Account", "", "",
                         "N", self.doAccum, glm, None, ("notzero", )),
                        (("T", 0, 4, 0), "ONA", 30, ""),
                        (("T", 0, 5, 0), "IUI", 7, "Expense Account", "", "",
                         "N", self.doExpense, glm, None, ("notzero", )),
                        (("T", 0, 5, 0), "ONA", 30, "")])
        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=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doGroup(self, frt, pag, r, c, p, i, w):
        self.group = w
        self.acc = self.sql.getRec("assgrp",
                                   where=[("asg_cono", "=",
                                           self.opts["conum"]),
                                          ("asg_group", "=", self.group)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            self.df.loadEntry(frt, pag, p + 1, data=self.acc[2])
            self.df.loadEntry(frt, pag, p + 2, data=self.acc[3])
            dep = self.sql.getRec("assdep",
                                  cols=["asd_desc"],
                                  where=[("asd_cono", "=", self.opts["conum"]),
                                         ("asd_code", "=", self.acc[3])],
                                  limit=1)
            if dep:
                self.df.loadEntry(frt, pag, p + 3, data=dep[0])
            if self.glint == "N":
                return
            self.df.loadEntry(frt, pag, p + 4, data=self.acc[4])
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", self.acc[4])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", pag, p + 5, data=des[0])
            self.df.loadEntry(frt, pag, p + 6, data=self.acc[5])
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", self.acc[5])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", pag, p + 7, data=des[0])
            self.df.loadEntry(frt, pag, p + 8, data=self.acc[6])
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", self.acc[6])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", pag, p + 9, data=des[0])

    def doDepCode(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("assdep",
                              cols=["asd_desc"],
                              where=[("asd_cono", "=", self.opts["conum"]),
                                     ("asd_code", "=", w)],
                              limit=1)
        if not chk:
            return "Invalid Depreciation Code"
        self.df.loadEntry(frt, pag, p + 1, data=chk[0])

    def doAsset(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.df.loadEntry("T", pag, p + 1, data=acc[0])

    def doAccum(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.df.loadEntry("T", pag, p + 1, data=acc[0])

    def doExpense(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.df.loadEntry("T", pag, p + 1, data=acc[0])

    def doDelete(self):
        chk = self.sql.getRec("assmst",
                              where=[("asm_cono", "=", self.opts["conum"]),
                                     ("asm_group", "=", self.group)])
        if chk:
            return "Group in Use, Not Deleted"
        self.sql.delRec("assgrp",
                        where=[("asg_cono", "=", self.opts["conum"]),
                               ("asg_group", "=", self.group)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if x == 3 or (self.glint == "Y" and x in (5, 7, 9)):
                continue
            data.append(self.df.t_work[0][0][x])
        if self.glint == "N":
            data.extend([0, 0, 0])
        if self.new == "Y":
            self.sql.insRec("assgrp", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.assgrp_col
            data.append(self.acc[col.index("asg_xflag")])
            self.sql.updRec("assgrp",
                            data=data,
                            where=[("asg_cono", "=", self.opts["conum"]),
                                   ("asg_group", "=", self.group)])
        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()
Пример #2
0
class stc210(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,
                       "struoi",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        unm = {
            "stype":
            "R",
            "tables": ("struoi", ),
            "cols": (("unm_unit", "", 0, "Unit"), ("unm_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("unm_cono", "=", self.opts["conum"])]
        }
        self.fld = ((("T", 0, 0, 0), "INA", 10, "Unit Of Issue", "", "", "N",
                     self.doUnit, unm, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2), ("T", 0, 0)))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.closeProcess, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doUnit(self, frt, pag, r, c, p, i, w):
        self.uoi = w
        self.old = self.sql.getRec("struoi",
                                   where=[("unm_cono", "=",
                                           self.opts["conum"]),
                                          ("unm_unit", "=", self.uoi)],
                                   limit=1)
        if not self.old:
            self.new = "Y"
        else:
            self.new = "N"
            desc = self.old[self.sql.struoi_col.index("unm_desc")]
            self.df.loadEntry(frt, pag, p + 1, data=desc)

    def doDelete(self):
        self.sql.delRec("struoi",
                        where=[("unm_cono", "=", self.opts["conum"]),
                               ("unm_unit", "=", self.uoi)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("struoi", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.struoi_col
            data.append(self.old[col.index("unm_xflag")])
            self.sql.updRec("struoi",
                            data=data,
                            where=[("unm_cono", "=", self.opts["conum"]),
                                   ("unm_unit", "=", self.uoi)])
        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 closeProcess(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #3
0
class rt1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(
            self.opts["mf"].dbm,
            ["ctlmst", "rtlprm", "rtlmst", "rtlcon", "rtltrn", "chglog"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.gc = GetCtl(self.opts["mf"])
        ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        return True

    def mainProcess(self):
        prm = {
            "stype":
            "R",
            "tables": ("rtlprm", ),
            "cols": (("rtp_code", "", 0, "Prm-Code"), ("rtp_desc", "", 0,
                                                       "Description", "Y")),
            "where": [("rtp_cono", "=", self.opts["conum"])]
        }
        acc = {
            "stype":
            "R",
            "tables": ("rtlmst", ),
            "cols":
            (("rtm_acno", "", 0, "Acc-Num"), ("rtm_name", "", 0, "Name", "Y")),
            "where": [("rtm_cono", "=", self.opts["conum"])],
            "whera": (("T", "rtm_code", 0, 0), )
        }
        r1s = (("Monthly", "M"), ("Quarterly", "3"), ("Bi-Annually", "6"),
               ("Annually", "A"))
        r2s = (("Current", "C"), ("Expired", "X"))
        self.fld = ((("T", 0, 0, 0), "INA", 7, "Premises Code", "", "", "Y",
                     self.doPremises, prm, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 7, "Account Code", "", "", "N",
                     self.doAccount, acc, None, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Tenant Name", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 4, 0), "INA", 30, "Address Line 2",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 6, 0), "INA", 4, "Postal Code", "",
                                   "", "N", None, None, None, ("efld", )),
                    (("T", 0, 7, 0), "INA", 20, "Telephone Number", "", "",
                     "N", None, None, None,
                     ("efld", )), (("T", 0, 8, 0), "ITX", 50, "E-Mail Address",
                                   "", "", "N", None, None, None, ("email", )),
                    (("T", 0, 9, 0), "IUA", 1, "VAT Indicator", "", self.taxdf,
                     "N", None, None, None,
                     ("notblank", )), (("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", self.doStart, None, None,
                             ("notzero", )), (("T", 0, 13, 0), "IUI", 3,
                                              "Number of Periods", "", "", "N",
                                              None, None, None, ("notzero", )),
                    (("T", 0, 14, 0), "IUD", 12.2, "Rental Amount", "", "",
                     "N", self.doAmount, None, None,
                     ("notzero", )), (("T", 0, 15,
                                       0), ("IRB", r2s), 0, "Status", "", "",
                                      "N", None, None, None, None))
        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)
        if "args" in self.opts:
            self.df.doKeyPressed("T", 0, 0, data=self.opts["args"][0])
            self.df.doKeyPressed("T", 0, 1, data=self.opts["args"][1])

    def doPremises(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("rtlprm",
                              cols=["rtp_desc"],
                              where=[("rtp_cono", "=", self.opts["conum"]),
                                     ("rtp_code", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Premises"
        self.code = w
        col = ["rtc_payind", "rtc_start", "rtc_period"]
        whr = [("rtc_cono", "=", self.opts["conum"]),
               ("rtc_code", "=", self.code), ("rtc_status", "=", "C")]
        chk = self.sql.getRec("rtlcon",
                              cols=col,
                              where=whr,
                              order="rtc_start desc")
        if not chk:
            self.end = 0
            return
        freq, start, period = chk[0]
        if freq == "M":
            self.end = CCD(projectDate(start, period, "months"), "D1", 10)
        elif freq == "3":
            self.end = CCD(projectDate(start, period * 3, "months"), "D1", 10)
        elif freq == "6":
            self.end = CCD(projectDate(start, period * 6, "months"), "D1", 10)
        else:
            self.end = CCD(projectDate(start, period, "years"), "D1", 10)

    def doAccount(self, frt, pag, r, c, p, i, w):
        self.acno = w
        self.oldm = self.sql.getRec("rtlmst",
                                    where=[("rtm_cono", "=",
                                            self.opts["conum"]),
                                           ("rtm_code", "=", self.code),
                                           ("rtm_acno", "=", self.acno)],
                                    limit=1)
        if not self.oldm:
            self.new = "y"
            for num in range(2, self.df.topq[0]):
                self.df.clearEntry(frt, pag, num + 1)
            con = self.sql.getRec("rtlcon",
                                  cols=["count(*)"],
                                  where=[("rtc_cono", "=", self.opts["conum"]),
                                         ("rtc_code", "=", self.code),
                                         ("rtc_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[2:]):
                self.df.loadEntry(frt, pag, p + num, data=fld)
            self.oldc = self.sql.getRec("rtlcon",
                                        where=[("rtc_cono", "=",
                                                self.opts["conum"]),
                                               ("rtc_code", "=", self.code),
                                               ("rtc_acno", "=", self.acno)],
                                        order="rtc_cnum")
            self.cnum = self.oldc[-1:][0][3]
            for num, fld in enumerate(self.oldc[-1:][0][4:-1]):
                self.df.loadEntry(frt, pag, num + 11, data=fld)
            trn = self.sql.getRec("rtltrn",
                                  cols=["count(*)"],
                                  where=[("rtt_cono", "=", self.opts["conum"]),
                                         ("rtt_code", "=", self.code),
                                         ("rtt_acno", "=", self.acno)],
                                  limit=1)
            if trn[0]:
                self.trn = True
            else:
                self.trn = False

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

    def doStart(self, frt, pag, r, c, p, i, w):
        if self.new == "y" and self.end and w < self.end.work:
            return "Premises Already Let till %s" % self.end.disp

    def doAmount(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("rtlmst",
                        where=[("rtm_cono", "=", self.opts["conum"]),
                               ("rtm_code", "=", self.code),
                               ("rtm_acno", "=", self.acno)])
        self.sql.delRec("rtlcon",
                        where=[("rtc_cono", "=", self.opts["conum"]),
                               ("rtc_code", "=", self.code),
                               ("rtc_acno", "=", self.acno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog",
                        data=[
                            "rtlmst", "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.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("rtlmst", data=datm)
            self.sql.insRec("rtlcon", data=datc)
        else:
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            if datm != self.oldm[:len(datm)]:
                col = self.sql.rtlmst_col
                datm.append(self.oldm[col.index("rtm_xflag")])
                self.sql.updRec("rtlmst",
                                data=datm,
                                where=[("rtm_cono", "=", self.opts["conum"]),
                                       ("rtm_code", "=", self.code),
                                       ("rtm_acno", "=", self.acno)])
                for num, dat in enumerate(self.oldm):
                    if dat != datm[num]:
                        self.sql.insRec(
                            "chglog",
                            data=[
                                "rtlmst", "U",
                                "%03i%-7s" % (self.opts["conum"], self.code),
                                col[num], dte, self.opts["capnm"],
                                str(dat),
                                str(datm[num]), "", 0
                            ])
            if datc != self.oldc[-1:][0][:len(datc)]:
                col = self.sql.rtlcon_col
                datc.append(self.oldc[col.index("rtc_xflag")])
                self.sql.updRec("rtlcon",
                                data=datc,
                                where=[("rtc_cono", "=", self.opts["conum"]),
                                       ("rtc_code", "=", self.code),
                                       ("rtc_acno", "=", self.acno),
                                       ("rtc_cnum", "=", self.cnum)])
                for num, dat in enumerate(self.oldc[-1:][0]):
                    if dat != datc[num]:
                        self.sql.insRec("chglog",
                                        data=[
                                            "rtlcon", "U",
                                            "%03i%-7s%-7s%03i" %
                                            (self.opts["conum"], self.code,
                                             self.acno, self.cnum), col[num],
                                            dte, self.opts["capnm"],
                                            str(dat),
                                            str(datc[num]), "", 0
                                        ])
        if "args" in self.opts:
            self.doExit()
        else:
            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()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #4
0
class rtc210(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,
                       ["chglog", "genmst", "rtlprm", "rtlmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        rtlctl = gc.getCtl("rtlctl", self.opts["conum"])
        if not rtlctl:
            return
        self.glint = rtlctl["ctr_glint"]
        return True

    def mainProcess(self):
        prm = {
            "stype":
            "R",
            "tables": ("rtlprm", ),
            "cols": (("rtp_code", "", 0, "Prm-Code"), ("rtp_desc", "", 0,
                                                       "Description", "Y")),
            "where": [("rtp_cono", "=", self.opts["conum"])]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])],
            "order":
            "glm_acno"
        }
        self.fld = [(("T", 0, 0, 0), "INA", 7, "Premises Code", "Premises", "",
                     "N", self.doPrmCod, prm, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 4, "Postal Code", "PCod", "", "N",
                     None, None, None, ("notblank", ))]
        if self.glint == "Y":
            self.fld.append(
                (("T", 0, 6, 0), "IUI", 7, "Rental Account", "", "", "N",
                 self.doRental, glm, None, ("notzero", ), None,
                 "Rental Control Account in the General Ledger."))
            self.fld.append((("T", 0, 6, 0), "ONA", 30, ""))
            self.fld.append(
                (("T", 0, 7, 0), "IUI", 7, "Income Account", "", "", "N",
                 self.doIncome, glm, None, ("notzero", ), None,
                 "Rental Income Account in the General Ledger."))
            self.fld.append((("T", 0, 7, 0), "ONA", 30, ""))
        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 doPrmCod(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.old = self.sql.getRec("rtlprm",
                                   where=[("rtp_cono", "=",
                                           self.opts["conum"]),
                                          ("rtp_code", "=", self.code)],
                                   limit=1)
        if not self.old:
            self.new = "y"
        else:
            self.new = "n"
            acc = copyList(self.old[:-1])
            acc.append("")
            acc.insert(8, "")
            for x in range(0, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=acc[x + 1])
            if self.glint == "N":
                return
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", acc[7])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", 0, 7, data=des[0])
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", acc[9])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", 0, 9, data=des[0])

    def doRental(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.df.loadEntry("T", 0, 7, data=acc[0])

    def doIncome(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.df.loadEntry("T", 0, 9, data=acc[0])

    def doDelete(self):
        mst = self.sql.getRec("rtlmst",
                              cols=["count(*)"],
                              where=[("rtm_cono", "=", self.opts["conum"]),
                                     ("rtm_code", "=", self.code)],
                              limit=1)
        if mst[0]:
            return "Accounts Exist, Not Deleted"
        self.sql.delRec("rtlprm",
                        where=[("rtp_cono", "=", self.opts["conum"]),
                               ("rtp_code", "=", self.code)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog",
                        data=[
                            "rtlprm", "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):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if self.glint == "Y" and x in (7, 9):
                continue
            data.append(self.df.t_work[0][0][x])
        if self.glint == "N":
            data.extend([0, 0])
        if self.new == "y":
            self.sql.insRec("rtlprm", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.rtlprm_col
            data.append(self.old[col.index("rtp_xflag")])
            self.sql.updRec("rtlprm",
                            data=data,
                            where=[("rtp_cono", "=", self.opts["conum"]),
                                   ("rtp_code", "=", self.code)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "rtlprm", "U",
                            "%03i%-7s" % (self.opts["conum"], self.code),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[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()
Пример #5
0
class ms1020(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,
                       ["ctlsys", "ctlmst", "ctldep", "genmst", "wagmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        ctlsys = gc.getCtl("ctlsys")
        if not ctlsys:
            return
        dept = ctlsys["sys_gl_dep"]
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.glint = "N"
        for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2):
            if ctlmst["ctm_modules"][x:x + 2] in ("SL", "WG"):
                dept = "Y"
                wagctl = gc.getCtl("wagctl", self.opts["conum"])
                if not wagctl:
                    self.glint = "N"
                else:
                    self.glint = wagctl["ctw_glint"]
                break
        if dept == "N":
            showError(self.opts["mf"].body, "Error",
                      "Departments have Not been Enabled")
            return
        if self.glint == "N":
            self.co1 = 0
            self.sy1 = 0
            self.cm1 = 0
            self.co2 = 0
            self.sy2 = 0
            self.cm2 = 0
        else:
            self.coys = self.sql.getRec("ctlmst", cols=["count(*)"],
                                        limit=1)[0]
        return True

    def mainProcess(self):
        dep = {
            "stype": "R",
            "tables": ("ctldep", ),
            "cols":
            (("dep_code", "", 0, "Cod"), ("dep_name", "", 0, "Name", "Y")),
            "where": [("dep_cono", "=", self.opts["conum"])]
        }
        coy = {
            "stype": "R",
            "tables": ("ctlmst", ),
            "cols":
            (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y"))
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        self.fld = [(("T", 0, 0, 0), "IUI", 3, "Department", "Department Code",
                     "", "N", self.doDepartment, dep, None, ("notzero", )),
                    (("T", 0, 1, 0), "INA", 30, "Name", "", "", "N",
                     self.doName, None, self.doDelete, ("notblank", ))]
        if self.glint == "Y":
            if self.coys == 1:
                self.fld.append((("T", 0, 2, 0), "OUI", 7, "Debit  Company"))
            else:
                self.fld.append(
                    (("T", 0, 2, 0), "IUI", 7, "Debit  Company", "",
                     self.opts["conum"], "N", self.doCoy, coy, None, None))
            self.fld.append((("T", 0, 2, 0), "ONA", 30, ""))
            self.fld.extend([
                (("T", 0, 3, 0), "IUI", 7, "       Salary A/C", "", "", "N",
                 self.doSal, glm, None, ("notzero", )),
                (("T", 0, 3, 0), "ONA", 30, ""),
                (("T", 0, 4, 0), "IUI", 7, "       Commission A/C", "", "",
                 "N", self.doCom, glm, None, ("efld", )),
                (("T", 0, 4, 0), "ONA", 30, "")
            ])
            if self.coys == 1:
                self.fld.append((("T", 0, 5, 0), "OUI", 7, "Credit Company"))
            else:
                self.fld.append(
                    (("T", 0, 5, 0), "IUI", 7, "Credit Company", "",
                     self.opts["conum"], "N", self.doCoy, coy, None, None))
            self.fld.append((("T", 0, 5, 0), "ONA", 30, ""))
            self.fld.extend([
                (("T", 0, 6, 0), "IUI", 7, "       Salary A/C", "", "", "N",
                 self.doSal, glm, None, ("notzero", )),
                (("T", 0, 6, 0), "ONA", 30, ""),
                (("T", 0, 7, 0), "IUI", 7, "       Commission A/C", "", "",
                 "N", self.doCom, glm, None, ("efld", )),
                (("T", 0, 7, 0), "ONA", 30, "")
            ])
        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 doDepartment(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.old = self.sql.getRec("ctldep",
                                   where=[("dep_cono", "=",
                                           self.opts["conum"]),
                                          ("dep_code", "=", self.code)],
                                   limit=1)
        if not self.old:
            self.new = "Y"
        else:
            self.new = "N"
        self.doLoadRec(self.old)

    def doLoadRec(self, rec):
        if not rec:
            self.df.clearFrame("T", 0)
            self.df.loadEntry("T", 0, 0, data=self.code)
            return
        for num, dat in enumerate(rec[2:-1]):
            if num == 0:
                seq = 1
                self.df.loadEntry("T", 0, seq, data=dat)
                if self.glint == "N":
                    return
                seq += 1
            elif num in (1, 4):
                coy = dat
                if not coy:
                    dat = ""
                else:
                    nam = self.sql.getRec("ctlmst",
                                          cols=["ctm_name"],
                                          where=[("ctm_cono", "=", coy)],
                                          limit=1)
                    self.df.loadEntry("T", 0, seq, data=coy)
                    self.df.loadEntry("T", 0, seq + 1, data=nam[0])
                seq += 2
            elif num in (2, 3, 5, 6):
                if dat:
                    dsc = self.sql.getRec("genmst",
                                          cols=["glm_desc"],
                                          where=[("glm_cono", "=", coy),
                                                 ("glm_acno", "=", dat)],
                                          limit=1)
                else:
                    dsc = [""]
                self.df.loadEntry("T", 0, seq, data=dat)
                self.df.loadEntry("T", 0, seq + 1, data=dsc[0])
                seq += 2

    def doName(self, frt, pag, r, c, p, i, w):
        self.name = w
        if self.glint == "Y" and self.coys == 1:
            self.co1 = self.opts["conum"]
            self.co2 = self.opts["conum"]
            self.df.loadEntry(frt, pag, p + 1, data=self.opts["conum"])
            self.df.loadEntry(frt, pag, p + 2, data=self.opts["conam"])
            return "sk2"

    def doCoy(self, frt, pag, r, c, p, i, w):
        coy = self.sql.getRec("ctlmst",
                              cols=["ctm_name "],
                              where=[("ctm_cono", "=", w)],
                              limit=1)
        if not coy:
            return "Invalid Company Number"
        if p == 2:
            self.co1 = w
        else:
            self.co2 = w
        self.df.loadEntry(frt, pag, p + 1, coy[0])

    def doSal(self, frt, pag, r, c, p, i, w):
        if p == 4:
            co = self.co1
        else:
            co = self.co2
        chk = chkGenAcc(self.opts["mf"], co, w)
        if type(chk) is str:
            return chk
        self.df.loadEntry(frt, pag, p + 1, data=chk[0])

    def doCom(self, frt, pag, r, c, p, i, w):
        if w:
            if p == 6:
                co = self.co1
            else:
                co = self.co2
            chk = chkGenAcc(self.opts["mf"], co, w)
            if type(chk) is str:
                return chk
            self.df.loadEntry(frt, pag, p + 1, data=chk[0])
        if p == 6 and self.coys == 1:
            self.df.loadEntry(frt, pag, p + 2, data=self.opts["conum"])
            self.df.loadEntry(frt, pag, p + 3, data=self.opts["conam"])
            return "sk2"

    def doDelete(self):
        if self.glint == "Y":
            chk = self.sql.getRec("wagmst",
                                  where=[("wgm_dept", "=", self.code)])
            if chk:
                return "Department is in Use, Not Deleted"
        self.sql.delRec("ctldep",
                        where=[("dep_cono", "=", self.opts["conum"]),
                               ("dep_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for num, dat in enumerate(self.df.t_work[0][0]):
            if num in (3, 5, 7, 9, 11, 13):
                continue
            data.append(dat)
        if self.glint == "N":
            data.extend([0, 0, 0, 0, 0, 0])
        if self.new == "Y":
            self.sql.insRec("ctldep", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.ctldep_col
            data.append(self.old[col.index("dep_xflag")])
            self.sql.updRec("ctldep",
                            data=data,
                            where=[("dep_cono", "=", self.opts["conum"]),
                                   ("dep_code", "=", self.code)])
        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()
Пример #6
0
class dr1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlmes", "ctlrep", "chglog", "ctlnot", "slsiv1", "drsact",
            "drschn", "drsdel", "drsmst", "drstrn", "drstyp"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        drsctl = gc.getCtl("drsctl", self.opts["conum"])
        if not drsctl:
            return
        self.chains = drsctl["ctd_chain"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def mainProcess(self):
        drc = {
            "stype": "R",
            "tables": ("drschn", ),
            "cols":
            (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")),
            "where": [("chm_cono", "=", self.opts["conum"])]
        }
        drm = {
            "stype":
            "R",
            "tables": ("drsmst", ),
            "cols":
            (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"),
             ("drm_add1", "", 0, "Address Line 1"))
        }
        if self.chains == "Y":
            drm["where"] = [("drm_cono", "=", self.opts["conum"])]
            drm["whera"] = [["T", "drm_chain", 0]]
        else:
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_chain", "=", 0)]
        drm["where"].append(("drm_stat", "<>", "X"))
        dlm = {
            "stype":
            "R",
            "tables": ("drsdel", ),
            "cols": (("del_code", "", 0, "Del-Cod"), ("del_add1", "", 0,
                                                      "Address", "Y"))
        }
        rpm = {
            "stype": "R",
            "tables": ("ctlrep", ),
            "cols":
            (("rep_code", "", 0, "Rep"), ("rep_name", "", 0, "Name", "Y")),
            "where": [("rep_cono", "=", self.opts["conum"])]
        }
        act = {
            "stype":
            "R",
            "tables": ("drsact", ),
            "cols": (("dac_code", "", 0, "Cod"), ("dac_desc", "", 0,
                                                  "Description", "Y"))
        }
        typ = {
            "stype":
            "R",
            "tables": ("drstyp", ),
            "cols": (("dtp_code", "", 0, "Cod"), ("dtp_desc", "", 0,
                                                  "Description", "Y"))
        }
        msi = {
            "stype":
            "R",
            "tables": ("ctlmes", ),
            "cols": (("mss_message", "", 0, "Num"), ("mss_detail", "NA", 50,
                                                     "Details", "Y")),
            "where": [("mss_system", "=", "INV")]
        }
        mss = {
            "stype":
            "R",
            "tables": ("ctlmes", ),
            "cols": (("mss_message", "", 0, "Num"), ("mss_detail", "NA", 50,
                                                     "Details", "Y")),
            "where": [("mss_system", "=", "STA")]
        }
        tag = (("Basic-_A", None, ("T", 1, 1), ("T", 0, 1)),
               ("Basic-_B", None, ("T", 1, 1), ("T", 0, 1)))
        r1s = (("Yes", "Y"), ("No", "N"))
        r2s = (("New", "N"), ("Good", "G"), ("Fair", "F"), ("Poor", "P"),
               ("Bad", "B"))
        self.fld = [
            [("T",0,0,0),"IUI",3,"Chain Store","",
                "","Y",self.doChain,drc,None,("efld",)],
            [("T",0,0,14),"INA",7,"Acc-Num","Account Number",
                "","N",self.doAcno,drm,None,("efld",),None,
                "To Automatically Generate Account Numbers for "\
                "New Accounts enter a Blank Account Number."],
            (("T",0,0,30),"INA",30,"Name","",
                "","N",self.doName,None,self.doDelete,("notblank",)),
            [("T",0,0,0),"INA",7,"Acc-Num","Account Number",
                "","Y",self.doAcno,drm,None,("efld",),None,
                "To Automatically Generate Account Numbers for "\
                "New Accounts enter a Blank Account Number."],
            (("T",0,0,14),"INA",30,"Name","",
                "","N",self.doName,None,self.doDelete,("notblank",)),
            (("T",1,0,0),"INA",30,"Address Line 1","",
                "","N",None,None,None,("notblank",)),
            (("T",1,1,0),"INA",30,"Address Line 2","",
                "","N",None,None,None,("efld",)),
            (("T",1,2,0),"INA",30,"Address Line 3","",
                "","N",None,None,None,("efld",)),
            (("T",1,3,0),"INA",4,"Postal Code","",
                "","N",None,None,None,("efld",)),
            (("T",1,4,0),"INA",20,"Telephone","",
                "","N",None,None,None,("efld",)),
            (("T",1,5,0),"INA",20,"Fax","",
                "","N",None,None,None,("efld",)),
            (("T",1,6,0),"INA",30,"Manager","Manager's Name",
                "","N",None,None,None,("efld",)),
            (("T",1,6,47),"ITX",30,"E-Mail","Manager's E-Mail Address",
                "","N",None,None,None,("email",)),
            (("T",1,7,0),"INA",30,"Accounts","Accounts Contact",
                "","N",None,None,None,("efld",)),
            (("T",1,7,47),"ITX",30,"E-Mail","Accounts E-Mail Address",
                "","N",None,None,None,("email",)),
            (("T",1,8,0),"INA",30,"Sales","Sales Contact",
                "","N",None,None,None,("efld",)),
            (("T",1,8,47),"ITX",30,"E-Mail","Sales E-Mail Address",
                "","N",None,None,None,("email",)),
            (("T",1,9,0),"Id1",10,"Date Opened","Date Account Opened",
                self.sysdtw,"N",None,None,None,("efld",)),
            (("T",1,10,0),"Id1",10,"Date Registered","",
                "","N",None,None,None,("efld",)),
            (("T",1,11,0),"INA",10,"V.A.T Number","",
                "","N",None,None,None,("efld",)),
            (("T",1,12,0),"INa",7,"Delivery Code","",
                "","N",self.doDelivery,dlm,None,("efld",)),
            (("T",1,13,0),"INa",3,"Rep Code","",
                "","N",self.doRep,rpm,None,("efld",)),
            (("T",1,13,20),"ONA",26,""),
            (("T",1,14,0),"IUA",3,"Business Activity","",
                "","N",self.doBusAct,act,None,("efld",)),
            (("T",1,14,20),"ONA",26,""),
            (("T",1,15,0),"IUA",3,"Business Type","",
                "","N",self.doBusTyp,typ,None,("efld",)),
            (("T",1,15,20),"ONA",26,""),
            (("T",2,0,0),"IUI",1,"Price Level","",
                "","N",None,None,None,("efld",)),
            (("T",2,1,0),"IUD",5.2,"Discount Percentage","",
                "","N",None,None,None,("efld",)),
            (("T",2,2,0),"IUD",5.2,"Interest Percentage","",
                "","N",None,None,None,("efld",)),
            (("T",2,3,0),"IUI",3,"Referral Terms","",
                "","N",None,None,None,("efld",)),
            (("T",2,4,0),"IUI",3,"Rejected Terms","",
                "","N",None,None,None,("efld",)),
            (("T",2,5,0),"IUI",5,"Credit Limit","",
                "","N",None,None,None,("efld",)),
            (("T",2,6,0),("IRB",r1s),0,"Stop Indicator","",
                "N","N",None,None,None,None),
            (("T",2,7,0),"IUI",3,"Invoice Message","",
                "","N",self.doImes,msi,None,("efld",)),
            (("T",2,7,22),"ONA",50,""),
            (("T",2,8,0),"IUI",3,"Statement Message","",
                "","N",self.doSmes,mss,None,("efld",)),
            (("T",2,8,22),"ONA",50,""),
            (("T",2,9,0),("IRB",r2s),0,"Credit Rating","",
                "N","N",None,None,None,None)]
        but = (("Import", None, self.doImport, 0, ("T", 0, 1), ("T", 0, 2),
                "Import Account Details from a CSV or XLS File."),
               ("Accept", None, self.doAccept, 0, ("T", 1, 1), ("T", 0, 1)),
               ("Print", None, self.doPrint, 0, ("T", 1, 1), ("T", 0, 1)),
               ("Cancel", None, self.doCancel, 0, ("T", 1, 1),
                ("T", 0, 1)), ("Quit", None, self.doExit1, 1, None, None))
        tnd = ((self.doEnd1, "N"), (self.doEnd2, "N"), (self.doAccept, "Y"))
        txt = (self.doExit1, self.doExit2, self.doExit3)
        if self.chains == "Y":
            del self.fld[3]
            del self.fld[3]
        else:
            del self.fld[0]
            del self.fld[0]
            del self.fld[0]
            self.chain = 0
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               tags=tag,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               clicks=self.doClick)
        if "args" in self.opts:
            if self.chains == "Y":
                self.df.doKeyPressed("T", 0, 0, data=self.opts["args"][0])
                self.df.doKeyPressed("T", 0, 1, data=self.opts["args"][1])
            else:
                self.chain = self.opts["args"][0]
                self.df.doKeyPressed("T", 0, 0, data=self.opts["args"][1])

    def doClick(self, *opts):
        if self.df.pag == 0:
            return
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doChain(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("drschn",
                                  where=[("chm_cono", "=", self.opts["conum"]),
                                         ("chm_chain", "=", self.chain)],
                                  limit=1)
            if not acc:
                return "Invalid Chain Store"
        self.chain = w

    def doAcno(self, frt, pag, r, c, p, i, w):
        self.acno = w
        if self.acno:
            self.old = self.sql.getRec("drsmst",
                                       where=[("drm_cono", "=",
                                               self.opts["conum"]),
                                              ("drm_chain", "=", self.chain),
                                              ("drm_acno", "=", self.acno)],
                                       limit=1)
        if not self.acno or not self.old:
            ok = askQuestion(self.opts["mf"].body,
                             "New Account",
                             "Is This a New Account?",
                             default="no")
            if ok == "no":
                return "Invalid Account Number"
            pw = PwdConfirm(self.opts["mf"],
                            conum=self.opts["conum"],
                            system="DRS",
                            code="NewAcc")
            if pw.flag == "no":
                if "args" in self.opts:
                    return "xt"
                else:
                    return "New Account Creation is Not Allowed"
            self.new = True
        elif self.old[self.sql.drsmst_col.index("drm_stat")] == "X":
            return "Invalid Account, Redundant"
        else:
            self.new = False
            self.df.loadEntry("T", pag, p + 1, data=self.old[3])
            d = 4
            for pg in range(1, self.df.pgs + 1):
                for x in range(0, self.df.topq[pg]):
                    if pg == 1 and x in (17, 19, 21):
                        continue
                    if pg == 2 and x in (8, 10):
                        continue
                    if pg == 2 and x == 11 and not self.old[d]:
                        data = "N"
                    else:
                        data = self.old[d]
                    self.df.loadEntry("T", pg, x, data=data)
                    d += 1
            self.loadRep()
            self.loadAct()
            self.loadTyp()
            self.loadInvMess()
            self.loadStaMess()

    def loadRep(self):
        acc = self.sql.getRec("ctlrep",
                              cols=["rep_name"],
                              where=[("rep_cono", "=", self.opts["conum"]),
                                     ("rep_code", "=",
                                      self.df.t_work[1][0][16])],
                              limit=1)
        if acc:
            self.df.loadEntry("T", 1, 17, data=acc[0])

    def loadAct(self):
        acc = self.sql.getRec("drsact",
                              cols=["dac_desc"],
                              where=[("dac_code", "=",
                                      self.df.t_work[1][0][18])],
                              limit=1)
        if acc:
            self.df.loadEntry("T", 1, 19, data=acc[0])

    def loadTyp(self):
        acc = self.sql.getRec("drstyp",
                              cols=["dtp_desc"],
                              where=[("dtp_code", "=",
                                      self.df.t_work[1][0][20])],
                              limit=1)
        if acc:
            self.df.loadEntry("T", 1, 21, data=acc[0])

    def loadInvMess(self):
        acc = self.sql.getRec("ctlmes",
                              cols=["mss_detail"],
                              where=[("mss_system", "=", "INV"),
                                     ("mss_message", "=",
                                      self.df.t_work[2][0][7])],
                              limit=1)
        if acc:
            self.df.loadEntry("T", 2, 8, data=acc[0])

    def loadStaMess(self):
        acc = self.sql.getRec("ctlmes",
                              cols=["mss_detail"],
                              where=[("mss_system", "=", "STA"),
                                     ("mss_message", "=",
                                      self.df.t_work[2][0][9])],
                              limit=1)
        if acc:
            self.df.loadEntry("T", 2, 10, data=acc[0])

    def doName(self, frt, pag, r, c, p, i, w):
        self.name = w
        if self.new and not self.acno:
            for x in range(1, 100):
                self.acno = genAccNum(self.name, x, 7)
                chk = self.sql.getRec("drsmst",
                                      where=[("drm_cono", "=",
                                              self.opts["conum"]),
                                             ("drm_chain", "=", self.chain),
                                             ("drm_acno", "=", self.acno)],
                                      limit=1)
                if not chk:
                    break
            self.df.loadEntry("T", 0, 0, data=self.acno)

    def doDelivery(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("drsdel",
                                  where=[("del_code", "=", w)],
                                  limit=1)
            if not acc:
                ok = askQuestion(self.opts["mf"].body, head="Delivery Address",
                    mess="This Delivery Address Does Not Exist, Would "\
                    "You Like to Create It Now?", default="no")
                if ok == "no":
                    return "rf"
                callModule(self.opts["mf"],
                           self.df,
                           "drc410",
                           coy=(self.opts["conum"], self.opts["conam"]),
                           period=None,
                           user=None,
                           args=w)
                acc = self.sql.getRec("drsdel",
                                      where=[("del_code", "=", w)],
                                      limit=1)
                if not acc:
                    return "rf"

    def doRep(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("ctlrep",
                                  cols=["rep_name"],
                                  where=[("rep_cono", "=", self.opts["conum"]),
                                         ("rep_code", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Rep"
            self.df.loadEntry("T", 1, p + 1, data=acc[0])

    def doBusAct(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("drsact",
                                  cols=["dac_desc"],
                                  where=[("dac_code", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Business Activity"
            self.df.loadEntry("T", 1, p + 1, data=acc[0])

    def doBusTyp(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("drstyp",
                                  cols=["dtp_desc"],
                                  where=[("dtp_code", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Business Type"
            self.df.loadEntry("T", 1, p + 1, data=acc[0])

    def doImes(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("ctlmes",
                                  cols=["mss_detail"],
                                  where=[("mss_system", "=", "INV"),
                                         ("mss_message", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Invoice Message"
            self.df.loadEntry("T", 2, p + 1, data=acc[0])

    def doSmes(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("ctlmes",
                                  cols=["mss_detail"],
                                  where=[("mss_system", "=", "STA"),
                                         ("mss_message", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Statement Message"
            self.df.loadEntry("T", 2, p + 1, data=acc[0])

    def doDelete(self):
        trs = self.sql.getRec("drstrn",
                              cols=["count(*)"],
                              where=[("drt_cono", "=", self.opts["conum"]),
                                     ("drt_chain", "=", self.chain),
                                     ("drt_acno", "=", self.acno)],
                              limit=1)
        if trs[0]:
            return "%s Transactions Exist, Not Deleted" % trs[0]
        iv1 = self.sql.getRec("slsiv1",
                              cols=["count(*)"],
                              where=[("si1_cono", "=", self.opts["conum"]),
                                     ("si1_chain", "=", self.chain),
                                     ("si1_acno", "=", self.acno)],
                              limit=1)
        if iv1[0]:
            return "%s Sales Document Exists, Not Deleted" % iv1[0]
        key = "%03i%s" % (self.chain, self.acno)
        nte = self.sql.getRec("ctlnot",
                              cols=["count(*)"],
                              where=[("not_cono", "=", self.opts["conum"]),
                                     ("not_sys", "=", "DRS"),
                                     ("not_key", "=", key)],
                              limit=1)
        if nte[0]:
            return "%s Notes Exist, Not Deleted" % nte[0]
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.delRec("drsmst",
                        where=[("drm_cono", "=", self.opts["conum"]),
                               ("drm_chain", "=", self.chain),
                               ("drm_acno", "=", self.acno)])
        self.sql.insRec("chglog", data=["drsmst", "D", "%03i%03i%-7s" % \
            (self.opts["conum"], self.chain, self.acno), "", dte,
            self.opts["capnm"], "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd1(self):
        self.df.focusField("T", 1, 1, clr=self.new)

    def doEnd2(self):
        self.df.selPage("Basic-B")
        self.df.focusField("T", 2, 1, clr=self.new)

    def doAccept(self):
        frt, pag, col, mes = self.df.doCheckFields()
        if mes:
            if pag > 0 and pag != self.df.pag:
                if frt == "T":
                    self.df.last[pag][0] = col + 1
                else:
                    self.df.last[pag][1] = col + 1
                self.df.selPage(self.df.tags[pag - 1][0])
            else:
                self.df.focusField(frt, pag, (col + 1), err=mes)
        else:
            data = [self.opts["conum"], self.chain]
            if self.chains == "Y":
                f = 1
            else:
                f = 0
            for x in range(f, f + 2):
                data.append(self.df.t_work[0][0][x])
            for x in range(0, len(self.df.t_work[1][0])):
                if x in (17, 19, 21):
                    continue
                data.append(self.df.t_work[1][0][x])
            for x in range(0, len(self.df.t_work[2][0])):
                if x in (8, 10):
                    continue
                data.append(self.df.t_work[2][0][x])
            if self.new:
                data.extend(["N", ""])
                self.sql.insRec("drsmst", data=data)
            else:
                col = self.sql.drsmst_col
                data.append(self.old[col.index("drm_stat")])
                data.append(self.old[col.index("drm_xflag")])
                if data != self.old:
                    self.sql.updRec("drsmst",
                                    data=data,
                                    where=[("drm_cono", "=",
                                            self.opts["conum"]),
                                           ("drm_chain", "=", self.chain),
                                           ("drm_acno", "=", self.acno)])
                    dte = int("%04i%02i%02i%02i%02i%02i" %
                              time.localtime()[:-3])
                    for num, dat in enumerate(self.old):
                        if dat != data[num]:
                            self.sql.insRec(
                                "chglog",
                                data=[
                                    "drsmst", "U",
                                    "%03i%03i%-7s" % (self.opts["conum"],
                                                      self.chain, self.acno),
                                    col[num], dte, self.opts["capnm"],
                                    str(dat),
                                    str(data[num]), "", 0
                                ])
            if "args" in self.opts:
                self.doExit1()
            else:
                self.opts["mf"].dbm.commitDbase()
                self.df.last[0] = [0, 0]
                self.df.selPage("Basic-A")
                self.df.focusField("T", 0, 1)

    def doImport(self):
        self.df.setWidget(self.df.B3, state="disabled")
        self.df.setWidget(self.df.mstFrame, state="hide")
        fi = FileImport(self.opts["mf"], imptab="drsmst", impskp=["drm_cono"])
        sp = ProgressBar(self.opts["mf"].body,
                         typ="Importing Debtor's Accounts",
                         mxs=len(fi.impdat))
        err = None
        for num, line in enumerate(fi.impdat):
            sp.displayProgress(num)
            if not line[1]:
                if not line[2]:
                    err = "Blank Account Number and Blank Name"
                    break
                for x in range(1, 100):
                    line[1] = genAccNum(line[2], x, 7)
                    chk = self.sql.getRec("drsmst",
                                          where=[("drm_cono", "=",
                                                  self.opts["conum"]),
                                                 ("drm_chain", "=", line[0]),
                                                 ("drm_acno", "=", line[1])],
                                          limit=1)
                    if not chk:
                        break
            chk = self.sql.getRec("drsmst",
                                  where=[("drm_cono", "=", self.opts["conum"]),
                                         ("drm_chain", "=", line[0]),
                                         ("drm_acno", "=", line[1])],
                                  limit=1)
            if chk:
                err = "%s %s %s %s Already Exists" % (fi.impcol[0][0], line[0],
                                                      fi.impcol[1][0], line[1])
                break
            if not line[2]:
                err = "Blank Name"
                break
            if not line[15]:
                line[15] = self.sysdtw
            if not line[28]:
                line[28] = "N"
            if not line[31]:
                line[31] = "N"
            line.insert(0, self.opts["conum"])
            self.sql.insRec("drsmst", data=line)
        sp.closeProgress()
        if err:
            err = "Line %s: %s" % ((num + 1), err)
            showError(
                self.opts["mf"].body, "Import Error", """%s

Please Correct your Import File and then Try Again.""" % err)
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPrint(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        TabPrt(self.opts["mf"],
               self.opts["conum"],
               self.opts["conam"],
               name=self.__class__.__name__,
               tabs="drsmst",
               where=[("drm_cono", "=", self.opts["conum"]),
                      ("drm_chain", "=", self.chain),
                      ("drm_acno", "=", self.acno)])
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.last[0] = [0, 0]
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)

    def doExit1(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    def doExit2(self):
        self.df.focusField("T", 0, 1)

    def doExit3(self):
        self.df.selPage("Basic-A")
Пример #7
0
class st1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlvmf", "ctlrep", "drschn", "drsmst", "genmst", "slsiv1",
            "slsiv2", "strgrp", "strloc", "strmf1", "strmf2", "strgmu",
            "strcmu", "strprc", "strrcp", "struoi", "strtrn", "strpot",
            "strvar", "slsiv3", "chglog"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.glint = strctl["cts_glint"]
        self.locs = strctl["cts_locs"]
        self.plevs = strctl["cts_plevs"]
        self.automu = strctl["cts_automu"]
        self.drsctl = gc.getCtl("drsctl", self.opts["conum"], error=False)
        if not self.drsctl:
            self.chains = "N"
        else:
            self.chains = self.drsctl["ctd_chain"]
        return True

    def mainProcess(self):
        gpm = {
            "stype":
            "R",
            "tables": ("strgrp", ),
            "cols": (("gpm_group", "", 0, "Grp"), ("gpm_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("gpm_cono", "=", self.opts["conum"])]
        }
        stm = {
            "stype":
            "R",
            "tables": ("strmf1", ),
            "cols":
            (("st1_group", "", 0, "Grp"), ("st1_code", "", 0, "Product Code"),
             ("st1_type", "", 0, "T"), ("st1_desc", "", 0, "Description",
                                        "Y")),
            "where": [("st1_cono", "=", self.opts["conum"]),
                      ("st1_type", "<>", "X")],
            "whera": [],
            "index":
            1
        }
        loc = {
            "stype":
            "R",
            "tables": ("strloc", ),
            "cols":
            (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Description", "Y")),
            "where": [("srl_cono", "=", self.opts["conum"])]
        }
        unm = {
            "stype":
            "R",
            "tables": ("struoi", ),
            "cols": (("unm_unit", "", 0, "Unit"), ("unm_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("unm_cono", "=", self.opts["conum"])]
        }
        drc = {
            "stype": "R",
            "tables": ("drschn", ),
            "cols":
            (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")),
            "where": [("chm_cono", "=", self.opts["conum"])]
        }
        drm = {
            "stype":
            "R",
            "tables": ("drsmst", ),
            "cols":
            (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"),
             ("drm_add1", "", 0, "Address Line 1"))
        }
        if self.chains == "Y":
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_stat", "<>", "X")]
            drm["whera"] = [["T", "drm_chain", 10]]
        else:
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_chain", "=", 0), ("drm_stat", "<>", "X")]
        vtm = {
            "stype":
            "R",
            "tables": ("ctlvmf", ),
            "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0,
                                                "Description", "Y")),
            "where": [("vtm_cono", "=", self.opts["conum"])]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        tag = (("Basic-_A", None, ("T", 0, 0),
                ("T", 0, 1)), ("Basic-_B", None, ("T", 0, 0), ("T", 0, 1)),
               ("Recipes", self.doReadLoadRecipe, None, ("T", 0, 1)))
        r1s = (("Normal", "N"), ("Recipe", "R"))
        r2s = (("Average", "A"), ("Standard", "S"), ("None", "N"))
        r3s = (("Manual", "M"), ("Automatic", "A"), ("Zero", "N"))
        self.fld = [(("T", 0, 0, 0), "IUA", 3, "Group", "Product Group", "",
                     "Y", self.doGroup, gpm, None, ("notblank", )),
                    (("T", 0, 0, 0), "INA", 20, "Code", "Product Code", "",
                     "N", self.doCode, stm, None, ("notblank", )),
                    (("T", 0, 0, 0), "IUA", 1, "Loc", "Location", "1", "N",
                     self.doLoc, loc, None, ("notblank", )),
                    (("T", 0, 0, 0), "ONA", 30, ""),
                    (("T", 1, 0, 0), ("IRB", r1s), 0, "Type of Item", "", "N",
                     "N", self.doType, None, None, None),
                    (("T", 1, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 1, 2, 0), "INA", 10, "Unit of Issue", "", "", "N",
                     self.doUoi, unm, None, ("notblank", )),
                    (("T", 1, 2, 0), "ONA", 30, ""),
                    (("T", 1, 3, 0), ("IRB", r2s), 0, "Cost Price Indicator",
                     "", "A", "N", self.doValInd, None, None, None),
                    (("T", 1, 4, 0), "IUA", 1, "VAT Code", "", "", "N",
                     self.doVat, vtm, None, ("notblank", )),
                    (("T", 1, 4, 0), "ONA", 30, ""),
                    (("T", 1, 5, 0), "IUI", 3, "Exclusive Chainstore", "", "",
                     "N", self.doChnExcl, drc, None, ("efld", )),
                    (("T", 1, 5, 0), "ONA", 30, ""),
                    (("T", 1, 6, 0), "INA", 7, "Exclusive Account", "", "",
                     "N", self.doAccExcl, drm, None, ("efld", )),
                    (("T", 1, 6, 0), "ONA", 30, ""),
                    (("T", 1, 7, 0), "IUI", 7, "Sales Code", "", "", "N",
                     self.doSales, glm, None, ("efld", )),
                    (("T", 1, 7, 0), "ONA", 30, ""),
                    (("T", 1, 8, 0), "IUI", 7, "COS Code", "", "", "N",
                     self.doCos, glm, None, ("efld", )),
                    (("T", 1, 8, 0), "ONA", 30, ""),
                    (("T", 2, 0, 0), "IUA", 8, "Bin Number", "", "", "N", None,
                     None, self.doDelete, ("efld", )),
                    (("T", 2, 1, 0), ("IRB", r3s), 0, "Re-Order Indicator", "",
                     "A", "N", self.doReord, None, None, None),
                    (("T", 2, 2, 0), "IUI", 7, "Re-Order Level", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 2, 3, 0), "IUI", 7, "Re-Order Quantity", "", "",
                     "N", None, None, None, ("efld", ))]
        if self.automu in ("A", "L"):
            self.fld.append(
                (("T", 2, 4, 0), "IUD", 6.2, "Percentabge Markup Lv1", "", "",
                 "N", None, None, None, ("efld", )))
            for x in range(1, self.plevs):
                self.fld.append((("T", 2, 4, 0), "IUD", 6.2, "Lv%s" % (x + 1),
                                 "", "", "N", None, None, None, ("efld", )))
        self.fld.extend([(("C", 3, 0, 0), "INA", 3, "Grp", "Product Group",
                          "r", "N", self.doRecGrp, gpm, None, None),
                         (("C", 3, 0,
                           1), "INA", 20, "Product-Code", "Product Code", "",
                          "N", self.doRecCod, stm, None, None),
                         (("C", 3, 0, 2), "ONA", 30, "Description"),
                         (("C", 3, 0, 3), "IUD", 11.2, "Quantity", "", "", "N",
                          self.doRecQty, None, self.doDelRec, ("notzero", ))])
        but = (("Edit", None, self.doEditor, 0, ("C", 3, 1), None),
               ("Accept", None, self.doAccept, 0, ("T", 0, 0), ("T", 0, 1)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 0),
                ("T", 0, 1)), ("Quit", None, self.doQuit, 1, None, None))
        tnd = ((self.doEnd, "N"), (self.doEnd, "N"), (self.doEnd, "Y"), None)
        txt = (self.doExit, self.doExit, self.doExit, self.doExit)
        cnd = (None, None, None, (self.doEnd, "N"))
        cxt = (None, None, None, self.doExit)
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               tags=tag,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               clicks=self.doClick)

    def doClick(self, *opts):
        if self.df.pag == 0 or not self.gtype:
            return
        if opts[0] == (1, 0) and not self.newcode:
            return
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doGroup(self, frt, pag, r, c, p, i, w):
        self.grpacc = self.sql.getRec(
            "strgrp",
            cols=["gpm_vatcode", "gpm_sales", "gpm_costs"],
            where=[("gpm_cono", "=", self.opts["conum"]),
                   ("gpm_group", "=", w)],
            limit=1)
        if not self.grpacc:
            return "Invalid Group"
        self.group = w
        self.df.topf[0][1][8]["whera"] = [["T", "st1_group", 0, 0]]

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.mups = [0, 0, 0, 0, 0]
        self.old1 = self.sql.getRec("strmf1",
                                    where=[("st1_cono", "=",
                                            self.opts["conum"]),
                                           ("st1_group", "=", self.group),
                                           ("st1_code", "=", w)],
                                    limit=1)
        if not self.old1:
            self.newcode = True
            self.gtype = None
        elif self.old1[3] == "X":
            return "Redundant Code"
        else:
            self.newcode = False
            d = 3
            for x in range(0, self.df.topq[1]):
                if x in (3, 6, 8, 10, 12, 14):
                    continue
                if x == 0:
                    self.gtype = self.old1[d]
                self.df.loadEntry("T", 1, x, data=self.old1[d])
                if x == 2:
                    get = self.getUoi(self.old1[d])
                    if get:
                        self.df.loadEntry("T", 1, x + 1, data=get[0])
                if x == 5:
                    get = self.getVat(self.old1[d])
                    if get:
                        self.df.loadEntry("T", 1, x + 1, data=get[0])
                if x == 7:
                    get = self.getChnExcl(self.old1[d])
                    if get:
                        self.df.loadEntry("T", 1, x + 1, data=get[0])
                if x == 9:
                    get = self.getAccExcl(self.old1[d])
                    if get:
                        self.df.loadEntry("T", 1, x + 1, data=get[0])
                if self.glint == "Y" and x in (11, 13):
                    get = self.getGenDes(self.old1[d])
                    if get:
                        self.df.loadEntry("T", 1, x + 1, data=get[0])
                d += 1
        if self.locs == "N":
            self.loc = "1"
            self.df.loadEntry("T", 0, 2, data=self.loc)
            err = self.checkLoc()
            if err:
                return err
            return "sk1"

    def doLoc(self, frt, pag, r, c, p, i, w):
        if w == 0:
            return "Invalid Location"
        self.loc = w
        err = self.checkLoc()
        if err:
            return err

    def checkLoc(self):
        acc = self.sql.getRec("strloc",
                              cols=["srl_desc"],
                              where=[("srl_cono", "=", self.opts["conum"]),
                                     ("srl_loc", "=", self.loc)],
                              limit=1)
        if not acc:
            return "Invalid Location Code"
        else:
            self.df.loadEntry("T", 0, 3, data=acc[0])
        self.old2 = self.sql.getRec("strmf2",
                                    where=[("st2_cono", "=",
                                            self.opts["conum"]),
                                           ("st2_group", "=", self.group),
                                           ("st2_code", "=", self.code),
                                           ("st2_loc", "=", self.loc)],
                                    limit=1)
        if not self.old2:
            ok = askQuestion(self.opts["mf"].body, "New Location",
                "This location does not exist for this product. " \
                "Are you sure that you want to create it?")
            if ok == "yes":
                self.newloc = "Y"
            else:
                return "Rejected Location"
        if not self.old2:
            self.newloc = "Y"
        else:
            self.newloc = "N"
            d = 3
            for x in range(0, 4):
                d = d + 1
                self.df.loadEntry("T", 2, x, data=self.old2[d])
            if self.automu in ("A", "L"):
                for y in range(self.plevs):
                    mup = getMarkup(self.sql, self.opts["conum"], self.group,
                                    self.code, self.loc, y + 1)
                    self.df.loadEntry("T", 2, 4 + y, data=mup)
                    self.mups[y] = mup

    def doType(self, frt, pag, r, c, p, i, w):
        self.gtype = w
        if self.gtype == "R":
            self.df.enableTag(2)
        else:
            self.df.disableTag(2)

    def doUoi(self, frt, pag, r, c, p, i, w):
        acc = self.getUoi(w)
        if not acc:
            return "Invalid UOI Record"
        self.df.loadEntry(frt, pag, p + 1, data=acc[0])

    def doValInd(self, frt, pag, r, c, p, i, w):
        self.df.topf[1][5][5] = self.grpacc[0]

    def doVat(self, frt, pag, r, c, p, i, w):
        acc = self.getVat(w)
        if not acc:
            return "Invalid VAT Record"
        self.df.loadEntry(frt, pag, p + 1, data=acc[0])
        if not self.drsctl:
            self.chain = 0
            self.df.loadEntry(frt, pag, p + 1, data=0)
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 1, data="")
            if self.glint == "N":
                return "sk9"
            else:
                return "sk4"

    def doChnExcl(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.getChnExcl(w)
            if not acc:
                return "Invalid Chainstore"
            self.df.loadEntry(frt, pag, p + 1, data=acc[0])
        self.chain = w

    def doAccExcl(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.getAccExcl(w)
            if not acc:
                return "Invalid Debtors Account"
            self.df.loadEntry(frt, pag, p + 1, data=acc[0])
        if self.glint == "N":
            return "sk5"
        if self.newcode:
            self.df.loadEntry(frt, pag, p + 2, data=self.grpacc[1])
            if self.grpacc[1]:
                acc = self.getGenDes(self.grpacc[1])
                if not acc:
                    return "Invalid Sales Code"
                self.df.loadEntry(frt, pag, p + 3, data=acc[0])
            self.df.loadEntry(frt, pag, p + 4, data=self.grpacc[2])
            if self.grpacc[2]:
                acc = self.getGenDes(self.grpacc[2])
                if not acc:
                    return "Invalid C.O.S. Code"
                self.df.loadEntry(frt, pag, p + 5, data=acc[0])

    def doSales(self, frt, pag, r, c, p, i, w):
        acc = self.getGenDes(w)
        if not acc:
            return "Invalid Sales Account"
        self.df.loadEntry(frt, pag, p + 1, data=acc[0])

    def doCos(self, frt, pag, r, c, p, i, w):
        acc = self.getGenDes(w)
        if not acc:
            return "Invalid COS Account"
        self.df.loadEntry(frt, pag, p + 1, data=acc[0])

    def doReord(self, frt, pag, r, c, p, i, w):
        if w == "N":
            self.df.loadEntry(frt, pag, p + 1, data=0)
            self.df.loadEntry(frt, pag, p + 2, data=0)
            return "sk2"

    def getUoi(self, dat):
        acc = self.sql.getRec("struoi",
                              cols=["unm_desc"],
                              where=[("unm_cono", "=", self.opts["conum"]),
                                     ("unm_unit", "=", dat)],
                              limit=1)
        return acc

    def getVat(self, dat):
        acc = self.sql.getRec("ctlvmf",
                              cols=["vtm_desc"],
                              where=[("vtm_cono", "=", self.opts["conum"]),
                                     ("vtm_code", "=", dat)],
                              limit=1)
        return acc

    def getChnExcl(self, dat):
        self.chain = dat
        if dat:
            acc = self.sql.getRec("drschn",
                                  cols=["chm_name"],
                                  where=[("chm_cono", "=", self.opts["conum"]),
                                         ("chm_chain", "=", dat)],
                                  limit=1)
            return acc

    def getAccExcl(self, dat):
        if dat:
            acc = self.sql.getRec("drsmst",
                                  cols=["drm_name"],
                                  where=[("drm_cono", "=", self.opts["conum"]),
                                         ("drm_chain", "=", self.chain),
                                         ("drm_acno", "=", dat),
                                         ("drm_stat", "<>", "X")],
                                  limit=1)
            return acc

    def getGenDes(self, dat):
        if dat:
            acc = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", dat)],
                                  limit=1)
            return acc

    def doRecGrp(self, frt, pag, r, c, p, i, w):
        self.rgroup = w
        acc = self.sql.getRec("strgrp",
                              cols=["gpm_desc"],
                              where=[("gpm_cono", "=", self.opts["conum"]),
                                     ("gpm_group", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Group"
        self.df.topf[0][1][8]["whera"] = [["C", "st1_group", 0, 3]]

    def doRecCod(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("strmf1",
                              cols=["st1_type", "st1_desc"],
                              where=[("st1_cono", "=", self.opts["conum"]),
                                     ("st1_group", "=", self.rgroup),
                                     ("st1_code", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Code"
        if acc[0] == "R":
            return "Invalid Type (Recipe)"
        self.df.loadEntry(frt, pag, p + 1, data=acc[1])
        acc = self.sql.getRec("strmf2",
                              cols=["st2_bin"],
                              where=[("st2_cono", "=", self.opts["conum"]),
                                     ("st2_group", "=", self.rgroup),
                                     ("st2_code", "=", w),
                                     ("st2_loc", "=", self.loc)],
                              limit=1)
        if not acc:
            return "Invalid Code (2)"
        self.rcode = w
        acc = self.sql.getRec("strrcp",
                              cols=["srr_rqty"],
                              where=[("srr_cono", "=", self.opts["conum"]),
                                     ("srr_group", "=", self.group),
                                     ("srr_code", "=", self.code),
                                     ("srr_loc", "=", self.loc),
                                     ("srr_rgroup", "=", self.rgroup),
                                     ("srr_rcode", "=", self.rcode)],
                              limit=1)
        if acc:
            self.newrec = "n"
            self.df.loadEntry(frt, pag, p + 2, data=acc[0])
        else:
            self.newrec = "y"

    def doRecQty(self, frt, pag, r, c, p, i, w):
        self.rqty = w

    def doEditor(self):
        if self.df.pag != 3:
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
            return
        # Display recipe items and allow editing of details
        data = self.sql.getRec(
            tables=["strrcp", "strmf1"],
            cols=["srr_rgroup", "srr_rcode", "st1_desc", "srr_rqty"],
            where=[("srr_cono", "=", self.opts["conum"]),
                   ("srr_group", "=", self.group),
                   ("srr_code", "=", self.code), ("srr_loc", "=", self.loc),
                   ("st1_cono=srr_cono", ), ("st1_group=srr_rgroup", ),
                   ("st1_code=srr_rcode", )])
        if data:
            titl = "Recipe Items"
            head = ("Grp", "Product-Code", "Description", "Quantity")
            lin = {
                "stype": "C",
                "titl": titl,
                "head": head,
                "typs": (("NA", 3), ("NA", 20), ("NA", 30), ("SD", 10.2)),
                "data": data
            }
            state = self.df.disableButtonsTags()
            self.opts["mf"].updateStatus("Select a Product to Edit")
            chg = self.df.selChoice(lin)
            if chg and chg.selection:
                self.change = chg.selection
                self.doChgChanges()
            self.df.enableButtonsTags(state=state)
            self.df.focusField("C", 3, self.df.col)

    def doChgChanges(self):
        tit = ("Change Items", )
        gpm = {
            "stype":
            "R",
            "tables": ("strgrp", ),
            "cols": (("gpm_group", "", 0, "Grp"), ("gpm_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("gpm_cono", "=", self.opts["conum"])]
        }
        stm = {
            "stype":
            "R",
            "tables": ("strmf1", ),
            "cols":
            (("st1_group", "", 0, "Grp"), ("st1_code", "", 0, "Product Code"),
             ("st1_type", "", 0, "T"), ("st1_desc", "", 0, "Description",
                                        "Y")),
            "where": [("st1_cono", "=", self.opts["conum"])],
            "whera": [],
            "index":
            1
        }
        fld = ((("T", 0, 0, 0), "INA", 3, "Group", "Product Group", "", "N",
                self.doChgGrp, gpm, None, ('notblank', )),
               (("T", 0, 1, 0), "INA", 20, "Code", "Product Code", "", "N",
                self.doChgCod, stm, None,
                ('notblank', )), (("T", 0, 2, 0), "ONA", 30, "Description"),
               (("T", 0, 3, 0), "ISD", 10.2, "Quantity", "", "", "N",
                self.doChgQty, None, None, ('notzero', )))
        but = [["Delete", None, self.doChgDel, 1, None, None]]
        self.cg = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               butt=but,
                               tend=((self.doChgEnd, "n"), ),
                               txit=(self.doChgExit, ))
        self.cg.loadEntry("T", 0, 0, data=self.change[0])
        self.cg.loadEntry("T", 0, 1, data=self.change[1])
        self.cg.loadEntry("T", 0, 2, data=self.change[2])
        self.cg.loadEntry("T", 0, 3, data=self.change[3])
        self.cg.focusField("T", 0, 1, clr=False)
        self.cg.mstFrame.wait_window()

    def doChgGrp(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("strgrp",
                              cols=["gpm_desc"],
                              where=[("gpm_cono", "=", self.opts["conum"]),
                                     ("gpm_group", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Group"
        self.rgroup = w
        self.cg.topf[0][1][8]["whera"] = [["T", "st1_group", 0, 0]]

    def doChgCod(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("strmf1",
                              cols=["st1_type", "st1_desc"],
                              where=[("st1_cono", "=", self.opts["conum"]),
                                     ("st1_group", "=", self.rgroup),
                                     ("st1_code", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Code"
        if acc[0] != "N":
            return "Invalid Type"
        cnt = self.sql.getRec("strrcp",
                              cols=["count(*)"],
                              where=[("srr_cono", "=", self.opts["conum"]),
                                     ("srr_group", "=", self.rgroup),
                                     ("srr_code", "=", w)],
                              limit=1)
        if cnt[0]:
            return "Product Already In Recipe"
        self.rcode = w
        self.cg.loadEntry("T", 0, 2, data=acc[1])

    def doChgQty(self, frt, pag, r, c, p, i, w):
        self.rqty = w

    def doChgDel(self):
        self.sql.delRec("strrcp",
                        where=[("srr_cono", "=", self.opts["conum"]),
                               ("srr_group", "=", self.group),
                               ("srr_code", "=", self.code),
                               ("srr_loc", "=", self.loc),
                               ("srr_rgroup", "=", self.change[0]),
                               ("srr_rcode", "=", self.change[1])])
        self.doReadLoadRecipe()
        self.doChgExit()

    def doChgEnd(self):
        self.sql.updRec("strrcp",
                        cols=["srr_rgroup", "srr_rcode", "srr_rqty"],
                        data=[self.rgroup, self.rcode, self.rqty],
                        where=[("srr_cono", "=", self.opts["conum"]),
                               ("srr_group", "=", self.group),
                               ("srr_code", "=", self.loc),
                               ("srr_loc", "=", self.loc),
                               ("srr_rgroup", "=", self.change[0]),
                               ("srr_rcode", "=", self.change[1])])
        self.doReadLoadRecipe()
        self.doChgExit()

    def doChgExit(self):
        self.cg.closeProcess()

    def doDelete(self):
        trn = self.sql.getRec("strpot",
                              cols=["count(*)"],
                              where=[("pot_cono", "=", self.opts["conum"]),
                                     ("pot_group", "=", self.group),
                                     ("pot_code", "=", self.code)],
                              limit=1)
        if trn[0]:
            return "Purchase Orders Exist, Not Deleted"
        trn = self.sql.getRec("strtrn",
                              cols=["count(*)"],
                              where=[("stt_cono", "=", self.opts["conum"]),
                                     ("stt_group", "=", self.group),
                                     ("stt_code", "=", self.code),
                                     ("stt_loc", "=", self.loc)],
                              limit=1)
        if trn[0]:
            return "Stores Transactions Exist, Not Deleted"
        trn = self.sql.getRec("slsiv2",
                              cols=["count(*)"],
                              where=[("si2_cono", "=", self.opts["conum"]),
                                     ("si2_group", "=", self.group),
                                     ("si2_code", "=", self.code),
                                     ("si2_loc", "=", self.loc)],
                              limit=1)
        if trn[0]:
            return "Sales-2 Transactions Exist, Not Deleted"
        trn = self.sql.getRec("slsiv3",
                              cols=["count(*)"],
                              where=[("si3_cono", "=", self.opts["conum"]),
                                     ("si3_rgroup", "=", self.group),
                                     ("si3_rcode", "=", self.code)],
                              limit=1)
        if trn[0]:
            return "Sales-3 Transactions Exist, Not Deleted"
        self.sql.delRec("strmf2",
                        where=[("st2_cono", "=", self.opts["conum"]),
                               ("st2_group", "=", self.group),
                               ("st2_code", "=", self.code),
                               ("st2_loc", "=", self.loc)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["strmf2", "D", "%03i%-3s%-20s%-1s" % \
            (self.opts["conum"], self.group, self.code, self.loc), "", dte,
        self.opts["capnm"], "", "", "", 0])
        st2 = self.sql.getRec("strmf2",
                              cols=["count(*)"],
                              where=[("st2_cono", "=", self.opts["conum"]),
                                     ("st2_group", "=", self.group),
                                     ("st2_code", "=", self.code)],
                              limit=1)
        if not st2[0]:
            self.sql.delRec("strmf1",
                            where=[("st1_cono", "=", self.opts["conum"]),
                                   ("st1_group", "=", self.group),
                                   ("st1_code", "=", self.code)])
            self.sql.insRec("chglog", data=["strmf1", "D", "%03i%-3s%-20s" % \
                (self.opts["conum"], self.group, self.code), "", dte,
                self.opts["capnm"], "", "", "", 0])
        # Other Files
        self.sql.delRec("strcst",
                        where=[("stc_cono", "=", self.opts["conum"]),
                               ("stc_group", "=", self.group),
                               ("stc_code", "=", self.code),
                               ("stc_loc", "=", self.loc)])
        self.sql.delRec("strprc",
                        where=[("stp_cono", "=", self.opts["conum"]),
                               ("stp_group", "=", self.group),
                               ("stp_code", "=", self.code),
                               ("stp_loc", "=", self.loc)])
        self.sql.delRec("strrcp",
                        where=[("srr_cono", "=", self.opts["conum"]),
                               ("srr_group", "=", self.group),
                               ("srr_code", "=", self.code),
                               ("srr_loc", "=", self.loc)])
        self.sql.delRec("strrcp",
                        where=[("srr_cono", "=", self.opts["conum"]),
                               ("srr_loc", "=", self.loc),
                               ("srr_rgroup", "=", self.group),
                               ("srr_rcode", "=", self.code)])
        self.sql.delRec("strvar",
                        where=[("stv_cono", "=", self.opts["conum"]),
                               ("stv_group", "=", self.group),
                               ("stv_code", "=", self.code),
                               ("stv_loc", "=", self.loc)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doDelRec(self):
        self.sql.delRec("strrcp",
                        where=[("srr_cono", "=", self.opts["conum"]),
                               ("srr_group", "=", self.group),
                               ("srr_code", "=", self.code),
                               ("srr_loc", "=", self.loc),
                               ("srr_rgroup", "=", self.rgroup),
                               ("srr_rcode", "=", self.rcode)])
        self.df.clearLine(2, focus=True)

    def doEnd(self):
        if self.df.frt == "T" and self.df.pag == 0:
            if self.newcode:
                self.df.focusField("T", 1, 1)
            else:
                if self.gtype == "R":
                    self.df.enableTag(2)
                self.df.skip[1] = [1]
                self.df.focusField("T", 1, 2, clr=False)
        elif self.df.frt == "T" and self.df.pag == 1:
            self.df.selPage("Basic-B")
        elif self.df.frt == "T" and self.df.pag == 2:
            if self.gtype == "R":
                self.df.selPage("Recipes")
            else:
                self.doEnder()
        elif self.df.frt == "C" and self.df.pag == 3:
            data = [
                self.opts["conum"], self.group, self.code, self.loc,
                self.rgroup, self.rcode, self.rqty
            ]
            if self.newrec == "y":
                self.sql.insRec("strrcp", data=data)
                self.df.advanceLine(3)
            else:
                whr = [("srr_cono", "=", self.opts["conum"]),
                       ("srr_group", "=", self.group),
                       ("srr_code", "=", self.code),
                       ("srr_loc", "=", self.loc),
                       ("srr_rgroup", "=", self.rgroup),
                       ("srr_rcode", "=", self.rcode)]
                self.sql.updRec("strrcp", data=data, where=whr)
                self.doReadLoadRecipe()

    def doEnder(self):
        data = [self.opts["conum"]]
        for x in range(0, 2):
            data.append(self.df.t_work[0][0][x])
        for x in range(0, len(self.df.t_work[1][0])):
            if x in (3, 6, 8, 10, 12, 14):
                continue
            data.append(self.df.t_work[1][0][x])
        if self.newcode:
            self.sql.insRec("strmf1", data=data)
        elif data != self.old1[:len(data)]:
            col = self.sql.strmf1_col
            data.append(self.old1[col.index("st1_xflag")])
            self.sql.updRec("strmf1",
                            data=data,
                            where=[("st1_cono", "=", self.opts["conum"]),
                                   ("st1_group", "=", self.group),
                                   ("st1_code", "=", self.code)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old1):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "strmf1", "U",
                            "%03i%-3s%-20s" %
                            (self.opts["conum"], self.group, self.code),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        data = [self.opts["conum"], self.group, self.code, self.loc]
        for x in range(0, 4):
            data.append(self.df.t_work[2][0][x])
        if self.newloc == "Y":
            self.sql.insRec("strmf2", data=data)
        elif data != self.old2[:len(data)]:
            col = self.sql.strmf2_col
            data.append(self.old2[col.index("st2_xflag")])
            self.sql.updRec("strmf2",
                            data=data,
                            where=[("st2_cono", "=", self.opts["conum"]),
                                   ("st2_group", "=", self.group),
                                   ("st2_code", "=", self.code),
                                   ("st2_loc", "=", self.loc)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old2):
                if dat != data[num]:
                    self.sql.insRec("chglog",
                                    data=[
                                        "strmf2", "U",
                                        "%03i%-3s%-20s%-1s" %
                                        (self.opts["conum"], self.group,
                                         self.code, self.loc), col[num], dte,
                                        self.opts["capnm"],
                                        str(dat),
                                        str(data[num]), "", 0
                                    ])
        self.sql.delRec("strcmu",
                        where=[("smc_cono", "=", self.opts["conum"]),
                               ("smc_group", "=", self.group),
                               ("smc_code", "=", self.code),
                               ("smc_loc", "=", self.loc)])
        for num, mup in enumerate(self.df.t_work[2][0][4:]):
            if mup and mup != self.mups[num]:
                self.sql.insRec("strcmu",
                                data=[
                                    self.opts["conum"], self.group, self.code,
                                    self.loc, num + 1, mup
                                ])
        self.opts["mf"].dbm.commitDbase()
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)

    def doReadLoadRecipe(self):
        self.df.clearFrame("C", 3)
        self.df.focusField("C", 3, 1)
        rec = self.sql.getRec(
            tables=["strrcp", "strmf1"],
            cols=["srr_rgroup", "srr_rcode", "st1_desc", "srr_rqty"],
            where=[("srr_cono", "=", self.opts["conum"]),
                   ("srr_group", "=", self.group),
                   ("srr_code", "=", self.code), ("srr_loc", "=", self.loc),
                   ("st1_cono=srr_cono", ), ("st1_group=srr_rgroup", ),
                   ("st1_code=srr_rcode", )])
        if rec:
            mxs = (self.df.rows[3] - 1) * self.df.colq[3]
            for l, r in enumerate(rec):
                for i, d in enumerate(r):
                    c = l * self.df.colq[3]
                    if c > mxs:
                        c = mxs
                    self.df.loadEntry("C", 3, (c + i), data=d)
                self.df.advanceLine(3)

    def doExit(self):
        if self.df.frt == "T" and self.df.pag == 0:
            self.doQuit()
        elif self.df.frt == "T" and self.df.pag == 1:
            if self.newcode:
                self.df.focusField("T", 1, 1)
            else:
                self.df.skip[1] = [1]
                self.df.focusField("T", 1, 2, clr=False)
        elif self.df.frt == "T" and self.df.pag == 2:
            self.df.focusField("T", 2, 1)
        elif self.df.frt == "C" and self.df.pag == 3:
            if self.df.col == 1:
                self.df.focusField("C", 3, 1)
            else:
                self.doEnder()

    def doAccept(self):
        ok = "yes"
        for page in (1, 2):
            frt, pag, col, err = self.df.doCheckFields(("T", page, None))
            if err:
                ok = "no"
                if pag and pag != self.df.pag:
                    self.df.selPage(self.df.tags[pag - 1][0])
                self.df.focusField(frt, pag, (col + 1), err=err)
                break
        if ok == "yes":
            self.doEnder()

    def doQuit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)
Пример #8
0
class msc110(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       ["ctlsys", "ctlpwu", "chglog", "genmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            if self.sql.error == ["genmst"]:
                self.gl = False
            else:
                return
        else:
            self.gl = True
        self.acc = self.sql.getRec("ctlsys", limit=1)
        if not self.acc:
            self.new = True
            self.acc = [
                0, "N", 0, 0, 0, "", 0, 0, 0, "", "", "N", "", "", "N", 0
            ]
        else:
            self.new = False
        return True

    def drawDialog(self):
        r1s = (("Yes", "Y"), ("No", "N"))
        r2s = (("None", "0"), ("STARTTLS", "1"), ("SSL/TLS", "2"))
        r3s = (("None", "0"), ("Normal", "1"), ("Encrypted", "2"))
        self.fld = (
            (("T",0,0,0),"IUI",2,"Years to Keep History","",
                self.acc[0],"N",self.doHist,None,None,None,None,
                "The number of years that historical data must be kept, "\
                "Use 0 for No Limit"),
            (("T",0,1,0),("IRB",r1s),0,"Enforce Passwords","",
                self.acc[1],"N",self.doMust,None,None,None),
            (("T",0,2,0),"IUI",2,"Minimum Characters","",
                self.acc[2],"N",None,None,None,None),
            (("T",0,3,0),"IUI",2,"Maximum Life (Days)","",
                self.acc[3],"N",None,None,None,None),
            (("T",0,4,0),"IUI",3,"Backup History (Days)","",
                self.acc[4],"N",None,None,None,None,None,
                "0 for No Limit"),
            (("T",0,5,0),"ITX",30,"SMTP Server","",
                self.acc[5],"N",self.doSmtp,None,None,None),
            (("T",0,6,0),("IRB",r2s),0,"SMTP Security","",
                self.acc[6],"N",None,None,None,None),
            (("T",0,7,0),("IRB",r3s),0,"SMTP Authentication","",
                self.acc[7],"N",self.doAuth,None,None,None),
            (("T",0,8,0),"IUI",4,"SMTP Port","",
                self.acc[8],"N",None,None,None,None),
            (("T",0,9,0),"ITX",20,"SMTP Username","",
                self.acc[9],"N",self.doUsr,None,None,None),
            (("T",0,10,0),"IHA",20,"SMTP Password","",
                self.acc[10],"N",None,None,None,None),
            (("T",0,11,0),("IRB",r1s),0,"SMS Service","",
                self.acc[11],"N",self.doSms,None,None,None),
            (("T",0,12,0),"ITX",20,"SMS Username","",
                self.acc[12],"N",self.doSmsUsr,None,None,None),
            (("T",0,13,0),"IHA",20,"SMS Password","",
                self.acc[13],"N",self.doSmsPwd,None,None,None),
            (("T",0,14,0),("IRB",r1s),0,"G/L Departments","",
                self.acc[14],"N",self.doGlDept,None,None,None,None,
                "G/L Account Numbers include Department Numbers"),
            (("T",0,15,0),"IUI",1,"Number of Digits","",
                self.acc[15],"N",None,None,None,None,None,
                "The Number of Digits used for Department Numbers"))
        but = (("Accept", None, self.doAccept, 0, (("T", 0, 1), ("T", 0, 6)),
                ("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,
                               focus=False)
        for n, f in enumerate(self.acc):
            self.df.loadEntry("T", 0, n, data=f)
        self.df.focusField("T", 0, 1, clr=False)

    def doHist(self, frt, pag, r, c, p, i, w):
        if w and w < 5:
            return "At least 5 Years of History should be kept"

    def doMust(self, frt, pag, r, c, p, i, w):
        if w == "N":
            self.df.loadEntry(frt, pag, p + 1, data=0)
            self.df.loadEntry(frt, pag, p + 2, data=0)
            return "sk2"

    def doSmtp(self, frt, pag, r, c, p, i, w):
        if not w:
            self.df.loadEntry(frt, pag, p + 1, data="0")
            self.df.loadEntry(frt, pag, p + 2, data="0")
            self.df.loadEntry(frt, pag, p + 3, data="")
            self.df.loadEntry(frt, pag, p + 4, data="")
            self.df.loadEntry(frt, pag, p + 5, data="")
            return "sk5"

    def doAuth(self, frt, pag, r, c, p, i, w):
        if not int(w):
            self.df.loadEntry(frt, pag, p + 1, 25)
            self.df.loadEntry(frt, pag, p + 2, "")
            self.df.loadEntry(frt, pag, p + 3, "")
            return "sk3"
        elif int(self.df.t_work[0][0][6]) == 1:
            self.df.loadEntry(frt, pag, p + 1, 587)
        elif int(self.df.t_work[0][0][6]) == 2:
            self.df.loadEntry(frt, pag, p + 1, 465)

    def doUsr(self, frt, pag, r, c, p, i, w):
        if not w:
            return "Invalid SMTP Name"

    def doSms(self, frt, pag, r, c, p, i, w):
        if w == "Y" and not chkMod("requests"):
            showError(self.opts["mf"].body, "Error", "Missing requests Module")
            w = "N"
            self.df.loadEntry(frt, pag, p, data=w)
        if w == "N":
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 2, data="")
            if not self.gl:
                self.df.loadEntry(frt, pag, p + 3, data="N")
                self.df.loadEntry(frt, pag, p + 4, data=0)
                return "sk4"
            return "sk2"

    def doSmsUsr(self, frt, pag, r, c, p, i, w):
        if not w:
            return "Invalid SMS User Name"

    def doSmsPwd(self, frt, pag, r, c, p, i, w):
        if not w:
            return "Invalid SMS Password"

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

    def doEnd(self):
        svr = self.df.t_work[0][0][5]
        if svr:
            prt = self.df.t_work[0][0][8]
            sec = self.df.t_work[0][0][6]
            aut = self.df.t_work[0][0][7]
            nam = self.df.t_work[0][0][9]
            pwd = self.df.t_work[0][0][10]
            chk = sendMail([svr, prt, sec, aut, nam, pwd],
                           "",
                           "",
                           "",
                           check=True,
                           err=self.opts["mf"].body,
                           wrkdir=self.opts["mf"].rcdic["wrkdir"])
            if not chk:
                self.df.focusField("T", 0, 6)
                return
        tme = time.localtime()
        data = copyList(self.df.t_work[0][0])
        if self.new:
            self.sql.insRec("ctlsys", data=data)
        elif data != self.acc[:len(data)]:
            self.sql.updRec("ctlsys", data=data)
            dte = int("%04i%02i%02i%02i%02i%02i" % tme[:-3])
            for num, dat in enumerate(self.acc):
                if dat != data[num]:
                    self.sql.insRec("chglog",
                                    data=[
                                        "ctlsys", "U",
                                        "%03i" % 0, self.sql.ctlsys_col[num],
                                        dte, self.opts["capnm"],
                                        str(dat),
                                        str(data[num]), "", 0
                                    ])
        # Reset all password dates to current date (Temporary Fix)
        dte = (tme[0] * 10000) + (tme[1] * 100) + tme[2]
        self.sql.updRec("ctlpwu", cols=["usr_last"], data=[dte])
        self.opts["mf"].dbm.commitDbase()
        self.doExit()

    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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #9
0
class rc1020(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,
                       ["chglog", "rcaprm", "rcaowm", "rcatnm"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        own = {
            "stype":
            "R",
            "tables": ("rcaowm", ),
            "cols":
            (("rom_acno", "", 0, "Own-Cod"), ("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)]
        }
        self.fld = [(("T", 0, 0, 0), "INA", 7, "Owner Code", "Owner", "", "N",
                     self.doOwnCod, own, None, ("notblank", )),
                    (("T", 0, 0, 0), "ONA", 30, "Name"),
                    (("T", 0, 1, 0), "INA", 7, "Premises Code", "Premises", "",
                     "N", self.doPrmCod, prm, None, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 6, 0), "INA", 4, "Postal Code", "PCod", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 7, 0), "IUD", 6.2, "Commission Rate", "C-Rate",
                     "", "N", None, None, None, ("efld", ))]
        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 doOwnCod(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
        self.name = acc[0]
        self.df.loadEntry(frt, pag, p + 1, data=self.name)

    def doPrmCod(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.old = self.sql.getRec("rcaprm",
                                   where=[("rcp_cono", "=",
                                           self.opts["conum"]),
                                          ("rcp_owner", "=", self.owner),
                                          ("rcp_code", "=", self.code)],
                                   limit=1)
        if not self.old:
            self.new = "y"
        else:
            self.new = "n"
            for num, dat in enumerate(self.old[2:-1]):
                self.df.loadEntry(frt, pag, p + num, data=dat)

    def doDelete(self):
        mst = self.sql.getRec("rcatnm",
                              cols=["count(*)"],
                              where=[("rtn_cono", "=", self.opts["conum"]),
                                     ("rtn_code", "=", self.code)],
                              limit=1)
        if mst[0]:
            return "Accounts Exist, Not Deleted"
        self.sql.delRec("rcaprm",
                        where=[("rcp_cono", "=", self.opts["conum"]),
                               ("rcp_code", "=", self.code)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["rcaprm", "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):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if x == 1:
                continue
            data.append(self.df.t_work[0][0][x])
        if self.new == "y":
            self.sql.insRec("rcaprm", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.rcaprm_col
            data.append(self.old[col.index("rcp_xflag")])
            self.sql.updRec("rcaprm",
                            data=data,
                            where=[("rcp_cono", "=", self.opts["conum"]),
                                   ("rcp_code", "=", self.code)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "rcaprm", "U",
                            "%03i%-7s" % (self.opts["conum"], self.code),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[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()
Пример #10
0
class stc310(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, ["ctlvmf", "genmst", "strmf1",
            "strgrp", "strgmu"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.glint = strctl["cts_glint"]
        self.plevs = strctl["cts_plevs"]
        self.automu = strctl["cts_automu"]
        return True

    def mainProcess(self):
        gpm = {
            "stype": "R",
            "tables": ("strgrp",),
            "cols": (
                ("gpm_group", "", 0, "Grp"),
                ("gpm_desc", "", 0, "Description", "Y")),
            "where": [("gpm_cono", "=", self.opts["conum"])]}
        vtm = {
            "stype": "R",
            "tables": ("ctlvmf",),
            "cols": (
                ("vtm_code", "", 0, "C"),
                ("vtm_desc", "", 0, "Description", "Y")),
            "where": [("vtm_cono", "=", self.opts["conum"])]}
        glm = {
            "stype": "R",
            "tables": ("genmst",),
            "cols": (
                ("glm_acno", "", 0, "Acc-Num"),
                ("glm_desc", "", 0, "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]}
        self.fld = [
            (("T",0,0,0),"IUA",3,"Product Group","",
                "","N",self.doGroup,gpm,None,("notblank",)),
            (("T",0,1,0),"INA",30,"Description","",
                "","N",None,None,self.doDelete,("notblank",)),
            (("T",0,2,0),"IUA",1,"Vat Code","",
                "","N",self.doVat,vtm,None,("notblank",))]
        row = 3
        if self.glint == "Y":
            self.fld.append((("T",0,3,0),"IUI",7,"Sales Account","",
                "","N",self.doSales,glm,None,("notzero",)))
            self.fld.append((("T",0,3,0),"ONA",30,""))
            self.fld.append((("T",0,4,0),"IUI",7,"COS Account","",
                "","N",self.doCos,glm,None,("notzero",)))
            self.fld.append((("T",0,4,0),"ONA",30,""))
            row = 5
        if self.automu in ("A", "L"):
            self.fld.append((("T",0,row,0),"IUD",5.1,"Mark-Up    Lv1","",
                "","N",None,None,None,("efld",)))
            if self.plevs > 1:
                for x in range(1, self.plevs):
                    self.fld.append((("T",0,row,0),"IUD",5.1,"Lv%s" % (x+1),"",
                        "","N",None,None,None,("efld",)))
        but = (
            ("Accept",None,self.doAccept,0,("T",0,2),("T",0,0)),
            ("Cancel",None,self.doCancel,0,("T",0,2),("T",0,0)))
        tnd = ((self.doEnd,"Y"), )
        txt = (self.doCloseProcess, )
        self.df = TartanDialog(self.opts["mf"], eflds=self.fld,
            butt=but, tend=tnd, txit=txt)

    def doGroup(self, frt, pag, r, c, p, i, w):
        self.group = w
        self.acc = self.sql.getRec("strgrp", where=[("gpm_cono", "=",
            self.opts["conum"]), ("gpm_group", "=", self.group)], limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            col = self.sql.strgrp_col
            self.df.loadEntry(frt, pag, p+1,
                    data=self.acc[col.index("gpm_desc")])
            self.df.loadEntry(frt, pag, p+2,
                    data=self.acc[col.index("gpm_vatcode")])
            p = 3
            if self.glint == "Y":
                self.df.loadEntry(frt, pag, p,
                        data=self.acc[col.index("gpm_sales")])
                des = self.getGenDesc(self.acc[col.index("gpm_sales")])
                if not des:
                    self.df.loadEntry(frt, pag, p+1,
                            data="Invalid Sales Code")
                else:
                    self.df.loadEntry(frt, pag, p+1,
                            data=des[0])
                self.df.loadEntry(frt, pag, p+2,
                        data=self.acc[col.index("gpm_costs")])
                des = self.getGenDesc(self.acc[col.index("gpm_costs")])
                if not des:
                    self.df.loadEntry(frt, pag, p+3,
                            data="Invalid Costs Code")
                else:
                    self.df.loadEntry(frt, pag, p+3,
                            data=des[0])
                p = 7
            if self.automu in ("A", "L"):
                for lev in range(self.plevs):
                    mup = self.sql.getRec("strgmu", cols=["smg_markup"],
                        where=[("smg_cono", "=", self.opts["conum"]),
                        ("smg_group", "=", self.group), ("smg_level",
                        "=", lev + 1)], limit=1)
                    if not mup:
                        mup = [0]
                    self.df.loadEntry(frt, pag, p+lev, data=mup[0])

    def doVat(self, frt, pag, r, c, p, i, w):
        vat = self.sql.getRec("ctlvmf", cols=["vtm_desc"],
            where=[("vtm_cono", "=", self.opts["conum"]), ("vtm_code", "=",
            w)], limit=1)
        if not vat:
            return "Invalid VAT Code"
        self.code = w

    def doSales(self, frt, pag, r, c, p, i, w):
        acc = self.getGenDesc(w)
        if not acc:
            return "Invalid Sales Code"
        self.sales = w
        self.df.loadEntry("T", 0, 4, data=acc[0])

    def doCos(self, frt, pag, r, c, p, i, w):
        acc = self.getGenDesc(w)
        if not acc:
            return "Invalid COS Code"
        self.cos = w
        self.df.loadEntry("T", 0, 6, data=acc[0])

    def doDelete(self):
        st1 = self.sql.getRec("strmf1", cols=["count(*)"],
            where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=",
            self.group)], limit=1)
        if st1[0]:
            return "Records Exist for this Group, Not Deleted"
        self.sql.delRec("strgrp", where=[("gpm_cono", "=", self.opts["conum"]),
            ("gpm_group", "=", self.group)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if x == 7:
                break
            if self.glint == "Y":
                # Account Names
                if x in (4, 6):
                    continue
            elif x == 3:
                data.append(0)
                data.append(0)
                break
            data.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("strgrp", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.strgrp_col
            data.append(self.acc[col.index("gpm_xflag")])
            self.sql.updRec("strgrp", data=data, where=[("gpm_cono",
                "=", self.opts["conum"]), ("gpm_group", "=", self.group)])
        self.sql.delRec("strgmu", where=[("smg_cono", "=", self.opts["conum"]),
            ("smg_group", "=", self.group)])
        if self.automu in ("A", "L"):
            for lvl, mup in enumerate(self.df.t_work[0][0][x:]):
                if not mup:
                    continue
                self.sql.insRec("strgmu", data=[self.opts["conum"],
                    self.group, lvl + 1, mup])
        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 getGenDesc(self, acno):
        return self.sql.getRec("genmst", cols=["glm_desc"],
            where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=",
            acno)], limit=1)

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

    def doCloseProcess(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #11
0
class bkc510(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, ["chglog", "bkmcon", "bkmmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        bkmctl = gc.getCtl("bkmctl", self.opts["conum"])
        if not bkmctl:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def mainProcess(self):
        con = {
            "stype":
            "R",
            "tables": ("bkmcon", ),
            "cols":
            (("bkc_ccode", "", 0, "Code"), ("bkc_title", "", 0, "Title"),
             ("bkc_sname", "", 0, "Surname",
              "Y"), ("bkc_names", "", 0, "Names", "F"), ("bkc_email", "", 0,
                                                         "Email Address"))
        }
        self.fld = ((("T", 0, 0, 0), "IUA", 7, "Code", "", "", "Y",
                     self.doCode, con, None, None),
                    (("T", 0, 1, 0), "ITX", 6, "Title", "", "", "N",
                     self.doTitle, None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "ITX", 30, "Surname", "", "", "N",
                     self.doSurname, None, None, ("notblank", )),
                    (("T", 0, 3, 0), "ITX", 30, "Names", "", "", "N",
                     self.doNames, None, None, ("notblank", )),
                    (("T", 0, 4, 0), "ITX", 30, "Address Line 1", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 5, 0), "ITX", 30, "Address Line 2",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 6, 0), "ITX", 30, "Address Line 3", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 7, 0), "ITX", 4, "Postal Code", "",
                                   "", "N", None, None, None, ("efld", )),
                    (("T", 0, 8, 0), "ITX", 20, "Telephone Number", "", "",
                     "N", None, None, None,
                     ("efld", )), (("T", 0, 9, 0), "ITX", 20, "Fax Number", "",
                                   "", "N", None, None, None,
                                   ("efld", )), (("T", 0, 10, 0), "ITX", 20,
                                                 "Mobile Number", "", "", "N",
                                                 None, None, None, ("efld", )),
                    (("T", 0, 11, 0), "ITX", 30, "E-Mail Address", "", "", "N",
                     None, None, None,
                     ("email", )), (("T", 0, 12, 0), "INA", 10, "V.A.T Number",
                                    "", "", "N", None, None, None, ("efld", )))
        but = (
            ("Import",None,self.doImport,0,("T",0,1),("T",0,2),
                "Import Contact Details from a CSV or XLS File having "\
                "the following fields: Code, Title, Surname, Names, "\
                "Address Line1, Line2, Line3, Postal Code, Telephone Number, "\
                "Fax Number, Mobile Number, Email Address, VAT Number"),
            ("Accept",None,self.doAccept,0,("T",0,2),("T",0,1)),
            ("Print", None, self.doPrint,0,("T",0,2),("T",0,1)),
            ("Quit", None, self.doExit,1,None,None))
        tnd = ((self.doAccept, "N"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               clicks=self.doClick)

    def doClick(self, *opts):
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.ccode = w
        if w:
            self.oldcon = self.sql.getRec("bkmcon",
                                          where=[("bkc_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bkc_ccode", "=", w)],
                                          limit=1)
            if not self.oldcon:
                return "Invalid Contact Code"
            self.newcon = False
            self.title = self.oldcon[self.sql.bkmcon_col.index("bkc_title")]
            self.sname = self.oldcon[self.sql.bkmcon_col.index("bkc_sname")]
            self.names = self.oldcon[self.sql.bkmcon_col.index("bkc_names")]
            self.email = self.oldcon[self.sql.bkmcon_col.index("bkc_email")]
            for num, dat in enumerate(self.oldcon[1:-1]):
                self.df.loadEntry("T", 0, num, data=dat)
        else:
            self.newcon = True
        self.acno = w

    def doTitle(self, frt, pag, r, c, p, i, w):
        self.title = w

    def doSurname(self, frt, pag, r, c, p, i, w):
        self.sname = w

    def doNames(self, frt, pag, r, c, p, i, w):
        self.names = w

    def doEmail(self, frt, pag, r, c, p, i, w):
        self.email = w

    def doDelete(self):
        chk = self.sql.getRec("bkmmst",
                              cols=["count(*)"],
                              where=[("bkm_cono", "=", self.opts["conum"]),
                                     ("bkm_ccode", "=", self.ccode)],
                              limit=1)
        if chk[0]:
            return "Bookings Exist, Not Deleted"
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.delRec("bkmcon",
                        where=[("bkc_cono", "=", self.opts["conum"]),
                               ("bkc_ccode", "=", self.ccode)])
        self.sql.insRec("chglog",
                        data=[
                            "bkmcon", "D",
                            "%03i%-7s" % (self.opts["conum"], self.ccode), "",
                            dte, self.opts["capnm"], "", "", "", 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)
            return
        # Create/Update Record
        if self.newcon:
            self.ccode = self.genCode(self.sname)
            self.df.loadEntry("T", 0, 0, data=self.ccode)
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        data = [self.opts["conum"]]
        for x in range(len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.newcon:
            self.sql.insRec("bkmcon", data=data)
        elif data != self.oldcon[:len(data)]:
            col = self.sql.bkmcon_col
            data.append(self.oldcon[col.index("bkc_xflag")])
            self.sql.updRec("bkmcon",
                            data=data,
                            where=[("bkc_cono", "=", self.opts["conum"]),
                                   ("bkc_ccode", "=", self.ccode)])
            for num, dat in enumerate(self.oldcon):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "bkmcon", "U",
                            "%03i%-7s" % (self.opts["conum"], self.ccode),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doImport(self):
        self.df.setWidget(self.df.mstFrame, state="hide")
        fi = FileImport(self.opts["mf"], imptab="bkmcon", impskp=["bkc_cono"])
        sp = ProgressBar(self.opts["mf"].body,
                         typ="Importing Contacts",
                         mxs=len(fi.impdat))
        err = None
        for num, line in enumerate(fi.impdat):
            sp.displayProgress(num)
            if not line[0]:
                if not line[2]:
                    err = "Blank Code and Blank Surname"
                    break
                chk = self.sql.getRec("bkmcon",
                                      where=[("bkc_cono", "=",
                                              self.opts["conum"]),
                                             ("bkc_sname", "=", line[2]),
                                             ("bkc_names", "=", line[3])],
                                      limit=1)
                if chk:
                    err = "%s: %s %s: %s\n\nAlready Exists" % (
                        fi.impcol[2][0], line[2], fi.impcol[3][0], line[3])
                    break
                for _ in range(1, 100):
                    line[0] = self.genCode(line[2])
                    chk = self.sql.getRec("bkmcon",
                                          where=[("bkc_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bkc_ccode", "=", line[0])],
                                          limit=1)
                    if not chk:
                        break
            else:
                chk = self.sql.getRec("bkmcon",
                                      where=[("bkc_cono", "=",
                                              self.opts["conum"]),
                                             ("bkc_ccode", "=", line[0])],
                                      limit=1)
                if chk:
                    err = "%s: %s %s: %s\n\nAlready Exists" % (
                        fi.impcol[0][0], line[0], fi.impcol[2][0], line[2])
                    break
            if not line[1]:
                line[1] = "Ms"
            if not line[2]:
                err = "Blank Surname"
                break
            if not line[3]:
                err = "Blank Names"
                break
            line.insert(0, self.opts["conum"])
            self.sql.insRec("bkmcon", data=line)
        sp.closeProgress()
        if err:
            err = "Line %s: %s" % ((num + 1), err)
            showError(
                self.opts["mf"].body, "Import Error", """%s

Please Correct your Import File and then Try Again.""" % err)
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPrint(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        TabPrt(self.opts["mf"],
               self.opts["conum"],
               self.opts["conam"],
               name=self.__class__.__name__,
               tabs="bkmcon",
               where=[("bkc_cono", "=", self.opts["conum"]),
                      ("bkc_ccode", "=", self.ccode)])
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def genCode(self, sname):
        # Remove invalid characters
        sname = sname.replace(" ", "")
        for c in (" ", ".", ",", ";", ":", "'", '"'):
            sname = sname.replace(c, "")
        if len(sname) < 5:
            sname = sname + ("0" * (5 - len(sname)))
        ccod1 = ""
        for c in range(0, 5):
            ccod1 = (ccod1 + sname[c]).upper()
        ccod1 = ccod1.strip()
        text = "%s%0" + str((7 - len(ccod1))) + "d"
        for x in range(1, 100):
            ccod2 = text % (ccod1, x)
            chk = self.sql.getRec("bkmcon",
                                  where=[("bkc_cono", "=", self.opts["conum"]),
                                         ("bkc_ccode", "=", ccod2)],
                                  limit=1)
            if not chk:
                break
        return ccod2

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #12
0
class rc1010(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", "rcaowm", "rcaowt", "chglog"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.gc = GetCtl(self.opts["mf"])
        ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        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"])]
        }
        self.fld = ((("T", 0, 0, 0), "INA", 7, "Account Number", "", "", "Y",
                     self.doOwner, own, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Name", "", "", "N", None,
                     None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 4, 0), "INA", 30, "Address Line 3",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 4, "Postal Code", "PCod", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 6, 0), "INA", 20, "Home Number", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 7, 0), "INA", 20, "Office Number",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 8, 0), "INA", 20, "Mobile Number", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 9, 0), "INA", 20, "Fax Number", "",
                                   "", "N", None, None, None, ("efld", )),
                    (("T", 0, 10, 0), "ITX", 50, "E-Mail Address", "", "", "N",
                     None, None, None, ("email", )),
                    (("T", 0, 11, 0), "INA", 10, "VAT Number",
                     "VAT-Number", "", "N", None, None, None,
                     ("efld", )), (("T", 0, 12, 0), "IUA", 1, "VAT Default",
                                   "V", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 13, 0), "INA", 20, "Bank Name", "Bank-Name", "",
                     "N", None, None, None,
                     ("efld", )), (("T", 0, 14, 0), "IUI", 8, "Bank Branch",
                                   "Bank-IBT", "", "N", None, None, None,
                                   ("efld", )), (("T", 0, 15, 0), "INA", 16,
                                                 "Bank Account",
                                                 "Bank-Account-Num", "", "N",
                                                 None, None, None, ("efld", )))
        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):
        self.acno = w
        self.oldm = self.sql.getRec("rcaowm",
                                    where=[("rom_cono", "=",
                                            self.opts["conum"]),
                                           ("rom_acno", "=", self.acno)],
                                    limit=1)
        if not self.oldm:
            self.new = "y"
            for num in range(2, self.df.topq[0]):
                self.df.clearEntry(frt, pag, num + 1)
        else:
            self.new = "n"
            for num, fld in enumerate(self.oldm[1:-1]):
                self.df.loadEntry(frt, pag, p + num, data=fld)
            trn = self.sql.getRec("rcaowt",
                                  cols=["count(*)"],
                                  where=[("rot_cono", "=", self.opts["conum"]),
                                         ("rot_acno", "=", self.acno)],
                                  limit=1)
            if trn[0]:
                self.trn = True
            else:
                self.trn = False

    def doName(self, frt, pag, r, c, p, i, w):
        pass

    def doTelno(self, frt, pag, r, c, p, i, w):
        pass

    def doEmail(self, frt, pag, r, c, p, i, w):
        pass

    def doVatInd(self, frt, pag, r, c, p, i, w):
        pass

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

    def doStart(self, frt, pag, r, c, p, i, w):
        pass

    def doPeriod(self, frt, pag, r, c, p, i, w):
        pass

    def doPayInd(self, frt, pag, r, c, p, i, w):
        pass

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

    def doStatus(self, frt, pag, r, c, p, i, w):
        pass

    def doDelete(self):
        if self.trn:
            return "Transactions Exist, Not Deleted"
        self.sql.delRec("rcaowm",
                        where=[("rom_cono", "=", self.opts["conum"]),
                               ("rom_acno", "=", self.acno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["rcaowm", "D", "%03i%-7s" % \
            (self.opts["conum"], self.acno), "", dte, self.opts["capnm"],
            "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        datm = [self.opts["conum"]]
        for num, fld in enumerate(self.df.t_work[0][0]):
            datm.append(fld)
        if self.new == "y":
            self.sql.insRec("rcaowm", data=datm)
        elif datm != self.oldm[:len(datm)]:
            col = self.sql.rcaowm_col
            datm.append(self.oldm[col.index("rom_xflag")])
            self.sql.updRec("rcaowm",
                            data=datm,
                            where=[("rom_cono", "=", self.opts["conum"]),
                                   ("rom_acno", "=", self.acno)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.oldm):
                if dat != datm[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "rcaowm", "U",
                            "%03i%-7s" % (self.opts["conum"], self.acno),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(datm[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()
Пример #13
0
class drc210(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        drsctl = gc.getCtl("drsctl", self.opts["conum"])
        if not drsctl:
            return
        if drsctl["ctd_chain"] == "N":
            showError(self.opts["mf"].body, "Error",
                      "Chain Stores are Not Enabled")
            return
        self.sql = Sql(self.opts["mf"].dbm, ["ctlvmf", "drschn"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        chm = {
            "stype": "R",
            "tables": ("drschn", ),
            "cols":
            (("chm_chain", "", 0, "Chn"), ("chm_name", "", 0, "Name", "Y")),
            "where": [("chm_cono", "=", self.opts["conum"])]
        }
        vtm = {
            "stype":
            "R",
            "tables": ("ctlvmf", ),
            "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0,
                                                "Description", "Y")),
            "where": [("vtm_cono", "=", self.opts["conum"])]
        }
        self.fld = ((("T", 0, 0, 0), "IUI", 3, "Chn", "Chainstore Number", "",
                     "N", self.doChain, chm, None, ("notzero", )),
                    (("T", 0, 1, 0), "INA", 30, "Name", "", "", "N", None,
                     None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 4, 0), "INA", 30, "Address Line 3",
                                   "", "", "N", None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 4, "Postal Code", "", "", "N",
                     None, None, None,
                     ("efld", )), (("T", 0, 6, 0), "INA", 20, "Telephone", "",
                                   "", "N", None, None, None, ("efld", )),
                    (("T", 0, 7,
                      0), "INA", 20, "Fax", "", "", "N", None, None, None,
                     ("efld", )), (("T", 0, 8, 0), "ITX", 50, "E-Mail Address",
                                   "", "", "N", None, None, None, ("email", )),
                    (("T", 0, 9,
                      0), "INA", 30, "Contact", "", "", "N", None, None, None,
                     ("efld", )), (("T", 0, 10, 0), "IUA", 1, "Vat Code", "",
                                   "", "N", self.doVat, vtm, None,
                                   ("notblank", )), (("T", 0, 10, 0), "ONA",
                                                     30, ""))
        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 doChain(self, frt, pag, r, c, p, i, w):
        self.chain = w
        self.acc = self.sql.getRec("drschn",
                                   where=[("chm_cono", "=",
                                           self.opts["conum"]),
                                          ("chm_chain", "=", self.chain)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            vat = self.sql.getRec(
                "ctlvmf",
                cols=["vtm_desc"],
                where=[("vtm_cono", "=", self.opts["conum"]),
                       ("vtm_code", "=",
                        self.acc[self.sql.drschn_col.index("chm_vatind")])],
                limit=1)
            if not vat:
                txt = "Invalid Vat Record"
            else:
                txt = vat[0]
            for x in range(0, self.df.topq[pag]):
                if x == (self.df.topq[pag] - 1):
                    self.df.loadEntry(frt, pag, p + x, data=txt)
                else:
                    self.df.loadEntry(frt, pag, p + x, data=self.acc[x + 1])

    def doVat(self, frt, pag, r, c, p, i, w):
        vat = self.sql.getRec("ctlvmf",
                              cols=["vtm_desc"],
                              where=[("vtm_cono", "=", self.opts["conum"]),
                                     ("vtm_code", "=", w)],
                              limit=1)
        if not vat:
            return "Invalid Vat Record"
        self.df.loadEntry(frt, pag, p + 1, data=vat[0])

    def doDelete(self):
        self.sql.delRec("drschn",
                        where=[("chm_cono", "=", self.opts["conum"]),
                               ("chm_chain", "=", self.chain)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        dat = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if x == 11:
                continue
            dat.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("drschn", data=dat)
        elif dat != self.acc[:len(dat)]:
            col = self.sql.drschn_col
            dat.append(self.acc[col.index("chm_xflag")])
            self.sql.updRec("drschn",
                            data=dat,
                            where=[("chm_cono", "=", self.opts["conum"]),
                                   ("chm_chain", "=", self.chain)])
        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()
Пример #14
0
class stc410(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,
                       "strloc",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.locs = strctl["cts_locs"]
        if self.locs == "N":
            showError(self.opts["mf"].body, "Error",
                      "Multiple Locations Are Not Enabled")
            return
        return True

    def mainProcess(self):
        loc = {
            "stype":
            "R",
            "tables": ("strloc", ),
            "cols":
            (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Description", "Y")),
            "where": [("srl_cono", "=", self.opts["conum"])]
        }
        self.fld = ((("T", 0, 0, 0), "IUA", 1, "Location Code", "", "", "N",
                     self.doLoc, loc, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 2,
                      0), "INA", 30, "Address Line 1", "", "", "N", None, None,
                     None, None), (("T", 0, 3, 0), "INA", 30, "Address Line 2",
                                   "", "", "N", None, None, None, None),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None, None), (("T", 0, 5, 0), "INA", 30,
                                               "Address Line 4", "", "", "N",
                                               None, None, None, None))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2), ("T", 0, 0)))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doCloseProcess, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doLoc(self, frt, pag, r, c, p, i, w):
        if w == "0":
            return "Invalid Location"
        self.loc = w
        self.acc = self.sql.getRec("strloc",
                                   where=[("srl_cono", "=",
                                           self.opts["conum"]),
                                          ("srl_loc", "=", self.loc)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            for x in range(1, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=self.acc[x + 1])

    def doDelete(self):
        self.sql.delRec("strloc",
                        where=[("srl_cono", "=", self.opts["conum"]),
                               ("srl_loc", "=", self.loc)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("strloc", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.strloc_col
            data.append(self.acc[col.index("srl_xflag")])
            self.sql.updRec("strloc",
                            data=data,
                            where=[("srl_cono", "=", self.opts["conum"]),
                                   ("srl_loc", "=", self.loc)])
        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 doCloseProcess(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #15
0
class crc110(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        mods = ctlmst["ctm_modules"]
        self.genleg = False
        for x in range(0, len(mods), 2):
            if mods[x:x + 2] == "GL":
                self.genleg = True
                break
        tabs = ["crsctl", "tplmst", "chglog"]
        if self.genleg:
            tabs.extend(["ctlctl", "genmst"])
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.acc = self.sql.getRec("crsctl", where=[("ctc_cono", "=",
            self.opts["conum"])], limit=1)
        if not self.acc:
            self.new = True
            self.acc = [self.opts["conum"], "N", "E", "", 0, 0,
                "remittance_advice", "", ""]
        else:
            self.new = False
        if self.genleg:
            self.ctl = [
                ["crs_ctl", "Creditors Control", 0],
                ["dis_rec", "Discount Received", 0]]
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            for num, ctl in enumerate(self.ctl):
                if ctl[0] in ctlctl:
                    self.ctl[num][2] = ctlctl[ctl[0]]
        return True

    def drawDialog(self):
        ctl = {
            "stype": "R",
            "tables": ("ctlctl", "genmst"),
            "cols": (
                ("ctl_code", "", 0, "Ctl-Code"),
                ("ctl_conacc", "", 0, "G/L-Num"),
                ("glm_desc", "", 30, "Description")),
            "where": [
                ("ctl_cono", "=", self.opts["conum"]),
                ("ctl_code", "like", "bank_%"),
                ("glm_cono=ctl_cono",),
                ("glm_acno=ctl_conacc",)],
            "index": 1}
        tpm = {
            "stype": "R",
            "tables": ("tplmst",),
            "cols": (
                ("tpm_tname", "", 0, "Template"),
                ("tpm_title", "", 0, "Title"),
                ("tpm_type", "", 0, "T")),
            "where": [
                ("tpm_type", "=", "R"),
                ("tpm_system", "=", "CRS")],
            "order": "tpm_tname"}
        r1s = (("Yes","Y"),("No","N"))
        r2s = (("Exclusive","E"),("Inclusive","I"))
        if self.genleg:
            glm = {
                "stype": "R",
                "tables": ("genmst",),
                "cols": (
                    ("glm_acno", "", 0, "G/L-Num"),
                    ("glm_desc", "", 30, "Description")),
                "where": [
                    ("glm_cono", "=", self.opts["conum"])]}
            fld = [
                (("T",0,0,0),("IRB",r1s),0,"G/L Integration","",
                    self.acc[1],"N",self.doGlint,None,None,None),
                (("T",0,1,0),"IUI",7,self.ctl[0][1],"",
                    self.ctl[0][2],"N",self.doGenAcc,glm,None,("efld",)),
                (("T",0,1,0),"ONA",30,""),
                (("T",0,2,0),"IUI",7,self.ctl[1][1],"",
                    self.ctl[1][2],"N",self.doGenAcc,glm,None,("efld",)),
                (("T",0,2,0),"ONA",30,""),
                (("T",0,3,0),("IRB",r2s),0,"G/L Input Method","",
                    self.acc[2],"N",None,None,None,None),
                (("T",0,4,0),"INA",4,"Best Account Code","Best",
                    self.acc[3],"N",self.doBestAcc,None,None,("efld",)),
                (("T",0,5,0),"IUI",2,"Best Account Type","BT",
                    self.acc[4],"N",None,None,None,("efld",)),
                (("T",0,6,0),"IUI",7,"Bank Account Code","Bank-Ac",
                    self.acc[5],"N",self.doBankAcc,ctl,None,("efld",))]
            seq = 7
        else:
            fld = []
            seq = 0
        fld.extend([
            (("T",0,seq,0),"INA",20,"Remittance Template","",
                self.acc[6],"N",self.doTplNam,tpm,None,("efld",)),
            (("T",0,seq + 1,0),"ITX",50,"Email Address","",
                self.acc[7],"N",None,None,None,("email",))])
        but = (
            ("Accept",None,self.doAccept,0,("T",0,1),("T",0,0)),
            ("Quit",None,self.doExit,1,None,None))
        tnd = ((self.doEnd,"Y"),)
        txt = (self.doExit,)
        self.df = TartanDialog(self.opts["mf"], eflds=fld,
            butt=but, tend=tnd, txit=txt)
        if not self.new:
            s = 0
            for n, f in enumerate(self.acc[1:-1]):
                if not self.genleg and n < 5:
                    continue
                self.df.loadEntry("T", 0, s, data=f)
                s += 1
                if not n:
                    for c in self.ctl:
                        self.df.loadEntry("T", 0, s, data=c[2])
                        s += 1
                        self.df.loadEntry("T", 0, s, data=self.getDes(c[2]))
                        s += 1
            self.df.focusField("T", 0, 1, clr=False)

    def doGlint(self, frt, pag, r, c, p, i, w):
        self.glint = w
        if self.glint == "N":
            for x in range(1, 5):
                self.df.loadEntry(frt, pag, p+x, data="")
            self.df.loadEntry(frt, pag, p+5, data="E")
            return "sk5"

    def doGenAcc(self, frt, pag, r, c, p, i, w):
        des = self.getDes(w)
        if not des:
            return "Invalid Account Number"
        self.df.loadEntry(frt, pag, p+1, data=des)

    def getDes(self, acno):
        acc = self.sql.getRec("genmst", cols=["glm_desc"],
            where=[("glm_cono", "=", self.opts["conum"]),
            ("glm_acno", "=", acno)], limit=1)
        if acc:
            return acc[0]
        else:
            return ""

    def doBestAcc(self, frt, pag, r, c, p, i, w):
        if not w or self.glint == "N":
            self.df.loadEntry(frt, pag, p+1, data="")
            self.df.loadEntry(frt, pag, p+2, data=0)
            return "sk2"

    def doBankAcc(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec(tables=["genmst", "ctlctl"], cols=["glm_desc"],
            where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", w),
                ("ctl_code", "like", "bank_%"), ("ctl_cono=glm_cono",),
                ("ctl_conacc=glm_acno",)], limit=1)
        if not acc:
            return "Invalid Bank Account"

    def doTplNam(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("tplmst", where=[("tpm_tname", "=", w),
            ("tpm_type", "=", "R"), ("tpm_system", "=", "CRS")], limit=1)
        if not acc:
            return "Invalid Template"

    def doEnd(self):
        data = [self.opts["conum"]]
        if not self.genleg:
            data.extend(["N", "E", "", 0, 0])
        for x, d in enumerate(self.df.t_work[0][0]):
            if self.genleg and x < 9:
                if x in (1, 3):
                    y = int((x - 1) / 2)
                    chk = self.sql.getRec("ctlctl", where=[("ctl_cono",
                        "=", self.opts["conum"]), ("ctl_code", "=",
                        self.ctl[y][0])], limit=1)
                    if chk:
                        self.sql.updRec("ctlctl", cols=["ctl_conacc"], data=[d],
                            where=[("ctl_cono", "=", self.opts["conum"]),
                            ("ctl_code", "=", self.ctl[y][0])])
                    else:
                        self.sql.insRec("ctlctl", data=[self.opts["conum"],
                            self.ctl[y][0], self.ctl[y][1], d, "", "N", "N"])
                elif x in (2, 4):
                    continue
                else:
                    data.append(d)
            else:
                data.append(d)
        if self.new:
            self.sql.insRec("crsctl", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.crsctl_col
            data.append(self.acc[col.index("ctc_xflag")])
            self.sql.updRec("crsctl", data=data, where=[("ctc_cono", "=",
                self.opts["conum"])])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.acc):
                if dat != data[num]:
                    self.sql.insRec("chglog", data=["crsctl", "U",
                        "%03i" % self.opts["conum"], col[num], dte,
                        self.opts["capnm"], str(dat), str(data[num]),
                        "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.doExit()

    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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #16
0
class cr1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(
            self.opts["mf"].dbm,
            ["chglog", "ctlnot", "crsmst", "crstrn", "genmst", "strpom"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        crsctl = gc.getCtl("crsctl", self.opts["conum"])
        if not crsctl:
            return
        self.glint = crsctl["ctc_glint"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def mainProcess(self):
        crm = {
            "stype":
            "R",
            "tables": ("crsmst", ),
            "cols":
            (("crm_acno", "", 0, "Acc-Num"), ("crm_name", "", 0, "Name", "Y")),
            "where": [("crm_cono", "=", self.opts["conum"]),
                      ("crm_stat", "<>", "X")]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        tag = (("Basic-_A", None, ("T", 1, 1), ("T", 0, 1)),
               ("Basic-_B", None, ("T", 1, 1), ("T", 0, 1)))
        r1s = (("Monthly", "M"), ("Daily", "D"))
        r2s = (("Yes", "Y"), ("No", "N"))
        self.fld = [
            (("T",0,0,0),"INA",7,"Acc-Num","Account Number",
                "","Y",self.doAcno,crm,None,("efld",),None,
                "To Automatically Generate Account Numbers for "\
                "New Accounts enter a Blank Account Number."),
            (("T",0,0,0),"INA",30,"Name","",
                "","N",self.doName,None,self.doDelete,("notblank",)),
            (("T",1,0,0),"INA",30,"Address Line 1","",
                "","N",None,None,None,("notblank",)),
            (("T",1,1,0),"INA",30,"Address Line 2","",
                "","N",None,None,None,("efld",)),
            (("T",1,2,0),"INA",30,"Address Line 3","",
                "","N",None,None,None,("efld",)),
            (("T",1,3,0),"INA",4,"Postal Code","",
                "","N",None,None,None,("efld",)),
            (("T",1,4,0),"INA",20,"Telephone Number","",
                "","N",None,None,None,("efld",)),
            (("T",1,5,0),"INA",20,"Fax Number","",
                "","N",None,None,None,("efld",)),
            (("T",1,6,0),"INA",30,"Manager's Name","",
                "","N",None,None,None,("efld",)),
            (("T",1,6,0),"ITX",30,"E-Mail","Manager's E-Mail",
                "","N",None,None,None,("email",)),
            (("T",1,7,0),"INA",30,"Account's Contact","Account's Contact Name",
                "","N",None,None,None,("efld",)),
            (("T",1,7,0),"ITX",30,"E-Mail","Account's E-Mail",
                "","N",None,None,None,("email",)),
            (("T",1,8,0),"INA",30,"Order's Contact","Order's Contact Name",
                "","N",None,None,None,("efld",)),
            (("T",1,8,0),"ITX",30,"E-Mail","Order's E-Mail",
                "","N",None,None,None,("email",)),
            (("T",1,9,0),"Id1",10,"Date Account Opened","",
                self.sysdtw,"N",None,None,None,("efld",)),
            (("T",1,10,0),"INA",10,"V.A.T Number","",
                "","N",None,None,None,("efld",)),
            (("T",2,0,0),("IRB",r1s),0,"Terms Base","",
                "M","N",self.doTermsBase,None,None,None),
            (("T",2,1,0),"IUI",2,"Statement Day","",
                "","N",None,None,None,("between",1,30)),
            (("T",2,2,0),"IUI",3,"Terms","",
                "","N",None,None,None,("between",0,90)),
            (("T",2,3,0),"IUI",7,"Credit Limit","",
                "","N",None,None,None,("efld",)),
            (("T",2,4,0),"IUD",5.2,"Trade Discount","",
                "","N",None,None,None,("efld",)),
            (("T",2,5,0),"IUD",5.2,"Settlement Discount",
                "Settlement Discount","","N",None,None,None,("efld",)),
            (("T",2,6,0),("IRB",r2s),0,"Payment Indicator","",
                "Y","N",None,None,None,None),
            (("T",2,7,0),"INA",20,"Bank Name","",
                "","N",None,None,None,("efld",)),
            (("T",2,8,0),"IUI",8,"Bank Branch","",
                "","N",None,None,None,("efld",)),
            (("T",2,9,0),"INA",16,"Bank Account","",
                "","N",None,None,None,("efld",))]
        if self.glint == "Y":
            self.fld.append((("T", 2, 10, 0), "IUI", 7, "G/L Account Number",
                             "G/L Account Number", "", "N", self.doGlac, glm,
                             None, ("efld", )))
        else:
            self.fld.append((("T", 2, 10, 0), "OUI", 7, "G/L Account Number"))
        but = (("Import", None, self.doImport, 0, ("T", 0, 1), ("T", 0, 2),
                "Import Account Details from a CSV or XLS File."),
               ("Accept", None, self.doAccept, 0, ("T", 1, 1), ("T", 0, 1)),
               ("Print", None, self.doPrint, 0, ("T", 0, 2), ("T", 2, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2),
                ("T", 2, 0)), ("Quit", None, self.doQuit, 1, None, None))
        tnd = ((self.doEnd, "N"), (self.doEnd, "N"), (self.doAccept, "Y"))
        txt = (self.doExit, self.doExit, self.doExit)
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               tags=tag,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               clicks=self.doClick)
        if "args" in self.opts:
            self.df.doKeyPressed("T", 0, 0, data=self.opts["args"])

    def doClick(self, *opts):
        if self.df.pag == 0:
            return
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doAcno(self, frt, pag, r, c, p, i, w):
        self.acno = w
        if self.acno:
            self.old = self.sql.getRec("crsmst",
                                       where=[("crm_cono", "=",
                                               self.opts["conum"]),
                                              ("crm_acno", "=", self.acno)],
                                       limit=1)
        if not self.acno or not self.old:
            ok = askQuestion(self.opts["mf"].body,
                             "New Account",
                             "Is This a New Account?",
                             default="no")
            if ok == "no":
                return "Invalid Account Number"
            pw = PwdConfirm(self.opts["mf"],
                            conum=self.opts["conum"],
                            system="CRS",
                            code="NewAcc")
            if pw.flag == "no":
                if "args" in self.opts:
                    return "xt"
                else:
                    return "New Account Creation is Not Allowed"
            self.new = True
        elif self.old[self.sql.crsmst_col.index("crm_stat")] == "X":
            return "Invalid Account, Redundant"
        else:
            self.new = False
            self.df.loadEntry("T", pag, p + 1, data=self.old[2])
            d = 3
            for pge in range(1, self.df.pgs + 1):
                for x in range(0, self.df.topq[pge]):
                    self.df.loadEntry("T", pge, x, data=self.old[d])
                    d = d + 1

    def doName(self, frt, pag, r, c, p, i, w):
        self.name = w
        if self.new and not self.acno:
            for x in range(1, 100):
                self.acno = genAccNum(self.name, x, 7)
                chk = self.sql.getRec("crsmst",
                                      where=[("crm_cono", "=",
                                              self.opts["conum"]),
                                             ("crm_acno", "=", self.acno)],
                                      limit=1)
                if not chk:
                    break
            self.df.loadEntry("T", 0, 0, data=self.acno)

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

    def doGlac(self, frt, pag, r, c, p, i, w):
        if w:
            chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w)
            if type(chk) is str:
                return chk

    def doDelete(self):
        trs = self.sql.getRec("crstrn",
                              cols=["count(*)"],
                              where=[("crt_cono", "=", self.opts["conum"]),
                                     ("crt_acno", "=", self.acno)],
                              limit=1)
        if trs[0]:
            return "%s Transactions Exist, Not Deleted" % trs[0]
        pom = self.sql.getRec("strpom",
                              cols=["count(*)"],
                              where=[("pom_cono", "=", self.opts["conum"]),
                                     ("pom_acno", "=", self.acno)],
                              limit=1)
        if pom[0]:
            return "%s Purchase Order Exists, Not Deleted" % pom[0]
        nte = self.sql.getRec("ctlnot",
                              cols=["count(*)"],
                              where=[("not_cono", "=", self.opts["conum"]),
                                     ("not_sys", "=", "CRS"),
                                     ("not_key", "=", self.acno)],
                              limit=1)
        if nte[0]:
            return "%s Notes Exist, Not Deleted" % nte[0]
        self.sql.delRec("crsmst",
                        where=[("crm_cono", "=", self.opts["conum"]),
                               ("crm_acno", "=", self.acno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["crsmst", "D", "%03i%-7s" % \
            (self.opts["conum"], self.acno), "", dte, self.opts["capnm"],
            "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        if self.df.pag == 0:
            self.df.focusField("T", 1, 1, clr=self.new)
        elif self.df.pag == 1:
            self.df.selPage("Basic-B")
            self.df.focusField("T", 2, 1, clr=self.new)

    def doAccept(self):
        frt, pag, col, mes = self.df.doCheckFields()
        if mes:
            if pag > 0 and pag != self.df.pag:
                if frt == "T":
                    self.df.last[pag][0] = col + 1
                else:
                    self.df.last[pag][1] = col + 1
                self.df.selPage(self.df.tags[pag - 1][0])
            else:
                self.df.focusField(frt, pag, (col + 1), err=mes)
            return
        data = [self.opts["conum"]]
        for x in range(0, 3):
            for y in range(0, len(self.df.t_work[x][0])):
                data.append(self.df.t_work[x][0][y])
        if self.new:
            data.extend(["N", ""])
            self.sql.insRec("crsmst", data=data)
        else:
            col = self.sql.crsmst_col
            data.append(self.old[col.index("crm_stat")])
            data.append(self.old[col.index("crm_xflag")])
            if data != self.old[:len(data)]:
                self.sql.updRec("crsmst",
                                data=data,
                                where=[("crm_cono", "=", self.opts["conum"]),
                                       ("crm_acno", "=", self.acno)])
                dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
                for num, dat in enumerate(self.old):
                    if dat != data[num]:
                        self.sql.insRec(
                            "chglog",
                            data=[
                                "crsmst", "U",
                                "%03i%-7s" % (self.opts["conum"], self.acno),
                                col[num], dte, self.opts["capnm"],
                                str(dat),
                                str(data[num]), "", 0
                            ])
        if "args" in self.opts:
            self.doQuit()
        else:
            self.opts["mf"].dbm.commitDbase()
            self.df.last[0] = [0, 0]
            self.df.selPage("Basic-A")
            self.df.focusField("T", 0, 1)

    def doPrint(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        TabPrt(self.opts["mf"],
               self.opts["conum"],
               self.opts["conam"],
               name=self.__class__.__name__,
               tabs="crsmst",
               where=[("crm_cono", "=", self.opts["conum"]),
                      ("crm_acno", "=", self.acno)])
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doImport(self):
        self.df.setWidget(self.df.B3, state="disabled")
        self.df.setWidget(self.df.mstFrame, state="hide")
        fi = FileImport(self.opts["mf"], imptab="crsmst", impskp=["crm_cono"])
        sp = ProgressBar(self.opts["mf"].body,
                         typ="Importing Creditor's Accounts",
                         mxs=len(fi.impdat))
        err = None
        for num, line in enumerate(fi.impdat):
            sp.displayProgress(num)
            if not line[0]:
                if not line[1]:
                    err = "Blank Account Number and Blank Name"
                    break
                for x in range(1, 100):
                    line[0] = genAccNum(line[1], x, 7)
                    chk = self.sql.getRec("crsmst",
                                          where=[("crm_cono", "=",
                                                  self.opts["conum"]),
                                                 ("crm_acno", "=", line[0])],
                                          limit=1)
                    if not chk:
                        break
            chk = self.sql.getRec("crsmst",
                                  where=[("crm_cono", "=", self.opts["conum"]),
                                         ("crm_acno", "=", line[0])],
                                  limit=1)
            if chk:
                err = "%s %s Already Exists" % (fi.impcol[0][0], line[0])
                break
            if not line[1]:
                err = "Blank Name"
                break
            if not line[14]:
                line[14] = self.sysdtw
            if not line[16]:
                line[16] = "M"
            if not line[17]:
                line[17] = 30
            if not line[18]:
                line[18] = 30
            if not line[22]:
                line[22] = "Y"
            if self.glint and line[26]:
                chk = self.sql.getRec("genmst",
                                      where=[("glm_cono", "=",
                                              self.opts["conum"]),
                                             ("glm_acno", "=", line[26])],
                                      limit=1)
                if not chk:
                    err = "Invalid General Ledger Account"
                    break
            line.insert(0, self.opts["conum"])
            self.sql.insRec("crsmst", data=line)
        sp.closeProgress()
        if err:
            err = "Line %s: %s" % ((num + 1), err)
            showError(
                self.opts["mf"].body, "Import Error", """%s

Please Correct your Import File and then Try Again.""" % err)
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.last[0] = [0, 0]
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)

    def doExit(self):
        if self.df.pag == 0:
            self.doQuit()
        elif self.df.pag == 1:
            self.df.focusField("T", 0, 1)
        else:
            self.df.selPage("Basic-A")

    def doQuit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #17
0
class wgc210(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,
                       "wagrcv",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        rcv = {
            "stype": "R",
            "tables": ("wagrcv", ),
            "cols":
            (("rcv_code", "", 0, "Code"), ("rcv_desc", "", 0, "Details"))
        }
        self.fld = ((("T", 0, 0, 0), "IUI", 4, "Item Code", "", "", "N",
                     self.doCode, rcv, None, ("notzero", )),
                    (("T", 0, 1, 0), "INA", 50, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )))
        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 doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        acc = self.sql.getRec("wagrcv",
                              where=[("rcv_code", "=", self.code)],
                              limit=1)
        if not acc:
            self.new = "Y"
        else:
            self.new = "N"
            for x in range(1, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=acc[x])

    def doDelete(self):
        self.sql.delRec("wagrcv", where=[("rcv_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        dat = []
        for x in range(0, len(self.df.t_work[0][0])):
            dat.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("wagrcv", data=dat)
        else:
            self.sql.updRec("wagrcv",
                            data=dat,
                            where=[("rcv_code", "=", self.code)])
        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()
Пример #18
0
class glc110(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["ctlctl", "genmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        # -------------------------------
        # General Ledger Control Records
        # -------------------------------
        # Get Company Details
        gc = GetCtl(self.opts["mf"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        # Standard Controls
        self.glctrl = [("bank_1", "Bank Control 1"),
                       ("bank_2", "Bank Control 2"),
                       ("bank_3", "Bank Control 3"),
                       ("bank_4", "Bank Control 4"),
                       ("bank_5", "Bank Control 5"),
                       ("bank_6", "Bank Control 6"),
                       ("bank_7", "Bank Control 7"),
                       ("bank_8", "Bank Control 8"),
                       ("bank_9", "Bank Control 9"),
                       ("bank_10", "Bank Control 10"),
                       ("p_cash", "Petty Cash Control"),
                       ("crs_ctl", "Creditors Control"),
                       ("drs_ctl", "Debtors Control"),
                       ("ret_inc", "Retained Income"),
                       ("vat_ctl", "VAT Control")]
        # Check for Integrated Systems
        mod = []
        for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2):
            mod.append(ctlmst["ctm_modules"][x:x + 2])
        # Load Systems Integration
        if mod.count("AR"):
            assctl = gc.getCtl("assctl", self.opts["conum"], error=False)
            if assctl and assctl["cta_glint"] == "Y":
                self.glctrl.extend([("ass_sls", "Sale of Assets")])
        if mod.count("BK"):
            bkmctl = gc.getCtl("bkmctl", self.opts["conum"], error=False)
            if bkmctl and bkmctl["cbk_glint"] == "Y":
                self.glctrl.extend([("bkm_ctl", "Bookings Control"),
                                    ("bkm_chq", "Cheques Received"),
                                    ("bkm_csh", "Cash Received"),
                                    ("bkm_ccg", "Cancellation Fee")])
                if not mod.count("DR"):
                    self.glctrl.extend([("dis_all", "Discount Allowed")])
        if mod.count("CR"):
            crsctl = gc.getCtl("crsctl", self.opts["conum"], error=False)
            if crsctl and crsctl["ctc_glint"] == "Y":
                self.glctrl.extend([("dis_rec", "Discount Received")])
        if mod.count("CS"):
            cshctl = gc.getCtl("cshctl", self.opts["conum"], error=False)
            if cshctl and cshctl["ccc_glint"] == "Y":
                self.glctrl.extend([("csh_ctl", "Cash Control")])
        if mod.count("DR"):
            drsctl = gc.getCtl("drsctl", self.opts["conum"], error=False)
            if drsctl and drsctl["ctd_glint"] == "Y":
                self.glctrl.extend([("dis_all", "Discount Allowed")])
        if mod.count("LN"):
            lonctl = gc.getCtl("lonctl", self.opts["conum"], error=False)
            if lonctl and lonctl["cln_glint"] == "Y":
                self.glctrl.extend([("lon_ctl", "Loans Control"),
                                    ("int_pay", "Interest Paid"),
                                    ("int_rec", "Interest Received")])
        if mod.count("ML"):
            memctl = gc.getCtl("memctl", self.opts["conum"], error=False)
            if memctl and memctl["mcm_glint"] == "Y":
                self.glctrl.extend([("mem_ctl", "Members Control"),
                                    ("mem_pen", "Members Penalties")])
        if mod.count("RC"):
            rcactl = gc.getCtl("rcactl", self.opts["conum"], error=False)
            if rcactl and rcactl["cte_glint"] == "Y":
                self.glctrl.extend([("rca_com", "Commission Raised"),
                                    ("rca_dep", "Deposits Control"),
                                    ("rca_fee", "Contract Fees"),
                                    ("rca_own", "Owners Control"),
                                    ("rca_orx", "Owners Charges"),
                                    ("rca_tnt", "Tenants Control"),
                                    ("rca_trx", "Tenants Charges")])
        if mod.count("ST"):
            strctl = gc.getCtl("strctl", self.opts["conum"], error=False)
            if strctl and strctl["cts_glint"] == "Y":
                self.glctrl.extend([("stk_soh", "Stock on Hand"),
                                    ("stk_susp", "Stock Reconciliation")])
        if mod.count("WG") or mod.count("SL"):
            wagctl = gc.getCtl("wagctl", self.opts["conum"], error=False)
            if wagctl and wagctl["ctw_glint"] == "Y":
                self.glctrl.extend([("wag_ctl", "Salaries Control"),
                                    ("wag_slc", "Staff Loans Control"),
                                    ("wag_sli", "Staff Loans Interest")])
        return True

    def drawDialog(self):
        ctl = {
            "stype": "C",
            "titl": "Select Control",
            "head": ("Code", "Description"),
            "typs": (("NA", 10), ("NA", 30)),
            "data": self.glctrl
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        r1s = (("None", "N"), ("OFX", "O"), ("QIF", "Q"), ("S/Bank Online",
                                                           "S"))
        r2s = (("None", "N"), ("CCYYMMDD", "A"), ("DDMMCCYY", "B"),
               ("MMDD(CC)YY", "C"))
        fld = ((("T", 0, 0, 0), "INA", 10, "Code", "Control Code", "", "Y",
                self.doCode, ctl, None, None), (("T", 0, 0, 25), "ONA", 30,
                                                "Description"),
               (("T", 0, 1, 0), "IUI", 7, "G/L Acc-Num", "G/L Account Number",
                "", "N", self.doAccNum, glm, self.doDelete,
                ("notzero", )), (("T", 0, 1, 25), "ONA", 30, "Description"),
               (("T", 0, 2, 0), "INA", 16, "Bank Account",
                "Bank Account Number", "", "N", self.doImpBnk, None, None,
                ("efld", )), (("T", 0, 3, 0), ("IRB", r1s), 0, "Import Format",
                              "", "N", "N", self.doImpFmt, None, None, None),
               (("T", 0, 4, 0), ("IRB", r2s), 0, "Date Format", "", "A", "N",
                self.doDteFmt, None, None, None))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 3), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 3), ("T", 0, 0)),
               ("Print", None, self.doPrint, 0, ("T", 0, 1),
                ("T", 0, 2)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        d1 = ""
        for ctl in self.glctrl:
            if self.code in ctl:
                d1 = ctl[1]
                break
        if not d1:
            return "Invalid Control Code"
        self.df.loadEntry(frt, pag, p + 1, data=d1)
        self.acc = self.sql.getRec("ctlctl",
                                   where=[("ctl_cono", "=",
                                           self.opts["conum"]),
                                          ("ctl_code", "=", self.code)],
                                   limit=1)
        if not self.acc:
            self.new = "y"
        else:
            self.new = "n"
            col = self.sql.ctlctl_col
            desc = self.readAcno(self.acc[col.index("ctl_conacc")])
            if not desc:
                desc = [""]
            self.df.loadEntry(frt,
                              pag,
                              p + 2,
                              data=self.acc[col.index("ctl_conacc")])
            self.df.loadEntry(frt, pag, p + 3, data=desc[0])
            self.df.loadEntry(frt,
                              pag,
                              p + 4,
                              data=self.acc[col.index("ctl_bankac")])
            self.df.loadEntry(frt,
                              pag,
                              p + 5,
                              data=self.acc[col.index("ctl_impfmt")])
            self.df.loadEntry(frt,
                              pag,
                              p + 6,
                              data=self.acc[col.index("ctl_dtefmt")])

    def doDelete(self):
        self.sql.delRec("ctlctl",
                        where=[("ctl_cono", "=", self.opts["conum"]),
                               ("ctl_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doAccNum(self, frt, pag, r, c, p, i, w):
        desc = self.readAcno(w)
        if not desc:
            return "Invalid Account Number"
        self.df.loadEntry(frt, pag, p + 1, data=desc[0])
        if self.code[:4] != "bank":
            self.impfmt = "N"
            self.bankac = ""
            self.dtefmt = "N"
            return "nd"

    def readAcno(self, acno):
        self.acno = acno
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", self.acno)],
                              limit=1)
        return acc

    def doImpBnk(self, frt, pag, r, c, p, i, w):
        self.bankac = w
        if not self.bankac:
            self.impfmt = "N"
            self.dtefmt = "N"
            self.df.loadEntry(frt, pag, p + 1, data=self.impfmt)
            self.df.loadEntry(frt, pag, p + 2, data=self.dtefmt)
            return "sk2"

    def doImpFmt(self, frt, pag, r, c, p, i, w):
        self.impfmt = w
        if self.impfmt == "N":
            self.dtefmt = "N"
            self.df.loadEntry(frt, pag, p + 1, data=self.dtefmt)
            return "nd"
        self.df.loadEntry(frt, pag, p + 1, data="A")

    def doDteFmt(self, frt, pag, r, c, p, i, w):
        if w not in ("A", "B", "C"):
            return "Invalid Date Format"
        self.dtefmt = w

    def doEnd(self):
        data = [
            self.opts["conum"], self.code, self.df.t_work[0][0][1], self.acno,
            self.bankac, self.impfmt, self.dtefmt
        ]
        if self.new == "y":
            self.sql.insRec("ctlctl", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.ctlctl_col
            data.append(self.acc[col.index("ctl_xflag")])
            self.sql.updRec("ctlctl",
                            data=data,
                            where=[("ctl_cono", "=", self.opts["conum"]),
                                   ("ctl_code", "=", self.code)])
        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 doPrint(self):
        table = ["ctlctl"]
        heads = ["General Ledger Control Accounts"]
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, "hide")
        RepPrt(self.opts["mf"],
               name="glc110",
               tables=table,
               heads=heads,
               where=[("ctl_cono", "=", self.opts["conum"])],
               order="ctl_code",
               prtdia=(("Y", "V"), ("Y", "N")))
        self.df.setWidget(self.df.mstFrame, "show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #19
0
class bc1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "args" in self.opts:
                self.tabcvt = False
                self.gentab = False
                self.newtab = True
                self.tab = self.opts["args"]
                self.df.loadEntry("T", 0, 0, data=self.tab)
                self.df.topf[0][0][1] = "OUI"
                self.df.topf[0][1][1] = "OUI"
                self.df.focusField("T", 0, 2)
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "chglog", "bwlent", "bwlgme", "bwltab", "bwldrt", "bwlflm",
            "bwlflt", "memmst", "memkon", "memadd", "memcat"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            if self.sql.error == ["memmst", "memkon"]:
                self.memmst = False
            else:
                return
        else:
            self.memmst = True
        gc = GetCtl(self.opts["mf"])
        bwlctl = gc.getCtl("bwlctl", self.opts["conum"])
        if not bwlctl:
            return
        self.mlint = bwlctl["ctb_mlint"]
        self.samen = bwlctl["ctb_samen"]
        self.mscat = bwlctl["ctb_mscat"]
        self.mstart = bwlctl["ctb_mstart"]
        self.fstart = bwlctl["ctb_fstart"]
        self.nstart = bwlctl["ctb_nstart"]
        self.dbase = bwlctl["ctb_dbase"]
        self.order = bwlctl["ctb_order"]
        self.mixed = bwlctl["ctb_mixed"]
        self.fromad = bwlctl["ctb_emadd"]
        self.keys = (("bwltab", "btb_cono", "btb_tab"), ("bwldrt", "bdt_cono",
                                                         "bdt_tab"),
                     ("bwlent", "bce_cono", "bce_scod"), ("bwlflt", "bft_cono",
                                                          "bft_player"),
                     ("bwlgme", "bcg_cono", "bcg_scod"), ("bwldrt", "bdt_cono",
                                                          "bdt_team1"),
                     ("bwldrt", "bdt_cono",
                      "bdt_team2"), ("bwldrt", "bdt_cono", "bdt_team3"),
                     ("bwlflt", "bft_cono", "bft_skip"), ("bwlgme", "bcg_cono",
                                                          "bcg_ocod"))
        return True

    def mainProcess(self):
        tab = {
            "stype":
            "R",
            "tables": ("bwltab", ),
            "cols": [("btb_tab", "", 0, "Tab"),
                     ("btb_surname", "", 0, "Surname", "Y"),
                     ("btb_names", "", 0, "Names"),
                     ("btb_bsano", "", 0, "BSA-No")],
            "where": [("btb_cono", "=", self.opts["conum"])],
            "order":
            "btb_surname"
        }
        if self.mlint == "N":
            mlm = None
        else:
            tab["cols"].insert(3, ("btb_memno", "", 0, "Mem-No"))
            mlm = {
                "stype":
                "R",
                "tables": ("memmst", ),
                "cols":
                (("mlm_memno", "", 0,
                  "Mem-No"), ("mlm_oldno", "", 0,
                              "Old-No"), ("mlm_idnum", "", 0, "Identity-Numb"),
                 ("mlm_gender", "", 0, "G"), ("mlm_state", "", 0, "S"),
                 ("mlm_surname", "", 0, "Surname", "Y"), ("mlm_names", "", 0,
                                                          "Names", "F")),
                "where": [("mlm_cono", "=", self.opts["conum"])],
                "order":
                "mlm_surname, mlm_names"
            }
        r1s = (("Male", "M"), ("Female", "F"))
        if self.dbase == "R":
            r2s = (("None", "0"), )
        else:
            r2s = (("Skip", "4"), ("Third", "3"), ("Second", "2"), ("Lead",
                                                                    "1"))
        fld = [(("T", 0, 0,
                 0), "I@btb_tab", 0, "", "", "", "Y", self.doTab, tab, None,
                ("efld", ), None, "Note: Tab numbers Must be Unique."),
               [("T", 0, 1, 0), "I@btb_memno", 0, "", "", "", "N",
                self.doMember, mlm, self.doDelete, ("efld", )],
               (("T", 0, 2, 0), "I@btb_surname", 0, "", "", "", "N",
                self.doSurname, None, self.doDelete, ("notblank", )),
               (("T", 0, 3, 0), "I@btb_names", 0, "", "", "", "N",
                self.doNames, None, None, ("efld", )),
               (("T", 0, 4, 0), ("IRB", r1s), 0, "Gender", "", "M", "N",
                self.doGender, None, None, None),
               (("T", 0, 5, 0), "I@btb_add1", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 6, 0), "I@btb_add2", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 7, 0), "I@btb_add3", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 8, 0), "I@btb_pcod", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 9, 0), "I@btb_home", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 10, 0), "I@btb_work", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 11, 0), "I@btb_cell", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 12, 0), "I@btb_mail", 0, "", "", "", "N",
                self.doEmail, None, None, ("efld", )),
               (("T", 0, 13, 0), ("IRB", r2s), 0, "Position - Primary", "",
                "1", "N", self.doPos, None, self.doDelete, None),
               (("T", 0, 14, 0), "I@btb_rate1", 0, "", "", "", "N",
                self.doRate, None, None, ("efld", )),
               (("T", 0, 15, 0), ("IRB", r2s), 0, "Position - Mixed", "", "1",
                "N", self.doPos, None, None, None),
               (("T", 0, 16, 0), "I@btb_rate2", 0, "", "", "", "N", None, None,
                None, ("efld", )),
               (("T", 0, 17, 0), "I@btb_bsano", 0, "", "", "", "N", None, None,
                None, ("efld", ))]
        if self.mlint == "N":
            fld[1] = [("T", 0, 1, 0), "O@btb_memno", 0, ""]
        if self.mlint == "Y":
            but = []
        else:
            but = [("Import", None, self.doImport, 0, ("T", 0, 1),
                    (("T", 0, 2), ("T", 0, 3)),
                    "Import Tabs and/or Ratings from a CSV or XLS File.")]
        but.extend([("Accept", None, self.doEnd, 0, ("T", 0, 3), ("T", 0, 0),
                     "Accept All Fields and Continue"),
                    ("Convert", None, self.doConvert, 0, ("T", 0, 3),
                     ("T", 0, 4), "Convert a Visitor's Tab to a Member's Tab"),
                    ("Print", None, self.doPrint, 1, None, None)])
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               tops=False,
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               clicks=self.doClick)

    def doClick(self, *opts):
        if self.df.col == 1:
            return
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doTab(self, frt, pag, r, c, p, i, w):
        self.tab = w
        self.newvis = False
        self.tabcvt = False
        self.tabchg = False
        if not self.tab:
            if self.mlint == "Y" and self.samen == "Y":
                ok = askQuestion(self.opts["mf"].body,
                                 "New Tab",
                                 "Is this TAB for a Visitor",
                                 default="no")
                if ok == "no":
                    return "New Member, Please Create in Ledger"
                self.newvis = True
            self.gentab = True
            self.newtab = True
        else:
            self.gentab = False
            self.oldtab = self.sql.getRec("bwltab",
                                          where=[("btb_cono", "=",
                                                  self.opts["conum"]),
                                                 ("btb_tab", "=", self.tab)],
                                          limit=1)
            if not self.oldtab:
                self.newtab = True
            else:
                self.newtab = False
                for num, fld in enumerate(self.oldtab[1:-1]):
                    if num == 2:
                        self.snam = fld
                    elif num == 3:
                        self.fnam = fld
                    elif num == 4:
                        self.gender = fld
                    elif num in (13, 15):
                        fld = str(fld)
                        if num == 13:
                            self.pos1 = fld
                    self.df.loadEntry(frt, pag, num, data=fld)
        if self.tab and self.mlint == "Y":
            if self.oldtab:
                memno = self.oldtab[self.sql.bwltab_col.index("btb_memno")]
            elif self.tab < self.nstart and self.samen == "Y":
                memno = self.tab
            else:
                memno = 0
        else:
            memno = 0
        if memno:
            chk = self.doLoadMember(memno)
            if chk:
                return chk
            if self.dbase == "R":
                return "sk13"
            return "sk12"
        if self.newvis or self.tab >= self.nstart:
            return "sk1"

    def doMember(self, frt, pag, r, c, p, i, w):
        if w:
            if self.newtab or not self.oldtab[2]:
                chk = self.sql.getRec("bwltab",
                                      where=[("btb_cono", "=",
                                              self.opts["conum"]),
                                             ("btb_memno", "=", w)],
                                      limit=1)
                if chk:
                    return "Member Already Has a TAB"
            chk = self.doLoadMember(w)
            if chk:
                return chk
            if self.newtab and not self.tab:
                chk = self.getNextTab()
                if not chk:
                    return "Invalid Membership Number"
            if self.dbase == "R":
                return "sk12"
            return "sk11"
        elif self.tab and self.tab < self.nstart and self.mlint == "Y":
            return "Invalid Membership Number"

    def doLoadMember(self, memno):
        # Check member
        acc = self.sql.getRec("memmst",
                              cols=["mlm_surname", "mlm_names", "mlm_gender"],
                              where=[("mlm_cono", "=", self.opts["conum"]),
                                     ("mlm_memno", "=", memno)],
                              limit=1)
        if not acc:
            return "Member %s Does Not Exist" % memno
        # Check category
        if self.mscat:
            cat = self.sql.getRec("memcat",
                                  where=[("mlc_cono", "=", self.opts["conum"]),
                                         ("mlc_memno", "=", memno),
                                         ("mlc_type", "=", "C"),
                                         ("mlc_code", "=", self.mscat)],
                                  limit=1)
            if not cat:
                return "Member %s is Not in the Bowls Category" % memno
        self.snam = acc[0]
        self.fnam = acc[1]
        self.gender = acc[2]
        self.df.loadEntry("T", 0, 1, data=memno)
        self.df.loadEntry("T", 0, 2, data=self.snam)
        self.df.loadEntry("T", 0, 3, data=self.fnam)
        self.df.loadEntry("T", 0, 4, data=self.gender)
        for typ in ("A", "P"):
            ad = self.sql.getRec(
                "memadd",
                cols=["mla_add1", "mla_add2", "mla_add3", "mla_code"],
                where=[("mla_cono", "=", self.opts["conum"]),
                       ("mla_memno", "=", memno), ("mla_type", "=", typ)],
                limit=1)
            if ad:
                break
        if ad:
            self.df.loadEntry("T", 0, 5, data=ad[0])
            self.df.loadEntry("T", 0, 6, data=ad[1])
            self.df.loadEntry("T", 0, 7, data=ad[2])
            self.df.loadEntry("T", 0, 8, data=ad[3])
        for num, cod in enumerate((1, 2, 3, 5)):
            kk = self.sql.getRec("memkon",
                                 cols=["mlk_detail"],
                                 where=[("mlk_cono", "=", self.opts["conum"]),
                                        ("mlk_memno", "=", memno),
                                        ("mlk_code", "=", cod)],
                                 limit=1)
            if kk:
                self.df.loadEntry("T", 0, num + 9, data=kk[0])

    def doSurname(self, frt, pag, r, c, p, i, w):
        self.sname = w

    def doNames(self, frt, pag, r, c, p, i, w):
        if self.newtab:
            chk = self.sql.getRec("bwltab",
                                  where=[("btb_cono", "=", self.opts["conum"]),
                                         ("btb_surname", "=", self.sname,
                                          "and", "btb_names", "=", w)],
                                  limit=1)
            if chk:
                tab = chk[self.sql.bwltab_col.index("btb_tab")]
                self.doTab(frt, pag, 0, 1, 0, 0, tab)
                return "ff3"
            if self.mstart < self.fstart and self.tab >= self.fstart:
                self.df.loadEntry(frt, pag, p + 1, data="F")
            elif self.fstart < self.mstart and self.tab < self.mstart:
                self.df.loadEntry(frt, pag, p + 1, data="F")
            return
        if self.sname != self.snam or w != self.fnam:
            but = [("Amendment", "A"), ("Re-Issue", "R"), ("Neither", "N")]
            ok = askChoice(self.opts["mf"].body,
                           "Name Change",
                           "Please Select the Reason for the Name Change",
                           butt=but,
                           default="Neither")
            if ok == "N":
                return "ff3"
            if ok == "R":
                self.tabchg = True
                for x in range(1, 15):
                    self.df.clearEntry(frt, pag, c + x)

    def doGender(self, frt, pag, r, c, p, i, w):
        self.gender = w
        if self.gentab:
            chk = self.getNextTab()
            if not chk:
                return "ff2|Invalid Membership Number"
        if self.tab < self.nstart:
            if self.mstart < self.fstart:
                if self.gender == "M" and self.tab >= self.fstart:
                    return "ff5|Invalid Gender for Tab Number"
                elif self.gender == "F" and self.tab < self.fstart:
                    return "ff5|Invalid Gender for Tab Number"
            else:
                if self.gender == "F" and self.tab >= self.mstart:
                    return "ff5|Invalid Gender for Tab Number"
                elif self.gender == "M" and self.tab < self.mstart:
                    return "ff5|Invalid Gender for Tab Number"

    def doEmail(self, frt, pag, r, c, p, i, w):
        if self.dbase in ("C", "P") and self.df.t_work[0][0][13] == "0":
            self.df.t_work[0][0][13] = "1"
        if self.dbase == "R":
            self.pos1 = "0"
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 1, data="")
            return "sk1"

    def doPos(self, frt, pag, r, c, p, i, w):
        if p == 13:
            self.pos1 = w
            self.df.loadEntry(frt, pag, p + 2, data=w)
        if self.dbase == "P":
            self.df.loadEntry(frt, pag, p + 1, data="")
            if p == 13:
                self.df.loadEntry(frt, pag, p + 3, data="")
            if self.mixed == "N":
                return "sk3"
            else:
                return "sk1"

    def doRate(self, frt, pag, r, c, p, i, w):
        self.df.loadEntry(frt, pag, p + 1, data=self.pos1)
        self.df.loadEntry(frt, pag, p + 2, data=w)
        if self.dbase == "R":
            self.df.loadEntry(frt, pag, p + 1, data="")
            if self.mixed == "N":
                return "sk2"
            else:
                return "sk1"
        if self.mixed == "N":
            return "sk2"

    def getNextTab(self):
        if self.newvis:
            ok = "yes"
        else:
            ok = askQuestion(self.opts["mf"].body,
                             "Type",
                             "Is this TAB for a Visitor",
                             default="no")
        if ok == "no":
            if self.samen == "Y":
                return
            if self.gender == "M":
                start = self.mstart
                if self.mstart < self.fstart:
                    last = self.fstart
                else:
                    last = self.nstart
            else:
                start = self.fstart
                if self.mstart < self.fstart:
                    last = self.nstart
                else:
                    last = self.mstart
        else:
            start = self.nstart
            last = 900000
        self.tab = getNextCode(self.sql,
                               "bwltab",
                               "btb_tab",
                               where=[("btb_cono", "=", self.opts["conum"])],
                               start=start,
                               last=last)
        self.df.loadEntry("T", 0, 0, data=self.tab)
        return True

    def doDelete(self):
        if self.newtab:
            return
        error = False
        for key in self.keys:
            if key[0] == "bwltab":
                continue
            chk = self.sql.getRec(tables=key[0],
                                  where=[(key[1], "=", self.opts["conum"]),
                                         (key[2], "=", self.tab)],
                                  limit=1)
            if chk:
                error = True
                break
        if error:
            if self.tab < self.nstart:
                # Member
                ok = askQuestion(self.opts["mf"].body,
                                 "Convert",
                                 "Convert this Member to a Visitor",
                                 default="yes")
                if ok == "no":
                    return "Not Deleted nor Converted"
                tab = getNextCode(self.sql,
                                  "bwltab",
                                  "btb_tab",
                                  where=[("btb_cono", "=", self.opts["conum"])
                                         ],
                                  start=self.nstart,
                                  last=900000)
                for key in self.keys:
                    self.sql.updRec(key[0],
                                    cols=[key[2]],
                                    data=[tab],
                                    where=[(key[1], "=", self.opts["conum"]),
                                           (key[2], "=", self.tab)])
            else:
                # Visitor
                chk = self.sql.getRec("bwlent",
                                      where=[("bce_cono", "=",
                                              self.opts["conum"]),
                                             ("bce_scod", "=", self.tab)])
                if chk:
                    return "There is History for this Player, Not Deleted"
                self.sql.delRec("bwltab",
                                where=[("btb_cono", "=", self.opts["conum"]),
                                       ("btb_tab", "=", self.tab)])
        else:
            self.sql.delRec("bwltab",
                            where=[("btb_cono", "=", self.opts["conum"]),
                                   ("btb_tab", "=", self.tab)])
        self.opts["mf"].dbm.commitDbase()

    def doConvert(self):
        titl = "Enter Member's Tab Number"
        ent = SimpleDialog(parent=self.df.window,
                           title=titl,
                           cols=(("a", "Tab Number          ", 6, "UI",
                                  "Tab"), ))
        ent.sframe.wait_window()
        try:
            self.merge = False
            if self.gender == "M":
                start = self.mstart
                if self.mstart < self.fstart:
                    last = self.fstart - 1
                else:
                    last = self.nstart - 1
            else:
                start = self.fstart
                if self.mstart < self.fstart:
                    last = self.nstart - 1
                else:
                    last = self.mstart - 1
            tab = ent.data[0]
            if not tab:
                tab = getNextCode(self.sql,
                                  "bwltab",
                                  "btb_tab",
                                  where=[("btb_cono", "=", self.opts["conum"])
                                         ],
                                  start=start,
                                  last=last)
            if tab < start or tab > last:
                showInfo(self.opts["mf"].body, "Error",
                         "Invalid Tab Number for Gender")
                raise Exception
            chk = self.sql.getRec("bwltab",
                                  where=[("btb_cono", "=", self.opts["conum"]),
                                         ("btb_tab", "=", tab)],
                                  limit=1)
            if chk:
                ok = askQuestion(
                    self.opts["mf"].body, "Invalid",
                    "This Tab is Already Allocated, Do You Want to Merge?")
                if ok == "no":
                    raise Exception
                self.merge = True
            self.tabcvt = True
            self.old = self.tab
            self.tab = tab
            self.df.loadEntry(self.df.frt, self.df.pag, 0, data=self.tab)
            self.df.focusField(self.df.frt, self.df.pag, 6)
        except:
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPrint(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        if self.mlint == "Y":
            self.colsd = [["Membership Number", "N", "btb_memno"]]
        else:
            self.colsd = []
        self.colsd.extend([["Surname & Initials", "Y", "name"],
                           ["Surname", "N", "btb_surname"],
                           ["First Names", "N", "btb_names"],
                           ["Gender", "N", "btb_gender"],
                           ["Address", "N", "address"],
                           ["Telephone - Home", "N", "btb_home"],
                           ["Telephone - Work", "N", "btb_work"],
                           ["Telephone - Cell", "N", "btb_cell"],
                           ["Email Address", "N", "btb_mail"],
                           ["Ratings", "N", "ratings"],
                           ["BSA Number", "N", "btb_bsano"],
                           ["Order", "T", "order"]])
        r1s = (("Members", "M"), ("Guests", "G"), ("All", "A"))
        r2s = (("Males", "M"), ("Females", "F"), ("All", "A"))
        r3s = (("Yes", "Y"), ("No", "N"))
        r4s = (("Tab", "T"), ("Surname", "S"), ("Rating", "R"))
        fld = [(("T", 0, 0, 0), ("IRB", r1s), 0, "Tab Group", "", "M", "Y",
                self.doCGroup, None, None, None),
               (("T", 0, 1, 0), ("IRB", r2s), 0, "Gender", "", "A", "Y",
                self.doCGender, None, None, None)]
        idx = 1
        for dat in self.colsd:
            idx += 1
            if dat == self.colsd[-1]:
                rb = r4s
            else:
                rb = r3s
            fld.append((("T", 0, idx, 0), ("IRB", rb), 0, dat[0], "", dat[1],
                        "N", self.doCField, None, None, None))
        tnd = ((self.doCEnd, "Y"), )
        txt = (self.doCExit, )
        self.pr = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               view=("Y", "V"),
                               mail=("Y", "Y"))
        self.pr.mstFrame.wait_window()
        if self.cols:
            cols = []
            dic = self.sql.bwltab_dic
            for col in self.cols:
                if col == "name":
                    cols.append(["name", "NA", 30, "Name"])
                elif col == "address":
                    cols.append([
                        "btb_add1", dic["btb_add1"][2], dic["btb_add1"][3],
                        dic["btb_add1"][5]
                    ])
                    cols.append([
                        "btb_add2", dic["btb_add2"][2], dic["btb_add2"][3],
                        dic["btb_add2"][5]
                    ])
                    cols.append([
                        "btb_add3", dic["btb_add3"][2], dic["btb_add3"][3],
                        dic["btb_add3"][5]
                    ])
                    cols.append([
                        "btb_pcod", dic["btb_pcod"][2], dic["btb_pcod"][3],
                        dic["btb_pcod"][5]
                    ])
                elif col == "ratings":
                    if self.dbase == "P":
                        cols.append([
                            "btb_pos1", dic["btb_pos1"][2], dic["btb_pos1"][3],
                            dic["btb_pos1"][5]
                        ])
                        cols.append([
                            "btb_pos2", dic["btb_pos2"][2], dic["btb_pos2"][3],
                            dic["btb_pos2"][5]
                        ])
                    elif self.dbase == "R":
                        cols.append([
                            "btb_rate1", dic["btb_rate1"][2],
                            dic["btb_rate1"][3], dic["btb_rate1"][5]
                        ])
                        cols.append([
                            "btb_rate2", dic["btb_rate2"][2],
                            dic["btb_rate2"][3], dic["btb_rate2"][5]
                        ])
                    else:
                        cols.append([
                            "btb_pos1", dic["btb_pos1"][2], dic["btb_pos1"][3],
                            dic["btb_pos1"][5]
                        ])
                        cols.append([
                            "btb_rate1", dic["btb_rate1"][2],
                            dic["btb_rate1"][3], dic["btb_rate1"][5]
                        ])
                        cols.append([
                            "btb_pos2", dic["btb_pos2"][2], dic["btb_pos2"][3],
                            dic["btb_pos2"][5]
                        ])
                        cols.append([
                            "btb_rate2", dic["btb_rate2"][2],
                            dic["btb_rate2"][3], dic["btb_rate2"][5]
                        ])
                else:
                    cols.append([col, dic[col][2], dic[col][3], dic[col][5]])
            whr = [("btb_cono", "=", self.opts["conum"])]
            if self.cgroup == "M":
                whr.append(("btb_tab", "<", self.nstart))
            elif self.cgroup == "G":
                whr.append(("btb_tab", ">=", self.nstart))
            if self.cgender in ("F", "M"):
                whr.append(("btb_gender", "=", self.cgender))
            if self.odr == "T":
                odr = "btb_tab"
            elif self.odr == "S":
                odr = "btb_surname, btb_names"
            else:
                odr = "btb_pos1 desc, btb_rate1 desc, btb_surname, btb_names"
            recs = self.sql.getRec("bwltab", where=whr, order=odr)
            data = []
            btc = self.sql.bwltab_col
            for rec in recs:
                dat = []
                for col in self.cols:
                    if col == "name":
                        snam = rec[btc.index("btb_surname")]
                        fnam = rec[btc.index("btb_names")]
                        if fnam:
                            fnam = fnam.split()
                            for num, nam in enumerate(fnam):
                                if not num:
                                    init = nam[0].upper()
                                else:
                                    init = "%s %s" % (init, nam[0].upper())
                            dat.append("%s, %s" % (snam, init))
                        else:
                            dat.append(snam)
                    elif col == "address":
                        dat.append(rec[btc.index("btb_add1")])
                        dat.append(rec[btc.index("btb_add2")])
                        dat.append(rec[btc.index("btb_add3")])
                        dat.append(rec[btc.index("btb_pcod")])
                    elif col == "ratings":
                        if self.dbase == "P":
                            dat.append(rec[btc.index("btb_pos1")])
                            dat.append(rec[btc.index("btb_pos2")])
                        elif self.dbase == "R":
                            dat.append(rec[btc.index("btb_rate1")])
                            dat.append(rec[btc.index("btb_rate2")])
                        else:
                            dat.append(rec[btc.index("btb_pos1")])
                            dat.append(rec[btc.index("btb_rate1")])
                            dat.append(rec[btc.index("btb_pos2")])
                            dat.append(rec[btc.index("btb_rate2")])
                    else:
                        dat.append(rec[btc.index(col)])
                data.append(dat)
            tit = "Tabs Lising for"
            if self.cgroup == "A":
                tit = "%s Members and Guests" % tit
            elif self.cgroup == "M":
                tit = "%s Members Only" % tit
            else:
                tit = "%s Guests Only" % tit
            if self.cgender == "A":
                tit = "%s (All Genders)" % tit
            elif self.cgender == "M":
                tit = "%s (Males Only)" % tit
            else:
                tit = "%s (Females Only)" % tit
            RepPrt(self.opts["mf"],
                   name=self.__class__.__name__,
                   conum=self.opts["conum"],
                   conam=self.opts["conam"],
                   heads=[tit],
                   ttype="D",
                   tables=data,
                   cols=cols,
                   repprt=self.pr.repprt,
                   repeml=self.pr.repeml,
                   fromad=self.fromad)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.window.focus_force()
        self.df.focusField("T", 0, 1)

    def doCGroup(self, frt, pag, r, c, p, i, w):
        self.cgroup = w

    def doCGender(self, frt, pag, r, c, p, i, w):
        self.cgender = w

    def doCField(self, frt, pag, r, c, p, i, w):
        if self.mlint == "N":
            idx = 2
        else:
            idx = 3
        if p == idx and w == "Y":
            self.pr.loadEntry(frt, pag, p + 1, data="N")
            self.pr.loadEntry(frt, pag, p + 2, data="N")
            return "sk2"

    def doCEnd(self):
        self.pr.closeProcess()
        self.cols = ["btb_tab"]
        if self.pr.repeml[0] == "N":
            end = -2
        else:
            end = -4
        for num, dat in enumerate(self.pr.t_work[0][0][2:end]):
            if dat == "Y":
                self.cols.append(self.colsd[num][2])
            elif dat in ("T", "S", "R"):
                self.odr = dat

    def doCExit(self):
        self.cols = []
        self.pr.closeProcess()

    def doEnd(self):
        if self.tabcvt:
            # Conversion to Member
            for key in self.keys:
                if key[0] == "bwltab" and self.merge:
                    self.sql.delRec(key[0],
                                    where=[(key[1], "=", self.opts["conum"]),
                                           (key[2], "=", self.old)])
                    continue
                self.sql.updRec(key[0],
                                cols=[key[2]],
                                data=[self.tab],
                                where=[(key[1], "=", self.opts["conum"]),
                                       (key[2], "=", self.old)])
        # Continue
        cols = []
        for x in range(18):
            cols.append(x)
        if self.dbase == "R":
            cols.remove(13)
            cols.remove(15)
        flds = ("T", 0, cols)
        frt, pag, col, mes = self.df.doCheckFields(flds)
        if mes:
            self.df.focusField(frt, pag, (col + 1), err=mes)
            return
        tabdat = [self.opts["conum"]] + self.df.t_work[0][0]
        if self.newtab:
            self.sql.insRec("bwltab", data=tabdat)
        elif self.tabchg:
            tabdat.append("")
            self.doTabChg(tabdat)
        elif tabdat != self.oldtab[:len(tabdat)]:
            col = self.sql.bwltab_col
            tabdat.append(self.oldtab[col.index("btb_xflag")])
            self.sql.updRec("bwltab",
                            data=tabdat,
                            where=[("btb_cono", "=", self.opts["conum"]),
                                   ("btb_tab", "=", self.tab)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.oldtab):
                if dat != tabdat[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "bwltab", "U",
                            "%03i%06s" % (self.opts["conum"], self.tab),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(tabdat[num]), "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        if "args" in self.opts:
            self.doExit()
        else:
            self.df.focusField("T", 0, 1)

    def doTabChg(self, tabdat):
        code = getNextCode(self.sql,
                           "bwltab",
                           "btb_tab",
                           where=[("btb_cono", "=", self.opts["conum"])],
                           start=self.nstart,
                           last=900000)
        tables = (("bwldrt", "bdt_cono", "bdt_tab", "bdt_team1", "bdt_team2",
                   "bdt_team3"), ("bwlent", "bce_cono", "bce_scod"),
                  ("bwlflm", "bfm_cono", "bfm_captain"),
                  ("bwlflt", "bft_cono", "bft_skip", "bft_player"),
                  ("bwlgme", "bcg_cono", "bcg_scod",
                   "bcg_ocod"), ("bwltab", "btb_cono", "btb_tab"))
        for tab in tables:
            for col in tab[2:]:
                self.sql.updRec(tab[0],
                                cols=[col],
                                data=[code],
                                where=[(tab[1], "=", self.opts["conum"]),
                                       (col, "=", self.tab)])
        self.sql.insRec("bwltab", data=tabdat)

    def doImport(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        tit = ("Import Details", )
        r1s = (("Ratings Only", "R"), ("All Fields", "A"))
        fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "Details", "", "R", "N",
                self.doImpDet, None, None, None), )
        self.ip = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doImpEnd, "y"), ),
                               txit=(self.doImpExit, ))
        self.ip.mstFrame.wait_window()
        # Populate
        if self.impdet is None:
            self.df.setWidget(self.df.mstFrame, state="show")
            self.df.enableButtonsTags(state=state)
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
            return
        fi = FileImport(self.opts["mf"], imptab="bwltab", impskp=self.impskp)
        sp = ProgressBar(self.opts["mf"].body,
                         typ="Importing Ratings",
                         mxs=len(fi.impdat))
        err = None
        for num, line in enumerate(fi.impdat):
            sp.displayProgress(num)
            if self.mixed == "N":
                line.extend([0, ""])
            chk = self.sql.getRec("bwltab",
                                  where=[("btb_cono", "=", self.opts["conum"]),
                                         ("btb_tab", "=", line[0])],
                                  limit=1)
            if not chk:
                if self.impdet == "R":
                    err = "%s %s Does Not Exist" % (fi.impcol[0][0], line[0])
                    break
                line.insert(0, self.opts["conum"])
                if self.mlint == "N":
                    line.insert(2, 0)
                self.sql.insRec("bwltab", data=line)
            else:
                tmp = ["btb_pos1", "btb_rate1", "btb_pos2", "btb_rate2"]
                if self.impdet == "R":
                    cols = tmp
                else:
                    cols = [
                        "btb_surname", "btb_names", "btb_gender", "btb_add1",
                        "btb_add2", "btb_add3", "btb_pcod", "btb_home",
                        "btb_work", "btb_cell", "btb_mail"
                    ] + tmp + ["btb_bsano"]
                self.sql.updRec("bwltab",
                                cols=cols,
                                data=line[1:],
                                where=[("btb_cono", "=", self.opts["conum"]),
                                       ("btb_tab", "=", line[0])])
        sp.closeProgress()
        if err:
            err = "Line %s: %s" % ((num + 1), err)
            showError(
                self.opts["mf"].body, "Import Error", """%s

Please Correct your Import File and then Try Again.""" % err)
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doImpDet(self, frt, pag, r, c, p, i, w):
        self.impdet = w

    def doImpEnd(self):
        self.impskp = ["btb_cono"]
        if self.mlint == "N":
            self.impskp.append("btb_memno")
        if self.impdet == "R":
            self.impskp.extend([
                "btb_surname", "btb_names", "btb_gender", "btb_add1",
                "btb_add2", "btb_add3", "btb_pcod", "btb_home", "btb_work",
                "btb_cell", "btb_mail", "btb_bsano"
            ])
        if self.mixed == "N":
            self.impskp.extend(["btb_pos2", "btb_rate2"])
        self.impskp.append("btb_xflag")
        self.ip.closeProcess()

    def doImpExit(self):
        self.impdet = None
        self.ip.closeProcess()

    def doExit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #20
0
class stc110(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        mods = ctlmst["ctm_modules"]
        self.genleg = False
        self.slspos = False
        for x in range(0, len(mods), 2):
            if mods[x:x + 2] == "GL":
                self.genleg = True
            elif mods[x:x + 2] == "PS":
                self.slspos = True
        tabs = [
            "strctl", "strloc", "strgmu", "strcmu", "strprc", "tplmst",
            "chglog"
        ]
        if self.genleg:
            tabs.extend(["ctlctl", "genmst"])
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.acc = self.sql.getRec("strctl",
                                   where=[("cts_cono", "=", self.opts["conum"])
                                          ],
                                   limit=1)
        if not self.acc:
            self.new = True
            self.acc = [
                self.opts["conum"], "N", "N", 1, "N", "purchase_order", "", ""
            ]
        else:
            self.new = False
        if self.genleg:
            self.ctl = [["stk_soh", "Stock on Hand", 0],
                        ["stk_susp", "Stock Reconciliation", 0]]
            if self.slspos:
                self.ctl.extend([["pos_cash", "Cash Takings", 0],
                                 ["pos_card", "Card Takings", 0],
                                 ["pos_vchr", "Vouchers", 0]])
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            for num, ctl in enumerate(self.ctl):
                if ctl[0] in ctlctl:
                    self.ctl[num][2] = ctlctl[ctl[0]]
        self.locs = self.acc[self.sql.strctl_col.index("cts_locs")]
        return True

    def drawDialog(self):
        tpm = {
            "stype":
            "R",
            "tables": ("tplmst", ),
            "cols": (("tpm_tname", "", 0, "Template"),
                     ("tpm_title", "", 0, "Title"), ("tpm_type", "", 0, "T")),
            "where": [("tpm_type", "=", "O"), ("tpm_system", "=", "STR")],
            "order":
            "tpm_tname"
        }
        r1s = (("Yes", "Y"), ("No", "N"))
        r2s = (("No", "N"), ("Last Cost", "L"), ("Average Cost", "A"))
        if self.genleg:
            glm = {
                "stype":
                "R",
                "tables": ("genmst", ),
                "cols": (("glm_acno", "", 0, "G/L-Num"), ("glm_desc", "", 30,
                                                          "Description")),
                "where": [("glm_cono", "=", self.opts["conum"])]
            }
            fld = [(("T", 0, 0, 0), ("IRB", r1s), 0, "G/L Integration", "",
                    self.acc[1], "N", self.doGlint, None, None, None),
                   (("T", 0, 1, 0), "IUI", 7, self.ctl[0][1], "",
                    self.ctl[0][2], "N", self.doGenAcc, glm, None, ("efld", )),
                   (("T", 0, 1, 0), "ONA", 30, ""),
                   (("T", 0, 2, 0), "IUI", 7, self.ctl[1][1], "",
                    self.ctl[1][2], "N", self.doGenAcc, glm, None, ("efld", )),
                   (("T", 0, 2, 0), "ONA", 30, "")]
            if self.slspos:
                fld.extend([(("T", 0, 3,
                              0), "IUI", 7, self.ctl[2][1], "", self.ctl[2][2],
                             "N", self.doGenAcc, glm, None, ("efld", )),
                            (("T", 0, 3, 0), "ONA", 30, ""),
                            (("T", 0, 4,
                              0), "IUI", 7, self.ctl[3][1], "", self.ctl[3][2],
                             "N", self.doGenAcc, glm, None, ("efld", )),
                            (("T", 0, 4, 0), "ONA", 30, ""),
                            (("T", 0, 5,
                              0), "IUI", 7, self.ctl[4][1], "", self.ctl[4][2],
                             "N", self.doGenAcc, glm, None, ("efld", )),
                            (("T", 0, 5, 0), "ONA", 30, "")])
                seq = 6
            else:
                seq = 3
        else:
            fld = []
            seq = 0
        fld.extend([(("T", 0, seq, 0), ("IRB", r1s), 0, "Multiple Locations",
                     "", self.acc[2], "N", self.doLocs, None, None, None),
                    (("T", 0, seq + 1, 0), "IUI", 1, "Number of Price Levels",
                     "", self.acc[3], "N", None, None, None, ("between", 1,
                                                              5)),
                    (("T", 0, seq + 2, 0), ("IRB", r2s), 0, "Automatic Markup",
                     "", self.acc[4], "N", None, None, None, None, None,
                     "Calculate Selling Prices Based on Markup Percentages"),
                    (("T", 0, seq + 3, 0), "INA", 20, "Orders Template", "",
                     self.acc[5], "N", self.doTplNam, tpm, None, None),
                    (("T", 0, seq + 4, 0), "ITX", 50, "Email Address", "",
                     self.acc[6], "N", None, None, None, ("email", ))])
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 1), ("T", 0, 0)),
               ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        if not self.new:
            s = 0
            for n, f in enumerate(self.acc[1:-1]):
                if not self.genleg and not n:
                    continue
                self.df.loadEntry("T", 0, s, data=f)
                s += 1
                if not n:
                    for c in self.ctl:
                        self.df.loadEntry("T", 0, s, data=c[2])
                        s += 1
                        self.df.loadEntry("T", 0, s, data=self.getDes(c[2]))
                        s += 1
            self.df.focusField("T", 0, 1, clr=False)

    def doGlint(self, frt, pag, r, c, p, i, w):
        if self.slspos:
            idx = 11
            skp = "sk10"
        else:
            idx = 5
            skp = "sk4"
        if w == "N":
            for x in range(1, idx):
                self.df.loadEntry(frt, pag, p + x, data="")
            return skp

    def doGenAcc(self, frt, pag, r, c, p, i, w):
        des = self.getDes(w)
        if not des:
            return "Invalid Account Number"
        self.df.loadEntry(frt, pag, p + 1, data=des)

    def getDes(self, acno):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", acno)],
                              limit=1)
        if acc:
            return acc[0]
        else:
            return ""

    def doLocs(self, frt, pag, r, c, p, i, w):
        self.locs = w

    def doTplNam(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("tplmst",
                              where=[("tpm_tname", "=", w),
                                     ("tpm_type", "=", "O"),
                                     ("tpm_system", "=", "STR")],
                              limit=1)
        if not acc:
            return "Invalid Template Name"

    def doEnd(self):
        data = [self.opts["conum"]]
        if not self.genleg:
            data.append("N")
        if self.genleg:
            if self.slspos:
                idx = 11
                pos = (1, 3, 5, 7, 9)
            else:
                idx = 5
                pos = (1, 3)
        for x, d in enumerate(self.df.t_work[0][0]):
            if x and self.genleg and x < idx:
                if x in pos:
                    y = int((x - 1) / 2)
                    chk = self.sql.getRec("ctlctl",
                                          where=[("ctl_cono", "=",
                                                  self.opts["conum"]),
                                                 ("ctl_code", "=",
                                                  self.ctl[y][0])],
                                          limit=1)
                    if chk:
                        self.sql.updRec("ctlctl",
                                        cols=["ctl_conacc"],
                                        data=[d],
                                        where=[("ctl_cono", "=",
                                                self.opts["conum"]),
                                               ("ctl_code", "=",
                                                self.ctl[y][0])])
                    else:
                        self.sql.insRec("ctlctl",
                                        data=[
                                            self.opts["conum"], self.ctl[y][0],
                                            self.ctl[y][1], d, "", "N", "N"
                                        ])
                else:
                    continue
            else:
                data.append(d)
        if self.new:
            self.sql.insRec("strctl", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.strctl_col
            data.append(self.acc[col.index("cts_xflag")])
            self.sql.updRec("strctl",
                            data=data,
                            where=[("cts_cono", "=", self.opts["conum"])])
            # Check and Fix Markup prices
            plevs = data[self.sql.strctl_col.index("cts_plevs")]
            automu = data[self.sql.strctl_col.index("cts_automu")]
            if automu in ("A", "L"):
                grps = self.sql.getRec("strgrp",
                                       cols=["gpm_group"],
                                       where=[("gpm_cono", "=",
                                               self.opts["conum"])])
                for grp in grps:
                    for lvl in range(1, plevs + 1):
                        self.sql.delRec("strcmu",
                                        where=[("smc_cono", "=",
                                                self.opts["conum"]),
                                               ("smc_group", "=", grp[0]),
                                               ("smc_level", "=", lvl),
                                               ("smc_markup", "=", 0)])
                        gmu = self.sql.getRec("strgmu",
                                              cols=["smg_markup"],
                                              where=[("smg_cono", "=",
                                                      self.opts["conum"]),
                                                     ("smg_group", "=",
                                                      grp[0]),
                                                     ("smg_level", "=", lvl)],
                                              limit=1)
                        if gmu:
                            if not gmu[0]:
                                self.sql.delRec("strgmu",
                                                where=[
                                                    ("smg_cono", "=",
                                                     self.opts["conum"]),
                                                    ("smg_group", "=", grp[0]),
                                                    ("smg_level", "=", lvl)
                                                ])
                            self.sql.delRec("strcmu",
                                            where=[("smc_cono", "=",
                                                    self.opts["conum"]),
                                                   ("smc_group", "=", grp[0]),
                                                   ("smc_level", "=", lvl),
                                                   ("smc_markup", "=", gmu[0])
                                                   ])
                self.sql.delRec("strprc",
                                where=[("stp_cono", "=", self.opts["conum"])])
            # Chglog
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.acc):
                if dat != data[num]:
                    self.sql.insRec("chglog",
                                    data=[
                                        "strctl", "U",
                                        "%03i" % self.opts["conum"], col[num],
                                        dte, self.opts["capnm"],
                                        str(dat),
                                        str(data[num]), "", 0
                                    ])
        if self.locs == "N":
            acc = self.sql.getRec("strloc",
                                  cols=["srl_desc"],
                                  where=[("srl_cono", "=", self.opts["conum"]),
                                         ("srl_loc", "=", "1")],
                                  limit=1)
            if not acc:
                self.sql.insRec("strloc",
                                data=[
                                    self.opts["conum"], "1",
                                    "Location Number One", "", "", "", ""
                                ])
        self.opts["mf"].dbm.commitDbase()
        self.doExit()

    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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #21
0
class wg1010(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, ["ctldep", "chglog", "wagbal",
            "wagcap", "wagcod", "wagedc", "wagmst", "wagtf1", "wagtf2",
            "waglmf", "wagltf"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        wgm = {
            "stype": "R",
            "tables": ("wagmst",),
            "cols": (
                ("wgm_empno", "", 0, "EmpNo"),
                ("wgm_sname", "", 0, "Surname", "Y"),
                ("wgm_fname", "", 0, "Names"),
                ("wgm_freq", "", 0, "F"),
                ("wgm_start", "", 0, "Start-Date"),
                ("wgm_term", "", 0, "Term-Date")),
            "where": [("wgm_cono", "=", self.opts["conum"])]}
        dep = {
            "stype": "R",
            "tables": ("ctldep",),
            "cols": (
                ("dep_code", "", 0, "Dep"),
                ("dep_name", "", 0, "Name", "Y")),
            "where": [("dep_cono", "=", self.opts["conum"])]}
        wec = {
            "stype": "R",
            "tables": ("wagedc",),
            "cols": (
                ("ced_code", "", 0, "Code"),
                ("ced_desc", "", 0, "Description", "Y")),
            "where": [
                ("ced_cono", "=", self.opts["conum"]),
                ("ced_type", "=", "E")]}
        wdc = {
            "stype": "R",
            "tables": ("wagedc",),
            "cols": (
                ("ced_code", "", 0, "Code"),
                ("ced_desc", "", 0, "Description", "Y")),
            "where": [
                ("ced_cono", "=", self.opts["conum"]),
                ("ced_type", "=", "D")]}
        r1s = (("Weekly","W"),("2xWeekly","F"),("Monthly   ","M"))
        r2s = (("Cash  ","C"),("Cheque  ","Q"),("Electronic","E"))
        r3s = (("Yes","Y"),("No","N"))
        r4s = (("Current","1"),("Transmission","2"),("Savings","3"))
        fld = (
            (("T",0,0,0),"IUI",5,"Emp-Num","Employee Number",
                "","Y",self.doEmpNum,wgm,None,("notzero",)),
            (("T",0,0,0),"IUI",3,"Department","",
                "","N",self.doDept,dep,None,None),
            (("T",0,0,0),"IUI",1,"Class","",
                "","N",None,None,None,None),
            (("T",1,0,0),"INA",30,"Surname","",
                "","N",None,None,None,("notblank",)),
            (("T",1,1,0),"INA",30,"Names","",
                "","N",None,None,None,("notblank",)),
            (("T",1,2,0),"ID1",10,"Date of Birth","",
                "","N",self.doDOB,None,None,("efld",)),
            (("T",1,3,0),"INA",13,"ID Number","",
                "","N",self.doIdNo,None,None,("idno",)),
            (("T",1,4,0),"INA",16,"Spouse Name","",
                "","N",None,None,None,None),
            (("T",1,5,0),"INA",13,"Spouse ID Number","",
                "","N",self.doIdNo,None,None,("idno",)),
            (("T",1,6,0),"INA",30,"Address Line 1","",
                "","N",None,None,None,("notblank",)),
            (("T",1,7,0),"INA",30,"Address Line 2","",
                "","N",None,None,None,None),
            (("T",1,8,0),"INA",30,"Address Line 3","",
                "","N",None,None,None,None),
            (("T",1,9,0),"INA",4,"Postal Code","",
                "","N",None,None,None,("notblank",)),
            (("T",1,10,0),"INA",16,"Telephone Number","",
                "","N",None,None,None,None),
            (("T",1,11,0),"ITX",50,"E-Mail Address","",
                "","N",None,None,None,("email",)),
            (("T",1,12,0),"ID1",10,"Start Date","",
                "","N",None,None,None,("efld",)),
            (("T",1,13,0),"IUD",10.2,"Salary/Rate","",
                "","N",None,None,None,("efld",)),
            (("T",1,14,0),("IRB",r1s),0,"Pay Freq","Pay Frequency",
                "M","N",None,None,None,None),
            (("T",1,15,0),("IRB",r2s),0,"Pay Type","",
                "E","N",self.doPayTyp,None,None,None),
            (("T",2,0,0),("IRB",r3s),0,"P.A.Y.E.","",
                "Y","N",None,None,None,None),
            (("T",2,1,0),"INA",16,"Tax Office","",
                "","N",None,None,None,None),
            (("T",2,2,0),"INA",10,"Tax Number","",
                "","N",None,None,None,None),
            (("T",2,3,0),"IUA",1,"Nature of Employee","",
                "A","N",None,None,None,("notblank",)),
            (("T",2,4,0),"IUI",9,"Reg Number","Registration Number",
                "","N",None,None,None,None),
            (("T",2,5,0),"IUA",1,"Voluntary Excess","",
                "N","N",None,None,None,None),
            (("T",2,6,0),"IUD",6.2,"Fixed Rate","",
                "","N",None,None,None,None),
            (("T",2,7,0),"INA",13,"Directive","",
                "","N",None,None,None,None),
            (("T",3,0,0),("IRB",r4s),0,"Account Type","Bank Account Type",
                "1","N",None,None,None,None),
            (("T",3,1,0),"INA",30,"Bank Name","",
                "","N",self.doBankNam,None,None,None),
            (("T",3,2,0),"IUI",8,"Branch Code","Bank Branch Code",
                "","N",self.doBankBch,None,None,None),
            (("T",3,3,0),"INA",16,"Account Number","Bank Account Number",
                "","N",self.doBankAcc,None,None,None),
            (("T",3,4,0),"INA",30,"Account Holder's Name","",
                "","N",self.doHolderNam,None,None,None),
            (("T",3,5,0),"IUI",1,"Holder's Relationship","",
                "","N",self.doHolderRel,None,None,None),
            (("C",4,0,0),"IUI",3,"Cod","Earnings Code",
                "","N",self.doEarnCod,wec,None,("efld",)),
            (("C",4,0,1),"ONA",30,"Description"),
            (("C",4,0,2),"ISD",13.2,"Amnt/Rate","Amount or Rate",
                "","N",self.doEarnAmt,None,self.doCodeDelete,("efld",)),
            (("C",5,0,0),"IUI",3,"Cod","Deduction Code",
                "","N",self.doDedCod,wdc,None,("efld",)),
            (("C",5,0,1),"ONA",30,"Description"),
            (("C",5,0,2),"ISD",13.2,"Amnt/Rate","Employees Amount or Rate",
                "","N",self.doDedEAmt,None,self.doCodeDelete,("efld",)),
            (("C",5,0,3),"ISD",13.2,"Amnt/Rate","Employers Amount or Rate",
                "","N",self.doDedRAmt,None,None,("efld",)),
            (("T",6,0,0),"ISD",13.2,"Balance-1","",
                "","N",None,None,None,("efld",)),
            (("T",6,1,0),"ISD",13.2,"Balance-2","",
                "","N",None,None,None,("efld",)),
            (("T",6,2,0),"ISD",13.2,"Balance-3","",
                "","N",None,None,None,("efld",)))
        tag = (
            ("General",None,("T",0,0),("T",0,1)),
            ("Tax",None,("T",0,0),("T",0,1)),
            ("Bank",None,("T",0,0),("T",0,1)),
            ("Earnings",None,("T",0,0),("T",0,1)),
            ("Deductions",None,("T",0,0),("T",0,1)),
            ("Balances",None,("T",0,0),("T",0,1)))
        tnd = (
            (self.doEnd, "n"),
            (self.doEnd, "n"),
            (self.doEnd, "n"),
            (self.doEnd, "n"),
            None,
            None,
            (self.doEnd, "y"))
        txt = (
            self.doExit,
            self.doExit,
            self.doExit,
            self.doExit,
            None,
            None,
            self.doExit)
        cnd = (
            None,
            None,
            None,
            None,
            (self.doEndEarn, "y"),
            (self.doEndDed, "y"),
            None)
        cxt = (
            None,
            None,
            None,
            None,
            self.doExit,
            self.doExit,
            None)
        but = (
            ("Accept",None,self.doAccept,0,("T",0,2),("T",0,1)),
            ("Print",None,self.doPrint,0,("T",0,2),("T",0,0)),
            ("Cancel",None,self.doCancel,0,("T",0,2),("T",0,0)),
            ("Quit",None,self.doCloseProcess,1,None,None))
        row = [0,0,0,0,15,15,0]
        self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag,
            rows=row, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but,
            clicks=self.doClick)

    def doClick(self, *opts):
        if self.df.pag == 0:
            return
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doEmpNum(self, frt, pag, r, c, p, i, w):
        self.empno = w
        self.oldm = self.sql.getRec("wagmst", where=[("wgm_cono", "=",
            self.opts["conum"]), ("wgm_empno", "=", self.empno)], limit=1)
        self.oldb = self.sql.getRec("wagbal", where=[("wbl_cono", "=",
            self.opts["conum"]), ("wbl_empno", "=", self.empno)],
            order="wbl_balno")
        if not self.oldm:
            self.new = True
            self.term = 0
            self.ptyp = ""
        else:
            self.new = False
            self.term = self.oldm[len(self.oldm)-1]
            d = 1
            for pg in range(0, self.df.pgs):
                for x in range(0, self.df.topq[pg]):
                    self.df.loadEntry("T", pg, x, data=self.oldm[d])
                    d = d + 1
            self.ptyp = self.df.t_work[1][0][15]
            self.doLoadEarnDed("E")
            self.doLoadEarnDed("D")
            if self.oldb:
                for b in self.oldb:
                    self.df.loadEntry("T", 6, b[2]-1, data=b[3])

    def doDept(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("ctldep", cols=["dep_name"],
            where=[("dep_cono", "=", self.opts["conum"]),
            ("dep_code", "=", w)], limit=1)
        if not acc:
            return "Invalid Department"
        self.dept = w

    def doDOB(self, frt, pag, r, c, p, i, w):
        self.dob = w

    def doIdNo(self, frt, pag, r, c, p, i, w):
        if p == 6:
            a = int(int(w) / 10000000)
            b = int(self.dob % 1000000)
            if a != b:
                return "ID Number Does Not Agree with Birth Date"

    def doPayTyp(self, frt, pag, r, c, p, i, w):
        self.ptyp = w

    def doBankNam(self, frt, pag, r, c, p, i, w):
        if self.ptyp == "E" and not w:
            return "Invalid Bank Name"

    def doBankBch(self, frt, pag, r, c, p, i, w):
        if self.ptyp == "E" and not w:
            return "Invalid Branch"

    def doBankAcc(self, frt, pag, r, c, p, i, w):
        if self.ptyp == "E" and not w:
            return "Invalid Account"

    def doHolderNam(self, frt, pag, r, c, p, i, w):
        self.holnam = w

    def doHolderRel(self, frt, pag, r, c, p, i, w):
        self.holrel = w

    def doEnd(self):
        if self.df.pag == 0:
            self.df.focusField("T", 1, 1)
        elif self.df.pag == 1:
            self.df.selPage("Tax")
            self.df.focusField("T", 2, 1)
        elif self.df.pag == 2:
            self.df.selPage("Bank")
            self.df.focusField("T", 3, 1)
        elif self.df.pag == 3:
            self.df.selPage("Earnings")
        elif self.df.pag == 6:
            self.doAccept()

    def doEarnCod(self, frt, pag, r, c, p, i, w):
        desc = self.sql.getRec("wagedc", cols=["ced_desc"],
            where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=",
            "E"), ("ced_code", "=", w)], limit=1)
        if not desc:
            return "Invalid Code"
        self.code = w
        self.df.loadEntry(frt, pag, p+1, data=desc[0])
        code = self.sql.getRec("wagcod", cols=["wcd_eamt", "wcd_ramt"],
            where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=",
            self.empno), ("wcd_type", "=", "E"), ("wcd_code", "=", w)],
            limit=1)
        if not code:
            self.ncod = "y"
        else:
            self.ncod = "n"
            self.df.loadEntry(frt, pag, p+2, data=code[0])

    def doEarnAmt(self, frt, pag, r, c, p, i, w):
        self.eamt = w
        self.ramt = 0

    def doEndEarn(self):
        self.doEndCode("E")

    def doDedCod(self, frt, pag, r, c, p, i, w):
        desc = self.sql.getRec("wagedc", cols=["ced_desc"],
            where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=",
            "D"), ("ced_code", "=", w)], limit=1)
        if not desc:
            return "Invalid Code"
        self.code = w
        self.df.loadEntry(frt, pag, p+1, data=desc[0])
        code = self.sql.getRec("wagcod", cols=["wcd_eamt", "wcd_ramt"],
            where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=",
            self.empno), ("wcd_type", "=", "D"), ("wcd_code", "=", w)],
            limit=1)
        if not code:
            self.ncod = "y"
        else:
            self.ncod = "n"
            self.df.loadEntry(frt, pag, p+2, data=code[0])
            self.df.loadEntry(frt, pag, p+3, data=code[1])

    def doDedEAmt(self, frt, pag, r, c, p, i, w):
        self.eamt = w

    def doDedRAmt(self, frt, pag, r, c, p, i, w):
        self.ramt = w

    def doEndDed(self):
        self.doEndCode("D")

    def doEndCode(self, rtype):
        if self.ncod == "y":
            self.sql.insRec("wagcod", data=[self.opts["conum"],
            self.empno, rtype, self.code, self.eamt, self.ramt])
        else:
            self.sql.updRec("wagcod", cols=["wcd_eamt", "wcd_ramt"],
                data=[self.eamt, self.ramt], where=[("wcd_cono", "=",
                self.opts["conum"]), ("wcd_empno", "=", self.empno),
                ("wcd_type", "=", rtype), ("wcd_code", "=", self.code)])
        self.doLoadEarnDed(rtype, focus=True)

    def doLoadEarnDed(self, rtype, focus=False):
        if rtype == "E":
            pag = 4
        else:
            pag = 5
        self.df.clearFrame("C", pag)
        codes = self.sql.getRec(tables=["wagcod", "wagedc"], cols=["wcd_code",
            "ced_desc", "wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=",
            self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type",
            "=", rtype), ("ced_cono = wcd_cono",), ("ced_type = wcd_type",),
            ("ced_code = wcd_code",)])
        if not codes:
            return
        p = 0
        for cod in codes:
            for i, c in enumerate(cod):
                if rtype == "E" and i == 3:
                    continue
                self.df.loadEntry("C", pag, p, data=c)
                p = p + 1
        if focus:
            self.df.focusField("C", pag, p+1)
        else:
            self.df.last[pag][1] = p + 1

    def doCodeDelete(self):
        if self.df.pag == 4:
            rtype = "E"
        else:
            rtype = "D"
        code = self.df.c_work[self.df.pag][self.df.row][self.df.idx-2]
        self.sql.delRec("wagcod", where=[("wcd_cono", "=", self.opts["conum"]),
            ("wcd_empno", "=", self.empno), ("wcd_type", "=", rtype),
            ("wcd_code", "=", code)])
        self.doLoadEarnDed(rtype, focus=True)

    def doAccept(self):
        frt, pag, col, mes = self.df.doCheckFields(("T",0,None))
        if not mes:
            frt, pag, col, mes = self.df.doCheckFields(("T",1,None))
        if not mes:
            frt, pag, col, mes = self.df.doCheckFields(("T",2,None))
        if not mes and self.df.t_work[1][0][15] == "E":
            frt, pag, col, mes = self.df.doCheckFields(("T",3,None))
        if mes:
            if pag > 0 and pag != self.df.pag:
                if frt == "T":
                    self.df.last[pag][0] = col+1
                else:
                    self.df.last[pag][1] = col+1
                self.df.selPage(self.df.tags[pag - 1][0])
            self.df.focusField(frt, pag, (col+1), err=mes)
        else:
            data = [self.opts["conum"]]
            for p in range(0, self.df.pgs):
                for x in range(0, self.df.topq[p]):
                    data.append(self.df.t_work[p][0][x])
            data.append(self.term)
            if self.new:
                self.sql.insRec("wagmst", data=data)
                for b in range(3):
                    data = [self.opts["conum"], self.empno, b+1,
                        self.df.t_work[6][0][b], ""]
                    self.sql.insRec("wagbal", data=data)
            else:
                dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
                if data != self.oldm[:len(data)]:
                    col = self.sql.wagmst_col
                    data.append(self.oldm[col.index("wgm_xflag")])
                    self.sql.updRec("wagmst", data=data, where=[("wgm_cono",
                        "=", self.opts["conum"]), ("wgm_empno", "=",
                        self.empno)])
                    for num, dat in enumerate(self.oldm):
                        if dat != data[num]:
                            self.sql.insRec("chglog", data=["wagmst", "U",
                                "%03i%05i" % (self.opts["conum"], self.empno),
                                col[num], dte, self.opts["capnm"], str(dat),
                                str(data[num]), "", 0])
                for n, b in enumerate(self.df.t_work[6][0]):
                    lvl = n + 1
                    data = [self.opts["conum"], self.empno, lvl, b]
                    whr = [
                        ("wbl_cono", "=", self.opts["conum"]),
                        ("wbl_empno", "=", self.empno),
                        ("wbl_balno", "=", lvl)]
                    chk = self.sql.getRec("wagbal", where=whr, limit=1)
                    if not chk:
                        self.sql.insRec("wagbal", data=data)
                        continue
                    if data != self.oldb[n][:len(data)]:
                        col = self.sql.wagbal_col
                        data.append(self.oldb[n][col.index("wbl_xflag")])
                        self.sql.updRec("wagbal", data=data, where=whr)
                        for num, dat in enumerate(self.oldb[n]):
                            if dat != data[num]:
                                self.sql.insRec("chglog", data=["wagbal", "U",
                                    "%03i%05i%i" % (self.opts["conum"],
                                    self.empno, lvl), col[num], dte,
                                    self.opts["capnm"], str(dat),
                                    str(data[num]), "", 0])
            self.opts["mf"].dbm.commitDbase()
            self.df.last[0] = [0, 0]
            self.df.selPage("General")
            self.df.focusField("T", 0, 1)

    def doMainDelete(self):
        t = self.sql.getRec("wagtf1", cols=["count(*)"],
            where=[("wt1_cono", "=", self.opts["conum"]), ("wt1_empno", "=",
            self.empno)], limit=1)
        if t[0]:
            return "Transactions 1 Exist, Not Deleted"
        t = self.sql.getRec("wagtf2", cols=["count(*)"],
            where=[("wt2_cono", "=", self.opts["conum"]), ("wt2_empno=%s", "=",
            self.empno)], limit=1)
        if t[0]:
            return "Transactions 2 Exist, Not Deleted"
        t = self.sql.getRec("wagltf", cols=["count(*)"],
            where=[("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=",
            self.empno)], limit=1)
        if t[0]:
            return "Loan Transactions Exist, Not Deleted"
        self.sql.delRec("wagbal", where=[("wbl_cono", "=", self.opts["conum"]),
            ("wbl_empno", "=", self.empno)])
        self.sql.delRec("wagcap", where=[("wcp_cono", "=", self.opts["conum"]),
            ("wcp_empno", "=", self.empno)])
        self.sql.delRec("wagcod", where=[("wcd_cono", "=", self.opts["conum"]),
            ("wcd_empno", "=", self.empno)])
        self.sql.delRec("waglmf", where=[("wlm_cono", "=", self.opts["conum"]),
            ("wlm_empno", "=", self.empno)])
        self.sql.delRec("wagmst", where=[("wgm_cono", "=", self.opts["conum"]),
            ("wgm_empno", "=", self.empno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog", data=["wagmst", "D", "%03i%05i" %
            (self.opts["conum"], self.empno), "", dte, self.opts["capnm"],
            "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doPrint(self):
        tables = []
        for pag in range(0, (self.df.pgs+1)):
            for x in range(0, self.df.topq[pag]):
                lin = []
                lin.append(self.df.topf[pag][x][3])
                lin.append(self.df.t_disp[pag][0][x])
                tables.append(lin)
        heads = ["Salaries and Wages File Maintenance"]
        cols = [["a","NA",30.0,"Field Name"],
                ["b","NA",30.0,"Values"]]
        state = self.df.disableButtonsTags()
        RepPrt(self.opts["mf"], name=self.__class__.__name__, tables=tables,
            heads=heads, cols=cols, conum=self.opts["conum"],
            conam=self.opts["conam"], ttype="D")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

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

    def doExit(self):
        if self.df.pag == 0:
            self.doCloseProcess()
        elif self.df.pag == 1:
            self.df.focusField("T", 0, 3)
        elif self.df.pag == 2:
            self.df.selPage("General")
        elif self.df.pag == 3:
            self.df.selPage("Tax")
        elif self.df.pag == 4:
            self.df.selPage("Deductions")
        elif self.df.pag == 5:
            self.df.selPage("Balances")

    def doCloseProcess(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #22
0
class wgc410(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,
                       "ctlmes",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.system = "WAG"
        return True

    def mainProcess(self):
        mss = {
            "stype":
            "R",
            "tables": ("ctlmes", ),
            "cols": (("mss_message", "", 0, "Mss"), ("mss_detail", "NA", 50,
                                                     "Details")),
            "where": [("mss_system", "=", self.system)],
            "order":
            "mss_message"
        }
        self.fld = ((("T", 0, 0, 0), "IUI", 3, "Message Number", "", "", "N",
                     self.doMes, mss, None, ("notzero", )),
                    (("T", 0, 1, 0), "ITv", (30, 6), "Details", "", "", "N",
                     self.doDetail, None, self.doDelete, None))
        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 doMes(self, frt, pag, r, c, p, i, w):
        self.message = w
        self.acc = self.sql.getRec("ctlmes",
                                   where=[("mss_system", "=", self.system),
                                          ("mss_message", "=", self.message)],
                                   order="mss_message",
                                   limit=1)
        if not self.acc:
            self.new = "Y"
            self.df.loadEntry(frt, pag, p + 1, data="")
        else:
            self.new = "N"
            self.detail = self.acc[self.sql.ctlmes_col.index("mss_detail")]
            self.df.loadEntry(frt, pag, p + 1, data=self.detail)

    def doDetail(self, frt, pag, r, c, p, i, w):
        if len(w) > 150:
            return "Invalid Message Length, Maximum 150 Characters"

    def doDelete(self):
        self.sql.delRec("ctlmes",
                        where=[("mss_system", "=", self.system),
                               ("mss_message", "=", self.message)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        wid, self.detail = self.df.getEntry("T", 0, 1)
        if len(self.detail) > 150:
            self.df.focusField(
                "T",
                0,
                2,
                err="Invalid Message Length, Maximum 150 Characters")
        else:
            data = [self.system, self.message, self.detail]
            if self.new == "Y":
                self.sql.insRec("ctlmes", data=data)
            elif data != self.acc[:len(data)]:
                col = self.sql.ctlmes_col
                data.append(self.acc[col.index("mss_xflag")])
                self.sql.updRec("ctlmes",
                                data=data,
                                where=[("mss_system", "=", self.system),
                                       ("mss_message", "=", self.message)])
            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()
Пример #23
0
class bs1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        ctlsys = gc.getCtl("ctlsys")
        if not ctlsys:
            return
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        tabs = ["bksmst", "bksown", "bksaut", "chglog"]
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        bmf = {
            "stype":
            "R",
            "tables": ("bksmst", "bksown"),
            "cols":
            (("bmf_stat", "", 0, "S"), ("bmf_code", "", 0, "Code"),
             ("bmf_titl", "", 0, "Title", "Y"), ("bmf_ownr", "", 0, "Ownr"),
             ("bof_fnam", "", 0, "Name"), ("bmf_mnth", "", 0, "Mth-Rec")),
            "where": [("bmf_cono", "=", self.opts["conum"]),
                      ("bof_cono=bmf_cono", ), ("bof_code=bmf_ownr", )],
            "order":
            "bmf_stat, bmf_titl",
            "index":
            1
        }
        amf = {
            "stype":
            "R",
            "tables": ("bksaut", ),
            "cols":
            (("baf_code", "", 0, "Code"), ("baf_snam", "", 0, "Surname", "Y"),
             ("baf_fnam", "", 0, "Names")),
            "order":
            "baf_code"
        }
        omf = {
            "stype":
            "R",
            "tables": ("bksown", ),
            "cols":
            (("bof_code", "", 0, "Code"), ("bof_snam", "", 0, "Surname", "Y"),
             ("bof_fnam", "", 0, "Names")),
            "where": [("bof_cono", "=", self.opts["conum"])],
            "order":
            "bof_code"
        }
        r1s = (("Current", "C"), ("Removed", "X"))
        fld = ((("T", 0, 0,
                 0), "IUI", 4, "Code", "", "", "Y", self.doCode, bmf, None,
                ("efld", )), (("T", 0, 1, 0), "ITX", 30, "Title", "", "", "N",
                              self.doTitle, None, None, ("notblank", )),
               (("T", 0, 2, 0), "IUI", 4, "Author", "", "", "N", self.doAuthor,
                amf, None, ("efld", )), (("T", 0, 2, 0), "ONA", 30, ""),
               (("T", 0, 3, 0), "IUI", 4, "Owner", "", "", "N", self.doOwner,
                omf, None, ("efld", )), (("T", 0, 3, 0), "ONA", 30, ""),
               (("T", 0, 4,
                 0), "ID2", 7, "Month", "", "", "N", self.doMonth, None, None,
                ("efld", )), (("T", 0, 5, 0), ("IRB", r1s), 0, "Status", "",
                              "C", "N", self.doStatus, None, None, None))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2),
                (("T", 0, 0), ("T", 0, 1))), ("Exit", None, self.doExit, 0,
                                              ("T", 0, 1), None))
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.bcode = w
        if not self.bcode:
            ok = askQuestion(self.opts["mf"].body,
                             "New Book",
                             "Is This a New Book?",
                             default="no")
            if ok == "no":
                return "Invalid Code"
            self.newbk = True
            self.bcode = getNextCode(self.sql,
                                     "bksmst",
                                     "bmf_code",
                                     start=1,
                                     last=9999)
            self.df.loadEntry(frt, pag, p, data=self.bcode)
        else:
            self.old = self.sql.getRec("bksmst",
                                       where=[("bmf_cono", "=",
                                               self.opts["conum"]),
                                              ("bmf_code", "=", self.bcode)],
                                       limit=1)
            if not self.old:
                ok = askQuestion(self.opts["mf"].body,
                                 "Code",
                                 "Is This a Manual Code?",
                                 default="no")
                if ok == "no":
                    return "Invalid Code"
                self.newbk = True
                return
            col = 0
            self.newbk = False
            for num, dat in enumerate(self.old[1:-1]):
                self.df.loadEntry(frt, pag, col, data=dat)
                if num == 2:
                    col += 1
                    self.df.loadEntry(frt, pag, col, data=self.getAuthor(dat))
                elif num == 3:
                    col += 1
                    self.df.loadEntry(frt, pag, col, data=self.getOwner(dat))
                col += 1

    def doDelete(self):
        self.sql.delRec("bksmst",
                        where=[("bmf_cono", "=", self.opts["conum"]),
                               ("bmf_code", "=", self.bcode)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doTitle(self, frt, pag, r, c, p, i, w):
        self.title = w

    def doAuthor(self, frt, pag, r, c, p, i, w):
        self.acode = w
        if not self.acode:
            ok = askQuestion(self.opts["mf"].body,
                             "New Author",
                             "Is This a New Author?",
                             default="no")
            if ok == "no":
                return "Invalid Code"
            self.doNewAuthor()
            if not self.aend:
                return "rf"
            self.df.loadEntry(frt, pag, p, data=self.acode)
        acc = self.sql.getRec("bksaut",
                              where=[("baf_code", "=", self.acode)],
                              limit=1)
        if not acc:
            return "Invalid Code"
        self.df.loadEntry(frt, pag, p + 1, data=self.getAuthor(self.acode))

    def doNewAuthor(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        tit = ("Author's Details", )
        fld = ((("T", 0, 0, 0), "ITX", 30, "Surname", "", "", "Y", None, None,
                None, ("notblank", )), (("T", 0, 1, 0), "ITX", 30, "Names", "",
                                        "", "Y", None, None, None, ("efld", )))
        self.aa = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doAutEnd, "y"), ),
                               txit=(self.doAutExit, ))
        self.aa.mstFrame.wait_window()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

    def doAutEnd(self):
        self.aend = True
        self.acode = getNextCode(self.sql,
                                 "bksaut",
                                 "baf_code",
                                 start=1,
                                 last=9999)
        data = [self.acode, self.aa.t_work[0][0][0], self.aa.t_work[0][0][1]]
        self.sql.insRec("bksaut", data=data)
        self.aa.closeProcess()

    def doAutExit(self):
        self.aend = False
        self.aa.closeProcess()

    def getAuthor(self, code):
        acc = self.sql.getRec("bksaut",
                              where=[("baf_code", "=", code)],
                              limit=1)
        if acc:
            return "%s, %s" % (acc[1], acc[2])
        else:
            return ""

    def doOwner(self, frt, pag, r, c, p, i, w):
        self.ocode = w
        if not self.ocode:
            ok = askQuestion(self.opts["mf"].body,
                             "New Member",
                             "Is This a New Member?",
                             default="no")
            if ok == "no":
                return "Invalid Code"
            self.doNewOwner()
            if not self.oend:
                return "rf"
            self.df.loadEntry(frt, pag, p, data=self.ocode)
        acc = self.sql.getRec("bksown",
                              where=[("bof_cono", "=", self.opts["conum"]),
                                     ("bof_code", "=", self.ocode)],
                              limit=1)
        if not acc:
            return "Invalid Code"
        self.df.loadEntry(frt, pag, p + 1, data=self.getOwner(self.ocode))

    def doNewOwner(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        tit = ("Owner's Details", )
        fld = ((("T", 0, 0, 0), "ITX", 30, "Surname", "", "", "Y", None, None,
                None, ("notblank", )), (("T", 0, 1, 0), "ITX", 30, "Names", "",
                                        "", "Y", None, None, None, ("efld", )))
        self.oo = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doOwnEnd, "y"), ),
                               txit=(self.doOwnExit, ))
        self.oo.mstFrame.wait_window()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

    def doOwnEnd(self):
        self.oend = True
        self.ocode = getNextCode(self.sql,
                                 "bksown",
                                 "bof_code",
                                 start=1,
                                 last=9999)
        data = [
            self.opts["conum"], self.acode, self.oo.t_work[0][0][0],
            self.oo.t_work[0][0][1], "", "", "", "", "", "", "", ""
        ]
        self.sql.insRec("bksown", data=data)
        self.oo.closeProcess()

    def doOwnExit(self):
        self.oend = False
        self.oo.closeProcess()

    def getOwner(self, code):
        acc = self.sql.getRec("bksown",
                              where=[("bof_cono", "=", self.opts["conum"]),
                                     ("bof_code", "=", code)],
                              limit=1)
        if acc:
            return "%s, %s" % (acc[2], acc[3])
        else:
            return ""

    def doMonth(self, frt, pag, r, c, p, i, w):
        self.month = w

    def doStatus(self, frt, pag, r, c, p, i, w):
        self.status = w

    def doEnd(self):
        data = [self.opts["conum"]]
        for num, dat in enumerate(self.df.t_work[0][0]):
            if num in (3, 5):
                continue
            data.append(dat)
        if self.newbk:
            self.sql.insRec("bksmst", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.bksmst_col
            data.append(self.old[col.index("bmf_xflag")])
            self.sql.updRec("bksmst",
                            data=data,
                            where=[("bmf_cono", "=", self.opts["conum"]),
                                   ("bmf_code", "=", self.bcode)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "bksmst", "U",
                            "%03i%04i" % (self.opts["conum"], self.bcode),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #24
0
class mlc210(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,
            ["chglog", "genmst", "memctc", "memcat", "memtrn", "memctp"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        memctl = gc.getCtl("memctl", self.opts["conum"])
        if not memctl:
            return
        self.glint = memctl["mcm_glint"]
        return True

    def mainProcess(self):
        cod = {
            "stype":
            "R",
            "tables": ("memctc", ),
            "cols": (("mcc_code", "", 0, "CD"), ("mcc_freq", "", 0, "F"),
                     ("mcc_desc", "", 0, "Description", "Y"), ("mcc_rgrp", "",
                                                               0, "RG")),
            "where": [("mcc_cono", "=", self.opts["conum"])],
            "whera": [["T", "mcc_type", 0, 0]]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        prc = {
            "stype":
            "R",
            "tables": ("memctp", ),
            "cols":
            (("mcp_date", "", 0, "CD"), ("mcp_penalty", "", 0, "P-Rte"),
             ("mcp_prorata", "", 0, "P"), ("mcp_rate_01", "", 0, "Month-01")),
            "where": [("mcp_cono", "=", self.opts["conum"])],
            "whera": [["T", "mcp_type", 0, 0], ["T", "mcp_code", 1, 0]],
            "order":
            "mcp_date"
        }
        r1s = (("Fees", "A"), ("Category", "B"), ("Sports", "C"),
               ("Debentures", "D"))
        r2s = (("Annually", "A"), ("Monthly", "M"), ("Once Off", "O"),
               ("Never", "N"))
        r3s = (("No", "N"), ("1M", "1"), ("3M", "3"), ("6M", "6"), ("Manual",
                                                                    "M"))
        fld = [(("T", 0, 0, 0), ("IRB", r1s), 0, "Category Type", "", "A", "Y",
                self.doCatType, None, None, None),
               (("T", 0, 1, 0), "I@mcc_code", 0, "", "", "", "N",
                self.doCatCode, cod, None, ("notzero", )),
               (("T", 0, 2, 0), "I@mcc_desc", 0, "", "", "", "N", self.doDesc,
                None, self.doDelete, ("notblank", )),
               (("T", 0, 3, 0), "I@mcc_rgrp", 0, "", "", "", "N", self.doRgrp,
                None, None, ("notblank", )),
               (("T", 0, 4, 0), ("IRB", r2s), 0, "Frequency", "", "A", "N",
                self.doCatFreq, None, None, None),
               (("T", 0, 5, 0), "I@mcc_age_l", 0, "", "", "", "N",
                self.doCatLimit, None, None, ("efld", )),
               (("T", 0, 5,
                 0), "I@mcc_and_s", 0, "And Mship", "And Length of Service",
                "", "N", self.doCatLimit, None, None, ("efld", )),
               (("T", 0, 5,
                 0), "I@mcc_or_s", 0, "Or Mship", "Or Length of Service", "",
                "N", self.doCatLimit, None, None, ("efld", )),
               (("T", 0, 6, 0), "I@mcc_ncode", 0, "Next Code", "", "", "N",
                self.doCatNcode, cod, None, None)]
        idx = 7
        if self.glint == "Y":
            fld.extend([(("T", 0, idx, 0), "I@mcc_glac", 0, "", "", "", "N",
                         self.doGlac, glm, None, ("efld", )),
                        (("T", 0, idx, 0), "ONA", 30, "")])
            idx += 1
        fld.extend([(("T", 0, idx, 0), "I@mcp_date", 0, "", "", "", "N",
                     self.doDate, prc, None, ("efld", )),
                    (("T", 0, idx + 1, 0), "I@mcp_penalty", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 2, 0), ("IRB", r3s), 0, "Pro-Rata",
                     "Pro-Rata", "N", "N", self.doProRata, None, None, None),
                    (("T", 0, idx + 3, 0), "I@mcp_rate_01", 0, "", "", "", "N",
                     self.doMonth, None, None, ("efld", )),
                    (("T", 0, idx + 3, 34, 46), "I@mcp_rate_02", 0, "", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, idx + 4, 0), "I@mcp_rate_03", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 4, 34, 46), "I@mcp_rate_04", 0, "", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, idx + 5, 0), "I@mcp_rate_05", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 5, 34, 46), "I@mcp_rate_06", 0, "", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, idx + 6, 0), "I@mcp_rate_07", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 6, 34, 46), "I@mcp_rate_08", 0, "", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, idx + 7, 0), "I@mcp_rate_09", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 7, 34, 46), "I@mcp_rate_10", 0, "", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, idx + 8, 0), "I@mcp_rate_11", 0, "", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, idx + 8, 34, 46), "I@mcp_rate_12", 0, "", "", "",
                     "N", None, None, None, ("efld", ))])
        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=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doCatType(self, frt, pag, r, c, p, i, w):
        self.ctyp = w

    def doCatCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.oldcat = self.sql.getRec("memctc",
                                      where=[("mcc_cono", "=",
                                              self.opts["conum"]),
                                             ("mcc_type", "=", self.ctyp),
                                             ("mcc_code", "=", self.code)],
                                      limit=1)
        if self.oldcat:
            self.desc = self.oldcat[self.sql.memctc_col.index("mcc_desc")]
            self.rgrp = self.oldcat[self.sql.memctc_col.index("mcc_rgrp")]
            self.freq = self.oldcat[self.sql.memctc_col.index("mcc_freq")]
            self.age_l = self.oldcat[self.sql.memctc_col.index("mcc_age_l")]
            self.and_s = self.oldcat[self.sql.memctc_col.index("mcc_and_s")]
            self.or_s = self.oldcat[self.sql.memctc_col.index("mcc_or_s")]
            self.ncode = self.oldcat[self.sql.memctc_col.index("mcc_ncode")]
            self.df.loadEntry(frt, pag, p + 1, data=self.desc)
            self.df.loadEntry(frt, pag, p + 2, data=self.rgrp)
            self.df.loadEntry(frt, pag, p + 3, data=self.freq)
            self.df.loadEntry(frt, pag, p + 4, data=self.age_l)
            self.df.loadEntry(frt, pag, p + 5, data=self.and_s)
            self.df.loadEntry(frt, pag, p + 6, data=self.or_s)
            self.df.loadEntry(frt, pag, p + 7, data=self.ncode)
            if self.glint == "Y":
                self.glno = self.oldcat[self.sql.memctc_col.index("mcc_glac")]
                self.df.loadEntry(frt, pag, p + 8, data=self.glno)
                des = self.sql.getRec("genmst",
                                      cols=["glm_desc"],
                                      where=[("glm_cono", "=",
                                              self.opts["conum"]),
                                             ("glm_acno", "=", self.glno)],
                                      limit=1)
                if des:
                    self.df.loadEntry("T", 0, p + 9, data=des[0])
                idx = 11
            else:
                idx = 9
            if self.freq == "N":
                self.date = 0
                self.oldprc = []
                for x in range(idx, len(self.df.t_work[0][0])):
                    self.df.loadEntry("T", 0, x, data="")
            else:
                self.oldprc = self.sql.getRec("memctp",
                                              where=[
                                                  ("mcp_cono", "=",
                                                   self.opts["conum"]),
                                                  ("mcp_type", "=", self.ctyp),
                                                  ("mcp_code", "=", self.code)
                                              ],
                                              order="mcp_date desc",
                                              limit=1)
                self.date = self.oldprc[self.sql.memctp_col.index("mcp_date")]
                for n, d in enumerate(self.oldprc[3:-1]):
                    self.df.loadEntry("T", 0, idx + n, data=d)

    def doDesc(self, frt, pag, r, c, p, i, w):
        self.desc = w
        if self.ctyp != "C":
            self.rgrp = "NA"
            return "sk1"

    def doRgrp(self, frt, pag, r, c, p, i, w):
        self.rgrp = w

    def doCatFreq(self, frt, pag, r, c, p, i, w):
        self.freq = w
        if self.freq == "N":
            self.age_l = 0
            self.and_s = 0
            self.or_s = 0
            self.ncode = 0
            self.glno = 0
            for x in range(p + 1, len(self.df.t_work[0][0])):
                self.df.loadEntry("T", 0, x, data="")
            return "nd"
        if self.ctyp != "B":
            self.age_l = 0
            self.and_s = 0
            self.or_s = 0
            self.ncode = 0
            self.df.loadEntry(frt, pag, p + 1, data=0)
            self.df.loadEntry(frt, pag, p + 2, data=0)
            self.df.loadEntry(frt, pag, p + 3, data=0)
            self.df.loadEntry(frt, pag, p + 4, data=0)
            return "sk4"

    def doCatLimit(self, frt, pag, r, c, p, i, w):
        if p == 5:
            self.age_l = w
        elif p == 6:
            self.and_s = w
        else:
            self.or_s = w
            if not self.age_l and not self.and_s and not self.or_s:
                self.ncode = 0
                self.df.loadEntry(frt, pag, p + 1, data=0)
                return "sk1"

    def doCatNcode(self, frt, pag, r, c, p, i, w):
        self.ncode = w

    def doGlac(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid G/L Account"
        self.glno = w
        self.df.loadEntry("T", 0, p + 1, data=acc[0])

    def doDate(self, frt, pag, r, c, p, i, w):
        self.date = w
        if not self.oldcat:
            self.oldprc = []
        else:
            self.oldprc = self.sql.getRec("memctp",
                                          where=[("mcp_cono", "=",
                                                  self.opts["conum"]),
                                                 ("mcp_code", "=", self.code),
                                                 ("mcp_type", "=", self.ctyp),
                                                 ("mcp_date", "=", self.date)],
                                          limit=1)
        if self.oldprc:
            for n, d in enumerate(self.oldprc[4:-1]):
                self.df.loadEntry(frt, pag, p + 1 + n, data=d)
        else:
            for n in range(14):
                self.df.clearEntry(frt, pag, c + 1 + n)

    def doProRata(self, frt, pag, r, c, p, i, w):
        self.prorata = w

    def doMonth(self, frt, pag, r, c, p, i, w):
        if self.oldprc or self.prorata == "M":
            return
        if self.prorata == "N":
            mths = [w] * 12
        elif self.prorata == "1":
            mths = [w]
            for x in range(11, 0, -1):
                mths = mths + [round(w / 12.0 * x, 0)]
        elif self.prorata == "3":
            mths = [w, w, w]
            for x in range(3, 0, -1):
                for _ in range(3):
                    mths = mths + [round(w / 4.0 * x, 0)]
        elif self.prorata == "6":
            mths = [w, w, w, w, w, w]
            for x in range(6):
                mths = mths + [round(w / 2.0, 0)]
        for n, d in enumerate(mths):
            self.df.loadEntry(frt, pag, p + n, data=d)
        if self.prorata == "N":
            return "sk11"

    def doDelete(self):
        mst = self.sql.getRec("memcat",
                              cols=["count(*)"],
                              where=[("mlc_cono", "=", self.opts["conum"]),
                                     ("mlc_type", "=", self.ctyp),
                                     ("mlc_code", "=", self.code)],
                              limit=1)
        if mst[0]:
            return "Code in Use (memcat), Not Deleted"
        trn = self.sql.getRec("memtrn",
                              cols=["count(*)"],
                              where=[("mlt_cono", "=", self.opts["conum"]),
                                     ("mlt_ctyp", "=", self.ctyp),
                                     ("mlt_ccod", "=", self.code)],
                              limit=1)
        if trn[0]:
            return "Code in Use (memtrn), Not Deleted"
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.delRec("memctc",
                        where=[("mcc_cono", "=", self.opts["conum"]),
                               ("mcc_type", "=", self.ctyp),
                               ("mcc_code", "=", self.code)])
        self.sql.insRec("chglog", data=["memctc", "D", "%03i%1s%02i" % \
            (self.opts["conum"], self.ctyp, self.code), "", dte,
            self.opts["capnm"], "", "", "", 0])
        prc = self.sql.getRec("memctp",
                              cols=["mcp_date"],
                              where=[("mcp_cono", "=", self.opts["conum"]),
                                     ("mcp_type", "=", self.ctyp),
                                     ("mcp_code", "=", self.code)])
        for date in prc:
            self.sql.delRec("memctp",
                            where=[("mcp_cono", "=", self.opts["conum"]),
                                   ("mcp_code", "=", self.code),
                                   ("mcp_code", "=", self.code),
                                   ("mcp_date", "=", date)])
            self.sql.insRec("chglog", data=["memctp", "D", "%03i%1s%02i%8s" % \
                (self.opts["conum"], self.ctyp, self.code, date), "", dte,
                self.opts["capnm"], "", "", "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        data = [
            self.opts["conum"], self.ctyp, self.code, self.desc, self.rgrp,
            self.freq, self.age_l, self.and_s, self.or_s, self.ncode
        ]
        if self.glint == "N":
            data.append(0)
        else:
            data.append(self.glno)
        if not self.oldcat:
            self.sql.insRec("memctc", data=data)
        elif data != self.oldcat[:len(data)]:
            col = self.sql.memctc_col
            data.append(self.oldcat[col.index("mcc_xflag")])
            self.sql.updRec("memctc",
                            data=data,
                            where=[("mcc_cono", "=", self.opts["conum"]),
                                   ("mcc_type", "=", self.ctyp),
                                   ("mcc_code", "=", self.code)])
            for num, dat in enumerate(self.oldcat):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "memctc", "U",
                            "%03i%1s%02i" %
                            (self.opts["conum"], self.ctyp, self.code),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        if self.freq != "N":
            data = [self.opts["conum"], self.ctyp, self.code]
            if self.glint == "Y":
                idx = 11
            else:
                idx = 9
            for x in range(idx, idx + 15):
                data.append(self.df.t_work[0][0][x])
            if not self.oldprc:
                self.sql.insRec("memctp", data=data)
            elif data != self.oldprc[:len(data)]:
                col = self.sql.memctp_col
                data.append(self.oldcat[col.index("mcp_xflag")])
                self.sql.updRec("memctp",
                                data=data,
                                where=[("mcp_cono", "=", self.opts["conum"]),
                                       ("mcp_type", "=", self.ctyp),
                                       ("mcp_code", "=", self.code),
                                       ("mcp_date", "=", self.date)])
                for num, dat in enumerate(self.oldprc):
                    if dat != data[num]:
                        self.sql.insRec("chglog",
                                        data=[
                                            "memctp", "U",
                                            "%03i%1s%02i%8s" %
                                            (self.opts["conum"], self.ctyp,
                                             self.code, str(self.date)),
                                            col[num], dte, self.opts["capnm"],
                                            str(dat),
                                            str(data[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()
Пример #25
0
class gl1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        ctlsys = gc.getCtl("ctlsys")
        if not ctlsys:
            return
        self.gldep = ctlsys["sys_gl_dep"]
        self.gldig = ctlsys["sys_gl_dig"]
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        if not self.taxdf:
            self.taxdf = "N"
        self.mods = []
        for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2):
            self.mods.append(ctlmst["ctm_modules"][x:x + 2])
        tabs = [
            "ctlctl", "ctldep", "ctlvmf", "genmst", "genbal", "genbud",
            "genrpt", "gentrn", "chglog"
        ]
        if "CR" in self.mods:
            tabs.append("crsctl")
        if "DR" in self.mods:
            tabs.append("drsctl")
        if "ST" in self.mods:
            tabs.extend(["strctl", "strloc"])
        if "SI" in self.mods:
            tabs.append("slsctl")
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        chk = self.sql.getRec("genmst",
                              cols=["count(*)"],
                              where=[("glm_cono", "=", self.opts["conum"])],
                              limit=1)
        if chk[0]:
            self.newgen = False
        else:
            self.newgen = True
        if "args" in self.opts:
            self.acno = None
        return True

    def mainProcess(self):
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        vat = {
            "stype":
            "R",
            "tables": ("ctlvmf", ),
            "cols": (("vtm_code", "", 0, "Acc-Num"), ("vtm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("vtm_cono", "=", self.opts["conum"])]
        }
        r1s = (("Profit & Loss", "P"), ("Balance Sheet", "B"))
        r2s = (("Yes", "Y"), ("No", "N"))
        fld = [(("T", 0, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "Y",
                self.doAccNum, glm, None, ("notzero", )),
               (("T", 0, 1, 0), ("IRB", r1s), 0, "Account Type", "", "P", "N",
                self.doTypCod, None, self.doDelete, None),
               (("T", 0, 2,
                 0), "INA", 30, "Description", "Account Description", "", "N",
                None, None, None, ("notblank", )),
               (("T", 0, 3, 0), ("IRB", r2s), 0, "Allow Postings", "", "Y",
                "N", None, None, None, None),
               [("T", 0, 4, 0), "IUA", 1, "Tax Default", "", "", "N",
                self.doVatCod, vat, None, ("notblank", )]]
        but = [
            ("Import",None,self.doImport,0,("T",0,1),("T",0,2),
                "Import a Chart of Accounts from a CSV or XLS file "\
                "having the following fields: Account Number, "\
                "Account Type (P/B), Description, Direct Postings (Y/N), "\
                "VAT Code"),
            ["Populate",None,self.doPopulate,0,("T",0,1),("T",0,2),
                "Generate a Chart of Accounts with Accompanying Control "\
                "Records and Financial Statement Report. This Only Applies "\
                "to Unpopulated (NEW) Ledgers."],
            ("Accept",None,self.doAccept,0,(("T",0,2),("T",0,5)),
                (("T",0,0),("T",0,1))),
            ("Cancel",None,self.doCancel,0,(("T",0,2),("T",0,5)),
                (("T",0,0),("T",0,1))),
            ("Quit",None,self.doQuit,1,None,None,"",1,4)]
        tnd = ((self.doEnd, "y"), )
        txt = (self.doQuit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        if not self.newgen:
            self.df.butt[1][4] = None
            self.df.butt[1][5] = None
            self.df.setWidget(self.df.B1, state="disabled")

    def doAccNum(self, frt, pag, r, c, p, i, w):
        self.acno = w
        self.old = self.sql.getRec("genmst",
                                   where=[("glm_cono", "=",
                                           self.opts["conum"]),
                                          ("glm_acno", "=", self.acno)],
                                   limit=1)
        if not self.old:
            self.new = True
            if self.gldep == "Y":
                err = self.doCheckDep(self.acno)
                if err:
                    return err
        elif "args" in self.opts:
            showError(self.opts["mf"].body, "Error",
                      "Only a New Account is Allowed")
            return "rf"
        else:
            self.new = False
            for x in range(0, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=self.old[x + 1])

    def doTypCod(self, frt, pag, r, c, p, i, w):
        if self.new:
            if w == "P":
                self.df.topf[pag][4][5] = self.taxdf
            else:
                self.df.topf[pag][4][5] = "N"
        elif not self.df.topf[pag][4][5]:
            self.df.topf[pag][4][5] = "N"

    def doVatCod(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("ctlvmf",
                              cols=["vtm_desc"],
                              where=[("vtm_cono", "=", self.opts["conum"]),
                                     ("vtm_code", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid VAT Code"

    def doDelete(self):
        t = self.sql.getRec("gentrn",
                            cols=["count(*)"],
                            where=[("glt_cono", "=", self.opts["conum"]),
                                   ("glt_acno", "=", self.acno)],
                            limit=1)
        if t[0]:
            return "Transactions Exist, Not Deleted"
        self.sql.delRec("genmst",
                        where=[("glm_cono", "=", self.opts["conum"]),
                               ("glm_acno", "=", self.acno)])
        self.sql.delRec("genbal",
                        where=[("glo_cono", "=", self.opts["conum"]),
                               ("glo_acno", "=", self.acno)])
        self.sql.delRec("genbud",
                        where=[("glb_cono", "=", self.opts["conum"]),
                               ("glb_acno", "=", self.acno)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog",
                        data=[
                            "genmst", "D",
                            "%03i%07i" % (self.opts["conum"], self.acno), "",
                            dte, self.opts["capnm"], "", "", "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        if self.newgen:
            self.df.butt[1][4] = None
            self.df.butt[1][5] = None
        data = [
            self.opts["conum"], self.acno, self.df.t_work[0][0][1],
            self.df.t_work[0][0][2], self.df.t_work[0][0][3],
            self.df.t_work[0][0][4]
        ]
        if self.new:
            self.sql.insRec("genmst", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.genmst_col
            data.append(self.old[col.index("glm_xflag")])
            self.sql.updRec("genmst",
                            data=data,
                            where=[("glm_cono", "=", self.opts["conum"]),
                                   ("glm_acno", "=", self.acno)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "genmst", "U",
                            "%03i%07i" % (self.opts["conum"], self.acno),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.B3, state="disabled")
        if "args" in self.opts:
            self.doQuit()
        else:
            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 doImport(self):
        self.df.setWidget(self.df.B3, state="disabled")
        self.df.setWidget(self.df.mstFrame, state="hide")
        fi = FileImport(self.opts["mf"], imptab="genmst", impskp=["glm_cono"])
        sp = ProgressBar(self.opts["mf"].body,
                         typ="Importing Chart of Accounts",
                         mxs=len(fi.impdat))
        err = None
        for num, line in enumerate(fi.impdat):
            sp.displayProgress(num)
            chk = self.sql.getRec("genmst",
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", line[0])],
                                  limit=1)
            if chk:
                err = "%s %s Already Exists" % (fi.impcol[0][0], line[0])
                break
            if self.gldep == "Y":
                err = self.doCheckDep(line[0])
                if err:
                    break
            if line[1] not in ("B", "P"):
                err = "Invalid %s %s, Only B or P" % (fi.impcol[1][0], line[1])
                break
            if not line[2]:
                err = "Blank Description"
                break
            if line[3] not in ("Y", "N"):
                err = "Invalid %s %s" % (fi.impcol[3][0], line[3])
                break
            chk = self.sql.getRec("ctlvmf",
                                  where=[("vtm_cono", "=", self.opts["conum"]),
                                         ("vtm_code", "=", line[4])],
                                  limit=1)
            if not chk:
                err = "%s %s Does Not Exist" % (fi.impcol[4][0], line[4])
                break
            line.insert(0, self.opts["conum"])
            self.sql.insRec("genmst", data=line)
        sp.closeProgress()
        if err:
            err = "Line %s: %s" % ((num + 1), err)
            showError(
                self.opts["mf"].body, "Import Error", """%s

Please Correct your Import File and then Try Again.""" % err)
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doCheckDep(self, acno):
        dep = int(acno / (10**(7 - self.gldig)))
        acc = int(acno % (10**(7 - self.gldig)))
        if dep:
            chk = self.sql.getRec("ctldep",
                                  where=[("dep_cono", "=", self.opts["conum"]),
                                         ("dep_code", "=", dep)],
                                  limit=1)
            if not chk:
                return "Invalid Department Number (%s)" % dep
            chk = self.sql.getRec("genmst",
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", acc)],
                                  limit=1)
            if chk:
                return "This Account Number (%s) is in Use" % acc

    def doPopulate(self):
        if not self.newgen:
            showError(self.opts["mf"].body, "Populate Error",
                      "You Cannot Populate with Existing Accounts")
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
            return
        if self.gldep == "Y":
            showError(self.opts["mf"].body, "Populate Error",
                      "You Cannot Populate with Departments Enabled")
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
            return
        self.igcrs = "N"
        self.igdrs = "N"
        self.igstr = "N"
        self.df.setWidget(self.df.B3, state="disabled")
        self.df.setWidget(self.df.mstFrame, state="hide")
        tit = ("Integrate Subsiduary Ledgers", )
        r1s = (("Yes", "Y"), ("No", "N"))
        fld = []
        col = 0
        if "CR" in self.mods:
            fld.append((("T", 0, col, 0), ("IRB", r1s), 0, "Creditor's Ledger",
                        "Creditor's Ledger", "N", "N", self.doIgCrs, None,
                        None, None, None))
            col += 1
        if "DR" in self.mods:
            fld.append((("T", 0, col, 0), ("IRB", r1s), 0, "Debtor's Ledger",
                        "Debtor's Ledger", "N", "N", self.doIgDrs, None, None,
                        None, None))
            col += 1
        if "ST" in self.mods:
            fld.append((("T", 0, col, 0), ("IRB", r1s), 0, "Stores's Ledger",
                        "Stores's Ledger", "N", "N", self.doIgStr, None, None,
                        None, None))
        if fld:
            self.ig = TartanDialog(self.opts["mf"],
                                   title=tit,
                                   tops=True,
                                   eflds=fld,
                                   tend=((self.doIgEnd, "y"), ),
                                   txit=(self.doIgExit, ))
            self.ig.mstFrame.wait_window()
            if self.igexit:
                self.doQuit()
                return
        sp = SplashScreen(self.opts["mf"].body,
                          "Populating Records\n\nPlease Wait ...")
        # genmst
        genmst = datdic["genmst"]
        for dat in genmst:
            dat.insert(0, self.opts["conum"])
            dat.append("Y")
            if dat[2] == "B":
                dat.append("N")
            else:
                dat.append(self.taxdf)
            self.sql.insRec("genmst", data=dat)
        # genrpt
        genrpt = datdic["genrpt"]
        for dat in genrpt:
            dat.insert(0, self.opts["conum"])
            self.sql.insRec("genrpt", data=dat)
        # ctlctl
        crsctl = 0
        drsctl = 0
        stksoh = 0
        ctlctl = datdic["ctlctl"]
        for dat in ctlctl:
            if dat[0] in ("crs_ctl", "dis_rec"):
                if self.igcrs != "Y":
                    continue
                if dat[0] == "crs_ctl":
                    crsctl = int(dat[2])
            elif dat[0] in ("drs_ctl", "dis_all"):
                if self.igdrs != "Y":
                    continue
                if dat[0] == "drs_ctl":
                    drsctl = int(dat[2])
            elif dat[0] in ("stk_soh", "stk_susp"):
                if self.igstr != "Y":
                    continue
                if dat[0] == "stk_soh":
                    stksoh = int(dat[2])
            elif dat[0] in ("wag_ctl", "wag_slc", "wag_sli"):
                continue
            dat.insert(0, self.opts["conum"])
            self.sql.insRec("ctlctl", data=dat)
        if "CR" in self.mods:
            chk = self.sql.getRec("crsctl",
                                  where=[("ctc_cono", "=", self.opts["conum"])
                                         ])
            if not chk:
                self.sql.insRec("crsctl",
                                data=[
                                    self.opts["conum"], self.igcrs, "E", "", 0,
                                    0, "remittance_advice", ""
                                ])
            else:
                self.sql.updRec("crsctl",
                                cols=["ctc_glint"],
                                data=[self.igcrs],
                                where=[("ctc_cono", "=", self.opts["conum"])])
            if self.igcrs == "Y" and crsctl:
                self.sql.updRec("genmst",
                                cols=["glm_ind"],
                                data=["N"],
                                where=[("glm_cono", "=", self.opts["conum"]),
                                       ("glm_acno", "=", crsctl)])
        if "DR" in self.mods:
            chk = self.sql.getRec("drsctl",
                                  where=[("ctd_cono", "=", self.opts["conum"])
                                         ])
            if not chk:
                self.sql.insRec("drsctl",
                                data=[
                                    self.opts["conum"], self.igdrs, "E", "N",
                                    "statement_normal", "Y", ""
                                ])
            else:
                self.sql.updRec("drsctl",
                                cols=["ctd_glint"],
                                data=[self.igdrs],
                                where=[("ctd_cono", "=", self.opts["conum"])])
            if self.igdrs == "Y" and drsctl:
                self.sql.updRec("genmst",
                                cols=["glm_ind"],
                                data=["N"],
                                where=[("glm_cono", "=", self.opts["conum"]),
                                       ("glm_acno", "=", drsctl)])
        if "ST" in self.mods:
            chk = self.sql.getRec("strctl",
                                  where=[("cts_cono", "=", self.opts["conum"])
                                         ])
            if not chk:
                self.sql.insRec("strctl",
                                data=[
                                    self.opts["conum"], self.igstr, "N", 1,
                                    "N", "purchase_order", ""
                                ])
            else:
                self.sql.updRec("strctl",
                                cols=["cts_glint"],
                                data=[self.igstr],
                                where=[("cts_cono", "=", self.opts["conum"])])
            chk = self.sql.getRec("strloc",
                                  where=[("srl_cono", "=", self.opts["conum"])
                                         ])
            if not chk:
                self.sql.insRec("strloc",
                                data=[
                                    self.opts["conum"], "1",
                                    "Location Number One", "", "", "", ""
                                ])
            if self.igstr == "Y" and stksoh:
                self.sql.updRec("genmst",
                                cols=["glm_ind"],
                                data=["N"],
                                where=[("glm_cono", "=", self.opts["conum"]),
                                       ("glm_acno", "=", stksoh)])
        if "SI" in self.mods:
            chk = self.sql.getRec("slsctl",
                                  where=[("ctv_cono", "=", self.opts["conum"])
                                         ])
            if not chk:
                self.sql.insRec(
                    "slsctl",
                    data=[self.opts["conum"], "Y", "Y", "sales_document", ""])
        sp.closeSplash()
        self.df.butt[1][4] = None
        self.df.butt[1][5] = None
        self.opts["mf"].dbm.commitDbase()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doIgCrs(self, frt, pag, r, c, p, i, w):
        self.igcrs = w

    def doIgDrs(self, frt, pag, r, c, p, i, w):
        self.igdrs = w

    def doIgStr(self, frt, pag, r, c, p, i, w):
        self.igstr = w

    def doIgEnd(self):
        self.igexit = False
        self.ig.closeProcess()

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

    def doIgExit(self):
        self.igexit = True
        self.ig.closeProcess()

    def doQuit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #26
0
class wgc110(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        gc = GetCtl(self.opts["mf"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        mods = ctlmst["ctm_modules"]
        self.genleg = False
        for x in range(0, len(mods), 2):
            if mods[x:x + 2] == "GL":
                self.genleg = True
                break
        tabs = ["wagctl", "tplmst", "chglog"]
        if self.genleg:
            tabs.extend(["ctlctl", "genmst"])
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.acc = self.sql.getRec("wagctl",
                                   where=[("ctw_cono", "=", self.opts["conum"])
                                          ],
                                   limit=1)
        if not self.acc:
            self.new = True
            self.acc = [
                self.opts["conum"], "N", 0, "", "", 0, 0, 0, 0, "N", 0, 0, "",
                61, "payslip", "", ""
            ]
        else:
            self.new = False
        if self.genleg:
            self.ctl = [["wag_ctl", "Salaries Control", 0],
                        ["wag_slc", "Staff Loans Control", 0],
                        ["wag_sli", "Staff Loans Interest", 0]]
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            for num, ctl in enumerate(self.ctl):
                if ctl[0] in ctlctl:
                    self.ctl[num][2] = ctlctl[ctl[0]]
        return True

    def drawDialog(self):
        tpm = {
            "stype":
            "R",
            "tables": ("tplmst", ),
            "cols": (("tpm_tname", "", 0, "Template"),
                     ("tpm_title", "", 0, "Title"), ("tpm_type", "", 0, "T")),
            "where": [("tpm_type", "=", "P"), ("tpm_system", "=", "WAG")],
            "order":
            "tpm_tname"
        }
        r1s = (("Yes", "Y"), ("No", "N"))
        if self.genleg:
            glm = {
                "stype":
                "R",
                "tables": ("genmst", ),
                "cols": (("glm_acno", "", 0, "G/L-Num"), ("glm_desc", "", 30,
                                                          "Description")),
                "where": [("glm_cono", "=", self.opts["conum"])]
            }
            fld = [(("T", 0, 0, 0), ("IRB", r1s), 0, "G/L Integration", "",
                    self.acc[1], "N", self.doGlint, None, None, None),
                   (("T", 0, 1, 0), "IUI", 7, self.ctl[0][1], "",
                    self.ctl[0][2], "N", self.doGenAcc, glm, None, ("efld", )),
                   (("T", 0, 1, 0), "ONA", 30, ""),
                   (("T", 0, 2, 0), "IUI", 7, self.ctl[1][1], "",
                    self.ctl[1][2], "N", self.doGenAcc, glm, None, ("efld", )),
                   (("T", 0, 2, 0), "ONA", 30, ""),
                   (("T", 0, 3, 0), "IUI", 7, self.ctl[2][1], "",
                    self.ctl[2][2], "N", self.doGenAcc, glm, None, ("efld", )),
                   (("T", 0, 3, 0), "ONA", 30, "")]
            seq = 4
        else:
            fld = []
            seq = 0
        fld.extend([(("T", 0, seq, 0), "IUI", 10, "Registration Number", "",
                     self.acc[2], "N", None, None, None, ("notzero", )),
                    (("T", 0, seq + 1, 0), "INA", 10, "SDL Number", "",
                     self.acc[3], "N", None, None, None, ("notblank", )),
                    (("T", 0, seq + 2, 0), "INA", 10, "UIF Number", "",
                     self.acc[4], "N", None, None, None, ("notblank", )),
                    (("T", 0, seq + 3, 0), "IUI", 4, "Trade Number", "",
                     self.acc[5], "N", None, None, None, ("notzero", )),
                    (("T", 0, seq + 4, 0), "IUD", 6.2, "Daily Hours", "",
                     self.acc[6], "N", None, None, None, ("notzero", )),
                    (("T", 0, seq + 5, 0), "IUD", 6.2, "Weekly Hours", "",
                     self.acc[7], "N", self.doHrs, None, None, ("notzero", )),
                    (("T", 0, seq + 6, 0), "IUD", 6.2, "Monthly Hours", "",
                     self.acc[8], "N", None, None, None, ("notzero", )),
                    (("T", 0, seq + 7, 0), ("IRB",
                                            r1s), 0, "Diplomatic Immunity", "",
                     self.acc[9], "N", None, None, None, None),
                    (("T", 0, seq + 8, 0), "IUD", 6.2, "S/L Interest Rate", "",
                     self.acc[10], "N", None, None, None, ("efld", )),
                    (("T", 0, seq + 9, 0), "Id1", 10, "Last Interest Date", "",
                     self.acc[11], "N", None, None, None, ("efld", )),
                    (("T", 0, seq + 10, 0), "INA", 4, "Best Account Code", "",
                     self.acc[12], "N", None, None, None, ("efld", )),
                    (("T", 0, seq + 11, 0), "IUI", 2, "Best Account Type", "",
                     self.acc[13], "N", None, None, None, ("efld", )),
                    (("T", 0, seq + 12, 0), "INA", 20, "Payslip Template", "",
                     self.acc[14], "N", self.doTplNam, tpm, None, ("efld", )),
                    (("T", 0, seq + 13, 0), "ITX", 50, "Email Address", "",
                     self.acc[15], "N", None, None, None, ("email", ))])
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 1), ("T", 0, 0)),
               ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        if not self.new:
            s = 0
            for n, f in enumerate(self.acc[1:-1]):
                if not self.genleg and not n:
                    continue
                self.df.loadEntry("T", 0, s, data=f)
                s += 1
                if n == 0:
                    for c in self.ctl:
                        self.df.loadEntry("T", 0, s, data=c[2])
                        s += 1
                        self.df.loadEntry("T", 0, s, data=self.getDes(c[2]))
                        s += 1
            self.df.focusField("T", 0, 1, clr=False)

    def doHrs(self, frt, pag, r, c, p, i, w):
        mhrs = round(w * 4.33333, 5)
        self.df.loadEntry(frt, pag, p + 1, data=mhrs)

    def doGlint(self, frt, pag, r, c, p, i, w):
        if w == "N":
            for x in range(1, 7):
                self.df.loadEntry(frt, pag, p + x, data="")
            return "sk6"

    def doGenAcc(self, frt, pag, r, c, p, i, w):
        des = self.getDes(w)
        if not des:
            return "Invalid Account Number"
        self.df.loadEntry(frt, pag, p + 1, data=des)

    def getDes(self, acno):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", acno)],
                              limit=1)
        if acc:
            return acc[0]
        else:
            return ""

    def doTplNam(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("tplmst",
                              where=[("tpm_tname", "=", w),
                                     ("tpm_type", "=", "P"),
                                     ("tpm_system", "=", "WAG")],
                              limit=1)
        if not acc:
            return "Invalid Template Name"

    def doEnd(self):
        data = [self.opts["conum"]]
        if not self.genleg:
            data.append("N")
        for x, d in enumerate(self.df.t_work[0][0]):
            if self.genleg and x < 7:
                if x in (1, 3, 5):
                    y = int((x - 1) / 2)
                    chk = self.sql.getRec("ctlctl",
                                          where=[("ctl_cono", "=",
                                                  self.opts["conum"]),
                                                 ("ctl_code", "=",
                                                  self.ctl[y][0])],
                                          limit=1)
                    if chk:
                        self.sql.updRec("ctlctl",
                                        cols=["ctl_conacc"],
                                        data=[d],
                                        where=[("ctl_cono", "=",
                                                self.opts["conum"]),
                                               ("ctl_code", "=",
                                                self.ctl[y][0])])
                    else:
                        self.sql.insRec("ctlctl",
                                        data=[
                                            self.opts["conum"], self.ctl[y][0],
                                            self.ctl[y][1], d, "", "N", "N"
                                        ])
                elif x in (2, 4, 6):
                    continue
                else:
                    data.append(d)
            else:
                data.append(d)
        if self.new:
            self.sql.insRec("wagctl", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.wagctl_col
            data.append(self.acc[col.index("ctw_xflag")])
            self.sql.updRec("wagctl",
                            data=data,
                            where=[("ctw_cono", "=", self.opts["conum"])])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.acc):
                if dat != data[num]:
                    self.sql.insRec("chglog",
                                    data=[
                                        "wagctl", "U",
                                        "%03i" % self.opts["conum"], col[num],
                                        dte, self.opts["capnm"],
                                        str(dat),
                                        str(data[num]), "", 0
                                    ])
        self.opts["mf"].dbm.commitDbase()
        self.doExit()

    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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #27
0
class drc410(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       "drsdel",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        dlm = {
            "stype":
            "R",
            "tables": ("drsdel", ),
            "cols":
            (("del_code", "", 0, "Del-Cod"), ("del_add1", "", 0, "Address"))
        }
        self.fld = [[("T", 0, 0, 0), "INa", 7, "Code", "Address Code", "", "N",
                     self.doCode, dlm, None, ("notblank", )],
                    (("T", 0, 1, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 4", "", "", "N",
                     None, None, None, ("efld", ))]
        if "args" in self.opts:
            self.fld[0][1] = "ONa"
            self.fld[0][5] = self.opts["args"]
        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 doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.acc = self.sql.getRec("drsdel",
                                   where=[("del_code", "=", self.code)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            for x in range(0, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=self.acc[x])

    def doDelete(self):
        self.sql.delRec("drsdel", where=[("del_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        dat = []
        for x in range(0, len(self.df.t_work[0][0])):
            dat.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("drsdel", data=dat)
        elif dat != self.acc[:len(dat)]:
            col = self.sql.drsdel_col
            dat.append(self.acc[col.index("del_xflag")])
            self.sql.updRec("drsdel",
                            data=dat,
                            where=[("del_code", "=", self.code)])
        if "args" in self.opts:
            self.doExit()
        else:
            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()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #28
0
class drc310(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,
                       "ctlrep",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        rpm = {
            "stype": "R",
            "tables": ("ctlrep", ),
            "cols":
            (("rep_code", "", 0, "Rep"), ("rep_name", "", 0, "Name", "Y")),
            "where": [("rep_cono", "=", self.opts["conum"])]
        }
        self.fld = ((("T", 0, 0, 0), "INa", 3, "Rep", "Rep Number", "", "N",
                     self.doRep, rpm, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Name", "", "", "N", None,
                     None, self.doDelete, ("notblank", )))
        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 doRep(self, frt, pag, r, c, p, i, w):
        self.rep = w
        self.acc = self.sql.getRec("ctlrep",
                                   where=[("rep_cono", "=",
                                           self.opts["conum"]),
                                          ("rep_code", "=", w)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            name = self.acc[self.sql.ctlrep_col.index("rep_name")]
            self.df.loadEntry(frt, pag, p + 1, data=name)

    def doDelete(self):
        self.sql.delRec("ctlrep",
                        where=[("rep_cono", "=", self.opts["conum"]),
                               ("rep_code", "=", self.rep)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("ctlrep", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.ctlrep_col
            data.append(self.acc[col.index("rep_xflag")])
            self.sql.updRec("ctlrep",
                            data=data,
                            where=[("rep_cono", "=", self.opts["conum"]),
                                   ("rep_code", "=", self.rep)])
        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()
Пример #29
0
class ln1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["chglog", "lonmf1", "lonmf2"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        lonctl = gc.getCtl("lonctl", self.opts["conum"])
        if not lonctl:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def mainProcess(self):
        con = {
            "stype":
            "R",
            "tables": ("lonmf1", ),
            "cols":
            (("lm1_acno", "", 0, "Code"), ("lm1_name", "", 0, "Surname", "Y"),
             ("lm1_email", "", 0, "Email Address"))
        }
        if "args" in self.opts:
            fld = [(("T", 0, 0, 0), "OUA", 7, "Account Code"),
                   (("T", 0, 1, 0), "ITX", 30, "Name", "", "", "N",
                    self.doName, None, None, ("notblank", ))]
            self.newacc = True
            self.acno = None
        else:
            fld = [(("T", 0, 0, 0), "IUA", 7, "Account Code", "", "", "Y",
                    self.doAcno, con, None, None),
                   (("T", 0, 1, 0), "ITX", 30, "Name", "", "", "N",
                    self.doName, None, self.doDelete, ("notblank", ))]
        fld.extend([(("T", 0, 2, 0), "ITX", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 3, 0), "ITX", 30, "Address Line 2", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 4, 0), "ITX", 30, "Address Line 3", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "ITX", 4, "Postal Code", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 6, 0), "ITX", 20, "Telephone Number", "", "",
                     "N", None, None, None, ("efld", )),
                    (("T", 0, 7, 0), "ITX", 20, "Fax Number", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 8, 0), "ITX", 20, "Mobile Number", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 9, 0), "ITX", 30, "E-Mail Address", "", "", "N",
                     None, None, None, ("email", ))])
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 1)),
               ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doAccept, "N"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               clicks=self.doClick)

    def doClick(self, *opts):
        self.df.focusField("T", opts[0][0], opts[0][1] + 1)

    def doAcno(self, frt, pag, r, c, p, i, w):
        if w:
            self.oldacc = self.sql.getRec("lonmf1",
                                          where=[("lm1_cono", "=",
                                                  self.opts["conum"]),
                                                 ("lm1_acno", "=", w)],
                                          limit=1)
            if not self.oldacc:
                return "Invalid Account Number"
            self.acno = w
            self.name = self.oldacc[self.sql.lonmf1_col.index("lm1_name")]
            self.email = self.oldacc[self.sql.lonmf1_col.index("lm1_email")]
            for num, dat in enumerate(self.oldacc[1:-1]):
                self.df.loadEntry("T", 0, num, data=dat)
            self.newacc = False
        else:
            yn = askQuestion(self.opts["mf"].body,
                             "New Account",
                             "Is This a New Loan Account?",
                             default="no")
            if yn == "no":
                return "Invalid Account Number"
            self.newacc = True

    def doName(self, frt, pag, r, c, p, i, w):
        if self.newacc:
            chk = self.sql.getRec("lonmf1",
                                  where=[("lm1_cono", "=", self.opts["conum"]),
                                         ("lm1_name", "=", w)],
                                  limit=1)
            if chk:
                return "An Account With This Name Already Exists"
            for seq in range(1, 100):
                self.acno = genAccNum(w, seq)
                chk = self.sql.getRec("lonmf1",
                                      where=[("lm1_cono", "=",
                                              self.opts["conum"]),
                                             ("lm1_acno", "=", self.acno)],
                                      limit=1)
                if not chk:
                    break
            self.df.loadEntry(frt, pag, p - 1, data=self.acno)

    def doDelete(self):
        chk = self.sql.getRec("lonmf2",
                              cols=["count(*)"],
                              where=[("lm2_cono", "=", self.opts["conum"]),
                                     ("lm2_acno", "=", self.acno)],
                              limit=1)
        if chk[0]:
            return "Loans Exist, Not Deleted"
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.delRec("lonmf1",
                        where=[("lm1_cono", "=", self.opts["conum"]),
                               ("lm1_acno", "=", self.acno)])
        self.sql.insRec("chglog",
                        data=[
                            "lonmf1", "D",
                            "%03i%-7s" % (self.opts["conum"], self.acno), "",
                            dte, self.opts["capnm"], "", "", "", 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)
            return
        # Create/Update Record
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        data = [self.opts["conum"]]
        for x in range(len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.newacc:
            self.sql.insRec("lonmf1", data=data)
        elif data != self.oldacc[:len(data)]:
            col = self.sql.lonmf1_col
            data.append(self.oldacc[col.index("lm1_xflag")])
            self.sql.updRec("lonmf1",
                            data=data,
                            where=[("lm1_cono", "=", self.opts["conum"]),
                                   ("lm1_acno", "=", self.acno)])
            for num, dat in enumerate(self.oldacc):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "lonmf1", "U",
                            "%03i%-7s" % (self.opts["conum"], self.acno),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        if "args" in self.opts:
            self.doExit()
        else:
            self.opts["mf"].dbm.commitDbase()
            self.df.focusField("T", 0, 1)

    def doExit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #30
0
class drc610(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, ["drsact", "drsmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        act = {
            "stype":
            "R",
            "tables": ("drsact", ),
            "cols": (("dac_code", "", 0, "Cod"), ("dac_desc", "", 0,
                                                  "Description", "Y"))
        }
        self.fld = ((("T", 0, 0,
                      0), "IUA", 3, "Code", "Business Activity Code", "", "N",
                     self.doAct, act, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )))
        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 doAct(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.acc = self.sql.getRec("drsact",
                                   where=[("dac_code", "=", self.code)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            desc = self.acc[self.sql.drsact_col.index("dac_desc")]
            self.df.loadEntry(frt, pag, p + 1, data=desc)

    def doDelete(self):
        acc = self.sql.getRec("drsmst",
                              cols=["count(*)"],
                              where=[("drm_bus_activity", "=", self.code)],
                              limit=1)
        if acc[0]:
            return "Code in Use, Not Deleted"
        self.sql.delRec("drsact", where=[("dac_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = []
        for x in range(0, len(self.df.t_work[0][0])):
            data.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("drsact", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.drsact_col
            data.append(self.acc[col.index("dac_xflag")])
            self.sql.updRec("drsact",
                            data=data,
                            where=[("dac_code", "=", self.code)])
        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()