flectra/addons/product/report/product_pricelist.py
2018-01-16 02:34:37 -08:00

58 lines
2.3 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo, Flectra. See LICENSE file for full copyright and licensing details.
from flectra import api, models
from flectra.tools import float_round
class report_product_pricelist(models.AbstractModel):
_name = 'report.product.report_pricelist'
@api.model
def get_report_values(self, docids, data=None):
data = data if data is not None else {}
pricelist = self.env['product.pricelist'].browse(data.get('form', {}).get('price_list', False))
products = self.env['product.product'].browse(data.get('ids', data.get('active_ids')))
quantities = self._get_quantity(data)
return {
'doc_ids': data.get('ids', data.get('active_ids')),
'doc_model': 'hr.contribution.register',
'docs': products,
'data': dict(
data,
pricelist=pricelist,
quantities=quantities,
categories_data=self._get_categories(pricelist, products, quantities)
),
}
def _get_quantity(self, data):
return sorted([data['form'][key] for key in data['form'] if key.startswith('qty') and data['form'][key]])
def _get_categories(self, pricelist, products, quantities):
categ_data = []
categories = self.env['product.category']
for product in products:
categories |= product.categ_id
for category in categories:
categ_products = products.filtered(lambda product: product.categ_id == category)
prices = {}
for categ_product in categ_products:
prices[categ_product.id] = dict.fromkeys(quantities, 0.0)
for quantity in quantities:
prices[categ_product.id][quantity] = self._get_price(pricelist, categ_product, quantity)
categ_data.append({
'category': category,
'products': categ_products,
'prices': prices,
})
return categ_data
def _get_price(self, pricelist, product, qty):
sale_price_digits = self.env['decimal.precision'].precision_get('Product Price')
price = pricelist.get_product_price(product, qty, False)
if not price:
price = product.list_price
return float_round(price, precision_digits=sale_price_digits)