Fix consumer sale

This commit is contained in:
Oscar Alvarez 2021-01-26 23:26:20 -05:00
parent 951929d351
commit 8c585617b5
4 changed files with 102 additions and 126 deletions

View File

@ -3,14 +3,13 @@ from .commons.dialogs import HelpDialog, QuickDialog
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (
QCheckBox, QTextEdit, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit,
QScrollArea, QHBoxLayout, QDoubleSpinBox, QDesktopWidget, QLabel,
QScrollArea, QHBoxLayout, QDoubleSpinBox, QLabel,
)
from .proxy import FastReport
from app.commons.forms import GridForm
from .buttonpad import ButtonsFunction
from .constants import alignCenter, alignLeft, FRACTIONS, TYPE_VEHICLE
from .commons.forms import FieldMoney, ComboBox
from .commons.forms import FieldMoney, ComboBox, GridForm
from .commons.search_window import SearchWindow
from collections import OrderedDict
from .manage_tables import ManageTables
@ -295,7 +294,7 @@ class DialogConsumer(QuickDialog):
label_consumer.setObjectName('label_consumer')
grid.addWidget(label_consumer, 2, 1)
self._parent.form_consumer_name = QLineEdit()
self._parent.form_consumer_name.setObjectName('row_field_consumer')
self._parent.form_consumer_name.setObjectName('form_consumer_name')
self._parent.form_consumer_name.textChanged.connect(
lambda: self._parent.update_consumer('name'))
grid.addWidget(self._parent.form_consumer_name, 2, 2)
@ -304,7 +303,7 @@ class DialogConsumer(QuickDialog):
label_address.setObjectName('label_address')
grid.addWidget(label_address, 3, 1)
self._parent.form_consumer_address = QLineEdit()
self._parent.form_consumer_address.setObjectName('row_field_address')
self._parent.form_consumer_address.setObjectName('form_consumer_address')
self._parent.form_consumer_address.textChanged.connect(
lambda: self._parent.update_consumer('address'))
grid.addWidget(self._parent.form_consumer_address, 3, 2)
@ -313,7 +312,7 @@ class DialogConsumer(QuickDialog):
label_id_number.setObjectName('label_id_number')
grid.addWidget(label_id_number, 4, 1)
self._parent.form_consumer_id_number = QLineEdit()
self._parent.form_consumer_id_number.setObjectName('row_field_id_number')
self._parent.form_consumer_id_number.setObjectName('form_consumer_id_number')
self._parent.form_consumer_id_number.textChanged.connect(
lambda: self._parent.update_consumer('id_number'))
grid.addWidget(self._parent.form_consumer_id_number, 4, 2)
@ -322,7 +321,7 @@ class DialogConsumer(QuickDialog):
label_notes.setObjectName('label_notes')
grid.addWidget(label_notes, 6, 1)
self._parent.form_consumer_notes = QPlainTextEdit()
self._parent.form_consumer_notes.setObjectName('row_field_id_number')
self._parent.form_consumer_notes.setObjectName('form_consumer_notes')
self._parent.form_consumer_notes.textChanged.connect(
lambda: self._parent.update_consumer('notes')
)
@ -335,7 +334,7 @@ class DialogConsumer(QuickDialog):
widgets=[vbox_consumer])
self.setWindowTitle('CONSUMIDOR')
width, height = get_screen()
self.setGeometry(0, 0, width / 2.7, height / 1.8)
self.setGeometry(0, 0, width * 0.4, height * 0.7)
self.accepted.connect(self._parent.dialog_search_consumer_accepted)
def get_button(self):
@ -373,7 +372,7 @@ class DialogTableSaleConsumer(QuickDialog):
)
width, height = get_screen()
table.setFixedSize(width * 0.5, height * 0.5)
table.horizontalHeader().setStretchLastSection(True)
vbox_ = QVBoxLayout()
layout = QVBoxLayout()
@ -385,100 +384,85 @@ class DialogTableSaleConsumer(QuickDialog):
super(DialogTableSaleConsumer, self).__init__(parent, 'action',
widgets=[vbox_])
self.setWindowTitle('VENTAS POR CONSUMIDOR')
self.setFixedSize(width / 1.3, height / 1.7)
self.setFixedSize(width * 0.6, height * 0.7)
class SaleConsumerSelected(QuickDialog):
def __init__(self, parent):
self._parent = parent
vbox_ = QVBoxLayout()
grid = QGridLayout()
label_party = QLabel('TERCERO:')
label_party.setAlignment(alignLeft)
label_party.setObjectName('label_party')
grid.addWidget(label_party, 1, 1)
self._parent.row_sale_party = QLineEdit()
self._parent.row_sale_party.setObjectName('row_sale_party')
grid.addWidget(self._parent.row_sale_party, 1, 2)
label_number = QLabel('NUMERO:')
label_number.setAlignment(alignLeft)
label_number.setObjectName('label_number')
grid.addWidget(label_number, 1, 3)
self._parent.row_sale_number = QLineEdit()
self._parent.row_sale_number.setObjectName('row_sale_number')
grid.addWidget(self._parent.row_sale_number, 1, 4)
label_date = QLabel('FECHA:')
label_date.setAlignment(alignLeft)
label_date.setObjectName('label_date')
grid.addWidget(label_date, 2, 1)
self._parent.row_sale_date = QLineEdit()
self._parent.row_sale_date.setObjectName('row_sale_date')
grid.addWidget(self._parent.row_sale_date, 2, 2)
label_salesman = QLabel('VENDEDOR:')
label_salesman.setAlignment(alignLeft)
label_salesman.setObjectName('label_salesman')
grid.addWidget(label_salesman, 2, 3)
self._parent.row_sale_salesman = QLineEdit()
self._parent.row_sale_salesman.setObjectName('row_sale_salesman')
grid.addWidget(self._parent.row_sale_salesman, 2, 4)
label_lines = QLabel('LINEAS:')
label_lines.setAlignment(alignLeft)
label_lines.setObjectName('label_lines')
grid.addWidget(label_lines, 3, 1, 1, 4)
_fields = [
('party', {
'name': 'CLIENTE',
'readonly': True,
}),
('number', {
'name': 'NUMERO',
'readonly': True,
}),
('sale_date', {
'name': 'FECHA',
'readonly': True,
}),
('invoice_number', {
'name': 'FACTURA',
'readonly': True,
}),
('total_amount_cache', {
'name': 'TOTAL',
'readonly': True,
'type': 'money',
}),
]
fields = OrderedDict(_fields)
self.grid = GridForm(self, fields, col=2)
col_sizes_tlines = [field['width'] for field in parent.fields_sale_line]
table = TableView('model_sale_lines',
self.table = TableView('model_sale_lines',
parent.model_sale_customer_lines, col_sizes_tlines
)
grid.addWidget(table, 4, 1, 1, 4)
label_untaxed = QLabel('VALOR BASE:')
label_untaxed.setAlignment(alignCenter)
label_untaxed.setObjectName('label_untaxed')
grid.addWidget(label_untaxed, 5, 1)
self._parent.row_sale_untaxed = QLineEdit()
self._parent.row_sale_untaxed.setObjectName('row_sale_untaxed')
grid.addWidget(self._parent.row_sale_untaxed, 5, 2)
label_tax_amount = QLabel('IMPUESTOS:')
label_tax_amount.setAlignment(alignCenter)
label_tax_amount.setObjectName('label_tax_amount')
grid.addWidget(label_tax_amount, 6, 1)
self._parent.row_sale_tax_amount = QLineEdit()
self._parent.row_sale_tax_amount.setObjectName('row_sale_tax_amount')
grid.addWidget(self._parent.row_sale_tax_amount, 6, 2)
label_total = QLabel('VALOR TOTAL:')
label_total.setAlignment(alignCenter)
label_total.setObjectName('label_total')
grid.addWidget(label_total, 7, 1)
self._parent.row_sale_total = QLineEdit()
self._parent.row_sale_total.setObjectName('row_sale_total')
grid.addWidget(self._parent.row_sale_total, 7, 2)
grid.setVerticalSpacing(15)
grid.addWidget(self.get_button(), 5, 3, 3, 4)
vbox_.addLayout(grid)
self.grid.addWidget(self.table, 4, 1, 1, 4)
vbox_.addLayout(self.grid)
super(SaleConsumerSelected, self).__init__(parent, 'action',
widgets=[vbox_])
self.grid.addWidget(self.get_button(), 5, 3, 3, 4)
width, height = get_screen()
self.setFixedSize(width * 0.4, height * 0.5)
self.setFixedSize(width * 0.5, height * 0.6)
def start(self, data):
self.sale_customer_selected = data['id']
self.field_party.setText(data['party']['name'])
self.field_number.setText(data['number'])
self.field_sale_date.setText(data['sale_date'])
self.field_total_amount_cache.setText(str(data['total_amount_cache']))
self.field_invoice_number.setText(str(data['invoice_number']))
self.table.model.reset()
for line in data['lines']:
self.table.model.add_record(line)
self.exec_()
def get_button(self):
self._parent.button_duplicate_sale = CustomButton(
button_duplicate_sale = CustomButton(
id='button_duplicate_sale',
parent=self._parent,
parent=self,
icon=get_icon('duplicate_sale'),
title=('DUPLICATE SALE'),
title=('DUPLICAR VENTA'),
name_style='toolbar',
method='button_duplicate_sale'
)
return self._parent.button_duplicate_sale
return button_duplicate_sale
def button_duplicate_sale(self):
if self.sale_customer_selected:
res = self._parent.Sale.duplicate_sale({
'sale_id': self.sale_customer_selected,
})
self.dialog_search_consumer.close()
self.dialog_table_sale_consumer.close()
self.dialog_sale_consumer_selected.close()
# FIXME
# self.load_sale(res['sale_id'])
return res
class DialogAgent(QuickDialog):

View File

@ -916,15 +916,15 @@ class MainWindow(FrontWindow):
for i in range(copies):
self.receipt_sale.print_sale(data, type_doc, open_box)
def button_duplicate_sale(self):
if self.sale_customer_selected:
res = self.Sale.duplicate_sale({
'sale_id': self.sale_customer_selected,
})
self.load_sale(res['sale_id'])
self.dialog_search_consumer.close()
self.dialog_table_sale_consumer.close()
self.dialog_sale_consumer_selected.close()
# def button_duplicate_sale(self):
# if self.sale_customer_selected:
# res = self.Sale.duplicate_sale({
# 'sale_id': self.sale_customer_selected,
# })
# self.load_sale(res['sale_id'])
# self.dialog_search_consumer.close()
# self.dialog_table_sale_consumer.close()
# self.dialog_sale_consumer_selected.close()
def button_create_delivery_party(self):
self.clear_delivery_party()
@ -2094,17 +2094,7 @@ class MainWindow(FrontWindow):
self.row_field_note.setFocus()
def sale_consumer_selected(self, data):
self.sale_customer_selected = data['id']
self.row_sale_party.setText(data['party']['name'])
self.row_sale_number.setText(data['number'])
self.row_sale_date.setText(data['sale_date'])
self.row_sale_tax_amount.setText(str(data['tax_amount']))
self.row_sale_untaxed.setText(str(data['untaxed_amount']))
self.row_sale_total.setText(str(data['total_amount_cache']))
self.model_sale_customer_lines.reset()
for line in data['lines']:
self.model_sale_customer_lines.add_record(line)
self.dialog_sale_consumer_selected.exec_()
self.dialog_sale_consumer_selected.start(data)
def clear_delivery_party(self):
self._delivery_party_selected = None
@ -2162,6 +2152,7 @@ class MainWindow(FrontWindow):
'digits': ('unit.symbol', CONVERSION_DIGITS),
'width': 80
}
discount = {
'name': 'discount',
'format': '{0:.0%}',
@ -2212,37 +2203,34 @@ class MainWindow(FrontWindow):
if self.enviroment == 'retail':
self.fields_sale_line.insert(0, product_code)
if self.enviroment == 'restaurant':
self.fields_sale_line.insert(1, commanded)
if self._config.get('show_description_pos'):
self.fields_sale_line.insert(2, description)
if self._config.get('show_fractions'):
self.fields_sale_line.insert(4, qty_fraction)
if self.enviroment == 'restaurant':
self.fields_sale_line.insert(6, commanded)
self.model_sale_customer_lines = TableModel(
'sale.line', [product, qty, unit_price, amount, note]
)
self.model_sale_lines = TableModel('sale.line', self.fields_sale_line)
self.model_sale_customer_lines = TableModel('sale.line', self.fields_sale_line)
def setup_sale_consumer(self):
number = {
'name': 'number',
'align': alignCenter,
'description': 'NUMERO',
'description': 'ORDEN',
'width': 200
}
invoice_number = {
'name': 'invoice_number',
'align': alignCenter,
'description': 'FACTURA NUMERO',
'description': 'FACTURA',
'width': 200
}
consumer = {
'name': 'consumer.name',
'align': alignCenter,
'description': 'CONSUMIDOR',
'width': 300
}
sale_date = {
'name': 'sale_date',
'align': alignCenter,
@ -2257,7 +2245,7 @@ class MainWindow(FrontWindow):
}
self.fields_sale_consumer = [
number, invoice_number, consumer, sale_date, total_amount_cache
number, invoice_number, sale_date, total_amount_cache
]
self.model_sale_consumer = TableModel('sale.sale', self.fields_sale_consumer)
@ -2804,12 +2792,15 @@ class MainWindow(FrontWindow):
self.load_sale(sale['id'])
self.dialog_manage_tables.hide()
def set_consumer(self):
self.form_consumer_notes.clear()
self.form_consumer_phone.setText(self._consumer['phone'])
self.form_consumer_name.setText(self._consumer['name'])
self.form_consumer_address.setText(self._consumer['address'])
self.form_consumer_notes.insertPlainText(self._consumer['notes'])
id_number = self._consumer.get('id_number')
def set_consumer(self, consumer=None):
_consumer = consumer or self._consumer
if not _consumer:
return
self.form_consumer_phone.setText(_consumer['phone'])
self.form_consumer_name.setText(_consumer['name'])
self.form_consumer_address.setText(_consumer['address'])
self.form_consumer_notes.setPlainText(_consumer['notes'])
id_number = _consumer.get('id_number')
self.button_history_customer.setVisible(True)
if id_number:
self.form_consumer_id_number.setText(id_number)

View File

@ -34,7 +34,8 @@ MODELS = {
'state_string', 'shop', 'delivery_party', 'reference', 'comment',
'delivery_state', 'table_assigned', 'invoice_type', 'net_amount',
'tip_amount', 'delivery_amount', 'commission', 'agent',
'payment_method', 'order_status',
'payment_method', 'order_status', 'consumer.name', 'consumer.phone',
'consumer.address', 'consumer.notes',
]
},
'sale.line': {

View File

@ -699,7 +699,7 @@ class Receipt(object):
self.print_enter()
self._printer.text('VENDEDOR: %s' % order['salesman'])
self.print_enter()
self._printer.text('AMBIENTE: %s' % order['shop'])
self._printer.text('SUCURSAL: %s' % order['shop'])
self.print_enter()
self._printer.text('CLIENTE: %s' % order['party'])
self.print_enter()