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.QtCore import Qt
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QCheckBox, QTextEdit, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit, QCheckBox, QTextEdit, QVBoxLayout, QGridLayout, QLineEdit, QPlainTextEdit,
QScrollArea, QHBoxLayout, QDoubleSpinBox, QDesktopWidget, QLabel, QScrollArea, QHBoxLayout, QDoubleSpinBox, QLabel,
) )
from .proxy import FastReport from .proxy import FastReport
from app.commons.forms import GridForm
from .buttonpad import ButtonsFunction from .buttonpad import ButtonsFunction
from .constants import alignCenter, alignLeft, FRACTIONS, TYPE_VEHICLE 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 .commons.search_window import SearchWindow
from collections import OrderedDict from collections import OrderedDict
from .manage_tables import ManageTables from .manage_tables import ManageTables
@ -295,7 +294,7 @@ class DialogConsumer(QuickDialog):
label_consumer.setObjectName('label_consumer') label_consumer.setObjectName('label_consumer')
grid.addWidget(label_consumer, 2, 1) grid.addWidget(label_consumer, 2, 1)
self._parent.form_consumer_name = QLineEdit() 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( self._parent.form_consumer_name.textChanged.connect(
lambda: self._parent.update_consumer('name')) lambda: self._parent.update_consumer('name'))
grid.addWidget(self._parent.form_consumer_name, 2, 2) grid.addWidget(self._parent.form_consumer_name, 2, 2)
@ -304,7 +303,7 @@ class DialogConsumer(QuickDialog):
label_address.setObjectName('label_address') label_address.setObjectName('label_address')
grid.addWidget(label_address, 3, 1) grid.addWidget(label_address, 3, 1)
self._parent.form_consumer_address = QLineEdit() 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( self._parent.form_consumer_address.textChanged.connect(
lambda: self._parent.update_consumer('address')) lambda: self._parent.update_consumer('address'))
grid.addWidget(self._parent.form_consumer_address, 3, 2) grid.addWidget(self._parent.form_consumer_address, 3, 2)
@ -313,7 +312,7 @@ class DialogConsumer(QuickDialog):
label_id_number.setObjectName('label_id_number') label_id_number.setObjectName('label_id_number')
grid.addWidget(label_id_number, 4, 1) grid.addWidget(label_id_number, 4, 1)
self._parent.form_consumer_id_number = QLineEdit() 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( self._parent.form_consumer_id_number.textChanged.connect(
lambda: self._parent.update_consumer('id_number')) lambda: self._parent.update_consumer('id_number'))
grid.addWidget(self._parent.form_consumer_id_number, 4, 2) grid.addWidget(self._parent.form_consumer_id_number, 4, 2)
@ -322,7 +321,7 @@ class DialogConsumer(QuickDialog):
label_notes.setObjectName('label_notes') label_notes.setObjectName('label_notes')
grid.addWidget(label_notes, 6, 1) grid.addWidget(label_notes, 6, 1)
self._parent.form_consumer_notes = QPlainTextEdit() 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( self._parent.form_consumer_notes.textChanged.connect(
lambda: self._parent.update_consumer('notes') lambda: self._parent.update_consumer('notes')
) )
@ -335,7 +334,7 @@ class DialogConsumer(QuickDialog):
widgets=[vbox_consumer]) widgets=[vbox_consumer])
self.setWindowTitle('CONSUMIDOR') self.setWindowTitle('CONSUMIDOR')
width, height = get_screen() 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) self.accepted.connect(self._parent.dialog_search_consumer_accepted)
def get_button(self): def get_button(self):
@ -373,7 +372,7 @@ class DialogTableSaleConsumer(QuickDialog):
) )
width, height = get_screen() width, height = get_screen()
table.setFixedSize(width * 0.5, height * 0.5) table.horizontalHeader().setStretchLastSection(True)
vbox_ = QVBoxLayout() vbox_ = QVBoxLayout()
layout = QVBoxLayout() layout = QVBoxLayout()
@ -385,100 +384,85 @@ class DialogTableSaleConsumer(QuickDialog):
super(DialogTableSaleConsumer, self).__init__(parent, 'action', super(DialogTableSaleConsumer, self).__init__(parent, 'action',
widgets=[vbox_]) widgets=[vbox_])
self.setWindowTitle('VENTAS POR CONSUMIDOR') self.setWindowTitle('VENTAS POR CONSUMIDOR')
self.setFixedSize(width / 1.3, height / 1.7) self.setFixedSize(width * 0.6, height * 0.7)
class SaleConsumerSelected(QuickDialog): class SaleConsumerSelected(QuickDialog):
def __init__(self, parent): def __init__(self, parent):
self._parent = parent self._parent = parent
vbox_ = QVBoxLayout() vbox_ = QVBoxLayout()
grid = QGridLayout() _fields = [
('party', {
label_party = QLabel('TERCERO:') 'name': 'CLIENTE',
label_party.setAlignment(alignLeft) 'readonly': True,
label_party.setObjectName('label_party') }),
grid.addWidget(label_party, 1, 1) ('number', {
self._parent.row_sale_party = QLineEdit() 'name': 'NUMERO',
self._parent.row_sale_party.setObjectName('row_sale_party') 'readonly': True,
grid.addWidget(self._parent.row_sale_party, 1, 2) }),
('sale_date', {
label_number = QLabel('NUMERO:') 'name': 'FECHA',
label_number.setAlignment(alignLeft) 'readonly': True,
label_number.setObjectName('label_number') }),
grid.addWidget(label_number, 1, 3) ('invoice_number', {
self._parent.row_sale_number = QLineEdit() 'name': 'FACTURA',
self._parent.row_sale_number.setObjectName('row_sale_number') 'readonly': True,
grid.addWidget(self._parent.row_sale_number, 1, 4) }),
('total_amount_cache', {
label_date = QLabel('FECHA:') 'name': 'TOTAL',
label_date.setAlignment(alignLeft) 'readonly': True,
label_date.setObjectName('label_date') 'type': 'money',
grid.addWidget(label_date, 2, 1) }),
self._parent.row_sale_date = QLineEdit() ]
self._parent.row_sale_date.setObjectName('row_sale_date') fields = OrderedDict(_fields)
grid.addWidget(self._parent.row_sale_date, 2, 2) self.grid = GridForm(self, fields, col=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)
col_sizes_tlines = [field['width'] for field in parent.fields_sale_line] 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 parent.model_sale_customer_lines, col_sizes_tlines
) )
grid.addWidget(table, 4, 1, 1, 4) self.grid.addWidget(self.table, 4, 1, 1, 4)
vbox_.addLayout(self.grid)
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)
super(SaleConsumerSelected, self).__init__(parent, 'action', super(SaleConsumerSelected, self).__init__(parent, 'action',
widgets=[vbox_]) widgets=[vbox_])
self.grid.addWidget(self.get_button(), 5, 3, 3, 4)
width, height = get_screen() 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): def get_button(self):
self._parent.button_duplicate_sale = CustomButton( button_duplicate_sale = CustomButton(
id='button_duplicate_sale', id='button_duplicate_sale',
parent=self._parent, parent=self,
icon=get_icon('duplicate_sale'), icon=get_icon('duplicate_sale'),
title=('DUPLICATE SALE'), title=('DUPLICAR VENTA'),
name_style='toolbar', name_style='toolbar',
method='button_duplicate_sale' 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): class DialogAgent(QuickDialog):

View File

@ -916,15 +916,15 @@ class MainWindow(FrontWindow):
for i in range(copies): for i in range(copies):
self.receipt_sale.print_sale(data, type_doc, open_box) self.receipt_sale.print_sale(data, type_doc, open_box)
def button_duplicate_sale(self): # def button_duplicate_sale(self):
if self.sale_customer_selected: # if self.sale_customer_selected:
res = self.Sale.duplicate_sale({ # res = self.Sale.duplicate_sale({
'sale_id': self.sale_customer_selected, # 'sale_id': self.sale_customer_selected,
}) # })
self.load_sale(res['sale_id']) # self.load_sale(res['sale_id'])
self.dialog_search_consumer.close() # self.dialog_search_consumer.close()
self.dialog_table_sale_consumer.close() # self.dialog_table_sale_consumer.close()
self.dialog_sale_consumer_selected.close() # self.dialog_sale_consumer_selected.close()
def button_create_delivery_party(self): def button_create_delivery_party(self):
self.clear_delivery_party() self.clear_delivery_party()
@ -2094,17 +2094,7 @@ class MainWindow(FrontWindow):
self.row_field_note.setFocus() self.row_field_note.setFocus()
def sale_consumer_selected(self, data): def sale_consumer_selected(self, data):
self.sale_customer_selected = data['id'] self.dialog_sale_consumer_selected.start(data)
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_()
def clear_delivery_party(self): def clear_delivery_party(self):
self._delivery_party_selected = None self._delivery_party_selected = None
@ -2162,6 +2152,7 @@ class MainWindow(FrontWindow):
'digits': ('unit.symbol', CONVERSION_DIGITS), 'digits': ('unit.symbol', CONVERSION_DIGITS),
'width': 80 'width': 80
} }
discount = { discount = {
'name': 'discount', 'name': 'discount',
'format': '{0:.0%}', 'format': '{0:.0%}',
@ -2212,37 +2203,34 @@ class MainWindow(FrontWindow):
if self.enviroment == 'retail': if self.enviroment == 'retail':
self.fields_sale_line.insert(0, product_code) 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'): if self._config.get('show_description_pos'):
self.fields_sale_line.insert(2, description) self.fields_sale_line.insert(2, description)
if self._config.get('show_fractions'): if self._config.get('show_fractions'):
self.fields_sale_line.insert(4, qty_fraction) 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_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): def setup_sale_consumer(self):
number = { number = {
'name': 'number', 'name': 'number',
'align': alignCenter, 'align': alignCenter,
'description': 'NUMERO', 'description': 'ORDEN',
'width': 200 'width': 200
} }
invoice_number = { invoice_number = {
'name': 'invoice_number', 'name': 'invoice_number',
'align': alignCenter, 'align': alignCenter,
'description': 'FACTURA NUMERO', 'description': 'FACTURA',
'width': 200 'width': 200
} }
consumer = {
'name': 'consumer.name',
'align': alignCenter,
'description': 'CONSUMIDOR',
'width': 300
}
sale_date = { sale_date = {
'name': 'sale_date', 'name': 'sale_date',
'align': alignCenter, 'align': alignCenter,
@ -2257,7 +2245,7 @@ class MainWindow(FrontWindow):
} }
self.fields_sale_consumer = [ 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) self.model_sale_consumer = TableModel('sale.sale', self.fields_sale_consumer)
@ -2804,12 +2792,15 @@ class MainWindow(FrontWindow):
self.load_sale(sale['id']) self.load_sale(sale['id'])
self.dialog_manage_tables.hide() self.dialog_manage_tables.hide()
def set_consumer(self): def set_consumer(self, consumer=None):
self.form_consumer_notes.clear() _consumer = consumer or self._consumer
self.form_consumer_phone.setText(self._consumer['phone']) if not _consumer:
self.form_consumer_name.setText(self._consumer['name']) return
self.form_consumer_address.setText(self._consumer['address']) self.form_consumer_phone.setText(_consumer['phone'])
self.form_consumer_notes.insertPlainText(self._consumer['notes']) self.form_consumer_name.setText(_consumer['name'])
id_number = self._consumer.get('id_number') 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: if id_number:
self.form_consumer_id_number.setText(id_number) self.form_consumer_id_number.setText(id_number)

View File

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

View File

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