Esempio n. 1
0
 def doCopyTables(self):
     p1 = ProgressBar(self.opts["mf"].body,
                      mxs=len(self.tables),
                      typ="Copying Database")
     for num, tab in enumerate(self.tables):
         p1.displayProgress(num)
         if tab[0] not in ("ftable", "ffield"):
             if tab[0] not in tabdic:
                 print("NO", tab, "in tabdic")
                 continue
             self.opts["mf"].updateStatus("Adding Table %s" % tab[0])
             opts = [("-t", tab[0]), ("-x", False)]
             DBCreate(dbm=self.opts["mf"].dbm, opts=opts)
         self.opts["mf"].updateStatus("Populating Table %s" % tab[0])
         sqt = Sql(self.opts["mf"].dbm,
                   tab[0],
                   prog=self.__class__.__name__)
         try:
             sqt.delRec(tab[0])
         except:
             pass
         sqf = Sql(self.dbm, tab[0], prog=self.__class__.__name__)
         dat = sqf.getRec(tables=tab[0])
         if dat:
             p2 = ProgressBar(self.opts["mf"].body,
                              inn=p1,
                              mxs=len(dat),
                              typ="Populating Table %s" % tab[0])
             sqt.insRec(tab[0], data=dat, dofmt=False, pbar=p2)
             self.opts["mf"].dbm.commitDbase()
             p2.closeProgress()
     p1.closeProgress()
Esempio n. 2
0
 def doFixAge(self):
     if self.opts["mf"] and self.opts["mf"].window:
         spl = SplashScreen(self.opts["mf"].body,
                            "Checking Age Records\n\nPlease Wait")
         self.opts["mf"].updateStatus("Checking Age Records")
     elif self.opts["bar"]:
         print("Checking Age Records .... Please Wait")
     for sss in ("crs", "drs"):
         sql = Sql(self.dbm, ["%smst" % sss, "%sage" % sss], prog=__name__)
         if sss == "drs":
             col = ["dra_cono", "dra_chain", "dra_acno"]
             grp = "dra_cono, dra_chain, dra_acno"
         else:
             col = ["cra_cono", "cra_acno"]
             grp = "cra_cono, cra_acno"
         recs = sql.getRec("%sage" % sss, cols=col, group=grp)
         for rec in recs:
             whr = []
             for n, c in enumerate(col):
                 whr.append((c.replace("a_", "m_"), "=", rec[n]))
             if not sql.getRec("%smst" % sss, where=whr):
                 sql.delRec("%sage" % sss, cols=col, data=rec)
         self.dbm.commitDbase()
     if self.opts["mf"] and self.opts["mf"].window:
         self.opts["mf"].updateStatus("")
         spl.closeSplash()
