add option payment with sale_device

This commit is contained in:
Wilson Gomez 2023-11-06 09:17:18 -05:00
parent 5777776a30
commit 299528fa97
7 changed files with 90 additions and 52 deletions

View File

@ -1,4 +1,5 @@
import os
# from PyQt5.QtCore import QSettings
from PySide6.QtCore import QSettings
@ -39,6 +40,7 @@ class Params(object):
"mode": "http",
"database": "DBNAME",
"user": None,
"sale_device_code": None,
"printer_sale_name": None,
"profile_printer": "TM-P80",
"row_characters": "48",

View File

@ -377,7 +377,7 @@ class ComboBox(QComboBox):
selection_model = get_simple_model(obj, values, heads)
self.setModel(selection_model)
self.setModelColumn(1)
selection_model.findItems(str(3), column=0)
# selection_model.findItems(str(3), column=0)
self.method_on_change = None
self.currentIndexChanged.connect(self.on_change)
if data.get('default'):
@ -426,6 +426,23 @@ class ComboBox(QComboBox):
idx = model.indexFromItem(items[0])
self.setCurrentIndex(idx.row())
def updateComboBox(self, id_):
"only call this function if you don't need require execute onchange"
# Block signals temporarily
self.blockSignals(True)
# Set the desired value in the QComboBox
if id_:
model = self.model()
items = model.findItems(str(id_), column=0)
idx = model.indexFromItem(items[0])
self.setCurrentIndex(idx.row())
else:
self.setCurrentIndex(-1)
# Unblock signals after setting the value
self.blockSignals(False)
def set_none(self):
self.setCurrentIndex(0)

View File

@ -1,14 +1,13 @@
import os
import time
from datetime import date
import logging
import os
from datetime import date
from pathlib import Path
from PySide6.QtWidgets import QMainWindow, QLineEdit
from PySide6.QtGui import QGuiApplication
from PySide6.QtWidgets import QLineEdit, QMainWindow
from .commons.dialogs import QuickDialog
# from .commons.dblogin import safe_reconnect
from .proxy import Model, logout
from .constants import SCREENS
from .constants import DIALOG_REPLY_YES, SCREENS
from .dialogs import (
Help, ControlPanel, SearchSale, SearchParty, SearchProduct, Position,
Comment, DialogPayment, DialogVoucher, DialogPrintInvoice, ProductEdit,
@ -24,10 +23,9 @@ from .dialogs import (
DialogSaleToTransfer, DialogSearchFolioTransfer,
DialogSearchSaleTransfer
)
from .constants import DIALOG_REPLY_YES
from .proxy import Model, logout
from .version import __version__
__all__ = ['FrontWindow']
parent = Path(__file__).parent
@ -246,14 +244,33 @@ class FrontWindow(QMainWindow):
self.User = Model('res.user', self.ctx, main_window=self)
self._user, = self.User.find([('login', '=', self.user)])
self.Company = Model('company.company', self.ctx, main_window=self)
self.Device = Model('sale.device', self.ctx, main_window=self)
self._company, = self.Company.find([('id', '=', 1)])
self.logo = self._company['logo']
sale_device = self._user['sale_device']
if not sale_device:
if not sale_device and not self.sale_device_code:
return 'user_not_permissions_device'
if self.sale_device_code:
dom_device = ('code', '=', self.sale_device_code)
else:
dom_device = ('id', '=', sale_device)
devices = self.Device.find([dom_device])
if not devices:
return 'user_not_permissions_device'
self.device = devices[0]
shop_id = self.device['shop.']['id']
if shop_id not in self._user['shops']:
return 'user_not_permissions_device'
self.sale_device = self.device['id']
self.ctx['user'] = self._user['id']
self.ctx['sale_device'] = sale_device
self.ctx['sale_device'] = self.device['id']
self.ctx['shop'] = self._user['shop']
self.SaleLine = Model('sale.line', self.ctx, main_window=self)
@ -264,7 +281,6 @@ class FrontWindow(QMainWindow):
self.Employee = Model('company.employee', self.ctx, main_window=self)
self.Shop = Model('sale.delivery_party', self.ctx, main_window=self)
self.SaleDiscont = Model('sale.discount', self.ctx, main_window=self)
self.Device = Model('sale.device', self.ctx, main_window=self)
self.Category = Model('product.category', self.ctx, main_window=self)
self.PaymentTerm = Model('account.invoice.payment_term', self.ctx, main_window=self)
self.Party = Model('party.party', self.ctx, main_window=self)
@ -278,15 +294,12 @@ class FrontWindow(QMainWindow):
self.Agent = Model('commission.agent', self.ctx, main_window=self)
self.Comission = Model('commission', self.ctx, main_window=self)
self.device, = self.Device.find([
('id', '=', self._user['sale_device']),
])
self.shop = self.device['shop.']
self.shop_taxes = self.shop['taxes.']
self.company = self.shop['company']
self._journals = self.device['journals.']
self.salesman_ids = [s['id'] for s in self.shop.get('salesmans', [])]
self.sellers = {s['code']: s for s in self.shop.get('salesmans.', [])}
# dom_salesman = [
# ('company', '=', self.company),

View File

@ -1196,8 +1196,7 @@ class AppWindow(FrontWindow):
return
if not salesman:
return self.dialog('error_salesman_wrong')
else:
self.salesman = salesman
self.salesman = salesman
self.Sale.write([self.sale_id], {'salesman': salesman['id']})
self.store.update({'salesman': salesman})
@ -1254,16 +1253,17 @@ class AppWindow(FrontWindow):
return
result = self.dialog_salesman_code.exec_()
code = self.field_salesman_code_ask.text()
if result == 0:
# Cancelled the action
return result
if not code:
return
salesman_list = self.Employee.find([
('code', '=', code)
])
if salesman_list:
return salesman_list[0]
if result != 0 and code:
seller = None
if code in self.sellers:
seller = self.sellers[code]
else:
sellers = self.Employee.find([('code', '=', code)])
if sellers:
seller = sellers[0]
self.sellers[code] = seller
return seller
return 0
def action_delivery_party(self):
self.dialog_delivery_party.exec_()
@ -1290,7 +1290,7 @@ class AppWindow(FrontWindow):
def open_statement_accepted(self, value):
res = self.Sale.faster_open_statement({
'device': self.device['id'],
'device': self.sale_device,
'total_money': Decimal(value),
})
if res['result']:
@ -1313,7 +1313,7 @@ class AppWindow(FrontWindow):
send_mail = self.field_send_mail.isChecked()
self.field_send_mail.setChecked(False)
res = self.Sale.faster_close_statement({
'device': self.device['id'],
'device': self.sale_device,
'data': values,
'salesman': salesman['id'],
'send_mail': send_mail,
@ -1382,10 +1382,10 @@ class AppWindow(FrontWindow):
'state': 'draft',
'comment': _sale['comment'],
}
sale = self.Sale.new_sale(to_create)
sale = self.Sale.new_sale(args=[to_create])
self.SaleLine.write(lines_ids, {'sale': sale['id']})
number = self.Sale.set_sale_number({'sale_id': sale['id']})
number = self.Sale.set_sale_number(args=[{'sale_id': sale['id']}])
self.dialog_split_sale.info(number)
self.set_amounts()
@ -1520,7 +1520,9 @@ class AppWindow(FrontWindow):
'cash_received': to_numeric(float(amount)),
'voucher_number': voucher_number,
'extra_paid': False,
}, ctx={'advance': True, 'reservation': reservation})
'advance': True,
'reservation': reservation
})
if res.get('msg') not in ('missing_money', 'ok'):
self.dialog(res['msg'])
@ -2353,12 +2355,13 @@ class AppWindow(FrontWindow):
('state', '=', 'draft'),
('date', '=', values['date']),
('company', '=', company),
('sale_device.shop', '=', shop)
('sale_device.shop', '=', shop),
], fields=['id'])
if statements:
return
values['company'] = company
values['shop'] = shop
values['device'] = self.sale_device
self.dialog_reports.open_report(report_name, values)
def action_terminal_journal_report(self):
@ -2663,7 +2666,7 @@ class AppWindow(FrontWindow):
'invoice_type': invoice_type[0][0],
'company': self.company,
'party': self.default_party['id'],
'sale_device': self.device['id'],
'sale_device': self.sale_device,
'payment_method': 'cash',
'payment_term': self.default_payment_term['id'],
'kind': 'take_away',
@ -2704,7 +2707,6 @@ class AppWindow(FrontWindow):
if self.type_pos_user == 'cashier':
self.message_bar.set('not_sale')
return
if self.salesman_required and not self.salesman:
salesman = self.action_salesman_code()
if salesman == 0:
@ -2712,8 +2714,7 @@ class AppWindow(FrontWindow):
return
if not salesman:
return self.dialog('error_salesman_wrong')
else:
self.salesman = salesman
self.salesman = salesman
if self.environment == 'restaurant' and self._sale_pos_restaurant:
self.dialog_consumer.clear()
@ -2743,7 +2744,7 @@ class AppWindow(FrontWindow):
'invoice_type': invoice_type[0][0],
'company': self.company,
'party': self.default_party['id'],
'sale_device': self.device['id'],
'sale_device': self.sale_device,
'payment_method': 'cash',
'payment_term': self.default_payment_term['id'],
'kind': kind,
@ -2753,7 +2754,7 @@ class AppWindow(FrontWindow):
to_create.update({'salesman': self.salesman['id']})
if self.environment != 'restaurant' and self._config.get('use_price_list'):
self.field_list_price.set_from_id(self.shop['price_list.']['id'])
sale = self.Sale.new_sale(to_create)
sale = self.Sale.new_sale(args=[to_create])
self.store.set(sale)
self.sale_id = sale['id']
@ -3358,10 +3359,13 @@ class AppWindow(FrontWindow):
res = self.Sale.faster_add_payment({
'sale_id': self.sale_id,
'journal_id': journal['id'],
'sale_device': self.sale_device,
'cash_received': to_numeric(amount),
'voucher_number': voucher_number,
'extra_paid': False,
}, ctx={'advance': False, 'reservation': False})
'advance': False,
'reservation': False
})
if res.get("msg") and res.get('msg') not in ('missing_money', 'ok') or res.get('error'):
if res.get("msg"):
self.dialog(res['msg'])

