Пример #1
0
        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'})
Пример #2
0
        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)
Пример #3
0
        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
Пример #4
0
    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)
Пример #5
0
        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
Пример #6
0
        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
Пример #7
0
    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)
Пример #8
0
        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
Пример #9
0
        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
Пример #10
0
    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)
Пример #11
0
    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')