Esempio n. 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()
Esempio n. 4
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()
Esempio n. 5
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()
Esempio n. 6
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()
Esempio n. 7
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)
Esempio n. 8
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()
Esempio n. 9
0
class gl6060(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, ["ctlctl", "genmst", "genrct"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
                    "Delete Imported Bank Statements (%s)" %
                    self.__class__.__name__)
        glm = {
            "stype":
            "R",
            "tables": ("ctlctl", "genmst"),
            "cols": (("ctl_conacc", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                        "Description", "Y")),
            "where": [("ctl_cono", "=", self.opts["conum"]),
                      ("ctl_code", "like", "bank_%"), ("glm_cono=ctl_cono", ),
                      ("glm_acno=ctl_conacc", )]
        }
        r1s = (("Yes", "Y"), ("No", "N"))
        fld = ((("T", 0, 0, 0), "IUI", 7, "Bank Account", "", "", "Y",
                self.doBankAcc, glm, None, ("efld", )),
               (("T", 0, 1,
                 0), "Id1", 10, "From Date", "From Date (0 for Beginning)", 0,
                "Y", self.doFrom, None, None, ("efld", )),
               (("T", 0, 2, 0), "Id1", 10, "To   Date", "To Date (0 for End)",
                0, "Y", self.doTo, None, None, ("efld", )),
               (("T", 0, 3, 0), ("IRB", r1s), 0, "Unallocated Only", "", "Y",
                "Y", self.doUnall, None, None, None))
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               title=self.tit,
                               eflds=fld,
                               tend=tnd,
                               txit=txt)

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

    def doFrom(self, frt, pag, r, c, p, i, w):
        self.start = w

    def doTo(self, frt, pag, r, c, p, i, w):
        if w and self.start and w < self.start:
            return "Invalid Date, Earlier than From Date"
        self.to = w

    def doUnall(self, frt, pag, r, c, p, i, w):
        self.unall = w

    def doEnd(self):
        self.df.closeProcess()
        whr = [("grt_cono", "=", self.opts["conum"]),
               ("grt_acno", "=", self.acnow)]
        if self.start:
            whr.append(("grt_date", ">=", self.start))
        if self.to:
            whr.append(("grt_date", "<=", self.to))
        if self.unall == "Y":
            whr.append(("grt_flag", "=", "N"))
        cnt = self.sql.getRec("genrct", cols=["count(*)"], where=whr, limit=1)
        self.sql.delRec("genrct", where=whr)
        self.opts["mf"].dbm.commitDbase(
            ask=True,
            mess="A Total of %s Records were Deleted" % cnt[0],
            default="no")
        self.closeProcess()

    def doExit(self):
        self.df.closeProcess()
        self.closeProcess()

    def closeProcess(self):
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Esempio n. 10
0
class bsc210(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, ["bksaut", "bksmst"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        clb = {
            "stype": "R",
            "tables": ("bksaut",),
            "cols": (
                ("baf_code", "", 0, "Cod"),
                ("baf_snam", "", 0, "Surname", "Y"),
                ("baf_fnam", "", 0, "Names")),
            "order": "baf_snam"}
        fld = (
            (("T",0,0,0),"I@baf_code",0,"","",
                "","Y",self.doCode,clb,None,("efld",)),
            (("T",0,1,0),"I@baf_snam",0,"","",
                "","N",self.doSnam,None,self.doDelete,("notblank",)),
            (("T",0,2,0),"I@baf_fnam",0,"","",
                "","N",self.doFnam,None,None,("efld",)))
        tnd = ((self.doEnd,"y"),)
        txt = (self.doExit,)
        self.df = TartanDialog(self.opts["mf"], tops=False,
            eflds=fld, tend=tnd, txit=txt)

    def doCode(self, frt, pag, r, c, p, i, w):
        if not w:
            self.author = getNextCode(self.sql, "bksaut", "baf_code", last=999)
            self.df.loadEntry(frt, pag, p, data=self.author)
        else:
            self.author = w
        self.old = self.sql.getRec("bksaut", where=[("baf_code", "=",
            self.author)], limit=1)
        if not self.old:
            self.newaut = True
        else:
            self.newaut = False
            for num, fld in enumerate(self.old[:-1]):
                self.df.loadEntry(frt, pag, num, data=fld)

    def doDelete(self):
        chk = self.sql.getRec("bksmst", where=[("bmf_auth",
            "=", self.author)], limit=1)
        if chk:
            showError(self.opts["mf"].body, "Error", "Author in Use")
            return
        self.sql.delRec("bksaut", where=[("baf_code", "=", self.author)])
        self.opts["mf"].dbm.commitDbase()

    def doSnam(self, frt, pag, r, c, p, i, w):
        self.snam = w

    def doFnam(self, frt, pag, r, c, p, i, w):
        if self.newaut:
            chk = self.sql.getRec("bksaut", where=[("baf_snam",
                "=", self.snam), ("baf_fnam", "=", w)], limit=1)
            if chk:
                return "An Author with this Name Already Exists"

    def doEnd(self):
        data = self.df.t_work[0][0][:]
        if self.newaut:
            self.sql.insRec("bksaut", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.bksaut_col
            data.append(self.old[col.index("baf_xflag")])
            self.sql.updRec("bksaut", data=data, where=[("baf_code", "=",
                self.author)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doExit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Esempio n. 12
0
class dr1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doExit3(self):
        self.df.selPage("Basic-A")
Esempio n. 13
0
class wgc210(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

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

    def mainProcess(self):
        rcv = {
            "stype": "R",
            "tables": ("wagrcv", ),
            "cols":
            (("rcv_code", "", 0, "Code"), ("rcv_desc", "", 0, "Details"))
        }
        self.fld = ((("T", 0, 0, 0), "IUI", 4, "Item Code", "", "", "N",
                     self.doCode, rcv, None, ("notzero", )),
                    (("T", 0, 1, 0), "INA", 50, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2),
                ("T", 0, 0)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        acc = self.sql.getRec("wagrcv",
                              where=[("rcv_code", "=", self.code)],
                              limit=1)
        if not acc:
            self.new = "Y"
        else:
            self.new = "N"
            for x in range(1, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=acc[x])

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

    def doEnd(self):
        dat = []
        for x in range(0, len(self.df.t_work[0][0])):
            dat.append(self.df.t_work[0][0][x])
        if self.new == "Y":
            self.sql.insRec("wagrcv", data=dat)
        else:
            self.sql.updRec("wagrcv",
                            data=dat,
                            where=[("rcv_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

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

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

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 14
0
class arc210(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["assdep", "assgrp", "assmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        assctl = gc.getCtl("assctl", self.opts["conum"])
        if not assctl:
            return
        self.glint = assctl["cta_glint"]
        self.rordp = assctl["cta_rordp"]
        return True

    def mainProcess(self):
        cod = {
            "stype":
            "R",
            "tables": ("assdep", ),
            "cols": (("asd_code", "", 0, "Grp"), ("asd_desc", "", 0,
                                                  "Description", "Y")),
            "where": [("asd_cono", "=", self.opts["conum"])],
            "order":
            "asd_code"
        }
        r1s = (("Straight Line", "S"), ("Diminishing Balance", "D"))
        fld = [(("T", 0, 0, 0), "I@asd_code", 0, "", "", "", "N", self.doCode,
                cod, None, ("notblank", )),
               (("T", 0, 1, 0), "I@asd_desc", 0, "", "", "", "N", None, None,
                self.doDelete, ("notblank", )),
               (("T", 0, 2, 0), ("IRB", r1s), 0, "Type", "", "S", "N",
                self.doDepTyp, None, None, None)]
        if self.rordp == "Y":
            fld.append(
                (("T", 0, 3, 0), ("IRB", r1s), 0, "Receiver Type",
                 "Receiver Type", "S", "N", self.doRecTyp, None, None, None))
        fld.append(
            (("C", 0, 0, 0), "IUD", 12.2, "Company-Rate", "Company Rate", "",
             "N", self.doCoyRte, None, None, ("efld", ), ("Period", 7)))
        if self.rordp == "Y":
            fld.append(
                (("C", 0, 0, 1), "IUD", 12.2, "Receiver-Rate", "Receiver Rate",
                 "", "N", self.doRecRte, None, None, ("efld", )))
        but = (("Cancel", None, self.doCancel, 0, ("T", 0, 2), ("T", 0, 1)), )
        tnd = ((self.doEnd, "n"), )
        txt = (self.doExit, )
        cnd = ((self.doEnd, "n"), )
        cxt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt)
        for x in range(7):
            self.df.colLabel[0][x].configure(text="Year %s" % (x + 1))

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.acc = self.sql.getRec("assdep",
                                   where=[("asd_cono", "=",
                                           self.opts["conum"]),
                                          ("asd_code", "=", self.code)],
                                   limit=1)
        if not self.acc:
            self.new = "Y"
        else:
            self.new = "N"
            for x in range(self.df.topq[pag]):
                self.df.loadEntry("T", 0, x, data=self.acc[x + 1])
            if self.rordp == "Y":
                inc = 1
            else:
                x += 1
                inc = 2
            for y in range(0, 14, inc):
                self.df.loadEntry("C",
                                  0,
                                  int(y / inc),
                                  data=self.acc[x + y + 2])

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

    def doRecTyp(self, frt, pag, r, c, p, i, w):
        self.rtyp = w

    def doCoyRte(self, frt, pag, r, c, p, i, w):
        if self.ctyp == "D" or not w:
            self.df.colf[pag][0][1] = "OUD"
            return
        if w and p != 0 and not self.df.c_work[0][r - 1][i]:
            return "Value Not Allowed after a Zero"

    def doRecRte(self, frt, pag, r, c, p, i, w):
        if self.rtyp == "D" or not w:
            self.df.colf[pag][1][1] = "OUD"
            return
        if w and p != 1 and not self.df.c_work[0][r - 1][i]:
            return "Value Not Allowed"

    def doDelete(self):
        ck1 = self.sql.getRec("assgrp",
                              where=[("asg_cono", "=", self.opts["conum"]),
                                     ("asg_depcod", "=", self.code)])
        ck2 = self.sql.getRec("assmst",
                              where=[("asm_cono", "=", self.opts["conum"]),
                                     ("asm_depcod", "=", self.code)])
        if ck1 or ck2:
            return "Code in Use, Not Deleted"
        self.sql.delRec("assdep",
                        where=[("asd_cono", "=", self.opts["conum"]),
                               ("asd_code", "=", self.df.t_work[0][0][0])])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        if self.df.frt == "T":
            self.df.focusField("C", 0, 1)
        elif self.df.col != len(self.df.colEntry[0]):
            self.df.focusField(self.df.frt, self.df.pag, self.df.col + 1)
        else:
            self.df.colf[0][0][1] = "IUD"
            if self.rordp == "Y":
                self.df.colf[0][1][1] = "IUD"
            if self.df.entryConfirm("", dflt="y") == "y":
                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.rordp == "N":
                    data.append("N")
                for x in range(0, len(self.df.c_work[0])):
                    data.extend(self.df.c_work[0][x])
                    if self.rordp == "N":
                        data.append(0)
                if self.new == "Y":
                    self.sql.insRec("assdep", data=data)
                elif data != self.acc[:len(data)]:
                    col = self.sql.assdep_col
                    data.append(self.acc[col.index("asd_xflag")])
                    self.sql.updRec("assdep",
                                    data=data,
                                    where=[("asd_cono", "=",
                                            self.opts["conum"]),
                                           ("asd_code", "=", self.code)])
                self.opts["mf"].dbm.commitDbase()
                self.df.focusField("T", 0, 1)
            else:
                self.df.focusField("C", 0, 1)

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

    def doExit(self):
        if self.df.frt == "T":
            self.df.closeProcess()
            self.opts["mf"].closeLoop()
        elif self.df.col == 1:
            self.doCancel()
        else:
            data = self.df.c_work[0][self.df.row][self.df.idx]
            self.df.loadEntry("C", 0, self.df.pos, data=data)
            self.df.focusField("C", 0, self.df.pos)
Esempio n. 15
0
class st2010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.exit = False
            self.selectPrinter()
            if not self.exit:
                self.mainProcess()
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlmst", "ctlmes", "ctlvrf", "ctlrep", "crsmst", "gentrn",
            "strgrp", "strloc", "strmf1", "strmf2", "strpom", "strpot",
            "strtrn", "strgmu", "strcmu", "tplmst"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        mods = []
        for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2):
            mods.append(ctlmst["ctm_modules"][x:x + 2])
        if "CR" not in mods:
            showError(
                self.opts["mf"].body, "System Error",
                "This module requires you to have a Creditor's Activated")
            return
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.stgl = strctl["cts_glint"]
        self.locs = strctl["cts_locs"]
        self.plevs = strctl["cts_plevs"]
        self.dtpl = strctl["cts_tplnam"]
        if self.stgl == "Y":
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["stk_soh", "stk_susp"]
            if gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.soh = ctlctl["stk_soh"]
            self.ssp = ctlctl["stk_susp"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def selectPrinter(self):
        tit = ("Printer Selection", )
        tpm = {
            "stype":
            "R",
            "tables": ("tplmst", ),
            "cols": (("tpm_tname", "", 0, "Template"), ("tpm_title", "", 0,
                                                        "Title", "Y")),
            "where": [("tpm_type", "=", "O"), ("tpm_system", "=", "STR")],
            "order":
            "tpm_tname"
        }
        fld = ((("T", 0, 0, 0), "INA", 20, "Template Name", "", self.dtpl, "N",
                self.doTplNam, tpm, None, None),
               (("T", 0, 1, 0), "ID1", 10, "Order Date", "", self.sysdtw, "N",
                self.doOrdDate, None, None, ("efld", )))
        self.pr = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=fld,
                               tend=((self.doPrtEnd, "y"), ),
                               txit=(self.doPrtExit, ),
                               view=("N", "P"),
                               mail=("N", "Y", "Y"))
        self.opts["mf"].startLoop()

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

    def doOrdDate(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"
        self.trdt = w
        self.trdd = self.pr.t_disp[0][0][1]
        self.curdt = int(self.trdt / 100)
        self.batch = "S%s" % self.curdt

    def doPrtEnd(self):
        self.doPrtClose()

    def doPrtExit(self):
        self.exit = True
        self.doPrtClose()

    def doPrtClose(self):
        self.pr.closeProcess()
        self.opts["mf"].closeLoop()

    def mainProcess(self):
        doc = {
            "stype":
            "R",
            "tables": ("strpom", "crsmst"),
            "cols":
            (("pom_ordno", "", 0, "Ord-Num"), ("pom_acno", "", 0, "Acc-Num"),
             ("crm_name", "", 0, "Name", "Y")),
            "where": [("pom_cono", "=", self.opts["conum"]),
                      ("crm_cono=pom_cono", ), ("crm_acno=pom_acno", ),
                      ("pom_delno", "=", "")]
        }
        loc = {
            "stype":
            "R",
            "tables": ("strloc", ),
            "cols":
            (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Description", "Y")),
            "where": [("srl_cono", "=", self.opts["conum"])]
        }
        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")],
            "index":
            0
        }
        odr = {
            "stype": "R",
            "tables": ("ctlrep", ),
            "cols": [("rep_code", "", 0, "Ord"),
                     ("rep_name", "", 0, "Name", "Y")],
            "where": [("rep_cono", "=", self.opts["conum"])],
            "index": 0
        }
        grp = {
            "stype":
            "R",
            "tables": ("strgrp", ),
            "cols": (("gpm_group", "", 0, "Grp"), ("gpm_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("gpm_cono", "=", self.opts["conum"])]
        }
        cod = {
            "stype":
            "R",
            "tables": ("strmf1", ),
            "cols": (("st1_code", "", 0, "Product-Code"),
                     ("st1_desc", "", 0, "Description", "Y")),
            "where": [("st1_cono", "=", self.opts["conum"]),
                      ("st1_type", "not", "in", ("R", "X")),
                      ("st1_value_ind", "<>", "N")],
            "whera": [("C", "st1_group", 0)],
            "order":
            "st1_group, st1_code"
        }
        r1s = (("New", "N"), ("Amend", "A"), ("Receive", "R"), ("Cancel", "C"))
        fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "Action", "", "N", "Y",
                self.doActTyp, None, None,
                None), (("T", 0, 1, 0), "IUI", 9, "Ord-No", "Order Number", "",
                        "N", self.doOrdNum, doc, None, ("notblank", )),
               (("T", 0, 2, 0), "IUA", 1, "Loc", "Location Code", "1", "N",
                self.doLoc, loc, None, None), (("T", 0, 2, 0), "ONA", 30, ""),
               (("T", 0, 3, 0), "INA", 7, "Acc-No", "Account Number", "", "N",
                self.doCrsAcc, crm, None, None), (("T", 0, 3, 0), "ONA", 30,
                                                  ""),
               (("T", 0, 4, 0), "INa", 3, "Ord-By", "Ordered By", "", "N",
                self.doOrdBy, odr, None, None), (("T", 0, 4, 0), "ONA", 30,
                                                 ""),
               (("T", 0, 5, 0), "INa", 7, "Del-No", "Delivery Note Number", "",
                "N", self.doDelNum, None, None, ("notblank", )),
               (("T", 0, 5, 0), "ID1", 10, "Date", "Delivery Date", self.trdt,
                "N", self.doDelDate, None, None,
                ("efld", )), (("C", 0, 0, 0), "INA", 3, "Grp", "Product Group",
                              "", "Y", self.doGrp, grp, None, None),
               (("C", 0, 0, 1), "INA", 20, "Product-Code", "", "", "N",
                self.doCod, cod, None,
                None), (("C", 0, 0, 2), "INA", (20, 30), "Description", "", "",
                        "N", self.doDes, None, None,
                        None), (("C", 0, 0, 3), "ISD", 11.2, "Quantity", "", 1,
                                "N", self.doQty, None, None, ("notzero", )),
               (("C", 0, 0, 4), "IUA", 1, "V", "V.A.T. Code", "I", "N",
                self.doVat, None, None, ("notblank", )),
               (("C", 0, 0, 5), "IUD", 10.2, "Price", "Exclusive Price", "",
                "N", self.doPri, None, None,
                None), (("C", 0, 0, 6), "IUD", 6.2, "Dis-%", "Trade Discount",
                        "", "N", self.doDis, None, None,
                        None), (("C", 0, 0, 7), "OSD", 10.2, "Value"))
        self.row = (15, )
        self.but = (("Cancel", None, self.doCancel, 1, ("C", 0, 1),
                     ("T", 0, 1)), ("DelAdd", None, self.doDelAdd, 1,
                                    ("C", 0, 1), ("T", 0, 1)),
                    ("Ribbon", None, self.doRibbon, 1, ("C", 0, 1),
                     ("T", 0, 1)), ("Message", None, self.doMessag, 1,
                                    ("C", 0, 1), ("T", 0, 1)),
                    ("Edit", None, self.doEdit, 0, ("C", 0, 1), ("C", 0, 2)),
                    ("Reprint", None, self.doReprnt, 0, ("T", 0, 1),
                     ("T", 0, 2)), ("CrsMaint", None, self.doCrsMaint, 0,
                                    ("T", 0, 5), ("T", 0, 6)),
                    ("CrsQuery", None, self.doCrsQuery, 1, None,
                     None), ("StrMaint", None, self.doStrMaint, 0, ("C", 0, 1),
                             (("T", 0, 1), ("C", 0, 2))),
                    ("StrQuery", None, self.doStkQuery, 1, None,
                     None), ("Exit", None, self.doTopExit, 0, ("T", 0, 1),
                             (("T", 0, 2), ("T", 0, 3),
                              ("T", 0, 5)), "Exit Purchase Orders"),
                    ("Accept", None, self.doAccept, 0, ("C", 0, 1),
                     (("T", 0, 1), ("C", 0, 2))))
        tnd = ((self.doTopEnd, "n"), )
        txt = (self.doTopExit, )
        cnd = ((self.doColEnd, "n"), )
        cxt = (None, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               rows=self.row,
                               butt=self.but,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               vport=True)

    def doActTyp(self, frt, pag, r, c, p, i, w):
        # Initialise Action Variables
        self.acttyp = w
        # Initialise Variables
        self.dnum = ""
        self.onum = ""
        self.jnum = ""
        self.dadd = ""
        self.cnam = ""
        self.vatn = ""
        self.ribbon = None
        ctl = self.sql.getRec("ctlmst",
                              where=[("ctm_cono", "=", self.opts["conum"])],
                              limit=1)
        self.deladd = [
            ctl[self.sql.ctlmst_col.index("ctm_sadd1")],
            ctl[self.sql.ctlmst_col.index("ctm_sadd2")],
            ctl[self.sql.ctlmst_col.index("ctm_sadd3")],
            ctl[self.sql.ctlmst_col.index("ctm_spcode")]
        ]
        self.message = ""
        for x in (1, 2, 3):
            if self.acttyp == "R":
                self.df.butt[x][1] = 0
                self.df.butt[x][2] = None
            else:
                self.df.butt[x][1] = 1
                self.df.butt[x][2] = ["C", 0, 1]
        if self.acttyp == "N":
            # Location default
            if self.locs == "N":
                self.loc = "1"
                self.df.loadEntry(frt, pag, p + 2, data=self.loc)
                self.df.loadEntry(frt, pag, p + 3, data="Location One")
                return "sk3"
            return "sk1"

    def doOrdNum(self, frt, pag, r, c, p, i, w):
        strpom = self.sql.getRec("strpom",
                                 where=[("pom_cono", "=", self.opts["conum"]),
                                        ("pom_ordno", "=", w)],
                                 limit=1)
        if not strpom:
            return "Invalid Document"
        if strpom[self.sql.strpom_col.index("pom_delno")] == "cancel":
            if self.acttyp == "C":
                return "Already Cancelled"
            ok = askQuestion(
                self.opts["mf"].body,
                "Cancelled",
                "This order was Cancelled.\n\nDo you want to Reinstate It?",
                default="no")
            if ok == "no":
                return "Order Cancelled"
            self.sql.updRec("strpom",
                            cols=["pom_delno"],
                            data=[""],
                            where=[("pom_cono", "=", self.opts["conum"]),
                                   ("pom_ordno", "=", w)])
            strpom[self.sql.strpom_col.index("pom_delno")] = ""
        elif strpom[self.sql.strpom_col.index("pom_delno")]:
            return "Order Already Received"
        self.ordno = CCD(w, "UI", 9.0).work
        self.othno = CCD(w, "Na", 9.0).work
        self.loc = strpom[self.sql.strpom_col.index("pom_loc")]
        self.acno = strpom[self.sql.strpom_col.index("pom_acno")]
        self.cnam = strpom[self.sql.strpom_col.index("pom_contact")]
        self.vatn = strpom[self.sql.strpom_col.index("pom_vatno")]
        self.ordby = strpom[self.sql.strpom_col.index("pom_ordby")]
        self.ribbon = ["", "", self.cnam, self.vatn]
        self.df.loadEntry(frt, pag, p + 1, data=self.loc)
        self.doLoc(frt, pag, r, c + 1, p + 1, i + 1, self.loc)
        self.df.loadEntry(frt, pag, p + 3, data=self.acno)
        self.doCrsAcc(frt, pag, r, c + 3, p + 3, i + 3, self.acno)
        self.df.loadEntry(frt, pag, p + 5, data=self.ordby)
        self.doOrdBy(frt, pag, r, c + 5, p + 5, i + 5, self.ordby)
        if self.acttyp == "R":
            return "sk6"
        else:
            return "nd"

    def doLoc(self, frt, pag, r, c, p, i, w):
        desc = self.sql.getRec("strloc",
                               cols=["srl_desc"],
                               where=[("srl_cono", "=", self.opts["conum"]),
                                      ("srl_loc", "=", w)],
                               limit=1)
        if not desc:
            return "Invalid Location"
        self.loc = w
        self.df.loadEntry(frt, pag, p + 1, data=desc[0])

    def doCrsAcc(self, frt, pag, r, c, p, i, w):
        self.crsmst = self.sql.getRec("crsmst",
                                      where=[("crm_cono", "=",
                                              self.opts["conum"]),
                                             ("crm_acno", "=", w)],
                                      limit=1)
        if not self.crsmst:
            return "Invalid Account"
        if self.crsmst[self.sql.crsmst_col.index("crm_stat")] == "X":
            return "Invalid Account, Redundant"
        self.acno = w
        self.name = self.crsmst[self.sql.crsmst_col.index("crm_name")]
        self.df.loadEntry(frt, pag, p + 1, data=self.name)

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

    def doDelNum(self, frt, pag, r, c, p, i, w):
        self.delno = w

    def doDelDate(self, frt, pag, r, c, p, i, w):
        self.deldt = w

    def doTopEnd(self):
        if self.acttyp == "N":
            # Get and Display Next Document Number
            ordno = self.sql.getRec("strpom",
                                    cols=["max(pom_ordno)"],
                                    where=[("pom_cono", "=",
                                            self.opts["conum"])],
                                    limit=1)
            if not ordno[0]:
                self.ordno = CCD(1, "UI", 9).work
                self.othno = CCD(1, "Na", 9).work
            else:
                self.ordno = CCD((int(ordno[0]) + 1), "UI", 9).work
                self.othno = CCD((int(ordno[0]) + 1), "Na", 9).work
            self.df.loadEntry(self.df.frt, self.df.pag, 1, data=self.ordno)
            # Create Document Transaction (Head)
            self.dad1, self.dad2, self.dad3, self.dad4 = "", "", "", ""
            data = [
                self.opts["conum"], self.ordno, self.loc, self.trdt, self.acno,
                self.dad1, self.dad2, self.dad3, self.dad4, "", "", "", "",
                self.ordby, "", "", 0, self.opts["capnm"], self.sysdtw
            ]
            # Write and Commit Header
            self.sql.insRec("strpom", data=data)
            self.opts["mf"].dbm.commitDbase()
            # Clear Totals
            self.doClearTots()
        elif self.acttyp == "C":
            self.doReadLoadStr()
            ok = askQuestion(self.opts["mf"].body,
                             "Cancel",
                             "Are You Sure This Order Must be Cancelled?",
                             default="no")
            if ok == "yes":
                # Print Cancellation
                self.df.setWidget(self.df.mstFrame, state="hide")
                PrintOrder(self.opts["mf"],
                           self.opts["conum"],
                           self.opts["conam"],
                           self.ordno,
                           tname=self.tname,
                           repprt=self.pr.repprt,
                           repeml=self.pr.repeml,
                           copy=self.acttyp.lower())
                self.df.setWidget(self.df.mstFrame, state="show")
                # Update Deletetion
                self.sql.updRec("strpom",
                                cols=["pom_delno"],
                                data=["cancel"],
                                where=[("pom_cono", "=", self.opts["conum"]),
                                       ("pom_ordno", "=", self.ordno)])
                self.opts["mf"].dbm.commitDbase()
            # Clear totals and focus
            self.doClearTots()
            self.df.focusField("T", 0, 1)
        else:
            self.doReadLoadStr()
            self.amend = False

    def doReadLoadStr(self):
        self.doClearTots()
        data = self.sql.getRec("strpot",
                               where=[("pot_cono", "=", self.opts["conum"]),
                                      ("pot_ordno", "=", self.ordno)],
                               order="pot_group, pot_code")
        if not data:
            return
        for seq, line in enumerate(data):
            self.doExtData(line)
            if seq >= self.row[0]:
                self.df.scrollScreen(0)
                pos = (self.row[0] - 1) * 9
            else:
                pos = seq * 9
            # Load Values
            self.df.loadEntry("C", 0, pos, data=self.grp)
            self.df.loadEntry("C", 0, pos + 1, data=self.code)
            self.df.loadEntry("C", 0, pos + 2, data=self.desc)
            self.df.loadEntry("C", 0, pos + 3, data=self.qty)
            self.df.loadEntry("C", 0, pos + 5, data=self.vatcod)
            self.df.loadEntry("C", 0, pos + 6, data=self.price)
            self.df.loadEntry("C", 0, pos + 7, data=self.disrat)
            self.df.loadEntry("C", 0, pos + 8, data=self.excamt)
            self.vattot = float(ASD(self.vattot) + ASD(self.vatamt))
            self.ordtot = float(ASD(self.ordtot) + ASD(self.excamt))
            self.inctot = float(ASD(self.inctot) + ASD(self.incamt))
        if seq >= (self.row[0] - 1):
            self.df.scrollScreen(0)
        else:
            self.df.focusField("C", 0, pos + 10)
        self.df.setViewPort("O", self.inctot)

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

    def doClearTots(self):
        self.vattot = 0
        self.ordtot = 0
        self.inctot = 0
        self.df.clearFrame("C", 0)
        self.df.focusField("C", 0, 1)
        self.df.setViewPort(None, 0)

    def doGrp(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("strgrp",
                              where=[("gpm_cono", "=", self.opts["conum"]),
                                     ("gpm_group", "=", w)],
                              limit=1)
        if not acc:
            return "Invalid Group Code"
        self.grp = w

    def doCod(self, frt, pag, r, c, p, i, w):
        strmf1 = self.sql.getRec("strmf1",
                                 where=[("st1_cono", "=", self.opts["conum"]),
                                        ("st1_group", "=", self.grp),
                                        ("st1_code", "=", w)],
                                 limit=1)
        if not strmf1:
            return "Invalid Code"
        if strmf1[self.sql.strmf1_col.index("st1_type")] == "R":
            return "Invalid Code (Recipe)"
        if strmf1[self.sql.strmf1_col.index("st1_type")] == "X":
            return "Invalid Code (Redundant)"
        if strmf1[self.sql.strmf1_col.index("st1_value_ind")] == "N":
            return "Invalid Code (Value Indicator)"
        self.vatcod = strmf1[self.sql.strmf1_col.index("st1_vatcode")]
        strmf2 = self.sql.getRec("strmf2",
                                 where=[("st2_cono", "=", self.opts["conum"]),
                                        ("st2_group", "=", self.grp),
                                        ("st2_code", "=", w),
                                        ("st2_loc", "=", self.loc)],
                                 limit=1)
        if not strmf2:
            return "Invalid Location"
        odt = self.sql.getRec("strpot",
                              cols=["count(*)"],
                              where=[("pot_cono", "=", self.opts["conum"]),
                                     ("pot_ordno", "=", self.ordno),
                                     ("pot_group", "=", self.grp),
                                     ("pot_code", "=", w)],
                              limit=1)
        if odt[0]:
            return "This Item is Already On This Order"
        odq = self.sql.getRec(tables=["strpom", "strpot"],
                              cols=["sum(pot_qty)"],
                              where=[("pom_cono", "=", self.opts["conum"]),
                                     ("pom_loc", "=", self.loc),
                                     ("pom_delno", "=", ""),
                                     ("pot_cono", "=", self.opts["conum"]),
                                     ("pot_ordno=pom_ordno", ),
                                     ("pot_group", "=", self.grp),
                                     ("pot_code", "=", w)],
                              limit=1)
        if odq[0]:
            state = self.df.disableButtonsTags()
            cf = PwdConfirm(self.opts["mf"],
                            conum=self.opts["conum"],
                            system="STR",
                            code="DupOrd",
                            desc="%s of this Item is Already On Order" %
                            odq[0])
            self.df.enableButtonsTags(state=state)
            if cf.flag == "no":
                return "rf"
        self.code = w
        desc = strmf1[self.sql.strmf1_col.index("st1_desc")]
        self.uoi = strmf1[self.sql.strmf1_col.index("st1_uoi")]
        self.df.loadEntry(frt, pag, p + 1, data=desc)

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

    def doQty(self, frt, pag, r, c, p, i, w):
        self.qty = w
        self.df.loadEntry(frt, pag, p + 1, data=self.vatcod)

    def doVat(self, frt, pag, r, c, p, i, w):
        self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.trdt)
        if self.vatrte is None:
            return "Invalid V.A.T Code"
        self.vatcod = w
        # Last Cost Price
        lcost = getCost(self.sql,
                        self.opts["conum"],
                        self.grp,
                        self.code,
                        loc=self.loc,
                        qty=1,
                        ind="L")
        self.df.loadEntry(frt, pag, p + 1, data=lcost)

    def doPri(self, frt, pag, r, c, p, i, w):
        self.price = w
        self.inc = round((self.price * (self.vatrte + 100.0) / 100.0), 4)
        self.exc = round((self.price * 1), 2)
        dis = self.crsmst[self.sql.crsmst_col.index("crm_trdis")]
        self.df.loadEntry(frt, pag, p + 1, data=dis)

    def doDis(self, frt, pag, r, c, p, i, w):
        self.disrat = w
        dis = float(ASD(100) - ASD(self.disrat))
        self.excamt = round((self.qty * self.exc * dis / 100.0), 2)
        self.incamt = round((self.qty * self.inc * dis / 100.0), 2)
        self.vatamt = float(ASD(self.incamt) - ASD(self.excamt))
        self.df.loadEntry(frt, pag, p + 1, data=self.excamt)
        self.vattot = float(ASD(self.vattot) + ASD(self.vatamt))
        self.ordtot = float(ASD(self.ordtot) + ASD(self.excamt))
        self.inctot = float(ASD(self.inctot) + ASD(self.incamt))
        self.df.setViewPort("O", self.inctot)

    def doColEnd(self):
        # Create Purchase Order Transaction (Body)
        data = [
            self.opts["conum"], self.ordno, self.grp, self.code, self.uoi,
            self.desc, self.qty, self.price, self.disrat, self.vatcod,
            self.vatrte, self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("strpot", data=data)
        if self.acttyp == "A":
            self.amend = True
        self.df.advanceLine(0)

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

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

    def doDelAdd(self):
        tit = ("Delivery Address", )
        fld = ((("T", 0, 0, 0), "INA", 30, "Address-1", "Address Line 1", "",
                "N", None, None, None,
                None), (("T", 0, 1, 0), "INA", 30, "Address-2",
                        "Address Line 2", "", "N", None, None, None, None),
               (("T", 0, 2, 0), "INA", 30, "Address-3", "Address Line 3", "",
                "N", None, None, None, None),
               (("T", 0, 3, 0), "INA", 30, "Address-4", "Address Line 4", "",
                "N", None, None, None, None))
        state = self.df.disableButtonsTags()
        self.da = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doDelEnd, "n"), ),
                               txit=(self.doDelExit, ),
                               focus=False)
        for x in range(0, len(self.deladd)):
            self.da.loadEntry("T", 0, 0 + x, data=self.deladd[x])
        self.da.focusField("T", 0, 1, clr=False)
        self.da.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doDelEnd(self):
        self.deladd = []
        for x in range(0, self.da.topq[0]):
            self.deladd.append(self.da.t_work[0][0][x])
        self.doDelExit()

    def doDelExit(self):
        self.da.closeProcess()

    def doMessag(self):
        tit = ("Order Message", )
        cod = {
            "stype":
            "R",
            "tables": ("ctlmes", ),
            "cols": [("mss_message", "", 0, "Cod"),
                     ("mss_detail", "", 60, "Details")],
            "where": [("mss_system", "=", "STR")],
            "screen":
            self.df.mstFrame
        }
        fld = ((("T", 0, 0, 0), "IUI", 3, "Message Code", "", "", "N",
                self.doMesCod, cod, None, None),
               (("T", 0, 1, 0), "ITv", (30, 6), "Message", "", self.message,
                "N", None, None, None, None))
        but = (("Accept", None, self.doMesEnd, 0, ("T", 0, 1), ("T", 0, 0)), )
        state = self.df.disableButtonsTags()
        self.mg = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doMesEnd, "n"), ),
                               txit=(self.doMesExit, ),
                               butt=but)
        self.mg.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doMesCod(self, frt, pag, r, c, p, i, w):
        if w:
            mess = self.sql.getRec("ctlmes",
                                   where=[("mss_system", "=", "STR"),
                                          ("mss_message", "=", w)],
                                   limit=1)
            if not mess:
                return "Invalid Message Code"
            self.message = mess[self.sql.ctlmse_col.index("mss_detail")]
            self.mg.loadEntry(frt, pag, p + 1, data=self.message)

    def doMesEnd(self):
        wid, self.message = self.mg.getEntry("T", 0, 1)
        self.doMesExit()

    def doMesExit(self):
        self.mg.closeProcess()

    def doEdit(self):
        # Display document items and allow editing of desc, qty and price
        recs = self.sql.getRec("strpot",
                               where=[("pot_cono", "=", self.opts["conum"]),
                                      ("pot_ordno", "=", self.ordno)],
                               order="pot_group, pot_code")
        if recs:
            data = []
            for l in recs:
                qty = CCD(l[self.sql.strpot_col.index("pot_qty")], "SD", 11.2)
                prc = CCD(l[self.sql.strpot_col.index("pot_price")], "UD",
                          10.2)
                dis = CCD(l[self.sql.strpot_col.index("pot_disper")], "UD",
                          6.2)
                data.append([
                    l[self.sql.strpot_col.index("pot_group")],
                    l[self.sql.strpot_col.index("pot_code")],
                    l[self.sql.strpot_col.index("pot_desc")], qty.disp,
                    l[self.sql.strpot_col.index("pot_vatcod")], prc.disp,
                    dis.disp
                ])
            head = ("Grp", "Product-Code", "Description", "Quantity", "V",
                    "Price", "Disc-%")
            lin = {
                "stype":
                "C",
                "head":
                head,
                "typs": (("NA", 3), ("NA", 20), ("NA", 30), ("SD", 11.2),
                         ("UA", 1), ("UD", 10.2), ("UD", 6.2)),
                "data":
                data
            }
            state = self.df.disableButtonsTags()
            chg = self.df.selChoice(lin)
            if chg and chg.selection:
                self.change = chg.selection
                self.doChanges()
            self.df.enableButtonsTags(state=state)
        self.df.focusField("C", 0, self.df.col)

    def doChanges(self):
        tit = ("Change Items", )
        fld = ((("T", 0, 1, 0), "ONA", 3, "Group"), (("T", 0, 2, 0), "ONA", 20,
                                                     "Code"),
               (("T", 0, 3, 0), "INA", 30, "Description", "", "", "N",
                self.doChgDes, None, None, ("notblank", )),
               (("T", 0, 4, 0), "ISD", 11.2, "Quantity", "", "", "N",
                self.doChgQty, None, None, ("notzero", )),
               (("T", 0, 5, 0), "IUD", 10.2, "Selling Price", "", "", "N",
                self.doChgPrc, None, None, ("notzero", )),
               (("T", 0, 6, 0), "IUD", 6.2, "Discount Percent", "", "", "N",
                self.doChgDis, None, None, ("efld", )))
        but = (("Delete", None, self.doChgDel, 1, None, None), )
        tnd = ((self.doChgEnd, "n"), )
        txt = (self.doChgExit, )
        self.cg = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        self.cg.loadEntry("T", 0, 0, data=self.change[0])
        self.cg.loadEntry("T", 0, 1, data=self.change[1])
        self.cg.loadEntry("T", 0, 2, data=self.change[2])
        self.cg.loadEntry("T", 0, 3, data=self.change[3])
        self.cg.loadEntry("T", 0, 4, data=self.change[5])
        self.cg.loadEntry("T", 0, 5, data=self.change[6])
        self.cg.focusField("T", 0, 3, clr=False)
        self.cg.mstFrame.wait_window()

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

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

    def doChgPrc(self, frt, pag, r, c, p, i, w):
        self.price = w

    def doChgDis(self, frt, pag, r, c, p, i, w):
        self.disrat = w

    def doChgDel(self):
        grp = self.change[0]
        cod = self.change[1]
        self.sql.delRec("strpot",
                        where=[("pot_cono", "=", self.opts["conum"]),
                               ("pot_ordno", "=", self.ordno),
                               ("pot_group", "=", grp),
                               ("pot_code", "=", cod)])
        if self.acttyp == "A":
            self.amend = True
        self.doChgExit(loader=True)

    def doChgEnd(self):
        grp = self.change[0]
        cod = self.change[1]
        col = ["pot_desc", "pot_qty", "pot_price", "pot_disper"]
        dat = [self.desc, self.qty, self.price, self.disrat]
        whr = [("pot_cono", "=", self.opts["conum"]),
               ("pot_ordno", "=", self.ordno), ("pot_group", "=", grp),
               ("pot_code", "=", cod)]
        self.sql.updRec("strpot", cols=col, data=dat, where=whr)
        if self.acttyp == "A":
            self.amend = True
        self.doChgExit(loader=True)

    def doChgExit(self, loader=False):
        self.cg.closeProcess()
        if loader:
            self.doReadLoadStr()

    def doReprnt(self):
        tit = ("Reprint Orders", )
        odr = {
            "stype":
            "R",
            "tables": ("strpom", "crsmst"),
            "cols": [("pom_ordno", "", 0, "Doc-Num"),
                     ("pom_date", "", 0, "Date"),
                     ("pom_acno", "", 0, "Acc-Num"),
                     ("crm_name", "", 0, "Name", "Y")],
            "where": [("pom_cono", "=", self.opts["conum"]),
                      ("pom_cono=crm_cono", ), ("pom_acno=crm_acno", )],
            "screen":
            self.opts["mf"].body
        }
        r1s = (("Copies", "C"), ("Originals", "O"))
        fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "Document Mode", "", "C", "N",
                self.doMode, None, None, None),
               (("T", 0, 1, 0), "IUI", 9, "From Number",
                "From Document Number", "", "N", self.doOrd, odr, None,
                ("notzero", )), [("T", 0, 2, 0), "IUI", 9, "To   Number",
                                 "To Document Number", "", "N", None, odr,
                                 None, ("notzero", )])
        state = self.df.disableButtonsTags()
        self.rp = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doReprntEnd, "n"), ),
                               txit=(self.doReprntExit, ),
                               view=("N", "V"),
                               mail=("B", "Y"))
        self.rp.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doMode(self, frt, pag, r, c, p, i, w):
        if w == "C":
            self.copy = "y"
        else:
            self.copy = "n"

    def doOrd(self, frt, pag, r, c, p, i, w):
        self.rp.topf[pag][2][5] = w

    def doReprntEnd(self):
        self.rp.closeProcess()
        self.df.setWidget(self.df.mstFrame, state="hide")
        frm = self.rp.t_work[0][0][1]
        if not self.rp.t_work[0][0][2]:
            to = frm
        else:
            to = self.rp.t_work[0][0][2]
        odr = self.sql.getRec("strpom",
                              cols=["pom_ordno"],
                              where=[("pom_cono", "=", self.opts["conum"]),
                                     ("pom_ordno", ">=", frm),
                                     ("pom_ordno", "<=", to)])
        if odr:
            PrintOrder(self.opts["mf"],
                       self.opts["conum"],
                       self.opts["conam"],
                       odr,
                       tname=self.tname,
                       repprt=self.rp.repprt,
                       repeml=self.rp.repeml,
                       copy=self.copy)
        self.df.setWidget(self.df.mstFrame, state="show")

    def doReprntExit(self):
        self.rp.closeProcess()

    def doCrsMaint(self):
        state = self.df.disableButtonsTags()
        cf = PwdConfirm(self.opts["mf"],
                        conum=self.opts["conum"],
                        system="STR",
                        code="NewCrs")
        if cf.flag == "yes":
            callModule(self.opts["mf"],
                       self.df,
                       "cr1010",
                       coy=(self.opts["conum"], self.opts["conam"]),
                       period=None,
                       user=self.opts["capnm"])
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doStrMaint(self):
        state = self.df.disableButtonsTags()
        cf = PwdConfirm(self.opts["mf"],
                        conum=self.opts["conum"],
                        system="STR",
                        code="NewStr")
        if cf.flag == "yes":
            callModule(self.opts["mf"],
                       self.df,
                       "st1010",
                       coy=(self.opts["conum"], self.opts["conam"]),
                       period=None,
                       user=self.opts["capnm"])
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doAccept(self):
        self.df.setWidget(self.df.B11, "disabled")
        if self.df.col == 1:
            self.doCancel()
        else:
            # Update Tables
            self.doUpdateTables()
            # Commit Transaction
            self.opts["mf"].dbm.commitDbase()
            # Print Document
            if self.acttyp == "N" or (self.acttyp == "A" and self.amend):
                self.df.setWidget(self.df.mstFrame, state="hide")
                PrintOrder(self.opts["mf"],
                           self.opts["conum"],
                           self.opts["conam"],
                           self.ordno,
                           tname=self.tname,
                           repprt=self.pr.repprt,
                           repeml=self.pr.repeml,
                           copy=self.acttyp.lower())
                self.df.setWidget(self.df.mstFrame, state="show")
            self.df.focusField("T", 0, 1)

    def doRibbon(self):
        tit = ("Ribbon Line", )
        fld = ((("T", 0, 0, 0), "INA", 30, "Customer Order", "", self.cnam,
                "N", None, None, None, None),
               (("T", 0, 1,
                 0), "INA", 30, "Job Number", "", self.cnam, "N", None, None,
                None, None), (("T", 0, 2, 0), "INA", 30, "Contact Person", "",
                              self.cnam, "N", None, None, None, None),
               (("T", 0, 3, 0), "INA", 10, "VAT Number", "", self.vatn, "N",
                self.doVatNum, None, None, None))
        state = self.df.disableButtonsTags()
        self.rb = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doRibEnd, "n"), ),
                               txit=(self.doRibExit, ),
                               focus=False)
        if self.ribbon:
            self.rb.loadEntry("T", 0, 0, data=self.ribbon[0])
            self.rb.loadEntry("T", 0, 1, data=self.ribbon[1])
            self.rb.loadEntry("T", 0, 2, data=self.ribbon[2])
            self.rb.loadEntry("T", 0, 3, data=self.ribbon[3])
        self.rb.focusField("T", 0, 1)
        self.rb.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doVatNum(self, frt, pag, r, c, p, i, w):
        if self.ordtot >= 1000.00 and not w:
            return "Invalid VAT Number"

    def doRibEnd(self):
        self.ribbon = []
        for x in range(0, self.rb.topq[0]):
            self.ribbon.append(self.rb.t_work[0][0][x])
        self.doRibExit()

    def doRibExit(self):
        self.rb.closeProcess()

    def doUpdateTables(self):
        # Update strpom with ribbon, delivery and message details
        whr = [("pom_cono", "=", self.opts["conum"]),
               ("pom_ordno", "=", self.ordno), ("pom_acno", "=", self.acno)]
        if self.ribbon:
            self.sql.updRec(
                "strpom",
                cols=["pom_cusord", "pom_jobnum", "pom_contact", "pom_vatno"],
                data=[
                    self.ribbon[0], self.ribbon[1], self.ribbon[2],
                    self.ribbon[3]
                ],
                where=whr)
            if not self.vatn:
                self.sql.updRec("crsmst",
                                cols=["crm_vatno"],
                                data=[self.ribbon[1]],
                                where=[("crm_cono", "=", self.opts["conum"]),
                                       ("crm_acno", "=", self.acno)])
        if self.deladd:
            self.sql.updRec(
                "strpom",
                cols=["pom_add1", "pom_add2", "pom_add3", "pom_add4"],
                data=[
                    self.deladd[0], self.deladd[1], self.deladd[2],
                    self.deladd[3]
                ],
                where=whr)
        if self.message:
            self.sql.updRec("strpom",
                            cols=["pom_mess"],
                            data=[self.message],
                            where=whr)
        if self.acttyp != "R":
            return
        # Receipt of Order
        # Create Stores Transactions and update strpot lines
        trn = self.sql.getRec("strpot",
                              where=[("pot_cono", "=", self.opts["conum"]),
                                     ("pot_ordno", "=", self.ordno)],
                              order="pot_group, pot_code")
        if not trn:
            return
        for line in trn:
            self.doExtData(line)
            curdt = int(self.deldt / 100)
            # Update strpom record
            self.sql.updRec("strpom",
                            cols=["pom_delno", "pom_deldt"],
                            data=[self.delno, self.deldt],
                            where=[("pom_cono", "=", self.opts["conum"]),
                                   ("pom_ordno", "=", self.ordno)])
            # Write strtrn record
            data = [
                self.opts["conum"], self.grp, self.code, self.loc, self.deldt,
                1, self.othno, self.batch, self.delno, self.qty, self.excamt,
                0, curdt, self.name, 0, self.acno, "", "STR", self.disrat, "",
                self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("strtrn", data=data)
            # If Integrated Create GL Transaction (SOH and Recon Accounts)
            if self.stgl == "Y" and self.excamt:
                # Stock on Hand Control
                data = (self.opts["conum"], self.soh, curdt, self.deldt, 5,
                        self.othno, self.batch, self.excamt, 0, self.name, "",
                        "", 0, self.opts["capnm"], self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)
                cst = float(ASD(0) - ASD(self.excamt))
                # Stock Reconciliation Control
                data = (self.opts["conum"], self.ssp, curdt, self.deldt, 5,
                        self.othno, self.batch, cst, 0, self.name, "", "", 0,
                        self.opts["capnm"], self.sysdtw, 0)
                self.sql.insRec("gentrn", data=data)

    def doExtData(self, line):
        self.grp = line[self.sql.strpot_col.index("pot_group")]
        self.code = line[self.sql.strpot_col.index("pot_code")]
        self.uoi = line[self.sql.strpot_col.index("pot_uoi")]
        self.desc = line[self.sql.strpot_col.index("pot_desc")]
        self.qty = line[self.sql.strpot_col.index("pot_qty")]
        self.price = line[self.sql.strpot_col.index("pot_price")]
        self.disrat = line[self.sql.strpot_col.index("pot_disper")]
        self.vatcod = line[self.sql.strpot_col.index("pot_vatcod")]
        self.vatrte = line[self.sql.strpot_col.index("pot_vatrat")]
        # Calculate Values
        rat = float(ASD(100) + ASD(self.vatrte))
        inc = round((self.price * rat / 100.0), 4)
        exc = round((self.price * 1), 2)
        dis = float(ASD(100) - ASD(self.disrat))
        self.excamt = round((self.qty * exc * dis / 100.0), 2)
        self.incamt = round((self.qty * inc * dis / 100.0), 2)
        self.vatamt = float(ASD(self.incamt) - ASD(self.excamt))

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        if self.acttyp == "N":
            self.sql.updRec("strpom",
                            cols=["pom_delno"],
                            data=["cancel"],
                            where=[("pom_cono", "=", self.opts["conum"]),
                                   ("pom_ordno", "=", self.ordno),
                                   ("pom_acno", "=", self.acno)])
            self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)
