add button change sale

fix print report invoice electronic
This commit is contained in:
Wilson Gomez 2023-05-26 17:16:55 -05:00
parent 693f32f13b
commit 03258c6782
8 changed files with 224 additions and 79 deletions

View File

@ -58,6 +58,11 @@ class StartButtons(QVBoxLayout):
values_extend([
['button_tables', 'VER MESAS', 'action_tables', 'tables']
])
else:
values_extend([
['button_product_info', 'INFO. PRODUCTO', 'action_info_product', 'product_info'],
])
if parent.type_pos_user in ('cashier', 'frontend', 'frontend_admin'):
values_extend([
@ -65,10 +70,10 @@ class StartButtons(QVBoxLayout):
['button_reports', 'REPORTES', 'action_reports', 'reports'],
['button_historic_sales', 'HISTORIAL', 'action_historic_sales', 'sales_history'],
])
if parent.enviroment == 'retail':
values_extend([
['button_collection', 'RECAUDO', 'action_collection', 'collection']
])
if parent.enviroment == 'retail':
values_extend([
['button_collection', 'RECAUDO', 'action_collection', 'collection']
])
values_extend([
['button_help', 'AYUDA', 'action_help', 'help'],
@ -116,6 +121,7 @@ class ButtonsFunction(QGridLayout):
method=value[2],
name_style=name_style
)
setattr(self, value[0], button)
self.addWidget(button, *position)
last_row = position[0]
self.setRowStretch(last_row + 1, 1)
@ -131,7 +137,7 @@ class ButtonsFunction(QGridLayout):
self.values.extend([
['button_party', 'CLIENTE', 'action_party'],
# ['button_cancel', 'CANCELAR', 'action_cancel'],
['button_search_sale', 'BUSCAR ORDEN', 'action_search_sale'],
# ['button_search_sale', 'BUSCAR ORDEN', 'action_search_sale'],
['button_print_sale', 'IMPRIMIR', 'action_print_sale'],
['button_delivery_party', 'DOMICILIARIO', 'action_delivery_party'],
['button_position', 'POSICION', 'action_position'],
@ -151,7 +157,18 @@ class ButtonsFunction(QGridLayout):
]
self.values.extend(rest_options)
else:
self.values.extend([['button_product_info', 'INFO. PRODUCTO', 'action_info_product']])
self.values.extend([
['button_product_info', 'INFO. PRODUCTO', 'action_info_product'],
['button_change_salesman', 'CAMBIO VENDEDOR', 'action_change_salesman'],
])
def hide_buttons(self):
for button in self.values:
getattr(self, button[0]).hide()
def show_buttons(self):
for button in self.values:
getattr(self, button[0]).show()
class ButtonsStacked(QWidget):
@ -207,28 +224,50 @@ class ButtonsStacked(QWidget):
hbox.addWidget(self.stacked, 0)
if parent.type_pos_user in ('cashier', 'frontend_admin'):
hbox.addWidget(self.button_payment_term, 0)
if parent.type_pos_user == 'cashier' and parent.enviroment == 'retail':
self.button_to_draft = CustomButton(
id='button_to_draft',
parent=parent,
title='VOLVER A BORRADOR',
icon=get_icon('draft'),
name_style='toolbar',
method='button_to_draft_pressed'
)
if parent.enviroment == 'retail':
if parent.type_pos_user == 'cashier':
self.button_to_draft = CustomButton(
id='button_to_draft',
parent=parent,
title='VOLVER A BORRADOR',
icon=get_icon('draft'),
name_style='toolbar',
method='button_to_force_draft_pressed'
)
# hbox.addWidget(self.button_to_draft, 0)
elif parent.type_pos_user == 'order' or parent.type_pos_user == 'salesman':
# sale_state = parent._sale.get('state')
# if sale_state == 'draft':
# elif sale_state == 'quotation':
self.button_to_quote = CustomButton(
id='button_to_draft',
parent=parent,
title='COTIZAR',
name_style='toolbar',
method='button_to_quote_pressed'
)
self.button_to_quote.hide()
hbox.addWidget(self.button_to_quote, 0)
self.button_to_draft = CustomButton(
id='button_to_draft',
parent=parent,
title='BORRADOR',
icon=get_icon('back'),
name_style='toolbar',
method='button_to_draft_pressed'
)
self.button_to_draft.hide()
hbox.addWidget(self.button_to_draft, 0)
if parent.type_pos_user == 'order' or parent.type_pos_user == 'salesman' and parent.enviroment == 'retail':
self.button_send_order = CustomButton(
id='button_send_to_pay',
icon=get_icon('draft'),
parent=parent,
title='IR A PAGAR',
method='button_send_to_pay_pressed',
name_style='toolbar'
)
hbox.addWidget(self.button_send_order, 0)
self.button_send_order = CustomButton(
id='button_send_to_pay',
icon=get_icon('draft'),
parent=parent,
title='IR A PAGAR',
method='button_send_to_pay_pressed',
name_style='toolbar'
)
hbox.addWidget(self.button_send_order, 0)
self.setLayout(hbox)

View File

@ -229,16 +229,28 @@ class SearchSale(SearchWindow):
method='action_search_sale',
size='mini_button',
)
self.pushButtonReservation = CustomButton(
id='button_search_sale_reservation',
parent=self,
# icon=get_icon('history'),
title='RESERVA',
name_style='start',
record='reservation',
method='action_search_sale',
size='mini_button',
)
if self.parent.enviroment == 'restaurant':
self.pushButtonReservation = CustomButton(
id='button_search_sale_reservation',
parent=self,
# icon=get_icon('history'),
title='RESERVA',
name_style='start',
record='reservation',
method='action_search_sale',
size='mini_button',
)
else:
self.pushButtonReservation = CustomButton(
id='button_search_sale_quote',
parent=self,
title='COTIZACION',
name_style='start',
record='quotation',
method='action_search_sale',
size='mini_button',
)
self.buttons_layout_filter.addWidget(self.pushButtonCash)
self.buttons_layout_filter.addWidget(self.pushButtonCredit)

View File

@ -278,13 +278,23 @@ class AppWindow(FrontWindow):
print('error', e)
self.dialog('error_order_dispatched')
def button_to_draft_pressed(self):
# Return sale to draft state
def button_to_force_draft_pressed(self):
# Return sale to draft state force draft
if hasattr(self, '_sale'):
args = {'sale_id': self._sale['id']}
self.Sale.to_draft(args)
self.see_start_front()
# self.state_disabled()
def button_to_draft_pressed(self):
# Return sale to draft state when state quotation
self.Sale.button_method('draft', [self._sale['id']])
self.buttons_stacked.button_to_draft.hide()
self.buttons_stacked.button_to_quote.show()
def button_to_quote_pressed(self):
self.Sale.button_method('quote', [self._sale['id']])
self.buttons_stacked.button_to_quote.hide()
self.buttons_stacked.button_to_draft.show()
def create_gui(self):
panels = QHBoxLayout()
@ -769,6 +779,7 @@ class AppWindow(FrontWindow):
self.WidgetShop.show()
self.set_state('disabled')
self.buttons_stacked.hide()
self.buttons_function.hide_buttons()
self._sale = {}
else:
self.start_front.hide()
@ -776,6 +787,9 @@ class AppWindow(FrontWindow):
self.WidgetShop.hide()
self.order_front.show()
self.buttons_stacked.show()
self.buttons_function.show_buttons()
if self.enviroment == 'retail' and self.type_pos_user in ('order', 'salesman'):
self.buttons_function.button_change_salesman.hide()
def action_read_weight(self):
print('si hace action_read_weight')
@ -1171,6 +1185,18 @@ class AppWindow(FrontWindow):
self.RestTables.write([table_id], to_drop)
return to_drop
def action_change_salesman(self):
salesman = self.action_salesman_code()
if salesman == 0:
self.dialog_salesman_code.hide()
return
if not salesman:
return self.dialog('error_salesman_wrong')
else:
self.salesman = salesman
self.Sale.write([self._sale['id']], {'salesman': salesman['id']})
self.store.update({'salesman': salesman})
def action_tip(self):
if self._state in ['finished']:
return
@ -1514,12 +1540,14 @@ class AppWindow(FrontWindow):
printer_id = self.field_printer_ask.get_id()
type_doc = self.field_type_ask.get_id()
sale_id = None
sale = self._sale
if number:
if type_doc in ['order', 'delivery']:
if number == self._sale.get('number'):
sale_id = self._sale['id']
else:
sales = self.Sale.find([('number', '=', number)])
sale = sales[0]
if sales:
sale_id = sales[0]['id']
else:
@ -1537,7 +1565,6 @@ class AppWindow(FrontWindow):
res = self.Sale.resend_invoice({'id': sale_id, 'number': number})
if not res:
self.dialog('fail_send_invoice')
if printer_id == '1':
self.print_invoice(sale_id, type_doc=type_doc)
else:
@ -1577,10 +1604,10 @@ class AppWindow(FrontWindow):
action_id = self._action_report_invoice['id']
if sale['invoice_type'] == '1':
action_id = self._action_report_invoice_e['id']
model = 'electronic_invoice_co.invoice_face'
data = {
'model': model,
'action_id': action_id,
}
ctx = {'date_format': u'%d/%m/%Y'}
ctx.update(self.ctx)
@ -1921,6 +1948,9 @@ class AppWindow(FrontWindow):
delta = str(datetime.now() - timedelta(1))
if _type == 'reservation':
delta = str(datetime.now() - timedelta(30))
elif _type == 'quotation':
delta = str(datetime.now() - timedelta(8))
shop_id = self.shop['id']
if self.type_pos_user == 'cashier':
@ -1937,10 +1967,11 @@ class AppWindow(FrontWindow):
]]]
elif self.type_pos_user in ('order', 'salesman'):
dom = [
('state', '=', 'draft'),
('shop', '=', shop_id),
('create_date', '>=', delta),
]
if _type != 'quotation':
dom.append(('state', '=', 'draft'))
elif self.type_pos_user == 'frontend':
dom = [
('state', 'in', ['draft', 'quotation',
@ -1956,14 +1987,22 @@ class AppWindow(FrontWindow):
('shop', '=', shop_id),
('create_date', '>=', delta),
]
if _type == 'cash':
dom.append(['payment_term', '=', self.default_payment_term['id']])
dom.append(['reservation', '!=', True])
dom.extend([
('payment_term', '=', self.default_payment_term['id']),
('reservation', '!=', True)
])
elif _type == 'credit':
dom.append(['reservation', '!=', True])
dom.append(['payment_term', '!=', self.default_payment_term['id']])
else:
dom.extend([
['reservation', '!=', True],
['payment_term', '!=', self.default_payment_term['id']]
])
elif _type == 'reservation':
dom.append(('reservation', '=', True))
else:
dom.append(('state', '=', 'quotation'))
# dom.append(['payment_method', '!=', 'all_paid'])
time1 = time.time()
fields = self.dialog_search_sales.fields_names
@ -2064,27 +2103,7 @@ class AppWindow(FrontWindow):
if sale.get('delivery_charge'):
self.field_delivery_charge.set_from_id(sale['delivery_charge'])
if sale.get('table_assigned.'):
self.field_table_assigned.setText(
sale['table_assigned.']['name'] or '')
consumer = sale.get('consumer.', None)
if consumer:
self.field_consumer.setText(consumer['name'] or '')
self._consumer, = self.Consumer.find([
('id', '=', consumer['id']),
])
self.field_change.zero()
if self._commission_activated:
if hasattr(self, 'field_agent') and sale.get('agent.') \
and sale.get('commission'):
commission = sale.get('commission')
sale['agent.']['rec_name'] = '[' + str(commission) + ']' + ' ' + sale['agent.']['rec_name']
self.store.set(sale['agent.'])
self.field_agent_id = sale['agent.']['id']
self.field_agent_ask.setText(sale['agent.']['rec_name'])
self.field_commission_ask.setText(str(commission))
self._set_commission_amount(sale['untaxed_amount'], commission)
self.line_ids = sale.get('lines', [])
if sale.get('lines'):
@ -2108,9 +2127,41 @@ class AppWindow(FrontWindow):
self.message_bar.set('system_ready')
if self.type_pos_user in ('cashier', 'order', 'salesman'):
self.table_sale_lines.setEnabled(True)
if self.enviroment == 'restaurant':
if sale.get('table_assigned.'):
self.field_table_assigned.setText(
sale['table_assigned.']['name'] or '')
consumer = sale.get('consumer.', None)
if consumer:
self.field_consumer.setText(consumer['name'] or '')
self._consumer, = self.Consumer.find([
('id', '=', consumer['id']),
])
self.table_sale_lines.setEnabled(True)
self.menu_dash.setDisabled(False)
else:
if self._commission_activated:
if hasattr(self, 'field_agent') and sale.get('agent.') \
and sale.get('commission'):
commission = sale.get('commission')
sale['agent.']['rec_name'] = '[' + str(commission) + ']' + ' ' + sale['agent.']['rec_name']
self.store.set(sale['agent.'])
self.field_agent_id = sale['agent.']['id']
self.field_agent_ask.setText(sale['agent.']['rec_name'])
self.field_commission_ask.setText(str(commission))
self._set_commission_amount(sale['untaxed_amount'], commission)
if self.type_pos_user in ('order', 'salesman'):
if sale['state'] == 'draft':
self.buttons_stacked.button_to_quote.show()
elif sale['state'] == 'quotation':
self.buttons_stacked.button_to_draft.show()
# else:
# self.buttons_function.button_change_salesman.show()
if sale['state'] in ('draft', 'quotation'):
self.set_state('add')
elif sale['state'] in ('confirmed', 'processing', 'done'):
@ -2573,6 +2624,9 @@ class AppWindow(FrontWindow):
self.action_tables()
else:
self.set_state('add')
if self.type_pos_user in ('order', 'salesman'):
self.buttons_stacked.button_to_quote.show()
self.buttons_stacked.button_to_draft.hide()
if self.enviroment == 'restaurant':
self.action_source()
self.label_input.setFocus()

View File

@ -57,7 +57,7 @@ MODELS_RESTAURANT = {
},
'company.employee': {
'rec_name': 'rec_name',
'fields': ['party', 'code']
'fields': ['party', 'code', 'rec_name']
},
'commission.agent': {
'rec_name': 'rec_name',
@ -272,7 +272,7 @@ MODELS_RETAIL = {
},
'company.employee': {
'rec_name': 'rec_name',
'fields': ['party', 'code']
'fields': ['party', 'code', 'rec_name']
},
'commission.agent': {
'rec_name': 'rec_name',

View File

@ -149,6 +149,16 @@ class Model(object):
}
res = self.get_connection('POST', '/create', args_)
return res
def method_instance(self, values):
args_ = {
'model': self.model,
'method': values['method'],
'instance': values['instance'],
'context': self.ctx,
}
res = self.get_connection('POST', '/method_instance', args_)
return res
# route = self.get_route('create')
# data = json.dumps(args_, default=encoder)
# res = requests.post(route, data=data)

View File

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
width="800px" height="800px" viewBox="0 0 31.893 31.893"
xml:space="preserve">
<g>
<g>
<circle cx="14.066" cy="3.247" r="3.247"/>
<path d="M15.624,6.849L14.855,7.17c-0.159-0.271-0.449-0.456-0.785-0.456c-0.337,0-0.625,0.185-0.783,0.45l-0.774-0.329
c-0.109-0.048-0.249-0.036-0.35,0.029C12.06,6.933,11.99,7.048,11.99,7.17v0.959c0,0.115,0.066,0.225,0.158,0.291
c0.093,0.071,0.217,0.09,0.328,0.058c0.301-0.093,0.678-0.206,0.891-0.272c0.168,0.203,0.42,0.334,0.702,0.334
c0.273,0,0.518-0.124,0.686-0.312c0.22,0.062,0.599,0.181,0.908,0.271c0.107,0.032,0.234,0.013,0.324-0.058
c0.094-0.067,0.154-0.177,0.154-0.291V7.184c0-0.125-0.067-0.237-0.167-0.304C15.871,6.813,15.734,6.8,15.624,6.849z"/>
<path d="M13.708,27.662h10.417v-6.266h-2.729c0.001-0.037,0.002-0.07,0.002-0.104c0-0.91-0.483-1.717-1.211-2.158
c0.127-0.201,0.202-0.443,0.203-0.699c0.021-6.747-2.169-9.154-3.689-10.199l-2.634,3.531l-2.569-3.531
c-1.522,1.045-3.751,3.701-3.73,10.451c0.002,0.727,0.589,1.338,1.318,1.338h0.001c0.727,0,1.332-0.619,1.33-1.346
c-0.006-1.967,0.043-3.51,0.512-4.684v4.247c0,0.613,0.196,1.186,0.432,1.676v10.658c0,0.728,0.613,1.316,1.339,1.316
c0.728,0,1.343-0.59,1.343-1.316l0.111-0.01c0,0.729,0.604,1.326,1.33,1.326c0.726,0,1.359-0.607,1.359-1.336V28.68h-4.189v-8.342
h3.151c0.238-0.766,0.765-1.402,1.441-1.809c0.037-0.17,0.006-4.562,0.006-4.562c0.373,0.968,0.538,2.488,0.53,4.455
c0,0.193,0.036,0.375,0.108,0.541c-0.9,0.385-1.534,1.287-1.534,2.328c0,0.029,0.001,0.064,0.002,0.104h-2.648L13.708,27.662
L13.708,27.662z M17.399,21.296c0-0.813,0.663-1.479,1.478-1.479c0.813,0,1.478,0.67,1.478,1.481c0,0.03-0.002,0.063-0.003,0.103
h-2.947C17.4,21.359,17.399,21.326,17.399,21.296z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1 +1 @@
__version__ = "6.0.12"
__version__ = "6.0.13"

View File

@ -1,14 +1,5 @@
import os
if os.name == 'posix':
dir = '/home/psk/Documents/DIBAL'
else:
dir = r'D:\USUARIOS\USUARIO\Desktop\TICKETS DIBAL'
files = os.listdir(dir)
print('dir....', files)
name_file = '2000150560643.txt'
# fullpath = os.path.join(dir, name_file)
@ -43,6 +34,19 @@ name_file = '2000150560643.txt'
def read_files_scale():
try:
if os.name == 'posix':
dir = '/home/psk/Documents/DIBAL'
else:
dir = r'D:\USUARIOS\USUARIO\Desktop\TICKETS DIBAL'
files = os.listdir(dir)
except:
dir = None
files = []
print('dir....', files)
name_file = '2000150560643.txt'
new_sales = []
for _file in files:
if not '.txt' in _file: