Add combine products

This commit is contained in:
Oscar Alvarez 2020-12-30 15:51:52 -05:00
parent c0cd88f064
commit 5740970604
11 changed files with 327 additions and 310 deletions

View file

@ -68,7 +68,7 @@ class QuickDialog(QDialog):
elif kind == 'action':
if widgets:
data_widget = widgets[0]
else:
elif data:
data_widget = GridForm(parent, OrderedDict(data))
elif kind == 'selection':
self.name = data['name']
@ -116,7 +116,6 @@ class QuickDialog(QDialog):
def exec_(self, args=None):
res = None
# self.parent.releaseKeyboard()
res = super(QuickDialog, self).exec()
if self.kind == 'action':
pass
@ -137,6 +136,10 @@ class QuickDialog(QDialog):
super(QuickDialog, self).hide()
self.parent.setFocus()
def add_widget(self, widget):
_ = self.sub_hbox.takeAt(0)
self.sub_hbox.addLayout(widget, 0)
def set_info(self, info):
if hasattr(self, 'label_info'):
self.label_info.setText(info)

View file

@ -1,50 +0,0 @@
import os
from pathlib import Path
from functools import partial
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QLabel, QPushButton
css_small = 'product_button_small.css'
css_high = 'product_button_hd.css'
root_dir = str(Path(__file__).parent.parent)
__all__ = ['ProductButton']
class ProductButton(QPushButton):
def __init__(self, parent, id, text_up, text_bottom, method, target, size='small'):
super(ProductButton, self).__init__()
self.id = id
styles = []
if size == 'small':
css_file_screen = css_small
else:
css_file_screen = css_high
css_file = os.path.join(root_dir, 'css', css_file_screen)
with open(css_file, 'r') as infile:
styles.append(infile.read())
self.setStyleSheet(''.join(styles))
self.setObjectName('product_button')
if len(text_up) > 29:
text_up = text_up[0:29]
label1 = QLabel(text_up, self)
label1.setWordWrap(True)
label1.setAlignment(Qt.AlignCenter | Qt.AlignCenter)
label1.setObjectName('product_label_up')
label2 = QLabel(text_bottom, self)
label2.setAlignment(Qt.AlignCenter | Qt.AlignCenter)
label2.setObjectName('product_label_bottom')
method = getattr(parent, method)
if target:
method = partial(method, target)
self.clicked.connect(method)

View file

@ -1,5 +1,4 @@
from operator import itemgetter
from .commons.dialogs import HelpDialog, QuickDialog
from PyQt5.QtCore import QRect, Qt
from PyQt5.QtWidgets import (
@ -18,14 +17,14 @@ from .commons.custom_button import CustomButton
from .tools import get_icon
__all__ = [
'ControlPanel', 'SearchSale', 'SearchParty', 'SearchProduct', 'SaleLine',
'ControlPanel', 'SearchSale', 'SearchParty', 'SearchProduct', 'EditLine',
'Comment', 'Position', 'DialogPayment', 'DialogTaxes', 'DialogChannel',
'DialogTableMoneyCount', 'DialogTableDeliveryParty', 'DialogDeliveryParty',
'Help', 'DeliveryPartySelected', 'DialogPrintInvoice', 'DialogStock',
'DialogGlobalDiscountTable', 'DialogSalesman', 'DialogAgent',
'DialogOrder', 'DialogGlobalDiscount', 'DialogVoucher', 'DialogConsumer',
'DialogManageTables', 'DialogTableSaleConsumer', 'SaleConsumerSelected',
'DialogCancelInvoice', 'DialogForceAssign'
'DialogCancelInvoice', 'DialogForceAssign', 'AdditionProduct'
]
@ -48,6 +47,8 @@ def create_vbox(parent, values, method, columns=4, dimension=None):
vbox_ = QVBoxLayout()
grid = QGridLayout()
grid.setSpacing(2)
if isinstance(method, str):
method = getattr(parent, method)
grid_buttons = GridButtons(parent, values, columns, action=method,
style='standard_button')
@ -925,9 +926,9 @@ class DeliveryAmount(QWidget):
return QuickDialog(self._parent, 'action', data=[(_field, _data)])
class SaleLine(QWidget):
class EditLine(QWidget):
def __init__(self, parent):
super(SaleLine, self).__init__(parent)
super(EditLine, self).__init__(parent)
self._parent = parent
def get(self):
@ -996,17 +997,42 @@ class SaleLine(QWidget):
id='button_delete',
size='small',
icon=get_icon('delete_line'),
title='DELETE',
title=self.tr('DELETE'),
method='action_delete_line',
name_style='mini_button',
)
button_addition = CustomButton(
self._parent,
id='button_addition',
size='small',
icon=get_icon('addition-product'),
title=self.tr('ADDITION'),
method='action_addition_line',
name_style='mini_button',
)
hbox = QHBoxLayout()
vbox_product.addLayout(grid, 1)
vbox_product.addWidget(button_delete, 0)
vbox_product.addLayout(hbox, 0)
hbox.addWidget(button_delete, 0)
if self._parent.enviroment == 'restaurant':
hbox.addWidget(button_addition, 0)
dialog = QuickDialog(self._parent, 'action', widgets=[vbox_product], size=[600, 900])
dialog.accepted.connect(self._parent.dialog_product_edit_accepted)
return dialog
class AdditionProduct(QuickDialog):
def __init__(self, parent):
super(AdditionProduct, self).__init__(parent, 'selection')
self.setWindowTitle(self.tr('SELECT ADDITIONAL'))
self._parent = parent
def set_products(self, products):
vbox_ = create_vbox(self._parent, products, 'on_selected_item')
self.add_widget(vbox_)
class Help(HelpDialog):
def __init__(self, parent):

