class sl2020(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.dataHeader() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["genmst", "gentrn", "wagmst", "waglmf", "wagltf"], prog=self.__class__.__name__) if self.sql.error: return self.col = self.sql.waglmf_col gc = GetCtl(self.opts["mf"]) wagctl = gc.getCtl("wagctl", self.opts["conum"]) if not wagctl: return self.glint = wagctl["ctw_glint"] if self.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.glctls = (ctlctl["wag_slc"], ctlctl["wag_sli"]) else: self.glctls = None self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "SLN", 5, glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return def dataHeader(self): wgm = { "stype": "R", "tables": ("wagmst", ), "cols": (("wgm_empno", "", 0, "EmpNo"), ("wgm_sname", "", 0, "Surname", "Y"), ("wgm_fname", "", 0, "Names")), "where": [("wgm_cono", "=", self.opts["conum"])] } lnm = { "stype": "R", "tables": ("waglmf", ), "cols": (("wlm_loan", "", 0, "Ln"), ("wlm_desc", "", 0, "Description", "Y")), "where": [("wlm_cono", "=", self.opts["conum"])], "whera": (("C", "wlm_empno", 0), ), "index": 0 } typ = { "stype": "C", "titl": "Transaction Types", "head": ("C", "Description"), "data": ((1, "Interest Adjustment"), (3, "Further Advance"), (4, "Loan Repayment"), (5, "Loan Adjustment")), "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), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "IUI", 5, "EmpNo", "Employee Number", "", "N", self.doEmp, wgm, None, None), (("C", 1, 0, 1), "ONA", 10, "Name"), (("C", 1, 0, 2), "IUI", 2, "Ln", "Loan Number", "", "N", self.doLoan, lnm, None, ("notzero", )), (("C", 1, 0, 3), "ONA", 10, "Descript", "Description", "", "N", None, None, None, None), (("C", 1, 0, 4), "ID1", 10, "Trans-Date", "Transaction Date", self.sysdtw, "N", self.doTrdate, None, None, None), (("C", 1, 0, 5), "IUI", 1, "T", "Transaction Type", "", "N", self.doTyp, typ, None, ("in", (1, 3, 4, 5))), (("C", 1, 0, 6), "INa", 9, "Reference", "Reference Number", "i", "N", self.doRef, None, None, ("notblank", )), (("C", 1, 0, 7), "IUD", 6.2, "Intr-%", "New Interest Rate", "", "N", self.doPer, None, None, None), (("C", 1, 0, 8), "ISD", 13.2, "Interest", "Interest (Adds to interest raised)", "", "Y", self.doInt, None, None, ("notzero", )), (("C", 1, 0, 9), "ISD", 13.2, "Amount", "Amount (Adds to advances or payments)", "", "Y", self.doPay, None, None, ("notzero", )), (("C", 1, 0, 10), "IUD", 9.2, "Deduct", "Deduction Amount (New total deduction)", "", "Y", self.doDed, None, None, ("efld", ))] if self.glint == "Y": fld.extend([[("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"], (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 1), "ONA", 30, "Description"), (("C", 2, 0, 2), "ISD", 13.2, "All-Amt", "Allocation Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 3), "INA", 30, "Details", "", "", "N", self.doAllDet, None, None, ("notblank", ))]) but = [("Interrogate", None, self.querySln, 0, ("C", 1, 1), ("C", 1, 2))] tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.glint == "Y": but.append( ("Cancel", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1))) tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doEmp(self, frt, pag, r, c, p, i, w): self.empno = w acc = self.sql.getRec("wagmst", cols=["wgm_sname"], where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", self.empno)], limit=1) if not acc: return "Invalid Employee Number" self.name = acc[0] self.df.loadEntry("C", pag, p + 1, data=self.name) chk = self.sql.getRec("waglmf", where=[("wlm_cono", "=", self.opts["conum"]), ("wlm_empno", "=", self.empno)]) if len(chk) == 1: self.acc = chk[0] self.loan = self.acc[self.col.index("wlm_loan")] desc = self.acc[self.col.index("wlm_desc")] self.df.loadEntry("C", pag, p + 2, data=self.loan) self.df.loadEntry("C", pag, p + 3, data=desc) return "sk3" def doLoan(self, frt, pag, r, c, p, i, w): self.loan = w self.acc = self.sql.getRec("waglmf", where=[("wlm_cono", "=", self.opts["conum"]), ("wlm_empno", "=", self.empno), ("wlm_loan", "=", self.loan)], limit=1) if not self.acc: return "Invalid Loan Number" desc = self.acc[self.col.index("wlm_desc")] self.df.loadEntry("C", pag, p + 1, data=desc) def doTrdate(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trdate = w def doTyp(self, frt, pag, r, c, p, i, w): self.typ = w def doRef(self, frt, pag, r, c, p, i, w): self.ref = w per = self.acc[self.col.index("wlm_rate")] self.df.loadEntry("C", pag, p + 1, data=per) def doPer(self, frt, pag, r, c, p, i, w): self.per = w if self.typ in (3, 4, 5): self.intp = 0 return "sk1" def doInt(self, frt, pag, r, c, p, i, w): self.intp = w self.pay = 0 self.ded = 0 return "sk2" def doPay(self, frt, pag, r, c, p, i, w): self.pay = w amt = self.acc[self.col.index("wlm_repay")] self.df.loadEntry("C", pag, p + 1, data=amt) def doDed(self, frt, pag, r, c, p, i, w): self.ded = w def endPage1(self): self.batupd = False self.updateTables1() self.updateBatch() if not self.val: self.df.advanceLine(1) elif self.typ == 1 or self.glint == "N": self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.allocated = float(0.0) self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.val) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trdate / 100) else: self.curdt = self.bh.curdt if self.typ == 1: self.glt = 4 desc = "Interest Adj" self.val = self.intp ded = self.acc[self.col.index("wlm_repay")] cap = 0.00 elif self.typ == 3: self.glt = 2 desc = "Advance" self.val = self.pay ded = self.ded cap = self.val elif self.typ == 4: self.glt = 6 desc = "Repayment" self.val = float(ASD(0) - ASD(self.pay)) ded = self.ded cap = 0.00 elif self.typ == 5: self.glt = 4 desc = "Adjustment" self.val = self.pay ded = self.ded cap = 0.00 self.sql.updRec("waglmf", cols=["wlm_rate", "wlm_repay"], data=[self.per, ded], where=[("wlm_cono", "=", self.opts["conum"]), ("wlm_empno", "=", self.empno), ("wlm_loan", "=", self.loan)]) self.sql.insRec("wagltf", data=[ self.opts["conum"], self.empno, self.loan, self.bh.batno, self.typ, self.trdate, self.ref, self.val, cap, ded, self.per, self.curdt, desc, "N", self.opts["capnm"], self.sysdtw, 0 ]) if self.glint == "N": return # General Ledger Staff Loans Control Account data = (self.opts["conum"], self.glctls[0], self.curdt, self.trdate, self.glt, self.ref, self.bh.batno, self.val, 0.00, self.name, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) self.val = float(ASD(0) - ASD(self.val)) if self.typ == 1: # General Ledger Interest Received data = (self.opts["conum"], self.glctls[1], self.curdt, self.trdate, self.glt, self.ref, self.bh.batno, self.val, 0.00, "Staff Loan - %s" % self.name, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w) if type(chk) is str: return chk self.genacc = w self.df.loadEntry("C", pag, p + 1, data=chk[0]) def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.val) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): ok = askQuestion(self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Transaction") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.allocated == self.val: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.val) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): # General Ledger Transaction (Source) data = (self.opts["conum"], self.genacc, self.curdt, self.trdate, self.glt, self.ref, self.bh.batno, self.allamt, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.val)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.val)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def querySln(self): callModule(self.opts["mf"], self.df, "sl4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"])
class cr4010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() if "wait" in self.opts: self.df.mstFrame.wait_window() else: self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["crsmst", "crstrn", "strpom"], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) crsctl = gc.getCtl("crsctl", self.opts["conum"]) if not crsctl: return self.fromad = crsctl["ctc_emadd"] t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.curdt = int(self.sysdtw / 100) self.paidup = "N" return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Creditors Interrogation (%s)" % self.__class__.__name__) crm = { "stype": "R", "tables": ("crsmst",), "cols": ( ("crm_acno", "", 0, "Acc-Num"), ("crm_name", "", 0, "Name", "Y")), "where": [("crm_cono", "=", self.opts["conum"])]} tag = ( ("Basic-_A", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Basic-_B", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Balances", self.doTagSelect, ("T",0,2), ("T",0,1)), ("History", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Trans", self.doTrans1, ("T",0,2), ("T",0,1)), ("Orders", self.doOrders, ("T",0,2), ("T",0,1))) r1s = (("No","N"),("Yes","Y")) fld = ( (("T",0,0,0),"INA",7,"Acc-Num","Account Number", "","N",self.doAccNum,crm,None,None), (("T",0,0,0),"ONA",30,"Name"), (("T",1,0,0),"ONA",30,"Address Line 1"), (("T",1,1,0),"ONA",30,"Address Line 2"), (("T",1,2,0),"ONA",30,"Address Line 3"), (("T",1,3,0),"ONA",4,"Postal Code"), (("T",1,4,0),"ONA",20,"Telephone"), (("T",1,5,0),"ONA",20,"Fax"), (("T",1,6,0),"ONA",30,"Manager"), (("T",1,6,0),"OTX",30,"E-Mail"), (("T",1,7,0),"ONA",30,"Accounts"), (("T",1,7,0),"OTX",30,"E-Mail"), (("T",1,8,0),"ONA",30,"Orders"), (("T",1,8,0),"OTX",30,"E-Mail"), (("T",1,9,0),"Od1",10,"Date Opened"), (("T",1,10,0),"ONA",10,"V.A.T. Number"), (("T",2,0,0),"OUA",1,"Terms Base"), (("T",2,1,0),"OUI",2,"Statement Day"), (("T",2,2,0),"OUI",3,"Terms"), (("T",2,3,0),"OUI",5,"Credit Limit"), (("T",2,4,0),"OUD",5.2,"Trade Discount"), (("T",2,5,0),"OUD",5.2,"Settlement Discount"), (("T",2,6,0),"OUA",1,"Payment Indicator"), (("T",2,7,0),"OUA",20,"Bank Name"), (("T",2,8,0),"OUI",8,"Bank Branch"), (("T",2,9,0),"OUA",16,"Bank Account"), (("T",2,10,0),"OUI",7,"G/L Account"), (("T",2,11,0),"OUA",1,"Status"), (("T",3,0,0),"Od1",10,"Date Last Purchased"), (("T",3,1,0),"Od1",10,"Date Last Paid"), (("T",3,2,0),"OSD",13.2,"Total Balance"), (("T",3,3,0),"OSD",13.2,"Current"), (("T",3,4,0),"OSD",13.2,"30 Days"), (("T",3,5,0),"OSD",13.2,"60 Days"), (("T",3,6,0),"OSD",13.2,"90 Days"), (("T",3,7,0),"OSD",13.2,"120 Days"), (("C",4,0,0),"OSD",13.2,"Purchases","","","N", None,None,None,None,("Months",13)), (("C",4,0,1),"OSD",13.2,"Payments"), (("T",5,0,0),("IRB",r1s),0,"History", "", "N","N",self.doTrans2,None,None,None)) but = ( ("Clear",None,self.doClear,0,("T",0,0),("T",0,1)), ("Notes",None,self.doNotes,0,("T",0,0),("T",0,1)), ("Print",None,self.doPrint,0,("T",0,0),("T",0,1)), ("Quit",None,self.doExit,1,None,None)) tnd = ((self.doEndTop, "N"), None, None, None, None, None) txt = (self.doExit, None, None, None, None, self.doExit) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) yer = int(self.sysdtw / 10000) mon = int((self.sysdtw % 10000) / 100) self.hist_tit = [] for x in range(1, 14): if x == 13: txt = "Last 12 Month Total" self.df.colLabel[4][x-1].configure(text=txt) self.hist_tit.append(txt) else: nam = mthnam[mon][1] nam = nam + (" " * (15-len(nam))) + str(yer) self.df.colLabel[4][x-1].configure(text=nam) self.hist_tit.append(nam) if x != 13: mon = mon - 1 if mon == 0: mon = mon + 12 yer = yer - 1 def doAccNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("crsmst", where=[("crm_cono", "=", self.opts["conum"]), ("crm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.acno = w self.name = acc[self.sql.crsmst_col.index("crm_name")] self.df.loadEntry("T",0, 1, data=self.name) seq = 3 for x in range(0, self.df.topq[1]): self.df.loadEntry("T", 1, x, data=acc[seq]) seq += 1 for x in range(0, self.df.topq[2]): self.df.loadEntry("T", 2, x, data=acc[seq]) seq += 1 self.loadBalances() self.opts["mf"].updateStatus("") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadBalances(self): bals = Balances(self.opts["mf"], "CRS", self.opts["conum"], int(self.sysdtw / 100), (self.acno,)) obal, tbal, ages = bals.doAllBals() this, hist = bals.doCrsDrsHist() self.purch = hist[0] self.pays = hist[1] last = self.sql.getRec("crstrn", cols=["max(crt_trdt)"], where=[("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.acno), ("crt_type", "=", 1)], limit=1) if not last or not last[0]: lastpurd = 0 else: lastpurd = last[0] last = self.sql.getRec("crstrn", cols=["max(crt_trdt)"], where=[("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.acno), ("crt_type", "=", 5)], limit=1) if not last or not last[0]: lastpayd = 0 else: lastpayd = last[0] for x in range(0, 8): if x == 0: data = lastpurd elif x == 1: data = lastpayd elif x == 2: data = tbal else: data = ages[x-3] self.df.loadEntry("T", 3, x, data=data) p = 0 for x in range(0, 13): i = 0 self.df.loadEntry("C", 4, p, data=self.purch[x]) p = p + 1 i = i + 1 pay = float(ASD(0) - ASD(self.pays[x])) self.df.loadEntry("C", 4, p, data=pay) p = p + 1 i = i + 1 def doTagSelect(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 5, 1) def doTrans2(self, frt, pag, r, c, p, i, w): self.paidup = w whr = [ ("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.acno)] if self.paidup == "Y": col, recs = getTrn(self.opts["mf"].dbm, "crs", whr=whr) else: col, recs = getTrn(self.opts["mf"].dbm, "crs", dte=self.curdt, whr=whr) if recs: data = [] for dat in recs: data.append([ dat[col.index("crt_trdt")], dat[col.index("crt_curdt")], dat[col.index("crt_batch")], dat[col.index("crt_type")], dat[col.index("crt_ref1")], dat[col.index("crt_tramt")], dat[col.index("paid")], dat[col.index("balance")], dat[col.index("crt_desc")]]) tit = "Transactions for Account: %s - %s" % (self.acno, self.name) col = ( ("crt_trdt", "Date", 10, "D1", "N"), ("crt_curdt", "Curr-Dt", 7, "D2", "N"), ("crt_batch", "Batch", 7, "Na", "N"), ("crt_type", "Typ", 3, ("XX", crtrtp), "N"), ("crt_ref1", "Reference", 9, "Na", "Y"), ("crt_tramt", "Amount", 13.2, "SD", "N"), ("alloc", "Allocated", 13.2, "SD", "N"), ("balan", "Balance", 13.2, "SD", "N"), ("crt_desc", "Details", 30, "NA", "N")) state = self.df.disableButtonsTags() while True: rec = SelectChoice(self.df.nb.Page4, tit, col, data) # Display all transaction details if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") whr = [ ("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.acno), ("crt_type", "=", rec.selection[4]), ("crt_ref1", "=", rec.selection[5])] TabPrt(self.opts["mf"], tabs="crstrn", where=whr, pdia=False) self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) self.doTrans1() def doOrders(self): col = self.sql.strpom_col whr = [ ("pom_cono", "=", self.opts["conum"]), ("pom_acno", "=", self.acno), ("pom_delno", "<>", "cancel"), ("pom_deldt", "=", 0)] recs = self.sql.getRec("strpom", where=whr, order="pom_date") if recs: data = [] for dat in recs: data.append([ dat[col.index("pom_date")], dat[col.index("pom_ordno")], dat[col.index("pom_cusord")], dat[col.index("pom_jobnum")], dat[col.index("pom_contact")]]) tit = "Orders for Account: %s - %s" % (self.acno, self.name) col = ( ("pom_date", " Date", 10, "D1", "N"), ("pom_ordno", "Doc-Numbr", 9, "UI", "N"), ("pom_cusord", "Cust-Ord-Num", 15, "Na"), ("pom_jobnum", "Job-Num", 7, "Na"), ("pom_contact", "Contact", 30, "NA")) state = self.df.disableButtonsTags() while True: rec = SelectChoice(self.df.nb.Page6, tit, col, data) # Attempt to display the document if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") try: doc = int(rec.selection[2]) PrintOrder(self.opts["mf"], self.opts["conum"], self.opts["conam"], doc, repprt=["N", "V", "view"], copy="y") except: pass self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "CRS", self.acno) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Basic-A") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = ( ("Information", "I"), ("Transactions", "T"), ("Both", "B"), ("None", "N")) self.doPrintOption(askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") if opt in ("I", "B"): table = "crsmst" whr = [ ("crm_cono", "=", self.opts["conum"]), ("crm_acno", "=", self.acno)] rp = TabPrt(self.opts["mf"], self.opts["conum"], self.opts["conam"], name=self.__class__.__name__, tabs=table, where=whr, keys=[self.acno]) repprt = rp.repprt repeml = rp.repeml xits = rp.xits else: repprt = None repeml = None xits = False if opt in ("T", "B") and not xits: heads = ["Creditor's Transactions", "Account: %s Name: %s" % (self.acno, self.name)] whr = [ ("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.acno)] if self.paidup == "Y": col, recs = getTrn(self.opts["mf"].dbm, "crs", whr=whr) else: col, recs = getTrn(self.opts["mf"].dbm, "crs", dte=self.curdt, whr=whr) cols = [] data = [] dic = self.sql.crstrn_dic for num, rec in enumerate(recs): dat = [] for nam in ["crt_ref1", "crt_trdt", "crt_type", "crt_tramt", "paid", "balance", "crt_desc"]: if not num: if nam == "paid": cols.append(["paid", "SD", 13.2, "Paid"]) elif nam == "balance": cols.append(["balance", "SD", 13.2, "Balance"]) else: cols.append([nam, dic[nam][2], dic[nam][3], dic[nam][5]]) dat.append(rec[col.index(nam)]) data.append(dat) if repprt: prtdia = False else: prtdia = (("Y","V"),("Y","N")) rp = RepPrt(self.opts["mf"], conum=self.opts["conum"], conam=self.opts["conam"], name=self.__class__.__name__, ttype="D", tables=data, heads=heads, cols=cols, trtp=["crt_type", crtrtp], prtdia=prtdia, repprt=repprt, repeml=repeml, fromad=self.fromad) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class ml2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Check for Valid Posting Routine if self.opts["rtn"] not in (1, 2, 3, 4): showError(self.opts["mf"].body, "Control Error", "Invalid Routine %s, Only 1-4 Are Allowed" % \ str(self.opts["rtn"])) return tabs = ["ctlvmf", "ctlvrf", "ctlvtf", "memmst", "memtrn"] self.gc = GetCtl(self.opts["mf"]) memctl = self.gc.getCtl("memctl", self.opts["conum"]) if not memctl: return self.glint = memctl["mcm_glint"] if self.glint == "Y": ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = ["mem_ctl", "vat_ctl", "dis_all"] if self.gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.memctl = ctlctl["mem_ctl"] self.dis_all = ctlctl["dis_all"] tabs.extend(["gentrn", "genmst"]) # Create SQL Object self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__) if self.sql.error: return self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "MEM", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] if self.opts["rtn"] == 1: self.glt = 1 elif self.opts["rtn"] == 2: self.glt = 2 elif self.opts["rtn"] == 3: self.glt = 4 elif self.opts["rtn"] == 4: self.glt = 1 self.agevar = tk.BooleanVar() self.agevar.set(False) return True def drawDialog(self): mlm = { "stype": "R", "tables": ("memmst", ), "cols": (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"), ("mlm_gender", "", 0, "G"), ("mlm_state", "", 0, "S"), ("mlm_surname", "", 0, "Surname", "Y"), ("mlm_names", "", 0, "Names", "F")), "where": [("mlm_cono", "=", self.opts["conum"])], "order": "mlm_surname, mlm_names", "sort": False } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])] } vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "IUI", 6, "Mem-No", "Member Number", "r", "N", self.doMemAcc, mlm, None, ("notzero", )), [("C", 1, 0, 1), "ONA", 10, "Name"], (("C", 1, 0, 2), "INa", 9, "Reference", "Reference Number One", "i", "N", self.doRefno, None, None, ("notblank", )), (("C", 1, 0, 3), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 4), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, ("efld", ))] if self.opts["rtn"] == 2: fld[3][2] = 20 fld.extend([ (("C", 1, 0, 5), "ISD", 13.2, "Discount", "Discount Amount", "", "N", self.doDisAmt, None, None, None, None, "Discount Amount to be Added to the Transaction Amount."), (("C", 1, 0, 6), "OSD", 13.2, "Total-Amount"), (("C", 1, 0, 7), "INA", (20, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None) ]) elif self.glint == "Y": fld[3][2] = 24 fld.extend([ (("C", 1, 0, 5), "INA", 30, "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None), (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"), (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 1), "ONA", 19, "Description"), (("C", 2, 0, 2), "IUA", 1, "V", "V.A.T Code", self.taxdf, "N", self.doVatCode2, vtm, None, ("notblank", )), (("C", 2, 0, 3), "ISD", 13.2, "All-Amt", "Allocation Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 4), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N", self.doAllVat, None, None, None), (("C", 2, 0, 5), "INA", (26, 30), "Details", "", "", "N", self.doAllDet, None, None, ("notblank", )) ]) else: fld[3][2] = 22 fld.extend([ (("C", 1, 0, 6), "IUA", 1, "V", "V.A.T Code", self.taxdf, "N", self.doVatCode1, vtm, None, ("notblank", )), (("C", 1, 0, 7), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N", self.doVatAmt, None, None, None), (("C", 1, 0, 8), "INA", (20, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None) ]) but = ( ("Age _Normal",None,self.doAgeNormal,0,None,None, "Only Show Unallocated Transactions",1), ("Age _History",None,self.doAgeHistory,0,None,None, "Show All Transactions Including Already Allocated",1), ("Age _Automatic",None,self.doAgeAuto,0,None,None, "Automatically Allocate the Amount Starting With the "\ "Oldest Unallocated One",1), ("Age _Current",None,self.doAgeCurrent,0,None,None, "Leave the Transaction Unallocated",1), ("Cancel",None,self.doCancel,0,("C",2,1),("C",1,1),"",1)) tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.opts["rtn"] != 2 and self.glint == "Y": tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doMemAcc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("memmst", cols=["mlm_title", "mlm_initial", "mlm_surname"], where=[("mlm_cono", "=", self.opts["conum"]), ("mlm_memno", "=", w)], limit=1) if not acc: return "Invalid Member Number" self.memno = w self.name = "%s, %s %s" % (acc[2], acc[0], acc[1]) self.df.loadEntry("C", pag, p + 1, data=self.name) def doRefno(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("memtrn", cols=["mlt_batch"], where=[("mlt_cono", "=", self.opts["conum"]), ("mlt_memno", "=", self.memno), ("mlt_type", "=", self.opts["rtn"]), ("mlt_refno", "=", w)], limit=1) if acc: return "Transaction Already Exists" self.refno = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if w > mthendDate(self.bh.curdt * 100): return "Invalid Date, After Batch Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if self.glint == "Y" or self.opts["rtn"] == 2: self.vatcode = "N" self.vatamt = 0 def doVatCode1(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" self.vatcode = w self.vatamt = round((self.trnamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, self.vatamt) if not self.vatamt: return "sk1" def doVatAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.vatamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.vatamt = float(ASD(0) - ASD(w)) else: self.vatamt = w self.df.loadEntry(frt, pag, p, data=self.vatamt) def doDisAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.disamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.disamt = float(ASD(0) - ASD(w)) else: self.disamt = w self.df.loadEntry(frt, pag, p, data=self.disamt) totamt = float(ASD(self.trnamt) + ASD(self.disamt)) self.df.loadEntry(frt, pag, p + 1, data=totamt) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.opts["rtn"] != 2 and self.glint == "Y": self.df.colf[2][5][5] = w self.allocated = float(0.00) def endPage1(self): self.cancel = False self.agecan = False self.batupd = False self.updateTables1() if self.cancel: return else: self.updateBatch() if self.trnamt == 0: self.df.advanceLine(1) else: self.allocated = float(0.0) if self.opts["rtn"] == 2 or self.glint == "N": self.doMemTrn() self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt self.amt = self.trnamt self.vat = self.vatamt if self.opts["rtn"] == 1: # Invoices recon = 0 self.dis = 0.00 elif self.opts["rtn"] == 2: # Payment if self.trnamt == 0: recon = self.curdt else: recon = 0 self.vat = 0.00 self.dis = self.disamt elif self.opts["rtn"] == 3: # Journal recon = 0 self.dis = 0.00 elif self.opts["rtn"] == 4: # Credit Note recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.dis = 0.00 if self.opts["rtn"] == 1: self.ageloop = False self.doAgeCurrent() else: state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Choose an Ageing Option") for x in range(0, 4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "normal") self.df.setWidget(self.df.B0, "focus") self.agevar.set(True) self.df.mstFrame.wait_variable(self.agevar) self.df.enableButtonsTags(state=state) if self.agecan: self.doCancel() return if self.glint == "N": return # General Ledger Control Transaction (Members) val = float(ASD(self.amt) + ASD(self.dis)) data = (self.opts["conum"], self.memctl, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Bank) if self.opts["rtn"] == 2: val = float(ASD(0) - ASD(self.amt)) data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Discount) if self.dis: val = float(ASD(0) - ASD(self.dis)) data = (self.opts["conum"], self.dis_all, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def doAgeNormal(self): self.doAgeing("N") def doAgeHistory(self): self.doAgeing("H") def doAgeAuto(self): self.doAgeing("O") def doAgeCurrent(self): self.doAgeing("C") def doAgeing(self, atype): # Disable All Ageing Buttons for x in range(0, 4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "disabled") self.opts["mf"].updateStatus("Select Transaction to Allocate Against") age = AgeAll(self.opts["mf"], system="mem", agetyp=atype, agekey=[ self.opts["conum"], self.memno, self.opts["rtn"], self.refno, self.curdt, self.amt, self.dis ]) self.agecan = age.cancel if self.agevar.get(): self.agevar.set(False) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w) if type(chk) is str: return chk if not chk[2]: self.taxgl = self.taxdf else: self.taxgl = chk[2] self.genacc = w self.df.loadEntry("C", pag, p + 1, data=chk[0]) self.df.loadEntry("C", pag, p + 2, data=self.taxgl) def doVatCode2(self, frt, pag, r, c, p, i, w): ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"], error=False) if not ctlctl: return "Missing ctlctl Record for Company" if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]): return "Missing or Invalid Control Record" self.convat = ctlctl["vat_ctl"] self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if self.vatrte is None: return "Invalid V.A.T Code" self.vatcode = w def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: allamt = float(ASD(self.trnamt) - ASD(self.allocated)) self.allamt = round((allamt * 100 / (100 + self.vatrte)), 2) self.df.loadEntry(frt, pag, p, data=self.allamt) self.allvat = float(ASD(allamt) - ASD(self.allamt)) else: self.allamt = w self.allvat = round((self.allamt * self.vatrte / 100), 2) self.df.loadEntry(frt, pag, p + 1, data=self.allvat) if not self.allvat: self.df.loadEntry(frt, pag, p + 2, data=self.name) return "sk1" def doAllVat(self, frt, pag, r, c, p, i, w): if self.allamt < 0 and w > 0: self.allvat = float(ASD(0) - ASD(w)) elif self.allamt > 0 and w < 0: self.allvat = float(ASD(0) - ASD(w)) else: self.allvat = w self.df.loadEntry(frt, pag, p, data=self.allvat) self.df.loadEntry(frt, pag, p + 1, data=self.name) def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): if self.agecan: ok = "yes" else: ok = askQuestion( self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.cancel = True self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) if self.glint == "Y": self.df.clearFrame("C", 2) row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.selPage("Transaction") self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + \ ASD(self.allamt) + ASD(self.allvat)) if self.allocated == self.trnamt: self.doMemTrn() self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.opts["rtn"] == 1: # Invoices self.credit() elif self.opts["rtn"] == 3: # Journal Entry self.credit() elif self.opts["rtn"] == 4: # Credit Notes self.debit() def debit(self): amt = self.allamt vat = self.allvat self.restDebitCredit(amt, vat) def credit(self): amt = float(ASD(0) - ASD(self.allamt)) vat = float(ASD(0) - ASD(self.allvat)) self.restDebitCredit(amt, vat) def restDebitCredit(self, amt, vat): # VAT Transaction (ctlvtf) data = (self.opts["conum"], self.vatcode, "O", self.curdt, "M", self.glt, self.bh.batno, self.refno, self.trndat, self.memno, self.alldet, amt, vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "N": return # General Ledger Transaction (Expense) data = (self.opts["conum"], self.genacc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, amt, vat, self.alldet, self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if vat: # General Ledger Control Transaction (V.A.T.) data = (self.opts["conum"], self.convat, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, vat, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) vat = float(ASD(0) - ASD(vat)) self.vat += vat def exitPage2(self): self.df.focusField("C", 2, self.df.col) def doMemTrn(self): # Members Ledger Transaction data = [ self.opts["conum"], self.memno, self.opts["rtn"], self.refno, self.bh.batno, self.trndat, self.amt, self.vat, self.curdt, "", 0, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("memtrn", data=data) if self.dis: data = [ self.opts["conum"], self.memno, 6, self.refno, self.bh.batno, self.trndat, self.dis, self.vat, self.curdt, "", 0, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("memtrn", data=data, unique="mlt_refno") def updateBatch(self, rev=False): if rev: self.bh.batqty -= 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty += 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval)
class rt2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): tabs = [ "ctlmst", "ctlvmf", "ctlvrf", "ctlvtf", "genint", "genmst", "gentrn", "rtlprm", "rtlmst", "rtlcon", "rtltrn" ] self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__) if self.sql.error: return if self.opts["rtn"] not in (2, 3, 4): mes = "Invalid Routine %s" % str(self.opts["rtn"]) showError(self.opts["mf"].body, "Control Error", mes) return self.gc = GetCtl(self.opts["mf"]) rtlctl = self.gc.getCtl("rtlctl", self.opts["conum"]) if not rtlctl: return self.glint = rtlctl["ctr_glint"] if self.glint == "Y": # Check All Premises Control Records errs = ("Premises %s Has An Invalid", "Rental Control Account (%s)", "Rental Income Account (%s)") ass = self.sql.getRec( "rtlprm", cols=["rtp_code", "rtp_rtlacc", "rtp_incacc"], where=[("rtp_cono", "=", self.opts["conum"])]) for acc in ass: for x in range(1, 3): chk = self.sql.getRec("genmst", where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", acc[x])], limit=1) if not chk: mess = "%s %s" % (errs[0] % acc[0], errs[x] % acc[x]) showError(self.opts["mf"].body, "Control Error", mess) return # Check for VAT Control ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]): return self.convat = ctlctl["vat_ctl"] t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "RTL", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return if self.opts["rtn"] == 2: self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) return True def drawDialog(self): prm = { "stype": "R", "tables": ("rtlprm", ), "cols": (("rtp_code", "", 0, "Prm-Cod"), ("rtp_desc", "", 0, "Description", "Y")), "where": [("rtp_cono", "=", self.opts["conum"])] } mst = { "stype": "R", "tables": ("rtlmst", ), "cols": (("rtm_acno", "", 0, "Acc-Num"), ("rtm_name", "", 0, "Name", "Y")), "where": [("rtm_cono", "=", self.opts["conum"])], "whera": [["C", "rtm_code", 0, 1]] } con = { "stype": "R", "tables": ("rtlcon", ), "cols": (("rtc_cnum", "", 0, "Acc-Num"), ("rtc_payind", "", 0, "F"), ("rtc_start", "", 0, "Start-Date"), ("rtc_period", "", 0, "Per")), "where": [("rtc_cono", "=", self.opts["conum"])], "whera": [["C", "rtc_code", 0, 1], ["C", "rtc_acno", 1, 1]] } vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])] } fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "INA", 7, "Prm-Cod", "Premises Code", "r", "N", self.doPrmCod, prm, None, None), (("C", 1, 0, 1), "INA", 7, "Acc-Num", "Account Number", "r", "N", self.doAccNum, mst, None, None), (("C", 1, 0, 2), "IUI", 3, "Seq", "Contract Sequence", "", "N", self.doConSeq, con, None, None), (("C", 1, 0, 3), "INa", 9, "Reference", "Reference Number", "i", "N", self.doTrnRef, None, None, ("notblank", )), (("C", 1, 0, 4), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 5), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, None), (("C", 1, 0, 6), "IUA", 1, "V", "V.A.T Code", "", "N", self.doVatCod, vtm, None, ("notblank", )), (("C", 1, 0, 7), "ISD", 11.2, "V.A.T", "V.A.T Amount", "", "N", self.doVatAmt, None, None, None), [("C", 1, 0, 8), "INA", 30, "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None]] if self.opts["rtn"] not in (2, 3) and self.glint == "Y": fld[10][2] = (22, 30) fld.extend([[("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"], (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 1), "ONA", 30, "Description"), (("C", 2, 0, 2), "ISD", 13.2, "All-Amt", "Allocation Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 3), "INA", 30, "Details", "", "", "N", self.doAllDet, None, None, ("notblank", ))]) but = (("Interrogate", None, self.queryRtl, 0, ("C", 1, 1), ("C", 1, 2)), ("Cancel", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1))) tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.opts["rtn"] not in (2, 3) and self.glint == "Y": tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doPrmCod(self, frt, pag, r, c, p, i, w): whr = [("rtp_cono", "=", self.opts["conum"]), ("rtp_code", "=", w)] acc = self.sql.getRec("rtlprm", where=whr, limit=1) if not acc: return "Invalid Premises Code" self.code = w self.rtlacc = acc[self.sql.rtlprm_col.index("rtp_rtlacc")] def doAccNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rtlmst", cols=["rtm_name", "rtm_vatind"], where=[("rtm_cono", "=", self.opts["conum"]), ("rtm_code", "=", self.code), ("rtm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.acno = w con = self.sql.getRec("rtlcon", where=[("rtc_cono", "=", self.opts["conum"]), ("rtc_code", "=", self.code), ("rtc_acno", "=", self.acno)], order="rtc_cnum") if not con: return "No Valid Contracts" self.cnum = con[-1:][0][3] self.df.colf[1][2][5] = self.cnum if self.opts["rtn"] == 4: self.df.colf[1][6][5] = acc[1] else: self.df.colf[1][6][5] = "N" def doConSeq(self, frt, pag, r, c, p, i, w): con = self.sql.getRec("rtlcon", where=[("rtc_cono", "=", self.opts["conum"]), ("rtc_code", "=", self.code), ("rtc_acno", "=", self.acno), ("rtc_cnum", "=", w)], order="rtc_cnum") if not con: return "Invalid Contract Sequence" self.cnum = w def doTrnRef(self, frt, pag, r, c, p, i, w): self.trnref = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if self.opts["rtn"] in (2, 3): self.vatcode = "" self.trnvat = 0 return "sk2" def doVatCod(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" self.vatcode = w self.trnvat = round((self.trnamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, data=self.trnvat) if not self.trnvat: return "sk1" def doVatAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.trnvat = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.trnvat = float(ASD(0) - ASD(w)) else: self.trnvat = w self.df.loadEntry(frt, pag, p, data=self.trnvat) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.opts["rtn"] not in (2, 3) and self.glint == "Y": self.df.colf[2][3][5] = w def endPage1(self): self.batupd = False self.updateTables1() self.updateBatch() if self.trnamt == 0: self.df.advanceLine(1) else: self.allocated = float(0.0) if self.opts["rtn"] in (2, 3) or self.glint == "N": self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.trnamt = float(ASD(self.trnamt) - ASD(self.trnvat)) self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.selPage("Allocation") self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt self.amt = self.trnamt self.vat = self.trnvat if self.opts["rtn"] == 2: # Receipts if self.trnamt == 0: self.recon = self.curdt else: self.recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.vat = float(ASD(0) - ASD(self.vat)) self.glt = 6 elif self.opts["rtn"] == 3: # Payments if self.trnamt == 0: self.recon = self.curdt else: self.recon = 0 self.glt = 2 elif self.opts["rtn"] == 4: # Journal Entries self.recon = 0 self.glt = 4 # Rental Ledger Transaction data = [ self.opts["conum"], self.code, self.acno, self.cnum, self.opts["rtn"], self.trnref, self.bh.batno, self.trndat, self.amt, self.vat, self.curdt, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rtltrn", data=data) if self.vatcode: # VAT Transaction (ctlvtf) exc = float(ASD(0) - ASD(self.amt) + ASD(self.vat)) vat = float(ASD(0) - ASD(self.vat)) data = (self.opts["conum"], self.vatcode, "O", self.curdt, "R", self.opts["rtn"], self.bh.batno, self.trnref, self.trndat, self.code, self.trndet, exc, vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "N": return # General Ledger Rental Account data = (self.opts["conum"], self.rtlacc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.amt, self.vat, self.trndet, self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) self.trnamt = float(ASD(0) - ASD(self.amt)) self.trnvat = float(ASD(0) - ASD(self.vat)) if self.vatcode and self.trnvat: # General Ledger Control Transaction (V.A.T.) data = (self.opts["conum"], self.convat, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.trnvat, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if self.opts["rtn"] in (2, 3): # General Ledger Control Transaction (Bank) data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.trnamt, 0.00, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w) if type(chk) is str: return chk self.genacc = w self.df.loadEntry("C", pag, p + 1, data=chk[0]) def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): ok = askQuestion(self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Transaction") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.allocated == self.trnamt: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt # General Ledger Transaction (Source) data = (self.opts["conum"], self.genacc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.allamt, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def queryRtl(self): callModule(self.opts["mf"], self.df, "rt4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"])
class ar2020(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): if self.opts["rtn"] not in (1, 2, 3): mes = "Invalid Routine %s" % str(self.opts["rtn"]) showError(self.opts["mf"].body, "Control Error", mes) return self.gc = GetCtl(self.opts["mf"]) assctl = self.gc.getCtl("assctl", self.opts["conum"]) if not assctl: return self.glint = assctl["cta_glint"] self.rordp = assctl["cta_rordp"] tabs = [ "assgrp", "assmst", "assdep", "asstrn", "ctlvmf", "ctlvrf", "ctlvtf", "genint", "genmst", "gentrn" ] self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__) if self.sql.error: return if self.glint == "Y": # Check Sale of Asset Record ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return if self.gc.chkRec(self.opts["conum"], ctlctl, "ass_sls"): return self.slsac = ctlctl["ass_sls"] # Check for VAT Control if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]): return self.convat = ctlctl["vat_ctl"] # Check All Group Control Records errs = ("Group %s Has An Invalid", "Asset Control Account (%s)", "Accumulated Depreciation Account (%s)", "Depreciation Expense Account (%s)") ass = self.sql.getRec( "assgrp", cols=["asg_group", "asg_assacc", "asg_depacc", "asg_expacc"], where=[("asg_cono", "=", self.opts["conum"])]) for acc in ass: for x in range(1, 4): chk = self.sql.getRec("genmst", where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", acc[x])], limit=1) if not chk: mess = "%s %s" % (errs[0] % acc[0], errs[x] % acc[x]) showError(self.opts["mf"].body, "Control Error", mess) return self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "ASS", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return if self.opts["rtn"] == 2: self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) def drawDialog(self): grp = { "stype": "R", "tables": ("assgrp", ), "cols": (("asg_group", "", 0, "Grp"), ("asg_desc", "", 0, "Description", "Y")), "where": [("asg_cono", "=", self.opts["conum"])] } cod = { "stype": "R", "tables": ("assmst", ), "cols": (("asm_code", "", 0, "Cod-Num"), ("asm_desc", "", 0, "Description", "Y")), "where": [("asm_cono", "=", self.opts["conum"])], "whera": [["C", "asm_group", 0, 1]] } vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])] } data = [] for x in range(1, (len(armvtp) + 1)): data.append([x, armvtp[x - 1][1]]) mov = { "stype": "C", "titl": "Valid Types", "head": ("C", "Description"), "data": data } fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "IUA", 3, "Grp", "Asset Group", "r", "N", self.doAssGrp, grp, None, None), (("C", 1, 0, 1), "INa", 7, "Cod-Num", "Asset Code", "r", "N", self.doAssCod, cod, None, ("notblank", )), (("C", 1, 0, 2), "ONA", 13, "Description"), (("C", 1, 0, 3), "INa", 9, "Reference", "Reference Number One", "i", "N", self.doTrnRef, None, None, ("notblank", )), (("C", 1, 0, 4), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 5), "IUI", 1, "M", "Movement Type", "r", "N", self.doTrnMov, mov, None, ("in", (1, 2, 3, 4, 5))), (("C", 1, 0, 6), "ISD", 13.2, "Company", "Company Amount", "", "N", self.doCoyAmt, None, None, None), (("C", 1, 0, 7), "ISD", 13.2, "Receiver", "Receiver Amount", "", "N", self.doRorAmt, None, None, None), (("C", 1, 0, 8), "IUA", 1, "V", "V.A.T Code", "C", "N", self.doVatCod, vtm, None, ("notblank", )), (("C", 1, 0, 9), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N", self.doVatAmt, None, None, None), (("C", 1, 0, 10), "INA", (13, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None)] if self.opts["rtn"] not in (1, 2) and self.glint == "Y": fld.extend([[("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"], (("C", 2, 0, 0), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 1), "ONA", 30, "Description"), (("C", 2, 0, 2), "ISD", 13.2, "All-Amt", "Allocation Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 3), "INA", 30, "Details", "", "", "N", self.doAllDet, None, None, ("notblank", ))]) but = (("Interrogate", None, self.queryAss, 0, ("C", 1, 1), ("C", 1, 2)), ("Cancel", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1))) tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.opts["rtn"] not in (1, 2) and self.glint == "Y": tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doAssGrp(self, frt, pag, r, c, p, i, w): whr = [("asg_cono", "=", self.opts["conum"]), ("asg_group", "=", w)] acc = self.sql.getRec("assgrp", where=whr, limit=1) if not acc: return "Invalid Asset Group" self.group = w self.depcod = acc[self.sql.assgrp_col.index("asg_depcod")] self.assacc = acc[self.sql.assgrp_col.index("asg_assacc")] self.depacc = acc[self.sql.assgrp_col.index("asg_depacc")] self.expacc = acc[self.sql.assgrp_col.index("asg_expacc")] def doAssCod(self, frt, pag, r, c, p, i, w): self.code = w self.buydt = 0 self.seldt = 0 col = ["asm_desc", "asm_depcod"] whr = [("asm_cono", "=", self.opts["conum"]), ("asm_group", "=", self.group), ("asm_code", "=", self.code)] acc = self.sql.getRec("assmst", cols=col, where=whr, limit=1) if not acc: ok = askQuestion(screen=self.opts["mf"].body, head="New Asset", mess="Asset does not exist, Create?") if ok == "no": return "Invalid Asset" self.doNewAsset() acc = self.sql.getRec("assmst", cols=col, where=whr, limit=1) if not acc: return "Asset Not Found" self.new = "y" else: self.new = "n" dep = self.sql.getRec("assdep", cols=["asd_rate1r"], where=[("asd_cono", "=", self.opts["conum"]), ("asd_code", "=", acc[1])], limit=1) self.rate1r = dep[0] col = ["ast_date"] whr = [("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code), ("ast_mtyp", "=", 1)] pur = self.sql.getRec("asstrn", cols=col, where=whr, limit=1) if pur: self.buydt = pur[0] whr = [("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code), ("ast_mtyp", "in", (3, 5))] sel = self.sql.getRec("asstrn", cols=col, where=whr, limit=1) if sel: self.seldt = sel[0] self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doTrnRef(self, frt, pag, r, c, p, i, w): self.trnref = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w if self.new == "y": self.trnmov = 1 self.df.loadEntry(frt, pag, p + 1, data=self.trnmov) return "sk1" def doTrnMov(self, frt, pag, r, c, p, i, w): if type(w) == list: w = w[0] + 1 # Do some tests to see if not new again or already sold etc. if w == 4 and self.opts["rtn"] != 3: return "Depreciation Only Allowed with Journal Entries" if self.opts["rtn"] == 1 and w not in (1, 2): return "Invalid Choice For Payment" if self.opts["rtn"] == 2 and w not in (5, ): return "Invalid Choice For Receipt" if w == 1 and self.buydt: return "Asset Already Purchased" if w in (2, 3, 4, 5) and self.seldt: return "Asset Already Sold or Written Off" if w in (2, 3, 4, 5) and not self.buydt: return "Asset Not Yet Purchased" self.df.loadEntry(frt, pag, p, data=w) self.trnmov = w if self.trnmov == 3: bal = self.sql.getRec("asstrn", cols=["sum(ast_amt1)", "sum(ast_amt2)"], where=[("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code)], limit=1) self.coyamt = float(ASD(0) - ASD(bal[0])) self.df.loadEntry(frt, pag, p + 1, data=self.coyamt) self.roramt = float(ASD(0) - ASD(bal[0])) self.df.loadEntry(frt, pag, p + 2, data=self.roramt) self.vatcode = "" self.trnvat = 0 return "sk4" def doCoyAmt(self, frt, pag, r, c, p, i, w): if self.opts["rtn"] == 3 and self.trnmov == 5 and w > 0: ok = askQuestion(screen=self.opts["mf"].body, head="Debit", mess="Should this Amount not be a Credit Entry?") if ok == "yes": w = float(ASD(0) - ASD(w)) self.df.loadEntry(frt, pag, p, data=w) self.coyamt = w if self.rordp == "N" or not self.rate1r or self.trnmov != 4: self.roramt = 0 self.df.loadEntry(frt, pag, p + 1, data=self.roramt) if self.trnmov == 4: self.vatcode = "" self.trnvat = 0 self.df.loadEntry(frt, pag, p + 2, data=self.vatcode) self.df.loadEntry(frt, pag, p + 3, data=self.trnvat) return "sk3" return "sk1" def doRorAmt(self, frt, pag, r, c, p, i, w): if self.opts["rtn"] == 3 and self.trnmov == 5 and w > 0: ok = askQuestion(screen=self.opts["mf"].body, head="Debit", mess="Should this Amount not be a Credit Entry?") if ok == "yes": w = float(ASD(0) - ASD(w)) self.df.loadEntry(frt, pag, p, data=w) self.roramt = w self.vatcode = "" self.trnvat = 0 self.df.loadEntry(frt, pag, p + 1, data=self.vatcode) self.df.loadEntry(frt, pag, p + 2, data=self.trnvat) return "sk2" def doVatCod(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" self.vatcode = w self.trnvat = round((self.coyamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, data=self.trnvat) if not self.trnvat: return "sk1" def doVatAmt(self, frt, pag, r, c, p, i, w): if self.coyamt < 0 and w > 0: self.trnvat = float(ASD(0) - ASD(w)) elif self.coyamt > 0 and w < 0: self.trnvat = float(ASD(0) - ASD(w)) else: self.trnvat = w self.df.loadEntry(frt, pag, p, data=self.trnvat) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.opts["rtn"] not in (1, 2) and self.glint == "Y": self.df.colf[2][3][5] = w def endPage1(self): self.batupd = False self.updateTables1() self.updateBatch() if self.coyamt == 0: self.df.advanceLine(1) else: self.allocated = float(0.0) if self.glint == "N" or self.opts["rtn"] in (1, 2) or \ self.trnmov == 4: self.opts["mf"].dbm.commitDbase() self.df.advanceLine(1) else: self.coyamt = float(ASD(0) - ASD(self.coyamt)) self.df.loadEntry("T", 2, 0, data=self.coyamt) self.df.selPage("Allocation") self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt self.amt = self.coyamt self.vat = self.trnvat if self.trnmov == 4: self.net = float(ASD(0) - ASD(self.coyamt)) self.ror = float(ASD(0) - ASD(self.roramt)) else: self.net = self.ror = float(ASD(self.coyamt) - ASD(self.trnvat)) if self.opts["rtn"] == 1: # Payments if self.coyamt == 0: self.recon = self.curdt else: self.recon = 0 acc = self.assacc self.glt = 2 elif self.opts["rtn"] == 2: # Receipts if self.coyamt == 0: self.recon = self.curdt else: self.recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.vat = float(ASD(0) - ASD(self.vat)) self.net = float(ASD(0) - ASD(self.net)) acc = self.assacc self.glt = 6 elif self.opts["rtn"] == 3: # Journal Entries self.recon = 0 if self.trnmov == 4: acc = self.depacc else: acc = self.assacc self.glt = 4 # Asset Register Transaction data = [ self.opts["conum"], self.group, self.code, self.opts["rtn"], self.trnref, self.bh.batno, self.trndat, self.trnmov, self.net, self.ror, self.vat, self.curdt, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("asstrn", data=data) if self.vatcode: # VAT Transaction (ctlvtf) data = (self.opts["conum"], self.vatcode, "I", self.curdt, "A", self.opts["rtn"], self.bh.batno, self.trnref, self.trndat, self.code, self.trndet, self.amt, self.vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "N": return # General Ledger Asset or Depreciation Account data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.net, self.vat, self.trndet, self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if self.vat: # General Ledger Control Transaction (V.A.T.) data = [ self.opts["conum"], self.convat, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.vat, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) self.amt = float(ASD(0) - ASD(self.amt)) if self.opts["rtn"] in (1, 2): # General Ledger Control Transaction (Bank) data = [ self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.amt, 0.00, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) elif self.trnmov == 4: # General Ledger Expense Account (Depreciation) data = [ self.opts["conum"], self.expacc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.coyamt, self.vat, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) if self.trnmov == 5: # Sale of Asset # Raise Depreciation callModule(self.opts["mf"], None, "ar2030", coy=(self.opts["conum"], self.opts["conam"]), period=self.opts["period"], user=self.opts["capnm"], args=(self.curdt, self.group, self.code)) # Generate Sale amt = self.sql.getRec("asstrn", cols=["sum(ast_amt1)"], where=[("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code)], limit=1) if amt[0]: data = [ self.opts["conum"], self.slsac, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, amt[0], 0, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) data[1] = acc data[7] = float(ASD(0) - ASD(amt[0])) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.opts["conum"], w) if type(chk) is str: return chk self.genacc = w self.df.loadEntry("C", pag, p + 1, data=chk[0]) def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.coyamt) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): ok = askQuestion(self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Transaction") row = int(int((self.df.last[1][1] - 1) / self.df.colq[1])) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.allocated == self.coyamt: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.coyamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt # General Ledger Transaction (Allocation) amt = float(ASD(0) - ASD(self.allamt)) data = (self.opts["conum"], self.genacc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, amt, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def updateBatch(self, rev=False): if rev: self.bh.batqty -= 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.coyamt)) else: self.batupd = True self.bh.batqty += 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.coyamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def doNewAsset(self): tit = ("Create New Asset", ) dep = { "stype": "R", "tables": ("assdep", ), "cols": (("asd_code", "", 0, "Cod"), ("asd_desc", "", 0, "Description", "Y")), "where": [("asd_cono", "=", self.opts["conum"])] } self.fld = ((("T", 0, 0, 0), "INA", 30, "Description", "", "", "N", None, None, None, ("notblank", )), (("T", 0, 1, 0), "INa", 3, "Dep Code", "Depreciation Code", self.depcod, "N", self.doDepCode, dep, None, ("notblank", )), (("T", 0, 1, 0), "ONA", 34, "")) tnd = ((self.doNewEnd, "N"), ) txt = (self.doNewXit, ) state = self.df.disableButtonsTags() self.na = TartanDialog(self.opts["mf"], tops=True, title=tit, eflds=self.fld, tend=tnd, txit=txt) self.na.mstFrame.wait_window() self.df.enableButtonsTags(state=state) def doDepCode(self, frt, pag, r, c, p, i, w): chk = self.sql.getRec("assdep", cols=["asd_desc"], where=[("asd_cono", "=", self.opts["conum"]), ("asd_code", "=", w)], limit=1) if not chk: return "Invalid Depreciation Code" self.na.loadEntry(frt, pag, p + 1, data=chk[0]) def doNewEnd(self): dat = [self.opts["conum"], self.group, self.code] for x in range(len(self.na.t_work[0][0]) - 1): dat.append(self.na.t_work[0][0][x]) self.sql.insRec("assmst", data=dat) self.doNewXit() def doNewXit(self): self.na.closeProcess() def queryAss(self): callModule(self.opts["mf"], self.df, "ar4010", coy=(self.opts["conum"], self.opts["conam"]), period=self.opts["period"], user=self.opts["capnm"])
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")
class rt4010(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, ["rtlprm", "rtlmst", "rtlcon", "rtltrn"], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) rtlctl = gc.getCtl("rtlctl", self.opts["conum"]) if not rtlctl: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Rental Ledger Interrogation (%s)" % self.__class__.__name__) 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), ) } seq = { "stype": "R", "tables": ("rtlcon", ), "cols": (("rtc_cnum", "", 0, "Acc-Num"), ("rtc_payind", "", 0, "F"), ("rtc_start", "", 0, "Start-Date"), ("rtc_period", "", 0, "Per")), "where": [("rtc_cono", "=", self.opts["conum"])], "whera": [["T", "rtc_code", 0, 0], ["T", "rtc_acno", 1, 0]] } tag = (("Premises", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Tenant", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Balances", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Transactions", self.doTrans1, ("T", 0, 0), ("T", 0, 1))) fld = ((("T", 0, 0, 0), "INA", 7, "Premises", "Premises Code", "", "Y", self.doPremises, prm, None, ("notblank", )), (("T", 0, 0, 0), "INA", 7, "Account", "Account Code", "", "N", self.doAccount, acc, None, ("notblank", )), (("T", 0, 0, 0), "ONA", 30, "Name"), (("T", 1, 0, 0), "ONA", 30, "Description"), (("T", 1, 1, 0), "ONA", 30, "Address-1"), (("T", 1, 2, 0), "ONA", 30, "Address-2"), (("T", 1, 3, 0), "ONA", 30, "Address-3"), (("T", 1, 4, 0), "ONA", 4, "Postal Code"), (("T", 2, 0, 0), "ONA", 30, "Address-1"), (("T", 2, 1, 0), "ONA", 30, "Address-2"), (("T", 2, 2, 0), "ONA", 30, "Address-3"), (("T", 2, 3, 0), "ONA", 4, "Postal Code"), (("T", 2, 4, 0), "ONA", 20, "Telephone Number"), (("T", 2, 5, 0), "OTX", 50, "E-Mail Address"), (("T", 2, 6, 0), "OUA", 1, "VAT Indicator"), (("T", 2, 7, 0), "ONA", 10, "VAT Number"), (("T", 2, 8, 0), "OUA", 1, "Payment Frequency"), (("T", 2, 9, 0), "OD1", 10, "Start Date"), (("T", 2, 10, 0), "OUI", 3, "Number of Periods"), (("T", 2, 11, 0), "OUD", 12.2, "Rental Amount"), (("T", 2, 12, 0), "OUA", 1, "Status"), (("C", 3, 0, 0), "OSD", 13.2, "Value", "", "", "N", None, None, None, None, ("Details", 5)), (("T", 4, 0, 0), "IUI", 3, "Sequence Number", "", "N", "N", self.doTrans2, seq, None, None)) but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 0, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) tnd = ((self.doEndTop, "N"), None, None, None, None) txt = (self.doExit, None, None, None, self.doExit) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) self.df.colLabel[3][0].configure(text="Rentals ") self.df.colLabel[3][1].configure(text="Receipts") self.df.colLabel[3][2].configure(text="Payments") self.df.colLabel[3][3].configure(text="Journals") self.df.colLabel[3][4].configure(text="Balance ") def doPremises(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rtlprm", where=[("rtp_cono", "=", self.opts["conum"]), ("rtp_code", "=", w)], limit=1) if not acc: return "Invalid Premises" self.code = w for num, fld in enumerate(acc): if num < 2 or num > 6: continue self.df.loadEntry("T", 1, (num - 2), data=fld) def doAccount(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rtlmst", where=[("rtm_cono", "=", self.opts["conum"]), ("rtm_code", "=", self.code), ("rtm_acno", "=", w)], limit=1) if not acc: return "Invalid Account" self.acno = w self.name = acc[self.sql.rtlmst_col.index("rtm_name")] con = self.sql.getRec("rtlcon", where=[("rtc_cono", "=", self.opts["conum"]), ("rtc_code", "=", self.code), ("rtc_acno", "=", self.acno)], order="rtc_cnum") if not con: return "Invalid Contract" self.df.loadEntry(frt, pag, p + 1, data=acc[3]) for num, fld in enumerate(acc[4:]): self.df.loadEntry("T", 2, num, data=fld) self.cnum = con[-1:][0][3] self.df.topf[4][0][5] = self.cnum for num, fld in enumerate(con[-1:][0][4:-1]): self.df.loadEntry("T", 2, num + 8, data=fld) self.loadBalances() self.opts["mf"].updateStatus("") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadBalances(self): rtl = 0 rec = 0 pmt = 0 jnl = 0 bal = self.sql.getRec("rtltrn", cols=["rtt_type", "round(sum(rtt_tramt), 2)"], where=[("rtt_cono", "=", self.opts["conum"]), ("rtt_code", "=", self.code), ("rtt_acno", "=", self.acno)], group="rtt_type", order="rtt_type") if bal: for a in bal: if a[0] == 1: rtl = a[1] if a[0] == 2: rec = a[1] if a[0] == 3: pmt = a[1] if a[0] == 4: jnl = a[1] bal = float(ASD(rtl) + ASD(rec) + ASD(pmt) + ASD(jnl)) self.df.loadEntry("C", 3, 0, data=rtl) self.df.loadEntry("C", 3, 1, data=rec) self.df.loadEntry("C", 3, 2, data=pmt) self.df.loadEntry("C", 3, 3, data=jnl) self.df.loadEntry("C", 3, 4, data=bal) self.trn = self.sql.getRec("rtltrn", where=[("rtt_cono", "=", self.opts["conum"]), ("rtt_code", "=", self.code), ("rtt_acno", "=", self.acno)], order="rtt_trdt, rtt_type") def doTagSelect(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 4, 1) def doTrans2(self, frt, pag, r, c, p, i, w): tit = "Transactions for Account: %s %s - %s" % \ (self.code, self.acno, self.name) tab = ["rtltrn"] col = (("rtt_trdt", "", 0, " Date"), ("rtt_curdt", "", 0, "Curr-Dt"), ("rtt_batch", "", 0, "Batch"), ("rtt_type", ("XX", rttrtp), 3, "Typ"), ("rtt_refno", "", 0, "Reference", "Y"), ("rtt_tramt", "", 0, " Amount"), ("rtt_taxamt", "", 0, " VAT-Amount"), ("rtt_desc", "", 0, "Details")) whr = [("rtt_cono", "=", self.opts["conum"]), ("rtt_code", "=", self.code), ("rtt_acno", "=", self.acno)] if w: whr.append(("rtt_cnum", "=", w)) odr = "rtt_trdt, rtt_type" state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.df.nb.Page2, title=tit, tables=tab, cols=col, where=whr, order=odr) self.df.enableButtonsTags(state=state) self.doTrans1() def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "RTL", "%7s%s" % (self.code, self.acno)) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Premises") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = (("Information", "I"), ("Transactions", "T"), ("Both", "B"), ("None", "N")) self.doPrintOption( askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) if self.df.topq[self.df.pag]: self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return self.head = "%03u %-101s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pglin = 999 if opt != "T": self.pageHeading() self.printInfo() pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") if opt == "I": self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "B": if not self.trn: self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) else: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "T": if self.trn: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) def printInfo(self): for x in range(0, len(self.df.topf[0])): self.fpdf.drawText( "%-26s%-25s %s" % ("", self.df.topf[0][x][3], self.df.t_disp[0][0][x])) self.fpdf.drawText() for x in range(0, len(self.df.topf[1])): self.fpdf.drawText( "%-26s%-25s %s" % ("", self.df.topf[1][x][3], self.df.t_disp[1][0][x])) self.fpdf.drawText() for x in range(0, len(self.df.topf[2])): self.fpdf.drawText( "%-26s%-25s %s" % ("", self.df.topf[2][x][3], self.df.t_disp[2][0][x])) self.fpdf.drawText() self.pglin += 3 + len(self.df.topf[3]) self.fpdf.setFont(style="B") self.fpdf.drawText("%26s%-34s %13s" % ("", "Details", "Amount ")) self.fpdf.drawText("%26s%s" % ("", self.fpdf.suc * 48)) self.fpdf.setFont() desc = ("Rentals ", "Receipts", "Payments", "Journals", "Balance ") for n, d in enumerate(self.df.c_disp[3]): self.fpdf.drawText("%26s%-34s %13s" % ("", desc[n], d[0])) def printTrans(self): col = self.sql.rtltrn_col bal = 0 for ct in self.trn: trdt = CCD(ct[col.index("rtt_trdt")], "D1", 10) refno = CCD(ct[col.index("rtt_refno")], "Na", 9) trtp = CCD(ct[col.index("rtt_type")], "UI", 1) batch = CCD(ct[col.index("rtt_batch")], "Na", 7) desc = CCD(ct[col.index("rtt_desc")], "NA", 30) tramt = ct[col.index("rtt_tramt")] if tramt < 0: debit = CCD(0, "SD", 13.2) credit = CCD(tramt, "SD", 13.2) else: debit = CCD(tramt, "SD", 13.2) credit = CCD(0, "SD", 13.2) bal = float(ASD(bal) + ASD(tramt)) tot = CCD(bal, "SD", 13.2) taxamt = CCD(ct[col.index("rtt_taxamt")], "SD", 13.2) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingTrans() self.fpdf.drawText( "%s %s %s %s %s %s %s %s %s" % (trdt.disp, refno.disp, rttrtp[(trtp.work - 1)][0], batch.disp, desc.disp, debit.disp, credit.disp, tot.disp, taxamt.disp)) self.pglin += 1 def pageHeading(self): self.fpdf.add_page() self.fpdf.setFont(style="B") self.fpdf.drawText(self.head) self.fpdf.drawText() self.fpdf.drawText("%-34s %-10s" % \ ("Rentals Ledger Interrogation as at", self.sysdtd)) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 6 def pageHeadingTrans(self): self.fpdf.drawText( "%-16s %s %s %s %s %s %s %s %s" % ("", self.df.topf[0][0][3], self.df.t_disp[0][0][0], "", self.df.topf[0][1][3], self.df.t_disp[0][0][1], "", self.df.topf[0][2][3], self.df.t_disp[0][0][2])) self.fpdf.drawText() self.fpdf.setFont(style="B") self.fpdf.drawText("%-10s %-9s %-3s %-7s %-30s %-13s %-13s %-13s" % \ (" Date", "Reference", "Typ", "Batch", "Remarks", " Debit", " Credit", " Balance")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 8 def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class rc4020(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, ["rcaprm", "rcatnm", "rcacon", "rcatnt"], 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 t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Rental Tenants Interrogation (%s)" % self.__class__.__name__) prm = { "stype": "R", "tables": ("rcaprm",), "cols": ( ("rcp_owner", "", 0, "Own-Cod"), ("rcp_code", "", 0, "Prm-Code"), ("rcp_addr1", "", 0, "Address-Line-1")), "where": [("rcp_cono", "=", self.opts["conum"])], "index": 1} acc = { "stype": "R", "tables": ("rcatnm",), "cols": ( ("rtn_acno", "", 0, "Acc-Num"), ("rtn_name", "", 0, "Name", "Y")), "where": [("rtn_cono", "=", self.opts["conum"])], "whera": (("T", "rtn_code", 0, 0),)} seq = { "stype": "R", "tables": ("rcacon",), "cols": ( ("rcc_cnum", "", 0, "Acc-Num"), ("rcc_payind", "", 0, "F"), ("rcc_start", "", 0, "Start-Date"), ("rcc_period", "", 0, "Per")), "where": [("rcc_cono", "=", self.opts["conum"])], "whera": [["T", "rcc_code", 0, 0], ["T", "rcc_acno", 1, 0]]} tag = ( ("Premises", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Tenant", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Balances", self.doTagSelect, ("T",0,2), ("T",0,1)), ("Transactions", self.doTrans1, ("T",0,2), ("T",0,1)), ("Deposit", self.doDeposit1, ("T",0,2), ("T",0,1))) fld = ( (("T",0,0,0),"INA",7,"Premises","Premises Code", "","Y",self.doPremises,prm,None,("notblank",)), (("T",0,0,0),"INA",7,"Account","Account Code", "","N",self.doAccount,acc,None,("notblank",)), (("T",0,0,0),"ONA",30,"Name"), (("T",1,0,0),"ONA",30,"Description"), (("T",1,1,0),"ONA",30,"Address-1"), (("T",1,2,0),"ONA",30,"Address-2"), (("T",1,3,0),"ONA",30,"Address-3"), (("T",1,4,0),"ONA",4,"Postal Code"), (("T",1,5,0),"OUD",6.2,"Commission Rate"), (("T",2,0,0),"ONA",20,"Telephone Number"), (("T",2,1,0),"OTX",50,"E-Mail Address"), (("T",2,2,0),"OUA",1,"VAT Indicator"), (("T",2,3,0),"ONA",10,"VAT Number"), (("T",2,4,0),"OUA",1,"Payment Frequency"), (("T",2,5,0),"OD1",10,"Start Date"), (("T",2,6,0),"OUI",3,"Number of Periods"), (("T",2,7,0),"OUD",12.2,"Rental Amount"), (("T",2,8,0),"OUD",12.2,"Deposit Amount"), (("T",2,9,0),"OUD",12.2,"Basic Water Amount"), (("T",2,9,0),"OUI",1,"Type"), (("T",2,10,0),"OUD",12.2,"Basic Exlectricity Amount"), (("T",2,10,0),"OUI",1,"Type"), (("T",2,11,0),"OUA",1,"Status"), (("C",3,0,0),"OSD",13.2,"Value","", "","N",None,None,None,None,("Details",7)), (("T",4,0,0),"IUI",3,"Sequence Number","", "N","N",self.doTrans2,seq,None,None), (("T",5,0,0),"ID1",10,"Effective Date","", self.sysdtw,"N",self.doDeposit2,None,None,("efld",))) but = ( ("Clear",None,self.doClear,0,("T",0,0),("T",0,1)), ("Notes",None,self.doNotes,0,("T",0,0),("T",0,1)), ("Print",None,self.doPrint,0,("T",0,0),("T",0,1)), ("Quit",None,self.doExit,1,None,None)) tnd = ((self.doEndTop, "N"), None, None, None, None, None) txt = (self.doExit, None, None, None, None, None) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) self.df.colLabel[3][0].configure(text="Deposit ") self.df.colLabel[3][1].configure(text="Rentals ") self.df.colLabel[3][2].configure(text="Fees ") self.df.colLabel[3][3].configure(text="Services (O)") self.df.colLabel[3][4].configure(text="Services (A)") self.df.colLabel[3][5].configure(text="Repairs (A)") self.df.colLabel[3][6].configure(text="Balance ") def doPremises(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rcaprm", where=[("rcp_cono", "=", self.opts["conum"]), ("rcp_code", "=", w)], limit=1) if not acc: return "Invalid Premises" self.code = w self.owner = acc[self.sql.rcaprm_col.index("rcp_owner")] for num, fld in enumerate(acc[:-1]): if num > 2: self.df.loadEntry("T", 1, (num-3), data=fld) def doAccount(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rcatnm", where=[("rtn_cono", "=", self.opts["conum"]), ("rtn_owner", "=", self.owner), ("rtn_code", "=", self.code), ("rtn_acno", "=", w)], limit=1) if not acc: return "Invalid Account" self.acno = w self.depdtw = self.sysdtw self.depdtd = self.sysdtd self.name = acc[self.sql.rcatnm_col.index("rtn_name")] con = self.sql.getRec("rcacon", where=[("rcc_cono", "=", self.opts["conum"]), ("rcc_owner", "=", self.owner), ("rcc_code", "=", self.code), ("rcc_acno", "=", self.acno)], order="rcc_cnum") if not con: return "Invalid Contract" self.df.loadEntry(frt, pag, p+1, data=self.name) for num, fld in enumerate(acc[5:-1]): self.df.loadEntry("T", 2, num, data=fld) self.cnum = con[-1:][0][4] self.df.topf[4][0][5] = self.cnum for num, fld in enumerate(con[-1:][0][5:-1]): self.df.loadEntry("T", 2, num+4, data=fld) self.loadBalances() self.opts["mf"].updateStatus("") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadBalances(self): rtl = 0 dep = 0 fee = 0 svo = 0 sva = 0 rep = 0 bal = self.sql.getRec("rcatnt", cols=["rtu_mtyp", "round(sum(rtu_tramt), 2)"], where=[("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno)], group="rtu_mtyp") if bal: for a in bal: if a[0] == 1: rtl = a[1] if a[0] == 2: dep = a[1] if a[0] == 3: fee = a[1] if a[0] == 4: svo = a[1] if a[0] == 5: sva = a[1] if a[0] == 6: rep = a[1] bal = float(ASD(rtl) + ASD(fee) + ASD(svo) + ASD(sva) + ASD(rep)) self.df.loadEntry("C", 3, 0, data=dep) self.df.loadEntry("C", 3, 1, data=rtl) self.df.loadEntry("C", 3, 2, data=fee) self.df.loadEntry("C", 3, 3, data=svo) self.df.loadEntry("C", 3, 4, data=sva) self.df.loadEntry("C", 3, 5, data=rep) self.df.loadEntry("C", 3, 6, data=bal) self.trn = self.sql.getRec("rcatnt", where=[("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno)], order="rtu_trdt, rtu_type") def doTagSelect(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 4, 1) def doTrans2(self, frt, pag, r, c, p, i, w): tit = "Transactions for Account: %s %s %s - %s" % \ (self.owner, self.code, self.acno, self.name) tab = ["rcatnt"] col = ( ("rtu_trdt", "", 0, " Date"), ("rtu_curdt", "", 0, "Curr-Dt"), ("rtu_batch", "", 0, "Batch"), ("rtu_type", ("XX", rctrtp), 3, "Typ"), ("rtu_mtyp", ("XX", rcmvtp), 3, "Mov"), ("rtu_refno", "", 0, "Reference", "Y"), ("rtu_tramt", "", 0, " Amount"), ("rtu_taxamt", "", 0, " VAT-Amount"), ("rtu_desc", "", 0, "Details")) whr = [ ("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno)] if w: whr.append(("rtu_cnum", "=", w)) odr = "rtu_trdt, rtu_type" state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.df.nb.Page3, title=tit, tables=tab, cols=col, where=whr, order=odr) self.df.enableButtonsTags(state=state) self.doTrans1() def doDeposit1(self): self.df.focusField("T", 5, 1) def doDeposit2(self, frt, pag, r, c, p, i, w): self.depdtw = w self.depdtd = self.df.t_disp[pag][0][p] dat = getDeposit(self.opts["mf"], self.opts["conum"], self.depdtw, self.owner, self.code, self.acno) if dat: tit = "Deposit for Account: %s %s %s - %s as at %s" % (self.owner, self.code, self.acno, self.name, self.depdtd) col = ( ("a", "D1", 10, " Date"), ("b", "SD", 11.2, " Deposits"), ("c", "UI", 5, " Days"), ("d", "UD", 5.2, " Rate"), ("e", "SD", 11.2, " Interest"), ("f", "SD", 11.2, " Balance"), ("g", "SD", 11.2, " Admin")) state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.df.nb.Page4, title=tit, cols=col, where=dat, wtype="D") self.df.enableButtonsTags(state=state) self.doDeposit1() def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "RCA", "%7s%7s%s" % (self.owner, self.code, self.acno)) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Premises") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = ( ("Info Only", "I"), ("Deposit Only", "D"), ("Transactions Only", "T"), ("Info and Transactions", "B"), ("None", "N")) self.doPrintOption(askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.selPage("Premises") self.df.focusField("T", 1, 1) def doPrintOption(self, opt): if opt == "N": return self.head = "%03u %-105s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pglin = 999 if opt not in ("D", "T"): self.pageHeading() self.printInfo() pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") if opt == "I": self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "B": if not self.trn: self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) else: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "D": recs = getDeposit(self.opts["mf"], self.opts["conum"], self.depdtw, self.owner, self.code, self.acno) if recs: self.pageHeading(deposit=True) self.pageHeadingDeposit() self.printDeposit(recs) self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "T": if self.trn: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) def printInfo(self): for x in range(0, len(self.df.topf[0])): self.fpdf.drawText("%-26s%-25s %s" % ("", self.df.topf[0][x][3], self.df.t_disp[0][0][x])) self.fpdf.drawText() for x in range(0, len(self.df.topf[1])): self.fpdf.drawText("%-26s%-25s %s" % ("", self.df.topf[1][x][3], self.df.t_disp[1][0][x])) self.fpdf.drawText() for x in range(0, len(self.df.topf[2])): self.fpdf.drawText("%-26s%-25s %s" % ("", self.df.topf[2][x][3], self.df.t_disp[2][0][x])) self.fpdf.drawText() self.pglin += 3 + len(self.df.topf[3]) self.fpdf.setFont(style="B") self.fpdf.drawText("%26s%-34s %13s" % ("", "Details","Amount ")) self.fpdf.drawText("%26s%s" % ("", self.fpdf.suc * 48)) self.fpdf.setFont() desc = ( "Deposit ", "Rentals ", "Fees ", "Services (O)", "Services (A)", "Repairs (A)", "Balance ") for n, d in enumerate(self.df.c_disp[3]): self.fpdf.drawText("%26s%-34s %13s" % ("", desc[n], d[0])) def printDeposit(self, recs): tot1 = 0 tot2 = 0 tot3 = 0 for ct in recs: date = CCD(ct[0], "D1", 10) move = CCD(ct[1], "SD", 13.2) days = CCD(ct[2], "UI", 5) rate = CCD(ct[3], "UD", 5.2) intr = CCD(ct[4], "SD", 13.2) bals = CCD(ct[5], "SD", 13.2) admn = CCD(ct[6], "SD", 13.2) tot1 = float(ASD(tot1) + ASD(move.work)) tot2 = float(ASD(tot2) + ASD(intr.work)) tot3 = float(ASD(tot3) + ASD(admn.work)) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingDeposit() self.fpdf.drawText("%s %s %s %s %s %s %s" % (date.disp, move.disp, days.disp, rate.disp, intr.disp, bals.disp, admn.disp)) self.pglin += 1 self.fpdf.setFont(style="B") self.fpdf.underLine(txt=self.head) move = CCD(tot1, "SD", 13.2) intr = CCD(tot2, "SD", 13.2) admn = CCD(tot3, "SD", 13.2) self.fpdf.drawText("%-10s %s %11s %s %s %s" % ("Totals", move.disp, "", intr.disp, bals.disp, admn.disp)) def printTrans(self): col = self.sql.rcatnt_col bal = 0 for ct in self.trn: trdt = CCD(ct[col.index("rtu_trdt")], "D1", 10) refno = CCD(ct[col.index("rtu_refno")], "Na", 9) trtp = CCD(ct[col.index("rtu_type")], "UI", 1) mtyp = CCD(ct[col.index("rtu_mtyp")], "UI", 1) batch = CCD(ct[col.index("rtu_batch")], "Na", 7) desc = CCD(ct[col.index("rtu_desc")], "NA", 30) tramt = ct[col.index("rtu_tramt")] if tramt < 0: debit = CCD(0, "SD", 13.2) credit = CCD(tramt, "SD", 13.2) else: debit = CCD(tramt, "SD", 13.2) credit = CCD(0, "SD", 13.2) if mtyp.work != 2: bal = float(ASD(bal) + ASD(tramt)) tot = CCD(bal, "SD", 13.2) taxamt = CCD(ct[col.index("rtu_taxamt")], "SD", 13.2) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingTrans() self.fpdf.drawText("%s %s %s %s %s %s %s %s %s %s" % (trdt.disp, refno.disp, rctrtp[(trtp.work - 1)][0], rcmvtp[(mtyp.work - 1)][0], batch.disp, desc.disp, debit.disp, credit.disp, tot.disp, taxamt.disp)) self.pglin += 1 def pageHeading(self, deposit=False): self.fpdf.add_page() self.fpdf.setFont(style="B") self.fpdf.drawText(self.head) self.fpdf.drawText() if deposit: self.fpdf.drawText("%-42s %-10s" % \ ("Rentals Ledger Deposit Interrogation as at", self.depdtd)) else: self.fpdf.drawText("%-34s %-10s" % \ ("Rentals Ledger Interrogation as at", self.sysdtd)) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 6 def pageHeadingDeposit(self): self.fpdf.drawText("%-16s %s %s %s %s %s %s %s %s" % ("", self.df.topf[0][0][3], self.df.t_disp[0][0][0], "", self.df.topf[0][1][3], self.df.t_disp[0][0][1], "", self.df.topf[0][2][3], self.df.t_disp[0][0][2])) self.fpdf.drawText() self.fpdf.setFont(style="B") self.fpdf.drawText("%-10s %-13s %-5s %-5s %-13s %-13s %-13s" % \ (" Date", " Deposits", " Days", " Rate", " Interest", " Balance", " Admin")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 8 def pageHeadingTrans(self): self.fpdf.drawText("%-16s %s %s %s %s %s %s %s %s" % ("", self.df.topf[0][0][3], self.df.t_disp[0][0][0], "", self.df.topf[0][1][3], self.df.t_disp[0][0][1], "", self.df.topf[0][2][3], self.df.t_disp[0][0][2])) self.fpdf.drawText() self.fpdf.setFont(style="B") self.fpdf.drawText("%-10s %-9s %-3s %-3s %-7s %-30s %-13s %-13s "\ "%-13s" % (" Date", "Reference", "Typ", "Mov", "Batch", "Remarks", " Debit", " Credit", " Balance")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 8 def doExit(self): self.df.closeProcess() self.opts["mf"].closeLoop()
class rc2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): tabs = [ "ctlmst", "ctlvmf", "ctlvrf", "ctlvtf", "genmst", "gentrn", "rcaowm", "rcaowt", "rcaprm", "rcatnm", "rcacon", "rcatnt" ] self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) ctlmst = gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] rcactl = gc.getCtl("rcactl", self.opts["conum"]) if not rcactl: return self.glint = rcactl["cte_glint"] self.ch1 = ((rcactl["cte_lme"] // 100) * 100) + 1 self.ch2 = projectDate(self.ch1, 2, typ="months") if self.glint == "Y": self.glbnk = rcactl["cte_glbnk"] ctlctl = gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = [ "rca_com", "rca_dep", "rca_fee", "rca_orx", "rca_own", "rca_tnt", "rca_trx", "vat_ctl" ] if gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.rcacom = ctlctl["rca_com"] self.rcadep = ctlctl["rca_dep"] self.rcafee = ctlctl["rca_fee"] self.rcaorx = ctlctl["rca_orx"] self.rcaown = ctlctl["rca_own"] self.rcatnt = ctlctl["rca_tnt"] self.rcatrx = ctlctl["rca_trx"] self.convat = ctlctl["vat_ctl"] t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.batno = "R%04i%02i" % (t[0], t[1]) return True def drawDialog(self): # Transaction Types typ = { "stype": "C", "titl": "Select the Required Type", "head": ("C", "Type"), "data": [] } # Movement Types data = [] for x in range(1, len(rcmvtp) + 1): data.append((x, rcmvtp[x - 1][1])) mov = { "stype": "C", "titl": "Select the Required Type", "head": ("C", "Type"), "data": data } # Premises prm = { "stype": "R", "tables": ("rcaprm", "rcaowm"), "cols": (("rcp_owner", "", 0, "Owner"), ("rom_name", "", 0, "Owner"), ("rcp_code", "", 0, "Prm-Cod"), ("rcp_addr1", "", 0, "Address-Line-1")), "where": [("rcp_cono", "=", self.opts["conum"]), ("rom_cono=rcp_cono", ), ("rom_acno=rcp_owner", )], "index": 2 } # Tenant tnm = { "stype": "R", "tables": ("rcatnm", ), "cols": (("rtn_acno", "", 0, "Acc-Num"), ("rtn_name", "", 0, "Description", "Y")), "where": [("rtn_cono", "=", self.opts["conum"])], "whera": [("T", "rtn_owner", 0, 1)] } # Contract con = { "stype": "R", "tables": ("rcacon", ), "cols": (("rcc_cnum", "", 0, "Seq"), ("rcc_payind", "", 0, "F"), ("rcc_start", "", 0, "Start-Date"), ("rcc_period", "", 0, "Per"), ("rcc_status", "", 0, "S")), "where": [("rcc_cono", "=", self.opts["conum"])], "whera": [("T", "rcc_owner", 0, 1), ("T", "rcc_code", 0, 0), ("T", "rcc_acno", 0, 2)] } # VAT Records vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } tag = ( ( "Owner", None, (("T", 2, 1), ("C", 2, 1)), # On (("C", 1, 1), ("T", 2, 2), ("C", 2, 2))), # Off ( "Tenant", None, ("C", 1, 1), # On (("C", 1, 2), ("T", 2, 1), ("C", 2, 1))), # Off ("Allocation", self.doAllocation, None, None)) fld = [ (("T", 0, 0, 0), "INA", 7, "Prm-Cod", "Premises Code", "", "Y", self.doPrmCod, prm, None, None), (("T", 0, 0, 0), "ONA", 30, "Description"), (("T", 1, 0, 0), "ONA", 7, "Acc-Num"), (("T", 1, 0, 0), "ONA", 30, "Name"), (("T", 1, 0, 0), "OSD", 11.2, "Payable"), (("C", 1, 0, 0), "INa", 9, "Reference", "Reference Number", "i", "Y", self.doOwnRef, None, None, ("notblank", )), (("C", 1, 0, 1), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doOwnDat, None, None, ("efld", )), (("C", 1, 0, 2), "IUI", 1, "T", "Transaction Type", "r", "N", self.doOwnTyp, typ, None, ("notzero", )), (("C", 1, 0, 3), "ISD", 11.2, "Amount", "Transaction Amount", "", "N", self.doOwnAmt, None, None, None), (("C", 1, 0, 4), "IUA", 1, "V", "V.A.T Code", "N", "N", self.doOwnCod, vtm, None, ("efld", )), (("C", 1, 0, 5), "ISD", 11.2, "V.A.T", "V.A.T Amount", "", "N", self.doOwnVat, None, None, None), (("C", 1, 0, 6), "INA", 47, "Details", "Transaction Details", "", "N", self.doOwnDet, None, None, None), (("T", 2, 0, 0), "INA", 7, "Acc-Num", "Account Number", "", "Y", self.doAccNum, tnm, None, None), (("T", 2, 0, 0), "ONA", 30, "Name"), (("T", 2, 0, 0), "IUI", 3, "Seq", "Contract Number", "", "N", self.doConSeq, con, None, None), (("T", 2, 0, 0), "OSD", 11.2, "Balance"), (("C", 2, 0, 0), "INa", 9, "Reference", "Reference Number", "i", "Y", self.doTntRef, None, None, ("notblank", )), (("C", 2, 0, 1), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTntDat, None, None, ("efld", )), (("C", 2, 0, 2), "IUI", 1, "T", "Transaction Type", "r", "N", self.doTntTyp, typ, None, ("notzero", )), (("C", 2, 0, 3), "ISD", 11.2, "Amount", "Transaction Amount", "", "N", self.doTntAmt, None, None, None), (("C", 2, 0, 4), "INA", (60, 30), "Details", "Transaction Details", "", "N", self.doTntDet, None, None, None), (("T", 3, 0, 0), "OSD", 11.2, "Rentals "), (("T", 3, 0, 0), "OSD", 11.2, "Deposit "), (("T", 3, 0, 0), "OSD", 11.2, "Fees "), (("T", 3, 1, 0), "OSD", 11.2, "Services (O)"), (("T", 3, 1, 0), "OSD", 11.2, "Services (A)"), (("T", 3, 1, 0), "OSD", 11.2, "Repairs "), (("T", 3, 2, 0), "OSD", 11.2, "Allocation"), (("C", 3, 0, 0), "IUI", 1, "M", "Movement Type", "", "Y", self.doAllMov, mov, None, ("between", 1, 6)), (("C", 3, 0, 1), "ISD", 11.2, "Amount", "Allocation Amount", "", "N", self.doAllAmt, None, None, None), (("C", 3, 0, 2), "IUA", 1, "V", "V.A.T Code", "N", "N", self.doAllCod, vtm, None, ("efld", )), (("C", 3, 0, 3), "ISD", 11.2, "V.A.T", "V.A.T Amount", "", "N", self.doAllVat, None, None, None), (("C", 3, 0, 4), "INA", (50, 30), "Details", "Transaction Details", "", "N", self.doAllDet, None, None, None) ] row = [0, 4, 4, 10] tnd = [(self.endPage, "y"), (self.endPage, "y"), (self.endPage, "y"), (self.endPage, "y")] txt = [self.exitPage, self.exitPage, self.exitPage, self.exitPage] cnd = [(None, "n"), (self.endPage, "y"), (self.endPage, "y"), (self.endPage, "y")] cxt = [None, self.exitPage, self.exitPage, self.exitPage] but = (("Notes", None, self.allNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Statement", None, self.allStmnt, 0, (("C", 1, 1), ("C", 2, 1)), (("T", 0, 1), ("T", 2, 1))), ("Cancel", None, self.doAllCancel, 0, ("C", 3, 1), ("C", 2, 1))) self.df = TartanDialog(self.opts["mf"], tags=tag, eflds=fld, rows=row, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but) def doPrmCod(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec( "rcaprm", cols=["rcp_desc", "rcp_owner", "rcp_crate", "rcp_addr1"], where=[("rcp_cono", "=", self.opts["conum"]), ("rcp_code", "=", w)], limit=1) if not acc: return "Invalid Premises Code" self.code = w desc, self.owner, self.crate, addr1 = acc if desc: self.df.loadEntry(frt, pag, p + 1, data=desc) else: self.df.loadEntry(frt, pag, p + 1, data=addr1) acc = self.sql.getRec("rcaowm", cols=["rom_name", "rom_vatdf"], where=[("rom_cono", "=", self.opts["conum"]), ("rom_acno", "=", self.owner)], limit=1) if not acc: return "Missing Owner Record (%s)" % self.owner self.df.loadEntry("T", 1, 0, data=self.owner) self.df.loadEntry("T", 1, 1, data=acc[0]) self.vatdf = acc[1] self.acno = None def doAccNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("rcatnm", cols=["rtn_name"], where=[("rtn_cono", "=", self.opts["conum"]), ("rtn_owner", "=", self.owner), ("rtn_code", "=", self.code), ("rtn_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.acno = w self.name = acc[0] self.df.loadEntry(frt, pag, p + 1, data=self.name) con = self.sql.getRec("rcacon", where=[("rcc_cono", "=", self.opts["conum"]), ("rcc_owner", "=", self.owner), ("rcc_code", "=", self.code), ("rcc_acno", "=", self.acno)], order="rcc_cnum") if not con: return "No Valid Contracts" self.cnum = con[-1:][0][self.sql.rcacon_col.index("rcc_cnum")] self.df.topf[2][2][5] = self.cnum def doConSeq(self, frt, pag, r, c, p, i, w): con = self.sql.getRec("rcacon", where=[("rcc_cono", "=", self.opts["conum"]), ("rcc_code", "=", self.code), ("rcc_acno", "=", self.acno), ("rcc_cnum", "=", w)], order="rcc_cnum") if not con: return "Invalid Contract Sequence" self.cnum = w self.showTenantBalance() def doOwnRef(self, frt, pag, r, c, p, i, w): self.trnref = w def doOwnDat(self, frt, pag, r, c, p, i, w): if w < self.ch1 or w > self.ch2: ov = PwdConfirm(self.opts["mf"], conum=self.opts["conum"], system="RCA", code="DateOver") if ov.flag == "no": return "Invalid Date (< %s or > %s)" % (self.ch1, self.ch2) self.trndat = w data = [] for x in range(2, len(rctrtp) + 1): data.append((x, rctrtp[x - 1][1])) self.df.colf[1][2][8]["data"] = data def doOwnTyp(self, frt, pag, r, c, p, i, w): if w not in (2, 3, 4): return "Invalid Transaction Type" self.trntyp = w def doOwnAmt(self, frt, pag, r, c, p, i, w): if self.trntyp == 3 and w > self.due: op = PwdConfirm(self.opts["mf"], conum=self.opts["conum"], system="RCA", code="Overpaid") if op.flag == "no": return "Overpaid" self.trnamt = w # Ignore VAT at this stage self.vatcode = "" self.trnvat = 0 self.df.loadEntry(frt, pag, p + 1, data=self.vatcode) self.df.loadEntry(frt, pag, p + 2, data=self.trnvat) return "sk2" def doOwnCod(self, frt, pag, r, c, p, i, w): pass # vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) # if vrte is None: # return "Invalid V.A.T Code" # self.vatcode = w # self.trnvat = round((self.trnamt * vrte / (vrte + 100)), 2) # self.df.loadEntry(frt, pag, p+1, data=self.trnvat) # if not self.trnvat: # return "sk1" def doOwnVat(self, frt, pag, r, c, p, i, w): pass # if self.trnamt < 0 and w > 0: # self.trnvat = float(ASD(0) - ASD(w)) # elif self.trnamt > 0 and w < 0: # self.trnvat = float(ASD(0) - ASD(w)) # else: # self.trnvat = w # self.df.loadEntry(frt, pag, p, data=self.trnvat) def doOwnDet(self, frt, pag, r, c, p, i, w): self.trndet = w def doTntRef(self, frt, pag, r, c, p, i, w): self.trnref = w def doTntDat(self, frt, pag, r, c, p, i, w): if w < self.ch1 or w > self.ch2: ov = PwdConfirm(self.opts["mf"], conum=self.opts["conum"], system="RCA", code="DateOver") if ov.flag == "no": return "Invalid Date (< %s or > %s)" % (self.ch1, self.ch2) self.trndat = w data = [] for x in range(1, len(rctrtp) + 1): data.append((x, rctrtp[x - 1][1])) self.df.colf[2][2][8]["data"] = data def doTntTyp(self, frt, pag, r, c, p, i, w): if w not in (1, 2, 3, 4): return "Invalid Transaction Type" self.trntyp = w def doTntAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if self.trntyp == 1: # Rental Raised self.vatcode = self.vatdf vrte = getVatRate(self.sql, self.opts["conum"], self.vatcode, self.trndat) if vrte is None: vrte = 0.0 self.trnvat = round((w * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, data="Rental Raised") else: # Ignore VAT at this stage self.vatcode = "" self.trnvat = 0 def doTntDet(self, frt, pag, r, c, p, i, w): self.trndet = w def doAllocation(self): self.df.setWidget(self.df.B1, state="normal") def doAllMov(self, frt, pag, r, c, p, i, w): if w == 2 and self.trntyp not in (2, 3): return "Deposits Only Allowed for Receipts and Payments" self.allmov = w def doAllAmt(self, frt, pag, r, c, p, i, w): if not w: self.allamt = float(ASD(self.trnamt) - ASD(self.alltot)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w if self.allmov == 2: # Deposit self.allcod = "" self.df.loadEntry(frt, pag, p + 1, data=self.allcod) self.allvat = 0 self.df.loadEntry(frt, pag, p + 2, data=self.allvat) return "sk2" if self.trntyp in (2, 3): # Receipt or Payment self.df.loadEntry(frt, pag, p + 1, self.vatdf) if self.trntyp == 4 and self.allmov == 3: # Journal Fee self.df.loadEntry(frt, pag, p + 1, self.taxdf) else: self.allcod = "" self.allvat = 0 def doAllCod(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" self.allcod = w self.allvat = round((self.allamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, data=self.allvat) if not self.allvat: self.df.loadEntry(frt, pag, p + 2, data=self.trndet) return "sk1" def doAllVat(self, frt, pag, r, c, p, i, w): if self.allamt < 0 and w > 0: self.allvat = float(ASD(0) - ASD(w)) elif self.allamt > 0 and w < 0: self.allvat = float(ASD(0) - ASD(w)) else: self.allvat = w self.df.loadEntry(frt, pag, p, data=self.allvat) self.df.loadEntry(frt, pag, p + 1, data=self.trndet) def doAllDet(self, frt, pag, r, c, p, i, w): self.trndet = w def doAllCancel(self): self.allocs = [] self.df.clearFrame("C", 3) self.df.setWidget(self.df.B1, state="disabled") self.df.selPage("Tenant") self.df.clearLine(2, int((self.df.last[2][1] - 1) / self.df.colq[2]), "Y") def endPage(self): if self.df.frt == "T" and self.df.pag == 0: self.df.focusField("C", 1, 1) elif self.df.frt == "C" and self.df.pag == 1: # Owners self.updateTables() self.df.advanceLine(self.df.pag) elif self.df.frt == "T" and self.df.pag == 2: self.df.focusField("C", 2, 1) elif self.df.frt == "C" and self.df.pag == 2: # Tenants self.allocs = [] self.alltot = 0.0 if self.trntyp == 1: self.movtyp = 1 self.updateTables() self.df.advanceLine(self.df.pag) else: self.df.selPage("Allocation") dpp = 0.0 acc = self.sql.getRec("rcacon", cols=["rcc_deposit"], where=[("rcc_cono", "=", self.opts["conum"]), ("rcc_owner", "=", self.owner), ("rcc_code", "=", self.code), ("rcc_acno", "=", self.acno)], order="rcc_cnum") if acc: dpo = acc[-1:][0][0] else: dpo = 0.0 dat = self.sql.getRec( "rcatnt", cols=["rtu_mtyp", "round(sum(rtu_tramt), 2)"], where=[("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno)], group="rtu_mtyp", order="rtu_mtyp") if dat: for d in dat: if d[0] == 2: dpp = d[1] else: self.df.loadEntry("T", 3, d[0] - 1, data=d[1]) dpo = float(ASD(dpo) + ASD(dpp)) if dpo: self.df.loadEntry("T", 3, 1, data=dpo) self.df.loadEntry("T", 3, 6, data=self.trnamt) self.df.focusField("C", 3, 1) else: # Allocations self.allocs.append( [self.allmov, self.allamt, self.allcod, self.allvat]) self.alltot = float(ASD(self.alltot) + ASD(self.allamt)) bal = float(ASD(self.trnamt) - ASD(self.alltot)) if bal: pos = self.allmov - 1 if self.trntyp == 2: a = float( ASD(self.df.t_work[3][0][pos]) - ASD(self.allamt)) else: a = float( ASD(self.df.t_work[3][0][pos]) + ASD(self.allamt)) self.df.loadEntry("T", 3, pos, data=a) self.df.loadEntry("T", 3, 6, data=bal) self.df.advanceLine(3) else: for line in self.allocs: self.movtyp, self.trnamt, self.vatcode, self.trnvat = line self.updateTables() self.df.clearFrame("C", 3) self.df.selPage("Tenant") self.df.advanceLine(2) self.showOwnerTrans() if self.acno: self.showTenantTrans() def showOwnerTrans(self): whr = [("rot_cono", "=", self.opts["conum"]), ("rot_acno", "=", self.owner)] tot = self.sql.getRec("rcaowt", cols=["round(sum(rot_tramt),2)"], where=[("rot_cono", "=", self.opts["conum"]), ("rot_acno", "=", self.owner)], limit=1) if not tot or not tot[0]: self.due = 0 else: self.due = float(ASD(0) - ASD(tot[0])) arr = self.sql.getRec("rcatnt", cols=["round(sum(rtu_tramt),2)"], where=[("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_mtyp", "in", (1, 4))], limit=1) if arr and arr[0]: self.due = float(ASD(self.due) - ASD(arr[0])) self.df.loadEntry("T", 1, 2, data=self.due) tab = ["rcaowt"] col = [ "rot_trdt", "rot_type", "rot_refno", "rot_desc", "rot_tramt", "rot_taxamt" ] whr = [("rot_cono", "=", self.opts["conum"]), ("rot_acno", "=", self.owner)] odr = "rot_trdt, rot_type, rot_refno" dat = self.sql.getRec(tables=tab, cols=col, where=whr, order=odr) data = [] bals = 0 for d in dat: bals = float(ASD(bals) + ASD(d[4])) data.append(d + [bals]) col = (("rot_trdt", "Trans-Date", 10, "D1", "N"), ("rot_type", "Typ", 3, ("XX", rctrtp), "N"), ("rot_refno", "Reference", 9, "Na", "N"), ("rot_desc", "Details", 39, "NA", "N"), ("rot_tramt", "Amount", 11.2, "SD", "N"), ("rot_taxamt", "VAT-Amount", 11.2, "SD", "N"), ("balance", "Balance", 15.2, "SD", "N")) try: self.otrn.closeProcess() except: pass self.otrn = SelectChoice(self.df.topPage1, None, col, data, wait=False, neww=False, butt=False, sort=False, live=False, modal=False, lines=9) def showTenantTrans(self): tab = ["rcatnt"] col = [ "rtu_trdt", "rtu_type", "rtu_refno", "rtu_desc", "rtu_mtyp", "rtu_tramt", "rtu_taxamt" ] whr = [("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno)] odr = "rtu_trdt, rtu_type, rtu_refno, rtu_mtyp" dat = self.sql.getRec(tables=tab, cols=col, where=whr, order=odr) data = [] bals = 0 for d in dat: bals = float(ASD(bals) + ASD(d[5])) data.append(d + [bals]) col = (("rtu_trdt", "Trans-Date", 10, "D1", "N"), ("rtu_type", "Typ", 3, ("XX", rctrtp), "N"), ("rtu_refno", "Reference", 9, "Na", "N"), ("rtu_desc", "Details", 35, "NA", "N"), ("rtu_mtyp", "Mov", 3, ("XX", rcmvtp), "N"), ("rtu_tramt", "Amount", 11.2, "SD", "N"), ("rtu_taxamt", "VAT-Amount", 11.2, "SD", "N"), ("balance", "Balance", 15.2, "SD", "N")) try: self.ttrn.closeProcess() except: pass self.ttrn = SelectChoice(self.df.topPage2, None, col, data, wait=False, neww=False, butt=False, sort=False, live=False, modal=False, lines=9) def showTenantBalance(self): bal = self.sql.getRec("rcatnt", cols=["round(sum(rtu_tramt),2)"], where=[("rtu_cono", "=", self.opts["conum"]), ("rtu_owner", "=", self.owner), ("rtu_code", "=", self.code), ("rtu_acno", "=", self.acno), ("rtu_cnum", "=", self.cnum), ("rtu_mtyp", "<>", 2)], limit=1) self.df.loadEntry("T", 2, 3, data=bal[0]) def updateTables(self): curdt = int(self.trndat / 100) amt = self.trnamt vat = self.trnvat if self.trntyp in (1, 4): # Rental and Journal gltyp = 4 elif self.trntyp == 2: # Receipt gltyp = 6 bnk = amt amt = float(ASD(0) - ASD(amt)) vat = float(ASD(0) - ASD(vat)) elif self.trntyp == 3: # Payment gltyp = 2 bnk = float(ASD(0) - ASD(amt)) if self.df.pag == 1: # Owners Transaction accod = self.owner data = [ self.opts["conum"], self.owner, self.trntyp, self.trnref, self.batno, self.trndat, amt, vat, curdt, self.trndet, self.vatcode, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rcaowt", data=data) if self.glint == "Y": # General Ledger Transaction for Owner Control gld = "%7s %s" % (self.owner, self.trndet[:22]) data = [ self.opts["conum"], self.rcaown, curdt, self.trndat, gltyp, self.trnref, self.batno, amt, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) else: # Tenants Transaction accod = self.code data = [ self.opts["conum"], self.owner, self.code, self.acno, self.cnum, self.trntyp, self.trnref, self.batno, self.trndat, self.movtyp, amt, vat, curdt, self.trndet, self.vatcode, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rcatnt", data=data) if self.glint == "Y": gld = "%7s %7s %7s" % (self.owner, self.code, self.acno) if self.df.pag == 3 and self.movtyp == 2: # General Ledger Transaction for Deposit Control acc = self.rcadep else: # General Ledger Transaction for Tenant Control acc = self.rcatnt data = [ self.opts["conum"], acc, curdt, self.trndat, gltyp, self.trnref, self.batno, amt, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) self.showTenantBalance() if self.trntyp in (2, 3): if self.glint == "Y": # General Ledger Transaction for Bank Account data = [ self.opts["conum"], self.glbnk, curdt, self.trndat, gltyp, self.trnref, self.batno, bnk, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) return if self.df.pag == 1 and self.df.pag == 1: # Owners Journal Entries (Unallocated) if self.glint == "Y": amt = float(ASD(0) - ASD(amt)) data = [ self.opts["conum"], self.rcaorx, curdt, self.trndat, gltyp, self.trnref, self.batno, amt, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) return if self.df.pag == 2 and self.movtyp == 1: # Rental and Commission Raised rta = float(ASD(0) - ASD(amt)) rtv = float(ASD(0) - ASD(vat)) des = "Rental on %s Premises" % self.code data = [ self.opts["conum"], self.owner, self.trntyp, self.trnref, self.batno, self.trndat, rta, rtv, curdt, des, self.vatcode, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rcaowt", data=data) if self.glint == "Y": # General Ledger Transaction for Owner Control gld = "%7s Rental on %7s" % (self.owner, self.code) data = [ self.opts["conum"], self.rcaown, curdt, self.trndat, gltyp, self.trnref, self.batno, rta, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) if self.crate: # If there is a Commission Rate on the Premises Record cma = float(ASD(0) - ASD(round((rta * self.crate / 100.0), 2))) vrte = getVatRate(self.sql, self.opts["conum"], self.taxdf, self.trndat) if vrte is None: vrte = 0.0 cmv = round((cma * vrte / 100.0), 2) cmt = float(ASD(cma) + ASD(cmv)) cma = float(ASD(0) - ASD(cma)) tax = float(ASD(0) - ASD(cmv)) des = "Commission @ %3.5s%s Inclusive" % (self.crate, "%") data = [ self.opts["conum"], self.owner, 4, self.trnref, self.batno, self.trndat, cmt, cmv, curdt, des, self.vatdf, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rcaowt", data=data) if self.glint == "Y": # Update Owner Control gld = "%7s Commission Raised" % self.owner data = [ self.opts["conum"], self.rcaown, curdt, self.trndat, gltyp, self.trnref, self.batno, cmt, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) # Update Commission Account data = [ self.opts["conum"], self.rcacom, curdt, self.trndat, gltyp, self.trnref, self.batno, cma, tax, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) if self.taxdf: # VAT Transaction (ctlvtf) data = [ self.opts["conum"], self.taxdf, "O", curdt, "R", self.trntyp, self.batno, self.trnref, self.trndat, self.acno, self.name, cma, tax, 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("ctlvtf", data=data) if self.glint == "Y" and tax: # Update VAT Control data = [ self.opts["conum"], self.convat, curdt, self.trndat, gltyp, self.trnref, self.batno, tax, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) return if self.df.pag == 3 and self.movtyp == 3: # Contract Fees amt = float(ASD(0) - ASD(amt) + ASD(vat)) vat = float(ASD(0) - ASD(vat)) if self.glint == "Y": # Update Contract Fee Account data = [ self.opts["conum"], self.rcafee, curdt, self.trndat, gltyp, self.trnref, self.batno, amt, vat, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) if self.taxdf: # VAT Transaction (ctlvtf) data = (self.opts["conum"], self.vatcode, "O", curdt, "R", self.trntyp, self.batno, self.trnref, self.trndat, accod, self.trndet, amt, vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "Y": # Update VAT Control data = [ self.opts["conum"], self.convat, curdt, self.trndat, gltyp, self.trnref, self.batno, vat, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) return if self.df.pag == 3 and self.movtyp == 4: # Services - Owner Recovery rta = float(ASD(0) - ASD(amt)) rtv = float(ASD(0) - ASD(vat)) des = "Services Recovery on %s" % self.code data = [ self.opts["conum"], self.owner, self.trntyp, self.trnref, self.batno, self.trndat, rta, rtv, curdt, des, self.vatcode, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("rcaowt", data=data) if self.glint == "Y": # General Ledger Transaction for Owner Control gld = "%7s Services Recovery" % self.owner data = [ self.opts["conum"], self.rcaown, curdt, self.trndat, gltyp, self.trnref, self.batno, rta, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) return # Tenants Journal Entries (Unallocated) if self.glint == "Y": amt = float(ASD(0) - ASD(amt)) data = [ self.opts["conum"], self.rcatrx, curdt, self.trndat, gltyp, self.trnref, self.batno, amt, 0, gld, "", "", 0, self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("gentrn", data=data) def exitPage(self): if self.df.frt == "T" and self.df.pag == 0: self.df.closeProcess() self.opts["mf"].closeLoop() elif self.df.frt == "C" and self.df.pag == 3: self.df.focusField("C", 3, self.df.col) else: self.opts["mf"].dbm.commitDbase(ask=True) try: self.otrn.closeProcess() except: pass try: self.ttrn.closeProcess() except: pass self.df.selPage("Owner") self.df.focusField("T", 0, 1) def allNotes(self): if self.df.frt == "C": state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") if self.df.pag == 1: key = "%s" % self.owner else: key = "%7s%7s%s" % (self.owner, self.code, self.acno) NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "RCA", key, commit=False) 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 allStmnt(self): if self.df.frt == "C" and self.df.pag == 1: self.sargs = [self.owner] self.repModule("rc3050") elif self.df.frt == "C" and self.df.pag == 2: self.sargs = [self.owner, self.code, self.acno] self.repModule("rc3060") else: self.df.focusField(self.df.frt, self.df.pag, self.df.col) def repModule(self, mod): self.exit = False state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") tit = ("Date and Printer Selection", ) fld = ((("T", 0, 0, 0), "ID1", 10, "Statement Date", "", self.sysdtw, "N", self.doPrtDate, None, None, ("efld", )), ) self.st = TartanDialog(self.opts["mf"], tops=True, title=tit, eflds=fld, tend=((self.doPrtEnd, "y"), ), txit=(self.doPrtExit, ), view=("N", "V"), mail=("B", "Y")) self.st.mstFrame.wait_window() if not self.exit: self.sargs.extend( [self.stdtw, self.stdtd, self.st.repprt, self.st.repeml]) popt = { "mf": self.opts["mf"], "conum": self.opts["conum"], "conam": self.opts["conam"], "capnm": self.opts["capnm"], "args": self.sargs } runModule(mod, **popt) 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 doPrtDate(self, frt, pag, r, c, p, i, w): self.stdtw = w self.stdtd = self.st.t_disp[0][0][0] def doPrtEnd(self): self.doPrtClose() def doPrtExit(self): self.exit = True self.doPrtClose() def doPrtClose(self): self.st.closeProcess()
class wgc310(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["ctlmst", "genmst", "wagrcv", "wagedc", "wagtf2"], prog=self.__class__.__name__) if self.sql.error: return self.gc = GetCtl(self.opts["mf"]) wagctl = self.gc.getCtl("wagctl", self.opts["conum"]) if not wagctl: return self.glint = wagctl["ctw_glint"] return True def mainProcess(self): ced = { "stype": "R", "tables": ("wagedc", ), "cols": (("ced_code", "", 0, "Cde"), ("ced_desc", "", 0, "Description", "Y")), "where": [("ced_cono", "=", self.opts["conum"])], "whera": [["T", "ced_type", 0]], "order": "ced_code" } bas = { "stype": "C", "titl": "Available Base Rates", "head": ("C", "Description"), "data": ((1, "X * Normal Rate of Pay * Factor"), (2, "Normal Pay * Factor"), (3, "Normal Pay * Factor / 100"), (4, "X * Daily Rate of Pay * Factor"), (5, "X * Hourly Rate of Pay * Factor"), (6, "U.I.F. Pay * Factor"), (7, "S.D.L. Pay * Factor")) } coy = { "stype": "R", "tables": ("ctlmst", ), "cols": (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y")) } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])] } rcv = { "stype": "R", "tables": ("wagrcv", ), "cols": (("rcv_code", "", 0, "Code"), ("rcv_desc", "", 0, "Details", "Y")) } r1s = (("Variable", "V"), ("Fixed", "F")) r2s = (("Amount", "A"), ("Rate", "R")) r3s = (("Salary", "S"), ("Commission", "C")) r4s = (("Amount", "A"), ("Rate", "R"), ("None", "N")) r5s = (("Yes", "Y"), ("No", "N"), ("Notional", "T"), ("One Time", "O"), ("Retrench", "R")) r6s = (("Yes", "Y"), ("No", "N")) tag = (("Detail-_A", None, ("T", 0, 0), ("T", 0, 1)), ("Detail-_B", None, ("T", 0, 0), ("T", 0, 1))) self.fld = ((("T", 0, 0, 0), "IUA", 1, "Type", "Earning/Deduction Type", "E", "N", self.doType, None, None, ("in", ("E", "D"))), (("T", 0, 0, 0), "IUI", 3, "Code", "", "", "N", self.doCode, ced, None, ("notzero", )), (("T", 0, 0, 0), "ONA", 30, "Description"), (("T", 1, 0, 0), "INA", 30, "Description", "", "", "N", self.doDesc, None, self.doDelete, ("notblank", )), (("T", 1, 1, 0), ("IRB", r1s), 0, "Type", "", "V", "N", None, None, None, None), (("T", 1, 2, 0), ("IRB", r2s), 0, "Employee Portion", "", "A", "N", self.doEmployeePortion, None, None, None), (("T", 1, 3, 0), "IUI", 3, " Base", "", "", "N", self.doEmployeeBase, bas, None, ("between", 0, 7)), (("T", 1, 4, 0), "IUD", 8.2, " Value", "", "", "N", self.doValue, None, None, ("efld", )), (("T", 1, 5, 0), "IUD", 8.2, " Limit", "", "", "N", self.doElim, None, None, ("efld", )), (("T", 1, 6, 0), "IUI", 3, " GL/Cono", "", "", "N", self.doEglco, coy, None, ("efld", )), (("T", 1, 6, 0), "IUI", 7, " GL/Acno", "", "", "N", self.doEglno, glm, None, ("efld", )), (("T", 1, 7, 0), ("IRB", r3s), 0, "Earnings Type", "", "S", "N", self.doEarnType, None, None, None), (("T", 1, 8, 0), ("IRB", r4s), 0, "Employer Portion", "", "N", "N", self.doEmployerPortion, None, None, None), (("T", 1, 9, 0), "IUI", 3, " Base", "Base", "", "N", self.doEmployerBase, bas, None, ("between", 0, 7)), (("T", 1, 10, 0), "IUD", 8.2, " Value", "", "", "N", None, None, None, ("efld", )), (("T", 1, 11, 0), "IUD", 8.2, " Limit", "", "", "N", self.doRlim, None, None, ("efld", )), (("T", 1, 12, 0), "IUI", 3, " GL/Cono", "", "", "N", self.doRglco, coy, None, ("efld", )), (("T", 1, 12, 0), "IUI", 7, " GL/Acno", "", "", "N", self.doRglno, glm, None, ("efld", )), (("T", 1, 13, 0), ("IRB", r5s), 0, "Tax Code", "", "N", "N", self.doTaxcode, None, None, None), (("T", 1, 14, 0), "IUD", 6.2, "Tax Portion", "", "", "N", self.doTaxportion, None, None, ("efld", )), (("T", 2, 0, 0), "IUI", 4, "Rec Of Rev Code", "", "", "N", self.doRcv, rcv, None, ("notzero", )), (("T", 2, 0, 0), "ONA", 30, ""), (("T", 2, 1, 0), ("IRB", r6s), 0, "Union Report", "", "N", "N", self.doUniRep, None, None, None), (("T", 2, 2, 0), ("IRB", r6s), 0, "Must Pay", "", "N", "N", None, None, None, None), (("T", 2, 3, 0), "IUI", 2, "Balance Number", "", "", "N", self.doBalNo, None, None, ("between", 0, 3)), (("T", 2, 4, 0), "IUD", 5.2, "Hourly Limit", "", "", "N", self.doLimit, None, None, ("efld", )), (("T", 2, 5, 0), ("IRB", r6s), 0, "Monthly Deduction", "", "N", "N", self.doMthly, None, None, None), (("T", 2, 6, 0), "IUD", 6.2, "UIF Percentage", "", "", "N", None, None, None, ("efld", )), (("T", 2, 7, 0), "IUD", 6.2, "SDL Percentage", "", "", "N", None, None, None, ("efld", ))) but = (("Accept", None, self.doAccept, 0, ("T", 1, 1), ("T", 0, 0)), ("Cancel", None, self.doCancel, 0, ("T", 1, 1), ("T", 0, 0)), ("Quit", None, self.doExit0, 1, None, None)) tnd = ((self.doEnd0, "N"), (self.doEnd1, "N"), (self.doEnd2, "Y")) txt = (self.doExit0, self.doExit1, self.doExit2) self.df = TartanDialog(self.opts["mf"], eflds=self.fld, tags=tag, butt=but, tend=tnd, txit=txt) def doType(self, frt, pag, r, c, p, i, w): self.rtype = w if self.rtype == "E": self.df.topf[1][15][5] = "Y" else: self.df.topf[1][15][5] = "Y" def doCode(self, frt, pag, r, c, p, i, w): self.code = w self.acc = self.sql.getRec("wagedc", where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", self.rtype), ("ced_code", "=", self.code)], limit=1) if not self.acc: self.new = True if self.rtype == "D" and self.code == 1: showInfo(self.opts["mf"].body, "PAYE", "This code is Reserved for PAYE Deductions") elif self.rtype == "D" and self.code == 2: showInfo(self.opts["mf"].body, "UIF", "This code is Reserved for UIF Deductions") else: self.new = False d = 3 self.df.loadEntry(frt, pag, p + 1, data=self.acc[d]) for pg in range(1, self.df.pgs + 1): for x in range(0, self.df.topq[pg]): if pg == 2 and x == 1: continue self.df.loadEntry("T", pg, x, data=self.acc[d]) if pg == 2 and not x: ror = self.sql.getRec("wagrcv", limit=1, cols=["rcv_desc"], where=[("rcv_code", "=", self.acc[d])]) if not ror: desc = "" else: desc = ror[0] self.df.loadEntry("T", 2, 1, data=desc) d = d + 1 def doDesc(self, frt, pag, r, c, p, i, w): self.df.loadEntry("T", 0, 2, data=self.df.t_disp[1][0][0]) if self.rtype == "E" and self.code < 6: self.df.loadEntry("T", 1, p + 1, data="V") self.df.loadEntry("T", 1, p + 2, data="R") if self.code == 5: self.df.loadEntry("T", 1, p + 3, data=4) else: self.df.loadEntry("T", 1, p + 3, data=1) if self.code in (1, 5): self.df.loadEntry("T", 1, p + 4, data=1) self.df.loadEntry("T", 1, p + 5, data=0) if self.glint != "Y": self.df.loadEntry("T", 1, p + 6, data=0) self.df.loadEntry("T", 1, p + 7, data=0) self.df.loadEntry("T", 1, p + 8, data="S") return "sk8" else: return "sk5" else: return "sk3" elif self.rtype == "D" and self.code in (1, 2): if self.code == 1: self.df.loadEntry("T", 1, 1, data="V") self.df.loadEntry("T", 1, 2, data="R") if self.glint != "Y": self.df.loadEntry("T", 1, p + 6, data=0) self.df.loadEntry("T", 1, p + 7, data=0) self.df.loadEntry("T", 1, p + 9, data="N") self.df.loadEntry("T", 1, p + 15, data="N") return "nd" return "sk5" elif self.code == 2: self.df.loadEntry("T", 1, 1, data="V") self.df.loadEntry("T", 1, 2, data="R") self.df.loadEntry("T", 1, 3, data=6) return "sk3" def doDelete(self): t = self.sql.getRec("wagtf2", cols=["count(*)"], where=[("wt2_cono", "=", self.opts["conum"]), ("wt2_type", "=", self.rtype), ("wt2_code", "=", self.code)], limit=1) if t[0]: return "Transactions Exist, Not Deleted" self.sql.delRec("wagedc", where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", self.rtype), ("ced_code", "=", self.code)]) self.opts["mf"].dbm.commitDbase() self.df.focusField("T", 0, 1) def doEmployeePortion(self, frt, pag, r, c, p, i, w): if w == "A": self.df.loadEntry(frt, pag, p + 1, data=0) return "sk1" def doEmployeeBase(self, frt, pag, r, c, p, i, w): if w > 7: return "Invalid Employee Base" def doValue(self, frt, pag, r, c, p, i, w): self.value = w if self.rtype == "E" and self.code < 6: self.df.loadEntry("T", 1, p + 1, data=0) if self.glint != "Y": self.df.loadEntry("T", 1, p + 2, data=0) self.df.loadEntry("T", 1, p + 3, data=0) self.df.loadEntry("T", 1, p + 4, data="S") return "sk3" else: return "sk1" def doElim(self, frt, pag, r, c, p, i, w): self.elim = w if self.glint != "Y": self.df.loadEntry("T", 1, p + 1, data=0) self.df.loadEntry("T", 1, p + 2, data=0) if self.rtype == "E": return "sk2" else: self.df.loadEntry("T", 1, p + 3, data="") return "sk3" def doEglco(self, frt, pag, r, c, p, i, w): if self.rtype == "E" and self.code < 6 and not w: # Use department code for integration self.eglco = w self.df.loadEntry("T", 1, p + 1, data=0) self.df.loadEntry("T", 1, p + 2, data="S") self.df.loadEntry("T", 1, p + 9, data="Y") self.df.loadEntry("T", 1, p + 10, data=100.00) return "sk10" if w: self.eglco = w else: self.eglco = self.opts["conum"] name = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", self.eglco)], limit=1) if not name: return "Invalid Company" def doEglno(self, frt, pag, r, c, p, i, w): if self.rtype == "D": ctl = self.gc.getCtl("ctlctl", self.eglco) if ctl and not self.gc.chkRec(self.eglco, ctl, ["wag_slc"]): sln = ctl["wag_slc"] else: sln = None else: sln = None if w and w != sln: chk = chkGenAcc(self.opts["mf"], self.eglco, w) if type(chk) is str: return chk self.eglno = w if self.rtype == "D": if self.code == 2: self.df.loadEntry(frt, pag, 9, data="R") self.df.loadEntry(frt, pag, 10, data=6) self.df.loadEntry(frt, pag, 11, data=self.value) self.df.loadEntry(frt, pag, 12, data=self.elim) self.df.loadEntry(frt, pag, 13, data=self.eglco) self.df.loadEntry(frt, pag, 14, data=self.eglno) return "sk7" else: return "sk1" if self.code < 6: self.df.loadEntry("T", 1, p + 1, data="S") self.df.loadEntry("T", 1, p + 8, data="Y") self.df.loadEntry("T", 1, p + 9, data=100.00) return "sk9" def doEarnType(self, frt, pag, r, c, p, i, w): if self.rtype == "E": return "sk6" def doEmployerPortion(self, frt, pag, r, c, p, i, w): if w == "N": for x in range(1, 6): self.df.loadEntry(frt, pag, p + x, data=0) return "sk5" if w == "A": self.df.loadEntry(frt, pag, p + 1, data=0) return "sk1" def doEmployerBase(self, frt, pag, r, c, p, i, w): if w > 7: return "Invalid Employer Base" def doRlim(self, frt, pag, r, c, p, i, w): if self.glint != "Y": return "sk2" def doRglco(self, frt, pag, r, c, p, i, w): if not w: w = self.opts["conum"] name = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", w)], limit=1) if not name: return "Invalid Company" self.rglco = w def doRglno(self, frt, pag, r, c, p, i, w): if w: chk = chkGenAcc(self.opts["mf"], self.rglco, w) if type(chk) is str: return chk def doTaxcode(self, frt, pag, r, c, p, i, w): if self.rtype == "D" and w not in ("Y", "T", "N"): return "Invalid Selection" if w == "N": self.df.loadEntry("T", pag, p + 1, data=0) return "sk1" if self.glint == "Y" and not self.eglno and w != "T": return "ff8|Invalid G/L Account Number" def doTaxportion(self, frt, pag, r, c, p, i, w): if not w: return "Invalid Tax Portion" def doRcv(self, frt, pag, r, c, p, i, w): if w == 4101: return "SITE Code Not Allowed" acc = self.sql.getRec("wagrcv", cols=["rcv_desc"], where=[("rcv_code", "=", w)], limit=1) if not acc: return "Invalid Rec of Rev Code" else: self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doUniRep(self, frt, pag, r, c, p, i, w): self.df.loadEntry(frt, pag, p + 1, data="N") if self.rtype == "E": if self.code in (1, 2, 3, 4, 5): self.df.loadEntry(frt, pag, p + 2, data=0) self.df.loadEntry(frt, pag, p + 3, data=0) self.df.loadEntry(frt, pag, p + 4, data="N") self.df.loadEntry(frt, pag, p + 5, data=100.00) return "sk5" return "sk4" return "sk1" def doBalNo(self, frt, pag, r, c, p, i, w): if self.rtype == "E": self.df.loadEntry(frt, pag, p + 1, data=0) self.df.loadEntry(frt, pag, p + 2, data="N") self.df.loadEntry(frt, pag, p + 3, data="N") return "sk3" def doLimit(self, frt, pag, r, c, p, i, w): pass def doMthly(self, frt, pag, r, c, p, i, w): self.df.loadEntry(frt, pag, p + 1, data=0) return "sk1" def doEnd0(self): self.df.focusField("T", 1, 1, clr=self.new) def doEnd1(self): self.df.selPage("Detail-B") self.df.focusField("T", 2, 1, clr=self.new) def doEnd2(self): dat = [self.opts["conum"]] for x in range(0, 2): dat.append(self.df.t_work[0][0][x]) for x in range(0, len(self.df.t_work[1][0])): dat.append(self.df.t_work[1][0][x]) for x in range(0, len(self.df.t_work[2][0])): if x in (0, 2, 3, 4, 5, 6, 7, 8): dat.append(self.df.t_work[2][0][x]) if self.new: self.sql.insRec("wagedc", data=dat) elif dat != self.acc[:len(dat)]: col = self.sql.wagedc_col dat.append(self.acc[col.index("ced_xflag")]) self.sql.updRec("wagedc", data=dat, where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", self.rtype), ("ced_code", "=", self.code)]) self.opts["mf"].dbm.commitDbase() self.df.last[0] = [0, 0] self.df.selPage("Detail-A") self.df.focusField("T", 0, 1) def doAccept(self): if self.rtype == "D": frt, pag, col, mes = self.df.doCheckFields(("T", 0, None)) if not mes: frt, pag, col, mes = self.df.doCheckFields( ("T", 1, (0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14))) if not mes: if self.df.t_work[1][0][15] not in ("Y", "N", "T", "O", "R"): frt = "T" pag = 1 col = 15 mes = "Invalid Tax Code Selection" if not mes: frt, pag, col, mes = self.df.doCheckFields( ("T", 1, (16, ))) if not mes: frt, pag, col, mes = self.df.doCheckFields( ("T", 2, (0, 2, 3, 4, 5, 6))) else: frt, pag, col, mes = self.df.doCheckFields(("T", 0, None)) if not mes: frt, pag, col, mes = self.df.doCheckFields( ("T", 1, (0, 1, 2, 3, 4, 5, 6, 7, 8, 15, 16))) if not mes: frt, pag, col, mes = self.df.doCheckFields( ("T", 2, (0, 2, 3))) if mes: if pag > 0 and pag != self.df.pag: if frt == "T": self.df.last[pag][0] = col + 1 else: self.df.last[pag][1] = col + 1 self.df.selPage(self.df.tags[pag - 1][0]) self.df.focusField(frt, pag, (col + 1), err=mes) else: self.doEnd2() def doCancel(self): self.opts["mf"].dbm.rollbackDbase() self.df.focusField("T", 0, 1) def doExit0(self): self.df.closeProcess() self.opts["mf"].closeLoop() def doExit1(self): self.df.focusField("T", 0, 1) def doExit2(self): self.df.selPage("Detail-A")
class ln2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Create SQL Object self.sql = Sql(self.opts["mf"].dbm, [ "ctlmst", "lonmf1", "lonmf2", "lonrte", "lontrn", "genint", "genmst", "gentrn" ], prog=self.__class__.__name__) if self.sql.error: return # Check for Intercompany Facility if not self.sql.getRec("ctlmst", cols=["count(*)"], where=[("ctm_cono", "<>", self.opts["conum"])], limit=1)[0]: self.incoac = False else: itg = self.sql.getRec("genint", cols=["cti_inco"], where=[("cti_cono", "=", self.opts["conum"]) ]) if itg: self.incoac = [self.opts["conum"]] [self.incoac.append(coy[0]) for coy in itg] else: self.incoac = False self.gc = GetCtl(self.opts["mf"]) lonctl = self.gc.getCtl("lonctl", self.opts["conum"]) if not lonctl: return self.glint = lonctl["cln_glint"] self.drte = lonctl["cln_drte"] self.crte = lonctl["cln_crte"] if self.glint == "Y": ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = ["lon_ctl", "int_rec", "int_pay"] if self.gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.lonctl = ctlctl["lon_ctl"] self.intrec = ctlctl["int_rec"] self.intpay = ctlctl["int_pay"] self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.allcoy = self.opts["conum"] ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "LON", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return if self.opts["rtn"] == 4: self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) def drawDialog(self): lm1 = { "stype": "R", "tables": ("lonmf1", ), "cols": (("lm1_acno", "", 0, "Acc-Num"), ("lm1_name", "", 0, "Name", "Y")), "where": [("lm1_cono", "=", self.opts["conum"])] } lm2 = { "stype": "R", "tables": ("lonmf2", ), "cols": (("lm2_loan", "", 0, "Ln"), ("lm2_desc", "", 0, "Description", "Y")), "where": [("lm2_cono", "=", self.opts["conum"])], "whera": [("C", "lm2_acno", 0)] } coy = { "stype": "R", "tables": ("ctlmst", ), "cols": (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y")) } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "whera": [["C", "glm_cono", 0, 2]] } fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "INA", 7, "Acc-Num", "Account Code", "", "Y", self.doLonAcc, lm1, None, ("efld", )), (("C", 1, 0, 1), "ONA", 10, "Name"), (("C", 1, 0, 2), "IUI", 2, "LN", "Loan Number", "", "N", self.doLonNum, lm2, None, ("efld", )), (("C", 1, 0, 3), "ITX", (12, 30), "Description", "", "", "N", self.doLonDes, None, None, ("notblank", )), (("C", 1, 0, 4), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 5), "INa", 9, "Reference", "Reference Number One", "i", "N", self.doTrnRef, None, None, ("notblank", )), (("C", 1, 0, 6), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, ("notzero", )), (("C", 1, 0, 7), "IUD", 6.2, "DRte-%", "Debit Rate", self.drte, "N", self.doLonDrt, None, None, None), (("C", 1, 0, 8), "IUD", 6.2, "CRte-%", "Credit Rate", self.crte, "N", self.doLonCrt, None, None, None), (("C", 1, 0, 9), "IUI", 3, "Mth", "Period in Months", "", "N", self.doLonMth, None, None, ("efld", )), (("C", 1, 0, 10), "OUD", 12.2, "Repay-Amt"), (("C", 1, 0, 11), "INA", 30, "Details", "Loan Details", "", "N", self.doTrnDet, None, None, None)] if self.opts["rtn"] == 3 and self.glint == "Y": fld.extend([(("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"), [("C", 2, 0, 0), "IUI", 3, "Coy", "Company Number", self.opts["conum"], "N", self.doCoyNum, coy, None, None], (("C", 2, 0, 1), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 2), "ONA", 19, "Description"), (("C", 2, 0, 4), "ISD", 13.2, "All-Amount", "Allocation Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 6), "INA", 30, "Allocation Details", "", "", "N", self.doAllDet, None, None, ("notblank", ))]) if not self.incoac: fld[15][1] = "OUI" but = [("Interrogate", None, self.querySln, 0, ("C", 1, 1), ("C", 1, 2))] tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.opts["rtn"] == 3 and self.glint == "Y": but.append( ("Cancel", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1))) tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doLonAcc(self, frt, pag, r, c, p, i, w): newacc = False if not w and self.opts["rtn"] in (1, 2, 3): yn = askQuestion(self.opts["mf"].body, "New Account", "Is This a New Account?", default="no") if yn == "no": return "Invalid Account Number" newacc = True w = callModule(self.opts["mf"], self.df, "ln1010", coy=(self.opts["conum"], self.opts["conam"]), user=self.opts["capnm"], args="auto", ret="acno") self.df.loadEntry(frt, pag, p, data=w) acc = self.sql.getRec("lonmf1", cols=["lm1_name"], where=[("lm1_cono", "=", self.allcoy), ("lm1_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.lonacc = w self.name = acc[0] self.df.loadEntry(frt, pag, p + 1, data=self.name) if newacc: self.lonnum = 1 self.newlon = True self.df.loadEntry(frt, pag, p + 2, data=self.lonnum) return "sk2" def doLonNum(self, frt, pag, r, c, p, i, w): self.newlon = False if not w and self.opts["rtn"] in (1, 2, 3): ok = askQuestion(self.opts["mf"].body, head="New Loan", mess="Is This a New Loan?", default="no") if ok == "yes": self.newlon = True self.lonnum = getNextCode(self.sql, "lonmf2", "lm2_loan", where=[ ("lm2_cono", "=", self.allcoy), ("lm2_acno", "=", self.lonacc) ], start=1, last=9999999) self.df.loadEntry(frt, pag, p, data=self.lonnum) else: return "Invalid Loan Number" else: self.lonmf2 = self.sql.getRec("lonmf2", where=[ ("lm2_cono", "=", self.allcoy), ("lm2_acno", "=", self.lonacc), ("lm2_loan", "=", w) ], limit=1) if not self.lonmf2: return "Invalid Loan Number" self.lonnum = w self.londes = self.lonmf2[self.sql.lonmf2_col.index("lm2_desc")] self.londat = self.lonmf2[self.sql.lonmf2_col.index("lm2_start")] self.lonmth = self.lonmf2[self.sql.lonmf2_col.index("lm2_pmths")] self.lonpay = self.lonmf2[self.sql.lonmf2_col.index("lm2_repay")] if self.opts["rtn"] in (1, 3) and self.lonmth: showError( self.opts["mf"].body, "Fixed Loan", """This is a Fixed Period Loan. Please Create a New Loan for this Account.""") return "Invalid Loan Number" self.df.loadEntry(frt, pag, p + 1, data=self.londes) return "sk1" def doLonDes(self, frt, pag, r, c, p, i, w): self.londes = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnRef(self, frt, pag, r, c, p, i, w): self.refno = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if not self.newlon: self.londrt = 0 self.loncrt = 0 self.lonmth = 0 self.lonpay = 0 if self.opts["rtn"] in (1, 2): return "nd" else: return "sk4" def doLonDrt(self, frt, pag, r, c, p, i, w): self.londrt = w def doLonCrt(self, frt, pag, r, c, p, i, w): self.loncrt = w def doLonMth(self, frt, pag, r, c, p, i, w): self.lonmth = w if self.lonmth: rte = (self.londrt / 1200.0) self.lonpay = round( ((self.trnamt * rte) * ((1 + rte)**w)) / (((1 + rte)**w) - 1), 2) else: self.lonpay = 0 self.df.loadEntry(frt, pag, p + 1, data=self.lonpay) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.glint == "Y" and self.opts["rtn"] == 3: self.df.colf[2][4][5] = w def endPage1(self): self.batupd = False self.updateTables1() self.updateBatch() if not self.val: self.df.advanceLine(1) elif self.opts["rtn"] in (1, 2, 4) or self.glint == "N": self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.allocated = float(0.0) self.df.loadEntry("T", 2, 0, data=self.val) self.df.selPage("Allocation") self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.opts["rtn"] == 1: self.glt = 2 desc = "Loan Advance" self.val = self.trnamt elif self.opts["rtn"] == 2: self.glt = 6 desc = "Loan Repayment" self.val = float(ASD(0) - ASD(self.trnamt)) elif self.opts["rtn"] == 3: self.glt = 4 desc = self.trndet self.val = self.trnamt elif self.opts["rtn"] == 4: self.glt = 4 desc = self.trndet self.val = self.trnamt if self.newlon: # Loans Masterfile self.sql.insRec("lonmf2", data=[ self.opts["conum"], self.lonacc, self.lonnum, self.londes, self.trndat, self.lonmth, self.lonpay, 0 ]) # Loans Rate File self.sql.insRec("lonrte", data=[ self.opts["conum"], self.lonacc, self.lonnum, self.trndat, self.londrt, self.loncrt ]) # Loans Transaction File self.sql.insRec("lontrn", data=[ self.opts["conum"], self.lonacc, self.lonnum, self.bh.batno, self.opts["rtn"], self.trndat, self.refno, self.val, self.curdt, desc, "N", self.opts["capnm"], self.sysdtw, 0 ]) if self.glint == "N": return # General Ledger Loans Control Account data = (self.opts["conum"], self.lonctl, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, self.val, 0.00, self.name, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if self.opts["rtn"] in (1, 2, 4): # General Ledger Bank or Interest self.val = float(ASD(0) - ASD(self.val)) if self.opts["rtn"] in (1, 2): ctl = self.bh.acc elif self.val < 0: ctl = self.intrec else: ctl = self.intpay data = (self.opts["conum"], ctl, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, self.val, 0.00, "Loan - %s" % self.name, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doCoyNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", w)], limit=1) if not acc: return "Invalid Company, Missing" if self.incoac and w not in self.incoac: return "Invalid Company, No Intercompany Record 1" if w != self.opts["conum"]: acc = self.sql.getRec("genint", where=[("cti_cono", "=", w), ("cti_inco", "=", self.opts["conum"]) ], limit=1) if not acc: return "Invalid Company, No Intercompany Record 2" self.allcoy = w def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.allcoy, w) if type(chk) is str: return chk self.genacc = w self.df.loadEntry(frt, pag, p + 1, data=chk[0]) def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.val) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): ok = askQuestion(self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Transaction") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.allocated == self.val: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.val) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): val = float(ASD(0) - ASD(self.allamt)) # General Ledger Transaction (Allocation) data = (self.allcoy, self.genacc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.alldet, "", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany) if self.allcoy != self.opts["conum"]: # General Ledger Transaction (Intercompany From) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.opts["conum"]), ("cti_inco", "=", self.allcoy)], limit=1)[0] data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany To) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.allcoy), ("cti_inco", "=", self.opts["conum"]) ], limit=1)[0] val = float(ASD(0) - ASD(val)) data = (self.allcoy, acc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.val)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.val)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def querySln(self): callModule(self.opts["mf"], self.df, "ln4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"])
class dr4010(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): tables = [ "ctlrep", "ctlmes", "drsact", "drschn", "drsmst", "drstrn", "drstyp", "slsiv1" ] self.sql = Sql(self.opts["mf"].dbm, tables, 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"] self.fromad = drsctl["ctd_emadd"] self.paidup = "N" t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.curdt = int(self.sysdtw / 100) return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Debtors Interrogation (%s)" % self.__class__.__name__) drc = { "stype": "R", "tables": ("drschn", ), "cols": (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")), "where": [("chm_cono", "=", self.opts["conum"])] } ratings = {"N": "", "G": "", "F": "Fair", "P": "Poor", "B": "BAD!"} drm = { "stype": "R", "tables": ("drsmst", ), "cols": (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"), ("drm_add1", "", 0, "Address Line 1"), ("drm_rating", ("RR", ratings), 4, "RATE")), "where": [("drm_cono", "=", self.opts["conum"])] } if self.chains == "Y": drm["whera"] = [["T", "drm_chain", 0]] else: drm["where"].append(("drm_chain", "=", 0)) tag = (("Basic-_A", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Basic-_B", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Balances", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("History", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Trans", self.doTrans1, ("T", 0, 0), ("T", 0, 1)), ("Other", self.doOthers, ("T", 0, 0), ("T", 0, 1))) r1s = (("No", "N"), ("Yes", "Y")) fld = [[("T", 0, 0, 0), "IUI", 3, "Chain Store", "", "", "N", self.doChain, drc, None, ("efld", )], [("T", 0, 0, 0), "INA", 7, "Acc-Num", "Account Number", "", "N", self.doAcno, drm, None, ("notblank", )], [("T", 0, 0, 0), "ONA", 30, "Name"], [("T", 0, 0, 0), "INA", 7, "Acc-Num", "Account Number", "", "N", self.doAcno, drm, None, ("notblank", )], [("T", 0, 0, 0), "ONA", 30, "Name"], (("T", 1, 0, 0), "ONA", 30, "Name"), (("T", 1, 1, 0), "ONA", 30, "Address Line 1"), (("T", 1, 2, 0), "ONA", 30, "Address Line 2"), (("T", 1, 3, 0), "ONA", 30, "Address Line 3"), (("T", 1, 4, 0), "ONA", 4, "Postal Code"), (("T", 1, 5, 0), "ONA", 20, "Telephone"), (("T", 1, 6, 0), "ONA", 20, "Fax"), (("T", 1, 7, 0), "ONA", 30, "Manager"), (("T", 1, 7, 0), "OTX", 40, "E-Mail"), (("T", 1, 8, 0), "ONA", 30, "Accounts Contact"), (("T", 1, 8, 0), "OTX", 40, "E-Mail"), (("T", 1, 9, 0), "ONA", 30, "Sales Contact"), (("T", 1, 9, 0), "OTX", 40, "E-Mail"), (("T", 1, 10, 0), "Od1", 10, "Date Opened"), (("T", 1, 11, 0), "Od1", 10, "Date Registered"), (("T", 1, 12, 0), "ONA", 10, "V.A.T Number"), (("T", 1, 13, 0), "ONA", 7, "Delivery Code"), (("T", 1, 14, 0), "ONa", 3, "Rep Code"), (("T", 1, 14, 0), "ONA", 26, ""), (("T", 1, 15, 0), "ONA", 3, "Business Activity"), (("T", 1, 15, 0), "ONA", 26, ""), (("T", 1, 16, 0), "ONA", 3, "Business Type"), (("T", 1, 16, 0), "ONA", 26, ""), (("T", 2, 0, 0), "OUI", 1, "Price Level"), (("T", 2, 1, 0), "OUD", 5.2, "Discount Percentage"), (("T", 2, 2, 0), "OUD", 5.2, "Interest Percentage"), (("T", 2, 3, 0), "OUI", 3, "Referral Terms"), (("T", 2, 4, 0), "OUI", 3, "Rejected Terms"), (("T", 2, 5, 0), "OUI", 5, "Credit Limit"), (("T", 2, 6, 0), "OUA", 1, "Stop Indicator"), (("T", 2, 7, 0), "OUI", 3, "Invoice Message"), (("T", 2, 7, 0), "ONA", 40, ""), (("T", 2, 8, 0), "OUI", 3, "Statement Message"), (("T", 2, 8, 0), "ONA", 40, ""), (("T", 2, 9, 0), "OUA", 1, "Credit Rating"), (("T", 2, 10, 0), "OUA", 1, "Status"), (("T", 3, 0, 0), "Od1", 10, "Date Last Sale"), (("T", 3, 1, 0), "Od1", 10, "Date Last Paid"), (("T", 3, 2, 0), "OSD", 12.2, "Total Balance"), (("T", 3, 3, 0), "OSD", 12.2, "Current"), (("T", 3, 4, 0), "OSD", 12.2, "30 Days"), (("T", 3, 5, 0), "OSD", 12.2, "60 Days"), (("T", 3, 6, 0), "OSD", 12.2, "90 Days"), (("T", 3, 7, 0), "OSD", 12.2, "120 Days"), (("C", 4, 0, 0), "OSD", 13.2, "Sales", "", "", "N", None, None, None, None, ("Months", 13)), (("C", 4, 0, 1), "OSD", 13.2, "Receipts"), (("T", 5, 0, 0), ("IRB", r1s), 1, "History", "", "N", "N", self.doTrans2, None, None, None, None)] but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 0, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) tnd = ((self.doEndTop, "N"), None, None, None, None, None) txt = (self.doExit, None, None, None, None, self.doExit) if self.chains == "Y": del fld[3] del fld[3] else: del fld[0] del fld[0] del fld[0] self.chain = 0 self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) yer = int(self.sysdtw / 10000) mon = int((self.sysdtw % 10000) / 100) self.hist_tit = [] for x in range(1, 14): if x == 13: txt = "Last 12 Month Total" self.df.colLabel[4][x - 1].configure(text=txt) self.hist_tit.append(txt) else: nam = mthnam[mon][1] nam = nam + (" " * (15 - len(nam))) + str(yer) self.df.colLabel[4][x - 1].configure(text=nam) self.hist_tit.append(nam) if x != 13: mon = mon - 1 if mon == 0: mon = mon + 12 yer = yer - 1 def doChain(self, frt, pag, r, c, p, i, w): if w: acc = self.sql.getRec("drschn", where=[("chm_cono", "=", self.opts["conum"]), ("chm_chain", "=", w)], limit=1) if not acc: return "Invalid Chain Store" self.chain = w def doAcno(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("drsmst", where=[("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", self.chain), ("drm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.acno = w self.name = acc[self.sql.drsmst_col.index("drm_name")] self.df.loadEntry("T", pag, p + 1, data=acc[3]) d = 3 for pg in range(1, 3): for x in range(0, self.df.topq[pg]): if pg == 1 and x in (18, 20, 22, 24): continue if pg == 2 and x in (8, 10): continue if pg == 2 and x == 11 and not acc[d]: data = "N" else: data = acc[d] self.df.loadEntry("T", pg, x, data=data) d = d + 1 self.loadRep() self.loadAct() self.loadTyp() self.loadMes() self.loadBalances() self.opts["mf"].updateStatus("") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadRep(self): acc = self.sql.getRec("ctlrep", where=[("rep_cono", "=", self.opts["conum"]), ("rep_code", "=", self.df.t_work[1][0][17])], cols=["rep_name"], limit=1) if acc: self.df.loadEntry("T", 1, 18, data=acc[0]) def loadAct(self): acc = self.sql.getRec("drsact", where=[("dac_code", "=", self.df.t_work[1][0][19])], cols=["dac_desc"], limit=1) if acc: self.df.loadEntry("T", 1, 20, data=acc[0]) def loadTyp(self): acc = self.sql.getRec("drstyp", where=[("dtp_code", "=", self.df.t_work[1][0][21])], cols=["dtp_desc"], limit=1) if acc: self.df.loadEntry("T", 1, 22, data=acc[0]) def loadMes(self): acc = self.sql.getRec("ctlmes", where=[("mss_system", "=", "INV"), ("mss_message", "=", self.df.t_work[2][0][7])], cols=["mss_detail"], limit=1) if acc: self.df.loadEntry("T", 2, 8, data=acc[0]) acc = self.sql.getRec("ctlmes", where=[("mss_system", "=", "STA"), ("mss_message", "=", self.df.t_work[2][0][9])], cols=["mss_detail"], limit=1) if acc: self.df.loadEntry("T", 2, 10, data=acc[0]) def loadBalances(self): bals = Balances(self.opts["mf"], "DRS", self.opts["conum"], int(self.sysdtw / 100), (self.chain, self.acno)) obal, tbal, ages = bals.doAllBals() this, hist = bals.doCrsDrsHist() self.sale = hist[0] self.pays = hist[1] last = self.sql.getRec("drstrn", cols=["max(drt_trdt)"], where=[("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno), ("drt_type", "=", 1)], limit=1) if not last or not last[0]: lastsald = 0 else: lastsald = last[0] last = self.sql.getRec("drstrn", cols=["max(drt_trdt)"], where=[("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno), ("drt_type", "=", 5)], limit=1) if not last or not last[0]: lastpayd = 0 else: lastpayd = last[0] for x in range(0, 8): if x == 0: data = lastsald elif x == 1: data = lastpayd elif x == 2: data = tbal else: data = ages[x - 3] self.df.loadEntry("T", 3, x, data=data) p = 0 for x in range(0, 13): i = 0 self.df.loadEntry("C", 4, p, data=self.sale[x]) p = p + 1 i = i + 1 pay = float(ASD(0) - ASD(self.pays[x])) self.df.loadEntry("C", 4, p, data=pay) p = p + 1 i = i + 1 def doTagSelect(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 5, 1) def doTrans2(self, frt, pag, r, c, p, i, w): self.paidup = w whr = [("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno)] if self.paidup == "Y": col, recs = getTrn(self.opts["mf"].dbm, "drs", whr=whr) else: col, recs = getTrn(self.opts["mf"].dbm, "drs", dte=self.curdt, whr=whr) if recs: data = [] for dat in recs: data.append([ dat[col.index("drt_trdt")], dat[col.index("drt_curdt")], dat[col.index("drt_batch")], dat[col.index("drt_type")], dat[col.index("drt_ref1")], self.getRef2(col, dat), dat[col.index("drt_tramt")], dat[col.index("paid")], dat[col.index("balance")], dat[col.index("drt_desc")] ]) if self.chains == "Y": tit = "Transactions for Account: %s %s - %s" % \ (self.chain, self.acno, self.name) else: tit = "Transactions for Account: %s - %s" % \ (self.acno, self.name) col = (("drt_trdt", " Date", 10, "D1", "N"), ("drt_curdt", "Curr-Dt", 7, "D2", "N"), ("drt_batch", "Batch", 7, "Na", "N"), ("drt_type", "Typ", 3, ("XX", drtrtp), "N"), ("drt_ref1", "Reference", 9, "Na", "Y"), ("drt_ref2", "Ref-Number-Two", 14, "Na", "Y"), ("drt_tramt", " Amount", 13.2, "SD", "N"), ("alloc", " Allocated", 13.2, "SD", "N"), ("balan", " Balance", 13.2, "SD", "N"), ("drt_desc", "Details", 30, "NA", "N")) state = self.df.disableButtonsTags() while True: rec = SelectChoice(self.df.nb.Page5, tit, col, data) # If Invoice or Credit Note, attempt to display the document # else display all transaction details if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") if rec.selection[4] in (1, 4): if rec.selection[4] == 1: typ = "I" else: typ = "C" try: doc = int(rec.selection[5]) inv = self.sql.getRec("slsiv1", where=[("si1_cono", "=", self.opts["conum"]), ("si1_rtn", "=", typ), ("si1_docno", "=", doc)], limit=1) except: inv = [] else: inv = [] if inv: PrintInvoice(self.opts["mf"], self.opts["conum"], self.opts["conam"], typ, doc, repprt=["N", "V", "view"], copy="y") else: whr = [("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno), ("drt_type", "=", rec.selection[4]), ("drt_ref1", "=", rec.selection[5])] TabPrt(self.opts["mf"], tabs="drstrn", where=whr, pdia=False) self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) self.doTrans1() def getRef2(self, col, dat): dtyp = dat[col.index("drt_type")] ref1 = dat[col.index("drt_ref1")] ref2 = dat[col.index("drt_ref2")] if dtyp not in (1, 2): return ref2 try: doc = int(ref1) except: return ref2 if dtyp == 1: styp = "I" else: styp = "C" sls = self.sql.getRec("slsiv1", cols=["si1_our_ord", "si1_cus_ord"], where=[("si1_cono", "=", self.opts["conum"]), ("si1_rtn", "=", styp), ("si1_docno", "=", doc)], limit=1) if sls and sls[1].strip()[:9] == ref2.strip(): return sls[1] return ref2 def doOthers(self): si1 = self.sql.slsiv1_col wh1 = [("si1_cono", "=", self.opts["conum"]), ("si1_rtn", "in", ("Q", "O", "W")), ("si1_chain", "=", self.chain), ("si1_acno", "=", self.acno), ("si1_invno", "=", "")] recs = self.sql.getRec("slsiv1", where=wh1, order="si1_date") if recs: data = [] for dat in recs: wh2 = [("si2_cono", "=", self.opts["conum"]), ("si2_rtn", "=", dat[si1.index("si1_rtn")]), ("si2_docno", "=", dat[si1.index("si1_docno")])] si2 = self.sql.getRec("slsiv2", cols=[ "si2_disc_per", "si2_qty", "si2_price", "si2_vat_rate" ], where=wh2) incamt = 0 for dis, qty, pri, vat in si2: incrat = float(ASD(100.0) + ASD(vat)) incpri = round((pri * incrat / 100.0), 4) net = float(ASD(100.0) - ASD(dis)) inc = round((qty * incpri * net / 100.0), 2) incamt = float(ASD(incamt) + ASD(inc)) data.append([ dat[si1.index("si1_date")], dat[si1.index("si1_rtn")], dat[si1.index("si1_docno")], dat[si1.index("si1_cus_ord")], dat[si1.index("si1_jobno")], dat[si1.index("si1_contact")], incamt ]) tit = "Quotes and Orders for Account: %s - %s" % \ (self.acno, self.name) col = (("si1_date", " Date", 10, "D1", "N"), ("si1_rtn", "T", 1, "UA", "N"), ("si1_docno", "Doc-Numbr", 9, "UI", "N"), ("si1_cus_ord", "Cust-Ord-Num", 14, "Na"), ("si1_jobno", "Job-Num", 7, "Na"), ("si1_contact", "Contact", 30, "NA"), ("incamt", "Total-Value", 12.2, "SD")) state = self.df.disableButtonsTags() while True: rec = SelectChoice(self.df.nb.Page6, tit, col, data) # Attempt to display the document if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") typ = rec.selection[2] try: doc = int(rec.selection[3]) PrintInvoice(self.opts["mf"], self.opts["conum"], self.opts["conam"], typ, doc, repprt=["N", "V", "view"], copy="y") except: pass self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "DRS", "%03i%s" % (self.chain, self.acno)) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Basic-A") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = (("Information", "I"), ("Transactions", "T"), ("Both", "B"), ("None", "N")) self.doPrintOption( askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") if opt in ("I", "B"): tab = "drsmst" whr = [("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", self.chain), ("drm_acno", "=", self.acno)] rp = TabPrt(self.opts["mf"], self.opts["conum"], self.opts["conam"], name=self.__class__.__name__, tabs=tab, where=whr, keys=[self.chain, self.acno]) repprt = rp.repprt repeml = rp.repeml xits = rp.xits else: repprt = None repeml = None xits = False if opt in ("T", "B") and not xits: heads = ["Debtor's Transactions", "Chain: %s Account: %s Name: %s" % \ (self.chain, self.acno, self.name)] whr = [("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.acno)] if self.paidup == "Y": col, recs = getTrn(self.opts["mf"].dbm, "drs", whr=whr) else: col, recs = getTrn(self.opts["mf"].dbm, "drs", dte=self.curdt, whr=whr) cols = [] data = [] dic = self.sql.drstrn_dic for num, rec in enumerate(recs): dat = [] for nam in [ "drt_ref1", "drt_ref2", "drt_trdt", "drt_type", "drt_tramt", "paid", "balance", "drt_desc" ]: if not num: if nam == "drt_ref2": cols.append(["a", "Na", 14, "Ref-Number-Two"]) elif nam == "paid": cols.append(["paid", "SD", 13.2, "Paid"]) elif nam == "balance": cols.append(["balance", "SD", 13.2, "Balance"]) else: cols.append( [nam, dic[nam][2], dic[nam][3], dic[nam][5]]) if nam == "drt_ref2": dat.append(self.getRef2(col, rec)) else: dat.append(rec[col.index(nam)]) data.append(dat) if repprt: prtdia = False else: prtdia = (("Y", "V"), ("Y", "N")) rp = RepPrt(self.opts["mf"], conum=self.opts["conum"], conam=self.opts["conam"], name=self.__class__.__name__, ttype="D", tables=data, heads=heads, cols=cols, trtp=["drt_type", drtrtp], prtdia=prtdia, repprt=repprt, repeml=repeml, fromad=self.fromad) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class dr2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Check for Valid Posting Routine if self.opts["rtn"] not in (1, 3, 4, 5): showError(self.opts["mf"].body, "Control Error", "Invalid Routine %s, Only 1, 3, 4 and 5 Are Allowed" % \ str(self.opts["rtn"])) return # Create SQL Object self.sql = Sql(self.opts["mf"].dbm, ["ctlmst", "ctlvmf", "ctlvrf", "ctlvtf", "drschn", "drsmst", "drstrn", "genint", "genmst", "gentrn"], prog=self.__class__.__name__) if self.sql.error: return # Check for Intercompany Facility if not self.sql.getRec("ctlmst", cols=["count(*)"], where=[("ctm_cono", "<>", self.opts["conum"])], limit=1)[0]: self.incoac = False else: itg = self.sql.getRec("genint", cols=["cti_inco"], where=[("cti_cono", "=", self.opts["conum"])]) if itg: self.incoac = [self.opts["conum"]] [self.incoac.append(coy[0]) for coy in itg] else: self.incoac = False self.gc = GetCtl(self.opts["mf"]) drsctl = self.gc.getCtl("drsctl", self.opts["conum"]) if not drsctl: return self.glint = drsctl["ctd_glint"] self.glinp = drsctl["ctd_glinp"] self.chains = drsctl["ctd_chain"] if self.glint == "Y": ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = ["drs_ctl", "vat_ctl", "dis_all"] if self.gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.drsctl = ctlctl["drs_ctl"] self.dis_all = ctlctl["dis_all"] self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.allcoy = self.opts["conum"] ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] if self.chains == "N": self.chain = 0 if self.opts["rtn"] == 1: self.glt = 1 elif self.opts["rtn"] == 3: self.glt = 4 elif self.opts["rtn"] == 4: self.glt = 1 elif self.opts["rtn"] == 5: self.glt = 2 self.agevar = tk.BooleanVar() self.agevar.set(False) return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "DRS", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return if self.opts["rtn"] == 4: self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) def drawDialog(self): drc = { "stype": "R", "tables": ("drschn",), "cols": ( ("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")), "where": [("chm_cono", "=", self.opts["conum"])]} drm = { "stype": "R", "tables": ("drsmst",), "cols": ( ("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"), ("drm_add1", "", 0, "Address Line 1"))} if self.chains == "Y": drm["where"] = [("drm_cono", "=", self.opts["conum"])] drm["whera"] = [["C", "drm_chain", 0, 1]] else: drm["where"] = [ ("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", 0)] drm["where"].append(("drm_stat", "<>", "X")) coy = { "stype": "R", "tables": ("ctlmst",), "cols": ( ("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y"))} glm = { "stype": "R", "tables": ("genmst",), "cols": ( ("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "whera": [["C", "glm_cono", 0, 2]]} vtm = { "stype": "R", "tables": ("ctlvmf",), "cols": ( ("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])]} viw = { "stype": "R", "tables": ("drstrn",), "cols": ( ("drt_chain", "", 0, ""), ("drt_acno", "", 0, ""), ("drt_ref1", "", 0, ""), ("drt_trdt", "", 0, ""), ("drt_tramt", "", 0, ""), ("drt_taxamt", "", 0, "")), "where": [ ("drt_cono", "=", self.opts["conum"]), ("drt_type", "=", self.opts["rtn"]), ("drt_batch", "=", self.bh.batno)], "order": "drt_seq"} fld = [ (("T",0,0,0),"OUI",9,"Batch %s Quantity" % self.bh.batno), (("T",0,0,0),"OSD",13.2,"Value"), [("C",1,0,0),"IUI",3,"Chn","Chain Store", "r","Y",self.doChain,drc,None,("efld",)], [("C",1,0,1),"INA",7,"Acc-Num","Account Number", "r","N",self.doDrsAcc,drm,None,("notblank",)], [("C",1,0,2),"ONA",10,"Name"], (("C",1,0,3),"INa",9,"Reference","Reference Number One", "i","N",self.doRef1,None,None,("notblank",)), (("C",1,0,4),"ID1",10,"Date","Transaction Date", "r","N",self.doTrnDat,None,None,("efld",)), (("C",1,0,5),"ISD",13.2,"Amount","Transaction Amount", "","N",self.doTrnAmt,None,None,("efld",))] if self.opts["rtn"] == 5: fld[4][2] = 20 fld.extend([ [["C",1,0,6],"ISD",13.2,"Discount", "Discount Amount","","N",self.doDisAmt,None,None,None,None, "Discout Amount to be Added to the Transaction Amount"], [["C",1,0,7],"OSD",13.2,"Total-Amount"], [["C",1,0,8],"INA",(20,30),"Details","Transaction Details", "","N",self.doTrnDet,None,None,None]]) elif self.glint == "Y": if self.glinp == "E": tx1 = "Exc-Amount" tx2 = "Exclusive Amount" else: tx1 = "Inc-Amount" tx2 = "Inclusive Amount" fld[4][2] = 24 fld.extend([ [["C",1,0,6],"INA",30,"Details","Transaction Details", "","N",self.doTrnDet,None,None,None], [("T",2,0,0),"OSD",13.2,"Unallocated Balance"], [("C",2,0,0),"IUI",3,"Coy","Company Number", self.opts["conum"],"N",self.doCoyNum,coy,None,None], (("C",2,0,1),"IUI",7,"Acc-Num","Account Number", "","N",self.doGenAcc,glm,None,None), (("C",2,0,2),"ONA",19,"Description"), (("C",2,0,3),"IUA",1,"V","V.A.T Code", self.taxdf,"N",self.doVatCode2,vtm,None,("notblank",)), (("C",2,0,4),"ISD",13.2,tx1,tx2, "","N",self.doAllAmt,None,None,("efld",)), (("C",2,0,5),"ISD",13.2,"V.A.T","V.A.T Amount", "","N",self.doAllVat,None,None,None), [("C",2,0,6),"INA",(26,30),"Details","", "","N",self.doAllDet,None,None,("notblank",)]]) if not self.incoac: fld[10][1] = "OUI" else: fld[4][2] = 22 fld.extend([ (("C",1,0,6),"IUA",1,"V","V.A.T Code", self.taxdf,"N",self.doVatCode1,vtm,None,("notblank",)), (("C",1,0,7),"ISD",13.2,"V.A.T","V.A.T Amount", "","N",self.doVatAmt,None,None,None), [["C",1,0,8],"INA",(20,30),"Details","Transaction Details", "","N",self.doTrnDet,None,None,None]]) if self.chains == "N": fld[2][1] = "OUI" idx = 2 else: idx = 1 but = ( ("Interrogate",None,self.queryDrs,0,("C",1,idx),("C",1,idx+1), "Interrogate Debtors Records",1), ("View Entries",viw,None,0,("C",1,idx),("C",1,idx+1), "View Batch Transactions",1), ("Maintain",None,self.maintainDrs,0,("C",1,idx),("C",1,idx+1), "Maintain Debtors Records",1), ("Canc_el",None,self.doCancel,0,("C",2,1),("C",1,1), "Cancel the Entry",1), ("Age _Normal",None,self.doAgeNormal,0,None,None, "Only Show Unallocated Transactions",2), ("Age _History",None,self.doAgeHistory,0,None,None, "Show All Transactions Including Already Allocated",2), ("Age _Automatic",None,self.doAgeAuto,0,None,None, "Automatically Allocate the Amount Starting With the "\ "Oldest Unallocated One",2), ("Age _Current",None,self.doAgeCurrent,0,None,None, "Leave the Transaction Unallocated",2)) tag = [("Transaction", None, None, None, False)] cnd = [(None,"n"), (self.endPage1,"y")] cxt = [None, self.exitPage1] if self.opts["rtn"] != 5 and self.glint == "Y": tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2,"y")) cxt.append(self.exitPage2) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doChain(self, frt, pag, r, c, p, i, w): if w: acc = self.sql.getRec("drschn", cols=["chm_chain"], where=[("chm_cono", "=", self.opts["conum"]), ("chm_chain", "=", w)], limit=1) if not acc: return "Invalid Chain Store" self.chain = w def doDrsAcc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("drsmst", cols=["drm_name", "drm_stat"], where=[("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", self.chain), ("drm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" if acc[1] == "X": return "Invalid Account, Redundant" self.dracno = w self.name = acc[0] self.df.loadEntry("C", pag, p+1, data=self.name) def doRef1(self, frt, pag, r, c, p, i, w): self.ref1 = w acc = self.sql.getRec("drstrn", cols=["drt_batch"], where=[("drt_cono", "=", self.opts["conum"]), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.dracno), ("drt_type", "=", self.opts["rtn"]), ("drt_ref1", "=", self.ref1)], limit=1) if acc: return "Transaction Already Exists" def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if self.glint == "Y" or self.opts["rtn"] == 5: self.vatcode = "N" self.vatamt = 0 def doVatCode1(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" self.vatcode = w self.vatamt = round((self.trnamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p+1, self.vatamt) if not self.vatamt: return "sk1" def doVatAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.vatamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.vatamt = float(ASD(0) - ASD(w)) else: self.vatamt = w self.df.loadEntry(frt, pag, p, data=self.vatamt) def doDisAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.disamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.disamt = float(ASD(0) - ASD(w)) else: self.disamt = w self.df.loadEntry(frt, pag, p, data=self.disamt) totamt = float(ASD(self.trnamt) + ASD(self.disamt)) self.df.loadEntry(frt, pag, p+1, data=totamt) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.opts["rtn"] != 5 and self.glint == "Y": self.df.colf[2][6][5] = w self.allocated = float(0.00) def endPage1(self): self.cancel = False self.agecan = False self.batupd = False self.updateTables1() if self.cancel: return else: self.updateBatch() if self.trnamt == 0: self.df.advanceLine(1) else: self.allocated = float(0.0) if self.opts["rtn"] == 5 or self.glint == "N": self.doDrsTrn() self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt self.amt = self.trnamt self.vat = self.vatamt if self.opts["rtn"] == 1: # Invoices recon = 0 self.dis = 0.00 elif self.opts["rtn"] == 3: # Journals recon = 0 self.dis = 0.00 elif self.opts["rtn"] == 4: # Credit Notes recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.vat = float(ASD(0) - ASD(self.vat)) self.dis = 0.00 elif self.opts["rtn"] == 5: # Payments if self.trnamt == 0: recon = self.curdt else: recon = 0 self.vat = 0.00 self.dis = self.disamt if self.opts["rtn"] == 1: self.doAgeCurrent() else: state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Choose an Ageing Option") for x in range(4, 8): if self.opts["rtn"] == 3 and x == 6: continue wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "normal") self.df.setWidget(self.df.B4, "focus") self.agevar.set(True) self.df.mstFrame.wait_variable(self.agevar) self.df.enableButtonsTags(state=state) if self.agecan: self.doCancel() return if self.glint == "N": return # General Ledger Control Transaction (Debtors) val = float(ASD(self.amt) + ASD(self.dis)) data = (self.opts["conum"], self.drsctl, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Bank) if self.opts["rtn"] == 5: val = float(ASD(0) - ASD(self.amt)) data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Discount) if self.dis: val = float(ASD(0) - ASD(self.dis)) data = (self.opts["conum"], self.dis_all, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, val, 0.00, self.trndet, "N", "", recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def doAgeNormal(self): self.doAgeing("N") def doAgeHistory(self): self.doAgeing("H") def doAgeAuto(self): self.doAgeing("O") def doAgeCurrent(self): self.doAgeing("C") def doAgeing(self, atype): # Disable All Ageing Buttons for x in range(4, 8): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "disabled") self.opts["mf"].updateStatus("Select Transaction to Allocate Against") age = AgeAll(self.opts["mf"], system="drs", agetyp=atype, agekey=[self.opts["conum"], self.chain, self.dracno, self.opts["rtn"], self.ref1, self.curdt, self.amt, self.dis]) self.agecan = age.cancel if self.agevar.get(): self.agevar.set(False) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doCoyNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", w)], limit=1) if not acc: return "Invalid Company, Missing" if self.incoac and w not in self.incoac: return "Invalid Company, No Intercompany Record 1" if w != self.opts["conum"]: acc = self.sql.getRec("genint", where=[("cti_cono", "=", w), ("cti_inco", "=", self.opts["conum"])], limit=1) if not acc: return "Invalid Company, No Intercompany Record 2" self.allcoy = w def doGenAcc(self, frt, pag, r, c, p, i, w): chk = chkGenAcc(self.opts["mf"], self.allcoy, w) if type(chk) is str: return chk if not chk[2]: self.taxgl = self.taxdf else: self.taxgl = chk[2] self.genacc = w self.df.loadEntry("C", pag, p+1, chk[0]) self.df.loadEntry("C", pag, p+2, data=self.taxgl) def doVatCode2(self, frt, pag, r, c, p, i, w): ctlctl = self.gc.getCtl("ctlctl", self.allcoy, error=False) if not ctlctl: return "Missing ctlctl Record for Company" if self.gc.chkRec(self.opts["conum"], ctlctl, ["vat_ctl"]): return "Missing or Invalid Control Record" self.convat = ctlctl["vat_ctl"] self.vatrte = getVatRate(self.sql, self.allcoy, w, self.trndat) if self.vatrte is None: return "Invalid V.A.T Code" self.vatcode = w def doAllAmt(self, frt, pag, r, c, p, i, w): if not w: incamt = float(ASD(self.trnamt) - ASD(self.allocated)) elif self.glinp == "E": incamt = round((w * (100 + self.vatrte) / 100), 2) else: incamt = w self.allamt = round((incamt * 100 / (100 + self.vatrte)), 2) self.allvat = float(ASD(incamt) - ASD(self.allamt)) if self.glinp == "E": self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.df.loadEntry(frt, pag, p, data=incamt) self.df.loadEntry(frt, pag, p+1, data=self.allvat) if not self.allvat: self.df.loadEntry(frt, pag, p+2, data=self.name) return "sk1" def doAllVat(self, frt, pag, r, c, p, i, w): if (self.allamt < 0 and w > 0) or (self.allamt > 0 and w < 0): w = float(ASD(0) - ASD(w)) if self.glinp == "I" and w != self.allvat: self.allamt = float(ASD(self.allamt) + ASD(self.allvat) - ASD(w)) self.allvat = w self.df.loadEntry(frt, pag, p, data=self.allvat) self.df.loadEntry(frt, pag, p+1, data=self.name) def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): if self.agecan: ok = "yes" else: ok = askQuestion(self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.cancel = True self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) if self.glint == "Y" and self.opts["rtn"] != 5: self.df.clearFrame("C", 2) row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.selPage("Transaction") self.df.focusField("C", 1, col) def endPage2(self): self.updateTables2() self.allocated = float(ASD(self.allocated) + \ ASD(self.allamt) + ASD(self.allvat)) if self.allocated == self.trnamt: self.doDrsTrn() self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.opts["rtn"] == 1: # Invoices self.credit() elif self.opts["rtn"] == 3: # Journals self.credit() elif self.opts["rtn"] == 4: # Credit Notes self.debit() def debit(self): amt = self.allamt vat = self.allvat self.restDebitCredit(amt, vat) def credit(self): amt = float(ASD(0) - ASD(self.allamt)) vat = float(ASD(0) - ASD(self.allvat)) self.restDebitCredit(amt, vat) def restDebitCredit(self, amt, vat): # VAT Transaction (ctlvtf) data = (self.allcoy, self.vatcode, "O", self.curdt, "D", self.opts["rtn"], self.bh.batno, self.ref1, self.trndat, self.dracno, self.alldet, amt, vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "N": return # General Ledger Transaction (Allocation) data = (self.allcoy, self.genacc, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, amt, vat, self.alldet, self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany) if self.allcoy != self.opts["conum"]: # General Ledger Transaction (Intercompany From) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.opts["conum"]), ("cti_inco", "=", self.allcoy)], limit=1)[0] val = float(ASD(amt) + ASD(vat)) data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany To) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.allcoy), ("cti_inco", "=", self.opts["conum"])], limit=1)[0] val = float(ASD(0) - ASD(amt) - ASD(vat)) data = (self.allcoy, acc, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if vat: # General Ledger Control Transaction (V.A.T.) data = (self.allcoy, self.convat, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, vat, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) self.vat = float(ASD(self.vat) + ASD(vat)) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def doDrsTrn(self): # Debtors Ledger Transaction data = [self.opts["conum"], self.chain, self.dracno, self.opts["rtn"], self.ref1, self.bh.batno, self.trndat, "", self.amt, self.vat, self.curdt, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0] self.sql.insRec("drstrn", data=data) if not self.dis: return data = [self.opts["conum"], self.chain, self.dracno, 6, self.ref1, self.bh.batno, self.trndat, "", self.dis, self.vat, self.curdt, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0] self.sql.insRec("drstrn", data=data) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def queryDrs(self): callModule(self.opts["mf"], self.df, "dr4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"]) def maintainDrs(self): callModule(self.opts["mf"], self.df, "dr1010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"])
class ms1010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["ctlmst", "ctlynd", "ctlvmf", "ctlvrf", "chglog"], prog=self.__class__.__name__) if self.sql.error: return cnt = self.sql.getRec("ctlmst", cols=["count(*)"], limit=1) if not cnt[0]: self.first = True else: self.first = False self.img = None return True def mainProcess(self): self.tit = ("Company Records File Maintenance", ) ctm = { "stype": "R", "tables": ("ctlmst", ), "cols": (("ctm_cono", "", 0, "Num"), ("ctm_name", "", 0, "Name", "Y")) } log = {"stype": "F", "types": "fle", "ftype": (("Image", "*"), )} r1s = (("Yes", "Y"), ("No", "N")) tag = (("General", None, ("T", 1, 2), ("T", 1, 1)), ("Banking", None, ("T", 1, 2), ("T", 1, 1)), ("Systems", None, ("T", 1, 2), ("T", 1, 1)), ("Logo", None, ("T", 1, 2), ("T", 1, 1))) fld = [[("T", 1, 0, 0), "IUI", 3, "Company Number", "Number", "", "Y", self.doCoyNum, ctm, None, ("notzero", )], (("T", 1, 1, 0), "INA", 30, "Name", "Company Name", "", "N", self.doCoyNam, None, self.doDelete, ("notblank", )), (("T", 1, 2, 0), "INA", 30, "Postal Address Line-1", "Address Line-1", "", "N", None, None, None, None), (("T", 1, 3, 0), "INA", 30, " Line-2", "Address Line-2", "", "N", None, None, None, None), (("T", 1, 4, 0), "INA", 30, " Line-3", "Address Line-3", "", "N", None, None, None, None), (("T", 1, 5, 0), "INA", 4, "Postal Code", "", "", "N", None, None, None, None), (("T", 1, 6, 0), "INA", 30, "Street Address Line-1", "Street Address Line-1", "", "N", None, None, None, None), (("T", 1, 7, 0), "INA", 30, " Line-2", "Address Line-2", "", "N", None, None, None, None), (("T", 1, 8, 0), "INA", 30, " Line-3", "Address Line-3", "", "N", None, None, None, None), (("T", 1, 9, 0), "INA", 4, "Street Code", "", "", "N", None, None, None, None), (("T", 1, 10, 0), "INA", 30, "Contact Name", "", "", "N", None, None, None, None), (("T", 1, 11, 0), "INA", 15, "Telephone", "Telephone No", "", "N", None, None, None, None), (("T", 1, 12, 0), "INA", 15, "Facsimile", "Facsimile No", "", "N", None, None, None, None), (("T", 1, 13, 0), "INA", 15, "Mobile", "Mobile Number", "", "N", None, None, None, None), (("T", 1, 14, 0), "ITX", 50, "E-Mail Address", "", "", "N", None, None, None, ("email", )), (("T", 1, 15, 0), "ITX", 50, "Internet URL", "", "", "N", None, None, None, ("efld", )), (("T", 1, 16, 0), "INA", 20, "Registration No", "", "", "N", None, None, None, None), (("T", 1, 17, 0), "INA", 20, "V.A.T. Number", "", "", "N", self.doVatNum, None, None, None), (("T", 1, 18, 0), "IUA", 1, "V.A.T. Default", "", "", "N", self.doVatCod, None, None, ("notblank", )), (("T", 2, 0, 0), "INA", 30, "Bank Name", "", "", "N", None, None, None, None), (("T", 2, 1, 0), "INA", 30, "Bank Branch", "", "", "N", None, None, None, None), (("T", 2, 2, 0), "INA", 8, "Bank IBT", "Bank IBT Number", "", "N", None, None, None, None), (("T", 2, 3, 0), "INA", 16, "Bank Account", "Bank Account Number", "", "N", None, None, None, None)] pos = 1 self.sys = [] for x in range(len(allsys)): for sss in allsys: if allsys[sss][3] == pos: self.sys.append(allsys[sss][1]) fld.append( (("T", 3, pos, 0), ("IRB", r1s), 0, allsys[sss][0], "", "N", "N", None, None, None, None)) pos += 1 fld.append((("T", 4, 0, 0), "IFF", 75, "Letterhead Image", "", "", "N", self.doLogo, log, None, ("fle", "blank"))) but = (("Accept", None, self.doAccept, 0, ("T", 1, 2), (("T", 1, 1), ("T", 4, 0))), ("Print", None, self.doPrint, 0, ("T", 1, 2), (("T", 1, 1), ("T", 4, 0))), ("Cancel", None, self.doCancel, 0, ("T", 1, 2), (("T", 1, 1), ("T", 4, 0))), ("Quit", None, self.doExit1, 1, None, None)) tnd = (None, (self.doEnd, "n"), (self.doEnd, "n"), (self.doEnd, "n"), (self.doEnd, "y")) txt = (None, self.doExit1, self.doExit2, self.doExit3, self.doExit4) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt, clicks=self.doClick) if self.first: self.opts["conum"] = 1 self.new = True self.df.topf[1][0][1] = "OUI" self.df.loadEntry("T", 1, 0, data=self.opts["conum"]) self.df.focusField("T", 1, 2) def doClick(self, *opts): if self.df.pag == 1 and self.df.col == 1: return self.df.focusField("T", opts[0][0], opts[0][1] + 1) def doCoyNum(self, frt, pag, r, c, p, i, w): if w == 0: return "Invalid Company Number" elif w != 1: chk = self.sql.getRec("ctlmst", where=[("ctm_cono", "=", 1)], limit=1) if not chk: return "Company 1 Must First Exist" self.opts["conum"] = w self.old = self.sql.getRec("ctlmst", where=[("ctm_cono", "=", self.opts["conum"]) ], limit=1) if not self.old: self.new = True else: self.new = False self.opts["conam"] = self.old[self.sql.ctlmst_col.index( "ctm_name")] for x in range(1, self.df.topq[pag]): data = self.old[x] self.df.loadEntry(frt, pag, x, data=data) for x in range(0, self.df.topq[pag + 1]): data = self.old[x + self.df.topq[pag]] self.df.loadEntry(frt, pag + 1, x, data=data) for x in range(0, self.df.topq[pag + 2]): self.df.loadEntry(frt, pag + 2, x, data="N") mods = self.old[self.sql.ctlmst_col.index("ctm_modules")].rstrip() for x in range(0, len(mods), 2): idx = self.sys.index(mods[x:x + 2]) self.df.loadEntry(frt, pag + 2, idx, data="Y") self.logo = self.old[self.sql.ctlmst_col.index("ctm_logo")] self.df.loadEntry(frt, pag + 3, 0, data=self.logo) if self.logo: self.displayLogo(self.logo) def doDelete(self): if self.opts["conum"] == 1: showError(self.opts["mf"].body, "Deletion Error", "Company 1 Cannot be Deleted") return err = False skp = { "ctlmst": "ctm_cono", "ctlynd": "cye_cono", "ctlvmf": "vtm_cono", "ctlvrf": "vtr_cono" } for tab in tabdic: if tab in skp: continue chk = tabdic[tab]["fld"][0][1] if chk.count("_cono"): sql = Sql(self.opts["mf"].dbm, tab, prog=self.__class__.__name__) err = sql.getRec(tables=tab, where=[(chk, "=", self.opts["conum"])]) if err: break if err: showError(self.opts["mf"].body, "Deletion Error", "%s Records Exist for This Company, Cannot Delete" % tab) return for tab in skp: self.sql.delRec(tab, where=[(skp[tab], "=", self.opts["conum"])]) self.opts["mf"].dbm.commitDbase(ask=True) def doCoyNam(self, frt, pag, r, c, p, i, w): self.opts["conam"] = w chk = self.sql.getRec("ctlvmf", where=[("vtm_cono", "=", self.opts["conum"])], limit=1) if not chk: self.sql.insRec("ctlvmf", data=[self.opts["conum"], "N", "No VAT", "N"]) self.sql.insRec("ctlvrf", data=[self.opts["conum"], "N", 0, 0]) def doVatNum(self, frt, pag, r, c, p, i, w): self.vatnum = w if not self.vatnum: self.vat = "N" self.df.loadEntry(frt, pag, p + 1, data=self.vat) return "sk1" def doVatCod(self, frt, pag, r, c, p, i, w): self.vat = w acc = self.doReadVat(self.vat) if not acc: ok = askQuestion( self.opts["mf"].body, "VAT Code", "This Code Does Not Exist, Do You Want to Create It?") if ok == "no": return "Invalid Code" state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") callModule(self.opts["mf"], None, "ms1040", coy=(self.opts["conum"], self.opts["conam"]), user=self.opts["capnm"], args=self.vat) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) acc = self.doReadVat(self.vat) if not acc: self.df.loadEntry(frt, pag, p, data="") return "Invalid Code" def doLogo(self, frt, pag, r, c, p, i, w): if not w: if self.img: self.img.destroyImage() else: self.logo = os.path.normpath(w) if self.displayLogo(self.logo): return "Invalid Logo Image" self.df.loadEntry(frt, pag, p, data=self.logo) def displayLogo(self, logo): try: if self.img: try: self.img.destroyImage() except: pass self.img = ShowImage(self.df.nb.Page4, logo, wrkdir=self.opts["mf"].rcdic["wrkdir"], msiz=640) except: return "error" def doReadVat(self, w): acc = self.sql.getRec("ctlvmf", cols=["vtm_desc"], where=[("vtm_cono", "=", self.opts["conum"]), ("vtm_code", "=", w)], limit=1) return acc def doEnd(self): if self.df.pag == 1: self.df.selPage("Banking") self.df.focusField("T", 2, 1) elif self.df.pag == 2: self.df.selPage("Systems") self.df.focusField("T", 3, 1) elif self.df.pag == 3: self.df.selPage("Logo") self.df.focusField("T", 4, 1) else: data = [] mods = "" for x in range(0, len(self.df.t_work[1][0])): data.append(self.df.t_work[1][0][x]) for x in range(0, len(self.df.t_work[2][0])): data.append(self.df.t_work[2][0][x]) fin = False for x in range(0, len(self.df.t_work[3][0])): if self.df.t_work[3][0][x] == "Y": mod = self.sys[x] if mod not in ("BC", "BS", "SC"): fin = True mods = mods + mod data.append(mods) data.extend(self.df.t_work[4][0][0:2]) if self.new: self.sql.insRec("ctlmst", data=data) elif data != self.old[:len(data)]: col = self.sql.ctlmst_col data.append(self.old[col.index("ctm_xflag")]) self.sql.updRec("ctlmst", data=data, where=[("ctm_cono", "=", self.opts["conum"])]) 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=[ "ctlmst", "U", "%03i" % self.opts["conum"], col[num], dte, self.opts["capnm"], str(dat), str(data[num]), "", 0 ]) if fin: # Financial Systems ynd = self.sql.getRec("ctlynd", cols=["count(*)"], where=[("cye_cono", "=", self.opts["conum"])], limit=1) if not ynd[0]: self.doFinPeriod() if self.xits == "y": self.doCancel() return True self.opts["mf"].dbm.commitDbase() if self.first: self.doExit1() else: self.df.selPage("General") self.df.focusField("T", 1, 1) def doFinPeriod(self): tit = ("Initial Financial Period", ) fld = ((("T", 0, 0, 0), "ID1", 10, "Period Start Date", "", "", "N", self.doStartPer, None, None, ("efld", )), (("T", 0, 1, 0), "ID1", 10, "Period End Date", "", "", "N", self.doEndPer, None, None, ("efld", ))) tnd = ((self.doPerEnd, "y"), ) txt = (self.doPerExit, ) state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") self.pf = TartanDialog(self.opts["mf"], title=tit, tops=True, eflds=fld, tend=tnd, txit=txt) self.pf.mstFrame.wait_window() self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) self.opts["mf"].head.configure(text=self.tit[0]) def doStartPer(self, frt, pag, r, c, p, i, w): y = int(w / 10000) - 1 m = int((w % 10000) / 100) if m == 2: if not y % 4: d = 29 else: d = 28 else: d = w % 100 self.s0 = (y * 10000) + (m * 100) + d self.s1 = w y = int(w / 10000) + 1 m -= 1 if not m: m = 12 y -= 1 self.pf.t_work[0][0][1] = mthendDate((y * 10000) + (m * 100) + 1) def doEndPer(self, frt, pag, r, c, p, i, w): if w <= self.s1: return "Invalid End Period" y = int(w / 10000) - 1 m = int((w % 10000) / 100) if m == 2: if not y % 4: d = 29 else: d = 28 else: d = w % 100 self.e0 = (y * 10000) + (m * 100) + d self.e1 = w def doPerEnd(self): self.sql.insRec("ctlynd", data=[self.opts["conum"], 0, self.s0, self.e0, 0, "N"]) self.sql.insRec("ctlynd", data=[self.opts["conum"], 1, self.s1, self.e1, 0, "N"]) self.xits = "n" self.closeProcess() def doPerExit(self): self.xits = "y" self.closeProcess() def closeProcess(self): self.pf.closeProcess() def doAccept(self): for page in range(4): frt, pag, col, mes = self.df.doCheckFields(("T", page + 1, None)) if mes: break if mes: self.df.last[pag][0] = col + 1 self.df.selPage(self.df.tags[pag - 1][0]) self.df.focusField(frt, pag, (col + 1), err=mes) else: mod = False for x in range(len(self.df.t_work[3][0])): if self.df.t_work[3][0][x] == "Y": mod = True break if not mod: self.df.selPage("Systems") self.df.focusField("T", 3, 1, err="Missing System Module") else: if self.img: self.img.destroyImage() self.df.selPage("Logo") self.df.doEndFrame("T", 4, cnf="N") def doPrint(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") TabPrt(self.opts["mf"], self.opts["conum"], name=self.__class__.__name__, tabs="ctlmst", where=[("ctm_cono", "=", self.opts["conum"])]) 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.selPage("General") self.df.focusField("T", 1, 1) def doExit1(self): self.df.closeProcess() self.opts["mf"].closeLoop() def doExit2(self): self.df.selPage("General") def doExit3(self): self.df.selPage("Banking") def doExit4(self): self.df.selPage("Systems")
class cs2010(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"]) ctlmst = gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] if not self.taxdf: self.taxdf = "N" cshctl = gc.getCtl("cshctl", self.opts["conum"]) if not cshctl: return self.glint = cshctl["ccc_glint"] if self.glint == "Y": tabs = ["genmst"] else: tabs = ["cshmst"] tabs.extend(["cshana", "cshcnt"]) self.sql = Sql(self.opts["mf"].dbm, tables=tabs, prog=self.__class__.__name__) if self.sql.error: return if self.glint == "Y": self.ctl = [["csh_ctl", "Cash Control", 0]] ctlctl = gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return for num, ctl in enumerate(self.ctl): if ctl[0] in ctlctl: self.ctl[num][2] = ctlctl[ctl[0]] t = time.localtime() self.sysdtw = ((t[0] * 10000) + (t[1] * 100) + t[2]) self.denoms = (("R200", 200), ("R100", 100), ("R50", 50), ("R20", 20), ("R10", 10), ("R5", 5), ("R2", 2), ("R1", 1), ("C50", .5), ("C20", .2), ("C10", .1), ("C5", .05), ("C2", .02), ("C1", .01)) return True def mainProcess(self): tag = (("Expenses", None, None, None, False), ("Income", None, None, None, False), ("Cash", None, None, None, False)) dte = { "stype": "R", "tables": ("cshcnt", ), "cols": (("cct_date", "", 0, "Date"), ), "where": [("cct_cono", "=", self.opts["conum"])], "group": "cct_date" } if self.glint == "Y": self.cod = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])], "order": "glm_acno" } else: self.cod = { "stype": "R", "tables": ("cshmst", ), "cols": (("ccm_acno", "", 0, "Acc-Num"), ("ccm_desc", "", 0, "Description", "Y")), "where": [("ccm_cono", "=", self.opts["conum"])], "order": "ccm_acno" } des = { "stype": "R", "tables": ("cshana", ), "cols": (("can_desc", "", 0, "Description", "Y"), ("can_vatcod", "", 0, "V")), "where": [("can_cono", "=", self.opts["conum"])], "whera": (("C", "can_code", 1, 1), ), "group": "can_desc", "order": "can_desc" } r1s = (("Expenses", "P"), ("Income", "T"), ("Cash", "C")) fld = ((("T", 0, 0, 0), ("IRB", r1s), 0, "Type", "", "P", "N", self.doType, None, None, None), (("T", 0, 1, 0), "I@cct_date", 0, "", "", self.sysdtw, "N", self.doDate, dte, None, ("efld", )), (("T", 0, 2, 0), "OSD", 13.2, "Expenses Total"), (("T", 0, 3, 0), "OSD", 13.2, "Income Total"), (("T", 0, 4, 0), "OSD", 13.2, "Cash Total"), (("C", 1, 0, 0), "I@can_trdt", 0, "", "", "", "N", None, None, None, ("efld", )), (("C", 1, 1, 0), "I@can_code", 0, "", "", "", "N", self.doCode, self.cod, None, None), (("C", 1, 2, 0), "I@can_desc", 0, "", "", "", "N", self.doDesc, des, None, ("notblank", )), (("C", 1, 3, 0), "I@can_vatcod", 0, "", "", "N", "N", self.doVCode, None, None, ("notblank", )), (("C", 1, 4, 0), "I@can_incamt", 0, "", "", "", "N", self.doIncAmt, None, None, ("efld", )), (("C", 1, 5, 0), "I@can_vatamt", 0, "", "", "", "N", None, None, None, ("efld", )), (("C", 2, 0, 0), "I@can_trdt", 0, "", "", "", "N", None, None, None, ("efld", )), (("C", 2, 1, 0), "I@can_code", 0, "", "", "", "N", self.doCode, self.cod, None, None), (("C", 2, 2, 0), "I@can_desc", 0, "", "", "", "N", self.doDesc, des, None, ("notblank", )), (("C", 2, 3, 0), "I@can_vatcod", 0, "", "", "N", "N", self.doVCode, None, None, ("notblank", )), (("C", 2, 4, 0), "I@can_incamt", 0, "", "", "", "N", self.doIncAmt, None, None, ("efld", )), (("C", 2, 5, 0), "I@can_vatamt", 0, "", "", "", "N", None, None, None, ("efld", )), (("T", 3, 0, 0), "ISD", 13.2, "Cheques", "", "", "N", self.doCheq, None, None, ("efld", )), (("C", 3, 0, 0), "IUI", 5, "Quant", "Quantity", 0, "N", self.doQty, None, None, None, ("Denomination", 14)), (("C", 3, 1, 0), "OSD", 13.2, "Value", "", "", "N", None, None, None, ("efld", ))) tnd = ((self.doTopEnd, "y"), None, None, (self.doTopEnd, "n")) txt = (self.doTopExit, None, None, None) cnd = (None, (self.doColEnd, "y"), (self.doColEnd, "y"), (self.doColEnd, "n")) cxt = (None, self.doColExit, self.doColExit, self.doColExit) but = (("Accept", None, self.doColExit, 0, (("C", 1, 1), ("C", 2, 1)), (("C", 1, 2), ("C", 2, 2))), ("Edit", None, self.doEdit, 0, (("C", 1, 1), ("C", 2, 1)), (("C", 1, 2), ("C", 2, 2))), ("Quit", None, self.doQuit, 0, ("T", 0, 0), ("T", 0, 1))) self.df = TartanDialog(self.opts["mf"], tags=tag, eflds=fld, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but, focus=False) for x in range(14): self.df.colLabel[3][x].configure(text=self.denoms[x][0]) self.df.focusField("T", 0, 1) def doType(self, frt, pag, r, c, p, i, w): self.trtp = w self.edit = None self.amend = False self.loader = False self.etotal = 0 self.itotal = 0 self.ctotal = 0 def doDate(self, frt, pag, r, c, p, i, w): self.date = w rec = self.sql.getRec("cshana", where=[("can_cono", "=", self.opts["conum"]), ("can_type", "=", "P"), ("can_date", "=", self.date)]) if rec and self.trtp == "P": self.amend = True for rr in rec: self.etotal = float(ASD(self.etotal) + ASD(rr[7])) self.df.loadEntry(frt, pag, p + 1, data=self.etotal) rec = self.sql.getRec("cshana", where=[("can_cono", "=", self.opts["conum"]), ("can_type", "=", "T"), ("can_date", "=", self.date)]) if rec and self.trtp == "T": self.amend = True for rr in rec: self.itotal = float(ASD(self.itotal) + ASD(rr[7])) self.df.loadEntry(frt, pag, p + 2, data=self.itotal) self.rec = self.sql.getRec("cshcnt", where=[("cct_cono", "=", self.opts["conum"]), ("cct_type", "=", "T"), ("cct_date", "=", self.date)], limit=1) if self.rec and self.trtp == "C": self.amend = True if self.amend: return "nc" def doCode(self, frt, pag, r, c, p, i, w): if self.glint == "N" and not w: ok = askQuestion(self.opts["mf"].body, "Code Maintenance", "Do You Want to Add or Edit Codes?", default="no") if ok == "no": return "rf" w = callModule(self.opts["mf"], self.df, "cs1010", coy=[self.opts["conum"], self.opts["conam"]], user=self.opts["capnm"], args=True, ret="acno") self.df.loadEntry(frt, pag, p, data=w) if self.glint == "Y": acc = self.sql.getRec("genmst", cols=["glm_desc", "glm_vat"], where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", w)], limit=1) else: acc = self.sql.getRec("cshmst", cols=["ccm_desc", "ccm_vat"], where=[("ccm_cono", "=", self.opts["conum"]), ("ccm_acno", "=", w)], limit=1) if not acc: return "Invalid Code" self.code = w self.vcod = acc[1] self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doDesc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("cshana", cols=["can_vatcod"], where=[("can_cono", "=", self.opts["conum"]), ("can_code", "=", self.code), ("can_desc", "=", w)], order="can_date desc", limit=1) if acc: self.df.loadEntry(frt, pag, p + 1, data=acc[0]) else: self.df.loadEntry(frt, pag, p + 1, data=self.vcod) def doVCode(self, frt, pag, r, c, p, i, w): self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.date) if self.vatrte is None: ask = askQuestion(self.opts["mf"].body, "New Code", "Code Does Not Exist, Create a New Code?", default="no") if ask == "no": return "Invalid VAT Code" w = callModule(self.opts["mf"], self.df, "ms1040", coy=[self.opts["conum"], self.opts["conam"]], user=self.opts["capnm"], args=w, ret="code") self.df.loadEntry(frt, pag, p, data=w) self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.date) if self.vatrte is None: return "Invalid VAT Code" def doIncAmt(self, frt, pag, r, c, p, i, w): self.iamt = w if self.vatrte: vat = self.iamt * self.vatrte / float(ASD(100) + ASD(self.vatrte)) self.df.loadEntry(frt, pag, p + 1, data=round(vat, 2)) else: self.df.loadEntry(frt, pag, p + 1, data=0) if not self.loader: return "sk1" def doCheq(self, frt, pag, r, c, p, i, w): self.ctotal = w self.df.loadEntry("T", 0, 4, data=self.ctotal) def doQty(self, frt, pag, r, c, p, i, w): val = w * self.denoms[int(p / 2)][1] self.df.loadEntry(frt, pag, p + 1, val) self.ctotal = float(ASD(self.ctotal) + ASD(val)) self.df.loadEntry("T", 0, 4, data=self.ctotal) def doEdit(self): if self.df.pag in (1, 2): self.doEditPage12() else: self.doEditPage3() def doEditPage12(self): ana = self.sql.getRec("cshana", where=[("can_cono", "=", self.opts["conum"]), ("can_type", "=", self.trtp), ("can_date", "=", self.date)]) data = [] for rec in ana: dat = [] for n, d in enumerate(rec): if n in (0, 1, 2, 9): continue dat.append(d) data.append(dat) titl = "Analysis" head = ("Date", "Code", "Description", "V", "Inc-Amount", "VAT-Amount", "Seq") lin = { "stype": "C", "titl": titl, "head": head, "typs": (("D1", 10), ("UI", 7), ("NA", 30), ("UA", 1), ("SD", 13.2), ("SD", 13.2), ("UA", 1), ("US", 10)), "data": data } state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Select a Line to Edit") chg = self.df.selChoice(lin) if chg and chg.selection: self.edit = self.sql.getRec("cshana", where=[("can_seq", "=", chg.selection[-1])], limit=1) self.doChgChanges() else: self.edit = None self.doLoadAnalysis() self.df.enableButtonsTags(state=state) def doChgChanges(self): tit = ("Change Line", ) fld = ((("T", 0, 0, 0), "I@can_trdt", 10, "", "", "", "N", self.doChgDate, None, None, ("efld", )), (("T", 0, 1, 0), "I@can_code", 0, "", "", "", "N", None, self.cod, None, None), (("T", 0, 2, 0), "I@can_desc", 0, "", "", "", "N", None, None, None, ("efld", )), (("T", 0, 3, 0), "I@can_vatcod", 0, "", "", "", "N", self.doChgVCode, None, None, ("efld", )), (("T", 0, 4, 0), "I@can_incamt", 0, "", "", "", "N", self.doChgIncAmt, None, None, ("efld", )), (("T", 0, 5, 0), "I@can_vatamt", 0, "", "", "", "N", None, None, None, ("efld", ))) but = [["Delete", None, self.doChgDel, 1, None, None]] self.cg = TartanDialog(self.opts["mf"], title=tit, tops=True, eflds=fld, butt=but, tend=((self.doChgEnd, "n"), ), txit=(self.doChgExit, ), focus=False) for num, dat in enumerate(self.edit[3:9]): self.cg.loadEntry("T", 0, num, data=dat) self.cg.focusField("T", 0, 1, clr=False) self.cg.mstFrame.wait_window() def doChgDate(self, frt, pag, r, c, p, i, w): self.chgdte = w def doChgVCode(self, frt, pag, r, c, p, i, w): self.vatrte = getVatRate(self.sql, self.opts["conum"], w, self.chgdte) if self.vatrte is None: return "Invalid VAT Code" def doChgIncAmt(self, frt, pag, r, c, p, i, w): self.iamt = w if self.vatrte: vat = self.iamt * self.vatrte / float(ASD(100) + ASD(self.vatrte)) self.cg.loadEntry(frt, pag, p + 1, data=round(vat, 2)) else: self.cg.loadEntry(frt, pag, p + 1, data=0) return "sk1" def doChgDel(self): self.sql.delRec("cshana", data=self.edit) self.doChgExit() def doChgEnd(self): self.sql.delRec("cshana", data=self.edit) for num, fld in enumerate(self.cg.t_work[0][0]): self.edit[num + 3] = fld self.sql.insRec("cshana", data=self.edit) self.opts["mf"].dbm.commitDbase() self.doChgExit() def doChgExit(self): self.cg.closeProcess() def doEditPage3(self): titl = "Denominations" data = [] for num, rec in enumerate(self.df.c_work[3]): data.append([self.denoms[num][0], rec[0], rec[1]]) lin = { "stype": "C", "deco": True, "titl": titl, "head": ("Denom", "Qty", "Value"), "typs": (("NA", 4), ("UI", 5), ("SD", 13.2)), "data": data, "retn": "I" } state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Select a Denomination to Edit") chg = self.df.selChoice(lin) self.df.enableButtonsTags(state=state) if chg and chg.selection: self.edit = self.df.col qty, val = self.df.c_work[3][chg.selection[0]] self.ctotal = float(ASD(self.ctotal) - ASD(val)) self.df.focusField("C", 3, (chg.selection[0] * 2) + 1) else: self.edit = None self.df.focusField("C", 3, self.df.col) def doTopEnd(self): if self.df.pag == 0: if self.trtp == "P": self.df.selPage("Expenses") if self.amend: self.doLoadAnalysis() else: self.df.focusField("C", 1, 1) elif self.trtp == "T": self.df.selPage("Income") if self.amend: self.doLoadAnalysis() else: self.df.focusField("C", 2, 1) else: self.df.selPage("Cash") if not self.amend: self.df.focusField("T", 3, 1) else: self.doLoadCash() elif self.df.pag == 3: self.df.focusField("C", 3, 1) def doColEnd(self): if self.trtp in ("P", "T"): if self.trtp == "P": data = [self.opts["conum"], self.trtp, self.date] data.extend(self.df.c_work[1][self.df.row]) data.append("N") self.sql.insRec("cshana", data=data) self.etotal = float(ASD(self.etotal) + ASD(self.iamt)) self.df.loadEntry("T", 0, 2, data=self.etotal) self.df.advanceLine(1) else: data = [self.opts["conum"], self.trtp, self.date] data.extend(self.df.c_work[2][self.df.row]) data.append("N") self.sql.insRec("cshana", data=data) self.itotal = float(ASD(self.itotal) + ASD(self.iamt)) self.df.loadEntry("T", 0, 3, data=self.itotal) self.df.advanceLine(2) else: if self.df.col == 28: ask = askQuestion(self.opts["mf"].body, "Accept", "Accept All Entries") if ask == "yes": data = [self.opts["conum"], "T", self.date] data.append(self.df.t_work[3][0][0]) for x in range(14): data.append(self.df.c_work[3][x][0]) if self.amend: self.sql.delRec("cshcnt", where=[("cct_cono", "=", self.opts["conum"]), ("cct_type", "=", "T"), ("cct_date", "=", self.date)]) self.sql.insRec("cshcnt", data=data) self.opts["mf"].dbm.commitDbase() self.doRestart() else: self.df.focusField("T", 3, 1, clr=False) elif self.edit: col = self.edit self.edit = None self.df.focusField("C", 3, col) else: self.df.advanceLine(self.df.pag) def doLoadCash(self): self.df.doInvoke(["T", 3, 1, self.doCheq], self.rec[3]) for num, qty in enumerate(self.rec[4:-1]): col = (num * 2) + 1 self.df.doInvoke(["C", 3, col, self.doQty], qty) def doLoadAnalysis(self): self.loader = True total = 0 if self.trtp == "P": pag = 1 else: pag = 2 self.df.clearFrame("C", pag) ana = self.sql.getRec("cshana", where=[("can_cono", "=", self.opts["conum"]), ("can_type", "=", self.trtp), ("can_date", "=", self.date)], order="can_seq") if not ana: self.df.focusField("C", pag, 1) else: for num, rec in enumerate(ana): if num > 14: num = 14 for pos, dat in enumerate(rec[3:9]): col = (num * 6) + pos + 1 if pos == 3: self.df.doInvoke(["C", pag, col, self.doVCode], dat) elif pos == 4: self.df.doInvoke(["C", pag, col, self.doIncAmt], dat) else: self.df.doInvoke(["C", pag, col, "rt"], dat) total = float(ASD(total) + ASD(self.iamt)) self.df.advanceLine(pag) if self.trtp == "P": self.etotal = total self.df.loadEntry("T", 0, 2, data=self.etotal) else: self.itotal = total self.df.loadEntry("T", 0, 3, data=self.itotal) self.loader = False def doQuit(self): self.opts["mf"].dbm.rollbackDbase() self.doRestart() def doTopExit(self): self.df.closeProcess() self.opts["mf"].closeLoop() def doColExit(self): if self.df.pag != 3: self.opts["mf"].dbm.commitDbase() self.doRestart() elif self.df.pos: self.df.loadEntry("C", 3, self.df.pos, data=self.df.c_work[3][self.df.row][self.df.idx]) r = self.df.row - 1 c = self.df.col - 2 self.ctotal = float( ASD(self.ctotal) - ASD(self.df.c_work[3][r][1])) self.df.focusField("C", 3, c) def doRestart(self): self.df.clearFrame("C", 1) self.df.clearFrame("C", 2) self.df.clearFrame("T", 3) self.df.clearFrame("C", 3) self.df.selPage("Expenses") self.df.focusField("T", 0, 1, clr=True)
class ar4010(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, ["assctl", "assgrp", "assdep", "assmst", "asstrn"], prog=self.__class__.__name__) if self.sql.error: return self.gc = GetCtl(self.opts["mf"]) assctl = self.gc.getCtl("assctl", self.opts["conum"]) if not assctl: return self.glint = assctl["cta_glint"] self.rordp = assctl["cta_rordp"] t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) self.sper = int(self.opts["period"][1][0] / 100) self.eper = int(self.opts["period"][2][0] / 100) return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Asset Register Interrogation (%s)" % self.__class__.__name__) grp = { "stype": "R", "tables": ("assgrp", ), "cols": (("asg_group", "", 0, "Grp"), ("asg_desc", "", 0, "Description", "Y")), "where": [("asg_cono", "=", self.opts["conum"])] } cod = { "stype": "R", "tables": ("assmst", ), "cols": (("asm_code", "", 0, "Code"), ("asm_desc", "", 0, "Description", "Y")), "where": [("asm_cono", "=", self.opts["conum"])], "whera": (("T", "asm_group", 0, 0), ) } tag = (("Depreciation", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Balances", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Transactions", self.doTrans1, ("T", 0, 0), ("T", 0, 1))) r1s = (("Straight Line", "S"), ("Balance", "D"), ("None", "N")) r2s = (("Yes", "Y"), ("No", "N")) fld = [(("T", 0, 0, 0), "IUA", 3, "Group", "Asset Group", "", "N", self.doGroup, grp, None, ("notblank", )), (("T", 0, 0, 0), "INa", 7, "Code", "Asset Code", "", "N", self.doCode, cod, None, ("notblank", )), (("T", 0, 0, 0), "ONA", 30, "Description"), (("T", 1, 0, 0), "ONa", 3, "Dep Code"), (("T", 1, 0, 0), "ONA", 40, ""), (("T", 1, 1, 0), ("ORB", r1s[:-1]), 0, "Company Type"), (("T", 1, 2, 0), ("ORB", r1s), 0, "Receiver Type")] if self.rordp == "Y": fld.extend([(("C", 1, 0, 0), "OUD", 15.2, "Company-Rate", "", "", "N", None, None, None, None, ("Period", 7)), (("C", 1, 0, 1), "OUD", 15.2, "Receiver-Rate")]) else: fld.append((("C", 1, 0, 0), "OUD", 15.2, "Rate", "", "", "N", None, None, None, None, ("Period", 7))) fld.extend([(("T", 2, 0, 0), "Od1", 10, "Date of Purchase"), (("T", 2, 0, 0), "OSD", 15.2, "Purchase Price")]) if self.rordp == "Y": fld.extend([(("C", 2, 0, 0), "OSD", 15.2, "Company-Value", "", "", "N", None, None, None, None, ("Details", 7)), (("C", 2, 0, 1), "OSD", 15.2, "Receiver-Value")]) else: fld.append((("C", 2, 0, 0), "OSD", 15.2, "Value", "", "", "N", None, None, None, None, ("Details", 7))) fld.append((("T", 3, 0, 0), ("IRB", r2s), 0, "History", "", "N", "N", self.doTrans2, None, None, None)) but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 0, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) tnd = ((self.doEndTop, "N"), None, None, None) txt = (self.doExit, None, None, self.doExit) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) for x in range(7): self.df.colLabel[1][x].configure(text="Year %s" % (x + 1)) self.df.colLabel[2][0].configure(text="Opening Book Value") self.df.colLabel[2][1].configure(text="Purchases ") self.df.colLabel[2][2].configure(text="Improvements ") self.df.colLabel[2][3].configure(text="Write Offs ") self.df.colLabel[2][4].configure(text="Depreciation ") self.df.colLabel[2][5].configure(text="Sales ") self.df.colLabel[2][6].configure(text="Closing Book Value") def doGroup(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("assgrp", where=[("asg_cono", "=", self.opts["conum"]), ("asg_group", "=", w)], limit=1) if not acc: return "Invalid Asset Group" self.group = w def doCode(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("assmst", cols=["asm_desc", "asm_depcod"], where=[("asm_cono", "=", self.opts["conum"]), ("asm_group", "=", self.group), ("asm_code", "=", w)], limit=1) if not acc: return "Asset Does Not Exist" self.code = w self.desc = acc[0] self.df.loadEntry(frt, pag, p + 1, data=self.desc) dep = self.sql.getRec("assdep", where=[("asd_cono", "=", self.opts["conum"]), ("asd_code", "=", acc[1])], limit=1) for x in range(self.df.topq[1]): self.df.loadEntry("T", 1, x, data=dep[x + 1]) if self.rordp == "Y": for y in range(14): self.df.loadEntry("C", 1, y, data=dep[x + y + 2]) else: p = 5 for y in range(7): self.df.loadEntry("C", 1, y, data=dep[p]) p += 2 self.loadBalances() self.opts["mf"].updateStatus("") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadBalances(self): bals = Balances(self.opts["mf"], "ASS", self.opts["conum"], self.sper, keys=(self.group, self.code)) asset = bals.doAssBals(start=self.sper, end=self.eper, trans="C") if not asset: return cap, cdp, rdp, cbl, rbl, mov, trn = asset dte = self.sql.getRec("asstrn", cols=["min(ast_date)"], where=[("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code), ("ast_mtyp", "=", 1)], limit=1) if dte[0]: val = self.sql.getRec("asstrn", cols=["ast_amt1"], where=[("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code), ("ast_mtyp", "=", 1), ("ast_date", "=", dte[0])], limit=1) self.df.loadEntry("T", 2, 0, data=dte[0]) self.df.loadEntry("T", 2, 1, data=val[0]) self.df.loadEntry("C", 2, 0, data=cbl) if self.rordp == "Y": self.df.loadEntry("C", 2, 1, data=rbl) else: self.df.loadEntry("C", 2, 1, data=0) if mov: for n, c, r in mov: if self.rordp == "Y": p = n * 2 else: p = n cbl = float(ASD(cbl) + ASD(c)) if self.rordp == "Y": rbl = float(ASD(rbl) + ASD(r)) self.df.loadEntry("C", 2, p, data=c) if self.rordp == "Y": self.df.loadEntry("C", 2, p + 1, data=r) if self.rordp == "Y": self.df.loadEntry("C", 2, 12, data=cbl) self.df.loadEntry("C", 2, 13, data=rbl) else: self.df.loadEntry("C", 2, 6, data=cbl) def doTagSelect(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 3, 1) def doTrans2(self, frt, pag, r, c, p, i, w): tit = "Transactions for Item: %s %s - %s" % \ (self.group, self.code, self.desc) dat, atc, col = self.getTrans(hist=w) if dat: state = self.df.disableButtonsTags() while True: rec = SelectChoice(self.df.nb.Page3, tit, atc, dat) if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") whr = [("ast_seq", "=", rec.selection[len(col)])] TabPrt(self.opts["mf"], tabs="asstrn", where=whr, pdia=False) self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) self.doTrans1() def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "ASS", "%3s%s" % (self.group, self.code)) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Depreciation") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = (("Balances", "B"), ("Transactions", "T"), ("Both", "A"), ("None", "N")) self.doPrintOption( askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") if self.rordp == "Y": self.head = "%03u %-93s" % (self.opts["conum"], self.opts["conam"]) else: self.head = "%03u %-77s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pglin = 999 if opt != "T": self.pageHeading() self.printInfo() if opt == "B": self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "A": dat, atc, col = self.getTrans() if not dat: self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) else: self.pageHeading() self.pageHeadingTrans() self.printTrans(dat, atc) self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "T": dat, atc, col = self.getTrans() if dat: self.pageHeading() self.pageHeadingTrans() self.printTrans(dat, atc) self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) def printInfo(self): for x in range(0, len(self.df.topf[0])): self.fpdf.drawText( "%-15s%-30s %s" % ("", self.df.topf[0][x][3], self.df.t_disp[0][0][x])) self.fpdf.drawText() self.fpdf.drawText( "%-15s%-30s %s" % ("", self.df.topf[1][0][3], self.df.t_disp[1][0][0])) self.fpdf.drawText("%-15s%-30s %s" % ("", "Dep Description", self.df.t_disp[1][0][1])) self.fpdf.drawText() self.fpdf.drawText("%-15s%-30s %s" % ("", "Date of Purchase", self.df.t_disp[2][0][0])) self.fpdf.drawText("%-15s%-30s %s" % ("", "Cost of Purchase", self.df.t_disp[2][0][1])) self.fpdf.drawText() self.pglin += 3 + len(self.df.topf[1]) self.fpdf.setFont(style="B") if self.rordp == "Y": self.fpdf.drawText("%15s%-30s %15s %15s" % \ ("", "Details", "Company ", "Receiver ")) self.fpdf.underLine(txt="%15s%s" % ("", self.fpdf.suc * 61)) else: self.fpdf.drawText("%15s%-30s %15s" % \ ("", "Details", "Balances ")) self.fpdf.underLine(txt="%15s%s" % ("", self.fpdf.suc * 45)) self.fpdf.setFont() desc = ("Opening Book Value", "Purchases ", "Improvements ", "Write Offs ", "Depreciation ", "Sales ", "Closing Book Value") for n, d in enumerate(self.df.c_disp[2]): if n == 6: if self.rordp == "Y": self.fpdf.underLine(txt="%15s%s" % ("", self.fpdf.suc * 61)) else: self.fpdf.underLine(txt="%15s%s" % ("", self.fpdf.suc * 45)) if self.rordp == "Y": self.fpdf.drawText("%15s%-30s %15s %15s" % (" ", desc[n][:30], d[0], d[1])) else: self.fpdf.drawText("%15s%-30s %15s" % (" ", desc[n][:30], d[0])) def printTrans(self, trn, atc): for ct in trn: trdt = CCD(ct[0], "D1", 10) ref1 = CCD(ct[5], "Na", 9) trtp = CCD(ct[3], "UI", 1) batch = CCD(ct[2], "Na", 7) mtyp = CCD(ct[4], "UI", 1) amt1 = CCD(ct[6], "SD", 15.2) if self.rordp == "Y": amt2 = CCD(ct[7], "SD", 15.2) detail = CCD(ct[8], "NA", 30) else: detail = CCD(ct[7], "NA", 30) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingTrans() if self.rordp == "Y": self.fpdf.drawText( "%s %s %s %s %s %s %s %s" % (trdt.disp, ref1.disp, artrtp[(trtp.work - 1)][0], batch.disp, armvtp[(mtyp.work - 1)][0], amt1.disp, amt2.disp, detail.disp)) else: self.fpdf.drawText( "%s %s %s %s %s %s %s" % (trdt.disp, ref1.disp, artrtp[(trtp.work - 1)][0], batch.disp, armvtp[(mtyp.work - 1)][0], amt1.disp, detail.disp)) self.pglin += 1 def pageHeading(self): self.fpdf.add_page() self.fpdf.setFont(style="B") self.fpdf.drawText(self.head) self.fpdf.drawText() if self.rordp == "Y": self.fpdf.drawText( "%-35s %-61s" % ("Assets Register Interrogation as at", self.sysdtd)) else: self.fpdf.drawText( "%-35s %-45s" % ("Assets Register Interrogation as at", self.sysdtd)) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 6 def pageHeadingTrans(self): self.fpdf.setFont(style="B") self.fpdf.drawText() self.fpdf.drawText( "%-5s %-10s %s %s %-5s %s %s" % ("", "", self.df.topf[0][0][3], self.df.t_disp[0][0][0], "", self.df.topf[0][1][3], self.df.t_disp[0][0][1])) self.fpdf.drawText() if self.rordp == "Y": self.fpdf.drawText("%-10s %-9s %-3s %-7s %3s %-15s %-15s %-30s" % \ (" Date", "Reference", "Typ", "Batch", "Mov", " Amount-1", " Amount-2", "Remarks")) else: self.fpdf.drawText("%-10s %-9s %-3s %-7s %3s %-15s %-30s" % \ (" Date", "Reference", "Typ", "Batch", "Mov", " Amount-1", "Remarks")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 8 def getTrans(self, hist="Y"): if self.rordp == "Y": col = ("ast_date", "ast_curdt", "ast_batch", "ast_type", "ast_mtyp", "ast_refno", "ast_amt1", "ast_amt2", "ast_desc", "ast_seq") else: col = ("ast_date", "ast_curdt", "ast_batch", "ast_type", "ast_mtyp", "ast_refno", "ast_amt1", "ast_desc", "ast_seq") atc = [("ast_date", " Date", 10, "D1", "N"), ("ast_curdt", "Curr-Dt", 7, "D2", "N"), ("ast_batch", "Batch", 7, "Na", "N"), ("ast_type", "Typ", 3, ("XX", artrtp), "N"), ("ast_mtyp", "Mov", 3, ("XX", armvtp), "N"), ("ast_refno", "Reference", 9, "Na", "Y"), ("ast_amt1", " Amount-1", 15.2, "SD", "N")] if self.rordp == "Y": atc.append(("ast_amt2", " Amount-2", 15.2, "SD", "N")) atc.extend([("ast_desc", "Details", 30, "NA", "N"), ("ast_seq", "Sequence", 8, "UI", "N")]) whr = [("ast_cono", "=", self.opts["conum"]), ("ast_group", "=", self.group), ("ast_code", "=", self.code), ("ast_curdt", "<=", self.eper)] if hist == "N": whr.append(("ast_curdt", ">=", self.sper)) odr = "ast_date, ast_refno" dat = self.sql.getRec("asstrn", cols=col, where=whr, order=odr) return dat, atc, col def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class cr2010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Check for Valid Posting Routine if self.opts["rtn"] not in (1, 2, 3, 4, 5): showError(self.opts["mf"].body, "Control Error", "Invalid Routine %s, Only 1 - 5 Are Allowed" % \ str(self.opts["rtn"])) return # Create SQL Object self.sql = Sql(self.opts["mf"].dbm, [ "ctlmst", "ctlvmf", "ctlvrf", "ctlvtf", "crsmst", "crstrn", "genint", "genmst", "gentrn", "lonmf1", "lonmf2", "lonrte", "lontrn", "wagedc", "wagmst", "waglmf", "wagltf" ], prog=self.__class__.__name__) if self.sql.error: return # Check for Company record self.gc = GetCtl(self.opts["mf"]) self.allcoy = self.opts["conum"] self.allnam = self.opts["conam"] ctlmst = self.gc.getCtl("ctlmst", self.allcoy) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] # Check for Intercompany Facility if not self.sql.getRec("ctlmst", cols=["count(*)"], where=[("ctm_cono", "<>", self.opts["conum"])], limit=1)[0]: self.incoac = False else: rec = self.sql.getRec("genint", cols=["cti_inco"], where=[("cti_cono", "=", self.opts["conum"]) ]) if rec: self.incoac = [self.opts["conum"]] [self.incoac.append(coy[0]) for coy in rec] else: self.incoac = False # Get Enabled Modules self.lonmod = False self.lonpag = None self.slnmod = False self.slnpag = None for x in range(0, len(ctlmst["ctm_modules"].rstrip()), 2): if ctlmst["ctm_modules"][x:x + 2] == "LN": self.lonmod = True elif ctlmst["ctm_modules"][x:x + 2] == "SL": self.slnmod = True # Rest of Controls crsctl = self.gc.getCtl("crsctl", self.opts["conum"]) if not crsctl: return self.glint = crsctl["ctc_glint"] self.glinp = crsctl["ctc_glinp"] if self.glint == "Y": self.ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not self.ctlctl: return ctls = ["crs_ctl", "vat_ctl", "dis_rec"] if self.gc.chkRec(self.opts["conum"], self.ctlctl, ctls): return self.crsctl = self.ctlctl["crs_ctl"] self.disrec = self.ctlctl["dis_rec"] # Batch Header self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] if self.opts["rtn"] == 1: self.glt = 5 elif self.opts["rtn"] == 2: self.glt = 6 elif self.opts["rtn"] == 3: self.glt = 4 elif self.opts["rtn"] == 4: self.glt = 5 elif self.opts["rtn"] == 5: self.glt = 2 self.agevar = tk.BooleanVar() self.othvar = tk.BooleanVar() self.agevar.set(False) self.othvar.set(False) return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "CRS", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return def drawDialog(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")] } coy = { "stype": "R", "tables": ("ctlmst", ), "cols": (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y")) } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "whera": [("C", "glm_cono", 0, 2)] } vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } if self.opts["rtn"] in (1, 4) and self.lonmod: lm1 = { "stype": "R", "tables": ("lonmf1", ), "cols": (("lm1_acno", "", 0, "Acc-Num"), ("lm1_name", "", 0, "Name", "Y")), "whera": [("C", "lm1_cono", 0, 2)] } lm2 = { "stype": "R", "tables": ("lonmf2", ), "cols": (("lm2_loan", "", 0, "Ln"), ("lm2_desc", "", 0, "Description", "Y")), "whera": [("C", "lm2_cono", 0, 2), ("C", "lm2_acno", 0)] } if self.opts["rtn"] in (1, 4) and self.slnmod: wgm = { "stype": "R", "tables": ("wagmst", ), "cols": (("wgm_empno", "", 0, "EmpNo"), ("wgm_sname", "", 0, "Surname", "Y"), ("wgm_fname", "", 0, "Names")), "whera": [("C", "wgm_cono", 0, 2)] } lnm = { "stype": "R", "tables": ("waglmf", ), "cols": (("wlm_loan", "", 0, "Ln"), ("wlm_desc", "", 0, "Description", "Y")), "where": [("wlm_cono", "=", self.opts["conum"])], "whera": [("C", "wgm_cono", 0, 2), ("C", "wlm_empno", 0)] } ced = { "stype": "R", "tables": ("wagedc", ), "cols": (("ced_type", "", 0, "T"), ("ced_code", "", 0, "Cde"), ("ced_desc", "", 0, "Description", "Y")), "where": [("ced_type", "=", "D")], "whera": [("C", "wgm_cono", 0, 2)], "index": 1 } viw = { "stype": "R", "tables": ("crstrn", ), "cols": (("crt_acno", "", 0, ""), ("crt_ref1", "", 0, ""), ("crt_trdt", "", 0, ""), ("crt_tramt", "", 0, ""), ("crt_taxamt", "", 0, "")), "where": [("crt_cono", "=", self.opts["conum"]), ("crt_type", "=", self.opts["rtn"]), ("crt_batch", "=", self.bh.batno)], "order": "crt_seq", "comnd": self.doView } fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "INA", 7, "Acc-Num", "Account Number", "r", "Y", self.doCrsAcc, crm, None, None), [("C", 1, 0, 1), "ONA", 10, "Name"], (("C", 1, 0, 2), "INa", 9, "Reference", "Reference Number One", "i", "N", self.doRef1, None, None, ("notblank", )), (("C", 1, 0, 3), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 4), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, None)] if self.opts["rtn"] in (2, 5): fld[3][2] = 22 fld.extend([ (("C", 1, 0, 5), "ISD", 13.2, "Discount", "Discount Amount", "", "N", self.doDisAmt, None, None, None, None, "Discount Amount to be Added to the Transaction Amount."), (("C", 1, 0, 6), "OSD", 13.2, "Total-Amount"), [("C", 1, 0, 7), "INA", (22, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None] ]) elif self.glint == "Y": if self.glinp == "E": tx1 = "Exc-Amount" tx2 = "Exclusive Amount" else: tx1 = "Inc-Amount" tx2 = "Inclusive Amount" fld[3][2] = 30 fld.extend([(("C", 1, 0, 5), "INA", (27, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None), [("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"], [("C", 2, 0, 0), "IUI", 3, "Coy", "Company Number", self.opts["conum"], "N", self.doCoyNum, coy, None, None], (("C", 2, 0, 1), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doGenAcc, glm, None, None), (("C", 2, 0, 2), "ONA", 19, "Description"), (("C", 2, 0, 3), "IUA", 1, "V", "V.A.T Code", "", "N", self.doVatCode2, vtm, None, ("notblank", )), (("C", 2, 0, 4), "ISD", 13.2, tx1, tx2, "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 5), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N", self.doAllVat, None, None, None), (("C", 2, 0, 6), "INA", (26, 30), "Details", "", "", "N", self.doAllDet, None, None, ("notblank", ))]) if not self.incoac: fld[9][1] = "OUI" nxt = 3 if self.opts["rtn"] in (1, 4) and self.lonmod: fld.extend([ (("T", nxt, 0, 0), "OSD", 13.2, "Unallocated Balance"), (("C", nxt, 0, 0), "IUA", 7, "Acc-Num", "Account Number", 0, "N", self.doLonAcc, lm1, None, None), (("C", nxt, 0, 1), "ONA", 30, "Name"), (("C", nxt, 0, 2), "IUI", 2, "Ln", "Loan Number", "", "N", self.doLonNum, lm2, None, None), (("C", nxt, 0, 3), "INA", 30, "Description", "", "", "N", self.doLonDes, None, None, ("notblank", )), (("C", nxt, 0, 4), "ISD", 13.2, "Amount", "", "", "N", self.doLonAmt, None, None, ("efld", )), (("C", nxt, 0, 5), "IUD", 6.2, "DRte-%", "Debit Rate", "", "N", self.doLonDri, None, None, None), (("C", nxt, 0, 6), "IUD", 6.2, "CRte-%", "Credit Rate", "", "N", self.doLonDri, None, None, None), (("C", nxt, 0, 7), "IUI", 3, "Mth", "Period in Months", "", "N", self.doLonMth, None, None, ("efld", )), (("C", nxt, 0, 8), "OUD", 12.2, "Repayment") ]) self.lonpag = nxt nxt += 1 if self.opts["rtn"] in (1, 4) and self.slnmod: fld.extend([ (("T", nxt, 0, 0), "OSD", 13.2, "Unallocated Balance"), (("C", nxt, 0, 0), "IUI", 5, "EmpNo", "Employee Number", 0, "N", self.doEmpNum, wgm, None, None), (("C", nxt, 0, 1), "ONA", 20, "Name"), (("C", nxt, 0, 2), "IUI", 2, "Ln", "Loan Number", "", "N", self.doSlnNum, lnm, None, None), (("C", nxt, 0, 3), "INA", 20, "Description", "", "", "N", self.doSlnDes, None, None, ("notblank", )), (("C", nxt, 0, 4), "ISD", 13.2, "Amount", "", "", "N", self.doSlnAmt, None, None, ("efld", )), (("C", nxt, 0, 5), "IUI", 3, "Cde", "Deduction Code", "", "N", self.doSlnCod, ced, None, ("efld", )), (("C", nxt, 0, 6), "ONA", 20, "Description"), (("C", nxt, 0, 7), "IUD", 6.2, "Intr-%", "Interest Rate", "", "N", self.doSlnInt, None, None, None), (("C", nxt, 0, 8), "IUD", 13.2, "Ded-Amt", "Deduction Amount", "", "N", self.doSlnDed, None, None, ("efld", )) ]) self.slnpag = nxt else: fld[3][2] = 20 fld.extend([(("C", 1, 0, 5), "IUA", 1, "V", "V.A.T Code", self.taxdf, "N", self.doVatCode1, vtm, None, ("notblank", )), (("C", 1, 0, 6), "ISD", 13.2, "V.A.T", "V.A.T Amount", "", "N", self.doVatAmt, None, None, None), [("C", 1, 0, 7), "INA", (18, 30), "Details", "Transaction Details", "", "N", self.doTrnDet, None, None, None]]) but = ( ("Interrogate",None,self.queryCrs,0,("C",1,1),("C",1,2), "Interrogate Creditors Records",1), ("View Entries",viw,None,0,("C",1,1),("C",1,2), "View Batch Transactions",1), ("Maintain",None,self.maintainCrs,0,("C",1,1),("C",1,2), "Maintain Creditors Records",1), ("Canc_el",None,self.doCancel,0,("C",2,1),("C",1,1), "Cancel the Entry",1), ("Age _Normal",None,self.doAgeNormal,0,None,None, "Only Show Unallocated Transactions",2), ("Age _History",None,self.doAgeHistory,0,None,None, "Show All Transactions Including Already Allocated",2), ("Age _Automatic",None,self.doAgeAuto,0,None,None, "Automatically Allocate the Amount Starting With the "\ "Oldest Unallocated Transaction",2), ("Age _Current",None,self.doAgeCurrent,0,None,None, "Leave the Transaction Unallocated",2)) tag = [("Transaction", None, None, None, False)] cnd = [(None, "n"), (self.endPage1, "y")] cxt = [None, self.exitPage1] if self.opts["rtn"] not in (2, 5) and self.glint == "Y": tag.append(("Allocation", None, None, None, False)) cnd.append((self.endPage2, "y")) cxt.append(self.exitPage2) if self.opts["rtn"] in (1, 4) and self.lonmod: tag.append(("LON", None, None, None, False)) cnd.append((self.endLon, "y")) cxt.append(self.exitLon) if self.opts["rtn"] in (1, 4) and self.slnmod: tag.append(("SLN", None, None, None, False)) cnd.append((self.endSln, "y")) cxt.append(self.exitSln) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doView(self, *event): self.df.focusField("C", 1, 1) def doCrsAcc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("crsmst", cols=[ "crm_name", "crm_terms", "crm_vatno", "crm_termsb", "crm_stday", "crm_pydis", "crm_glac", "crm_stat" ], where=[("crm_cono", "=", self.opts["conum"]), ("crm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" if acc[7] == "X": return "Invalid Account, Redundant" self.cracno = w self.name = acc[0] self.term = acc[1] self.vatn = acc[2] self.base = acc[3] self.stdt = acc[4] self.pdis = acc[5] self.glac = acc[6] self.popv = False self.df.loadEntry(frt, pag, p + 1, data=self.name) def doRef1(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("crstrn", cols=["crt_batch"], where=[("crt_cono", "=", self.opts["conum"]), ("crt_acno", "=", self.cracno), ("crt_type", "=", self.opts["rtn"]), ("crt_ref1", "=", w)], limit=1) if acc: return "Transaction Already Exists" self.trnref = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w if self.glint == "Y" or self.opts["rtn"] in (2, 5): self.vatcode = "N" self.vatamt = 0 if self.opts["rtn"] not in (2, 5) and self.glint == "N": if not self.vatn: self.df.loadEntry(frt, pag, p + 1, data="N") else: self.df.loadEntry(frt, pag, p + 1, data=self.taxdf) def doVatCode1(self, frt, pag, r, c, p, i, w): vrte = getVatRate(self.sql, self.opts["conum"], w, self.trndat) if vrte is None: return "Invalid V.A.T Code" if vrte and not self.vatn: ok = askQuestion(self.opts["mf"].window, "VAT Number", "This Account Does Not Have a VAT Number.\n\nMust "\ "it be Populated?", default="yes") if ok == "yes": self.vatn = w self.popv = True self.vatcode = w self.vatamt = round((self.trnamt * vrte / (vrte + 100)), 2) self.df.loadEntry(frt, pag, p + 1, data=self.vatamt) if not self.vatamt: return "sk1" def doVatAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.vatamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.vatamt = float(ASD(0) - ASD(w)) else: self.vatamt = w self.df.loadEntry(frt, pag, p, data=self.vatamt) def doDisAmt(self, frt, pag, r, c, p, i, w): if self.trnamt < 0 and w > 0: self.disamt = float(ASD(0) - ASD(w)) elif self.trnamt > 0 and w < 0: self.disamt = float(ASD(0) - ASD(w)) else: self.disamt = w self.df.loadEntry(frt, pag, p, data=self.disamt) totamt = float(ASD(self.trnamt) + ASD(self.disamt)) self.df.loadEntry(frt, pag, p + 1, data=totamt) def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w if self.opts["rtn"] not in (2, 5) and self.glint == "Y": self.df.colf[2][6][5] = w self.allocated = float(0.00) def endPage1(self): self.cancel = False self.agecan = False self.batupd = False self.updateTables1() if self.cancel: return else: self.updateBatch() if self.trnamt == 0: self.df.advanceLine(1) else: self.allocated = float(0.0) if self.opts["rtn"] in (2, 5) or self.glint == "N": self.doCrsTrn() self.opts["mf"].dbm.commitDbase() self.df.selPage("Transaction") self.df.advanceLine(1) else: self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt self.amt = self.trnamt self.vat = self.vatamt if self.opts["rtn"] == 1: # Invoices self.recon = 0 self.dis = 0.00 self.per = self.pdis elif self.opts["rtn"] == 2: # Receipts if self.trnamt == 0: self.recon = self.curdt else: self.recon = 0 self.vat = 0.00 self.dis = self.disamt self.per = 0.00 elif self.opts["rtn"] == 3: # Journals self.recon = 0 self.dis = 0.00 self.per = 0.00 elif self.opts["rtn"] == 4: # Credit Notes self.recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.vat = float(ASD(0) - ASD(self.vat)) self.dis = 0.00 self.per = self.pdis elif self.opts["rtn"] == 5: # Payments if self.trnamt == 0: self.recon = self.curdt else: self.recon = 0 self.amt = float(ASD(0) - ASD(self.amt)) self.vat = 0.00 self.dis = float(ASD(0) - ASD(self.disamt)) self.per = 0.00 if self.opts["rtn"] == 1: self.doAgeCurrent() else: state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Choose an Ageing Option") for x in range(4, 8): if self.opts["rtn"] == 3 and x == 6: continue wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "normal") self.df.setWidget(self.df.B4, "focus") self.agevar.set(True) self.df.mstFrame.wait_variable(self.agevar) self.df.enableButtonsTags(state=state) if self.agecan: self.doCancel() return if self.glint == "N": return # General Ledger Control Transaction (Creditors) val = float(ASD(0) - ASD(self.amt) - ASD(self.dis)) data = (self.opts["conum"], self.crsctl, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, val, 0.00, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Bank) if self.opts["rtn"] in (2, 5): data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.amt, 0.00, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Discount) if self.dis: data = (self.opts["conum"], self.disrec, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, self.dis, 0.00, self.trndet, "N", "", self.recon, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def doAgeNormal(self): self.doAgeing("N") def doAgeHistory(self): self.doAgeing("H") def doAgeAuto(self): self.doAgeing("O") def doAgeCurrent(self): self.doAgeing("C") def doAgeing(self, atype): # Disable All Ageing Buttons for x in range(4, 8): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "disabled") self.opts["mf"].updateStatus("Select Transaction to Allocate Against") age = AgeAll(self.opts["mf"], system="crs", agetyp=atype, agekey=[ self.opts["conum"], self.cracno, self.opts["rtn"], self.trnref, self.curdt, self.amt, self.dis ]) self.agecan = age.cancel if self.agevar.get(): self.agevar.set(False) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doCoyNum(self, frt, pag, r, c, p, i, w): nam = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", w)], limit=1) if not nam: return "Invalid Company, Missing" if self.incoac and w not in self.incoac: return "Invalid Company, No Intercompany Record 1" if w != self.opts["conum"]: acc = self.sql.getRec("genint", where=[("cti_cono", "=", w), ("cti_inco", "=", self.opts["conum"]) ], limit=1) if not acc: return "Invalid Company, No Intercompany Record 2" self.ctlctl = self.gc.getCtl("ctlctl", w) if not self.ctlctl: return "rf" self.allcoy = w self.allnam = nam[0] self.df.loadEntry(frt, pag, p + 1, data=self.glac) def doGenAcc(self, frt, pag, r, c, p, i, w): ctl = True self.loan = False if "lon_ctl" in self.ctlctl and w == self.ctlctl["lon_ctl"]: self.loan = "other" elif "wag_slc" in self.ctlctl and w == self.ctlctl["wag_slc"]: self.loan = "staff" if self.loan: ctl = False chk = chkGenAcc(self.opts["mf"], self.allcoy, w, ctl=ctl) if type(chk) is str: return chk if not self.vatn: self.taxgl = "N" elif not chk[2]: self.taxgl = self.taxdf else: self.taxgl = chk[2] self.genacc = w self.df.loadEntry(frt, pag, p + 1, data=chk[0]) self.df.loadEntry(frt, pag, p + 2, data=self.taxgl) def doVatCode2(self, frt, pag, r, c, p, i, w): ctlctl = self.gc.getCtl("ctlctl", self.allcoy, error=False) if not ctlctl: return "Missing ctlctl Record for Company" if self.gc.chkRec(self.allcoy, ctlctl, ["vat_ctl"]): return "Missing or Invalid Control Record" self.convat = ctlctl["vat_ctl"] self.vatrte = getVatRate(self.sql, self.allcoy, w, self.trndat) if self.vatrte is None: return "Invalid V.A.T Code" if self.vatrte and not self.vatn: ok = askQuestion(self.opts["mf"].window, "VAT Number", "This Account Does Not Have a VAT Number.\n\nMust "\ "it be Populated?", default="yes") if ok == "yes": self.vatn = w self.popv = True self.vatcode = w def doAllAmt(self, frt, pag, r, c, p, i, w): if not w: incamt = float(ASD(self.trnamt) - ASD(self.allocated)) elif self.glinp == "E": incamt = round((w * (100 + self.vatrte) / 100), 2) else: incamt = w self.allamt = round((incamt * 100 / (100 + self.vatrte)), 2) self.allvat = float(ASD(incamt) - ASD(self.allamt)) if self.glinp == "E": self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.df.loadEntry(frt, pag, p, data=incamt) self.df.loadEntry(frt, pag, p + 1, data=self.allvat) if not self.allvat: self.df.loadEntry(frt, pag, p + 2, data=self.name) return "sk1" def doAllVat(self, frt, pag, r, c, p, i, w): if (self.allamt < 0 and w > 0) or (self.allamt > 0 and w < 0): w = float(ASD(0) - ASD(w)) if self.glinp == "I" and w != self.allvat: self.allamt = float(ASD(self.allamt) + ASD(self.allvat) - ASD(w)) self.allvat = w self.df.loadEntry(frt, pag, p, data=self.allvat) self.df.loadEntry(frt, pag, p + 1, data=self.name) def doAllDet(self, frt, pag, r, c, p, i, w): self.alldet = w def doCancel(self): if self.agecan: ok = "yes" else: ok = askQuestion( self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.cancel = True self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) for pg in range(self.df.pgs, 1, -1): self.df.clearFrame("C", pg) self.df.selPage("Transaction") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) if self.othvar.get(): self.othvar.set(False) def endPage2(self): self.updateTables2() if self.loan and self.loan == "other": self.othtot = self.allamt self.df.selPage("LON") self.df.loadEntry("T", self.lonpag, 0, data=self.othtot) self.df.focusField("C", self.lonpag, 1) self.othvar.set(True) self.df.mstFrame.wait_variable(self.othvar) if self.cancel: return elif self.loan and self.loan == "staff": self.othtot = self.allamt self.df.selPage("SLN") self.df.loadEntry("T", self.slnpag, 0, data=self.othtot) self.df.focusField("C", self.slnpag, 1) self.othvar.set(True) self.df.mstFrame.wait_variable(self.othvar) if self.cancel: return self.allocated = float(ASD(self.allocated) + ASD(self.allamt) + \ ASD(self.allvat)) if self.allocated == self.trnamt: self.doCrsTrn() self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Transaction") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def updateTables2(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.opts["rtn"] == 1: # Invoices self.debit() elif self.opts["rtn"] == 3: # Journals self.debit() elif self.opts["rtn"] == 4: # Credit Notes self.credit() def debit(self): amt = self.allamt vat = self.allvat self.restDebitCredit(amt, vat) def credit(self): amt = float(ASD(0) - ASD(self.allamt)) vat = float(ASD(0) - ASD(self.allvat)) self.restDebitCredit(amt, vat) def restDebitCredit(self, amt, vat): # VAT Transaction (ctlvtf) data = (self.allcoy, self.vatcode, "I", self.curdt, "C", self.opts["rtn"], self.bh.batno, self.trnref, self.trndat, self.cracno, self.alldet, amt, vat, 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("ctlvtf", data=data) if self.glint == "N": return # General Ledger Transaction (Expense) data = (self.allcoy, self.genacc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, amt, vat, self.alldet, self.vatcode, "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany) if self.allcoy != self.opts["conum"]: # General Ledger Transaction (Intercompany From) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.opts["conum"]), ("cti_inco", "=", self.allcoy)], limit=1)[0] val = float(ASD(amt) + ASD(vat)) data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany To) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.allcoy), ("cti_inco", "=", self.opts["conum"]) ], limit=1)[0] val = float(ASD(0) - ASD(amt) - ASD(vat)) data = (self.allcoy, acc, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, val, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if vat: # General Ledger Control Transaction (V.A.T.) data = (self.allcoy, self.convat, self.curdt, self.trndat, self.glt, self.trnref, self.bh.batno, vat, 0.00, self.alldet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) self.vat = float(ASD(self.vat) + ASD(vat)) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def doCrsTrn(self): # Creditors Master File if self.popv: self.sql.updRec("crsmst", cols=["crm_vatno"], data=["Unknown"], where=[("crm_cono", "=", self.opts["conum"]), ("crm_acno", "=", self.cracno)]) # Creditors Ledger Transaction paydt = paymentDate(self.base, self.stdt, self.term, self.trndat) data = [ self.opts["conum"], self.cracno, self.opts["rtn"], self.trnref, self.bh.batno, self.trndat, "", self.amt, self.vat, self.per, self.curdt, paydt, "Y", self.amt, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("crstrn", data=data) if not self.dis: return data = [ self.opts["conum"], self.cracno, 6, self.trnref, self.bh.batno, self.trndat, "", self.dis, self.vat, 0, self.curdt, paydt, "Y", self.dis, self.trndet, self.vatcode, "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("crstrn", data=data) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def queryCrs(self): callModule(self.opts["mf"], self.df, "cr4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"]) def maintainCrs(self): callModule(self.opts["mf"], self.df, "cr1010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"]) def doLonAcc(self, frt, pag, r, c, p, i, w): newacc = False if not w and self.opts["rtn"] == 1: yn = askQuestion(self.opts["mf"].body, "New Account", "Is This a New Account?", default="no") if yn == "no": return "Invalid Account Number" newacc = True w = callModule(self.opts["mf"], self.df, "ln1010", coy=(self.allcoy, self.allnam), user=self.opts["capnm"], args="auto", ret="acno") self.df.loadEntry(frt, pag, p, data=w) acc = self.sql.getRec("lonmf1", cols=["lm1_name"], where=[("lm1_cono", "=", self.allcoy), ("lm1_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" self.lonacc = w self.df.loadEntry(frt, pag, p + 1, data=acc[0]) if newacc: self.lonnum = 1 self.newlon = True self.df.loadEntry(frt, pag, p + 2, data=self.lonnum) return "sk2" def doLonNum(self, frt, pag, r, c, p, i, w): if not w and self.opts["rtn"] == 1: ok = askQuestion(self.opts["mf"].body, head="New Loan", mess="Is This a New Loan?", default="no") if ok == "yes": self.newlon = True self.lonnum = getNextCode(self.sql, "lonmf2", "lm2_loan", where=[ ("lm2_cono", "=", self.allcoy), ("lm2_acno", "=", self.lonacc) ], start=1, last=9999999) self.df.loadEntry(frt, pag, p, data=self.lonnum) else: return "Invalid Loan Number" else: self.lonmf2 = self.sql.getRec("lonmf2", where=[ ("lm2_cono", "=", self.allcoy), ("lm2_acno", "=", self.lonacc), ("lm2_loan", "=", w) ], limit=1) if not self.lonmf2: return "Invalid Loan Number" self.lonnum = w self.newlon = False self.londes = self.lonmf2[self.sql.lonmf2_col.index("lm2_desc")] self.londat = self.lonmf2[self.sql.lonmf2_col.index("lm2_start")] self.lonmth = self.lonmf2[self.sql.lonmf2_col.index("lm2_pmths")] self.lonpay = self.lonmf2[self.sql.lonmf2_col.index("lm2_repay")] if self.lonmth: return "Invalid Entry, Fixed Loan" self.df.loadEntry(frt, pag, p + 1, data=self.londes) return "sk1" def doLonDes(self, frt, pag, r, c, p, i, w): self.londes = w def doLonAmt(self, frt, pag, r, c, p, i, w): self.lonamt = w if not self.lonamt: self.lonamt = self.othtot self.df.loadEntry(frt, pag, p, data=self.lonamt) if not self.newlon: self.newdri = 0 return "nd" def doLonDri(self, frt, pag, r, c, p, i, w): self.newdri = w def doLonCri(self, frt, pag, r, c, p, i, w): self.newcri = w def doLonMth(self, frt, pag, r, c, p, i, w): self.lonmth = w if self.lonmth: rte = (self.newdri / 1200.0) self.lonpay = round( ((self.lonamt * rte) * ((1 + rte)**w)) / (((1 + rte)**w) - 1), 2) else: self.lonpay = 0 self.df.loadEntry(frt, pag, p + 1, data=self.lonpay) def endLon(self): if self.opts["rtn"] == 4: tramt = float(ASD(0.0) - ASD(self.lonamt)) else: tramt = self.lonamt self.othtot = float(ASD(self.othtot) - ASD(self.lonamt)) if self.newlon: # Loans Rate self.sql.insRec("lonrte", data=[ self.allcoy, self.lonacc, self.lonnum, self.trndat, self.newdri, self.newcri ]) # Loans Ledger Masterfile self.sql.insRec("lonmf2", data=[ self.allcoy, self.lonacc, self.lonnum, self.londes, self.trndat, self.lonmth, self.lonpay, 0 ]) self.othrtn = 2 else: self.othrtn = 3 # Loans Ledger Transaction data = [ self.allcoy, self.lonacc, self.lonnum, self.bh.batno, self.othrtn, self.trndat, self.trnref, tramt, self.curdt, self.alldet, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("lontrn", data=data) if self.othtot: self.df.loadEntry("T", self.lonpag, 0, data=self.othtot) self.df.advanceLine(self.lonpag) else: self.othvar.set(False) def exitLon(self): self.df.focusField("C", self.lonpag, self.df.col) def doEmpNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("wagmst", cols=["wgm_sname", "wgm_fname"], where=[("wgm_cono", "=", self.allcoy), ("wgm_empno", "=", w)], limit=1) if not acc: return "Invalid Employee Number" self.empnum = w empnam = "%s, %s" % (acc[0], acc[1].split()[0]) self.df.loadEntry(frt, pag, p + 1, data=empnam) def doSlnNum(self, frt, pag, r, c, p, i, w): if not w and self.opts["rtn"] == 1: ok = askQuestion(self.opts["mf"].body, head="New Loan", mess="Is This a New Loan?", default="no") if ok == "yes": self.newsln = True self.slnnum = getNextCode(self.sql, "waglmf", "wlm_loan", where=[ ("wlm_cono", "=", self.allcoy), ("wlm_empno", "=", self.empnum) ], start=1, last=9999999) self.df.loadEntry(frt, pag, p, data=self.slnnum) else: return "Invalid Loan Number" else: acc = self.sql.getRec("waglmf", where=[("wlm_cono", "=", self.allcoy), ("wlm_empno", "=", self.empnum), ("wlm_loan", "=", w)], limit=1) if not acc: return "Invalid Loan Number" self.slnnum = w self.newsln = False self.slndes = acc[self.sql.waglmf_col.index("wlm_desc")] self.slncod = acc[self.sql.waglmf_col.index("wlm_code")] self.slnrte = acc[self.sql.waglmf_col.index("wlm_rate")] self.slndat = acc[self.sql.waglmf_col.index("wlm_start")] self.slnded = acc[self.sql.waglmf_col.index("wlm_repay")] self.df.loadEntry(frt, pag, p + 1, data=self.slndes) return "sk1" def doSlnDes(self, frt, pag, r, c, p, i, w): self.slndes = w def doSlnAmt(self, frt, pag, r, c, p, i, w): self.slnamt = w if not self.slnamt: self.slnamt = self.othtot self.df.loadEntry(frt, pag, p, data=self.slnamt) if not self.newsln: self.df.loadEntry(frt, pag, p + 1, data=self.slncod) def doSlnCod(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("wagedc", cols=["ced_desc"], where=[("ced_cono", "=", self.allcoy), ("ced_type", "=", "D"), ("ced_code", "=", w)], limit=1) if not acc: return "Invalid Code" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) self.slncod = w if not self.newsln: self.newrte = 0 self.slnded = 0 return "nd" def doSlnInt(self, frt, pag, r, c, p, i, w): self.newrte = w if not self.newsln: self.df.loadEntry(frt, pag, p + 2, data=self.slnded) def doSlnDed(self, frt, pag, r, c, p, i, w): self.slnded = w def endSln(self): if self.opts["rtn"] == 4: tramt = float(ASD(0.0) - ASD(self.slnamt)) else: tramt = self.slnamt self.othtot = float(ASD(self.othtot) - ASD(self.slnamt)) if self.newsln: # Staff Loans Ledger Masterfile self.sql.insRec("waglmf", data=[ self.allcoy, self.empnum, self.slnnum, self.slndes, self.slncod, self.newrte, self.trndat, self.slnded ]) self.othrtn = 2 else: self.othrtn = 3 # Staff Loans Ledger Transaction data = [ self.allcoy, self.empnum, self.slnnum, self.bh.batno, self.othrtn, self.trndat, self.trnref, tramt, tramt, self.slnded, self.newrte, self.curdt, self.alldet, "", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("wagltf", data=data) if self.othtot: self.df.loadEntry("T", self.slnpag, 0, data=self.othtot) self.df.advanceLine(self.slnpag) else: self.othvar.set(False) def exitSln(self): self.df.focusField("C", self.slnpag, self.df.col)
class st4010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() if "wait" in self.opts: self.df.mstFrame.wait_window() else: self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, [ "ctlvmf", "drschn", "drsmst", "genmst", "strgrp", "strloc", "strmf1", "strmf2", "strgmu", "strcmu", "strrcp", "strtrn", "struoi" ], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) strctl = gc.getCtl("strctl", self.opts["conum"]) if not strctl: return self.glint = strctl["cts_glint"] self.plevs = strctl["cts_plevs"] self.automu = strctl["cts_automu"] if strctl["cts_locs"] == "Y": self.locs = self.sql.getRec("strloc", cols=["count(*)"], where=[("srl_cono", "=", self.opts["conum"])], limit=1)[0] else: self.locs = 1 t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.per_from = 0 self.per_to = 0 return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Stores Interrogation (%s)" % self.__class__.__name__) 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": [["T", "st1_group", 0, 0]], "index": 1 } stl = { "stype": "R", "tables": ("strloc", "strmf2"), "cols": (("srl_loc", "UA", 1, "L"), ("srl_desc", "", 0, "Location", "Y")), "where": [("srl_cono", "=", self.opts["conum"]), ("srl_loc=st2_loc", ), ("st2_cono=srl_cono", )], "whera": [["T", "st2_group", 0], ["T", "st2_code", 1]], "sort": "srl_loc", "index": 0 } r1s = (("Normal", "N"), ("Recipe", "R")) r2s = (("Average", "A"), ("Standard", "S"), ("None", "N")) r3s = (("Manual", "M"), ("Automatic", "A"), ("Zero", "Z")) tag = (("Basic", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Balances", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("History", self.doTagSelect, ("T", 0, 0), ("T", 0, 1)), ("Trans", self.doTrans1, ("T", 0, 0), ("T", 0, 1))) fld = [(("T", 0, 0, 0), "IUA", 3, "Grp", "Product Group", "", "N", self.doGroup, gpm, None, ("notblank", )), (("T", 0, 0, 0), "INA", 20, "Code", "Product Code", "", "N", self.doCode, stm, None, ("notblank", )), (("T", 0, 0, 0), "ONA", 30, ""), (("T", 0, 0, 0), "IUA", 1, "Loc", "Location", "", "N", self.doLoc, stl, None, ("efld", )), (("T", 0, 0, 0), "ONA", 20, ""), (("T", 1, 0, 0), ("ORB", r1s), 0, "Type of Item"), (("T", 1, 1, 0), "ONA", 10, "Unit of Issue"), (("T", 1, 1, 0), "ONA", 20, ""), (("T", 1, 2, 0), ("ORB", r2s), 0, "Value Indicator"), (("T", 1, 3, 0), "OUA", 1, "VAT Code"), (("T", 1, 3, 0), "ONA", 29, ""), (("T", 1, 4, 0), "OUI", 3, "Exclusive Chainstore"), (("T", 1, 4, 0), "ONA", 27, ""), (("T", 1, 5, 0), "ONA", 7, "Exclusive Account"), (("T", 1, 5, 0), "ONA", 23, ""), (("T", 1, 6, 0), "OUI", 7, "Sales Code"), (("T", 1, 6, 0), "ONA", 23, ""), (("T", 1, 7, 0), "OUI", 7, "COS Code"), (("T", 1, 7, 0), "ONA", 23, ""), (("T", 1, 8, 0), "OUA", 8, "Bin Number"), (("T", 1, 9, 0), ("ORB", r3s), 0, "Re-Order Indicator"), (("T", 1, 10, 0), "OUI", 7, "Re-Order Level"), (("T", 1, 11, 0), "OUI", 7, "Re-Order Quantity"), (("T", 1, 12, 0), "OUD", 6.2, "Price Markup Lv1")] for x in range(self.plevs - 1): fld.append((("T", 1, 12, 0), "OUD", 6.2, " Lv%s" % (x + 2))) fld.extend([(("T", 2, 0, 0), "Od1", 10, "Date Last Receipt"), (("T", 2, 1, 0), "Od1", 10, "Date Last Issue"), (("T", 2, 2, 0), "OSD", 12.2, "Quantity Balance"), (("T", 2, 3, 0), "OSD", 12.2, "Value Balance"), [("T", 2, 4, 0), "OSD", 12.2, "Average Cost"], (("T", 2, 5, 0), "OSD", 12.2, "Quantity on P/O"), (("T", 2, 6, 0), "OSD", 12.2, "Quantity on S/O"), (("C", 3, 0, 0), "OSD", 13.2, "Qty-Receipts", "", "", "N", None, None, None, None, ("Months", 13)), (("C", 3, 0, 1), "OSD", 13.2, "Val-Receipts"), (("C", 3, 0, 2), "OSD", 13.2, "Qty-Issues"), (("C", 3, 0, 3), "OSD", 13.2, "Val-Issues"), (("T", 4, 0, 0), "Id2", 7, "Start Period", "Start Period (0=All)", "", "N", self.doTrans2a, None, None, ("efld", )), (("T", 4, 0, 0), "Id2", 7, "End Period", "End Period", "", "N", self.doTrans2b, None, None, ("efld", ))]) but = (("Clear", None, self.doClear, 1, ("T", 0, 0), ("T", 0, 1)), ("Recipe", None, self.doRecipe, None, None, None), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 1, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) tnd = ((self.doEndTop, "N"), None, None, None, (self.doTrans2c, "N")) txt = (self.doExit, None, None, None, self.doExit) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) yer = int(self.sysdtw / 10000) mon = int((self.sysdtw % 10000) / 100) self.hist_tit = [] for x in range(1, 14): if x == 13: txt = "Last 12 Month Total" self.df.colLabel[3][x - 1].configure(text=txt) self.hist_tit.append(txt) else: nam = mthnam[mon][1] nam = nam + (" " * (15 - len(nam))) + str(yer) self.df.colLabel[3][x - 1].configure(text=nam) self.hist_tit.append(nam) if x != 13: mon -= 1 if not mon: mon = mon + 12 yer -= 1 def doGroup(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("strgrp", cols=["gpm_group"], 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", 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[self.sql.strmf1_col.index("st1_desc")] valind = acc[self.sql.strmf1_col.index("st1_value_ind")] self.df.loadEntry("T", 0, 2, data=self.desc) pag = 1 d = 3 for x in range(0, 15): if x == 2: self.loadUoi(x, acc[d - 1]) elif x == 5: self.loadVat(x, acc[d - 1]) elif x == 7: self.loadChnExcl(x, acc[d - 1]) elif x == 9: self.loadAccExcl(x, acc[d - 1]) elif x in (11, 13): self.loadGen(x, acc[d - 1]) else: self.df.loadEntry("T", pag, x, data=acc[d]) if d == 3: self.itype = acc[d] d += 2 else: d += 1 if valind == "S": self.df.topLabel[2][4].configure(text="%-18s" % "Standard Cost") else: self.df.topLabel[2][4].configure(text="%-18s" % "Average Cost") if self.locs == 1: self.df.loadEntry("T", 0, 3, data="1") no = self.doLoc(frt, pag, r, c + 1, p + 1, i + 1, "1") if no: return no return "sk2" def doLoc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("strloc", cols=["srl_desc"], where=[("srl_cono", "=", self.opts["conum"]), ("srl_loc", "=", w)], limit=1) if not acc: return "Invalid Location Code" self.df.loadEntry("T", 0, 4, data=acc[0]) 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: return "This location does not exist for this product" self.loc = w d = 4 for x in range(14, 18): self.df.loadEntry("T", 1, x, data=acc[d]) d += 1 if self.automu in ("A", "L"): for lev in range(1, self.plevs + 1): mup = getMarkup(self.sql, self.opts["conum"], self.group, self.code, self.loc, lev) self.df.loadEntry("T", 1, x + lev, data=mup) self.loadBalances() if self.itype == "R": self.df.setWidget(self.df.B1, "normal") else: self.df.setWidget(self.df.B1, "disabled") def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadUoi(self, pos, uoi): acc = self.sql.getRec("struoi", cols=["unm_desc"], where=[("unm_cono", "=", self.opts["conum"]), ("unm_unit", "=", uoi)], limit=1) if acc: self.df.loadEntry("T", 1, pos, data=acc[0]) def loadChnExcl(self, pos, chn): self.chn = chn if self.chn: acc = self.sql.getRec("drschn", cols=["chm_name"], where=[("chm_cono", "=", self.opts["conum"]), ("chm_chain", "=", self.chn)], limit=1) if acc: self.df.loadEntry("T", 1, pos, data=acc[0]) def loadAccExcl(self, pos, drm): acc = self.sql.getRec("drsmst", cols=["drm_name"], where=[("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", self.chn), ("drm_acno", "=", drm)], limit=1) if acc: self.df.loadEntry("T", 1, pos, data=acc[0]) def loadVat(self, pos, vat): acc = self.sql.getRec("ctlvmf", cols=["vtm_desc"], where=[("vtm_cono", "=", self.opts["conum"]), ("vtm_code", "=", vat)], limit=1) if not vat: self.df.loadEntry("T", 1, pos, data="Invalid VAT Record") else: self.df.loadEntry("T", 1, pos, data=acc[0]) def loadGen(self, pos, gen): if self.glint == "N": return acc = self.sql.getRec("genmst", cols=["glm_desc"], where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", gen)], limit=1) if acc: self.df.loadEntry("T", 1, pos, data=acc[0]) def loadBalances(self): bals = Balances(self.opts["mf"], "STR", self.opts["conum"], int(self.sysdtw / 100), keys=(self.group, self.code, self.loc, ("P", self.opts["period"][0]))) m_ob, m_mv, m_cb, y_ob, y_mv, y_cb, ac, lc, ls = bals.doStrBals() cb, oo, bo = bals.doStrOrds() this, hist = bals.doStrHist() rec = hist[0] rec.append(this[0]) iss = hist[1] iss.append(this[1]) lrec = self.sql.getRec("strtrn", cols=["max(stt_trdt)"], where=[("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc), ("stt_type", "in", (1, 3))]) if not lrec[0][0]: lastrec = 0 else: lastrec = lrec[0][0] liss = self.sql.getRec("strtrn", cols=["max(stt_trdt)"], where=[("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc), ("stt_type", "in", (2, 4, 7, 8))]) if not liss or not liss[0][0]: lastiss = 0 else: lastiss = liss[0][0] qbal = float(y_cb[0]) vbal = float(y_cb[1]) if qbal: cost = round((vbal / qbal), 2) else: cost = 0.0 cst = CCD(cost, "SD", 10.2) self.df.loadEntry("T", 2, 0, data=lastrec) self.df.loadEntry("T", 2, 1, data=lastiss) self.df.loadEntry("T", 2, 2, data=qbal) self.df.loadEntry("T", 2, 3, data=vbal) self.df.loadEntry("T", 2, 4, data=cst.disp) self.df.loadEntry("T", 2, 5, data=oo.disp) self.df.loadEntry("T", 2, 6, data=bo.disp) p = 0 for x in range(0, 13): i = 0 self.df.loadEntry("C", 3, p, data=rec[x][0]) p = p + 1 i = i + 1 self.df.loadEntry("C", 3, p, data=rec[x][1]) p = p + 1 i = i + 1 amt = float(ASD(0) - ASD(iss[x][0])) self.df.loadEntry("C", 3, p, data=amt) p = p + 1 i = i + 1 amt = float(ASD(0) - ASD(iss[x][1])) self.df.loadEntry("C", 3, p, data=amt) p = p + 1 i = i + 1 def doTagSelect(self): self.opts["mf"].updateStatus("") def doRecipe(self): tit = "Recipe" self.rcp = self.getRecipeItems() state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.opts["mf"].body, title=tit, cols=self.rcp[0], where=self.rcp[1], wtype="D", butt=[("Print", self.printRecipe)]) self.df.enableButtonsTags(state=state) def printRecipe(self): self.df.setWidget(self.df.mstFrame, state="hide") hds = [ "Stores's Recipe", "Location: %s Code: %s Description: %s" % (self.loc, self.code, self.desc) ] RepPrt(self.opts["mf"], conum=self.opts["conum"], conam=self.opts["conam"], name=self.__class__.__name__, heads=hds, cols=self.rcp[0], tables=self.rcp[1], ttype="D", prtdia=(("Y", "V"), ("Y", "N"))) self.df.setWidget(self.df.mstFrame, state="show") if "wait" not in self.opts: self.opts["mf"].closeLoop() def getRecipeItems(self): tab = ["strrcp", "strmf1"] col = ["srr_rgroup", "srr_rcode", "st1_desc", "srr_rqty"] whr = [("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("st1_cono=srr_cono", ), ("st1_group=srr_rgroup", ), ("st1_code=srr_rcode", )] odr = "srr_rgroup, srr_rcode" items = self.sql.getRec(tables=tab, cols=col, where=whr, order=odr) for seq, item in enumerate(items): bals = Balances(self.opts["mf"], "STR", self.opts["conum"], int(self.sysdtw / 100), keys=(item[0], item[1], self.loc, ("P", self.opts["period"][0]))) m_ob, m_mv, m_cb, y_ob, y_mv, y_cb, ac, lc, ls = bals.doStrBals() items[seq].extend([y_cb[0], lc]) return ((("srr_rgroup", "UA", 3.0, "Grp"), ("srr_rcode", "NA", 20.0, "Product-Code"), ("st1_desc", "NA", 30.0, "Description"), ("srr_rqty", "UD", 11.2, " Quantity"), ("balance", "SD", 13.2, " In-Stock"), ("cost", "UD", 11.2, " Last-Cost")), items) def doTrans1(self): self.df.focusField("T", 4, 1) def doTrans2a(self, frt, pag, r, c, p, i, w): self.per_from = w self.df.loadEntry("T", 4, 1, data=w) if not self.per_from: return "nc" def doTrans2b(self, frt, pag, r, c, p, i, w): self.per_to = w if not self.per_to or self.per_to < self.per_from: return "Invalid Period" def doTrans2c(self): tit = "Transactions for Item: %s %s - %s" % \ (self.group, self.code, self.desc) tab = ["strtrn"] crt = (("stt_trdt", "", 0, " Date"), ("stt_batch", "", 0, "Batch"), ("stt_type", "NA", 3, "Typ"), ("stt_ref1", "", 0, "Reference", "Y"), ("stt_ref2", "", 0, "Ref-Num-2"), ("stt_qty", "", 0, " Quantity"), ("stt_cost", "", 0, " Cost"), ("stt_sell", "", 0, " Selling"), ("qbal", "SD", 13.2, " Qty-Bal"), ("cbal", "SD", 13.2, " Cost-Bal"), ("stt_desc", "", 0, "Details")) whr = [("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc)] if self.per_from: whr.extend([("stt_curdt", ">=", self.per_from), ("stt_curdt", "<=", self.per_to)]) odr = "stt_trdt, stt_qty desc" recs = self.sql.getRec("strtrn", cols=[ "stt_trdt", "stt_batch", "stt_type", "stt_ref1", "stt_ref2", "stt_qty", "stt_cost", "stt_sell", "stt_desc" ], where=whr, order=odr) data = [] tqty = 0 tcst = 0 for rec in recs: rec[2] = sttrtp[rec[2] - 1][0] tqty = float(ASD(tqty) + ASD(rec[5])) tcst = float(ASD(tcst) + ASD(rec[6])) rec.insert(8, tqty) rec.insert(9, tcst) data.append(rec) state = self.df.disableButtonsTags() while True: rec = SRec(self.opts["mf"], screen=self.df.nb.Page4, title=tit, tables=tab, cols=crt, where=data, wtype="D") if rec.selection: for n, t in enumerate(sttrtp): if t[0] == rec.selection[2]: typ = n + 1 break dte = rec.selection[0] doc = rec.selection[3] if self.itype == "R" and typ in (7, 8): bt = (("Transaction", "T"), ("Recipe", "R")) ask = askChoice( self.df.window, head="Details", mess="Transaction Details or the Recipe Details", butt=bt, default="Transaction") else: ask = "T" if ask == "T": wher = [("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc), ("stt_type", "=", typ), ("stt_trdt", "=", dte), ("stt_ref1", "=", doc)] TabPrt(self.opts["mf"], tabs="strtrn", where=wher, pdia=False) elif typ == 7: rct = "Recipe Details" rcc = (("si3_line", "", 0, ""), ("si3_rgroup", "", 0, ""), ("si3_rcode", "", 0, ""), ("st1_desc", "", 0, ""), ("si3_rqty", "", 0, ""), ("si3_cost", "", 0, "")) rcw = (("si3_cono", "=", self.opts["conum"]), ("si3_rtn", "=", "I"), ("si3_docno", "=", doc), ("st1_cono=si3_cono", ), ("st1_group=si3_rgroup", ), ("st1_code=si3_rcode", )) rco = "si3_line" SRec(self.opts["mf"], title=rct, tables=["slsiv3", "strmf1"], cols=rcc, where=rcw, order=rco) else: rct = "Recipe Details" rcc = (("prp_rowno", "", 0, ""), ("prp_rgroup", "", 0, ""), ("prp_rcode", "", 0, ""), ("st1_desc", "", 0, ""), ("prp_rqty", "", 0, ""), ("prp_cost", "", 0, "")) rcw = (("prp_cono", "=", self.opts["conum"]), ("prp_docno", "=", doc), ("st1_cono=prp_cono", ), ("st1_group=prp_rgroup", ), ("st1_code=prp_rcode", )) rco = "prp_rowno" SRec(self.opts["mf"], title=rct, tables=["posrcp", "strmf1"], cols=rcc, where=rcw, order=rco) else: break self.df.enableButtonsTags(state=state) self.df.focusField("T", 4, 1) def doNotes(self, wiget=None): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "STR", "%3s%s" % (self.group, self.code)) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("Basic") self.df.setWidget(self.df.B1, "disabled") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = [("Information", "I"), ("Transactions", "T")] if self.itype == "R": butt.append(("Recipe", "R")) butt.append(("None", "N")) self.doPrintOption( askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") if opt == "I": head = "Stores Masterfile Record" tab = ["strmf1", "strmf2"] col = [ "st1_group", "st1_code", "st2_loc", "st1_desc", "st1_type", "st1_uoi", "st1_value_ind", "st1_vatcode", "st1_chn_excl", "st1_acc_excl", "st1_sls", "st1_cos", "st2_bin", "st2_reord_ind", "st2_reord_level", "st2_reord_qty" ] whr = [("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.group), ("st1_code", "=", self.code), ("st2_cono=st1_cono", ), ("st2_group=st1_group", ), ("st2_code=st1_code", ), ("st2_loc", "=", self.loc)] TabPrt(self.opts["mf"], self.opts["conum"], self.opts["conam"], name=self.__class__.__name__, head=head, tabs=tab, cols=col, where=whr, keys=[self.group, self.code, self.loc]) elif opt == "T": tab = ["strtrn"] hds = [ "Stores's Transactions", "Location: %s Group: %s Code: %s Description: %s" % (self.loc, self.group, self.code, self.desc) ] col = [] dic = self.sql.strtrn_dic for c in [ "stt_ref1", "stt_trdt", "stt_type", "stt_qty", "stt_cost", "stt_sell", "stt_desc" ]: col.append([c, dic[c][2], dic[c][3], dic[c][5]]) whr = [("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc)] if self.per_from: whr.extend([("stt_curdt", ">=", self.per_from), ("stt_curdt", "<=", self.per_to)]) odr = "stt_trdt, stt_ref1" gtots = ["stt_qty", "stt_cost", "stt_sell"] RepPrt(self.opts["mf"], conum=self.opts["conum"], conam=self.opts["conam"], name=self.__class__.__name__, tables=tab, heads=hds, cols=col, where=whr, order=odr, gtots=gtots, prtdia=(("Y", "V"), ("Y", "N"))) else: self.rcp = self.getRecipeItems() hds = [ "Stores's Recipe", "Location: %s Code: %s Description: %s" % (self.loc, self.code, self.desc) ] RepPrt(self.opts["mf"], conum=self.opts["conum"], conam=self.opts["conam"], name=self.__class__.__name__, heads=hds, cols=self.rcp[0], tables=self.rcp[1], ttype="D", prtdia=(("Y", "V"), ("Y", "N"))) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class st1010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() if "wait" in self.opts: self.df.mstFrame.wait_window() else: self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, [ "ctlvmf", "ctlrep", "drschn", "drsmst", "genmst", "slsiv1", "slsiv2", "strgrp", "strloc", "strmf1", "strmf2", "strgmu", "strcmu", "strprc", "strrcp", "struoi", "strtrn", "strpot", "strvar", "slsiv3", "chglog" ], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) strctl = gc.getCtl("strctl", self.opts["conum"]) if not strctl: return self.glint = strctl["cts_glint"] self.locs = strctl["cts_locs"] self.plevs = strctl["cts_plevs"] self.automu = strctl["cts_automu"] self.drsctl = gc.getCtl("drsctl", self.opts["conum"], error=False) if not self.drsctl: self.chains = "N" else: self.chains = self.drsctl["ctd_chain"] return True def mainProcess(self): gpm = { "stype": "R", "tables": ("strgrp", ), "cols": (("gpm_group", "", 0, "Grp"), ("gpm_desc", "", 0, "Description", "Y")), "where": [("gpm_cono", "=", self.opts["conum"])] } stm = { "stype": "R", "tables": ("strmf1", ), "cols": (("st1_group", "", 0, "Grp"), ("st1_code", "", 0, "Product Code"), ("st1_type", "", 0, "T"), ("st1_desc", "", 0, "Description", "Y")), "where": [("st1_cono", "=", self.opts["conum"]), ("st1_type", "<>", "X")], "whera": [], "index": 1 } loc = { "stype": "R", "tables": ("strloc", ), "cols": (("srl_loc", "", 0, "L"), ("srl_desc", "", 0, "Description", "Y")), "where": [("srl_cono", "=", self.opts["conum"])] } unm = { "stype": "R", "tables": ("struoi", ), "cols": (("unm_unit", "", 0, "Unit"), ("unm_desc", "", 0, "Description", "Y")), "where": [("unm_cono", "=", self.opts["conum"])] } drc = { "stype": "R", "tables": ("drschn", ), "cols": (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")), "where": [("chm_cono", "=", self.opts["conum"])] } drm = { "stype": "R", "tables": ("drsmst", ), "cols": (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"), ("drm_add1", "", 0, "Address Line 1")) } if self.chains == "Y": drm["where"] = [("drm_cono", "=", self.opts["conum"]), ("drm_stat", "<>", "X")] drm["whera"] = [["T", "drm_chain", 10]] else: drm["where"] = [("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", 0), ("drm_stat", "<>", "X")] vtm = { "stype": "R", "tables": ("ctlvmf", ), "cols": (("vtm_code", "", 0, "C"), ("vtm_desc", "", 0, "Description", "Y")), "where": [("vtm_cono", "=", self.opts["conum"])] } glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])] } tag = (("Basic-_A", None, ("T", 0, 0), ("T", 0, 1)), ("Basic-_B", None, ("T", 0, 0), ("T", 0, 1)), ("Recipes", self.doReadLoadRecipe, None, ("T", 0, 1))) r1s = (("Normal", "N"), ("Recipe", "R")) r2s = (("Average", "A"), ("Standard", "S"), ("None", "N")) r3s = (("Manual", "M"), ("Automatic", "A"), ("Zero", "N")) self.fld = [(("T", 0, 0, 0), "IUA", 3, "Group", "Product Group", "", "Y", self.doGroup, gpm, None, ("notblank", )), (("T", 0, 0, 0), "INA", 20, "Code", "Product Code", "", "N", self.doCode, stm, None, ("notblank", )), (("T", 0, 0, 0), "IUA", 1, "Loc", "Location", "1", "N", self.doLoc, loc, None, ("notblank", )), (("T", 0, 0, 0), "ONA", 30, ""), (("T", 1, 0, 0), ("IRB", r1s), 0, "Type of Item", "", "N", "N", self.doType, None, None, None), (("T", 1, 1, 0), "INA", 30, "Description", "", "", "N", None, None, self.doDelete, ("notblank", )), (("T", 1, 2, 0), "INA", 10, "Unit of Issue", "", "", "N", self.doUoi, unm, None, ("notblank", )), (("T", 1, 2, 0), "ONA", 30, ""), (("T", 1, 3, 0), ("IRB", r2s), 0, "Cost Price Indicator", "", "A", "N", self.doValInd, None, None, None), (("T", 1, 4, 0), "IUA", 1, "VAT Code", "", "", "N", self.doVat, vtm, None, ("notblank", )), (("T", 1, 4, 0), "ONA", 30, ""), (("T", 1, 5, 0), "IUI", 3, "Exclusive Chainstore", "", "", "N", self.doChnExcl, drc, None, ("efld", )), (("T", 1, 5, 0), "ONA", 30, ""), (("T", 1, 6, 0), "INA", 7, "Exclusive Account", "", "", "N", self.doAccExcl, drm, None, ("efld", )), (("T", 1, 6, 0), "ONA", 30, ""), (("T", 1, 7, 0), "IUI", 7, "Sales Code", "", "", "N", self.doSales, glm, None, ("efld", )), (("T", 1, 7, 0), "ONA", 30, ""), (("T", 1, 8, 0), "IUI", 7, "COS Code", "", "", "N", self.doCos, glm, None, ("efld", )), (("T", 1, 8, 0), "ONA", 30, ""), (("T", 2, 0, 0), "IUA", 8, "Bin Number", "", "", "N", None, None, self.doDelete, ("efld", )), (("T", 2, 1, 0), ("IRB", r3s), 0, "Re-Order Indicator", "", "A", "N", self.doReord, None, None, None), (("T", 2, 2, 0), "IUI", 7, "Re-Order Level", "", "", "N", None, None, None, ("efld", )), (("T", 2, 3, 0), "IUI", 7, "Re-Order Quantity", "", "", "N", None, None, None, ("efld", ))] if self.automu in ("A", "L"): self.fld.append( (("T", 2, 4, 0), "IUD", 6.2, "Percentabge Markup Lv1", "", "", "N", None, None, None, ("efld", ))) for x in range(1, self.plevs): self.fld.append((("T", 2, 4, 0), "IUD", 6.2, "Lv%s" % (x + 1), "", "", "N", None, None, None, ("efld", ))) self.fld.extend([(("C", 3, 0, 0), "INA", 3, "Grp", "Product Group", "r", "N", self.doRecGrp, gpm, None, None), (("C", 3, 0, 1), "INA", 20, "Product-Code", "Product Code", "", "N", self.doRecCod, stm, None, None), (("C", 3, 0, 2), "ONA", 30, "Description"), (("C", 3, 0, 3), "IUD", 11.2, "Quantity", "", "", "N", self.doRecQty, None, self.doDelRec, ("notzero", ))]) but = (("Edit", None, self.doEditor, 0, ("C", 3, 1), None), ("Accept", None, self.doAccept, 0, ("T", 0, 0), ("T", 0, 1)), ("Cancel", None, self.doCancel, 0, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doQuit, 1, None, None)) tnd = ((self.doEnd, "N"), (self.doEnd, "N"), (self.doEnd, "Y"), None) txt = (self.doExit, self.doExit, self.doExit, self.doExit) cnd = (None, None, None, (self.doEnd, "N")) cxt = (None, None, None, self.doExit) self.df = TartanDialog(self.opts["mf"], eflds=self.fld, tags=tag, butt=but, tend=tnd, txit=txt, cend=cnd, cxit=cxt, clicks=self.doClick) def doClick(self, *opts): if self.df.pag == 0 or not self.gtype: return if opts[0] == (1, 0) and not self.newcode: return self.df.focusField("T", opts[0][0], opts[0][1] + 1) def doGroup(self, frt, pag, r, c, p, i, w): self.grpacc = self.sql.getRec( "strgrp", cols=["gpm_vatcode", "gpm_sales", "gpm_costs"], where=[("gpm_cono", "=", self.opts["conum"]), ("gpm_group", "=", w)], limit=1) if not self.grpacc: return "Invalid Group" self.group = w self.df.topf[0][1][8]["whera"] = [["T", "st1_group", 0, 0]] def doCode(self, frt, pag, r, c, p, i, w): self.code = w self.mups = [0, 0, 0, 0, 0] self.old1 = self.sql.getRec("strmf1", where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.group), ("st1_code", "=", w)], limit=1) if not self.old1: self.newcode = True self.gtype = None elif self.old1[3] == "X": return "Redundant Code" else: self.newcode = False d = 3 for x in range(0, self.df.topq[1]): if x in (3, 6, 8, 10, 12, 14): continue if x == 0: self.gtype = self.old1[d] self.df.loadEntry("T", 1, x, data=self.old1[d]) if x == 2: get = self.getUoi(self.old1[d]) if get: self.df.loadEntry("T", 1, x + 1, data=get[0]) if x == 5: get = self.getVat(self.old1[d]) if get: self.df.loadEntry("T", 1, x + 1, data=get[0]) if x == 7: get = self.getChnExcl(self.old1[d]) if get: self.df.loadEntry("T", 1, x + 1, data=get[0]) if x == 9: get = self.getAccExcl(self.old1[d]) if get: self.df.loadEntry("T", 1, x + 1, data=get[0]) if self.glint == "Y" and x in (11, 13): get = self.getGenDes(self.old1[d]) if get: self.df.loadEntry("T", 1, x + 1, data=get[0]) d += 1 if self.locs == "N": self.loc = "1" self.df.loadEntry("T", 0, 2, data=self.loc) err = self.checkLoc() if err: return err return "sk1" def doLoc(self, frt, pag, r, c, p, i, w): if w == 0: return "Invalid Location" self.loc = w err = self.checkLoc() if err: return err def checkLoc(self): acc = self.sql.getRec("strloc", cols=["srl_desc"], where=[("srl_cono", "=", self.opts["conum"]), ("srl_loc", "=", self.loc)], limit=1) if not acc: return "Invalid Location Code" else: self.df.loadEntry("T", 0, 3, data=acc[0]) self.old2 = self.sql.getRec("strmf2", where=[("st2_cono", "=", self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code", "=", self.code), ("st2_loc", "=", self.loc)], limit=1) if not self.old2: ok = askQuestion(self.opts["mf"].body, "New Location", "This location does not exist for this product. " \ "Are you sure that you want to create it?") if ok == "yes": self.newloc = "Y" else: return "Rejected Location" if not self.old2: self.newloc = "Y" else: self.newloc = "N" d = 3 for x in range(0, 4): d = d + 1 self.df.loadEntry("T", 2, x, data=self.old2[d]) if self.automu in ("A", "L"): for y in range(self.plevs): mup = getMarkup(self.sql, self.opts["conum"], self.group, self.code, self.loc, y + 1) self.df.loadEntry("T", 2, 4 + y, data=mup) self.mups[y] = mup def doType(self, frt, pag, r, c, p, i, w): self.gtype = w if self.gtype == "R": self.df.enableTag(2) else: self.df.disableTag(2) def doUoi(self, frt, pag, r, c, p, i, w): acc = self.getUoi(w) if not acc: return "Invalid UOI Record" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doValInd(self, frt, pag, r, c, p, i, w): self.df.topf[1][5][5] = self.grpacc[0] def doVat(self, frt, pag, r, c, p, i, w): acc = self.getVat(w) if not acc: return "Invalid VAT Record" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) if not self.drsctl: self.chain = 0 self.df.loadEntry(frt, pag, p + 1, data=0) self.df.loadEntry(frt, pag, p + 1, data="") self.df.loadEntry(frt, pag, p + 1, data="") self.df.loadEntry(frt, pag, p + 1, data="") if self.glint == "N": return "sk9" else: return "sk4" def doChnExcl(self, frt, pag, r, c, p, i, w): if w: acc = self.getChnExcl(w) if not acc: return "Invalid Chainstore" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) self.chain = w def doAccExcl(self, frt, pag, r, c, p, i, w): if w: acc = self.getAccExcl(w) if not acc: return "Invalid Debtors Account" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) if self.glint == "N": return "sk5" if self.newcode: self.df.loadEntry(frt, pag, p + 2, data=self.grpacc[1]) if self.grpacc[1]: acc = self.getGenDes(self.grpacc[1]) if not acc: return "Invalid Sales Code" self.df.loadEntry(frt, pag, p + 3, data=acc[0]) self.df.loadEntry(frt, pag, p + 4, data=self.grpacc[2]) if self.grpacc[2]: acc = self.getGenDes(self.grpacc[2]) if not acc: return "Invalid C.O.S. Code" self.df.loadEntry(frt, pag, p + 5, data=acc[0]) def doSales(self, frt, pag, r, c, p, i, w): acc = self.getGenDes(w) if not acc: return "Invalid Sales Account" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doCos(self, frt, pag, r, c, p, i, w): acc = self.getGenDes(w) if not acc: return "Invalid COS Account" self.df.loadEntry(frt, pag, p + 1, data=acc[0]) def doReord(self, frt, pag, r, c, p, i, w): if w == "N": self.df.loadEntry(frt, pag, p + 1, data=0) self.df.loadEntry(frt, pag, p + 2, data=0) return "sk2" def getUoi(self, dat): acc = self.sql.getRec("struoi", cols=["unm_desc"], where=[("unm_cono", "=", self.opts["conum"]), ("unm_unit", "=", dat)], limit=1) return acc def getVat(self, dat): acc = self.sql.getRec("ctlvmf", cols=["vtm_desc"], where=[("vtm_cono", "=", self.opts["conum"]), ("vtm_code", "=", dat)], limit=1) return acc def getChnExcl(self, dat): self.chain = dat if dat: acc = self.sql.getRec("drschn", cols=["chm_name"], where=[("chm_cono", "=", self.opts["conum"]), ("chm_chain", "=", dat)], limit=1) return acc def getAccExcl(self, dat): if dat: acc = self.sql.getRec("drsmst", cols=["drm_name"], where=[("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", self.chain), ("drm_acno", "=", dat), ("drm_stat", "<>", "X")], limit=1) return acc def getGenDes(self, dat): if dat: acc = self.sql.getRec("genmst", cols=["glm_desc"], where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", dat)], limit=1) return acc def doRecGrp(self, frt, pag, r, c, p, i, w): self.rgroup = w acc = self.sql.getRec("strgrp", cols=["gpm_desc"], where=[("gpm_cono", "=", self.opts["conum"]), ("gpm_group", "=", w)], limit=1) if not acc: return "Invalid Group" self.df.topf[0][1][8]["whera"] = [["C", "st1_group", 0, 3]] def doRecCod(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("strmf1", cols=["st1_type", "st1_desc"], where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.rgroup), ("st1_code", "=", w)], limit=1) if not acc: return "Invalid Code" if acc[0] == "R": return "Invalid Type (Recipe)" self.df.loadEntry(frt, pag, p + 1, data=acc[1]) acc = self.sql.getRec("strmf2", cols=["st2_bin"], where=[("st2_cono", "=", self.opts["conum"]), ("st2_group", "=", self.rgroup), ("st2_code", "=", w), ("st2_loc", "=", self.loc)], limit=1) if not acc: return "Invalid Code (2)" self.rcode = w acc = self.sql.getRec("strrcp", cols=["srr_rqty"], where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.rgroup), ("srr_rcode", "=", self.rcode)], limit=1) if acc: self.newrec = "n" self.df.loadEntry(frt, pag, p + 2, data=acc[0]) else: self.newrec = "y" def doRecQty(self, frt, pag, r, c, p, i, w): self.rqty = w def doEditor(self): if self.df.pag != 3: self.df.focusField(self.df.frt, self.df.pag, self.df.col) return # Display recipe items and allow editing of details data = self.sql.getRec( tables=["strrcp", "strmf1"], cols=["srr_rgroup", "srr_rcode", "st1_desc", "srr_rqty"], where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("st1_cono=srr_cono", ), ("st1_group=srr_rgroup", ), ("st1_code=srr_rcode", )]) if data: titl = "Recipe Items" head = ("Grp", "Product-Code", "Description", "Quantity") lin = { "stype": "C", "titl": titl, "head": head, "typs": (("NA", 3), ("NA", 20), ("NA", 30), ("SD", 10.2)), "data": data } state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Select a Product to Edit") chg = self.df.selChoice(lin) if chg and chg.selection: self.change = chg.selection self.doChgChanges() self.df.enableButtonsTags(state=state) self.df.focusField("C", 3, self.df.col) def doChgChanges(self): tit = ("Change Items", ) gpm = { "stype": "R", "tables": ("strgrp", ), "cols": (("gpm_group", "", 0, "Grp"), ("gpm_desc", "", 0, "Description", "Y")), "where": [("gpm_cono", "=", self.opts["conum"])] } stm = { "stype": "R", "tables": ("strmf1", ), "cols": (("st1_group", "", 0, "Grp"), ("st1_code", "", 0, "Product Code"), ("st1_type", "", 0, "T"), ("st1_desc", "", 0, "Description", "Y")), "where": [("st1_cono", "=", self.opts["conum"])], "whera": [], "index": 1 } fld = ((("T", 0, 0, 0), "INA", 3, "Group", "Product Group", "", "N", self.doChgGrp, gpm, None, ('notblank', )), (("T", 0, 1, 0), "INA", 20, "Code", "Product Code", "", "N", self.doChgCod, stm, None, ('notblank', )), (("T", 0, 2, 0), "ONA", 30, "Description"), (("T", 0, 3, 0), "ISD", 10.2, "Quantity", "", "", "N", self.doChgQty, None, None, ('notzero', ))) but = [["Delete", None, self.doChgDel, 1, None, None]] self.cg = TartanDialog(self.opts["mf"], title=tit, tops=True, eflds=fld, butt=but, tend=((self.doChgEnd, "n"), ), txit=(self.doChgExit, )) self.cg.loadEntry("T", 0, 0, data=self.change[0]) self.cg.loadEntry("T", 0, 1, data=self.change[1]) self.cg.loadEntry("T", 0, 2, data=self.change[2]) self.cg.loadEntry("T", 0, 3, data=self.change[3]) self.cg.focusField("T", 0, 1, clr=False) self.cg.mstFrame.wait_window() def doChgGrp(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("strgrp", cols=["gpm_desc"], where=[("gpm_cono", "=", self.opts["conum"]), ("gpm_group", "=", w)], limit=1) if not acc: return "Invalid Group" self.rgroup = w self.cg.topf[0][1][8]["whera"] = [["T", "st1_group", 0, 0]] def doChgCod(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("strmf1", cols=["st1_type", "st1_desc"], where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.rgroup), ("st1_code", "=", w)], limit=1) if not acc: return "Invalid Code" if acc[0] != "N": return "Invalid Type" cnt = self.sql.getRec("strrcp", cols=["count(*)"], where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.rgroup), ("srr_code", "=", w)], limit=1) if cnt[0]: return "Product Already In Recipe" self.rcode = w self.cg.loadEntry("T", 0, 2, data=acc[1]) def doChgQty(self, frt, pag, r, c, p, i, w): self.rqty = w def doChgDel(self): self.sql.delRec("strrcp", where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.change[0]), ("srr_rcode", "=", self.change[1])]) self.doReadLoadRecipe() self.doChgExit() def doChgEnd(self): self.sql.updRec("strrcp", cols=["srr_rgroup", "srr_rcode", "srr_rqty"], data=[self.rgroup, self.rcode, self.rqty], where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.loc), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.change[0]), ("srr_rcode", "=", self.change[1])]) self.doReadLoadRecipe() self.doChgExit() def doChgExit(self): self.cg.closeProcess() def doDelete(self): trn = self.sql.getRec("strpot", cols=["count(*)"], where=[("pot_cono", "=", self.opts["conum"]), ("pot_group", "=", self.group), ("pot_code", "=", self.code)], limit=1) if trn[0]: return "Purchase Orders Exist, Not Deleted" trn = self.sql.getRec("strtrn", cols=["count(*)"], where=[("stt_cono", "=", self.opts["conum"]), ("stt_group", "=", self.group), ("stt_code", "=", self.code), ("stt_loc", "=", self.loc)], limit=1) if trn[0]: return "Stores Transactions Exist, Not Deleted" trn = self.sql.getRec("slsiv2", cols=["count(*)"], where=[("si2_cono", "=", self.opts["conum"]), ("si2_group", "=", self.group), ("si2_code", "=", self.code), ("si2_loc", "=", self.loc)], limit=1) if trn[0]: return "Sales-2 Transactions Exist, Not Deleted" trn = self.sql.getRec("slsiv3", cols=["count(*)"], where=[("si3_cono", "=", self.opts["conum"]), ("si3_rgroup", "=", self.group), ("si3_rcode", "=", self.code)], limit=1) if trn[0]: return "Sales-3 Transactions Exist, Not Deleted" self.sql.delRec("strmf2", where=[("st2_cono", "=", self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code", "=", self.code), ("st2_loc", "=", self.loc)]) dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3]) self.sql.insRec("chglog", data=["strmf2", "D", "%03i%-3s%-20s%-1s" % \ (self.opts["conum"], self.group, self.code, self.loc), "", dte, self.opts["capnm"], "", "", "", 0]) st2 = self.sql.getRec("strmf2", cols=["count(*)"], where=[("st2_cono", "=", self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code", "=", self.code)], limit=1) if not st2[0]: self.sql.delRec("strmf1", where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.group), ("st1_code", "=", self.code)]) self.sql.insRec("chglog", data=["strmf1", "D", "%03i%-3s%-20s" % \ (self.opts["conum"], self.group, self.code), "", dte, self.opts["capnm"], "", "", "", 0]) # Other Files self.sql.delRec("strcst", where=[("stc_cono", "=", self.opts["conum"]), ("stc_group", "=", self.group), ("stc_code", "=", self.code), ("stc_loc", "=", self.loc)]) self.sql.delRec("strprc", where=[("stp_cono", "=", self.opts["conum"]), ("stp_group", "=", self.group), ("stp_code", "=", self.code), ("stp_loc", "=", self.loc)]) self.sql.delRec("strrcp", where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc)]) self.sql.delRec("strrcp", where=[("srr_cono", "=", self.opts["conum"]), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.group), ("srr_rcode", "=", self.code)]) self.sql.delRec("strvar", where=[("stv_cono", "=", self.opts["conum"]), ("stv_group", "=", self.group), ("stv_code", "=", self.code), ("stv_loc", "=", self.loc)]) self.opts["mf"].dbm.commitDbase() self.df.focusField("T", 0, 1) def doDelRec(self): self.sql.delRec("strrcp", where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.rgroup), ("srr_rcode", "=", self.rcode)]) self.df.clearLine(2, focus=True) def doEnd(self): if self.df.frt == "T" and self.df.pag == 0: if self.newcode: self.df.focusField("T", 1, 1) else: if self.gtype == "R": self.df.enableTag(2) self.df.skip[1] = [1] self.df.focusField("T", 1, 2, clr=False) elif self.df.frt == "T" and self.df.pag == 1: self.df.selPage("Basic-B") elif self.df.frt == "T" and self.df.pag == 2: if self.gtype == "R": self.df.selPage("Recipes") else: self.doEnder() elif self.df.frt == "C" and self.df.pag == 3: data = [ self.opts["conum"], self.group, self.code, self.loc, self.rgroup, self.rcode, self.rqty ] if self.newrec == "y": self.sql.insRec("strrcp", data=data) self.df.advanceLine(3) else: whr = [("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("srr_rgroup", "=", self.rgroup), ("srr_rcode", "=", self.rcode)] self.sql.updRec("strrcp", data=data, where=whr) self.doReadLoadRecipe() def doEnder(self): data = [self.opts["conum"]] for x in range(0, 2): data.append(self.df.t_work[0][0][x]) for x in range(0, len(self.df.t_work[1][0])): if x in (3, 6, 8, 10, 12, 14): continue data.append(self.df.t_work[1][0][x]) if self.newcode: self.sql.insRec("strmf1", data=data) elif data != self.old1[:len(data)]: col = self.sql.strmf1_col data.append(self.old1[col.index("st1_xflag")]) self.sql.updRec("strmf1", data=data, where=[("st1_cono", "=", self.opts["conum"]), ("st1_group", "=", self.group), ("st1_code", "=", self.code)]) dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3]) for num, dat in enumerate(self.old1): if dat != data[num]: self.sql.insRec( "chglog", data=[ "strmf1", "U", "%03i%-3s%-20s" % (self.opts["conum"], self.group, self.code), col[num], dte, self.opts["capnm"], str(dat), str(data[num]), "", 0 ]) data = [self.opts["conum"], self.group, self.code, self.loc] for x in range(0, 4): data.append(self.df.t_work[2][0][x]) if self.newloc == "Y": self.sql.insRec("strmf2", data=data) elif data != self.old2[:len(data)]: col = self.sql.strmf2_col data.append(self.old2[col.index("st2_xflag")]) self.sql.updRec("strmf2", data=data, where=[("st2_cono", "=", self.opts["conum"]), ("st2_group", "=", self.group), ("st2_code", "=", self.code), ("st2_loc", "=", self.loc)]) dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3]) for num, dat in enumerate(self.old2): if dat != data[num]: self.sql.insRec("chglog", data=[ "strmf2", "U", "%03i%-3s%-20s%-1s" % (self.opts["conum"], self.group, self.code, self.loc), col[num], dte, self.opts["capnm"], str(dat), str(data[num]), "", 0 ]) self.sql.delRec("strcmu", where=[("smc_cono", "=", self.opts["conum"]), ("smc_group", "=", self.group), ("smc_code", "=", self.code), ("smc_loc", "=", self.loc)]) for num, mup in enumerate(self.df.t_work[2][0][4:]): if mup and mup != self.mups[num]: self.sql.insRec("strcmu", data=[ self.opts["conum"], self.group, self.code, self.loc, num + 1, mup ]) self.opts["mf"].dbm.commitDbase() self.df.selPage("Basic-A") self.df.focusField("T", 0, 1) def doReadLoadRecipe(self): self.df.clearFrame("C", 3) self.df.focusField("C", 3, 1) rec = self.sql.getRec( tables=["strrcp", "strmf1"], cols=["srr_rgroup", "srr_rcode", "st1_desc", "srr_rqty"], where=[("srr_cono", "=", self.opts["conum"]), ("srr_group", "=", self.group), ("srr_code", "=", self.code), ("srr_loc", "=", self.loc), ("st1_cono=srr_cono", ), ("st1_group=srr_rgroup", ), ("st1_code=srr_rcode", )]) if rec: mxs = (self.df.rows[3] - 1) * self.df.colq[3] for l, r in enumerate(rec): for i, d in enumerate(r): c = l * self.df.colq[3] if c > mxs: c = mxs self.df.loadEntry("C", 3, (c + i), data=d) self.df.advanceLine(3) def doExit(self): if self.df.frt == "T" and self.df.pag == 0: self.doQuit() elif self.df.frt == "T" and self.df.pag == 1: if self.newcode: self.df.focusField("T", 1, 1) else: self.df.skip[1] = [1] self.df.focusField("T", 1, 2, clr=False) elif self.df.frt == "T" and self.df.pag == 2: self.df.focusField("T", 2, 1) elif self.df.frt == "C" and self.df.pag == 3: if self.df.col == 1: self.df.focusField("C", 3, 1) else: self.doEnder() def doAccept(self): ok = "yes" for page in (1, 2): frt, pag, col, err = self.df.doCheckFields(("T", page, None)) if err: ok = "no" if pag and pag != self.df.pag: self.df.selPage(self.df.tags[pag - 1][0]) self.df.focusField(frt, pag, (col + 1), err=err) break if ok == "yes": self.doEnder() def doQuit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop() def doCancel(self): self.opts["mf"].dbm.rollbackDbase() self.df.selPage("Basic-A") self.df.focusField("T", 0, 1)
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
class wg1010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["ctldep", "chglog", "wagbal", "wagcap", "wagcod", "wagedc", "wagmst", "wagtf1", "wagtf2", "waglmf", "wagltf"], prog=self.__class__.__name__) if self.sql.error: return return True def mainProcess(self): wgm = { "stype": "R", "tables": ("wagmst",), "cols": ( ("wgm_empno", "", 0, "EmpNo"), ("wgm_sname", "", 0, "Surname", "Y"), ("wgm_fname", "", 0, "Names"), ("wgm_freq", "", 0, "F"), ("wgm_start", "", 0, "Start-Date"), ("wgm_term", "", 0, "Term-Date")), "where": [("wgm_cono", "=", self.opts["conum"])]} dep = { "stype": "R", "tables": ("ctldep",), "cols": ( ("dep_code", "", 0, "Dep"), ("dep_name", "", 0, "Name", "Y")), "where": [("dep_cono", "=", self.opts["conum"])]} wec = { "stype": "R", "tables": ("wagedc",), "cols": ( ("ced_code", "", 0, "Code"), ("ced_desc", "", 0, "Description", "Y")), "where": [ ("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", "E")]} wdc = { "stype": "R", "tables": ("wagedc",), "cols": ( ("ced_code", "", 0, "Code"), ("ced_desc", "", 0, "Description", "Y")), "where": [ ("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", "D")]} r1s = (("Weekly","W"),("2xWeekly","F"),("Monthly ","M")) r2s = (("Cash ","C"),("Cheque ","Q"),("Electronic","E")) r3s = (("Yes","Y"),("No","N")) r4s = (("Current","1"),("Transmission","2"),("Savings","3")) fld = ( (("T",0,0,0),"IUI",5,"Emp-Num","Employee Number", "","Y",self.doEmpNum,wgm,None,("notzero",)), (("T",0,0,0),"IUI",3,"Department","", "","N",self.doDept,dep,None,None), (("T",0,0,0),"IUI",1,"Class","", "","N",None,None,None,None), (("T",1,0,0),"INA",30,"Surname","", "","N",None,None,None,("notblank",)), (("T",1,1,0),"INA",30,"Names","", "","N",None,None,None,("notblank",)), (("T",1,2,0),"ID1",10,"Date of Birth","", "","N",self.doDOB,None,None,("efld",)), (("T",1,3,0),"INA",13,"ID Number","", "","N",self.doIdNo,None,None,("idno",)), (("T",1,4,0),"INA",16,"Spouse Name","", "","N",None,None,None,None), (("T",1,5,0),"INA",13,"Spouse ID Number","", "","N",self.doIdNo,None,None,("idno",)), (("T",1,6,0),"INA",30,"Address Line 1","", "","N",None,None,None,("notblank",)), (("T",1,7,0),"INA",30,"Address Line 2","", "","N",None,None,None,None), (("T",1,8,0),"INA",30,"Address Line 3","", "","N",None,None,None,None), (("T",1,9,0),"INA",4,"Postal Code","", "","N",None,None,None,("notblank",)), (("T",1,10,0),"INA",16,"Telephone Number","", "","N",None,None,None,None), (("T",1,11,0),"ITX",50,"E-Mail Address","", "","N",None,None,None,("email",)), (("T",1,12,0),"ID1",10,"Start Date","", "","N",None,None,None,("efld",)), (("T",1,13,0),"IUD",10.2,"Salary/Rate","", "","N",None,None,None,("efld",)), (("T",1,14,0),("IRB",r1s),0,"Pay Freq","Pay Frequency", "M","N",None,None,None,None), (("T",1,15,0),("IRB",r2s),0,"Pay Type","", "E","N",self.doPayTyp,None,None,None), (("T",2,0,0),("IRB",r3s),0,"P.A.Y.E.","", "Y","N",None,None,None,None), (("T",2,1,0),"INA",16,"Tax Office","", "","N",None,None,None,None), (("T",2,2,0),"INA",10,"Tax Number","", "","N",None,None,None,None), (("T",2,3,0),"IUA",1,"Nature of Employee","", "A","N",None,None,None,("notblank",)), (("T",2,4,0),"IUI",9,"Reg Number","Registration Number", "","N",None,None,None,None), (("T",2,5,0),"IUA",1,"Voluntary Excess","", "N","N",None,None,None,None), (("T",2,6,0),"IUD",6.2,"Fixed Rate","", "","N",None,None,None,None), (("T",2,7,0),"INA",13,"Directive","", "","N",None,None,None,None), (("T",3,0,0),("IRB",r4s),0,"Account Type","Bank Account Type", "1","N",None,None,None,None), (("T",3,1,0),"INA",30,"Bank Name","", "","N",self.doBankNam,None,None,None), (("T",3,2,0),"IUI",8,"Branch Code","Bank Branch Code", "","N",self.doBankBch,None,None,None), (("T",3,3,0),"INA",16,"Account Number","Bank Account Number", "","N",self.doBankAcc,None,None,None), (("T",3,4,0),"INA",30,"Account Holder's Name","", "","N",self.doHolderNam,None,None,None), (("T",3,5,0),"IUI",1,"Holder's Relationship","", "","N",self.doHolderRel,None,None,None), (("C",4,0,0),"IUI",3,"Cod","Earnings Code", "","N",self.doEarnCod,wec,None,("efld",)), (("C",4,0,1),"ONA",30,"Description"), (("C",4,0,2),"ISD",13.2,"Amnt/Rate","Amount or Rate", "","N",self.doEarnAmt,None,self.doCodeDelete,("efld",)), (("C",5,0,0),"IUI",3,"Cod","Deduction Code", "","N",self.doDedCod,wdc,None,("efld",)), (("C",5,0,1),"ONA",30,"Description"), (("C",5,0,2),"ISD",13.2,"Amnt/Rate","Employees Amount or Rate", "","N",self.doDedEAmt,None,self.doCodeDelete,("efld",)), (("C",5,0,3),"ISD",13.2,"Amnt/Rate","Employers Amount or Rate", "","N",self.doDedRAmt,None,None,("efld",)), (("T",6,0,0),"ISD",13.2,"Balance-1","", "","N",None,None,None,("efld",)), (("T",6,1,0),"ISD",13.2,"Balance-2","", "","N",None,None,None,("efld",)), (("T",6,2,0),"ISD",13.2,"Balance-3","", "","N",None,None,None,("efld",))) tag = ( ("General",None,("T",0,0),("T",0,1)), ("Tax",None,("T",0,0),("T",0,1)), ("Bank",None,("T",0,0),("T",0,1)), ("Earnings",None,("T",0,0),("T",0,1)), ("Deductions",None,("T",0,0),("T",0,1)), ("Balances",None,("T",0,0),("T",0,1))) tnd = ( (self.doEnd, "n"), (self.doEnd, "n"), (self.doEnd, "n"), (self.doEnd, "n"), None, None, (self.doEnd, "y")) txt = ( self.doExit, self.doExit, self.doExit, self.doExit, None, None, self.doExit) cnd = ( None, None, None, None, (self.doEndEarn, "y"), (self.doEndDed, "y"), None) cxt = ( None, None, None, None, self.doExit, self.doExit, None) but = ( ("Accept",None,self.doAccept,0,("T",0,2),("T",0,1)), ("Print",None,self.doPrint,0,("T",0,2),("T",0,0)), ("Cancel",None,self.doCancel,0,("T",0,2),("T",0,0)), ("Quit",None,self.doCloseProcess,1,None,None)) row = [0,0,0,0,15,15,0] self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, rows=row, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but, clicks=self.doClick) def doClick(self, *opts): if self.df.pag == 0: return self.df.focusField("T", opts[0][0], opts[0][1] + 1) def doEmpNum(self, frt, pag, r, c, p, i, w): self.empno = w self.oldm = self.sql.getRec("wagmst", where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", self.empno)], limit=1) self.oldb = self.sql.getRec("wagbal", where=[("wbl_cono", "=", self.opts["conum"]), ("wbl_empno", "=", self.empno)], order="wbl_balno") if not self.oldm: self.new = True self.term = 0 self.ptyp = "" else: self.new = False self.term = self.oldm[len(self.oldm)-1] d = 1 for pg in range(0, self.df.pgs): for x in range(0, self.df.topq[pg]): self.df.loadEntry("T", pg, x, data=self.oldm[d]) d = d + 1 self.ptyp = self.df.t_work[1][0][15] self.doLoadEarnDed("E") self.doLoadEarnDed("D") if self.oldb: for b in self.oldb: self.df.loadEntry("T", 6, b[2]-1, data=b[3]) def doDept(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("ctldep", cols=["dep_name"], where=[("dep_cono", "=", self.opts["conum"]), ("dep_code", "=", w)], limit=1) if not acc: return "Invalid Department" self.dept = w def doDOB(self, frt, pag, r, c, p, i, w): self.dob = w def doIdNo(self, frt, pag, r, c, p, i, w): if p == 6: a = int(int(w) / 10000000) b = int(self.dob % 1000000) if a != b: return "ID Number Does Not Agree with Birth Date" def doPayTyp(self, frt, pag, r, c, p, i, w): self.ptyp = w def doBankNam(self, frt, pag, r, c, p, i, w): if self.ptyp == "E" and not w: return "Invalid Bank Name" def doBankBch(self, frt, pag, r, c, p, i, w): if self.ptyp == "E" and not w: return "Invalid Branch" def doBankAcc(self, frt, pag, r, c, p, i, w): if self.ptyp == "E" and not w: return "Invalid Account" def doHolderNam(self, frt, pag, r, c, p, i, w): self.holnam = w def doHolderRel(self, frt, pag, r, c, p, i, w): self.holrel = w def doEnd(self): if self.df.pag == 0: self.df.focusField("T", 1, 1) elif self.df.pag == 1: self.df.selPage("Tax") self.df.focusField("T", 2, 1) elif self.df.pag == 2: self.df.selPage("Bank") self.df.focusField("T", 3, 1) elif self.df.pag == 3: self.df.selPage("Earnings") elif self.df.pag == 6: self.doAccept() def doEarnCod(self, frt, pag, r, c, p, i, w): desc = self.sql.getRec("wagedc", cols=["ced_desc"], where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", "E"), ("ced_code", "=", w)], limit=1) if not desc: return "Invalid Code" self.code = w self.df.loadEntry(frt, pag, p+1, data=desc[0]) code = self.sql.getRec("wagcod", cols=["wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", "E"), ("wcd_code", "=", w)], limit=1) if not code: self.ncod = "y" else: self.ncod = "n" self.df.loadEntry(frt, pag, p+2, data=code[0]) def doEarnAmt(self, frt, pag, r, c, p, i, w): self.eamt = w self.ramt = 0 def doEndEarn(self): self.doEndCode("E") def doDedCod(self, frt, pag, r, c, p, i, w): desc = self.sql.getRec("wagedc", cols=["ced_desc"], where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", "D"), ("ced_code", "=", w)], limit=1) if not desc: return "Invalid Code" self.code = w self.df.loadEntry(frt, pag, p+1, data=desc[0]) code = self.sql.getRec("wagcod", cols=["wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", "D"), ("wcd_code", "=", w)], limit=1) if not code: self.ncod = "y" else: self.ncod = "n" self.df.loadEntry(frt, pag, p+2, data=code[0]) self.df.loadEntry(frt, pag, p+3, data=code[1]) def doDedEAmt(self, frt, pag, r, c, p, i, w): self.eamt = w def doDedRAmt(self, frt, pag, r, c, p, i, w): self.ramt = w def doEndDed(self): self.doEndCode("D") def doEndCode(self, rtype): if self.ncod == "y": self.sql.insRec("wagcod", data=[self.opts["conum"], self.empno, rtype, self.code, self.eamt, self.ramt]) else: self.sql.updRec("wagcod", cols=["wcd_eamt", "wcd_ramt"], data=[self.eamt, self.ramt], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", rtype), ("wcd_code", "=", self.code)]) self.doLoadEarnDed(rtype, focus=True) def doLoadEarnDed(self, rtype, focus=False): if rtype == "E": pag = 4 else: pag = 5 self.df.clearFrame("C", pag) codes = self.sql.getRec(tables=["wagcod", "wagedc"], cols=["wcd_code", "ced_desc", "wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", rtype), ("ced_cono = wcd_cono",), ("ced_type = wcd_type",), ("ced_code = wcd_code",)]) if not codes: return p = 0 for cod in codes: for i, c in enumerate(cod): if rtype == "E" and i == 3: continue self.df.loadEntry("C", pag, p, data=c) p = p + 1 if focus: self.df.focusField("C", pag, p+1) else: self.df.last[pag][1] = p + 1 def doCodeDelete(self): if self.df.pag == 4: rtype = "E" else: rtype = "D" code = self.df.c_work[self.df.pag][self.df.row][self.df.idx-2] self.sql.delRec("wagcod", where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", rtype), ("wcd_code", "=", code)]) self.doLoadEarnDed(rtype, focus=True) def doAccept(self): frt, pag, col, mes = self.df.doCheckFields(("T",0,None)) if not mes: frt, pag, col, mes = self.df.doCheckFields(("T",1,None)) if not mes: frt, pag, col, mes = self.df.doCheckFields(("T",2,None)) if not mes and self.df.t_work[1][0][15] == "E": frt, pag, col, mes = self.df.doCheckFields(("T",3,None)) if mes: if pag > 0 and pag != self.df.pag: if frt == "T": self.df.last[pag][0] = col+1 else: self.df.last[pag][1] = col+1 self.df.selPage(self.df.tags[pag - 1][0]) self.df.focusField(frt, pag, (col+1), err=mes) else: data = [self.opts["conum"]] for p in range(0, self.df.pgs): for x in range(0, self.df.topq[p]): data.append(self.df.t_work[p][0][x]) data.append(self.term) if self.new: self.sql.insRec("wagmst", data=data) for b in range(3): data = [self.opts["conum"], self.empno, b+1, self.df.t_work[6][0][b], ""] self.sql.insRec("wagbal", data=data) else: dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3]) if data != self.oldm[:len(data)]: col = self.sql.wagmst_col data.append(self.oldm[col.index("wgm_xflag")]) self.sql.updRec("wagmst", data=data, where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", self.empno)]) for num, dat in enumerate(self.oldm): if dat != data[num]: self.sql.insRec("chglog", data=["wagmst", "U", "%03i%05i" % (self.opts["conum"], self.empno), col[num], dte, self.opts["capnm"], str(dat), str(data[num]), "", 0]) for n, b in enumerate(self.df.t_work[6][0]): lvl = n + 1 data = [self.opts["conum"], self.empno, lvl, b] whr = [ ("wbl_cono", "=", self.opts["conum"]), ("wbl_empno", "=", self.empno), ("wbl_balno", "=", lvl)] chk = self.sql.getRec("wagbal", where=whr, limit=1) if not chk: self.sql.insRec("wagbal", data=data) continue if data != self.oldb[n][:len(data)]: col = self.sql.wagbal_col data.append(self.oldb[n][col.index("wbl_xflag")]) self.sql.updRec("wagbal", data=data, where=whr) for num, dat in enumerate(self.oldb[n]): if dat != data[num]: self.sql.insRec("chglog", data=["wagbal", "U", "%03i%05i%i" % (self.opts["conum"], self.empno, lvl), col[num], dte, self.opts["capnm"], str(dat), str(data[num]), "", 0]) self.opts["mf"].dbm.commitDbase() self.df.last[0] = [0, 0] self.df.selPage("General") self.df.focusField("T", 0, 1) def doMainDelete(self): t = self.sql.getRec("wagtf1", cols=["count(*)"], where=[("wt1_cono", "=", self.opts["conum"]), ("wt1_empno", "=", self.empno)], limit=1) if t[0]: return "Transactions 1 Exist, Not Deleted" t = self.sql.getRec("wagtf2", cols=["count(*)"], where=[("wt2_cono", "=", self.opts["conum"]), ("wt2_empno=%s", "=", self.empno)], limit=1) if t[0]: return "Transactions 2 Exist, Not Deleted" t = self.sql.getRec("wagltf", cols=["count(*)"], where=[("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=", self.empno)], limit=1) if t[0]: return "Loan Transactions Exist, Not Deleted" self.sql.delRec("wagbal", where=[("wbl_cono", "=", self.opts["conum"]), ("wbl_empno", "=", self.empno)]) self.sql.delRec("wagcap", where=[("wcp_cono", "=", self.opts["conum"]), ("wcp_empno", "=", self.empno)]) self.sql.delRec("wagcod", where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno)]) self.sql.delRec("waglmf", where=[("wlm_cono", "=", self.opts["conum"]), ("wlm_empno", "=", self.empno)]) self.sql.delRec("wagmst", where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", self.empno)]) dte = int("%04i%02i%02i%02i%02i%02i" % time.localtime()[:-3]) self.sql.insRec("chglog", data=["wagmst", "D", "%03i%05i" % (self.opts["conum"], self.empno), "", dte, self.opts["capnm"], "", "", "", 0]) self.opts["mf"].dbm.commitDbase() self.df.focusField("T", 0, 1) def doPrint(self): tables = [] for pag in range(0, (self.df.pgs+1)): for x in range(0, self.df.topq[pag]): lin = [] lin.append(self.df.topf[pag][x][3]) lin.append(self.df.t_disp[pag][0][x]) tables.append(lin) heads = ["Salaries and Wages File Maintenance"] cols = [["a","NA",30.0,"Field Name"], ["b","NA",30.0,"Values"]] state = self.df.disableButtonsTags() RepPrt(self.opts["mf"], name=self.__class__.__name__, tables=tables, heads=heads, cols=cols, conum=self.opts["conum"], conam=self.opts["conam"], ttype="D") self.df.enableButtonsTags(state=state) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doCancel(self): self.opts["mf"].dbm.rollbackDbase() self.df.last[0] = [0, 0] self.df.selPage("General") self.df.focusField("T", 0, 1) def doExit(self): if self.df.pag == 0: self.doCloseProcess() elif self.df.pag == 1: self.df.focusField("T", 0, 3) elif self.df.pag == 2: self.df.selPage("General") elif self.df.pag == 3: self.df.selPage("Tax") elif self.df.pag == 4: self.df.selPage("Deductions") elif self.df.pag == 5: self.df.selPage("Balances") def doCloseProcess(self): self.df.closeProcess() self.opts["mf"].closeLoop()
class wg4010(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, ["wagmst", "wagedc", "wagcod", "wagbal", "wagtf1", "wagtf2"], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) wagctl = gc.getCtl("wagctl", self.opts["conum"]) if not wagctl: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) if t[1] < 3: self.taxyr = t[0] else: self.taxyr = t[0] + 1 self.startb = self.startt = (((self.taxyr - 1) * 10000) + 301) if not self.taxyr % 4: self.endb = self.endt = ((self.taxyr * 10000) + 229) else: self.endb = self.endt = ((self.taxyr * 10000) + 228) return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Salaries/Wages Interrogation (%s)" % self.__class__.__name__) wgm = { "stype": "R", "tables": ("wagmst", ), "cols": (("wgm_empno", "", 0, "EmpNo"), ("wgm_sname", "", 0, "Surname"), ("wgm_fname", "", 0, "Names")), "where": [("wgm_cono", "=", self.opts["conum"])] } r1s = (("Weekly", "W"), ("2xWeekly", "F"), ("Monthly ", "M")) r2s = (("Cash ", "C"), ("Cheque ", "Q"), ("Electronic", "E")) r3s = (("Yes", "Y"), ("No", "N")) r4s = (("Current", "1"), ("Transmission", "2"), ("Savings", "3")) tag = (("General", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Tax", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Bank", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Earnings", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Deductions", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Balances", self.doTagSelect, ("T", 0, 2), ("T", 0, 1)), ("Progs", self.doTaxYear, ("T", 0, 2), ("T", 0, 1)), ("Trans", self.doTaxYear, ("T", 0, 2), ("T", 0, 1))) fld = ((("T", 0, 0, 0), "IUI", 5, "Emp-Num", "Employee Number", "", "Y", self.doEmpno, wgm, None, ("notzero", )), (("T", 0, 0, 0), "OUI", 1, "Department"), (("T", 0, 0, 0), "OUI", 1, "Class"), (("T", 1, 0, 0), "ONA", 30, "Surname"), (("T", 1, 1, 0), "ONA", 30, "Names"), (("T", 1, 2, 0), "OD1", 10, "Date of Birth"), (("T", 1, 3, 0), "ONA", 13, "ID Number"), (("T", 1, 4, 0), "ONA", 16, "Spouse Name"), (("T", 1, 5, 0), "ONA", 13, "Spouse ID Number"), (("T", 1, 6, 0), "ONA", 30, "Address Line 1"), (("T", 1, 7, 0), "ONA", 30, "Address Line 2"), (("T", 1, 8, 0), "ONA", 30, "Address Line 3"), (("T", 1, 9, 0), "ONA", 4, "Postal Code"), (("T", 1, 10, 0), "ONA", 16, "Telephone Number"), (("T", 1, 11, 0), "OTX", 50, "E-Mail Address"), (("T", 1, 12, 0), "OD1", 10, "Start Date"), (("T", 1, 13, 0), "Od1", 10, "Term Date"), (("T", 1, 14, 0), "OUD", 13.2, "Salary"), (("T", 1, 15, 0), ("ORB", r1s), 1, "Pay Freq"), (("T", 1, 16, 0), ("ORB", r2s), 1, "Pay Type"), (("T", 2, 0, 0), ("ORB", r3s), 1, "P.A.Y.E."), (("T", 2, 1, 0), "ONA", 16, "Tax Office"), (("T", 2, 2, 0), "ONA", 10, "Tax Number"), (("T", 2, 3, 0), "OUA", 1, "Nature of Employee"), (("T", 2, 4, 0), "OUI", 9, "Reg Number"), (("T", 2, 5, 0), "OUA", 1, "Voluntary Excess"), (("T", 2, 6, 0), "OUD", 6.2, "Fixed Rate"), (("T", 2, 7, 0), "ONA", 13, "Directive"), (("T", 3, 0, 0), ("ORB", r4s), 0, "Account Type"), (("T", 3, 1, 0), "ONA", 30, "Bank Name"), (("T", 3, 2, 0), "OUI", 8, "Branch Code"), (("T", 3, 3, 0), "ONA", 16, "Account Number"), (("T", 3, 4, 0), "ONA", 30, "Holder's Name"), (("T", 3, 5, 0), "OUI", 1, "Holder's Relationship"), (("C", 4, 0, 0), "OUI", 3, "Cod"), (("C", 4, 0, 1), "ONA", 30, "Description"), (("C", 4, 0, 2), "OSD", 13.2, "Amnt/Rate"), (("C", 5, 0, 0), "OUI", 3, "Cod"), (("C", 5, 0, 1), "ONA", 30, "Description"), (("C", 5, 0, 2), "OSD", 13.2, "Employee"), (("C", 5, 0, 3), "OSD", 13.2, "Employer"), (("T", 6, 0, 0), "OSD", 13.2, "Balance-1"), (("T", 6, 1, 0), "OSD", 13.2, "Balance-2"), (("T", 6, 2, 0), "OSD", 13.2, "Balance-3"), (("T", 7, 0, 0), "IUI", 4, "Tax Year", "Tax Year", self.taxyr, "N", self.doBals, None, None, None), (("C", 7, 0, 0), "OUA", 1, "T"), (("C", 7, 0, 1), "OUI", 3, "Cod"), (("C", 7, 0, 2), "ONA", 30, "Description"), (("C", 7, 0, 3), "OSD", 13.2, "Hours"), (("C", 7, 0, 4), "OSD", 13.2, "Value"), (("T", 8, 0, 0), "IUI", 4, "Tax Year", "Tax Year", self.taxyr, "N", self.doTrans, None, None, None)) tnd = (None, None, None, None, None, None, None, None, None) txt = (self.doExit, None, None, None, None, None, None, None, self.doExit) but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 0, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) row = [0, 0, 0, 0, 15, 15, 0, 15, 0] self.df = TartanDialog(self.opts["mf"], title=self.tit, eflds=fld, tags=tag, rows=row, tend=tnd, txit=txt, butt=but) def doEmpno(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("wagmst", where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", w)], limit=1) if not acc: return "Invalid Employee Number" self.empno = w self.sname = acc[4] self.fname = acc[5] acc.insert(17, acc.pop()) # Termination Date self.df.loadEntry("T", 0, 1, data=acc[2]) # Department self.df.loadEntry("T", 0, 2, data=acc[3]) # Class d = 4 for pg in range(1, 4): for x in range(0, self.df.topq[pg]): self.df.loadEntry("T", pg, x, data=acc[d]) d = d + 1 self.loadDetail() self.opts["mf"].updateStatus("") def loadDetail(self): ear = self.sql.getRec( tables=["wagcod", "wagedc"], cols=["wcd_type", "wcd_code", "ced_desc", "wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", "E"), ("ced_cono=wcd_cono", ), ("ced_type=wcd_type", ), ("ced_code=wcd_code", )], order="wcd_code") p = 0 for e in ear: for y in range(1, 4): self.df.loadEntry("C", 4, p, data=e[y]) p += 1 ded = self.sql.getRec( tables=["wagcod", "wagedc"], cols=["wcd_type", "wcd_code", "ced_desc", "wcd_eamt", "wcd_ramt"], where=[("wcd_cono", "=", self.opts["conum"]), ("wcd_empno", "=", self.empno), ("wcd_type", "=", "D"), ("ced_cono=wcd_cono", ), ("ced_type=wcd_type", ), ("ced_code=wcd_code", )], order="wcd_code") p = 0 for d in ded: for y in range(1, 5): self.df.loadEntry("C", 5, p, data=d[y]) p += 1 bal = self.sql.getRec("wagbal", where=[("wbl_cono", "=", self.opts["conum"]), ("wbl_empno", "=", self.empno)]) if bal: for b in bal: self.df.loadEntry("T", 6, (b[2] - 1), data=b[3]) def doTagSelect(self): self.opts["mf"].updateStatus("") def doBals(self, frt, pag, r, c, p, i, w): self.startb = (((w - 1) * 10000) + 301) if not w % 4: self.endb = ((w * 10000) + 229) else: self.endb = ((w * 10000) + 228) wt2 = self.sql.getRec("wagtf2", cols=[ "wt2_type", "wt2_code", "round(sum(wt2_hrs),2)", "round(sum(wt2_eamt),2)" ], where=[("wt2_cono", "=", self.opts["conum"]), ("wt2_empno", "=", self.empno), ("wt2_date", "between", self.startb, self.endb)], group="wt2_type, wt2_code", order="wt2_type desc, wt2_code") if wt2: for num, line in enumerate(wt2): typ = CCD(line[0], "UA", 1.0) cod = CCD(line[1], "UI", 3.0) det = self.sql.getRec("wagedc", cols=["ced_desc"], where=[("ced_cono", "=", self.opts["conum"]), ("ced_type", "=", typ.work), ("ced_code", "=", cod.work)], limit=1) if not det: des = "Unknown" else: des = det[0] self.df.loadEntry("C", pag, (num * 5), data=typ.work) self.df.loadEntry("C", pag, (num * 5) + 1, data=cod.work) self.df.loadEntry("C", pag, (num * 5) + 2, data=des) if line[2]: self.df.loadEntry("C", pag, (num * 5) + 3, data=line[2]) self.df.loadEntry("C", pag, (num * 5) + 4, data=line[3]) def doTrans(self, frt, pag, r, c, p, i, w): self.startt = (((w - 1) * 10000) + 301) if not w % 4: self.endt = ((w * 10000) + 229) else: self.endt = ((w * 10000) + 228) tit = "Transactions for Employee: %s - %s %s" % \ (self.empno, self.fname, self.sname) tab = ["wagtf1"] wcp = (("wt1_date", "", 0, "Date"), ("wt1_page", "", 0, "Number"), ("wt1_nhrs", "", 13.2, "Norm-Hrs"), ("wt1_npay", "", 13.2, "Norm-Pay"), ("wt1_taxbl", "", 13.2, "Tx-Pay"), ("wt1_notax", "", 13.2, "Non-Tx-Pay"), ("wt1_taxdd", "", 13.2, "Tx-Ded"), ("wt1_nondd", "", 13.2, "Non-Tx-Ded")) whr = [("wt1_cono", "=", self.opts["conum"]), ("wt1_empno", "=", self.empno), ("wt1_date", "between", self.startt, self.endt)] odr = "wt1_date" state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.df.nb.Page7, title=tit, tables=tab, cols=wcp, where=whr, order=odr) self.df.enableButtonsTags(state=state) self.doTaxYear() def doTaxYear(self): if self.df.pag == 7: self.df.clearFrame("C", 7) self.df.focusField("T", 7, 1) else: self.df.focusField("T", 8, 1) def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "WAG", self.empno) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doClear(self): self.df.selPage("General") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = (("Information", "I"), ("Transactions", "T"), ("Both", "B"), ("None", "N")) self.doPrintOption( askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): if opt == "N": return self.head = "%03u %-110s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pglin = 999 if opt != "T": self.pageHeading() self.printInfo() pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") if opt == "I": self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "B": self.wagtrn = self.doGetTrans() if not self.wagtrn: self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) else: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "T": self.wagtrn = self.doGetTrans() if self.wagtrn: self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) def printInfo(self): self.fpdf.drawText("%15s %-25s %s" % \ ("", self.df.topf[0][0][3], self.df.t_disp[0][0][0])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 # General Screen for x in range(0, len(self.df.topf[1])): self.fpdf.drawText("%15s %-25s %s" % \ ("", self.df.topf[1][x][3], self.df.t_disp[1][0][x])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 # Tax Screen for x in range(0, len(self.df.topf[2])): self.fpdf.drawText("%15s %-25s %s" % \ ("", self.df.topf[2][x][3], self.df.t_disp[2][0][x])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 # Bank Details Screen if self.df.t_work[1][0][15] == "E": for x in range(0, len(self.df.topf[3])): self.fpdf.drawText("%15s %-25s %s" % \ ("", self.df.topf[3][x][3], self.df.t_disp[3][0][x])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 # Balances Screen self.pglin += 1 for x in range(0, len(self.df.topf[6])): self.fpdf.drawText("%15s %-25s %s" % \ ("", self.df.topf[6][x][3], self.df.t_disp[6][0][x])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 # Earnings and Deductions Screen self.fpdf.drawText("%15s %29s" % ("", "Earnings and Deductions Codes")) self.pglin += 1 self.fpdf.drawText("%15s %29s" % ("", self.fpdf.suc * 29)) self.pglin += 1 self.fpdf.drawText("%15s %-3s %-1s %-30s %12s %12s " % \ ("", "Cod", "T", "Description", "Employee", "Employer")) self.pglin += 1 self.fpdf.drawText("%15s %s" % ("", self.fpdf.suc * 63)) self.pglin += 1 for x in range(0, len(self.df.colf[4])): if self.df.c_work[4][x][0] not in ("", 0): self.fpdf.drawText("%15s %s %s %s %12s" % \ ("", self.df.c_disp[4][x][0], "E", self.df.c_disp[4][x][1], self.df.c_disp[4][x][2])) self.pglin += 1 for x in range(0, len(self.df.colf[5])): if self.df.c_work[5][x][0] not in ("", 0): self.fpdf.drawText("%15s %s %s %s %12s %12s" % \ ("", self.df.c_disp[5][x][0], "D", self.df.c_disp[5][x][1], self.df.c_disp[5][x][2], self.df.c_disp[5][x][3])) self.pglin += 1 # Progressive Balances Screen if self.startb is None or self.endb is None: pass else: self.fpdf.drawText() self.pglin += 1 s = CCD(self.startb, "D1", 10.0) e = CCD(self.endb, "D1", 10.0) self.fpdf.drawText("%15s %-25s %10s %2s %10s" % \ ("", "Progressive Balances from", s.disp, "to", e.disp)) self.pglin += 1 self.fpdf.drawText("%15s %s" % ("", self.fpdf.suc * 50)) self.pglin += 1 self.fpdf.drawText("%15s %-3s %-1s %-30s %12s %12s " % \ ("", "Cod", "T", "Description", "Hours", "Value")) self.pglin += 1 self.fpdf.drawText("%15s %s" % ("", self.fpdf.suc * 63)) self.pglin += 1 for x in range(0, len(self.df.colf[7])): if self.df.c_work[7][x][0]: if self.df.c_work[7][x][3]: hr = self.df.c_disp[7][x][3] else: hr = " " self.fpdf.drawText( "%15s %s %s %s %12s %12s" % ("", self.df.c_disp[7][x][0], self.df.c_disp[7][x][1], self.df.c_disp[7][x][2], hr, self.df.c_disp[7][x][4])) self.pglin += 1 self.fpdf.drawText() self.pglin += 1 def doGetTrans(self): if self.startt is None or self.endt is None: return wagtrn = self.sql.getRec("wagtf1", cols=[ "wt1_date", "wt1_page", "wt1_nhrs", "wt1_npay", "wt1_taxbl", "wt1_notax", "wt1_taxdd, wt1_nondd" ], where=[("wt1_cono", "=", self.opts["conum"]), ("wt1_empno", "=", self.empno), ("wt1_date", "between", self.startt, self.endt)], order="wt1_date") return wagtrn def printTrans(self): for x in range(0, len(self.wagtrn)): date = CCD(self.wagtrn[x][0], "D1", 10) page = CCD(self.wagtrn[x][1], "UI", 5) nhrs = CCD(self.wagtrn[x][2], "SD", 13.2) npay = CCD(self.wagtrn[x][3], "SD", 13.2) taxbl = CCD(self.wagtrn[x][4], "SD", 13.2) notax = CCD(self.wagtrn[x][5], "SD", 13.2) taxdd = CCD(self.wagtrn[x][6], "SD", 13.2) nondd = CCD(self.wagtrn[x][7], "SD", 13.2) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingTrans() net = CCD((float(ASD(taxbl.work) + ASD(notax.work) - \ ASD(taxdd.work) - ASD(nondd.work))), "OSD", 13.2) self.fpdf.drawText( "%s %s %s %s %s %s %s %s %s" % (date.disp, page.disp, nhrs.disp, npay.disp, taxbl.disp, notax.disp, taxdd.disp, nondd.disp, net.disp)) self.pglin += 1 def pageHeading(self): self.fpdf.add_page() self.fpdf.setFont(style="B") self.fpdf.drawText(self.head) self.fpdf.drawText() self.fpdf.drawText("%-38s %-10s" % \ ("Salaries and Wages Interrogation as at", self.sysdtd)) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 6 def pageHeadingTrans(self): self.fpdf.setFont(style="B") self.fpdf.drawText() self.fpdf.drawText("%8s Emp-Num: %5s Surname: %s Names: %s" % \ ("", self.empno, self.df.t_disp[1][0][0], self.df.t_disp[1][0][1])) self.fpdf.drawText() s = CCD(self.startt, "D1", 10.0) e = CCD(self.endt, "D1", 10.0) self.fpdf.drawText("%8s %-17s %10s %2s %10s" % \ ("", "Transactions from", s.disp, "to", e.disp)) self.fpdf.drawText() self.fpdf.drawText( "%-10s %5s %12s %12s %12s %12s %12s %12s %12s" % (" Date", "Page", "Norm-Hrs", "Norm-Pay", "Taxbl-Pay", "Non-Taxbl", "Tax-D-Ded", "Non-D-Ded", "Net-Pay")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 10 def doExit(self): self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class sl4010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() if "wait" in self.opts: self.df.mstFrame.wait_window() else: self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["ctlynd", "wagmst", "waglmf", "wagltf"], prog=self.__class__.__name__) if self.sql.error: return gc = GetCtl(self.opts["mf"]) wagctl = gc.getCtl("wagctl", self.opts["conum"]) if not wagctl: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) # Get the current period starting date period = self.sql.getRec("ctlynd", cols=["max(cye_period)"], where=[("cye_cono", "=", self.opts["conum"])], limit=1)[0] self.opts["period"] = getPeriods(self.opts["mf"], self.opts["conum"], period)[0].work return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "Staff Loans Interrogation (%s)" % self.__class__.__name__) wgm = { "stype": "R", "tables": ("waglmf", "wagmst"), "cols": ( ("wlm_empno", "", 0, "EmpNo"), ("wgm_sname", "", 0, "Surname", "Y"), ("wgm_fname", "", 0, "Names")), "where": [ ("wlm_cono", "=", self.opts["conum"]), ("wgm_cono=wlm_cono",), ("wgm_empno=wlm_empno",)], "group": "wlm_empno"} lnm = { "stype": "R", "tables": ("waglmf",), "cols": ( ("wlm_empno", "", 0, "EmpNo"), ("wlm_loan", "", 0, "Ln"), ("wlm_desc", "", 0, "Description", "Y")), "where": [("wlm_cono", "=", self.opts["conum"])], "whera": [["T", "wlm_empno", 0, 0]], "order": "wlm_empno, wlm_loan", "index": 1} r1s = (("Yes", "Y"), ("No", "N")) tag = ( ("General", self.doGeneral, ("T",0,0), ("T",0,1)), ("Trans", self.doTrans1, ("T",0,0), ("T",0,1))) fld = ( (("T",0,0,0),"IUI",5,"Emp-Num","Employee Number", "","N",self.doEmp,wgm,None,("notzero",)), (("T",0,0,0),"ONA",40,"Name"), (("T",0,1,0),"IUI",5,"Loan-Num","Loan Number", "","N",self.doLoan,lnm,None,("notzero",)), (("T",0,1,0),"ONA",40,"Desc"), (("T",1,0,0),"OUI",3,"Deduction Code"), (("T",1,1,0),"OUD",6.2,"Interest Percentage"), (("T",1,2,0),"OD1",10,"Start Date"), (("T",1,3,0),"OSD",13.2,"Deduction Amount"), (("T",1,4,0),"OSD",13.2,"Total Advances"), (("T",1,5,0),"OSD",13.2,"Total Interest"), (("T",1,6,0),"OSD",13.2,"Total Repayments"), (("T",1,7,0),"OSD",13.2,"Total Adjustments"), (("T",1,8,0),"OSD",13.2,"Balance"), (("T",1,9,0),"Od1",10,"Last Interest Raised"), (("T",1,10,0),"Od1",10,"Last Payment Received"), (("T",2,0,0),("IRB",r1s),0,"History","", "Y","Y",self.doTrans2,None,None,None)) tnd = ((self.doEndTop,"N"), None, None) txt = (self.doExit, None, None) cnd = (None, None, None) cxt = (None, None, None) but = ( ("Clear",None,self.doClear,0,("T",0,0),("T",0,1)), ("Print",None,self.doPrint,0,("T",0,0),("T",0,1)), ("Quit",None,self.doExit,1,None,None)) self.df = TartanDialog(self.opts["mf"], title=self.tit, eflds=fld, tags=tag, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but) def doEmp(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("wagmst", cols=["wgm_sname", "wgm_fname"], where=[("wgm_cono", "=", self.opts["conum"]), ("wgm_empno", "=", w)], limit=1) if not acc: return "Invalid Employee Number" self.empno = w self.name = "%s, %s" % (acc[0], acc[1]) self.history = "Y" self.df.loadEntry("T", pag, p+1, data=self.name) def doLoan(self, frt, pag, r, c, p, i, w): lmc = self.sql.waglmf_col rec = self.sql.getRec("waglmf", where=[("wlm_cono", "=", self.opts["conum"]), ("wlm_empno", "=", self.empno), ("wlm_loan", "=", w)], limit=1) if not rec: return "Invalid Loan Number" self.loan = w self.desc = rec[lmc.index("wlm_desc")] self.df.loadEntry("T", pag, p+1, data=self.desc) self.df.loadEntry("T", 1, 0, data=rec[lmc.index("wlm_code")]) self.df.loadEntry("T", 1, 1, data=rec[lmc.index("wlm_rate")]) self.df.loadEntry("T", 1, 2, data=rec[lmc.index("wlm_start")]) self.df.loadEntry("T", 1, 3, data=rec[lmc.index("wlm_repay")]) # Raise Interest LoanInterest("S", self.opts["mf"].dbm, rec, update="Y", curdt=int(self.sysdtw / 100), tdate=self.sysdtw, refno="Pending") # Get Balances self.lon = 0.0 self.imt = 0.0 self.pay = 0.0 self.adj = 0.0 self.bal = 0.0 self.idt = 0 self.pdt = 0 whr = [ ("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=", self.empno), ("wlt_loan", "=", self.loan)] odr = "wlt_trdt, wlt_type" self.wlt = self.sql.getRec("wagltf", where=whr, order=odr) if self.wlt: col = self.sql.wagltf_col for rec in self.wlt: dat = CCD(rec[col.index("wlt_trdt")], "d1", 10) typ = CCD(rec[col.index("wlt_type")], "UI", 2) amt = CCD(rec[col.index("wlt_amt")], "SD",13.2) self.bal = float(ASD(self.bal) + ASD(amt.work)) if typ.work == 1: self.idt = dat.work self.imt = float(ASD(self.imt) + ASD(amt.work)) elif typ.work in (2, 3): self.lon = float(ASD(self.lon) + ASD(amt.work)) elif typ.work == 4: self.pay = float(ASD(self.pay) + ASD(amt.work)) self.pdt = dat.work elif typ.work == 5: self.adj = float(ASD(self.adj) + ASD(amt.work)) # Load Balances self.df.loadEntry("T", 1, 4, data=self.lon) self.df.loadEntry("T", 1, 5, data=self.imt) self.df.loadEntry("T", 1, 6, data=self.pay) self.df.loadEntry("T", 1, 7, data=self.adj) self.df.loadEntry("T", 1, 8, data=self.bal) self.df.loadEntry("T", 1, 9, data=self.idt) self.df.loadEntry("T", 1, 10, data=self.pdt) self.opts["mf"].updateStatus("") def doHist(self, frt, pag, r, c, p, i, w): self.history = w def doEndTop(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def loadBalances(self): whr = [ ("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=", self.empno), ("wlt_loan", "=", self.loan)] odr = "wlt_trdt, wlt_type" self.wlt = self.sql.getRec("wagltf", where=whr, order=odr) if self.wlt: for rec in self.wlt: dat = CCD(rec[self.sql.wagltf_col.index("wlt_trdt")], "d1", 10) typ = CCD(rec[self.sql.wagltf_col.index("wlt_type")], "UI", 2) amt = CCD(rec[self.sql.wagltf_col.index("wlt_amt")], "SD",13.2) self.bal = float(ASD(self.bal) + ASD(amt.work)) self.cap = float(ASD(self.cap) + ASD(amt.work)) if typ.work == 1: if dat.work >= self.opts["period"] and \ dat.work >= self.df.t_work[1][0][3]: self.cap = float(ASD(self.cap) - ASD(amt.work)) self.due = float(ASD(self.due) + ASD(amt.work)) self.imt = float(ASD(self.imt) + ASD(amt.work)) self.idt = dat.work elif typ.work in (2, 3): self.lon = float(ASD(self.lon) + ASD(amt.work)) elif typ.work == 4: self.pay = float(ASD(self.pay) + ASD(amt.work)) self.pdt = dat.work elif typ.work == 5: self.adj = float(ASD(self.adj) + ASD(amt.work)) def doGeneral(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 2, 1) def doTrans2(self, frt, pag, r, c, p, i, w): self.history = w tit = "Transactions for Loan: %s %s - %s" % \ (self.empno, self.name, self.desc) tab = ["wagltf"] col = (("wlt_trdt", "", 0, " Date"), ("wlt_batch", "", 0, "Batch"), ("wlt_type", ("XX", sltrtp), 3, "Typ"), ("wlt_ref", "", 0, "Reference", "Y"), ("wlt_per", "", 0, " Int-%"), ("wlt_amt", "", 0, " Amount"), ("wlt_ded", "", 0, " Deduction"), ("wlt_desc", "", 0, "Remarks")) whr = [ ("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=", self.empno), ("wlt_loan", "=", self.loan)] if self.history == "N": whr.append(("wlt_curdt", ">=", int(self.opts["period"] / 100))) odr = "wlt_trdt, wlt_type, wlt_ref" state = self.df.disableButtonsTags() SRec(self.opts["mf"], screen=self.df.nb.Page2, title=tit, tables=tab, cols=col, where=whr, order=odr) self.df.enableButtonsTags(state=state) self.df.focusField("T", 2, 1) def doClear(self): self.df.selPage("General") self.df.focusField("T", 0, 1) def doPrint(self): mess = "Select the Required Print Option." butt = ( ("Information", "I"), ("Transactions", "T"), ("Both", "B"), ("None", "N")) self.doPrintOption(askChoice(self.opts["mf"].body, "Print Options", mess, butt=butt)) self.df.focusField(self.df.frt, self.df.pag, self.df.col) def doPrintOption(self, opt): print(opt) if opt == "N": return self.head = "%03u %-93s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pglin = 999 if opt != "T": self.pageHeading() self.printInfo() pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") if opt == "I": self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "B": if not self.wlt: self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) else: self.acctot = 0.0 self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) elif opt == "T": if self.wlt: self.acctot = 0.0 self.pageHeading() self.pageHeadingTrans() self.printTrans() self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=["N", "V", "view"]) def printInfo(self): self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "", self.df.topf[0][0][3], self.df.t_disp[0][0][0])) self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "", self.df.topf[0][1][3], self.df.t_disp[0][0][1])) self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "", self.df.topf[0][2][3], self.df.t_disp[0][0][2])) self.fpdf.drawText() for x in range(0, len(self.df.topf[1])): self.fpdf.drawText("%-5s %-20s %-25s %s" % ("", "", self.df.topf[1][x][3], self.df.t_disp[1][0][x])) self.fpdf.drawText() def printTrans(self): whr = [ ("wlt_cono", "=", self.opts["conum"]), ("wlt_empno", "=", self.empno), ("wlt_loan", "=", self.loan)] odr = "wlt_trdt, wlt_type" if self.history == "N": whr.append(("wlt_curdt", ">=", int(self.opts["period"] / 100))) recs = self.sql.getRec("wagltf", where=whr, order=odr) for rec in recs: trd = CCD(rec[self.sql.wagltf_col.index("wlt_trdt")], "D1", 10) typ = CCD(rec[self.sql.wagltf_col.index("wlt_type")], "UI", 1) ref = CCD(rec[self.sql.wagltf_col.index("wlt_ref")], "Na", 9) bat = CCD(rec[self.sql.wagltf_col.index("wlt_batch")], "Na", 7) rte = CCD(rec[self.sql.wagltf_col.index("wlt_per")], "UD", 6.2) amt = CCD(rec[self.sql.wagltf_col.index("wlt_amt")], "SD", 13.2) ded = CCD(rec[self.sql.wagltf_col.index("wlt_ded")], "SD", 13.2) det = CCD(rec[self.sql.wagltf_col.index("wlt_desc")], "NA", 30) if self.pglin > self.fpdf.lpp: self.pageHeading() self.pageHeadingTrans() self.acctot = float(ASD(self.acctot) + ASD(amt.work)) self.fpdf.drawText("%s %s %s %s %s %s %s %s" % (trd.disp, sltrtp[(typ.work - 1)][0], ref.disp, bat.disp, rte.disp, amt.disp, ded.disp, det.disp)) self.pglin += 1 self.fpdf.underLine(txt=self.head) b = CCD(self.acctot, "SD", 13.2) self.fpdf.drawText("%-39s %13s %13s %-30s" % \ ("", b.disp, "", "Closing Balance")) def pageHeading(self): self.fpdf.add_page() self.fpdf.setFont(style="B") self.fpdf.drawText(self.head) self.fpdf.drawText() self.fpdf.drawText("Staff Loans Interrogation as at %s" % self.sysdtd) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 3 def pageHeadingTrans(self): self.fpdf.setFont(style="B") text = "%-8s %5s %-4s %s" % (self.df.topf[0][0][3], self.df.t_disp[0][0][0], self.df.topf[0][1][3], self.df.t_disp[0][0][1]) self.fpdf.drawText(text) text = "%-8s %5s %-4s %s" % (self.df.topf[0][2][3], self.df.t_disp[0][0][2], self.df.topf[0][3][3], self.df.t_disp[0][0][3]) self.fpdf.drawText(text) self.fpdf.drawText() self.fpdf.drawText("%-10s %-3s %-9s %-7s %6s %12s %12s %-30s" % \ (" Date", "Typ", "Reference", "Batch", "Int%", " Amount", " Deduction", "Remarks")) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 7 b = CCD(self.acctot, "SD", 13.2) if self.acctot != 0: self.fpdf.drawText("%-39s %13s %13s %-30s" % \ ("", b.disp, "", "Brought Forward")) self.pglin += 1 def doExit(self): try: self.opts["mf"].dbm.rollbackDbase() except: pass self.df.closeProcess() if "wait" not in self.opts: self.opts["mf"].closeLoop()
class pw1010(object): def __init__(self, **opts): self.opts = opts if not CRYPT: showError(self.opts["mf"].body, "Missing Module", "Either the CRYPT or PARAMIKO module is Missing") else: self.setVariables() self.mainProcess() self.opts["mf"].startLoop() def setVariables(self): self.saltchrs = "abcdefghijklmnopqrstuvwxyz"\ "ABCDEFGHIJKLMNOPQRSTUVWXYZ"\ "0123456789./" self.server = self.opts["mf"].rcdic["dbhost"] self.client = None random.seed() def mainProcess(self): tit = ("User Administration",) r1s = (("Mail", "M"), ("Client", "C")) fld = ( (("T",1,0,0),"ITX",50,"Server","", self.server,"N",self.doServer,None,None,("notblank",)), (("T",1,1,0),"ITX",20,"Admin Name","", "root","N",self.doAdmNam,None,None,("notblank",)), (("T",1,1,0),"IHA",20,"Password","", "","N",self.doAdmPwd,None,None,("notblank",)), (("T",2,0,0),"ITX",50,"User Name","", "","N",self.doUsrNam,None,None,("notblank",)), (("T",2,1,0),("IRB",r1s),0,"Type of Account","", "M","N",self.doUsrTyp,None,None,None), (("T",2,2,0),"IHA",20,"New Password","", "","N",self.doNewPwd,None,None,("notblank",)), (("T",2,3,0),"IHA",20,"Check Password","", "","N",self.doCheckPwd,None,None,("notblank",))) but = ( ("New",None,self.doNew,0,None,None), ("Amend",None,self.doAmend,0,None,None), ("Delete",None,self.doDelete,0,None,None), ("Quit",None,self.doQuit,0,None,None)) tag = (("Server",None,None,None), ("Accounts",None,None,None)) tnd = (None, (self.doEnd,"n"), (self.doEnd,"y")) txt = (None, self.doExit, self.doExit) self.df = TartanDialog(self.opts["mf"], tops=True, title=tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt, focus=True) def doNew(self): self.opt = "N" self.df.focusField("T", 2, 1) def doAmend(self): self.opt = "A" self.df.focusField("T", 2, 1) def doDelete(self): self.opt = "D" self.df.focusField("T", 2, 1) def doServer(self, frt, pag, r, c, p, i, w): self.server = w def doAdmNam(self, frt, pag, r, c, p, i, w): self.admnam = w def doAdmPwd(self, frt, pag, r, c, p, i, w): self.admpwd = w try: self.client = paramiko.SSHClient() self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) self.client.connect(self.server, username=self.admnam, password=self.admpwd) except: showError(self.opts["mf"].body, "SSH Error", "Cannot Open the Connection") return "ff1" def doUsrNam(self, frt, pag, r, c, p, i, w): self.usrnam = w self.usrpwd = None for x in range(4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, state="disabled") if self.opt == "A": return "sk1" if self.opt == "D": return "nd" def doUsrTyp(self, frt, pag, r, c, p, i, w): self.usrtyp = w def doNewPwd(self, frt, pag, r, c, p, i, w): self.usrpwd = w def doCheckPwd(self, frt, pag, r, c, p, i, w): if w != self.usrpwd: return "Passwords Do Not Agree" self.usrpwd = crypt.crypt(w, random.choice(self.saltchrs) + random.choice(self.saltchrs)) def doEnd(self): if self.df.pag == 1: self.df.selPage("Accounts") for x in range(4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, state="normal") self.opts["mf"].updateStatus("Click the Required Option Button") self.df.setWidget(self.df.topEntry[2][0], state="disabled") return if self.opt == "A": cmd = ["usermod -p %s %s" % (self.usrpwd, self.usrnam)] elif self.opt == "D": ask = askQuestion(self.opts["mf"].body, "Remove Directory", "Must the User's Home Directory Also be Deleted", default="no") if ask == "yes": cmd = ["userdel -r %s" % self.usrnam] else: cmd = ["userdel %s" % self.usrnam] elif self.opt == "N": cmd = [ "useradd -g users -m %s -p %s" % (self.usrnam, self.usrpwd)] if self.usrtyp == "M": cmd.extend([ "cp -r /etc/skel/Maildir /home/%s/" % self.usrnam, "maildirmake /home/%s/.maildir" % self.usrnam, "chown -R %s:users /home/%s" % (self.usrnam, self.usrnam), "chmod -R 700 /home/%s/Maildir" % self.usrnam]) err = self.executeCommand(cmd) if err: showError(self.opts["mf"].body, "SSH Error", err) self.doExit() def executeCommand(self, cmd): err = "" for c in cmd: try: chan = self.client.get_transport().open_session() chan.get_pty() try: if self.admnam != "root": chan.exec_command("sudo %s\n" % c) if chan.recv(4096).count("password"): chan.send("%s\n" % self.admpwd) else: chan.exec_command("%s\n" % c) except: err = "%s\n%s" % (err, "ERROR: Failed to Run Command %s" % c) chan.close() except: err = "Failed to Open a Channel to the Server" return err def doExit(self): if self.df.pag == 2: self.df.clearFrame("T", 2) for x in range(4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, state="normal") self.opts["mf"].updateStatus("Click the Required Option Button") self.df.setWidget(self.df.topEntry[2][0], state="disabled") return self.doQuit() def doQuit(self): if self.client: self.client.close() self.df.closeProcess() self.opts["mf"].closeLoop()
class ml2020(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Check for Valid Posting Routine if self.opts["rtn"] != 5: mes = "Invalid Routine %s" % str(self.opts["rtn"]) showError(self.opts["mf"].body, "Control Error", mes) return tabs = ["ctlvmf", "memmst", "memtrn"] self.gc = GetCtl(self.opts["mf"]) memctl = self.gc.getCtl("memctl", self.opts["conum"]) if not memctl: return self.glint = memctl["mcm_glint"] if self.glint == "Y": ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = ["mem_ctl", "vat_ctl", "dis_all"] if self.gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.memctl = ctlctl["mem_ctl"] self.dis_all = ctlctl["dis_all"] tabs.extend(["genmst", "gentrn"]) # Setup SQL Object self.sql = Sql(self.opts["mf"].dbm, tabs, prog=self.__class__.__name__) if self.sql.error: return self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "MEM", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] self.glt = 4 self.agevar = tk.BooleanVar() self.agevar.set(False) return True def drawDialog(self): mlm = { "stype": "R", "tables": ("memmst", ), "cols": (("mlm_memno", "", 0, "Mem-No"), ("mlm_oldno", "", 0, "Old-No"), ("mlm_gender", "", 0, "G"), ("mlm_state", "", 0, "S"), ("mlm_surname", "", 0, "Surname", "Y"), ("mlm_names", "", 0, "Names", "F")), "where": [("mlm_cono", "=", self.opts["conum"])], "order": "mlm_surname, mlm_names", "sort": False } tag = (("Deposit", None, None, None, False), ("Allocation", None, None, None, False)) fld = ((("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "INa", 9, "Reference", "Reference Number One", "i", "Y", self.doRefno, None, None, ("efld", )), (("C", 1, 0, 1), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 2), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, ("notzero", )), (("C", 1, 0, 3), "INA", 30, "Details", "Deposit Details", "", "N", self.doTrnDet, None, None, None), (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"), (("C", 2, 0, 0), "IUI", 6, "Mem-No", "Member Number", "r", "N", self.doMemAcc, mlm, None, ("notblank", )), (("C", 2, 0, 1), "ONA", 30, "Name"), (("C", 2, 0, 2), "ISD", 13.2, "Receipt", "Receipt Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 3), "ISD", 13.2, "Discount", "Discount Amount", "", "N", self.doDisAmt, None, None, ("efld", ), None, "Discount Amount to be Added to the Receipt Amount."), (("C", 2, 0, 4), "OSD", 13.2, "Total-Amount")) but = ( ("Age _Normal",None,self.doAgeNormal,0,None,None, "Only Show Unallocated Transactions",1), ("Age _History",None,self.doAgeHistory,0,None,None, "Show All Transactions Including Already Allocated",1), ("Age _Automatic",None,self.doAgeAuto,0,None,None, "Automatically Allocate the Amount Starting With the "\ "Oldest Unallocated One",1), ("Age _Current",None,self.doAgeCurrent,0,None,None, "Leave the Transaction Unallocated",1), ("Cancel",None,self.doCancel,0,("C",2,1),("C",1,1),"",1)) txt = (None, None, None) cnd = [None, (self.endPage1, "y"), (self.endPage2, "y")] cxt = [None, self.exitPage1, self.exitPage2] self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, txit=txt, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doRefno(self, frt, pag, r, c, p, i, w): if not w: trns = self.sql.getRec("memtrn", cols=["mlt_refno"], where=[("mlt_cono", "=", self.opts["conum"]), ("mlt_refno", "like", "R________")], order="mlt_refno desc") auto = False for trn in trns: try: w = "R%08i" % (int(trn[0][1:]) + 1) auto = True break except: pass if not auto: w = "R00000001" self.df.loadEntry(frt, pag, p, data=w) chk = self.sql.getRec("memtrn", cols=["mlt_memno"], where=[("mlt_cono", "=", self.opts["conum"]), ("mlt_type", "=", self.opts["rtn"]), ("mlt_refno", "=", w)]) if chk: return "A Transaction with this Number Already Exists" self.refno = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w self.allocated = float(0.00) def endPage1(self): self.batupd = False self.updateTables1() self.updateBatch() self.agecan = False self.allocated = float(0.0) self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.glint == "Y": # General Ledger Control Transaction (Bank) data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.refno, self.bh.batno, self.trnamt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doMemAcc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("memmst", cols=["mlm_title", "mlm_initial", "mlm_surname"], where=[("mlm_cono", "=", self.opts["conum"]), ("mlm_memno", "=", w)], limit=1) if not acc: return "Invalid Member Number" self.memno = w self.name = "%s, %s %s" % (acc[2], acc[0], acc[1]) self.df.loadEntry("C", pag, p + 1, data=self.name) self.allref = self.refno while self.sql.getRec("memtrn", cols=["mlt_batch"], where=[("mlt_cono", "=", self.opts["conum"]), ("mlt_memno", "=", self.memno), ("mlt_type", "=", self.opts["rtn"]), ("mlt_refno", "=", self.allref)]): self.doGetAnotherRef() def doGetAnotherRef(self): tit = ("Duplicate Reference Number", ) fld = ((("T", 0, 0, 0), "ONa", 9, "Old Reference", "", self.allref, "N", None, None, None, None), (("T", 0, 1, 0), "INa", 9, "New Reference", "", "", "N", self.doRefNew, None, None, ("notblank", ))) tnd = ((self.doRefEnd, "n"), ) txt = (self.doRefExit, ) state = self.df.disableButtonsTags() self.tf = TartanDialog(self.opts["mf"], title=tit, tops=True, eflds=fld, tend=tnd, txit=txt) self.tf.mstFrame.wait_window() self.df.enableButtonsTags(state=state) def doRefExit(self): self.tf.focusField("T", 0, 2) def doRefNew(self, frt, pag, r, c, p, i, w): self.allref = w def doRefEnd(self): self.tf.closeProcess() def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doDisAmt(self, frt, pag, r, c, p, i, w): if self.allamt < 0 and w > 0: ok = self.checkSign() elif self.allamt > 0 and w < 0: ok = self.checkSign() else: ok = "yes" if ok != "yes": return "Invalid Discount Amount (Sign Error)" self.disamt = w totamt = float(ASD(self.allamt) + ASD(self.disamt)) self.df.loadEntry(frt, pag, p + 1, data=totamt) def checkSign(self): return askQuestion(self.opts["mf"].body, "Check Sign", "The Sign of the Discount Amount is not the same as the Sign "\ "of the Receipt Amount, Is This Correct?") def endPage2(self): self.amt = float(ASD(0) - ASD(self.allamt)) self.dis = float(ASD(0) - ASD(self.disamt)) state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Choose an Ageing Option") for x in range(0, 5): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "normal") self.df.setWidget(self.df.B0, "focus") self.agevar.set(True) self.df.mstFrame.wait_variable(self.agevar) self.df.enableButtonsTags(state=state) if self.agecan: self.doCancel() return # Members Ledger Transaction data = [ self.opts["conum"], self.memno, self.opts["rtn"], self.allref, self.bh.batno, self.trndat, self.amt, 0.00, self.curdt, "", 0, self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("memtrn", data=data) if self.dis: data = [ self.opts["conum"], self.memno, 6, self.allref, self.bh.batno, self.trndat, self.dis, 0.00, self.curdt, "", 0, self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("memtrn", data=data, unique="mlt_refno") self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.glint == "Y": # General Ledger Control Transaction (Members) amt = float(ASD(self.amt) + ASD(self.dis)) data = (self.opts["conum"], self.memctl, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, amt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Discount) if self.disamt: data = (self.opts["conum"], self.dis_all, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, self.disamt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if self.allocated == self.trnamt: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Deposit") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def doAgeNormal(self): self.doAgeing("N") def doAgeHistory(self): self.doAgeing("H") def doAgeAuto(self): self.doAgeing("O") def doAgeCurrent(self): self.doAgeing("C") def doAgeing(self, atype): # Disable All Ageing Buttons for x in range(0, 4): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "disabled") self.opts["mf"].updateStatus("Select Transaction to Allocate Against") age = AgeAll(self.opts["mf"], system="mem", agetyp=atype, agekey=[ self.opts["conum"], self.memno, self.opts["rtn"], self.allref, self.curdt, self.amt, self.dis ]) self.agecan = age.cancel self.agevar.set(False) def doCancel(self): if self.agecan: ok = "yes" else: ok = askQuestion( self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Deposit") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def updateBatch(self, rev=False): if rev: self.bh.batqty -= 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty += 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def exitPage2(self): self.df.focusField("C", 2, self.df.col)
class tb1030(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() self.doReset() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, "ftable", prog=self.__class__.__name__) if self.sql.error: return self.doGetTable() if not self.table: return self.sql = Sql(self.opts["mf"].dbm, ["ftable", self.table], prog=self.__class__.__name__) self.sqi = Sql(self.opts["mf"].dbm, self.table, prog=self.__class__.__name__) self.read = "N" return True def doGetTable(self): tit = ("Table to Fix/Amend", ) tbl = { "stype": "R", "tables": ("ftable", ), "cols": (("ft_tabl", "", 0, "Table"), ("ft_desc", "", 0, "Description", "Y")), "where": [("ft_seq", "=", 1)], "screen": self.opts["mf"].body } fld = ((("T", 0, 0, 0), "I@ft_tabl", 0, "", "", "", "N", self.doTabNam, tbl, None, None), ) tnd = ((self.doTabEnd, "y"), ) txt = (self.doTabExit, ) self.tb = TartanDialog(self.opts["mf"], tops=True, title=tit, eflds=fld, tend=tnd, txit=txt) self.tb.mstFrame.wait_window() def doTabNam(self, frt, pag, r, c, p, i, w): desc = self.sql.getRec("ftable", cols=["ft_desc"], where=[("ft_tabl", "=", w)], limit=1) if not desc: return "Invalid Table" self.table = w self.desc = desc[0] def doTabExit(self): self.table = None self.doTabEnd() def doTabEnd(self): self.tb.closeProcess() def mainProcess(self): self.dics = getattr(self.sql, "%s_dic" % self.table) self.lcol = getattr(self.sql, "%s_col" % self.table) self.pgs = int((len(self.lcol) - 1) / 15) + 1 fld = [] cnt = 0 lpg = 0 for num, col in enumerate(self.lcol): if self.pgs == 1: pag = 0 else: pag = int(num / 15) + 1 if pag != lpg: lpg = pag cnt = 0 if self.dics[col][2][0] == "D": typ = "I%s" % self.dics[col][2].lower() else: typ = "I%s" % self.dics[col][2] siz = self.dics[col][3] if siz > 50: siz = 50 fld.append([["T", pag, cnt, 0], typ, siz, self.dics[col][4], self.dics[col][4], "", "N", None, None, None, None]) cnt += 1 but = (("Display", None, self.doDisplay, None, None, None), ("Update", None, self.doUpdate, None, None, None), ("Create", None, self.doCreate, 1, None, None), ("Delete", None, self.doDelete, None, None, None), ("Cancel", None, self.doReset, None, None, None), ("Exit", None, self.doExit, 1, None, None)) if self.pgs == 1: tag = None tnd = ((self.doEnd, "n"), ) txt = (self.doExit, ) else: tag = [] tnd = [None] txt = [None] for pag in range(1, (self.pgs + 1)): tag.append(["Page-_%s" % pag, self.chgPage, ("T", 1, 1), None]) tnd.append([self.doEnd, "n"]) txt.append(self.doExit) if self.pgs == 1: self.df = TartanDialog(self.opts["mf"], tops=True, title=self.desc, eflds=fld, tags=tag, tend=tnd, txit=txt, butt=but, clicks=self.doClick) else: self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, tend=tnd, txit=txt, butt=but, clicks=self.doClick) def doClick(self, *opts): self.df.focusField("T", opts[0][0], opts[0][1] + 1) def chgPage(self): self.df.focusField("T", self.df.pag, 1, clr=False) def doDisplay(self): whr = [] hed = [] pos = 0 for pag in range(self.df.pgs + 1): for num, fld in enumerate(self.df.t_work[pag][0]): hed.append(self.dics[self.lcol[pos]][5]) if fld: if type(fld) == str and fld.count("%"): eql = "like" else: eql = "=" if self.dics[self.lcol[pos]][2][1] in ("A", "a"): whr.append((self.lcol[pos], eql, fld)) else: whr.append((self.lcol[pos], eql, fld)) pos += 1 keys = self.sql.getRec("ftable", where=[("ft_tabl", "=", self.table), ("ft_seq", "=", 1)], limit=1) odr = "" for x in range(4, 14): if keys[x]: odr = "%s%s," % (odr, keys[x]) odr = odr[:-1] recs = self.sql.getRec(tables=self.table, where=whr, order=odr) if recs: titl = "Available Records" dat = [] for rec in recs: a = [] for n, c in enumerate(self.lcol): d = CCD(rec[n], self.dics[c][2], self.dics[c][3]) a.append(d.disp) dat.append(a) state = self.df.disableButtonsTags() sc = SChoice(self.opts["mf"], scrn=self.opts["mf"].body, titl=titl, head=hed, data=dat, retn="I", mode="S") self.df.enableButtonsTags(state=state) if sc.selection is not None: self.read = "Y" self.olddata = recs[sc.selection] for num, dat in enumerate(self.olddata): if self.pgs == 1: pag = 0 idx = num else: pag = int(num / 15) + 1 idx = num - ((pag - 1) * 15) self.df.loadEntry("T", pag, idx, data=dat) self.df.setWidget(self.df.B0, "disabled") self.df.setWidget(self.df.B1, "normal") self.df.setWidget(self.df.B3, "normal") self.df.setWidget(self.df.B4, "normal") else: self.read = "N" frt, pag, row, col = self.df.first self.df.focusField(frt, pag, 1, clr=False) def doUpdate(self): if self.read == "N": return self.sql.delRec(self.table, data=self.olddata) self.olddata = [] newdata = [] for pag in range((self.df.pgs + 1)): newdata.extend(self.df.t_work[pag][0]) self.sqi.insRec(self.table, data=newdata) self.doReset() def doCreate(self): newdata = [] for pag in range((self.df.pgs + 1)): newdata.extend(self.df.t_work[pag][0]) keys = self.sql.getRec("ftable", where=[("ft_tabl", "=", self.table), ("ft_type", "=", "U")]) for key in keys: col = [] dat = [] for fld in key[4:]: if fld: col.append(fld) idx = getattr(self.sqi, "%s_col" % self.table) dat.append(newdata[idx.index(fld)]) whr = [] for num, ccc in enumerate(col): whr.append((ccc, "=", dat[num])) chk = self.sqi.getRec(tables=self.table, where=whr) if chk: showError(self.opts["mf"].body, "Duplicate Key", "A Record like this Already Exists") return self.sqi.insRec(self.table, data=newdata) self.doReset() def doDelete(self): if self.read == "N": return if self.table in ("gentrn", "crstrn", "drstrn"): ask = askQuestion(self.opts["mf"].body, "Delete", "Delete All Associated Records?", default="no") else: ask = "no" if ask == "yes": err = "" tabs = ["gentrn", "ctlvtf", "crsctl", "crstrn", "drsctl", "drstrn"] sql = Sql(self.opts["mf"].dbm, tables=tabs) conum = self.olddata[0] if self.table == "gentrn": system = "G" docno = CCD(self.olddata[5], "Na", 9).work date = CCD(self.olddata[3], "D1", 10).work dtyp = CCD(self.olddata[4], "UI", 2).work gtyp = dtyp elif self.table == "crstrn": system = "C" acno = CCD(self.olddata[1], "NA", 7).work dtyp = CCD(self.olddata[2], "UI", 2).work docno = CCD(self.olddata[3], "Na", 9).work date = CCD(self.olddata[5], "D1", 10).work if dtyp in (1, 4): gtyp = 5 # Purchase elif dtyp == 2: gtyp = 6 # Receipt elif dtyp == 3: gtyp = 4 # Journal elif dtyp == 5: gtyp = 2 # Payment glint = sql.getRec("crsctl", cols=["ctc_glint"], where=[("ctc_cono", "=", conum)], limit=1)[0] else: system = "D" chain = CCD(self.olddata[1], "UI", 3).work acno = CCD(self.olddata[2], "NA", 7).work dtyp = CCD(self.olddata[3], "UI", 2).work docno = CCD(self.olddata[4], "Na", 9).work date = CCD(self.olddata[6], "D1", 10).work if dtyp in (1, 4): gtyp = 1 # Sale elif dtyp == 2: gtyp = 6 # Receipt elif dtyp == 3: gtyp = 4 # Journal elif dtyp == 5: gtyp = 2 # Payment glint = sql.getRec("drsctl", cols=["ctd_glint"], where=[("ctd_cono", "=", conum)], limit=1)[0] sqv = [("vtt_cono", "=", conum), ("vtt_styp", "=", system), ("vtt_refno", "=", docno), ("vtt_refdt", "=", date), ("vtt_ttyp", "=", dtyp)] recs = sql.getRec("ctlvtf", where=sqv) if len(recs) > 1: err = "ctlvtf recs %s\n" % len(recs) texc = 0 ttax = 0 for rec in recs: texc = float(ASD(texc) + ASD(rec[11])) ttax = float(ASD(ttax) + ASD(rec[12])) ttot = float(ASD(texc) + ASD(ttax)) ok = "yes" if system == "G" or glint == "Y": sqg = [("glt_cono", "=", conum), ("glt_refno", "=", docno), ("glt_trdt", "=", date), ("glt_type", "=", gtyp)] recs = sql.getRec("gentrn", where=sqg) gamt = 0 gtax = 0 for rec in recs: gamt = float(ASD(gamt) + ASD(rec[7])) gtax = float(ASD(gtax) + ASD(rec[8])) if gtax != ttax: err = "%sctlvtf %s <> gentrn %s\n" % (err, ttax, gtax) if gamt: err = "%sgentrn debits <> credits" % err if system == "C": sqc = [("crt_cono", "=", conum), ("crt_acno", "=", acno), ("crt_ref1", "=", docno), ("crt_trdt", "=", date), ("crt_type", "=", dtyp)] recs = sql.getRec("crstrn", where=sqc) if len(recs) > 1: err = "%scrstrn recs %s\n" % (err, len(recs)) camt = 0 ctax = 0 for rec in recs: camt = float(ASD(camt) + ASD(rec[7])) ctax = float(ASD(ctax) + ASD(rec[8])) if ctax != ttax: err = "%sctlvtf %s <> crstrn %s\n" % (err, ttax, ctax) if camt != ttot: err = "%sctlvtf tot %s <> crstrn tot %s" % (err, ttot, camt) if system == "D": sqd = [("drt_cono", "=", conum), ("drt_chain", "=", chain), ("drt_acno", "=", acno), ("drt_ref1", "=", docno), ("drt_trdt", "=", date), ("drt_type", "=", dtyp)] recs = sql.getRec("drstrn", where=sqd) if len(recs) > 1: err = "%sdrstrn recs %s\n" % (err, len(recs)) damt = 0 dtax = 0 for rec in recs: damt = float(ASD(damt) - ASD(rec[8])) dtax = float(ASD(dtax) - ASD(rec[9])) if dtax != ttax: err = "%sctlvtf %s <> drstrn %s\n" % (err, ttax, dtax) if damt != ttot: err = "%sctlvtf tot %s <> drstrn tot %s" % (err, ttot, damt) if err: ok = askQuestion(self.opts["mf"].body, "Error", "%s\n\nDelete transaction (y/n)?" % err) if ok == "yes": sql.delRec("ctlvtf", where=sqv) if system == "G" or glint == "Y": sql.delRec("gentrn", where=sqg) if system == "C": sql.delRec("crstrn", where=sqc) if system == "D": sql.delRec("drstrn", where=sqd) else: self.sql.delRec(self.table, data=self.olddata) self.olddata = [] self.doReset() def doEnd(self): self.df.focusField(self.df.frt, self.df.pag, 1, clr=False) def doReset(self): self.read = "N" if self.pgs == 1: self.df.focusField("T", 0, 1) else: self.df.selPage(self.df.tags[0][0]) self.df.focusField("T", 1, 1) self.df.setWidget(self.df.B0, "normal") self.df.setWidget(self.df.B1, "disabled") self.df.setWidget(self.df.B3, "disabled") self.df.setWidget(self.df.B4, "disabled") def doExit(self): mes = None dft = "yes" if self.table == "gentrn": bals = self.sql.getRec("gentrn", cols=["sum(glt_tramt)"], limit=1) if bals[0]: amt = CCD(bals[0], "SD", 13.2) mes = "General Ledger Out of Balance by %s\n\n"\ "Commit Anyway?" % amt.disp.lstrip() dft = "no" self.opts["mf"].dbm.commitDbase(ask=True, mess=mes, default=dft) self.df.closeProcess() self.opts["mf"].closeLoop()
class gl4010(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.mainProcess() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["genmst", "genbal", "genbud", "gentrn"], prog=self.__class__.__name__) if self.sql.error: return t = time.localtime() self.sysdtd = "%i/%02i/%02i" % (t[0], t[1], t[2]) self.i_per = int(self.opts["period"][1][0] / 100) self.e_per = int(self.opts["period"][2][0] / 100) df = self.e_per - self.i_per - 87 if df > 12: self.d_per = df - 12 yr = int(self.i_per / 100) mt = int(self.i_per % 100) for _ in range(self.d_per): mt += 1 if mt > 12: mt -= 12 yr += 1 self.s_per = (yr * 100) + mt else: self.d_per = 0 self.s_per = self.i_per self.d_pyr = 0 if self.opts["period"][0]: s, e, f = getPeriods(self.opts["mf"], self.opts["conum"], (self.opts["period"][0] - 1)) if (s, e, f) == (None, None, None): return self.s_lyr = s.work self.i_pyr = int(s.work / 100) self.e_pyr = int(e.work / 100) df = self.e_pyr - self.i_pyr - 87 if df > 12: self.d_pyr = df - 12 yr = int(self.i_pyr / 100) mt = self.i_pyr % 100 for _ in range(self.d_pyr): mt += 1 if mt > 12: mt -= 12 yr += 1 self.s_pyr = (yr * 100) + mt else: self.s_pyr = self.i_pyr self.trnper = 0 return True def mainProcess(self): self.tit = ("%03i %s" % (self.opts["conum"], self.opts["conam"]), "General Ledger Interrogation (%s)" % self.__class__.__name__) glm = { "stype": "R", "tables": ("genmst", ), "cols": (("glm_acno", "", 0, "Acc-Num"), ("glm_desc", "", 0, "Description", "Y")), "where": [("glm_cono", "=", self.opts["conum"])], "order": "glm_acno" } fld = ((("T", 0, 0, 0, 7), "IUI", 7, "Acc-Num", "Account Number", "", "N", self.doAccNum, glm, None, None), (("T", 0, 0, 0), "ONA", 30, "Description"), (("T", 0, 0, 0), "OUA", 1, "Type"), (("T", 0, 0, 0), "OUA", 1, "Indicator"), (("C", 1, 0, 0), "OSD", 13.2, "Actual", "", "", "N", None, None, None, None, ("Months", 14)), (("C", 1, 0, 1), "OSD", 13.2, "Budget"), (("C", 1, 0, 2), "OSD", 13.2, "Variance"), (("C", 1, 0, 3), "OSD", 13.2, "Last-Year"), (("T", 2, 0, 0), "Id2", 7, "Period (YYYYMM)", "Financial Period (0=All)", self.trnper, "Y", self.doPeriod, None, None, None)) tag = (("Balances", self.doBals, ("T", 0, 2), ("T", 0, 1)), ("Transactions", self.doTrans1, ("T", 0, 2), ("T", 0, 1))) but = (("Clear", None, self.doClear, 0, ("T", 0, 0), ("T", 0, 1)), ("Notes", None, self.doNotes, 0, ("T", 0, 0), ("T", 0, 1)), ("Print", None, self.doPrint, 1, ("T", 0, 0), ("T", 0, 1)), ("Quit", None, self.doExit, 1, None, None)) tnd = ((self.doTopEnd, "N"), None, (self.doTrans2, "N")) txt = (self.doExit, None, self.doExit) self.df = TartanDialog(self.opts["mf"], title=self.tit, tags=tag, eflds=fld, butt=but, tend=tnd, txit=txt) mon = self.s_per % 100 yer = int(self.s_per / 100) for x in range(14): if x == 0: txt = "Opening Balance" self.df.colLabel[1][x].configure(text=txt) elif x == 13: txt = "Closing Balance" self.df.colLabel[1][x].configure(text=txt) else: nam = mthnam[mon][1] nam = nam + (" " * (11 - len(nam))) + str(yer) self.df.colLabel[1][x].configure(text=nam) if x not in (0, 13): mon = mon + 1 if mon > 12: mon = mon - 12 yer = yer + 1 txt = "Closing Balance" self.df.colLabel[1][13].configure(text=txt) def doAccNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("genmst", cols=["glm_desc", "glm_type", "glm_ind"], where=[("glm_cono", "=", self.opts["conum"]), ("glm_acno", "=", w)], limit=1) if not acc: return "Invalid Account" self.acno = w self.desc = acc[0] for x in range(1, self.df.topq[pag]): self.df.loadEntry(frt, pag, p + x, data=acc[x - 1]) if self.opts["period"][0]: gp = self.sql.getRec("genbal", cols=["glo_cyr"], where=[("glo_cono", "=", self.opts["conum"]), ("glo_acno", "=", self.acno), ("glo_trdt", "=", self.s_lyr)]) gc = self.sql.getRec("genbal", cols=["glo_cyr"], where=[("glo_cono", "=", self.opts["conum"]), ("glo_acno", "=", self.acno), ("glo_trdt", "=", self.opts["period"][1][0])]) gt = self.sql.getRec("gentrn", cols=["glt_type", "glt_curdt", "glt_tramt"], where=[("glt_cono", "=", self.opts["conum"]), ("glt_acno", "=", self.acno), ("glt_curdt", "between", self.i_per, self.e_per)]) gb = self.sql.getRec("genbud", cols=["glb_curdt", "glb_tramt"], where=[("glb_cono", "=", self.opts["conum"]), ("glb_acno", "=", self.acno), ("glb_curdt", "between", self.i_per, self.e_per)]) if self.opts["period"][0]: gl = self.sql.getRec("gentrn", cols=["glt_curdt", "glt_tramt"], where=[("glt_cono", "=", self.opts["conum"]), ("glt_acno", "=", self.acno), ("glt_curdt", "between", self.i_pyr, self.e_pyr)]) act = [0] * 14 bud = [0] * 14 lyr = [0] * 14 adc = [] adl = [] if self.d_per: # Current period more than 12 months sy = sy = int(self.i_per / 100) sm = self.i_per % 100 for _ in range(self.d_per): adc.append(sm) sm += 1 if sm > 12: sy += 1 sm = 1 elif self.d_pyr: # Previous period more than 12 months sy = sy = int(self.i_pyr / 100) sm = self.i_pyr % 100 for _ in range(self.d_pyr): adl.append(sm) sm += 1 if sm > 12: sy += 1 sm = 1 if gc: self.obal = gc[0][0] act[0] = float(ASD(act[0]) + ASD(self.obal)) act[13] = float(ASD(act[13]) + ASD(self.obal)) if self.opts["period"][0] and gp: lyr[0] = float(ASD(lyr[0]) + ASD(float(gp[0][0]))) lyr[13] = float(ASD(lyr[13]) + ASD(float(gp[0][0]))) else: self.obal = 0 yre = self.e_per % 100 if gt: for x, t in enumerate(gt): cyr = int(t[1] / 100) mon = t[1] % 100 if adc and cyr == sy and mon in adc: col = 1 else: col = mon - yre if col <= 0: col = col + 12 act[col] = float(ASD(act[col]) + ASD(float(t[2]))) act[13] = float(ASD(act[13]) + ASD(float(t[2]))) if gb: for x, t in enumerate(gb): mon = int(str(t[0])[4:6]) col = mon - yre if col <= 0: col = col + 12 bud[col] = float(ASD(bud[col]) + ASD(float(t[1]))) bud[13] = float(ASD(bud[13]) + ASD(float(t[1]))) if self.opts["period"][0] and gl: for x, t in enumerate(gl): cyr = int(t[0] / 100) mon = t[0] % 100 if adl and cyr == sy and mon in adl: col = 1 else: col = mon - yre if col <= 0: col = col + 12 lyr[col] = float(ASD(lyr[col]) + ASD(float(t[1]))) lyr[13] = float(ASD(lyr[13]) + ASD(float(t[1]))) p = 0 for x in range(14): i = 0 self.df.loadEntry("C", 1, p, data=act[x]) p = p + 1 i = i + 1 self.df.loadEntry("C", 1, p, data=bud[x]) p = p + 1 i = i + 1 data = float(ASD(bud[x]) - ASD(act[x])) self.df.loadEntry("C", 1, p, data=data) p = p + 1 i = i + 1 self.df.loadEntry("C", 1, p, data=lyr[x]) p = p + 1 self.df.last[0] = [0, 0] self.opts["mf"].updateStatus("") def doBals(self): self.opts["mf"].updateStatus("") def doTrans1(self): self.df.focusField("T", 2, 1) def doTrans2(self): tit = "Transactions for Account: %s - %s" % (self.acno, self.desc) gtt = ["gentrn"] gtc = (("glt_trdt", "", 0, " Date"), ("glt_refno", "", 0, "Reference", "Y"), ("glt_type", ("XX", gltrtp), 3, "Typ"), ("glt_batch", "", 0, "Batch"), ("glt_tramt", "", 0, " Debit"), ("glt_tramt", "", 0, " Credit"), ("balance", "SD", 13.2, " Balance"), ("glt_desc", "", 0, "Remarks"), ("glt_seq", "", 0, "Sequence")) mthno, acctot = self.getObal() if mthno.work == 0: d = self.opts["period"][1][0] else: d = (self.trnper * 100) + 1 if acctot: if acctot < 0: dr = 0 cr = acctot else: dr = acctot cr = 0 data = [[d, "B/Fwd", 4, "", dr, cr, acctot, "Opening Balance", 0]] else: data = [] trn = self.getTrans() if trn: col = self.sql.gentrn_col for rec in trn: acctot = float(ASD(acctot) + ASD(rec[col.index("glt_tramt")])) if rec[col.index("glt_tramt")] < 0: dr = 0 cr = rec[col.index("glt_tramt")] else: dr = rec[col.index("glt_tramt")] cr = 0 data.append([ rec[col.index("glt_trdt")], rec[col.index("glt_refno")], rec[col.index("glt_type")], rec[col.index("glt_batch")], dr, cr, acctot, rec[col.index("glt_desc")], rec[col.index("glt_seq")] ]) state = self.df.disableButtonsTags() while True: rec = SRec(self.opts["mf"], screen=self.df.nb.Page2, title=tit, tables=gtt, cols=gtc, where=data, wtype="D", sort=False) # Display all transaction details if rec.selection: self.df.setWidget(self.df.mstFrame, state="hide") whr = [("glt_seq", "=", rec.selection[8])] TabPrt(self.opts["mf"], tabs="gentrn", where=whr, pdia=False) self.df.setWidget(self.df.mstFrame, state="show") else: break self.df.enableButtonsTags(state=state) self.doTrans1() def doNotes(self): state = self.df.disableButtonsTags() self.df.setWidget(self.df.mstFrame, state="hide") NotesCreate(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["capnm"], "GEN", self.acno) self.df.setWidget(self.df.mstFrame, state="show") self.df.enableButtonsTags(state=state) def doTopEnd(self): self.df.last[0] = [0, 0] self.df.setWidget(self.df.topEntry[0][0], state="disabled") def doClear(self): self.df.selPage("Balances") self.df.focusField("T", 0, 1) def doPrint(self): self.df.setWidget(self.df.mstFrame, state="hide") tit = ("Printer/Email Selection", ) r1s = (("Info", "I"), ("Trans", "T")) fld = ((("T", 0, 1, 0), ("IRB", r1s), 0, "Selection", "", "I", "N", self.doPrtSel, None, None, None), (("T", 0, 2, 0), "Id2", 7, "Period (YYYYMM)", "Financial Period (0=All)", self.trnper, "Y", self.doPeriod, None, None, None)) self.pr = TartanDialog(self.opts["mf"], tops=True, title=tit, eflds=fld, tend=((self.doPrtEnd, "y"), ), txit=(self.doPrtExit, ), view=("Y", "V"), mail=("Y", "N")) self.pr.mstFrame.wait_window() self.df.setWidget(self.df.mstFrame, state="show") self.df.focusField("T", 2, 1) def doPrtSel(self, frt, pag, r, c, p, i, w): self.sel = w for x in (2, 3): if bool(self.sel == "I"): self.pr.setWidget(self.pr.topEntry[0][2][x][0], state="hide") else: self.pr.setWidget(self.pr.topEntry[0][2][x][0], state="show") if self.sel == "I": return "sk1" def doPrtEnd(self): self.pr.closeProcess() self.head = "%03u %-99s" % (self.opts["conum"], self.opts["conam"]) self.fpdf = MyFpdf(name=self.__class__.__name__, head=self.head) self.pgnum = 0 self.pglin = 999 self.num = self.df.t_disp[0][0][0] self.dsc = self.df.t_disp[0][0][1] atype = self.df.t_disp[0][0][2] ind = self.df.t_disp[0][0][3] if self.pr.t_work[0][0][0] == "I": self.pageHeading() self.fpdf.drawText("%-8s %-12s %-6s %-35s %-6s %-7s %-11s %s" % \ ("Acc No:", self.num, "Desc:", self.dsc, "Type:", atype, "Indicator:", ind)) self.fpdf.drawText() self.fpdf.drawText("%-21s %-20s %-18s %-19s %-18s" % \ ("", "Actual", "Budget", "Variance", "Last Year")) self.fpdf.drawText() m = self.s_per % 100 for x in range(14): if x == 0: mon = "Opening" elif x == 13: mon = "Closing" else: mon = mthnam[m][1] m = m + 1 if m > 12: m = m - 12 act = self.df.c_disp[1][x][0] bud = self.df.c_disp[1][x][1] var = self.df.c_disp[1][x][2] lyr = self.df.c_disp[1][x][3] self.fpdf.drawText("%-15s %-20s %-20s %-20s %-20s" % (mon, act, bud, var, lyr)) if x in (0, 12): self.fpdf.drawText() pdfnam = getModName(self.opts["mf"].rcdic["wrkdir"], self.__class__.__name__, self.opts["conum"], ext="pdf") self.fpdf.output(pdfnam, "F") doPrinter(mf=self.opts["mf"], conum=self.opts["conum"], pdfnam=pdfnam, header=self.tit, repprt=self.pr.repprt, repeml=self.pr.repeml) else: trn = self.getTrans() if trn: heads = ["General Ledger Interrogation as at %s" % self.sysdtd] mthno, acctot = self.getObal() if mthno.work == 0: x = "(For all months)" d = self.opts["period"][1][0] else: x = "(For month " + mthno.disp + ")" d = (self.trnper * 100) + 1 heads.append("Account %s %s %s" % (self.num, self.dsc, x)) cols = [["glt_trdt", "D1", 10, " Date"], ["glt_refno", "Na", 9, "Reference"], ["glt_type", "NA", 3, "Typ"], ["glt_batch", "Na", 7, "BatchNo"], ["debit", "SD", 13.2, " Debit "], ["credit", "SD", 13.2, " Credit "], ["balance", "SD", 13.2, " Balance "], ["glt_desc", "NA", 30, "Remarks"]] if acctot: if acctot < 0: dr = 0 cr = acctot else: dr = acctot cr = 0 data = [(d, "B/Fwd", "", "", dr, cr, acctot, "Opening Balance")] else: data = [] col = self.sql.gentrn_col for num, rec in enumerate(trn): trdt = rec[col.index("glt_trdt")] refno = rec[col.index("glt_refno")] trtp = gltrtp[(rec[col.index("glt_type")]) - 1][0] batch = rec[col.index("glt_batch")] tramt = rec[col.index("glt_tramt")] if tramt < 0: debit = 0 credit = tramt else: debit = tramt credit = 0 detail = rec[col.index("glt_desc")] acctot = float(ASD(acctot) + ASD(tramt)) data.append((trdt, refno, trtp, batch, debit, credit, acctot, detail)) RepPrt(self.opts["mf"], name=self.__class__.__name__, conum=self.opts["conum"], conam=self.opts["conam"], tables=data, heads=heads, cols=cols, ttype="D", repprt=self.pr.repprt, repeml=self.pr.repeml) def doPrtExit(self): self.pr.closeProcess() def doPeriod(self, frt, pag, r, c, p, i, w): if w != 0 and (w < self.i_per or w > self.e_per): return "Invalid Period" self.trnper = w def pageHeading(self): self.fpdf.add_page() self.fpdf.setFont(style="B") self.pgnum += 1 self.fpdf.drawText(self.head) self.fpdf.drawText() self.fpdf.drawText("%-34s %-10s %51s %5s" % \ ("General Ledger Interrogation as at", self.sysdtd, "Page", self.pgnum)) self.fpdf.underLine(txt=self.head) self.fpdf.setFont() self.pglin = 4 def getObal(self): acbal = self.obal if self.trnper: o = self.sql.getRec("gentrn", cols=["round(sum(glt_tramt), 2)"], where=[("glt_cono", "=", self.opts["conum"]), ("glt_acno", "=", self.acno), ("glt_curdt", ">=", self.i_per), ("glt_curdt", "<", self.trnper)], limit=1) if o[0]: acbal = float(ASD(acbal) + ASD(o[0])) mthno = CCD(self.trnper % 100, "UI", 2.0) return mthno, acbal def getTrans(self): odr = "glt_acno, glt_curdt, glt_trdt, glt_type, glt_refno, glt_batch" if not self.trnper: whr = [("glt_cono", "=", self.opts["conum"]), ("glt_acno", "=", self.acno), ("glt_curdt", "between", self.i_per, self.e_per)] else: whr = [("glt_cono", "=", self.opts["conum"]), ("glt_acno", "=", self.acno), ("glt_curdt", "=", self.trnper)] return self.sql.getRec("gentrn", where=whr, order=odr) def doExit(self): self.df.closeProcess() self.opts["mf"].closeLoop()
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()
class dr2020(object): def __init__(self, **opts): self.opts = opts if self.setVariables(): self.drawDialog() self.opts["mf"].startLoop() def setVariables(self): # Check for Valid Posting Routine if self.opts["rtn"] != 2: mes = "Invalid Routine %s" % str(self.opts["rtn"]) showError(self.opts["mf"].body, "Control Error", mes) return # Setup SQL Object self.sql = Sql(self.opts["mf"].dbm, [ "ctlmst", "ctlvmf", "drschn", "drsmst", "drstrn", "genint", "genmst", "gentrn" ], prog=self.__class__.__name__) if self.sql.error: return # Check for Intercompany Facility if not self.sql.getRec("ctlmst", cols=["count(*)"], where=[("ctm_cono", "<>", self.opts["conum"])], limit=1)[0]: self.incoac = False else: itg = self.sql.getRec("genint", cols=["cti_inco"], where=[("cti_cono", "=", self.opts["conum"]) ]) if itg: self.incoac = [self.opts["conum"]] [self.incoac.append(coy[0]) for coy in itg] else: self.incoac = False # self.gc = GetCtl(self.opts["mf"]) drsctl = self.gc.getCtl("drsctl", self.opts["conum"]) if not drsctl: return self.glint = drsctl["ctd_glint"] self.chains = drsctl["ctd_chain"] if self.glint == "Y": ctlctl = self.gc.getCtl("ctlctl", self.opts["conum"]) if not ctlctl: return ctls = ["drs_ctl", "vat_ctl", "dis_all"] if self.gc.chkRec(self.opts["conum"], ctlctl, ctls): return self.drsctl = ctlctl["drs_ctl"] self.dis_all = ctlctl["dis_all"] self.batchHeader() if not self.bh.batno: return t = time.localtime() self.sysdtw = (t[0] * 10000) + (t[1] * 100) + t[2] self.allcoy = self.opts["conum"] ctlmst = self.gc.getCtl("ctlmst", self.opts["conum"]) if not ctlmst: return self.taxdf = ctlmst["ctm_taxdf"] if self.chains == "N": self.chain = 0 self.glt = 6 self.agevar = tk.BooleanVar() self.agevar.set(False) return True def batchHeader(self): self.bh = Batches(self.opts["mf"], self.opts["conum"], self.opts["conam"], self.opts["period"], "DRS", self.opts["rtn"], glint=self.glint) self.bh.doBatchHeader() if not self.bh.batno: return self.bh.batval = float(ASD(0) - ASD(self.bh.batval)) def drawDialog(self): drc = { "stype": "R", "tables": ("drschn", ), "cols": (("chm_chain", "", 0, "Num"), ("chm_name", "", 0, "Name", "Y")), "where": [("chm_cono", "=", self.opts["conum"])] } drm = { "stype": "R", "tables": ("drsmst", ), "cols": (("drm_acno", "", 0, "Acc-Num"), ("drm_name", "", 0, "Name", "Y"), ("drm_add1", "", 0, "Address Line 1")) } if self.chains == "Y": drm["where"] = [("drm_cono", "=", self.opts["conum"])] drm["whera"] = [["C", "drm_chain", 0, 1]] else: drm["where"] = [("drm_cono", "=", self.opts["conum"]), ("drm_chain", "=", 0)] drm["where"].append(("drm_stat", "<>", "X")) coy = { "stype": "R", "tables": ("ctlmst", ), "cols": (("ctm_cono", "", 0, "Coy"), ("ctm_name", "", 0, "Name", "Y")) } viw = { "stype": "R", "tables": ("drstrn", ), "cols": (("drt_chain", "", 0, ""), ("drt_acno", "", 0, ""), ("drt_ref1", "", 0, ""), ("drt_trdt", "", 0, ""), ("drt_tramt", "", 0, ""), ("drt_taxamt", "", 0, "")), "where": [("drt_cono", "=", self.opts["conum"]), ("drt_type", "=", self.opts["rtn"]), ("drt_batch", "=", self.bh.batno)], "order": "drt_seq" } tag = (("Deposit", None, None, None, False), ("Allocation", None, None, None, False)) fld = [(("T", 0, 0, 0), "OUI", 9, "Batch %s Quantity" % self.bh.batno), (("T", 0, 0, 0), "OSD", 13.2, "Value"), (("C", 1, 0, 0), "INa", 9, "Reference", "Reference Number One", "i", "Y", self.doRef1, None, None, ("efld", )), (("C", 1, 0, 1), "ID1", 10, "Date", "Transaction Date", "r", "N", self.doTrnDat, None, None, ("efld", )), (("C", 1, 0, 2), "ISD", 13.2, "Amount", "Transaction Amount", "", "N", self.doTrnAmt, None, None, ("notzero", )), (("C", 1, 0, 3), "INA", (30), "Details", "Deposit Details", "", "N", self.doTrnDet, None, None, None), (("T", 2, 0, 0), "OSD", 13.2, "Unallocated Balance"), [("C", 2, 0, 0), "OUI", 3, "Coy", "Company Number", self.opts["conum"], "N", self.doCoyNum, coy, None, ("notzero", )], [("C", 2, 0, 1), "IUI", 3, "Chn", "Chain Store", "r", "N", self.doChain, drc, None, ("efld", )], (("C", 2, 0, 2), "INA", 7, "Acc-Num", "Account Number", "r", "N", self.doDrsAcc, drm, None, ("notblank", )), (("C", 2, 0, 3), "ONA", 30, "Name"), (("C", 2, 0, 4), "ISD", 13.2, "Receipt", "Receipt Amount", "", "N", self.doAllAmt, None, None, ("efld", )), (("C", 2, 0, 5), "ISD", 13.2, "Discount", "Discount Amount", "", "N", self.doDisAmt, None, None, ("efld", ), None, "Discount Amount to be Added to the Receipt Amount"), (("C", 2, 0, 6), "OSD", 13.2, "Total-Amount")] if self.glint == "Y" and self.incoac: fld[7][1] = "IUI" if self.chains == "N": fld[8][1] = "OUI" but = [("View Entries", viw, None, 1, ("C", 2, 3), ("C", 2, 4), "View Batch Transactions", 1), ("Interrogate", None, self.queryDrs, 0, ("C", 2, 3), ("C", 2, 0), "Interrogate Debtors Accounts", 1), ("Maintain", None, self.maintainDrs, 0, ("C", 2, 3), ("C", 2, 4), "Maintain Debtors Accounts", 1), ("Canc_el", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1), "", 1)] else: but = [("View Entries", viw, None, 0, ("C", 2, 3), ("C", 2, 4), "View Batch Transactions", 1), ("Interrogate", None, self.queryDrs, 0, ("C", 2, 2), ("C", 2, 0), "Interrogate Debtors Accounts", 1), ("Maintain", None, self.maintainDrs, 0, ("C", 2, 2), ("C", 2, 3), "Maintain Debtors Accounts", 1), ("Canc_el", None, self.doCancel, 0, ("C", 2, 1), ("C", 1, 1), "", 1)] but.extend(( ("Age _Normal",None,self.doAgeNormal,0,None,None, "Only Show Unallocated Transactions",2), ("Age _History",None,self.doAgeHistory,0,None,None, "Show All Transactions, Including Already Allocated",2), ("Age _Automatic",None,self.doAgeAuto,0,None,None, "Automatically Allocate the Amount Starting With the "\ "Oldest Unallocated One",2), ("Age _Current",None,self.doAgeCurrent,0,None,None, "Leave the Transaction Unallocated",2))) txt = (None, None, None) cnd = [None, (self.endPage1, "y"), (self.endPage2, "y")] cxt = [None, self.exitPage1, self.exitPage2] self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, txit=txt, cend=cnd, cxit=cxt, butt=but) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) self.df.focusField("C", 1, 1) def doRef1(self, frt, pag, r, c, p, i, w): if not w: trns = self.sql.getRec("drstrn", cols=["drt_ref1"], where=[("drt_cono", "=", self.opts["conum"]), ("drt_ref1", "like", "R________")], order="drt_ref1 desc") auto = False for trn in trns: try: w = "R%08i" % (int(trn[0][1:]) + 1) auto = True break except: pass if not auto: w = "R00000001" self.df.loadEntry(frt, pag, p, data=w) chk = self.sql.getRec("drstrn", cols=["drt_acno"], where=[("drt_cono", "=", self.opts["conum"]), ("drt_type", "=", self.opts["rtn"]), ("drt_ref1", "=", w)]) if chk: return "A Transaction with this Reference Already Exists" self.ref1 = w def doTrnDat(self, frt, pag, r, c, p, i, w): if w < self.opts["period"][1][0] or w > self.opts["period"][2][0]: return "Invalid Date, Not in Financial Period" if self.bh.multi == "N" and int(w / 100) > self.bh.curdt: return "Invalid Date, After Batch Period" self.trndat = w def doTrnAmt(self, frt, pag, r, c, p, i, w): self.trnamt = w def doTrnDet(self, frt, pag, r, c, p, i, w): self.trndet = w self.allocated = float(0.00) def endPage1(self): self.agecan = False self.batupd = False self.updateTables1() self.updateBatch() self.allocated = float(0.0) self.df.selPage("Allocation") self.df.loadEntry("T", 2, 0, data=self.trnamt) self.df.focusField("C", 2, 1) def updateTables1(self): if self.bh.multi == "Y": self.curdt = int(self.trndat / 100) else: self.curdt = self.bh.curdt if self.glint == "Y": # General Ledger Control Transaction (Bank) data = (self.opts["conum"], self.bh.acc, self.curdt, self.trndat, self.glt, self.ref1, self.bh.batno, self.trnamt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) def exitPage1(self): self.df.closeProcess() self.bh.doBatchTotal() self.opts["mf"].closeLoop() def doCoyNum(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("ctlmst", cols=["ctm_name"], where=[("ctm_cono", "=", w)], limit=1) if not acc: return "Invalid Company, Missing" if self.incoac and w not in self.incoac: return "Invalid Company, No Intercompany Record 1" if w != self.opts["conum"]: acc = self.sql.getRec("genint", where=[("cti_cono", "=", w), ("cti_inco", "=", self.opts["conum"]) ], limit=1) if not acc: return "Invalid Company, No Intercompany Record 2" self.allcoy = w def doChain(self, frt, pag, r, c, p, i, w): if w: acc = self.sql.getRec("drschn", cols=["chm_chain"], where=[("chm_cono", "=", self.allcoy), ("chm_chain", "=", w)], limit=1) if not acc: return "Invalid Chain Store" self.chain = w def doDrsAcc(self, frt, pag, r, c, p, i, w): acc = self.sql.getRec("drsmst", cols=["drm_name", "drm_stat"], where=[("drm_cono", "=", self.allcoy), ("drm_chain", "=", self.chain), ("drm_acno", "=", w)], limit=1) if not acc: return "Invalid Account Number" if acc[1] == "X": return "Invalid Account, Redundant" self.dracno = w self.name = acc[0] self.df.loadEntry("C", pag, p + 1, data=self.name) self.allref = self.ref1 while self.sql.getRec("drstrn", cols=["drt_batch"], where=[("drt_cono", "=", self.allcoy), ("drt_chain", "=", self.chain), ("drt_acno", "=", self.dracno), ("drt_type", "=", self.opts["rtn"]), ("drt_ref1", "=", self.allref)]): self.doGetAnotherRef() def doGetAnotherRef(self): tit = ("Duplicate Reference Number", ) fld = ((("T", 0, 0, 0), "ONa", 9, "Old Reference", "", self.allref, "N", None, None, None, None), (("T", 0, 1, 0), "INa", 9, "New Reference", "", "", "N", self.doRefNew, None, None, ("notblank", ))) tnd = ((self.doRefEnd, "n"), ) txt = (self.doRefExit, ) state = self.df.disableButtonsTags() self.tf = TartanDialog(self.opts["mf"], title=tit, tops=True, eflds=fld, tend=tnd, txit=txt) self.tf.mstFrame.wait_window() self.df.enableButtonsTags(state=state) def doRefExit(self): self.tf.focusField("T", 0, 2) def doRefNew(self, frt, pag, r, c, p, i, w): self.allref = w def doRefEnd(self): self.tf.closeProcess() def doAllAmt(self, frt, pag, r, c, p, i, w): if w == 0: self.allamt = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry(frt, pag, p, data=self.allamt) else: self.allamt = w def doDisAmt(self, frt, pag, r, c, p, i, w): if self.allamt < 0 and w > 0: ok = self.checkSign() elif self.allamt > 0 and w < 0: ok = self.checkSign() else: ok = "yes" if ok != "yes": return "Invalid Discount Amount (Sign Error)" self.disamt = w totamt = float(ASD(self.allamt) + ASD(self.disamt)) self.df.loadEntry(frt, pag, p + 1, data=totamt) def checkSign(self): return askQuestion(self.opts["mf"].body, "Check Sign", "The Sign of the Discount Amount is not the same "\ "as the Sign of the Receipt Amount, Is This Correct?") def endPage2(self): self.amt = float(ASD(0) - ASD(self.allamt)) self.dis = float(ASD(0) - ASD(self.disamt)) state = self.df.disableButtonsTags() self.opts["mf"].updateStatus("Choose an Ageing Option") for x in range(4, 8): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "normal") self.agevar.set(True) self.df.mstFrame.wait_variable(self.agevar) self.df.enableButtonsTags(state=state) if self.agecan: self.doCancel() return # Debtors Ledger Transaction data = [ self.allcoy, self.chain, self.dracno, self.opts["rtn"], self.allref, self.bh.batno, self.trndat, "", self.amt, 0.00, self.curdt, self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("drstrn", data=data) if self.dis: data = [ self.allcoy, self.chain, self.dracno, 6, self.allref, self.bh.batno, self.trndat, "", self.dis, 0.00, self.curdt, self.trndet, "", "N", self.opts["capnm"], self.sysdtw, 0 ] self.sql.insRec("drstrn", data=data) self.allocated = float(ASD(self.allocated) + ASD(self.allamt)) if self.glint == "Y": # General Ledger Control Transaction (Debtors) amt = float(ASD(self.amt) + ASD(self.dis)) data = (self.allcoy, self.drsctl, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, amt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Control Transaction (Discount) if self.disamt: data = (self.allcoy, self.dis_all, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, self.disamt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany) if self.allcoy != self.opts["conum"]: # General Ledger Transaction (Intercompany From) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.opts["conum"]), ("cti_inco", "=", self.allcoy)], limit=1)[0] data = (self.opts["conum"], acc, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, self.amt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) # General Ledger Transaction (Intercompany To) acc = self.sql.getRec("genint", cols=["cti_acno"], where=[("cti_cono", "=", self.allcoy), ("cti_inco", "=", self.opts["conum"])], limit=1)[0] amt = float(ASD(0) - ASD(self.amt)) data = (self.allcoy, acc, self.curdt, self.trndat, self.glt, self.allref, self.bh.batno, amt, 0.00, self.trndet, "N", "", 0, self.opts["capnm"], self.sysdtw, 0) self.sql.insRec("gentrn", data=data) if self.allocated == self.trnamt: self.opts["mf"].dbm.commitDbase() self.df.clearFrame("C", 2) self.df.selPage("Deposit") self.df.advanceLine(1) else: bal = float(ASD(self.trnamt) - ASD(self.allocated)) self.df.loadEntry("T", 2, 0, data=bal) self.df.advanceLine(2) def doAgeNormal(self): self.doAgeing("N") def doAgeHistory(self): self.doAgeing("H") def doAgeAuto(self): self.doAgeing("O") def doAgeCurrent(self): self.doAgeing("C") def doAgeing(self, atype): # Disable All Ageing Buttons for x in range(4, 8): wid = getattr(self.df, "B%s" % x) self.df.setWidget(wid, "disabled") self.opts["mf"].updateStatus("Select Transaction to Allocate Against") age = AgeAll(self.opts["mf"], system="drs", agetyp=atype, agekey=[ self.allcoy, self.chain, self.dracno, self.opts["rtn"], self.allref, self.curdt, self.amt, self.dis ]) self.agecan = age.cancel self.agevar.set(False) def doCancel(self): if self.agecan: ok = "yes" else: ok = askQuestion( self.opts["mf"].body, head="Cancel", mess="Are You Certain You Want to Cancel This Entry?") if ok == "yes": self.opts["mf"].dbm.rollbackDbase() if self.batupd: self.updateBatch(rev=True) self.df.clearFrame("C", 2) self.df.selPage("Deposit") row = int((self.df.last[1][1] - 1) / self.df.colq[1]) col = (row * self.df.colq[1]) + 1 self.df.focusField("C", 1, col) def exitPage2(self): self.df.focusField("C", 2, self.df.col) def updateBatch(self, rev=False): if rev: self.bh.batqty = self.bh.batqty - 1 self.bh.batval = float(ASD(self.bh.batval) - ASD(self.trnamt)) else: self.batupd = True self.bh.batqty = self.bh.batqty + 1 self.bh.batval = float(ASD(self.bh.batval) + ASD(self.trnamt)) self.df.loadEntry("T", 0, 0, data=self.bh.batqty) self.df.loadEntry("T", 0, 1, data=self.bh.batval) def queryDrs(self): callModule(self.opts["mf"], self.df, "dr4010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"]) def maintainDrs(self): callModule(self.opts["mf"], self.df, "dr1010", coy=(self.opts["conum"], self.opts["conam"]), period=None, user=self.opts["capnm"])
class tb1010(object): def __init__(self, **opts): self.opts = opts self.opts["mf"].dbm.openDbase() if self.setVariables(): self.doProcess() self.opts["mf"].startLoop() def setVariables(self): self.sql = Sql(self.opts["mf"].dbm, ["ftable", "ffield"], prog=self.__class__.__name__) if self.sql.error: return return True def doProcess(self): fft = { "stype": "R", "tables": ("ftable", ), "cols": (("ft_tabl", "", 0, "Table"), ("ft_desc", "", 0, "Description", "Y")), "where": [("ft_seq", "=", 1)] } ffl = { "stype": "R", "tables": ("ffield", ), "cols": (("ff_seq", "", 0, "Seq"), ("ff_name", "", 0, "Name"), ("ff_desc", "", 0, "Description", "Y"), ("ff_type", "", 0, "Tp"), ("ff_size", "", 0, "Size")), "whera": (("T", "ff_tabl", 0, 0), ), "index": 0 } ffi = { "stype": "R", "tables": ("ftable", ), "cols": (("ft_seq", "", 0, "Seq"), ("ft_type", "", 0, "T"), ("ft_key0", "", 0, "Column-1"), ("ft_key1", "", 0, "Column-2"), ("ft_key2", "", 0, "Column-3"), ("ft_key3", "", 0, "Column-4"), ("ft_key4", "", 0, "Column-5"), ("ft_key4", "", 0, "Column-6"), ("ft_key4", "", 0, "Column-7")), "whera": (("T", "ft_tabl", 0, 0), ), "comnd": self.doIdxCmd } typ = { "stype": "C", "titl": "Select the Required Data Type", "head": ("Cd", "Description"), "data": dattyp, "index": 0 } valtyp = [] for t in dattyp: valtyp.append(t[0]) self.col = { "stype": "C", "titl": "Select the Required Column", "head": ("Table", "Description"), "data": [] } fld = [(("T", 0, 0, 0), "INA", 20, "Table ", "Table Name", "", "Y", self.doTable, fft, None, ("notin", ("", "ftable", "ffield"))), (("T", 0, 0, 0), "INA", 30, " Description ", "Description", "", "N", self.doDesc, None, None, None), (("C", 1, 0, 0), "IUI", 3, "Seq", "Column Sequence", "i", "N", self.doColSeq, ffl, None, ("between", 0, 999)), (("C", 1, 0, 1), "INA", 20, "Column", "Column Name", "", "N", None, None, None, ("notblank", )), (("C", 1, 0, 2), "INA", 2, "Tp", "Data Type", "", "N", None, typ, None, ("in", valtyp)), (("C", 1, 0, 3), "IUD", 6.1, "Size", "Field Size", "", "N", None, None, None, ("notzero", )), (("C", 1, 0, 4), "INA", 30, "Description", "", "", "N", None, None, None, None), (("C", 1, 0, 5), "INA", 30, "Heading", "Report Heading", "", "N", None, None, None, ("notblank", )), (("C", 2, 0, 0), "IUI", 1, "S", "Sequence", "i", "N", self.doIdxSeq, ffi, None, ("efld", )), (("C", 2, 0, 1), "IUA", 1, "T", "Type (U/N)", "", "N", None, None, None, ("in", ("U", "N"))), (("C", 2, 0, 2), "INA", (14, 20), "Column-0", "", "", "N", self.doIdxCol, self.col, None, ("notblank", )), (("C", 2, 0, 3), "INA", (14, 20), "Column-1", "", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 4), "INA", (14, 20), "Column-2", "", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 5), "INA", (14, 20), "Column-3", "", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 6), "INA", (14, 20), "Column-4", "", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 7), "INA", (5, 20), "Col-5", "Column-5", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 8), "INA", (5, 20), "Col-6", "Column-6", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 9), "INA", (5, 20), "Col-7", "Column-7", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 10), "INA", (5, 20), "Col-8", "Column-8", "", "N", self.doIdxCol, self.col, None, ("efld", )), (("C", 2, 0, 11), "INA", (5, 20), "Col-9", "Column-9", "", "N", self.doIdxCol, self.col, None, ("efld", ))] tag = (("Columns", None, ("C", 1, 1), ("T", 0, 1)), ("Indexes", None, ("C", 1, 1), ("T", 0, 1))) row = (0, 15, 5) tnd = ((self.endTop, "y"), ) txt = (self.exitTop, ) cnd = ((None, "n"), (self.endPage1, "y"), (self.endPage2, "y")) cxt = (None, self.exitPage1, self.exitPage2) but = (("Print", None, self.doPrint, 0, ("T", 0, 2), ("T", 0, 1)), ("Cancel", None, self.doRestart, 0, ("T", 0, 2), ("T", 0, 1))) self.df = TartanDialog(self.opts["mf"], eflds=fld, tags=tag, rows=row, tend=tnd, txit=txt, cend=cnd, cxit=cxt, butt=but) def doTable(self, frt, pag, r, c, p, i, w): self.tab = w tab = self.sql.getRec("ftable", cols=["ft_tabl", "ft_desc"], where=[("ft_tabl", "=", w), ("ft_seq", "=", 1)], limit=1) if not tab: self.new = "y" else: self.new = "n" self.df.loadEntry(frt, pag, p + 1, data=tab[1]) yn = askQuestion(screen=self.opts["mf"].body, head="Table Exists", mess="Changing This Record Could Result In Loss of Data, "\ "Are You Sure You Want to Continue?", default="no") if yn == "no": return yn def doDesc(self, frt, pag, r, c, p, i, w): self.desc = w def endTop(self): self.fld = makeArray(6, 100, 1, "S") self.idx = makeArray(12, 20, 1, "S") if self.new == "n": fld = self.sql.getRec("ffield", where=[("ff_tabl", "=", self.tab)], order="ff_seq") for n, f in enumerate(fld): self.fld[n] = f[1:] idx = self.sql.getRec("ftable", where=[("ft_tabl", "=", self.tab)], order="ft_seq") for n, f in enumerate(idx): self.idx[n] = f[2:] self.idx[n][0] = n self.doPopulate("fld") else: self.df.focusField("C", 1, 1) def exitTop(self): self.df.closeProcess() self.opts["mf"].closeLoop() def doColSeq(self, frt, pag, r, c, p, i, w): self.colseq = w for n, s in enumerate(self.fld[self.colseq][1:]): self.df.loadEntry("C", 1, p + n + 1, data=s) def endPage1(self): pos = int(self.df.col / self.df.colq[1]) - 1 self.fld[self.colseq] = copyList(self.df.c_work[1][pos]) self.doPopulate("fld") def exitPage1(self): self.createCols() self.df.selPage("Indexes") self.doPopulate("idx") def createCols(self): self.valcol = [] self.col["data"] = [] for fld in self.fld: self.valcol.append(fld[1]) self.col["data"].append([fld[1], fld[4]]) def doIdxCmd(self, frt, pag, r, c, p, i, w): idxseq = int(w[0]) - 1 self.doIdxSeq(frt, pag, r, c, p, i, idxseq) self.df.focusField(frt, pag, c + 1) def doIdxSeq(self, frt, pag, r, c, p, i, w): self.idxseq = w for n, s in enumerate(self.idx[self.idxseq][1:]): self.df.loadEntry("C", 2, p + n + 1, data=s) def doIdxCol(self, frt, pag, r, c, p, i, w): if w and w not in self.valcol: return "Invalid Column" def endPage2(self): pos = int(self.df.col / self.df.colq[2]) - 1 self.idx[self.idxseq] = copyList(self.df.c_work[2][pos]) self.doPopulate("idx") def exitPage2(self): if self.new == "y" and self.df.col == 1: self.df.selPage("Columns") else: if self.tab in tabdic: tabdic[self.tab]["fld"] = [] tabdic[self.tab]["idx"] = [] else: tabdic[self.tab] = {"fld": [], "idx": []} for dat in self.fld: if dat == [""] * 6: break tabdic[self.tab]["fld"].append(dat) for num, dat in enumerate(self.idx): if dat == [""] * 12: break if num == 0: dat.insert(0, self.df.t_work[0][0][1]) else: dat.insert(0, "") dat[1] = num + 1 fmt = '"%s",%s,"%s"' ddd = dat[:3] for n, d in enumerate(dat[3:]): if d: fmt += ',"%s"' ddd.append(d) fmt += "\n" tabdic[self.tab]["idx"].append(ddd) fle = os.path.join(getPrgPath(), "stdtab.py") outf = open(fle, "w") outf.write("""tabdic = {""") tabs = list(tabdic.keys()) tabs.sort() for tab in tabs: outf.write(""" "%s": {""" % tab) for key in ("fld", "idx"): outf.write(""" "%s": [""" % key) for fld in tabdic[tab][key]: outf.write(""" %s""" % json.dumps(fld)) if fld == tabdic[tab][key][-1]: outf.write("""]""") else: outf.write(""",""") if key == "fld": outf.write(""",""") outf.write("""}""") if tab != tabs[-1]: outf.write(""",""") outf.write("""}""") outf.close() self.doRestart() def doPopulate(self, ftyp=None): if ftyp == "fld": self.df.clearFrame("C", 1) for num, dat in enumerate(self.fld): if dat == [""] * 6: break if num > 14: self.df.scrollScreen(1) pos = 14 else: pos = num self.df.focusField("C", 1, (pos * 6) + 1) for n, c in enumerate(dat): self.df.loadEntry("C", 1, (pos * 6) + n, data=c) self.df.advanceLine(1) return self.df.clearFrame("C", 2) for num, dat in enumerate(self.idx): if dat == [""] * 12: break if num > 4: self.df.scrollScreen(2) pos = 4 else: pos = num self.df.focusField("C", 2, (pos * 12) + 1) for n, c in enumerate(dat): self.df.loadEntry("C", 2, (pos * 12) + n, data=c) self.df.advanceLine(2) self.df.focusField("C", 2, self.df.col) def doRestart(self): self.df.last[0] = [0, 0] self.df.selPage("Columns") self.df.focusField("T", 0, 1) def doPrint(self): state = self.df.disableButtonsTags() cols = [["ff_seq", "UI", 3.0, "Seq"], ["ff_name", "NA", 20.0, "Field Name"], ["ff_type", "NA", 2.0, "Tp"], ["ff_size", "NA", 6.1, "Size"], ["ff_desc", "NA", 30.0, "Description"], ["ff_head", "NA", 20.0, "Heading"]] whr = [("ff_tabl", "=", self.tab)] RepPrt(self.opts["mf"], name=self.tab + "_fld", tables=["ffield"], heads=[ "Table Fields for Table %s" % self.tab, ], cols=cols, where=whr) cols = [["ft_desc", "NA", 30.0, "Table Description"], ["ft_seq", "UI", 2.0, "Sq"], ["ft_type", "NA", 1.0, "T"], ["ft_key0", "NA", 10.0, "1st-Key"], ["ft_key1", "NA", 10.0, "2nd-Key"], ["ft_key2", "NA", 10.0, "3rd-Key"], ["ft_key3", "NA", 10.0, "4th-Key"], ["ft_key4", "NA", 10.0, "5th-Key"], ["ft_key5", "NA", 10.0, "6th-Key"], ["ft_key6", "NA", 10.0, "7th-Key"], ["ft_key7", "NA", 10.0, "8th-Key"], ["ft_key8", "NA", 10.0, "9th-Key"], ["ft_key9", "NA", 10.0, "10th-Key"]] whr = [("ft_tabl", "=", self.tab)] RepPrt(self.opts["mf"], name=self.tab + "_idx", tables=["ftable"], heads=[ "Table Keys for Table %s" % self.tab, ], cols=cols, where=whr) self.df.enableButtonsTags(state=state) self.df.focusField(self.df.frt, self.df.pag, self.df.col)