diff --git a/app/commons/messages.py b/app/commons/messages.py
index a2492ef..fc9d7e7 100644
--- a/app/commons/messages.py
+++ b/app/commons/messages.py
@@ -38,7 +38,8 @@ class MessageBar(QHBoxLayout):
type_, msg_string = self.stack_messages.get(msg)
if additional_info:
msg_string = msg_string % additional_info
- self.label_info.setText(msg_string)
+ print('----', msg_string)
+ self.label_info.setText(self.tr(msg_string))
self.type = type_
self.update_style()
diff --git a/app/frontwindow.py b/app/frontwindow.py
index 6141bda..c2ebd37 100644
--- a/app/frontwindow.py
+++ b/app/frontwindow.py
@@ -1,12 +1,10 @@
-# -*- coding: UTF-8 -*-
import os
import time
from datetime import date
import logging
from pathlib import Path
-from collections import OrderedDict
-from PyQt5.QtWidgets import QMainWindow, QDesktopWidget, QLabel, QLineEdit
-from PyQt5.QtCore import QTimer, QThread, pyqtSignal, Qt
+from PyQt5.QtWidgets import QMainWindow, QDesktopWidget, QLineEdit
+from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from .commons.dialogs import QuickDialog
from .commons.dblogin import safe_reconnect
@@ -71,11 +69,10 @@ class FrontWindow(QMainWindow):
self.screen_size = 'medium'
self.timeout = _DEFAULT_TIMEOUT
- self.set_stack_messages()
self.setFocus()
self.global_timer = 0
- print('Screen Size: > ', self.screen_size)
+ # print('Screen Size: > ', self.screen_size)
_theme = params['theme'] if params.get('theme') else None
self.profile_printer = params['profile_printer'] if params.get('profile_printer') else 'TM-P80'
self.set_style(SCREENS[self.screen_size], _theme)
@@ -98,21 +95,6 @@ class FrontWindow(QMainWindow):
screen = QDesktopWidget().screenGeometry()
return screen.width(), screen.height()
- def set_statusbar(self, values):
- status_bar = self.statusBar()
- status_bar.setSizeGripEnabled(False)
-
- for k, v in values.items():
- _label = QLabel(v['name'] + ':')
- _label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
- _label.setObjectName('label_status_bar')
- status_bar.addWidget(_label, 1)
- setattr(self, k, QLabel(str(v['value'])))
- _field_info = getattr(self, k)
- _field_info.setObjectName('field_status_bar')
- _field_info.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
- status_bar.addWidget(_field_info)
-
def set_style(self, file_css, theme_css=None):
styles = []
if theme_css:
@@ -146,7 +128,7 @@ class FrontWindow(QMainWindow):
self.check_empty_sale()
if self.active_weighing and self.reader_thread:
self.reader_thread.onClose()
- super(MainWindow, self).close()
+ super(FrontWindow, self).close()
def dialog(self, name, response=False):
res = QuickDialog(
@@ -174,53 +156,6 @@ class FrontWindow(QMainWindow):
def keyReleaseEvent(self, event):
self._keyStates[event.key()] = False
- def set_stack_messages(self):
- messages = {
- 'system_ready': ('info', self.tr('SYSTEM READY...')),
- 'confirm_exit': ('warning', self.tr('DO YOU WANT TO EXIT?')),
- 'confirm_credit': ('question', self.tr('PLEASE CONFIRM YOUR PAYMENT TERM AS CREDIT?')),
- 'sale_number_not_found': ('warning', self.tr('SALE ORDER / INVOICE NUMBER NOT FOUND!')),
- 'sale_closed': ('error', self.tr('THIS SALE IS CLOSED, YOU CAN NOT TO MODIFY!')),
- 'discount_not_valid': ('warning', self.tr('DISCOUNT VALUE IS NOT VALID!')),
- 'add_payment_sale_draft': ('info', self.tr('YOU CAN NOT ADD PAYMENTS TO SALE ON DRAFT STATE!')),
- 'enter_quantity': ('question', self.tr('ENTER QUANTITY...')),
- 'enter_discount': ('question', self.tr('ENTER DISCOUNT...')),
- 'enter_payment': ('question', self.tr('ENTER PAYMENT AMOUNT BY: %s')),
- 'enter_new_price': ('question', self.tr('ENTER NEW PRICE...')),
- 'order_successfully': ('info', self.tr('ORDER SUCCESUFULLY SENT.')),
- 'order_failed': ('warning', self.tr('FAILED SEND ORDER!')),
- 'missing_agent': ('warning', self.tr('MISSING AGENT!')),
- 'missing_salesman': ('warning', self.tr('THERE IS NOT SALESMAN FOR THE SALE!')),
- 'sale_without_products': ('warning', self.tr('YOU CAN NOT CONFIRM A SALE WITHOUT PRODUCTS!')),
- 'user_without_permission': ('error', self.tr('USER WITHOUT PERMISSION FOR SALE POS!')),
- 'quantity_not_valid': ('error', self.tr('THE QUANTITY IS NOT VALID...!')),
- 'user_not_permissions_device': ('error', self.tr('THE USER HAVE NOT PERMISSIONS FOR ACCESS TO DEVICE!')),
- 'missing_party_configuration': ('warning', self.tr('MISSING THE DEFAULT PARTY ON SHOP CONFIGURATION!')),
- 'missing_journal_device': ('error', self.tr('MISSING SET THE JOURNAL ON DEVICE!')),
- 'statement_closed': ('error', self.tr('THERE IS NOT A STATEMENT OPEN FOR THIS DEVICE!')),
- 'product_not_found': ('warning', self.tr('PRODUCT NOT FOUND!')),
- 'must_load_or_create_sale': ('warning', self.tr('FIRST YOU MUST CREATE/LOAD A SALE!')),
- 'new_sale': ('warning', self.tr('DO YOU WANT CREATE NEW SALE?')),
- 'cancel_sale': ('question', self.tr('ARE YOU WANT TO CANCEL SALE?')),
- 'not_permission_delete_sale': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR DELETE THIS SALE!')),
- 'not_permission_for_cancel': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR CANCEL THIS SALE!')),
- 'customer_not_credit': ('info', self.tr('THE CUSTOMER HAS NOT CREDIT!')),
- 'agent_not_found': ('warning', self.tr('AGENT NOT FOUND!')),
- 'invalid_commission': ('warning', self.tr('COMMISSION NOT VALID!')),
- 'credit_limit_exceed': ('info', self.tr('CREDIT LIMIT FOR CUSTOMER EXCEED!')),
- 'credit_limit_capacity': ('info', self.tr('THE CUSTOMER CREDIT CAPACITY IS ABOVE 80%')),
- 'not_can_force_assign': ('warning', self.tr('YOU CAN NOT FORCE ASSIGN!')),
- 'send_electronic_failed': ('info', self.tr('FALLO EL ENVIO DE FACTURA!')),
- 'invoice_done_failed': ('info', self.tr('FALLO FINALIZACIÓN DE FACTURA!')),
- 'without_stock_quantity': ('info', self.tr('PRODUCT WITHOUT STOCK: %s')),
- 'not_sale': ('info', self.tr('NOT SALE!...')),
- 'statement_created': ('info', self.tr('STATEMENTS CREATED!')),
- 'statement_finish': ('info', self.tr('STATEMENTS CLOSED!')),
- 'order_dispatched': ('info', self.tr('ORDER DISPATCHED!')),
- 'error_order_dispatched': ('error', self.tr('ERROR TO DISPATCHED ORDER!')),
- }
- self.stack_msg = messages
-
def create_dialogs(self):
self.dialog_control_panel = ControlPanel(self).get(self.menu_control_panel)
self.dialog_money_count = DialogTableMoneyCount(self).get()
@@ -407,16 +342,6 @@ class FrontWindow(QMainWindow):
self.Channel = FastModel('sale.web_channel', self.ctx)
return True
- def create_statusbar(self):
- values = OrderedDict([
- ('stb_shop', {'name': self.tr('SHOP'), 'value': self.shop['name']}),
- ('stb_device', {'name': self.tr('DEVICE'), 'value': self.device['name']}),
- ('stb_database', {'name': self.tr('DATABASE'), 'value': self.database}),
- ('stb_user', {'name': self.tr('USER'), 'value': self.user}),
- ('stb_printer', {'name': self.tr('PRINTER'), 'value': self.printer_sale_name})
- ])
- self.set_statusbar(values)
-
class ClearUi(QThread):
sigActionClear = pyqtSignal()
diff --git a/app/locale/__init__.py b/app/locale/__init__.py
index c45ea38..e69de29 100644
--- a/app/locale/__init__.py
+++ b/app/locale/__init__.py
@@ -1,3 +0,0 @@
-import os
-
-locale_path = path_trans = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'i18n_es')
diff --git a/app/locale/i18n_es.qm b/app/locale/i18n_es.qm
index 790ded6..31676ae 100644
Binary files a/app/locale/i18n_es.qm and b/app/locale/i18n_es.qm differ
diff --git a/app/locale/i18n_es.ts b/app/locale/i18n_es.ts
index d04591f..2c4c2e7 100644
--- a/app/locale/i18n_es.ts
+++ b/app/locale/i18n_es.ts
@@ -172,7 +172,7 @@
- TIPO DE VEHÍCULO
+ TIPO DE VEHÍCULO:
@@ -274,7 +274,7 @@
- HISTORIAL DE VENTAS:
+ HISTORIAL DE VENTAS
@@ -415,7 +415,7 @@
- TOTAL DINERO
+ TOTAL DINERO:
@@ -483,245 +483,10 @@
FrontWindow
-
+
APLICACION
-
-
-
- SISTEMA LISTO...
-
-
-
-
- DESEA SALIR?
-
-
-
-
- CONFIRME QUE LA FORMA DE PAGO ES CREDITO?
-
-
-
-
- ORDEN / FACTURA NO ENCONTRADA!
-
-
-
-
- ESTA CUENTA ESTA CERRADA NO PUEDE MODIFICARLA!
-
-
-
-
- DESCUENTO NO VALIDO!
-
-
-
-
- NO PUEDE AGREGAR PAGOS A UNA VENTA EN BORRADOR!
-
-
-
-
- INGRESE LA CANTIDAD...
-
-
-
-
- INGRESE EL DESCUENTO...
-
-
-
-
- INGRESE EL VALOR A PAGAR: %s
-
-
-
-
- INGRESE EL NUEVO PRECIO...
-
-
-
-
- ORDEN ENVIADA EXITOSAMENTE.
-
-
-
-
- FALLO EL ENVIO DE LA ORDEN!
-
-
-
-
- FALTA EL AGENTE!
-
-
-
-
- NO HAY MESERO ASIGNADO!
-
-
-
-
- NO PUEDE CONFIRMAR UNA ORDEN SIN PRODUCTOS!
-
-
-
-
- USUARIO SIN PERMISOS DE EVNTAS POS!
-
-
-
-
- LA CANTIDAD NO ES VÁLIDA...!
-
-
-
-
- EL USUARIO NO TIENE PERMISOS PARA ACCEDER AL DISPOSITIVO!
-
-
-
-
- FALTA EL TERCERO POR DEFECTO EN LA CONFIGURACION!
-
-
-
-
-
-
-
-
-
- NO HAY ESTADOS DE CUENTA ABIERTOS PARA EL DISPOSITIVO!
-
-
-
-
- PRODUCTO NO ENCONTRADO!
-
-
-
-
- PRIMERO DEBES CREAR/CARGAR UNA VENTA!
-
-
-
-
- DESEA CREAR UNA NUEVA ORDER?
-
-
-
-
- DESEA CANCELAR LA VENTA?
-
-
-
-
- NO TIENES PERMISOS PARA BORRAR LA VENTA!
-
-
-
-
- NO TIENES PERMISOS PARA BORRAR LA VENTA!
-
-
-
-
- EL CLIENTE NO TIENE CREDITO!
-
-
-
-
- AGENTE NO ENCONTRADO!
-
-
-
-
- COMISION NO VALIDA!
-
-
-
-
- LIMITE DE CREDITO PARA CLIENTE EXCEDIDO!
-
-
-
-
- EL CLIENTE ESTA EN UNA CAPACIDAD DE CREDITO POR ARRIBA DEL 80%
-
-
-
-
- TU NO PUEDES FORZAR ASIGNACION!
-
-
-
-
- FALLO EL ENVIO DE FACTURA!
-
-
-
-
- FALLO FINALIZACIÃN DE FACTURA!
-
-
-
-
- PRODUCTO SIN INVENTARIO: %s
-
-
-
-
- NO HAY VENTA...
-
-
-
-
- ESTADOS DE CUENTA CREADOS!
-
-
-
-
- ESTADOS DE CUENTA CERRADO!
-
-
-
-
- ORDEN DESPACHADA!
-
-
-
-
- ERROR EN EL DESAPACHO DE LA ORDEN!
-
-
-
-
- TIENDA
-
-
-
-
- TERMINAL
-
-
-
-
- BASE DE DATOS
-
-
-
-
- USUARIO
-
-
-
-
- IMPRESORA
-
Help
@@ -811,7 +576,7 @@
- ATAJOS DE TECLADO
+ ATAJOS DE TECLADO...
@@ -849,7 +614,7 @@
- CANCELAR
+ CANC&ELAR
@@ -865,287 +630,287 @@
MainWindow
-
+
FECHA
-
+
VENDEDOR
-
+
PLAZO DE PAGO
-
+
No PEDIDO
-
+
POSICION
-
+
AGENTE
-
+
CARGO DOMICILIO
-
+
SUBTOTAL
-
+
IMPUESTOS
-
+
DESCUENTO
-
+
TOTAL
-
+
PAGADO
-
+
CAMBIO
-
+
NOMBRE
-
+
DESCRIPCIÓN
-
+
VALOR
-
+
COD
-
+
UND
-
+
CANT
-
+
DESC
-
+
NOTA
-
+
PRECIO UNIT CON IMP
-
+
ESTADO DE CUENTA
-
+
CLIENTE
-
+
COMPAÑIA
-
+
MESA ASIGNADA
-
+
FRAC
-
+
COMPROBANTE
-
+
DOMICILIARIO
-
+
CANAL
-
+
ABRIR ESTADOS DE CUENTA
-
+
CERRAR ESTADOS DE CUENTA
-
+
DESCUENTO GLOBAL
-
+
AYUDA
-
+
NÚMERO
-
+
NUMERO DE FACTURA
-
+
CONSUMIDOR
-
+
VALOR TOTAL
-
+
TERCERO
-
+
NÚMERO DE PLACA
-
+
TIPO DE VEHICULO
-
+
PARA LLEVAR
-
+
DOMICILIO
-
+
COMAN
-
+
NUMERO ID
-
+
TELÉFONO
-
+
A LA MESA
-
+
CLASE
-
+
-
+
-
+
-
+
INICIO
-
+
No. Factura
-
+
PENDIENTE
-
+
EFECTIVO
-
+
DATAFONO
-
+
METODO DE PAGO
@@ -1155,7 +920,7 @@
- Menu
+ Menu...
@@ -1181,17 +946,17 @@
- Advertencia
+ Advertencia...
- Información
+ Información...
- Acción
+ Acción...
@@ -1224,42 +989,42 @@
- CLIENTE
+ CLIENTE:
- NÚMERO
+ NÚMERO:
- FECHA
+ FECHA:
- VENDEDOR
+ VENDEDOR:
- LINEAS
+ LINEAS:
- BASE
+ BASE:
- IMPUESTOS
+ IMPUESTOS:
- TOTAL
+ TOTAL:
@@ -1272,7 +1037,7 @@
- Buscar Productos
+ Buscar Productos...
@@ -1412,16 +1177,229 @@
SearchWindow
-
+
BUSCAR...
-
+
FILTRO:
+
+ StackMessages
+
+
+
+ SISTEMA LISTO...
+
+
+
+
+ ESTA SEGURO QUE DESEA SALIR?
+
+
+
+
+ CONFIRME QUE EL PLAZO DE PAGO ES CREDITO?
+
+
+
+
+ PEDIDO / FACTURA NO ENCONTRADA!
+
+
+
+
+ LA VENTA ESTA CERRA, NO PUEDES MODIFICARLA!
+
+
+
+
+ EL DESCUENTO NO ES VALIDO!
+
+
+
+
+ NO PUEDE AGREGAR PAGO A UN PEDIDO EN BORRADOR!
+
+
+
+
+ INGRESE LA CANTIDAD...
+
+
+
+
+ INGRESE EL DESCUENTO...
+
+
+
+
+ INGRESE EL VALOR A PAGAR EN: %s
+
+
+
+
+ INGRESE EL PRECIO...
+
+
+
+
+ ORDEN ENVIADA EXITOSAMENTE
+
+
+
+
+ FALLO EL ENVIO DE LA ORDEN!
+
+
+
+
+ FALTA EL AGENTE!
+
+
+
+
+ NO HAY VENDEDOR EN EL PEDIDO!
+
+
+
+
+ NO PUEDE CONFIRMAR UNA VENTA SIN PRODUCTOS!
+
+
+
+
+ USUARIO SIN PERMISOS PARA VENTAS EN POS!
+
+
+
+
+ LA CANTIDAD NO ES VALIDA!
+
+
+
+
+ EL USUARIO NO TIENE PERMISOS PARA ACCEDER AL DISPOSITIVO!
+
+
+
+
+ FALTA EL TERCERO POR DEFECTO EN LA SUCURSAL!
+
+
+
+
+ FALTA EL DIARIO EN EL TERMINAL!
+
+
+
+
+ NO HAY ESTADOS DE CUENTA ABIERTOS PARA ESTE TERMINAL!
+
+
+
+
+ PRODUCTO NO ENCONTRADO!
+
+
+
+
+ PRIMERO DEBE CREAR/CARAGR UNA VENTA!
+
+
+
+
+ DESEA CREAR UNA NUEVA VENTA!
+
+
+
+
+ DESEA CACELAR LA VENTA?
+
+
+
+
+ NO TIENE PERMISOS PARA BORAR VENTAS!
+
+
+
+
+ NO TIENES PERMISOS PARA CANCELAR LA VENTA!
+
+
+
+
+ EL CLIENTE NO TIENE CUPO DE CREDITO!
+
+
+
+
+ AGENTE NO ENCONTRADO!
+
+
+
+
+ COMISION NO VALIDA!
+
+
+
+
+ LIMITE DE CREDITO DEL CLIENTE EXCEDIDO!
+
+
+
+
+ LA CAPACIDAD DE CREDITO DEL CLIENTE ESTA SOBRE EL 80%
+
+
+
+
+
+
+
+
+
+ FALLO EN EL ENVIO DE LA FACTURA!
+
+
+
+
+ FALLO EN EL PROCESAMIENTO DE LA FACTURA!
+
+
+
+
+
+
+
+
+
+ NO HAY VENTA!
+
+
+
+
+ ESTADOS DE CUENTA ABIERTOS!
+
+
+
+
+ ESTADOS DE CUENTA CERRADOS!
+
+
+
+
+ ORDEN DESPACHADA!
+
+
+
+
+ ERROR EN EL DESPACHO DELA ORDEN!
+
+
StartButtons
@@ -1450,6 +1428,34 @@
IMPRIMIR
+
+ StatusBar
+
+
+
+ SUCURSAL
+
+
+
+
+ TERMINAL
+
+
+
+
+ BASE DE DATOS
+
+
+
+
+ USUARIO
+
+
+
+
+ IMPRESORA
+
+
TipAmount
diff --git a/app/mainwindow.py b/app/mainwindow.py
index 26c366e..b74d253 100644
--- a/app/mainwindow.py
+++ b/app/mainwindow.py
@@ -15,6 +15,8 @@ from PyQt5.QtWidgets import (
)
from .frontwindow import FrontWindow
+from .status_bar import StatusBar
+from .stack_messages import StackMessages
from app.commons.action import Action
from app.commons.forms import GridForm, ComboBox, FieldNumeric
from app.commons.messages import MessageBar
@@ -48,6 +50,8 @@ class MainWindow(FrontWindow):
super(MainWindow, self).__init__(connection, params, title)
self.payment_ctx = {}
self.set_keys()
+ # self.set_stack_messages()
+ StackMessages(self)
self.stock_context = None
self._sale = {}
self.ctx = self._context
@@ -76,7 +80,7 @@ class MainWindow(FrontWindow):
self.set_printers_usb(PATH_PRINTERS)
self.set_printing_context()
- self.create_statusbar()
+ self.statusbar = StatusBar(self)
self.reader_thread = None
self._current_line_id = None
@@ -109,6 +113,53 @@ class MainWindow(FrontWindow):
if j['id'] == self.default_journal['id']:
self.default_journal = j
+ # def set_stack_messages(self):
+ # self.stack_msg = {
+ # 'system_ready': ('info', self.tr('SYSTEM READY...')),
+ # 'confirm_exit': ('warning', self.tr('DO YOU WANT TO EXIT?')),
+ # 'confirm_credit': ('question', self.tr('PLEASE CONFIRM YOUR PAYMENT TERM AS CREDIT?')),
+ # 'sale_number_not_found': ('warning', self.tr('SALE ORDER / INVOICE NUMBER NOT FOUND!')),
+ # 'sale_closed': ('error', self.tr('THIS SALE IS CLOSED, YOU CAN NOT TO MODIFY!')),
+ # 'discount_not_valid': ('warning', self.tr('DISCOUNT VALUE IS NOT VALID!')),
+ # 'add_payment_sale_draft': ('info', self.tr('YOU CAN NOT ADD PAYMENTS TO SALE ON DRAFT STATE!')),
+ # 'enter_quantity': ('question', self.tr('ENTER QUANTITY...')),
+ # 'enter_discount': ('question', self.tr('ENTER DISCOUNT...')),
+ # 'enter_payment': ('question', self.tr('ENTER PAYMENT AMOUNT BY: %s')),
+ # 'enter_new_price': ('question', self.tr('ENTER NEW PRICE...')),
+ # 'order_successfully': ('info', self.tr('ORDER SUCCESSFULLY SENT')),
+ # 'order_failed': ('warning', self.tr('FAILED SEND ORDER!')),
+ # 'missing_agent': ('warning', self.tr('MISSING AGENT!')),
+ # 'missing_salesman': ('warning', self.tr('THERE IS NOT SALESMAN FOR THE SALE!')),
+ # 'sale_without_products': ('warning', self.tr('YOU CAN NOT CONFIRM A SALE WITHOUT PRODUCTS!')),
+ # 'user_without_permission': ('error', self.tr('USER WITHOUT PERMISSION FOR SALE POS!')),
+ # 'quantity_not_valid': ('error', self.tr('THE QUANTITY IS NOT VALID...!')),
+ # 'user_not_permissions_device': ('error', self.tr('THE USER HAVE NOT PERMISSIONS FOR ACCESS TO DEVICE!')),
+ # 'missing_party_configuration': ('warning', self.tr('MISSING THE DEFAULT PARTY ON SHOP CONFIGURATION!')),
+ # 'missing_journal_device': ('error', self.tr('MISSING SET THE JOURNAL ON DEVICE!')),
+ # 'statement_closed': ('error', self.tr('THERE IS NOT A STATEMENT OPEN FOR THIS DEVICE!')),
+ # 'product_not_found': ('warning', self.tr('PRODUCT NOT FOUND!')),
+ # 'must_load_or_create_sale': ('warning', self.tr('FIRST YOU MUST CREATE/LOAD A SALE!')),
+ # 'new_sale': ('warning', self.tr('DO YOU WANT CREATE NEW SALE?')),
+ # 'cancel_sale': ('question', self.tr('ARE YOU WANT TO CANCEL SALE?')),
+ # 'not_permission_delete_sale': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR DELETE THIS SALE!')),
+ # 'not_permission_for_cancel': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR CANCEL THIS SALE!')),
+ # 'customer_not_credit': ('info', self.tr('THE CUSTOMER HAS NOT CREDIT!')),
+ # 'agent_not_found': ('warning', self.tr('AGENT NOT FOUND!')),
+ # 'invalid_commission': ('warning', self.tr('COMMISSION NOT VALID!')),
+ # 'credit_limit_exceed': ('info', self.tr('CREDIT LIMIT FOR CUSTOMER EXCEED!')),
+ # 'credit_limit_capacity': ('info', self.tr('THE CUSTOMER CREDIT CAPACITY IS ABOVE 80%')),
+ # 'not_can_force_assign': ('warning', self.tr('YOU CAN NOT FORCE ASSIGN!')),
+ # 'send_electronic_failed': ('info', self.tr('FALLO EL ENVIO DE FACTURA!')),
+ # 'invoice_done_failed': ('info', self.tr('FALLO FINALIZACIÓN DE FACTURA!')),
+ # 'without_stock_quantity': ('info', self.tr('PRODUCT WITHOUT STOCK: %s')),
+ # 'not_sale': ('info', self.tr('NOT SALE!...')),
+ # 'statement_created': ('info', self.tr('STATEMENTS CREATED!')),
+ # 'statement_finish': ('info', self.tr('STATEMENTS CLOSED!')),
+ # 'order_dispatched': ('info', self.tr('ORDER DISPATCHED!')),
+ # 'error_order_dispatched': ('error', self.tr('ERROR TO DISPATCHED ORDER!')),
+ # }
+ # # self.stack_msg = messages
+
def set_domains(self):
self.domain_search_product = [
('code', '!=', None),
@@ -2747,5 +2798,3 @@ class MainWindow(FrontWindow):
if self._consumer.get('birthday'):
y, m, d = self._consumer['birthday'].split('-')
self.row_field_birthday.setDate(QDate(int(y), int(m), int(d)))
-
-# 2798
diff --git a/app/stack_messages.py b/app/stack_messages.py
new file mode 100644
index 0000000..140d24e
--- /dev/null
+++ b/app/stack_messages.py
@@ -0,0 +1,53 @@
+from PyQt5.QtWidgets import QWidget
+
+__all__ = ['StackMessages']
+
+
+class StackMessages(QWidget):
+
+ def __init__(self, parent):
+ super(StackMessages, self).__init__(parent)
+ parent.stack_msg = {
+ 'system_ready': ('info', self.tr('SYSTEM READY...')),
+ 'confirm_exit': ('warning', self.tr('DO YOU WANT TO EXIT?')),
+ 'confirm_credit': ('question', self.tr('PLEASE CONFIRM YOUR PAYMENT TERM AS CREDIT?')),
+ 'sale_number_not_found': ('warning', self.tr('SALE ORDER / INVOICE NUMBER NOT FOUND!')),
+ 'sale_closed': ('error', self.tr('THIS SALE IS CLOSED, YOU CAN NOT TO MODIFY!')),
+ 'discount_not_valid': ('warning', self.tr('DISCOUNT VALUE IS NOT VALID!')),
+ 'add_payment_sale_draft': ('info', self.tr('YOU CAN NOT ADD PAYMENTS TO SALE ON DRAFT STATE!')),
+ 'enter_quantity': ('question', self.tr('ENTER QUANTITY...')),
+ 'enter_discount': ('question', self.tr('ENTER DISCOUNT...')),
+ 'enter_payment': ('question', self.tr('ENTER PAYMENT AMOUNT BY: %s')),
+ 'enter_new_price': ('question', self.tr('ENTER NEW PRICE...')),
+ 'order_successfully': ('info', self.tr('ORDER SUCCESSFULLY SENT')),
+ 'order_failed': ('warning', self.tr('FAILED SEND ORDER!')),
+ 'missing_agent': ('warning', self.tr('MISSING AGENT!')),
+ 'missing_salesman': ('warning', self.tr('THERE IS NOT SALESMAN FOR THE SALE!')),
+ 'sale_without_products': ('warning', self.tr('YOU CAN NOT CONFIRM A SALE WITHOUT PRODUCTS!')),
+ 'user_without_permission': ('error', self.tr('USER WITHOUT PERMISSION FOR SALE POS!')),
+ 'quantity_not_valid': ('error', self.tr('THE QUANTITY IS NOT VALID...!')),
+ 'user_not_permissions_device': ('error', self.tr('THE USER HAVE NOT PERMISSIONS FOR ACCESS TO DEVICE!')),
+ 'missing_party_configuration': ('warning', self.tr('MISSING THE DEFAULT PARTY ON SHOP CONFIGURATION!')),
+ 'missing_journal_device': ('error', self.tr('MISSING SET THE JOURNAL ON DEVICE!')),
+ 'statement_closed': ('error', self.tr('THERE IS NOT A STATEMENT OPEN FOR THIS DEVICE!')),
+ 'product_not_found': ('warning', self.tr('PRODUCT NOT FOUND!')),
+ 'must_load_or_create_sale': ('warning', self.tr('FIRST YOU MUST CREATE/LOAD A SALE!')),
+ 'new_sale': ('warning', self.tr('DO YOU WANT CREATE NEW SALE?')),
+ 'cancel_sale': ('question', self.tr('ARE YOU WANT TO CANCEL SALE?')),
+ 'not_permission_delete_sale': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR DELETE THIS SALE!')),
+ 'not_permission_for_cancel': ('info', self.tr('YOU HAVE NOT PERMISSIONS FOR CANCEL THIS SALE!')),
+ 'customer_not_credit': ('info', self.tr('THE CUSTOMER HAS NOT CREDIT!')),
+ 'agent_not_found': ('warning', self.tr('AGENT NOT FOUND!')),
+ 'invalid_commission': ('warning', self.tr('COMMISSION NOT VALID!')),
+ 'credit_limit_exceed': ('info', self.tr('CREDIT LIMIT FOR CUSTOMER EXCEED!')),
+ 'credit_limit_capacity': ('info', self.tr('THE CUSTOMER CREDIT CAPACITY IS ABOVE 80%')),
+ 'not_can_force_assign': ('warning', self.tr('YOU CAN NOT FORCE ASSIGN!')),
+ 'send_electronic_failed': ('info', self.tr('SEND INVOICE FAILED!')),
+ 'invoice_done_failed': ('info', self.tr('PROCESSING INVOICE FAILED!')),
+ 'without_stock_quantity': ('info', self.tr('PRODUCT WITHOUT STOCK: %s')),
+ 'not_sale': ('info', self.tr('NOT SALE!...')),
+ 'statement_created': ('info', self.tr('STATEMENTS CREATED!')),
+ 'statement_finish': ('info', self.tr('STATEMENTS CLOSED!')),
+ 'order_dispatched': ('info', self.tr('ORDER DISPATCHED!')),
+ 'error_order_dispatched': ('error', self.tr('ERROR TO DISPATCHED ORDER!')),
+ }
diff --git a/app/status_bar.py b/app/status_bar.py
new file mode 100644
index 0000000..7cd9453
--- /dev/null
+++ b/app/status_bar.py
@@ -0,0 +1,33 @@
+from collections import OrderedDict
+from PyQt5.QtWidgets import QWidget, QLabel
+from PyQt5.QtCore import Qt
+
+__all__ = ['StatusBar']
+
+
+class StatusBar(QWidget):
+
+ def __init__(self, parent):
+ super(StatusBar, self).__init__()
+ p = parent
+ values = OrderedDict([
+ ('stb_shop', {'name': self.tr('SHOP'), 'value': p.shop['name']}),
+ ('stb_device', {'name': self.tr('DEVICE'), 'value': p.device['name']}),
+ ('stb_database', {'name': self.tr('DATABASE'), 'value': p.database}),
+ ('stb_user', {'name': self.tr('USER'), 'value': p.user}),
+ ('stb_printer', {'name': self.tr('PRINTER'), 'value': p.printer_sale_name})
+ ])
+
+ status_bar = p.statusBar()
+ status_bar.setSizeGripEnabled(False)
+
+ for k, v in values.items():
+ _label = QLabel(v['name'] + ':')
+ _label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
+ _label.setObjectName('label_status_bar')
+ status_bar.addWidget(_label, 1)
+ setattr(parent, k, QLabel(str(v['value'])))
+ _field_info = getattr(parent, k)
+ _field_info.setObjectName('field_status_bar')
+ _field_info.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
+ status_bar.addWidget(_field_info)
diff --git a/pospro.pyw b/pospro.pyw
deleted file mode 100644
index 37ef1d5..0000000
--- a/pospro.pyw
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: UTF-8 -*-
-import os
-import sys
-
-from PyQt5.QtWidgets import QApplication
-from PyQt5.QtCore import QTranslator
-from app.commons.dblogin import Login
-from app import mainwindow
-
-try:
- DIR = os.path.abspath(os.path.normpath(os.path.join(__file__,
- '..', '..', '..')))
- if os.path.isdir(DIR):
- sys.path.insert(0, os.path.dirname(DIR))
-except NameError:
- pass
-
-locale_app = os.path.join(os.path.abspath(
- os.path.dirname(__file__)), 'app', 'locale', 'i18n_es.qm')
-
-
-class Client(object):
-
- def __init__(self, parent=None):
- self.app = QApplication(sys.argv)
- self.translator = QTranslator()
- self.translator.load(locale_app)
- self.app.installTranslator(self.translator)
-
- def init_login(self):
- login = Login(file_config='config_pos.ini')
-
- while not login.connection:
- login.run()
- login.exec_()
-
- return login.connection, login.params
-
- def main(self, conn, params):
- mw = mainwindow.MainWindow(conn, params)
- self.app.exec_()
-
-
-client = Client()
-conn, params = client.init_login()
-
-if conn:
- client.main(conn, params)
-sys.exit()
diff --git a/posproc b/posproc
deleted file mode 100644
index b3166a5..0000000
Binary files a/posproc and /dev/null differ
diff --git a/project.pro b/project.pro
index 4a18dff..4f8b30d 100644
--- a/project.pro
+++ b/project.pro
@@ -1,3 +1,3 @@
# Execute in terminal $ pylupdate5 project.pro
-SOURCES = app/mainwindow.py app/dialogs.py app/reporting.py app/buttonpad.py app/commons/custom_button.py app/commons/buttons.py app/commons/dblogin.py app/commons/dialogs.py app/commons/forms.py app/frontwindow.py app/commons/menu_list.py app/commons/search_window.py
+SOURCES = app/mainwindow.py app/frontwindow.py app/status_bar.py app/stack_messages.py app/dialogs.py app/reporting.py app/buttonpad.py app/commons/custom_button.py app/commons/buttons.py app/commons/dblogin.py app/commons/dialogs.py app/commons/forms.py app/commons/menu_list.py app/commons/search_window.py app/commons/messages.py
TRANSLATIONS = app/locale/i18n_es.ts
diff --git a/setup.py b/setup.py
index 293ea34..bbbe982 100644
--- a/setup.py
+++ b/setup.py
@@ -15,7 +15,7 @@ args = {}
data_files = [
('app', glob.glob('*.ini')),
- ('app/frontend', glob.glob('pos/share/*.css')),
+ ('app/commons', glob.glob('pos/share/*.css')),
('app/share', glob.glob('app/share/*.png')),
('app/locale', glob.glob('app/locale/*.qm')),
]