diff --git a/app/commons/config.py b/app/commons/config.py index 70a87e6..9d12f57 100644 --- a/app/commons/config.py +++ b/app/commons/config.py @@ -1,5 +1,5 @@ import os - +import shutil # from PyQt5.QtCore import QSettings from PySide6.QtCore import QSettings @@ -13,7 +13,8 @@ class Params(object): def __init__(self, file_): self.file = file_ - dirx = os.path.abspath(os.path.join(__file__, '..', '..')) + current_path = os.path.abspath(__file__) + dirx = os.path.abspath(os.path.join(current_path, '..', '..', '..')) if os.name == 'posix': homex = 'HOME' @@ -25,15 +26,16 @@ class Params(object): HOME_DIR = os.getenv(homex) default_dir = os.path.join(HOME_DIR, dirconfig) - if os.path.exists(default_dir): - config_file = os.path.join(default_dir, self.file) - else: - config_file = os.path.join(dirx, self.file) + if not os.path.exists(default_dir): + os.makedirs(default_dir) + + self.config_file = os.path.join(default_dir, self.file) - if not os.path.exists(config_file): - config_file = self.file + if not os.path.exists(self.config_file): + config_file_path = os.path.join(dirx, self.file) + shutil.copy2(config_file_path, self.config_file) - settings = QSettings(config_file, QSettings.IniFormat) + settings = QSettings(self.config_file, QSettings.IniFormat) self.params = { "server": "localhost", "port": "8010", diff --git a/app/commons/dblogin.py b/app/commons/dblogin.py index 65f6bb1..8e99c73 100644 --- a/app/commons/dblogin.py +++ b/app/commons/dblogin.py @@ -4,7 +4,6 @@ import sys import os import gettext import logging -import time import ssl from pathlib import Path from PySide6.QtWidgets import QDialog @@ -14,6 +13,7 @@ from http.client import HTTPConnection, HTTPSConnection import orjson as json from app.threads import VerifyConn from app.commons.config import Params +from app.commons.dialogs import ConfigEditDialog from app.commons.ui_login import Ui_Login from logger_config import logger context_http = ssl._create_unverified_context() @@ -145,6 +145,19 @@ class Login(QDialog): def error_message(self): self.ui.label_error.show() + + def open_config_file(self): + config_file_path = "/home/psk/.tryton/config_pos.ini" # Reemplaza con tu ruta real + dialog = ConfigEditDialog(config_file_path) + dialog.exec_() + + def show_about(self): + # Aquí debes implementar la lógica para mostrar el diálogo de configuración + # Puedes crear una nueva ventana de configuración o un cuadro de diálogo modal. + # Por ejemplo: + print('pasa a mos') + # config_dialog = ConfigDialog(self) + # config_dialog.exec_() def xconnection(mode, user, password, host, database, port): diff --git a/app/commons/dialogs.py b/app/commons/dialogs.py index aef585a..0db888a 100644 --- a/app/commons/dialogs.py +++ b/app/commons/dialogs.py @@ -9,7 +9,7 @@ from collections import OrderedDict # from PyQt5.QtCore import Qt, pyqtSlot, QModelIndex from PySide6.QtWidgets import ( QDialog, QAbstractItemView, QVBoxLayout, QHBoxLayout, QLabel, QWidget, - QTreeView, QLineEdit, QTableView, QCompleter + QTreeView, QLineEdit, QTableView, QCompleter, QPushButton, QTextEdit ) from PySide6.QtGui import QStandardItem, QStandardItemModel, QPixmap, QGuiApplication from PySide6.QtCore import Qt, Slot, QModelIndex @@ -18,7 +18,7 @@ from .qt_models import get_simple_model from .forms import GridForm from .buttons import ActionButton -__all__ = ['QuickDialog', 'SearchDialog', 'HelpDialog', 'FactoryIcons'] +__all__ = ['QuickDialog', 'SearchDialog', 'HelpDialog', 'FactoryIcons', 'ConfigEditDialog'] current_dir = os.path.dirname(__file__) @@ -381,3 +381,44 @@ class FactoryIcons(object): _icon_label.setAlignment(Qt.AlignCenter | Qt.AlignCenter) _icon_label.setPixmap(_qpixmap_icon.scaledToHeight(48)) self.icons[name] = _icon_label + + +class ConfigEditDialog(QDialog): + def __init__(self, config_file_path): + super(ConfigEditDialog, self).__init__() + + self.setWindowTitle("Editar Configuración") + width, height = get_screen() + self.setGeometry(100, 100, int(width*0.8), int(height*0.8)) + + self.config_file_path = config_file_path + + self.layout = QVBoxLayout() + + self.text_edit = QTextEdit(self) + self.layout.addWidget(self.text_edit) + + self.save_button = QPushButton("Guardar") + self.save_button.clicked.connect(self.save_config) + self.layout.addWidget(self.save_button) + + self.load_config() + + self.setLayout(self.layout) + + def load_config(self): + try: + with open(self.config_file_path, 'r') as file: + config_text = file.read() + self.text_edit.setPlainText(config_text) + except FileNotFoundError: + self.text_edit.setPlainText("Archivo de configuración no encontrado.") + + def save_config(self): + config_text = self.text_edit.toPlainText() + try: + with open(self.config_file_path, 'w') as file: + file.write(config_text) + except Exception as e: + print(f"Error al guardar el archivo de configuración: {str(e)}") + diff --git a/app/commons/ui_login.py b/app/commons/ui_login.py index 6c746a6..5dce9f8 100644 --- a/app/commons/ui_login.py +++ b/app/commons/ui_login.py @@ -4,7 +4,7 @@ from PySide6.QtCore import (QSize, Qt, QRect) from PySide6.QtGui import (QFont, QIcon, QPixmap) from PySide6.QtWidgets import (QGridLayout, QGroupBox, QLabel, QLayout, QPushButton, QLineEdit, QVBoxLayout, QWidget, - QHBoxLayout) + QHBoxLayout, QMenuBar) from ..version import __version__ from ..tools import get_screen @@ -45,6 +45,7 @@ class Ui_Login(object): MainWindow.setWindowIcon(icon) MainWindow.setWindowOpacity(1.0) MainWindow.setStyleSheet(STYLE) + MainWindow.setWindowTitle("Login presik pos") # MainWindow.setStyleSheet(u"margin:0;background-color: rgb(246, 245, 244);") self.centralwidget = QWidget(MainWindow) self.centralwidget.setObjectName(u"centralwidget") @@ -255,3 +256,16 @@ class Ui_Login(object): self.pushButtonOk.clicked.connect(MainWindow.accept) self.pushButtonCancel.clicked.connect(MainWindow.reject) self.field_password.editingFinished.connect(MainWindow.accept) + + menubar = QMenuBar(self.centralwidget) + file_menu = menubar.addMenu("Opciones") + + action_config = file_menu.addAction("Configuracion") + action_about = file_menu.addAction("Acerca de") + + # Connect the action to a slot or function for handling the action + action_config.triggered.connect(MainWindow.open_config_file) + action_about.triggered.connect(MainWindow.show_about) + + self.gridLayout_2.setMenuBar(menubar) + diff --git a/app/main.py b/app/main.py index 074e9b3..709e0a5 100644 --- a/app/main.py +++ b/app/main.py @@ -2107,11 +2107,11 @@ class AppWindow(FrontWindow): ('payment_term', '=', self.default_payment_term['id']), ('payment_term', '=', None), ], - ('reservation', '!=', True) + ('reservation', 'in', [None, False]), ]) elif _type == 'credit': dom.extend([ - ['reservation', '!=', True], + ['reservation', 'in', [None, False]], ['payment_term', '!=', self.default_payment_term['id']] ]) elif _type == 'reservation': diff --git a/app/version.py b/app/version.py index 210e99a..a0d7984 100644 --- a/app/version.py +++ b/app/version.py @@ -1 +1 @@ -__version__ = "6.0.29" +__version__ = "6.0.30" diff --git a/pospro b/pospro index 414f1d5..058d2de 100755 --- a/pospro +++ b/pospro @@ -6,9 +6,7 @@ import argparse import setproctitle import psutil import ctypes -from PySide6.QtCore import Qt, QCoreApplication from PySide6.QtWidgets import QApplication, QMessageBox -# from PyQt5.QtWidgets import QApplication from app.commons.dblogin import Login from app import main from logger_config import logger