Esempio n. 1
0
class mlc410(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()
            self.opts["mf"].startLoop()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["chglog", "memctk", "memkon"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        chk = self.sql.getRec("memctk")
        if not chk:
            self.sql.insRec("memctk", data=[1, "H", "Home Telephone Number"])
            self.sql.insRec("memctk", data=[2, "W", "Work Telephone Number"])
            self.sql.insRec("memctk", data=[3, "M", "Mobile Telephone Number"])
            self.sql.insRec("memctk", data=[4, "F", "Facsimile Number"])
            self.sql.insRec("memctk", data=[5, "E", "E-Mail Address"])
            self.opts["mf"].dbm.commitDbase()
        return True

    def mainProcess(self):
        cod = {
            "stype":
            "R",
            "tables": ("memctk", ),
            "cols": (("mck_code", "", 0, "CD"), ("mck_desc", "", 0,
                                                 "Description", "Y"))
        }
        typ = {
            "stype":
            "C",
            "title":
            "Available Types",
            "head": ("C", "Description"),
            "data": (("E", "E-Mail"), ("F", "Facsimile"), ("H", "Home Phone"),
                     ("M", "Mobile"), ("W", "Work Phone"))
        }
        fld = ((("T", 0, 0, 0), "I@mck_code", 0, "", "", "", "N", self.doCode,
                cod, None, ("notzero", )),
               (("T", 0, 1, 0), "I@mck_type", 0, "", "", "", "N", self.doType,
                typ, None, ("in", ("E", "F", "H", "M", "W"))),
               (("T", 0, 2, 0), "I@mck_desc", 0, "", "", "", "N", self.doDesc,
                None, self.doDelete, ("notblank", )))
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 2), ("T", 0, 0)),
               ("Cancel", None, self.doCancel, 0, ("T", 0, 2),
                ("T", 0, 0)), ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)

    def doCode(self, frt, pag, r, c, p, i, w):
        self.code = w
        self.old = self.sql.getRec("memctk",
                                   where=[("mck_code", "=", self.code)],
                                   limit=1)
        if self.old:
            self.new = False
            self.ktyp = self.old[self.sql.memctk_col.index("mck_type")]
            self.df.loadEntry(frt, pag, p + 1, data=self.ktyp)
            self.desc = self.old[self.sql.memctk_col.index("mck_desc")]
            self.df.loadEntry(frt, pag, p + 2, data=self.desc)
        else:
            self.new = True

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

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

    def doDelete(self):
        if self.code in (1, 2, 3, 4, 5):
            return "Static Code, Not Deleted"
        chk = self.sql.getRec("memkon",
                              cols=["count(*)"],
                              where=[("mlk_code", "=", self.code)],
                              limit=1)
        if chk[0]:
            return "Code in Use (memkon), Not Deleted"
        self.sql.delRec("memctk", where=[("mck_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

    def doEnd(self):
        data = [self.code, self.ktyp, self.desc]
        if self.new:
            self.sql.insRec("memctk", data=data)
        elif data != self.old[:len(data)]:
            col = self.sql.memctk_col
            data.append(self.old[col.index("mck_xflag")])
            self.sql.updRec("memctk",
                            data=data,
                            where=[("mck_code", "=", self.code)])
        self.opts["mf"].dbm.commitDbase()
        self.df.focusField("T", 0, 1)

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

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

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 2
0
class bc3080(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            if "args" in self.opts:
                self.ctyp = self.opts["args"][0]
                self.cnam = self.opts["args"][1]
                self.card = False
                self.qty = 1
                self.doEnd()
            else:
                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, ["bwlcmp", "bwltyp", "bwlpts",
            "bwlnot"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        bwlctl = gc.getCtl("bwlctl", self.opts["conum"])
        if not bwlctl:
            return
        self.fromad = bwlctl["ctb_emadd"]
        t = time.localtime()
        self.sysdt = time.strftime("%d %B %Y %H:%M:%S", t)
        self.image = os.path.join(self.opts["mf"].rcdic["wrkdir"], "bowls.png")
        if not os.path.exists(self.image):
            getImage("bowls", fle=self.image)
        if not os.path.exists(self.image):
            self.image = None
        self.card = True
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
            "Competition Format")
        com = {
            "stype": "R",
            "tables": ("bwlcmp",),
            "cols": (
                ("bcm_code", "", 0, "Cod"),
                ("bcm_name", "", 0, "Name", "Y"),
                ("bcm_date", "", 0, "Date")),
            "where": [("bcm_cono", "=", self.opts["conum"])]}
        r1s = (("A4 Page", "P"), ("A6 Card", "C"))
        fld = (
            (("T",0,0,0),"I@bcm_code",0,"","",
                "","Y",self.doCmpCod,com,None,("notzero",)),
            (("T",0,0,0),"ONA",30,""),
            (("T",0,1,0),"ITV",(50,10),"Notes","",
                "","N",self.doNotes,None,None,None,None,"""Enter All Additional Rules and Notes for the Competition e.g. what to do in these cases:

Trial Ends - Only 1 trial end per game.
Burnt Ends - Replay the end."""),
            (("T",0,2,0),("IRB",r1s),0,"Paper Type","",
                "P","N",self.doPaper,None,None,None),
            (("T",0,3,0),"IUI",2,"Quantity","",
                1,"N",self.doQty,None,None,("notzero",)))
        but = (("Edit Notes", None, self.doEdit, 0, ("T",0,4), ("T",0,5)),)
        tnd = ((self.doEnd,"y"),)
        txt = (self.doExit,)
        self.df = TartanDialog(self.opts["mf"], title=self.tit,
            eflds=fld, butt=but, tend=tnd, txit=txt, view=("N","V"),
            mail=("Y","N"))

    def doCmpCod(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("bwlcmp", cols=["bcm_name", "bcm_type"],
            where=[("bcm_cono", "=", self.opts["conum"]), ("bcm_code", "=", w)],
            limit=1)
        if not chk:
            return "Invalid Competition Code"
        self.ccod = w
        self.cnam = chk[0]
        self.ctyp = chk[1]
        self.df.loadEntry(frt, pag, p+1, data=self.cnam)
        nte = self.sql.getRec("bwlnot", where=[("bcn_cono", "=",
            self.opts["conum"]), ("bcn_ccod", "=", self.ccod)], limit=1)
        if nte:
            self.notes = nte[2]
            self.df.loadEntry(frt, pag, p+2, self.notes)
            return "sk2"

    def doEdit(self):
        self.df.focusField("T", 0, 3, tag=False)

    def doNotes(self, frt, pag, r, c, p, i, w):
        self.notes = w

    def doPaper(self, frt, pag, r, c, p, i, w):
        if w == "P":
            self.card = False
        else:
            self.card = True

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

    def doEnd(self):
        if "args" not in self.opts:
            hdr = self.tit
            prt = copyList(self.df.repprt)
            eml = copyList(self.df.repeml)
            self.df.closeProcess()
        else:
            hdr = "%03i %s - %s" % (self.opts["conum"], self.opts["conam"],
            "Competition Format")
            prt = ["Y", "V", "view"]
            eml = None
        self.drawFormat()
        pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"],
            self.__class__.__name__, self.opts["conum"], ext="pdf")
        self.fpdf.output(pdfnam, "F")
        doPrinter(mf=self.opts["mf"], pdfnam=pdfnam, header=hdr,
            repprt=prt, fromad=self.fromad, repeml=eml)
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()

    def drawFormat(self):
        whr = [
            ("bct_cono", "=", self.opts["conum"]),
            ("bct_code", "=", self.ctyp)]
        rec = self.sql.getRec("bwltyp", where=whr, limit=1)
        ldic = {}
        for col in self.sql.bwltyp_col[3:]:
            ldic[col] = rec[self.sql.bwltyp_col.index(col)]
        whr = [
            ("bcp_cono", "=", self.opts["conum"]),
            ("bcp_code", "=", self.ctyp)]
        rec = self.sql.getRec("bwlpts", where=whr)
        for r in rec:
            if r[self.sql.bwlpts_col.index("bcp_ptyp")] == "D":
                ptyp = "drawn"
            else:
                ptyp = "svs"
            ldic[ptyp] = {}
            for col in self.sql.bwlpts_col[3:]:
                ldic[ptyp][col] = r[self.sql.bwlpts_col.index(col)]
        if self.card:
            self.fpdf = MyFpdf(auto=True)
            self.fpdf.set_margins(55, 5, 55)
            self.fpdf.c_margin = self.fpdf.c_margin * 2
            self.fpdf.set_font("Arial","",8)
            h = 3.5
        else:
            self.fpdf = MyFpdf(auto=True)
            self.fpdf.set_font("Arial","",14)
            h = 6
        self.fpdf.header = self.pageHeading
        cwth = self.fpdf.get_string_width("X")
        x1 = self.fpdf.l_margin + (cwth * 20)
        x2 = self.fpdf.l_margin + (cwth * 22)
        for page in range(self.qty):
            self.fpdf.add_page()
            self.fpdf.drawText(txt=self.sql.bwltyp_dic["bct_cfmat"][4],
                h=h, ln=0)
            if ldic["bct_cfmat"] == "T":
                txt = "Tournament"
            elif ldic["bct_cfmat"] in ("D", "K"):
                txt = "Knockout"
            elif ldic["bct_cfmat"] == "R":
                txt = "Round Robin"
            else:
                txt = "Match"
            self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
            self.fpdf.drawText(txt=self.sql.bwltyp_dic["bct_tsize"][4],
                h=h, ln=0)
            self.fpdf.drawText(txt=ldic["bct_tsize"], x=x1, h=h, ctyp="M")
            #if ldic["bct_cfmat"] in ("D", "K", "R"):
            #    return
            self.fpdf.drawText(txt="Draw", h=h, ln=0)
            if ldic["bct_drawn"] == ldic["bct_games"]:
                txt = "All Games will be Random Draws."
            else:
                if ldic["bct_drawn"] == 1:
                    txt = "The First Game will be a Random Draw and "\
                        "thereafter Strength v Strength."
                else:
                    txt = "The First %s Games will be Random Draws and "\
                        "thereafter Strength v Strength." % ldic["bct_drawn"]
            self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
            if ldic["bct_games"]:
                self.fpdf.drawText(txt=self.sql.bwltyp_dic["bct_games"][4],
                    h=h, ln=0)
                self.fpdf.drawText(txt=ldic["bct_games"], x=x1, h=h, ctyp="M")
            self.fpdf.drawText(txt=self.sql.bwltyp_dic["bct_ends"][4],h=h,ln=0)
            self.fpdf.drawText(txt=ldic["bct_ends"], x=x1, h=h, ctyp="M")
            if ldic["bct_grgame"]:
                self.fpdf.drawText(txt="Groups", h=h, ln=0)
                txt = "Teams will be Split into Groups After Game %s." % \
                    ldic["bct_grgame"]
                self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                if ldic["bct_adjust"] == "Y":
                    txt = "With the Exception of Group A, the Scores will be "\
                        "Adjusted as follows:"
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                    if ldic["bct_expunge"]:
                        gms = ldic["bct_expunge"].split(",")
                        if len(gms) == 1:
                            txt = "Game %s will be Expunged" % gms[0]
                        else:
                            txt = "Games %s" % gms[0]
                            for n, g in enumerate(gms[1:]):
                                if n == len(gms) - 2:
                                    txt = "%s and %s" % (txt, g)
                                else:
                                    txt = "%s, %s" % (txt, g)
                            txt = "%s will be Expunged." % txt
                        self.fpdf.drawText(txt=txt, x=x2, h=h, ctyp="M")
                    if ldic["bct_percent"]:
                        if ldic["bct_expunge"]:
                            txt = "The Balance of the Games"
                        else:
                            txt = "All Games"
                        txt = "%s will Retain %s%s of their score." % (txt,
                            ldic["bct_percent"], "%")
                        self.fpdf.drawText(txt=txt, x=x2, h=h, ctyp="M")
            # Points
            self.fpdf.drawText(h=h)
            if ldic["bct_pdiff"] == "Y":
                nums = ["drawn", "svs"]
            else:
                nums = ["drawn"]
            for ptyp in nums:
                if ldic["bct_pdiff"] == "N":
                    txt = "Scoring for All Games"
                elif ptyp == "drawn":
                    txt = "Scoring for Drawn Games"
                else:
                    txt = "Scoring for S v S Games"
                self.fpdf.drawText(txt=txt, h=h)
                self.fpdf.underLine(h=h, txt=txt)
                if ldic[ptyp]["bcp_sends"]:
                    self.fpdf.drawText(txt="Skins", h=h, ln=0)
                    self.fpdf.drawText(txt="Each Set of %s Ends will "\
                        "Constitute a Skin." % ldic[ptyp]["bcp_sends"], x=x1,
                        h=h, ctyp="M")
                self.fpdf.drawText(txt="Points", h=h, ln=0)
                txt = ""
                pts = 0
                if ldic[ptyp]["bcp_e_points"]:
                    if ldic[ptyp]["bcp_e_points"] == 1:
                        txt = "%s Point per End" % ldic[ptyp]["bcp_e_points"]
                    else:
                        txt = "%s Points per End" % ldic[ptyp]["bcp_e_points"]
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                    pts += (ldic[ptyp]["bcp_e_points"] * ldic["bct_ends"])
                if ldic[ptyp]["bcp_s_points"]:
                    if ldic[ptyp]["bcp_s_points"] == 1:
                        txt = "%s Point per Skin" % ldic[ptyp]["bcp_s_points"]
                    else:
                        txt = "%s Points per Skin" % ldic[ptyp]["bcp_s_points"]
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                    pts += (ldic[ptyp]["bcp_s_points"] *
                        int(ldic["bct_ends"] / ldic[ptyp]["bcp_sends"]))
                if ldic[ptyp]["bcp_g_points"]:
                    if ldic[ptyp]["bcp_g_points"] == 1:
                        txt = "%s Point per Game" % ldic[ptyp]["bcp_g_points"]
                    else:
                        txt = "%s Points per Game" % ldic[ptyp]["bcp_g_points"]
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                    pts += ldic[ptyp]["bcp_g_points"]
                if ldic[ptyp]["bcp_bonus"] == "Y":
                    txt = "1 Bonus Point will be Awarded as Follows:"
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
                    txt = "Winning by %s or More Shots or" % \
                        (ldic[ptyp]["bcp_win_by"] + 1)
                    self.fpdf.drawText(txt=txt, x=x2, h=h, ctyp="M")
                    txt = "Losing by %s or Less Shots" % \
                        (ldic[ptyp]["bcp_lose_by"] - 1)
                    self.fpdf.drawText(txt=txt, x=x2, h=h, ctyp="M")
                    pts += 1
                if pts:
                    if pts == 1:
                        txt = "Point"
                    else:
                        txt = "Points"
                    txt = "Therefore a Maximum of %s %s per Game." % (pts, txt)
                    self.fpdf.drawText(txt=txt, x=x1, h=h, ctyp="M")
            if self.notes:
                txt = "Notes"
                self.fpdf.drawText(h=h)
                self.fpdf.drawText(txt=txt, h=h)
                self.fpdf.underLine(h=h, txt=txt)
                self.fpdf.drawText(txt=self.notes, h=h, ctyp="M")
                self.sql.delRec("bwlnot", where=[("bcn_cono", "=",
                    self.opts["conum"]), ("bcn_ccod", "=", self.ccod)])
                self.sql.insRec("bwlnot", data=[self.opts["conum"],
                    self.ccod, self.notes])
                self.opts["mf"].dbm.commitDbase()

    def pageHeading(self):
        if self.card:
            self.fpdf.set_fill_color(220)
            self.fpdf.set_font("Arial","B",12)
            self.fpdf.drawText("Competiton Format and Points", h=6, align="C",
                border="TLRB", fill=True)
            self.fpdf.set_line_width(1)
            self.fpdf.rect(self.fpdf.l_margin, self.fpdf.t_margin, 100, 140)
            self.fpdf.set_line_width(0)
            self.fpdf.ln(4)
            return
        if self.image:
            if self.card:
                self.fpdf.image(self.image, x=10, y=10, w=7, h=5)
            else:
                self.fpdf.image(self.image, x=10, y=10, w=15, h=11)
        self.fpdf.set_font("Arial","B",15)
        self.fpdf.cell(20)
        self.fpdf.cell(0,10,"Format Sheet for the %s" % self.cnam,1,0,"C")
        self.fpdf.ln(20)

    def doExit(self):
        self.df.closeProcess()
        if "wait" not in self.opts:
            self.opts["mf"].closeLoop()
Esempio n. 3
0
 def doEnd(self):
     self.df.closeProcess()
     tabs = ["wagmst"]
     self.head = "Salaries and Wages - Employee Master Report"
     whr = [("wgm_cono", "=", self.opts["conum"])]
     if self.dep:
         whr.append(("wgm_dept", "=", self.dep))
         opts = "Dept: %s" % self.dep
     else:
         opts = None
     odr = "wgm_empno"
     if self.typ == "C":
         sql = Sql(self.opts["mf"].dbm, "wagmst",
             prog=self.__class__.__name__)
         recs = sql.getRec(tables=tabs, where=whr)
         if not recs:
             self.closeProcess()
             return
         col = sql.wagmst_col
         dic = sql.wagmst_dic
         self.fpdf = MyFpdf(name=self.__class__.__name__, head=80, auto=True)
         self.fpdf.header = self.doHead
         self.fpdf.set_font("Courier", "B", 12)
         cwth = self.fpdf.get_string_width("X")
         for rec in recs:
             self.fpdf.add_page()
             max1, max2 = 0, 0
             for c in col[:-1]:
                 if max1 < len(dic[c][4]):
                     max1 = len(dic[c][4])
                 if max2 < int(dic[c][3]):
                     max2 = int(dic[c][3])
                 self.fpdf.set_font("Courier", "B", 12)
                 self.fpdf.drawText(h=5, txt="%-20s" % dic[c][4], ln=0)
                 self.fpdf.set_font("Courier", "", 12)
                 if dic[c][4] == "Pay Frequency":
                     if rec[col.index(c)] == "F":
                         txt = "Fortnightly"
                     elif rec[col.index(c)] == "M":
                         txt = "Monthly"
                     else:
                         txt = "Weekly"
                     self.fpdf.drawText(h=5, x=cwth*40, txt=txt)
                 elif dic[c][4] == "Pay Type":
                     if rec[col.index(c)] == "C":
                         txt = "Cash"
                     elif rec[col.index(c)] == "Q":
                         txt = "Cheque"
                     else:
                         txt = "Electronic"
                     self.fpdf.drawText(h=5, x=cwth*40, txt=txt)
                 elif dic[c][4] == "Account Type":
                     if rec[col.index(c)] == "1":
                         txt = "Current"
                     elif rec[col.index(c)] == "2":
                         txt = "Transmission"
                     else:
                         txt = "Savings"
                     self.fpdf.drawText(h=5, x=cwth*40, txt=txt)
                 else:
                     self.fpdf.drawText(h=5, x=cwth*40,
                         txt=CCD(rec[col.index(c)],
                         dic[c][2], dic[c][3]).disp)
         pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"],
             self.__class__.__name__, self.opts["conum"], ext="pdf")
         self.fpdf.output(pdfnam, "F")
         doPrinter(mf=self.opts["mf"], conum=self.opts["conum"],
             pdfnam=pdfnam, header=self.head, repprt=self.df.repprt,
             fromad=self.fromad, repeml=self.df.repeml)
     else:
         cols = [
             ["wgm_empno",  "UI",  5, "EmpNo", "y"],
             ["wgm_sname",  "NA", 30, "Surname", "y"],
             ["wgm_fname",  "NA", 30, "Names", "y"],
             ["wgm_freq",  "UA", 1, "F", "y"],
             ["wgm_start",  "D1", 10, "Comm-Date", "y"],
             ["wgm_term",   "d1", 10, "Term-Date", "y"]]
         RepPrt(self.opts["mf"], conum=self.opts["conum"],
             conam=self.opts["conam"], name=self.__class__.__name__,
             tables=tabs, heads=[self.head], cols=cols, where=whr,
             order=odr, opts=opts, repprt=self.df.repprt,
             repeml=self.df.repeml, fromad=self.fromad)
     self.closeProcess()
Esempio n. 4
0
class rc3070(object):
    def __init__(self, **opts):
        self.opts = opts
        if self.setVariables():
            self.mainProcess()

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm,
                       "rcaowm",
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        rcactl = gc.getCtl("rcactl", self.opts["conum"])
        if not rcactl:
            return
        self.fromad = rcactl["cte_emadd"]
        self.notes = NotesPrint(self.opts["mf"], self.opts["conum"],
                                self.opts["conam"], "RCA")
        if not self.notes.data:
            return
        return True

    def mainProcess(self):
        data = []
        p = ProgressBar(self.opts["mf"].body,
                        typ="Generating the Report",
                        mxs=len(self.notes.data),
                        esc=True)
        for num, dat in enumerate(self.notes.data):
            p.displayProgress(num)
            if p.quit:
                break
            if len(dat[2].strip()) > 7:
                continue
            desc = textFormat(dat[5], width=50)
            for n, d in enumerate(desc):
                if not n:
                    acc = dat[2][:7].strip()
                    nam = self.sql.getRec("rcaowm",
                                          cols=["rom_name"],
                                          where=[("rom_cono", "=",
                                                  self.opts["conum"]),
                                                 ("rom_acno", "=", acc)],
                                          limit=1)
                    if not nam:
                        continue
                    data.append([
                        acc, nam[0], dat[4],
                        CCD(dat[3], "d1", 10).disp, dat[6],
                        CCD(dat[7], "d1", 10).disp, d
                    ])
                else:
                    data.append(["", "", "", "", "", "", d])
        p.closeProgress()
        if not p.quit:
            name = self.__class__.__name__
            head = ["Rental's Masterfile Notes Listing"]
            cols = [["a", "NA", 7, "Acc-Num", "y"],
                    ["b", "NA", 30, "Acc-Name", "y"],
                    ["c", "NA", 20, "User-Name", "y"],
                    ["d", "NA", 10, "Cap-Date", "y"], ["e", "UA", 1, "F", "y"],
                    ["f", "NA", 10, "Act-Date", "y"],
                    ["g", "NA", 50, "Details", "y"]]
            RepPrt(self.opts["mf"],
                   conum=self.opts["conum"],
                   conam=self.opts["conam"],
                   name=name,
                   tables=data,
                   heads=head,
                   cols=cols,
                   ttype="D",
                   repprt=self.notes.df.repprt,
                   repeml=self.notes.df.repeml,
                   fromad=self.fromad)
Esempio n. 5
0
class cs2020(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"])
        cshctl = gc.getCtl("cshctl", self.opts["conum"])
        if not cshctl:
            return
        self.glint = cshctl["ccc_glint"]
        if self.glint == "N":
            showError(self.opts["mf"].window, "Error",
                "Cash Analysis Not Integrated.")
            return
        ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
        self.cshctl = ctlctl["csh_ctl"]
        self.vatctl = ctlctl["vat_ctl"]
        tabs = ["cshana", "cshcnt", "gentrn", "ctlvtf"]
        self.sql = Sql(self.opts["mf"].dbm, tables=tabs,
            prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.dte = self.sql.getRec("cshcnt", cols=["max(cct_date)"],
            where=[("cct_cono", "=", self.opts["conum"])], limit=1)[0]
        t = time.localtime()
        self.sysdt = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def mainProcess(self):
        self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]),
            "Cash Merge (%s)" % self.__class__.__name__)
        dte = {
            "stype": "R",
            "tables": ("cshcnt",),
            "cols": (
                ("cct_date", "", 0, "Date"),),
            "where": [("cct_cono", "=", self.opts["conum"])],
            "group": "cct_date"}
        fld = (
            (("T",0,0,0),"ID1",10,"From Date","",
                self.dte,"Y",self.doFrom,dte,None,("efld",)),
            (("T",0,1,0),"Id1",10,"To   Date","To Date",
                "","Y",self.doTo,dte,None,("efld",)))
        tnd = ((self.doEnd,"Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"], title=self.tit, eflds=fld,
            tend=tnd, txit=txt)

    def doFrom(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.fm = w
        self.fmd = self.df.t_disp[pag][r][p]
        self.df.loadEntry(frt, pag, p+1, data=self.fm)

    def doTo(self, frt, pag, r, c, p, i, w):
        if not w:
            w = self.fm
        elif w < self.fm:
            return "Invalid To Date"
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"
        self.to = w
        self.tod = CCD(w, "D1", 10).disp
        csh = self.sql.getRec("cshcnt", where=[("cct_cono", "=",
            self.opts["conum"]), ("cct_type", "=", "T"), ("cct_date",
            "between", self.fm, self.to)])
        if not csh:
            return "ff1|Invalid Cash Capture Dates"

    def doEnd(self):
        self.df.closeProcess()
        recs = self.sql.getRec("cshana", where=[("can_cono", "=",
            self.opts["conum"]), ("can_trdt", "between", self.fm, self.to),
            ("can_gflag", "=", "N")], order="can_trdt")
        if not recs:
            showInfo(self.opts["mf"].window, "Merge",
                "There are No Records to Merge.")
        else:
            for rec in recs:
                # Expense and Income
                acc = self.sql.getRec("gentrn", cols=["max(glt_refno)"],
                    where=[("glt_cono", "=", self.opts["conum"]),
                    ("glt_acno", "=", self.cshctl), ("glt_type", "=", 4),
                    ("glt_refno", "like", "CS_______")], limit=1)
                if acc:
                    try:
                        auto = int(acc[0][2:]) + 1
                    except:
                        auto = 1
                else:
                    auto = 1
                refno = "CS%07d" % auto
                ttyp = rec[self.sql.cshana_col.index("can_type")]
                iamnt = rec[self.sql.cshana_col.index("can_incamt")]
                vamnt = rec[self.sql.cshana_col.index("can_vatamt")]
                eamnt = float(ASD(iamnt) - ASD(vamnt))
                if ttyp == "T":
                    iamnt = float(ASD(0) - ASD(iamnt))
                    vamnt = float(ASD(0) - ASD(vamnt))
                    eamnt = float(ASD(0) - ASD(eamnt))
                vcod = rec[self.sql.cshana_col.index("can_vatcod")]
                data = [rec[self.sql.cshana_col.index("can_cono")]]
                acno = rec[self.sql.cshana_col.index("can_code")]
                trdt = rec[self.sql.cshana_col.index("can_trdt")]
                curdt = int(trdt / 100)
                data.extend([acno, curdt, trdt, 4, refno, "CSHMRGE",
                    eamnt, vamnt, "Cash Analysis", vcod])
                data.extend(["", 0, self.opts["capnm"], self.sysdt])
                self.sql.insRec("gentrn", data=data)
                # VAT Control
                data[1] = self.vatctl
                data[7] = vamnt
                data[8] = 0
                self.sql.insRec("gentrn", data=data)
                # Cash Control
                data[1] = self.cshctl
                data[7] = float(ASD(0) - ASD(iamnt))
                data[8] = 0
                data[9] = rec[self.sql.cshana_col.index("can_desc")]
                self.sql.insRec("gentrn", data=data)
                # VAT Record
                data = [rec[self.sql.cshana_col.index("can_cono")]]
                data.append(vcod)
                if ttyp == "T":
                    data.append("O")
                else:
                    data.append("I")
                data.extend([curdt, "G", 4, "CSHMRG", refno, trdt, acno,
                    "Cash Analysis", eamnt, vamnt, 0, self.opts["capnm"],
                    self.sysdt])
                self.sql.insRec("ctlvtf", data=data)
                # Update
                seq = rec[self.sql.cshana_col.index("can_seq")]
                self.sql.updRec("cshana", cols=["can_gflag"], data=["Y"],
                    where=[("can_seq", "=", seq)])
            self.opts["mf"].dbm.commitDbase(True)
        self.closeProcess()

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

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

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, ["slsiv1", "drsmst"],
                       prog=self.__class__.__name__)
        if self.sql.error:
            return
        self.s_dte = int(self.opts["period"][1][0])
        self.e_dte = int(self.opts["period"][2][0])
        return True

    def mainProcess(self):
        r1s = (("Both", "B"), ("Invoices", "I"), ("Credit Notes", "C"))
        fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "Document Type", "", "B", "Y",
                self.doType, None, None, None),
               (("T", 0, 1, 0), "ID1", 10, "From Date", "", self.s_dte, "N",
                self.doDate, None, None, ("notzero", )),
               (("T", 0, 2, 0), "ID1", 10, "To   Date", "", self.e_dte, "N",
                self.doDate, None, None, ("notzero", )))
        tnd = ((self.doEnd, "y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               tops=False,
                               eflds=fld,
                               tend=tnd,
                               txit=txt,
                               view=("Y", "V"),
                               mail=("Y", "N"))

    def doType(self, frt, pag, r, c, p, i, w):
        self.type = w
        if self.type == "C":
            self.dtyp = "Credit Notes"
        elif self.type == "I":
            self.dtyp = "Invoices"
        else:
            self.dtyp = "Documents"

    def doDate(self, frt, pag, r, c, p, i, w):
        if p == 1:
            self.sdte = w
        else:
            self.edte = w

    def doEnd(self):
        data = []
        self.df.closeProcess()
        hed = ["Cancelled Sales %s" % self.dtyp]
        tab = ["slsiv1", "drsmst"]
        col = [
            "si1_rtn", "si1_docno", "si1_date", "si1_acno", "drm_name",
            "si1_invno"
        ]
        whr = [("si1_cono", "=", self.opts["conum"]),
               ("si1_date", "between", self.sdte, self.edte),
               ("drm_cono=si1_cono", ), ("drm_chain=si1_chain", ),
               ("drm_acno=si1_acno", )]
        if self.type == "B":
            whr.append(("si1_rtn", "in", ("C", "I")))
        else:
            whr.append(("si1_rtn", "=", self.type))
        whr.append(("si1_invno", "=", "cancel"))
        odr = "si1_rtn, si1_docno"
        data = self.sql.getRec(tables=tab, cols=col, where=whr, order=odr)
        cols = []
        dics = self.sql.slsiv1_dic.copy()
        dics.update(self.sql.drsmst_dic)
        for c in col[:5]:
            cols.append((c, dics[c][2], dics[c][3], dics[c][5]))
        RepPrt(self.opts["mf"],
               name=self.__class__.__name__,
               tables=data,
               ttype="D",
               heads=hed,
               cols=cols)
        self.opts["mf"].closeLoop()

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

    def setVariables(self):
        self.sql = Sql(self.opts["mf"].dbm, [
            "memctl", "memctc", "memmst", "memadd", "memkon", "bwlctl",
            "bwltab", "chglog"
        ],
                       prog=self.__class__.__name__)
        if self.sql.error:
            if self.sql.error == ["memctl"]:
                self.memctl = False
                self.chgint = False
                self.mlint = None
                self.same = "N"
            else:
                return
        else:
            self.memctl = True
        self.acc = self.sql.getRec("bwlctl",
                                   where=[("ctb_cono", "=", self.opts["conum"])
                                          ],
                                   limit=1)
        if not self.acc:
            self.new = True
            self.acc = [
                self.opts["conum"], "N", "N", 0, 0, 0, 0, "C", "A", "N", "Y",
                4, 0, 0, "A", "B", "", ""
            ]
        else:
            self.new = False
            self.oldm = self.acc[self.sql.bwlctl_col.index("ctb_mstart")]
            self.oldf = self.acc[self.sql.bwlctl_col.index("ctb_fstart")]
            self.oldn = self.acc[self.sql.bwlctl_col.index("ctb_nstart")]
        if self.memctl:
            self.mlint = self.sql.getRec("memctl",
                                         where=[("mcm_cono", "=",
                                                 self.opts["conum"])],
                                         limit=1)
        return True

    def drawDialog(self):
        cat = {
            "stype":
            "R",
            "tables": ("memctc", ),
            "cols":
            (("mcc_code", "", 0, "Code"), ("mcc_desc", "", 0, "Description")),
            "where":
            (("mcc_cono", "=", self.opts["conum"]), ("mcc_type", "=", "C"))
        }
        r1s = (("Yes", "Y"), ("No", "N"))
        r2s = (("Position", "P"), ("Rating", "R"), ("Combined", "C"))
        r3s = (("Ascending", "A"), ("Descending", "D"))
        r4s = (("S32L-S32L", "A"), ("S32L-L23S", "B"))
        if self.memctl:
            self.fld = [
                (("T",0,0,0),["IRB",r1s],0,"M/L Integration","",
                    self.acc[1],"N",self.doMlint,None,None,None,None,
                    "Select whether to Integrate this system with the "\
                    "Members Ledger System."),
                (("T",0,1,0),("IRB",r1s),0,"Same Numbers","",
                    self.acc[2],"N",self.doSame,None,None,None,None,
                    "If the Members Ledger is Integrated select "\
                    "whether the Tab numbers and Members Ledger numbers "\
                    "are the Same."),
                (("T",0,2,0),"IUI",2,"Category Code","",
                    self.acc[3],"N",self.doCat,cat,None,None,None,
                    "If the Members Ledger is Integrated enter which "\
                    "Members Ledger Sports category is for Bowls.")]
            seq = 3
        else:
            self.fld = []
            seq = 0
        self.fld.extend([
            (("T",0,seq,0),"IUI",6,"Male Start Seq","",
                self.acc[4],"N",self.doMStart,None,None,("notzero",),None,
                "The Starting Tab number for Males."),
            (("T",0,seq + 1,0),"IUI",6,"Female Start Seq","",
                self.acc[5],"N",self.doFStart,None,None,("notzero",),None,
                "The Starting Tab number for Females."),
            (("T",0,seq + 2,0),"IUI",6,"Non-Member Start Seq","",
                self.acc[6],"N",self.doNStart,None,None,("notzero",),None,
                "The Starting Tab number for Visitors."),
            (("T",0,seq + 3,0),("IRB",r2s),0,"Draw Base","",
                self.acc[7],"N",self.doBase,None,None,None,None,
                "The Default method of doing Draws."),
            (("T",0,seq + 4,0),("IRB",r3s),0,"Rating Order","",
                self.acc[8],"N",None,None,None,None,None,
                "With Ratings select whether Ratings are Ascending "\
                "or Descending in strength."),
            (("T",0,seq + 5,0),("IRB",r1s),0,"Mixed Ratings","",
                self.acc[9],"N",None,None,None,None,None,
                "Select if Different Ratings are Used for Mixed "\
                "Gender Draws."),
            (("T",0,seq + 6,0),("IRB",r1s),0,"Replace Fours","",
                self.acc[10],"N",None,None,None,None,None,
                "When the Draw is Trips Use Pairs Instead of Fours "\
                "when Applicable."),
            (("T",0,seq + 7,0),"IUI",2,"Weeks Between Draws","",
                self.acc[11],"N",None,None,None,("between", 0, 4),None,
                "Minimum number of Weeks that Players Should Not be "\
                "Drawn in the Same Team."),
            (("T",0,seq + 8,0),"IUD",5.2,"Rate - Member","",
                self.acc[12],"N",None,None,None,("efld",)),
            (("T",0,seq + 9,0),"IUD",5.2,"Rate - Visitor","",
                self.acc[13],"N",None,None,None,("efld",)),
            (("T",0,seq + 10,0),"IUA",6,"Greens","",
                self.acc[14],"N",self.doGreens,None,None,("notblank",)),
            (("T",0,seq + 11,0),("IRB",r4s),0,"Draw Format","",
                self.acc[15],"N",None,None,None,None),
            (("T",0,seq + 12,0),"ITX",50,"Email Address","",
                self.acc[16],"N",None,None,None,("email",))])
        but = (("Accept", None, self.doAccept, 0, ("T", 0, 1), ("T", 0, 0)),
               ("Quit", None, self.doExit, 1, None, None))
        tnd = ((self.doEnd, "Y"), )
        txt = (self.doExit, )
        self.df = TartanDialog(self.opts["mf"],
                               eflds=self.fld,
                               butt=but,
                               tend=tnd,
                               txit=txt)
        if not self.new:
            if self.memctl:
                seq = 1
                self.oldint = self.acc[0]
            else:
                seq = 4
            for n, f in enumerate(self.acc[seq:-1]):
                self.df.loadEntry("T", 0, n, data=f)
        if not self.memctl:
            self.chgint = False
            self.same = "N"
        self.df.focusField("T", 0, 1, clr=False)

    def doMlint(self, frt, pag, r, c, p, i, w):
        if w == "Y" and not self.mlint:
            return "Invalid Selection, Member's System Not Set Up"
        if not self.new and w != self.oldint:
            self.chgint = True
        else:
            self.chgint = False
        if w == "N":
            self.same = "N"
            self.df.loadEntry(frt, pag, p + 1, data=self.same)
            self.mcat = 0
            self.df.loadEntry(frt, pag, p + 2, data=self.mcat)
            return "sk2"

    def doSame(self, frt, pag, r, c, p, i, w):
        self.same = w

    def doCat(self, frt, pag, r, c, p, i, w):
        chk = self.sql.getRec("memctc",
                              where=[("mcc_cono", "=", self.opts["conum"]),
                                     ("mcc_type", "=", "C"),
                                     ("mcc_code", "=", w)],
                              limit=1)
        if not chk:
            return "Invalid Code"
        self.mcat = w

    def doMStart(self, frt, pag, r, c, p, i, w):
        self.mstart = w

    def doFStart(self, frt, pag, r, c, p, i, w):
        if w == self.mstart and self.same == "N":
            return "Invalid Number, Same as Male"
        if w != self.mstart:
            if w < self.mstart:
                r = self.mstart - w
                g = "Female"
            else:
                r = w - self.mstart
                g = "Male"
            if r < 200:
                return "ff5|Invalid Numbers, Too Few %s Tabs. (Minimum 200)" % g
        self.fstart = w

    def doNStart(self, frt, pag, r, c, p, i, w):
        if w < self.mstart or w < self.fstart or w > 890000:
            return "Invalid Number, Less than Male or Female or > 890000"
        if self.mstart == self.fstart:
            t = "Members"
            r = w - self.mstart
            m = 400
        elif self.fstart < self.mstart:
            t = "Male"
            r = w - self.mstart
            m = 200
        else:
            t = "Female"
            r = w - self.fstart
            m = 200
        if r < m:
            return "Invalid Number, Too Few %s Tabs. (Minimum %s)" % (t, m)
        self.nstart = w

    def doBase(self, frt, pag, r, c, p, i, w):
        if w == "P":
            self.df.loadEntry(frt, pag, p + 1, data="A")
            return "sk1"
        if not self.acc[7]:
            self.df.t_work[0][0][p + 1] = "A"

    def doGreens(self, frt, pag, r, c, p, i, w):
        w = w.strip().replace(" ", "")
        self.df.loadEntry(frt, pag, p, data=w)

    def doEnd(self):
        err = None
        if self.same == "Y":
            if self.mstart + 400 > self.nstart:
                err = "Invalid Range, Too Few Members Allowed For"
        elif self.mstart == self.fstart and self.same == "N":
            err = "Same Male and Female Starting Numbers"
        elif self.mstart < self.fstart:
            if self.fstart - self.mstart < 200:
                err = "Invalid Range, Too Few Male Numbers"
            elif self.nstart < self.fstart + 200:
                err = "Invalid Range, Too Few Female Numbers"
        elif self.mstart - self.fstart < 200:
            err = "Invalid Range, Too Few Female Numbers"
        elif self.nstart < self.mstart + 200:
            err = "Invalid Range, Too Few Male Numbers"
        if err:
            self.df.focusField("T", 0, 3, err=err)
        else:
            data = [self.opts["conum"]]
            if not self.memctl:
                data.extend(["N", "N"])
            for x in range(0, len(self.df.t_work[0][0])):
                data.append(self.df.t_work[0][0][x])
            if self.new:
                self.sql.insRec("bwlctl", data=data)
            elif data != self.acc[:len(data)]:
                col = self.sql.bwlctl_col
                data.append(self.acc[col.index("ctb_xflag")])
                self.sql.updRec("bwlctl",
                                data=data,
                                where=[("ctb_cono", "=", self.opts["conum"])])
                dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3])
                for num, dat in enumerate(self.acc):
                    if dat != data[num]:
                        self.sql.insRec("chglog",
                                        data=[
                                            "bwlctl", "U",
                                            "%03i" % self.opts["conum"],
                                            col[num], dte, self.opts["capnm"],
                                            str(dat),
                                            str(data[num]), "", 0
                                        ])
            if self.chgint and self.oldint == "Y":
                recs = self.sql.getRec("bwltab",
                                       cols=["btb_memno"],
                                       where=[("btb_cono", "=",
                                               self.opts["conum"])])
                for rec in recs:
                    data = self.doLoadMember(rec[0])
                    if data == [0, "", "", "", "", "", "", "", ""]:
                        continue
                    self.sql.updRec("bwltab",
                                    cols=[
                                        "btb_memno", "btb_add1", "btb_add2",
                                        "btb_add3", "btb_pcod", "btb_home",
                                        "btb_work", "btb_cell", "btb_mail"
                                    ],
                                    data=data,
                                    where=[("btb_cono", "=",
                                            self.opts["conum"]),
                                           ("btb_memno", "=", rec[0])])
            if not self.new and (self.mstart != self.oldm or \
                    self.fstart != self.oldf or self.nstart != self.oldn):
                # Tab ranges changed
                ok = askQuestion(self.opts["mf"].body, "Ranges", "Tab Ranges "\
                    "Have Changed, Do You Want to Change the Tabs to the "\
                    "New Ranges?", default="no")
                if ok == "yes":
                    mdif = self.mstart - self.oldm
                    fdif = self.fstart - self.oldf
                    ndif = self.nstart - self.oldn
                    recs = []
                    if ndif > 0:
                        recs.extend(self.getNon())
                    if self.oldm > self.oldf:
                        recs.extend(self.getWom())
                        recs.extend(self.getMen())
                    else:
                        recs.extend(self.getMen())
                        recs.extend(self.getWom())
                    if ndif < 0:
                        recs.extend(self.getNon())
                    self.df.setWidget(self.df.mstFrame, state="hide")
                    pb = ProgressBar(self.opts["mf"].body,
                                     typ="Changing Tabs",
                                     mxs=len(recs))
                    for num, rec in enumerate(recs):
                        pb.displayProgress(num)
                        tab = rec[self.sql.bwltab_col.index("btb_tab")]
                        gdr = rec[self.sql.bwltab_col.index("btb_gender")]
                        if tab < self.oldn:
                            if gdr == "M":
                                new = tab + mdif
                            else:
                                new = tab + fdif
                        else:
                            new = tab + ndif
                        callModule(
                            self.opts["mf"],
                            None,
                            "bc6010",
                            coy=[self.opts["conum"], self.opts["conam"]],
                            args=[tab, new])
                    pb.closeProgress()
                    self.df.setWidget(self.df.mstFrame, state="show")
            self.opts["mf"].dbm.commitDbase()
            self.doExit()

    def getMen(self):
        recs = self.sql.getRec("bwltab",
                               where=[("btb_cono", "=", self.opts["conum"]),
                                      ("btb_tab", "<", self.oldn),
                                      ("btb_gender", "=", "M")],
                               order="btb_tab")
        return recs

    def getWom(self):
        recs = self.sql.getRec("bwltab",
                               where=[("btb_cono", "=", self.opts["conum"]),
                                      ("btb_tab", "<", self.oldn),
                                      ("btb_gender", "=", "F")],
                               order="btb_tab")
        return recs

    def getNon(self):
        end = self.oldm
        if self.oldf > end:
            end = self.oldf
        recs = self.sql.getRec("bwltab",
                               where=[("btb_cono", "=", self.opts["conum"]),
                                      ("btb_tab", ">=", self.oldn)],
                               order="btb_tab")
        return recs

    def doLoadMember(self, memno):
        acc = self.sql.getRec("memmst",
                              cols=["mlm_surname", "mlm_names", "mlm_gender"],
                              where=[("mlm_cono", "=", self.opts["conum"]),
                                     ("mlm_memno", "=", memno)],
                              limit=1)
        if not acc:
            return [0, "", "", "", "", "", "", "", ""]
        self.df.loadEntry("T", 0, 1, data=memno)
        self.df.loadEntry("T", 0, 2, data=acc[0])
        self.df.loadEntry("T", 0, 3, data=acc[1])
        self.gender = acc[2]
        self.df.loadEntry("T", 0, 4, data=self.gender)
        for typ in ("A", "P"):
            data = self.sql.getRec(
                "memadd",
                cols=["mla_add1", "mla_add2", "mla_add3", "mla_code"],
                where=[("mla_cono", "=", self.opts["conum"]),
                       ("mla_memno", "=", memno), ("mla_type", "=", typ)],
                limit=1)
            if data:
                break
        if data:
            data.insert(0, 0)
        else:
            data = ["", "", "", "", ""]
        for num, cod in enumerate((1, 2, 3, 5)):
            kk = self.sql.getRec("memkon",
                                 cols=["mlk_detail"],
                                 where=[("mlk_cono", "=", self.opts["conum"]),
                                        ("mlk_memno", "=", memno),
                                        ("mlk_code", "=", cod)],
                                 limit=1)
            if kk:
                data.append(kk[0])
            else:
                data.append("")
        return data

    def doAccept(self):
        frt, pag, col, mes = self.df.doCheckFields()
        if mes:
            self.df.focusField(frt, pag, (col + 1), err=mes)
        else:
            self.same = self.df.t_work[0][0][1]
            self.mcat = self.df.t_work[0][0][2]
            self.mstart = self.df.t_work[0][0][3]
            self.fstart = self.df.t_work[0][0][4]
            self.nstart = self.df.t_work[0][0][5]
            self.df.doEndFrame("T", 0, cnf="N")

    def doExit(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 8
0
class sl2030(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, ["wagctl", "waglmf"],
                       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
        glint = wagctl["ctw_glint"]
        if glint == "Y":
            ctlctl = gc.getCtl("ctlctl", self.opts["conum"])
            if not ctlctl:
                return
            ctls = ["wag_slc", "wag_sli"]
            if gc.chkRec(self.opts["conum"], ctlctl, ctls):
                return
            self.glctl = (ctlctl["wag_slc"], ctlctl["wag_sli"],
                          ctlctl["wag_sli"])
        else:
            self.glctl = None
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    def dataHeader(self):
        fld = ((("T", 0, 0, 0), "ID1", 10, "Transaction Date", "", self.sysdtw,
                "N", self.doTrdate, None, None, None), )
        tnd = ((self.endPage0, "y"), )
        txt = (self.exitPage0, )
        self.df = TartanDialog(self.opts["mf"], eflds=fld, tend=tnd, txit=txt)

    def doTrdate(self, frt, pag, r, c, p, i, w):
        self.trdate = w
        if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]:
            return "Invalid Date, Not in Financial Period"

    def endPage0(self):
        self.df.closeProcess()
        recs = self.sql.getRec("waglmf",
                               where=[("wlm_cono", "=", self.opts["conum"]),
                                      ("wlm_rate", ">", 0),
                                      ("wlm_start", "<", self.trdate)],
                               order="wlm_empno, wlm_loan")
        p = ProgressBar(self.opts["mf"].body, mxs=len(recs))
        for num, rec in enumerate(recs):
            p.displayProgress(num)
            curdt = int(self.trdate / 100)
            batch = "L%s" % curdt
            LoanInterest("S",
                         self.opts["mf"].dbm,
                         rec,
                         update="Y",
                         batch=batch,
                         curdt=curdt,
                         tdate=self.trdate,
                         glctl=self.glctl,
                         capnm=self.opts["capnm"])
        p.closeProgress()
        self.sql.updRec("wagctl",
                        cols=["ctw_i_date"],
                        data=[self.trdate],
                        where=[("ctw_cono", "=", self.opts["conum"])])
        self.opts["mf"].dbm.commitDbase()
        self.opts["mf"].closeLoop()

    def exitPage0(self):
        self.df.closeProcess()
        self.opts["mf"].closeLoop()
Esempio n. 9
0
class st2040(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, ["strgrp", "strmf1", "strmf2",
            "strtrn"], prog=self.__class__.__name__)
        if self.sql.error:
            return
        gc = GetCtl(self.opts["mf"])
        strctl = gc.getCtl("strctl", self.opts["conum"])
        if not strctl:
            return
        self.locs = strctl["cts_locs"]
        if self.locs == "N":
            showError(self.opts["mf"].body, "Error",
                "Multiple Locations Are Not Enabled")
            return
        t = time.localtime()
        self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2]
        return True

    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"))],
            "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}
        fld = [
            (("T",0,0,0),"INa",7,"Transfer Number","",
                "","N",self.doTrf,None,None,("notblank",)),
            (("T",0,0,0),"ID1",10,"Date","Transfer Date",
                self.sysdtw,"N",self.doDte,None,None,("efld",)),
            (("C",0,0,0),"IUA",3,"Grp","Product Group",
                "r","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",25,"Description"),
            (("C",0,0,3),"ONA",10,"U.O.I"),
            (("C",0,0,4),"ISD",9.2,"Quantity","",
                "","N",self.doQty,None,None,("notzero",)),
            (("C",0,0,5),"IUA",1,"F","From Location",
                "","N",self.doLoc1,stl,None,("notblank",)),
            (("C",0,0,6),"IUA",1,"T","To Location",
                "","N",self.doLoc2,stl,None,("notblank",)),
            (("C",0,0,7),"ISD",9.2,"Unit-Cost","Unit Cost Price",
                "","N",None,None,None,("notzero",)),
            (("C",0,0,8),"INA",(15,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,)
        self.df = TartanDialog(self.opts["mf"], eflds=fld, rows=row,
            tend=tnd, txit=txt, cend=cnd, cxit=cxt)

    def doTrf(self, frt, pag, r, c, p, i, w):
        self.trf = 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.curdt = int(self.dte / 100)
        self.batno = "S%s" % self.curdt

    def doGroup(self, frt, pag, r, c, p, i, w):
        self.group = 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"

    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"], 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)"
        self.df.loadEntry("C", pag, p+1, data=acc[1])
        self.df.loadEntry("C", pag, p+2, data=acc[2])

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

    def doLoc1(self, frt, pag, r, c, p, i, w):
        self.acc = self.sql.getRec("strmf2", where=[("st2_cono", "=",
            self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code",
            "=", self.code), ("st2_loc", "=", w)], limit=1)
        if not self.acc:
            return "Invalid Location For This Product"
        self.loc1 = w
        self.extractCost()
        self.amt = round((self.qty * self.ucost), 2)
        self.df.loadEntry("C", pag, p+2, data=self.ucost)

    def doLoc2(self, frt, pag, r, c, p, i, w):
        if w == self.loc1:
            return "Invalid Location, Same as From"
        self.newloc = "N"
        acc = self.sql.getRec("strmf2", where=[("st2_cono", "=",
            self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code",
            "=", self.code), ("st2_loc", "=", w)], limit=1)
        if not acc:
            ok = askQuestion(self.opts["mf"].body, "New Location",
                "This location does not exist for this product. " \
                "Are you sure that you want to create it?")
            if ok == "yes":
                self.newloc = "Y"
            else:
                return "Invalid Location For This Product"
        self.loc2 = w
        return "sk1"

    def doTrnDet(self, frt, pag, r, c, p, i, w):
        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):
        self.df.focusField("T", 0, 1)

    def extractCost(self):
        qbal = 0
        vbal = 0
        self.ucost = 0
        stt_rslt = self.sql.getRec("strtrn",
            cols=["round(sum(stt_qty),2)", "round(sum(stt_cost),2)"],
            where=[("stt_cono", "=", self.opts["conum"]), ("stt_group", "=",
            self.group), ("stt_code", "=", self.code), ("stt_loc", "=",
            self.loc1)])
        if stt_rslt:
            qbal = CCD(stt_rslt[0][0], "SD", 13.2).work
            vbal = CCD(stt_rslt[0][1], "SD", 13.2).work
        if qbal:
            self.ucost = round((vbal / qbal), 2)

    def updateTables(self):
        # Stores Ledger Transaction
        qty = float(ASD(0) - ASD(self.qty))
        val = float(ASD(0) - ASD(self.amt))
        if qty >= 0:
            rtn = 3
        else:
            rtn = 4
        self.sql.insRec("strtrn", data=[self.opts["conum"], self.group,
            self.code, self.loc1, self.dte, rtn, self.trf, self.batno, "",
            qty, val, 0, self.curdt, self.trndet, 0, "", "", "STR", 0, "N",
            self.opts["capnm"], self.sysdtw, 0])
        # Stores Ledger Transaction
        if self.qty >= 0:
            rtn = 3
        else:
            rtn = 4
        if self.newloc == "Y":
            self.acc[self.sql.strmf2_col.index("st2_loc")] = self.loc2
            self.sql.insRec("strmf2", data=self.acc)
        self.sql.insRec("strtrn", data=[self.opts["conum"], self.group,
            self.code, self.loc2, self.dte, rtn, self.trf, self.batno, "",
            self.qty, self.amt, 0, self.curdt, self.trndet, 0, "", "",
            "STR", 0, "", self.opts["capnm"], self.sysdtw, 0])