示例#1
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()
示例#2
0
class wg2010(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,
                       ["wagedc", "wagmst", "wagcap", "wagcod"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        wagctl = gc.getCtl("wagctl", self.opts["conum"])
        if not wagctl:
            return
        self.m_hrs = wagctl["ctw_m_hrs"]
        self.w_hrs = wagctl["ctw_w_hrs"]
        self.d_hrs = wagctl["ctw_d_hrs"]
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        self.edit = None
        return True

    def dataHeader(self):
        wgm = {
            "stype":
            "R",
            "tables": ("wagmst", ),
            "cols": (("wgm_empno", "", 0, "Emp-Num"),
                     ("wgm_sname", "", 0, "Surname", "Y"), ("wgm_fname", "", 0,
                                                            "First Names")),
            "where": [("wgm_cono", "=", self.opts["conum"]),
                      ("wgm_term", "=", 0)]
        }
        wed = {
            "stype":
            "R",
            "tables": ("wagedc", ),
            "cols": (("ced_code", "", 0, "Code"), ("ced_desc", "", 0,
                                                   "Description", "Y")),
            "where": [("ced_cono", "=", self.opts["conum"])],
            "whera": [["C", "ced_type", 4, 0]]
        }
        fld = ((("C", 0, 0, 0), "IUI", 5, "EmpNo", "Employee Number", "r", "N",
                self.doEmpno, wgm, None, ("efld", )), (("C", 0, 0, 1), "ONA",
                                                       40, "Name"),
               (("C", 0, 0, 2), "OUI", 3,
                "Dep"), (("C", 0, 0, 3), "IUI", 5, "JobNo", "Job Number", "r",
                         "N", None, None, None, ("efld", )),
               (("C", 0, 0, 4), "IUA", 1, "T", "Earnings/Deduction/NoPay", "r",
                "N", self.doType, None, None, ("in", ("E", "D"))),
               (("C", 0, 0, 5), "IUI", 3, "Cde", "Code Number", "", "N",
                self.doCode, wed, None, ("efld", )), (("C", 0, 0, 6), "ONA",
                                                      20, "Description"),
               (("C", 0, 0, 7), "IUA", 1, "P", "Pay (Y or N)", "Y", "N",
                self.doPay, None, None, ("in", ("Y", "N"))), [
                    ("C", 0, 0, 8), "ISD", 13.2, "Amount", "", "", "N",
                    self.doAmt, None, None, None
                ])
        but = (("Edit", None, self.editData, 0, ("C", 0, 1), ("C", 0, 2)),
               ("Interrogate", None, self.queryWag, 0, ("C", 0, 1), ("C", 0,
                                                                     2)))
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               cend=((self.endData, "y"), ),
                               cxit=(self.exitData, ))

    def doEmpno(self, frt, pag, r, c, p, i, w):
        rec = self.sql.getRec("wagmst",
                              cols=[
                                  "wgm_sname", "wgm_fname", "wgm_dept",
                                  "wgm_freq", "wgm_term"
                              ],
                              where=[("wgm_cono", "=", self.opts["conum"]),
                                     ("wgm_empno", "=", w)],
                              limit=1)
        if not rec:
            return "Invalid Employee Number"
        elif rec[4]:
            return "Employment Terminated"
        self.empno = w
        name = "%s, %s" % (rec[0], rec[1].split()[0])
        self.df.loadEntry(frt, pag, p + 1, data=name)
        self.df.loadEntry(frt, pag, p + 2, data=rec[2])
        self.freq = rec[3]

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

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        rec = self.readWagedc()
        if not rec:
            return "Invalid Code"
        chk = self.sql.getRec("wagcap",
                              where=[("wcp_cono", "=", self.opts["conum"]),
                                     ("wcp_empno", "=", self.empno),
                                     ("wcp_type", "=", self.rtyp),
                                     ("wcp_code", "=", self.code)])
        if chk:
            if self.rtyp == "E":
                txt = "Earnings"
            else:
                txt = "Deduction"
            ok = askQuestion(self.df.mstFrame, head="Duplicate",
                mess="An Entry for this %s Code Already Exists "\
                "for this Employee.\n\nIs This Correct?" % txt)
            if ok == "no":
                return "rf"
        self.df.loadEntry(frt, pag, p + 1, rec[0])
        if self.rtyp == "E" and self.code == 1:
            std = self.sql.getRec("wagcod",
                                  cols=["wcd_eamt"],
                                  where=[("wcd_cono", "=", self.opts["conum"]),
                                         ("wcd_empno", "=", self.empno),
                                         ("wcd_type", "=", "E"),
                                         ("wcd_code", "=", self.code)],
                                  limit=1)
            if std and std[0]:
                hrs = std[0]
            elif self.freq == "M":
                hrs = self.m_hrs
            elif self.freq == "W":
                hrs = self.w_hrs
            elif self.freq == "D":
                hrs = self.d_hrs
            else:
                hrs = self.m_hrs
            self.df.colf[0][8][5] = hrs
        else:
            self.df.colf[0][8][5] = ""

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

    def doAmt(self, frt, pag, r, c, p, i, w):
        self.xrow = r

    def readWagedc(self):
        rec = self.sql.getRec("wagedc",
                              cols=["ced_desc"],
                              where=[("ced_cono", "=", self.opts["conum"]),
                                     ("ced_type", "=", self.rtyp),
                                     ("ced_code", "=", self.code)],
                              limit=1)
        if not rec:
            return None
        else:
            return rec

    def endData(self):
        r = self.xrow
        data = [
            self.opts["conum"], self.empno, self.df.c_work[0][r][2],
            self.df.c_work[0][r][3], self.df.c_work[0][r][4],
            self.df.c_work[0][r][5], self.df.c_work[0][r][7],
            self.df.c_work[0][r][8], "N", self.opts["capnm"], self.sysdtw
        ]
        if self.edit:
            data.append(self.edit)
            self.sql.updRec("wagcap",
                            data=data,
                            where=[("wcp_seq", "=", self.edit)])
            self.edit = None
        else:
            data.append(0)
            self.sql.insRec("wagcap", data=data)
        self.df.advanceLine(0)

    def exitData(self):
        self.opts["mf"].dbm.commitDbase()
        self.df.closeProcess()
        self.opts["mf"].closeLoop()

    def editData(self):
        # Display captured items and allow editing
        col = [
            "wcp_empno", "wgm_sname", "wcp_dept", "wcp_job", "wcp_type",
            "wcp_code", "ced_desc", "wcp_ind", "wcp_amt", "wcp_seq"
        ]
        whr = [("wcp_cono", "=", self.opts["conum"]), ("wcp_paid", "=", "N"),
               ("wgm_cono=wcp_cono", ), ("wgm_empno=wcp_empno", ),
               ("ced_cono=wcp_cono", ), ("ced_type=wcp_type", ),
               ("ced_code=wcp_code", )]
        data = self.sql.getRec(tables=["wagcap", "wagmst", "wagedc"],
                               cols=col,
                               where=whr,
                               order="wcp_empno")
        if not data:
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
            return
        titl = "Captured Items"
        head = ("EmpNo", "Surname", "Dep", "JobNo", "T", "Cod", "Description",
                "I", "Amount", "Sequence")
        lin = {
            "stype":
            "C",
            "titl":
            titl,
            "head":
            head,
            "typs": [("UI", 5), ("NA", 30), ("UI", 3), ("UI", 5), ("UA", 1),
                     ("UI", 3), ("NA", 20), ("UA", 1), ("SD", 13.2),
                     ("UI", 10)],
            "data":
            data,
            "butt": [("Delete", self.doDelete, True)]
        }
        state = self.df.disableButtonsTags()
        self.opts["mf"].updateStatus("Select an Item to Edit")
        chg = SChoice(self.opts["mf"],
                      deco=True,
                      titl=lin["titl"],
                      head=lin["head"],
                      data=lin["data"],
                      typs=lin["typs"],
                      mode="S",
                      retn="D",
                      butt=lin["butt"],
                      scrn=self.df.mstFrame)
        self.df.enableButtonsTags(state=state)
        if chg and chg.selection:
            for num, fld in enumerate(chg.selection):
                if num in (0, 3, 4, 5):
                    self.df.doKeyPressed("C", 0, self.df.pos, fld)
                elif num == (len(chg.selection) - 1):
                    self.edit = int(fld)
                else:
                    self.df.loadEntry(self.df.frt, self.df.pag, num, data=fld)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doDelete(self, args):
        self.sql.delRec("wagcap", where=[("wcp_seq", "=", args[-1:][0])])

    def queryWag(self):
        callModule(self.opts["mf"],
                   self.df,
                   "wg4010",
                   coy=(self.opts["conum"], self.opts["conam"]),
                   period=None,
                   user=self.opts["capnm"])
示例#3
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")
示例#4
0
class cr1010(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "wait" in self.opts:
                self.df.mstFrame.wait_window()
            else:
                self.opts["mf"].startLoop()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    def doQuit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
示例#5
0
class gl1030(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
        self.dep = ctlsys["sys_gl_dep"]
        self.dig = ctlsys["sys_gl_dig"]
        self.sql = Sql(self.opts["mf"].dbm, ["genmst", "genrpt"],
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.genrpt_fd = self.sql.genrpt_dic
        self.genrpt_cl = self.sql.genrpt_col
        self.pags = ["","Q","H","L","G","S","T","U","C","P"]
        self.head = ["glr_desc", "glr_high", "glr_ffeed", "glr_ignore"]
        self.ledger = [
            "glr_from", "glr_to", "glr_high", "glr_obal", "glr_accum",
            "glr_print", "glr_norm", "glr_acbal", "glr_ignore",
            "glr_store", "glr_snum1", "glr_acstr"]
        self.group = [
            "glr_group", "glr_desc", "glr_from", "glr_to", "glr_high",
            "glr_obal", "glr_accum", "glr_print", "glr_norm", "glr_acbal",
            "glr_ignore", "glr_store", "glr_snum1", "glr_acstr", "glr_label"]
        self.store = [
            "glr_desc", "glr_high", "glr_print", "glr_norm", "glr_acbal",
            "glr_clear", "glr_snum1", "glr_strper"]
        self.total = [
            "glr_desc", "glr_high", "glr_total", "glr_print", "glr_norm",
            "glr_clear", "glr_store", "glr_snum1", "glr_acstr", "glr_label"]
        self.uline = ["glr_high", "glr_uline"]
        self.calc = [
            "glr_desc", "glr_high", "glr_cbase", "glr_ctype", "glr_snum2",
            "glr_camnt", "glr_snum3"]
        self.percent = ["glr_desc", "glr_high", "glr_snum1", "glr_snum2"]
        return True

    def mainProcess(self):
        data = [
            ("H","Heading"),
            ("L","Ledger Accounts"),
            ("G","Group of Accounts"),
            ("S","Stored Amount"),
            ("T","Total"),
            ("U","Underline"),
            ("C","Calculation"),
            ("P","Percentage")]
        typ = {
            "stype": "C",
            "titl": "Select the Required Type",
            "head": ("T", "Description"),
            "data": data}
        coy = {
            "stype": "R",
            "tables": ("ctlmst",),
            "cols": (
                ("ctm_cono", "", 0, "Coy"),
                ("ctm_name", "", 0, "Description", "Y")),
            "order": "ctm_cono"}
        glr = {
            "stype": "R",
            "tables": ("genrpt",),
            "cols": (
                ("glr_cono", "", 0, "Coy"),
                ("glr_repno", "", 0, "Rep"),
                ("glr_type", "", 0, "T"),
                ("glr_desc", "", 0, "Description", "Y")),
            "where": [("glr_seq", "=", 0)],
            "whera": (("T", "glr_cono", 0, 0),),
            "order": "glr_cono, glr_repno",
            "index": 1}
        gls = {
            "stype": "R",
            "tables": ("genrpt",),
            "cols": (
                ("glr_seq", "", 0, "Seq"),
                ("glr_type", "", 0, "T"),
                ("glr_group", "", 0, "Grp"),
                ("glr_from", "", 0, "From-Ac"),
                ("glr_to", "", 0, "  To-Ac"),
                ("glr_desc", "", 0, "Description", "Y")),
            "where": [("glr_seq", ">", 0)],
            "whera": (("T", "glr_cono", 0, 0),("T", "glr_repno", 1, 0))}
        self.glm = {
            "stype": "C",
            "titl": "Account Numbers",
            "head": ("Number", "Description"),
            "data": []}
        ryn = (("Yes","Y"),("No","N"))
        rys = (("Yes","Y"),("No","N"),("Debit","+"),("Credit","-"))
        rns = (("Positive","P"),("Negative","N"))
        ras = (("Add","A"),("Subtract","S"))
        rat = (("Add","A"),("Subtract","S"),("Ignore","I"))
        rcb = (("Percentage","P"),("Amount","A"),("Store","S"))
        rct = (("Plus","+"),("Minus","-"),("Multiply","*"),("Divide","/"))
        rsd = (("Single","S"),("Double","D"),("Blank","B"))
        pts = (
            "Accumulate Month Values",
            "Add, Subtract or Ignore",
            "Calculation Base",
            "Calculation Type",
            "Clear Stored Value",
            "Clear Total",
            "Highlight",
            "Ignore Account Type",
            "Include Opening Balance",
            "Normal Sign",
            "Percentage of Stored Value",
            "Print Values",
            "Store Amount",
            "Add or Subtract")
        tag = [
            ("Sequence",None,None,None,False),
            ("Heading",None,None,None,False),
            ("Ledger",None,None,None,False),
            ("Group",None,None,None,False),
            ("Stored",None,None,None,False),
            ("Total",None,None,None,False),
            ("Uline",None,None,None,False),
            ("Calc",None,None,None,False),
            ("Percent",None,None,None,False)]
        fld = (
            (("T",0,0,0),"IUI",3,"Company","Company Number, 0=All",
                self.opts["conum"],"Y",self.doCoyNum,coy,None,
                ("in", (self.opts["conum"], 0))),
            (("T",0,0,0),"IUI",3,"Report","Report Number",
                "","N",self.doRepNum,glr,None,("notzero",)),
            (("T",0,0,0),"IUA",1,"Type","Report Type (B, P, O)",
                "P","N",self.doRepTyp,None,self.doDelRpt,
                ("in", ("O","P","B"))),
            (("T",0,0,0),"INA",30,"Heading","Report Heading",
                "","N",None,None,None,("notblank",)),
            (("T",1,0,0),"IUD",7.2,"Seq-Num","Sequence Number",
                "","N",self.doSeqNum,gls,None,("efld",)),
            (("T",1,1,0),"IUA",1,"Sequence Type","",
                "","N",self.doSeqType,typ,self.doDelSeq,
                ("in",("H","L","G","T","S","U","P","C"))),
            (("T",2,0,0),"INA",30,"Description","",
                "","N",None,None,None,("notblank",)),
            (("T",2,1,0),("IRB",ryn),0,pts[6],"",
                "Y","N",None,None,None,None),
            (("T",2,2,0),("IRB",ryn),0,"New Page","New Page (Y/N)",
                "N","N",None,None,None,None),
            (("T",2,3,0),("IRB",ryn),0,pts[7],"",
                "N","N",None,None,None,None),
            (("T",3,0,0),"IUI",7,"From Account","From Account Number",
                "","N",self.doAcno,self.glm,None,("notzero",)),
            (("T",3,1,0),"IUI",7,"To Account","To Account Number",
                "","N",self.doAcno,self.glm,None,("efld",)),
            (("T",3,2,0),("IRB",ryn),0,pts[6],"",
                "N","N",None,None,None,None),
            (("T",3,3,0),("IRB",ryn),0,pts[8],"",
                "Y","N",None,None,None,None),
            (("T",3,4,0),("IRB",ryn),0,pts[0],"",
                "N","N",None,None,None,None),
            (("T",3,5,0),("IRB",rys),0,pts[11],"",
                "Y","N",None,None,None,None),
            (("T",3,6,0),("IRB",rns),0,pts[9],"",
                "P","N",None,None,None,None),
            (("T",3,7,0),("IRB",rat),0,pts[1],"",
                "A","N",None,None,None,None),
            (("T",3,8,0),("IRB",ryn),0,pts[7],"",
                "N","N",None,None,None,None),
            (("T",3,9,0),("IRB",ryn),0,pts[12],"",
                "N","N",self.doStore,None,None,None),
            (("T",3,10,0),"IUI",2,"Storage Number","",
                "","N",None,None,None,("notzero",)),
            (("T",3,11,0),("IRB",ras),0,pts[13],"",
                "A","N",None,None,None,None),
            (("T",4,0,0),"IUI",3,"Group Number","",
                "","N",self.doGrpNum,None,None,("efld",)),
            (("T",4,1,0),"INA",30,"Description","",
                "","N",None,None,None,("notblank",)),
            (("T",4,2,0),"IUI",7,"From Account","From Account Number",
                "","N",self.doAcno,self.glm,None,("notzero",)),
            (("T",4,3,0),"IUI",7,"To Account","To Account Number",
                "","N",self.doAcno,self.glm,None,("efld",)),
            (("T",4,4,0),("IRB",ryn),0,pts[6],"",
                "N","N",None,None,None,None),
            (("T",4,5,0),("IRB",ryn),0,pts[8],"",
                "Y","N",None,None,None,None),
            (("T",4,6,0),("IRB",ryn),0,pts[0],"",
                "N","N",None,None,None,None),
            (("T",4,7,0),("IRB",rys),0,pts[11],"",
                "Y","N",None,None,None,None),
            (("T",4,8,0),("IRB",rns),0,pts[9],"",
                "P","N",None,None,None,None),
            (("T",4,9,0),("IRB",rat),0,pts[1],"",
                "A","N",None,None,None,None),
            (("T",4,10,0),("IRB",ryn),0,pts[7],"",
                "N","N",None,None,None,None),
            (("T",4,11,0),("IRB",ryn),0,pts[12],"",
                "N","N",self.doStore,None,None,None),
            (("T",4,12,0),"IUI",2,"Storage Number","",
                "","N",None,None,None,("notzero",)),
            (("T",4,13,0),("IRB",ras),0,pts[13],"",
                "A","N",None,None,None,None),
            (("T",4,14,0),"INA",10,"Chart Label","",
                "","N",None,None,None,None),
            (("T",5,0,0),"INA",30,"Description","",
                "","N",None,None,None,("notblank",)),
            (("T",5,1,0),("IRB",ryn),0,pts[6],"",
                "N","N",None,None,None,None),
            (("T",5,2,0),("IRB",rys),0,pts[11],"",
                "Y","N",None,None,None,None),
            (("T",5,3,0),("IRB",rns),0,pts[9],"",
                "P","N",None,None,None,None),
            (("T",5,4,0),("IRB",rat),0,pts[1],"",
                "A","N",None,None,None,None),
            (("T",5,5,0),("IRB",ryn),0,pts[4],"",
                "N","N",None,None,None,None),
            (("T",5,6,0),"IUI",2,"Storage Number","",
                "","N",None,None,None,("notzero",)),
            (("T",5,7,0),"IUD",6.2,pts[10],"",
                0,"N",None,None,None,("notzero",)),
            (("T",6,0,0),"INA",30,"Description","",
                "","N",None,None,None,("efld",)),
            (("T",6,1,0),("IRB",ryn),0,pts[6],"",
                "Y","N",None,None,None,None),
            (("T",6,2,0),"IUI",1,"Total Level","",
                "","N",None,None,None,("between",1,9)),
            (("T",6,3,0),("IRB",rys),0,pts[11],"",
                "Y","N",None,None,None,None),
            (("T",6,4,0),("IRB",rns),0,pts[9],"",
                "P","N",None,None,None,None),
            (("T",6,5,0),("IRB",ryn),0,pts[5],"",
                "Y","N",None,None,None,None),
            (("T",6,6,0),("IRB",ryn),0,pts[12],"",
                "N","N",self.doStore,None,None,None),
            (("T",6,7,0),"IUI",2,"Storage Number","",
                "","N",None,None,None,("notzero",)),
            (("T",6,8,0),("IRB",ras),0,pts[13],"",
                "A","N",None,None,None,None),
            (("T",6,9,0),"INA",10,"Chart Label","",
                "","N",None,None,None,None),
            (("T",7,0,0),("IRB",ryn),0,pts[6],"",
                "Y","N",None,None,None,None),
            (("T",7,1,0),("IRB",rsd),0,"Underline Type","",
                "S","N",None,None,None,None),
            (("T",8,0,0),"INA",30,"Description","",
                "","N",None,None,None,("notblank",)),
            (("T",8,1,0),("IRB",ryn),0,pts[6],"",
                "N","N",None,None,None,None),
            (("T",8,2,0),("IRB",rcb),0,pts[2],"",
                "A","N",self.doPAS,None,None,None),
            (("T",8,3,0),("IRB",rct),0,pts[3],"",
                "+","N",None,None,None,None),
            (("T",8,4,0),"IUI",2,"Storage Number (Base)","",
                "","N",self.doStore1,None,None,("notzero",)),
            (("T",8,5,0),"ISD",13.2,"Amount","Percent/Amount",
                "","N",self.doAmount,None,None,("efld",)),
            (("T",8,6,0),"IUI",2,"Storage Number (Calc)","",
                "","N",None,None,None,("efld",)),
            (("T",9,0,0),"INA",30,"Description","",
                "","N",None,None,None,("notblank",)),
            (("T",9,1,0),("IRB",ryn),0,pts[6],"",
                "N","N",None,None,None,None),
            (("T",9,2,0),"IUI",2,"Storage Number (Base)","",
                "","N",None,None,None,("notzero",)),
            (("T",9,3,0),"IUI",2,"Storage Number (Calc)","",
                "","N",None,None,None,("notzero",)))
        tnd = (
            (self.doT0End,"y"), (self.doT1End,"n"), (self.doT2End,"y"),
            (self.doT2End,"y"), (self.doT2End,"y"), (self.doT2End,"y"),
            (self.doT2End,"y"), (self.doT2End,"y"), (self.doT2End,"y"),
            (self.doT2End,"y"))
        txt = (
            self.doT0Exit, self.doT1Exit, self.doT2Exit, self.doT2Exit,
            self.doT2Exit, self.doT2Exit, self.doT2Exit, self.doT2Exit,
            self.doT2Exit, self.doT2Exit)
        but = (
            ("Import",None,self.doImpRpt,0,("T",0,1),("T",0,2)),
            ("Export",None,self.doExpRpt,0,("T",0,3),(("T",0,2),("T",0,4))),
            ("Copy",None,self.doCpyRpt,0,("T",0,3),(("T",0,2),("T",0,4))),
            ("Re-Sequence",None,self.doReSeq,0,("T",1,1),("T",1,2),None,1),
            ("Preview",None,self.doPreview,0,("T",1,1),("T",1,2),None,1),
            ("Print",None,self.doPrint,0,("T",1,1),("T",1,2),None,1))
        self.df = TartanDialog(self.opts["mf"], eflds=fld, tend=tnd,
            txit=txt, tags=tag, butt=but)

    def doCoyNum(self, frt, pag, r, c, p, i, w):
        self.selcoy = w
        if self.selcoy == 0:
            acc = self.sql.getRec("genmst", cols=["glm_acno",
                "glm_desc"], group="glm_acno, glm_desc", order="glm_acno")
        else:
            acc = self.sql.getRec("genmst", cols=["glm_acno",
                "glm_desc"], where=[("glm_cono", "=", self.selcoy)],
                group="glm_acno, glm_desc", order="glm_acno")
        if self.dep == "Y":
            dep = {}
            chs = 10 ** (7 - self.dig)
            for a in acc:
                dep[a[0] % chs] = a[1]
            acc = []
            for a in dep:
                acc.append([a, dep[a]])
            acc.sort()
        self.glm["data"] = acc

    def doRepNum(self, frt, pag, r, c, p, i, w):
        self.repno = w
        rep = self.doReadRep(self.selcoy, self.repno, 0)
        if not rep:
            self.newrep = True
            self.df.setWidget(self.df.B1, "normal")
        else:
            self.newrep = False
            self.df.setWidget(self.df.B1, "disabled")
            self.df.loadEntry(frt, pag, p+1, data=rep[3])
            self.df.loadEntry(frt, pag, p+2, data=rep[4])

    def doRepTyp(self, frt, pag, r, c, p, i, w):
        self.df.setWidget(self.df.B1, "disabled")

    def doImpRpt(self):
        self.df.setWidget(self.df.B0, state="disabled")
        self.df.setWidget(self.df.mstFrame, state="hide")
        sel = FileDialog(parent=self.opts["mf"].body, title="Import File",
            initd=self.opts["mf"].rcdic["wrkdir"], ftype=[("Report", "*.rpt")])
        nam = sel.askopenfilename()
        err = None
        if nam:
            fle = open(nam, "r")
            for num, line in enumerate(fle):
                dat = line.split("|")
                if not num:
                    if dat[0] != "genrpt":
                        err = "This File Does Not Contain a Valid Format"
                        break
                    chk = self.sql.getRec("genrpt",
                        where=[("glr_cono", "=", dat[1]), ("glr_repno", "=",
                            dat[2]), ("glr_seq", "=", 0)], limit=1)
                    if chk:
                        ok = askQuestion(self.opts["mf"].body, "Replace?",
                            "This Report Already Exists, Would you like "\
                            "to Replace It?")
                        if ok == "yes":
                            self.sql.delRec("genrpt", where=[("glr_cono", "=",
                                dat[1]), ("glr_repno", "=", dat[2])])
                        else:
                            err = "Report Already Exists"
                            break
                    self.sql.insRec("genrpt", data=dat[1:])
                else:
                    self.sql.insRec(dat[0], data=dat[1:])
        if not err:
            self.opts["mf"].dbm.commitDbase(ask=True)
        else:
            showError(self.opts["mf"].body, "Invalid Import", err)
        self.df.setWidget(self.df.mstFrame, "show")
        self.df.focusField("T", 0, 1)

    def doExpRpt(self):
        fle = open(os.path.join(self.opts["mf"].rcdic["wrkdir"],
            "C%s_R%s.rpt" % (self.selcoy, self.repno)), "w")
        rpt = self.sql.getRec("genrpt", where=[("glr_cono", "=",
            self.selcoy), ("glr_repno", "=", self.repno)], order="glr_seq")
        for lin in rpt:
            mes = "genrpt"
            for dat in lin:
                mes = "%s|%s" % (mes, str(dat))
            fle.write("%s\n" % mes)
        fle.close()
        self.df.focusField("T", 0, 1)

    def doCpyRpt(self):
        if not self.newrep:
            showError(self.opts["mf"].body, "Invalid Copy Request",
                "You can only Copy a report when Creating a New report, "\
                "not when Changing an Existing report!")
            self.df.focusField("T", 0, 3)
            return
        tit = ("Copy Existing Report Layout",)
        coy = {
            "stype": "R",
            "tables": ("ctlmst",),
            "cols": (
                ("ctm_cono", "", 0, "Coy"),
                ("ctm_name", "", 0, "Name", "Y"))}
        glr = {
            "stype": "R",
            "tables": ("genrpt",),
            "cols": (
                ("glr_cono", "", 0, "Coy"),
                ("glr_repno", "", 0, "Rep"),
                ("glr_type", "", 0, "T"),
                ("glr_desc", "", 0, "Description", "Y")),
            "where": [("glr_seq", "=", 0)],
            "whera": (("T", "glr_cono", 0, 0),),
            "index": 1}
        fld = (
            (("T",0,0,0),"IUI",3,"Company Number","",
                "","N",self.doCpyCoy,coy,None,None),
            (("T",0,1,0),"IUI",3,"Report Number","",
                "","N",self.doRptNum,glr,None,None))
        state = self.df.disableButtonsTags()
        self.cp = TartanDialog(self.opts["mf"], title=tit, tops=True,
            eflds=fld, tend=((self.doCpyEnd, "n"),), txit=(self.doCpyExit,))
        self.cp.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField("T", 0, 1)

    def doCpyCoy(self, frt, pag, r, c, p, i, w):
        self.cpycoy = w

    def doRptNum(self, frt, pag, r, c, p, i, w):
        self.cpynum = w

    def doCpyEnd(self):
        rpt = self.sql.getRec("genrpt", where=[("glr_cono", "=",
            self.cpycoy), ("glr_repno", "=", self.cpynum)])
        if rpt:
            for rec in rpt:
                rec[0] = self.selcoy
                rec[1] = self.repno
                self.sql.insRec("genrpt", data=rec)
            self.opts["mf"].dbm.commitDbase()
        self.doCpyCloseProcess()

    def doCpyExit(self):
        self.doCpyCloseProcess()

    def doCpyCloseProcess(self):
        self.cp.closeProcess()

    def doDelRpt(self):
        self.sql.delRec("genrpt", where=[("glr_cono", "=", self.selcoy),
            ("glr_repno", "=", self.repno)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doT0End(self):
        rtype = self.df.t_work[0][0][2]
        desc = self.df.t_work[0][0][3]
        if self.newrep:
            data = [self.selcoy, self.repno, 0, rtype, desc]
            for x in range(5, len(self.genrpt_cl)):
                if self.genrpt_fd[self.genrpt_cl[x]][2][1] in ("A", "a"):
                    data.append("")
                else:
                    data.append(0)
            self.sql.insRec("genrpt", data=data)
        else:
            self.sql.updRec("genrpt", cols=["glr_type", "glr_desc"],
                data=[rtype, desc], where=[("glr_cono", "=", self.selcoy),
                ("glr_repno", "=", self.repno), ("glr_seq", "=", 0)])
        self.df.selPage("Sequence")
        self.df.focusField("T", 1, 1)

    def doReSeq(self):
        whr = [("glr_cono", "=", self.selcoy), ("glr_repno", "=", self.repno)]
        recs = self.sql.getRec("genrpt", where=whr, order="glr_seq")
        self.sql.delRec("genrpt", where=whr)
        for seq, rec in enumerate(recs):
            rec = list(rec)
            rec[2] = float(seq)
            self.sql.insRec("genrpt", data=rec)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doPreview(self):
        self.cols = [
            ("a", "Seq-Num", 7.2, "UD"),
            ("b", "T", 1, "UA"),
            ("c", "Grp", 3, "Na"),
            ("d", "Lvl", 3, "Na"),
            ("e", "Acc-Num", 7, "Na"),
            ("f", "Description", 30, "NA")]
        self.data = []
        self.newp = []
        recs = self.sql.getRec("genrpt", where=[("glr_cono", "=",
            self.selcoy), ("glr_repno", "=", self.repno)], order="glr_seq")
        pgp = 0
        lsq = 0
        rpc = self.sql.genrpt_col
        for num, rec in enumerate(recs):
            seq = rec[rpc.index("glr_seq")]
            rtp = rec[rpc.index("glr_type")]
            if rtp in ("B", "P", "O"):
                self.titl = rec[rpc.index("glr_desc")]
                continue
            des = rec[rpc.index("glr_desc")]
            prt = rec[rpc.index("glr_print")]
            if prt == "N":
                continue
            if rtp == "H":
                if rec[rpc.index("glr_ffeed")] == "Y":
                    self.data.append((seq, "N", "", "", "",
                        "---------- New Page ----------"))
                elif lsq:
                    ptp = recs[lsq][rpc.index("glr_type")]
                    utp = recs[lsq][rpc.index("glr_uline")]
                    if ptp == "H" or (ptp == "U" and utp == "B"):
                        pass
                    else:
                        self.data.append((seq, "", "", "", "", ""))
                self.data.append((seq, rtp, "", "", "", des))
                self.data.append((seq, "", "", "", "", ""))
            elif rtp == "L":
                frm = rec[rpc.index("glr_from")]
                too = rec[rpc.index("glr_to")]
                whr = [("glm_cono", "=", self.selcoy)]
                if too:
                    whr.append(("glm_acno", "between", frm, too))
                else:
                    whr.append(("glm_acno", "=", frm))
                accs = self.sql.getRec("genmst", cols=["glm_acno",
                    "glm_desc"], where=whr, order="glm_acno")
                for acc in accs:
                    self.data.append((seq, rtp, "", "", acc[0], acc[1]))
            elif rtp == "G":
                grp = rec[rpc.index("glr_group")]
                if not pgp or grp != pgp:
                    self.data.append((seq, rtp, grp, "", "", des))
                pgp = grp
            elif rtp == "T":
                tot = rec[rpc.index("glr_total")]
                self.data.append((seq, rtp, "", tot, "", des))
            elif rtp == "S":
                self.data.append((seq, rtp, "", "", "", des))
            elif rtp == "U":
                utp = rec[rpc.index("glr_uline")]
                if utp == "B":
                    des = ""
                elif utp == "S":
                    des = "-" * 30
                else:
                    des = "=" * 30
                self.data.append((seq, rtp, "", "", "", des))
            else:
                continue
            lsq = num
        self.pprt = False
        self.sc = SelectChoice(self.opts["mf"].window, self.titl, self.cols,
            self.data, sort=False, butt=(("Print", self.doPrePrt),))
        if self.pprt:
            cols = []
            for col in self.cols:
                cols.append([col[0], col[3], col[2], col[1], "y"])
            state = self.df.disableButtonsTags()
            self.df.setWidget(self.df.mstFrame, "hide")
            RepPrt(self.opts["mf"], name=self.__class__.__name__,
                tables=self.data, heads=[self.titl], cols=cols, ttype="D",
                prtdia=(("Y","V"),("Y","N")))
            self.df.setWidget(self.df.mstFrame, "show")
            self.df.enableButtonsTags(state=state)
            self.df.focusField("T", 1, 1)
        elif self.sc.selection:
            self.df.doKeyPressed("T", 1,  0, self.sc.selection[1])
            self.df.doKeyPressed("T", 1,  1, self.sc.selection[2])
        else:
            self.df.focusField("T", 1, 1)

    def doPrePrt(self):
        self.pprt = True

    def doPrint(self):
        table = ["genrpt"]
        heads = ["General Ledger Report %s Layout" % self.repno]
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, "hide")
        RepPrt(self.opts["mf"], name=self.__class__.__name__, tables=table,
            heads=heads, where=[("glr_cono", "=", self.selcoy),
            ("glr_repno", "=", self.repno)], order="glr_seq asc",
            prtdia=(("Y","V"), ("Y","N")))
        self.df.setWidget(self.df.mstFrame, "show")
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doSeqNum(self, frt, pag, r, c, p, i, w):
        if not w:
            acc = self.sql.getRec("genrpt", cols=["max(glr_seq)"],
                where=[("glr_cono", "=", self.selcoy), ("glr_repno", "=",
                self.repno)], limit=1)
            if not acc:
                w = 1
            else:
                w = int(acc[0] + 1)
            self.df.loadEntry(frt, pag, i, data=w)
        self.seqno = w
        self.seq = self.doReadRep(self.selcoy, self.repno, self.seqno)
        if not self.seq:
            self.newseq = "y"
        else:
            self.newseq = "n"
            self.df.loadEntry(frt, pag, p+1, data=self.seq[3])

    def doSeqType(self, frt, pag, r, c, p, i, w):
        self.stype = w
        if self.newseq == "y":
            return
        if self.stype == self.seq[3]:
            return
        yn = askQuestion(self.opts["mf"].body, "Change Type?",
            "Change the Type?", default="no")
        if yn == "no":
            return "No Change"
        self.newseq = "c"

    def doDelSeq(self):
        if self.newseq == "y":
            showError(self.opts["mf"].body, "Invalid Delete Request",
                "You can only delete Existing report lines.")
            return
        self.sql.delRec("genrpt", where=[("glr_cono", "=", self.selcoy),
            ("glr_repno", "=", self.repno), ("glr_seq", "=", self.seqno)])
        self.df.clearFrame("T", 1)
        self.df.focusField("T", 1, 1)
        return "nf"

    def doT1End(self):
        for x in range(2, 10):
            self.df.clearFrame("T", x)
        pag = self.pags.index(self.stype)
        if self.newseq == "n":
            cl = self.genrpt_cl
            fld = self.doLoadTypes()
            for x, f in enumerate(fld):
                data = self.seq[cl.index(f)]
                self.df.loadEntry("T", pag, x, data=data)
        self.df.selPage(self.df.tags[pag - 1][0])

    def doAcno(self, frt, pag, r, c, p, i, w):
        if w:
            if pag == 3 and p == 1 and w < self.df.t_work[pag][0][0]:
                return "To Account Less Than From Account"
            if pag == 4 and p == 3 and w < self.df.t_work[pag][0][2]:
                return "To Account Less Than From Account"
            found = False
            for acc in self.glm["data"]:
                if w == acc[0]:
                    found = True
            if not found:
                return "Invalid Account Number"

    def doStore(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="")
            return "sk2"

    def doGrpNum(self, frt, pag, r, c, p, i, w):
        if not w:
            gno = self.sql.getRec("genrpt", cols=["max(glr_group)"],
                where=[("glr_cono", "=", self.selcoy), ("glr_repno", "=",
                self.repno), ("glr_type", "=", "G")], limit=1)
            self.gno = gno[0] + 1
            self.df.loadEntry(frt, pag, p, data=self.gno)
        else:
            self.gno = w
        col = ["glr_desc", "glr_high", "glr_obal", "glr_accum",
            "glr_print", "glr_norm", "glr_acbal", "glr_ignore",
            "glr_store", "glr_snum1", "glr_acstr", "glr_label"]
        grp = ""
        for cc in col:
            grp = "%s%s," % (grp, cc)
        grp = grp[:-1]
        self.grp = self.sql.getRec("genrpt", cols=col,
            where=[("glr_cono", "=", self.selcoy), ("glr_repno", "=",
            self.repno), ("glr_group", "=", self.gno)], group=grp)
        if self.grp:
            for n, f in enumerate(col):
                data = self.grp[0][n]
                self.df.loadEntry("T", pag, self.group.index(f), data=data)

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

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

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

    def doT2End(self):
        ff = self.doLoadTypes()
        data = [self.selcoy, self.repno, self.seqno, self.stype]
        for nm, cl in enumerate(self.genrpt_cl):
            if nm < 4:
                continue
            if cl in ff:
                data.append(self.df.t_work[self.pags.index(self.stype)]
                        [0][ff.index(cl)])
            elif self.genrpt_fd[cl][2][1] in ("A", "a"):
                data.append("")
            else:
                data.append(0)
        data.append("")
        if self.newseq in ("c", "n"):
            self.doDelSeq()
        self.sql.insRec("genrpt", data=data)
        if self.stype == "G" and self.grp:
            grp = self.sql.getRec("genrpt", where=[("glr_cono", "=",
                self.selcoy), ("glr_repno", "=", self.repno), ("glr_group",
                "=", self.gno)], order="glr_seq")
            for g in grp:
                if g[2] == self.seqno:
                    continue
                data[2] = g[2]
                data[8] = g[8]
                data[9] = g[9]
                data[29] = g[29]
                self.sql.updRec("genrpt", data=data, where=[("glr_cono", "=",
                    self.selcoy), ("glr_repno", "=", self.repno), ("glr_group",
                    "=", self.gno), ("glr_seq", "=", g[2])])
        self.doT2Exit()
        if self.newseq == "y":
            self.df.loadEntry("T", 1, 0, data=(self.seqno + 1))
        else:
            self.df.clearEntry("T", 1, 1)
        self.df.clearEntry("T", 1, 2)
        self.df.focusField("T", 1, 1)

    def doLoadTypes(self):
        if self.stype == "H":
            fld = self.head
        elif self.stype == "L":
            fld = self.ledger
        elif self.stype == "G":
            fld = self.group
        elif self.stype == "S":
            fld = self.store
        elif self.stype == "T":
            fld = self.total
        elif self.stype == "U":
            fld = self.uline
        elif self.stype == "C":
            fld = self.calc
        elif self.stype == "P":
            fld = self.percent
        return fld

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

    def doT1Exit(self):
        # Check for duplicate group numbers
        errmess = """Group Number %s at Sequence Line %s is Duplicated or is Not Contiguous i.e. All Group Lines Must Follow One Another!

Please Delete, or Correct This Line!"""
        seq = self.sql.getRec("genrpt", cols=["glr_type", "glr_seq",
            "glr_group"], where=[("glr_cono", "=", self.selcoy), ("glr_repno",
            "=", self.repno)], order="glr_seq")
        gp = []
        lg = 0
        for t, s, g in seq:
            if t == "G":
                if not lg and g in gp:
                    showError(
                        self.opts["mf"].body, "Group Error", errmess % (g, s))
                    self.df.loadEntry("T", 1, 0, data=s)
                    self.df.focusField("T", 1, 1)
                    return
                if lg and lg != g:
                    if g in gp:
                        showError(self.opts["mf"].body, "Group Error",
                            errmess % (g, s))
                        self.df.loadEntry("T", 1, 0, data=s)
                        self.df.focusField("T", 1, 1)
                        return
                    lg = g
                    gp.append(g)
                    continue
                if not lg:
                    lg = g
                    gp.append(g)
                    continue
            else:
                lg = 0
        self.opts["mf"].dbm.commitDbase(ask=True, mess="Save All Changes?")
        self.df.focusField("T", 0, 1)

    def doT2Exit(self):
        self.df.selPage("Sequence")

    def doReadRep(self, coy, rep, seq):
        rep = self.sql.getRec("genrpt", where=[("glr_cono", "=", coy),
            ("glr_repno", "=", rep), ("glr_seq", "=", seq)], limit=1)
        return rep
示例#6
0
class st2030(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.exit = False
            self.setPrinter()
            if not self.exit:
                self.dataHeader()
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "genmst", "gentrn", "strgrp", "strmf1", "strmf2", "strtrn",
            "strrcp"
        ],
                       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]
        if self.locs == "N":
            self.loc = "1"
        self.glnum = 0
        return True

    def setPrinter(self):
        tit = ("Printer Selection", )
        self.pr = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=[],
                               tend=((self.doPrtEnd, "y"), ),
                               txit=(self.doPrtExit, ),
                               view=("N", "P"))
        self.opts["mf"].startLoop()

    def doPrtEnd(self):
        self.doPrtClose()

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

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

    def dataHeader(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": [["C", "st1_group", 0, 0]],
            "order":
            "st1_group, st1_code",
            "index":
            1
        }
        stl = {
            "stype":
            "R",
            "tables": ("strloc", "strmf2"),
            "cols":
            (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Location", "Y")),
            "where": [("srl_cono", "=", self.opts["conum"]),
                      ("srl_loc=st2_loc", ), ("st2_cono=srl_cono", )],
            "whera": [["C", "st2_group", 0], ["C", "st2_code", 1]],
            "order":
            "srl_loc",
            "index":
            0
        }
        glm = {
            "stype":
            "R",
            "tables": ("genmst", ),
            "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0,
                                                      "Description", "Y")),
            "where": [("glm_cono", "=", self.opts["conum"])]
        }
        fld = [(("T", 0, 0, 0), "INa", 9, "Issue Number", "", "", "N",
                self.doIss, None, None, ("notblank", )),
               (("T", 0, 0, 0), "ID1", 10, "Date", "Issue Date", self.sysdtw,
                "N", self.doDte, None, None, ("efld", )),
               (("C", 0, 0, 0), "IUA", 3, "Grp", "Product Group", "", "N",
                self.doGroup, gpm, None, ("notblank", )),
               [("C", 0, 0, 1), "INA", 20, "Product Code", "", "", "N",
                self.doCode, stm, None, ("notblank", )],
               (("C", 0, 0, 2), "ONA", 5, "U.O.I"),
               (("C", 0, 0, 3), "IUA", 1, "L", "Location", "r", "N",
                self.doLoc, stl, None, ("notblank", )),
               (("C", 0, 0, 4), "ISD", 9.2, "Quantity", "", "", "N",
                self.doQty, None, None, ("notzero", )),
               (("C", 0, 0, 5), "OUD", 9.2, "Unit-Cost"),
               (("C", 0, 0, 6), "OSD", 9.2, "Value")]
        if self.glint == "Y":
            fld.append(
                (("C", 0, 0, 7), "IUI", 7, "G/L-Acc", "G/L Account Number",
                 self.stk_susp, "N", self.doGenAcc, glm, None, None))
            fld.append((("C", 0, 0, 8), "ONA", 10, "Desc"))
            fld.append((("C",0,0,9),"INA",(20,30),"Details","Transaction "\
                "Details","","N",self.doTrnDet,None,None,None))
        row = (15, )
        tnd = ((self.endPage0, "n"), )
        txt = (self.exitPage0, )
        cnd = ((self.endPage1, "y"), )
        cxt = (self.exitPage1, )
        but = (("Reprint", None, self.doReprint, 0, ("T", 0, 1), None), )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               rows=row,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)

    def doIss(self, frt, pag, r, c, p, i, w):
        self.iss = w

    def doDte(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.dte = w
        self.ddt = self.df.t_disp[pag][0][p]
        self.curdt = int(self.dte / 100)
        self.batno = "S%s" % self.curdt

    def doGroup(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.group = w

    def doCode(self, frt, pag, r, c, p, i, w):
        acc = self.sql.getRec("strmf1",
                              cols=["st1_desc", "st1_type", "st1_uoi"],
                              where=[("st1_cono", "=", self.opts["conum"]),
                                     ("st1_group", "=", self.group),
                                     ("st1_code", "=", w),
                                     ("st1_type", "<>", "X")],
                              limit=1)
        if not acc:
            return "Invalid or Redundant Code"
        self.code = w
        self.desc = acc[0]
        self.gtype = acc[1]
        self.df.loadEntry(frt, pag, p + 1, data=acc[2])
        if self.locs == "N":
            self.loc = "1"
            self.df.loadEntry("C", pag, p + 2, data=self.loc)
            no = self.checkLoc()
            if no:
                return no
            else:
                return "sk2"

    def doLoc(self, frt, pag, r, c, p, i, w):
        self.loc = w
        no = self.checkLoc()
        if no:
            return no

    def checkLoc(self):
        acc = self.sql.getRec("strmf2",
                              cols=["st2_bin"],
                              where=[("st2_cono", "=", self.opts["conum"]),
                                     ("st2_group", "=", self.group),
                                     ("st2_code", "=", self.code),
                                     ("st2_loc", "=", self.loc)],
                              limit=1)
        if not acc:
            return "Invalid Location For This Product"

    def doQty(self, frt, pag, r, c, p, i, w):
        self.quant = w
        if self.gtype == "R" and self.doRecipe():
            return "ff2"
        if self.extractCost():
            return "rf"
        self.df.loadEntry("C", pag, p + 1, data=self.ucost)
        self.df.loadEntry("C", pag, p + 2, data=self.tcost)

    def doRecipe(self):
        self.recipe = self.sql.getRec("strrcp",
                                      where=[("srr_cono", "=",
                                              self.opts["conum"]),
                                             ("srr_group", "=", self.group),
                                             ("srr_code", "=", self.code),
                                             ("srr_loc", "=", self.loc)],
                                      order="srr_rgroup, srr_rcode")
        if not self.recipe:
            err = "Invalid Recipe, No Items"
            showError(self.opts["mf"].body, "Recipe Error", err)
            return err
        else:
            return self.doRecChg()

    def doRecChg(self):
        # Display recipe items and allow editing of quantities etc.
        data = []
        for num, item in enumerate(self.recipe):
            st1 = self.sql.getRec("strmf1",
                                  cols=["st1_type", "st1_desc"],
                                  where=[("st1_cono", "=", self.opts["conum"]),
                                         ("st1_group", "=", item[4]),
                                         ("st1_code", "=", item[5])],
                                  limit=1)
            err = False
            if not st1:
                err = "Invalid Stock Record in Recipe"
            elif st1[0] == "X":
                err = "Redundant Stock Record in Recipe"
            if err:
                showError(
                    self.opts["mf"].body, "Recipe Error", """%s!

Group: %s
Code:  %s""" % (err, item[4], item[5]))
                return err
            data.append([num, item[4], item[5], st1[1], item[6]])
        titl = "Recipe Items"
        head = ("Seq", "Grp", "Product-Code", "Description", "Quantity")
        lin = {
            "stype": "C",
            "titl": titl,
            "head": head,
            "typs": [("UI", 2), ("NA", 3), ("NA", 20), ("NA", 30),
                     ("SD", 11.2)],
            "data": data
        }
        state = self.df.disableButtonsTags()
        self.opts["mf"].updateStatus(
            "Select a Product to Edit or Exit to Continue")
        chg = self.df.selChoice(lin)
        if chg and chg.selection:
            self.recchg = chg.selection
            self.doRecChanges()
            self.doRecChg()
        else:
            self.df.enableButtonsTags(state=state)

    def doRecChanges(self):
        tit = ("Change Items", )
        fld = ((("T", 0, 0, 0), "ONA", 3,
                "Group"), (("T", 0, 1, 0), "ONA", 20,
                           "Code"), (("T", 0, 2, 0), "ONA", 30, "Description"),
               (("T", 0, 3, 0), "ISD", 10.2, "Quantity", "", "", "N",
                self.doRecQty, None, None, ('notzero', )))
        but = (("Delete", None, self.doRecDel, 1, None, None), )
        self.rp = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               butt=but,
                               tend=((self.doRecEnd, "n"), ),
                               txit=(self.doRecExit, ))
        self.rp.loadEntry("T", 0, 0, data=self.recchg[1])
        self.rp.loadEntry("T", 0, 1, data=self.recchg[2])
        self.rp.loadEntry("T", 0, 2, data=self.recchg[3])
        self.rp.loadEntry("T", 0, 3, data=self.recchg[4])
        self.rp.focusField("T", 0, 4, clr=False)
        self.rp.mstFrame.wait_window()

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

    def doRecDel(self):
        del self.recipe[int(self.recchg[0])]
        self.doRecExit()

    def doRecEnd(self):
        self.recipe[int(self.recchg[0])][6] = self.recqty
        self.doRecExit()

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

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

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        if not w:
            self.trndet = self.desc
        else:
            self.trndet = w

    def endPage0(self):
        self.df.focusField("C", 0, 1)

    def endPage1(self):
        self.updateTables()
        self.opts["mf"].dbm.commitDbase()
        self.df.advanceLine(0)

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

    def exitPage1(self):
        if self.df.col != 1:
            self.doPrintDoc(self.pr.repprt)
        self.df.focusField("T", 0, 1)

    def extractCost(self):
        self.ucost = 0
        self.tcost = 0
        if self.gtype == "R":
            for item in self.recipe:
                quant = item[6] * self.quant
                tcost = self.doCalCost(item[4], item[5], quant)
                if tcost is None:
                    return "error"
                self.tcost = float(ASD(self.tcost) + ASD(tcost))
        else:
            tcost = self.doCalCost(self.group, self.code, self.quant)
            if tcost is None:
                return "error"
            self.tcost = tcost
        self.ucost = round(self.tcost / self.quant, 2)

    def updateTables(self):
        if self.gtype == "R":
            # Issue individual items
            for item in self.recipe:
                acc = self.sql.getRec("strmf1",
                                      cols=["st1_desc"],
                                      where=[("st1_cono", "=", item[0]),
                                             ("st1_group", "=", item[4]),
                                             ("st1_code", "=", item[5])],
                                      limit=1)
                if acc:
                    des = acc[0]
                else:
                    des = "Unknown Description"
                qty = item[6] * self.quant
                tcost = self.doCalCost(item[4], item[5], qty, chk=False)
                qty = float(ASD(0) - ASD(qty))
                val = float(ASD(0) - ASD(tcost))
                data = [
                    self.opts["conum"], item[4], item[5], self.loc, self.dte,
                    6, self.iss, self.batno, self.glnum, qty, val, 0,
                    self.curdt, des, 0, "", "", "STR", 0, "",
                    self.opts["capnm"], self.sysdtw, 0
                ]
                self.sql.insRec("strtrn", data=data)
            # Receive recipe item
            data = [
                self.opts["conum"], self.group, self.code, self.loc, self.dte,
                5, self.iss, self.batno, self.glnum, self.quant, self.tcost, 0,
                self.curdt, self.desc, 0, "", "", "STR", 0, "",
                self.opts["capnm"], self.sysdtw, 0
            ]
            self.sql.insRec("strtrn", data=data)
        # Stores Ledger Transaction
        qty = float(ASD(0) - ASD(self.quant))
        val = float(ASD(0) - ASD(self.tcost))
        data = [
            self.opts["conum"], self.group, self.code, self.loc, self.dte, 2,
            self.iss, self.batno, self.glnum, qty, val, 0, self.curdt,
            self.desc, 0, "", "", "STR", 0, "N", self.opts["capnm"],
            self.sysdtw, 0
        ]
        self.sql.insRec("strtrn", data=data)
        if self.glint == "N":
            return
        col = self.sql.gentrn_col
        # General Ledger Control Transaction (Stock On Hand)
        acc = self.sql.getRec("gentrn",
                              where=[("glt_cono", "=", self.opts["conum"]),
                                     ("glt_acno", "=", self.stk_soh),
                                     ("glt_curdt", "=", self.curdt),
                                     ("glt_trdt", "=", self.dte),
                                     ("glt_type", "=", 4),
                                     ("glt_refno", "=", self.iss),
                                     ("glt_batch", "=", self.batno)],
                              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_soh, self.curdt,
                                self.dte, 4, self.iss, self.batno, val, 0,
                                self.trndet, "N", "", 0, self.opts["capnm"],
                                self.sysdtw, 0
                            ])
        # General Ledger Transaction (Expense)
        acc = self.sql.getRec("gentrn",
                              where=[("glt_cono", "=", self.opts["conum"]),
                                     ("glt_acno", "=", self.glnum),
                                     ("glt_curdt", "=", self.curdt),
                                     ("glt_trdt", "=", self.dte),
                                     ("glt_type", "=", 4),
                                     ("glt_refno", "=", self.iss),
                                     ("glt_batch", "=", self.batno)],
                              limit=1)
        if acc:
            amnt = float(ASD(acc[col.index("glt_tramt")]) + ASD(self.tcost))
            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.glnum, self.curdt,
                                self.dte, 4, self.iss, self.batno, self.tcost,
                                0, self.trndet, "N", "", 0, self.opts["capnm"],
                                self.sysdtw, 0
                            ])

    def doCalCost(self, grp, code, qty, chk=True):
        # Calculate cost price
        icost, tcost, bal = getCost(self.sql,
                                    self.opts["conum"],
                                    grp,
                                    code,
                                    loc=self.loc,
                                    qty=qty,
                                    tot=True,
                                    bal=True)
        if chk and qty > bal[0]:
            acc = self.sql.getRec("strmf1",
                                  cols=["st1_desc"],
                                  where=[("st1_cono", "=", self.opts["conum"]),
                                         ("st1_group", "=", grp),
                                         ("st1_code", "=", code)],
                                  limit=1)
            cf = PwdConfirm(self.opts["mf"],
                            conum=self.opts["conum"],
                            system="STR",
                            code="ExQty",
                            product=(grp, code, acc[0]))
            if cf.flag == "no":
                return
        return tcost

    def doReprint(self):
        tit = ("Reprint Documents", )
        data = self.sql.getRec("strtrn",
                               cols=["stt_ref1", "stt_trdt"],
                               where=[("stt_cono", "=", self.opts["conum"]),
                                      ("stt_type", "=", 2)],
                               group="stt_ref1, stt_trdt",
                               order="stt_trdt, stt_ref1")
        iss = {
            "stype":
            "R",
            "tables": ("strtrn", ),
            "cols": (("stt_ref1", "", 0, "Reference"), ("stt_trdt", "", 0,
                                                        "Date", "Y")),
            "wtype":
            "D",
            "where":
            data,
            "screen":
            self.opts["mf"].body,
            "comnd":
            self.doSelRec
        }
        isd = {
            "stype": "R",
            "tables": ("strtrn", ),
            "cols": (("stt_trdt", "", 0, "Date"), ),
            "where": [("stt_cono", "=", self.opts["conum"]),
                      ("stt_type", "=", 2)],
            "whera": (("T", "stt_ref1", 0, 0), ),
            "group": "stt_trdt",
            "order": "stt_trdt",
            "screen": self.opts["mf"].body
        }
        fld = ((("T", 0, 0, 0), "INa", 9, "Issue Number", "", "", "N",
                self.doRepIss, iss, None, ("notblank", )),
               (("T", 0, 1, 0), "ID1", 10, "Date", "GRN Date", 0, "N",
                self.doRepDte, isd, None, ("notzero", )))
        state = self.df.disableButtonsTags()
        self.tx = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doRepEnd, "n"), ),
                               txit=(self.doRepExit, ),
                               view=("N", "V"),
                               mail=("Y", "N"))
        self.tx.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doSelRec(self, frt, pag, r, c, p, i, w):
        self.tx.doKeyPressed(frt, pag, p, w[0])
        self.tx.doKeyPressed(frt, pag, p + 1, w[1])

    def doRepIss(self, frt, pag, r, c, p, i, w):
        self.iss = w

    def doRepDte(self, frt, pag, r, c, p, i, w):
        self.dte = w
        self.ddt = self.df.t_disp[pag][0][p]
        acc = self.sql.getRec("strtrn",
                              cols=["count(*)"],
                              where=[("stt_cono", "=", self.opts["conum"]),
                                     ("stt_type", "=", 2),
                                     ("stt_ref1", "=", self.iss),
                                     ("stt_trdt", "=", self.dte)],
                              limit=1)
        if not acc[0]:
            return "No Document Found"

    def doRepEnd(self):
        self.tx.closeProcess()
        self.doPrintDoc(self.tx.repprt)

    def doRepExit(self):
        self.tx.closeProcess()

    def doPrintDoc(self, repprt):
        hds = [
            "Goods Issued Notes",
            "GIN Number: %s GIN Date: %s" % (self.iss, self.ddt)
        ]
        tab = ["strmf1", "strtrn"]
        col = [["stt_group", "UA", 3, "Grp", "y"],
               ["stt_code", "NA", 20, "Product-Code", "y"],
               ["stt_desc", "NA", 40, "Description", "y"],
               ["stt_loc", "UA", 1, "L", "y"],
               ["stt_qty", "SD", 11.2, "Quantity", "y", "y"],
               ["stt_cost", "SD", 11.2, "Price", "y", "y"]]
        gtt = ["stt_cost"]
        whr = [("stt_cono", "=", self.opts["conum"]),
               ("stt_type", "in", (2, 6)), ("stt_ref1", "=", self.iss),
               ("stt_trdt", "=", self.dte), ("st1_cono=stt_cono", ),
               ("st1_group=stt_group", ), ("st1_code=stt_code", ),
               ("st1_type", "<>", "R")]
        odr = "stt_seq"
        self.df.setWidget(self.df.mstFrame, state="hide")
        RepPrt(self.opts["mf"],
               conum=self.opts["conum"],
               conam=self.opts["conam"],
               name=self.__class__.__name__,
               tables=tab,
               heads=hds,
               cols=col,
               gtots=gtt,
               where=whr,
               order=odr,
               repprt=repprt)
        self.df.setWidget(self.df.mstFrame, state="show")
