Přejít na obsah
Menu
You need to be registered to interact with the community.
This question has been flagged
1 Odpovědět
5989 Zobrazení


I have this function it filters in all selected MO's raw material lines, and then creates a report that is displayed in tree view.

But I have one problem, there can be allot lines with the same product. So my goal is to group all these lines and display them then just in one line with summed quantity.

Can someone help me with this?

class RawMaterialReport(models.Model):
    _name = 'raw.material.report'
    _description = 'Raw Material Report'

    product_id = fields.Many2one('product.product', string='Product', required=False)
    code = fields.Char(string='Code', required=True, readonly=True)
    total_qty = fields.Float(string='Total Qty', digits=(6, 2), readonly=True)
    virtual_qty = fields.Float(string='Forcasted Qty', digits=(6, 2), readonly=True)
    origin = fields.Char(string='Origin', required=True, readonly=True)
    production_id = fields.Many2one('mrp.production')


@api.multi
def open_raw_materials(self):
    self.search([]).unlink()
    mrp_productions = self._context.get('active_ids')
    mrp_production = self.env['mrp.production'].browse(mrp_productions)
    products_without_default_code = mrp_production.mapped('move_raw_ids').filtered(
        lambda x: not x.product_id.default_code
    )

    raws = mrp_production.mapped('move_raw_ids').sorted(
        key=lambda r: r.product_id.default_code
    )

    for r in raws:
        vals = {
            'product_id': r.product_id.id,
            'code': r.product_id.default_code,
            'total_qty': r.product_id.qty_available,
            'virtual_qty': r.product_id.virtual_available,
            'origin': r.reference,
            'production_id': r.raw_material_production_id.id,
        }
        self.create(vals)


Avatar
Zrušit
Nejlepší odpověď

Hello,

You can try tis


class RawMaterialReport(models.Model):
_name = 'raw.material.report'
_description = 'Raw Material Report'

product_id = fields.Many2one('product.product', string='Product', required=False)
code = fields.Char(string='Code', required=True, readonly=True)
total_qty = fields.Float(string='Total Qty', digits=(6, 2), readonly=True)
virtual_qty = fields.Float(string='Forcasted Qty', digits=(6, 2), readonly=True)
origin = fields.Char(string='Origin', required=True, readonly=True)
production_id = fields.Many2one('mrp.production')


@api.multi
def open_raw_materials(self):
data = {}
self.search([]).unlink()
mrp_productions = self._context.get('active_ids')
mrp_production = self.env['mrp.production'].browse(mrp_productions)
products_without_default_code = mrp_production.mapped('move_raw_ids').filtered(
lambda x: not x.product_id.default_code
)

raws = mrp_production.mapped('move_raw_ids').sorted(
key=lambda r: r.product_id.default_code
)

for r in raws:
key = (r.product_id.id, r.raw_material_production_id.id)
if key not in data:
data[key] = {
'product_id': r.product_id.id,
'code': r.product_id.default_code,
'total_qty': r.product_id.qty_available,
'virtual_qty': r.product_id.virtual_available,
'origin': r.reference,
'production_id': r.raw_material_production_id.id,
}
else:
data[key].update({
'total_qty' : data[key].get('total_qty') + r.product_id.qty_available,
})
for vals in data:
self.create(data[vals])
Avatar
Zrušit
Related Posts Odpovědi Zobrazení Aktivita
0
úno 22
4892
0
dub 24
1937
1
bře 22
2318
0
pro 19
4630
5
pro 19
3735