托尔斯泰

# -*- coding:gb2312 -*-

from tkinter import ttk
from tkinter import *
from tkinter import messagebox


class JXC(object):
    def __init__(self):
        self.filename = '简易进销存数据.txt'
        self.buyIndex = 0
        self.sellIndex = 0
        self.queryIndex = 0
        self.allList = {}
        self.tempList = {}
        self.dateList = []
        '''初始顶层框架'''
        self.top = Tk()
        self.top.title('简易进销存 1.0')
        self.top.geometry('960x720')
        self.top.resizable(0, 0)

        """set start page Label"""
        self.startLabel = Label(self.top, text='简易进销存 ', font=('Arial', 16, 'bold'))
        self.startLabel.pack(fill=X, expand=0)

        """set options button """
        self.optFrm = Frame(self.top, height=10)
        self.optFrm.pack(fill=X, expand=0)
        self.startBtn = Button(self.optFrm, text='首页', width=10, command=self.showStartFrm)
        self.startBtn.pack(side=LEFT)
        self.buyBtn = Button(self.optFrm, text='进货信息', width=10, command=self.showBuyFrm)
        self.buyBtn.pack(side=LEFT)
        self.sellBtn = Button(self.optFrm, text='出货信息', width=10, command=self.showSellFrm)
        self.sellBtn.pack(side=LEFT)
        self.queryBtn = Button(self.optFrm, text='查询', width=10, command=self.showQueryFrm)
        self.queryBtn.pack(side=LEFT)

        """start page Frame"""
        self.startFrm = Frame(self.top)
        """buy page Frame"""
        self.buyFrm = Frame(self.top)

        """sell page Frame"""
        self.sellFrm = Frame(self.top)

        """sell query Frame"""
        self.queryFrm = Frame(self.top)

    def showStartFrm(self):
        self.startFrm.pack(fill='both', expand=1)
        self.buyFrm.pack_forget()
        self.sellFrm.pack_forget()
        self.queryFrm.pack_forget()

    def showBuyFrm(self):
        self.startFrm.pack_forget()
        self.buyFrm.pack(fill='both', expand=1)
        self.sellFrm.pack_forget()
        self.queryFrm.pack_forget()

    def showSellFrm(self):
        self.startFrm.pack_forget()
        self.buyFrm.pack_forget()
        self.sellFrm.pack(fill='both', expand=1)
        self.queryFrm.pack_forget()

    def showQueryFrm(self):
        self.startFrm.pack_forget()
        self.buyFrm.pack_forget()
        self.sellFrm.pack_forget()
        self.queryFrm.pack(fill='both', expand=1)

    def setStartSubFrm(self):
        illustrationText = """"
                            使用说明


                            《进货信息》
       用于添加新的进货订单,在‘已添加的新的进货订单’下可以查看当前添加的进货订单


                            《出货信息》
       用于添加新的进货订单,在‘已添加的新的出货订单’下可以查看当前添加的出货订单


                                《查询》
            用于查询往日的流水信息,已经每天的库存信息
        """
        self.illustrLabel = Label(self.startFrm, text=illustrationText, font=('Arial', 14, 'bold'))
        self.illustrLabel.pack()

    def setBuySubFrm(self):
        option = ['订单日期', '物品名称', '物品编号', '进货价格', '进货数量', '进货厂商']
        labelText = ['添加新的进货订货单', '已添加的进货订单']
        self.subBuyFrmUp = Frame(self.buyFrm)
        self.subBuyFrmUp.pack(fill=X, expand=0)
        self.subBuyFrmDown = Frame(self.buyFrm)
        self.subBuyFrmDown.pack(fill=X, expand=0)
        self.addBuyInfoLabel = Label(self.subBuyFrmUp, text=labelText[0], font=('Arial', 14, 'bold'), bg='gray')
        self.addBuyInfoLabel.pack(fill=X, expand=0)
        self.subBuyFrmUpOperate = Frame(self.subBuyFrmUp)
        self.subBuyFrmUpOperate.pack()
        self.showBuyInfoLabel = Label(self.subBuyFrmDown, text=labelText[1], font=('Arial', 14, 'bold'), bg='gray')
        self.showBuyInfoLabel.pack(fill=X, expand=0)
        self.subBuyFrmDownShow = Frame(self.subBuyFrmDown)
        self.subBuyFrmDownShow.pack()

        """Input"""
        self.dateBuyLabel = Label(self.subBuyFrmUpOperate, text=option[0], font=('Arial', 12), width=15)
        self.dateBuyLabel.grid(row=0, column=0, columnspan=15)
        self.itemBuyLabel = Label(self.subBuyFrmUpOperate, text=option[1], font=('Arial', 12), width=15)
        self.itemBuyLabel.grid(row=1, column=0, columnspan=15)
        self.identBuyLabel = Label(self.subBuyFrmUpOperate, text=option[2], font=('Arial', 12), width=15)
        self.identBuyLabel.grid(row=2, column=0, columnspan=15)
        self.priBuyLabel = Label(self.subBuyFrmUpOperate, text=option[3], font=('Arial', 12), width=15)
        self.priBuyLabel.grid(row=3, column=0, columnspan=15)
        self.numBuyLabel = Label(self.subBuyFrmUpOperate, text=option[4], font=('Arial', 12), width=15)
        self.numBuyLabel.grid(row=4, column=0, columnspan=15)
        self.whereBuyLabel = Label(self.subBuyFrmUpOperate, text=option[5], font=('Arial', 12), width=15)
        self.whereBuyLabel.grid(row=5, column=0, columnspan=15)

        self.dateBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[0], font=('Arial', 12), width=25)
        self.dateBuyEntry.grid(row=0, column=15, columnspan=15)
        self.itemBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[1], font=('Arial', 12), width=25)
        self.itemBuyEntry.grid(row=1, column=15, columnspan=15)
        self.identBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[2], font=('Arial', 12), width=25)
        self.identBuyEntry.grid(row=2, column=15, columnspan=15)
        self.priBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[3], font=('Arial', 12), width=25)
        self.priBuyEntry.grid(row=3, column=15, columnspan=15)
        self.numBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[4], font=('Arial', 12), width=25)
        self.numBuyEntry.grid(row=4, column=15, columnspan=15)
        self.whereBuyEntry = Entry(self.subBuyFrmUpOperate, text=option[5], font=('Arial', 12), width=25)
        self.whereBuyEntry.grid(row=5, column=15, columnspan=15)

        self.clcBuyBtn = Button(self.subBuyFrmUpOperate, text='清除', activebackground='gray', command=self.clearBuyEntry)
        self.clcBuyBtn.grid(row=7, column=15, columnspan=5)
        self.saveBuyBtn = Button(self.subBuyFrmUpOperate, text='保存', activebackground='gray', command=self.showBuyInfo)
        self.saveBuyBtn.grid(row=7, column=26, columnspan=5)
        """show"""
        self.treeBuy = ttk.Treeview(self.subBuyFrmDownShow, height=20)
        self.treeBuy['column'] = tuple(option)
        self.treeBuy.heading("#0", text='订单序号')
        self.treeBuy.column("#0", minwidth=0, width=140)
        for item in option:
            self.treeBuy.column(item, minwidth=0, width=140)
            self.treeBuy.heading(item, text=item)
        self.treeBuy.pack()

    def setSellSubFrm(self):
        option = ['订单日期', '物品名称', '物品编号', '销售价格', '销售数量', '客户信息']
        labelText = ['添加新的销售订货单', '已添加的销售订单']
        self.subSellFrmUp = Frame(self.sellFrm)
        self.subSellFrmUp.pack(fill=X, expand=0)
        self.subSellFrmDown = Frame(self.sellFrm)
        self.subSellFrmDown.pack(fill=X, expand=0)
        self.addSellInfoLabel = Label(self.subSellFrmUp, text=labelText[0], font=('Arial', 14, 'bold'), bg='gray')
        self.addSellInfoLabel.pack(fill=X, expand=0)
        self.subSellFrmUpOperate = Frame(self.subSellFrmUp)
        self.subSellFrmUpOperate.pack()
        self.showSellInfoLabel = Label(self.subSellFrmDown, text=labelText[1], font=('Arial', 14, 'bold'), bg='gray')
        self.showSellInfoLabel.pack(fill=X, expand=0)
        self.subSellFrmDownShow = Frame(self.subSellFrmDown)
        self.subSellFrmDownShow.pack()

        """Input"""
        self.dateSellLabel = Label(self.subSellFrmUpOperate, text=option[0], font=('Arial', 12), width=15)
        self.dateSellLabel.grid(row=0, column=0, columnspan=15)
        self.itemSellLabel = Label(self.subSellFrmUpOperate, text=option[1], font=('Arial', 12), width=15)
        self.itemSellLabel.grid(row=1, column=0, columnspan=15)
        self.identSellLabel = Label(self.subSellFrmUpOperate, text=option[2], font=('Arial', 12), width=15)
        self.identSellLabel.grid(row=2, column=0, columnspan=15)
        self.priSellLabel = Label(self.subSellFrmUpOperate, text=option[3], font=('Arial', 12), width=15)
        self.priSellLabel.grid(row=3, column=0, columnspan=15)
        self.numSellLabel = Label(self.subSellFrmUpOperate, text=option[4], font=('Arial', 12), width=15)
        self.numSellLabel.grid(row=4, column=0, columnspan=15)
        self.whereSellLabel = Label(self.subSellFrmUpOperate, text=option[5], font=('Arial', 12), width=15)
        self.whereSellLabel.grid(row=5, column=0, columnspan=15)

        self.dateSellEntry = Entry(self.subSellFrmUpOperate, text=option[0], font=('Arial', 12), width=25)
        self.dateSellEntry.grid(row=0, column=15, columnspan=15)
        self.itemSellEntry = Entry(self.subSellFrmUpOperate, text=option[1], font=('Arial', 12), width=25)
        self.itemSellEntry.grid(row=1, column=15, columnspan=15)
        self.identSellEntry = Entry(self.subSellFrmUpOperate, text=option[2], font=('Arial', 12), width=25)
        self.identSellEntry.grid(row=2, column=15, columnspan=15)
        self.priSellEntry = Entry(self.subSellFrmUpOperate, text=option[3], font=('Arial', 12), width=25)
        self.priSellEntry.grid(row=3, column=15, columnspan=15)
        self.numSellEntry = Entry(self.subSellFrmUpOperate, text=option[4], font=('Arial', 12), width=25)
        self.numSellEntry.grid(row=4, column=15, columnspan=15)
        self.whereSellEntry = Entry(self.subSellFrmUpOperate, text=option[5], font=('Arial', 12), width=25)
        self.whereSellEntry.grid(row=5, column=15, columnspan=15)

        self.clcSellBtn = Button(self.subSellFrmUpOperate, text='清除', activebackground='gray',
                                 command=self.clearSellEntry)
        self.clcSellBtn.grid(row=7, column=15, columnspan=5)
        self.saveSellBtn = Button(self.subSellFrmUpOperate, text='保存', activebackground='gray',
                                  command=self.showSellInfo)
        self.saveSellBtn.grid(row=7, column=26, columnspan=5)
        """show"""
        self.treeSell = ttk.Treeview(self.subSellFrmDownShow, height=20)
        self.treeSell['column'] = tuple(option)
        self.treeSell.heading("#0", text='订单序号')
        self.treeSell.column("#0", minwidth=0, width=140)
        for item in option:
            self.treeSell.column(item, minwidth=0, width=140)
            self.treeSell.heading(item, text=item)
        self.treeSell.pack()

    def setQueryFrm(self):
        self.queryUpFrm = Frame(self.queryFrm)
        self.queryUpFrm.pack(fill=X, expand=0)
        self.queryDownFrm = Frame(self.queryFrm)
        self.queryDownFrm.pack(fill=X, expand=0)

        self.queryUpInfoLabel = Label(self.queryUpFrm, text='查询日期')
        self.queryUpInfoLabel.grid(row=0, column=0, columnspan=5)
        self.queryUpEntryFirst = Entry(self.queryUpFrm)
        self.queryUpEntryFirst.grid(row=0, column=20, columnspan=5)
        self.queryUpInfoLabel = Label(self.queryUpFrm, text='---')
        self.queryUpInfoLabel.grid(row=0, column=26, columnspan=2)
        self.queryUpEntrySecond = Entry(self.queryUpFrm)
        self.queryUpEntrySecond.grid(row=0, column=28, columnspan=5)
        self.queryUpInfoBtn = Button(self.queryUpFrm, text='查询', activebackground='gray', command=self.queryData)
        self.queryUpInfoBtn.grid(row=0, column=35, columnspan=5)

        self.treeQuery = ttk.Treeview(self.queryDownFrm, height=30)
        option = ['物品名称', '物品编号', '物品价格', '进货数量', '进货厂商', '销售价格', '销售数量', '客户信息', '库存信息']
        self.treeQuery['column'] = option
        self.treeQuery.heading("#0", text='日期')
        self.treeQuery.column("#0", minwidth=0, width=96)
        for item in option:
            self.treeQuery.heading(item, text=item)
            self.treeQuery.column(item, minwidth=0, width=96)
        self.treeQuery.pack()

    def getBuyInput(self):
        newInput = []
        newInput.append(self.dateBuyEntry.get())
        newInput.append(self.itemBuyEntry.get())
        newInput.append(self.identBuyEntry.get())
        newInput.append(self.priBuyEntry.get())
        newInput.append(self.numBuyEntry.get())
        newInput.append(self.whereBuyEntry.get())
        return newInput

    def clearBuyEntry(self):
        self.itemBuyEntry.delete(0, END)
        self.identBuyEntry.delete(0, END)
        self.priBuyEntry.delete(0, END)
        self.numBuyEntry.delete(0, END)
        self.whereBuyEntry.delete(0, END)
        self.dateBuyEntry.delete(0, END)

    def showBuyInfo(self):
        val = messagebox.askyesno('警告', '保存该订单信息?')
        if val:
            messagebox.showinfo('提示', '订单信息保存成功!')
            order = self.getBuyInput()
            self.clearBuyEntry()
            self.updateTree(self.treeBuy, order)
            self.upDateTempList(order, 1)
            self.upDateAllList()
            self.saveDate()

    def getSellInput(self):
        newInput = []
        newInput.append(self.dateSellEntry.get())
        newInput.append(self.itemSellEntry.get())
        newInput.append(self.identSellEntry.get())
        newInput.append(self.priSellEntry.get())
        newInput.append(self.numSellEntry.get())
        newInput.append(self.whereSellEntry.get())
        return newInput

    def clearSellEntry(self):
        self.itemSellEntry.delete(0, END)
        self.identSellEntry.delete(0, END)
        self.priSellEntry.delete(0, END)
        self.numSellEntry.delete(0, END)
        self.whereSellEntry.delete(0, END)
        self.dateSellEntry.delete(0, END)

    def showSellInfo(self):
        val = messagebox.askyesno('警告', '保存该订单信息?')
        if val:
            messagebox.showinfo('提示', '订单信息保存成功!')
            order = self.getSellInput()
            self.clearSellEntry()
            self.updateTree(self.treeSell, order)
            self.upDateTempList(order, 1)
            self.upDateAllList()
            self.saveDate()

    def queryData(self):
        dateIndex = self.getQueryDateIndex()
        print('dateIndex')
        if not dateIndex:
            return
        for index in range(dateIndex[0],dateIndex[1]):
            date = self.dateList[index]
            for resName in self.allList[date]['statement']:
                resDict = self.allList[date]['statement'][resName]
                inLen = len(resDict['In'])
                outLen = len(resDict['Out'])
                for infoIndex in range(0,max(inLen,outLen)):
                    if infoIndex <= inLen-1 and infoIndex <= outLen-1:
                        order = (date,resName,'',resDict['In'][0],resDict['In'][1],resDict['In'][2], \
                                 resDict['Out'][0],resDict['Out'][1],resDict['Out'][2],)
                    elif infoIndex <= inLen-1 and infoIndex > outLen-1:
                        order = (date,resName,'',resDict['In'][0],resDict['In'][1],resDict['In'][2])
                    else:
                        order = (date, resName, '','','','', resDict['Out'][0], resDict['Out'][1], resDict['Out'][2])
                    print(order)
                    self.updateTree(self.queryIndex,order)

    def getQueryDateIndex(self):
        startDate = self.queryUpEntryFirst.get()
        endDate = self.queryUpEntrySecond.get()
        if endDate >= startDate:
            if not self.dateList:
                messagebox.showinfo('错误', '数据为空!')
                return[]
            if startDate>self.dateList[-1]:
                messagebox.showinfo('错误', '日期输入有误')
                return []
            tempDateList = self.dateList
            tempDateList.append(startDate)
            tempDateList.append(endDate)
            tempSortDateList = sorted(tempDateList)
            startIndex = tempSortDateList.index(startDate)
            endIndex = tempSortDateList.index(endDate)
            if startIndex == 0:
                if endIndex == 0:
                    return [0,0]
                else:
                    return [0,endIndex]
            else:
                return [startIndex-1,endIndex]
        else:
            messagebox.showinfo('错误', '日期输入有误')
            return []

    def updateTree(self, root, order):
        if root == self.treeBuy:
            root.insert('', self.buyIndex, text=self.buyIndex, values=order)
            self.buyIndex += 1
        elif root == self.treeSell:
            root.insert('', self.sellIndex, text=self.sellIndex, values=order)
            self.sellIndex += 1
        else:
            root.insert('', self.queryIndex, text=self.queryIndex, values=order)
            self.queryIndex += 1

    def getAllList(self):
        self.filePointer = open(self.filename, 'a+')
        self.filePointer.seek(0)
        dateKey = ''
        dateValue = ''
        for line in self.filePointer.readlines():
            if line[0] == '{':
                dateValue = eval(line.strip('\n'))
            elif line[0] !='\n':
                dateKey = line.strip('\n')
            if dateKey and dateValue:
                if dateKey not in self.dateList:
                    self.dateList.append(dateKey)
                    self.allList[dateKey] = dateValue
                else:
                    for resName in dateValue['statement']:
                        if resName not in self.allList[dateKey]['statement']:
                            self.allList[dateKey]['statement'][resName] = dateValue['statement'][resName]
                        else:
                            self.allList[dateKey]['statement'][resName]['In'].\
                                append(dateValue['statement'][resName]['In'])
                            self.allList[dateKey]['statement'][resName]['Out'].\
                                append(dateValue['statement'][resName]['Out'])
        #print(self.allList)

    def upDateAllList(self):
        if not self.tempList:
            pass
        for dateKey in self.tempList:
            if dateKey not in self.allList:
                self.allList[dateKey] = self.tempList[dateKey]
            else:
                for resName in self.temList[dateKey]['statement']:
                    if resName not in self.tempList[dateKey]['statement']:
                        self.allList[dateKey]['statement'][resName] = self.tempList[dateKey]['statement'][resName]

    def upDateTempList(self, newOrder, buyOrSell):
        self.tempList = {}
        dateKey = newOrder[0]
        resName = newOrder[1]
        if dateKey not in self.dateList:
            self.dateList.append(dateKey)
        if dateKey not in self.tempList:
            self.tempList[dateKey] = {'statement': {}, 'stock': {}}
        if resName in self.tempList[dateKey]['statement']:
            if buyOrSell:
                self.tempList[dateKey]['statement'][resName]['In'].append(order[3:])
            else:
                self.tempList[dateKey]['statement'][resName]['Out'].append(order[3:])
        else:
            self.tempList[dateKey]['statement'][resName]={'In':[],'Out':[]}
            if buyOrSell:
                self.tempList[dateKey]['statement'][resName]['In'].append(order[3:])
            else:
                self.tempList[dateKey]['statement'][resName]['Out'].append(order[3:])


    def saveDate(self):
        for date in self.tempList:
            self.filePointer.write(date+'\n')
            self.filePointer.write(str(self.tempList[date])+'\n')

    def start(self):
        self.setQueryFrm()
        self.setStartSubFrm()
        self.setBuySubFrm()
        self.setSellSubFrm()
        self.showStartFrm()
        self.getAllList()
        self.top.mainloop()


def main():
    jxc = JXC()
    jxc.start()


if __name__ == '__main__':
    main()

 

posted @ 2018-01-26 00:36  v_keys  阅读(157)  评论(0编辑  收藏  举报