Пример #1
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()
Пример #2
0
class bc6010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            if "args" in self.opts:
                self.oldtab = self.opts["args"][0]
                self.newtab = self.opts["args"][1]
                self.doProcess()
            else:
                self.mainProcess()
                if "wait" in self.opts:
                    self.df.mstFrame.wait_window()
                else:
                    self.opts["mf"].startLoop()

    def setVariables(self):
        self.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"))
        tabs = []
        for tab in self.tables:
            if tab[0] not in tabs:
                tabs.append(tab[0])
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        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"]
        if self.mlint == "Y" and self.samen == "Y":
            return
        self.mstart = bwlctl["ctb_mstart"]
        self.fstart = bwlctl["ctb_fstart"]
        self.nstart = bwlctl["ctb_nstart"]
        return True

    def mainProcess(self):
        tab = {
            "stype":
            "R",
            "tables": ("bwltab", ),
            "cols": (("btb_tab", "", 0, "Tab-No"),
                     ("btb_surname", "", 0, "Surname", "Y"), ("btb_names", "",
                                                              0, "Names")),
            "where": [("btb_cono", "=", self.opts["conum"])],
            "order":
            "btb_tab"
        }
        fld = [(["T", 0, 0, 0], "I@btb_tab", 0, "Old Tab", "Old Tab Number",
                "", "Y", self.doOldTab, tab, None, ("notzero", )),
               (["T", 0, 0, 18], "ONA", 30, ""),
               (["T", 0, 1, 0], "I@btb_tab", 0, "New Tab", "New Tab Number",
                "", "Y", self.doNewTab, None, None, ("notzero", ))]
        tnd = ((self.doProcess, "y"), )
        txt = (self.doExit, )
        but = [("Generate", None, self.doGenerate, 0, ("T", 0, 1), ("T", 0, 2),
                "Auto Generate New Tab Numbers Based on Names and Gender")]
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               butt=but)

    def doOldTab(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("bwltab",
                              where=[("btb_cono", "=", self.opts["conum"]),
                                     ("btb_tab", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Tab Number, Does Not exist"
        self.oldtab = w
        self.gender = acc[self.sql.bwltab_col.index("btb_gender")]
        if acc[4]:
            self.df.loadEntry(frt,
                              pag,
                              p + 1,
                              data="%s, %s" % (acc[3], acc[4].split()[0]))
        else:
            self.df.loadEntry(frt, pag, p + 1, data=acc[3])

    def doNewTab(self, frt, pag, r, c, p, i, w):
        if self.oldtab < self.nstart:
            if self.mstart < self.fstart:
                if self.gender == "M" and w >= self.fstart:
                    return "Invalid Male Tab Number"
                elif self.gender == "F" and w < self.fstart:
                    return "Invalid Female Tab Number"
            elif self.gender == "M" and w >= self.mstart:
                return "Invalid Male Tab Number"
            elif self.gender == "F" and w < self.mstart:
                return "Invalid Female Tab Number"
        elif w < self.nstart:
            return "Invalid Non-Member Tab Number"
        acc = self.sql.getRec("bwltab",
                              where=[("btb_cono", "=", self.opts["conum"]),
                                     ("btb_tab", "=", w)],
                              limit=1)
        if acc:
            return "Invalid Tab Number, Already Exists"
        self.newtab = w

    def doGenerate(self):
        self.opts["mf"].updateStatus("")
        but = (("Members", "M"), ("Non Members", "N"), ("All", "A"), ("None",
                                                                      "X"))
        ok = askChoice(self.opts["mf"].body, "ARE YOU SURE???",
            "Are you Certain this is what you want To Do? This will "\
            "Automatically Generate New Tab Numbers For Selected Range "\
            "Based On Member's Names and Gender!", butt=but, default="None")
        if ok == "X":
            self.df.focusField("T", 0, 1)
            return
        self.df.closeProcess()
        splash = SplashScreen(self.opts["mf"].body,
                              "Generating New Tab Numbers ... Please Wait")
        # Create temporary tables
        for ot in self.tables:
            tt = "%s_temp" % ot[0]
            self.sql.sqlRec("Create table %s as Select * from %s "\
                "where %s = %s" % (tt, ot[0], ot[1], self.opts["conum"]))
            self.sql.delRec(ot[0], where=[(ot[1], "=", self.opts["conum"])])
        mem = self.sql.sqlRec("Select * from bwltab_temp where btb_cono = %s "\
            "and btb_tab < %s order by btb_surname, btb_names" %
            (self.opts["conum"], self.nstart))
        non = self.sql.sqlRec("Select * from bwltab_temp where btb_cono = %s "\
            "and btb_tab >= %s order by btb_surname, btb_names" %
            (self.opts["conum"], self.nstart))
        mstart = self.mstart
        fstart = self.fstart
        nstart = self.nstart
        key = {}
        for tab in mem:
            otb = tab[self.sql.bwltab_col.index("btb_tab")]
            if ok in ("A", "M"):
                gdr = tab[self.sql.bwltab_col.index("btb_gender")]
                if gdr == "M":
                    new = mstart
                    mstart += 1
                else:
                    new = fstart
                    fstart += 1
                key[otb] = new
            else:
                key[otb] = otb
        for tab in non:
            otb = tab[self.sql.bwltab_col.index("btb_tab")]
            if ok in ("A", "N"):
                key[otb] = nstart
                nstart += 1
            else:
                key[otb] = otb
        for ot in self.tables:
            tt = "%s_temp" % ot[0]
            cc = getattr(self.sql, "%s_col" % ot[0])
            recs = self.sql.sqlRec("Select * from %s" % tt)
            for rec in recs:
                for k in ot[2:]:
                    c = rec[cc.index(k)]
                    if c not in key:
                        continue
                    rec[cc.index(k)] = key[c]
                self.sql.insRec(ot[0], data=rec)
            self.sql.sqlRec("Drop table %s" % tt)
        self.opts["mf"].dbm.commitDbase(ask=True)
        splash.closeSplash()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    def doProcess(self):
        for tab in self.tables:
            for x in range(len(tab[2:])):
                whr = [(tab[1], "=", self.opts["conum"]),
                       (tab[x + 2], "=", self.oldtab)]
                dat = [self.newtab]
                col = [tab[x + 2]]
                self.sql.updRec(tab[0], where=whr, data=dat, cols=col)
        if "args" not in self.opts:
            self.df.focusField("T", 0, 1)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].dbm.commitDbase(ask=True)
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Пример #3
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()
Пример #4
0
class gl1050(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.doProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        # Check for control record and departments
        gc = GetCtl(self.opts["mf"])
        ctlsys = gc.getCtl("ctlsys")
        if not ctlsys:
            return
        # Check for multiple companies
        self.sql = Sql(self.opts["mf"].dbm, ["ctlmst", "genrpc", "genstr",
            "gendtm", "genrpt"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        acc = self.sql.getRec("ctlmst", cols=["count(*)"], limit=1)
        if acc[0] > 1:
            self.coys = True
        else:
            self.coys = False
        self.strm = 0
        return True

    def doProcess(self):
        st1 = {
            "stype": "R",
            "tables": ("genstr",),
            "cols": (
                ("gls_strm", "", 0, "Str"),
                ("gls_desc", "", 0, "Description", "Y")),
            "where": [("gls_cono", "=", self.opts["conum"])],
            "group": "gls_strm, gls_desc"}
        st2 = {
            "stype": "R",
            "tables": ("genstr",),
            "cols": (
                ("gls_seq", "", 0, "Seq"),
                ("gls_typ", "", 0, "T"),
                ("gls_cno", "", 0, "CN"),
                ("gls_con", "", 0, "C"),
                ("gls_rep", "", 0, "Rep"),
                ("gls_gen", "", 0, "G"),
                ("gls_val", "", 0, "V"),
                ("gls_det", "", 0, "Det"),
                ("gls_var", "", 0, "B"),
                ("gls_zer", "", 0, "Z"),
                ("gls_opt", "", 0, "O"),
                ("gls_num", "", 0, "N"),
                ("gls_prnt", "", 20, "Printer-Name"),
                ("gls_mail", "", 20, "E-Mail-Address")),
            "where": [("gls_cono", "=", self.opts["conum"])],
            "whera": (("T", "gls_strm", 0, 0),),
            "comnd": self.doSelTyp}
        typ = {
            "stype": "C",
            "title": "Available Types",
            "head": ("C", "Description"),
            "data": (
                ("S", "YTD Report"),
                ("H", "Last 3 Years YTD Report"),
                ("L", "MTD and YTD Report"),
                ("M", "Monthly Report"),
                ("C", "Customised Report"))}
        rpc = {
            "stype": "R",
            "tables": ("genrpc",),
            "cols": (
                ("glc_cusno", "", 0, "CN"),
                ("glc_head1", "", 0, "Heading-1"),
                ("glc_head2", "", 0, "Heading-2"),
                ("glc_head3", "", 0, "Heading-3"),
                ("glc_head4", "", 0, "Heading-4")),
            "where": [("glc_cono", "=", self.opts["conum"])]}
        rpt = {
            "stype": "R",
            "tables": ("genrpt",),
            "cols": (
                ("glr_cono", "", 0, "Coy"),
                ("glr_repno", "", 0, "Rep"),
                ("glr_type", "", 0, "T"),
                ("glr_desc", "", 0, "Description", "Y")),
            "where": [("(", "glr_cono", "=", 0, "or", "glr_cono", "=",
                self.opts["conum"], ")"), ("glr_seq", "=", 0)],
            "group": "glr_cono, glr_repno, glr_type, glr_desc",
            "index": 1}
        con = {
            "stype": "C",
            "title": "Available Options",
            "head": ("C", "Description"),
            "data": (
                ("V", "Actuals"),
                ("B", "Budgets"),
                ("C", "Actuals and Budgets"),
                ("X", "Variance to Budget"),
                ("D", "Detail"))}
        det = {
            "stype": "R",
            "tables": ("gendtm",),
            "cols": (
                ("gdm_code", "", 0, "Cod"),
                ("gdm_desc", "", 0, "Description")),
            "where": [("gdm_cono", "=", self.opts["conum"])]}
        prts = getPrinters(wrkdir=self.opts["mf"].rcdic["wrkdir"])
        prts.insert(1, "Export")
        if "None" not in prts:
            prts.append("None")
        prt = {
            "stype": "C",
            "titl": "Select Required Printer",
            "head": ("Name", "Description"),
            "data": prts}
        cts = ("V", "B", "C", "X", "D")
        fld = (
            (("T",0,0,0),"IUI",3,"Stream-Number","Stream Number",
                0,"Y",self.doStr,st1,None,("notzero",)),
            (("T",0,0,0),"INA",30,"Description","",
                "","N",self.doDsc,None,self.doDelStr,("notblank",)),
            (("C",0,0,0),"IUI",3,"Seq","Sequence Number",
                "i","N",self.doSeq,st2,None,("efld",)),
            (("C",0,0,1),"IUA",1,"T","Report Type",
                "S","N",self.doTyp,typ,self.doDelLin,
                ("in",("S","H","L","M","C"))),
            (("C",0,0,2),"IUI",2,"CN","Custom Number",
                0,"N",self.doCus,rpc,None,("efld",)),
            (("C",0,0,3),"IUA",1,"C","Consolidate (Y/N)",
                "N","N",self.doCon,None,None,("in",("Y","N"))),
            (("C",0,0,4),"IUI",3,"Rep","Report Number",
                0,"N",self.doRep,rpt,None,("notzero",)),
            (("C",0,0,5),"IUA",1,"G","General Report (Y/N)",
                "N","N",self.doGen,None,None,("in",("Y","N"))),
            (("C",0,0,6),"IUA",1,"V","Report Contents",
                "V","N",self.doContent,con,None,("in",cts)),
            (("C",0,0,7),"INa",2,"Cod","Details Code",
                "","N",self.doCod,det,None,None),
            (("C",0,0,8),"IUA",1,"V","Variance (B/P/N)",
                "B","N",self.doVar,None,None,("in",("B","P","N"))),
            (("C",0,0,9),"IUA",1,"Z","Ignore Zeros (Y/N)",
                "Y","N",None,None,None,("in",("Y","N"))),
            (("C",0,0,10),"IUA",1,"O","Print Options (Y/N)",
                "N","N",None,None,None,("in",("Y","N"))),
            (("C",0,0,11),"IUA",1,"N","Print Numbers (Y/N)",
                "N","N",None,None,None,("in",("Y","N"))),
            (("C",0,0,12),"ITX",30,"Printer Name","Printer-Name",
                "Default","N",self.doPrt,prt,None,("in",prts)),
            (("C",0,0,13),"ITX",30,"E-Mail Address","E-Mail-Address",
                "","N",None,None,None,("email",)))
        but = (
            ("Cancel",None,self.doCancel,0,("C",0,1),("T",0,1)),
            ("Quit",None,self.exitTops,1,None,None))
        self.df = TartanDialog(self.opts["mf"], eflds=fld,
            tend=((self.endTops,"n"),), txit=(self.exitTops,),
            cend=((self.endData,"y"),), cxit=(self.exitData,), butt=but)
        self.df.focusField("T", 0, 1)

    def doStr(self, frt, pag, r, c, p, i, w):
        self.strm = w
        self.old = self.sql.getRec("genstr", where=[("gls_cono",
            "=", self.opts["conum"]), ("gls_strm", "=", self.strm)], limit=1)
        if not self.old:
            self.new = "y"
        else:
            self.new = "n"
            self.desc = self.old[self.sql.genstr_col.index("gls_desc")]
            self.df.loadEntry(frt, pag, p+1, self.desc)

    def doDelStr(self):
        if self.new == "y":
            return
        self.sql.delRec("genstr", where=[("gls_cono", "=", self.opts["conum"]),
            ("gls_strm", "=", self.strm)])

    def doDsc(self, frt, pag, r, c, p, i, w):
        self.desc = w

    def doSeq(self, frt, pag, r, c, p, i, w):
        self.seq = w
        dt = self.sql.getRec("genstr", where=[("gls_cono", "=",
            self.opts["conum"]), ("gls_strm", "=", self.strm), ("gls_seq", "=",
            self.seq)], limit=1)
        if not dt:
            self.newlin = "y"
        else:
            self.newlin = "n"
            for n, d in enumerate(dt[3:-1]):
                self.df.loadEntry(frt, pag, p+n, data=d)

    def doTyp(self, frt, pag, r, c, p, i, w):
        self.typ = w
        if self.typ != "C":
            self.cno = 0
            if not self.coys:
                self.con = "N"
                self.df.loadEntry(frt, pag, p+2, data="N")
                return "sk2"
            return "sk1"

    def doCus(self, frt, pag, r, c, p, i, w):
        cn = self.sql.getRec("genrpc", where=[("glc_cono", "=",
            self.opts["conum"]), ("glc_cusno", "=", w)], limit=1)
        if not cn:
            return "Invalid Custom Report Number"
        self.cno = w
        if not self.coys:
            self.con = "N"
            self.df.loadEntry(frt, pag, p+1, data="N")
            return "sk1"

    def doCon(self, frt, pag, r, c, p, i, w):
        self.con = w

    def doRep(self, frt, pag, r, c, p, i, w):
        rp = self.sql.getRec("genrpt", cols=["glr_cono", "glr_repno"],
            where=[("(", "glr_cono", "=", 0, "or", "glr_cono", "=",
            self.opts["conum"], ")"), ("glr_repno", "=", w)], limit=1)
        if not rp:
            return "No Such Report"
        self.rep = w

    def doGen(self, frt, pag, r, c, p, i, w):
        if w == "Y":
            c = 0
        else:
            c = self.opts["conum"]
        rp = self.sql.getRec("genrpt", cols=["glr_cono", "glr_repno"],
            where=[("glr_cono", "=", c), ("glr_repno", "=", self.rep)],
            limit=1)
        if not rp:
            return "No Such Report"
        self.gen = w

    def doContent(self, frt, pag, r, c, p, i, w):
        if w in ("B", "C", "X") and self.typ in ("S", "L", "C"):
            return "Invalid Choice for this Report Type"
        if w == "D":
            return
        self.df.loadEntry(frt, pag, p+1, data="")
        return "sk1"

    def doCod(self, frt, pag, r, c, p, i, w):
        d = self.sql.getRec("gendtm", cols=["gdm_desc"],
            where=[("gdm_cono", "=", self.opts["conum"]), ("gdm_code", "=",
            w)], limit=1)
        if not d:
            return "Invalid Detail Code"

    def doVar(self, frt, pag, r, c, p, i, w):
        if self.typ == "C" and w not in ("B", "P"):
            return "Invalid Variance, Only B or P"

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

    def endTops(self):
        if self.new == "y":
            self.df.focusField("C", 0, 1)
        else:
            self.doLoadLines()

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

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

    def doSelTyp(self, frt, pag, r, c, p, i, w):
        self.newlin = "n"
        self.seq = w[0]
        self.typ = w[1]
        self.cno = w[2]
        self.con = w[3]
        self.rep = w[4]
        self.gen = w[5]
        for x, d in enumerate(w):
            self.df.loadEntry(frt, pag, p+x, data=d)
        self.df.focusField(frt, pag, c+1)

    def doDelLin(self):
        if self.newlin == "y":
            return
        self.sql.delRec("genstr", where=[("gls_cono", "=", self.opts["conum"]),
            ("gls_strm", "=", self.strm), ("gls_seq", "=", self.seq)])
        self.doReSeq()

    def endData(self):
        data = [self.opts["conum"], self.strm, self.desc, self.seq, self.typ,
            self.cno, self.con, self.rep, self.gen]
        for x in range(6, 14):
            data.append(self.df.c_work[self.df.pag][self.df.row][x])
        if self.newlin == "y":
            self.sql.insRec("genstr", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.genstr_col
            data.append(self.old[col.index("gls_xflag")])
            self.sql.updRec("genstr", data=data, where=[("gls_cono",
                "=", self.opts["conum"]), ("gls_strm", "=", self.strm),
                ("gls_seq", "=", self.seq)])
        self.doLoadLines()

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

    def doReSeq(self):
        recs = self.sql.getRec("genstr", where=[("gls_cono", "=",
            self.opts["conum"]), ("gls_strm", "=", self.strm)],
            order="gls_seq")
        if not recs:
            self.newlin = "y"
            self.df.focusField("C", 0, 1)
            return
        self.sql.delRec("genstr", where=[("gls_cono", "=", self.opts["conum"]),
            ("gls_strm", "=", self.strm)])
        for seq, acc in enumerate(recs):
            acc[3] = seq
            self.sql.insRec("genstr", data=acc)
        self.doLoadLines()

    def doLoadLines(self):
        self.df.clearFrame("C", 0)
        pos = 0
        recs = self.sql.getRec("genstr", where=[("gls_cono", "=",
            self.opts["conum"]), ("gls_strm", "=", self.strm)],
            order="gls_seq")
        for row, rec in enumerate(recs):
            for num, dat in enumerate(rec[3:-1]):
                self.df.loadEntry("C", 0, pos, data=dat)
                pos += 1
                if pos == (self.df.rows[0] * self.df.colq[0]):
                    self.df.scrollScreen(0)
                    pos = pos - self.df.colq[0]
        pos += 1
        self.df.focusField("C", 0, pos)
Пример #5
0
class arc110(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 = ["assctl", "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("assctl",
                                   where=[("cta_cono", "=", self.opts["conum"])
                                          ],
                                   limit=1)
        if not self.acc:
            self.new = True
            self.acc = [self.opts["conum"], "N", "N", 0, "", ""]
        else:
            self.new = False
        if self.genleg:
            self.ctl = [["ass_sls", "Sale of Assets", 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):
        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, "")]
            seq = 2
        else:
            fld = []
            seq = 0
        fld.extend([(("T", 0, seq, 0), ("IRB", r1s), 0, "Receiver Dep", "",
                     self.acc[2], "N", None, None, None, None),
                    (("T", 0, seq + 1, 0), "Id2", 7, "Last Dep Period", "",
                     self.acc[3], "N", None, None, None, None),
                    (("T", 0, seq + 2, 0), "ITX", 50, "Email Address", "",
                     self.acc[4], "N", None, None, None, ("email", ))])
        but = (("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 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]
        return ""

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

    def doGenAcc(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(frt, pag, p + 1, data=acc[0])

    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 < 3:
                if x in (1, ):
                    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, ):
                    continue
                else:
                    data.append(d)
            else:
                data.append(d)
        if self.new:
            self.sql.insRec("assctl", data=data)
        elif data != self.acc[:len(data)]:
            col = self.sql.assctl_col
            data.append(self.acc[col.index("cta_xflag")])
            self.sql.updRec("assctl",
                            data=data,
                            where=[("cta_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=[
                                        "assctl", "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 doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #6
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()
Пример #7
0
class ml2010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        # Check for Valid Posting Routine
        if self.opts["rtn"] not in (1, 2, 3, 4):
            showError(self.opts["mf"].body, "Control Error",
                "Invalid Routine %s, Only 1-4 Are Allowed" % \
                str(self.opts["rtn"]))
            return
        tabs = ["ctlvmf", "ctlvrf", "ctlvtf", "memmst", "memtrn"]
        self.gc = GetCtl(self.opts["mf"])
        memctl = self.gc.getCtl("memctl", self.opts["conum"])
        if not memctl:
            return
        self.glint = memctl["mcm_glint"]
        if self.glint == "Y":
            ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["mem_ctl", "vat_ctl", "dis_all"]
            if self.gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.memctl = ctlctl["mem_ctl"]
            self.dis_all = ctlctl["dis_all"]
            tabs.extend(["gentrn", "genmst"])
        # Create SQL Object
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.bh = Batches(self.opts["mf"],
                          self.opts["conum"],
                          self.opts["conam"],
                          self.opts["period"],
                          "MEM",
                          self.opts["rtn"],
                          glint=self.glint)
        self.bh.doBatchHeader()
        if not self.bh.batno:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        if self.opts["rtn"] == 1:
            self.glt = 1
        elif self.opts["rtn"] == 2:
            self.glt = 2
        elif self.opts["rtn"] == 3:
            self.glt = 4
        elif self.opts["rtn"] == 4:
            self.glt = 1
        self.agevar = tk.BooleanVar()
        self.agevar.set(False)
        return True

    def drawDialog(self):
        mlm = {
            "stype":
            "R",
            "tables": ("memmst", ),
            "cols":
            (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"),
             ("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",
            "sort":
            False
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_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"])]
        }
        fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno),
               (("T", 0, 0, 0), "OSD", 13.2, "Value"),
               (("C", 1, 0, 0), "IUI", 6, "Mem-No", "Member Number", "r", "N",
                self.doMemAcc, mlm, None, ("notzero", )),
               [("C", 1, 0, 1), "ONA", 10, "Name"],
               (("C", 1, 0, 2), "INa", 9, "Reference", "Reference Number One",
                "i", "N", self.doRefno, None, None, ("notblank", )),
               (("C", 1, 0, 3), "ID1", 10, "Date", "Transaction Date", "r",
                "N", self.doTrnDat, None, None, ("efld", )),
               (("C", 1, 0, 4), "ISD", 13.2, "Amount", "Transaction Amount",
                "", "N", self.doTrnAmt, None, None, ("efld", ))]
        if self.opts["rtn"] == 2:
            fld[3][2] = 20
            fld.extend([
                (("C", 1, 0, 5), "ISD", 13.2, "Discount", "Discount Amount",
                 "", "N", self.doDisAmt, None, None, None, None,
                 "Discount Amount to be Added to the Transaction Amount."),
                (("C", 1, 0, 6), "OSD", 13.2, "Total-Amount"),
                (("C", 1, 0,
                  7), "INA", (20, 30), "Details", "Transaction Details", "",
                 "N", self.doTrnDet, None, None, None)
            ])
        elif self.glint == "Y":
            fld[3][2] = 24
            fld.extend([
                (("C", 1, 0, 5), "INA", 30, "Details", "Transaction Details",
                 "", "N", self.doTrnDet, None, None, None),
                (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"),
                (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "",
                 "N", self.doGenAcc, glm, None, None),
                (("C", 2, 0, 1), "ONA", 19, "Description"),
                (("C", 2, 0, 2), "IUA", 1, "V", "V.A.T Code", self.taxdf, "N",
                 self.doVatCode2, vtm, None, ("notblank", )),
                (("C", 2, 0, 3), "ISD", 13.2, "All-Amt", "Allocation Amount",
                 "", "N", self.doAllAmt, None, None, ("efld", )),
                (("C", 2, 0, 4), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N",
                 self.doAllVat, None, None, None),
                (("C", 2, 0, 5), "INA", (26, 30), "Details", "", "", "N",
                 self.doAllDet, None, None, ("notblank", ))
            ])
        else:
            fld[3][2] = 22
            fld.extend([
                (("C", 1, 0, 6), "IUA", 1, "V", "V.A.T Code", self.taxdf, "N",
                 self.doVatCode1, vtm, None, ("notblank", )),
                (("C", 1, 0, 7), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N",
                 self.doVatAmt, None, None, None),
                (("C", 1, 0,
                  8), "INA", (20, 30), "Details", "Transaction Details", "",
                 "N", self.doTrnDet, None, None, None)
            ])
        but = (
            ("Age _Normal",None,self.doAgeNormal,0,None,None,
                "Only Show Unallocated Transactions",1),
            ("Age _History",None,self.doAgeHistory,0,None,None,
                "Show All Transactions Including Already Allocated",1),
            ("Age _Automatic",None,self.doAgeAuto,0,None,None,
                "Automatically Allocate the Amount Starting With the "\
                "Oldest Unallocated One",1),
            ("Age _Current",None,self.doAgeCurrent,0,None,None,
                "Leave the Transaction Unallocated",1),
            ("Cancel",None,self.doCancel,0,("C",2,1),("C",1,1),"",1))
        tag = [("Transaction", None, None, None, False)]
        cnd = [(None, "n"), (self.endPage1, "y")]
        cxt = [None, self.exitPage1]
        if self.opts["rtn"] != 2 and self.glint == "Y":
            tag.append(("Allocation", None, None, None, False))
            cnd.append((self.endPage2, "y"))
            cxt.append(self.exitPage2)
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tags=tag,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)
        self.df.focusField("C", 1, 1)

    def doMemAcc(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("memmst",
                              cols=["mlm_title", "mlm_initial", "mlm_surname"],
                              where=[("mlm_cono", "=", self.opts["conum"]),
                                     ("mlm_memno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Member Number"
        self.memno = w
        self.name = "%s, %s %s" % (acc[2], acc[0], acc[1])
        self.df.loadEntry("C", pag, p + 1, data=self.name)

    def doRefno(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("memtrn",
                              cols=["mlt_batch"],
                              where=[("mlt_cono", "=", self.opts["conum"]),
                                     ("mlt_memno", "=", self.memno),
                                     ("mlt_type", "=", self.opts["rtn"]),
                                     ("mlt_refno", "=", w)],
                              limit=1)
        if acc:
            return "Transaction Already Exists"
        self.refno = w

    def doTrnDat(self, frt, pag, r, c, p, i, w):
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"
        if w > mthendDate(self.bh.curdt * 100):
            return "Invalid Date, After Batch Period"
        if self.bh.multi == "N" and int(w / 100) > self.bh.curdt:
            return "Invalid Date, After Batch Period"
        self.trndat = w

    def doTrnAmt(self, frt, pag, r, c, p, i, w):
        self.trnamt = w
        if self.glint == "Y" or self.opts["rtn"] == 2:
            self.vatcode = "N"
            self.vatamt = 0

    def doVatCode1(self, frt, pag, r, c, p, i, w):
        vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat)
        if vrte is None:
            return "Invalid V.A.T Code"
        self.vatcode = w
        self.vatamt = round((self.trnamt * vrte / (vrte + 100)), 2)
        self.df.loadEntry(frt, pag, p + 1, self.vatamt)
        if not self.vatamt:
            return "sk1"

    def doVatAmt(self, frt, pag, r, c, p, i, w):
        if self.trnamt < 0 and w > 0:
            self.vatamt = float(ASD(0) - ASD(w))
        elif self.trnamt > 0 and w < 0:
            self.vatamt = float(ASD(0) - ASD(w))
        else:
            self.vatamt = w
        self.df.loadEntry(frt, pag, p, data=self.vatamt)

    def doDisAmt(self, frt, pag, r, c, p, i, w):
        if self.trnamt < 0 and w > 0:
            self.disamt = float(ASD(0) - ASD(w))
        elif self.trnamt > 0 and w < 0:
            self.disamt = float(ASD(0) - ASD(w))
        else:
            self.disamt = w
        self.df.loadEntry(frt, pag, p, data=self.disamt)
        totamt = float(ASD(self.trnamt) + ASD(self.disamt))
        self.df.loadEntry(frt, pag, p + 1, data=totamt)

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        self.trndet = w
        if self.opts["rtn"] != 2 and self.glint == "Y":
            self.df.colf[2][5][5] = w
        self.allocated = float(0.00)

    def endPage1(self):
        self.cancel = False
        self.agecan = False
        self.batupd = False
        self.updateTables1()
        if self.cancel:
            return
        else:
            self.updateBatch()
            if self.trnamt == 0:
                self.df.advanceLine(1)
            else:
                self.allocated = float(0.0)
                if self.opts["rtn"] == 2 or self.glint == "N":
                    self.doMemTrn()
                    self.opts["mf"].dbm.commitDbase()
                    self.df.selPage("Transaction")
                    self.df.advanceLine(1)
                else:
                    self.df.selPage("Allocation")
                    self.df.loadEntry("T", 2, 0, data=self.trnamt)
                    self.df.focusField("C", 2, 1)

    def updateTables1(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        self.amt = self.trnamt
        self.vat = self.vatamt
        if self.opts["rtn"] == 1:  # Invoices
            recon = 0
            self.dis = 0.00
        elif self.opts["rtn"] == 2:  # Payment
            if self.trnamt == 0:
                recon = self.curdt
            else:
                recon = 0
            self.vat = 0.00
            self.dis = self.disamt
        elif self.opts["rtn"] == 3:  # Journal
            recon = 0
            self.dis = 0.00
        elif self.opts["rtn"] == 4:  # Credit Note
            recon = 0
            self.amt = float(ASD(0) - ASD(self.amt))
            self.dis = 0.00
        if self.opts["rtn"] == 1:
            self.ageloop = False
            self.doAgeCurrent()
        else:
            state = self.df.disableButtonsTags()
            self.opts["mf"].updateStatus("Choose an Ageing Option")
            for x in range(0, 4):
                wid = getattr(self.df, "B%s" % x)
                self.df.setWidget(wid, "normal")
            self.df.setWidget(self.df.B0, "focus")
            self.agevar.set(True)
            self.df.mstFrame.wait_variable(self.agevar)
            self.df.enableButtonsTags(state=state)
            if self.agecan:
                self.doCancel()
                return
        if self.glint == "N":
            return
        # General Ledger Control Transaction (Members)
        val = float(ASD(self.amt) + ASD(self.dis))
        data = (self.opts["conum"], self.memctl, self.curdt, self.trndat,
                self.glt, self.refno, self.bh.batno, val, 0.00, self.trndet,
                "N", "", recon, self.opts["capnm"], self.sysdtw, 0)
        self.sql.insRec("gentrn", data=data)
        # General Ledger Control Transaction (Bank)
        if self.opts["rtn"] == 2:
            val = float(ASD(0) - ASD(self.amt))
            data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat,
                    self.glt, self.refno, self.bh.batno, val, 0.00,
                    self.trndet, "N", "", recon, self.opts["capnm"],
                    self.sysdtw, 0)
            self.sql.insRec("gentrn", data=data)
            # General Ledger Control Transaction (Discount)
            if self.dis:
                val = float(ASD(0) - ASD(self.dis))
                data = (self.opts["conum"], self.dis_all, self.curdt,
                        self.trndat, self.glt, self.refno, self.bh.batno, val,
                        0.00, self.trndet, "N", "", recon, self.opts["capnm"],
                        self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)

    def doAgeNormal(self):
        self.doAgeing("N")

    def doAgeHistory(self):
        self.doAgeing("H")

    def doAgeAuto(self):
        self.doAgeing("O")

    def doAgeCurrent(self):
        self.doAgeing("C")

    def doAgeing(self, atype):
        # Disable All Ageing Buttons
        for x in range(0, 4):
            wid = getattr(self.df, "B%s" % x)
            self.df.setWidget(wid, "disabled")
        self.opts["mf"].updateStatus("Select Transaction to Allocate Against")
        age = AgeAll(self.opts["mf"],
                     system="mem",
                     agetyp=atype,
                     agekey=[
                         self.opts["conum"], self.memno, self.opts["rtn"],
                         self.refno, self.curdt, self.amt, self.dis
                     ])
        self.agecan = age.cancel
        if self.agevar.get():
            self.agevar.set(False)

    def exitPage1(self):
        self.df.closeProcess()
        self.bh.doBatchTotal()
        self.opts["mf"].closeLoop()

    def doGenAcc(self, frt, pag, r, c, p, i, w):
        chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w)
        if type(chk) is str:
            return chk
        if not chk[2]:
            self.taxgl = self.taxdf
        else:
            self.taxgl = chk[2]
        self.genacc = w
        self.df.loadEntry("C", pag, p + 1, data=chk[0])
        self.df.loadEntry("C", pag, p + 2, data=self.taxgl)

    def doVatCode2(self, frt, pag, r, c, p, i, w):
        ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"], error=False)
        if not ctlctl:
            return "Missing ctlctl Record for Company"
        if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]):
            return "Missing or Invalid Control Record"
        self.convat = ctlctl["vat_ctl"]
        self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat)
        if self.vatrte is None:
            return "Invalid V.A.T Code"
        self.vatcode = w

    def doAllAmt(self, frt, pag, r, c, p, i, w):
        if w == 0:
            allamt = float(ASD(self.trnamt) - ASD(self.allocated))
            self.allamt = round((allamt * 100 / (100 + self.vatrte)), 2)
            self.df.loadEntry(frt, pag, p, data=self.allamt)
            self.allvat = float(ASD(allamt) - ASD(self.allamt))
        else:
            self.allamt = w
            self.allvat = round((self.allamt * self.vatrte / 100), 2)
        self.df.loadEntry(frt, pag, p + 1, data=self.allvat)
        if not self.allvat:
            self.df.loadEntry(frt, pag, p + 2, data=self.name)
            return "sk1"

    def doAllVat(self, frt, pag, r, c, p, i, w):
        if self.allamt < 0 and w > 0:
            self.allvat = float(ASD(0) - ASD(w))
        elif self.allamt > 0 and w < 0:
            self.allvat = float(ASD(0) - ASD(w))
        else:
            self.allvat = w
        self.df.loadEntry(frt, pag, p, data=self.allvat)
        self.df.loadEntry(frt, pag, p + 1, data=self.name)

    def doAllDet(self, frt, pag, r, c, p, i, w):
        self.alldet = w

    def doCancel(self):
        if self.agecan:
            ok = "yes"
        else:
            ok = askQuestion(
                self.opts["mf"].body,
                head="Cancel",
                mess="Are You Certain You Want to Cancel This Entry?")
        if ok == "yes":
            self.cancel = True
            self.opts["mf"].dbm.rollbackDbase()
            if self.batupd:
                self.updateBatch(rev=True)
            if self.glint == "Y":
                self.df.clearFrame("C", 2)
            row = int((self.df.last[1][1] - 1) / self.df.colq[1])
            col = (row * self.df.colq[1]) + 1
            self.df.selPage("Transaction")
            self.df.focusField("C", 1, col)

    def endPage2(self):
        self.updateTables2()
        self.allocated = float(ASD(self.allocated) + \
            ASD(self.allamt) + ASD(self.allvat))
        if self.allocated == self.trnamt:
            self.doMemTrn()
            self.opts["mf"].dbm.commitDbase()
            self.df.clearFrame("C", 2)
            self.df.selPage("Transaction")
            self.df.advanceLine(1)
        else:
            bal = float(ASD(self.trnamt) - ASD(self.allocated))
            self.df.loadEntry("T", 2, 0, data=bal)
            self.df.advanceLine(2)

    def updateTables2(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        if self.opts["rtn"] == 1:  # Invoices
            self.credit()
        elif self.opts["rtn"] == 3:  # Journal Entry
            self.credit()
        elif self.opts["rtn"] == 4:  # Credit Notes
            self.debit()

    def debit(self):
        amt = self.allamt
        vat = self.allvat
        self.restDebitCredit(amt, vat)

    def credit(self):
        amt = float(ASD(0) - ASD(self.allamt))
        vat = float(ASD(0) - ASD(self.allvat))
        self.restDebitCredit(amt, vat)

    def restDebitCredit(self, amt, vat):
        # VAT Transaction (ctlvtf)
        data = (self.opts["conum"], self.vatcode, "O", self.curdt, "M",
                self.glt, self.bh.batno, self.refno, self.trndat, self.memno,
                self.alldet, amt, vat, 0, self.opts["capnm"], self.sysdtw, 0)
        self.sql.insRec("ctlvtf", data=data)
        if self.glint == "N":
            return
        # General Ledger Transaction (Expense)
        data = (self.opts["conum"], self.genacc, self.curdt, self.trndat,
                self.glt, self.refno, self.bh.batno, amt, vat, self.alldet,
                self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0)
        self.sql.insRec("gentrn", data=data)
        if vat:
            # General Ledger Control Transaction (V.A.T.)
            data = (self.opts["conum"], self.convat, self.curdt, self.trndat,
                    self.glt, self.refno, self.bh.batno, vat, 0.00,
                    self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw,
                    0)
            self.sql.insRec("gentrn", data=data)
        vat = float(ASD(0) - ASD(vat))
        self.vat += vat

    def exitPage2(self):
        self.df.focusField("C", 2, self.df.col)

    def doMemTrn(self):
        # Members Ledger Transaction
        data = [
            self.opts["conum"], self.memno, self.opts["rtn"], self.refno,
            self.bh.batno, self.trndat, self.amt, self.vat, self.curdt, "", 0,
            self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("memtrn", data=data)
        if self.dis:
            data = [
                self.opts["conum"], self.memno, 6, self.refno, self.bh.batno,
                self.trndat, self.dis, self.vat, self.curdt, "", 0,
                self.trndet, self.vatcode, "N", self.opts["capnm"],
                self.sysdtw, 0
            ]
            self.sql.insRec("memtrn", data=data, unique="mlt_refno")

    def updateBatch(self, rev=False):
        if rev:
            self.bh.batqty -= 1
            self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt))
        else:
            self.batupd = True
            self.bh.batqty += 1
            self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt))
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)
Пример #8
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()
Пример #9
0
class st6030(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.dataHeader()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["strmf1", "strtrn", "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
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.curdt = int(self.sysdtw / 100)
        return True

    def dataHeader(self):
        grp = {
            "stype": "R",
            "tables": ("strgrp",),
            "cols": (
                ("gpm_group", "", 0, "Grp"),
                ("gpm_desc", "", 0, "Description", "Y")),
            "where": [("gpm_cono", "=", self.opts["conum"])]}
        self.stm = {
            "stype": "R",
            "tables": ("strmf1",),
            "cols": (
                ("st1_code", "", 0, "Product Code"),
                ("st1_desc", "", 0, "Description", "Y")),
            "where": [],
            "whera": [["T", "st1_group", 0, 0]],
            "index": 0}
        fld = [
            (("T",0,0,0),"INA",3,"Group","Product Group",
                "","Y",self.doGroup,grp,None,("notblank",)),
            (("T",0,1,0),"INA",20,"Code","Product Code",
                "","N",self.doCode,self.stm,None,("notblank",)),
            (("T",0,2,0),"ONA",30,"Description")]
        but = (
            ("Generate",None,self.doGenerate,1,None,(("T",0,1),("T",0,2)),
                "Mark zero items, which have been inactive, as redundant"),
            ("Create",None,self.doCreate,1,None,(("T",0,1),("T",0,2)),
                "Mark a zero item as redundant"),
            ("Restore",None,self.doRestore,1,None,(("T",0,1),("T",0,2)),
                "Mark a redundant item as normal"),
            ("Exit",None,self.exitPage,1,None,(("T",0,1),("T",0,2))))
        tnd = ((self.endPage, "y"),)
        txt = (self.exitPage,)
        self.df = TartanDialog(self.opts["mf"], eflds=fld,
            butt=but, tend=tnd, txit=txt, focus=False)
        self.df.setWidget(self.df.B0, state="normal")
        self.df.setWidget(self.df.B1, state="normal")
        self.df.setWidget(self.df.B2, state="normal")
        self.df.setWidget(self.df.B3, state="normal")

    def doGenerate(self):
        tit = "Generate Redundant Items"
        fld = (
            (("T",0,0,0),"IUI",3,"Months Inactive","",
                24,"Y",self.doMonths,None,None,("efld",)),)
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        self.mt = TartanDialog(self.opts["mf"], title=tit, tops=True,
            eflds=fld, tend=((self.doMthEnd, "y"),), txit=(self.doMthExit,))
        self.mt.mstFrame.wait_window()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

    def doMonths(self, frt, pag, r, c, p, i, w):
        months = w
        yr = int(self.curdt / 100)
        mt = self.curdt % 100
        for mth in range(months):
            mt -= 1
            if not mt:
                mt = 12
                yr -= 1
        self.startp = (yr * 100) + mt

    def doMthEnd(self):
        self.mt.closeProcess()
        whr = [
            ("st1_cono", "=", self.opts["conum"]),
            ("st1_type", "=", "N"),
            ("stt_cono=st1_cono",),
            ("stt_group=st1_group",),
            ("stt_code=st1_code",)]
        accs = self.sql.getRec(tables=["strmf1", "strtrn"], cols=["st1_group",
            "st1_code", "max(stt_curdt)", "sum(stt_qty)", "sum(stt_cost)"],
            where=whr, order="st1_group, st1_code")
        chgs = []
        for acc in accs:
            if acc[2] < self.startp and not acc[3] and not acc[4]:
                chgs.append(acc[:2])
        if not chgs:
            showError(self.opts["mf"].body, "Processing Error",
                "No Redundant Records")
        else:
            self.cnt = 0
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            p = ProgressBar(self.opts["mf"].body, mxs=len(chgs),
                typ="Redundant Items")
            for num, rec in enumerate(chgs):
                p.displayProgress(num)
                self.sql.updRec("strmf1", cols=["st1_type"], data=["X"],
                    where=[("st1_cono", "=", self.opts["conum"]),
                    ("st1_group", "=", rec[0]), ("st1_code", "=", rec[1])])
                key = "%03i%-3s%-20s" % (self.opts["conum"], rec[0], rec[1])
                self.sql.insRec("chglog", data=["strmf1", "U", key,
                    "st1_type", dte, self.opts["capnm"], "N", "X", "", 0])
            p.closeProgress()
            mess = """%s Items Will be Marked as Redundant.

Would you like to COMMIT these Changes?""" % len(chgs)
            self.opts["mf"].dbm.commitDbase(ask=True, mess=mess)

    def doMthExit(self):
        self.mt.closeProcess()

    def doCreate(self):
        self.flag = "C"
        self.stm["where"] = [
                ("st1_cono", "=", self.opts["conum"]),
                ("st1_type", "<>", "X")]
        self.df.focusField("T", 0, 1)

    def doRestore(self):
        self.flag = "R"
        self.stm["where"] = [
                ("st1_cono", "=", self.opts["conum"]),
                ("st1_type", "=", "X")]
        self.df.focusField("T", 0, 1)

    def doGroup(self, frt, pag, r, c, p, i, w):
        if self.flag == "C":
            chk = self.sql.getRec("strmf1", where=[("st1_cono",
                "=", self.opts["conum"]), ("st1_group", "=", w),
                ("st1_type", "<>", "X")], limit=1)
        else:
            chk = self.sql.getRec("strmf1", where=[("st1_cono",
                "=", self.opts["conum"]), ("st1_group", "=", w),
                ("st1_type", "=", "X")], limit=1)
        if not chk:
            return "Invalid Group"
        self.grp = w

    def doCode(self, frt, pag, r, c, p, i, w):
        whr = [
            ("st1_cono", "=", self.opts["conum"]),
            ("st1_group", "=", self.grp),
            ("st1_code", "=", w)]
        if self.flag == "C":
            err = "Invalid, Not Normal"
            whr.append(("st1_type", "=", "N"))
        else:
            err = "Invalid, Not Redundant"
            whr.append(("st1_type", "=", "X"))
        chk = self.sql.getRec("strmf1", where=whr, limit=1)
        if not chk:
            return err
        if self.flag == "C":
            qty = self.sql.getRec("strtrn", cols=["sum(stt_qty)"],
                where=[("stt_cono", "=", self.opts["conum"]),
                ("stt_group", "=", self.grp), ("stt_code", "=", w)],
                limit=1)
            if qty[0]:
                return "Balance Exists"
        self.cod = w
        desc = chk[self.sql.strmf1_col.index("st1_desc")]
        self.df.loadEntry(frt, pag, p+1, data=desc)

    def endPage(self):
        if self.flag == "C":
            old = "N"
            new = "X"
        else:
            old = "X"
            new = "N"
        self.sql.updRec("strmf1", cols=["st1_type"], data=[new],
            where=[("st1_cono", "=", self.opts["conum"]),
            ("st1_group", "=", self.grp), ("st1_code", "=", self.cod)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        key = "%03i%-3s%-20s" % (self.opts["conum"], self.grp, self.cod)
        self.sql.insRec("chglog", data=["strmf1", "U", key,
            "st1_type", dte, self.opts["capnm"], old, new, "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.df.clearFrame("T", 0)
        self.flag = ""

    def exitPage(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #10
0
class gl2010(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, ["ctlynd", "genmst", "genbal"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        per = self.sql.getRec("ctlynd",
                              where=[("cye_cono", "=", self.opts["conum"]),
                                     ("cye_period", "=", 0)],
                              limit=1)
        if not per:
            showError(
                self.opts["mf"].body, "Period Error", """No Period 0!

Please Contact your Software Support and Quote this Message as this is a Serious Error!"""
            )
            return
        self.start = per[self.sql.ctlynd_col.index("cye_start")]
        return True

    def drawDialog(self):
        sel_acc = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        sel_all = {
            "stype":
            "R",
            "tables": ("genbal", "genmst"),
            "cols":
            (("glo_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                              "Description"),
             ("glo_trdt", "", 0, "Date"), ("glo_cyr", "", 0, "Balance")),
            "where": [("glo_cono", "=", self.opts["conum"]),
                      ("glm_cono=glo_cono", ), ("glm_acno=glo_acno", ),
                      ("glo_trdt", "=", self.start)]
        }
        fld = ((("C", 0, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "N",
                self.doAcc, sel_acc, None, None), (("C", 0, 0, 1), "ONA", 30,
                                                   "Description"),
               (("C", 0, 0, 2), "ISD", 13.2, "Balance", "Balance Value", "",
                "N", self.doBal, None, None, None))
        but = (("Import File", None, self.doImport, 0, ("C", 0, 1), ("C", 0,
                                                                     2),
                "Import Opening Balances from a CSV or XLS File."),
               ("All Entries", sel_all, None, 1, ("C", 0, 1), None,
                "Display All Existing Balances"),
               ("Exit", None, self.exitData, 1, ("C", 0, 1), ("C", 0, 2)))
        row = (20, )
        self.df = TartanDialog(self.opts["mf"],
                               rows=row,
                               eflds=fld,
                               cend=((self.endData, "y"), ),
                               cxit=(self.exitData, ),
                               butt=but)

    def doImport(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        impcol = [["Account Number", 0, "UI", 7],
                  ["Opening Balance", 1, "SD", 13.2]]
        fi = FileImport(self.opts["mf"], impcol=impcol)
        err = None
        for num, line in enumerate(fi.impdat):
            if len(line) != 2:
                err = "Line %s: Invalid Number of Fields (S/B %s is %s)" % \
                    (num + 1, 2, len(line))
                break
            self.acc = line[0]
            chk = self.sql.getRec("genmst",
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", self.acc)],
                                  limit=1)
            if not chk:
                err = "Line %s: Invalid Account %s" % ((num + 1), self.acc)
                break
            self.bal = line[1]
            self.old = self.sql.getRec("genbal",
                                       cols=["glo_cyr"],
                                       where=[("glo_cono", "=",
                                               self.opts["conum"]),
                                              ("glo_acno", "=", self.acc),
                                              ("glo_trdt", "=", self.start)],
                                       limit=1)
            if not self.old:
                self.new_acc = "y"
            else:
                self.new_acc = "n"
            self.endData(det=True)
        if err:
            showError(self.opts["mf"].body, "Import Error", err)
        elif fi.impdat:
            self.opts["mf"].dbm.commitDbase()
        self.df.enableButtonsTags(state=state)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doAcc(self, frt, pag, r, c, p, i, w):
        desc = self.sql.getRec("genmst",
                               cols=["glm_desc"],
                               where=[("glm_cono", "=", self.opts["conum"]),
                                      ("glm_acno", "=", w)],
                               limit=1)
        if not desc:
            return "Invalid Account Number"
        self.acc = w
        self.df.loadEntry(frt, pag, p + 1, data=desc[0])
        self.old = self.sql.getRec("genbal",
                                   where=[("glo_cono", "=",
                                           self.opts["conum"]),
                                          ("glo_acno", "=", self.acc),
                                          ("glo_trdt", "=", self.start)],
                                   limit=1)
        if not self.old:
            self.new_acc = "y"
        else:
            self.new_acc = "n"
            bal = self.old[self.sql.genbal_col.index("glo_cyr")]
            self.df.loadEntry(frt, pag, p + 2, data=bal)

    def doBal(self, frt, pag, r, c, p, i, w):
        self.bal = w

    def endData(self, det=False):
        data = [self.opts["conum"], self.acc, self.start, self.bal]
        if self.new_acc == "y":
            self.sql.insRec("genbal", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.genbal_col
            data.append(self.old[col.index("glo_xflag")])
            self.sql.updRec("genbal",
                            data=data,
                            where=[("glo_cono", "=", self.opts["conum"]),
                                   ("glo_acno", "=", self.acc),
                                   ("glo_trdt", "=", self.start)])
        if det:
            return
        self.opts["mf"].dbm.commitDbase()
        nxt = self.sql.getRec("genmst",
                              cols=["glm_acno"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", ">", self.acc)],
                              limit=1)
        if nxt:
            self.df.colf[0][0][5] = nxt[0]
        else:
            self.df.colf[0][0][5] = 0
        self.df.advanceLine(0)

    def exitData(self):
        bals = self.sql.getRec("genbal",
                               cols=["sum(glo_cyr)"],
                               where=[("glo_cono", "=", self.opts["conum"]),
                                      ("glo_trdt", "=", self.start)],
                               limit=1)
        if bals[0]:
            diff = CCD(bals[0], "SD", 13.2)
            showError(self.opts["mf"].body, "Out of Balance",
                      "Opening Balances Do Not Balance by %s" % diff.disp)
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
        else:
            showInfo(
                self.opts["mf"].body, "Year End",
                """A Year End for the Previous Period Must be Executed to Include These Opening Balances.

If the Current Period is 1 then the Year End for Period 0 must be Executed.""")
            self.df.closeProcess()
            self.opts["mf"].closeLoop()
Пример #11
0
class ar2020(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        if self.opts["rtn"] not in (1, 2, 3):
            mes = "Invalid Routine %s" % str(self.opts["rtn"])
            showError(self.opts["mf"].body, "Control Error", mes)
            return
        self.gc = GetCtl(self.opts["mf"])
        assctl = self.gc.getCtl("assctl", self.opts["conum"])
        if not assctl:
            return
        self.glint = assctl["cta_glint"]
        self.rordp = assctl["cta_rordp"]
        tabs = [
            "assgrp", "assmst", "assdep", "asstrn", "ctlvmf", "ctlvrf",
            "ctlvtf", "genint", "genmst", "gentrn"
        ]
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        if self.glint == "Y":
            # Check Sale of Asset Record
            ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            if self.gc.chkRec(self.opts["conum"], ctlctl, "ass_sls"):
                return
            self.slsac = ctlctl["ass_sls"]
            # Check for VAT Control
            if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]):
                return
            self.convat = ctlctl["vat_ctl"]
            # Check All Group Control Records
            errs = ("Group %s Has An Invalid", "Asset Control Account (%s)",
                    "Accumulated Depreciation Account (%s)",
                    "Depreciation Expense Account (%s)")
            ass = self.sql.getRec(
                "assgrp",
                cols=["asg_group", "asg_assacc", "asg_depacc", "asg_expacc"],
                where=[("asg_cono", "=", self.opts["conum"])])
            for acc in ass:
                for x in range(1, 4):
                    chk = self.sql.getRec("genmst",
                                          where=[("glm_cono", "=",
                                                  self.opts["conum"]),
                                                 ("glm_acno", "=", acc[x])],
                                          limit=1)
                    if not chk:
                        mess = "%s %s" % (errs[0] % acc[0], errs[x] % acc[x])
                        showError(self.opts["mf"].body, "Control Error", mess)
                        return
        self.batchHeader()
        if not self.bh.batno:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def batchHeader(self):
        self.bh = Batches(self.opts["mf"],
                          self.opts["conum"],
                          self.opts["conam"],
                          self.opts["period"],
                          "ASS",
                          self.opts["rtn"],
                          glint=self.glint)
        self.bh.doBatchHeader()
        if not self.bh.batno:
            return
        if self.opts["rtn"] == 2:
            self.bh.batval = float(ASD(0) - ASD(self.bh.batval))

    def drawDialog(self):
        grp = {
            "stype":
            "R",
            "tables": ("assgrp", ),
            "cols": (("asg_group", "", 0, "Grp"), ("asg_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("asg_cono", "=", self.opts["conum"])]
        }
        cod = {
            "stype":
            "R",
            "tables": ("assmst", ),
            "cols": (("asm_code", "", 0, "Cod-Num"), ("asm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("asm_cono", "=", self.opts["conum"])],
            "whera": [["C", "asm_group", 0, 1]]
        }
        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"])]
        }
        data = []
        for x in range(1, (len(armvtp) + 1)):
            data.append([x, armvtp[x - 1][1]])
        mov = {
            "stype": "C",
            "titl": "Valid Types",
            "head": ("C", "Description"),
            "data": data
        }
        fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno),
               (("T", 0, 0, 0), "OSD", 13.2, "Value"),
               (("C", 1, 0, 0), "IUA", 3, "Grp", "Asset Group", "r", "N",
                self.doAssGrp, grp, None, None),
               (("C", 1, 0, 1), "INa", 7, "Cod-Num", "Asset Code", "r", "N",
                self.doAssCod, cod, None, ("notblank", )),
               (("C", 1, 0, 2), "ONA", 13, "Description"),
               (("C", 1, 0, 3), "INa", 9, "Reference", "Reference Number One",
                "i", "N", self.doTrnRef, None, None, ("notblank", )),
               (("C", 1, 0, 4), "ID1", 10, "Date", "Transaction Date", "r",
                "N", self.doTrnDat, None, None, ("efld", )),
               (("C", 1, 0, 5), "IUI", 1, "M", "Movement Type", "r", "N",
                self.doTrnMov, mov, None, ("in", (1, 2, 3, 4, 5))),
               (("C", 1, 0, 6), "ISD", 13.2, "Company", "Company Amount", "",
                "N", self.doCoyAmt, None, None, None),
               (("C", 1, 0, 7), "ISD", 13.2, "Receiver", "Receiver Amount", "",
                "N", self.doRorAmt, None, None, None),
               (("C", 1, 0, 8), "IUA", 1, "V", "V.A.T Code", "C", "N",
                self.doVatCod, vtm, None, ("notblank", )),
               (("C", 1, 0, 9), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N",
                self.doVatAmt, None, None, None),
               (("C", 1, 0,
                 10), "INA", (13, 30), "Details", "Transaction Details", "",
                "N", self.doTrnDet, None, None, None)]
        if self.opts["rtn"] not in (1, 2) and self.glint == "Y":
            fld.extend([[("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"],
                        (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number",
                         "", "N", self.doGenAcc, glm, None, None),
                        (("C", 2, 0, 1), "ONA", 30, "Description"),
                        (("C", 2, 0,
                          2), "ISD", 13.2, "All-Amt", "Allocation Amount", "",
                         "N", self.doAllAmt, None, None, ("efld", )),
                        (("C", 2, 0, 3), "INA", 30, "Details", "", "", "N",
                         self.doAllDet, None, None, ("notblank", ))])
        but = (("Interrogate", None, self.queryAss, 0, ("C", 1, 1),
                ("C", 1, 2)), ("Cancel", None, self.doCancel, 0, ("C", 2, 1),
                               ("C", 1, 1)))
        tag = [("Transaction", None, None, None, False)]
        cnd = [(None, "n"), (self.endPage1, "y")]
        cxt = [None, self.exitPage1]
        if self.opts["rtn"] not in (1, 2) and self.glint == "Y":
            tag.append(("Allocation", None, None, None, False))
            cnd.append((self.endPage2, "y"))
            cxt.append(self.exitPage2)
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tags=tag,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)
        self.df.focusField("C", 1, 1)

    def doAssGrp(self, frt, pag, r, c, p, i, w):
        whr = [("asg_cono", "=", self.opts["conum"]), ("asg_group", "=", w)]
        acc = self.sql.getRec("assgrp", where=whr, limit=1)
        if not acc:
            return "Invalid Asset Group"
        self.group = w
        self.depcod = acc[self.sql.assgrp_col.index("asg_depcod")]
        self.assacc = acc[self.sql.assgrp_col.index("asg_assacc")]
        self.depacc = acc[self.sql.assgrp_col.index("asg_depacc")]
        self.expacc = acc[self.sql.assgrp_col.index("asg_expacc")]

    def doAssCod(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.buydt = 0
        self.seldt = 0
        col = ["asm_desc", "asm_depcod"]
        whr = [("asm_cono", "=", self.opts["conum"]),
               ("asm_group", "=", self.group), ("asm_code", "=", self.code)]
        acc = self.sql.getRec("assmst", cols=col, where=whr, limit=1)
        if not acc:
            ok = askQuestion(screen=self.opts["mf"].body,
                             head="New Asset",
                             mess="Asset does not exist, Create?")
            if ok == "no":
                return "Invalid Asset"
            self.doNewAsset()
            acc = self.sql.getRec("assmst", cols=col, where=whr, limit=1)
            if not acc:
                return "Asset Not Found"
            self.new = "y"
        else:
            self.new = "n"
        dep = self.sql.getRec("assdep",
                              cols=["asd_rate1r"],
                              where=[("asd_cono", "=", self.opts["conum"]),
                                     ("asd_code", "=", acc[1])],
                              limit=1)
        self.rate1r = dep[0]
        col = ["ast_date"]
        whr = [("ast_cono", "=", self.opts["conum"]),
               ("ast_group", "=", self.group), ("ast_code", "=", self.code),
               ("ast_mtyp", "=", 1)]
        pur = self.sql.getRec("asstrn", cols=col, where=whr, limit=1)
        if pur:
            self.buydt = pur[0]
        whr = [("ast_cono", "=", self.opts["conum"]),
               ("ast_group", "=", self.group), ("ast_code", "=", self.code),
               ("ast_mtyp", "in", (3, 5))]
        sel = self.sql.getRec("asstrn", cols=col, where=whr, limit=1)
        if sel:
            self.seldt = sel[0]
        self.df.loadEntry(frt, pag, p + 1, data=acc[0])

    def doTrnRef(self, frt, pag, r, c, p, i, w):
        self.trnref = w

    def doTrnDat(self, frt, pag, r, c, p, i, w):
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"
        if self.bh.multi == "N" and int(w / 100) > self.bh.curdt:
            return "Invalid Date, After Batch Period"
        self.trndat = w
        if self.new == "y":
            self.trnmov = 1
            self.df.loadEntry(frt, pag, p + 1, data=self.trnmov)
            return "sk1"

    def doTrnMov(self, frt, pag, r, c, p, i, w):
        if type(w) == list:
            w = w[0] + 1
        # Do some tests to see if not new again or already sold etc.
        if w == 4 and self.opts["rtn"] != 3:
            return "Depreciation Only Allowed with Journal Entries"
        if self.opts["rtn"] == 1 and w not in (1, 2):
            return "Invalid Choice For Payment"
        if self.opts["rtn"] == 2 and w not in (5, ):
            return "Invalid Choice For Receipt"
        if w == 1 and self.buydt:
            return "Asset Already Purchased"
        if w in (2, 3, 4, 5) and self.seldt:
            return "Asset Already Sold or Written Off"
        if w in (2, 3, 4, 5) and not self.buydt:
            return "Asset Not Yet Purchased"
        self.df.loadEntry(frt, pag, p, data=w)
        self.trnmov = w
        if self.trnmov == 3:
            bal = self.sql.getRec("asstrn",
                                  cols=["sum(ast_amt1)", "sum(ast_amt2)"],
                                  where=[("ast_cono", "=", self.opts["conum"]),
                                         ("ast_group", "=", self.group),
                                         ("ast_code", "=", self.code)],
                                  limit=1)
            self.coyamt = float(ASD(0) - ASD(bal[0]))
            self.df.loadEntry(frt, pag, p + 1, data=self.coyamt)
            self.roramt = float(ASD(0) - ASD(bal[0]))
            self.df.loadEntry(frt, pag, p + 2, data=self.roramt)
            self.vatcode = ""
            self.trnvat = 0
            return "sk4"

    def doCoyAmt(self, frt, pag, r, c, p, i, w):
        if self.opts["rtn"] == 3 and self.trnmov == 5 and w > 0:
            ok = askQuestion(screen=self.opts["mf"].body,
                             head="Debit",
                             mess="Should this Amount not be a Credit Entry?")
            if ok == "yes":
                w = float(ASD(0) - ASD(w))
                self.df.loadEntry(frt, pag, p, data=w)
        self.coyamt = w
        if self.rordp == "N" or not self.rate1r or self.trnmov != 4:
            self.roramt = 0
            self.df.loadEntry(frt, pag, p + 1, data=self.roramt)
            if self.trnmov == 4:
                self.vatcode = ""
                self.trnvat = 0
                self.df.loadEntry(frt, pag, p + 2, data=self.vatcode)
                self.df.loadEntry(frt, pag, p + 3, data=self.trnvat)
                return "sk3"
            return "sk1"

    def doRorAmt(self, frt, pag, r, c, p, i, w):
        if self.opts["rtn"] == 3 and self.trnmov == 5 and w > 0:
            ok = askQuestion(screen=self.opts["mf"].body,
                             head="Debit",
                             mess="Should this Amount not be a Credit Entry?")
            if ok == "yes":
                w = float(ASD(0) - ASD(w))
                self.df.loadEntry(frt, pag, p, data=w)
        self.roramt = w
        self.vatcode = ""
        self.trnvat = 0
        self.df.loadEntry(frt, pag, p + 1, data=self.vatcode)
        self.df.loadEntry(frt, pag, p + 2, data=self.trnvat)
        return "sk2"

    def doVatCod(self, frt, pag, r, c, p, i, w):
        vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat)
        if vrte is None:
            return "Invalid V.A.T Code"
        self.vatcode = w
        self.trnvat = round((self.coyamt * vrte / (vrte + 100)), 2)
        self.df.loadEntry(frt, pag, p + 1, data=self.trnvat)
        if not self.trnvat:
            return "sk1"

    def doVatAmt(self, frt, pag, r, c, p, i, w):
        if self.coyamt < 0 and w > 0:
            self.trnvat = float(ASD(0) - ASD(w))
        elif self.coyamt > 0 and w < 0:
            self.trnvat = float(ASD(0) - ASD(w))
        else:
            self.trnvat = w
        self.df.loadEntry(frt, pag, p, data=self.trnvat)

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        self.trndet = w
        if self.opts["rtn"] not in (1, 2) and self.glint == "Y":
            self.df.colf[2][3][5] = w

    def endPage1(self):
        self.batupd = False
        self.updateTables1()
        self.updateBatch()
        if self.coyamt == 0:
            self.df.advanceLine(1)
        else:
            self.allocated = float(0.0)
            if self.glint == "N" or self.opts["rtn"] in (1, 2) or \
                    self.trnmov == 4:
                self.opts["mf"].dbm.commitDbase()
                self.df.advanceLine(1)
            else:
                self.coyamt = float(ASD(0) - ASD(self.coyamt))
                self.df.loadEntry("T", 2, 0, data=self.coyamt)
                self.df.selPage("Allocation")
                self.df.focusField("C", 2, 1)

    def updateTables1(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        self.amt = self.coyamt
        self.vat = self.trnvat
        if self.trnmov == 4:
            self.net = float(ASD(0) - ASD(self.coyamt))
            self.ror = float(ASD(0) - ASD(self.roramt))
        else:
            self.net = self.ror = float(ASD(self.coyamt) - ASD(self.trnvat))
        if self.opts["rtn"] == 1:  # Payments
            if self.coyamt == 0:
                self.recon = self.curdt
            else:
                self.recon = 0
            acc = self.assacc
            self.glt = 2
        elif self.opts["rtn"] == 2:  # Receipts
            if self.coyamt == 0:
                self.recon = self.curdt
            else:
                self.recon = 0
            self.amt = float(ASD(0) - ASD(self.amt))
            self.vat = float(ASD(0) - ASD(self.vat))
            self.net = float(ASD(0) - ASD(self.net))
            acc = self.assacc
            self.glt = 6
        elif self.opts["rtn"] == 3:  # Journal Entries
            self.recon = 0
            if self.trnmov == 4:
                acc = self.depacc
            else:
                acc = self.assacc
            self.glt = 4
        # Asset Register Transaction
        data = [
            self.opts["conum"], self.group, self.code, self.opts["rtn"],
            self.trnref, self.bh.batno, self.trndat, self.trnmov, self.net,
            self.ror, self.vat, self.curdt, self.trndet, self.vatcode, "N",
            self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("asstrn", data=data)
        if self.vatcode:
            # VAT Transaction (ctlvtf)
            data = (self.opts["conum"], self.vatcode, "I", self.curdt, "A",
                    self.opts["rtn"], self.bh.batno, self.trnref, self.trndat,
                    self.code, self.trndet, self.amt, self.vat, 0,
                    self.opts["capnm"], self.sysdtw, 0)
            self.sql.insRec("ctlvtf", data=data)
        if self.glint == "N":
            return
        # General Ledger Asset or Depreciation Account
        data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt,
                self.trnref, self.bh.batno, self.net, self.vat, self.trndet,
                self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0)
        self.sql.insRec("gentrn", data=data)
        if self.vat:
            # General Ledger Control Transaction (V.A.T.)
            data = [
                self.opts["conum"], self.convat, self.curdt, self.trndat,
                self.glt, self.trnref, self.bh.batno, self.vat, 0.00,
                self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("gentrn", data=data)
        self.amt = float(ASD(0) - ASD(self.amt))
        if self.opts["rtn"] in (1, 2):
            # General Ledger Control Transaction (Bank)
            data = [
                self.opts["conum"], self.bh.acc, self.curdt, self.trndat,
                self.glt, self.trnref, self.bh.batno, self.amt, 0.00,
                self.trndet, "N", "", self.recon, self.opts["capnm"],
                self.sysdtw, 0
            ]
            self.sql.insRec("gentrn", data=data)
        elif self.trnmov == 4:
            # General Ledger Expense Account (Depreciation)
            data = [
                self.opts["conum"], self.expacc, self.curdt, self.trndat,
                self.glt, self.trnref, self.bh.batno, self.coyamt, self.vat,
                self.trndet, "N", "", self.recon, self.opts["capnm"],
                self.sysdtw, 0
            ]
            self.sql.insRec("gentrn", data=data)
        if self.trnmov == 5:
            # Sale of Asset
            # Raise Depreciation
            callModule(self.opts["mf"],
                       None,
                       "ar2030",
                       coy=(self.opts["conum"], self.opts["conam"]),
                       period=self.opts["period"],
                       user=self.opts["capnm"],
                       args=(self.curdt, self.group, self.code))
            # Generate Sale
            amt = self.sql.getRec("asstrn",
                                  cols=["sum(ast_amt1)"],
                                  where=[("ast_cono", "=", self.opts["conum"]),
                                         ("ast_group", "=", self.group),
                                         ("ast_code", "=", self.code)],
                                  limit=1)
            if amt[0]:
                data = [
                    self.opts["conum"], self.slsac, self.curdt, self.trndat,
                    self.glt, self.trnref, self.bh.batno, amt[0], 0,
                    self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0
                ]
                self.sql.insRec("gentrn", data=data)
                data[1] = acc
                data[7] = float(ASD(0) - ASD(amt[0]))
                self.sql.insRec("gentrn", data=data)

    def exitPage1(self):
        self.df.closeProcess()
        self.bh.doBatchTotal()
        self.opts["mf"].closeLoop()

    def doGenAcc(self, frt, pag, r, c, p, i, w):
        chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w)
        if type(chk) is str:
            return chk
        self.genacc = w
        self.df.loadEntry("C", pag, p + 1, data=chk[0])

    def doAllAmt(self, frt, pag, r, c, p, i, w):
        if w == 0:
            self.allamt = float(ASD(self.coyamt) - ASD(self.allocated))
            self.df.loadEntry(frt, pag, p, data=self.allamt)
        else:
            self.allamt = w

    def doAllDet(self, frt, pag, r, c, p, i, w):
        self.alldet = w

    def doCancel(self):
        ok = askQuestion(self.opts["mf"].body,
                         head="Cancel",
                         mess="Are You Certain You Want to Cancel This Entry?")
        if ok == "yes":
            self.opts["mf"].dbm.rollbackDbase()
            if self.batupd:
                self.updateBatch(rev=True)
            self.df.clearFrame("C", 2)
            self.df.selPage("Transaction")
            row = int(int((self.df.last[1][1] - 1) / self.df.colq[1]))
            col = (row * self.df.colq[1]) + 1
            self.df.focusField("C", 1, col)

    def endPage2(self):
        self.updateTables2()
        self.allocated = float(ASD(self.allocated) + ASD(self.allamt))
        if self.allocated == self.coyamt:
            self.opts["mf"].dbm.commitDbase()
            self.df.clearFrame("C", 2)
            self.df.selPage("Transaction")
            self.df.advanceLine(1)
        else:
            bal = float(ASD(self.coyamt) - ASD(self.allocated))
            self.df.loadEntry("T", 2, 0, data=bal)
            self.df.advanceLine(2)

    def updateTables2(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        # General Ledger Transaction (Allocation)
        amt = float(ASD(0) - ASD(self.allamt))
        data = (self.opts["conum"], self.genacc, self.curdt, self.trndat,
                self.glt, self.trnref, self.bh.batno, amt, 0.00, self.alldet,
                "N", "", 0, self.opts["capnm"], self.sysdtw, 0)
        self.sql.insRec("gentrn", data=data)

    def exitPage2(self):
        self.df.focusField("C", 2, self.df.col)

    def updateBatch(self, rev=False):
        if rev:
            self.bh.batqty -= 1
            self.bh.batval = float(ASD(self.bh.batval) - ASD(self.coyamt))
        else:
            self.batupd = True
            self.bh.batqty += 1
            self.bh.batval = float(ASD(self.bh.batval) + ASD(self.coyamt))
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)

    def doNewAsset(self):
        tit = ("Create New Asset", )
        dep = {
            "stype":
            "R",
            "tables": ("assdep", ),
            "cols": (("asd_code", "", 0, "Cod"), ("asd_desc", "", 0,
                                                  "Description", "Y")),
            "where": [("asd_cono", "=", self.opts["conum"])]
        }
        self.fld = ((("T", 0, 0, 0), "INA", 30, "Description", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 1, 0), "INa", 3, "Dep Code", "Depreciation Code",
                     self.depcod, "N", self.doDepCode, dep, None,
                     ("notblank", )), (("T", 0, 1, 0), "ONA", 34, ""))
        tnd = ((self.doNewEnd, "N"), )
        txt = (self.doNewXit, )
        state = self.df.disableButtonsTags()
        self.na = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=self.fld,
                               tend=tnd,
                               txit=txt)
        self.na.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)

    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.na.loadEntry(frt, pag, p + 1, data=chk[0])

    def doNewEnd(self):
        dat = [self.opts["conum"], self.group, self.code]
        for x in range(len(self.na.t_work[0][0]) - 1):
            dat.append(self.na.t_work[0][0][x])
        self.sql.insRec("assmst", data=dat)
        self.doNewXit()

    def doNewXit(self):
        self.na.closeProcess()

    def queryAss(self):
        callModule(self.opts["mf"],
                   self.df,
                   "ar4010",
                   coy=(self.opts["conum"], self.opts["conam"]),
                   period=self.opts["period"],
                   user=self.opts["capnm"])
Пример #12
0
class bkc210(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, ["bkmrtm", "bkmrtr", "bkmrtt"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def drawDialog(self):
        brm = {
            "stype": "R",
            "tables": ("bkmrtm",),
            "cols": (
                ("brm_code", "", 0, "Code"),
                ("brm_desc", "", 0, "Description"),
                ("brm_base", "", 0, "B")),
            "where": [("brm_cono", "=", self.opts["conum"])],
            "whera": [("T", "brm_type", 0, 0)],
            "order": "brm_code"}
        brr = {
            "stype": "R",
            "tables": ("bkmrtr",),
            "cols": (
                ("brr_date", "", 0, "Start-Date"),
                ("brr_rate", "", 0, "Rte-Amount")),
            "where": [("brr_cono", "=", self.opts["conum"])],
            "whera": [("T", "brr_type", 0, 0), ("T", "brr_code", 1, 0)],
            "order": "brr_date"}
        r1s = (
            ("Accomodation","A"),
            ("Other","O"))
        r2s = (
            ("/Unit/Person/Day","A"),
            ("/Unit/Person","B"),
            ("/Unit/Day","C"),
            ("/Unit","D"))
        self.fld = (
            (("T",0,0,0),("IRB",r1s),0,"Unit Type","",
                "A","Y",self.doType,None,None,None),
            (("T",0,1,0),"IUI",3,"Code","",
                "","N",self.doCode,brm,None,None),
            (("T",0,2,0),"ITX",30,"Description","",
                "","N",None,None,self.doDelete,("notblank",)),
            (("T",0,3,0),("IRB",r2s),0,"Rate Base","",
                "A","N",self.doBase,None,None,None),
            (("T",0,4,0),"Id1",10.2,"Starting Date","",
                0,"N",self.doExpd,brr,None,("efld",)),
            (("T",0,5,0),"IUD",10.2,"Rate Amount","",
                0,"N",self.doRate,None,self.doDelete,("efld",)))
        but = (("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 doType(self, frt, pag, r, c, p, i, w):
        self.rtype = w

    def doCode(self, frt, pag, r, c, p, i, w):
        if not w:
            acc = self.sql.getRec("bkmrtm", cols=["max(brm_code)"],
                where=[("brm_cono", "=", self.opts["conum"]), ("brm_type",
                "=", self.rtype)], limit=1)
            if not acc[0]:
                w = 1
            else:
                w = acc[0] + 1
            self.df.loadEntry(frt, pag, p, data=w)
        self.rcode = w
        self.rtm = self.sql.getRec("bkmrtm", where=[("brm_cono", "=",
            self.opts["conum"]), ("brm_type", "=", self.rtype), ("brm_code",
            "=", self.rcode)], limit=1)
        if not self.rtm:
            self.newr = True
        else:
            self.newr = False
            for num, dat in enumerate(self.rtm[3:-1]):
                self.df.loadEntry(frt, pag, p+num+1, data=dat)

    def doBase(self, frt, pag, r, c, p, i, w):
        self.rbase = w

    def doExpd(self, frt, pag, r, c, p, i, w):
        self.newx = True
        if not self.newr:
            self.rtr = self.sql.getRec("bkmrtr", where=[("brr_cono",
                "=", self.opts["conum"]), ("brr_type", "=", self.rtype),
                ("brr_code", "=", self.rcode), ("brr_date", "=", w)], limit=1)
            if self.rtr:
                self.newx = False
                rate = self.rtr[self.sql.bkmrtr_col.index("brr_rate")]
                self.df.loadEntry(frt, pag, p+1, data=rate)
        self.date = w

    def doRate(self, frt, pag, r, c, p, i, w):
        self.rate = w

    def doDelete(self):
        if self.df.col == 6:
            self.sql.delRec("bkmrtr", where=[("brr_cono", "=",
                self.opts["conum"]), ("brr_type", "=", self.rtype),
                ("brr_code", "=", self.rcode), ("brr_date", "=", self.date)])
            return
        chk = self.sql.getRec("bkmrtt", where=[("brt_cono", "=",
            self.opts["conum"]), ("brt_utype", "=", self.rtype), ("brt_rcode",
            "=", self.rcode)])
        if not chk:
            # Rate has been used, do not delete master record only rates
            self.sql.delRec("bkmrtm", where=[("brm_cono", "=",
                self.opts["conum"]), ("brm_type", "=", self.rtype),
                ("brm_code", "=", self.rcode)])
        self.sql.delRec("bkmrtr", where=[("brr_cono", "=", self.opts["conum"]),
            ("brr_type", "=", self.rtype), ("brr_code", "=", self.rcode)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        data.extend(self.df.t_work[0][0][:4])
        if self.newr:
            self.sql.insRec("bkmrtm", data=data)
        elif data != self.rtm[:len(data)]:
            col = self.sql.bkmrtm_col
            data.append(self.rtm[col.index("brm_xflag")])
            self.sql.updRec("bkmrtm", data=data, where=[("brm_cono", "=",
                self.opts["conum"]), ("brm_type", "=", self.rtype),
                ("brm_code", "=", self.rcode)])
        data = [self.opts["conum"]]
        data.extend(self.df.t_work[0][0][:2])
        data.extend(self.df.t_work[0][0][4:6])
        if self.newx:
            self.sql.insRec("bkmrtr", data=data)
        elif data != self.rtr[:len(data)]:
            col = self.sql.bkmrtr_col
            data.append(self.rtr[col.index("brr_xflag")])
            self.sql.updRec("bkmrtr", data=data, where=[("brr_cono",
                "=", self.opts["conum"]), ("brr_type", "=", self.rtype),
                ("brr_code", "=", self.rcode), ("brr_date", "=", self.date)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #13
0
class sc2030(object):
    def __init__(self, **opts):
        self.opts = opts
        if "test" not in opts:
            self.opts["test"] = None
        if self.setVariables():
            if self.opts["test"]:
                self.doImport()
            else:
                self.mainProcess()
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       ["scpcmp", "scpmem", "scpent", "scpgme"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.pair = 0
        self.doimport = False
        return True

    def mainProcess(self):
        com = {
            "stype":
            "R",
            "tables": ("scpcmp", ),
            "cols":
            (("scp_ccod", "", 0, "CCD"), ("scp_name", "", 0, "Name", "Y"),
             ("scp_tsiz", "", 0, "S"), ("scp_fmat", "", 0, "F"),
             ("scp_nsec", "", 0, "NS"), ("scp_nent", "", 0, "NE")),
            "where": [("scp_cono", "=", self.opts["conum"])]
        }
        self.sec = {
            "stype": "C",
            "titl": "Available Sections",
            "head": ("Sec", "Club"),
            "typs": (("Ua", 3), ("NA", 30)),
            "data": []
        }
        self.skp = {
            "stype":
            "R",
            "tables": ("scpmem", "scpgme"),
            "cols": (("a", "UI", 6, "S-Code"), ("b", "NA", 30, "Name", "Y"),
                     ("c", "UI", 6, "O-Code"), ("d", "NA", 30, "Name"),
                     ("e", "UI", 3, "For"), ("f", "UI", 3, "Agt")),
            "where": [],
            "wtype":
            "D"
        }
        tag = (("Results", None, ("T", 0, 0), ("T", 0, 1)), )
        r1s = (("Main", "M"), ("Play-Offs", "P"))
        fld = ((("T", 0, 0,
                 0), "I@scp_ccod", 0, "", "", "", "Y", self.doCmpCod, com,
                None, ("notzero", )), (("T", 0, 0, 0), "O@scp_name", 0, ""),
               (("T", 0, 1,
                 0), ("IRB", r1s), 0, "Type", "", "", "N", self.doCmpTyp, None,
                None, None), (("T", 0, 2, 0), "I@scg_rnum", 0, "Round", "", "",
                              "N", self.doRndNum, None, None, ("notzero", )),
               (("T", 1, 0, 0), "IUI", 2, "Section Number", "", "", "N",
                self.doSecNum, None, None, ("notzero", )),
               (("T", 1, 0, 0), "IUA", 1, "Sub-Section", "", "", "N",
                self.doSubNum, None, None, ("in", ("A", "B"))),
               (("C", 1, 0, 0), "I@scg_scod", 0, "", "", 0, "N", self.doSkpCod,
                self.skp, None, ("notzero", )), (("C", 1, 0, 0), "ONA", 30,
                                                 "Skp-Name"),
               (("C", 1, 0, 0), "I@scg_sfor", 0, "", "", "", "N", self.doShots,
                None, None, ("efld", )), (("C", 1, 0, 0), "I@scg_ocod", 0, "",
                                          "", 0, "N", self.doSkpCod, self.skp,
                                          None, ("notzero", )),
               (("C", 1, 0, 0), "ONA", 30,
                "Opp-Name"), (("C", 1, 0, 0), "I@scg_sagt", 0, "", "", "", "N",
                              self.doShots, None, None, ("efld", )))
        tnd = ((self.doTopEnd, "y"), (self.doTopEnd, "n"))
        txt = (self.doTopExit, self.doTopExit)
        cnd = (None, (self.doColEnd, "n"))
        cxt = (None, self.doColExit)
        but = (("Import Results", None, self.doImport, 0, ("T", 1, 1),
                (("T", 1, 2), ("T", 1, 0))),
               ("Show Entries", None, self.doShow, 0, ("C", 1, 1), ("C", 1,
                                                                    2)))
        self.df = TartanDialog(self.opts["mf"],
                               tags=tag,
                               eflds=fld,
                               rows=(0, 16),
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)

    def doCmpCod(self, frt, pag, r, c, p, i, w):
        com = self.sql.getRec("scpcmp",
                              where=[("scp_cono", "=", self.opts["conum"]),
                                     ("scp_ccod", "=", w)],
                              limit=1)
        if not com:
            return "Invalid Competition Code"
        if not com[2]:
            return "Competiton Draw Not Yet Done"
        chk = self.sql.getRec("scpent",
                              cols=["count(*)"],
                              where=[("sce_cono", "=", self.opts["conum"]),
                                     ("sce_ccod", "=", w)],
                              limit=1)
        if not chk[0]:
            return "There are No Entries for this Competition"
        self.ccod = w
        self.name = com[self.sql.scpcmp_col.index("scp_name")]
        self.fmat = com[self.sql.scpcmp_col.index("scp_fmat")]
        self.nsec = com[self.sql.scpcmp_col.index("scp_nsec")]
        self.nent = com[self.sql.scpcmp_col.index("scp_nent")]
        self.ssub = com[self.sql.scpcmp_col.index("scp_subs")]
        self.squa = com[self.sql.scpcmp_col.index("scp_qual")]
        self.clup = com[self.sql.scpcmp_col.index("scp_clup")]
        self.mrnds = com[self.sql.scpcmp_col.index("scp_mrnds")]
        self.prnds = com[self.sql.scpcmp_col.index("scp_prnds")]
        self.state = com[self.sql.scpcmp_col.index("scp_state")]
        if not self.doimport:
            self.df.loadEntry(frt, pag, p + 1, data=self.name)
        self.byenum = 900000
        if self.state < 3:
            self.ctyp = "M"
            self.lrnd = self.mrnds
            if not self.doimport:
                self.df.loadEntry(frt, pag, p + 2, data=self.ctyp)
                return "sk2"
        elif self.state == 6:
            return "All Results Already Captured"
        else:
            self.ctyp = "P"
            self.lrnd = self.prnds
            if not self.doimport:
                self.df.loadEntry(frt, pag, p + 2, data=self.ctyp)

    def doCmpTyp(self, frt, pag, r, c, p, i, w):
        self.ctyp = w
        chk = self.sql.getRec(
            "scpgme",
            cols=["count(*)", "sum(scg_sfor)", "sum(scg_sagt)"],
            where=[("scg_cono", "=", self.opts["conum"]),
                   ("scg_ccod", "=", self.ccod), ("scg_ctyp", "=", "P")],
            limit=1)
        if self.ctyp == "M":
            if chk[0] and (chk[1] or chk[2]):
                return "Play-Offs Already Started"
            self.lrnd = self.mrnds
        elif not chk[0]:
            return "Play-Offs Draw Not Yet Done"
        else:
            self.lrnd = self.prnds

    def doRndNum(self, frt, pag, r, c, p, i, w):
        if self.ctyp == "M" and self.clup == "Y" and w > 1:
            more = self.sql.getRec("scpgme",
                                   cols=["count(*)"],
                                   where=[("scg_cono", "=",
                                           self.opts["conum"]),
                                          ("scg_ccod", "=", self.ccod),
                                          ("scg_rnum", "=", w - 1),
                                          ("scg_ocod", "=", 0)],
                                   limit=1)[0]
            if more:
                return "Closed-Up Draw, Round %s Results Missing" % (w - 1)
        if w > self.lrnd:
            return "Invalid Round, Exceeds Maximum (%s)" % self.lrnd
        if w > 1:
            chk = self.sql.getRec("scpgme",
                                  cols=[
                                      "scg_scod", "scg_ocod", "sum(scg_sfor)",
                                      "sum(scg_sagt)"
                                  ],
                                  where=[("scg_cono", "=", self.opts["conum"]),
                                         ("scg_ccod", "=", self.ccod),
                                         ("scg_ctyp", "=", self.ctyp),
                                         ("scg_rnum", "=", w - 1)])
            for s in chk:
                if s[0] < 900000 and s[1] < 900000 and not s[2] and not s[3]:
                    return "Invalid Round, Previous Round Missing"
            chk = self.sql.getRec("scpgme",
                                  where=[("scg_cono", "=", self.opts["conum"]),
                                         ("scg_ccod", "=", self.ccod),
                                         ("scg_ctyp", "=", self.ctyp),
                                         ("scg_rnum", "<", w),
                                         ("scg_scod", "<", 900000),
                                         ("scg_ocod", "<", 900000),
                                         ("(", "scg_sfor", "=", 0, "and",
                                          "scg_sagt", "=", 0, ")")])
            if chk:
                return "Previous Round Not Yet Completely Captured"
        chk = self.sql.getRec("scpgme",
                              cols=["sum(scg_sfor)", "sum(scg_sagt)"],
                              where=[("scg_cono", "=", self.opts["conum"]),
                                     ("scg_ccod", "=", self.ccod),
                                     ("scg_ctyp", "=", self.ctyp),
                                     ("scg_rnum", ">", w)],
                              limit=1)
        if chk[0] or chk[1]:
            return "Invalid Round, Later Rounds Captured"
        chk = self.sql.getRec("scpgme",
                              cols=["count(*)"],
                              where=[("scg_cono", "=", self.opts["conum"]),
                                     ("scg_ccod", "=", self.ccod),
                                     ("scg_ctyp", "=", self.ctyp),
                                     ("scg_rnum", "=", w),
                                     ("scg_scod", "<", 900000),
                                     ("scg_ocod", "<", 900000),
                                     ("scg_sfor", "=", 0),
                                     ("scg_sagt", "=", 0)])[0]
        if not chk:
            ok = askQuestion(self.opts["mf"].body,
                             "Already Entered",
                             """All Results for this Round Already Captured.

Would you Like to Recapture this Round?""",
                             default="no")
            if ok == "no":
                return "Already Captured"
            if self.fmat == "K" or self.ctyp == "R":
                if self.ctyp == "M" and w == self.mrnds:
                    self.sql.delRec("scpgme",
                                    where=[("scg_cono", "=",
                                            self.opts["conum"]),
                                           ("scg_ccod", "=", self.ccod),
                                           ("scg_ctyp", "=", "R")])
                else:
                    self.sql.delRec("scpgme",
                                    where=[("scg_cono", "=",
                                            self.opts["conum"]),
                                           ("scg_ccod", "=", self.ccod),
                                           ("scg_ctyp", "=", self.ctyp),
                                           ("scg_rnum", "=", w + 1)])
        self.rnum = w
        self.doimport = False

    def doImport(self):
        self.doimport = True
        if self.opts["test"]:
            self.ccod, self.rnum, impfle = self.opts["test"]
            err = self.doCmpCod("T", 0, 0, 0, 0, 0, self.ccod)
            if err:
                print(err)
                return
            self.doGetOldWin()
            impdlg = False
        else:
            impfle = None
            impdlg = True
            self.df.setWidget(self.df.mstFrame, state="hide")
        cols = [["scg_snum", 0, "UI", 2], ["scg_subs", 1, "UA", 1],
                ["scg_scod", 2, "UI", 6], ["scg_ocod", 3, "UI", 6],
                ["scg_sfor", 4, "UI", 2], ["scg_sagt", 5, "UI", 2]]
        fi = FileImport(self.opts["mf"],
                        impcol=cols,
                        impfle=impfle,
                        impdlg=impdlg)
        if fi.impdat:
            if not self.opts["test"]:
                sp = ProgressBar(self.opts["mf"].body,
                                 typ="Importing Results",
                                 mxs=len(fi.impdat))
            err = None
            for num, line in enumerate(fi.impdat):
                if not self.opts["test"]:
                    sp.displayProgress(num)
                if not line[0]:
                    continue
                whr = [("scg_cono", "=", self.opts["conum"]),
                       ("scg_ccod", "=", self.ccod),
                       ("scg_ctyp", "=", self.ctyp),
                       ("scg_snum", "=", line[0]), ("scg_subs", "=", line[1]),
                       ("scg_rnum", "=", self.rnum)]
                if self.clup == "Y":
                    self.newo = True
                    whr.append(("scg_scod", "in", (line[2], line[3])))
                else:
                    self.newo = False
                    whr.append(("scg_scod", "=", line[2]))
                    whr.append(("scg_ocod", "=", line[3]))
                chk = self.sql.getRec("scpgme", where=whr)
                if not chk:
                    err = "Invalid Skip %s, Opponent %s" % (line[2], line[3])
                    break
                if line[2] > 900000 or line[3] > 900000:
                    pass
                elif not line[4] and not line[5]:
                    err = "Zero Results"
                    break
                self.snum = line[0]
                self.subs = line[1]
                self.scod = line[2]
                self.ocod = line[3]
                self.sfor = line[4]
                self.sagt = line[5]
                self.doColEnd()
            if not self.opts["test"]:
                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.ierr = False
                if self.ssub == "Y":
                    secs = int(self.nsec / 2)
                else:
                    secs = self.nsec
                for self.snum in range(1, secs + 1):
                    if self.ssub == "Y":
                        for self.subs in ("A", "B"):
                            self.doColExit()
                            if self.ierr:
                                break
                        if self.ierr:
                            break
                    else:
                        self.subs = ""
                        self.doColExit()
                        if self.ierr:
                            break
                if not self.ierr:
                    self.opts["mf"].dbm.commitDbase()
        self.doTopExit()
        if not self.opts["test"]:
            self.df.setWidget(self.df.mstFrame, state="show")
            self.df.focusField("T", 0, 1)

    def doSecNum(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("scpgme",
                              where=[("scg_cono", "=", self.opts["conum"]),
                                     ("scg_ccod", "=", self.ccod),
                                     ("scg_ctyp", "=", self.ctyp),
                                     ("scg_snum", "=", w)],
                              limit=1)
        if not chk:
            return "Invalid Section Number"
        self.snum = w
        if self.ssub == "N" or self.ctyp == "P":
            self.subs = ""
            self.df.loadEntry(frt, pag, p + 1, data=self.subs)
            self.doLoadSkips()
            return "sk1"

    def doSubNum(self, frt, pag, r, c, p, i, w):
        self.subs = w
        self.doLoadSkips()

    def doTopEnd(self):
        if self.df.pag == 0:
            if self.ctyp == "P":
                self.snum = 1
                self.df.loadEntry("T", 1, 0, data=self.snum)
                self.subs = ""
                self.df.loadEntry("T", 1, 1, data=self.subs)
                self.doLoadSkips()
                self.df.focusField("C", 1, 1)
            else:
                self.doGetOldWin()
                self.df.focusField("T", 1, 1)
        else:
            self.df.focusField("C", 1, 1)

    def doLoadSkips(self):
        col = ["scg_scod", "scg_ocod", "scg_sfor", "scg_sagt"]
        whr = [("scg_cono", "=", self.opts["conum"]),
               ("scg_ccod", "=", self.ccod), ("scg_ctyp", "=", self.ctyp),
               ("scg_rnum", "=", self.rnum), ("scg_snum", "=", self.snum),
               ("scg_subs", "=", self.subs), ("scg_ocod", "<", 900000)]
        data = []
        recs = self.sql.getRec("scpgme", cols=col, where=whr)
        for rec in recs:
            data.append((rec[0], self.getName(rec[0]), rec[1],
                         self.getName(rec[1]), rec[2], rec[3]))
        self.skp["where"] = data

    def doTopExit(self):
        if not self.opts["test"] and self.df.pag == 0:
            self.df.closeProcess()
            self.opts["mf"].closeLoop()
        else:
            # Check all entries for round
            chk = self.sql.getRec("scpgme",
                                  cols=["count(*)"],
                                  where=[("scg_cono", "=", self.opts["conum"]),
                                         ("scg_ccod", "=", self.ccod),
                                         ("scg_ctyp", "=", self.ctyp),
                                         ("scg_rnum", "=", self.rnum),
                                         ("scg_scod", "<", 900000),
                                         ("scg_ocod", "<", 900000),
                                         ("scg_sfor", "=", 0),
                                         ("scg_sagt", "=", 0)],
                                  limit=1)[0]
            if chk:
                txt = "Not All the Results for Round %s Captured" % self.rnum
                if self.opts["test"]:
                    self.opts["mf"].dbm.rollbackDbase()
                    return
                txt = "%s\n\nDo You want to Exit and Lose All Results for "\
                    "this Round?" % txt
                ok = askQuestion(self.opts["mf"].body,
                                 "Missing Results",
                                 txt,
                                 default="no")
                if ok == "yes":
                    self.opts["mf"].dbm.rollbackDbase()
                    self.df.focusField("T", 0, 4)
                else:
                    self.df.focusField("T", 1, 1)
                return
            if self.rnum == self.lrnd:
                chk = self.sql.getRec("scpgme",
                                      cols=["count(*)"],
                                      where=[("scg_cono", "=",
                                              self.opts["conum"]),
                                             ("scg_ccod", "=", self.ccod),
                                             ("scg_ctyp", "=", "M"),
                                             ("scg_scod", "<", 900000),
                                             ("scg_ocod", "<", 900000),
                                             ("scg_sfor", "=", 0),
                                             ("scg_sagt", "=", 0)],
                                      limit=1)[0]
                if not chk:
                    # Update scpcmp if no missing entries
                    self.sql.updRec("scpcmp",
                                    cols=["scp_state"],
                                    data=[3],
                                    where=[("scp_cono", "=",
                                            self.opts["conum"]),
                                           ("scp_ccod", "=", self.ccod)])
                    self.opts["mf"].dbm.commitDbase()
            if not self.doimport:
                if self.ctyp == "P":
                    self.df.focusField("T", 0, 4)
                else:
                    self.df.focusField("T", 0, 1)

    def doSkpCod(self, frt, pag, r, c, p, i, w):
        skp = self.sql.getRec("scpgme",
                              where=[("scg_cono", "=", self.opts["conum"]),
                                     ("scg_ccod", "=", self.ccod),
                                     ("scg_ctyp", "=", self.ctyp),
                                     ("scg_snum", "=", self.snum),
                                     ("scg_subs", "=", self.subs),
                                     ("scg_rnum", "=", self.rnum),
                                     ("scg_scod", "=", w)],
                              limit=1)
        if not skp:
            return "Invalid Skip"
        if skp[self.sql.scpgme_col.index("scg_ocod")] > 900000:
            return "Skip has a Bye"
        if i == 3:
            if w == self.scod:
                return "Playing Against Himself?"
            if skp[self.sql.scpgme_col.index("scg_ocod")]:
                return "Already Paired"
            self.ocod = w
            onam = self.getName(self.ocod)
            self.df.loadEntry("C", 1, p + 1, data=onam)
            self.df.loadEntry("C", 1, p + 2, data=0)
            return
        self.scod = w
        snam = self.getName(w)
        self.df.loadEntry("C", 1, p + 1, data=snam)
        sfor = skp[self.sql.scpgme_col.index("scg_sfor")]
        self.df.loadEntry("C", 1, p + 2, data=sfor)
        self.ocod = skp[self.sql.scpgme_col.index("scg_ocod")]
        if self.ocod:
            self.newo = False
            self.df.loadEntry("C", 1, p + 3, data=self.ocod)
            onam = self.getName(self.ocod)
            self.df.loadEntry("C", 1, p + 4, data=onam)
            ofor = skp[self.sql.scpgme_col.index("scg_sagt")]
            self.df.loadEntry("C", 1, p + 5, data=ofor)
        else:
            self.newo = True

    def getName(self, code):
        if code > 900000:
            return "Bye"
        nam = self.sql.getRec("scpmem",
                              cols=["scm_surname", "scm_names"],
                              where=[("scm_cono", "=", self.opts["conum"]),
                                     ("scm_scod", "=", code)],
                              limit=1)
        return "%s, %s" % (nam[0], nam[1][0])

    def doShots(self, frt, pag, r, c, p, i, w):
        if i == 2:
            self.sfor = w
            if not self.newo:
                return "sk2"
        else:
            self.sagt = w

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

    def doColEnd(self):
        if self.fmat == "K":
            if self.newo:
                self.sql.delRec("scpgme",
                                where=[("scg_cono", "=", self.opts["conum"]),
                                       ("scg_ccod", "=", self.ccod),
                                       ("scg_ctyp", "=", self.ctyp),
                                       ("scg_snum", "=", self.snum),
                                       ("scg_subs", "=", self.subs),
                                       ("scg_rnum", "=", self.rnum),
                                       ("scg_scod", "=", self.ocod)])
                cols = ["scg_ocod"]
                data = [self.ocod]
            else:
                cols = []
                data = []
            if self.clup == "Y":
                cols.extend(["scg_sfor", "scg_sagt", "scg_pair"])
                self.pair += 1
                data.extend([self.sfor, self.sagt, self.pair])
            else:
                cols.extend(["scg_sfor", "scg_sagt"])
                data.extend([self.sfor, self.sagt])
            self.sql.updRec("scpgme",
                            cols=cols,
                            data=data,
                            where=[("scg_cono", "=", self.opts["conum"]),
                                   ("scg_ccod", "=", self.ccod),
                                   ("scg_ctyp", "=", self.ctyp),
                                   ("scg_snum", "=", self.snum),
                                   ("scg_subs", "=", self.subs),
                                   ("scg_rnum", "=", self.rnum),
                                   ("scg_scod", "=", self.scod)])
        else:
            if self.sfor == self.sagt:
                pfor = .5
                pagt = .5
            elif self.sfor > self.sagt:
                pfor = 1
                pagt = 0
            else:
                pfor = 0
                pagt = 1
            self.sql.updRec("scpgme",
                            cols=["scg_sfor", "scg_sagt", "scg_pnts"],
                            data=[self.sfor, self.sagt, pfor],
                            where=[("scg_cono", "=", self.opts["conum"]),
                                   ("scg_ccod", "=", self.ccod),
                                   ("scg_ctyp", "=", self.ctyp),
                                   ("scg_snum", "=", self.snum),
                                   ("scg_subs", "=", self.subs),
                                   ("scg_rnum", "=", self.rnum),
                                   ("scg_scod", "=", self.scod)])
            self.sql.updRec("scpgme",
                            cols=["scg_sfor", "scg_sagt", "scg_pnts"],
                            data=[self.sagt, self.sfor, pagt],
                            where=[("scg_cono", "=", self.opts["conum"]),
                                   ("scg_ccod", "=", self.ccod),
                                   ("scg_ctyp", "=", self.ctyp),
                                   ("scg_snum", "=", self.snum),
                                   ("scg_subs", "=", self.subs),
                                   ("scg_rnum", "=", self.rnum),
                                   ("scg_scod", "=", self.ocod)])
        self.scod = 0
        if not self.doimport:
            self.doLoadSkips()
            self.df.advanceLine(1)

    def doShow(self):
        cols = (("scod", "Skip", 6, "UI",
                 "N"), ("sname", "Name", 30, "NA",
                        "N"), ("sfor", "Shots", 5, "UI", "N"), ("ocod", "Oppt",
                                                                6, "UI", "N"),
                ("oname", "Name", 30, "NA", "N"), ("sagt", "Shots", 5, "UI",
                                                   "N"))
        recs = self.sql.getRec("scpgme",
                               where=[("scg_cono", "=", self.opts["conum"]),
                                      ("scg_ccod", "=", self.ccod),
                                      ("scg_ctyp", "=", self.ctyp),
                                      ("scg_snum", "=", self.snum),
                                      ("scg_subs", "=", self.subs),
                                      ("scg_rnum", "=", self.rnum)])
        done = []
        data = []
        for rec in recs:
            scod = rec[self.sql.scpgme_col.index("scg_scod")]
            ocod = rec[self.sql.scpgme_col.index("scg_ocod")]
            if scod in done or scod > 900000 or ocod in done or ocod > 900000:
                continue
            sfor = rec[self.sql.scpgme_col.index("scg_sfor")]
            sagt = rec[self.sql.scpgme_col.index("scg_sagt")]
            data.append((scod, self.getName(scod), sfor, ocod,
                         self.getName(ocod), sagt))
        SelectChoice(self.opts["mf"].window, "Results", cols, data)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doColExit(self):
        chk = self.sql.getRec("scpgme",
                              cols=["count(*)"],
                              where=[("scg_cono", "=", self.opts["conum"]),
                                     ("scg_ccod", "=", self.ccod),
                                     ("scg_ctyp", "=", self.ctyp),
                                     ("scg_rnum", "=", self.rnum),
                                     ("scg_snum", "=", self.snum),
                                     ("scg_subs", "=", self.subs),
                                     ("scg_scod", "<", 900000),
                                     ("scg_ocod", "<", 900000),
                                     ("(", "scg_sfor", "=", 0, "and",
                                      "scg_sagt", "=", 0, ")")],
                              limit=1)
        if chk[0] and (self.clup == "N" or self.ctyp == "P" or \
                            (self.clup == "Y" and self.rnum > 1)):
            # All results for section not yet entered
            if self.doimport:
                showError(self.opts["mf"].body, "Missing Results",
                    "Some Results are Missing, Please Check Import "\
                    "File and Retry")
                self.opts["mf"].dbm.rollbackDbase()
                self.ierr = True
                return
            ok = askQuestion(self.opts["mf"].body, "Missing Results",
                "Some Result are Missing. Do You want to Exit and Lose "\
                "the Results for this Section?")
            if ok == "no":
                self.df.focusField(self.df.frt, self.df.pag, self.df.col)
                return
            self.opts["mf"].dbm.rollbackDbase()
        else:
            chk = self.doUpdateTables()
            if not self.doimport:
                if chk == "continue":
                    self.df.focusField(self.df.frt, self.df.pag, self.df.col)
                    return
                if chk == "abort":
                    self.opts["mf"].dbm.rollbackDbase()
                else:
                    self.opts["mf"].dbm.commitDbase()
        if not self.doimport:
            self.df.clearFrame("T", 1)
            self.df.clearFrame("C", 1)
            if self.ctyp == "P":
                self.df.focusField("T", 0, 4)
            else:
                self.df.focusField("T", 1, 1)

    def doUpdateTables(self):
        nrnd = self.rnum + 1
        if self.fmat == "K" and self.clup == "Y" and self.ctyp == "M":
            # Closed up draw (1st and maybe 2nd Round)
            skps = self.sql.getRec("scpgme",
                                   where=[("scg_cono", "=",
                                           self.opts["conum"]),
                                          ("scg_ccod", "=", self.ccod),
                                          ("scg_ctyp", "=", self.ctyp),
                                          ("scg_snum", "=", self.snum),
                                          ("scg_subs", "=", self.subs),
                                          ("scg_rnum", "=", self.rnum)])
            byes = []
            nums = {}
            for skp in skps:
                scod = skp[self.sql.scpgme_col.index("scg_scod")]
                ocod = skp[self.sql.scpgme_col.index("scg_ocod")]
                if not ocod:
                    byes.append(scod)
                nums[scod] = skp
            for skp in byes:
                if self.opts["test"]:
                    ok = "B"
                else:
                    ok = askChoice(self.opts["mf"].body, "Capture Error",
                        "The Results for Skip %s - %s is Missing. Did he/she "\
                        "Withdraw or have a Bye?" % (skp, self.getName(skp)),
                        butt=(("No", "N"), ("Withdraw", "W"), ("Bye", "B"),
                        ("Abort", "A")), default="Bye")
                if ok == "N":
                    return "continue"
                if ok == "A":
                    return "abort"
                if ok == "W":
                    self.sql.delRec("scpgme",
                                    where=[("scg_cono", "=",
                                            self.opts["conum"]),
                                           ("scg_ccod", "=", self.ccod),
                                           ("scg_scod", "=", skp)])
                    byes.remove(skp)
                    del nums[skp]
                    continue
            for scod in nums:
                rec = nums[scod]
                scod = rec[self.sql.scpgme_col.index("scg_scod")]
                ocod = rec[self.sql.scpgme_col.index("scg_ocod")]
                sfor = rec[self.sql.scpgme_col.index("scg_sfor")]
                sagt = rec[self.sql.scpgme_col.index("scg_sagt")]
                where = [("scg_cono", "=", self.opts["conum"]),
                         ("scg_ccod", "=", self.ccod),
                         ("scg_ctyp", "=", self.ctyp),
                         ("scg_snum", "=", self.snum),
                         ("scg_subs", "=", self.subs), ("scg_rnum", "=", nrnd),
                         ("scg_scod", "=", scod)]
                if scod in byes:
                    self.byenum += 1
                    # Create bye
                    self.sql.updRec("scpgme",
                                    cols=["scg_ocod"],
                                    data=[self.byenum],
                                    where=where)
                if nrnd < self.lrnd:
                    # Create next round record
                    rec[self.sql.scpgme_col.index("scg_rnum")] = nrnd
                    rec[self.sql.scpgme_col.index("scg_ocod")] = 0
                    rec[self.sql.scpgme_col.index("scg_sfor")] = 0
                    rec[self.sql.scpgme_col.index("scg_sagt")] = 0
                    rec[self.sql.scpgme_col.index("scg_seed")] = 0
                    rec[self.sql.scpgme_col.index("scg_pair")] = 0
                    if scod not in byes and sfor < sagt and ocod:
                        scod = ocod
                        rec[self.sql.scpgme_col.index("scg_scod")] = scod
                    chk = self.sql.getRec("scpgme", where=where, limit=1)
                    if not chk:
                        self.sql.insRec("scpgme", data=rec)
                    else:
                        self.sql.updRec("scpgme", data=rec, where=where)
                else:
                    # Update playoff records
                    cod = self.snum + 700000
                    if sfor > sagt:
                        win = scod
                    else:
                        win = ocod
                    whr = where[:6]
                    whr[2] = ("scg_ctyp", "=", "P")
                    whr[3] = ("scg_snum", "=", 1)
                    whr[5] = ("scg_rnum", "=", 1)
                    whr.append(("scg_scod", "=", cod))
                    self.sql.updRec("scpgme",
                                    cols=["scg_scod"],
                                    data=[win],
                                    where=whr)
                    whr[6] = ("scg_ocod", "=", cod)
                    self.sql.updRec("scpgme",
                                    cols=["scg_ocod"],
                                    data=[win],
                                    where=whr)
        if (self.fmat == "K" and self.clup == "N") or self.ctyp == "P":
            recs = self.sql.getRec("scpgme",
                                   where=[("scg_cono", "=",
                                           self.opts["conum"]),
                                          ("scg_ccod", "=", self.ccod),
                                          ("scg_ctyp", "=", self.ctyp),
                                          ("scg_snum", "=", self.snum),
                                          ("scg_rnum", "=", self.rnum)],
                                   order="scg_group, scg_pair")
            group = 0
            for num in range(0, len(recs), 2):
                one = recs[num]
                snum = one[self.sql.scpgme_col.index("scg_snum")]
                subs = one[self.sql.scpgme_col.index("scg_subs")]
                if group != one[self.sql.scpgme_col.index("scg_group")]:
                    group = one[self.sql.scpgme_col.index("scg_group")]
                    pair = 1
                else:
                    pair += 1
                cod1 = one[self.sql.scpgme_col.index("scg_scod")]
                opp1 = one[self.sql.scpgme_col.index("scg_ocod")]
                for1 = one[self.sql.scpgme_col.index("scg_sfor")]
                agt1 = one[self.sql.scpgme_col.index("scg_sagt")]
                if opp1 > 900000 or for1 > agt1:
                    win1 = cod1
                else:
                    win1 = opp1
                if len(recs[num:]) > 1:
                    two = recs[num + 1]
                    cod2 = two[self.sql.scpgme_col.index("scg_scod")]
                    opp2 = two[self.sql.scpgme_col.index("scg_ocod")]
                    for2 = two[self.sql.scpgme_col.index("scg_sfor")]
                    agt2 = two[self.sql.scpgme_col.index("scg_sagt")]
                    if opp2 > 900000 or for2 > agt2:
                        win2 = cod2
                    else:
                        win2 = opp2
                else:
                    win2 = 0
                # Create next round record
                sgc = self.sql.scpgme_col
                whr = [("scg_cono", "=", one[sgc.index("scg_cono")]),
                       ("scg_ccod", "=", one[sgc.index("scg_ccod")]),
                       ("scg_ctyp", "=", one[sgc.index("scg_ctyp")]),
                       ("scg_snum", "=", one[sgc.index("scg_snum")]),
                       ("scg_subs", "=", one[sgc.index("scg_subs")]),
                       ("scg_rnum", "=", nrnd),
                       ("scg_ktyp", "=", one[sgc.index("scg_ktyp")]),
                       ("scg_scod", "=", win1)]
                one[sgc.index("scg_rnum")] = nrnd
                one[sgc.index("scg_scod")] = win1
                one[sgc.index("scg_ocod")] = win2
                one[sgc.index("scg_sfor")] = 0
                one[sgc.index("scg_sagt")] = 0
                one[sgc.index("scg_pnts")] = 0
                one[sgc.index("scg_pair")] = pair
                if not self.sql.getRec("scpgme", where=whr, limit=1):
                    self.sql.insRec("scpgme", data=one)
                else:
                    self.sql.updRec("scpgme",
                                    cols=["scg_ocod", "scg_pair"],
                                    data=[win2, pair],
                                    where=whr)
                if self.rnum == self.lrnd and \
                        self.ctyp == "M" and self.nsec > 2:
                    # Create playoff records with winners codes
                    if not self.oldwin:
                        if subs == "B":
                            key = snum + 800000
                        else:
                            key = snum + 700000
                    else:
                        key = self.oldwin[snum]
                    self.sql.updRec("scpgme",
                                    cols=["scg_scod"],
                                    data=[win1],
                                    where=[("scg_cono", "=",
                                            self.opts["conum"]),
                                           ("scg_ccod", "=", self.ccod),
                                           ("scg_ctyp", "=", "P"),
                                           ("scg_rnum", "=", 1),
                                           ("scg_scod", "=", key)])
                    self.sql.updRec("scpgme",
                                    cols=["scg_ocod"],
                                    data=[win1],
                                    where=[("scg_cono", "=",
                                            self.opts["conum"]),
                                           ("scg_ccod", "=", self.ccod),
                                           ("scg_ctyp", "=", "P"),
                                           ("scg_rnum", "=", 1),
                                           ("scg_ocod", "=", key)])
        elif self.squa == "S" and self.rnum == self.lrnd:
            # Update playoff records with winners codes
            if self.ssub == "Y":
                lsub = "B"
            else:
                lsub = ""
            whr = [("scg_cono", "=", self.opts["conum"]),
                   ("scg_ccod", "=", self.ccod), ("scg_ctyp", "=", self.ctyp),
                   ("scg_snum", "=", self.snum), ("scg_subs", "=", self.subs)]
            if self.fmat == "K":
                col = ["scg_scod", "scg_ocod", "scg_sfor", "scg_sagt"]
                whr.append(("scg_rnum", "=", self.lrnd))
                rec = self.sql.getRec("scpgme", cols=col, where=whr, limit=1)
                if rec[2] > rec[3]:
                    win = rec[0]
                else:
                    win = rec[1]
            else:
                self.doGetNewWin(sect=self.snum, sub=self.subs)
                win = self.newwin[self.snum]
            if not self.oldwin:
                if self.subs == "B":
                    key = self.snum + 800000
                else:
                    key = self.snum + 700000
            else:
                key = self.oldwin[self.snum]
            self.sql.updRec("scpgme",
                            cols=["scg_scod"],
                            data=[win],
                            where=[("scg_cono", "=", self.opts["conum"]),
                                   ("scg_ccod", "=", self.ccod),
                                   ("scg_ctyp", "=", "P"),
                                   ("scg_rnum", "=", 1),
                                   ("scg_scod", "=", key)])
            self.sql.updRec("scpgme",
                            cols=["scg_ocod"],
                            data=[win],
                            where=[("scg_cono", "=", self.opts["conum"]),
                                   ("scg_ccod", "=", self.ccod),
                                   ("scg_ctyp", "=", "P"),
                                   ("scg_rnum", "=", 1),
                                   ("scg_ocod", "=", key)])
            if self.snum == self.nsec and self.subs == lsub:
                self.sql.updRec("scpgme",
                                cols=["scg_ktyp"],
                                data=["M"],
                                where=[("scg_cono", "=", self.opts["conum"]),
                                       ("scg_ccod", "=", self.ccod),
                                       ("scg_ctyp", "=", "P")])
        # Check if all results for the round are captured
        chek = self.sql.getRec("scpgme",
                               cols=["count(*)"],
                               where=[("scg_cono", "=", self.opts["conum"]),
                                      ("scg_ccod", "=", self.ccod),
                                      ("scg_ctyp", "=", self.ctyp),
                                      ("scg_rnum", "=", self.rnum),
                                      ("scg_scod", "<", 900000),
                                      ("scg_ocod", "<", 900000),
                                      ("scg_sfor", "=", 0),
                                      ("scg_sagt", "=", 0)],
                               limit=1)
        if chek[0]:
            return
        if self.clup == "Y" and self.ctyp == "M" and nrnd == self.lrnd:
            state = 3
        elif self.rnum == self.lrnd:
            if self.ctyp == "M":
                state = 3
            else:
                state = 6
        elif self.ctyp == "M":
            state = 2
        else:
            state = 5
        self.sql.updRec("scpcmp",
                        cols=["scp_state"],
                        data=[state],
                        where=[("scp_cono", "=", self.opts["conum"]),
                               ("scp_ccod", "=", self.ccod)])

    def doGetOldWin(self):
        self.oldwin = {}
        if self.ctyp == "M" and self.rnum == self.lrnd:
            recs = self.sql.getRec("scpgme",
                                   cols=["scg_scod", "scg_ocod"],
                                   where=[("scg_cono", "=",
                                           self.opts["conum"]),
                                          ("scg_ccod", "=", self.ccod),
                                          ("scg_ctyp", "=", "P"),
                                          ("scg_snum", "=", 1)])
            for rec in recs:
                for cod in rec:
                    if cod < 900000:
                        sec = self.sql.getRec("scpgme",
                                              cols=["scg_snum"],
                                              where=[("scg_cono", "=",
                                                      self.opts["conum"]),
                                                     ("scg_ccod", "=",
                                                      self.ccod),
                                                     ("scg_ctyp", "=", "M"),
                                                     ("scg_scod", "=", cod)],
                                              limit=1)
                        if sec:
                            self.oldwin[sec[0]] = cod

    def doGetNewWin(self, sect=None, sub=""):
        # Get Leaders
        self.newwin = {}
        if sect is None:
            secs = []
            for x in range(self.nsec):
                secs.append(x + 1)
        else:
            secs = [sect]
        for sec in secs:
            col = [
                "scg_scod", "sum(scg_pnts) as a",
                "sum(scg_sfor - scg_sagt) as b",
                "round(sum(scg_sfor) / sum(scg_sagt), 2) as c"
            ]
            whr = [("scg_cono", "=", self.opts["conum"]),
                   ("scg_ccod", "=", self.ccod), ("scg_ctyp", "=", "M"),
                   ("scg_snum", "=", sec), ("scg_subs", "=", sub)]
            grp = "scg_scod"
            odr = "a desc, b desc, c desc"
            rec = self.sql.getRec("scpgme",
                                  cols=col,
                                  where=whr,
                                  group=grp,
                                  order=odr,
                                  limit=1)
            self.newwin[sec] = rec[0]
Пример #14
0
class ln2030(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.dataHeader()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "genmst", "gentrn", "lonctl", "lonmf1", "lonmf2", "lonrte",
            "lontrn"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.gc = GetCtl(self.opts["mf"])
        lonctl = self.gc.getCtl("lonctl", self.opts["conum"])
        if not lonctl:
            return
        self.glint = lonctl["cln_glint"]
        self.drate = lonctl["cln_drte"]
        self.crate = lonctl["cln_crte"]
        self.lastd = lonctl["cln_last"]
        if self.glint == "Y":
            ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            if self.gc.chkRec(self.opts["conum"], ctlctl, ["lon_ctl"]):
                return
            self.glctl = (ctlctl["lon_ctl"], ctlctl["int_rec"],
                          ctlctl["int_pay"])
        else:
            self.glctl = None
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def dataHeader(self):
        lm1 = {
            "stype":
            "R",
            "tables": ("lonmf1", ),
            "cols":
            (("lm1_acno", "", 0, "Acc-Num"), ("lm1_name", "", 0, "Name", "Y")),
            "where": [("lm1_cono", "=", self.opts["conum"])]
        }
        lm2 = {
            "stype":
            "R",
            "tables": ("lonmf2", ),
            "cols": (("lm2_loan", "", 0, "Ln"), ("lm2_desc", "", 0,
                                                 "Description", "Y")),
            "where": [("lm2_cono", "=", self.opts["conum"])],
            "whera": [("C", "lm2_acno", 0, 0)]
        }
        dte = {
            "stype":
            "R",
            "tables": ("lonrte", ),
            "cols":
            (("lrt_start", "", 0, "Start-Date"), ("lrt_drte", "", 0, "DRte-%"),
             ("lrt_crte", "", 0, "CRte-%")),
            "where": [("lrt_cono", "=", self.opts["conum"])],
            "whera": [("C", "lrt_acno", 0, 0), ("C", "lrt_loan", 2, 0)],
            "order":
            "lrt_start"
        }
        r1s = (("Yes", "Y"), ("No", "N"))
        fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "All Current Rates", "", "N",
                "N", self.doAll, None, None,
                None), (("T", 0, 1, 0), "ID1", 10, "Effective Date", "", "",
                        "N", self.doSdate, None, None, ("efld", )),
               (("T", 0, 2, 0), "IUD", 6.2, "Debit  Rate - Old", "",
                self.drate, "N", self.doDRte, None, None, None),
               (("T", 0, 2, 0), "IUD", 6.2, "New", "New Debit Rate", "", "N",
                self.doDRte, None, None,
                None), (("T", 0, 3, 0), "IUD", 6.2, "Credit Rate - Old", "",
                        self.crate, "N", self.doCRte, None, None, None),
               (("T", 0, 3, 0), "IUD", 6.2, "New", "New Credit Rate", "", "N",
                self.doCRte, None, None,
                None), (("C", 0, 0, 0), "IUA", 7, "Acc-Num", "Account Number",
                        "", "N", self.doAcc, lm1, None, None),
               (("C", 0, 0, 1), "ONA", 30,
                "Name"), (("C", 0, 0, 2), "IUI", 2, "Ln", "Loan Number", "",
                          "N", self.doLon, lm2, None, None),
               (("C", 0, 0, 3), "ONA", 30,
                "Description"), (("C", 0, 0, 4), "ID1", 10, "Date", "", "",
                                 "N", self.doSdate, dte, None, ("efld", )),
               (("C", 0, 0, 5), "IUD", 6.2, "DRte-%", "Debit Rate", "", "N",
                self.doDRte, None, None,
                None), (("C", 0, 0, 6), "IUD", 6.2, "CRte-%", "Credit Rate",
                        "", "N", self.doCRte, None, None, None))
        tnd = ((self.endPage, "y"), )
        txt = (self.exitPage, )
        cnd = ((self.endPage, "y"), )
        cxt = (self.exitPage, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt)

    def doAll(self, frt, pag, r, c, p, i, w):
        self.allrte = w
        if self.allrte == "N":
            return "nd"

    def doSdate(self, frt, pag, r, c, p, i, w):
        if w <= self.lastd:
            return "Invalid Date, Before Last Interest Raise Date"
        self.sdate = w
        self.curdt = int(w / 100)
        self.chgrte = False
        if self.allrte == "N":
            chk = self.sql.getRec("lonrte",
                                  where=[("lrt_cono", "=", self.opts["conum"]),
                                         ("lrt_acno", "=", self.acno),
                                         ("lrt_loan", "=", self.loan),
                                         ("lrt_start", "=", w)],
                                  limit=1)
            if chk:
                self.df.loadEntry(frt, pag, p + 1, data=chk[4])
                self.df.loadEntry(frt, pag, p + 2, data=chk[5])
                ok = askQuestion(self.opts["mf"].body,
                                 "Exists",
                                 """This Date "Already Exists.

Debit Rate: %s  Credit Rate: %s

Changing It Could Cause Problems.

Would You Like to Continue?""" % (chk[4], chk[5]),
                                 default="no")
                if ok == "no":
                    return "rf"
                self.chgrte = True

    def doDRte(self, frt, pag, r, c, p, i, w):
        if self.df.frt == "T" and p == 2:
            self.oldd = w
        else:
            self.newd = w

    def doCRte(self, frt, pag, r, c, p, i, w):
        if self.df.frt == "T" and p == 4:
            self.oldc = w
        else:
            self.newc = w

    def doAcc(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("lonmf1",
                              cols=["lm1_name"],
                              where=[("lm1_cono", "=", self.opts["conum"]),
                                     ("lm1_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Account Number"
        self.acno = w
        self.name = acc[0]
        self.df.loadEntry("C", pag, p + 1, data=self.name)

    def doLon(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("lonmf2",
                              where=[("lm2_cono", "=", self.opts["conum"]),
                                     ("lm2_acno", "=", self.acno),
                                     ("lm2_loan", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Loan Number"
        self.loan = w
        desc = acc[self.sql.lonmf2_col.index("lm2_desc")]
        self.start = acc[self.sql.lonmf2_col.index("lm2_start")]
        self.pmths = acc[self.sql.lonmf2_col.index("lm2_pmths")]
        if self.pmths:
            return "Fixed Loan, Rate Change Not Allowed"
        self.df.loadEntry("C", pag, p + 1, data=desc)

    def endPage(self):
        if self.df.frt == "T":
            if self.allrte == "N":
                self.df.focusField("C", 0, 1)
            else:
                self.updateTables()
                self.opts["mf"].dbm.commitDbase(True)
                self.exitPage()
        else:
            self.updateTables()
            self.df.advanceLine(0)

    def exitPage(self):
        if self.df.frt == "C":
            self.opts["mf"].dbm.commitDbase(True)
        self.df.closeProcess()
        self.opts["mf"].closeLoop()

    def updateTables(self):
        if self.allrte == "Y":
            if self.oldd == self.drate and self.oldc == self.crate:
                self.sql.updRec("lonctl",
                                cols=["cln_drte", "cln_crte"],
                                data=[self.newd, self.newc],
                                where=[("cln_cono", "=", self.opts["conum"])])
            whr = [("lm2_cono", "=", self.opts["conum"]),
                   ("lrt_cono=lm2_cono", ), ("lrt_acno=lm2_acno", ),
                   ("lrt_loan=lm2_loan", ), ("lrt_drte", "=", self.oldd),
                   ("lrt_crte", "=", self.oldc)]
            recs = self.sql.getRec(tables=["lonmf2", "lonrte"],
                                   cols=["lm2_acno", "lm2_loan", "lm2_pmths"],
                                   where=whr,
                                   group="lm2_acno, lm2_loan, lm2_pmths",
                                   order="lm2_acno")
        else:
            recs = [[self.acno, self.loan, 0]]
        for rec in recs:
            if rec[2]:
                # Fixed Period Loan, No Rate Changes Allowed
                continue
            # Loans Rate Record
            if self.chgrte:
                self.sql.updRec("lonrte",
                                cols=["lrt_drte", "lrt_crte"],
                                data=[self.newd, self.newc],
                                where=[("lrt_cono", "=", self.opts["conum"]),
                                       ("lrt_acno", "=", rec[0]),
                                       ("lrt_loan", "=", rec[1]),
                                       ("lrt_start", "=", self.sdate)])
            else:
                self.sql.insRec("lonrte",
                                data=[
                                    self.opts["conum"], rec[0], rec[1],
                                    self.sdate, self.newd, self.newc
                                ])
Пример #15
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()
Пример #16
0
class glc210(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", "genmst", "genint"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        chk = self.sql.getRec("ctlmst", cols=["count(*)"], limit=1)
        if chk[0] == 1:
            showInfo(self.opts["mf"].body, "Intercompany",
                "There is Only 1 Company Record")
            return
        return True

    def mainProcess(self):
        coy = {
            "stype": "R",
            "tables": ("ctlmst",),
            "cols": (
                ("ctm_cono", "", 0, "Coy-Num"),
                ("ctm_name", "", 0, "Name", "Y")),
            "where": [("ctm_cono", "!=", self.opts["conum"])]}
        gl1 = {
            "stype": "R",
            "tables": ("genmst",),
            "cols": (
                ("glm_acno", "", 0, "Acc-Num"),
                ("glm_desc", "", 0, "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]}
        gl2 = {
            "stype": "R",
            "tables": ("genmst",),
            "cols": (
                ("glm_acno", "", 0, "Acc-Num"),
                ("glm_desc", "", 0, "Description", "Y")),
            "whera": [["T", "glm_cono", 0, 0]]}
        data = self.sql.getRec(tables=["genint", "genmst"], cols=["cti_inco",
            "glm_desc"], where=[("cti_cono", "=", self.opts["conum"]),
            ("glm_cono=cti_cono",), ("glm_acno=cti_acno",)], order="cti_inco")
        self.gl3 = {
            "stype": "C",
            "titl": "Existing Companies",
            "head": ("Coy","Name"),
            "typs": (("UI", 3), ("NA", 30)),
            "data": data}
        fld = (
            (("T",0,0,0,14),"IUI",3,"Coy-Num","Company Number",
                "","Y",self.doCoyNum,coy,None,None),
            (("T",0,0,17),"ONA",30,""),
            (("T",0,1,0,10),"IUI",7,"Acc-Num-1","G/L Account Number",
                "","N",self.doAccNum1,gl1,self.doDelete,("notzero",),None,
                "The above company's account number in company %s." %
                self.opts["conum"]),
            (("T",0,1,17),"ONA",30,""),
            (("T",0,2,0,10),"IUI",7,"Acc-Num-2","G/L Account Number",
                "","N",self.doAccNum2,gl2,None,("notzero",),None,
                "Company %s's account number in the above company." %
                self.opts["conum"]),
            (("T",0,2,17),"ONA",30,""))
        but = (
            ("Show All",self.gl3,None,0,("T",0,1),("T",0,2)),
            ("Cancel",None,self.doCancel,0,("T",0,3),("T",0,1)),
            ("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 doCoyNum(self, frt, pag, r, c, p, i, w):
        if w == 0:
            return "Invalid Company Number"
        if w == self.opts["conum"]:
            return "Invalid Company, Same Company Not Allowed"
        self.cono2 = w
        acc = self.sql.getRec("ctlmst", cols=["ctm_name"],
            where=[("ctm_cono", "=", self.cono2)], limit=1)
        if not acc:
            return "Invalid Company Number"
        self.df.loadEntry(frt, pag, 1, data=acc[0])
        self.acc1 = self.sql.getRec("genint", where=[("cti_cono",
            "=", self.opts["conum"]), ("cti_inco", "=", self.cono2)], limit=1)
        if not self.acc1:
            self.new1 = "y"
        else:
            self.new1 = "n"
            self.acno1 = self.acc1[self.sql.genint_col.index("cti_acno")]
            desc = self.readAcno(self.opts["conum"], self.acno1)
            self.df.loadEntry(frt, pag, 2, data=self.acno1)
            self.df.loadEntry(frt, pag, 3, data=desc[0])
        self.acc2 = self.sql.getRec("genint", where=[("cti_cono",
            "=", self.cono2), ("cti_inco", "=", self.opts["conum"])], limit=1)
        if not self.acc2:
            self.new2 = "y"
        else:
            self.new2 = "n"
            self.acno2 = self.acc2[self.sql.genint_col.index("cti_acno")]
            desc = self.readAcno(self.cono2, self.acno2)
            self.df.loadEntry(frt, pag, 4, data=self.acno2)
            self.df.loadEntry(frt, pag, 5, data=desc[0])

    def doDelete(self):
        if self.new1 == "n":
            self.sql.delRec("genint", where=[("cti_cono", "=",
                self.opts["conum"]), ("cti_inco", "=", self.cono2)])
        if self.new2 == "n":
            self.sql.delRec("genint", where=[("cti_cono", "=", self.cono2),
                ("cti_inco", "=", self.opts["conum"])])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doAccNum1(self, frt, pag, r, c, p, i, w):
        desc = self.readAcno(self.opts["conum"], w)
        if not desc:
            return "Invalid Account Number"
        self.acno1 = w
        self.df.loadEntry(frt, pag, p+1, data=desc[0])

    def doAccNum2(self, frt, pag, r, c, p, i, w):
        desc = self.readAcno(self.cono2, w)
        if not desc:
            return "Invalid Account Number"
        self.acno2 = w
        self.df.loadEntry(frt, pag, p+1, data=desc[0])

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

    def doEnd(self):
        data1 = [self.opts["conum"], self.cono2, self.acno1]
        data2 = [self.cono2, self.opts["conum"], self.acno2]
        if self.new1 == "y":
            self.sql.insRec("genint", data=data1)
        elif data1 != self.acc1[:len(data1)]:
            col = self.sql.genint_col
            data1.append(self.acc1[col.index("cti_xflag")])
            self.sql.updRec("genint", data=data1, where=[("cti_cono", "=",
                self.opts["conum"]), ("cti_inco", "=", self.cono2)])
        if self.new2 == "y":
            self.sql.insRec("genint", data=data2)
        elif data2 != self.acc2[:len(data2)]:
            col = self.sql.genint_col
            data2.append(self.acc2[col.index("cti_xflag")])
            self.sql.updRec("genint", data=data2, where=[("cti_cono", "=",
                self.cono2), ("cti_inco", "=", self.opts["conum"])])
        self.opts["mf"].dbm.commitDbase()
        data = self.sql.getRec(tables=["genint", "genmst"], cols=["cti_cono",
            "glm_desc"], where=[("cti_cono", "=", self.opts["conum"]),
            ("glm_cono=cti_inco",)], order="cti_inco")
        self.gl3["data"] = data
        self.df.focusField("T", 0, 1)

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

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #17
0
class gl4010(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,
                       ["genmst", "genbal", "genbud", "gentrn"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        t = time.localtime()
        self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2])
        self.i_per = int(self.opts["period"][1][0] / 100)
        self.e_per = int(self.opts["period"][2][0] / 100)
        df = self.e_per - self.i_per - 87
        if df > 12:
            self.d_per = df - 12
            yr = int(self.i_per / 100)
            mt = int(self.i_per % 100)
            for _ in range(self.d_per):
                mt += 1
                if mt > 12:
                    mt -= 12
                    yr += 1
            self.s_per = (yr * 100) + mt
        else:
            self.d_per = 0
            self.s_per = self.i_per
        self.d_pyr = 0
        if self.opts["period"][0]:
            s, e, f = getPeriods(self.opts["mf"], self.opts["conum"],
                                 (self.opts["period"][0] - 1))
            if (s, e, f) == (None, None, None):
                return
            self.s_lyr = s.work
            self.i_pyr = int(s.work / 100)
            self.e_pyr = int(e.work / 100)
            df = self.e_pyr - self.i_pyr - 87
            if df > 12:
                self.d_pyr = df - 12
                yr = int(self.i_pyr / 100)
                mt = self.i_pyr % 100
                for _ in range(self.d_pyr):
                    mt += 1
                    if mt > 12:
                        mt -= 12
                        yr += 1
                self.s_pyr = (yr * 100) + mt
            else:
                self.s_pyr = self.i_pyr
        self.trnper = 0
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
                    "General Ledger Interrogation (%s)" %
                    self.__class__.__name__)
        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, 7), "IUI", 7, "Acc-Num", "Account Number", "",
                "N", self.doAccNum, glm, None, None), (("T", 0, 0, 0), "ONA",
                                                       30, "Description"),
               (("T", 0, 0, 0), "OUA", 1, "Type"), (("T", 0, 0, 0), "OUA", 1,
                                                    "Indicator"),
               (("C", 1, 0, 0), "OSD", 13.2, "Actual", "", "", "N", None, None,
                None, None, ("Months", 14)), (("C", 1, 0, 1), "OSD", 13.2,
                                              "Budget"),
               (("C", 1, 0, 2), "OSD", 13.2,
                "Variance"), (("C", 1, 0, 3), "OSD", 13.2, "Last-Year"),
               (("T", 2, 0, 0), "Id2", 7, "Period (YYYYMM)",
                "Financial Period (0=All)", self.trnper, "Y", self.doPeriod,
                None, None, None))
        tag = (("Balances", self.doBals, ("T", 0, 2), ("T", 0, 1)),
               ("Transactions", self.doTrans1, ("T", 0, 2), ("T", 0, 1)))
        but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)),
               ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)),
               ("Print", None, self.doPrint, 1, ("T", 0, 0),
                ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doTopEnd, "N"), None, (self.doTrans2, "N"))
        txt = (self.doExit, None, self.doExit)
        self.df = TartanDialog(self.opts["mf"],
                               title=self.tit,
                               tags=tag,
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        mon = self.s_per % 100
        yer = int(self.s_per / 100)
        for x in range(14):
            if x == 0:
                txt = "Opening Balance"
                self.df.colLabel[1][x].configure(text=txt)
            elif x == 13:
                txt = "Closing Balance"
                self.df.colLabel[1][x].configure(text=txt)
            else:
                nam = mthnam[mon][1]
                nam = nam + (" " * (11 - len(nam))) + str(yer)
                self.df.colLabel[1][x].configure(text=nam)
            if x not in (0, 13):
                mon = mon + 1
                if mon > 12:
                    mon = mon - 12
                    yer = yer + 1
        txt = "Closing Balance"
        self.df.colLabel[1][13].configure(text=txt)

    def doAccNum(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc", "glm_type", "glm_ind"],
                              where=[("glm_cono", "=", self.opts["conum"]),
                                     ("glm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Account"
        self.acno = w
        self.desc = acc[0]
        for x in range(1, self.df.topq[pag]):
            self.df.loadEntry(frt, pag, p + x, data=acc[x - 1])
        if self.opts["period"][0]:
            gp = self.sql.getRec("genbal",
                                 cols=["glo_cyr"],
                                 where=[("glo_cono", "=", self.opts["conum"]),
                                        ("glo_acno", "=", self.acno),
                                        ("glo_trdt", "=", self.s_lyr)])
        gc = self.sql.getRec("genbal",
                             cols=["glo_cyr"],
                             where=[("glo_cono", "=", self.opts["conum"]),
                                    ("glo_acno", "=", self.acno),
                                    ("glo_trdt", "=",
                                     self.opts["period"][1][0])])
        gt = self.sql.getRec("gentrn",
                             cols=["glt_type", "glt_curdt", "glt_tramt"],
                             where=[("glt_cono", "=", self.opts["conum"]),
                                    ("glt_acno", "=", self.acno),
                                    ("glt_curdt", "between", self.i_per,
                                     self.e_per)])
        gb = self.sql.getRec("genbud",
                             cols=["glb_curdt", "glb_tramt"],
                             where=[("glb_cono", "=", self.opts["conum"]),
                                    ("glb_acno", "=", self.acno),
                                    ("glb_curdt", "between", self.i_per,
                                     self.e_per)])
        if self.opts["period"][0]:
            gl = self.sql.getRec("gentrn",
                                 cols=["glt_curdt", "glt_tramt"],
                                 where=[("glt_cono", "=", self.opts["conum"]),
                                        ("glt_acno", "=", self.acno),
                                        ("glt_curdt", "between", self.i_pyr,
                                         self.e_pyr)])
        act = [0] * 14
        bud = [0] * 14
        lyr = [0] * 14
        adc = []
        adl = []
        if self.d_per:
            # Current period more than 12 months
            sy = sy = int(self.i_per / 100)
            sm = self.i_per % 100
            for _ in range(self.d_per):
                adc.append(sm)
                sm += 1
                if sm > 12:
                    sy += 1
                    sm = 1
        elif self.d_pyr:
            # Previous period more than 12 months
            sy = sy = int(self.i_pyr / 100)
            sm = self.i_pyr % 100
            for _ in range(self.d_pyr):
                adl.append(sm)
                sm += 1
                if sm > 12:
                    sy += 1
                    sm = 1
        if gc:
            self.obal = gc[0][0]
            act[0] = float(ASD(act[0]) + ASD(self.obal))
            act[13] = float(ASD(act[13]) + ASD(self.obal))
            if self.opts["period"][0] and gp:
                lyr[0] = float(ASD(lyr[0]) + ASD(float(gp[0][0])))
                lyr[13] = float(ASD(lyr[13]) + ASD(float(gp[0][0])))
        else:
            self.obal = 0
        yre = self.e_per % 100
        if gt:
            for x, t in enumerate(gt):
                cyr = int(t[1] / 100)
                mon = t[1] % 100
                if adc and cyr == sy and mon in adc:
                    col = 1
                else:
                    col = mon - yre
                    if col <= 0:
                        col = col + 12
                act[col] = float(ASD(act[col]) + ASD(float(t[2])))
                act[13] = float(ASD(act[13]) + ASD(float(t[2])))
        if gb:
            for x, t in enumerate(gb):
                mon = int(str(t[0])[4:6])
                col = mon - yre
                if col <= 0:
                    col = col + 12
                bud[col] = float(ASD(bud[col]) + ASD(float(t[1])))
                bud[13] = float(ASD(bud[13]) + ASD(float(t[1])))
        if self.opts["period"][0] and gl:
            for x, t in enumerate(gl):
                cyr = int(t[0] / 100)
                mon = t[0] % 100
                if adl and cyr == sy and mon in adl:
                    col = 1
                else:
                    col = mon - yre
                    if col <= 0:
                        col = col + 12
                lyr[col] = float(ASD(lyr[col]) + ASD(float(t[1])))
                lyr[13] = float(ASD(lyr[13]) + ASD(float(t[1])))
        p = 0
        for x in range(14):
            i = 0
            self.df.loadEntry("C", 1, p, data=act[x])
            p = p + 1
            i = i + 1
            self.df.loadEntry("C", 1, p, data=bud[x])
            p = p + 1
            i = i + 1
            data = float(ASD(bud[x]) - ASD(act[x]))
            self.df.loadEntry("C", 1, p, data=data)
            p = p + 1
            i = i + 1
            self.df.loadEntry("C", 1, p, data=lyr[x])
            p = p + 1
        self.df.last[0] = [0, 0]
        self.opts["mf"].updateStatus("")

    def doBals(self):
        self.opts["mf"].updateStatus("")

    def doTrans1(self):
        self.df.focusField("T", 2, 1)

    def doTrans2(self):
        tit = "Transactions for Account: %s - %s" % (self.acno, self.desc)
        gtt = ["gentrn"]
        gtc = (("glt_trdt", "", 0,
                "   Date"), ("glt_refno", "", 0, "Reference",
                             "Y"), ("glt_type", ("XX", gltrtp), 3, "Typ"),
               ("glt_batch", "", 0, "Batch"), ("glt_tramt", "", 0,
                                               "       Debit"),
               ("glt_tramt", "", 0, "      Credit"), ("balance", "SD", 13.2,
                                                      "     Balance"),
               ("glt_desc", "", 0, "Remarks"), ("glt_seq", "", 0, "Sequence"))
        mthno, acctot = self.getObal()
        if mthno.work == 0:
            d = self.opts["period"][1][0]
        else:
            d = (self.trnper * 100) + 1
        if acctot:
            if acctot < 0:
                dr = 0
                cr = acctot
            else:
                dr = acctot
                cr = 0
            data = [[d, "B/Fwd", 4, "", dr, cr, acctot, "Opening Balance", 0]]
        else:
            data = []
        trn = self.getTrans()
        if trn:
            col = self.sql.gentrn_col
            for rec in trn:
                acctot = float(ASD(acctot) + ASD(rec[col.index("glt_tramt")]))
                if rec[col.index("glt_tramt")] < 0:
                    dr = 0
                    cr = rec[col.index("glt_tramt")]
                else:
                    dr = rec[col.index("glt_tramt")]
                    cr = 0
                data.append([
                    rec[col.index("glt_trdt")], rec[col.index("glt_refno")],
                    rec[col.index("glt_type")], rec[col.index("glt_batch")],
                    dr, cr, acctot, rec[col.index("glt_desc")],
                    rec[col.index("glt_seq")]
                ])
        state = self.df.disableButtonsTags()
        while True:
            rec = SRec(self.opts["mf"],
                       screen=self.df.nb.Page2,
                       title=tit,
                       tables=gtt,
                       cols=gtc,
                       where=data,
                       wtype="D",
                       sort=False)
            # Display all transaction details
            if rec.selection:
                self.df.setWidget(self.df.mstFrame, state="hide")
                whr = [("glt_seq", "=", rec.selection[8])]
                TabPrt(self.opts["mf"], tabs="gentrn", where=whr, pdia=False)
                self.df.setWidget(self.df.mstFrame, state="show")
            else:
                break
        self.df.enableButtonsTags(state=state)
        self.doTrans1()

    def doNotes(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"],
                    self.opts["capnm"], "GEN", self.acno)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

    def doTopEnd(self):
        self.df.last[0] = [0, 0]
        self.df.setWidget(self.df.topEntry[0][0], state="disabled")

    def doClear(self):
        self.df.selPage("Balances")
        self.df.focusField("T", 0, 1)

    def doPrint(self):
        self.df.setWidget(self.df.mstFrame, state="hide")
        tit = ("Printer/Email Selection", )
        r1s = (("Info", "I"), ("Trans", "T"))
        fld = ((("T", 0, 1, 0), ("IRB", r1s), 0, "Selection", "", "I", "N",
                self.doPrtSel, None, None, None),
               (("T", 0, 2,
                 0), "Id2", 7, "Period (YYYYMM)", "Financial Period (0=All)",
                self.trnper, "Y", self.doPeriod, None, None, None))
        self.pr = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=fld,
                               tend=((self.doPrtEnd, "y"), ),
                               txit=(self.doPrtExit, ),
                               view=("Y", "V"),
                               mail=("Y", "N"))
        self.pr.mstFrame.wait_window()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField("T", 2, 1)

    def doPrtSel(self, frt, pag, r, c, p, i, w):
        self.sel = w
        for x in (2, 3):
            if bool(self.sel == "I"):
                self.pr.setWidget(self.pr.topEntry[0][2][x][0], state="hide")
            else:
                self.pr.setWidget(self.pr.topEntry[0][2][x][0], state="show")
        if self.sel == "I":
            return "sk1"

    def doPrtEnd(self):
        self.pr.closeProcess()
        self.head = "%03u %-99s" % (self.opts["conum"], self.opts["conam"])
        self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head)
        self.pgnum = 0
        self.pglin = 999
        self.num = self.df.t_disp[0][0][0]
        self.dsc = self.df.t_disp[0][0][1]
        atype = self.df.t_disp[0][0][2]
        ind = self.df.t_disp[0][0][3]
        if self.pr.t_work[0][0][0] == "I":
            self.pageHeading()
            self.fpdf.drawText("%-8s %-12s %-6s %-35s %-6s %-7s %-11s %s" % \
                ("Acc No:", self.num, "Desc:", self.dsc, "Type:", atype,
                "Indicator:", ind))
            self.fpdf.drawText()
            self.fpdf.drawText("%-21s %-20s %-18s %-19s %-18s" % \
                ("", "Actual", "Budget", "Variance", "Last Year"))
            self.fpdf.drawText()
            m = self.s_per % 100
            for x in range(14):
                if x == 0:
                    mon = "Opening"
                elif x == 13:
                    mon = "Closing"
                else:
                    mon = mthnam[m][1]
                    m = m + 1
                    if m > 12:
                        m = m - 12
                act = self.df.c_disp[1][x][0]
                bud = self.df.c_disp[1][x][1]
                var = self.df.c_disp[1][x][2]
                lyr = self.df.c_disp[1][x][3]
                self.fpdf.drawText("%-15s %-20s %-20s %-20s %-20s" %
                                   (mon, act, bud, var, lyr))
                if x in (0, 12):
                    self.fpdf.drawText()
            pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"],
                                self.__class__.__name__,
                                self.opts["conum"],
                                ext="pdf")
            self.fpdf.output(pdfnam, "F")
            doPrinter(mf=self.opts["mf"],
                      conum=self.opts["conum"],
                      pdfnam=pdfnam,
                      header=self.tit,
                      repprt=self.pr.repprt,
                      repeml=self.pr.repeml)
        else:
            trn = self.getTrans()
            if trn:
                heads = ["General Ledger Interrogation as at %s" % self.sysdtd]
                mthno, acctot = self.getObal()
                if mthno.work == 0:
                    x = "(For all months)"
                    d = self.opts["period"][1][0]
                else:
                    x = "(For month " + mthno.disp + ")"
                    d = (self.trnper * 100) + 1
                heads.append("Account %s %s %s" % (self.num, self.dsc, x))
                cols = [["glt_trdt", "D1", 10, "   Date"],
                        ["glt_refno", "Na", 9, "Reference"],
                        ["glt_type", "NA", 3, "Typ"],
                        ["glt_batch", "Na", 7, "BatchNo"],
                        ["debit", "SD", 13.2, "       Debit "],
                        ["credit", "SD", 13.2, "      Credit "],
                        ["balance", "SD", 13.2, "     Balance "],
                        ["glt_desc", "NA", 30, "Remarks"]]
                if acctot:
                    if acctot < 0:
                        dr = 0
                        cr = acctot
                    else:
                        dr = acctot
                        cr = 0
                    data = [(d, "B/Fwd", "", "", dr, cr, acctot,
                             "Opening Balance")]
                else:
                    data = []
                col = self.sql.gentrn_col
                for num, rec in enumerate(trn):
                    trdt = rec[col.index("glt_trdt")]
                    refno = rec[col.index("glt_refno")]
                    trtp = gltrtp[(rec[col.index("glt_type")]) - 1][0]
                    batch = rec[col.index("glt_batch")]
                    tramt = rec[col.index("glt_tramt")]
                    if tramt < 0:
                        debit = 0
                        credit = tramt
                    else:
                        debit = tramt
                        credit = 0
                    detail = rec[col.index("glt_desc")]
                    acctot = float(ASD(acctot) + ASD(tramt))
                    data.append((trdt, refno, trtp, batch, debit, credit,
                                 acctot, detail))
                RepPrt(self.opts["mf"],
                       name=self.__class__.__name__,
                       conum=self.opts["conum"],
                       conam=self.opts["conam"],
                       tables=data,
                       heads=heads,
                       cols=cols,
                       ttype="D",
                       repprt=self.pr.repprt,
                       repeml=self.pr.repeml)

    def doPrtExit(self):
        self.pr.closeProcess()

    def doPeriod(self, frt, pag, r, c, p, i, w):
        if w != 0 and (w < self.i_per or w > self.e_per):
            return "Invalid Period"
        self.trnper = w

    def pageHeading(self):
        self.fpdf.add_page()
        self.fpdf.setFont(style="B")
        self.pgnum += 1
        self.fpdf.drawText(self.head)
        self.fpdf.drawText()
        self.fpdf.drawText("%-34s %-10s %51s %5s" % \
            ("General Ledger Interrogation as at", self.sysdtd,
            "Page", self.pgnum))
        self.fpdf.underLine(txt=self.head)
        self.fpdf.setFont()
        self.pglin = 4

    def getObal(self):
        acbal = self.obal
        if self.trnper:
            o = self.sql.getRec("gentrn",
                                cols=["round(sum(glt_tramt), 2)"],
                                where=[("glt_cono", "=", self.opts["conum"]),
                                       ("glt_acno", "=", self.acno),
                                       ("glt_curdt", ">=", self.i_per),
                                       ("glt_curdt", "<", self.trnper)],
                                limit=1)
            if o[0]:
                acbal = float(ASD(acbal) + ASD(o[0]))
        mthno = CCD(self.trnper % 100, "UI", 2.0)
        return mthno, acbal

    def getTrans(self):
        odr = "glt_acno, glt_curdt, glt_trdt, glt_type, glt_refno, glt_batch"
        if not self.trnper:
            whr = [("glt_cono", "=", self.opts["conum"]),
                   ("glt_acno", "=", self.acno),
                   ("glt_curdt", "between", self.i_per, self.e_per)]
        else:
            whr = [("glt_cono", "=", self.opts["conum"]),
                   ("glt_acno", "=", self.acno),
                   ("glt_curdt", "=", self.trnper)]
        return self.sql.getRec("gentrn", where=whr, order=odr)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #18
0
class wg2030(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,
                       "wagmst",
                       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"),
             ("wgm_fname", "", 0, "Names"), ("wgm_start", "", 0, "Start-Date"),
             ("wgm_term", "", 0, "Term-Date")),
            "where": [("wgm_cono", "=", self.opts["conum"]),
                      ("wgm_term", "=", 0)]
        }
        fld = ((("T", 0, 0, 0), "I@wgm_empno", 7, "", "", "", "Y",
                self.doEmpNo, wgm, None, None),
               (("T", 0, 1, 0), "O@wgm_sname", 0, "", "", "", "N", None, None,
                None, None), (("T", 0, 2, 0), "O@wgm_fname", 0, "", "", "",
                              "N", None, None, None, None),
               (("T", 0, 3, 0), "ID1", 10, "Termination Date", "", "", "N",
                self.doTermDate, None, None, ("efld", )))
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"], eflds=fld, tend=tnd, txit=txt)

    def doEmpNo(self, frt, pag, r, c, p, i, w):
        self.emp = self.sql.getRec(
            "wagmst",
            cols=["wgm_sname", "wgm_fname", "wgm_start", "wgm_term"],
            where=[("wgm_cono", "=", self.opts["conum"]),
                   ("wgm_empno", "=", w)],
            limit=1)
        if not self.emp:
            return "Invalid Employee"
        if self.emp[3]:
            return "Employment Already Terminated"
        self.empno = w
        self.df.loadEntry(frt, pag, 1, data=self.emp[0])
        self.df.loadEntry(frt, pag, 2, data=self.emp[1])

    def doTermDate(self, frt, pag, r, c, p, i, w):
        if w <= self.emp[2]:
            return "Invalid Termination Date"
        self.term = w

    def doEnd(self):
        self.sql.updRec("wagmst",
                        cols=["wgm_term"],
                        data=[self.term],
                        where=[("wgm_cono", "=", self.opts["conum"]),
                               ("wgm_empno", "=", self.empno)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #19
0
class cr3080(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"])
        crsctl = gc.getCtl("crsctl", self.opts["conum"])
        if not crsctl:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlctl", "ctlmst", "crsctl", "crsmst", "crstrn", "crsage",
            "gentrn", "tplmst"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.glint = crsctl["ctc_glint"]
        self.bestac = crsctl["ctc_bestac"]
        self.besttp = crsctl["ctc_besttp"]
        self.bankac = crsctl["ctc_bankac"]
        self.tplnam = crsctl["ctc_tplnam"]
        self.fromad = crsctl["ctc_emadd"]
        if self.glint == "Y":
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            if gc.chkRec(self.opts["conum"], ctlctl, ["crs_ctl"]):
                return
            self.crsctl = ctlctl["crs_ctl"]
        acc = self.sql.getRec("crstrn",
                              cols=["max(crt_ref1)"],
                              where=[("crt_cono", "=", self.opts["conum"]),
                                     ("crt_type", "=", 5),
                                     ("crt_ref1", "like", "EFT______")],
                              limit=1)
        try:
            self.cats = int(acc[0][3:])
            self.refs = int(acc[0][3:]) + 1
        except:
            self.cats = 0
            self.refs = 1
        self.etotal = 0
        return True

    def mainProcess(self):
        tpm = {
            "stype":
            "R",
            "tables": ("tplmst", ),
            "cols": (("tpm_tname", "", 0, "Template"), ("tpm_title", "", 0,
                                                        "Title", "Y")),
            "where": [("tpm_type", "=", "R"), ("tpm_system", "=", "CRS")],
            "order":
            "tpm_tname"
        }
        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")]
        }
        r1s = (("Yes", "Y"), ("Range", "R"), ("Singles", "S"))
        r2s = (("Yes", "Y"), ("No", "N"))
        r3s = (("Number", "N"), ("Name", "M"), ("Postal Code", "P"))
        r4s = (("Monthly", "M"), ("Daily", "D"))
        fld = ((("T", 0, 0, 0), "INA", 20, "Template Name", "", self.tplnam,
                "Y", self.doTplNam, tpm, None, None),
               (("T", 0, 1, 0), ("IRB", r1s), 0, "Whole File", "", "S", "Y",
                self.doWhole, None, None, None), [["T", 0, 2, 0], "INA", 7,
                                                  "From Account", "", "", "Y",
                                                  self.doAcc, crm, None, None],
               [["T", 0, 3, 0], "INA", 7, "To   Account", "", "", "Y",
                self.doAcc, crm, None,
                None], (("T", 0, 4, 0), ("IRB", r3s), 0, "Sort Order", "", "N",
                        "Y", self.doSort, None, None, None),
               (("T", 0, 5, 0), ("IRB", r4s), 0, "Terms Base", "", "M", "Y",
                self.doFrequency, None, None,
                None), (("T", 0, 6, 0), ("IRB", r2s), 0, "Exceptions", "", "N",
                        "Y", self.doExcepts, None, None, None),
               (("T", 0, 7, 0), "ID1", 10, "Due Date", "", self.sysdtw, "Y",
                self.doDuedat, None, None, ("efld", )),
               (("T", 0, 8, 0), "ID1", 10, "Payment Date", "", self.sysdtw,
                "Y", self.doPaydat, None, None, ("efld", )))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               view=("N", "V"),
                               mail=("B", "Y"))

    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 Name"
        self.tname = w

    def doWhole(self, frt, pag, r, c, p, i, w):
        self.whole = w
        if self.whole in ("Y", "S"):
            self.sacc = ""
            self.eacc = ""
            self.df.loadEntry("T", 0, p + 1, data=self.sacc)
            self.df.loadEntry("T", 0, p + 2, data=self.eacc)
            return "sk2"

    def doAcc(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("crsmst",
                              cols=["crm_name", "crm_stat"],
                              where=[("crm_cono", "=", self.opts["conum"]),
                                     ("crm_acno", "=", w)],
                              limit=1)
        if not chk:
            return "Invalid Creditors Account"
        if not chk[1] == "X":
            return "Invalid Account, Redundant"
        if c == 3:
            self.sacc = w
        else:
            self.eacc = w

    def doSort(self, frt, pag, r, c, p, i, w):
        self.sort = w

    def doFrequency(self, frt, pag, r, c, p, i, w):
        self.freq = w

    def doExcepts(self, frt, pag, r, c, p, i, w):
        self.excepts = w

    def doDuedat(self, frt, pag, r, c, p, i, w):
        self.duedtw = w
        self.duedtd = self.df.t_disp[pag][0][p]

    def doPaydat(self, frt, pag, r, c, p, i, w):
        self.paydtw = w
        self.paydtd = self.df.t_disp[pag][0][p]
        self.curdt = int(self.paydtw / 100)
        self.batno = "E%s" % self.curdt

    def doEnd(self):
        self.df.closeProcess()
        if self.excepts == "Y":
            self.doExceptions()
        self.emadd = self.df.repeml[2]
        if self.bestac:
            self.export = open(
                os.path.join(
                    self.opts["mf"].rcdic["wrkdir"],
                    "best%03d_%s.txt" % (self.opts["conum"], self.paydtw)),
                "w")
            # Header for BEST
            self.export.write("%1s%4s%-40s%8s%1s%8s%-15s%1s%2s%1s%9s%2s%4s"\
                "\r\n" % ("*", self.bestac, self.opts["conam"], self.paydtw,
                "Y", "", "CREDITORS EFT", "+", self.besttp, 0, "", "01",
                "LIVE"))
        else:
            self.export = None
        if self.whole == "S":
            recs = getSingleRecords(self.opts["mf"],
                                    "crsmst", ("crm_acno", "crm_name"),
                                    where=[("crm_cono", "=",
                                            self.opts["conum"]),
                                           ("crm_termsb", "=", self.freq),
                                           ("crm_pyind", "<>", "N"),
                                           ("crm_stat", "<>", "X")])
        else:
            if not self.eacc:
                self.eacc = "zzzzzzz"
            whr = [("crm_cono", "=", self.opts["conum"]),
                   ("crm_acno", "between", self.sacc, self.eacc),
                   ("crm_termsb", "=", self.freq), ("crm_pyind", "<>", "N"),
                   ("crm_stat", "<>", "X")]
            if self.sort == "N":
                odr = "crm_acno"
            elif self.sort == "M":
                odr = "crm_name"
            else:
                odr = "crm_pcod"
            recs = self.sql.getRec("crsmst", where=whr, order=odr)
            if not recs:
                showError(self.opts["mf"].body, "Error",
                          "No Accounts Selected")
        if recs:
            self.form = DrawForm(self.opts["mf"].dbm,
                                 self.tname,
                                 wrkdir=self.opts["mf"].rcdic["wrkdir"])
            self.doLoadStatic()
            self.form.doNewDetail()
            p = ProgressBar(self.opts["mf"].body, mxs=len(recs), esc=True)
            for num, rec in enumerate(recs):
                p.displayProgress(num)
                if p.quit:
                    self.opts["mf"].dbm.rollbackDbase()
                    break
                self.doProcess(rec)
            p.closeProgress()
            if p.quit or not self.form.page:
                pass
            elif self.df.repeml[1] == "N" or self.emadd:
                self.df.repeml[2] = self.emadd
                self.doPrint()
            if self.bestac:
                # Trailer for BEST
                value = int(round((self.etotal * 100), 0))
                self.export.write("%1s%4s%1s%30s%013u%47s\r\n" % \
                    (2, self.bestac, "T", "", value, ""))
                self.export.close()
                if self.glint == "Y" and self.etotal:
                    # Create total transactions in GL
                    data = [
                        self.opts["conum"], self.crsctl, self.curdt,
                        self.paydtw, 2, self.refno, self.batno, self.etotal,
                        0.0,
                        "Payment EFT%06i to EFT%06i" % (self.refs, self.cats),
                        "", "", 0, self.opts["capnm"], self.sysdtw, 0
                    ]
                    self.sql.insRec("gentrn", data=data)
                    data[1] = self.bankac
                    data[7] = float(ASD(0) - ASD(self.etotal))
                    self.sql.insRec("gentrn", data=data)
                self.opts["mf"].dbm.commitDbase(
                    ask=True,
                    mess="""Would you like to commit all elecronic payments?

If you decide to do this, you must remember to upload the BEST file to the Bank otherwise you are NOT going to Reconcile!""",
                    default="no")
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    def doExceptions(self):
        crm = {
            "stype":
            "R",
            "tables": ("crsmst", ),
            "cols":
            (("crm_acno", "", 0, "Acc-Num"), ("crm_name", "", 0, "Name", "Y")),
            "where": [("crm_cono", "=", self.opts["conum"]),
                      ("crm_termsb", "=", self.freq), ("crm_stat", "<>", "X")]
        }
        crt = {
            "stype":
            "R",
            "tables": ("crstrn", ),
            "cols":
            (("crt_ref1", "", 0, "Reference", "Y"), ("crt_type",
                                                     ("XX", crtrtp), 3, "Typ"),
             ("crt_trdt", "", 0, "Date"), ("crt_tramt", "", 0, "    Amount"),
             ("paid", "SD", 13.2,
              "      Paid"), ("balance", "SD", 13.2,
                              "   Balance"), ("crt_paydt", "", 0, "Pay-Date"),
             ("crt_payind", "", 0, "I"), ("crt_payamt", "", 0, "  Pay-Amnt")),
            "wtype":
            "D",
            "where": [],
            "order":
            "crt_ref1"
        }
        types = []
        for x in range(1, len(crtrtp) + 1):
            types.append((x, crtrtp[x - 1][1]))
        typ = {
            "stype": "C",
            "titl": "Select the Required Type",
            "head": ("C", "Type"),
            "data": types
        }
        fld = ((("T", 0, 0,
                 0), "I@crm_acno", 0, "", "", "", "N", self.doExAcNo, crm,
                None, ("notblank", )), (("T", 0, 0, 0), "O@crm_name", 0, ""),
               (("C", 0, 0, 1), "I@crt_type", 0, "", "", "", "N",
                self.doExTrnTyp, typ, None, ("in", (1, 2, 3, 4, 5))),
               (("C", 0, 0, 0), "I@crt_ref1", 0, "", "", "", "N",
                self.doExTrnRef, crt, None, ("notblank", )),
               (("C", 0, 0, 2), "O@crt_trdt", 0, ""), (("C", 0, 0, 3), "OSD",
                                                       13.2, "Balance"),
               (("C", 0, 0, 4), "I@crt_payind", 0, "", "", "", "N",
                self.doExInd, None, None, ("in", ("Y", "N"))),
               (("C", 0, 0, 5), "I@crt_paydt", 0, "", "", "", "N",
                self.doExDte, None, None,
                ("efld", )), (("C", 0, 0, 6), "I@crt_payamt", 0, "", "", "",
                              "N", self.doExAmt, None, None, ("efld", )))
        tnd = ((self.doExEndTop, "n"), )
        txt = (self.doExExitTop, )
        cnd = ((self.doExEndCol, "y"), )
        cxt = (self.doExExitCol, )
        self.ex = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt)
        self.ex.mstFrame.wait_window()

    def doExAcNo(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec(
            "crsmst",
            cols=["crm_name", "crm_termsb", "crm_pyind", "crm_stat"],
            where=[("crm_cono", "=", self.opts["conum"]),
                   ("crm_acno", "=", w)],
            limit=1)
        if not acc:
            return "Invalid Account Number"
        if acc[1] != self.freq:
            return "Invalid Terms Base"
        if acc[2] == "N":
            return "Invalid Payment Indicator"
        if acc[3] == "X":
            return "Invalid Account, Redundant"
        self.exacc = w
        self.ex.loadEntry(frt, pag, p + 1, data=acc[0])

    def doExEndTop(self):
        self.ex.focusField("C", 0, 1)

    def doExExitTop(self):
        self.opts["mf"].dbm.commitDbase(
            ask=True, mess="Would you like to commit these exceptions?")
        self.ex.closeProcess()

    def doExTrnTyp(self, frt, pag, r, c, p, i, w):
        self.extyp = w
        data = []
        # Build the data for the F1 choice selection
        col, dat = getTrn(self.opts["mf"].dbm,
                          "crs",
                          whr=[("crt_cono", "=", self.opts["conum"]),
                               ("crt_acno", "=", self.exacc),
                               ("crt_type", "=", w)],
                          zer="N")
        if dat:
            cols = ("crt_ref1", "crt_type", "crt_trdt", "crt_tramt", "paid",
                    "balance", "crt_paydt", "crt_payind", "crt_payamt")
            for d in dat:
                rec = []
                for cc in cols:
                    rec.append(d[col.index(cc)])
                data.append(rec)
        self.ex.colf[0][1][8]["where"] = data

    def doExTrnRef(self, frt, pag, r, c, p, i, w):
        col = ["crt_trdt", "balance", "crt_payind", "crt_paydt", "crt_payamt"]
        whr = [("crt_cono", "=", self.opts["conum"]),
               ("crt_acno", "=", self.exacc), ("crt_type", "=", self.extyp),
               ("crt_ref1", "=", w)]
        c, d = getTrn(self.opts["mf"].dbm, "crs", whr=whr, lim=1)
        if not d:
            return "Invalid Transaction Number"
        if not d[0][c.index("balance")]:
            return "Transaction Has No Balance"
        self.exref = w
        self.exdte = d[0][c.index("crt_paydt")]
        self.examt = d[0][c.index("crt_payamt")]
        for pos, fld in enumerate(col):
            self.ex.loadEntry(frt, pag, p + 1 + pos, data=d[0][c.index(fld)])

    def doExInd(self, frt, pag, r, c, p, i, w):
        self.exind = w
        if self.exind == "N":
            return "nd"

    def doExDte(self, frt, pag, r, c, p, i, w):
        self.exdte = w

    def doExAmt(self, frt, pag, r, c, p, i, w):
        self.examt = w

    def doExEndCol(self):
        # Update Transaction"
        self.sql.updRec("crstrn",
                        cols=["crt_payind", "crt_paydt", "crt_payamt"],
                        data=[self.exind, self.exdte, self.examt],
                        where=[("crt_cono", "=", self.opts["conum"]),
                               ("crt_acno", "=", self.exacc),
                               ("crt_type", "=", self.extyp),
                               ("crt_ref1", "=", self.exref)])
        self.ex.advanceLine(0)

    def doExExitCol(self):
        self.ex.focusField("T", 0, 1)

    def doLoadStatic(self):
        cmc = self.sql.ctlmst_col
        ctm = self.sql.getRec("ctlmst",
                              where=[("ctm_cono", "=", self.opts["conum"])],
                              limit=1)
        for fld in cmc:
            dat = ctm[cmc.index(fld)]
            if fld in self.form.tptp:
                if fld == "ctm_logo":
                    self.form.letterhead(cmc, ctm, fld, dat)
                    continue
                self.form.tptp[fld][1] = dat
        if "letterhead" in self.form.tptp:
            self.form.letterhead(cmc, ctm, "letterhead", None)
        self.form.document_date(self.duedtd)

    def doProcess(self, crm):
        cmc = self.sql.crsmst_col
        tdc = self.form.sql.tpldet_col
        self.acno = crm[cmc.index("crm_acno")]
        eml = crm[cmc.index("crm_acc_email")]
        self.form.account_details("crm", cmc, crm, 1)
        for col in cmc:
            d = "%s_C00" % col
            if d in self.form.newdic:
                dat = crm[cmc.index(col)]
                self.form.newdic[d][tdc.index("tpd_text")] = dat
        jon = "cra_curdt <= %s" % self.curdt
        whr = [("crt_cono", "=", self.opts["conum"]),
               ("crt_acno", "=", self.acno), ("crt_payind", "=", "Y"),
               ("crt_paydt", "<=", self.duedtw)]
        ctc, crt = getTrn(self.opts["mf"].dbm,
                          "crs",
                          jon=jon,
                          whr=whr,
                          zer="N")
        if not crt:
            return
        bal = 0
        self.pay = 0
        for d in crt:
            if d[ctc.index("balance")] < 0:
                d[ctc.index("crt_payamt")] = d[ctc.index("balance")]
            bal = float(ASD(bal) + ASD(d[ctc.index("balance")]))
            self.pay = float(ASD(self.pay) + ASD(d[ctc.index("crt_payamt")]))
        if self.pay > bal:
            self.pay = bal
        if self.pay > 0:
            self.bname = crm[cmc.index("crm_bname")]
            self.bibt = crm[cmc.index("crm_bibt")]
            self.bacc = crm[cmc.index("crm_bacc")]
            if self.bname and self.bibt and self.bacc:
                self.ptype = "E"  # Electronic
                test = False
                while not test:
                    self.cats += 1
                    self.refno = "EFT%06i" % self.cats
                    # Check if Reference Number Already Exists
                    chk = self.sql.getRec("crstrn",
                                          where=[("crt_cono", "=",
                                                  self.opts["conum"]),
                                                 ("crt_acno", "=", self.acno),
                                                 ("crt_type", "=", 5),
                                                 ("crt_ref1", "=", self.refno)
                                                 ])
                    if not chk:
                        test = True
            else:
                self.ptype = "C"  # Cheque
            self.doBody(ctc, crt, tdc)
            self.doTotal(tdc)
            self.doTail(tdc)
            if self.df.repeml[1] == "Y" and not self.emadd:
                self.df.repeml[2] = eml
                self.doPrint()

    def doPrint(self):
        if self.df.repeml[1] == "Y" and not self.emadd:
            key = "%s_%s" % (self.opts["conum"], self.acno)
        else:
            key = "%s_all" % self.opts["conum"]
        pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"],
                            self.__class__.__name__,
                            key,
                            ext="pdf")
        self.form.output(pdfnam, "F")
        doPrinter(mf=self.opts["mf"],
                  conum=self.opts["conum"],
                  pdfnam=pdfnam,
                  header="%s Remittance Advice" % self.opts["conam"],
                  repprt=self.df.repprt,
                  fromad=self.fromad,
                  repeml=self.df.repeml)
        if self.df.repeml[1] == "Y":
            self.form = DrawForm(self.opts["mf"].dbm,
                                 self.tname,
                                 wrkdir=self.opts["mf"].rcdic["wrkdir"])
            self.doLoadStatic()
            self.form.doNewDetail()

    def doBody(self, ctc, crt, tdc):
        page = 0
        count = 0
        text = self.form.sql.tpldet_col.index("tpd_text")
        for trans in crt:
            trbal = trans[ctc.index("balance")]
            payamt = trans[ctc.index("crt_payamt")]
            if payamt > trbal:
                payamt = trbal
            trans[ctc.index("balance")] = payamt
            if not count:
                page += 1
                count = self.doHeader(page)
            if count == self.form.maxlines:
                page = self.doCfwd(page)
                count = self.doHeader(page)
            for cod in self.form.body:
                if cod == "type_code":
                    c = "crt_type"
                elif cod == "line_paid":
                    c = "paid"
                elif cod == "line_balance":
                    c = "balance"
                else:
                    c = cod
                d = "%s_C%02i" % (cod, count)
                if cod == "type_code":
                    ttyp = trans[ctc.index(c)]
                    self.form.newdic[d][text] = crtrtp[ttyp - 1][0]
                else:
                    self.form.newdic[d][text] = trans[ctc.index(c)]
                self.form.doDrawDetail(self.form.newdic[d])
            if self.ptype == "E" and self.bestac:
                trtp = trans[ctc.index("crt_type")]
                ref1 = trans[ctc.index("crt_ref1")]
                # Create Ageing Transaction
                self.sql.insRec("crsage",
                                data=[
                                    self.opts["conum"], self.acno, trtp, ref1,
                                    self.curdt, 5, self.refno, payamt, 0
                                ])
            count += 1
        for x in range(count, self.form.maxlines):
            for cod in self.form.body:
                d = "%s_C%02i" % (cod, x)
                self.form.newdic[d][tdc.index("tpd_text")] = "BLANK"
                self.form.doDrawDetail(self.form.newdic[d])

    def doHeader(self, page):
        tdc = self.form.sql.tpldet_col
        self.form.add_page()
        for key in self.form.newkey:
            nl = copyList(self.form.newdic[key])
            if nl[tdc.index("tpd_place")] != "A":
                continue
            if nl[tdc.index("tpd_detseq")] == "crm_acno_C00":
                nl[tdc.index("tpd_text")] = self.acno
            elif nl[tdc.index("tpd_detseq")] == "page_number_C00":
                nl[tdc.index("tpd_text")] = str(page)
            self.form.doDrawDetail(nl)
        return 0

    def doCfwd(self, page):
        if "carried_forward" in self.form.tptp:
            tdc = self.form.sql.tpldet_col
            line = copyList(self.form.cfwd)
            line[tdc.index("tpd_text")] = "Continued on Page %i" % (page + 1)
            self.form.doDrawDetail(line)
        return page + 1

    def doTotal(self, tdc):
        for c in self.form.total:
            t = "%s_T00" % c
            if c in self.form.newdic:
                self.form.doDrawDetail(self.form.newdic[c])
            elif t in self.form.newdic:
                self.form.doDrawDetail(self.form.newdic[t])
            d = "%s_C00" % c
            if d in self.form.newdic:
                line = self.form.newdic[d]
                if c == "total_payment":
                    line[tdc.index("tpd_text")] = self.pay
                self.form.doDrawDetail(line)
        if self.ptype == "E" and self.bestac:
            value = int(round((self.pay * 100), 0))
            self.export.write("%1s%4s%06u%-7s%019u%1s%1s%011u%-20s%10s"\
                "%-15s%1s\r\n" % (2, self.bestac, self.bibt, self.acno,
                int(self.bacc), "", "1", value, self.bname, "",
                self.opts["conam"][:15], ""))
            self.etotal = float(ASD(self.etotal) + ASD(self.pay))
            # Create Payment and Ageing Transaction
            p = float(ASD(0) - ASD(self.pay))
            self.sql.insRec("crstrn",
                            data=[
                                self.opts["conum"], self.acno, 5, self.refno,
                                self.batno, self.paydtw, "", p, 0.0, 0.0,
                                self.curdt, 0, "", 0.0, "Electronic Payment",
                                "", "", self.opts["capnm"], self.sysdtw, 0
                            ])
            self.sql.insRec("crsage",
                            data=[
                                self.opts["conum"], self.acno, 5, self.refno,
                                self.curdt, 5, self.refno, p, 0
                            ])

    def doTail(self, tdc):
        for c in self.form.tail:
            t = "%s_T00" % c
            if c in self.form.newdic:
                self.form.doDrawDetail(self.form.newdic[c])
            elif t in self.form.newdic:
                self.form.doDrawDetail(self.form.newdic[t])
            d = "%s_C00" % c
            if d in self.form.newdic:
                line = self.form.newdic[d]
                if c == "eft_message" and self.ptype == "E" and self.bestac:
                    line[tdc.index("tpd_text")] = "ELECTRONIC TRANSFER AT %s "\
                        "REFERENCE %s" % (self.paydtd, self.refno)
                self.form.doDrawDetail(line)

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

    def setVariables(self):
        # Check for Valid Posting Routine
        if self.opts["rtn"] != 5:
            mes = "Invalid Routine %s" % str(self.opts["rtn"])
            showError(self.opts["mf"].body, "Control Error", mes)
            return
        tabs = ["ctlvmf", "memmst", "memtrn"]
        self.gc = GetCtl(self.opts["mf"])
        memctl = self.gc.getCtl("memctl", self.opts["conum"])
        if not memctl:
            return
        self.glint = memctl["mcm_glint"]
        if self.glint == "Y":
            ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["mem_ctl", "vat_ctl", "dis_all"]
            if self.gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.memctl = ctlctl["mem_ctl"]
            self.dis_all = ctlctl["dis_all"]
            tabs.extend(["genmst", "gentrn"])
        # Setup SQL Object
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.bh = Batches(self.opts["mf"],
                          self.opts["conum"],
                          self.opts["conam"],
                          self.opts["period"],
                          "MEM",
                          self.opts["rtn"],
                          glint=self.glint)
        self.bh.doBatchHeader()
        if not self.bh.batno:
            return
        self.bh.batval = float(ASD(0) - ASD(self.bh.batval))
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        self.glt = 4
        self.agevar = tk.BooleanVar()
        self.agevar.set(False)
        return True

    def drawDialog(self):
        mlm = {
            "stype":
            "R",
            "tables": ("memmst", ),
            "cols":
            (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"),
             ("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",
            "sort":
            False
        }
        tag = (("Deposit", None, None, None, False), ("Allocation", None, None,
                                                      None, False))
        fld = ((("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno),
               (("T", 0, 0, 0), "OSD", 13.2, "Value"),
               (("C", 1, 0, 0), "INa", 9, "Reference", "Reference Number One",
                "i", "Y", self.doRefno, None, None, ("efld", )),
               (("C", 1, 0, 1), "ID1", 10, "Date", "Transaction Date", "r",
                "N", self.doTrnDat, None, None, ("efld", )),
               (("C", 1, 0, 2), "ISD", 13.2, "Amount", "Transaction Amount",
                "", "N", self.doTrnAmt, None, None, ("notzero", )),
               (("C", 1, 0, 3), "INA", 30, "Details", "Deposit Details", "",
                "N", self.doTrnDet, None, None,
                None), (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"),
               (("C", 2, 0, 0), "IUI", 6, "Mem-No", "Member Number", "r", "N",
                self.doMemAcc, mlm, None, ("notblank", )), (("C", 2, 0, 1),
                                                            "ONA", 30, "Name"),
               (("C", 2, 0, 2), "ISD", 13.2, "Receipt", "Receipt Amount", "",
                "N", self.doAllAmt, None, None, ("efld", )),
               (("C", 2, 0, 3), "ISD", 13.2, "Discount", "Discount Amount",
                "", "N", self.doDisAmt, None, None, ("efld", ), None,
                "Discount Amount to be Added to the Receipt Amount."),
               (("C", 2, 0, 4), "OSD", 13.2, "Total-Amount"))
        but = (
            ("Age _Normal",None,self.doAgeNormal,0,None,None,
                "Only Show Unallocated Transactions",1),
            ("Age _History",None,self.doAgeHistory,0,None,None,
                "Show All Transactions Including Already Allocated",1),
            ("Age _Automatic",None,self.doAgeAuto,0,None,None,
                "Automatically Allocate the Amount Starting With the "\
                "Oldest Unallocated One",1),
            ("Age _Current",None,self.doAgeCurrent,0,None,None,
                "Leave the Transaction Unallocated",1),
            ("Cancel",None,self.doCancel,0,("C",2,1),("C",1,1),"",1))
        txt = (None, None, None)
        cnd = [None, (self.endPage1, "y"), (self.endPage2, "y")]
        cxt = [None, self.exitPage1, self.exitPage2]
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tags=tag,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)
        self.df.focusField("C", 1, 1)

    def doRefno(self, frt, pag, r, c, p, i, w):
        if not w:
            trns = self.sql.getRec("memtrn",
                                   cols=["mlt_refno"],
                                   where=[("mlt_cono", "=",
                                           self.opts["conum"]),
                                          ("mlt_refno", "like", "R________")],
                                   order="mlt_refno desc")
            auto = False
            for trn in trns:
                try:
                    w = "R%08i" % (int(trn[0][1:]) + 1)
                    auto = True
                    break
                except:
                    pass
            if not auto:
                w = "R00000001"
            self.df.loadEntry(frt, pag, p, data=w)
        chk = self.sql.getRec("memtrn",
                              cols=["mlt_memno"],
                              where=[("mlt_cono", "=", self.opts["conum"]),
                                     ("mlt_type", "=", self.opts["rtn"]),
                                     ("mlt_refno", "=", w)])
        if chk:
            return "A Transaction with this Number Already Exists"
        self.refno = w

    def doTrnDat(self, frt, pag, r, c, p, i, w):
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"
        if self.bh.multi == "N" and int(w / 100) > self.bh.curdt:
            return "Invalid Date, After Batch Period"
        self.trndat = w

    def doTrnAmt(self, frt, pag, r, c, p, i, w):
        self.trnamt = w

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        self.trndet = w
        self.allocated = float(0.00)

    def endPage1(self):
        self.batupd = False
        self.updateTables1()
        self.updateBatch()
        self.agecan = False
        self.allocated = float(0.0)
        self.df.selPage("Allocation")
        self.df.loadEntry("T", 2, 0, data=self.trnamt)
        self.df.focusField("C", 2, 1)

    def updateTables1(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        if self.glint == "Y":
            # General Ledger Control Transaction (Bank)
            data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat,
                    self.glt, self.refno, self.bh.batno, self.trnamt, 0.00,
                    self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw,
                    0)
            self.sql.insRec("gentrn", data=data)

    def exitPage1(self):
        self.df.closeProcess()
        self.bh.doBatchTotal()
        self.opts["mf"].closeLoop()

    def doMemAcc(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("memmst",
                              cols=["mlm_title", "mlm_initial", "mlm_surname"],
                              where=[("mlm_cono", "=", self.opts["conum"]),
                                     ("mlm_memno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Member Number"
        self.memno = w
        self.name = "%s, %s %s" % (acc[2], acc[0], acc[1])
        self.df.loadEntry("C", pag, p + 1, data=self.name)
        self.allref = self.refno
        while self.sql.getRec("memtrn",
                              cols=["mlt_batch"],
                              where=[("mlt_cono", "=", self.opts["conum"]),
                                     ("mlt_memno", "=", self.memno),
                                     ("mlt_type", "=", self.opts["rtn"]),
                                     ("mlt_refno", "=", self.allref)]):
            self.doGetAnotherRef()

    def doGetAnotherRef(self):
        tit = ("Duplicate Reference Number", )
        fld = ((("T", 0, 0, 0), "ONa", 9, "Old Reference", "", self.allref,
                "N", None, None, None, None),
               (("T", 0, 1, 0), "INa", 9, "New Reference", "", "", "N",
                self.doRefNew, None, None, ("notblank", )))
        tnd = ((self.doRefEnd, "n"), )
        txt = (self.doRefExit, )
        state = self.df.disableButtonsTags()
        self.tf = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=tnd,
                               txit=txt)
        self.tf.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)

    def doRefExit(self):
        self.tf.focusField("T", 0, 2)

    def doRefNew(self, frt, pag, r, c, p, i, w):
        self.allref = w

    def doRefEnd(self):
        self.tf.closeProcess()

    def doAllAmt(self, frt, pag, r, c, p, i, w):
        if w == 0:
            self.allamt = float(ASD(self.trnamt) - ASD(self.allocated))
            self.df.loadEntry(frt, pag, p, data=self.allamt)
        else:
            self.allamt = w

    def doDisAmt(self, frt, pag, r, c, p, i, w):
        if self.allamt < 0 and w > 0:
            ok = self.checkSign()
        elif self.allamt > 0 and w < 0:
            ok = self.checkSign()
        else:
            ok = "yes"
        if ok != "yes":
            return "Invalid Discount Amount (Sign Error)"
        self.disamt = w
        totamt = float(ASD(self.allamt) + ASD(self.disamt))
        self.df.loadEntry(frt, pag, p + 1, data=totamt)

    def checkSign(self):
        return askQuestion(self.opts["mf"].body, "Check Sign",
            "The Sign of the Discount Amount is not the same as the Sign "\
            "of the Receipt Amount, Is This Correct?")

    def endPage2(self):
        self.amt = float(ASD(0) - ASD(self.allamt))
        self.dis = float(ASD(0) - ASD(self.disamt))
        state = self.df.disableButtonsTags()
        self.opts["mf"].updateStatus("Choose an Ageing Option")
        for x in range(0, 5):
            wid = getattr(self.df, "B%s" % x)
            self.df.setWidget(wid, "normal")
        self.df.setWidget(self.df.B0, "focus")
        self.agevar.set(True)
        self.df.mstFrame.wait_variable(self.agevar)
        self.df.enableButtonsTags(state=state)
        if self.agecan:
            self.doCancel()
            return
        # Members Ledger Transaction
        data = [
            self.opts["conum"], self.memno, self.opts["rtn"], self.allref,
            self.bh.batno, self.trndat, self.amt, 0.00, self.curdt, "", 0,
            self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("memtrn", data=data)
        if self.dis:
            data = [
                self.opts["conum"], self.memno, 6, self.allref, self.bh.batno,
                self.trndat, self.dis, 0.00, self.curdt, "", 0, self.trndet,
                "", "N", self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("memtrn", data=data, unique="mlt_refno")
        self.allocated = float(ASD(self.allocated) + ASD(self.allamt))
        if self.glint == "Y":
            # General Ledger Control Transaction (Members)
            amt = float(ASD(self.amt) + ASD(self.dis))
            data = (self.opts["conum"], self.memctl, self.curdt, self.trndat,
                    self.glt, self.allref, self.bh.batno, amt, 0.00,
                    self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw,
                    0)
            self.sql.insRec("gentrn", data=data)
            # General Ledger Control Transaction (Discount)
            if self.disamt:
                data = (self.opts["conum"], self.dis_all, self.curdt,
                        self.trndat, self.glt, self.allref, self.bh.batno,
                        self.disamt, 0.00, self.trndet, "N", "", 0,
                        self.opts["capnm"], self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)
        if self.allocated == self.trnamt:
            self.opts["mf"].dbm.commitDbase()
            self.df.clearFrame("C", 2)
            self.df.selPage("Deposit")
            self.df.advanceLine(1)
        else:
            bal = float(ASD(self.trnamt) - ASD(self.allocated))
            self.df.loadEntry("T", 2, 0, data=bal)
            self.df.advanceLine(2)

    def doAgeNormal(self):
        self.doAgeing("N")

    def doAgeHistory(self):
        self.doAgeing("H")

    def doAgeAuto(self):
        self.doAgeing("O")

    def doAgeCurrent(self):
        self.doAgeing("C")

    def doAgeing(self, atype):
        # Disable All Ageing Buttons
        for x in range(0, 4):
            wid = getattr(self.df, "B%s" % x)
            self.df.setWidget(wid, "disabled")
        self.opts["mf"].updateStatus("Select Transaction to Allocate Against")
        age = AgeAll(self.opts["mf"],
                     system="mem",
                     agetyp=atype,
                     agekey=[
                         self.opts["conum"], self.memno, self.opts["rtn"],
                         self.allref, self.curdt, self.amt, self.dis
                     ])
        self.agecan = age.cancel
        self.agevar.set(False)

    def doCancel(self):
        if self.agecan:
            ok = "yes"
        else:
            ok = askQuestion(
                self.opts["mf"].body,
                head="Cancel",
                mess="Are You Certain You Want to Cancel This Entry?")
        if ok == "yes":
            self.opts["mf"].dbm.rollbackDbase()
            if self.batupd:
                self.updateBatch(rev=True)
            self.df.clearFrame("C", 2)
            self.df.selPage("Deposit")
            row = int((self.df.last[1][1] - 1) / self.df.colq[1])
            col = (row * self.df.colq[1]) + 1
            self.df.focusField("C", 1, col)

    def updateBatch(self, rev=False):
        if rev:
            self.bh.batqty -= 1
            self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt))
        else:
            self.batupd = True
            self.bh.batqty += 1
            self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt))
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)

    def exitPage2(self):
        self.df.focusField("C", 2, self.df.col)
Пример #21
0
class bc2070(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, ["bwlcmp", "bwltab", "bwlent",
            "bwltyp", "bwlpts", "bwlgme"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        bcp = {
            "stype": "R",
            "tables": ("bwlcmp",),
            "cols": (
                ("bcm_code", "", 0, "Cod"),
                ("bcm_name", "", 0, "Name", "Y"),
                ("bcm_date", "", 0, "Date")),
            "where": [("bcm_cono", "=", self.opts["conum"])]}
        gme = {
            "stype": "R",
            "tables": ("bwlgme",),
            "cols": (
                ("bcg_game", "", 0, "GC"),
                ("bcg_type", "", 0, "T"),
                ("bcg_date", "", 0, "Date")),
            "where": [("bcg_cono", "=", self.opts["conum"])],
            "whera": [("T", "bcg_ccod", 0, 0)],
            "group": "bcg_game"}
        skp = {
            "stype": "R",
            "tables": ("bwlent", "bwltab", "bwlgme"),
            "cols": (
                ("btb_tab", "", 0, "Cod"),
                ("btb_surname", "", 0, "Surname", "Y"),
                ("btb_names", "", 0, "Names"),
                ("bcg_rink", "", 0, "RK")),
            "where": [
                ("bce_cono", "=", self.opts["conum"]),
                ("btb_cono=bce_cono",),
                ("btb_tab=bce_scod",),
                ("bcg_cono=bce_cono",),
                ("bcg_scod=bce_scod",),
                ("bcg_ocod<900000",),
                ("bcg_sfor=0 and bcg_sagt=0",)],
            "whera": [
                ("T", "bce_ccod", 0, 0),
                ("T", "bcg_ccod", 0, 0),
                ("T", "bcg_game", 2, 0)],
            "order": "bcg_rink"}
        fld = (
            (("T",0,0,0),"I@bcm_code",0,"","",
                "","Y",self.doCmpCod,bcp,None,("notzero",)),
            (("T",0,0,0),"ONA",30,""),
            (("T",0,0,0),"I@bcg_game",0,"Game Number","",
                "","N",self.doGamCod,gme,None,("efld",)),
            (("T",0,0,0),"IUI",2,"Ends Completed","",
                0,"N",self.doEndsFin,None,None,("efld",)),
            (("C",0,0,0),"I@bcg_scod",0,"","",
                "","N",self.doSkpCod,skp,None,("efld",)),
            (("C",0,0,0),"ONA",30,"Skp-Name"),
            (("C",0,0,0),"I@bcg_sfor",0,"","",
                "","N",self.doShots,None,None,("efld",)),
            (("C",0,0,0),"I@bcg_points",0,"","",
                "","N",self.doPoints,None,None,("efld",)),
            (("C",0,0,0),"O@bcg_ocod",0,""),
            (("C",0,0,0),"ONA",30,"Opp-Name"),
            (("C",0,0,0),"I@bcg_sagt",0,"","",
                "","N",self.doShots,None,None,("efld",)),
            (("C",0,0,0),"I@bcg_points",0,"","",
                "","N",self.doPoints,None,None,("efld",)))
        but = (("Quit",None,self.doQuit,1,None,None),)
        tnd = ((self.doEnd,"y"),)
        txt = (self.doExit,)
        cnd = ((self.doEnd,"y"),)
        cxt = (self.doExit,)
        self.df = TartanDialog(self.opts["mf"], tops=False,
            rows=(19,), eflds=fld, butt=but, tend=tnd, txit=txt,
            cend=cnd, cxit=cxt)

    def doCmpCod(self, frt, pag, r, c, p, i, w):
        com = self.sql.getRec("bwlcmp", cols=["bcm_name", "bcm_type"],
            where=[("bcm_cono", "=", self.opts["conum"]), ("bcm_code", "=",
            w)], limit=1)
        if not com:
            return "Invalid Competition Code"
        self.ccod = w
        self.code = com[1]
        self.df.loadEntry(frt, pag, p + 1, data=com[0])
        if not self.code:
            bwltyp = [self.opts["conum"], 0, "KO", "K", 1, 0, 21,
                "N", 0, "N", "", 0, 0, "N", "N", ""]
        else:
            bwltyp = self.sql.getRec("bwltyp", where=[("bct_cono", "=",
                self.opts["conum"]), ("bct_code", "=", com[1])], limit=1)
        self.cfmat = bwltyp[self.sql.bwltyp_col.index("bct_cfmat")]
        self.groups = bwltyp[self.sql.bwltyp_col.index("bct_groups")]
        self.grgame = bwltyp[self.sql.bwltyp_col.index("bct_grgame")]
        if self.cfmat == "R":
            games = self.sql.getRec("bwlgme", cols=["count(*)"],
                where=[("bcg_cono", "=", self.opts["conum"]),
                ("bcg_ccod", "=", self.ccod), ("bcg_game", "=", 1)],
                group="bcg_group")
            self.games = 0
            for gme in games:
                if gme[0] > self.games:
                    self.games = gme[0]
            self.games -= 1
        elif self.cfmat in ("D", "K"):
            totskp = self.sql.getRec("bwlent", cols=["count(*)"],
                where=[("bce_cono", "=", self.opts["conum"]),
                ("bce_ccod", "=", self.ccod)], limit=1)[0]
            pwrs = 2
            self.games = 1
            while pwrs < totskp:
                self.games += 1
                pwrs = pwrs * 2
        else:
            self.games = bwltyp[self.sql.bwltyp_col.index("bct_games")]
        self.ends = bwltyp[self.sql.bwltyp_col.index("bct_ends")]
        chk = self.sql.getRec("bwlgme", cols=["bcg_game",
            "sum(bcg_sfor)", "sum(bcg_sagt)", "sum(bcg_points)"],
            where=[("bcg_cono", "=", self.opts["conum"]), ("bcg_ccod", "=",
            self.ccod), ("bcg_aflag", "in", ("", "D"))],
            group="bcg_game", order="bcg_game")
        for game in chk:
            self.gcod = game[0]
            if not game[1] and not game[2] and not game[3]:
                self.df.loadEntry(frt, pag, p + 2, data=self.gcod)
                break
        self.df.loadEntry(frt, pag, p + 3, data=self.ends)

    def doGamCod(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("bwlgme", cols=["bcg_aflag",
            "sum(bcg_ocod)"], where=[("bcg_cono", "=", self.opts["conum"]),
            ("bcg_ccod", "=", self.ccod), ("bcg_game", "=", w)],
            group="bcg_aflag")
        if not chk:
            return "Invalid Game Number"
        for ck in chk:
            if not ck[0] and not ck[1]:
                return "Invalid Game Number, Not Yet Drawn"
        if w != self.games:
            col = [
                "bcg_game",
                "bcg_type",
                "sum(bcg_ocod)",
                "sum(bcg_sfor)",
                "sum(bcg_points)"]
            whr = [
                ("bcg_cono", "=", self.opts["conum"]),
                ("bcg_ccod", "=", self.ccod),
                ("bcg_game", ">", w)]
            drwn = self.sql.getRec("bwlgme", cols=col, where=whr,
                group="bcg_game, bcg_type", order="bcg_game")
            drawn = []
            for n, d in enumerate(drwn):
                if d[1] == "S" and d[2]:
                    if d[3] or d[4]:
                        drawn = "X"
                        break
                    drawn.append(d[0])
            if drawn == "X":
                showError(self.opts["mf"].body, "Error",
                    "Results Have Already Been Captured for Game %s" % d[0])
                return "Completed SvS Game %s" % d[0]
            elif drawn:
                if len(drawn) == 1:
                    text = "Game %s" % drawn[0]
                    plural = "Draw"
                    word = "Has"
                else:
                    text = "Games"
                    for d in drawn:
                        text += " %s" % d
                    plural = "Draws"
                    word = "Have"
                ok = askQuestion(self.opts["mf"].body, head="Draw Done",
                    mess="""Strength v Strength %s %s Been Drawn.

Do You Want to Delete the %s and Alter This Game's Results?

You Will Then Have to Re-Print Reports and Re-Draw %s.

If You Continue and Have Not Made a Backup You Will Not be Able to Restore.

Do You Still Want to Continue?""" % (text, word, plural, text), default="no")
                if ok == "no":
                    return "rf"
                col = ["bcg_date", "bcg_ocod", "bcg_rink"]
                dat = [0, 0, ""]
                if self.groups == "Y" and w == self.grgame:
                    col.append("bcg_group")
                    dat.append(0)
                col.extend(["bcg_sfor", "bcg_sagt", "bcg_points",
                    "bcg_a_sfor", "bcg_a_sagt", "bcg_a_points",
                    "bcg_aflag"])
                dat.extend([0, 0, 0, 0, 0, 0, ""])
                whr = [
                    ("bcg_cono", "=", self.opts["conum"]),
                    ("bcg_ccod", "=", self.ccod),
                    ("bcg_game", "in", tuple(drawn))]
                self.sql.updRec("bwlgme", cols=col, data=dat, where=whr)
                self.opts["mf"].dbm.commitDbase()
        elif chk[0] in ("A", "S"):
            return "Invalid Game Number, Abandoned or Skipped"
        self.gcod = w
        gtyp = self.sql.getRec("bwlgme", cols=["bcg_type"],
            where=[("bcg_cono", "=", self.opts["conum"]), ("bcg_ccod",
            "=", self.ccod), ("bcg_game", "=", w)], limit=1)[0]
        bwlpts = self.sql.getRec("bwlpts", where=[("bcp_cono",
            "=", self.opts["conum"]), ("bcp_code", "=", self.code),
            ("bcp_ptyp", "=", gtyp)], limit=1)
        if not bwlpts:
            bwlpts = [self.opts["conum"], 0, "D", "N", 0, "N",
                0, 0, 1, "N", 0, 0, ""]
        self.skins = bwlpts[self.sql.bwlpts_col.index("bcp_skins")]
        self.sends = bwlpts[self.sql.bwlpts_col.index("bcp_sends")]
        self.ponly = bwlpts[self.sql.bwlpts_col.index("bcp_p_only")]
        self.epts = bwlpts[self.sql.bwlpts_col.index("bcp_e_points")]
        self.spts = bwlpts[self.sql.bwlpts_col.index("bcp_s_points")]
        self.gpts = bwlpts[self.sql.bwlpts_col.index("bcp_g_points")]
        self.bpts = bwlpts[self.sql.bwlpts_col.index("bcp_bonus")]
        dif = bwlpts[self.sql.bwlpts_col.index("bcp_win_by")]
        self.win_by = [dif, dif * -1]
        dif = bwlpts[self.sql.bwlpts_col.index("bcp_lose_by")]
        self.lose_by = [dif, dif * -1]

    def doEndsFin(self, frt, pag, r, c, p, i, w):
        self.bonus = self.bpts
        if w != self.ends:
            if not w:
                but = (("Exit",1),("Skipped",2),("Abandoned",3))
                ok = askChoice(self.opts["mf"].body, head="Zero Ends",
                    mess="No Ends Completed, Choose Option", butt=but)
                if ok == 1:
                    return "rf"
                elif ok == 2:
                    self.sql.updRec("bwlgme", cols=["bcg_aflag"], data=["S"],
                        where=[("bcg_cono", "=", self.opts["conum"]),
                        ("bcg_ccod", "=", self.ccod), ("bcg_game", "=",
                        self.gcod)])
                elif ok == 3:
                    self.sql.updRec("bwlgme", cols=["bcg_ocod", "bcg_rink",
                        "bcg_sfor", "bcg_sagt", "bcg_points",
                        "bcg_a_sfor", "bcg_a_sagt", "bcg_a_points",
                        "bcg_aflag"], data=[0, "", 0, 0, 0, 0, 0, 0, "A"],
                        where=[("bcg_cono", "=", self.opts["conum"]),
                        ("bcg_ccod", "=", self.ccod), ("bcg_game", "=",
                        self.gcod)])
                self.opts["mf"].dbm.commitDbase()
                return "xt"
            ok = askQuestion(self.opts["mf"].body, head="Shortened",
                mess="Was This Game Shortened?", default="no")
            if ok == "no":
                return "rf"
            if self.bonus == "Y":
                ok = askQuestion(self.opts["mf"].body, head="Bonus Points",
                    mess="Must Bonus Points Still be Awarded?", default="no")
                if ok == "no":
                    self.bonus = "N"
        self.totpts = (w * self.epts) + self.gpts
        if self.skins == "Y":
            self.totpts = self.totpts + (int(w / self.sends) * self.spts)
        if self.bonus == "Y":
            self.maxpts = float(ASD(self.totpts) + ASD(1))
        else:
            self.maxpts = self.totpts

    def doSkpCod(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec(tables=["bwlgme", "bwltab"], cols=["btb_surname",
            "btb_names", "bcg_ocod", "bcg_sfor", "bcg_sagt",
            "bcg_points"], where=[("bcg_cono", "=", self.opts["conum"]),
            ("bcg_ccod", "=", self.ccod), ("bcg_scod", "=", w), ("bcg_game",
            "=", self.gcod), ("btb_tab=bcg_scod",)], limit=1)
        if not chk:
            return "Invalid Skip Code"
        if chk[3] or chk[4] or chk[5]:
            ok = askQuestion(self.opts["mf"].body, head="Already Entered",
                mess="""This Card Has Already Been Entered, Re-Enter?

            Shots For:        %s
            Shots Against:    %s
            Points:            %s""" % (chk[3], chk[4], chk[5]),
                default="no")
            if ok == "no":
                return "rf"
            self.reenter = True
        else:
            self.reenter = False
        self.skp = w
        self.opp = chk[2]
        if self.opp > 900000:
            return "This Skip Had a Bye"
        if chk[1]:
            name = "%s, %s" % tuple(chk[:2])
        else:
            name = chk[0]
        self.df.loadEntry(frt, pag, p + 1, data=name)
        if self.ponly == "N":
            self.df.loadEntry(frt, pag, p + 2, data=chk[3])
        self.df.loadEntry(frt, pag, p + 3, data=chk[5])
        self.df.loadEntry(frt, pag, p + 4, data=self.opp)
        if self.cfmat in ("D", "K"):
            opp = self.sql.getRec("bwltab", cols=["btb_surname",
                "btb_names"], where=[("btb_cono", "=", self.opts["conum"]),
                ("btb_tab", "=", self.opp)], limit=1)
            chk = opp + [chk[4], chk[3], 0]
        else:
            chk = self.sql.getRec(tables=["bwlgme", "bwltab"],
                cols=["btb_surname", "btb_names", "bcg_sfor",
                "bcg_sagt", "bcg_points"], where=[("bcg_cono",
                "=", self.opts["conum"]), ("bcg_ccod", "=", self.ccod),
                ("bcg_scod", "=", self.opp), ("bcg_game", "=", self.gcod),
                ("btb_tab=bcg_scod",)], limit=1)
        if chk[1]:
            name = "%s, %s" % tuple(chk[:2])
        else:
            name = chk[0]
        self.df.loadEntry(frt, pag, p + 5, data=name)
        if self.ponly == "N":
            self.df.loadEntry(frt, pag, p + 6, data=chk[2])
        self.df.loadEntry(frt, pag, p + 7, data=chk[4])
        if self.ponly == "Y":
            self.mpts = self.totpts
            return "sk2"

    def doShots(self, frt, pag, r, c, p, i, w):
        if i == 2:
            self.s_for = w
            if self.cfmat in ("D", "K", "R"):
                self.p_for = 0
                self.df.loadEntry(frt, pag, p + 1, data=0)
                return "sk1"
            if not self.s_for or (not self.totpts and self.bonus != "Y"):
                self.p_for = w
                self.df.loadEntry(frt, pag, p + 1, data=0)
                return "sk1"
        else:
            self.s_agt = w
            if self.cfmat in ("D", "K"):
                self.p_agt = 0
                self.df.loadEntry(frt, pag, p + 1, data=0)
                return "sk1"
            if self.cfmat == "R":
                if self.s_for == self.s_agt:
                    self.p_for = self.p_agt = .5
                elif self.s_for > self.s_agt:
                    self.p_for = 1
                    self.p_agt = 0
                else:
                    self.p_for = 0
                    self.p_agt = 1
                self.df.loadEntry(frt, pag, p - 3, data=self.p_for)
                self.df.loadEntry(frt, pag, p + 1, data=self.p_agt)
                return "sk1"
            if not self.s_agt or (not self.totpts and self.bonus != "Y"):
                self.p_agt = w
                self.df.loadEntry(frt, pag, p + 1, data=0)
                return "sk1"
            self.mpts = self.totpts
            if self.bonus == "N":
                return
            diff = float(ASD(self.s_for) - ASD(self.s_agt))
            if not diff:
                return
            if diff > self.win_by[0] or diff < self.win_by[1]:
                self.mpts = float(ASD(self.mpts) + ASD(1))
            elif diff < self.lose_by[0] and diff > self.lose_by[1]:
                self.mpts = float(ASD(self.mpts) + ASD(1))

    def doPoints(self, frt, pag, r, c, p, i, w):
        if w and w % 1 not in (0.0, 0.5):
            return "Invalid Decimal in Points"
        if w > self.maxpts:
            return "Invalid Points, Exceed Maximum"
        if i == 3:
            self.p_for = w
            self.df.loadEntry(frt, pag, p + 1, data=self.opp)
            chk = self.sql.getRec("bwltab", cols=["btb_surname",
                "btb_names"], where=[("btb_cono", "=", self.opts["conum"]),
                ("btb_tab", "=", self.opp)], limit=1)
            if chk[1]:
                name = "%s, %s" % tuple(chk[:2])
            else:
                name = chk[0]
            self.df.loadEntry(frt, pag, p + 2, data=name)
            if self.ponly == "Y":
                self.s_for = w
                return "sk3"
            else:
                return "sk2"
        if not w:
            self.p_agt = float(ASD(self.mpts) - ASD(self.p_for))
            self.df.loadEntry(frt, pag, p, data=self.p_agt)
        else:
            self.p_agt = w
        if self.ponly == "Y":
            self.s_agt = self.p_agt
        tot = float(ASD(self.p_for) + ASD(self.p_agt))
        if tot != self.mpts:
            return "Invalid Total Points (%s s/b %s)" % (tot, self.mpts)

    def doEnd(self):
        if self.df.frt == "T":
            self.df.focusField("C", 0, 1)
            self.doLoadCards()
        else:
            if self.ponly == "Y" and not self.p_for and not self.p_agt:
                aflag = "S"
            elif self.ponly == "N" and not self.s_for and not self.s_agt:
                aflag = "S"
            else:
                aflag = ""
            col = [
                "bcg_sfor", "bcg_sagt", "bcg_points",
                "bcg_a_sfor", "bcg_a_sagt", "bcg_a_points",
                "bcg_aflag"]
            whr = [
                ("bcg_cono", "=", self.opts["conum"]),
                ("bcg_ccod", "=", self.ccod),
                ("bcg_game", "=", self.gcod)]
            w = whr[:]
            w.append(("bcg_scod", "=", self.skp))
            self.sql.updRec("bwlgme", cols=col, data=[self.s_for, self.s_agt,
                self.p_for, self.s_for, self.s_agt, self.p_for, aflag],
                where=w)
            if self.cfmat not in ("D", "K"):
                w = whr[:]
                w.append(("bcg_scod", "=", self.opp))
                self.sql.updRec("bwlgme", cols=col, data=[self.s_agt,
                    self.s_for, self.p_agt, self.s_agt, self.s_for,
                    self.p_agt, aflag], where=w)
            self.opts["mf"].dbm.commitDbase()
            if self.reenter:
                self.doLoadCards()
            else:
                self.df.advanceLine(0)

    def doLoadCards(self):
        whr = [
            ("bcg_cono", "=", self.opts["conum"]),
            ("bcg_ccod", "=", self.ccod),
            ("bcg_game", "=", self.gcod)]
        if self.ponly == "Y":
            whr.append(("bcg_points", ">", 0))
        else:
            whr.append(("(", "bcg_sfor", ">", 0, "or",
                "bcg_sagt", ">", 0, ")"))
        recs = self.sql.getRec("bwlgme", cols=["bcg_scod", "bcg_ocod"],
            where=whr, order="bcg_scod")
        if not recs:
            return
        self.df.clearFrame("C", 0)
        self.df.focusField("C", 0, 1)
        skips = []
        seq = 0
        for rec in recs:
            if rec[0] in skips:
                continue
            skips.extend(rec)
            col = [
                "btb_surname", "btb_names",
                "bcg_sfor", "bcg_sagt", "bcg_points"]
            skp = self.sql.getRec(tables=["bwlgme", "bwltab"],
                cols=col, where=[("bcg_cono", "=", self.opts["conum"]),
                ("bcg_ccod", "=", self.ccod), ("bcg_scod", "=", rec[0]),
                ("bcg_game", "=", self.gcod), ("btb_tab=bcg_scod",)], limit=1)
            idx = seq * 8
            self.df.loadEntry("C", 0, idx, data=rec[0])
            if skp[1]:
                name = "%s, %s" % tuple(skp[:2])
            else:
                name = skp[0]
            self.df.loadEntry("C", 0, idx + 1, data=name)
            self.df.loadEntry("C", 0, idx + 2, data=skp[2])
            self.df.loadEntry("C", 0, idx + 3, data=skp[4])
            if self.cfmat in ("D", "K"):
                tab = self.sql.getRec("bwltab", cols=col[:2],
                    where=[("btb_cono", "=", self.opts["conum"]),
                    ("btb_tab", "=", rec[1])], limit=1)
                opp = tab + [skp[3], skp[4], 0]
            else:
                opp = self.sql.getRec(tables=["bwlgme", "bwltab"],
                    cols=col, where=[("bcg_cono", "=", self.opts["conum"]),
                    ("bcg_ccod", "=", self.ccod), ("bcg_scod", "=", rec[1]),
                    ("bcg_game", "=", self.gcod), ("btb_tab=bcg_scod",)],
                    limit=1)
            self.df.loadEntry("C", 0, idx + 4, data=rec[1])
            if opp[1]:
                name = "%s, %s" % tuple(opp[:2])
            else:
                name = opp[0]
            self.df.loadEntry("C", 0, idx + 5, data=name)
            self.df.loadEntry("C", 0, idx + 6, data=opp[2])
            self.df.loadEntry("C", 0, idx + 7, data=opp[4])
            self.df.advanceLine(0)
            if seq < 17:
                seq += 1

    def doExit(self):
        if self.df.frt == "C" and self.df.col != 1:
            chk = self.sql.getRec("bwlgme", where=[("bcg_cono", "=",
                self.opts["conum"]), ("bcg_ccod", "=", self.ccod), ("bcg_game",
                "=", self.gcod), ("bcg_aflag", "in", ("", "D"))])
            for c in chk:
                scod = c[self.sql.bwlgme_col.index("bcg_scod")]
                ocod = c[self.sql.bwlgme_col.index("bcg_ocod")]
                if scod > 900000 or ocod > 900000:
                    continue
                if self.ponly == "Y":
                    fors = c[self.sql.bwlgme_col.index("bcg_points")]
                    agts = self.sql.getRec("bwlgme",
                        cols=["bcg_points"], where=[("bcg_cono", "=",
                        self.opts["conum"]), ("bcg_ccod", "=", self.ccod),
                        ("bcg_game", "=", self.gcod), ("bcg_scod",
                        "=", ocod)], limit=1)[0]
                else:
                    fors = c[self.sql.bwlgme_col.index("bcg_sfor")]
                    agts = c[self.sql.bwlgme_col.index("bcg_sagt")]
                if not fors and not agts:
                    self.df.focusField(self.df.frt, self.df.pag, self.df.col,
                        err="Missing Score Card for Skips %s and %s" % (scod,
                        ocod))
                    return
            if self.cfmat in ("D", "K") and self.gcod != self.games:
                # Delete Next Round's Records
                whr = [
                    ("bcg_cono", "=", self.opts["conum"]),
                    ("bcg_ccod", "=", self.ccod)]
                w = whr[:]
                w.append(("bcg_game", ">", self.gcod))
                self.sql.delRec("bwlgme", where=w)
                # Create Next Round's Records
                whr.append(("bcg_game", "=", self.gcod))
                odr = "bcg_group, bcg_pair, bcg_scod"
                g = self.sql.bwlgme_col
                for grp in range(1, 3):
                    w = whr[:]
                    w.append(("bcg_group", "=", grp))
                    recs = self.sql.getRec("bwlgme", where=w, order=odr)
                    for num in range(0, len(recs), 2):
                        pair = int(num / 2) + 1
                        rec1 = copyList(recs[num])
                        if len(recs) == 1:
                            w = whr[:]
                            w.append(("bcg_group", "=", 2))
                            rec2 = self.sql.getRec("bwlgme", where=w,
                                order=odr, limit=1)
                            grp = 2
                        else:
                            rec2 = copyList(recs[num + 1])
                        skp1 = rec1[g.index("bcg_scod")]
                        opp1 = rec1[g.index("bcg_ocod")]
                        for1 = rec1[g.index("bcg_sfor")]
                        agt1 = rec1[g.index("bcg_sagt")]
                        skp2 = rec2[g.index("bcg_scod")]
                        opp2 = rec2[g.index("bcg_ocod")]
                        for2 = rec2[g.index("bcg_sfor")]
                        agt2 = rec2[g.index("bcg_sagt")]
                        if opp1 > 900000:
                            pl1 = skp1
                        elif for1 > agt1:
                            pl1 = skp1
                        else:
                            pl1 = opp1
                        if opp2 > 900000:
                            pl2 = skp2
                        elif for2 > agt2:
                            pl2 = skp2
                        else:
                            pl2 = opp2
                        dat = [self.opts["conum"], self.ccod, pl1,
                            self.gcod + 1, "D", 0, pl2, "", grp, 0,
                            0, 0.0, 0, 0, 0.0, "", 0, pair]
                        self.sql.insRec("bwlgme", data=dat)
                    if len(recs) == 1:
                        break
                self.opts["mf"].dbm.commitDbase()
            if self.cfmat in ("D", "K"):
                callModule(self.opts["mf"], self.df, "bc2050",
                    coy=[self.opts["conum"], self.opts["conam"]],
                    args=self.ccod)
        self.df.closeProcess()
        self.opts["mf"].closeLoop()

    def doQuit(self, event=None):
        col = ["count(*)"]
        whr = [
            ("bcg_cono", "=", self.opts["conum"]),
            ("bcg_ccod", "=", self.ccod),
            ("bcg_game", "=", self.gcod),
            ("bcg_scod", "<", 900000),
            ("bcg_ocod", "<", 900000),
            ("bcg_sfor=0 and bcg_sagt=0",)]
        chk = self.sql.getRec("bwlgme", cols=col, where=whr, limit=1)
        if chk[0]:
            ok = askQuestion(self.opts["mf"].body, "Quit Capture",
                "Are You Sure that you would like to Quit before "\
                "capturing All Results?", default="no")
            if ok == "no":
                self.df.focusField(self.df.frt, self.df.pag, self.df.col)
                return
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #22
0
class ar2010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.gc = GetCtl(self.opts["mf"])
        assctl = self.gc.getCtl("assctl", self.opts["conum"])
        if not assctl:
            return
        self.rordp = assctl["cta_rordp"]
        tabs = ["assgrp", "assmst", "assdep", "asstrn"]
        self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.dend = projectDate(self.opts["period"][1][0], -1)
        self.todat = 0
        self.imports = False
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def drawDialog(self):
        grp = {
            "stype":
            "R",
            "tables": ("assgrp", ),
            "cols": (("asg_group", "", 0, "Grp"), ("asg_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("asg_cono", "=", self.opts["conum"])]
        }
        cod = {
            "stype":
            "R",
            "tables": ("assmst", ),
            "cols": (("asm_code", "", 0, "Cod-Num"), ("asm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("asm_cono", "=", self.opts["conum"])],
            "whera": [["C", "asm_group", 0, 0]]
        }
        dep = {
            "stype":
            "R",
            "tables": ("assdep", ),
            "cols": (("asd_code", "", 0, "Cod"), ("asd_desc", "", 0,
                                                  "Description", "Y")),
            "where": [("asd_cono", "=", self.opts["conum"])]
        }
        self.fld = [(("T", 0, 0, 0), "ID1", 10, "Take-on Date", "", self.dend,
                     "N", self.doTakeOnDate, None, None, ("efld", )),
                    (("C", 0, 0, 0), "IUA", 3, "Grp", "Asset Group", "r", "N",
                     self.doAssGrp, grp, None, None),
                    (("C", 0, 0, 1), "INa", 7, "Cod-Num", "Asset Code", "",
                     "N", self.doAssCod, cod, None, ("notblank", )),
                    (("C", 0, 0, 2), "INA", 30, "Description", "Description",
                     "", "N", self.doDesc, None, None, ("notblank", )),
                    (("C", 0, 0, 3), "INa", 3, "Dep", "Depreciation Code", "",
                     "N", self.doDepCode, dep, None, ("notblank", )),
                    (("C", 0, 0, 4), "ONA", 10, "Dp-Details"),
                    (("C", 0, 0, 5), "ID1", 10, "Purch-Date", "Purchase Date",
                     0, "N", self.doPurDat, None, None, ("efld", )),
                    (("C", 0, 0, 6), "IUD", 10.2, "Cost", "Original Cost", 0,
                     "N", self.doCost, None, None, ("notzero", )),
                    (("C", 0, 0,
                      7), "IUD", 10.2, "Coy-Dep", "Company Depreciation", 0,
                     "N", self.doCDep, None, None, ("efld", ))]
        if self.rordp == "Y":
            self.fld.append((("C", 0, 0, 8), "IUD", 10.2, "Rec-Dep",
                             "Receiver Depreciation", 0, "N", self.doRDep,
                             None, None, ("efld", )))
        tnd = [[self.endPage, "y"]]
        txt = (self.exitPage, )
        cnd = [[self.endPage, "y"]]
        cxt = (self.exitPage, )
        but = ((("Import File",None,self.doImport,0,("T",0,0),("C",0,2),
            "Import a CSV or XLS File having the following fields: "\
            "Asset Group, Code, Description, Depreciation Code, "\
            "Purchase Date, Original Cost, Company Depeciation and "\
            "Receiver Depreciation if applicable"),))
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               rows=(15, ),
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)

    def doTakeOnDate(self, frt, pag, r, c, p, i, w):
        if w < self.dend:
            return "Invalid Date, Too Far in the Past"
        self.todat = w

    def doAssGrp(self, frt, pag, r, c, p, i, w):
        self.group = w
        col = ["asg_depcod"]
        whr = [("asg_cono", "=", self.opts["conum"]),
               ("asg_group", "=", self.group)]
        acc = self.sql.getRec("assgrp", cols=col, where=whr, limit=1)
        if not acc:
            return "Invalid Asset Group"
        self.depcod = acc[0]

    def doImport(self):
        self.df.closeProcess()
        self.imports = True
        impcol = []
        for num, fld in enumerate(self.fld[1:]):
            if fld[0][3] == 4:
                continue
            if num > 4:
                num -= 1
            impcol.append([fld[4], num, fld[1][1:], fld[2]])
        fi = FileImport(self.opts["mf"], impcol=impcol)
        err = False
        for row, data in enumerate(fi.impdat):
            funcs = [
                "doAssGrp", "doAssCod", "doDesc", "doDepCode", "doPurDat",
                "doCost", "doCDep"
            ]
            if self.rordp == "Y":
                funcs.append("doRDep")
            for col, func in enumerate(funcs):
                err = getattr(self, "%s" % func)("", 0, 0, 0, 0, 0, data[col])
                if err:
                    showError(
                        self.opts["mf"].body, "Import Error",
                        """Row %s Column %s - %s - %s

Please Correct the Import File and Try Again.""" % (row, col, data[col], err))
                    break
            if err:
                break
            self.endPage()
        if err:
            self.opts["mf"].dbm.rollbackDbase()
        else:
            self.opts["mf"].dbm.commitDbase()
        self.opts["mf"].closeLoop()

    def doAssCod(self, frt, pag, r, c, p, i, w):
        self.code = w
        acc = self.sql.getRec("assmst",
                              cols=["asm_desc"],
                              where=[("asm_cono", "=", self.opts["conum"]),
                                     ("asm_group", "=", self.group),
                                     ("asm_code", "=", w)],
                              limit=1)
        if acc:
            ok = askQuestion(screen=self.opts["mf"].body,
                             head="Asset Exists",
                             mess="""Asset already exists, Replace?

Please Note that if you decide to Replace the Asset, the Original Asset will be Deleted along with any History which may exist.""",
                             default="no")
            if ok == "no":
                return "Invalid Asset"
            self.sql.delRec("assmst",
                            where=[("asm_cono", "=", self.opts["conum"]),
                                   ("asm_group", "=", self.group),
                                   ("asm_code", "=", self.code)])
            self.sql.delRec("asstrn",
                            where=[("ast_cono", "=", self.opts["conum"]),
                                   ("ast_group", "=", self.group),
                                   ("ast_code", "=", self.code)])
            if not self.imports:
                self.df.loadEntry(frt, pag, p + 1, data=acc[0])

    def doDesc(self, frt, pag, r, c, p, i, w):
        self.desc = w
        if not self.imports:
            self.df.loadEntry(frt, pag, p + 1, data=self.depcod)

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

    def doPurDat(self, frt, pag, r, c, p, i, w):
        if w > self.todat:
            return "Invalid Date, After Financial Period"
        self.purdat = w

    def doCost(self, frt, pag, r, c, p, i, w):
        self.ccst = w
        if self.rordp == "Y":
            self.rcst = w
        else:
            self.rcst = 0

    def doCDep(self, frt, pag, r, c, p, i, w):
        self.cdep = float(ASD(0) - ASD(w))
        if self.rordp == "N":
            self.rdep = 0
            return
        if not self.rate1r:
            self.rdep = 0
            if not self.imports:
                self.df.loadEntry(frt, pag, p + 1, data=self.rdep)
            return "sk1"

    def doRDep(self, frt, pag, r, c, p, i, w):
        self.rdep = float(ASD(0) - ASD(w))

    def endPage(self):
        if self.df.frt == "T":
            self.df.focusField("C", 0, 1)
            return
        data = [
            self.opts["conum"], self.group, self.code, self.desc, self.depcod
        ]
        self.sql.insRec("assmst", data=data)
        data = [
            self.opts["conum"], self.group, self.code, 3, "Take-On", "Take-On",
            self.purdat, 1, self.ccst, self.rcst, 0,
            int(self.purdat / 100), "Original Cost", "", "",
            self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("asstrn", data=data)
        if self.cdep or self.rdep:
            data = [
                self.opts["conum"], self.group, self.code, 3, "Take-On",
                "Take-On", self.todat, 4, self.cdep, self.rdep, 0,
                int(self.todat / 100), "Accumulated Depreciation", "", "",
                self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("asstrn", data=data)
        if not self.imports:
            self.df.advanceLine(0)

    def exitPage(self):
        self.df.closeProcess()
        if self.df.frt == "C":
            self.opts["mf"].dbm.commitDbase()
        self.opts["mf"].closeLoop()
Пример #23
0
class dr6020(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            if "args" in opts:
                self.curdt = opts["args"][0]
                for self.chain, self.acno in opts["args"][1]:
                    self.doReAgeAuto()
                self.opts["mf"].dbm.commitDbase()
            else:
                self.dataHeader()
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       ["drsmst", "drschn", "drstrn", "drsage"],
                       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]
        self.curdt = int(self.sysdtw / 100)
        if "args" not in self.opts:
            self.agevar = tk.BooleanVar()
            self.agevar.set(False)
        return True

    def dataHeader(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", )}
        if self.chains == "Y":
            drm["cols"] = (("drm_chain", "", 0, "Chn"), ("drm_acno", "", 0,
                                                         "Acc-Num"),
                           ("drm_name", "", 0, "Name",
                            "Y"), ("drm_add1", "", 0, "Address Line 1"))
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_stat", "<>", "X")]
            drm["whera"] = [["T", "drm_chain", 0]]
        else:
            drm["cols"] = (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0,
                                                            "Name", "Y"),
                           ("drm_add1", "", 0, "Address Line 1"))
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_chain", "=", 0), ("drm_stat", "<>", "X")]
        fld = [[["T", 0, 0, 0], "ID2", 7, "Period", "Current Financial Period",
                self.curdt, "Y", self.doCurdt, None, None, ("efld", )],
               [["T", 0, 1, 0], "INA", 7, "Acc-Num", "Account Number", "", "N",
                self.doAccno, drm, None, ("notblank", )],
               [["T", 0, 1, 0], "ONA", 30, "Name"]]
        if self.chains == "Y":
            fld.insert(1, [["T", 0, 0, 0], "IUI", 3, "Chain", "Chain Store",
                           "", "N", self.doChain, drc, None, ("efld", )])
        else:
            self.chain = 0
        tnd = ((self.endTop, "n"), )
        txt = (self.exitTop, )
        self.but = (("Normal", None, self.doReAgeNormal, 0, None, None,
                     "Only Show Unallocated Transactions"),
                    ("History", None, self.doReAgeHistory, 0, None, None,
                     "Show All Transactions, Including Already Allocated"),
                    ("Automatic", None, self.doReAgeAuto, 0, None, None,
                     "Automatically Re-Age the Account Based on Date"))
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               butt=self.but)

    def doCurdt(self, frt, pag, r, c, p, i, w):
        self.curdt = w

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

    def doAccno(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("drsmst",
                              cols=["drm_name", "drm_stat"],
                              where=[("drm_cono", "=", self.opts["conum"]),
                                     ("drm_chain", "=", self.chain),
                                     ("drm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Account Number"
        if acc[1] == "X":
            return "Invalid Account, Redundant"
        self.acno = w
        self.key = None
        self.df.loadEntry("T", pag, p + 1, data=acc[0])
        self.opts["mf"].updateStatus("Select Routine")
        for b in range(3):
            wid = getattr(self.df, "B%s" % b)
            self.df.setWidget(wid, "normal")
        self.df.setWidget(self.df.B0, "focus")
        self.agevar.set(True)
        self.df.mstFrame.wait_variable(self.agevar)
        if self.key in ("normal", "history"):
            return "nd"
        elif self.key == "cancel":
            return "nc"

    def doReAgeNormal(self):
        self.key = "normal"
        self.doReAge()

    def doReAgeHistory(self):
        self.key = "history"
        self.doReAge()

    def doReAge(self):
        self.opts["mf"].updateStatus("")
        for b in range(3):
            wid = getattr(self.df, "B%s" % b)
            self.df.setWidget(wid, "disabled")
        col = [
            "drt_trdt", "drt_ref1", "drt_type", "drt_tramt", "paid", "balance"
        ]
        whr = [("drt_cono", "=", self.opts["conum"]),
               ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno)]
        if self.key == "normal":
            dtc, recs = getTrn(self.opts["mf"].dbm, "drs", whr=whr, zer="N")
        else:
            dtc, recs = getTrn(self.opts["mf"].dbm, "drs", whr=whr)
        if recs:
            data = []
            for rec in recs:
                dat = []
                for c in col:
                    dat.append(rec[dtc.index(c)])
                data.append(dat)
            age = AgeTrans(self.opts["mf"], "drs", data, 0, xits=False)
            if not age.ccl and age.data:
                if age.total.work:
                    while not age.ccl:
                        age.doAllocate()
                        if age.ccl or not age.total.work:
                            break
                if age.ccl:
                    self.key = "cancel"
                    age.data = []
                for tr in age.data:
                    if tr[6]:
                        w = copyList(whr)
                        w.extend([("drt_type", "=", tr[2]),
                                  ("drt_ref1", "=", tr[1])])
                        self.sql.insRec("drsage",
                                        data=[
                                            self.opts["conum"], self.chain,
                                            self.acno, tr[2], tr[1],
                                            self.curdt, tr[2], tr[1], tr[6], 0
                                        ])
            else:
                self.key = "cancel"
        self.agevar.set(False)

    def doReAgeAuto(self):
        self.key = "normal"
        if "args" not in self.opts:
            for b in range(3):
                wid = getattr(self.df, "B%s" % b)
                self.df.setWidget(wid, "disabled")
            self.opts["mf"].updateStatus("Re-Ageing .... Please Wait!")
            self.df.setWidget(self.df.mstFrame, state="hide")
            txt = "Re-Allocating ... Please Wait"
            pb = ProgressBar(self.opts["mf"].body, typ=("G", txt))
            doAutoAge(self.opts["mf"].dbm,
                      "drs",
                      self.opts["conum"],
                      chain=self.chain,
                      acno=self.acno,
                      pbar=pb)
            pb.closeProgress()
            self.df.setWidget(self.df.mstFrame, state="show")
            self.agevar.set(False)
        else:
            doAutoAge(self.opts["mf"].dbm,
                      "drs",
                      self.opts["conum"],
                      chain=self.chain,
                      acno=self.acno,
                      pbar=None)

    def endTop(self):
        self.df.clearEntry("T", 0, 2)
        self.df.clearEntry("T", 0, 3)
        if self.chains == "Y":
            self.df.clearEntry("T", 0, 4)
        self.df.focusField("T", 0, 2)

    def exitTop(self):
        self.opts["mf"].dbm.commitDbase(ask=True)
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #24
0
class bc2060(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        t = time.localtime()
        self.today = ((t[0] * 10000) + (t[1] * 100) + t[2])
        self.sql = Sql(self.opts["mf"].dbm,
                       ["bwlcmp", "bwltab", "bwlgme", "bwltyp", "bwlent"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        com = {
            "stype":
            "R",
            "tables": ("bwlcmp", ),
            "cols":
            (("bcm_code", "", 0, "Cod"), ("bcm_name", "", 0, "Name", "Y"),
             ("bcm_date", "", 0, "Date")),
            "where": [("bcm_cono", "=", self.opts["conum"])]
        }
        skp = {
            "stype":
            "R",
            "tables": ("bwltab", "bwlgme"),
            "cols":
            (("btb_tab", "", 0, "Cod"), ("btb_surname", "", 0, "Surname",
                                         "Y"), ("btb_names", "", 0, "Names"),
             ("bcg_rink", "", 0, "RK"), ("bcg_ocod", "", 0, "Opp")),
            "where": [("btb_cono", "=", self.opts["conum"]),
                      ("bcg_cono=btb_cono", ), ("bcg_scod=btb_tab", )],
            "whera": [("T", "bcg_ccod", 0, 0), ("T", "bcg_game", 2, 0)],
            "group":
            "btb_tab",
            "order":
            "btb_tab"
        }
        fld = (
            (("T",0,0,0),"I@bcm_code",0,"","",
                "","Y",self.doCmpCod,com,None,("notzero",)),
            (("T",0,0,0),"ONA",30,""),
            (("T",0,1,0),"I@bcg_game",0,"Game Number","",
                1,"N",self.doGame,None,None,("efld",)),
            (("T",0,1,0),"I@bcg_date",0,"Date","",
                self.today,"N",self.doDate,None,None,("efld",)),
            (("T",0,2,0),"IUA",30,"Greens","Greens (A,B,C)",
                "","N",self.doGreens,None,None,("efld",),None,"Available "\
                "Greens in the format A,B or A,B345 showing Green Code and "\
                "Rinks. If the Rinks are Not Entered they will Default to 6."),
            (("C",0,0,0),"I@bcg_scod",0,"","",
                "","N",self.doSkpCod,skp,None,("notzero",)),
            (("C",0,0,0),"ONA",30,"Skp-Name"),
            (("C",0,0,0),"I@bcg_ocod",0,"","",
                "","N",self.doOppCod,skp,None,("notzero",)),
            (("C",0,0,0),"ONA",30,"Opp-Name"),
            (("C",0,0,0),"I@bcg_rink",0,"","",
                "","N",self.doRink,None,None,("notblank",)))
        but = (("Quit", None, self.doQuit, 1, None, None), )
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        cnd = ((self.doEnd, "y"), )
        cxt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               tops=False,
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt)

    def doCmpCod(self, frt, pag, r, c, p, i, w):
        com = self.sql.getRec("bwlcmp",
                              cols=["bcm_name", "bcm_date", "bcm_type"],
                              where=[("bcm_cono", "=", self.opts["conum"]),
                                     ("bcm_code", "=", w)],
                              limit=1)
        if not com:
            return "Invalid Competition Code"
        name, self.sdat, ctyp = com
        self.df.loadEntry(frt, pag, p + 1, data=name)
        chk = self.sql.getRec("bwltyp",
                              cols=["bct_cfmat"],
                              where=[("bct_cono", "=", self.opts["conum"]),
                                     ("bct_code", "=", ctyp)],
                              limit=1)
        if chk[0] in ("D", "K", "R"):
            return "Knockout and R/Robin Draws Cannot be Changed"
        chk = self.sql.getRec("bwlgme",
                              cols=[
                                  "bcg_game", "bcg_date", "bcg_aflag",
                                  "sum(bcg_ocod)", "sum(bcg_sfor)"
                              ],
                              where=[("bcg_cono", "=", self.opts["conum"]),
                                     ("bcg_ccod", "=", w)],
                              group="bcg_game, bcg_date, bcg_aflag")
        self.ccod = w
        self.game = 0
        self.draws = {}
        self.manual = False
        for ck in chk:
            if ck[2] == "A" or ck[4]:
                continue
            if ck[4]:
                continue
            if ck[2] in ("", "D", "S") and ck[3]:
                self.draws[ck[0]] = ck[1:]
        if not self.draws:
            ok = askQuestion(self.opts["mf"].body, "Manual Draw",
                "Is this the First Game and is it going to be a "\
                "Manual Draw?", default="no")
            if ok == "no":
                return "rf"
            self.manual = True
            self.game = 1
            self.df.loadEntry(frt, pag, p + 2, data=self.game)
            self.totskp = self.sql.getRec("bwlent",
                                          cols=["count(*)"],
                                          where=[("bce_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bce_ccod", "=", self.ccod)],
                                          limit=1)[0]
            return "sk2"

    def doGame(self, frt, pag, r, c, p, i, w):
        if w not in self.draws:
            return "Invalid Game Number"
        self.game = w
        self.date = self.draws[w][0]
        self.df.loadEntry(frt, pag, p + 1, data=self.date)
        self.totskp = self.sql.getRec("bwlent",
                                      cols=["count(*)"],
                                      where=[("bce_cono", "=",
                                              self.opts["conum"]),
                                             ("bce_ccod", "=", self.ccod)],
                                      limit=1)[0]

    def doDate(self, frt, pag, r, c, p, i, w):
        if w < self.today or w < self.sdat:
            return "Invalid Date, in the Past or Before the Starting Date"
        self.date = w

    def doGreens(self, frt, pag, r, c, p, i, w):
        if not w:
            return "Invalid Greens"
        self.rinks = []
        rinks = 0
        grns = w.split(",")
        for gr in grns:
            if len(gr) == 1:
                for x in range(1, 7):
                    self.rinks.append("%s%s" % (gr[0], x))
                rinks += 6
            elif len(gr) == 2 and gr[1] == "7":
                for x in range(1, 8):
                    self.rinks.append("%s%s" % (gr[0], x))
                rinks += 7
            else:
                for rk in gr[1:]:
                    self.rinks.append("%s%s" % (gr[0], rk))
                    rinks += 1
        if int(self.totskp / 2) > rinks:
            return "Not Enough Rinks"

    def doSkpCod(self, frt, pag, r, c, p, i, w):
        skp = self.sql.getRec(
            tables=["bwlgme", "bwltab"],
            cols=["btb_surname", "btb_names", "bcg_ocod", "bcg_rink"],
            where=[("bcg_cono", "=", self.opts["conum"]),
                   ("bcg_ccod", "=", self.ccod), ("bcg_scod", "=", w),
                   ("bcg_game", "=", self.game), ("btb_cono=bcg_cono", ),
                   ("btb_tab=bcg_scod", )],
            limit=1)
        if not skp:
            return "Invalid Skip Code"
        self.skip = w
        self.old_opp = skp[2]
        self.old_rink = skp[3]
        if skp[1]:
            name = "%s, %s" % tuple(skp[:2])
        else:
            name = skp[0]
        self.df.loadEntry(frt, pag, p + 1, data=name)
        if self.old_opp:
            self.df.loadEntry(frt, pag, p + 2, data=self.old_opp)
            opp = self.sql.getRec("bwltab",
                                  cols=["btb_surname", "btb_names"],
                                  where=[("btb_cono", "=", self.opts["conum"]),
                                         ("btb_tab", "=", skp[2])],
                                  limit=1)
            if opp[1]:
                name = "%s, %s" % tuple(opp[:2])
            else:
                name = opp[0]
            self.df.loadEntry(frt, pag, p + 3, data=name)
        if self.old_rink:
            self.df.loadEntry(frt, pag, p + 4, data=self.old_rink)

    def doOppCod(self, frt, pag, r, c, p, i, w):
        opp = self.sql.getRec(
            tables=["bwlgme", "bwltab"],
            cols=["btb_surname", "btb_names", "bcg_ocod", "bcg_rink"],
            where=[("bcg_cono", "=", self.opts["conum"]),
                   ("bcg_ccod", "=", self.ccod), ("bcg_scod", "=", w),
                   ("bcg_game", "=", self.game), ("btb_cono=bcg_cono", ),
                   ("btb_tab=bcg_scod", )],
            limit=1)
        if not opp:
            return "Invalid Opponents Code"
        self.new_opp = w
        self.chg_skp = opp[2]
        if opp[1]:
            name = "%s, %s" % tuple(opp[:2])
        else:
            name = opp[0]
        self.df.loadEntry(frt, pag, p + 1, data=name)

    def doRink(self, frt, pag, r, c, p, i, w):
        if w not in self.rinks:
            return "Invalid Rink"
        self.new_rink = w

    def doEnd(self):
        if self.df.frt == "T":
            self.df.focusField("C", 0, 1)
        else:
            self.df.advanceLine(0)
            self.sql.updRec("bwlgme",
                            cols=["bcg_date", "bcg_ocod", "bcg_rink"],
                            data=[self.date, self.new_opp, self.new_rink],
                            where=[("bcg_cono", "=", self.opts["conum"]),
                                   ("bcg_ccod", "=", self.ccod),
                                   ("bcg_scod", "=", self.skip),
                                   ("bcg_game", "=", self.game)])
            self.sql.updRec("bwlgme",
                            cols=["bcg_date", "bcg_ocod", "bcg_rink"],
                            data=[self.date, self.skip, self.new_rink],
                            where=[("bcg_cono", "=", self.opts["conum"]),
                                   ("bcg_ccod", "=", self.ccod),
                                   ("bcg_scod", "=", self.new_opp),
                                   ("bcg_game", "=", self.game)])

    def doExit(self):
        if self.df.frt == "C":
            chk = self.sql.getRec("bwlgme",
                                  cols=["bcg_ocod", "count(*)"],
                                  where=[("bcg_cono", "=", self.opts["conum"]),
                                         ("bcg_ccod", "=", self.ccod),
                                         ("bcg_game", "=", self.game)],
                                  group="bcg_ocod",
                                  order="bcg_ocod")
            for c in chk:
                if c[0] and c[1] != 1:
                    skp = self.sql.getRec("bwlgme",
                                          cols=["bcg_scod"],
                                          where=[("bcg_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bcg_ccod", "=", self.ccod),
                                                 ("bcg_game", "=", self.game),
                                                 ("bcg_ocod", "=", c[0])],
                                          order="bcg_scod")
                    err = "Opponent %s is Drawn Against %s Skips\n" % tuple(c)
                    for s in skp:
                        err = err + "\nSkip %s" % s[0]
                    skp = self.sql.sqlRec("Select bce_scod from bwlent where "\
                        "bce_ccod = %s and bce_scod not in (select bcg_ocod "\
                        "from bwlgme where bcg_ccod = %s and bcg_game = %s)" %
                        (self.ccod, self.ccod, self.game))
                    err = err + "\n\nSkips Without Opponents\n"
                    for s in skp:
                        err = err + "\nSkip %s" % s[0]
                    showError(self.opts["mf"].body, "Skip Error", err)
                    self.df.focusField(self.df.frt, self.df.pag, self.df.col)
                    return
            chk = self.sql.getRec("bwlgme",
                                  cols=["bcg_rink", "count(*)"],
                                  where=[("bcg_cono", "=", self.opts["conum"]),
                                         ("bcg_ccod", "=", self.ccod),
                                         ("bcg_game", "=", self.game)],
                                  group="bcg_rink",
                                  order="bcg_rink")
            for c in chk:
                if c[1] != 2:
                    skp = self.sql.getRec("bwlgme",
                                          cols=["bcg_scod", "bcg_ocod"],
                                          where=[("bcg_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bcg_ccod", "=", self.ccod),
                                                 ("bcg_game", "=", self.game),
                                                 ("bcg_rink", "=", c[0])],
                                          group="bcg_scod, bcg_ocod, bcg_rink",
                                          order="bcg_scod")
                    skps = []
                    for s in skp:
                        if [s[1], s[0]] not in skps:
                            skps.append(s)
                    err = "Rink %s Shows %s time(s)\n" % (c[0], int(c[1] / 2))
                    for s in skps:
                        err = err + "\nSkip %2s Opp %2s" % (s[0], s[1])
                    rnk = self.sql.getRec("bwlgme",
                                          cols=["bcg_rink", "count(*)"],
                                          where=[("bcg_cono", "=",
                                                  self.opts["conum"]),
                                                 ("bcg_ccod", "=", self.ccod),
                                                 ("bcg_game", "=", self.game)],
                                          group="bcg_rink",
                                          order="bcg_rink")
                    rnks = []
                    for r in rnk:
                        rnks.append(r[0])
                    mis = ""
                    for r in self.rinks:
                        if r not in rnks:
                            if not mis:
                                mis = r
                            else:
                                mis = "%s, %s" % (mis, r)
                    err = err + "\n\nAvailable Rink(s)\n\n%s" % mis
                    showError(self.opts["mf"].body, "Rink Error", err)
                    self.df.focusField(self.df.frt, self.df.pag, self.df.col)
                    return
            self.opts["mf"].dbm.commitDbase(ask=True)
        self.df.closeProcess()
        self.opts["mf"].closeLoop()

    def doQuit(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #25
0
class dr2020(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.drawDialog()
            self.opts["mf"].startLoop()

    def setVariables(self):
        # Check for Valid Posting Routine
        if self.opts["rtn"] != 2:
            mes = "Invalid Routine %s" % str(self.opts["rtn"])
            showError(self.opts["mf"].body, "Control Error", mes)
            return
        # Setup SQL Object
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlmst", "ctlvmf", "drschn", "drsmst", "drstrn", "genint",
            "genmst", "gentrn"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        # Check for Intercompany Facility
        if not self.sql.getRec("ctlmst",
                               cols=["count(*)"],
                               where=[("ctm_cono", "<>", self.opts["conum"])],
                               limit=1)[0]:
            self.incoac = False
        else:
            itg = self.sql.getRec("genint",
                                  cols=["cti_inco"],
                                  where=[("cti_cono", "=", self.opts["conum"])
                                         ])
            if itg:
                self.incoac = [self.opts["conum"]]
                [self.incoac.append(coy[0]) for coy in itg]
            else:
                self.incoac = False
        #
        self.gc = GetCtl(self.opts["mf"])
        drsctl = self.gc.getCtl("drsctl", self.opts["conum"])
        if not drsctl:
            return
        self.glint = drsctl["ctd_glint"]
        self.chains = drsctl["ctd_chain"]
        if self.glint == "Y":
            ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["drs_ctl", "vat_ctl", "dis_all"]
            if self.gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.drsctl = ctlctl["drs_ctl"]
            self.dis_all = ctlctl["dis_all"]
        self.batchHeader()
        if not self.bh.batno:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.allcoy = self.opts["conum"]
        ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        if self.chains == "N":
            self.chain = 0
        self.glt = 6
        self.agevar = tk.BooleanVar()
        self.agevar.set(False)
        return True

    def batchHeader(self):
        self.bh = Batches(self.opts["mf"],
                          self.opts["conum"],
                          self.opts["conam"],
                          self.opts["period"],
                          "DRS",
                          self.opts["rtn"],
                          glint=self.glint)
        self.bh.doBatchHeader()
        if not self.bh.batno:
            return
        self.bh.batval = float(ASD(0) - ASD(self.bh.batval))

    def drawDialog(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"] = [["C", "drm_chain", 0, 1]]
        else:
            drm["where"] = [("drm_cono", "=", self.opts["conum"]),
                            ("drm_chain", "=", 0)]
        drm["where"].append(("drm_stat", "<>", "X"))
        coy = {
            "stype": "R",
            "tables": ("ctlmst", ),
            "cols":
            (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y"))
        }
        viw = {
            "stype":
            "R",
            "tables": ("drstrn", ),
            "cols": (("drt_chain", "", 0, ""), ("drt_acno", "", 0, ""),
                     ("drt_ref1", "", 0, ""), ("drt_trdt", "", 0, ""),
                     ("drt_tramt", "", 0, ""), ("drt_taxamt", "", 0, "")),
            "where": [("drt_cono", "=", self.opts["conum"]),
                      ("drt_type", "=", self.opts["rtn"]),
                      ("drt_batch", "=", self.bh.batno)],
            "order":
            "drt_seq"
        }
        tag = (("Deposit", None, None, None, False), ("Allocation", None, None,
                                                      None, False))
        fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno),
               (("T", 0, 0, 0), "OSD", 13.2, "Value"),
               (("C", 1, 0, 0), "INa", 9, "Reference", "Reference Number One",
                "i", "Y", self.doRef1, None, None, ("efld", )),
               (("C", 1, 0, 1), "ID1", 10, "Date", "Transaction Date", "r",
                "N", self.doTrnDat, None, None, ("efld", )),
               (("C", 1, 0, 2), "ISD", 13.2, "Amount", "Transaction Amount",
                "", "N", self.doTrnAmt, None, None, ("notzero", )),
               (("C", 1, 0, 3), "INA", (30), "Details", "Deposit Details", "",
                "N", self.doTrnDet, None, None, None),
               (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"),
               [("C", 2, 0, 0), "OUI", 3, "Coy", "Company Number",
                self.opts["conum"], "N", self.doCoyNum, coy, None,
                ("notzero", )],
               [("C", 2, 0, 1), "IUI", 3, "Chn", "Chain Store", "r", "N",
                self.doChain, drc, None, ("efld", )],
               (("C", 2, 0, 2), "INA", 7, "Acc-Num", "Account Number", "r",
                "N", self.doDrsAcc, drm, None, ("notblank", )),
               (("C", 2, 0, 3), "ONA", 30, "Name"),
               (("C", 2, 0, 4), "ISD", 13.2, "Receipt", "Receipt Amount", "",
                "N", self.doAllAmt, None, None, ("efld", )),
               (("C", 2, 0, 5), "ISD", 13.2, "Discount", "Discount Amount", "",
                "N", self.doDisAmt, None, None, ("efld", ), None,
                "Discount Amount to be Added to the Receipt Amount"),
               (("C", 2, 0, 6), "OSD", 13.2, "Total-Amount")]
        if self.glint == "Y" and self.incoac:
            fld[7][1] = "IUI"
        if self.chains == "N":
            fld[8][1] = "OUI"
            but = [("View Entries", viw, None, 1, ("C", 2, 3), ("C", 2, 4),
                    "View Batch Transactions", 1),
                   ("Interrogate", None, self.queryDrs, 0, ("C", 2, 3),
                    ("C", 2, 0), "Interrogate Debtors Accounts", 1),
                   ("Maintain", None, self.maintainDrs, 0, ("C", 2, 3),
                    ("C", 2, 4), "Maintain Debtors Accounts", 1),
                   ("Canc_el", None, self.doCancel, 0, ("C", 2, 1),
                    ("C", 1, 1), "", 1)]
        else:
            but = [("View Entries", viw, None, 0, ("C", 2, 3), ("C", 2, 4),
                    "View Batch Transactions", 1),
                   ("Interrogate", None, self.queryDrs, 0, ("C", 2, 2),
                    ("C", 2, 0), "Interrogate Debtors Accounts", 1),
                   ("Maintain", None, self.maintainDrs, 0, ("C", 2, 2),
                    ("C", 2, 3), "Maintain Debtors Accounts", 1),
                   ("Canc_el", None, self.doCancel, 0, ("C", 2, 1),
                    ("C", 1, 1), "", 1)]
        but.extend((
                ("Age _Normal",None,self.doAgeNormal,0,None,None,
                    "Only Show Unallocated Transactions",2),
                ("Age _History",None,self.doAgeHistory,0,None,None,
                    "Show All Transactions, Including Already Allocated",2),
                ("Age _Automatic",None,self.doAgeAuto,0,None,None,
                    "Automatically Allocate the Amount Starting With the "\
                    "Oldest Unallocated One",2),
                ("Age _Current",None,self.doAgeCurrent,0,None,None,
                    "Leave the Transaction Unallocated",2)))
        txt = (None, None, None)
        cnd = [None, (self.endPage1, "y"), (self.endPage2, "y")]
        cxt = [None, self.exitPage1, self.exitPage2]
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tags=tag,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)
        self.df.focusField("C", 1, 1)

    def doRef1(self, frt, pag, r, c, p, i, w):
        if not w:
            trns = self.sql.getRec("drstrn",
                                   cols=["drt_ref1"],
                                   where=[("drt_cono", "=",
                                           self.opts["conum"]),
                                          ("drt_ref1", "like", "R________")],
                                   order="drt_ref1 desc")
            auto = False
            for trn in trns:
                try:
                    w = "R%08i" % (int(trn[0][1:]) + 1)
                    auto = True
                    break
                except:
                    pass
            if not auto:
                w = "R00000001"
            self.df.loadEntry(frt, pag, p, data=w)
        chk = self.sql.getRec("drstrn",
                              cols=["drt_acno"],
                              where=[("drt_cono", "=", self.opts["conum"]),
                                     ("drt_type", "=", self.opts["rtn"]),
                                     ("drt_ref1", "=", w)])
        if chk:
            return "A Transaction with this Reference Already Exists"
        self.ref1 = w

    def doTrnDat(self, frt, pag, r, c, p, i, w):
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"
        if self.bh.multi == "N" and int(w / 100) > self.bh.curdt:
            return "Invalid Date, After Batch Period"
        self.trndat = w

    def doTrnAmt(self, frt, pag, r, c, p, i, w):
        self.trnamt = w

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        self.trndet = w
        self.allocated = float(0.00)

    def endPage1(self):
        self.agecan = False
        self.batupd = False
        self.updateTables1()
        self.updateBatch()
        self.allocated = float(0.0)
        self.df.selPage("Allocation")
        self.df.loadEntry("T", 2, 0, data=self.trnamt)
        self.df.focusField("C", 2, 1)

    def updateTables1(self):
        if self.bh.multi == "Y":
            self.curdt = int(self.trndat / 100)
        else:
            self.curdt = self.bh.curdt
        if self.glint == "Y":
            # General Ledger Control Transaction (Bank)
            data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat,
                    self.glt, self.ref1, self.bh.batno, self.trnamt, 0.00,
                    self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw,
                    0)
            self.sql.insRec("gentrn", data=data)

    def exitPage1(self):
        self.df.closeProcess()
        self.bh.doBatchTotal()
        self.opts["mf"].closeLoop()

    def doCoyNum(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("ctlmst",
                              cols=["ctm_name"],
                              where=[("ctm_cono", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Company, Missing"
        if self.incoac and w not in self.incoac:
            return "Invalid Company, No Intercompany Record 1"
        if w != self.opts["conum"]:
            acc = self.sql.getRec("genint",
                                  where=[("cti_cono", "=", w),
                                         ("cti_inco", "=", self.opts["conum"])
                                         ],
                                  limit=1)
            if not acc:
                return "Invalid Company, No Intercompany Record 2"
        self.allcoy = w

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

    def doDrsAcc(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("drsmst",
                              cols=["drm_name", "drm_stat"],
                              where=[("drm_cono", "=", self.allcoy),
                                     ("drm_chain", "=", self.chain),
                                     ("drm_acno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Account Number"
        if acc[1] == "X":
            return "Invalid Account, Redundant"
        self.dracno = w
        self.name = acc[0]
        self.df.loadEntry("C", pag, p + 1, data=self.name)
        self.allref = self.ref1
        while self.sql.getRec("drstrn",
                              cols=["drt_batch"],
                              where=[("drt_cono", "=", self.allcoy),
                                     ("drt_chain", "=", self.chain),
                                     ("drt_acno", "=", self.dracno),
                                     ("drt_type", "=", self.opts["rtn"]),
                                     ("drt_ref1", "=", self.allref)]):
            self.doGetAnotherRef()

    def doGetAnotherRef(self):
        tit = ("Duplicate Reference Number", )
        fld = ((("T", 0, 0, 0), "ONa", 9, "Old Reference", "", self.allref,
                "N", None, None, None, None),
               (("T", 0, 1, 0), "INa", 9, "New Reference", "", "", "N",
                self.doRefNew, None, None, ("notblank", )))
        tnd = ((self.doRefEnd, "n"), )
        txt = (self.doRefExit, )
        state = self.df.disableButtonsTags()
        self.tf = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=tnd,
                               txit=txt)
        self.tf.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)

    def doRefExit(self):
        self.tf.focusField("T", 0, 2)

    def doRefNew(self, frt, pag, r, c, p, i, w):
        self.allref = w

    def doRefEnd(self):
        self.tf.closeProcess()

    def doAllAmt(self, frt, pag, r, c, p, i, w):
        if w == 0:
            self.allamt = float(ASD(self.trnamt) - ASD(self.allocated))
            self.df.loadEntry(frt, pag, p, data=self.allamt)
        else:
            self.allamt = w

    def doDisAmt(self, frt, pag, r, c, p, i, w):
        if self.allamt < 0 and w > 0:
            ok = self.checkSign()
        elif self.allamt > 0 and w < 0:
            ok = self.checkSign()
        else:
            ok = "yes"
        if ok != "yes":
            return "Invalid Discount Amount (Sign Error)"
        self.disamt = w
        totamt = float(ASD(self.allamt) + ASD(self.disamt))
        self.df.loadEntry(frt, pag, p + 1, data=totamt)

    def checkSign(self):
        return askQuestion(self.opts["mf"].body, "Check Sign",
            "The Sign of the Discount Amount is not the same "\
            "as the Sign of the Receipt Amount, Is This Correct?")

    def endPage2(self):
        self.amt = float(ASD(0) - ASD(self.allamt))
        self.dis = float(ASD(0) - ASD(self.disamt))
        state = self.df.disableButtonsTags()
        self.opts["mf"].updateStatus("Choose an Ageing Option")
        for x in range(4, 8):
            wid = getattr(self.df, "B%s" % x)
            self.df.setWidget(wid, "normal")
        self.agevar.set(True)
        self.df.mstFrame.wait_variable(self.agevar)
        self.df.enableButtonsTags(state=state)
        if self.agecan:
            self.doCancel()
            return
        # Debtors Ledger Transaction
        data = [
            self.allcoy, self.chain, self.dracno, self.opts["rtn"],
            self.allref, self.bh.batno, self.trndat, "", self.amt, 0.00,
            self.curdt, self.trndet, "", "N", self.opts["capnm"], self.sysdtw,
            0
        ]
        self.sql.insRec("drstrn", data=data)
        if self.dis:
            data = [
                self.allcoy, self.chain, self.dracno, 6, self.allref,
                self.bh.batno, self.trndat, "", self.dis, 0.00, self.curdt,
                self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("drstrn", data=data)
        self.allocated = float(ASD(self.allocated) + ASD(self.allamt))
        if self.glint == "Y":
            # General Ledger Control Transaction (Debtors)
            amt = float(ASD(self.amt) + ASD(self.dis))
            data = (self.allcoy, self.drsctl, self.curdt, self.trndat,
                    self.glt, self.allref, self.bh.batno, amt, 0.00,
                    self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw,
                    0)
            self.sql.insRec("gentrn", data=data)
            # General Ledger Control Transaction (Discount)
            if self.disamt:
                data = (self.allcoy, self.dis_all, self.curdt, self.trndat,
                        self.glt, self.allref, self.bh.batno, self.disamt,
                        0.00, self.trndet, "N", "", 0, self.opts["capnm"],
                        self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)
            # General Ledger Transaction (Intercompany)
            if self.allcoy != self.opts["conum"]:
                # General Ledger Transaction (Intercompany From)
                acc = self.sql.getRec("genint",
                                      cols=["cti_acno"],
                                      where=[("cti_cono", "=",
                                              self.opts["conum"]),
                                             ("cti_inco", "=", self.allcoy)],
                                      limit=1)[0]
                data = (self.opts["conum"], acc, self.curdt, self.trndat,
                        self.glt, self.allref, self.bh.batno, self.amt, 0.00,
                        self.trndet, "N", "", 0, self.opts["capnm"],
                        self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)
                # General Ledger Transaction (Intercompany To)
                acc = self.sql.getRec("genint",
                                      cols=["cti_acno"],
                                      where=[("cti_cono", "=", self.allcoy),
                                             ("cti_inco", "=",
                                              self.opts["conum"])],
                                      limit=1)[0]
                amt = float(ASD(0) - ASD(self.amt))
                data = (self.allcoy, acc, self.curdt, self.trndat, self.glt,
                        self.allref, self.bh.batno, amt, 0.00, self.trndet,
                        "N", "", 0, self.opts["capnm"], self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)
        if self.allocated == self.trnamt:
            self.opts["mf"].dbm.commitDbase()
            self.df.clearFrame("C", 2)
            self.df.selPage("Deposit")
            self.df.advanceLine(1)
        else:
            bal = float(ASD(self.trnamt) - ASD(self.allocated))
            self.df.loadEntry("T", 2, 0, data=bal)
            self.df.advanceLine(2)

    def doAgeNormal(self):
        self.doAgeing("N")

    def doAgeHistory(self):
        self.doAgeing("H")

    def doAgeAuto(self):
        self.doAgeing("O")

    def doAgeCurrent(self):
        self.doAgeing("C")

    def doAgeing(self, atype):
        # Disable All Ageing Buttons
        for x in range(4, 8):
            wid = getattr(self.df, "B%s" % x)
            self.df.setWidget(wid, "disabled")
        self.opts["mf"].updateStatus("Select Transaction to Allocate Against")
        age = AgeAll(self.opts["mf"],
                     system="drs",
                     agetyp=atype,
                     agekey=[
                         self.allcoy, self.chain, self.dracno,
                         self.opts["rtn"], self.allref, self.curdt, self.amt,
                         self.dis
                     ])
        self.agecan = age.cancel
        self.agevar.set(False)

    def doCancel(self):
        if self.agecan:
            ok = "yes"
        else:
            ok = askQuestion(
                self.opts["mf"].body,
                head="Cancel",
                mess="Are You Certain You Want to Cancel This Entry?")
        if ok == "yes":
            self.opts["mf"].dbm.rollbackDbase()
            if self.batupd:
                self.updateBatch(rev=True)
            self.df.clearFrame("C", 2)
            self.df.selPage("Deposit")
            row = int((self.df.last[1][1] - 1) / self.df.colq[1])
            col = (row * self.df.colq[1]) + 1
            self.df.focusField("C", 1, col)

    def exitPage2(self):
        self.df.focusField("C", 2, self.df.col)

    def updateBatch(self, rev=False):
        if rev:
            self.bh.batqty = self.bh.batqty - 1
            self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt))
        else:
            self.batupd = True
            self.bh.batqty = self.bh.batqty + 1
            self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt))
        self.df.loadEntry("T", 0, 0, data=self.bh.batqty)
        self.df.loadEntry("T", 0, 1, data=self.bh.batval)

    def queryDrs(self):
        callModule(self.opts["mf"],
                   self.df,
                   "dr4010",
                   coy=(self.opts["conum"], self.opts["conam"]),
                   period=None,
                   user=self.opts["capnm"])

    def maintainDrs(self):
        callModule(self.opts["mf"],
                   self.df,
                   "dr1010",
                   coy=(self.opts["conum"], self.opts["conam"]),
                   period=None,
                   user=self.opts["capnm"])
Пример #26
0
class ms1040(object):
    def __init__(self, **opts):
        self.opts = opts
        if "args" in opts:
            self.code = opts["args"]
        else:
            self.code = None
        if self.setVariables():
            self.mainProcess()
            if self.code:
                self.df.doKeyPressed("T", 0, 0, self.code)
            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", "ctlvrf", "ctlvtf",
            "chglog"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        if not self.code:
            gc = GetCtl(self.opts["mf"])
            ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
            if not ctlmst:
                return
            if not ctlmst["ctm_taxno"]:
                showError(self.opts["mf"].body, "Unregistered",
                    "The Company Record Does Not Have a V.A.T. Number")
                return
        return True

    def mainProcess(self):
        vtm = {
            "stype": "R",
            "tables": ("ctlvmf",),
            "cols": (
                ("vtm_code", "", 0, "C"),
                ("vtm_desc", "", 0, "Description", "Y"),
                ("vtm_cat", "", 0, "C")),
            "where": [("vtm_cono", "=", self.opts["conum"])]}
        vtr = {
            "stype": "R",
            "tables": ("ctlvrf",),
            "cols": (
                ("vtr_date", "", 0, "Start-Date"),
                ("vtr_rate", "", 0, "Rate")),
            "where": [("vtr_cono", "=", self.opts["conum"])],
            "whera": [["T", "vtr_code", 0, 0]]}
        vtt = {
            "stype": "C",
            "titl": "VAT Types",
            "head": ("C", "Description"),
            "data": [
                ["N", "None"],
                ["S", "Standard"],
                ["Z", "Zero Rated"],
                ["C", "Capital Item"],
                ["X", "Excluded Item"]]}
        fld = (
            (("T",0,0,0),"IUA",1,"V.A.T. Code","",
                "","Y",self.doCode,vtm,None,("notblank",)),
            (("T",0,1,0),"INA",30,"Description","",
                "","N",self.doDesc,None,self.doDelete,("notblank",)),
            (("T",0,2,0),"IUA",1,"Category","",
                "S","N",self.doCat,vtt,None,("in", ("C","N","S","X","Z"))),
            (("C",0,0,0),"Id1",10,"Start-Date","The Starting Date",
                "","N",self.doStart,vtr,None,("efld",)),
            (("C",0,0,1),"IUD",6.2,"Rate-%","The Rate",
                "","N",self.doRate,None,None,("efld",)))
        but = (
            ("Print",None,self.doPrint,0,("T",0,1),(("T",0,0),("T",0,2))),
            ("Add",None,self.doAdd,0,("T",0,0),None),
            ("Edit",None,self.doEdit,0,("T",0,0),None),
            ("Exit",None,self.doExit,0,("T",0,0),(("T",0,1),("C",0,1))))
        tnd = ((self.doTEnd,"y"), )
        txt = (self.doTExit, )
        cnd = ((self.doCEnd,"y"), )
        cxt = (self.doCExit, )
        self.df = TartanDialog(self.opts["mf"], eflds=fld,
            butt=but, tend=tnd, txit=txt, cend=cnd, cxit=cxt, rows=(15,))

    def doPrint(self):
        hds = "V.A.T. Records"
        col = [
            ["vtm_code", "UA",  1,   "C"],
            ["vtm_desc", "NA", 30,   "Description"],
            ["vtm_cat", "UA",   1,   "T"],
            ["vtr_date", "d1", 10,   "Start-Date"],
            ["vtr_rate", "UD",  6.2, "Rate"]]
        recs = self.sql.getRec(tables=["ctlvmf", "ctlvrf"], cols=["vtm_code",
            "vtm_desc", "vtm_cat", "vtr_date", "vtr_rate"], where=[("vtm_cono",
            "=", self.opts["conum"]), ("vtr_cono=vtm_cono",),
            ("vtr_code=vtm_code",)], order="vtm_code, vtr_date")
        code = None
        data = copyList(recs)
        for num, rec in enumerate(recs):
            if rec[0] == code:
                data[num][0] = ""
                data[num][1] = ""
                data[num][2] = ""
            code = rec[0]
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        RepPrt(self.opts["mf"], name=self.__class__.__name__, tables=data,
            heads=[hds], ttype="D", cols=col, prtdia=(("Y","V"), ("Y","N")))
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField("T", 0, 1)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.oldm = self.sql.getRec("ctlvmf", where=[("vtm_cono", "=",
            self.opts["conum"]), ("vtm_code", "=", self.code)], limit=1)
        if not self.oldm:
            self.newm = True
        else:
            self.newm = False
            self.desc = self.oldm[self.sql.ctlvmf_col.index("vtm_desc")]
            self.df.loadEntry(frt, pag, p+1, data=self.desc)
            self.cat = self.oldm[self.sql.ctlvmf_col.index("vtm_cat")]
            self.df.loadEntry(frt, pag, p+2, data=self.cat)
            self.doLoadRates()
            return "ff2"

    def doDelete(self):
        if self.df.frt == "T":
            if self.doCheckTrn():
                showError(self.opts["mf"].body, "Exists",
                    "Transactions Exist for this Code, Not Deleted")
                return
            self.sql.delRec("ctlvmf", where=[("vtm_cono", "=",
                self.opts["conum"]), ("vtm_code", "=", self.code)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            self.sql.insRec("chglog", data=["ctlvmf", "D", "%03i%-1s" % \
                (self.opts["conum"], self.code), "", dte, self.opts["capnm"],
                "", "", "", 0])
            self.sql.delRec("ctlvrf", where=[("vtr_cono", "=",
                self.opts["conum"]), ("vtr_code", "=", self.code)])
            self.opts["mf"].dbm.commitDbase()

    def doDesc(self, frt, pag, r, c, p, i, w):
        self.desc = w

    def doCat(self, frt, pag, r, c, p, i, w):
        self.cat = w

    def doTEnd(self):
        self.edit = False
        datm = [self.opts["conum"]]
        datm.extend(self.df.t_work[0][0][:3])
        if self.newm:
            self.sql.insRec("ctlvmf", data=datm)
            if self.cat in ("N", "X", "Z"):
                newr = [self.opts["conum"], self.code, 0, 0]
                self.sql.insRec("ctlvrf", data=newr)
                self.opts["mf"].dbm.commitDbase()
                self.df.focusField("T", 0, 1)
            else:
                self.doButtons()
                self.df.focusField("C", 0, 1)
        elif self.cat in ("N", "X", "Z"):
            self.df.focusField("T", 0, 1)
        elif datm != self.oldm[:len(datm)]:
            col = self.sql.ctlvmf_col
            datm.append(self.oldm[col.index("vtm_xflag")])
            self.sql.updRec("ctlvmf", data=datm, where=[("vtm_cono", "=",
                self.opts["conum"]), ("vtm_code", "=", self.code)])
            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=["ctlvmf",
                    "U", "%03i%-1s" % (self.opts["conum"], self.code),
                    col[num], dte, self.opts["capnm"], str(dat),
                    str(datm[num]), "", 0])
            self.doButtons()
        self.opts["mf"].dbm.commitDbase()

    def doTExit(self):
        chks = ""
        recs = self.sql.getRec("ctlvmf", where=[("vtm_cono", "=",
            self.opts["conum"])])
        for rec in recs:
            rte = self.sql.getRec("ctlvrf", where=[("vtr_cono",
                "=", self.opts["conum"]), ("vtr_code", "=", rec[1])])
            if not rte:
                if rec[3] in ("N", "X", "Z"):
                    self.sql.insRec("ctlvrf", data=[rec[0], rec[1], 0, 0])
                    self.opts["mf"].dbm.commitDbase()
                    continue
                chks = "%s\n%1s %-30s %1s" % (chks, rec[1], rec[2], rec[3])
        if chks:
            showError(self.opts["mf"].body, "Missing Rate Record", "The "\
                "following VAT Codes do Not have Rate Records:\n%s\n\n"\
                "You will Not be able to Exit until you either Create "\
                "Rate Records or Delete these codes." % chks)
            self.df.focusField("T", 0, 1)
        else:
            self.df.closeProcess()
            if "wait" not in self.opts:
                self.opts["mf"].closeLoop()

    def doAdd(self):
        for num, rec in enumerate(self.df.c_work[0]):
            if not rec[0] and not rec[1]:
                pos = (num * 2) + 1
                self.df.focusField("C", 0, pos)
                break

    def doEdit(self):
        self.edit = True
        self.newr = False
        tit = "Edit Rate"
        vtr = {
            "stype": "R",
            "tables": ("ctlvrf",),
            "cols": (
                ("vtr_date", "", 0, "Start-Date"),
                ("vtr_rate", "", 0, "Rate")),
            "where": [
                ("vtr_cono", "=", self.opts["conum"]),
                ("vtr_code", "=", self.code)]}
        fld = (
            (("T",0,0,0),"OUA",1,"V.A.T. Code"),
            (("T",0,1,0),"ONA",30,"Description"),
            (("T",0,2,0),"OUA",1,"Category"),
            (("T",0,3,0),"Id1",10,"Start-Date","The Starting Date",
                "","N",self.doEStart,vtr,self.doEDelete,("efld",)),
            (("T",0,4,0),"IUD",6.2,"Rate-%","The Rate",
                "","N",self.doERate,None,self.doEDelete,("notzero",)))
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        self.ed = TartanDialog(self.opts["mf"], title=tit, tops=True,
            eflds=fld, tend=((self.doEEnd,"n"),), txit=(self.doEExit,))
        self.ed.loadEntry("T", 0, 0, data=self.code)
        self.ed.loadEntry("T", 0, 1, data=self.desc)
        self.ed.loadEntry("T", 0, 2, data=self.cat)
        self.ed.mstFrame.wait_window()
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)
        if self.exit:
            self.df.focusField("T", 0, 1)
        else:
            self.doExit()

    def doEDelete(self):
        self.exit = False
        if self.ed.pos == 3:
            if self.doCheckTrn():
                return ("T", 0, 4, "Transactions Exist, Not Deleted")
            self.sql.delRec("ctlvmf", where=[("vtm_cono", "=",
                self.opts["conum"]), ("vtm_code", "=", self.code)])
            self.sql.delRec("ctlvrf", where=[("vtr_cono", "=",
                self.opts["conum"]), ("vtr_code", "=", self.code)])
        else:
            if self.doCheckTrn(self.start):
                return ("T", 0, 5, "Transactions Exist, Not Deleted")
            self.sql.delRec("ctlvrf", where=[("vtr_cono", "=",
                self.opts["conum"]), ("vtr_code", "=", self.code),
                ("vtr_date", "=", self.start)])
        self.ed.closeProcess()
        chk = self.sql.getRec("ctlvrf", cols=["count(*)"],
            where=[("vtr_cono", "=", self.opts["conum"]),
            ("vtr_code", "=", self.code)], limit=1)
        if not chk[0]:
            self.sql.delRec("ctlvmf", where=[("vtm_cono", "=",
                self.opts["conum"]), ("vtm_code", "=", self.code)])
            self.exit = True
        self.opts["mf"].dbm.commitDbase()
        return "nf"

    def doEStart(self, frt, pag, r, c, p, i, w):
        self.oldr = self.sql.getRec("ctlvrf", where=[("vtr_cono",
            "=", self.opts["conum"]), ("vtr_code", "=", self.code),
            ("vtr_date", "=", w)], limit=1)
        if not self.oldr:
            return "Date Does Not Exist"
        if self.doCheckTrn(w):
            showError(self.opts["mf"].body, "Date Error",
                "Transactions Exist for Date, Editing Not Allowed.")
            return "Invalid Date"
        self.start = w
        self.rate = self.oldr[3]
        self.ed.loadEntry(frt, pag, p+1, data=self.rate)

    def doERate(self, frt, pag, r, c, p, i, w):
        if not w:
            yes = askQuestion(self.opts["mf"].body, "Zero Rate",
                "Are You Sure That This Rate is Correct?", default="no")
            if yes == "no":
                return "Invalid Rate"
        self.rate = w

    def doEEnd(self):
        self.ed.closeProcess()
        self.doCEnd()

    def doEExit(self):
        self.ed.closeProcess()

    def doStart(self, frt, pag, r, c, p, i, w):
        if self.doCheckTrn(w):
            showError(self.opts["mf"].body, "Date Error",
                "Transactions Exist On or After This Starting Date.")
            return "Invalid Date"
        self.start = w
        self.oldr = self.sql.getRec("ctlvrf", where=[("vtr_cono",
            "=", self.opts["conum"]), ("vtr_code", "=", self.code),
            ("vtr_date", "=", self.start)], limit=1)
        if not self.oldr:
            self.newr = True
            if self.cat in ("N", "X", "Z"):
                if self.edit:
                    self.ed.loadEntry(frt, pag, p+1, data=0)
                else:
                    self.df.loadEntry(frt, pag, p+1, data=0)
                return "nd"
        else:
            self.newr = False
            if self.edit:
                self.ed.loadEntry(frt, pag, p+1,
                    data=self.oldr[self.sql.ctlvrf_col.index("vtr_rate")])
            else:
                self.df.loadEntry(frt, pag, p+1,
                    data=self.oldr[self.sql.ctlvrf_col.index("vtr_rate")])

    def doRate(self, frt, pag, r, c, p, i, w):
        if not w:
            yes = askQuestion(self.opts["mf"].body, "Zero Rate",
                "Are You Sure That This Rate is Correct?", default="no")
            if yes == "no":
                return "Invalid Rate"
        self.rate = w

    def doCheckTrn(self, date=None):
        where = [
            ("vtt_cono", "=", self.opts["conum"]),
            ("vtt_code", "=", self.code)]
        if date:
            where.append(("vtt_refdt", ">=", date))
        return self.sql.getRec("ctlvtf", cols=["count(*)"],
            where=where, limit=1)[0]

    def doCEnd(self):
        datr = [self.opts["conum"], self.code, self.start, self.rate]
        if self.newr:
            self.sql.insRec("ctlvrf", data=datr)
        elif datr != self.oldr[:len(datr)]:
            col = self.sql.ctlvrf_col
            datr.append(self.oldr[col.index("vtr_xflag")])
            self.sql.updRec("ctlvrf", data=datr, where=[("vtr_cono", "=",
                self.opts["conum"]), ("vtr_code", "=", self.code),
                ("vtr_date", "=", self.start)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.oldr):
                if dat != datr[num]:
                    self.sql.insRec("chglog", data=["ctlvrf", "U",
                        "%03i%-1s" % (self.opts["conum"], self.code),
                        col[num], dte, self.opts["capnm"], str(dat),
                        str(datr[num]), "", 0])
        self.opts["mf"].dbm.commitDbase()
        self.edit = False
        self.doExit()

    def doCExit(self):
        self.edit = False
        self.doExit()

    def doLoadRates(self):
        self.df.clearFrame("C", 0)
        recs = self.sql.getRec("ctlvrf",
            cols=["vtr_date", "vtr_rate"],
            where=[("vtr_cono", "=", self.opts["conum"]),
            ("vtr_code", "=", self.code)], order="vtr_date")
        for num, rec in enumerate(recs):
            pos = (num * 2)
            if pos > 27:
                self.df.scrollScreen(0)
                pos = 26
            self.df.focusField("C", 0, pos + 1)
            self.df.loadEntry("C", 0, pos, data=rec[0])
            self.df.focusField("C", 0, pos + 2)
            self.df.loadEntry("C", 0, pos + 1, data=rec[1], zero=True)

    def doButtons(self):
        self.df.setWidget(self.df.B1, "normal")
        self.df.setWidget(self.df.B2, "normal")
        self.df.setWidget(self.df.B3, "normal")
        self.opts["mf"].window.focus_set()

    def doExit(self):
        self.df.setWidget(self.df.B3, "disabled")
        self.df.focusField("T", 0, 1)
Пример #27
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()
Пример #28
0
class cr4010(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, ["crsmst", "crstrn", "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.fromad = crsctl["ctc_emadd"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.curdt = int(self.sysdtw / 100)
        self.paidup = "N"
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
            "Creditors Interrogation (%s)" % self.__class__.__name__)
        crm = {
            "stype": "R",
            "tables": ("crsmst",),
            "cols": (
                ("crm_acno", "", 0, "Acc-Num"),
                ("crm_name", "", 0, "Name", "Y")),
            "where": [("crm_cono", "=", self.opts["conum"])]}
        tag = (
            ("Basic-_A", self.doTagSelect, ("T",0,2), ("T",0,1)),
            ("Basic-_B", self.doTagSelect, ("T",0,2), ("T",0,1)),
            ("Balances", self.doTagSelect, ("T",0,2), ("T",0,1)),
            ("History", self.doTagSelect, ("T",0,2), ("T",0,1)),
            ("Trans", self.doTrans1, ("T",0,2), ("T",0,1)),
            ("Orders", self.doOrders, ("T",0,2), ("T",0,1)))
        r1s = (("No","N"),("Yes","Y"))
        fld = (
            (("T",0,0,0),"INA",7,"Acc-Num","Account Number",
                "","N",self.doAccNum,crm,None,None),
            (("T",0,0,0),"ONA",30,"Name"),
            (("T",1,0,0),"ONA",30,"Address Line 1"),
            (("T",1,1,0),"ONA",30,"Address Line 2"),
            (("T",1,2,0),"ONA",30,"Address Line 3"),
            (("T",1,3,0),"ONA",4,"Postal Code"),
            (("T",1,4,0),"ONA",20,"Telephone"),
            (("T",1,5,0),"ONA",20,"Fax"),
            (("T",1,6,0),"ONA",30,"Manager"),
            (("T",1,6,0),"OTX",30,"E-Mail"),
            (("T",1,7,0),"ONA",30,"Accounts"),
            (("T",1,7,0),"OTX",30,"E-Mail"),
            (("T",1,8,0),"ONA",30,"Orders"),
            (("T",1,8,0),"OTX",30,"E-Mail"),
            (("T",1,9,0),"Od1",10,"Date Opened"),
            (("T",1,10,0),"ONA",10,"V.A.T. Number"),
            (("T",2,0,0),"OUA",1,"Terms Base"),
            (("T",2,1,0),"OUI",2,"Statement Day"),
            (("T",2,2,0),"OUI",3,"Terms"),
            (("T",2,3,0),"OUI",5,"Credit Limit"),
            (("T",2,4,0),"OUD",5.2,"Trade Discount"),
            (("T",2,5,0),"OUD",5.2,"Settlement Discount"),
            (("T",2,6,0),"OUA",1,"Payment Indicator"),
            (("T",2,7,0),"OUA",20,"Bank Name"),
            (("T",2,8,0),"OUI",8,"Bank Branch"),
            (("T",2,9,0),"OUA",16,"Bank Account"),
            (("T",2,10,0),"OUI",7,"G/L Account"),
            (("T",2,11,0),"OUA",1,"Status"),
            (("T",3,0,0),"Od1",10,"Date Last Purchased"),
            (("T",3,1,0),"Od1",10,"Date Last Paid"),
            (("T",3,2,0),"OSD",13.2,"Total Balance"),
            (("T",3,3,0),"OSD",13.2,"Current"),
            (("T",3,4,0),"OSD",13.2,"30 Days"),
            (("T",3,5,0),"OSD",13.2,"60 Days"),
            (("T",3,6,0),"OSD",13.2,"90 Days"),
            (("T",3,7,0),"OSD",13.2,"120 Days"),
            (("C",4,0,0),"OSD",13.2,"Purchases","","","N",
                None,None,None,None,("Months",13)),
            (("C",4,0,1),"OSD",13.2,"Payments"),
            (("T",5,0,0),("IRB",r1s),0,"History", "",
                "N","N",self.doTrans2,None,None,None))
        but = (
            ("Clear",None,self.doClear,0,("T",0,0),("T",0,1)),
            ("Notes",None,self.doNotes,0,("T",0,0),("T",0,1)),
            ("Print",None,self.doPrint,0,("T",0,0),("T",0,1)),
            ("Quit",None,self.doExit,1,None,None))
        tnd = ((self.doEndTop, "N"), None, None, None, None, None)
        txt = (self.doExit, None, None, None, None, self.doExit)
        self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag,
            eflds=fld, butt=but, tend=tnd, txit=txt)
        yer = int(self.sysdtw / 10000)
        mon = int((self.sysdtw % 10000) / 100)
        self.hist_tit = []
        for x in range(1, 14):
            if x == 13:
                txt = "Last 12 Month Total"
                self.df.colLabel[4][x-1].configure(text=txt)
                self.hist_tit.append(txt)
            else:
                nam = mthnam[mon][1]
                nam = nam + (" " * (15-len(nam))) + str(yer)
                self.df.colLabel[4][x-1].configure(text=nam)
                self.hist_tit.append(nam)
            if x != 13:
                mon = mon - 1
                if mon == 0:
                    mon = mon + 12
                    yer = yer - 1

    def doAccNum(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("crsmst", where=[("crm_cono", "=",
            self.opts["conum"]), ("crm_acno", "=", w)], limit=1)
        if not acc:
            return "Invalid Account Number"
        self.acno = w
        self.name = acc[self.sql.crsmst_col.index("crm_name")]
        self.df.loadEntry("T",0, 1, data=self.name)
        seq = 3
        for x in range(0, self.df.topq[1]):
            self.df.loadEntry("T", 1, x, data=acc[seq])
            seq += 1
        for x in range(0, self.df.topq[2]):
            self.df.loadEntry("T", 2, x, data=acc[seq])
            seq += 1
        self.loadBalances()
        self.opts["mf"].updateStatus("")

    def doEndTop(self):
        self.df.last[0] = [0, 0]
        self.df.setWidget(self.df.topEntry[0][0], state="disabled")

    def loadBalances(self):
        bals = Balances(self.opts["mf"], "CRS", self.opts["conum"],
            int(self.sysdtw / 100), (self.acno,))
        obal, tbal, ages = bals.doAllBals()
        this, hist = bals.doCrsDrsHist()
        self.purch = hist[0]
        self.pays = hist[1]
        last = self.sql.getRec("crstrn", cols=["max(crt_trdt)"],
            where=[("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=",
            self.acno), ("crt_type", "=", 1)], limit=1)
        if not last or not last[0]:
            lastpurd = 0
        else:
            lastpurd = last[0]
        last = self.sql.getRec("crstrn", cols=["max(crt_trdt)"],
            where=[("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=",
            self.acno), ("crt_type", "=", 5)], limit=1)
        if not last or not last[0]:
            lastpayd = 0
        else:
            lastpayd = last[0]
        for x in range(0, 8):
            if x == 0:
                data = lastpurd
            elif x == 1:
                data = lastpayd
            elif x == 2:
                data = tbal
            else:
                data = ages[x-3]
            self.df.loadEntry("T", 3, x, data=data)
        p = 0
        for x in range(0, 13):
            i = 0
            self.df.loadEntry("C", 4, p, data=self.purch[x])
            p = p + 1
            i = i + 1
            pay = float(ASD(0) - ASD(self.pays[x]))
            self.df.loadEntry("C", 4, p, data=pay)
            p = p + 1
            i = i + 1

    def doTagSelect(self):
        self.opts["mf"].updateStatus("")

    def doTrans1(self):
        self.df.focusField("T", 5, 1)

    def doTrans2(self, frt, pag, r, c, p, i, w):
        self.paidup = w
        whr = [
            ("crt_cono", "=", self.opts["conum"]),
            ("crt_acno", "=", self.acno)]
        if self.paidup == "Y":
            col, recs = getTrn(self.opts["mf"].dbm, "crs", whr=whr)
        else:
            col, recs = getTrn(self.opts["mf"].dbm, "crs", dte=self.curdt,
                whr=whr)
        if recs:
            data = []
            for dat in recs:
                data.append([
                    dat[col.index("crt_trdt")],
                    dat[col.index("crt_curdt")],
                    dat[col.index("crt_batch")],
                    dat[col.index("crt_type")],
                    dat[col.index("crt_ref1")],
                    dat[col.index("crt_tramt")],
                    dat[col.index("paid")],
                    dat[col.index("balance")],
                    dat[col.index("crt_desc")]])
            tit = "Transactions for Account: %s - %s" % (self.acno, self.name)
            col = (
                ("crt_trdt", "Date", 10, "D1", "N"),
                ("crt_curdt", "Curr-Dt", 7, "D2", "N"),
                ("crt_batch", "Batch", 7, "Na", "N"),
                ("crt_type", "Typ", 3, ("XX", crtrtp), "N"),
                ("crt_ref1", "Reference", 9, "Na", "Y"),
                ("crt_tramt", "Amount", 13.2, "SD", "N"),
                ("alloc", "Allocated", 13.2, "SD", "N"),
                ("balan", "Balance", 13.2, "SD", "N"),
                ("crt_desc", "Details", 30, "NA", "N"))
            state = self.df.disableButtonsTags()
            while True:
                rec = SelectChoice(self.df.nb.Page4, tit, col, data)
                # Display all transaction details
                if rec.selection:
                    self.df.setWidget(self.df.mstFrame, state="hide")
                    whr = [
                        ("crt_cono", "=", self.opts["conum"]),
                        ("crt_acno", "=", self.acno),
                        ("crt_type", "=", rec.selection[4]),
                        ("crt_ref1", "=", rec.selection[5])]
                    TabPrt(self.opts["mf"], tabs="crstrn", where=whr,
                        pdia=False)
                    self.df.setWidget(self.df.mstFrame, state="show")
                else:
                    break
            self.df.enableButtonsTags(state=state)
        self.doTrans1()

    def doOrders(self):
        col = self.sql.strpom_col
        whr = [
            ("pom_cono", "=", self.opts["conum"]),
            ("pom_acno", "=", self.acno),
            ("pom_delno", "<>", "cancel"),
            ("pom_deldt", "=", 0)]
        recs = self.sql.getRec("strpom", where=whr, order="pom_date")
        if recs:
            data = []
            for dat in recs:
                data.append([
                    dat[col.index("pom_date")],
                    dat[col.index("pom_ordno")],
                    dat[col.index("pom_cusord")],
                    dat[col.index("pom_jobnum")],
                    dat[col.index("pom_contact")]])
            tit = "Orders for Account: %s - %s" % (self.acno, self.name)
            col = (
                ("pom_date", "   Date", 10, "D1", "N"),
                ("pom_ordno", "Doc-Numbr", 9, "UI", "N"),
                ("pom_cusord", "Cust-Ord-Num", 15, "Na"),
                ("pom_jobnum", "Job-Num", 7, "Na"),
                ("pom_contact", "Contact", 30, "NA"))
            state = self.df.disableButtonsTags()
            while True:
                rec = SelectChoice(self.df.nb.Page6, tit, col, data)
                # Attempt to display the document
                if rec.selection:
                    self.df.setWidget(self.df.mstFrame, state="hide")
                    try:
                        doc = int(rec.selection[2])
                        PrintOrder(self.opts["mf"], self.opts["conum"],
                            self.opts["conam"], doc, repprt=["N", "V",
                            "view"], copy="y")
                    except:
                        pass
                    self.df.setWidget(self.df.mstFrame, state="show")
                else:
                    break
            self.df.enableButtonsTags(state=state)

    def doNotes(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"],
            self.opts["capnm"], "CRS", self.acno)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

    def doClear(self):
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)

    def doPrint(self):
        mess = "Select the Required Print Option."
        butt = (
            ("Information", "I"),
            ("Transactions", "T"),
            ("Both", "B"),
            ("None", "N"))
        self.doPrintOption(askChoice(self.opts["mf"].body, "Print Options",
            mess, butt=butt))
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPrintOption(self, opt):
        if opt == "N":
            return
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        if opt in ("I", "B"):
            table = "crsmst"
            whr = [
                ("crm_cono", "=", self.opts["conum"]),
                ("crm_acno", "=", self.acno)]
            rp = TabPrt(self.opts["mf"], self.opts["conum"], self.opts["conam"],
                name=self.__class__.__name__, tabs=table, where=whr,
                keys=[self.acno])
            repprt = rp.repprt
            repeml = rp.repeml
            xits = rp.xits
        else:
            repprt = None
            repeml = None
            xits = False
        if opt in ("T", "B") and not xits:
            heads = ["Creditor's Transactions",
                "Account: %s  Name: %s" % (self.acno, self.name)]
            whr = [
                ("crt_cono", "=", self.opts["conum"]),
                ("crt_acno", "=", self.acno)]
            if self.paidup == "Y":
                col, recs = getTrn(self.opts["mf"].dbm, "crs", whr=whr)
            else:
                col, recs = getTrn(self.opts["mf"].dbm, "crs",
                    dte=self.curdt, whr=whr)
            cols = []
            data = []
            dic = self.sql.crstrn_dic
            for num, rec in enumerate(recs):
                dat = []
                for nam in ["crt_ref1", "crt_trdt", "crt_type",
                        "crt_tramt", "paid", "balance", "crt_desc"]:
                    if not num:
                        if nam == "paid":
                            cols.append(["paid", "SD", 13.2, "Paid"])
                        elif nam == "balance":
                            cols.append(["balance", "SD", 13.2, "Balance"])
                        else:
                            cols.append([nam, dic[nam][2], dic[nam][3],
                                dic[nam][5]])
                    dat.append(rec[col.index(nam)])
                data.append(dat)
            if repprt:
                prtdia = False
            else:
                prtdia = (("Y","V"),("Y","N"))
            rp = RepPrt(self.opts["mf"], conum=self.opts["conum"],
                conam=self.opts["conam"], name=self.__class__.__name__,
                ttype="D", tables=data, heads=heads, cols=cols,
                trtp=["crt_type", crtrtp], prtdia=prtdia, repprt=repprt,
                repeml=repeml, fromad=self.fromad)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.enableButtonsTags(state=state)

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

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["memmst", "memtrn", "memage"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.curdt = int(self.sysdtw / 100)
        self.agevar = tk.BooleanVar()
        self.agevar.set(False)
        return True

    def dataHeader(self):
        mlm = {
            "stype":
            "R",
            "tables": ("memmst", ),
            "cols":
            (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"),
             ("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",
            "sort":
            False
        }
        fld = ((("T", 0, 0, 0), "IUI", 6, "Mem-No", "Member Number", "", "Y",
                self.doMemNo, mlm, None, ("notblank", )),
               (("T", 0, 0, 0), "ONA", 30, "Member"))
        tnd = ((self.endTop, "n"), )
        txt = (self.exitTop, )
        self.but = (("Normal", None, self.doReAgeNormal, 0, None, None,
                     "Only Show Unallocated Transactions"),
                    ("History", None, self.doReAgeHistory, 0, None, None,
                     "Show All Transactions, Including Already Allocated"))
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               butt=self.but)

    def doMemNo(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("memmst",
                              cols=["mlm_title", "mlm_initial", "mlm_surname"],
                              where=[("mlm_cono", "=", self.opts["conum"]),
                                     ("mlm_memno", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Member Number"
        self.memno = w
        self.key = None
        name = "%s, %s %s" % (acc[2], acc[0], acc[1])
        self.df.loadEntry(frt, pag, p + 1, data=name)
        self.opts["mf"].updateStatus("Select Routine")
        for b in range(2):
            wid = getattr(self.df, "B%s" % b)
            self.df.setWidget(wid, "normal")
        self.df.setWidget(self.df.B0, "focus")
        self.agevar.set(True)
        self.df.mstFrame.wait_variable(self.agevar)
        if self.key in ("normal", "history"):
            return "nd"
        elif self.key == "cancel":
            return "nc"

    def doReAgeNormal(self):
        self.key = "normal"
        self.doReAge()

    def doReAgeHistory(self):
        self.key = "history"
        self.doReAge()

    def doReAge(self):
        self.opts["mf"].updateStatus("")
        for b in range(2):
            wid = getattr(self.df, "B%s" % b)
            self.df.setWidget(wid, "disabled")
        col = [
            "mlt_trdt", "mlt_refno", "mlt_type", "mlt_tramt", "paid", "balance"
        ]
        whr = [("mlt_cono", "=", self.opts["conum"]),
               ("mlt_memno", "=", self.memno)]
        if self.key == "normal":
            dtc, recs = getTrn(self.opts["mf"].dbm, "mem", whr=whr, zer="N")
        else:
            dtc, recs = getTrn(self.opts["mf"].dbm, "mem", whr=whr)
        if recs:
            data = []
            for rec in recs:
                dat = []
                for c in col:
                    dat.append(rec[dtc.index(c)])
                data.append(dat)
            age = AgeTrans(self.opts["mf"], "mem", data, 0, xits=False)
            if not age.ccl and age.data:
                if age.total.work:
                    while not age.ccl:
                        age.doAllocate()
                        if age.ccl or not age.total.work:
                            break
                if age.ccl:
                    self.key = "cancel"
                    age.data = []
                for tr in age.data:
                    if tr[6]:
                        w = copyList(whr)
                        w.extend([("mlt_type", "=", tr[2]),
                                  ("mlt_refno", "=", tr[1])])
                        self.sql.insRec("memage",
                                        data=[
                                            self.opts["conum"], self.memno,
                                            tr[2], tr[1], self.curdt, tr[2],
                                            tr[1], tr[6], 0
                                        ])
            else:
                self.key = "cancel"
        self.agevar.set(False)

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

    def exitTop(self):
        self.opts["mf"].dbm.commitDbase(ask=True)
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Пример #30
0
class sl4010(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, ["ctlynd", "wagmst", "waglmf",
            "wagltf"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        wagctl = gc.getCtl("wagctl", self.opts["conum"])
        if not wagctl:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2])
        # Get the current period starting date
        period = self.sql.getRec("ctlynd", cols=["max(cye_period)"],
            where=[("cye_cono", "=", self.opts["conum"])], limit=1)[0]
        self.opts["period"] = getPeriods(self.opts["mf"], self.opts["conum"],
            period)[0].work
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
            "Staff Loans Interrogation (%s)" % self.__class__.__name__)
        wgm = {
            "stype": "R",
            "tables": ("waglmf", "wagmst"),
            "cols": (
                ("wlm_empno", "", 0, "EmpNo"),
                ("wgm_sname", "", 0, "Surname", "Y"),
                ("wgm_fname", "", 0, "Names")),
            "where": [
                ("wlm_cono", "=", self.opts["conum"]),
                ("wgm_cono=wlm_cono",),
                ("wgm_empno=wlm_empno",)],
            "group": "wlm_empno"}
        lnm = {
            "stype": "R",
            "tables": ("waglmf",),
            "cols": (
                ("wlm_empno", "", 0, "EmpNo"),
                ("wlm_loan", "", 0, "Ln"),
                ("wlm_desc", "", 0, "Description", "Y")),
            "where": [("wlm_cono", "=", self.opts["conum"])],
            "whera": [["T", "wlm_empno", 0, 0]],
            "order": "wlm_empno, wlm_loan",
            "index": 1}
        r1s = (("Yes", "Y"), ("No", "N"))
        tag = (
            ("General", self.doGeneral, ("T",0,0), ("T",0,1)),
            ("Trans", self.doTrans1, ("T",0,0), ("T",0,1)))
        fld = (
            (("T",0,0,0),"IUI",5,"Emp-Num","Employee Number",
                "","N",self.doEmp,wgm,None,("notzero",)),
            (("T",0,0,0),"ONA",40,"Name"),
            (("T",0,1,0),"IUI",5,"Loan-Num","Loan Number",
                "","N",self.doLoan,lnm,None,("notzero",)),
            (("T",0,1,0),"ONA",40,"Desc"),
            (("T",1,0,0),"OUI",3,"Deduction Code"),
            (("T",1,1,0),"OUD",6.2,"Interest Percentage"),
            (("T",1,2,0),"OD1",10,"Start Date"),
            (("T",1,3,0),"OSD",13.2,"Deduction Amount"),
            (("T",1,4,0),"OSD",13.2,"Total Advances"),
            (("T",1,5,0),"OSD",13.2,"Total Interest"),
            (("T",1,6,0),"OSD",13.2,"Total Repayments"),
            (("T",1,7,0),"OSD",13.2,"Total Adjustments"),
            (("T",1,8,0),"OSD",13.2,"Balance"),
            (("T",1,9,0),"Od1",10,"Last Interest Raised"),
            (("T",1,10,0),"Od1",10,"Last Payment Received"),
            (("T",2,0,0),("IRB",r1s),0,"History","",
                "Y","Y",self.doTrans2,None,None,None))
        tnd = ((self.doEndTop,"N"), None, None)
        txt = (self.doExit, None, None)
        cnd = (None, None, None)
        cxt = (None, None, None)
        but = (
            ("Clear",None,self.doClear,0,("T",0,0),("T",0,1)),
            ("Print",None,self.doPrint,0,("T",0,0),("T",0,1)),
            ("Quit",None,self.doExit,1,None,None))
        self.df = TartanDialog(self.opts["mf"], title=self.tit, eflds=fld,
            tags=tag, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but)

    def doEmp(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("wagmst", cols=["wgm_sname",
            "wgm_fname"], where=[("wgm_cono", "=", self.opts["conum"]),
            ("wgm_empno", "=", w)], limit=1)
        if not acc:
            return "Invalid Employee Number"
        self.empno = w
        self.name = "%s, %s" % (acc[0], acc[1])
        self.history = "Y"
        self.df.loadEntry("T", pag, p+1, data=self.name)

    def doLoan(self, frt, pag, r, c, p, i, w):
        lmc = self.sql.waglmf_col
        rec = self.sql.getRec("waglmf", where=[("wlm_cono", "=",
            self.opts["conum"]), ("wlm_empno", "=", self.empno),
            ("wlm_loan", "=", w)], limit=1)
        if not rec:
            return "Invalid Loan Number"
        self.loan = w
        self.desc = rec[lmc.index("wlm_desc")]
        self.df.loadEntry("T", pag, p+1, data=self.desc)
        self.df.loadEntry("T", 1, 0, data=rec[lmc.index("wlm_code")])
        self.df.loadEntry("T", 1, 1, data=rec[lmc.index("wlm_rate")])
        self.df.loadEntry("T", 1, 2, data=rec[lmc.index("wlm_start")])
        self.df.loadEntry("T", 1, 3, data=rec[lmc.index("wlm_repay")])
        # Raise Interest
        LoanInterest("S", self.opts["mf"].dbm, rec, update="Y",
            curdt=int(self.sysdtw / 100), tdate=self.sysdtw, refno="Pending")
        # Get Balances
        self.lon = 0.0
        self.imt = 0.0
        self.pay = 0.0
        self.adj = 0.0
        self.bal = 0.0
        self.idt = 0
        self.pdt = 0
        whr = [
            ("wlt_cono", "=", self.opts["conum"]),
            ("wlt_empno", "=", self.empno),
            ("wlt_loan", "=", self.loan)]
        odr = "wlt_trdt, wlt_type"
        self.wlt = self.sql.getRec("wagltf", where=whr, order=odr)
        if self.wlt:
            col = self.sql.wagltf_col
            for rec in self.wlt:
                dat = CCD(rec[col.index("wlt_trdt")], "d1", 10)
                typ = CCD(rec[col.index("wlt_type")], "UI",  2)
                amt = CCD(rec[col.index("wlt_amt")], "SD",13.2)
                self.bal = float(ASD(self.bal) + ASD(amt.work))
                if typ.work == 1:
                    self.idt = dat.work
                    self.imt = float(ASD(self.imt) + ASD(amt.work))
                elif typ.work in (2, 3):
                    self.lon = float(ASD(self.lon) + ASD(amt.work))
                elif typ.work == 4:
                    self.pay = float(ASD(self.pay) + ASD(amt.work))
                    self.pdt = dat.work
                elif typ.work == 5:
                    self.adj = float(ASD(self.adj) + ASD(amt.work))
        # Load Balances
        self.df.loadEntry("T", 1, 4, data=self.lon)
        self.df.loadEntry("T", 1, 5, data=self.imt)
        self.df.loadEntry("T", 1, 6, data=self.pay)
        self.df.loadEntry("T", 1, 7, data=self.adj)
        self.df.loadEntry("T", 1, 8, data=self.bal)
        self.df.loadEntry("T", 1, 9, data=self.idt)
        self.df.loadEntry("T", 1, 10, data=self.pdt)
        self.opts["mf"].updateStatus("")

    def doHist(self, frt, pag, r, c, p, i, w):
        self.history = w

    def doEndTop(self):
        self.df.last[0] = [0, 0]
        self.df.setWidget(self.df.topEntry[0][0], state="disabled")

    def loadBalances(self):
        whr = [
            ("wlt_cono", "=", self.opts["conum"]),
            ("wlt_empno", "=", self.empno),
            ("wlt_loan", "=", self.loan)]
        odr = "wlt_trdt, wlt_type"
        self.wlt = self.sql.getRec("wagltf", where=whr, order=odr)
        if self.wlt:
            for rec in self.wlt:
                dat = CCD(rec[self.sql.wagltf_col.index("wlt_trdt")], "d1", 10)
                typ = CCD(rec[self.sql.wagltf_col.index("wlt_type")], "UI",  2)
                amt = CCD(rec[self.sql.wagltf_col.index("wlt_amt")], "SD",13.2)
                self.bal = float(ASD(self.bal) + ASD(amt.work))
                self.cap = float(ASD(self.cap) + ASD(amt.work))
                if typ.work == 1:
                    if dat.work >= self.opts["period"] and \
                            dat.work >= self.df.t_work[1][0][3]:
                        self.cap = float(ASD(self.cap) - ASD(amt.work))
                        self.due = float(ASD(self.due) + ASD(amt.work))
                    self.imt = float(ASD(self.imt) + ASD(amt.work))
                    self.idt = dat.work
                elif typ.work in (2, 3):
                    self.lon = float(ASD(self.lon) + ASD(amt.work))
                elif typ.work == 4:
                    self.pay = float(ASD(self.pay) + ASD(amt.work))
                    self.pdt = dat.work
                elif typ.work == 5:
                    self.adj = float(ASD(self.adj) + ASD(amt.work))

    def doGeneral(self):
        self.opts["mf"].updateStatus("")

    def doTrans1(self):
        self.df.focusField("T", 2, 1)

    def doTrans2(self, frt, pag, r, c, p, i, w):
        self.history = w
        tit = "Transactions for Loan: %s %s - %s" % \
            (self.empno, self.name, self.desc)
        tab = ["wagltf"]
        col = (("wlt_trdt", "", 0, "   Date"),
                ("wlt_batch", "", 0, "Batch"),
                ("wlt_type", ("XX", sltrtp), 3, "Typ"),
                ("wlt_ref", "", 0, "Reference", "Y"),
                ("wlt_per", "", 0, " Int-%"),
                ("wlt_amt", "", 0, "      Amount"),
                ("wlt_ded", "", 0, "   Deduction"),
                ("wlt_desc", "", 0, "Remarks"))
        whr = [
            ("wlt_cono", "=", self.opts["conum"]),
            ("wlt_empno", "=", self.empno),
            ("wlt_loan", "=", self.loan)]
        if self.history == "N":
            whr.append(("wlt_curdt", ">=", int(self.opts["period"] / 100)))
        odr = "wlt_trdt, wlt_type, wlt_ref"
        state = self.df.disableButtonsTags()
        SRec(self.opts["mf"], screen=self.df.nb.Page2, title=tit, tables=tab,
            cols=col, where=whr, order=odr)
        self.df.enableButtonsTags(state=state)
        self.df.focusField("T", 2, 1)

    def doClear(self):
        self.df.selPage("General")
        self.df.focusField("T", 0, 1)

    def doPrint(self):
        mess = "Select the Required Print Option."
        butt = (
            ("Information", "I"),
            ("Transactions", "T"),
            ("Both", "B"),
            ("None", "N"))
        self.doPrintOption(askChoice(self.opts["mf"].body, "Print Options",
            mess, butt=butt))
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPrintOption(self, opt):
        print(opt)
        if opt == "N":
            return
        self.head = "%03u %-93s" % (self.opts["conum"], self.opts["conam"])
        self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head)
        self.pglin = 999
        if opt != "T":
            self.pageHeading()
            self.printInfo()
        pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"],
            self.__class__.__name__, self.opts["conum"], ext="pdf")
        if opt == "I":
            self.fpdf.output(pdfnam, "F")
            doPrinter(mf=self.opts["mf"], conum=self.opts["conum"],
                pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"])
        elif opt == "B":
            if not self.wlt:
                self.fpdf.output(pdfnam, "F")
                doPrinter(mf=self.opts["mf"], conum=self.opts["conum"],
                    pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"])
            else:
                self.acctot = 0.0
                self.pageHeading()
                self.pageHeadingTrans()
                self.printTrans()
                self.fpdf.output(pdfnam, "F")
                doPrinter(mf=self.opts["mf"], conum=self.opts["conum"],
                    pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"])
        elif opt == "T":
            if self.wlt:
                self.acctot = 0.0
                self.pageHeading()
                self.pageHeadingTrans()
                self.printTrans()
                self.fpdf.output(pdfnam, "F")
                doPrinter(mf=self.opts["mf"], conum=self.opts["conum"],
                    pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"])

    def printInfo(self):
        self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "",
                self.df.topf[0][0][3], self.df.t_disp[0][0][0]))
        self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "",
                self.df.topf[0][1][3], self.df.t_disp[0][0][1]))
        self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "",
                self.df.topf[0][2][3], self.df.t_disp[0][0][2]))
        self.fpdf.drawText()
        for x in range(0, len(self.df.topf[1])):
            self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "",
                self.df.topf[1][x][3], self.df.t_disp[1][0][x]))
        self.fpdf.drawText()

    def printTrans(self):
        whr = [
            ("wlt_cono", "=", self.opts["conum"]),
            ("wlt_empno", "=", self.empno),
            ("wlt_loan", "=", self.loan)]
        odr = "wlt_trdt, wlt_type"
        if self.history == "N":
            whr.append(("wlt_curdt", ">=", int(self.opts["period"] / 100)))
        recs = self.sql.getRec("wagltf", where=whr, order=odr)
        for rec in recs:
            trd = CCD(rec[self.sql.wagltf_col.index("wlt_trdt")], "D1", 10)
            typ = CCD(rec[self.sql.wagltf_col.index("wlt_type")], "UI", 1)
            ref = CCD(rec[self.sql.wagltf_col.index("wlt_ref")], "Na", 9)
            bat = CCD(rec[self.sql.wagltf_col.index("wlt_batch")], "Na", 7)
            rte = CCD(rec[self.sql.wagltf_col.index("wlt_per")], "UD", 6.2)
            amt = CCD(rec[self.sql.wagltf_col.index("wlt_amt")], "SD", 13.2)
            ded = CCD(rec[self.sql.wagltf_col.index("wlt_ded")], "SD", 13.2)
            det = CCD(rec[self.sql.wagltf_col.index("wlt_desc")], "NA", 30)
            if self.pglin > self.fpdf.lpp:
                self.pageHeading()
                self.pageHeadingTrans()
            self.acctot = float(ASD(self.acctot) + ASD(amt.work))
            self.fpdf.drawText("%s %s %s %s %s %s %s %s" % (trd.disp,
                sltrtp[(typ.work - 1)][0], ref.disp, bat.disp,
                rte.disp, amt.disp, ded.disp, det.disp))
            self.pglin += 1
        self.fpdf.underLine(txt=self.head)
        b = CCD(self.acctot, "SD", 13.2)
        self.fpdf.drawText("%-39s %13s %13s %-30s" % \
            ("", b.disp, "", "Closing Balance"))

    def pageHeading(self):
        self.fpdf.add_page()
        self.fpdf.setFont(style="B")
        self.fpdf.drawText(self.head)
        self.fpdf.drawText()
        self.fpdf.drawText("Staff Loans Interrogation as at %s" % self.sysdtd)
        self.fpdf.underLine(txt=self.head)
        self.fpdf.setFont()
        self.pglin = 3

    def pageHeadingTrans(self):
        self.fpdf.setFont(style="B")
        text = "%-8s %5s %-4s %s" % (self.df.topf[0][0][3],
            self.df.t_disp[0][0][0], self.df.topf[0][1][3],
            self.df.t_disp[0][0][1])
        self.fpdf.drawText(text)
        text = "%-8s %5s %-4s %s" % (self.df.topf[0][2][3],
            self.df.t_disp[0][0][2], self.df.topf[0][3][3],
            self.df.t_disp[0][0][3])
        self.fpdf.drawText(text)
        self.fpdf.drawText()
        self.fpdf.drawText("%-10s %-3s %-9s %-7s %6s %12s  %12s  %-30s" % \
            ("   Date", "Typ", "Reference", "Batch", "Int%",
            "    Amount", "  Deduction", "Remarks"))
        self.fpdf.underLine(txt=self.head)
        self.fpdf.setFont()
        self.pglin = 7
        b = CCD(self.acctot, "SD", 13.2)
        if self.acctot != 0:
            self.fpdf.drawText("%-39s %13s %13s %-30s" % \
                ("", b.disp, "", "Brought Forward"))
            self.pglin += 1

    def doExit(self):
        try:
            self.opts["mf"].dbm.rollbackDbase()
        except:
            pass
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()