build version api_fast

This commit is contained in:
Wilson Gomez 2022-12-19 11:40:42 -05:00
parent 9cb83a5195
commit 840f6c4423
10 changed files with 328 additions and 154 deletions

View File

@ -37,32 +37,32 @@ class StartButtons(QVBoxLayout):
['button_start_take_away', 'PARA LLEVAR', 'action_start_take_away', 'take_away'],
['button_start_delivery', 'DOMICILIO', 'action_start_delivery', 'delivery'],
]
values_extend = values.extend
if parent.enviroment == 'restaurant':
values.extend([
values_extend([
['button_start_table', 'A LA MESA', 'action_start_table', 'table'],
['button_start_catering', 'CATERING', 'action_start_catering', 'catering'],
])
values.extend([
values_extend([
['button_start_search_order', 'BUSCAR ORDEN', 'action_search_sale', 'search_sale'],
['button_print_sale', 'IMPRIMIR', 'action_print_sale', 'print_sale'],
])
if parent.enviroment == 'restaurant':
values.append(
values_extend([
['button_tables', 'VER MESAS', 'action_tables', 'tables']
)
])
if parent.type_pos_user in ('cashier', 'frontend', 'frontend_admin'):
values.extend([
values_extend([
['button_control_panel', 'PANEL DE CONTROL', 'action_control_panel', 'settings'],
['button_reports', 'REPORTES', 'action_reports', 'reports'],
['button_historic_sales', 'HISTORIAL', 'action_historic_sales', 'sales_history'],
])
values.append(
values_extend([
['button_help', 'AYUDA', 'action_help', 'help'],
)
])
positions = [(i, j) for i in range(rows) for j in range(columns)]
for position, value in zip(positions, values):

View File

@ -59,18 +59,22 @@ class Completer(QCompleter):
def get_values(self, records):
vkeys = [f[0] for f in self.fields]
values = []
values_extend = values.extend
for r in records:
row = []
row_extend = row.extend
for key in vkeys:
if '.' in key:
attrs = key.split('.')
val = r.copy()
for a in attrs:
val = val[a]
name = attrs[-1]
for a in attrs[:-1]:
val = val[a + '.']
val = val[name]
else:
val = r[key]
row.append(val)
values.append(row)
row_extend([val])
values_extend([row])
return values
def _set_model(self, records, headers):

View File

@ -139,6 +139,7 @@ class MenuDash(QWidget):
'parent': None,
},
}
main_cat_addWidget = self.main_categories.addWidget
for value in self.values:
cat_id = str(value['id'])
if not value:
@ -157,7 +158,7 @@ class MenuDash(QWidget):
size=self.button_size,
name_style='toolbar'
)
self.main_categories.addWidget(button, row_cat, col_cat)
main_cat_addWidget(button, row_cat, col_cat)
col_cat += 1
items = value.get('items')
@ -180,6 +181,7 @@ class MenuDash(QWidget):
'items': scroll_subarea,
'parent': parent_id,
}
sub_cat_addWidget = sub_categories.addWidget
for subcat in childs:
sub_id = str(subcat['id'])
if subcol > num_cat_cols - 1:
@ -195,7 +197,7 @@ class MenuDash(QWidget):
size=self.button_size,
name_style='category_button'
)
sub_categories.addWidget(button, subrow, subcol)
sub_cat_addWidget(button, subrow, subcol)
subcol += 1
products_list = subcat.get('items')
products_items = None
@ -257,6 +259,7 @@ class GridButtons(QWidget):
def create_list_items(self):
self.list_items = []
list_items_append = self.list_items.append
for value in self.values:
_button = CustomButton(
parent=self,
@ -267,7 +270,7 @@ class GridButtons(QWidget):
size=self.button_size,
name_style=self.style,
)
self.list_items.append(_button)
list_items_append(_button)
def action_selected(self, idx):
self.action(idx)
@ -275,10 +278,11 @@ class GridButtons(QWidget):
def set_items(self):
colx = 0
rowy = 0
layout_addWidget = self.layout.addWidget
for item_button in self.list_items:
if colx >= self.num_cols:
colx = 0
rowy += 1
self.layout.addWidget(item_button, rowy, colx)
layout_addWidget(item_button, rowy, colx)
colx += 1
self.layout.setRowStretch(rowy + 1, 1)

View File

@ -350,7 +350,7 @@ class TableModel(QAbstractTableModel):
for name, data in self.headers.items():
if '.' in name:
attrs = name.split('.')
val = values.get(attrs[0])
val = values.get(attrs[0] + '.')
if val:
val = val.get(attrs[1])
else:

View File

@ -176,7 +176,7 @@ class SearchSale(SearchWindow):
widths = [20, 115, 115, 160]
if parent._sale_pos_restaurant:
headers['kind_string'] = {'desc': 'CLASE', 'type': 'char'}
headers['kind'] = {'desc': 'CLASE', 'type': 'char'}
widths.append(110)
headers['consumer.rec_name'] = {'desc': 'CONSUMIDOR', 'type': 'char'}
widths.append(300)

View File

@ -7,7 +7,7 @@ from PyQt5.QtWidgets import QMainWindow, QDesktopWidget, QLineEdit
from PyQt5.QtCore import QTimer, QThread, pyqtSignal
from .commons.dialogs import QuickDialog
from .commons.dblogin import safe_reconnect
from .proxy import FastModel
from .proxy import FastModel, Model
from .constants import SCREENS
from .dialogs import (
Help, ControlPanel, SearchSale, SearchParty, SearchProduct, Position,
@ -213,8 +213,10 @@ class FrontWindow(QMainWindow):
def load_modules(self):
self._sale_pos_restaurant = None
self.Module = FastModel('ir.module', self.ctx)
self.Config = FastModel('sale.configuration', self.ctx)
time1 = time.time()
self.Module = Model('ir.module', self.ctx)
print(time.time() - time1, 'final')
self.Config = Model('sale.configuration', self.ctx)
self._config, = self.Config.find([('id', '=', 1)])
self.discount_method = self._config.get('discount_pos_method')
self.allow_discount_handle = self._config.get('allow_discount_handle', None)
@ -263,13 +265,13 @@ class FrontWindow(QMainWindow):
('state', '=', 'activated'),
])
if self._sale_pos_restaurant:
self.PartyConsumer = FastModel('party.consumer', self.ctx)
self.PartyConsumer = Model('party.consumer', self.ctx)
if self._config['delivery_product']:
self._delivery_product = 0
self.User = FastModel('res.user', self.ctx)
self.User = Model('res.user', self.ctx)
self._user, = self.User.find([('login', '=', self.user)])
self.Company = FastModel('company.company', self.ctx)
self.Company = Model('company.company', self.ctx)
self._company, = self.Company.find([('id', '=', 1)])
self.logo = self._company['logo']
@ -278,44 +280,43 @@ class FrontWindow(QMainWindow):
self.ctx['user'] = self._user['id']
self.Sale = FastModel('sale.sale', self.ctx)
self.SaleLine = FastModel('sale.line', self.ctx)
self.Product = FastModel('product.product', self.ctx)
self.Journal = FastModel('account.statement.journal', self.ctx)
self.Statement = FastModel('account.statement', self.ctx)
self.Expenses = FastModel('sale_pos.expenses_daily', self.ctx)
self.Employee = FastModel('company.employee', self.ctx)
self.Shop = FastModel('sale.delivery_party', self.ctx)
self.SaleDiscont = FastModel('sale.discount', self.ctx)
self.Device = FastModel('sale.device', self.ctx)
self.Category = FastModel('product.category', self.ctx)
self.PaymentTerm = FastModel('account.invoice.payment_term', self.ctx)
self.Party = FastModel('party.party', self.ctx)
self.DeliveryParty = FastModel('sale.delivery_party', self.ctx)
self.Taxes = FastModel('account.tax', self.ctx)
self.Discount = FastModel('sale.discount', self.ctx, fields=[
self.Sale = Model('sale.sale', self.ctx)
self.SaleLine = Model('sale.line', self.ctx)
self.Product = Model('product.product', self.ctx)
self.Journal = Model('account.statement.journal', self.ctx)
self.Statement = Model('account.statement', self.ctx)
self.Expenses = Model('sale_pos.expenses_daily', self.ctx)
self.Employee = Model('company.employee', self.ctx)
self.Shop = Model('sale.delivery_party', self.ctx)
self.SaleDiscont = Model('sale.discount', self.ctx)
self.Device = Model('sale.device', self.ctx)
self.Category = Model('product.category', self.ctx)
self.PaymentTerm = Model('account.invoice.payment_term', self.ctx)
self.Party = Model('party.party', self.ctx)
self.DeliveryParty = Model('sale.delivery_party', self.ctx)
self.Taxes = Model('account.tax', self.ctx)
self.Discount = Model('sale.discount', self.ctx, fields=[
'name', 'active', 'discount', 'type_discount'
])
self.ActionReport = FastModel('ir.action.report', self.ctx)
self.ActionReport = Model('ir.action.report', self.ctx)
if self._commission_activated:
self.Agent = FastModel('commission.agent', self.ctx)
self.Comission = FastModel('commission', self.ctx)
self.Agent = Model('commission.agent', self.ctx)
self.Comission = Model('commission', self.ctx)
if self._sale_pos_restaurant:
self.RestTables = FastModel('sale.shop.table', self.ctx)
self.Consumer = FastModel('party.consumer', self.ctx)
self.RestTables = Model('sale.shop.table', self.ctx)
self.Consumer = Model('party.consumer', self.ctx)
self.device, = self.Device.find([
('id', '=', self._user['sale_device']['id']),
('id', '=', self._user['sale_device']),
])
self.shop = self.device['shop']
self.shop_taxes = self.shop['taxes']
self.shop = self.device['shop.']
self.shop_taxes = self.shop['taxes.']
self.company = self.shop['company']
self._journals = self.device['journals']
self._journals = self.device['journals.']
self.salesman_ids = [s['id'] for s in self.shop.get('salesmans', [])]
dom_salesman = [
('company', '=', self.company['id']),
('company', '=', self.company),
]
if self.salesman_ids:
dom_salesman.append(('id', 'in', self.salesman_ids))
@ -324,7 +325,7 @@ class FrontWindow(QMainWindow):
('type_discount', '=', 'percentage')
])
self.discounts_fixed = self.Discount.find([])
self.delivery_man_table = self.shop.get('delivery_man', [])
self.delivery_man_table = self.shop.get('delivery_man.', [])
if self.delivery_man_table:
self.delivery_man = [d for d in self.delivery_man_table if d['active']]
self._payment_terms = self.PaymentTerm.find([
@ -336,18 +337,18 @@ class FrontWindow(QMainWindow):
return 'user_without_permission'
self.user_can_delete = self.type_pos_user in ('frontend_admin', 'cashier')
self.product_categories = self.device['shop']['product_categories']
self.salesman_required = self.device['shop']['salesman_pos_required']
self.product_categories = self.shop['product_categories.']
self.salesman_required = self.shop['salesman_pos_required']
self.default_party = self.shop['party']
self.default_party = self.shop['party.']
if not self.default_party:
return 'missing_party_configuration'
self.default_journal = self.device['journal']
self.default_journal = self.device['journal.']
if not self.default_journal:
return 'missing_journal_device'
self.default_payment_term = self.shop['payment_term']
self.default_payment_term = self.shop['payment_term.']
self._password_admin = self._config.get('password_admin_pos')
self._password_force_assign = self._config.get('password_force_assign')
@ -360,8 +361,8 @@ class FrontWindow(QMainWindow):
'locations': [self.shop['warehouse']['id']],
}
self.Source = FastModel('sale.source', self.ctx)
self.Pricelist = FastModel('product.price_list', self.ctx)
self.Source = Model('sale.source', self.ctx)
self.Pricelist = Model('product.price_list', self.ctx)
return True

View File

@ -5,6 +5,7 @@ import os
import logging
import base64
import platform
import time
from packaging.version import parse as parse_version
from decimal import Decimal
from datetime import datetime, timedelta, date
@ -56,24 +57,32 @@ class AppWindow(FrontWindow):
super(AppWindow, self).__init__(connection, params, title)
self.payment_ctx = {}
self.set_keys()
time1 = time.time()
StackMessages(self)
print(time.time() - time1, 'load stack messages')
self.stock_context = None
self._sale = {}
self.ctx = self._context
self.ctx['params'] = params
time2 = time.time()
response = self.load_modules()
print(time.time() - time2, 'load modules')
if response is not True:
d = self.dialog(response)
d.exec_()
super(AppWindow, self).close()
return
time3 = time.time()
self.setup_sale_line()
self.setup_delivery_party()
self.setup_sale_consumer()
self.setup_payment()
self.set_domains()
print(time.time() - time3, 'load setups')
time1 = time.time()
self.create_gui()
print(time.time() - time1, 'load gui')
self.message_bar.load_stack(self.stack_msg)
self.journal = {}
if not hasattr(self, 'auto_print_commission'):
@ -93,7 +102,10 @@ class AppWindow(FrontWindow):
self._amount_text = ''
self._input_text = ''
self._sign = None
time1 = time.time()
self.create_dialogs()
print(time.time() - time1, 'load dialogs')
time1 = time.time()
self.store = StoreView(self, SALE_FIELDS)
if not hasattr(self, 'active_weighing'):
self.active_weighing = False
@ -113,6 +125,7 @@ class AppWindow(FrontWindow):
for j in self._journals:
if j['id'] == self.default_journal['id']:
self.default_journal = j
print(time.time() - time1, 'load final')
def set_domains(self):
self.domain_search_product = [
@ -122,9 +135,9 @@ class AppWindow(FrontWindow):
('template.account_category', '!=', None),
]
if self.shop['product_categories']:
if self.shop['product_categories.']:
self.domain_search_product.append(
('account_category', 'in', self.shop['product_categories'])
('account_category', 'in', self.shop['product_categories.'])
)
def set_cache_company(self):
@ -446,9 +459,9 @@ class AppWindow(FrontWindow):
'color': self.label_color
})
]
info_fields_append = info_fields.append
if self.enviroment != 'restaurant' and self._config.get('use_price_list'):
info_fields.append(
info_fields_append(
('list_price', {
'name': 'LISTA DE PRECIOS',
'placeholder': False,
@ -460,7 +473,7 @@ class AppWindow(FrontWindow):
}))
self.sources = self.Source.find([])
info_fields.append(
info_fields_append(
('source', {
'name': 'CANAL',
'readonly': True,
@ -470,7 +483,7 @@ class AppWindow(FrontWindow):
}))
if self._config['show_position_pos']:
info_fields.append(('position', {
info_fields_append(('position', {
'name': 'POSICION',
'readonly': True,
'placeholder': False,
@ -478,7 +491,7 @@ class AppWindow(FrontWindow):
'color': self.label_color
}))
if self._commission_activated and self._config['show_agent_pos']:
info_fields.append(('agent', {
info_fields_append(('agent', {
'name': 'AGENTE',
'placeholder': False,
'readonly': True,
@ -489,7 +502,7 @@ class AppWindow(FrontWindow):
_cols = 2
self.field_delivery_charge = None
if self._config['show_delivery_charge']:
info_fields.append(
info_fields_append(
('delivery_charge', {
'name': 'PAGO DOMICILIO',
'placeholder': False,
@ -506,7 +519,7 @@ class AppWindow(FrontWindow):
self.field_table_assigned = None
if self._sale_pos_restaurant:
info_fields.append(
info_fields_append(
('consumer', {
'name': 'CONSUMIDOR',
'placeholder': False,
@ -522,7 +535,7 @@ class AppWindow(FrontWindow):
('all_paid', 'TODO PAGO'),
('partial_paid', 'PAGO PARCIAL'),
]
info_fields.append(
info_fields_append(
('payment_method', {
'name': 'MEDIO DE PAGO',
'placeholder': False,
@ -533,7 +546,7 @@ class AppWindow(FrontWindow):
'color': self.label_color
}))
info_fields.append(
info_fields_append(
('table_assigned', {
'name': 'MESA',
'placeholder': False,
@ -542,7 +555,7 @@ class AppWindow(FrontWindow):
'readonly': True,
}))
info_fields.append(
info_fields_append(
('order_status', {
'name': 'ESTADO',
'placeholder': False,
@ -614,23 +627,23 @@ class AppWindow(FrontWindow):
'color': self.label_color_2 or 'orange'
})
]
_fields_amounts_insert = _fields_amounts.insert
if self.enviroment == 'restaurant':
_fields_amounts.insert(3, ('tip_amount', {
_fields_amounts_insert(3, ('tip_amount', {
'name': 'VR. PROPINA',
'type': 'money',
'size': self.screen_size,
'color': self.label_color,
})
)
_fields_amounts.insert(4, ('delivery_amount', {
_fields_amounts_insert(4, ('delivery_amount', {
'name': 'VR. DOMIC',
'type': 'money',
'size': self.screen_size,
'color': self.label_color,
})
)
_fields_amounts.insert(6, ('net_amount', {
_fields_amounts_insert(6, ('net_amount', {
'name': 'NETO TOTAL',
'readonly': True,
'type': 'money',
@ -658,7 +671,10 @@ class AppWindow(FrontWindow):
if self.enviroment == 'restaurant':
self.panel_right_box = QWidget()
time3 = time.time()
values = self.get_product_by_categories_dash()
# print(self.product_categories, 'product categories')
print(time.time() - time3, 'load products categories dash')
self.menu_dash = MenuDash(self, values, 'on_selected_item')
self.order_front.hide()
vbox_order_front.addLayout(self.buttons_function, 0)
@ -1295,7 +1311,7 @@ class AppWindow(FrontWindow):
to_create = {
'shop': self.shop['id'],
'invoice_type': 'P',
'company': self.company['id'],
'company': self.company,
'party': _sale['party']['id'],
'sale_device': self.device['id'],
'payment_method': 'cash',
@ -1898,8 +1914,8 @@ class AppWindow(FrontWindow):
party, = self.Party.find([('id', '=', party_id)])
address_id = ''
if party['addresses']:
address_id = party['addresses'][0]['id']
if party.get('addresses.'):
address_id = party['addresses.'][0]['id']
invoice_type = 'P'
if party['invoice_type']:
invoice_type = party['invoice_type']
@ -1910,7 +1926,7 @@ class AppWindow(FrontWindow):
'invoice_type': invoice_type,
}
payment_term = party.get('customer_payment_term')
payment_term = party.get('customer_payment_term.')
if payment_term:
values['payment_term'] = payment_term
@ -1946,11 +1962,11 @@ class AppWindow(FrontWindow):
if sale.get('delivery_charge'):
self.field_delivery_charge.set_from_id(sale['delivery_charge'])
if sale.get('table_assigned'):
if sale.get('table_assigned.'):
self.field_table_assigned.setText(
sale['table_assigned']['name'] or '')
sale['table_assigned.']['name'] or '')
consumer = sale.get('consumer', None)
consumer = sale.get('consumer.', None)
if consumer:
self.field_consumer.setText(consumer['name'] or '')
self._consumer, = self.Consumer.find([
@ -1962,14 +1978,14 @@ class AppWindow(FrontWindow):
if hasattr(self, 'field_agent') and sale.get('agent') \
and sale.get('commission'):
commission = sale.get('commission')
sale['agent']['name'] = '[' + str(commission) + ']' + ' ' + sale['agent']['name']
self.store.set(sale['agent'])
self.field_agent_id = sale['agent']['id']
self.field_agent_ask.setText(sale['agent']['name'])
sale['agent.']['name'] = '[' + str(commission) + ']' + ' ' + sale['agent.']['name']
self.store.set(sale['agent.'])
self.field_agent_id = sale['agent.']['id']
self.field_agent_ask.setText(sale['agent.']['name'])
self.field_commission_ask.setText(str(commission))
self._set_commission_amount(sale['untaxed_amount'], commission)
self.line_ids = [li['id'] for li in sale.get('lines')]
self.line_ids = sale.get('lines', [])
if sale.get('lines'):
lines = self.SaleLine.find([
('id', 'in', self.line_ids),
@ -1984,7 +2000,7 @@ class AppWindow(FrontWindow):
#self.table_payment_lines.record_add(payment)
pass
self.party_id = sale['party']['id']
self.party_id = sale['party.']['id']
self.set_amounts(sale)
self.set_amount_received()
self.field_amount.setText('')
@ -2015,30 +2031,44 @@ class AppWindow(FrontWindow):
res = self.Sale.get_amounts({'sale_id': self._sale['id']})
self.store.set(res)
def _get_products_by_category_dash(self, cat_id):
records = self.Product.find([
def _get_products_by_category_dash(self, child, find):
child['items'] = self.Product.find([
('code', '!=', None),
('template.salable', '=', True),
('template.categories', '=', cat_id),
('template.categories', '=', child['id']),
], fields=['id', 'name', 'code', 'categories', 'rec_name', 'list_price'],
order=[('template.name', 'ASC')])
return records
# return records
def get_product_by_categories_dash(self):
self.allow_categories = [
allow_categories = [
pc for pc in self.product_categories
if not pc['parent'] and not pc['accounting']
]
for cat in self.allow_categories:
if not pc['parent'] and not pc['accounting']]
get_products = self._get_products_by_category_dash
find = self.Product.find
for cat in allow_categories:
cat['icon'] = get_icon(cat['name_icon'])
if cat.get('childs'):
for child in cat.get('childs'):
child['items'] = self._get_products_by_category_dash(
child['id'])
if cat.get('childs.'):
for child in cat.get('childs.'):
get_products(child, find)
else:
cat['items'] = self._get_products_by_category_dash(cat['id'])
return self.allow_categories
get_products(cat, find)
return allow_categories
# def get_product_by_categories_dash(self):
# self.allow_categories = [
# pc for pc in self.product_categories
# if not pc['parent'] and not pc['accounting']]
# get_products = self._get_products_by_category_dash
# find = self.Product.find
# for cat in self.allow_categories:
# cat['icon'] = get_icon(cat['name_icon'])
# if cat.get('childs.'):
# for child in cat.get('childs.'):
# get_products(child, find)
# else:
# get_products(cat, find)
# return self.allow_categories
def action_square_box_report(self):
try:
@ -2079,31 +2109,31 @@ class AppWindow(FrontWindow):
}
return res
def get_category_items(self, records):
records_by_category = {}
# def get_category_items(self, records):
# records_by_category = {}
def _get_tree_categories(cat):
sub_categories = {}
if not cat['childs']:
sub_categories[cat['name']] = records_by_category.get(
cat['id']) or []
else:
for child in cat['childs']:
sub_categories.update(_get_tree_categories(
self.target_categories[child]['obj']))
return sub_categories
# def _get_tree_categories(cat):
# sub_categories = {}
# if not cat['childs']:
# sub_categories[cat['name']] = records_by_category.get(
# cat['id']) or []
# else:
# for child in cat['childs']:
# sub_categories.update(_get_tree_categories(
# self.target_categories[child]['obj']))
# return sub_categories
for record in records:
cat_id = record.get('template.account_category')
if cat_id not in records_by_category.keys():
records_by_category[cat_id] = []
# for record in records:
# cat_id = record.get('template.account_category')
# if cat_id not in records_by_category.keys():
# records_by_category[cat_id] = []
records_by_category[cat_id].append(record)
# records_by_category[cat_id].append(record)
res = {}
for ac in self.allow_categories:
res[ac['name']] = _get_tree_categories(ac)
return res
# res = {}
# for ac in self.allow_categories:
# res[ac['name']] = _get_tree_categories(ac)
# return res
def on_selected_product(self):
if self.dialog_search_products.current_row:
@ -2405,7 +2435,7 @@ class AppWindow(FrontWindow):
to_create = {
'shop': self.shop['id'],
'invoice_type': invoice_type[0][0],
'company': self.company['id'],
'company': self.company,
'party': self.default_party['id'],
'sale_device': self.device['id'],
'payment_method': 'cash',
@ -2585,12 +2615,12 @@ class AppWindow(FrontWindow):
def add_sale_line(self, record):
if not record.get('unit.symbol'):
record['unit.symbol'] = record['unit']['symbol']
if isinstance(record['product'], dict):
record['unit.symbol'] = record['unit.']['symbol']
if isinstance(record.get('product.'), dict):
if not record.get('product.template.name'):
record['product.template.name'] = record['product']['template']['name']
record['product.template.name'] = record['product.']['template.']['name']
if not record.get('product.code'):
record['product.code'] = record['product']['code']
record['product.code'] = record['product.']['code']
if record.get('order_sended'):
record['order_sended'] = ''
rec = self.model_sale_lines.add_record(record)
@ -2940,7 +2970,6 @@ class AppWindow(FrontWindow):
# if not removed_item:
removed_item = self.table_sale_lines.delete_item(ignore_focus=True)
self._print_reversion(self._sale['id'], removed_item['id'])
if note:
self.SaleLine.write([removed_item['id']], {'note': note})
self.SaleLine.delete([removed_item['id']])
@ -2952,10 +2981,10 @@ class AppWindow(FrontWindow):
self.dialog_product_edit.close()
if self.enviroment == 'restaurant':
prd_code = removed_item.get('product.code', None)
if isinstance(removed_item['product'], dict):
prd_code = removed_item['product']['code']
if isinstance(removed_item.get('product.'), dict):
prd_code = removed_item['product.']['code']
if prd_code and self._config['tip_product']['code'] == prd_code:
if prd_code and self._config['tip_product.']['code'] == prd_code:
self.Sale.write([self._sale['id']], {'tip': None})
def set_discount(self, eval_value, lines_ids=[], type_=None):
@ -3054,7 +3083,6 @@ class AppWindow(FrontWindow):
def set_state(self, state='add'):
self._state = state
print('state', state)
state = STATES[state]
self._re = state['re']
if not self.type_pos_user == 'order':
@ -3231,7 +3259,6 @@ class AppWindow(FrontWindow):
if update_base_price:
data['update_base_price'] = update_base_price
if data:
print(data, 'this is data to edit')
_record = self.edit_line_sale(data, line)
if _record:
self.model_sale_lines.update_record(_record)

View File

@ -20,20 +20,21 @@ MODELS = {
'product.category': {
'rec_name': 'name',
'fields': [
'name', 'leasable', 'parent', 'childs', 'name_icon', 'accounting'
'name', 'parent', 'childs', 'name_icon', 'accounting'
]
},
'sale.sale': {
'rec_name': 'number',
'fields': [
'number', 'party', 'lines', 'sale_date', 'state', 'position',
'total_amount_cache', 'salesman', 'payment_term.payment_type', 'payments',
'number', 'party.rec_name', 'lines', 'sale_date', 'state', 'position',
'total_amount_cache', 'salesman.rec_name', 'payment_term.payment_type',
'payment_term.rec_name', 'payments',
'total_amount', 'residual_amount', 'paid_amount', 'untaxed_amount',
'tax_amount', 'delivery_charge', 'price_list', 'invoice_number',
'shipment_address', 'channel', 'delivery_way', 'consumer', 'kind',
'state_string', 'shop', 'delivery_party', 'reference', 'comment',
'shipment_address', 'channel', 'consumer', 'kind',
'shop', 'delivery_party', 'reference', 'comment',
'delivery_state', 'table_assigned', 'invoice_type', 'net_amount',
'tip_amount', 'delivery_amount', 'commission', 'agent', 'source',
'tip_amount', 'delivery_amount', 'commission', 'agent.rec_name', 'source.rec_name',
'payment_method', 'order_status', 'consumer.name', 'consumer.phone',
'consumer.address', 'consumer.notes', 'consumer.delivery',
]
@ -41,7 +42,7 @@ MODELS = {
'sale.line': {
'rec_name': 'product',
'fields': [
'product', 'product.template.sale_price_w_tax', 'type',
'product.template.sale_price_w_tax', 'type',
'quantity', 'unit_price_w_tax', 'product.description', 'note',
'description', 'qty_fraction', 'amount_w_tax', 'unit.symbol',
'product.template.name', 'product.code', 'unit.digits', 'amount',
@ -60,7 +61,8 @@ MODELS = {
'commission.agent': {
'rec_name': 'rec_name',
'fields': [
'active', 'party', 'party.id_number', 'rec_name', 'plan.percentage'
# 'active',
'party.id_number', 'party.rec_name', 'rec_name', 'plan.percentage'
]
},
'sale.delivery_party': {
@ -93,15 +95,24 @@ MODELS = {
'sale.device': {
'rec_name': 'name',
'fields': [
'name', 'shop', 'shop.company', 'shop.name', 'shop.taxes',
'shop.party', 'journals', 'shop.product_categories', 'journal',
'shop.payment_term', 'shop.warehouse', 'shop.discount_pos_method',
'name', 'shop.company', 'shop.name', 'shop.taxes', 'shop.taxes.name',
'shop.party.name', 'journals.rec_name',
'shop.product_categories.accounting',
'shop.product_categories.rec_name',
'shop.product_categories.name_icon',
'shop.product_categories.parent',
'shop.product_categories.childs.accounting',
'shop.product_categories.childs.name_icon',
'shop.product_categories.childs.parent',
'shop.product_categories.childs.rec_name',
'journal.name',
'shop.payment_term.name', 'shop.warehouse', 'shop.discount_pos_method',
'shop.salesman_pos_required', 'shop.electronic_authorization',
'shop.invoice_copies', 'shop.pos_authorization', 'shop.discounts',
'shop.computer_authorization', 'shop.manual_authorization',
'shop.credit_note_electronic_authorization', 'shop.salesmans',
'shop.debit_note_electronic_authorization', 'shop.delivery_man',
'shop.price_list', 'shop.order_copies'
'shop.credit_note_electronic_authorization', 'shop.salesmans.rec_name',
'shop.debit_note_electronic_authorization', 'shop.delivery_man.active',
'shop.delivery_man.rec_name', 'shop.price_list', 'shop.order_copies'
]
},
'sale.shop': {
@ -124,10 +135,10 @@ MODELS = {
'party.party': {
'rec_name': 'name',
'fields': [
'name', 'id_number', 'addresses', 'phone', 'customer_payment_term',
'customer_payment_term.name', 'customer_payment_term.payment_type', 'credit_limit_amount', 'receivable',
'salesman', 'credit_amount', 'street', 'categories_string',
'invoice_type'
'name', 'id_number', 'addresses.street', 'phone',
'customer_payment_term.name', 'customer_payment_term.payment_type',
'credit_limit_amount', 'receivable',
'salesman', 'credit_amount', 'street', 'invoice_type'
]
},
'ir.action.report': {

View File

@ -148,6 +148,127 @@ class FastModel(object):
return response
class Model(object):
def __init__(self, model, ctx, fields=None):
self.model = model
self.ctx = ctx
api_url = ctx['params']['api_url']
db = ctx['params']['database']
self.api = '/'.join(['http:/', 'localhost:8010', db])
_model = MODELS.get(model)
self.fields = None
if fields:
self.fields = fields
elif _model.get('fields'):
self.fields = _model['fields']
def __getattr__(self, name, *args):
'Return attribute value'
self.method = name
return self
def find(self, domain, order=None, limit=1000, ctx=None, fields=None):
if self.model == 'commission.agent':
print(domain, 'this is domain')
if ctx:
self.ctx.update(ctx)
route = self.get_route('search')
if not fields:
fields = self.fields
args_ = {
'model': self.model,
'domain': domain,
'order': order,
'limit': limit,
'fields_names': fields,
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
return res.json()
def write_many(self, ids, values, fields=None):
route = self.get_route('save_many')
if not fields:
fields = self.fields
args_ = {
'model': self.model,
'ids': ids,
'values': values,
'fields': fields,
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.put(route, data=data)
return res.json()
def write(self, ids, values, fields=None):
route = self.get_route('write')
if not fields:
fields = self.fields
if values.get('rec_name'):
_ = values.pop('rec_name')
args_ = {
'model': self.model,
'ids': ids,
'values': values,
'fields': fields,
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
return res.json()
def create(self, values):
route = self.get_route('create')
if values.get('rec_name'):
_ = values.pop('rec_name')
args_ = {
'model': self.model,
'record': values,
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
return res.json()
def delete(self, ids):
route = self.get_route('delete')
args_ = {
'model': self.model,
'ids': ids,
'context': self.ctx,
}
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
return res.json()
def get_route(self, target):
route = self.api + '/' + target
return route
def __call__(self, values=None, ctx=None):
if ctx:
self.ctx.update(ctx)
args_ = {
'model': self.model,
'method': self.method,
'args': values,
'context': self.ctx,
}
route = self.get_route('method')
data = json.dumps(args_, default=encoder)
res = requests.post(route, data=data)
response = None
try:
response = res.json()
except ValueError:
pass
return response
class FastReport(object):
def __init__(self, ctx):

View File

@ -38,6 +38,8 @@ class StoreView(object):
if values.get('id'):
self.sale_id = values['id']
for k, v in values.items():
if k.endswith('.'):
k = k[:-1]
self.store[k] = v
field = getattr(self.parent, 'field_' + k, None)
if field and hasattr(field, 'setText'):
@ -65,7 +67,7 @@ class StoreView(object):
for k, v in values.items():
self.store[k] = v
field_name = 'field_' + k
field = getattr(self.parent, field_name, None)
if not field:
continue
@ -76,5 +78,9 @@ class StoreView(object):
val = v
field.setText(str(val))
if isinstance(v, dict):
values[k] = v['id']
res = self.Sale.write([self.sale_id], values)
return res