Beispiel #1
0
def fix_pos_error(staff):
    new_loop = asyncio.new_event_loop()
    asyncio.set_event_loop(new_loop)
    loop = asyncio.get_event_loop()
    tasks = []
    # send empty requests to test pos machines
    for pos in POS.query.filter(POS.ip != '').all():
        tasks.append(loop.create_task(send_req(pos)))

    try:
        loop.run_until_complete(asyncio.gather(*tasks))
    finally:
        config.order_pos_working = POS.order_pos_all_working()
        save_printer_status({
            'order_pos_working': config.order_pos_working,
            'checkout_pos_working': config.checkout_pos_working
        })
        if config.order_pos_working is False:
            return {'state': 'error'}
        else:
            tasks = []
            # reprint orders
            for pos in POS.query.filter(POS.ip != '').all():
                for print_failed in pos.fails:
                    order = print_failed.order
                    uuid = order.token
                    time = time_translate(order.order_time)
                    desk_name = Desk.query.get(order.desk_id).name
                    staff_name = order.staff.name
                    note = order.note
                    data = []
                    for op in order.order_products:
                        quantity = op.quantity
                        data.append(
                            [op.product_name, op.product_price, quantity])
                    _format = print_order_format(uuid,
                                                 time,
                                                 desk_name,
                                                 staff_name,
                                                 pos.split,
                                                 note,
                                                 data,
                                                 reprint=True)
                    tasks.append(
                        loop.create_task(send_req(pos, _format, order)))
            # reprint checkout
            pos = POS.query.get(1)
            for c in Checkout.query.filter_by(printed=False).all():
                uuid = c.token
                time = time_translate(c.checkout_time)
                d_name = c.desk_name
                s_name = c.staff.name
                check_price = c.total_price
                checkout_info = []
                for order in Order.query.filter_by(token=uuid).all():
                    checkout_info.append(order.order_products)
                _format = print_bill_format(uuid,
                                            time,
                                            d_name,
                                            s_name,
                                            checkout_info,
                                            check_price,
                                            reprint=True)
                tasks.append(
                    loop.create_task(send_req(pos, _format, checkout=c)))
            try:
                loop.run_until_complete(asyncio.gather(*tasks))
            finally:
                config.order_pos_working = POS.order_pos_all_working()
                config.checkout_pos_working = Checkout.all_printed()
                save_printer_status({
                    'order_pos_working':
                    POS.order_pos_all_working(),
                    'checkout_pos_working':
                    Checkout.all_printed()
                })
            if config.order_pos_working or config.checkout_pos_working is False:
                return {'state': 'error'}

        loop.close()

    return {'state': 'ok'}