Esempio n. 16
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()
Esempio n. 17
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()
Esempio n. 18
0
class gl1060(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):
        # Create SQL Object
        self.sql = Sql(self.opts["mf"].dbm, [
            "assgrp", "crsmst", "ctlctl", "ctlmst", "ctlvmf", "drsmst",
            "drschn", "genint", "genmst", "genrcc", "rtlprm"
        ],
                       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"])
        return True

    def mainProcess(self):
        ctl = {
            "stype":
            "R",
            "tables": ("ctlctl", "genmst"),
            "cols":
            (("ctl_code", "", 0, "Ctl-Code"), ("ctl_conacc", "", 0, "G/L-Num"),
             ("glm_desc", "", 30, "Description")),
            "where": [("ctl_cono", "=", self.opts["conum"]),
                      ("ctl_code", "like", "bank_%"), ("glm_cono=ctl_cono", ),
                      ("glm_acno=ctl_conacc", )],
            "index":
            1
        }
        rcc = {
            "stype":
            "R",
            "tables": ("genrcc", ),
            "cols":
            (("grc_memo", "", 0, "Code"), ("grc_desc1", "", 0, "Details"),
             ("grc_rtn", "", 0, "R"), ("grc_acoy", "", 0, "Coy"),
             ("grc_aacc", "", 0, "Acc-Num"), ("grc_acrs", "", 0, "Crs-Acc"),
             ("grc_achn", "", 0, "Chn"), ("grc_adrs", "", 0,
                                          "Drs-Acc"), ("grc_vat", "", 0, "V")),
            "where": [("grc_cono", "=", self.opts["conum"])],
            "whera": [["T", "grc_acno", 0]]
        }
        rct = {
            "stype":
            "R",
            "tables": ("genrct", ),
            "cols": (("grt_memo", "", 75, "Details"), ("grt_amount", "SD",
                                                       13.2, "Value")),
            "where": [("grt_cono", "=", self.opts["conum"]),
                      ("grt_flag", "=", "N")],
            "whera": [["T", "grt_acno", 0, 0]],
            "group":
            "grt_memo",
            "order":
            "grt_memo",
            "comnd":
            self.doSameField
        }
        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")),
            "whera": [["T", "glm_cono", 7]]
        }
        chn = {
            "stype": "R",
            "tables": ("drschn", ),
            "cols":
            (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")),
            "whera": [["T", "chm_cono", 7]]
        }
        self.crm = {
            "stype":
            "R",
            "tables": ("crsmst", ),
            "cols":
            (("crm_acno", "", 0, "Acc-Num"), ("crm_name", "", 0, "Name", "Y"),
             ("crm_add1", "", 0, "Address Line 1")),
            "where": [("crm_stat", "<>", "X")],
            "whera": [["T", "crm_cono", 7]]
        }
        self.drm = {
            "stype":
            "R",
            "tables": ("drsmst", ),
            "cols":
            (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"),
             ("drm_add1", "", 0, "Address Line 1")),
            "where": [("drm_stat", "<>", "X")],
            "whera": [["T", "drm_cono", 7], ["T", "drm_chain", 11]]
        }
        vat = {
            "stype":
            "R",
            "tables": ("ctlvmf", ),
            "cols": (("vtm_code", "", 0, "Acc-Num"), ("vtm_desc", "", 0,
                                                      "Description", "Y")),
            "whera": [["T", "vtm_cono", 7]]
        }
        r1s = (("Payment", "P"), ("Receipt", "R"))
        r2s = (("Oldest", "O"), ("Current", "C"))
        fld = [[("T", 0, 0, 0), "IUI", 7, "Bank Account", "", "",
                "Y", self.doAccNum, ctl, None, None],
               (("T", 0, 0, 0), "ONA", 30, ""),
               [("T", 0, 1, 0), "IUI", 5, "Memo Code",
                "Memo Code (Blank for Next)", "", "Y", self.doMemo, rcc, None,
                None],
               [("T", 0, 2, 0), "INA", 50, "Memo Desc Contains", "", "", "N",
                self.doDesc1, rct, self.doDelete, ("notblank", )],
               (("T", 0, 3, 0), "INA", 50, "      and Contains",
                "Desc Also Contains", "", "N", self.doDesc2, rct, None, None),
               (("T", 0, 4, 0), "INA", 50, "      and Contains",
                "Desc Also Contains", "", "N", self.doDesc3, rct, None, None),
               (("T", 0, 5, 0), ("IRB", r1s), 0, "Transaction Type", "", "P",
                "N", self.doTypCod, None, None, None),
               (("T", 0, 6,
                 0), "IUI", 7, "Allocation Company", "", self.opts["conum"],
                "N", self.doAllCoy, coy, None, ("notzero", )),
               (("T", 0, 6, 0), "ONA", 30, ""),
               (("T", 0, 7, 0), "IUI", 7, "Allocation Account", "", "", "N",
                self.doAllAcc, glm, None, ("notzero", )),
               (("T", 0, 7, 0), "ONA", 30, ""),
               [["T", 0, 8, 0], "IUI", 3, "Chn", "Chain Store Code", 0, "N",
                self.doDrsChn, chn, None, ("efld", )],
               (("T", 0, 8, 0), "ONA", 30, ""),
               [("T", 0, 9, 0), "INA", 7, "Acc-Num", "Account Number", "", "N",
                self.doCrsDrsAcc, self.crm, None, ("notblank", )],
               (("T", 0, 9, 0), "ONA", 30, ""),
               (("T", 0, 10, 0), ("IRB", r2s), 0, "Ageing Code", "", "O", "N",
                self.doCrsDrsAge, None, None, None, None, """
The Ageing Codes are as follows:

Oldest  - Automatically age against the oldest outstanding transactions.

Current - Do not age the transaction.
"""),
               (("T", 0, 11, 0), "INA", 1, "Vat Code", "", "", "N",
                self.doVatCod, vat, None, None)]
        but = [("Cancel", None, self.doCancel, 0, ("T", 0, 4), ("T", 0, 1)),
               ("Quit", None, self.doExit, 1, None, None)]
        if "args" in self.opts:
            for f in (0, 2, 3):
                if f == 3:
                    fld[f][4] += "(noesc)"
                else:
                    fld[f][7] = None
                fld[f][8] = None
                fld[f][9] = None
            del but[0]
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        if "args" in self.opts:
            foc = False
        else:
            foc = True
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt,
                               focus=foc)
        if "args" in self.opts:
            self.df.loadEntry("T", 0, 0, data=self.opts["args"][0])
            self.doAccNum("T", 0, 0, 1, 0, 0, self.opts["args"][0])
            self.df.loadEntry("T", 0, 2, data=0)
            self.doMemo("T", 0, 0, 3, 2, 2, 0)
            self.df.loadEntry("T", 0, 3, data=self.opts["args"][1][2])
            self.df.focusField("T", 0, 4)

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

    def doSameField(self, frt, pag, r, c, p, i, w):
        self.df.loadEntry("T", 0, self.df.pos, data=w[0])
        self.df.focusField("T", 0, self.df.col)

    def doMemo(self, frt, pag, r, c, p, i, w):
        if not w:
            w = self.sql.getRec("genrcc",
                                cols=["max(grc_memo)"],
                                where=[("grc_cono", "=", self.opts["conum"]),
                                       ("grc_acno", "=", self.acno)],
                                limit=1)
            if not w or not w[0]:
                self.memo = 1
            else:
                self.memo = w[0] + 1
            self.df.loadEntry(frt, pag, p, data=self.memo)
        else:
            self.memo = w
        self.old = self.sql.getRec("genrcc",
                                   where=[("grc_cono", "=",
                                           self.opts["conum"]),
                                          ("grc_acno", "=", self.acno),
                                          ("grc_memo", "=", self.memo)],
                                   limit=1)
        if not self.old:
            self.new = "y"
        else:
            self.new = "n"
            col = self.sql.genrcc_col
            self.desc1 = self.old[col.index("grc_desc1")]
            self.desc2 = self.old[col.index("grc_desc2")]
            self.desc3 = self.old[col.index("grc_desc3")]
            self.opts["rtn"] = self.old[col.index("grc_rtn")]
            self.acoy = self.old[col.index("grc_acoy")]
            self.aacc = self.old[col.index("grc_aacc")]
            self.acrs = self.old[col.index("grc_acrs")]
            self.achn = self.old[col.index("grc_achn")]
            self.aage = self.old[col.index("grc_aage")]
            self.adrs = self.old[col.index("grc_adrs")]
            self.vat = self.old[col.index("grc_vat")]
            self.df.loadEntry(frt, pag, 3, data=self.desc1)
            self.df.loadEntry(frt, pag, 4, data=self.desc2)
            self.df.loadEntry(frt, pag, 5, data=self.desc3)
            self.df.loadEntry(frt, pag, 6, data=self.opts["rtn"])
            self.df.loadEntry(frt, pag, 7, data=self.acoy)
            self.df.loadEntry(frt, pag, 8, data=self.getCoyName())
            self.df.loadEntry(frt, pag, 9, data=self.aacc)
            self.df.loadEntry(frt, pag, 10, data=self.getAccDesc())
            # Creditor and Debtor Details
            if self.acrs:
                self.crsdrs = "crs"
                self.df.loadEntry(frt, pag, 11, data=0)
                self.df.loadEntry(frt, pag, 12, data="")
                self.df.loadEntry(frt, pag, 13, data=self.acrs)
                self.df.loadEntry(frt, pag, 14, data=self.getCrsName())
                self.df.loadEntry(frt, pag, 15, data=self.aage)
            elif self.adrs:
                self.crsdrs = "drs"
                self.df.loadEntry(frt, pag, 11, data=self.achn)
                if self.achn:
                    self.df.loadEntry(frt, pag, 12, data=self.getChainName())
                else:
                    self.df.loadEntry(frt, pag, 12, data="")
                self.df.loadEntry(frt, pag, 13, data=self.adrs)
                self.df.loadEntry(frt, pag, 14, data=self.getDrsName())
                self.df.loadEntry(frt, pag, 15, data=self.aage)
            else:
                self.crsdrs = None
                self.df.loadEntry(frt, pag, 11, data=0)
                self.df.loadEntry(frt, pag, 12, data="")
                self.df.loadEntry(frt, pag, 13, data="")
                self.df.loadEntry(frt, pag, 14, data="")
                self.df.loadEntry(frt, pag, 15, data="")
            # VAT Code
            self.df.loadEntry(frt, pag, 16, data=self.vat)

    def doDesc1(self, frt, pag, r, c, p, i, w):
        self.desc1 = w

    def doDesc2(self, frt, pag, r, c, p, i, w):
        self.desc2 = w
        if not self.desc2:
            self.desc3 = ""
            self.df.loadEntry(frt, pag, p + 1, data=self.desc3)
            if "args" in self.opts:
                if self.opts["args"][1][-1] < 0:
                    self.opts["rtn"] = "P"
                else:
                    self.opts["rtn"] = "R"
                self.df.loadEntry(frt, pag, p + 2, data=self.opts["rtn"])
                return "sk2"
            return "sk1"

    def doDesc3(self, frt, pag, r, c, p, i, w):
        self.desc3 = w
        if "args" in self.opts:
            if self.opts["args"][1][-1] < 0:
                self.opts["rtn"] = "P"
            else:
                self.opts["rtn"] = "R"
            self.df.loadEntry(frt, pag, p + 1, data=self.opts["rtn"])
            return "sk1"

    def doTypCod(self, frt, pag, r, c, p, i, w):
        self.opts["rtn"] = w
        if not self.incoac:
            self.acoy = self.opts["conum"]
            if self.doChkLoadCtls():
                return "rf"
            else:
                self.df.loadEntry(frt, pag, p + 1, data=self.acoy)
                self.df.loadEntry(frt, pag, p + 2, data=self.getCoyName())
                return "sk2"

    def doAllCoy(self, frt, pag, r, c, p, i, w):
        self.acoy = w
        name = self.getCoyName()
        if not name:
            return "Invalid Company Number"
        self.df.loadEntry(frt, pag, p + 1, data=name)
        return self.doChkLoadCtls()

    def doChkLoadCtls(self):
        # Check for Intercompany Records
        if self.acoy != self.opts["conum"]:
            acc = self.sql.getRec("genint",
                                  where=[("cti_cono", "=", self.opts["conum"]),
                                         ("cti_inco", "=", self.acoy)],
                                  limit=1)
            if not acc:
                return "Invalid Company, No Intercompany Record 1"
            acc = self.sql.getRec("genint",
                                  where=[("cti_cono", "=", self.acoy),
                                         ("cti_inco", "=", self.opts["conum"])
                                         ],
                                  limit=1)
            if not acc:
                return "Invalid Company, No Intercompany Record 2"
        # Get Company Details
        ctlmst = self.gc.getCtl("ctlmst", self.acoy)
        if not ctlmst:
            return "rf"
        # Set Company VAT Default
        self.taxdf = ctlmst["ctm_taxdf"]
        if not self.taxdf:
            self.taxdf = "N"
        # Check for Integrated Systems
        mod = []
        for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2):
            mod.append(ctlmst["ctm_modules"][x:x + 2])
        # Check for Control Records e.g. VAT and Discounts
        self.ctlctl = self.gc.getCtl("ctlctl", self.acoy)
        if not self.ctlctl:
            return "rf"
        ctls = ["vat_ctl"]
        # Load Crs Integration
        if mod.count("CR"):
            ctl = self.gc.getCtl("crsctl", self.acoy)
            if not ctl:
                return "rf"
            self.crs_gl = ctl["ctc_glint"]
            if self.crs_gl == "Y":
                ctls.extend(["crs_ctl", "dis_rec"])
        else:
            self.crs_gl = "N"
        # Load Drs Integration and Chain Store Flag
        if mod.count("DR"):
            ctl = self.gc.getCtl("drsctl", self.acoy)
            if not ctl:
                return "rf"
            self.drs_gl = ctl["ctd_glint"]
            self.drs_ch = ctl["ctd_chain"]
            if self.drs_gl == "Y":
                ctls.extend(["drs_ctl", "dis_all"])
        else:
            self.drs_gl = "N"
        if self.gc.chkRec(self.acoy, self.ctlctl, ctls):
            return "rf"

    def doAllAcc(self, frt, pag, r, c, p, i, w):
        if self.acoy == self.opts["conum"] and w == self.acno:
            return "This is the Bank Account Number"
        ctl = True
        self.crsdrs = False
        if self.crs_gl == "Y" and w == self.ctlctl["crs_ctl"]:
            self.crsdrs = "crs"
            self.df.topf[0][p + 4][8] = self.crm
        elif self.drs_gl == "Y" and w == self.ctlctl["drs_ctl"]:
            self.crsdrs = "drs"
            self.df.topf[0][p + 4][8] = self.drm
        if self.crsdrs:
            ctl = False
        chk = chkGenAcc(self.opts["mf"], self.acoy, w, ctl=ctl)
        if type(chk) is str:
            return chk
        self.aacc = w
        self.df.loadEntry(frt, pag, p + 1, data=chk[0])
        if self.crsdrs:
            if self.crsdrs == "crs" or self.drs_ch == "N":
                self.achn = 0
                self.df.topf[0][p + 2][1] = "OUI"
                self.df.loadEntry(frt, pag, p + 2, data=self.achn)
                self.df.loadEntry(frt, pag, p + 3, data="")
                return "sk3"
            elif self.crsdrs == "drs":
                self.df.topf[0][p + 2][1] = "IUI"
                return "sk1"
        else:
            self.acrs = ""
            self.achn = 0
            self.adrs = ""
            self.aage = ""
            self.df.loadEntry(frt, pag, p + 2, data=0)
            self.df.loadEntry(frt, pag, p + 3, data="")
            self.df.loadEntry(frt, pag, p + 4, data="")
            self.df.loadEntry(frt, pag, p + 5, data="")
            self.df.loadEntry(frt, pag, p + 6, data="")
            if not self.df.t_work[pag][0][p + 7]:
                if chk[2]:
                    self.df.loadEntry(frt, pag, p + 7, data=chk[2])
                else:
                    self.df.loadEntry(frt, pag, p + 7, data=self.taxdf)
            return "sk6"

    def doDrsChn(self, frt, pag, r, c, p, i, w):
        self.achn = w
        name = self.getChainName()
        if not name:
            return "Invalid Account Number"
        self.df.loadEntry(frt, pag, p + 1, data=name)

    def doCrsDrsAcc(self, frt, pag, r, c, p, i, w):
        if self.crsdrs == "crs":
            self.acrs = w
            name = self.getCrsName()
        else:
            self.adrs = w
            name = self.getDrsName()
        if not name:
            return "Invalid Account Number %s" % self.crsdrs.capitalize()
        if name[1] == "X":
            return "Invalid Account %s, Redundant" % self.crsdrs.capitalize()
        self.df.loadEntry(frt, pag, p + 1, data=name[0])

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

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

    def doDelete(self):
        self.sql.delRec("genrcc",
                        where=[("grc_cono", "=", self.opts["conum"]),
                               ("grc_acno", "=", self.acno),
                               ("grc_memo", "=", self.memo)])

    def doEnd(self):
        data = [
            self.opts["conum"], self.acno, self.memo, self.desc1, self.desc2,
            self.desc3, self.opts["rtn"], self.acoy, self.aacc
        ]
        if self.crsdrs:
            if self.crsdrs == "crs":
                data.extend([self.acrs, 0, "", self.aage, self.vat])
            else:
                data.extend(["", self.achn, self.adrs, self.aage, self.vat])
        else:
            data.extend(["", 0, "", "", self.vat])
        if self.new == "y":
            self.sql.insRec("genrcc", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.genrcc_col
            data.append(self.old[col.index("grc_xflag")])
            self.sql.updRec("genrcc",
                            data=data,
                            where=[("grc_cono", "=", self.opts["conum"]),
                                   ("grc_acno", "=", self.acno),
                                   ("grc_memo", "=", self.memo)])
        if "args" in self.opts:
            self.doExit()
        else:
            for x in range(2, self.df.topq[0]):
                self.df.loadEntry("T", 0, x, data="")
            self.df.focusField("T", 0, 3)

    def getCoyName(self):
        coy = self.sql.getRec("ctlmst",
                              cols=["ctm_name"],
                              where=[("ctm_cono", "=", self.acoy)],
                              limit=1)
        if coy:
            return coy[0]

    def getAccDesc(self):
        acc = self.sql.getRec("genmst",
                              cols=["glm_desc"],
                              where=[("glm_cono", "=", self.acoy),
                                     ("glm_acno", "=", self.aacc)],
                              limit=1)
        if acc:
            return acc[0]

    def getCrsName(self):
        acc = self.sql.getRec("crsmst",
                              cols=["crm_name", "ctm_stat"],
                              where=[("crm_cono", "=", self.acoy),
                                     ("crm_acno", "=", self.acrs)],
                              limit=1)
        if acc:
            return acc

    def getChainName(self):
        acc = self.sql.getRec("drschn",
                              cols=["chm_name"],
                              where=[("chm_cono", "=", self.acoy),
                                     ("chm_chain", "=", self.achn)],
                              limit=1)
        if acc:
            return acc[0]

    def getDrsName(self):
        acc = self.sql.getRec("drsmst",
                              cols=["drm_name", "drm_stat"],
                              where=[("drm_cono", "=", self.acoy),
                                     ("drm_chain", "=", self.achn),
                                     ("drm_acno", "=", self.adrs)],
                              limit=1)
        if acc:
            return acc

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

    def doExit(self):
        self.opts["mf"].dbm.commitDbase()
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Esempio n. 19
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()
Esempio n. 20
0
class st1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doCancel(self):
        self.opts["mf"].dbm.rollbackDbase()
        self.df.selPage("Basic-A")
        self.df.focusField("T", 0, 1)
Esempio n. 21
0
class ml3040(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            if "args" in self.opts:
                self.tname = self.stpl
                self.mesno = 0
                self.doEnd()
            else:
                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"])
        ctlmst = gc.getCtl("ctlmst", self.opts["conum"])
        if not ctlmst:
            return
        self.taxdf = ctlmst["ctm_taxdf"]
        memctl = gc.getCtl("memctl", self.opts["conum"])
        if not memctl:
            return
        self.ldays = memctl["mcm_ldays"]
        self.lme = memctl["mcm_lme"]
        self.stpl = memctl["mcm_sttpl"]
        self.fromad = memctl["mcm_emadd"]
        self.sql = Sql(self.opts["mf"].dbm, [
            "ctlmes", "ctlmst", "memmst", "memtrn", "memadd", "memcat",
            "memctc", "memctp", "memctk", "memkon", "memlnk", "tplmst"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        yy = int(self.lme / 10000)
        mm = (int(self.lme / 100) % 100) + 1
        while mm > 12:
            yy += 1
            mm -= 12
        self.nme = mthendDate((yy * 10000) + (mm * 100) + 1)
        mm += 1
        while mm > 12:
            yy += 1
            mm -= 12
        self.nne = mthendDate((yy * 10000) + (mm * 100) + 1)
        self.trtypes = []
        for t in mltrtp:
            self.trtypes.append(t[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", "=", "MEM")],
            "order":
            "tpm_tname"
        }
        self.mlm = {
            "stype":
            "R",
            "tables": ("memmst", ),
            "cols":
            (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"),
             ("mlm_idnum", "", 0, "Identity-Numb"), ("mlm_gender", "", 0, "G"),
             ("mlm_state", "", 0, "S"), ("mlm_surname", "", 0, "Surname", "Y"),
             ("mlm_names", "", 0, "Names", "F")),
            "where": [],
            "order":
            "mlm_surname, mlm_names",
            "sort":
            False
        }
        mss = {
            "stype":
            "R",
            "tables": ("ctlmes", ),
            "cols": (("mss_message", "", 0, "Num"), ("mss_detail", "NA", 50,
                                                     "Details")),
            "where": [("mss_system", "=", "MEM")],
            "order":
            "mss_message"
        }
        r1s = (("All", "Z"), ("Active", "A"), ("Deceased", "D"),
               ("Inactive", "I"), ("Resigned", "R"), ("Suspended",
                                                      "S"), ("Defaulted", "X"))
        r2s = (("Yes", "Y"), ("Range", "R"), ("Singles", "S"),
               ("Print Only", "P"), ("Email Only", "E"))
        r3s = (("Yes", "Y"), ("No", "N"))
        r4s = (("Yes", "Y"), ("No", "N"), ("Current", "C"))
        r5s = (("Number", "N"), ("Surname", "M"))
        fld = ((("T", 0, 0, 0), "INA", 20, "Template Name", "", self.stpl, "Y",
                self.doTplNam, tpm, None,
                None), (("T", 0, 1, 0), ("IRB", r1s), 0, "Status", "", "A",
                        "Y", self.doStatus, None, None, None),
               (("T", 0, 2, 0), ("IRB", r2s), 0, "Whole File", "", "Y", "Y",
                self.doWhole, None, None, None),
               (("T", 0, 3, 0), "IUI", 6, "Member Start", "Starting Number", 1,
                "Y", self.doMember, self.mlm, None,
                None), (("T", 0, 3, 0), "IUI", 6, "End", "Ending Number",
                        999999, "Y", self.doMember, self.mlm, None, None),
               (("T", 0, 4, 0), ("IRB", r3s), 0, "Current Year Only", "", "N",
                "Y", self.doCurrent, None, None,
                None), (("T", 0, 5, 0), ("IRB", r4s), 0, "Zero Balances", "",
                        "C", "Y", self.doZeros, None, None, None),
               (("T", 0, 6, 0), ("IRB", r3s), 0, "Paid Transactions", "", "Y",
                "Y", self.doPaid, None, None,
                None), (("T", 0, 7, 0), ("IRB", r3s), 0, "Minus Balances", "",
                        "N", "Y", self.doMinus, None, None,
                        None), (("T", 0, 8, 0), "IUI", 3, "Message Number", "",
                                "", "Y", self.doMessno, mss, None, ("efld", )),
               (("T", 0, 9, 0), "ID1", 10, "Statement Date", "", self.sysdtw,
                "Y", self.doDat, None, None,
                ("efld", )), (("T", 0, 10, 0), ("IRB", r5s), 0, "Sort Order",
                              "", "N", "Y", self.doSort, None, None, None))
        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", "=", "S"),
                                     ("tpm_system", "=", "MEM")],
                              limit=1)
        if not acc:
            return "Invalid Template Name"
        self.tname = w

    def doStatus(self, frt, pag, r, c, p, i, w):
        self.status = w
        self.mlm["where"] = [("mlm_cono", "=", self.opts["conum"])]
        if self.status != "Z":  # Not All
            self.mlm["where"].append(("mlm_state", "=", self.status))

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

    def doMember(self, frt, pag, r, c, p, i, w):
        if p == 3:
            self.start = w
        elif w < self.start:
            return "Invalid Member, Before From"
        else:
            self.to = w

    def doCurrent(self, frt, pag, r, c, p, i, w):
        self.current = w

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

    def doPaid(self, frt, pag, r, c, p, i, w):
        self.paid = w

    def doMinus(self, frt, pag, r, c, p, i, w):
        self.minus = w

    def doMessno(self, frt, pag, r, c, p, i, w):
        if w:
            acc = self.sql.getRec("ctlmes",
                                  cols=["mss_detail"],
                                  where=[("mss_system", "=", "MEM"),
                                         ("mss_message", "=", w)],
                                  limit=1)
            if not acc:
                return "Invalid Message Number"
        self.mesno = w

    def doDat(self, frt, pag, r, c, p, i, w):
        self.pro = False
        self.ynd = False
        if w > self.nne:
            showError(self.opts["mf"].body, "Month End Error",
                      "More than Two Month Ends are Missing, Aborting ...")
            return "rf"
        if w > self.nme:
            if self.nme == self.opts["period"][2][0]:
                ok = askQuestion(self.opts["mf"].body, "Year End Error",
                    "A Year End as at %s Has Not Been Run\n\n"\
                    "Would You Like to Raise Pro-Forma Charges?" %
                    self.opts["period"][2][1])
                if ok == "yes":
                    self.pro = True
                    self.ynd = True
            else:
                ok = askQuestion(self.opts["mf"].body, "Month End Error",
                    "A Month End as at %s Has Not Been Run\n\n"\
                    "Would You Like to Raise Pro-Forma Charges?" %
                    CCD(self.nme, "D1", 10).disp)
                if ok == "yes":
                    self.pro = True
        self.datew = w
        self.dated = self.df.t_disp[pag][0][p]
        self.curdt = int(w / 100)

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

    def doEnd(self):
        if "args" in self.opts:
            self.whole = "S"
            self.current = "N"
            self.zeros = "Y"
            self.paid = "Y"
            self.minus = "Y"
            self.mes = None
            self.mes = self.sql.getRec("ctlmes",
                                       cols=["mss_detail"],
                                       where=[("mss_system", "=", "MEM"),
                                              ("mss_message", "=", 1)],
                                       limit=1)
            self.curdt = int(self.opts["args"][1] / 100)
            self.dated = CCD(self.opts["args"][1], "D1", 10).disp
            self.pro = False
            self.repprt = self.opts["args"][2]
            self.repeml = self.opts["args"][3]
            recs = [self.opts["args"][0]]
        else:
            self.df.closeProcess()
            self.repprt = self.df.repprt
            self.repeml = self.df.repeml
            whr = [("mlm_cono", "=", self.opts["conum"])]
            if self.status != "Z":  # Not All
                whr.append(("mlm_state", "=", self.status))
            if self.sort == "N":
                odr = "mlm_memno"
            else:
                odr = "mlm_surname"
            if self.whole == "S":
                recs = getSingleRecords(
                    self.opts["mf"],
                    "memmst", ("mlm_memno", "mlm_surname", "mlm_names"),
                    head=["X", "Number", "Surname", "Names"],
                    where=whr,
                    order=odr,
                    selcol="mlm_surname")
            else:
                if self.whole == "R":
                    whr.append(("mlm_memno", "between", self.start, self.to))
                recs = self.sql.getRec("memmst", where=whr, order=odr)
                if not recs:
                    showError(self.opts["mf"].body, "Error",
                              "No Accounts Selected")
                    if "wait" not in self.opts:
                        self.opts["mf"].closeLoop()
                    return
            # Remove all linked accounts
            col = self.sql.memmst_col
            nos = []
            for acc in recs:
                nos.append(acc[col.index("mlm_memno")])
            chk = copyList(recs)
            for acc in chk:
                whr = [("mll_cono", "=", self.opts["conum"]),
                       ("mll_lnkno", "=", acc[col.index("mlm_memno")])]
                lnk = self.sql.getRec("memlnk", where=whr, limit=1)
                if lnk and lnk[1] in nos:
                    recs.remove(acc)
        if recs:
            self.emadd = self.repeml[2]
            self.form = DrawForm(self.opts["mf"].dbm,
                                 self.tname,
                                 wrkdir=self.opts["mf"].rcdic["wrkdir"])
            self.doLoadStatic()
            self.form.doNewDetail()
            if self.repeml[1] == "N":
                mess = "Printing Statements"
            else:
                mess = "Printing and Emailing Statements"
            p = ProgressBar(self.opts["mf"].body,
                            typ=mess,
                            mxs=len(recs),
                            esc=True)
            for num, rec in enumerate(recs):
                p.displayProgress(num)
                if p.quit:
                    break
                if self.pro:
                    self.doProForma(rec)
                self.doProcess(rec)
            p.closeProgress()
            if self.pro:
                self.opts["mf"].dbm.rollbackDbase()
            if p.quit or not self.form.page:
                pass
            elif self.repeml[1] == "N" or self.emadd:
                self.repeml[2] = self.emadd
                self.doPrint()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    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.dated)
        self.form.bank_details(cmc, ctm, 0)

    def doProForma(self, rec):
        self.refno = 0
        dmc = self.sql.memmst_col
        acc = [rec[dmc.index("mlm_memno")]]
        lnk = self.sql.getRec("memlnk",
                              cols=["mll_lnkno"],
                              where=[("mll_cono", "=", self.opts["conum"]),
                                     ("mll_memno", "=", acc[0])])
        for l in lnk:
            chk = self.sql.getRec("memmst",
                                  cols=["mlm_state"],
                                  where=[("mlm_cono", "=", self.opts["conum"]),
                                         ("mlm_memno", "=", l[0])],
                                  limit=1)
            if chk and chk[0] == "A":
                acc.append(l[0])
        for memno in acc:
            if self.ynd:
                data = doChkCatChg(self.opts["mf"], self.opts["conum"], memno,
                                   self.datew)
                if data:
                    if not data[3]:
                        self.doRaiseCharge(memno,
                                           "B",
                                           data[0],
                                           data[1],
                                           data[2],
                                           data[3],
                                           data[4],
                                           data[5],
                                           skip=True)
                    self.sql.delRec("memcat",
                                    where=[("mlc_cono", "=",
                                            self.opts["conum"]),
                                           ("mlc_memno", "=", memno),
                                           ("mlc_type", "=", "B"),
                                           ("mlc_code", "=", data[0])])
                    self.sql.insRec("memcat",
                                    data=[
                                        self.opts["conum"], memno, "B",
                                        data[7], "", self.datew, 0, 0
                                    ])
            cols = [
                "mlc_type", "mlc_code", "mcc_desc", "mcc_freq", "mlc_start",
                "mlc_end", "mlc_last"
            ]
            wher = [("mlc_cono", "=", self.opts["conum"]),
                    ("mlc_memno", "=", memno), ("mlc_start", ">", 0),
                    ("mlc_start", "<=", self.datew), ("mcc_cono=mlc_cono", ),
                    ("mcc_type=mlc_type", ), ("mcc_code=mlc_code", ),
                    ("mcc_freq", "<>", "N")]
            cats = self.sql.getRec(tables=["memcat", "memctc"],
                                   cols=cols,
                                   where=wher,
                                   order="mlc_type, mlc_code")
            for ctyp, code, desc, freq, start, end, last in cats:
                if start > self.datew:
                    # Not yet Started
                    continue
                if last and end and end < self.datew:
                    # Ended
                    continue
                if last and freq == "O":
                    # Once Off
                    continue
                if last and last > self.opts["period"][2][0]:
                    # Already Raised for Next Period in Advance
                    continue
                if not self.ynd and last and freq == "A" and \
                        last >= self.opts["period"][1][0] and \
                        last <= self.opts["period"][2][0]:
                    # Already Raised in Financial Period
                    continue
                self.doRaiseCharge(memno, ctyp, code, start, end, last, freq,
                                   desc)

    def doRaiseCharge(self,
                      memno,
                      ctyp,
                      code,
                      start,
                      end,
                      last,
                      freq,
                      desc,
                      skip=False):
        if freq == "O":
            dte = True
            nxt = False
        else:
            dte = False
            nxt = bool(self.ynd or freq == "M")
            if not last:
                if dateDiff(start, self.nme, "days") > self.ldays:
                    dte = True
                else:
                    nxt = True
        if dte:
            trdt = start
            amt = self.doGetCharge(ctyp, code, trdt)
            if amt:
                self.doUpdateTables(memno, ctyp, code, desc, trdt, amt)
        if not skip and nxt:
            if end and self.datew > end:
                return
            trdt = self.datew
            amt = self.doGetCharge(ctyp, code, trdt)
            if amt:
                self.doUpdateTables(memno, ctyp, code, desc, trdt, amt)

    def doGetCharge(self, ctyp, code, date):
        prc = self.sql.getRec("memctp",
                              where=[("mcp_cono", "=", self.opts["conum"]),
                                     ("mcp_type", "=", ctyp),
                                     ("mcp_code", "=", code),
                                     ("mcp_date", "<=", date)],
                              order="mcp_date desc",
                              limit=1)
        if not prc:
            # No Price
            return
        if prc[5] == "N" or (self.ynd and date == self.datew):
            # Not Pro Rata or End of Financial Year
            amt = CCD(prc[6], "UD", 12.2).work
        else:
            # Extract Pro Rata Rate
            mths = 17 - dateDiff(date, self.opts["period"][2][0], "months")
            if mths < 1:
                mths = 12
            amt = CCD(prc[mths], "UD", 12.2).work
        if not amt:
            # No Charge
            return
        else:
            return amt

    def doUpdateTables(self, memno, ctyp, code, desc, trdt, amt):
        batch = "PROFORM"
        self.refno += 1
        refno = "PF%07i" % self.refno
        curdt = int(trdt / 100)
        # VAT Rate and Amount
        vrte = getVatRate(self.sql, self.opts["conum"], self.taxdf, trdt)
        if vrte is None:
            vrte = 0.0
        vat = CCD(round(((amt * vrte) / 114), 2), "UD", 12.2).work
        # Members Ledger Transaction (memtrn)
        self.sql.insRec("memtrn",
                        data=[
                            self.opts["conum"], memno, 1, refno, batch, trdt,
                            amt, vat, curdt, ctyp, code, desc, self.taxdf, "",
                            self.opts["capnm"], self.sysdtw, 0
                        ],
                        unique="mlt_refno")
        # Members Category Record (memcat)
        self.sql.updRec("memcat",
                        cols=["mlc_last"],
                        data=[trdt],
                        where=[("mlc_cono", "=", self.opts["conum"]),
                               ("mlc_memno", "=", memno),
                               ("mlc_type", "=", ctyp),
                               ("mlc_code", "=", code)])

    def doProcess(self, mlm):
        dmc = self.sql.memmst_col
        tdc = self.form.sql.tpldet_col
        self.memno = mlm[dmc.index("mlm_memno")]
        self.doGetBalTrn()
        if not self.mlt[1]:
            return
        if self.zeros == "N" and not self.tbal:
            return
        elif self.zeros == "C" and not self.tbal and not self.mlt[2]:
            return
        if self.minus == "N" and self.tbal < 0:
            return
        eml = []
        kon = self.sql.getRec(tables=["memctk", "memkon"],
                              cols=["mlk_detail"],
                              where=[("mck_type", "=", "E"),
                                     ("mlk_cono", "=", self.opts["conum"]),
                                     ("mlk_memno", "=", self.memno),
                                     ("mlk_code=mck_code", )])
        for k in kon:
            eml.append(k[0])
        if self.whole == "E" and not eml:
            return
        elif self.whole == "P" and eml:
            return
        for col in dmc:
            d = "%s_C00" % col
            if d in self.form.newdic:
                dat = mlm[dmc.index(col)]
                self.form.newdic[d][tdc.index("tpd_text")] = dat
        self.doHeader(mlm, dmc, tdc)
        mlc, mlt = self.mlt[:2]
        if self.current == "Y":
            amt = 0
            bal = 0
            cdt = int(self.opts["period"][2][0] / 100)
            trn = copy.deepcopy(mlt)
            mlt = []
            while trn:
                rec = trn.pop()
                if rec[mlc.index("mlt_curdt")] < cdt:
                    amt = float(ASD(amt) + ASD(rec[mlc.index("mlt_tramt")]))
                    bal = float(ASD(bal) + ASD(rec[mlc.index("balance")]))
                else:
                    mlt.append(rec)
            if amt or bal:
                rec[mlc.index("mlt_type")] = 3
                rec[mlc.index("mlt_refno")] = "B/FWD"
                rec[mlc.index("mlt_batch")] = ""
                rec[mlc.index("mlt_tramt")] = amt
                rec[mlc.index("balance")] = bal
                rec[mlc.index("mlt_taxamt")] = 0
                rec[mlc.index("mlt_desc")] = "Balance Brought Forward"
                rec[mlc.index("mlt_taxind")] = ""
                rec[mlc.index("mlt_batind")] = ""
                mlt.insert(0, rec)
        if len(mlt) <= self.form.maxlines:
            self.doBody(mlc, mlt, tdc)
        else:
            amt = 0
            bal = 0
            lines = len(mlt) - self.form.maxlines + 1
            for _ in range(lines):
                trn = mlt.pop(0)
                amt = float(ASD(amt) + ASD(trn[mlc.index("mlt_tramt")]))
                bal = float(ASD(bal) + ASD(trn[mlc.index("balance")]))
            trn[mlc.index("mlt_type")] = 3
            trn[mlc.index("mlt_refno")] = "B/FWD"
            trn[mlc.index("mlt_batch")] = ""
            trn[mlc.index("mlt_tramt")] = amt
            trn[mlc.index("balance")] = bal
            trn[mlc.index("mlt_taxamt")] = 0
            trn[mlc.index("mlt_desc")] = "Balance Brought Forward"
            trn[mlc.index("mlt_taxind")] = ""
            trn[mlc.index("mlt_batind")] = ""
            mlt.insert(0, trn)
            self.doBody(mlc, mlt, tdc)
        self.doTotal(tdc)
        self.doTail(tdc)
        if self.repeml[1] == "Y" and not self.emadd:
            self.repeml[2] = eml
            self.doPrint()

    def doGetBalTrn(self):
        if self.paid == "Y":
            trans = "A"
        else:
            trans = "Y"
        bals = Balances(self.opts["mf"], "MEM", self.opts["conum"], self.curdt,
                        (self.memno, ))
        self.obal, self.tbal, self.ages, self.mlt = bals.doAllBals(trans=trans)
        lnk = self.sql.getRec("memlnk",
                              cols=["mll_lnkno"],
                              where=[("mll_cono", "=", self.opts["conum"]),
                                     ("mll_memno", "=", self.memno)])
        if not lnk:
            return
        for l in lnk:
            bals = Balances(self.opts["mf"], "MEM", self.opts["conum"],
                            self.curdt, (l[0], ))
            obal, tbal, ages, mlt = bals.doAllBals(trans=trans)
            for n, d in enumerate(mlt[1]):
                mlt[1][n][mlt[0].index("mlt_desc")] = "%s (%s)" % \
                    (d[mlt[0].index("mlt_desc")][:30],
                    d[mlt[0].index("mlt_memno")])
            self.obal = float(ASD(self.obal) + ASD(obal))
            self.tbal = float(ASD(self.tbal) + ASD(tbal))
            for x in range(5):
                self.ages[x] = float(ASD(self.ages[x]) + ASD(ages[x]))
            self.mlt[1].extend(mlt[1])
            self.mlt[2] += mlt[2]
        # Sort Transaction by Date
        self.mlt[1].sort(key=lambda x: x[mlt[0].index("mlt_trdt")])

    def doHeader(self, mlm, dmc, tdc):
        self.form.add_page()
        if "account_details" in self.form.tptp:
            tit = mlm[dmc.index("mlm_title")]
            sur = mlm[dmc.index("mlm_surname")]
            nam = mlm[dmc.index("mlm_names")]
            ini = ""
            for n, d in enumerate(nam.split()):
                if n < 3:
                    if not ini:
                        ini = d[0].upper()
                    else:
                        ini = "%s %s" % (ini, d[0].upper())
            nad = "%s %s %s" % (tit.strip(), ini.strip(), sur.strip())
            add = self.sql.getRec("memadd",
                                  where=[("mla_cono", "=", self.opts["conum"]),
                                         ("mla_memno", "=", self.memno),
                                         ("mla_type", "=", "P")],
                                  limit=1)
            adc = self.sql.memadd_col
            if add:
                if add[adc.index("mla_add1")]:
                    nad = "%s\n%s" % (nad, add[adc.index("mla_add1")])
                if add[adc.index("mla_add2")]:
                    nad = "%s\n%s" % (nad, add[adc.index("mla_add2")])
                if add[adc.index("mla_add3")]:
                    nad = "%s\n%s" % (nad, add[adc.index("mla_add3")])
                if add[adc.index("mla_city")]:
                    nad = "%s\n%s" % (nad, add[adc.index("mla_city")])
                if add[adc.index("mla_country")]:
                    nad = "%s\n%-s, %-s" % (nad, add[adc.index("mla_code")],
                                            add[adc.index("mla_country")])
                else:
                    nad = "%s\n%s" % (nad, add[adc.index("mla_code")])
            else:
                nad = "\n\n\n\n\n"
            self.form.newdic["account_details_C00"][tdc.index(
                "tpd_text")] = nad
        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")] == "mlm_memno_C00":
                nl[tdc.index("tpd_text")] = self.memno
            self.form.doDrawDetail(nl)

    def doBody(self, mlc, mlt, tdc):
        text = self.form.sql.tpldet_col.index("tpd_text")
        self.tots = [0.0, 0.0, 0.0]
        count = 0
        for trans in mlt:
            if trans[mlc.index("mlt_type")] not in (5, 6) and \
                    trans[mlc.index("mlt_curdt")] == self.curdt:
                if self.paid == "Y":
                    self.tots[1] = float(ASD(self.tots[1]) + \
                        ASD(trans[mlc.index("mlt_tramt")]))
                else:
                    self.tots[1] = float(ASD(self.tots[1]) + \
                        ASD(trans[mlc.index("balance")]))
                if trans[mlc.index("mlt_taxamt")]:
                    self.tots[1] = float(ASD(self.tots[1]) - \
                        ASD(trans[mlc.index("mlt_taxamt")]))
                    self.tots[2] = float(ASD(self.tots[2]) + \
                        ASD(trans[mlc.index("mlt_taxamt")]))
            else:
                self.tots[0] = float(ASD(self.tots[0]) + \
                    ASD(trans[mlc.index("balance")]))
            for cod in self.form.body:
                if cod == "type_code":
                    c = "mlt_type"
                elif self.paid == "N" and cod == "mlt_tramt":
                    c = "balance"
                else:
                    c = cod
                d = "%s_C%02i" % (cod, count)
                if cod == "type_code":
                    ttyp = trans[mlc.index(c)]
                    self.form.newdic[d][text] = mltrtp[ttyp - 1][0]
                else:
                    self.form.newdic[d][text] = trans[mlc.index(c)]
                self.form.doDrawDetail(self.form.newdic[d])
            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 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 == "120_day_balance":
                    line[tdc.index("tpd_text")] = self.ages[4]
                elif c == "90_day_balance":
                    line[tdc.index("tpd_text")] = self.ages[3]
                elif c == "60_day_balance":
                    line[tdc.index("tpd_text")] = self.ages[2]
                elif c == "30_day_balance":
                    line[tdc.index("tpd_text")] = self.ages[1]
                elif c == "current_balance":
                    line[tdc.index("tpd_text")] = self.ages[0]
                elif c == "total_arrears":
                    line[tdc.index("tpd_text")] = self.tots[0]
                elif c == "month_exclusive":
                    line[tdc.index("tpd_text")] = self.tots[1]
                elif c == "month_tax":
                    line[tdc.index("tpd_text")] = self.tots[2]
                elif c == "total_balance":
                    line[tdc.index("tpd_text")] = self.tbal
                self.form.doDrawDetail(line)

    def doTail(self, tdc):
        for c in self.form.tail:
            if c == "message" and not self.mesno:
                continue
            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:
                if d == "message_C00" and self.mesno:
                    mes = self.sql.getRec("ctlmes",
                                          cols=["mss_detail"],
                                          where=[("mss_system", "=", "MEM"),
                                                 ("mss_message", "=",
                                                  self.mesno)],
                                          limit=1)
                    self.form.newdic[d][tdc.index("tpd_text")] = mes[0]
                self.form.doDrawDetail(self.form.newdic[d])

    def doPrint(self):
        if self.repeml[1] == "Y" and not self.emadd:
            key = "%s_%s" % (self.opts["conum"], self.memno)
        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 Statement at %s" %
                  (self.opts["conam"], self.dated),
                  fromad=self.fromad,
                  repprt=self.repprt,
                  repeml=self.repeml)
        if self.repeml[1] == "Y":
            self.form = DrawForm(self.opts["mf"].dbm,
                                 self.tname,
                                 wrkdir=self.opts["mf"].rcdic["wrkdir"])
            self.doLoadStatic()
            self.form.doNewDetail()

    def doExit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Esempio n. 22
0
class wg1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["ctldep", "chglog", "wagbal",
            "wagcap", "wagcod", "wagedc", "wagmst", "wagtf1", "wagtf2",
            "waglmf", "wagltf"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doCloseProcess(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 23
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()
Esempio n. 24
0
class rtc210(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       ["chglog", "genmst", "rtlprm", "rtlmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        rtlctl = gc.getCtl("rtlctl", self.opts["conum"])
        if not rtlctl:
            return
        self.glint = rtlctl["ctr_glint"]
        return True

    def mainProcess(self):
        prm = {
            "stype":
            "R",
            "tables": ("rtlprm", ),
            "cols": (("rtp_code", "", 0, "Prm-Code"), ("rtp_desc", "", 0,
                                                       "Description", "Y")),
            "where": [("rtp_cono", "=", self.opts["conum"])]
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])],
            "order":
            "glm_acno"
        }
        self.fld = [(("T", 0, 0, 0), "INA", 7, "Premises Code", "Premises", "",
                     "N", self.doPrmCod, prm, None, ("notblank", )),
                    (("T", 0, 1, 0), "INA", 30, "Description", "", "", "N",
                     None, None, self.doDelete, ("notblank", )),
                    (("T", 0, 2, 0), "INA", 30, "Address Line 1", "", "", "N",
                     None, None, None, ("notblank", )),
                    (("T", 0, 3, 0), "INA", 30, "Address Line 2", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 4, 0), "INA", 30, "Address Line 3", "", "", "N",
                     None, None, None, ("efld", )),
                    (("T", 0, 5, 0), "INA", 4, "Postal Code", "PCod", "", "N",
                     None, None, None, ("notblank", ))]
        if self.glint == "Y":
            self.fld.append(
                (("T", 0, 6, 0), "IUI", 7, "Rental Account", "", "", "N",
                 self.doRental, glm, None, ("notzero", ), None,
                 "Rental Control Account in the General Ledger."))
            self.fld.append((("T", 0, 6, 0), "ONA", 30, ""))
            self.fld.append(
                (("T", 0, 7, 0), "IUI", 7, "Income Account", "", "", "N",
                 self.doIncome, glm, None, ("notzero", ), None,
                 "Rental Income Account in the General Ledger."))
            self.fld.append((("T", 0, 7, 0), "ONA", 30, ""))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2),
                ("T", 0, 0)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doPrmCod(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.old = self.sql.getRec("rtlprm",
                                   where=[("rtp_cono", "=",
                                           self.opts["conum"]),
                                          ("rtp_code", "=", self.code)],
                                   limit=1)
        if not self.old:
            self.new = "y"
        else:
            self.new = "n"
            acc = copyList(self.old[:-1])
            acc.append("")
            acc.insert(8, "")
            for x in range(0, self.df.topq[pag]):
                self.df.loadEntry(frt, pag, p + x, data=acc[x + 1])
            if self.glint == "N":
                return
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", acc[7])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", 0, 7, data=des[0])
            des = self.sql.getRec("genmst",
                                  cols=["glm_desc"],
                                  where=[("glm_cono", "=", self.opts["conum"]),
                                         ("glm_acno", "=", acc[9])],
                                  limit=1)
            if des:
                self.df.loadEntry("T", 0, 9, data=des[0])

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

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

    def doDelete(self):
        mst = self.sql.getRec("rtlmst",
                              cols=["count(*)"],
                              where=[("rtm_cono", "=", self.opts["conum"]),
                                     ("rtm_code", "=", self.code)],
                              limit=1)
        if mst[0]:
            return "Accounts Exist, Not Deleted"
        self.sql.delRec("rtlprm",
                        where=[("rtp_cono", "=", self.opts["conum"]),
                               ("rtp_code", "=", self.code)])
        dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
        self.sql.insRec("chglog",
                        data=[
                            "rtlprm", "D",
                            "%03i%-7s" % (self.opts["conum"], self.code), "",
                            dte, self.opts["capnm"], "", "", "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.opts["conum"]]
        for x in range(0, len(self.df.t_work[0][0])):
            if self.glint == "Y" and x in (7, 9):
                continue
            data.append(self.df.t_work[0][0][x])
        if self.glint == "N":
            data.extend([0, 0])
        if self.new == "y":
            self.sql.insRec("rtlprm", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.rtlprm_col
            data.append(self.old[col.index("rtp_xflag")])
            self.sql.updRec("rtlprm",
                            data=data,
                            where=[("rtp_cono", "=", self.opts["conum"]),
                                   ("rtp_code", "=", self.code)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "rtlprm", "U",
                            "%03i%-7s" % (self.opts["conum"], self.code),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

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

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

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 25
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)
Esempio n. 26
0
class bs1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doEnd(self):
        data = [self.opts["conum"]]
        for num, dat in enumerate(self.df.t_work[0][0]):
            if num in (3, 5):
                continue
            data.append(dat)
        if self.newbk:
            self.sql.insRec("bksmst", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.bksmst_col
            data.append(self.old[col.index("bmf_xflag")])
            self.sql.updRec("bksmst",
                            data=data,
                            where=[("bmf_cono", "=", self.opts["conum"]),
                                   ("bmf_code", "=", self.bcode)])
            dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
            for num, dat in enumerate(self.old):
                if dat != data[num]:
                    self.sql.insRec(
                        "chglog",
                        data=[
                            "bksmst", "U",
                            "%03i%04i" % (self.opts["conum"], self.bcode),
                            col[num], dte, self.opts["capnm"],
                            str(dat),
                            str(data[num]), "", 0
                        ])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

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

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 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()
Esempio n. 28
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()
Esempio n. 29
0
class st5040(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,
                       ["gentrn", "strmf1", "strtrn", "strvar", "strprc"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.glint = strctl["cts_glint"]
        self.locs = strctl["cts_locs"]
        if self.glint == "Y":
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["stk_soh", "stk_susp"]
            if gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.stk_soh = ctlctl["stk_soh"]
            self.stk_susp = ctlctl["stk_susp"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def dataHeader(self):
        fld = [(("T", 0, 0, 0), "ID1", 10, "Merging Date", "", self.sysdtw,
                "N", self.doDate, None, None, ("efld", ))]
        tnd = ((self.endPage, "y"), )
        txt = (self.exitPage, )
        self.df = TartanDialog(self.opts["mf"], eflds=fld, tend=tnd, txit=txt)

    def doDate(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"
        self.date = w
        self.curdt = int(w / 100)

    def endPage(self):
        self.df.closeProcess()
        col = [
            "stv_group", "stv_code", "stv_loc", "stv_bin", "stv_qty",
            "stv_ucost", "stv_usell"
        ]
        recs = self.sql.getRec(tables=["strmf1", "strvar"],
                               cols=col,
                               where=[("stv_cono", "=", self.opts["conum"]),
                                      ("stv_cono=st1_cono", ),
                                      ("stv_group=st1_group", ),
                                      ("stv_code=st1_code", )],
                               order="stv_group, stv_code, stv_loc")
        if not recs:
            showError(self.opts["mf"].body, "Processing Error",
                      "No Records Selected")
        else:
            p = ProgressBar(self.opts["mf"].body, typ="F", mxs=len(recs))
            for num, dat in enumerate(recs):
                p.displayProgress(num)
                self.updateTables(num + 1, col, dat)
                self.sql.delRec(
                    "strvar",
                    where=[("stv_cono", "=", self.opts["conum"]),
                           ("stv_group", "=", dat[col.index("stv_group")]),
                           ("stv_code", "=", dat[col.index("stv_code")]),
                           ("stv_loc", "=", dat[col.index("stv_loc")])])
            self.opts["mf"].dbm.commitDbase()
            p.closeProgress()
        self.opts["mf"].closeLoop()

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

    def updateTables(self, cnt, col, rec):
        grp = rec[col.index("stv_group")]
        code = rec[col.index("stv_code")]
        loc = rec[col.index("stv_loc")]
        vqty = CCD(rec[col.index("stv_qty")], "SD", 12.2)
        vprc = CCD(rec[col.index("stv_ucost")], "UD", 12.2)
        sell = CCD(rec[col.index("stv_usell")], "UD", 12.2)
        # Selling Price Records
        if sell.work:
            whr = [("stp_cono", "=", self.opts["conum"]),
                   ("stp_group", "=", grp), ("stp_code", "=", code),
                   ("stp_loc", "=", loc), ("stp_level", "=", 1)]
            self.sql.delRec("strprc", where=whr)
            self.sql.insRec(
                "strprc",
                data=[self.opts["conum"], grp, code, loc, 1, sell.work])
        # Test for Variances
        bals = Balances(self.opts["mf"],
                        "STR",
                        self.opts["conum"],
                        self.curdt,
                        keys=(grp, code, loc, ("P", self.opts["period"][0])))
        m_ob, m_mv, m_cb, y_ob, y_mv, y_cb, ac, lc, ls = bals.doStrBals()
        fqty = CCD(y_cb[0], "SD", 12.2)
        fval = CCD(y_cb[1], "SD", 12.2)
        if fval.work and fqty.work:
            c = round((fval.work / fqty.work), 2)
        else:
            c = 0
        fprc = CCD(c, "SD", 12.2)
        if fprc.work != vprc.work and vprc.work:
            prc = vprc.work
        else:
            prc = fprc.work
        prc = CCD(prc, "SD", 12.2)
        val = round((prc.work * vqty.work), 2)
        vval = CCD(val, "SD", 12.2)
        qdif = CCD(float(ASD(vqty.work) - ASD(fqty.work)), "SD", 12.2)
        vdif = CCD(float(ASD(vval.work) - ASD(fval.work)), "SD", 12.2)
        if not qdif.work and not vdif.work:
            return
        # Stores Ledger Transaction
        if qdif.work >= 0:
            rtn = 5
        else:
            rtn = 6
        ref = CCD(cnt, "Na", 9).work
        self.sql.insRec("strtrn",
                        data=[
                            self.opts["conum"], rec[col.index("stv_group")],
                            rec[col.index("stv_code")],
                            rec[col.index("stv_loc")], self.date, rtn, ref,
                            "ST-MERG", "", qdif.work, vdif.work, 0, self.curdt,
                            "Stock Take Adjustment", 0, "", "", "STR", 0, "",
                            self.opts["capnm"], self.sysdtw, 0
                        ])
        if self.glint == "N":
            return
        # General Ledger Control Transaction (Stock On Hand)
        col = self.sql.gentrn_col
        acc = self.sql.getRec("gentrn",
                              where=[("glt_cono", "=", self.opts["conum"]),
                                     ("glt_acno", "=", self.stk_soh),
                                     ("glt_curdt", "=", self.curdt),
                                     ("glt_trdt", "=", self.date),
                                     ("glt_type", "=", 4),
                                     ("glt_refno", "=", "STOCK-ADJ"),
                                     ("glt_batch", "=", "ST-MERG")],
                              limit=1)
        if acc:
            amnt = float(ASD(acc[col.index("glt_tramt")]) + ASD(vdif.work))
            self.sql.updRec("gentrn",
                            cols=["glt_tramt"],
                            data=[amnt],
                            where=[("glt_seq", "=", acc[col.index("glt_seq")])
                                   ])
        else:
            self.sql.insRec("gentrn",
                            data=[
                                self.opts["conum"], self.stk_soh, self.curdt,
                                self.date, 4, "STOCK-ADJ", "ST-MERG",
                                vdif.work, 0, "Stock Take Adjustment", "N", "",
                                0, self.opts["capnm"], self.sysdtw, 0
                            ])
        # General Ledger Control Transaction (Stock Suspense)
        val = float(ASD(0) - ASD(vdif.work))
        acc = self.sql.getRec("gentrn",
                              where=[("glt_cono", "=", self.opts["conum"]),
                                     ("glt_acno", "=", self.stk_susp),
                                     ("glt_curdt", "=", self.curdt),
                                     ("glt_trdt", "=", self.date),
                                     ("glt_type", "=", 4),
                                     ("glt_refno", "=", "STOCK-ADJ"),
                                     ("glt_batch", "=", "ST-MERG")],
                              limit=1)
        if acc:
            amnt = float(ASD(acc[col.index("glt_tramt")]) + ASD(val))
            self.sql.updRec("gentrn",
                            cols=["glt_tramt"],
                            data=[amnt],
                            where=[("glt_seq", "=", acc[col.index("glt_seq")])
                                   ])
        else:
            self.sql.insRec("gentrn",
                            data=[
                                self.opts["conum"], self.stk_susp, self.curdt,
                                self.date, 4, "STOCK-ADJ", "ST-MERG", val, 0,
                                "Stock Take Adjustment", "N", "", 0,
                                self.opts["capnm"], self.sysdtw, 0
                            ])
Esempio n. 30
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]