From 42de1961f03a1f7b6a503e37e6fbb06442c648db Mon Sep 17 00:00:00 2001 From: Wilson Gomez Date: Fri, 27 Oct 2023 16:32:48 -0500 Subject: [PATCH] fix change invoice_type --- app/dialogs.py | 145 +++++++-------------------------------------- app/frontwindow.py | 6 +- app/main.py | 100 +++++++++++++++++-------------- app/models.py | 6 ++ app/proxy.py | 4 +- 5 files changed, 92 insertions(+), 169 deletions(-) diff --git a/app/dialogs.py b/app/dialogs.py index 4200b0c..d7442e0 100644 --- a/app/dialogs.py +++ b/app/dialogs.py @@ -42,7 +42,8 @@ __all__ = [ 'DialogCancelInvoice', 'DialogForceAssign', 'CombineProduct', 'DialogReports', 'DialogFixedDiscounts', 'DialogFixedDiscountsManual', 'DialogExpenses', 'DialogInfoProduct', 'DialogAdvance', - 'DialogDeleteProduct', 'DialogCollection', 'DialogTestPrinter' + 'DialogDeleteProduct', 'DialogCollection', 'DialogTestPrinter', + 'SearchFolio' ] WIZARDS = { @@ -296,6 +297,25 @@ class SearchParty(SearchWindow): title=title, fill=True) +class SearchFolio(SearchWindow): + def __init__(self, parent): + headers = OrderedDict() + headers['id'] = {'desc': 'ID', 'type': 'char'} + headers['id_number'] = {'desc': 'NUMERO ID', 'type': 'char'} + headers['name'] = {'desc': 'NOMBRE', 'type': 'char'} + headers['phone'] = {'desc': 'TELEFONO', 'type': 'char'} + headers['street'] = {'desc': 'DIRECCION', 'type': 'char'} + + title = 'BUSCAR FOLIO' + methods = { + 'on_selected_method': 'on_selected_folio', + 'on_return_method': 'on_search_folio', + } + super(SearchFolio, self).__init__(parent, headers, None, methods, + filter_column=[], cols_width=[60, 120, 270, 190, 90], + title=title, fill=True) + + class SearchProduct(SearchWindow): def __init__(self, parent): _cols_width = [10, 80] @@ -1709,129 +1729,6 @@ class DialogTestPrinter(QuickDialog): self.combo_row_characters.set_from_id("") def test_printer(self): - print('configure test') - server = self.input_server.text() - interface = self.combo_interface.get_id() - row_characters = self.combo_row_characters.get_id() - - printer_test = { - 'interface': interface, - 'device': str(server), - 'profile': 'TM-P80', - 'row_characters': row_characters, - } - - ctx_printing = {} - ctx_printing['company'] = 'OSCORP INC' - ctx_printing['sale_device'] = 'CAJA-10' - ctx_printing['shop'] = 'Shop Wall Boulevard' - ctx_printing['street'] = 'Cll 21 # 172-81. Central Park' - ctx_printing['user'] = 'Charles Chapplin' - ctx_printing['city'] = 'Dallas' - ctx_printing['zip'] = '0876' - ctx_printing['phone'] = '591 5513 455' - ctx_printing['id_number'] = '123456789-0' - ctx_printing['tax_regime'] = 'none' - receipt = Receipt(ctx_printing) - receipt.config_printer(printer_test) - return receipt.test_printer() - - def dialog_accepted(self): - result = self.test_printer() - if result: - msg = 'Impresion Exitosa ✔' - else: - msg = '''\n\n Test de impresión ha fallado, - es posible que haya un problema con la conexión de energía, USB o red. - Para solucionar el problema, asegúrese de que la impresora esté conectada - correctamente a la fuente de alimentación y que el cable USB o Ethernet - esté conectado correctamente a la impresora y - al dispositivo desde el que está intentando imprimir.''' - self._parent.dialog('test_printer', extra_message=msg) - if result: - super(DialogTestPrinter, self).dialog_accepted() - - def fill_fields(self, data): - self.input_server.setText(data[3]) - self.combo_interface.set_from_id(data[2]) - self.combo_row_characters.set_from_id(str(data[4])) - - -class DialogTestPrinter(QuickDialog): - - def __init__(self, parent): - self._parent = parent - width, height = get_screen() - grid = QGridLayout() - if parent.environment == 'restaurant': - _sizes = (100, 210, 210, 100) - fields = ( - {'name': 'id', 'label': 'ID', 'type': 'integer', 'invisible': True}, - {'name': 'name', 'label': 'NOMBRE', 'type': 'char', 'readonly': True}, - {'name': 'interface', 'label': 'INTERFACE', 'type': 'char', 'readonly': True}, - {'name': 'server', 'label': 'SERVIDOR', 'type': 'char', 'readonly': True}, - {'name': 'row_characters', 'label': 'CARACTERES POR FILA', 'type': 'integer', 'readonly': True}, - ) - self.model = TableEdit(self, [], fields) - self.table = TableView('model_printers', self.model, _sizes, self.fill_fields) - self.table.hideColumn(0) - - grid.addWidget(self.table, 0, 0, 2, 7) - - label_interface = QLabel('INTERFACE:') - label_interface.setObjectName('label_interface') - grid.addWidget(label_interface, 3, 1) - self.combo_interface = ComboBox(parent, 'type_printer', {'values': TYPE_PRINTER}) - grid.addWidget(self.combo_interface, 3, 2) - - label_server = QLabel('SERVIDOR:') - label_server.setObjectName('label_server') - grid.addWidget(label_server, 3, 3) - self.input_server = QLineEdit() - self.input_server.setObjectName('input_server') - grid.addWidget(self.input_server, 3, 4) - - label_row_characters = QLabel('CARACTERES POR FILA:') - label_row_characters.setObjectName('label_row_characters') - grid.addWidget(label_row_characters, 3, 5) - self.combo_row_characters = ComboBox( - parent, 'row_characters', {'values': ROW_CHARACTERS} - ) - grid.addWidget(self.combo_row_characters, 3, 6) - - super(DialogTestPrinter, self).__init__( - parent, 'action', widgets=[grid] - ) - self.setWindowTitle('TEST IMPRESORA') - self.setFixedSize(int(width * 0.4), int(height * 0.3)) - - def load(self): - printers_shop = self.parent.printers_shop - if getattr(self, 'table', None) and printers_shop: - model_add = self.model.add_record - for k, v in printers_shop.items(): - data = [ - k, - v.get('name', ''), - v['interface'], - v['host'], - v['row_characters'], - ] - model_add(data) - - def exec(self): - self.clear() - self.load() - super(DialogTestPrinter, self).exec() - - def clear(self): - self.model.clearData() - self.input_server.setText("") - self.combo_interface.set_from_id("") - self.combo_row_characters.set_from_id("") - - def test_printer(self): - print('configure test') server = self.input_server.text() interface = self.combo_interface.get_id() row_characters = self.combo_row_characters.get_id() diff --git a/app/frontwindow.py b/app/frontwindow.py index 17740c2..237ee30 100644 --- a/app/frontwindow.py +++ b/app/frontwindow.py @@ -21,6 +21,7 @@ from .dialogs import ( DialogFixedDiscounts, DialogFixedDiscountsManual, DialogComboProduct, DialogSplitSale, DialogExpenses, DialogInfoProduct, DialogAdvance, DialogDeleteProduct, DialogCollection, DialogTestPrinter, + SearchFolio ) from .constants import DIALOG_REPLY_YES from .version import __version__ @@ -170,6 +171,8 @@ class FrontWindow(QMainWindow): self.dialog_test_printer = DialogTestPrinter(self) if self._commission_activated: self.dialog_agent = DialogAgent(self) + if self._hotel_activated: + self.dialog_search_folio = SearchFolio(self) if self.environment == 'restaurant' and self._sale_pos_restaurant: self.dialog_combine_product = CombineProduct(self) self.dialog_combo_product = DialogComboProduct(self) @@ -322,7 +325,6 @@ class FrontWindow(QMainWindow): self._password_force_assign = self._config.get('password_force_assign') if self.environment == 'restaurant': self._sale_pos_restaurant = 'sale_pos_frontend_rest' in self.modules - print(self._sale_pos_restaurant, 'validate rest') if self._sale_pos_restaurant: self.RestTables = Model('sale.shop.table', self.ctx, main_window=self) self.Consumer = Model('party.consumer', self.ctx, main_window=self) @@ -344,6 +346,8 @@ class FrontWindow(QMainWindow): 'stock_date_end': date.today().strftime("%Y-%m-%d"), 'locations': [self.shop['warehouse']], } + if self._hotel_activated: + self.Folio = Model('hotel.folio', self.ctx, main_window=self) self.Source = Model('sale.source', self.ctx, main_window=self) self.Pricelist = Model('product.price_list', self.ctx, main_window=self) diff --git a/app/main.py b/app/main.py index 937a394..63e6ee8 100644 --- a/app/main.py +++ b/app/main.py @@ -108,8 +108,11 @@ class AppWindow(FrontWindow): self.reader_thread.sigSetWeight.connect(self.set_weight_readed) if self.server_printer and self.environment == 'restaurant': - self.timer = QTimer() - self.timer.singleShot(30000, self.verify_print_order_automatic) + thread_secondary = threading.Thread(target=self.verify_print_order_automatic) + thread_secondary.daemon = True + thread_secondary.start() + # self.timer = QTimer() + # self.timer.singleShot(30000, self.verify_print_order_automatic) self.do_invoice = DoInvoice(self, self.ctx) self.do_invoice.sigDoInvoice.connect(self.__do_invoice_thread) @@ -131,48 +134,50 @@ class AppWindow(FrontWindow): self.field_agent = None def verify_print_order_automatic(self): - print('ingresa a validar comand') - args = {'shop': self.shop['id']} - orders = [] - tasks = [] - version = compare_versions(self.modules['sale_pos_frontend_rest']['version'], '6.0.7') - if version in ('equal', 'higher'): - if self.tasks_station: - try: - result = self.SaleLine.get_data_command_and_task(args) - orders = result.get('orders', []) - tasks = result.get('tasks', []) - except Exception: - logger.exception('Error de conexion internet obtener tareas y comandas') + while True: + print('ingresa a validar comand') + args = {'shop': self.shop['id']} + orders = [] + tasks = [] + version = compare_versions(self.modules['sale_pos_frontend_rest']['version'], '6.0.7') + if version in ('equal', 'higher'): + if self.tasks_station: + try: + result = self.SaleLine.get_data_command_and_task(args) + orders = result.get('orders', []) + tasks = result.get('tasks', []) + except Exception: + logger.exception('Error de conexion internet obtener tareas y comandas') + else: + try: + orders = self.SaleLine.get_data_command(args) + except Exception: + logger.exception('Error de conexion internet obtener comanda') + # TODO: for remove this option else: - try: - orders = self.SaleLine.get_data_command(args) - except Exception: - logger.exception('Error de conexion internet obtener comanda') - # TODO: for remove this option - else: - logger.warning('The backend sale_pos_frontend_rest is deprecation, update version') - records = self.Sale.get_orders_to_command(args) - for record in records: - orders += record['orders'].values() - tasks += record['tasks'].values() + logger.warning('The backend sale_pos_frontend_rest is deprecation, update version') + records = self.Sale.get_orders_to_command(args) + for record in records: + orders += record['orders'].values() + tasks += record['tasks'].values() - try: - result = self.receipt_order.print_orders(orders) - if result: - self.Sale.mark_commanded({'lines_ids': result}) - except Exception: - logger.exception('Error de conexion internet al marcar tareas') + try: + result = self.receipt_order.print_orders(orders) + if result: + self.Sale.mark_commanded({'lines_ids': result}) + except Exception: + logger.exception('Error de conexion internet al marcar tareas') - try: - receipt = Receipt(context={}, environment='restaurant') - result_print = receipt.print_tasks(tasks) - if any(result_print): - self.SaleLine.mark_tasks_printed({'task_ids': result_print}) - except Exception: - logger.exception('Error de conexion internet al comandado') - timer = QTimer() - timer.singleShot(30000, self.verify_print_order_automatic) + try: + receipt = Receipt(context={}, environment='restaurant') + result_print = receipt.print_tasks(tasks) + if any(result_print): + self.SaleLine.mark_tasks_printed({'task_ids': result_print}) + except Exception: + logger.exception('Error de conexion internet al comandado') + time.sleep(30) + # timer = QTimer() + # timer.singleShot(30000, self.verify_print_order_automatic) # self.verify_command_order_th.exit(0) def set_printers_usb(self, PATH_PRINTERS): @@ -1458,6 +1463,7 @@ class AppWindow(FrontWindow): sale_id = self.store.store.get('id') if val and sale_id: args = {'invoice_type': val} + self.store.set(args) if val == 'M': args['invoice_method'] = 'manual' self.Sale.write([sale_id], args) @@ -3419,8 +3425,10 @@ class AppWindow(FrontWindow): self.menu_dash.setDisabled(True) def action_transfer_to_folio(self): - print('ingreso por este punto') - pass + folios = self.Folio.get_current_folios() + print(folios, 'validate folios') + self.dialog_search_folio.set_from_values(folios) + self.dialog_search_folio.show() def key_pressed(self, text): if self._state == 'disabled': @@ -3726,3 +3734,9 @@ class AppWindow(FrontWindow): def action_test_print(self): self.dialog_test_printer.exec_() + + def on_selected_folio(self): + pass + + def on_search_folio(self): + pass diff --git a/app/models.py b/app/models.py index 76203d9..47eccd5 100644 --- a/app/models.py +++ b/app/models.py @@ -216,6 +216,12 @@ MODELS_RESTAURANT = { 'fields': [ 'name' ], + }, + 'hotel.folio': { + 'rec_name': 'rec_name', + 'fields': [ + 'id' + ] } } diff --git a/app/proxy.py b/app/proxy.py index 2f042ac..9a34cb8 100644 --- a/app/proxy.py +++ b/app/proxy.py @@ -223,9 +223,11 @@ class Model(object): args_ = { 'model': self.model, 'method': self.method, - 'args': [values], + 'args': [], 'context': self.ctx, } + if values: + args_['args'] = [values] res = self.get_connection('POST', '/method', args_) return res