View File

@ -15,7 +15,7 @@ MODELS_RESTAURANT = {
},
'res.user': {
'rec_name': 'name',
'fields': ['name', 'sale_device', 'type_pos_user', 'shop']
'fields': ['name', 'sale_device', 'type_pos_user', 'shop', 'shops']
},
'product.category': {
'rec_name': 'name',
@ -124,7 +124,7 @@ MODELS_RESTAURANT = {
'shop.invoice_copies', 'shop.pos_authorization', 'shop.discounts',
'shop.computer_authorization', 'shop.manual_authorization',
'shop.credit_note_electronic_authorization',
'shop.salesmans.rec_name', 'shop.discount_pos_method',
'shop.salesmans.rec_name', 'shop.salesmans.code', 'shop.discount_pos_method',
'shop.debit_note_electronic_authorization',
'shop.delivery_man.rec_name', 'shop.price_list.name',
'shop.order_copies', 'shop.delivery_man.active',
@ -134,7 +134,7 @@ MODELS_RESTAURANT = {
'rec_name': 'name',
'fields': [
'taxes', 'product_categories', 'party', 'invoice_copies',
'warehouse', 'payment_term', 'salesmans', 'delivery_man',
'warehouse', 'payment_term', 'delivery_man',
'discounts', 'price_list', 'order_copies']
},
'product.product': {
@ -242,7 +242,7 @@ MODELS_RETAIL = {
},
'res.user': {
'rec_name': 'name',
'fields': ['name', 'sale_device', 'type_pos_user', 'shop']
'fields': ['name', 'sale_device', 'type_pos_user', 'shop', 'shops']
},
'product.category': {
'rec_name': 'name',
@ -347,7 +347,7 @@ MODELS_RETAIL = {
'shop.invoice_copies', 'shop.pos_authorization', 'shop.discounts',
'shop.computer_authorization', 'shop.manual_authorization',
'shop.credit_note_electronic_authorization',
'shop.salesmans.rec_name', 'shop.delivery_man.active',
'shop.salesmans.rec_name', 'shop.salesmans.code', 'shop.delivery_man.active',
'shop.debit_note_electronic_authorization',
'shop.delivery_man.rec_name', 'shop.price_list.name',
'shop.order_copies'
@ -357,7 +357,7 @@ MODELS_RETAIL = {
'rec_name': 'name',
'fields': [
'taxes', 'product_categories', 'party', 'invoice_copies',
'warehouse', 'payment_term', 'salesmans', 'delivery_man',
'warehouse', 'payment_term', 'delivery_man',
'discounts', 'price_list', 'order_copies']
},
'product.product': {

View File

@ -53,10 +53,11 @@ class StoreView(object):
val = tr(val)
field.setText(str(val))
elif isinstance(field, ComboBox):
if v:
field.set_from_id(v)
else:
field.set_none()
field.updateComboBox(v)
# if v:
# field.set_from_id(v)
# else:
# field.set_none()
def update(self, values):
"""

View File

@ -5,6 +5,7 @@ port=8010
mode=http
database=DBNAME
user=admin
sale_device_code=001
#########################################
# Printer Interface and Printer name