예제 #1
0
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()
예제 #2
0
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()