def b_verify(self): """Срабатывает при нажатии кнопки "Сверить список". Проводит предварительную сверку количества товаров.""" if tkMessageBox.askokcancel('Внимание!', 'Вы действительно хотите сверить список со складом?'): self.button_del.configure(state=NORMAL) for cath in queries.cathegories(): for eat in queries.real_items_in_cathegory_shown(cath): storage_quantity = int(queries.items_in_storage(eat)) if storage_quantity and (eat not in self.bill): self.bill.append(eat) self.quantity.append(0) string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (eat.name, 0, eat.measure, storage_quantity, eat.measure) self.listbox.insert(END, string) self.listbox.itemconfig(END, {'fg':'red'}) #и для Ингредиентов for eat in queries.real_items_in_cathegory_shown(None): storage_quantity = int(queries.items_in_storage(eat)) if storage_quantity and (eat not in self.bill): self.bill.append(eat) self.quantity.append(0) string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (eat.name, 0, eat.measure, storage_quantity, eat.measure) self.listbox.insert(END, string) self.listbox.itemconfig(END, {'fg':'red'})
def b_accept(self): """Срабатывает при нажатии "Провести операцию" на панели списка. Полностью проводит приход по бухгалтерии, добавляя излишки товара и списывая недостачу. Изменяет базу данных""" if not self.bill: tkMessageBox.showwarning('Однако!', 'Список пуст, инвентаризировать нечего.') elif tkMessageBox.askokcancel('Внимание!', 'Вы утверждаете результаты инвентаризации?'): #Проводим сверку инвентаризационного списка со складом for cath in queries.cathegories(): for eat in queries.real_items_in_cathegory_shown(cath): storage_quantity = int(queries.items_in_storage(eat)) if storage_quantity and (eat not in self.bill): self.bill.append(eat) self.quantity.append(0) string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (eat.name, 0, eat.measure, storage_quantity, eat.measure) self.listbox.insert(END, string) self.listbox.itemconfig(END, {'fg':'red'}) #...и для ингредиентов for eat in queries.real_items_in_cathegory_shown(None): storage_quantity = int(queries.items_in_storage(eat)) if storage_quantity and (eat not in self.bill): self.bill.append(eat) self.quantity.append(0) string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (eat.name, 0, eat.measure, storage_quantity, eat.measure) self.listbox.insert(END, string) self.listbox.itemconfig(END, {'fg':'red'}) if not tkMessageBox.askyesno('Внимание!', 'Будете ознакамливаться с окончательным списком (после сверки)?'): queries.execute_inventarize(self.bill, self.quantity, self.memo.get(1.0,END)) self.bill = [] self.quantity = [] self.listbox.delete(0, END) self.button_del.configure(state=DISABLED) show_verify.master.destroy() incomingBottomFrame = Canvas(MasterFrame, highlightthickness=0) show_verify.master = incomingBottomFrame if USE_BACKGROUND: incomingBottomFrame.create_image(0,0, anchor='nw', image=data.photo) incomingBottomFrame.pack(side=LEFT, fill=BOTH, expand=YES) show_verify_cathegory(incomingBottomFrame)
def verify_calc(self, item, item_quantity): """Подсобная функция для работы функции verify(). Проверяет наличие на складе ингредиентов, входящих в сложный товар на момент продажи. В случае недостатка предлагает совершить мгновенный приход товара. Возвращает True или False в зависимости от итогового наличия необходиомого количества товара на складе для продажи.""" result = True for calc in queries.item_calculation(item): if calc.ingredient.calculation: for calc2 in queries.item_calculation(calc.ingredient): quantity = int(queries.items_in_storage( calc2.ingredient)) need_quantity = (item_quantity * calc2.quantity * calc.quantity) if quantity < need_quantity: if tkMessageBox.askyesno(u'Внимание!', u'Вы пытаетесь продать %d единицы товара "%s".' % (need_quantity, calc2.ingredient.name) + u'\nНа складе имеется всего %d единицы!'% quantity + u'\nВыполнить мгновенную поставку товара?'): incoming = panel() if not queries.execute_incoming_express( calc2.ingredient, incoming) or (need_quantity > incoming + quantity): result = False else: result = False else: quantity = int(queries.items_in_storage(calc.ingredient)) need_quantity = item_quantity * calc.quantity if quantity < need_quantity: if tkMessageBox.askyesno(u'Внимание!', u'Вы пытаетесь продать %d единицы товара "%s".' % (need_quantity, calc.ingredient.name) + u'\nНа складе имеется всего %d единицы!'% quantity + u'\nВыполнить мгновенную поставку товара?'): incoming = panel() if not queries.execute_incoming_express( calc.ingredient, incoming) or (need_quantity > incoming + quantity): result = False else: result = False return result
def press_eat(master, eat): """Срабатывает при нажатии на кнопку выбора собственно блюда. Добавляет блюдо в список, или возвращается к выбору категории, если нажата кнопка с eat=''.""" if eat: count = panel() if count: rest = queries.items_in_storage(eat) if rest and (count > int(rest)): if tkMessageBox.askokcancel('Внимание!', 'Вы хотите списать больше, чем есть на складе!\n\n'+ 'В настоящий момент на складе %s единиц\n' % rest + 'А вы хотите списать %d!\n\n' % count + 'Желаете списать все со склада, что там осталось?\n'): if int(rest): lostList.add_eat(eat, int(rest)) else: tkMessageBox.showwarning('ОДнако!', 'А там ничего не осталось...') else: lostList.add_eat(eat, count) else: parent_name = master.winfo_parent() parent = master._nametowidget(parent_name) master.destroy() lostBottomFrame = Canvas(MasterFrame, highlightthickness=0) show_lost.master = lostBottomFrame if USE_BACKGROUND: lostBottomFrame.create_image(0,0, anchor='nw', image=data.photo) lostBottomFrame.pack(side=LEFT, fill=BOTH, expand=YES) show_lost_cathegory(lostBottomFrame)
def verify(self): """Проверяет наличие на складе товаров, входящих в счет, на момент продажи, в случае недостатка предлагает совершить мгновенный приход товара. Возвращает True или False в зависимости от итогового наличия необходиомого количества товара на складе для продажи.""" all_present = True for item, item_quantity in zip(self.bill, self.quantity): if item.calculation: if not self.verify_calc(item, item_quantity): all_present = False else: quantity = int(queries.items_in_storage(item)) if quantity < item_quantity: if tkMessageBox.askyesno(u'Внимание!', u'Вы пытаетесь продать %d единицы товара "%s".' % (item_quantity, item.name) + u'\nНа складе имеется всего %d единицы!' % quantity + u'\nВыполнить мгновенную поставку товара?'): incoming = panel() if not queries.execute_incoming_express(item, incoming) or (item_quantity > incoming + quantity): all_present = False else: all_present = False return all_present
def verify_calc(self, item, item_quantity): """Подсобная функция для работы функции verify(). Проверяет наличие на складе ингредиентов, входящих в сложный товар на момент списания. Возвращает True или False в зависимости от наличия необходиомого количества товара на складе для списания.""" result = True for calc in queries.item_calculation(item): if calc.ingredient.calculation: for calc2 in queries.item_calculation(calc.ingredient): quantity = int(queries.items_in_storage( calc2.ingredient)) need_quantity = (item_quantity * calc2.quantity * calc.quantity) if quantity < need_quantity: tkMessageBox.showwarning(u'Внимание!', u'Вы пытаетесь списать %d единицы товара "%s".' % (need_quantity, calc2.ingredient.name) + u'\nНа складе имеется всего %d единицы!'% quantity) result = False else: quantity = int(queries.items_in_storage(calc.ingredient)) need_quantity = item_quantity * calc.quantity if quantity < need_quantity: tkMessageBox.showwarning(u'Внимание!', u'Вы пытаетесь списать %d единицы товара "%s".' % (need_quantity, calc.ingredient.name) + u'\nНа складе имеется всего %d единицы!'% quantity) result = False return result
def show_lost_eat(master, cath): """Заполняет нижний фрейм списком еды (кнопками с надписями)""" small_butons = [] small_butons.append(Button(master, text='...', width=SELL_WORD_WIDTH, style='Eat.TButton', command = lambda:press_eat(master, eat=''))) # ---Первую кнопку кладем отдельно для определения количества по ширине- small_butons[0].grid(column=0, row=0,padx=SELL_WORD_PADX, pady=SELL_WORD_PADY) master.update() x1 = master.winfo_width() x2 = small_butons[0].winfo_width() SELL_WORD_COUNT = x1/(x2+SELL_WORD_PADX*2) # ---------------------------------------------------------------------- goods = queries.actual_items_in_cathegory(cath) for count in range(len(goods)): item = goods[count] quantity = queries.items_in_storage(item) if cath: #Для ингредиентов еще выводим единицы измерения spaces = (SELL_WORD_WIDTH - len(item.name) - len(quantity)) * ' ' text = item.name + spaces + quantity else: spaces = (SELL_WORD_WIDTH - len(item.name) - 4 - len(quantity)) * ' ' text = item.name + spaces + quantity + ' ' + item.measure small_butons.append(Button(master, text=text, width=SELL_WORD_WIDTH, style=('Eat.TButton'), command = lambda eat=item: press_eat(master, eat))) for q in range (1, len(small_butons)): small_butons[q].grid(column=q%SELL_WORD_COUNT, row=q//SELL_WORD_COUNT,padx=SELL_WORD_PADX, pady=SELL_WORD_PADY)
def verify(self): """Проверяет наличие на складе товаров, входящих в счет, на момент списания. Возвращает True или False в зависимости от наличия необходиомого количества товара на складе для продажи.""" all_present = True for element in self.bill: if element.item.calculation: if not self.verify_calc(element.item, element.quantity): all_present = False else: quantity = int(queries.items_in_storage(element.item)) if quantity < element.quantity: tkMessageBox.showwarning(u'Внимание!', u'Вы пытаетесь списать %d единицы товара "%s".' % (element.quantity, element.item.name) + u'\nНа складе имеется всего %d единицы!' % quantity) all_present = False return all_present
def make_list_string(self, item, quantity): """Вспомогательная функция создания строки списка инветаризации""" storage_quantity = queries.items_in_storage(item) if quantity == int(storage_quantity): color = 'black' string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s' string = string % (item.name, quantity, item.measure) elif quantity > int(storage_quantity): color = '#008800' string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (item.name, quantity, item.measure, storage_quantity, item.measure) else: color = 'red' string = u' %-' + unicode(VERIFY_WIDTH - 30) + u's %8d %3s (%s %3s)' string = string % (item.name, quantity, item.measure, storage_quantity, item.measure) return string, color
def press_eat(master, eat): """Срабатывает при нажатии на кнопку выбора собственно блюда. Добавляет блюдо в список, или возвращается к выбору категории, если нажата кнопка с eat=''.""" if eat: count = panel() if count: rest = queries.items_in_storage(eat) incomingList.add_eat(eat, count) else: parent_name = master.winfo_parent() parent = master._nametowidget(parent_name) master.destroy() incomingBottomFrame = Canvas(MasterFrame, highlightthickness=0) show_verify.master = incomingBottomFrame if USE_BACKGROUND: incomingBottomFrame.create_image(0,0, anchor='nw', image=data.photo) incomingBottomFrame.pack(side=LEFT, fill=BOTH, expand=YES) show_verify_cathegory(incomingBottomFrame)
def show(frame, iterator): """Выводит на экран выборку, заданную в iterator""" scrollbar = Scrollbar(frame) tree = Treeview(frame, selectmode='none', padding=3, style='Custom.Treeview', height=REPORT_HEIGHT, yscrollcommand=scrollbar.set) tree.pack(side=LEFT, fill=BOTH, expand=YES) scrollbar.config(command=tree.yview) scrollbar.pack(side=LEFT, fill=Y) tree.tag_configure('1', font=('Verdana', FONT_SIZE_REPORT)) tree.tag_configure('2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff') tree.tag_configure('red1', font=('Verdana', FONT_SIZE_REPORT), foreground='red') tree.tag_configure('red2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff', foreground='red') tree.tag_configure('grey1', font=('Verdana', FONT_SIZE_REPORT), foreground='#dddddd') tree.tag_configure('grey2', font=('Verdana', FONT_SIZE_REPORT), background='#f5f5ff', foreground='#dddddd') Style().configure('Custom.Treeview', rowheight=FONT_SIZE_REPORT*2) columns = ['#' + str(x + 1) for x in range(4)] tree.configure(columns=columns) for q in range(len(header)): tree.heading('#%d' % (q + 1), text=header[q], anchor='w') tree.column('#%d' % (q + 1), width=REPORT_SCALE * col_width[q + 1], anchor='w') tree.heading('#0', text='', anchor='w') tree.column('#0', width=0, anchor='w', minwidth=0) flag = True for item in iterator: if not item.calculation: col = [] col.append(add_s(item.cathegory.name if item.cathegory else u'-Нет-')) col.append(add_s(item.name)) storage = queries.items_in_storage(item) col.append(add_s(storage)) col.append(add_s(item.measure)) if int(storage) > 0: flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='2') else: tree.insert('', 'end', text='', values=col, tag='1') elif storage == '0': flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='grey2') else: tree.insert('', 'end', text='', values=col, tag='grey1') else: flag = not flag if flag: tree.insert('', 'end', text='', values=col, tag='red2') else: tree.insert('', 'end', text='', values=col, tag='red1')