def to_order(date, ordernumber, go_to_menu=True): send = SendData() if go_to_menu: to_orderstatus(date) else: send.send('{HOME 5}') found = False time.sleep(.5) while not found: index = 0 screen = parse.process_scene(window.get_window())[6:-6] for line in screen: if ordernumber in line: found = True send.send('{DOWN %s}' % index) send.send('{ENTER}') return True index += 1 if not found: send.send('{PGDN}') time.sleep(.5) next_screen = parse.process_scene(window.get_window())[6:-6] if next_screen == screen: return False
def parse_price_list_category(cat_name): items = [] send = SendData() while True: screen = process_scene(window.get_window()) to_process = screen[6:] for line in to_process: if '═' in line: break line = line[4:] l = line.split('║') if l[0].isspace(): break else: if 'x' in line: print(l) quantity = l[7][:l[7].index('x')] price = l[9].replace(',', '.').strip('■').strip('▲').strip('█').strip('▼') print(price) items.append((l[0].strip(), l[1].strip(), l[2].strip(), quantity.strip(), price.strip())) send.send('{PGDN}') time.sleep(0.1) new_screen = process_scene(window.get_window()) if new_screen == screen: time.sleep(0.1) new_screen = process_scene(window.get_window()) if new_screen == screen: break return {cat_name: items}
def to_input_order(date, client, list=21): send = SendData() delay = .15 points = [('Article :', 19, 4), ('n/a', 4, 2), ('Client :', 4, 24)] index = 0 commands = [ '{LEFT}', date, '{ENTER}', client, '{ENTER}', '{F11}', '{HOME}', '{ENTER}', list, '{ENTER}' ] to_main() while not verify(points): to_main() to_menu(('Orders', 'Input order')) for c in commands: if c == '{HOME}': if verify([('Client information', 6, 4)]): send.send('{F12}') if c == list: time.sleep(delay) if verify([('Create new order number', 5, 21)]): time.sleep(delay) send.send('{HOME}') time.sleep(delay) send.send('{ENTER}') time.sleep(delay) time.sleep(delay) send.send(c) time.sleep(delay) if index > 10: return False index += 1
def to_pricelist(pricelist_num, date=''): match = False for i in range(2): send = SendData() to_menu_parsed(('Maintenance data', 'Pricelists', 'Edit pricelist')) time.sleep(0.5) send.send('{home}') time.sleep(0.5) send.send('{enter}') time.sleep(0.5) screen = parse.process_scene(window.get_window()) if parse.identify_screen(screen, 'Edit pricelist Flowers'): match = True time.sleep(0.1) if date: send.send('+3') send.send(date) #send.send('{enter}') send.send(pricelist_num) time.sleep(0.1) ## send.send('{enter}') break return match
def to_input_purchase_ps_insert(date): send = SendData() to_menu(('Purchase', 'Per shipment', 'Input purchases (PS)')) send.send('{home}') time.sleep(0.5) send.send('{enter}') send.send(date) send.send('{enter}')
def to_input_purchase(date): send = SendData() to_menu(('Purchase','Default','Input purchases')) send.send('{home}') time.sleep(0.5) send.send('{enter}') send.send(date) send.send('{enter}')
def get_window(): send = SendData() drag_window() send.send('%c') data = None for i in range(3): data = clipboard.get_clipboard() break return data
def to_menu_slowest(command_order, verbose=False): send = SendData() if to_main(): send.send("{HOME}") time.sleep(1) if verbose: print(command_order) traverse(command_order) time.sleep(1) return True
def get_next_screen(old_screen, depth=0, delay=.5): if depth > 50: return [''] send = SendData() send.send('{enter}') for i in range(200): time.sleep(delay) screen = parse.process_scene(window.get_window()) if old_screen != screen: return screen return get_next_screen(old_screen, depth + 1, delay)
def to_pricelist_type(list_num): ''' (str)->None goes to list number in price ''' send = SendData() to_menu(('Maintenance data','Pricelists','Pricelist type')) send.send('{home}') time.sleep(0.5) send.send('{enter}') send.send(list_num) send.send('{f12}')
def parse_sales_by_region(): send = SendData() send.activate_window() screen = process_scene(window.get_window())[8:-5] totals = {} for s in screen: row = s.split('║') code = row[3].strip() total = row[6].strip().replace(',', '.') if total: totals[code] = total return totals
def get_window(): send = SendData() drag_window() send.send('%c') data = None for i in range(3): try: data = clipboard.get_clipboard() break except: time.sleep(0.01) return data
def get_purchase_list_report(from_date,to_date,supplier ): send = SendData() run_purchase_list(from_date, to_date,supplier) screen = parse.process_scene(window.get_window()) o = parse.distribution_list_product(screen) i = 0 while '< More >' in screen[-1] and i < 10: send.send('{enter}') time.sleep(0.8) screen = parse.process_scene(window.get_window()) o.extend(parse.distribution_list_product(screen)) i+=1 return o
def get_window(attempt=0): send = SendData() drag_window() send.send('%c') data = None for i in range(3): try: data = get_clipboard() break except: time.sleep(0.01) #clipboard.empty_clipboard() if data == None and attempt < 10: return get_window(attempt + 1) return data
def to_menu_slow(command_order): send = SendData() if to_main(): time.sleep(0.2) print(command_order) traverse(command_order) time.sleep(0.2)
def make_virtual_shipment_list(date = '051115', client='CAN*ON',plist = '03'): send = SendData() navigation.to_order_order(date,client,plist) screen = parse.process_scene(get_window()) categories = parse.order_categories(screen) items = {} for c in categories: if navigation.to_order_category(c[0],c[1]): screen = parse.process_scene(get_window()) ### get items items[c[1]] = parse.parse_virtual_order_category(c[1])[c[1]] ## print(items[c[1]]) send.send("{F12}") return items
def to_virtual_purchase(date): send = SendData() if to_main(): time.sleep(0.04) menus = ('Purchase','Default','Insert virtual') traverse(menus) time.sleep(.5) send.send('{enter}') send.send(date) send.send('{enter}')
def parse_assortment_category_section_dict(cat_name, max_pages=30): send = SendData() send.send('{home}{home}') time.sleep(.01) screen = process_scene(window.get_window()) old_screen = screen items = [] for count in range(max_pages): to_process = screen[6:] seperated = [] good_list = [] for line in to_process: seperated.append(line.split('║')) for line in seperated: if '═' in line[0]: break if line[1].strip() != '': good_list.append(line) ## for line in good_list[2:]: ## send.send('{DOWN}') for line in good_list: send.send(line[1]) time.sleep(.15) screen = process_scene(window.get_window()) code = screen[-2][63:82].strip() name = line[2][:-4].strip() name = name[len(cat_name):].strip() colour = line[5].strip() length = line[6].strip() quality = line[7].strip() packing = int(line[8].strip()) new_item = {'code': code, 'cat_name': cat_name, 'name': name, 'colour': colour, "length": length, "quality": quality, "packing": packing} if new_item in items: return items items.append(new_item) ## print((code,cat_name,name,colour,length,quality,packing)) send.send('{PGDN}') send.send('{home}') time.sleep(.4) new_screen = process_scene(window.get_window()) screen = new_screen if new_screen[6:] == old_screen[6:]: time.sleep(1) new_screen = process_scene(window.get_window()) if new_screen[6:] == old_screen[6:]: break old_screen = new_screen return items
def to_assortment_category(category): target = ' ' + category + ' ' send = SendData() to_assortment() time.sleep(.5) old_screen = window.get_window() while category.lower() not in old_screen.lower(): send.send('{PGDN}') time.sleep(0.2) if old_screen == window.get_window(): return None old_screen = window.get_window() index = old_screen.index(target) category_number = old_screen[index - 3: index].strip('║') send.send(category_number) send.send('{enter}') send.send('+{F11}') time.sleep(.5) return True
def to_main(tries=25): send = SendData() screen = None for ik in range(tries): time.sleep(0.1) for j in range(10): try: screen = parse.process_scene(window.get_window()) break except: time.sleep(0.1) time.sleep(0.1) if parse.identify_screen(screen, 'Main Menu'): send.send('{LEFT 5}') send.send('{UP}') send.send('{HOME 2}') return True send.send('{F12}') return False
def get_categories(): send = SendData() categories = [] old_screen = [] screen = process_scene(window.get_window())[6:-1] send.send('{home 5}') time.sleep(1) screen = process_scene(window.get_window())[6:-1] while old_screen != screen: old_screen = screen for line in screen: line = line.split('║') if '══' not in line[0]: for l in line[2:5]: if l[3:].rstrip() and not l[3:].rstrip().isspace(): categories.append((l[3:].rstrip())) else: for l in line[1:4]: if l[3:].rstrip() and not l[3:].rstrip().isspace(): categories.append((l[3:].rstrip())) # print(line) send.send('{PGDN}') time.sleep(1) screen = process_scene(window.get_window())[6:-1] # a[1].split('║')[2][3:].rstrip() categories.sort() return categories
def run_all_purchase_list_report(from_date, to_date, delay=.8): send = SendData() run_all_purchase_list(from_date, to_date, False) time.sleep(1) screen = parse.process_scene(window.get_window()) o = parse.distribution_list_product(screen) i = 0 while '< More >' in screen[-1] and i < 300: screen = get_next_screen(screen, 0, delay) o.extend(parse.distribution_list_product(screen)) i += 1 send.send('{LEFT}') time.sleep(1) screen = parse.process_scene(window.get_window()) for i in range(20): send.send('{LEFT 10}') time.sleep(.1) screen = parse.process_scene(window.get_window()) if 'Uniware' in screen[1]: ## print("found") break ## index = 0 ## while "From" not in screen or index > 10: ## send.send('{LEFT}') ## screen = parse.process_scene(window.get_window()) ## index+=1 return o
def parse_virtual_order_category(cat_name): items = [] send = SendData() time.sleep(0.2) while True: time.sleep(0.1) screen = process_scene(helper.get_window()) to_process = screen[6:] for line in to_process: if '═' in line: break line = line[4:] l = line.split('║') if l[0].isspace(): print(cat_name, l) break else: quantity = l[7][:l[7].index('x')] packing = l[7][l[7].index('x') + 1:].strip() ## print(packing) price = l[9].replace( ',', '.').strip('■').strip('▲').strip('█').strip('▼') ## print(price) items.append((l[0].strip(), l[1].strip(), l[2].strip(), quantity.strip(), price.strip(), packing)) time.sleep(0.2) send.send('{PGDN}') time.sleep(0.2) print("next") new_screen = process_scene(helper.get_window()) if new_screen == screen: time.sleep(0.5) new_screen = process_scene(helper.get_window()) if new_screen == screen: break return {cat_name: items}
def traverse(menu_list): send = SendData() index = 0 time.sleep(.2) for m in menu_list: send.send('{Home}') num = parse.menu_nav_columns(index, m) if num: cmd = "{DOWN " + num + "}" send.send(cmd) send.send("{ENTER}") time.sleep(.5) index += 1 time.sleep(.2)
def make_shipment_list_NZ(date = '051115', client='CAN*ON',plist = '03'): send = SendData() navigation.to_order_order(date,client,plist) time.sleep(1.5) screen = parse.process_scene(get_window()) categories = parse.order_categories(screen) print(categories) items = {} for c in categories: if navigation.to_order_category(c[0],c[1]): time.sleep(.5) screen = parse.process_scene(get_window()) print(screen) ### get items items[c[1]] = parse.parse_order_category_NZ(c[1])[c[1]] time.sleep(.3) print(items[c[1]]) send.send("{F12}") return items
def parse_input_purchase(screen): send = SendData() screen = screen[6:] new_screen = None items = {} while True: for line in screen: if '══' in line: break line = line.split('║') ## print(line) lot = line[1].strip() price = line[6].strip().replace(',', '.') items[lot] = price send.send('{PGDN}') time.sleep(0.5) new_screen = process_scene(window.get_window())[6:] if screen == new_screen: break screen = new_screen return items
def to_assortment(): ''' (None)->None goes to Assortment Menu ''' send = SendData() to_menu(('Maintenance data','Assortment')) send.send('{home}') time.sleep(0.5) send.send('{enter}')
def to_order_category(cat_num, cat_name): send = SendData() send.activate_window() send.send(cat_num) for i in range(5): screen = parse.process_scene(window.get_window()) if parse.identify_screen(screen, cat_name, 4): return True time.sleep(.3) screen = parse.process_scene(window.get_window()) return False
def to_virtual_purchase(date, depth=0): send = SendData() if to_main(): time.sleep(0.04) menus = ('Purchase', 'Default', 'Insert virtual purchases') traverse(menus) time.sleep(.5) send.send('{enter}') send.send(date) send.send('{enter}') for i in range(10): screen = parse.process_scene(window.get_window()) if parse.identify_screen(screen, "Insert virtual purchases Flowers", line_num=2): return True time.sleep(.1) if depth < 3: to_virtual_purchase(date, depth=depth + 1)
def to_orderstatus_range(date): if to_main(): send = SendData() index = 0 while not to_menu_slowest(['Sales', 'Orderstatus sales (f/t)']): time.sleep(.3) index += 1 if index > 3: exit() send.send(date) send.send('{ENTER}')