add session for requests

add funtion logout
This commit is contained in:
Wilson Gomez 2023-06-23 10:26:54 -05:00
parent fc4931428f
commit 72113fbb96
6 changed files with 52 additions and 226 deletions

View File

@ -43,17 +43,6 @@ 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
self.ui = Ui_Login()
self.ui.setupUi(self)
self.verify_conn_th = VerifyConn(self)
@ -94,82 +83,6 @@ class Login(QDialog):
self.accept()
event.accept()
# def init_UI(self):
# hbox_logo = QHBoxLayout()
# label_logo = QLabel()
# label_logo.setObjectName('label_logo')
# hbox_logo.addWidget(label_logo, 0)
# pixmap_logo = QPixmap(path_logo)
# label_logo.setPixmap(pixmap_logo)
# hbox_logo.setAlignment(label_logo, Qt.AlignHCenter)
# values = OrderedDict([
# ('host', {'name': 'SERVIDOR', 'readonly': True}),
# ('database', {'name': 'BASE DE DATOS', 'readonly': True}),
# ('user', {'name': 'USUARIO'}),
# ('password', {'name': 'CONTRASEÑA'}),
# ])
# formLayout = GridForm(self, values=values, col=1)
# self.field_password.setEchoMode(QLineEdit.Password)
# self.field_password.textChanged.connect(self.clear_message)
# box_buttons = QDialogButtonBox()
# if self.params.get('option_offline') == 'True':
# pushButtonOffline = QPushButton("ONLINE")
# pushButtonOffline.setObjectName('button_offline')
# pushButtonOffline.setIcon(
# self.style().standardIcon(getattr(QStyle, 'SP_DriveNetIcon')))
# box_buttons.addButton(
# pushButtonOffline, QDialogButtonBox.ActionRole)
# pushButtonCancel = QPushButton("C&ANCELAR")
# pushButtonCancel.setObjectName('button_cancel')
# box_buttons.addButton(pushButtonCancel, QDialogButtonBox.RejectRole)
# pushButtonOk = QPushButton("&CONNECTAR")
# pushButtonOk.setAutoDefault(True)
# pushButtonOk.setDefault(False)
# pushButtonOk.setObjectName('button_ok')
# box_buttons.addButton(pushButtonOk, QDialogButtonBox.AcceptRole)
# hbox_buttons = QHBoxLayout()
# hbox_buttons.addWidget(box_buttons)
# line = QFrame()
# line.setFrameShape(line.HLine)
# line.setFrameShadow(line.Sunken)
# hbox_line = QHBoxLayout()
# hbox_line.addWidget(line)
# hbox_msg = QHBoxLayout()
# self.error_msg = QLabel('Error: usuario o contraseña invalida...!')
# self.error_msg.setObjectName('login_msg_error')
# self.error_msg.setAlignment(Qt.AlignCenter)
# hbox_msg.addWidget(self.error_msg)
# hbox_version = QHBoxLayout()
# label_version = QLabel('VERSION: ' + __version__)
# label_version.setMargin(20)
# font_version = QFont('Times')
# label_version.setFont(font_version)
# hbox_version.addWidget(label_version)
# hbox_version.setAlignment(Qt.AlignCenter)
# vbox_layout = QVBoxLayout()
# vbox_layout.addLayout(hbox_logo)
# vbox_layout.addLayout(formLayout)
# vbox_layout.addLayout(hbox_msg)
# vbox_layout.addLayout(hbox_line)
# vbox_layout.addLayout(hbox_buttons)
# vbox_layout.addLayout(hbox_version)
# self.setLayout(vbox_layout)
# self.setWindowTitle('Login Presik System')
# self.clear_message()
# self.field_password.setFocus()
# box_buttons.accepted.connect(self.accept)
# box_buttons.rejected.connect(self.reject)
# box_buttons.clicked.connect(self.clicked)
def clear_message(self):
self.error_msg.hide()
@ -240,16 +153,10 @@ def xconnection(mode, user, password, host, database, port):
conn = HTTPConnection(host, port=port, timeout=10)
else:
conn = HTTPSConnection(host, port=port, timeout=10, context=context_http)
url = '/' + database + '/login'
url = '/' + database + '/fast_login'
payload = {
'method': "common.db.login",
'params': [
user,
{'device_cookie': None, 'password': password},
"es",
],
'id': 0,
'context': {},
'username': user,
'passwd': password
}
try:
conn.request('POST', url, body=json.dumps(payload), headers=HEADERS)
@ -258,9 +165,6 @@ def xconnection(mode, user, password, host, database, port):
status = 408
response = None
print(e, 'error')
# url = '%s://%s:%s@%s:%s/%s/' % (
# mode, user, password, host, 8000, database)
try:
res = json.loads(response.read())
if not res.get('status'):
@ -279,38 +183,3 @@ def xconnection(mode, user, password, host, database, port):
conn.close()
return res
# return connection.set_xmlrpc(url)
# def safe_reconnect(main):
# field_password = QLineEdit()
# field_password.setEchoMode(QLineEdit.Password)
# field_password.cursorPosition()
# field_password.cursor()
# dialog_password = QuickDialog(main, 'question',
# info=main.tr('Enter your password:'),
# widgets=[field_password],
# buttons=['ok'],
# response=True
# )
# field_password.setFocus()
# password = field_password.text()
# if not password or password == '':
# safe_reconnect(main)
# main.conn = xconnection(
# main.user,
# str(password),
# main.server,
# main.port,
# main.database,
# main.protocol,
# )
# if main.conn:
# field_password.setText('')
# dialog_password.hide()
# main.global_timer = 0
# else:
# safe_reconnect(main)