示例#7
0
class st2020(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.exit = False
            self.setPrinter()
            if not self.exit:
                self.dataHeader()
                self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "gentrn", "strgrp", "strmf1", "strmf2", "strgmu", "strcmu",
            "strtrn", "strpom"
        ],
                       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.fromad = strctl["cts_emadd"]
        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]
        if self.locs == "N":
            self.loc = "1"
        return True

    def setPrinter(self):
        tit = ("Printer Selection", )
        self.pr = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=[],
                               tend=((self.doPrtEnd, "y"), ),
                               txit=(self.doPrtExit, ),
                               view=("N", "P"),
                               mail=("N", "Y"))
        self.opts["mf"].startLoop()

    def doPrtEnd(self):
        self.doPrtClose()

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

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

    def dataHeader(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_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, 0]],
            "order":
            "st1_group, st1_code",
            "index":
            1
        }
        stl = {
            "stype":
            "R",
            "tables": ("strloc", "strmf2"),
            "cols":
            (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Location", "Y")),
            "where": [("srl_cono", "=", self.opts["conum"]),
                      ("srl_loc=st2_loc", ), ("st2_cono=srl_cono", )],
            "whera": [["C", "st2_group", 0], ["C", "st2_code", 1]],
            "order":
            "st2_loc",
            "index":
            0
        }
        fld = [(("T", 0, 0, 0), "INa", 9, "GRN Number", "", "", "Y",
                self.doGrv, None, None, ("notblank", )),
               (("T", 0, 0, 0), "ID1", 10, "Date", "GRN Date", self.sysdtw,
                "N", self.doDte, None, None, ("efld", )),
               (("T", 0, 0, 0), "INa", 7, "Order Number", "", "", "N",
                self.doOrd, None, None, ("efld", )),
               (("C", 0, 0, 0), "IUA", 3, "Grp", "Product Group", "r", "Y",
                self.doGroup, gpm, None, ("notblank", )),
               (("C", 0, 0, 1), "INA", (15, 20), "Product Code", "", "", "N",
                self.doCode, stm, None, ("notblank", )),
               (("C", 0, 0, 2), "ONA", 15, "Description"),
               (("C", 0, 0, 3), "ONA", 5, "U.O.I"),
               [("C", 0, 0, 4), "IUA", 1, "L", "Location", "r", "N",
                self.doLoc, stl, None, ("notblank", )],
               (("C", 0, 0, 5), "ISD", 9.2, "Quantity", "", "", "N",
                self.doQty, None, None, ("notzero", )),
               (("C", 0, 0, 6), "IUD", 9.2, "Unit-Cost", "Unit Cost Price", "",
                "N", self.doUcost, None, None, ("notzero", )),
               (("C", 0, 0, 7), "IUD", 5.2, "Dis-%", "Discount Percentage", "",
                "N", self.doDisPer, None, None, ("efld", )),
               (("C", 0, 0, 8), "OSD", 9.2, "Value")]
        tnd = ((self.endPage0, "n"), )
        txt = (self.exitPage0, )
        cnd = ((self.endPage1, "y"), )
        cxt = (self.exitPage1, )
        but = (("Import", None, self.doImport, 0, ("C", 0, 1), (("T", 0, 1),
                                                                ("C", 0, 2)),
                "Import Stock from a CSV or XLS File"),
               ("StrQuery", None, self.doQuery, 0, ("C", 0, 1),
                (("T", 0, 1), ("C", 0, 2))), ("Reprint", None, self.doReprint,
                                              0, ("T", 0, 1), None),
               ("Cancel", None, self.doCancel, 0, ("C", 0, 1), (("T", 0, 1),
                                                                ("C", 0, 0))))
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               cend=cnd,
                               cxit=cxt,
                               butt=but)

    def doGrv(self, frt, pag, r, c, p, i, w):
        self.grv = w
        self.cancel = False

    def doDte(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.dte = w
        self.dtw = self.df.t_disp[0][0][i]
        self.curdt = int(self.dte / 100)
        self.batno = "S%s" % self.curdt

    def doOrd(self, frt, pag, r, c, p, i, w):
        self.odr = w

    def doImport(self):
        state = self.df.disableButtonsTags()
        self.df.setWidget(self.df.mstFrame, state="hide")
        if self.locs == "Y":
            impcol = [["Location", 0, "UA", 1]]
            fld = [(("T",0,0,0),("IRB",(("Yes","Y"),("No","N"))),0,
                "Create Items","","N","N",self.doAllLoc,None,None,None,None,
                "Create Item in this location if it is a Valid item, i.e. "\
                "Already exists in another location")]
        else:
            impcol = []
            fld = []
            self.allloc = "N"
        impcol.extend([["Group", 1, "UA", 3], ["Code", 2, "NA", 20],
                       ["Quantity", 3, "UD", 10.2],
                       ["Item Cost", 4, "UD", 10.2]])
        fi = FileImport(self.opts["mf"], impcol=impcol, impfld=fld)
        self.trdis = 0
        err = None
        for num, line in enumerate(fi.impdat):
            if len(line) != len(impcol):
                err = "Line %s: Invalid Number of Fields (S/B %s is %s)" % \
                    (num + 1, len(impcol), len(line))
                break
            if self.locs == "Y":
                loc = line[0]
                idx = 1
            else:
                loc = "1"
                idx = 0
            self.loc = loc.work
            self.group = line[idx]
            self.code = line[idx + 1]
            st1 = self.sql.getRec("strmf1",
                                  where=[("st1_group", "=", self.group),
                                         ("st1_code", "=", self.code),
                                         ("st1_type", "<>", "X")],
                                  limit=1)
            err = False
            if not st1:
                err = "Line %s: Invalid Group %s or Code %s" % (
                    (num + 1), self.group, self.code)
            elif st1[self.sql.strmf1_col.index("st1_type")] == "R":
                err = "Line %s: Invalid Code (Recipe Item)" % (num + 1)
            elif st1[self.sql.strmf1_col.index("st1_type")] == "X":
                err = "Line %s: Invalid Code (Redundant" % (num + 1)
            elif st1[self.sql.strmf1_col.index("st1_type")] == "N":
                err = "Line %s: Invalid Code (Value Indicator)" % (num + 1)
            if err:
                break
            self.desc = st1[self.sql.strmf1_col.index("st1_desc")]
            st2 = self.sql.getRec("strmf2",
                                  where=[("st2_loc", "=", self.loc),
                                         ("st2_group", "=", self.group),
                                         ("st2_code", "=", self.code)],
                                  limit=1)
            if not st2 and self.allloc == "Y":
                st2 = self.sql.getRec("strmf2",
                                      where=[("st2_loc", "=", "1"),
                                             ("st2_group", "=", self.group),
                                             ("st2_code", "=", self.code)],
                                      limit=1)
                if st2:
                    st2[self.sql.strmf2_col.index("st2_loc")] = self.loc
                    st2[self.sql.strmf2_col.index("st2_bin")] = ""
                    st2[self.sql.strmf2_col.index("st2_reord_ind")] = "A"
                    st2[self.sql.strmf2_col.index("st2_reord_level")] = 0
                    st2[self.sql.strmf2_col.index("st2_reord_qty")] = 0
                    self.sql.insRec("strmf2", data=st2)
            if not st2:
                err = "Line %s: Invalid Location %s" % ((num + 1), self.loc)
                break
            self.qty = line[idx + 2]
            self.tcost = round((self.qty * line[idx + 3]), 2)
            self.usell = 0.00
            self.updateTables()
        if err:
            showError(self.opts["mf"].body, "Import Error", err)
        elif fi.impdat:
            self.opts["mf"].dbm.commitDbase()
        self.df.enableButtonsTags(state=state)
        self.df.setWidget(self.df.mstFrame, state="show")
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doAllLoc(self, obj, w):
        self.allloc = w

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

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        acc = self.sql.getRec(
            "strmf1",
            cols=["st1_type", "st1_desc", "st1_uoi", "st1_value_ind"],
            where=[("st1_cono", "=", self.opts["conum"]),
                   ("st1_group", "=", self.group), ("st1_code", "=", w)],
            limit=1)
        if not acc:
            return "Invalid Code"
        if acc[0] == "R":
            return "Invalid Code (Recipe Item)"
        if acc[0] == "X":
            return "Invalid Code (Redundant"
        if acc[3] == "N":
            return "Invalid Code (Value Indicator)"
        self.desc = acc[1]
        self.uoi = acc[2]
        self.df.loadEntry("C", pag, p + 1, data=self.desc)
        self.df.loadEntry("C", pag, p + 2, data=self.uoi)
        if self.locs == "N":
            self.loc = "1"
            self.df.loadEntry("C", pag, p + 3, data=self.loc)
            no = self.checkLoc()
            if no:
                return no
            return "sk3"

    def doLoc(self, frt, pag, r, c, p, i, w):
        self.loc = w
        no = self.checkLoc()
        if no:
            return no

    def checkLoc(self):
        acc = 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 acc:
            return "Invalid Location For This Product"

    def doQty(self, frt, pag, r, c, p, i, w):
        self.qty = w
        # Last Cost Price
        lcost = getCost(self.sql,
                        self.opts["conum"],
                        self.group,
                        self.code,
                        loc=self.loc,
                        qty=1,
                        ind="L")
        self.df.loadEntry(frt, pag, p + 1, data=lcost)

    def doUcost(self, frt, pag, r, c, p, i, w):
        self.ucost = w
        self.tcost = round((self.qty * self.ucost), 2)

    def doDisPer(self, frt, pag, r, c, p, i, w):
        self.trdis = w
        udis = round((self.ucost * self.trdis / 100), 2)
        tdis = round((self.tcost * self.trdis / 100), 2)
        self.ucost = float(ASD(self.ucost) - ASD(udis))
        self.tcost = float(ASD(self.tcost) - ASD(tdis))
        self.df.loadEntry(frt, pag, p + 1, data=self.tcost)

    def endPage0(self):
        self.df.focusField("C", 0, 1)

    def endPage1(self):
        self.updateTables()
        self.df.advanceLine(0)

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

    def exitPage1(self):
        if not self.cancel and self.df.col != 1:
            self.opts["mf"].dbm.commitDbase()
            self.doPrintDoc(self.pr.repprt, self.pr.repeml)
        else:
            self.opts["mf"].dbm.rollbackDbase()
        self.df.focusField("T", 0, 1)

    def doCancel(self):
        ok = askQuestion(
            self.opts["mf"].body,
            "Cancel",
            "Are You Sure that you want to Cancel this Goods Received Note?",
            default="no")
        if ok == "yes":
            self.cancel = True
            self.exitPage1()
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def updateTables(self):
        # Stores Ledger Transaction
        data = [
            self.opts["conum"], self.group, self.code, self.loc, self.dte, 1,
            self.grv, self.batno, self.odr, self.qty, self.tcost, 0,
            self.curdt, self.desc, 0, "", "", "STR", self.trdis, "N",
            self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("strtrn", data=data)
        if self.glint == "N":
            return
        # General Ledger Control Transaction (Stock On Hand)
        data = [
            self.opts["conum"], self.stk_soh, self.curdt, self.dte, 5,
            self.grv, self.batno, self.tcost, 0, self.code, "N", "", 0,
            self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("gentrn", data=data)
        # General Ledger Control Transaction (Stock Suspense)
        val = float(ASD(0) - ASD(self.tcost))
        data = [
            self.opts["conum"], self.stk_susp, self.curdt, self.dte, 5,
            self.grv, self.batno, val, 0, self.code, "N", "", 0,
            self.opts["capnm"], self.sysdtw, 0
        ]
        self.sql.insRec("gentrn", data=data)

    def doReprint(self):
        tit = ("Reprint Documents", )
        dat = self.sql.getRec(
            "strtrn",
            cols=["stt_loc", "stt_trdt", "stt_ref1", "stt_ref2"],
            where=[("stt_cono", "=", self.opts["conum"]),
                   ("stt_type", "=", 1)],
            group="stt_loc, stt_trdt, stt_ref1, stt_ref2",
            order="stt_trdt, stt_ref1")
        data = []
        for d in dat:
            try:
                # Exclude purchase orders
                doc = int(d[2])
                chk = self.sql.getRec("strpom",
                                      where=[("pom_cono", "=",
                                              self.opts["conum"]),
                                             ("pom_ordno", "=", doc),
                                             ("pom_loc", "=", d[0]),
                                             ("pom_date", "=", d[1])])
                if chk:
                    continue
            except:
                pass
            data.append([d[2], d[1], d[3]])
        grv = {
            "stype":
            "R",
            "tables": ("strtrn", "strpom"),
            "cols":
            (("stt_ref1", "", 0, "Reference", "Y"),
             ("stt_trdt", "", 0, "Date"), ("stt_ref2", "", 0, "Order-Num")),
            "wtype":
            "D",
            "where":
            data,
            "screen":
            self.opts["mf"].body,
            "comnd":
            self.doSelRec
        }
        grd = {
            "stype": "R",
            "tables": ("strtrn", ),
            "cols":
            (("stt_trdt", "", 0, "Date"), ("stt_ref2", "", 0, "Order-Num")),
            "where": [("stt_cono", "=", self.opts["conum"]),
                      ("stt_type", "=", 1)],
            "whera": (("T", "stt_ref1", 0, 0), ),
            "group": "stt_trdt",
            "order": "stt_trdt"
        }
        fld = ((("T", 0, 0, 0), "INa", 9, "GRN Number", "", "", "N",
                self.doRepGrv, grv, None, ("notblank", )),
               (("T", 0, 1, 0), "ID1", 10, "Date", "GRN Date", 0, "N",
                self.doRepDte, grd, None, ("notzero", )))
        state = self.df.disableButtonsTags()
        self.tx = TartanDialog(self.opts["mf"],
                               title=tit,
                               tops=True,
                               eflds=fld,
                               tend=((self.doRepEnd, "n"), ),
                               txit=(self.doRepExit, ),
                               view=("Y", "V"),
                               mail=("Y", "N"))
        self.tx.mstFrame.wait_window()
        self.df.enableButtonsTags(state=state)
        self.df.focusField(self.df.frt, self.df.pag, self.df.col)

    def doSelRec(self, frt, pag, r, c, p, i, w):
        self.tx.doKeyPressed(frt, pag, p, w[0])
        self.tx.doKeyPressed(frt, pag, p + 1, w[1])

    def doRepGrv(self, frt, pag, r, c, p, i, w):
        self.grv = w
        acc = self.sql.getRec("strtrn",
                              where=[("stt_cono", "=", self.opts["conum"]),
                                     ("stt_type", "=", 1),
                                     ("stt_ref1", "=", w)])
        if not acc:
            return "Invalid GRN Number"
        if len(acc) == 1:
            self.dte = acc[0][self.sql.strtrn_col.index("stt_trdt")]
            self.tx.loadEntry(frt, pag, p + 1, data=self.dte)
            self.dtw = self.tx.t_disp[0][0][i + 1]
            return "sk1"

    def doRepDte(self, frt, pag, r, c, p, i, w):
        self.dte = w
        self.dtw = self.tx.t_disp[0][0][i]
        acc = self.sql.getRec("strtrn",
                              cols=["count(*)"],
                              where=[("stt_cono", "=", self.opts["conum"]),
                                     ("stt_type", "=", 1),
                                     ("stt_ref1", "=", self.grv),
                                     ("stt_trdt", "=", self.dte)],
                              limit=1)
        if not acc[0]:
            return "No Document Found"

    def doRepEnd(self):
        self.tx.closeProcess()
        self.doPrintDoc(self.tx.repprt, self.tx.repeml)

    def doRepExit(self):
        self.tx.closeProcess()

    def doPrintDoc(self, repprt, repeml):
        hds = [
            "Goods Received Notes",
            "GRN Number: %s GRN Date: %s" % (self.grv, self.dtw)
        ]
        col = [["stt_group", "UA", 3, "Grp", "y"],
               ["stt_code", "NA", 20, "Product-Code", "y"],
               ["stt_desc", "NA", 40, "Description", "y"],
               ["stt_loc", "UA", 1, "L", "y"],
               ["stt_qty", "SD", 11.2, "Quantity", "y"],
               ["stt_cost", "SD", 11.2, "Price", "y"]]
        gtt = ["stt_cost"]
        whr = [("stt_cono", "=", self.opts["conum"]), ("stt_type", "=", 1),
               ("stt_ref1", "=", self.grv), ("stt_trdt", "=", self.dte)]
        odr = "stt_seq"
        self.df.setWidget(self.df.mstFrame, state="hide")
        RepPrt(self.opts["mf"],
               conum=self.opts["conum"],
               conam=self.opts["conam"],
               name=self.__class__.__name__,
               tables=["strtrn"],
               heads=hds,
               cols=col,
               gtots=gtt,
               where=whr,
               order=odr,
               repprt=repprt,
               repeml=repeml,
               fromad=self.fromad)
        self.df.setWidget(self.df.mstFrame, state="show")

    def doQuery(self):
        callModule(self.opts["mf"],
                   self.df,
                   "st4010",
                   coy=(self.opts["conum"], self.opts["conam"]),
                   period=self.opts["period"],
                   user=self.opts["capnm"])
示例#8
0
class bc1040(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            if "args" not in self.opts:
                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, ["bwltyp", "bwlpts", "bwlcmp"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        return True

    def mainProcess(self):
        typ = {
            "stype":
            "R",
            "tables": ("bwltyp", ),
            "cols":
            (("bct_code", "", 0, "Cod"), ("bct_desc", "", 0, "Description",
                                          "Y"), ("bct_cfmat", "", 0, "F")),
            "where": [("bct_cono", "=", self.opts["conum"])]
        }
        r1s = (("Tournament", "T"), ("K/Out (D)", "D"), ("K/Out (N)", "K"),
               ("R/Robin", "R"), ("Teams", "X"))
        r2s = (("Yes", "Y"), ("No", "N"))
        fld = (
            (("T",0,0,0),"I@bct_code",0,"","",
                0,"Y",self.doTypCod,typ,None,("efld",)),
            (("T",0,1,0),"I@bct_desc",0,"","",
                "","N",self.doDesc,None,self.doDelete,("notblank",)),
            (("T",0,2,0),("IRB",r1s),0,"Competition Format","",
                "T","N",self.doCFmat,None,None,None,None,
                """Select the Competition Format as follows:

Tournament: The default format for tournaments.
K/Out (D): This is for all Drawn Knockout Competitions.
K/Out (N): This is for Normal Knockout Competitions.
R/Robin: This is for Round Robin Competitions.
Teams: This is for Team Competitions e.g. Club V Club.
"""),
            (("T",0,3,0),"I@bct_tsize",0,"","",
                4,"N",self.doTSize,None,None,("notzero",)),
            (("T",0,4,0),"I@bct_games",0,"","",
                0,"N",self.doGames,None,None,("notzero",)),
            (("T",0,5,0),"I@bct_ends",0,"","",
                21,"N",self.doEnds,None,None,("notzero",)),
            (("T",0,6,0),("IRB",r2s),0,"Groups by Position","",
                "N","N",self.doGroups,None,None,None,None,
                "Yes means that teams will be split into Groups after "\
                "a certain number of games based on position. No means "\
                "that teams will not be split into groups"),
            (("T",0,7,0),"I@bct_grgame",0,"","",
                0,"N",self.doGrGame,None,None,("efld",)),
            (("T",0,8,0),("IRB",r2s),0,"Adjust Scores","",
                "N","N",self.doAdjust,None,None,None,None,
                "Whether or Not to Modify the Scores of Groups, Other "\
                "than Group A, when the Teams are Split into Groups."),
            (("T",0,9,0),"I@bct_expunge",0,"","",
                "","N",None,None,None,("efld",),None,
                "These Comma Separated Game Scores will be Cleared when "\
                "Teams are Split into Groups."),
            (("T",0,10,0),"I@bct_percent",0,"","",
                100,"N",None,None,None,("efld",),None,
                "This is the Percentage of the Remaining Game Scores which "\
                "Will be Retained when Teams are Split into Groups."),
            (("T",0,11,0),"I@bct_drawn",0,"","",
                1,"N",self.doDrawn,None,None,("efld",)),
            (("T",0,12,0),("IRB",r2s),0,"Strict S v S",
                "Strict Strength v Strength",
                "N","N",self.doSvS,None,None,None,None,
                "Yes means that teams could play against each other, again, "\
                "in ANY game. No means that teams could only play against "\
                "each other, again, in the FINAL game."),
            (("T",0,13,0),("IRB",r2s),0,"Different Drawn Games Scoring","",
                "N","N",self.doDiff,None,None,None,None,
                "Yes means that Drawn Games have a Different Scoring Format "\
                "from Strength V Strength Games."))
        but = (("Print", None, self.doPrint, 0, ("T", 0, 2), None),
               ("Quit", None, self.doExit, 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)
        if "args" in self.opts:
            self.df.doKeyPressed("T", 0, 0, data=self.opts["args"])
            self.df.topf[0][0][1] = "OUI"
            self.df.mstFrame.wait_window()

    def doTypCod(self, frt, pag, r, c, p, i, w):
        if not w:
            self.ctype = getNextCode(self.sql,
                                     "bwltyp",
                                     "bct_code",
                                     where=[("bct_cono", "=",
                                             self.opts["conum"])],
                                     last=99)
            self.df.loadEntry(frt, pag, p, data=self.ctype)
        else:
            self.ctype = w
        self.old = self.sql.getRec("bwltyp",
                                   where=[("bct_cono", "=",
                                           self.opts["conum"]),
                                          ("bct_code", "=", self.ctype)],
                                   limit=1)
        if not self.old:
            self.newtyp = True
        else:
            self.newtyp = False
            self.cdesc = self.old[self.sql.bwltyp_col.index("bct_desc")]
            self.cfmat = self.old[self.sql.bwltyp_col.index("bct_cfmat")]
            self.tsize = self.old[self.sql.bwltyp_col.index("bct_tsize")]
            self.ends = self.old[self.sql.bwltyp_col.index("bct_ends")]
            self.groups = self.old[self.sql.bwltyp_col.index("bct_groups")]
            self.adjust = self.old[self.sql.bwltyp_col.index("bct_adjust")]
            for num, fld in enumerate(self.old[1:-1]):
                self.df.loadEntry(frt, pag, num, data=fld)
        chk = self.sql.getRec("bwlcmp",
                              where=[("bcm_cono", "=", self.opts["conum"]),
                                     ("bcm_type", "=", self.ctype)],
                              limit=1)
        if chk:
            self.exist = True
        else:
            self.exist = False

    def doDelete(self):
        if self.newtyp:
            return
        if self.exist:
            return "There are Competitions Using this Type, Not Deleted"
        self.sql.delRec("bwltyp",
                        where=[("bct_cono", "=", self.opts["conum"]),
                               ("bct_code", "=", self.ctype)])
        self.sql.delRec("bwlpts",
                        where=[("bcp_cono", "=", self.opts["conum"]),
                               ("bcp_code", "=", self.ctype)])
        self.opts["mf"].dbm.commitDbase()

    def doDesc(self, frt, pag, r, c, p, i, w):
        if self.exist:
            ok = askQuestion(self.opts["mf"].body,
                             "Games exist",
                             """There are Competitions Using this Type.

Changes Could Adversely Affect them.

Are you Sure this is what you Want to Do?""",
                             default="no")
            if ok == "no":
                return "ff1"

    def doCFmat(self, frt, pag, r, c, p, i, w):
        self.cfmat = w

    def doTSize(self, frt, pag, r, c, p, i, w):
        if self.cfmat == "D" and w not in (2, 3):
            return "Invalid Team Size"
        self.tsize = w
        if self.cfmat in ("D", "K", "R"):
            self.df.loadEntry(frt, pag, p + 1, data=0)
            return "sk1"

    def doGames(self, frt, pag, r, c, p, i, w):
        self.games = w

    def doEnds(self, frt, pag, r, c, p, i, w):
        self.ends = w
        if self.cfmat in ("D", "K", "R", "X"):
            if self.cfmat in ("D", "K", "R"):
                defaults = ["N", 0, "N", "", 0, 0, "N", "N"]
            else:
                defaults = ["N", 0, "N", "", 0, self.games, "N", "N"]
            for num, dat in enumerate(defaults):
                self.df.loadEntry("T", 0, p + num + 1, data=dat)
            self.pdiff = "N"
            return "nd"

    def doGroups(self, frt, pag, r, c, p, i, w):
        self.groups = w
        if self.groups == "N":
            self.adjust = "N"
            self.df.loadEntry(frt, pag, p + 1, data="")
            self.df.loadEntry(frt, pag, p + 2, data=self.adjust)
            self.df.loadEntry(frt, pag, p + 3, data="")
            self.df.loadEntry(frt, pag, p + 4, data="")
            return "sk4"

    def doGrGame(self, frt, pag, r, c, p, i, w):
        if not w:
            return "Invalid Game Number"

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

    def doDrawn(self, frt, pag, r, c, p, i, w):
        self.drawn = w
        if self.drawn == self.games:
            # All drawn games
            self.pdiff = "N"
            self.df.loadEntry(frt, pag, p + 1, data="N")
            self.df.loadEntry(frt, pag, p + 2, data="N")
            return "sk2"

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

    def doDiff(self, frt, pag, r, c, p, i, w):
        self.pdiff = w

    def doEnd(self):
        data = [self.opts["conum"]] + self.df.t_work[0][0]
        if self.newtyp:
            self.sql.insRec("bwltyp", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.bwltyp_col
            data.append(self.old[col.index("bct_xflag")])
            self.sql.updRec("bwltyp",
                            data=data,
                            where=[("bct_cono", "=", self.opts["conum"]),
                                   ("bct_code", "=", self.ctype)])
        self.perr = False
        if self.cfmat in ("D", "K", "R"):
            if self.newtyp:
                self.sql.insRec("bwlpts",
                                data=[
                                    self.opts["conum"], self.ctype, "D", "N",
                                    0, "N", 0, 0, 1, "N", 0, 0
                                ])
        else:
            self.df.setWidget(self.df.mstFrame, state="hide")
            if self.pdiff == "Y":
                self.doPtsFmt("D")
            if not self.perr:
                if self.pdiff == "Y":
                    self.doPtsFmt("S")
                else:
                    self.doPtsFmt("B")
            self.df.setWidget(self.df.mstFrame, state="show")
        if self.perr:
            self.opts["mf"].dbm.rollbackDbase()
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)
        else:
            self.opts["mf"].dbm.commitDbase()
            if "args" in self.opts:
                self.doExit()
            else:
                self.df.focusField("T", 0, 1)

    def doPtsFmt(self, flag=None):
        self.flag = flag
        if flag == "D":
            txt = "Points Format for Drawn Games"
        elif flag == "S":
            txt = "Points Format for SvS Games"
        else:
            txt = "Points Format"
        tit = (txt, )
        r1s = (("Yes", "Y"), ("No", "N"))
        fld = (
            (("T",0,0,0),("IRB",r1s),0,"Skins","",
                "N","N",self.doSkins,None,None,None),
            (("T",0,1,0),"I@bcp_sends",0,"","",
                0,"N",self.doEndsPerSkin,None,None,("efld",)),
            (("T",0,2,0),("IRB",r1s),0,"Points Only","",
                "N","N",self.doOnly,None,None,None,None,
                "Yes means that No Shots are to be captured and that only "\
                "Points will be used to determine positions. No means that "\
                "Shots and Points are to be captured and used to determine "\
                "positions."),
            (("T",0,3,0),"I@bcp_e_points",0,"","",
                0,"N",self.doPoints,None,None,("efld",)),
            (("T",0,4,0),"I@bcp_s_points",0,"","",
                0,"N",None,None,None,("efld",)),
            (("T",0,5,0),"I@bcp_g_points",0,"","",
                0,"N",None,None,None,("efld",)),
            (("T",0,6,0),("IRB",r1s),0,"Bonus Points","",
                "N","N",self.doBonus,None,None,None),
            (("T",0,7,0),"I@bcp_win_by",0,"","",
                0,"N",None,None,None,("efld",)),
            (("T",0,8,0),"I@bcp_lose_by",0,"","",
                0,"N",None,None,None,("efld",)))
        but = (("Quit", None, self.doPExit, 1, None, None), )
        tnd = ((self.doPEnd, "y"), )
        txt = (self.doPExit, )
        self.pf = TartanDialog(self.opts["mf"],
                               tops=True,
                               title=tit,
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        if self.flag in ("D", "S"):
            ptyp = self.flag
        else:
            ptyp = "D"
        acc = self.sql.getRec("bwlpts",
                              where=[("bcp_cono", "=", self.opts["conum"]),
                                     ("bcp_code", "=", self.ctype),
                                     ("bcp_ptyp", "=", ptyp)],
                              limit=1)
        if acc:
            self.newpts = False
            for num, dat in enumerate(acc[3:-1]):
                self.pf.loadEntry("T", 0, num, data=dat)
        else:
            self.newpts = True
        self.pf.focusField("T", 0, 1, clr=False)
        self.pf.mstFrame.wait_window()

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

    def doEndsPerSkin(self, frt, pag, r, c, p, i, w):
        if self.ends % w:
            return "Invalid Ends per Skin, Not Divisible"

    def doOnly(self, frt, pag, r, c, p, i, w):
        self.ponly = w

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

    def doBonus(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 "nd"

    def doPEnd(self):
        self.pf.closeProcess()
        data = [self.opts["conum"], self.ctype, ""]
        data.extend(self.pf.t_work[0][0])
        if self.flag == "B":
            if not self.newpts:
                self.sql.delRec("bwlpts",
                                where=[("bcp_cono", "=", self.opts["conum"]),
                                       ("bcp_code", "=", self.ctype)])
            data[2] = "D"
            self.sql.insRec("bwlpts", data=data)
            data[2] = "S"
            self.sql.insRec("bwlpts", data=data)
        else:
            if not self.newpts:
                self.sql.delRec("bwlpts",
                                where=[("bcp_cono", "=", self.opts["conum"]),
                                       ("bcp_code", "=", self.ctype),
                                       ("bcp_ptyp", "=", self.flag)])
            data[2] = self.flag
            self.sql.insRec("bwlpts", data=data)

    def doPExit(self):
        self.perr = True
        self.pf.closeProcess()

    def doPrint(self):
        if not self.newtyp:
            callModule(self.opts["mf"],
                       None,
                       "bc3080",
                       coy=[self.opts["conum"], self.opts["conam"]],
                       args=[self.ctype, self.cdesc])
            self.df.focusField(self.df.frt, self.df.pag, self.df.col)

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