View file

@ -16,8 +16,8 @@ from .dialogs import (
Help, ControlPanel, SearchSale, SearchParty, SearchProduct, Position,
Comment, DialogPayment, DialogSalesman, DialogVoucher, DialogPrintInvoice,
DialogGlobalDiscount, DialogPaymentTerm, DialogStock, DialogOrder,
DialogForceAssign, DialogTaxes, DialogCancelInvoice, SaleLine, DialogAgent,
DialogConsumer, DialogManageTables, DialogTableMoneyCount,
DialogForceAssign, DialogTaxes, DialogCancelInvoice, EditLine, DialogAgent,
DialogConsumer, DialogManageTables, DialogTableMoneyCount, AdditionProduct,
DialogGlobalDiscountTable, DeliveryPartySelected, DialogTableDeliveryParty,
DialogTableSaleConsumer, SaleConsumerSelected, DialogChannel,
DialogDeliveryParty, TipAmount, DeliveryAmount
@ -245,7 +245,7 @@ class FrontWindow(QMainWindow):
self.field_password_force_assign_ask.setEchoMode(QLineEdit.Password)
self.dialog_tax = DialogTaxes(self).get()
self.dialog_cancel_invoice = DialogCancelInvoice(self).get()
self.dialog_product_edit = SaleLine(self).get()
self.dialog_product_edit = EditLine(self).get()
self.dialog_table_delivery_party = DialogTableDeliveryParty(self).get()
self.dialog_delivery_party_selected = DeliveryPartySelected(self).get()
self.dialog_delivery_party = DialogDeliveryParty(self).get()
@ -254,6 +254,7 @@ class FrontWindow(QMainWindow):
if self._commission_activated:
self.dialog_agent = DialogAgent(self).get()
if self.enviroment == 'restaurant' and self._sale_pos_restaurant:
self.dialog_addition_product = AdditionProduct(self)
self.dialog_table_sale_consumer = DialogTableSaleConsumer(self).get()
self.dialog_sale_consumer_selected = SaleConsumerSelected(self).get()
self.dialog_search_consumer = DialogConsumer(self).get()

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -1965,6 +1965,8 @@ class MainWindow(FrontWindow):
def sale_line_selected(self, line):
if self._state in ('cash', 'payment'):
return
print('xxxxxxxxxxx', line)
self._current_line = line
self._current_line_id = line['id']
product_id = None
if isinstance(line['product'], int):
@ -2208,6 +2210,20 @@ class MainWindow(FrontWindow):
def on_change_line_selected(self, key):
self.table_sale_lines.moved_selection(key)
def action_addition_line(self):
if not self._current_line:
return
categories = self._current_line['product'].get('categories')
if not categories:
return
categories_ids = [cat['id'] for cat in categories]
mixables = self.Product.find([
('categories', 'in', categories_ids),
])
self.dialog_addition_product.set_products(mixables)
self.dialog_addition_product.exec_()
def action_delete_line(self):
"""Delete Product """
if self.model_sale_lines.rowCount() <= 0 or self._state == 'cash':
@ -2219,7 +2235,6 @@ class MainWindow(FrontWindow):
removed_item = self.table_sale_lines.delete_item(ignore_focus=True)
self.SaleLine.delete([removed_item['id']])
self.set_amounts()
self.set_amounts()
self._current_line_id = None
self.setFocus()

View file

@ -113,7 +113,7 @@ MODELS = {
'name', 'code', 'barcode', 'write_date', 'description',
'template.sale_price_w_tax', 'template.account_category',
'location.name', 'image', 'image_icon', 'quantity',
'encoded_sale_price', 'location', 'locations', 'uom'
'encoded_sale_price', 'location', 'locations', 'uom', 'categories',
],
'binaries': ['image']
},

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 25 KiB