add dialog for confirm commission

modify domain sale quotations
This commit is contained in:
Wilson Gomez 2023-06-07 13:52:39 -05:00
parent 307a67cd4c
commit 5cee4984dc
6 changed files with 84 additions and 26 deletions

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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:

View File

@ -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')
}

View File

@ -1 +1 @@
__version__ = "6.0.14"
__version__ = "6.0.15"