class SalariesCalculator(): def __init__(self, Salaries): date_var1 = tk.StringVar() date_var2 = tk.StringVar() self.Worker = "Francisco" self.window = Salaries Date = str(date.today().strftime("%d/%m/%Y")) if Date[0:2] <= '15': D1 = "01" + Date[2:] D2 = "15" + Date[2:] else: D1 = "16" + Date[2:] D2 = Date X = 50 Y = 50 Lb = tk.Label(self.window, bg='skyblue', font=("Arial", 12), text="De:") Lb.place(x=X + 80, y=Y) self.Date1 = tk.Entry(self.window, bg='white', font=("Arial", 12), textvariable=date_var1) date_var1.set(D1) self.Date1.place(x=X + 80, y=Y + 30) Lb = tk.Label(self.window, bg='skyblue', font=("Arial", 12), text="Hasta:") Lb.place(x=X + 80, y=Y + 60) self.Date2 = tk.Entry(self.window, bg='white', font=("Arial", 12), textvariable=date_var2) date_var2.set(D2) self.Date2.place(x=X + 80, y=Y + 90) Lb = tk.Label(self.window, bg='skyblue', font=("Arial", 12), text="Concepto:") Lb.place(x=X + 335, y=Y) self.Worker_list = tk.Listbox(self.window, bg='white', fg='black', height=3, selectmode='SINGLE', width=25, font=("Arial", 12)) Workers = ['Francisco', 'Guadalupe', 'Diego'] for item in Workers: self.Worker_list.insert(tk.END, item) self.Worker_list.place(x=X + 335, y=Y + 30) self.Worker_list.bind("<ButtonRelease-1>", self.update_table) ###### Tabla de Salarios ###### Lb = tk.Label(self.window, bg='skyblue', font=("Arial", 12), text="Salarios:") Lb.place(x=X + 663, y=Y) Fecha = self.Date1.get() Fecha1 = Fecha[6:10] + "-" + Fecha[3:5] + "-" + Fecha[0:2] Fecha = self.Date2.get() Fecha2 = Fecha[6:10] + "-" + Fecha[3:5] + "-" + Fecha[0:2] try: SelectQuery = "SELECT Responsable, SUM(Monto) AS Salario FROM Transactions.dbo.Transactions \ where Concepto = 'Sueldo' and Fecha between '" + Fecha1 \ + "' and '" + Fecha2 + "' GROUP BY Responsable;" Data = pd.read_sql(SelectQuery, conn) except: df = { 'Responsable': ['Francisco', 'Guadalupe', 'Diego'], 'Salario': ['', '', ''] } Data = pd.DataFrame(df) tframe_sal = tk.Frame(self.window, bg="blue", highlightcolor="blue") tframe_sal.place(x=X + 663, y=Y + 30, height=130, width=318) rec, col = Data.shape aux = dict() data = dict() for i in range(rec): for j in range(col): aux[Data.columns[j]] = Data.values[i, j] data['rec' + str(i + 1)] = aux.copy() self.model_sal = TableModel() self.table_sal = TableCanvas(tframe_sal, cellbackgr='white', thefont=( 'Arial', 12, ), cellwidth=140, rowheight=25, rowheaderwidth=30, rowselectedcolor='yellow', editable=False, model=self.model_sal) self.table_sal.createTableFrame() self.model_sal = self.table_sal.model self.model_sal.importDict(data) self.table_sal.show() ###### Tabla de Actividades ###### try: SelectQuery = "SELECT #, Fecha, Concepto, Monto, Responsable, Comentario FROM Transactions.dbo.Transactions \ where Concepto = 'Sueldo' and Responsable = '" + self.Worker + "' and Fecha between '"+ Fecha1 \ + "' and '" + Fecha2 + "';" Data = pd.read_sql(SelectQuery, conn) except: df = { '#': [''], 'Fecha': [''], 'Concepto': [''], 'Monto': [''], 'Responsable': [''], 'Comentario': [''] } Data = pd.DataFrame(df) tframe_act = tk.Frame(self.window, bg="blue", highlightcolor="blue") tframe_act.place(x=X + 80, y=Y + 135, height=350, width=900) rec, col = Data.shape aux = dict() data = dict() for i in range(rec): for j in range(col): aux[Data.columns[j]] = Data.values[i, j] data['rec' + str(i + 1)] = aux.copy() self.model_act = TableModel() self.table_act = TableCanvas(tframe_act, cellbackgr='white', thefont=( 'Arial', 12, ), cellwidth=140, rowheight=25, rowheaderwidth=30, rowselectedcolor='yellow', editable=False, model=self.model_act) self.table_act.createTableFrame() self.model_act = self.table_act.model self.model_act.importDict(data) self.table_act.show() def update_table(self, event): widget = event.widget selection = widget.curselection() self.Worker = widget.get(selection[0]) Fecha = self.Date1.get() Fecha1 = Fecha[6:10] + "-" + Fecha[3:5] + "-" + Fecha[0:2] Fecha = self.Date2.get() Fecha2 = Fecha[6:10] + "-" + Fecha[3:5] + "-" + Fecha[0:2] try: SelectQuery = "SELECT #, Fecha, Concepto, Monto, Responsable, Comentario FROM Transactions.dbo.Transactions \ where Concepto = 'Sueldo' and Responsable = '" + self.Worker + "' and Fecha between '"+ Fecha1 \ + "' and '" + Fecha2 + "';" Data = pd.read_sql(SelectQuery, conn) except: df = { '#': [''], 'Fecha': [''], 'Concepto': [''], 'Monto': [''], 'Responsable': [''], 'Comentario': [''] } Data = pd.DataFrame(df) rec, col = Data.shape aux = dict() data = dict() for i in range(rec): for j in range(col): aux[Data.columns[j]] = Data.values[i, j] data['rec' + str(i + 1)] = aux.copy() self.model_act.deleteRows(range(0, self.model_act.getRowCount())) self.model_act.importDict(data) self.table_act.redraw() try: SelectQuery = "SELECT Responsable, SUM(Monto) AS Salario FROM Transactions.dbo.Transactions \ where Concepto = 'Sueldo' and Fecha between '" + Fecha1 \ + "' and '" + Fecha2 + "' GROUP BY Responsable;" Data = pd.read_sql(SelectQuery, conn) except: df = { 'Responsable': ['Francisco', 'Guadalupe', 'Diego'], 'Salario': ['', '', ''] } Data = pd.DataFrame(df) rec, col = Data.shape aux = dict() data = dict() for i in range(rec): for j in range(col): aux[Data.columns[j]] = Data.values[i, j] data['rec' + str(i + 1)] = aux.copy() self.model_sal.deleteRows(range(0, self.model_sal.getRowCount())) self.model_sal.importDict(data) self.table_sal.redraw()
class RRInterface(Frame): today = datetime.datetime.now().date() pieces = [] def __init__(self, master=None): Frame.__init__(self, master) self.pack() self.configure(width=1250, height=500) self.frCal = Frame(self) self.frCal.place(relx=0, rely=0) self.frCal.configure(bd=1, relief=RAISED) self.calWidget = tkcalendar.Calendar(self.frCal, showweeknumbers=False, locale="ru_RU", maxdate=self.today) self.calWidget.pack() self.calWidget.bind('<<CalendarSelected>>', self.getDate) self.dayDataFrame = Frame(self) self.dayDataFrame.grid_propagate(0) self.dayDataFrame.place(relx=0, rely=1, anchor=SW) self.dayDataFrame.configure(width=1250, height=300, bd=1, relief=RAISED) self.tableModel = TableModel() self.table = TableCanvas(self.dayDataFrame, cellwidth=300, model=self.tableModel, rowheight=25) self.table.show() self.drawFrame = Frame(self) self.drawFrame.grid_propagate(0) self.drawFrame.place(relx=1, rely=0, anchor=NE) self.drawFrame.configure(width=966, height=200, bd=1, relief=RAISED) self.createCanvas() self.dateList = [] self.hourUsed = [0 for i in range(24)] self.strInfo = StringVar() self.labelInfo = Label(self, textvariable=self.strInfo, width=30, height=1, bg='white', bd=1, relief=RAISED, font='Arial 10') self.strInfo.set('Test') self.labelInfo.place(x=0, y=175) self.createFileList() self.createTable() self.readReportFile(self.today) def createCanvas(self): self.drawCanvas = Canvas(self.drawFrame, bg='white') self.drawCanvas.place(x=0, y=0) self.drawCanvas.configure(width=960, height=194) for i in range(24): self.drawCanvas.create_line((i + 1) * 40, 0, (i + 1) * 40, 180, fill='black') self.drawCanvas.create_text((i + 1) * 40 - 20, 90, text=str(i), font="Verdana 14") self.drawCanvas.create_line(0, 180, 960, 180, fill='black') def getDate(self, event=None): date = self.calWidget.selection_get() self.readReportFile(date) def createFileList(self): fileList = glob.glob(reportFolder + "\\*.REP") for file in fileList: file = file.replace(reportFolder + "\\", "") if int(file[1:5]) < 2000: continue self.dateList.append( datetime.date(year=int(file[1:5]), month=monthToInt.get(file[5:8]), day=int(file[8:10]))) self.dateList.sort() if len(self.dateList) > 0: self.calWidget.configure(mindate=self.dateList[0]) else: self.calWidget.configure(mindate=datetime.datetime.now()) def createTable(self): data = { 'def': { 'Program name': 'test', 'Start': '00:00:00', 'End': '23:59:59', 'Time': '23:59:59', 'Thickness': 99, 'Pieces': 999, 'Produced': 111, 'Remained': 888, 'State': 'Ok' } } self.tableModel.importDict(data) self.table.resizeColumn(1, 150) self.table.resizeColumn(2, 150) self.table.resizeColumn(3, 70) self.table.resizeColumn(4, 90) self.table.resizeColumn(5, 60) self.table.resizeColumn(6, 80) self.table.resizeColumn(7, 80) def readReportFile(self, date): # R1970Jan01.REP fileName = 'R' + str(date.year) + intToMonth[date.month] if date.day < 10: fileName = fileName + '0' + str(date.day) else: fileName = fileName + str(date.day) fileName = reportFolder + '\\' + fileName + '.REP' self.pieces.clear() self.drawCanvas.delete('piece') self.tableModel.deleteRows(range(self.tableModel.getRowCount())) self.table.redraw() if not os.path.exists(fileName): self.strInfo.set('File not exist') return with open(fileName, 'r', encoding="utf-8") as scannedFile: fileData = scannedFile.read() pieces = fileData.split('\n\n') for i in range(len(pieces)): lines = pieces[i].split('\n') lineDict = {} for line in lines: ll = line.replace("\n", "").split('=') if len(ll) < 2: continue lineDict[ll[0]] = ll[1] self.pieces.append( PieceData(ID=len(self.pieces), name=lineDict.get('PROGRAM NAME'), start=lineDict.get('START'), end=lineDict.get('END'), time=lineDict.get('MACHINING TIME'), thickness=lineDict.get('WORKPIECE THICKNESS'), pieces=lineDict.get('NUMBER OF PIECES'), produced=lineDict.get('NR OF PIECES PRODUCED'), remained=lineDict.get('NR OF PIECES REMAINING'), state=lineDict.get('STATE'), date=date)) counter = 0 while counter < len(self.pieces): if self.pieces[counter].programName == '[ERROR]' and self.pieces[ counter].id > 0: self.pieces.pop(counter) else: counter += 1 self.strInfo.set(str(date) + "\t Pieces: " + str(len(self.pieces))) self.addDayDataToCanvas() self.addDayDataToTable() def addDayDataToCanvas(self): for i in range(len(self.hourUsed)): self.hourUsed[i] = 0 for piece in self.pieces: if piece.programName == '[ERROR]' and piece.id > 0: continue start = piece.startTime end = piece.endTime pieceColor = getRandomColor() sX = start.hour * 40 sY = 180 - (start.minute + start.second / 60) * 3 eX = sX + 40 eY = 180 - (end.minute + end.second / 60) * 3 if end.hour != start.hour: self.hourUsed[end.hour] += \ (end - end.replace(hour=end.hour, minute=0, second=0)).seconds currHour = start.hour + 1 finalHour = end.hour if finalHour < currHour: finalHour = 23 for hH in range(currHour, finalHour): self.drawCanvas.create_rectangle(hH * 40, 180, (hH + 1) * 40, 0, fill=pieceColor, tag="piece") self.hourUsed[hH] += 3600 tsX = finalHour * 40 tsY = 180 teX = tsX + 40 teY = eY eY = 0 self.drawCanvas.create_rectangle(tsX, tsY, teX, teY, fill=pieceColor, tag="piece") if start.hour < 23: self.hourUsed[start.hour] += (start.replace( hour=start.hour + 1, minute=0, second=0) - start).seconds else: nextDay = start + datetime.timedelta(seconds=3600) self.hourUsed[start.hour] += ( nextDay.replace(hour=0, minute=0, second=0) - start).seconds else: self.hourUsed[start.hour] += (end - start).seconds self.drawCanvas.create_rectangle(sX, sY, eX, eY, fill=pieceColor, tag="piece") for i in range(24): used = toFixed(self.hourUsed[i] / 36, 2) tt = self.drawCanvas.create_text(i * 40 + 20, 188, text=used, tag="piece") if tt > 100000: self.drawCanvas.delete('all') self.drawCanvas.destroy() self.createCanvas() self.addDayDataToCanvas() def addDayDataToTable(self): for piece in self.pieces: data = { piece.id: { 'Program name': piece.programName, 'Start': str(piece.startTime), 'End': str(piece.endTime), 'Time': str(piece.timeTime), 'Thickness': piece.thickness, 'Pieces': piece.pieces, 'Produced': piece.produced, 'Remained': piece.remained, 'State': piece.state } } self.tableModel.importDict(data) self.table.redraw()