def oos_item_prompt2(self, event):
     fgc = (0.752, 0.607, 0.349, 1)  # orangish for text
     lblbgc = (0.231, 0.647, 0.541, .8)
     self.remove_widget(self.arrow)
     self.remove_widget(self.label)
     self.remove_widget(self.block)
     self.label = ColorLabel(text='Add a new date',
                             pos_hint={
                                 'center_x': .48,
                                 'center_y': .31
                             },
                             color=lblbgc,
                             font_size='30dp',
                             size_hint=(.57, .06),
                             halign='center')
     self.label.set_bgcolor(.17, .34, .52, .95)
     self.add_widget(self.label)
     self.arrow = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
     self.add_widget(self.arrow)
    def select_dep_prompt(self):
        lblbgc = (0.231, 0.647, 0.541, .8)
        #self.add_widget(self.layout)
        self.label = ColorLabel(
            text=
            "There are 4\nitems that need to\nbe checked in Dairy\n   <Tap the box>",
            pos_hint={
                'center_x': .58,
                'center_y': .65
            },
            font_size='30dp',
            color=lblbgc,
            size_hint=(.65, .2),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .5)

        #self.label.text_size = self.label.size
        self.add_widget(self.label)
        self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .8})
        self.add_widget(self.arrow)
    def ood_item_prompt2(self, event):
        lblbgc = (0.231, 0.647, 0.541, .8)
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.label = ColorLabel(text='Add a new date, or mark oos',
                                pos_hint={
                                    'center_x': .5,
                                    'center_y': .35
                                },
                                color=lblbgc,
                                font_size='30dp',
                                size_hint=(1, .1),
                                halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
        self.add_widget(self.arrow)

        self.arrow2 = ArrowDown(pos_hint={'center_x': .75, 'center_y': .25})
        self.add_widget(self.arrow2)
        self.done = True
 def mark_item_prompt(self, *dt):
     lblbgc = (0.231, 0.647, 0.541, 1)
     self.remove_widget(self.arrow)
     self.remove_widget(self.label)
     self.remove_widget(self.block)
     self.add_widget(self.block)
     self.block.bind(on_press=self.mark_item_prompt2)
     self.label = ColorLabel(
         text='This item might need\nto be marked down\n<tap anywhere>',
         pos_hint={
             'center_x': .55,
             'center_y': .57
         },
         font_size='30dp',
         color=lblbgc,
         size_hint=(.79, .17),
         halign='center')
     self.label.set_bgcolor(.17, .34, .52, .95)
     self.add_widget(self.label)
     self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .7})
     self.add_widget(self.arrow)
     self.block.unbind(on_press=self.oos_item_prompt2)
 def oos_item_prompt(self):
     self.outstock_btn.unbind(on_press=self.next_item)
     lblbgc = (0.231, 0.647, 0.541, 1)
     self.label = ColorLabel(
         text='This item is Out of Stock\n<tap anywhere>',
         pos_hint={
             'center_x': .58,
             'center_y': .6
         },
         font_size='30dp',
         color=lblbgc,
         size_hint=(.82, .14),
         halign='center')
     self.label.set_bgcolor(.17, .34, .52, .95)
     self.add_widget(self.label)
     self.arrow.pos_hint = {'center_x': .6, 'center_y': .7}
     self.add_widget(self.arrow)
     self.next_func = self.mark_item_prompt
     self.outstock_btn.bind(on_press=self.next_func)
     self.block.bind(on_press=self.oos_item_prompt2)
     self.add_widget(self.block)
     self.add_widget(self.skipbtn)
 def ood_item_prompt(self, *dt):
     self.remove_widget(self.arrow)
     self.remove_widget(self.arrow2)
     self.remove_widget(self.label)
     self.remove_widget(self.block)
     lblbgc = (0.231, 0.647, 0.541, 1)
     self.add_widget(self.block)
     self.block.bind(on_press=self.ood_item_prompt2)
     self.label = ColorLabel(
         text='This item could be\nout of date\n<tap anywhere>',
         pos_hint={
             'center_x': .55,
             'center_y': .56
         },
         font_size='30dp',
         color=lblbgc,
         size_hint=(.72, .13),
         halign='center')
     self.label.set_bgcolor(.17, .34, .52, .95)
     self.add_widget(self.label)
     self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .7})
     self.add_widget(self.arrow)
     self.block.unbind(on_press=self.move_item_prompt2)
 def move_item_prompt2(self, event):
     lblbgc = (0.231, 0.647, 0.541, .8)
     self.remove_widget(self.arrow)
     self.remove_widget(self.arrow2)
     self.remove_widget(self.label)
     self.remove_widget(self.block)
     self.label = ColorLabel(
         text='Move marked products\nthen press Moved,\nor enter a new date',
         pos_hint={
             'center_x': .5,
             'center_y': .37
         },
         color=lblbgc,
         font_size='28dp',
         size_hint=(.75, .22),
         halign='center')
     self.label.set_bgcolor(.17, .34, .52, .95)
     self.add_widget(self.label)
     self.arrow = ArrowDown(pos_hint={'center_x': .5, 'center_y': .25})
     self.add_widget(self.arrow)
     self.arrow2 = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
     self.add_widget(self.arrow2)
     self.next_func = self.ood_item_prompt