View File

@ -10,7 +10,7 @@ from PySide6.QtCore import QTimer, QThread, Signal
from PySide6.QtGui import QGuiApplication
from .commons.dialogs import QuickDialog
# from .commons.dblogin import safe_reconnect
from .proxy import Model
from .proxy import Model, logout
from .constants import SCREENS
from .dialogs import (
Help, ControlPanel, SearchSale, SearchParty, SearchProduct, Position,
@ -108,32 +108,18 @@ class FrontWindow(QMainWindow):
styles.append(infile.read())
self.setStyleSheet(''.join(styles))
# def set_timeout(self):
# if self.active_timeout != 'True':
# return
# self.timeout = eval(self.timeout)
# if not self.timeout:
# self.timeout = _DEFAULT_TIMEOUT
# timer = QTimer(self)
# timer.timeout.connect(self.count_time)
# timer.start(1000)
# def count_time(self):
# self.global_timer += 1
# if self.global_timer > self.timeout:
# self.global_timer = 0
# print('error esta linea no debia ejecutarse')
# # safe_reconnect()
def close(self):
def closeEvent(self, event):
dialog = self.dialog('confirm_exit', response=True)
response = dialog.exec_()
if response == DIALOG_REPLY_YES:
self.check_empty_sale()
logout(self.ctx)
if self.active_weighing and self.reader_thread:
self.reader_thread.onClose()
super(FrontWindow, self).close()
else:
event.ignore()
def dialog(self, name, response=False, widgets=None, extra_message=None):
kind, msg = self.stack_msg[name]
@ -150,15 +136,6 @@ class FrontWindow(QMainWindow):
v = eval(v)
setattr(self, k, v)
# def action_block(self):
# safe_reconnect(self)
# def dialog_password_accept(self):
# self.connection()
# def dialog_password_rejected(self):
# self.connection()
def keyReleaseEvent(self, event):
self._keyStates[event.key()] = False
@ -242,10 +219,6 @@ class FrontWindow(QMainWindow):
self.sale_automatic = True
res = self.Sale.fields_get(['commission'])
self._commission_activated = True if res.get('commission') else False
# self._source = self.Module.find([
# ('name', '=', 'sale_source'),
# ('state', '=', 'activated'),
# ])
self._credit_limit_activated = self.Module.find([
('name', '=', 'account_credit_limit'),
('state', '=', 'activated'),

View File

@ -177,7 +177,7 @@ class AppWindow(FrontWindow):
self.active_usb_printers.append(['usb', path_device])
def get_current_sale(self):
if hasattr(self, '_sale') and self._sale['id']:
if hasattr(self, '_sale') and self._sale.get('id'):
sales = self.Sale.find([
('id', '=', self._sale['id'])
])
@ -2784,12 +2784,14 @@ class AppWindow(FrontWindow):
self._sale_line = res
self._current_line_id = res['id']
self.add_sale_line(res)
if record:
self._sale_line['product'] = record
self.product_id = product_id
self.message_bar.set('system_ready')
self.set_amounts()
self.set_state('add')
if record:
self._sale_line['product'] = record
if len(record.get('products_mix')) > 0:
self.action_combo(record['code'])
def _check_stock_quantity(self, product, request_qty=None):
if not isinstance(product['quantity'], (str, int, float, Decimal)):
@ -3100,12 +3102,13 @@ class AppWindow(FrontWindow):
self.validate_discount(rec, _line)
self.dialog_product_edit.close()
def action_combo(self):
line = self.dialog_product_edit.get()
try:
code = line['product.']['code']
except:
code = line['product']['code']
def action_combo(self, code=None):
if not code:
line = self.dialog_product_edit.get()
try:
code = line['product.']['code']
except:
code = line['product']['code']
product = self.Product.find(
[('code', '=', code)],
fields=["code", "description", "extra_tax", "name", "sale_uom",

View File

@ -111,9 +111,11 @@ MODELS_RESTAURANT = {
'shop.product_categories.products.id',
'shop.product_categories.products.name',
'shop.product_categories.products.code',
'shop.product_categories.products.products_mix',
'shop.product_categories.childs.products.id',
'shop.product_categories.childs.products.name',
'shop.product_categories.childs.products.code',
'shop.product_categories.childs.products.products_mix',
'journal.name',
'journal.kind',
'journal.require_voucher',

View File

@ -6,8 +6,6 @@ from datetime import date
from decimal import Decimal
from http.client import HTTPConnection, HTTPSConnection
import orjson as json
# import simplejson as json
# import requests
try:
from app.models import MODELS_RESTAURANT, MODELS_RETAIL
except:
@ -39,6 +37,30 @@ def encoder(obj):
return str(obj)
raise TypeError(repr(obj) + " is not JSON serializable")
def logout(ctx):
port = ctx['params']['port']
host = ctx['params']['server']
db = ctx['params']['database']
if ctx['params']['mode'] == 'http':
conn = HTTPConnection(host, port=port)
else:
conn = HTTPSConnection(host, port=port, context=context_http)
url = '/' + db + '/logout'
payload = json.dumps(
{
'session':ctx['session'],
'login': ctx['login']
},
default=encoder)
conn.request('POST', url, body=payload, headers=HEADERS)
response = conn.getresponse()
if response.status != 200:
res = response.read()
else:
res = json.loads(response.read())
conn.close()
return res
class Model(object):
@ -48,6 +70,7 @@ class Model(object):
self.port = ctx['params']['port']
self.host = ctx['params']['server']
self.db = ctx['params']['database']
HEADERS['Authorization'] = "Bearer " + ctx['session']
# self.api = 'http://localhost:8010/ZIRUS'
if ctx['params']['mode'] == 'http':
self.conn = HTTPConnection
@ -98,10 +121,6 @@ class Model(object):
}
res = self.get_connection('POST', '/fields_get', args_)
return res
# route = self.get_route('search')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
# return res.json()
def write_many(self, ids, values, fields=None):
if not fields:
@ -115,10 +134,6 @@ class Model(object):
}
res = self.get_connection('POST', '/save_many', args_)
return res
# route = self.get_route('save_many')
# data = json.dumps(args_, default=encoder)
# res = requests.put(route, data=data)
# return res.json()
def write(self, ids, values, fields=None):
if not fields:
@ -134,10 +149,6 @@ class Model(object):
}
res = self.get_connection('POST', '/write', args_)
return res
# route = self.get_route('write')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
# return res.json()
def create(self, values):
if values.get('rec_name'):
@ -159,10 +170,6 @@ class Model(object):
}
res = self.get_connection('POST', '/method_instance', args_)
return res
# route = self.get_route('create')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
# return res.json()
def delete(self, ids):
args_ = {
@ -172,14 +179,6 @@ class Model(object):
}
res = self.get_connection('POST', '/delete', args_)
return res
# route = self.get_route('delete')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
# return res.json()
# def get_route(self, target):
# route = self.api + '/' + target
# return route
def get_connection(self, method, target, data=None):
url = '/' + self.db + target
@ -223,15 +222,6 @@ class Model(object):
}
res = self.get_connection('POST', '/button_method', args_)
return res
# route = self.get_route('method')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
# response = None
# try:
# response = res.json()
# except ValueError:
# pass
# return response
class Report(object):
@ -261,10 +251,6 @@ class Report(object):
conn.close()
return res
# def get_route(self, target):
# route = self.api + '/' + target
# return route
def get(self, values):
args_ = {
'report': values['report_name'],
@ -275,16 +261,9 @@ class Report(object):
}
res = self.get_connection('POST', '/report', args_)
return res
# route = self.get_route('report')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)
def open(self, args):
oext, content, direct_print, file_name = args
# oext = args['oext']
# content = args['content']
# direct_print = args['direct_print']
# name = args['name']
dtemp = tempfile.mkdtemp(prefix='tryton_')
fp_name = os.path.join(

View File

@ -423,17 +423,17 @@ class Receipt(object):
self._printer = None
self.config_printer(value['printer'])
self.set_printer()
sale = value['sale']['number']
title = value['sale'] + ' - ' + value['work_station']
self._printer.set(custom_size=True, width=2,
height=2, align='center')
self._printer.textln(sale)
self._printer.textln(title)
self._printer.set(custom_size=False)
self._printer.ln(2)
for ln in value['lines']:
line_ = str(int(ln['qty'])) + ' ' + ln['name']
self._printer.textln(line_)
desc = ln['description']
self._printer.textln(desc)
if ln.get('description'):
self._printer.textln(ln.get('description'))
if ln.get('note'):
self._printer.textln('NOTA:' + ln.get('note'))
self._printer.ln(2)