def generate_pdf(self): """ генерация pdf. Ваш К.О. """ try: path = self.app.app.sets.save_pdf except: path = '' filename = 'Продажи за %s.pdf' % (norm_date(self.c_date)) f = tkFileDialog.asksaveasfilename(initialdir=path, initialfile=filename) if not f: return f = f.replace('\\', '/') self.app.app.sets.save_pdf = '/'.join(f.split('/')[:-1]) doc = pdf.Pdf(title='Продажи за %s' % (norm_date(self.c_date)), fname=f) doc.string('Доходы:') doc.table([('Время', 45), ('Отд', 35), ('Товар', 220), ('Сум.', 40), ('К-во', 30), ('Итого', 40), ('Продавец', 90)]) self.app.app.db.execute( 'select time,dep,article,sum,rate,name,art_id,edit from income where date=?', (self.c_date, )) income_all = 0 for x in self.app.app.db.fetchall(): out = list(x) if out[7] <> 0: out[1] = str(out[1]) + u' (≈)' if out[6] <> -1: out[1] = str(out[1]) + u' →' out.insert(5, x[3] * x[4]) income_all += x[3] * x[4] doc.table([(out[0], 45), (out[1], 35), (out[2], 220), (out[3], 40), (out[4], 30), (out[5], 40), (out[6], 90)], font=10) doc.enter() doc.string('Расходы:') outcome_all = 0 doc.table([('Время', 45), ('Причина', 220), ('Сум.', 40), ('Продавец', 90)]) self.app.app.db.execute( 'select time,article,sum,name,art_id,edit from outcome where date=?', (self.c_date, )) for x in self.app.app.db.fetchall(): out = list(x) if out[5] <> 0: out[1] = u'(≈) ' + out[1] doc.table([(out[0], 45), (out[1], 220), (out[2], 40), (out[3], 90)], font=10) outcome_all += out[2] doc.enter() doc.string('Всего доходов: %s' % (income_all)) doc.string('Всего расходов: %s' % (outcome_all)) doc.string('Остаток: %s' % (income_all - outcome_all)) doc.end() self.win.deiconify()
def generate_pdf(self): """ генерация pdf. Ваш К.О. """ try:path=self.app.app.sets.save_pdf except:path='' filename='Продажи за %s.pdf'%(norm_date(self.c_date)) f=tkFileDialog.asksaveasfilename(initialdir=path,initialfile=filename) if not f:return f=f.replace('\\','/') self.app.app.sets.save_pdf='/'.join(f.split('/')[:-1]) doc=pdf.Pdf(title='Продажи за %s'%(norm_date(self.c_date)),fname=f) doc.string('Доходы:') doc.table([('Время',45),('Отд',35),('Товар',220),('Сум.',40),('К-во',30),('Итого',40),('Продавец',90)]) self.app.app.db.execute('select time,dep,article,sum,rate,name,art_id,edit from income where date=?',(self.c_date,)) income_all=0 for x in self.app.app.db.fetchall(): out=list(x) if out[7]<>0: out[1]=str(out[1])+u' (≈)' if out[6]<>-1: out[1]=str(out[1])+u' →' out.insert(5,x[3]*x[4]) income_all+=x[3]*x[4] doc.table([(out[0],45),(out[1],35),(out[2],220),(out[3],40),(out[4],30),(out[5],40),(out[6],90)],font=10) doc.enter() doc.string('Расходы:') outcome_all=0 doc.table([('Время',45),('Причина',220),('Сум.',40),('Продавец',90)]) self.app.app.db.execute('select time,article,sum,name,art_id,edit from outcome where date=?',(self.c_date,)) for x in self.app.app.db.fetchall(): out=list(x) if out[5]<>0: out[1]=u'(≈) '+out[1] doc.table([(out[0],45),(out[1],220),(out[2],40),(out[3],90)],font=10) outcome_all+=out[2] doc.enter() doc.string('Всего доходов: %s'%(income_all)) doc.string('Всего расходов: %s'%(outcome_all)) doc.string('Остаток: %s'%(income_all-outcome_all)) doc.end() self.win.deiconify()
def callback(self, event=None): """ вызывается при изменении содержимого entry """ txt = '%%%s%%' % self.search.get().lower() self.lst.delete(0, END) if len(txt) < 3: self.lab_var.set('') return self.lab_var.set('Поиск....') self.win.update() self.app.app.app.db.execute( 'select date,time,dep,article,sum,rate,name,art_id,edit from income where myLower(article) like ?', (txt, )) k = 0 all_sum = 0 for x in self.app.app.app.db.fetchall(): x = list(x) x[0] = norm_date(x[0]) if x[8] <> 0: x[2] = str(x[2]) + ' (≈)' if x[7] <> -1: x[2] = str(x[2]) + ' →' all_sum += x[4] * x[5] self.lst.insert(END, x) k += 1 self.lab_var.set('Найдено %s совпадений, на сумму %s' % (k, all_sum))
def update_lists(self): """ наполняем таблицы """ self.current_income=[] self.current_outcome=[] self.lst.delete(0,END) self.app.app.db.execute('select time,dep,article,sum,rate,name,art_id,date,edit from income where date=?',(self.c_date,)) income_all=0 for x in self.app.app.db.fetchall(): out=list(x) if out[8]<>0: out[1]=str(out[1])+' (≈)' if out[6]<>-1: out[1]=str(out[1])+' →' out.insert(5,round(x[3]*x[4],2)) income_all+=x[3]*x[4] self.lst.insert(END,out) self.current_income.append(x) self.lst.see(END) outcome_all=0 self.lst2.delete(0,END) self.app.app.db.execute('select time,article,sum,name,art_id,date,edit from outcome where date=?',(self.c_date,)) for x in self.app.app.db.fetchall(): out=list(x) if out[6]<>0: out[1]=u'(≈) '+out[1] self.lst2.insert(END,out) self.current_outcome.append(x) outcome_all+=out[2] self.lst2.see(END) s='За дату: %s'%(norm_date(self.c_date)) self.d_label['text']=s
def __init__(self,app): """ класс с фреймом приходов товара """ self.app=app self.win=Frame(self.app.win,width=20,height=50) self.lst=MultiListbox(self.win, (('Дата', 8), ('Время', 5), ('Приход', 50),('Пользователь',10)),font=('normal',10),height=7,command=self.l_command) self.lst.pack(fill=BOTH,expand=1,padx=5,pady=5) self.lst2=MultiListbox(self.win, (('Отдел', 3),('Товар', 73), ('Количество', 5)),font=('normal',10),height=10) self.lst2.pack(fill=BOTH,expand=1,padx=5,pady=5) self.pdf_but=Button(self.win,text='В pdf',image=self.app.app.app.img['pdf'],compound='left',command=self.generate_pdf) self.pdf_but.pack(anchor=W) self.app.app.app.db.execute('select id,date,time,rate,user from in_art') rez=self.app.app.app.db.fetchall() self.sums={} self.ids={} self.naim={} self.user={} for x in rez: self.ids[x[0]]=[norm_date(x[1]),x[2],x[4]] self.sums[x[0]]=self.sums.setdefault(x[0],0)+x[3] self.naim[x[0]]=self.naim.setdefault(x[0],0)+1 k=self.ids.keys() k.sort() self.c_id=k for x in k: self.lst.insert(END,[self.ids[x][0],self.ids[x][1],'Наименований товаров %s шт., общее количество %s шт.'%(self.naim[x],self.sums[x]),self.ids[x][2]]) self.lst.see(END)
def generate_csv(self): """ генерация csv """ try:path=self.app.app.sets.save_pdf except:path='' filename='Остатки по отделу %s на %s.csv'%(self.cur_dep+1,norm_date(date_now())) f=tkFileDialog.asksaveasfilename(initialdir=path,initialfile=filename) if not f:return f=f.replace('\\','/') self.app.app.sets.save_pdf='/'.join(f.split('/')[:-1]) doc=csv.writer(open(f,'w'),delimiter=';',lineterminator='\n',quoting=csv.QUOTE_ALL) doc.writerow([u'Товар'.encode('cp1251'),u'Остаток'.encode('cp1251'),u'Стоимость'.encode('cp1251')]) r=self.rb_var.get() rate=self.rate_ent.get() self.app.app.db.execute('select name from dep where id=?',(self.cur_dep+1,)) dep_name=self.app.app.db.fetchall()[0][0] if r==0: self.app.app.db.execute('select id,rate,sum,type from article where dep=?',(self.cur_dep+1,)) else: try:rate=int(rate) except:return self.app.app.db.execute('select id,rate,sum,type from article where dep=? and rate<?',(self.cur_dep+1,rate)) rez1=self.app.app.db.fetchall() all_rate=0 all_sum=0 for x in rez1: t=[] flag=True self.app.app.db.execute('select name,edit,sum,parent from article where id=?',(x[0],)) s=self.app.app.db.fetchall()[0] par=s[3] t.append(s[0]) if par==-1:flag=0 while flag: self.app.app.db.execute('select name,parent from article where id=?',(par,)) rez=self.app.app.db.fetchall()[0] if rez[1]==-1: t.append(rez[0]) flag=False else: t.append(rez[0]) par=rez[1] cat_lst=' > '.join(t[::-1]) if x[3]=='item': doc.writerow([cat_lst.encode('cp1251'),x[1],x[2]]) all_rate+=x[1] all_sum+=x[1]*x[2] self.lab_var.set('Наименований: %s, количество: %s, на сумму %s'%(len(rez1),all_rate,all_sum)) self.win.deiconify()
def del_outcome(self, date, tm, art, sum, c_user, user, pr): """Запись об уделании расхода """ mess = u'Пользователь %s удалил расход от %s %s\nРасход: %s\nНа сумму: %s\nБыл сделан пользователем %s\nПричина: %s' % ( user, norm_date(date).decode('utf-8'), tm, art, sum, c_user, pr) self.db.execute( 'insert into edit_log values (?,?,?,?,?,?)', (date_now(), time_now(), u'Удален расход', mess, date, tm)) self.con.commit()
def run(self): self.win=Toplevel(self.app.app.win) self.win.title(name) x,y=800,450 pos=self.win.wm_maxsize()[0]/2-x/2,self.win.wm_maxsize()[1]/2-y/2 self.win.geometry('%sx%s+%s+%s'%(x,y,pos[0],pos[1]-25)) self.win.maxsize(width=x,height=y) self.win.minsize(width=x,height=y) if sys.platform=='win32':self.win.iconbitmap('app/images/icon.ico') year,month = time.localtime()[0:2] self.date_t=StringVar() self.date_t.set(date_now()) self.c_date=date_now() self.cal=TkCalendar(self.win,year, month, self.date_t,command=self.calend_handler) self.cal.grid(row=0,column=0,padx=5,pady=10,sticky=N) self.content_frame=Frame(self.win) self.content_frame.grid(row=0,column=1,rowspan=3,sticky=N) self.tool_frame=Labelframe(self.win,text='Итог') self.tool_frame.grid(row=1,column=0,sticky=N+W) Label(self.content_frame,text='Приход:',font=('normal',12)).pack(fill=BOTH) self.lst=MultiListbox(self.content_frame, (('Время', 8), ('Отдел', 5), ('Товар', 32),('Сумма',5),('Кол.во',1),('Итог',5),('Продавец',12)),font=('normal',10),height=15) self.lst.pack(fill=BOTH,expand=1) Label(self.content_frame,text='Расход:',font=('normal',12)).pack(fill=BOTH) self.lst2=MultiListbox(self.content_frame, (('Время', 8), ('Причина', 35),('Сумма',5),('Продавец',12)),font=('normal',10),height=6) self.lst2.pack(fill=BOTH,expand=1) s='За дату: %s'%(norm_date(date_now())) self.d_label=Label(self.tool_frame,text=s,font=('bold',12)) self.d_label.grid(row=0,columnspan=2,sticky=N+W) s='Доход: 0' self.in_label=Label(self.tool_frame,text=s,font=('bold',12)) self.in_label.grid(row=1,columnspan=2,sticky=N+W) s='Расход: 0' self.out_label=Label(self.tool_frame,text=s,font=('bold',12)) self.out_label.grid(row=2,columnspan=2,sticky=N+W) s='Остаток: 0' self.all_label=Label(self.tool_frame,text=s,font=('bold',12)) self.all_label.grid(row=3,columnspan=2,sticky=N+W) self.scr1=Scrollbar(self.tool_frame,orient=VERTICAL) self.scr1.grid(row=4,column=1,sticky=N+S,pady=5) self.list_1=Listbox(self.tool_frame,width=27,height=5, font=("normal",9), yscrollcommand=self.scr1.set) self.list_1.grid(row=4,column=0,pady=5) self.scr1['command']=self.list_1.yview self.pdf_but=Button(self.win,text='В pdf',image=self.app.app.img['pdf'],compound='left',command=self.generate_pdf) self.pdf_but.grid(row=2,column=0,sticky=N) self.update_lists()
def del_income(self, date, tm, dep, art, pr, summa, rate, user): """Запись об уделании продажи """ mess = u'Пользователь %s удалил продажу от %s %s\nОтдела #%s\nТовар: %s\nСумма: %s, количество: %s\nПо причине: %s' % ( user, norm_date(date).decode('utf-8'), tm, dep, art, summa, rate, pr) self.db.execute( 'insert into edit_log values (?,?,?,?,?,?)', (date_now(), time_now(), u'Удалена продажа', mess, date, tm)) self.con.commit()
def update_lists(self): """ обновляем списки """ self.all_data=[] self.lst.delete(0,END) if self.c_date=='Все': self.app.app.db.execute('select date,time,title,event from edit_log') else:self.app.app.db.execute('select date,time,title,event from edit_log where date=?',(self.c_date,)) for x in self.app.app.db.fetchall(): x=list(x) x[0]=norm_date(x[0]) self.lst.insert(END,x) self.all_data.append(x) self.lst.see(END) if self.c_date=='Все': self.d_label['text']='За дату: ВСЕ' else: s='За дату: %s'%(norm_date(self.c_date)) self.d_label['text']=s
def update_lists(self): """ заполняем таблицы """ self.lst.delete(0,END) self.app.app.db.execute('select time,dep,article,sum,rate,name,art_id,edit from income where date=?',(self.c_date,)) income_all=0 for x in self.app.app.db.fetchall(): out=list(x) if out[7]<>0: out[1]=str(out[1])+' (≈)' if out[6]<>-1: out[1]=str(out[1])+' →' out.insert(5,round(x[3]*x[4],2)) income_all+=x[3]*x[4] self.lst.insert(END,out) self.lst.see(END) outcome_all=0 self.lst2.delete(0,END) self.app.app.db.execute('select time,article,sum,name,art_id,edit from outcome where date=?',(self.c_date,)) for x in self.app.app.db.fetchall(): out=list(x) if out[5]<>0: out[1]=u'(≈) '+out[1] self.lst2.insert(END,out) outcome_all+=out[2] self.lst2.see(END) self.in_label['text']='Доход: %s'%(income_all) self.out_label['text']='Расход: %s'%(outcome_all) self.all_label['text']='Остаток: %s'%(income_all-outcome_all) s='За дату: %s'%(norm_date(self.c_date)) self.d_label['text']=s deps={} deps_sum={} self.app.app.db.execute('select name from dep') self.deps=[] for n,name in enumerate(self.app.app.db.fetchall()): if name: deps_sum[n+1]=0 self.deps.append('%s'%(name[0])) self.app.app.db.execute('select dep,sum,rate from income where date=?',(self.c_date,)) out=self.app.app.db.fetchall() in_all=0 for x in out: in_all+=float(x[1])*float(x[2]) deps_sum[x[0]]+=float(x[1])*float(x[2]) self.list_1.delete(0,END) for x in deps_sum: if deps_sum[x]: self.list_1.insert(END,str(x)+' '+self.deps[x-1]+u'→ '+str(deps_sum[x]))
def __init__(self,app): """ список списаний """ self.app=app self.win=Frame(self.app.win) self.lst=MultiListbox(self.win, (('Дата', 11), ('Время', 8), ('Товар', 45),('Причина',15),('К-во',3),('Кто',10)),font=('normal',9),height=17) self.lst.pack(fill=BOTH,expand=1,padx=5,pady=5) self.app.app.app.db.execute('select * from out_art') for x in self.app.app.app.db.fetchall(): x=list(x) x[0]=norm_date(x[0]) self.lst.insert(END,x) self.lst.see(END)
def generate_pdf(self): """ генерация pdf c выбранным приходом """ if not self.lst.curselection(): return sel = int(self.lst.curselection()[0]) id = self.c_id[sel] self.app.app.app.db.execute('select date,time from in_art where id=?', (id, )) rez = self.app.app.app.db.fetchall()[0] try: path = self.app.app.app.sets.save_pdf except: path = '' print rez filename = ('Приход товара за %s %s.pdf' % (norm_date(rez[0]), str(rez[1]))).replace(':', '-') f = tkFileDialog.asksaveasfilename(initialdir=path, initialfile=filename) if not f: return f = f.replace('\\', '/') self.app.app.app.sets.save_pdf = '/'.join(f.split('/')[:-1]) doc = pdf.Pdf(title='Приход товара', fname=f) doc.string('Приход товара за %s %s' % (norm_date(rez[0]), str(rez[1]))) self.app.app.app.db.execute( 'select dep,name,rate from in_art where id=?', (id, )) doc.table([('Отдел', 45), ('Товар', 350), ('Кол.во', 50)]) n = 0 s = 0 for x in self.app.app.app.db.fetchall(): n += 1 doc.table([(x[0], 45), (x[1], 350), (x[2], 50)], font=10) s += x[2] doc.enter() doc.string('Наименований: %s' % (n)) doc.string('Количество: %s' % (s)) doc.end() self.app.win.deiconify()
def run(self): self.log=Log(self.app.app) self.win=Toplevel(self.app.app.win) self.win.title(name) self.win.protocol("WM_DELETE_WINDOW", self.exit) x,y=800,450 pos=self.win.wm_maxsize()[0]/2-x/2,self.win.wm_maxsize()[1]/2-y/2 self.win.geometry('%sx%s+%s+%s'%(x,y,pos[0],pos[1]-25)) self.win.maxsize(width=x,height=y) self.win.minsize(width=x,height=y) if sys.platform=='win32':self.win.iconbitmap('app/images/icon.ico') year,month = time.localtime()[0:2] self.date_t=StringVar() self.date_t.set(date_now()) self.c_date=date_now() self.cal=TkCalendar(self.win,year, month, self.date_t,command=self.calend_handler) self.cal.grid(row=0,column=0,padx=5,pady=10,sticky=N) self.content_frame=Frame(self.win) self.content_frame.grid(row=0,column=1,rowspan=3,sticky=N) self.tool_frame=Frame(self.win) self.tool_frame.grid(row=1,column=0,sticky=N+W) Label(self.content_frame,text='Приход:',font=('normal',12)).pack(fill=BOTH) self.lst=MultiListbox(self.content_frame, (('Время', 8), ('Отдел', 5), ('Товар', 40),('Сумма',5),('Кол.во',1),('Итог',5),('Продавец',12)),font=('normal',10),height=6,command=self.lst1select) self.lst.pack(fill=BOTH,expand=1) Label(self.content_frame,text='Расход:',font=('normal',12)).pack(fill=BOTH) self.lst2=MultiListbox(self.content_frame, (('Время', 8), ('Причина', 35),('Сумма',5),('Продавец',12)),font=('normal',10),height=6,command=self.lst2select) self.lst2.pack(fill=BOTH,expand=1) s='За дату: %s'%(norm_date(date_now())) self.d_label=Label(self.tool_frame,text=s,font=('bold',12)) self.d_label.grid(row=0,columnspan=2,sticky=N+W) self.edit_frame_parrent=Labelframe(self.content_frame,text='Редактировать', width=50,height=100) self.edit_frame_parrent.pack(fill=BOTH,expand=1) self.delete_frame_parrent=Labelframe(self.content_frame,text='Удалить', width=50,height=50) self.delete_frame_parrent.pack(fill=BOTH,expand=1) self.edit_frame=Frame(self.edit_frame_parrent,height=63) self.edit_frame.pack() self.delete_frame=Frame(self.delete_frame_parrent,height=46) self.delete_frame.pack() self.update_lists()
def update_lists(self): """ обновляем списки """ self.all_data = [] self.lst.delete(0, END) if self.c_date == 'Все': self.app.app.db.execute( 'select date,time,title,event from edit_log') else: self.app.app.db.execute( 'select date,time,title,event from edit_log where date=?', (self.c_date, )) for x in self.app.app.db.fetchall(): x = list(x) x[0] = norm_date(x[0]) self.lst.insert(END, x) self.all_data.append(x) self.lst.see(END) if self.c_date == 'Все': self.d_label['text'] = 'За дату: ВСЕ' else: s = 'За дату: %s' % (norm_date(self.c_date)) self.d_label['text'] = s
def edit_outcome(self, date, tm, old, new, user, c_user): """Запись о редактировании расхода """ ms = [] if old[0] <> new[0]: ms.append(u'Причина с %s на %s' % (old[0], new[0])) if old[1] <> new[1]: ms.append(u'Сумма с %s на %s' % (old[1], new[1])) if not ms: return mess = u'Пользователь %s изменил расход от %s %s\nИзменения:\n%s\nБыл сделан пользователем %s' % ( user, norm_date(date).decode('utf-8'), tm, '\n'.join(ms), c_user) self.db.execute( 'insert into edit_log values (?,?,?,?,?,?)', (date_now(), time_now(), u'Отредактирован расход', mess, date, tm)) self.con.commit()
def generate_pdf(self): """ генерация pdf c выбранным приходом """ if not self.lst.curselection():return sel=int(self.lst.curselection()[0]) id=self.c_id[sel] self.app.app.app.db.execute('select date,time from in_art where id=?',(id,)) rez=self.app.app.app.db.fetchall()[0] try:path=self.app.app.app.sets.save_pdf except:path='' print rez filename=('Приход товара за %s %s.pdf'%(norm_date(rez[0]),str(rez[1]))).replace(':','-') f=tkFileDialog.asksaveasfilename(initialdir=path,initialfile=filename) if not f:return f=f.replace('\\','/') self.app.app.app.sets.save_pdf='/'.join(f.split('/')[:-1]) doc=pdf.Pdf(title='Приход товара',fname=f) doc.string('Приход товара за %s %s'%(norm_date(rez[0]),str(rez[1]))) self.app.app.app.db.execute('select dep,name,rate from in_art where id=?',(id,)) doc.table([('Отдел',45),('Товар',350),('Кол.во',50)]) n=0 s=0 for x in self.app.app.app.db.fetchall(): n+=1 doc.table([(x[0],45),(x[1],350),(x[2],50)],font=10) s+=x[2] doc.enter() doc.string('Наименований: %s'%(n)) doc.string('Количество: %s'%(s)) doc.end() self.app.win.deiconify()
def __init__(self, app): """ класс с фреймом приходов товара """ self.app = app self.win = Frame(self.app.win, width=20, height=50) self.lst = MultiListbox(self.win, (('Дата', 8), ('Время', 5), ('Приход', 50), ('Пользователь', 10)), font=('normal', 10), height=7, command=self.l_command) self.lst.pack(fill=BOTH, expand=1, padx=5, pady=5) self.lst2 = MultiListbox(self.win, (('Отдел', 3), ('Товар', 73), ('Количество', 5)), font=('normal', 10), height=10) self.lst2.pack(fill=BOTH, expand=1, padx=5, pady=5) self.pdf_but = Button(self.win, text='В pdf', image=self.app.app.app.img['pdf'], compound='left', command=self.generate_pdf) self.pdf_but.pack(anchor=W) self.app.app.app.db.execute( 'select id,date,time,rate,user from in_art') rez = self.app.app.app.db.fetchall() self.sums = {} self.ids = {} self.naim = {} self.user = {} for x in rez: self.ids[x[0]] = [norm_date(x[1]), x[2], x[4]] self.sums[x[0]] = self.sums.setdefault(x[0], 0) + x[3] self.naim[x[0]] = self.naim.setdefault(x[0], 0) + 1 k = self.ids.keys() k.sort() self.c_id = k for x in k: self.lst.insert(END, [ self.ids[x][0], self.ids[x][1], 'Наименований товаров %s шт., общее количество %s шт.' % (self.naim[x], self.sums[x]), self.ids[x][2] ]) self.lst.see(END)
def __init__(self, app): """ список списаний """ self.app = app self.win = Frame(self.app.win) self.lst = MultiListbox(self.win, (('Дата', 11), ('Время', 8), ('Товар', 45), ('Причина', 15), ('К-во', 3), ('Кто', 10)), font=('normal', 9), height=17) self.lst.pack(fill=BOTH, expand=1, padx=5, pady=5) self.app.app.app.db.execute('select * from out_art') for x in self.app.app.app.db.fetchall(): x = list(x) x[0] = norm_date(x[0]) self.lst.insert(END, x) self.lst.see(END)
def edit_income(self, date, tm, old, new, user, c_user): """Запись о редактировании продажи """ ms = [] if old[0] <> new[0]: ms.append(u'Отдел с %s на %s' % (old[0], new[0])) if old[1] <> new[1]: ms.append(u'Товар с %s на %s' % (old[1], new[1])) if old[2] <> new[2]: ms.append(u'Количество с %s на %s' % (old[2], new[2])) if old[3] <> new[3]: ms.append(u'Сумма с %s на %s' % (old[3], new[3])) if not ms: return mess = u'Пользователь %s изменил продажу от %s %s\nИзменения:\n%s\nБыла сделана пользователем %s' % ( user, norm_date(date).decode('utf-8'), tm, '\n'.join(ms), c_user) self.db.execute('insert into edit_log values (?,?,?,?,?,?)', (date_now(), time_now(), u'Отредактирована продажа', mess, date, tm)) self.con.commit()
def callback(self,event=None): """ Вызывается при смене содержимого entry """ txt='%%%s%%'%self.search.get().lower() self.lst.delete(0,END) if len(txt)<3: self.lab_var.set('') return self.lab_var.set('Поиск....') self.win.update() self.app.app.app.db.execute('select date,time,article,sum,name,edit from outcome where myLower(article) like ?',(txt,)) k=0 all_sum=0 for x in self.app.app.app.db.fetchall(): x=list(x) x[0]=norm_date(x[0]) if x[5]<>0: x[2]=u'(≈) '+x[2] self.lst.insert(END,x) all_sum+=x[3] k+=1 self.lab_var.set('Найдено %s совпадений, на сумму %s'%(k,all_sum))
def update_lists(self): """ наполняем таблицы """ self.current_income = [] self.current_outcome = [] self.lst.delete(0, END) self.app.app.db.execute( 'select time,dep,article,sum,rate,name,art_id,date,edit from income where date=?', (self.c_date, )) income_all = 0 for x in self.app.app.db.fetchall(): out = list(x) if out[8] <> 0: out[1] = str(out[1]) + ' (≈)' if out[6] <> -1: out[1] = str(out[1]) + ' →' out.insert(5, round(x[3] * x[4], 2)) income_all += x[3] * x[4] self.lst.insert(END, out) self.current_income.append(x) self.lst.see(END) outcome_all = 0 self.lst2.delete(0, END) self.app.app.db.execute( 'select time,article,sum,name,art_id,date,edit from outcome where date=?', (self.c_date, )) for x in self.app.app.db.fetchall(): out = list(x) if out[6] <> 0: out[1] = u'(≈) ' + out[1] self.lst2.insert(END, out) self.current_outcome.append(x) outcome_all += out[2] self.lst2.see(END) s = 'За дату: %s' % (norm_date(self.c_date)) self.d_label['text'] = s
def edit_outcome(self,date,tm,old,new,user,c_user): """Запись о редактировании расхода """ ms=[] if old[0]<>new[0]: ms.append(u'Причина с %s на %s'%(old[0],new[0])) if old[1]<>new[1]: ms.append(u'Сумма с %s на %s'%(old[1],new[1])) if not ms:return mess=u'Пользователь %s изменил расход от %s %s\nИзменения:\n%s\nБыл сделан пользователем %s'%(user,norm_date(date).decode('utf-8'),tm,'\n'.join(ms),c_user) self.db.execute('insert into edit_log values (?,?,?,?,?,?)',(date_now(),time_now(),u'Отредактирован расход',mess,date,tm)) self.con.commit()
def update_label(self): self.lab_var.set('Показать с %s по %s' % (norm_date(self.c_date), norm_date(self.c_date2)))
def edit_income(self,date,tm,old,new,user,c_user): """Запись о редактировании продажи """ ms=[] if old[0]<>new[0]: ms.append(u'Отдел с %s на %s'%(old[0],new[0])) if old[1]<>new[1]: ms.append(u'Товар с %s на %s'%(old[1],new[1])) if old[2]<>new[2]: ms.append(u'Количество с %s на %s'%(old[2],new[2])) if old[3]<>new[3]: ms.append(u'Сумма с %s на %s'%(old[3],new[3])) if not ms:return mess=u'Пользователь %s изменил продажу от %s %s\nИзменения:\n%s\nБыла сделана пользователем %s'%(user,norm_date(date).decode('utf-8'),tm,'\n'.join(ms),c_user) self.db.execute('insert into edit_log values (?,?,?,?,?,?)',(date_now(),time_now(),u'Отредактирована продажа',mess,date,tm)) self.con.commit()
def generate_pdf(self): """ генерация pdf """ try:path=self.app.app.sets.save_pdf except:path='' filename='Остатки по отделу %s на %s.pdf'%(self.cur_dep+1,norm_date(date_now())) f=tkFileDialog.asksaveasfilename(initialdir=path,initialfile=filename) if not f:return f=f.replace('\\','/') self.app.app.sets.save_pdf='/'.join(f.split('/')[:-1]) doc=pdf.Pdf(title='Остатки товара',fname=f) r=self.rb_var.get() rate=self.rate_ent.get() self.app.app.db.execute('select name from dep where id=?',(self.cur_dep+1,)) dep_name=self.app.app.db.fetchall()[0][0] if r==0: self.app.app.db.execute('select id,rate,sum,type from article where dep=?',(self.cur_dep+1,)) doc.string(u'Все остатки по отделу %s %s'%(self.cur_dep+1,dep_name)) else: try:rate=int(rate) except:return self.app.app.db.execute('select id,rate,sum,type from article where dep=? and rate<?',(self.cur_dep+1,rate)) doc.string(u'Остатки по отделу %s %s, количество товара меньше %s'%(self.cur_dep+1,dep_name,rate)) rez1=self.app.app.db.fetchall() all_rate=0 all_sum=0 doc.table([('Товар',300),('Остаток',80),('Стоимость',80)]) for x in rez1: t=[] flag=True self.app.app.db.execute('select name,edit,sum,parent from article where id=?',(x[0],)) s=self.app.app.db.fetchall()[0] par=s[3] t.append(s[0]) if par==-1:flag=0 while flag: self.app.app.db.execute('select name,parent from article where id=?',(par,)) rez=self.app.app.db.fetchall()[0] if rez[1]==-1: t.append(rez[0]) flag=False else: t.append(rez[0]) par=rez[1] cat_lst=' > '.join(t[::-1]) if x[3]=='item': doc.table([(cat_lst,300),(x[1],80),(x[2],80)],font=10) all_rate+=x[1] all_sum+=x[1]*x[2] self.lab_var.set('Наименований: %s, количество: %s, на сумму %s'%(len(rez1),all_rate,all_sum)) doc.enter() doc.string('Всего наименований: %s'%(len(rez1))) doc.string('Всего количество: %s, на сумму %s'%(all_rate,all_sum)) doc.end() self.win.deiconify()
def del_outcome(self,date,tm,art,sum,c_user,user,pr): """Запись об уделании расхода """ mess=u'Пользователь %s удалил расход от %s %s\nРасход: %s\nНа сумму: %s\nБыл сделан пользователем %s\nПричина: %s'%(user,norm_date(date).decode('utf-8'),tm,art,sum,c_user,pr) self.db.execute('insert into edit_log values (?,?,?,?,?,?)',(date_now(),time_now(),u'Удален расход',mess,date,tm)) self.con.commit()
def del_income(self,date,tm,dep,art,pr,summa,rate,user): """Запись об уделании продажи """ mess=u'Пользователь %s удалил продажу от %s %s\nОтдела #%s\nТовар: %s\nСумма: %s, количество: %s\nПо причине: %s'%(user,norm_date(date).decode('utf-8'),tm,dep,art,summa,rate,pr) self.db.execute('insert into edit_log values (?,?,?,?,?,?)',(date_now(),time_now(),u'Удалена продажа',mess,date,tm)) self.con.commit()
def generate_pdf(self): """ генерация pdf """ try: path = self.app.app.sets.save_pdf except: path = '' filename = 'Остатки по отделу %s на %s.pdf' % (self.cur_dep + 1, norm_date(date_now())) f = tkFileDialog.asksaveasfilename(initialdir=path, initialfile=filename) if not f: return f = f.replace('\\', '/') self.app.app.sets.save_pdf = '/'.join(f.split('/')[:-1]) doc = pdf.Pdf(title='Остатки товара', fname=f) r = self.rb_var.get() rate = self.rate_ent.get() self.app.app.db.execute('select name from dep where id=?', (self.cur_dep + 1, )) dep_name = self.app.app.db.fetchall()[0][0] if r == 0: self.app.app.db.execute( 'select id,rate,sum,type from article where dep=?', (self.cur_dep + 1, )) doc.string(u'Все остатки по отделу %s %s' % (self.cur_dep + 1, dep_name)) else: try: rate = int(rate) except: return self.app.app.db.execute( 'select id,rate,sum,type from article where dep=? and rate<?', (self.cur_dep + 1, rate)) doc.string( u'Остатки по отделу %s %s, количество товара меньше %s' % (self.cur_dep + 1, dep_name, rate)) rez1 = self.app.app.db.fetchall() all_rate = 0 all_sum = 0 doc.table([('Товар', 300), ('Остаток', 80), ('Стоимость', 80)]) for x in rez1: t = [] flag = True self.app.app.db.execute( 'select name,edit,sum,parent from article where id=?', (x[0], )) s = self.app.app.db.fetchall()[0] par = s[3] t.append(s[0]) if par == -1: flag = 0 while flag: self.app.app.db.execute( 'select name,parent from article where id=?', (par, )) rez = self.app.app.db.fetchall()[0] if rez[1] == -1: t.append(rez[0]) flag = False else: t.append(rez[0]) par = rez[1] cat_lst = ' > '.join(t[::-1]) if x[3] == 'item': doc.table([(cat_lst, 300), (x[1], 80), (x[2], 80)], font=10) all_rate += x[1] all_sum += x[1] * x[2] self.lab_var.set('Наименований: %s, количество: %s, на сумму %s' % (len(rez1), all_rate, all_sum)) doc.enter() doc.string('Всего наименований: %s' % (len(rez1))) doc.string('Всего количество: %s, на сумму %s' % (all_rate, all_sum)) doc.end() self.win.deiconify()
def generate_csv(self): """ генерация csv """ try: path = self.app.app.sets.save_pdf except: path = '' filename = 'Остатки по отделу %s на %s.csv' % (self.cur_dep + 1, norm_date(date_now())) f = tkFileDialog.asksaveasfilename(initialdir=path, initialfile=filename) if not f: return f = f.replace('\\', '/') self.app.app.sets.save_pdf = '/'.join(f.split('/')[:-1]) doc = csv.writer(open(f, 'w'), delimiter=';', lineterminator='\n', quoting=csv.QUOTE_ALL) doc.writerow([ u'Товар'.encode('cp1251'), u'Остаток'.encode('cp1251'), u'Стоимость'.encode('cp1251') ]) r = self.rb_var.get() rate = self.rate_ent.get() self.app.app.db.execute('select name from dep where id=?', (self.cur_dep + 1, )) dep_name = self.app.app.db.fetchall()[0][0] if r == 0: self.app.app.db.execute( 'select id,rate,sum,type from article where dep=?', (self.cur_dep + 1, )) else: try: rate = int(rate) except: return self.app.app.db.execute( 'select id,rate,sum,type from article where dep=? and rate<?', (self.cur_dep + 1, rate)) rez1 = self.app.app.db.fetchall() all_rate = 0 all_sum = 0 for x in rez1: t = [] flag = True self.app.app.db.execute( 'select name,edit,sum,parent from article where id=?', (x[0], )) s = self.app.app.db.fetchall()[0] par = s[3] t.append(s[0]) if par == -1: flag = 0 while flag: self.app.app.db.execute( 'select name,parent from article where id=?', (par, )) rez = self.app.app.db.fetchall()[0] if rez[1] == -1: t.append(rez[0]) flag = False else: t.append(rez[0]) par = rez[1] cat_lst = ' > '.join(t[::-1]) if x[3] == 'item': doc.writerow([cat_lst.encode('cp1251'), x[1], x[2]]) all_rate += x[1] all_sum += x[1] * x[2] self.lab_var.set('Наименований: %s, количество: %s, на сумму %s' % (len(rez1), all_rate, all_sum)) self.win.deiconify()
def update_label(self): self.lab_var.set("Показать с %s по %s" % (norm_date(self.c_date), norm_date(self.c_date2)))
def run(self): self.win = Toplevel(self.app.app.win) self.win.title(name) x, y = 800, 450 pos = self.win.wm_maxsize()[0] / 2 - x / 2, self.win.wm_maxsize( )[1] / 2 - y / 2 self.win.geometry('%sx%s+%s+%s' % (x, y, pos[0], pos[1] - 25)) self.win.maxsize(width=x, height=y) self.win.minsize(width=x, height=y) if sys.platform == 'win32': self.win.iconbitmap('app/images/icon.ico') year, month = time.localtime()[0:2] self.date_t = StringVar() self.date_t.set(date_now()) self.c_date = date_now() self.cal = TkCalendar(self.win, year, month, self.date_t, command=self.calend_handler) self.cal.grid(row=0, column=0, padx=5, pady=10, sticky=N) self.content_frame = Frame(self.win) self.content_frame.grid(row=0, column=1, rowspan=3, sticky=N) self.tool_frame = Labelframe(self.win, text='Итог') self.tool_frame.grid(row=1, column=0, sticky=N + W) Label(self.content_frame, text='Приход:', font=('normal', 12)).pack(fill=BOTH) self.lst = MultiListbox(self.content_frame, (('Время', 8), ('Отдел', 5), ('Товар', 32), ('Сумма', 5), ('Кол.во', 1), ('Итог', 5), ('Продавец', 12)), font=('normal', 10), height=15) self.lst.pack(fill=BOTH, expand=1) Label(self.content_frame, text='Расход:', font=('normal', 12)).pack(fill=BOTH) self.lst2 = MultiListbox(self.content_frame, (('Время', 8), ('Причина', 35), ('Сумма', 5), ('Продавец', 12)), font=('normal', 10), height=6) self.lst2.pack(fill=BOTH, expand=1) s = 'За дату: %s' % (norm_date(date_now())) self.d_label = Label(self.tool_frame, text=s, font=('bold', 12)) self.d_label.grid(row=0, columnspan=2, sticky=N + W) s = 'Доход: 0' self.in_label = Label(self.tool_frame, text=s, font=('bold', 12)) self.in_label.grid(row=1, columnspan=2, sticky=N + W) s = 'Расход: 0' self.out_label = Label(self.tool_frame, text=s, font=('bold', 12)) self.out_label.grid(row=2, columnspan=2, sticky=N + W) s = 'Остаток: 0' self.all_label = Label(self.tool_frame, text=s, font=('bold', 12)) self.all_label.grid(row=3, columnspan=2, sticky=N + W) self.scr1 = Scrollbar(self.tool_frame, orient=VERTICAL) self.scr1.grid(row=4, column=1, sticky=N + S, pady=5) self.list_1 = Listbox(self.tool_frame, width=27, height=5, font=("normal", 9), yscrollcommand=self.scr1.set) self.list_1.grid(row=4, column=0, pady=5) self.scr1['command'] = self.list_1.yview self.pdf_but = Button(self.win, text='В pdf', image=self.app.app.img['pdf'], compound='left', command=self.generate_pdf) self.pdf_but.grid(row=2, column=0, sticky=N) self.update_lists()
def update_lists(self): """ заполняем таблицы """ self.lst.delete(0, END) self.app.app.db.execute( 'select time,dep,article,sum,rate,name,art_id,edit from income where date=?', (self.c_date, )) income_all = 0 for x in self.app.app.db.fetchall(): out = list(x) if out[7] <> 0: out[1] = str(out[1]) + ' (≈)' if out[6] <> -1: out[1] = str(out[1]) + ' →' out.insert(5, round(x[3] * x[4], 2)) income_all += x[3] * x[4] self.lst.insert(END, out) self.lst.see(END) outcome_all = 0 self.lst2.delete(0, END) self.app.app.db.execute( 'select time,article,sum,name,art_id,edit from outcome where date=?', (self.c_date, )) for x in self.app.app.db.fetchall(): out = list(x) if out[5] <> 0: out[1] = u'(≈) ' + out[1] self.lst2.insert(END, out) outcome_all += out[2] self.lst2.see(END) self.in_label['text'] = 'Доход: %s' % (income_all) self.out_label['text'] = 'Расход: %s' % (outcome_all) self.all_label['text'] = 'Остаток: %s' % (income_all - outcome_all) s = 'За дату: %s' % (norm_date(self.c_date)) self.d_label['text'] = s deps = {} deps_sum = {} self.app.app.db.execute('select name from dep') self.deps = [] for n, name in enumerate(self.app.app.db.fetchall()): if name: deps_sum[n + 1] = 0 self.deps.append('%s' % (name[0])) self.app.app.db.execute('select dep,sum,rate from income where date=?', (self.c_date, )) out = self.app.app.db.fetchall() in_all = 0 for x in out: in_all += float(x[1]) * float(x[2]) deps_sum[x[0]] += float(x[1]) * float(x[2]) self.list_1.delete(0, END) for x in deps_sum: if deps_sum[x]: self.list_1.insert( END, str(x) + ' ' + self.deps[x - 1] + u'→ ' + str(deps_sum[x]))
def run(self): self.log = Log(self.app.app) self.win = Toplevel(self.app.app.win) self.win.title(name) self.win.protocol("WM_DELETE_WINDOW", self.exit) x, y = 800, 450 pos = self.win.wm_maxsize()[0] / 2 - x / 2, self.win.wm_maxsize( )[1] / 2 - y / 2 self.win.geometry('%sx%s+%s+%s' % (x, y, pos[0], pos[1] - 25)) self.win.maxsize(width=x, height=y) self.win.minsize(width=x, height=y) if sys.platform == 'win32': self.win.iconbitmap('app/images/icon.ico') year, month = time.localtime()[0:2] self.date_t = StringVar() self.date_t.set(date_now()) self.c_date = date_now() self.cal = TkCalendar(self.win, year, month, self.date_t, command=self.calend_handler) self.cal.grid(row=0, column=0, padx=5, pady=10, sticky=N) self.content_frame = Frame(self.win) self.content_frame.grid(row=0, column=1, rowspan=3, sticky=N) self.tool_frame = Frame(self.win) self.tool_frame.grid(row=1, column=0, sticky=N + W) Label(self.content_frame, text='Приход:', font=('normal', 12)).pack(fill=BOTH) self.lst = MultiListbox(self.content_frame, (('Время', 8), ('Отдел', 5), ('Товар', 40), ('Сумма', 5), ('Кол.во', 1), ('Итог', 5), ('Продавец', 12)), font=('normal', 10), height=6, command=self.lst1select) self.lst.pack(fill=BOTH, expand=1) Label(self.content_frame, text='Расход:', font=('normal', 12)).pack(fill=BOTH) self.lst2 = MultiListbox(self.content_frame, (('Время', 8), ('Причина', 35), ('Сумма', 5), ('Продавец', 12)), font=('normal', 10), height=6, command=self.lst2select) self.lst2.pack(fill=BOTH, expand=1) s = 'За дату: %s' % (norm_date(date_now())) self.d_label = Label(self.tool_frame, text=s, font=('bold', 12)) self.d_label.grid(row=0, columnspan=2, sticky=N + W) self.edit_frame_parrent = Labelframe(self.content_frame, text='Редактировать', width=50, height=100) self.edit_frame_parrent.pack(fill=BOTH, expand=1) self.delete_frame_parrent = Labelframe(self.content_frame, text='Удалить', width=50, height=50) self.delete_frame_parrent.pack(fill=BOTH, expand=1) self.edit_frame = Frame(self.edit_frame_parrent, height=63) self.edit_frame.pack() self.delete_frame = Frame(self.delete_frame_parrent, height=46) self.delete_frame.pack() self.update_lists()