class Tutorial(Screen):
    todo_deps = {'Dairy': {}}
    done = False

    def __init__(self, DepSelect, ItemViewer, sm, **kwargs):
        super(Tutorial, self).__init__(**kwargs)
        import time
        self.app = App.get_running_app()
        self.thread_running = False
        self.ItemViewer = ItemViewer
        self.sm = sm
        self.next_func = None
        self.hidebtn = Button()

        today = time.localtime()
        month = today.tm_mon
        day = today.tm_mday
        year = today.tm_year
        mark_day = ("%s/%s/%s" % (month, day + 5, year))
        move_day = ("%s/%s/%s" % (month, day + 3, year))
        ood_day = ("%s/%s/%s" % (month, day, year))

        todo = {
            '050126008': {
                'date': 0,
                'desc': 'MILOS TEA, SWEET',
                'ftype': 'oos',
                'img': 'https://docs.google.com/uc?id=',
                'price': '$0.00',
                'upc': '9147504189'
            },
            '606105020': {
                'date': mark_day,
                'desc': 'Nestle Milk Low Fat, Chocolate',
                'ftype': 'mark',
                'img': 'https://docs.google.com/uc?id=',
                'price': '$0.00',
                'upc': '2800077212'
            },
            '050125029': {
                'date': move_day,
                'desc': 'FLORIDAS NATURAL ORANGE JUICE',
                'ftype': 'move',
                'img': 'https://docs.google.com/uc?id=',
                'price': '$0.00',
                'upc': '1630016824'
            },
            '050119007': {
                'date': ood_day,
                'desc':
                'YOPLAIT GO GURT YOGURT, LOW FAT, RASPBERRY, STRAWBERRY BANANA',
                'ftype': 'ood',
                'img': 'https://docs.google.com/uc?id=',
                'price': '$0.00',
                'upc': '7047013773'
            }
        }
        self.dep_list = {}
        self.dep_list['Dairy'] = ({
            'name': 'Dairy',
            'todo': todo,
            'todo_count': len(todo)
        })
        self.DepSelect = DepSelect
        DepSelect.build_layout(self)

        #self.layout = RelativeLayout()
        self.block = Button(background_normal='',
                            background_color=(0, 0, 0, .1))
        with self.block.canvas:
            Color(1, 0, 0, -.3)
            Rectangle(pos=(200, 700), size=(100, 100))
        #self.add_widget(self.block)
        #self.layout = RelativeLayout()
        fgc = (0.752, 0.607, 0.349, 1)  # orangish for text
        bgc = (.90, .63, .47, .95)  # orangish on grey button
        self.skipbtn = Button(text='Skip Tutorial',
                              color=fgc,
                              background_color=bgc,
                              font_size='20dp',
                              pos_hint={
                                  'center_x': .115,
                                  'center_y': .4
                              },
                              size_hint=(.23, .05))
        self.skipbtn.bind(on_press=self.skip_tutorial)
        self.add_widget(self.skipbtn)

    def hide_item(self, event):
        pass

    def back_pressed(self):
        self.app.exit()

    def pre_load_next_image(self, num):
        pass

    def skip_tutorial(self, *event):
        self.app.user['skip_tutorial'] = True
        self.app.save()
        self.sm.current = 'dep_select'

    def on_enter(self):
        #try:
        #self.add_widget(self.refresh_button)  # for test
        # except AttributeError:
        #     print('Attribute Error')
        #     exit()
        self.select_dep_prompt()

    def select_dep_prompt(self):
        lblbgc = (0.231, 0.647, 0.541, .8)
        #self.add_widget(self.layout)
        self.label = ColorLabel(
            text=
            "There are 4\nitems that need to\nbe checked in Dairy\n   <Tap the box>",
            pos_hint={
                'center_x': .58,
                'center_y': .65
            },
            font_size='30dp',
            color=lblbgc,
            size_hint=(.65, .2),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .5)

        #self.label.text_size = self.label.size
        self.add_widget(self.label)
        self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .8})
        self.add_widget(self.arrow)
        # Orb around #4 "You can see there are four items that need to be checked in dairy"<tap anywhere>
        # Orb around whole button "Tap the department to begin"<tap button>
        # facade department list@ for tutorial containing 1 of each ex
        # sm.current='item_viewer'

    def oos_item_prompt(self):
        self.outstock_btn.unbind(on_press=self.next_item)
        lblbgc = (0.231, 0.647, 0.541, 1)
        self.label = ColorLabel(
            text='This item is Out of Stock\n<tap anywhere>',
            pos_hint={
                'center_x': .58,
                'center_y': .6
            },
            font_size='30dp',
            color=lblbgc,
            size_hint=(.82, .14),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow.pos_hint = {'center_x': .6, 'center_y': .7}
        self.add_widget(self.arrow)
        self.next_func = self.mark_item_prompt
        self.outstock_btn.bind(on_press=self.next_func)
        self.block.bind(on_press=self.oos_item_prompt2)
        self.add_widget(self.block)
        self.add_widget(self.skipbtn)

    def oos_item_prompt2(self, event):
        fgc = (0.752, 0.607, 0.349, 1)  # orangish for text
        lblbgc = (0.231, 0.647, 0.541, .8)
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.label = ColorLabel(text='Add a new date',
                                pos_hint={
                                    'center_x': .48,
                                    'center_y': .31
                                },
                                color=lblbgc,
                                font_size='30dp',
                                size_hint=(.57, .06),
                                halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
        self.add_widget(self.arrow)

        # first dep list item is oos
        # Orb around new_date "This item is Out of stock so it needs a new date"<tap new_date>
        #self.open_datekeyboard(1)

    def mark_item_prompt(self, *dt):
        lblbgc = (0.231, 0.647, 0.541, 1)
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.add_widget(self.block)
        self.block.bind(on_press=self.mark_item_prompt2)
        self.label = ColorLabel(
            text='This item might need\nto be marked down\n<tap anywhere>',
            pos_hint={
                'center_x': .55,
                'center_y': .57
            },
            font_size='30dp',
            color=lblbgc,
            size_hint=(.79, .17),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .7})
        self.add_widget(self.arrow)
        self.block.unbind(on_press=self.oos_item_prompt2)
        #self.add_widget(self.block)
        #self.add_widget(self.skipbtn)

    def mark_item_prompt2(self, event):
        lblbgc = (0.231, 0.647, 0.541, .8)
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.label = ColorLabel(
            text=
            'Mark applicable items\nthen press marked,\nor enter a new date',
            pos_hint={
                'center_x': .5,
                'center_y': .37
            },
            color=lblbgc,
            font_size='30dp',
            size_hint=(.8, .22),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = ArrowDown(pos_hint={'center_x': .5, 'center_y': .25})
        self.add_widget(self.arrow)
        self.arrow2 = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
        self.add_widget(self.arrow2)

        self.next_func = self.move_item_prompt

        # Orb around Marked button "After marking it down, press here to go to the next item<tap marked button>

    def move_item_prompt(self, *dt):
        self.remove_widget(self.label)
        self.remove_widget(self.arrow)
        self.remove_widget(self.arrow2)
        self.remove_widget(self.block)
        lblbgc = (0.231, 0.647, 0.541, 1)
        self.add_widget(self.block)
        self.block.bind(on_press=self.move_item_prompt2)
        self.label = ColorLabel(
            text=
            'This item might need to be\nmoved to the markdown area\n<tap anywhere>',
            pos_hint={
                'center_x': .55,
                'center_y': .56
            },
            font_size='28dp',
            color=lblbgc,
            size_hint=(.90, .17),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .7})
        self.add_widget(self.arrow)
        self.block.unbind(on_press=self.mark_item_prompt2)

    def move_item_prompt2(self, event):
        lblbgc = (0.231, 0.647, 0.541, .8)
        self.remove_widget(self.arrow)
        self.remove_widget(self.arrow2)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.label = ColorLabel(
            text='Move marked products\nthen press Moved,\nor enter a new date',
            pos_hint={
                'center_x': .5,
                'center_y': .37
            },
            color=lblbgc,
            font_size='28dp',
            size_hint=(.75, .22),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = ArrowDown(pos_hint={'center_x': .5, 'center_y': .25})
        self.add_widget(self.arrow)
        self.arrow2 = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
        self.add_widget(self.arrow2)
        self.next_func = self.ood_item_prompt
        # Third item needs to be moved
        # Orb around Move this item? "This item needs to be moved to a markdown area"<tap anywhere>
        # Orb around Moved button  "after moving it, press here to go to the next item<tap moved button>

    def ood_item_prompt(self, *dt):
        self.remove_widget(self.arrow)
        self.remove_widget(self.arrow2)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        lblbgc = (0.231, 0.647, 0.541, 1)
        self.add_widget(self.block)
        self.block.bind(on_press=self.ood_item_prompt2)
        self.label = ColorLabel(
            text='This item could be\nout of date\n<tap anywhere>',
            pos_hint={
                'center_x': .55,
                'center_y': .56
            },
            font_size='30dp',
            color=lblbgc,
            size_hint=(.72, .13),
            halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = Arrow(pos_hint={'center_x': .6, 'center_y': .7})
        self.add_widget(self.arrow)
        self.block.unbind(on_press=self.move_item_prompt2)
        # Fourth item needs to be ood
        # Orb around ood message  "This item needs to be pulled"<tap anywhere>
        # Orb around new date button "After pulling it, if all the items were ood\n
        #                             mark out of stock, otherwise, enter the new date
        #                             "<tap new date or oos>
        #self.open_datekeyboard(1)

    def ood_item_prompt2(self, event):
        lblbgc = (0.231, 0.647, 0.541, .8)
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.remove_widget(self.block)
        self.label = ColorLabel(text='Add a new date, or mark oos',
                                pos_hint={
                                    'center_x': .5,
                                    'center_y': .35
                                },
                                color=lblbgc,
                                font_size='30dp',
                                size_hint=(1, .1),
                                halign='center')
        self.label.set_bgcolor(.17, .34, .52, .95)
        self.add_widget(self.label)
        self.arrow = ArrowDown(pos_hint={'center_x': .25, 'center_y': .25})
        self.add_widget(self.arrow)

        self.arrow2 = ArrowDown(pos_hint={'center_x': .75, 'center_y': .25})
        self.add_widget(self.arrow2)
        self.done = True

        # Last item is NONE
        # Orb around Menu  "Open the menu" <tap menu>
        # Orb around Change Department  "Change to a different department that needs to be checked" <tap change department>
        # sm.current='tut_dep select'
        # make sure Dairy - (0)

        # Orb around the 0  "'Dairy' department is done being checked, and we are done with the tutorial.  Good luck!<tap anywhere>
        # Reload to real dep_select

    def open_keyboard(self, event):
        self.remove_widget(self.arrow)
        self.remove_widget(self.label)
        self.app.date_keyboard.open(self.send_func)
        # Orb around month  "First enter the month of expiration"<tap febuary>
        # Orb around 0 "Then enter first number for day"<tap 0>
        # Orb around 5 "Then enter second number for day"<tap 5>
        # Orb around send "Lastly send the date"<tap send date>
        # self.app.tut_date_keyboard.dismiss()

    def send_func(self, *args):
        self.next_item()

    def select_dep(self, event):

        # Don't actually load item viwer screen, simply remove all current widgets
        # and build layout for self!!
        ItemViewer = self.ItemViewer
        dep = 'Dairy'
        sm = self.sm
        self.queue = False
        self.todo = []
        self.todo_num = 0
        self.app.selected_dep = dep
        self.todo_deps[dep]['todo'] = []
        self.todo_deps[dep]['hidden'] = []
        self.todo_deps[dep]['queue'] = []

        # Later this number can be pulled from storage if date is equal to today
        # along with return to where you left off popup
        self.todo_deps[dep]['num'] = 0

        for i in self.dep_list[dep]['todo'].items():
            if i[1]['date'] == 'hidden':
                self.todo_deps[dep]['hidden'].append(i)
            else:
                self.todo_deps[dep]['todo'].append(i)
        self.clear_widgets()
        ItemViewer.build_layout(self)
        #self.add_widget(self.refresh_button)  # For test
        info = self.todo_deps[dep]
        self.todo = info['todo']
        self.hidden = info['hidden']
        self.todo_num = info['num']
        self.queue = info['queue']
        ItemViewer.re_product(self, self.get_product())
        self.oos_item_prompt()

    def pre_load_next_images(self, *dt):
        pass

    def change_dep(self, event):
        pass

    def sign_out(self, event):
        pass

    def go_right(self, event):
        pass

    def go_left(self, event):
        pass

    def marked(self, event):
        self.next_item()

    def moved(self, event):
        self.next_item()

    def marknmove(self, event):
        pass

    def oos(self, event):
        self.next_item()

    def next_item(self):
        if self.done:
            self.skip_tutorial()
            return True
        else:
            self.ItemViewer.next_item(self)
        self.next_func()

    def re_product(self, product, *dt):
        self.ItemViewer.re_product(self, product)

    def get_product(self):
        try:
            return self.todo[self.todo_num]
        except IndexError:
            self.todo_num = 0
            return self.todo[0]
Exemple #9
0
class ItemViewer(Screen):
    todo = []  # Items that need action taken, taken from DepSelect.todo_deps
    thread_running = False
    todo_num = 0
    queue = []
    blank = (
        '',{
            'date': '',
            'desc': '',
            'ftype': '',
            'ghost': '',
            'img': 'none',
            'price': '',
            'upc': ''
        }
    )

    # Created a list with todo, last item is len-1
    # With a list it can be skipped through and returned into(object):
    def __init__(self, **kwargs):
        super(ItemViewer, self).__init__(**kwargs)
        self.app = App.get_running_app()
        self.build_layout()
        self.re_product(self.blank)

    def on_enter(self):
        info = DepSelect.todo_deps[self.app.selected_dep]
        self.todo = info['todo']
        self.hidden = info['hidden']
        self.todo_num = info['num']
        self.queue = info['queue']
        self.re_product(self.get_product())
        try:
            import admin
            importlib.reload(admin)
            admin.run(self)
            print('admin_user')
        except ModuleNotFoundError:
            pass

    def build_layout(self):
        #app.selected_dep
        lblbgc = (0.231, 0.647, 0.541, .8)  # blueish for text
        fgc = (0.752, 0.607, 0.349, 1)  # orangish for text
        bgc = (.90,.63,.47,.95)  # orangish on grey button
        #bgc2 = (.90,.63,.47,.2)
        # (.40,.23,.07,.95) # blueish back for label bg

        #fgc = (0.231, 0.647, 0.541, 1)
        
        #fgc=(1,1,1,1)

        
        self.dropdown = DropDown()

        self.hidebtn = Button(
            text='Hide This Item',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.hidebtn.bind(on_press=self.hide_item)
        self.dropdown.add_widget(self.hidebtn)

        self.change_depbtn = Button(
            text='Change Department',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.change_depbtn.bind(on_press=self.change_dep)
        self.dropdown.add_widget(self.change_depbtn)

        self.sign_outbtn = Button(
            text='Sign Out',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.sign_outbtn.bind(on_press=self.sign_out)
        self.dropdown.add_widget(self.sign_outbtn)

        self.menubtn = Button(
            text='Menu',
            font_size='30dp',
            size_hint=(.9, .05),
            color=fgc,
            background_color=bgc,
            pos_hint={'center_x':.5, 'center_y':.075}
        )
        self.menubtn.bind(on_release=self.dropdown.open)
        self.add_widget(self.menubtn)

        self.info=ColorLabel(
            color=fgc,
            font_size='25dp',
            size_hint=(.94, .05),
            pos_hint={'center_x':.5, 'center_y': .782}
        )
        self.info.set_bgcolor(.40,.23,.07,.95)
        self.add_widget(self.info)

        self.rightbtn = Button(
            text='>>',
            color=lblbgc,
            background_color=(.17,.34,.52,.3),
            font_size='55dp',
            size_hint=(.2, .48),
            pos_hint={'center_x': .9, 'center_y': .48}
        )
        self.rightbtn.bind(on_press=self.go_right)
        self.add_widget(self.rightbtn)

        self.leftbtn = Button(
            text='<<',
            color=lblbgc,
            background_color=(.17,.34,.52,.3),
            font_size='55dp',
            size_hint=(.2, .48),
            pos_hint={'center_x': .1, 'center_y': .48}
        )
        self.leftbtn.bind(on_press=self.go_left)
        self.add_widget(self.leftbtn)

        self.section_id = ColorLabel(
            color=lblbgc,
            pos_hint={'center_y': .832, 'center_x': .5},
            size_hint=(.96, .05),
            font_size='30dp'
        )
        self.section_id.set_bgcolor(.17,.34,.52,.3)
        self.add_widget(self.section_id)


        self.product_desc = ColorLabel(
            pos_hint={'center_x': .5, 'center_y': .96},
            font_size='23dp',  # used to be 30
            color=lblbgc,
            size_hint=(None, None),
            size=(Window.width, Window.height/9.5),
            halign='center'
        )
        self.product_desc.set_bgcolor(.17,.34,.52,.5)

        self.product_desc.text_size = self.product_desc.size
        self.add_widget(self.product_desc)


        self.img = AsyncImage(
            pos_hint={'center_x': .5, 'center_y': .5},
            size_hint=(.5, .5),
            allow_stretch=True
        )
        self.add_widget(self.img)
        self.product_upc = ColorLabel(
            size_hint=(.98, .05),
            color=lblbgc,
            pos_hint={'center_y': .882, 'center_x': .5},
            font_size='30dp',
            halign='left'
        )
        self.product_upc.set_bgcolor(.17,.34,.52,.4)
        self.add_widget(self.product_upc)
        self.mark_btn = Button(
            text='Marked',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.mark_btn.bind(on_press=self.marked)

        self.move_btn = Button(
            text='Moved',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.move_btn.bind(on_press=self.moved)

        self.marknmove_btn = Button(
            text='Marked &\nMoved',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.marknmove_btn.bind(on_press=self.marknmove)


        self.outstock_btn = Button(
            text='Out of\nStock',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.33, .12),
            pos_hint={'center_x':.85, 'center_y':.17}
        )
        self.outstock_btn.bind(on_press=self.oos)
        self.add_widget(self.outstock_btn)

        self.date_btn = Button(
            text='New\nDate',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.33, .12),
            pos_hint={'center_x':.15, 'center_y':.17}
        )
        self.date_btn.bind(on_press=self.open_keyboard)
        self.add_widget(self.date_btn)

    def pre_load_next_images(self, num):
        try:
            img = self.todo[num+1][1]['img']
            if img != 'none':
                AsyncImage(source=img)
        except IndexError:
            pass

    def re_product(self, product, *dt):
        self.pr = product
        self.pre_load_next_images(self.todo_num)
        self.product_desc.text=self.pr[1]['desc']  # desc
        ftype = self.pr[1]['ftype']  # ftype
        self.remove_widget(self.mark_btn)
        self.remove_widget(self.move_btn)
        self.remove_widget(self.marknmove_btn)
        if ftype == 'oos':
            fmsg = 'Enter a date for this item?'
        elif ftype == 'mark':
            self.add_widget(self.mark_btn)
            fmsg = 'Mark this item?'
        elif ftype == 'move':
            self.add_widget(self.move_btn)
            fmsg = 'Move this item?'
        elif ftype == 'ood':
            fmsg = 'Out of Date?'
        elif ftype == 'movenmark':
            self.add_widget(self.marknmove_btn)
            fmsg = 'Mark & Move?'
        else:
            fmsg = 'None'
          
        self.info.text=("Date: %s  %s"
            % (self.pr[1]['date'], fmsg))  # date / action
        
        word = self.pr[0] 
        new_word = (word[0:3]+' - '+word[3:6]+' - '+word[6::])
        self.section_id.text = new_word

        if self.pr[1]['img'] == 'none':
            self.img.color = [1, 1, 1, 0]
        else:
            self.img.color = [1, 1, 1, 1]
            self.img.source=self.pr[1]['img']  # img
        
        self.product_upc.text=self.pr[1]['upc']  # upc

    def change_dep(self, event):
        if self.thread_running:
            Clock.schedule_once(self.change_dep, .1)
        else:
            DepSelect.todo_deps[ self.app.selected_dep ]['queue'] = copy.deepcopy(self.queue)
            self.queue = []
            self.dropdown.dismiss()
            self.re_product(self.blank)
            DepSelect.todo_deps[ self.app.selected_dep ]['num'] = self.todo_num
            sm.current = 'dep_select'
    
    def sign_out(self, event):
        global sm
        self.dropdown.dismiss()
        for i in sm.screens:
            sm.remove_widget(i)
        sm.add_widget(Login(name='login'))
        sm.current = 'login'

    def marked(self, event):
        self.mfuncs()

    def moved(self, event):
        self.mfuncs()

    def marknmove(self, event):
        self.mfuncs()        

    def mfuncs(self):
        self.send_pr = self.pr
        t = Thread(target=self.post_item,
                         args=(self.send_pr, self.todo_num))
        t.daemon = True
        t.start()
        self.next_item()

    def oos(self, event):
        self.send_pr = self.pr
        if self.pr[1]['ftype'] == 'oos':
            self.next_item()
        else:
            self.send_pr[1]['ftype'] = 'oos'
            t = Thread(target=self.post_item,
                         args=(self.send_pr, self.todo_num))
            t.daemon = True
            t.start()
            self.next_item()

    def send_date(self, pr, date, *args):
        self.send_pr = pr
        self.send_pr[1]['date'] = date
        self.send_pr[1]['ftype'] = 'new_date'
        self.thread_running = True
        self.next_item()
        t = Thread(target=self.post_item,
                         args=(self.send_pr, self.todo_num))
        t.daemon = True
        t.start()

    def hide_item(self, event):
        self.send_pr = self.pr
        self.send_pr[1]['ftype'] = 'hide'
        t = Thread(target=self.post_item,
                        args=(self.send_pr, self.todo_num))
        t.daemon = True
        t.start()
        self.next_item()

    def post_item(self, *args):
        self.thread_running = True
        print("args", args)
        try:
            try:
                ftype = None
                pr = args[0]
                req = self.app.db.post_item(pr)
                if req.ok:
                    try:
                        ftype = req.json()['ftype']  # Possible breakpoint
                        pr[1]['ftype'] = ftype
                        if ftype == 'ok':
                            self.app.department_list[self.app.selected_dep]['todo_count'] -= 1
                        elif ftype == 'oos':
                            pr[1]['date'] = '0'
                        else:
                            self.queue.append(pr)
                    except KeyError as e:
                        print(e)
                        TroublePop("Trouble connecting", partial(self.post_item, args[0], args[1])).open()
                else:
                    TroublePop("Trouble connecting", partial(self.post_item, args[0], args[1])).open()
                
            except requests.exceptions.ConnectionError:
                TroublePop("Trouble connecting", partial(self.post_item, args[0], args[1])).open()
        except Exception:
            app = App.get_running_app()
            app.fb.capture_bug(format_exc(), app.id_token)
            print('ERROR IN THREAD\n\nERROR IN THREAD')
        self.thread_running = False

    def open_keyboard(self, event):
        self.app.date_keyboard.open(partial(self.send_date, self.pr))

    def go_left(self, *event):
        if self.todo_num >= 1:
            self.todo_num-=1
            self.re_product(self.get_product())
        else:
            return False

    def go_right(self, event):
        self.next_item()

    def next_item(self, *dt):
        print(self.app.local_id)
        # where to deal with queue
        print('length of todo', len(self.todo))
        if self.queue:
            print("There's a queue!")
            # Calling reproduct to build the screen
            self.re_product(self.todo[self.todo.index(self.queue.pop())])
        else:
            if (self.todo_num + 1) == len(self.todo):
                # Reached end
                # Wait for thread to finish
                if self.thread_running:
                    self.pr=('', {'desc': '', 'ftype': '', 'date': '', 'img': ''})
                    self.product_desc.text=''  # desc
                    self.info.text=''
                    self.section_id.text=''
                    self.product_upc.text=''
                    self.remove_widget(self.mark_btn)
                    self.remove_widget(self.move_btn)
                    self.remove_widget(self.marknmove_btn)
                    self.img.color = [1, 1, 1, 0]
                    Clock.schedule_once(self.next_item, 1)
                else:
                    self.todo_num = 0
                    Clock.schedule_once(partial(self.re_product, self.get_product()), .1)
                    
                    sm.current = 'dep_select'
            else:
                self.todo_num += 1
                self.re_product(self.get_product())

    def back_pressed(self):
        if self.go_left() == False:
            sm.current = 'dep_select'

    def get_product(self):
        try:
            return self.todo[self.todo_num]
        except IndexError:
            self.todo_num = 0
            return self.todo[0]
Exemple #10
0
    def build_layout(self):
        #app.selected_dep
        lblbgc = (0.231, 0.647, 0.541, .8)  # blueish for text
        fgc = (0.752, 0.607, 0.349, 1)  # orangish for text
        bgc = (.90,.63,.47,.95)  # orangish on grey button
        #bgc2 = (.90,.63,.47,.2)
        # (.40,.23,.07,.95) # blueish back for label bg

        #fgc = (0.231, 0.647, 0.541, 1)
        
        #fgc=(1,1,1,1)

        
        self.dropdown = DropDown()

        self.hidebtn = Button(
            text='Hide This Item',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.hidebtn.bind(on_press=self.hide_item)
        self.dropdown.add_widget(self.hidebtn)

        self.change_depbtn = Button(
            text='Change Department',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.change_depbtn.bind(on_press=self.change_dep)
        self.dropdown.add_widget(self.change_depbtn)

        self.sign_outbtn = Button(
            text='Sign Out',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(None, None),
            width=Window.width,
            height=Window.height/8
        )
        self.sign_outbtn.bind(on_press=self.sign_out)
        self.dropdown.add_widget(self.sign_outbtn)

        self.menubtn = Button(
            text='Menu',
            font_size='30dp',
            size_hint=(.9, .05),
            color=fgc,
            background_color=bgc,
            pos_hint={'center_x':.5, 'center_y':.075}
        )
        self.menubtn.bind(on_release=self.dropdown.open)
        self.add_widget(self.menubtn)

        self.info=ColorLabel(
            color=fgc,
            font_size='25dp',
            size_hint=(.94, .05),
            pos_hint={'center_x':.5, 'center_y': .782}
        )
        self.info.set_bgcolor(.40,.23,.07,.95)
        self.add_widget(self.info)

        self.rightbtn = Button(
            text='>>',
            color=lblbgc,
            background_color=(.17,.34,.52,.3),
            font_size='55dp',
            size_hint=(.2, .48),
            pos_hint={'center_x': .9, 'center_y': .48}
        )
        self.rightbtn.bind(on_press=self.go_right)
        self.add_widget(self.rightbtn)

        self.leftbtn = Button(
            text='<<',
            color=lblbgc,
            background_color=(.17,.34,.52,.3),
            font_size='55dp',
            size_hint=(.2, .48),
            pos_hint={'center_x': .1, 'center_y': .48}
        )
        self.leftbtn.bind(on_press=self.go_left)
        self.add_widget(self.leftbtn)

        self.section_id = ColorLabel(
            color=lblbgc,
            pos_hint={'center_y': .832, 'center_x': .5},
            size_hint=(.96, .05),
            font_size='30dp'
        )
        self.section_id.set_bgcolor(.17,.34,.52,.3)
        self.add_widget(self.section_id)


        self.product_desc = ColorLabel(
            pos_hint={'center_x': .5, 'center_y': .96},
            font_size='23dp',  # used to be 30
            color=lblbgc,
            size_hint=(None, None),
            size=(Window.width, Window.height/9.5),
            halign='center'
        )
        self.product_desc.set_bgcolor(.17,.34,.52,.5)

        self.product_desc.text_size = self.product_desc.size
        self.add_widget(self.product_desc)


        self.img = AsyncImage(
            pos_hint={'center_x': .5, 'center_y': .5},
            size_hint=(.5, .5),
            allow_stretch=True
        )
        self.add_widget(self.img)
        self.product_upc = ColorLabel(
            size_hint=(.98, .05),
            color=lblbgc,
            pos_hint={'center_y': .882, 'center_x': .5},
            font_size='30dp',
            halign='left'
        )
        self.product_upc.set_bgcolor(.17,.34,.52,.4)
        self.add_widget(self.product_upc)
        self.mark_btn = Button(
            text='Marked',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.mark_btn.bind(on_press=self.marked)

        self.move_btn = Button(
            text='Moved',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.move_btn.bind(on_press=self.moved)

        self.marknmove_btn = Button(
            text='Marked &\nMoved',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.35, .12),
            pos_hint={'center_x':.5, 'center_y':.17}
        )
        self.marknmove_btn.bind(on_press=self.marknmove)


        self.outstock_btn = Button(
            text='Out of\nStock',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.33, .12),
            pos_hint={'center_x':.85, 'center_y':.17}
        )
        self.outstock_btn.bind(on_press=self.oos)
        self.add_widget(self.outstock_btn)

        self.date_btn = Button(
            text='New\nDate',
            color=fgc,
            background_color=bgc,
            font_size='30dp',
            size_hint=(.33, .12),
            pos_hint={'center_x':.15, 'center_y':.17}
        )
        self.date_btn.bind(on_press=self.open_keyboard)
        self.add_widget(self.date_btn)