shopinvader/odoo-shopinvader

View on GitHub
shopinvader_product_stock/models/shopinvader_variant.py

Summary

Maintainability
A
35 mins
Test Coverage
# -*- coding: utf-8 -*-
# Copyright 2018 Akretion (http://www.akretion.com)
# Copyright 2018 ACSONE SA/NV
# Sébastien BEAU <sebastien.beau@akretion.com>
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).

from collections import defaultdict

from odoo import fields, models


class ShopinvaderVariant(models.Model):
    _inherit = "shopinvader.variant"

    stock_data = fields.Serialized(compute="_compute_stock_data")

    def _get_stock_export_key(self):
        self.ensure_one()
        line = self.env["ir.exports.line"].search(
            [
                ("export_id", "=", self.index_id.exporter_id.id),
                ("name", "=", "stock_data"),
            ]
        )
        if line.alias:
            return line.alias.split(":")[1]
        else:
            return line.name

    def _prepare_stock_data(self):
        stock_field = self.backend_id.product_stock_field_id.name
        return {"qty": self[stock_field]}

    def _compute_stock_data(self):
        result = defaultdict(dict)
        for backend in self.mapped("backend_id"):
            for (
                wh_key,
                wh_ids,
            ) in backend._get_warehouse_list_for_export().items():
                for loc_record in self.filtered(
                    lambda s: s.backend_id == backend
                ).with_context(warehouse=wh_ids):
                    result[loc_record.id][
                        wh_key
                    ] = loc_record._prepare_stock_data()
        for record in self:
            record.stock_data = result[record.id]