This question has been flagged
2 Replies
3911 Views

Dear,

I tried to do sale report as nice format  for printing like this 

Just want 3 cols to sumup saled products  qtys with UoM. I know there is a way to show UoM in odoo. But It is kind of messy if there are many Uom. like this 


So I tried to add UoM In measures like this.

But the result doesn't show up as i expected. see this.


Can Someone helps. Thanks a million.

Avatar
Discard
Best Answer

Hi, i'm testing and i write this code:

Function read_group is the key!

# -*- coding: utf-8 -*-
import logging, re

from odoo import api, fields, models
from odoo.exceptions import UserError
from odoo.osv.expression import expression
from pprint import pformat

_logger = logging.getLogger(__name__)


class SaleReport(models.Model):
_inherit = "sale.report"

# @api.depends('partner_id')
def _compute_objetivo_zona(self):
for rec in self:
_logger.warning("sadjhasjkdasjdkjjjkjhkjhk")
_logger.warning(rec.partner_id.x_zonas.x_studio_objetivos)

objetivo_zona = 0.0
partner = rec.partner_id
zone_id = partner.x_zonas

if zone_id:
objetivo_zona = zone_id.x_studio_objetivos

_logger.warning(objetivo_zona)
_logger.warning("sadjhasjkdasjdkjjjkjhkjhk")

rec.update({
'objetivo_zona': 5.0
})

zone_id = fields.Many2one('x_zonas', 'Zonas', readonly=True)
objetivo_zona = fields.Float('Objetivo', default=0.0, readonly=True)

def _select(self):
return super(SaleReport, self)._select() + ", zone.x_studio_objetivos as objetivo_zona"

@api.model
def read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True):
_logger.warning("HACK ESCONDER CAMPO")
_logger.warning(pformat(fields))
has_field_objetivo = False
newfields = []

# Buscar campos objetivos para no molestar en suma
for field in fields:
if field != 'objetivo_zona:sum':
newfields.append(field)
else:
has_field_objetivo = True

res = super(SaleReport, self).read_group(domain, newfields, groupby, offset=offset, limit=limit,
orderby=orderby,
lazy=lazy)

_logger.warning("RES ANTES")
_logger.warning(res)

if has_field_objetivo:
zones = {}
zone_total = 0

# Procesar Campos
for dato in res:
_logger.warning("DATO INDIVIDUAL")
_logger.warning(pformat(dato))

if 'zone_id' in dato:
if dato['zone_id']:
zone_id = dato['zone_id'][0]

if zone_id in zones:
zone = zones[zone_id]
dato['objetivo_zona'] = 0
else:
zone = self.env['x_zonas'].search([('id', '=', dato['zone_id'][0])])
zones[zone_id] = zone
if zone:
dato['objetivo_zona'] = zone.x_studio_objetivos

if zone:
zone_total += zone.x_studio_objetivos

_logger.warning(zone_total)

_logger.warning("RES FINAL")
_logger.warning(res)

return res

def _query(self, with_clause='', fields={}, groupby='', from_clause=''):
fields['zone_id'] = ", partner.x_studio_zona as zone_id"
fields['objetivo_zona'] = ", zone.x_studio_objetivos as objetivo_zona"
#
from_clause = 'left join x_zonas zone on (partner.x_studio_zona = x_zonas.id)'

groupby += ', partner.x_studio_zona'
return super(SaleReport, self)._query(with_clause, fields, groupby, from_clause)

Avatar
Discard
Author Best Answer

Anyone suggest an odoo addon that report sale summary. for example, there are dozens sale orders, I want to get the summary list of sale products among these orders, then I can get the total qty of each product.

Avatar
Discard