From 5cee4984dc200e12698dd106ae21edf1b89f2eed Mon Sep 17 00:00:00 2001 From: Wilson Gomez Date: Wed, 7 Jun 2023 13:52:39 -0500 Subject: [PATCH] add dialog for confirm commission modify domain sale quotations --- app/commons/dblogin.py | 22 +++++++++++----------- app/commons/ui_login.py | 36 ++++++++++++++++++++++++++++++++---- app/dialogs.py | 8 ++++++-- app/main.py | 41 +++++++++++++++++++++++++++++++++-------- app/stack_messages.py | 1 + app/version.py | 2 +- 6 files changed, 84 insertions(+), 26 deletions(-) diff --git a/app/commons/dblogin.py b/app/commons/dblogin.py index daac547..3b66ee7 100644 --- a/app/commons/dblogin.py +++ b/app/commons/dblogin.py @@ -43,17 +43,17 @@ class Login(QDialog): params = Params(file_config) self.params = params.params self.setObjectName('dialog_login') - if self.params.get('tablet_mode') == 'True': - self.tablet_mode = eval(self.params['tablet_mode']) - self.set_style([file_tablet_css]) - else: - if self.params.get('theme'): - file_theme_css = os.path.join( - pkg_dir, 'css', self.params['theme'] + '.css') - self.set_style([file_theme_css]) - else: - self.set_style([file_base_css]) - self.tablet_mode = None + # if self.params.get('tablet_mode') == 'True': + # self.tablet_mode = eval(self.params['tablet_mode']) + # self.set_style([file_tablet_css]) + # else: + # if self.params.get('theme'): + # file_theme_css = os.path.join( + # pkg_dir, 'css', self.params['theme'] + '.css') + # self.set_style([file_theme_css]) + # else: + # self.set_style([file_base_css]) + # self.tablet_mode = None self.ui = Ui_Login() self.ui.setupUi(self) self.verify_conn_th = VerifyConn(self) diff --git a/app/commons/ui_login.py b/app/commons/ui_login.py index f2de3ea..8f53d7b 100644 --- a/app/commons/ui_login.py +++ b/app/commons/ui_login.py @@ -12,23 +12,47 @@ pkg_dir = str(Path(os.path.dirname(__file__)).parents[0]) path_pos_advanced = os.path.join(pkg_dir, 'share', 'advanced_pos.png') from ..tools import get_screen +dimensions = { + 'large': (1173, 666), + 'medium': (1173, 666), + 'small': (900, 666), +} + +STYLE = """ + QMainWindow { + margin: 0; + background-color: rgb(246, 245, 244); + } + +""" + class Ui_Login(object): def setupUi(self, MainWindow): if not MainWindow.objectName(): MainWindow.setObjectName(u"MainWindow") width, height = get_screen() - MainWindow.resize(width*0.6109, height*0.6166) + screen_size = 'large' + if width <= 1024: + screen_size = 'small' + elif width <= 1366: + screen_size = 'medium' + # MainWindow.resize(width*0.6109, height*0.6166) + MainWindow.resize(*dimensions[screen_size]) icon = QIcon() icon.addFile(u"../.pos_app/presik_pos_v2/app/share/pos-icon.ico", QSize(), QIcon.Normal, QIcon.Off) MainWindow.setWindowIcon(icon) MainWindow.setWindowOpacity(1.0) - MainWindow.setStyleSheet(u"margin:0;background-color: rgb(246, 245, 244);") + MainWindow.setStyleSheet(STYLE) + # MainWindow.setStyleSheet(u"margin:0;background-color: rgb(246, 245, 244);") self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") self.gridGroupBoxMain = QGroupBox(self.centralwidget) self.gridGroupBoxMain.setObjectName(u"gridGroupBoxMain") - self.gridGroupBoxMain.setGeometry(QRect(0, -10, width*0.6109, 681)) + qrect = QRect(0, -10, width*0.6109, 681) + if screen_size == 'small': + qrect = QRect(0, -10, width*0.9, height) + self.gridGroupBoxMain.setGeometry(qrect) self.gridLayout_2 = QGridLayout(self.gridGroupBoxMain) self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout = QGridLayout() @@ -216,7 +240,11 @@ class Ui_Login(object): self.label_image = QLabel(self.gridGroupBoxMain) self.label_image.setObjectName(u"label_image") - self.label_image.setMaximumSize(QSize(width*0.3807, height*0.6120)) + size_image = QSize(width*0.3807, height*0.6120) + if screen_size == 'small': + size_image = QSize(width*0.6807, height) + + self.label_image.setMaximumSize(size_image) self.label_image.setPixmap(QPixmap(path_pos_advanced)) self.label_image.setScaledContents(True) diff --git a/app/dialogs.py b/app/dialogs.py index b28abaf..d6ceca1 100644 --- a/app/dialogs.py +++ b/app/dialogs.py @@ -203,7 +203,7 @@ class SearchSale(SearchWindow): widths_append(90) title = ('BUSCAR PEDIDOS...') - methods = { + self.methods = { 'on_selected_method': 'on_selected_sale', 'on_return_method': 'on_selected_sale' } @@ -256,11 +256,15 @@ class SearchSale(SearchWindow): self.buttons_layout_filter.addWidget(self.pushButtonCredit) self.buttons_layout_filter.addWidget(self.pushButtonReservation) widgets_to_create = self.buttons_layout_filter - super(SearchSale, self).__init__(parent, headers, None, methods, + super(SearchSale, self).__init__(parent, headers, None, self.methods, filter_column=(1, 2, 3, 4, 5, 6, 7), cols_width=widths, title=title, fill=True, widgets=[widgets_to_create]) def action_search_sale(self, _type): + if _type == 'quotation': + self.on_return_method = 'on_search_sale_by_number' + else: + self.on_return_method = 'on_selected_sale' self.parent.search_sales_by_domain(_type) diff --git a/app/main.py b/app/main.py index 8d3dc7b..f65ac44 100644 --- a/app/main.py +++ b/app/main.py @@ -252,12 +252,21 @@ class AppWindow(FrontWindow): return if not self.validate_payment_term(): return - sale, = self.Sale.find([['id', '=', self._sale['id']]], fields=['invoice_type', 'total_amount']) + sale_id = self._sale['id'] + sale, = self.Sale.find([['id', '=', sale_id]], fields=['invoice_type', 'total_amount']) if sale['invoice_type'] == 'P' and self._config.get('uvt_pos') and sale['total_amount'] > self._config['uvt_pos']: return self.dialog('base_uvt_pos') - args = {'sale_id': self._sale['id']} + args = {'sale_id': sale_id} self.Sale.to_quote(args) + if self._sale.get('agent.'): + sale, = self.Sale.find([['id', '=', sale_id]], fields=['agent.rec_name', 'commission']) + msg = 'Agente: ' + sale['agent.'].get('rec_name') + "\n Comision: " + str(sale['commission']) + "%" + dialog = self.dialog('confirm_agent', response=True, widgets=[], extra_message=msg) + response = dialog.exec_() + if response == DIALOG_REPLY_NO: + self.Sale.write([sale_id], {'state': 'draft'}) + return if self.model_sale_lines.rowCount() > 0: if self.check_salesman(): # self.state_disabled() @@ -266,7 +275,7 @@ class AppWindow(FrontWindow): _copies = self.shop['order_copies'] if _copies: for i in range(_copies): - self.action_send_order(sale_id=self._sale['id'], init_view=False) + self.action_send_order(sale_id=sale_id, init_view=False) except Exception as e: logging.error('error de impresion %s', e) pass @@ -291,11 +300,13 @@ class AppWindow(FrontWindow): def button_to_draft_pressed(self): # Return sale to draft state when state quotation self.Sale.button_method('draft', [self._sale['id']]) + self._sale['state'] = 'draft' self.buttons_stacked.button_to_draft.hide() self.buttons_stacked.button_to_quote.show() def button_to_quote_pressed(self): self.Sale.button_method('quote', [self._sale['id']]) + self._sale['state'] = 'quotation' self.buttons_stacked.button_to_quote.hide() self.buttons_stacked.button_to_draft.show() @@ -1645,9 +1656,9 @@ class AppWindow(FrontWindow): def action_agent(self): self.dialog_agent.exec_() res = self.field_commission_ask.text() - if not res: - return - # commission = float(res) + # if not res: + # return + commission = float(res or 0) sale, = self.Sale.find([ ('id', '=', self._sale['id']), ]) @@ -1669,11 +1680,11 @@ class AppWindow(FrontWindow): comm_string = str('[' + str(commission) + ']' + ' ') + (str(self.field_agent_ask.text())) self.field_agent.setText(comm_string) - self._set_commission_amount(sale['untaxed_amount'], commission) + # self._set_commission_amount(sale['untaxed_amount'], commission) def _set_commission_amount(self, untaxed_amount, commission): untaxed_amount = int(untaxed_amount) - commission = int(commission) + commission = int(commission if commission else 0) total = ((untaxed_amount * commission) / 100) self.field_commission_amount.setText(str(total)) @@ -2004,6 +2015,8 @@ class AppWindow(FrontWindow): elif _type == 'reservation': dom.append(('reservation', '=', True)) else: + self.dialog_search_sales.set_from_values([]) + return dom.append(('state', '=', 'quotation')) # dom.append(['payment_method', '!=', 'all_paid']) @@ -2021,6 +2034,17 @@ class AppWindow(FrontWindow): self.dialog_search_sales.set_counter_control(sales_draft) print(time.time() - time1, 'search sales') + def on_search_sale_by_number(self): + target = self.dialog_search_sales.filter_field.text() + if not target: + return + dom = [ + ('state', '=', 'quotation'), + ('number', '=', target) + ] + fields = self.dialog_search_sales.fields_names + sales = self.Sale.find(dom, fields=fields, order=[('id', 'DESC')]) + self.dialog_search_sales.set_from_values(sales) def on_selected_sale(self): sale_id = self.dialog_search_sales.get_id() @@ -3401,6 +3425,7 @@ class AppWindow(FrontWindow): self.action_position() elif key == Qt.Key_Semicolon and self._commission_activated: sale = self.get_current_sale() + print(sale, 'this is sale') if sale['state'] == 'draft' and self._state not in ['checkout', 'payment']: self.action_agent() elif key == Qt.Key_QuoteDbl: diff --git a/app/stack_messages.py b/app/stack_messages.py index bf0613e..54dd818 100644 --- a/app/stack_messages.py +++ b/app/stack_messages.py @@ -66,4 +66,5 @@ class StackMessages(QWidget): 'dont_delete_product': ('error', 'PARA ELIMINAR UN PRODUCTO DE LA VENTA DEBE FORZAR A BORRADOR EN TRYTON.'), 'base_uvt_pos': ('info', 'VENTA SUPERA LA BASE, \n DEBE SELECCIONAR VENTA ELECTRONICA.'), 'process_invoice_failed': ('error', 'ERROR AL PROCESAR FACTURA'), + 'confirm_agent': ('question', 'Confirmar comision de agente') } diff --git a/app/version.py b/app/version.py index 14d8595..54cc7ad 100644 --- a/app/version.py +++ b/app/version.py @@ -1 +1 @@ -__version__ = "6.0.14" +__version__ = "6.0.15"