1
votes

In Product form view there is Button Sale. When you activate it shows tree view with all sale orders for this product. My goal is to make the same button but it has to show all pos orders that was made with this product.

i tried something like this but i know it's total garbage. If someone could explain to me how it works i will be more then grateful

<record id="act_product_pos_sale" model="ir.actions.act_window">
            <field name="name">POS Product Sale1</field>
            <field name="res_model">product.product</field>
            <field name="view_id" ref="product.product_product_tree_view"/>
        </record>

        <record model="ir.ui.view" id="product_form_pos_sale_button">
            <field name="name">product.product.sale.pos.order</field>
            <field name="model">product.product</field>
            <field name="inherit_id" ref="product.product_normal_form_view"/>
            <field name="arch" type="xml">
                <div name="button_box" position="inside">
                    <button class="oe_stat_button" name="action_view_pos_product"
                        type="object" icon="fa-usd">
                        <field string="POS" name="pos_product_order_total" widget="statinfo" />
                    </button>
                </div>
            </field>
        </record>


class ProductProduct(models.Model):
    _inherit = 'product.product'

 @api.multi
    def action_view_pos_product(self):
        OrderLine = self.env['pos.order.line']
        action = self.env.ref('sale.act_product_pos_sale')
        # action['domain'] = [('product_id', 'in', products.ids)]
        # action['context'] = {'': ,}
        return action
1

1 Answers

2
votes

You add action and call that action using button: Step 1: you have to calculate total pos sale count using compute method:

class ProductProduct(models.Model):
    _inherit = 'product.product'

    @api.multi
    def _pos_sales_count(self):
        r = {}
        domain = [
            ('state', 'in', ['sale', 'done']),
            ('product_id', 'in', self.ids),
        ]
        for group in self.env['report.pos.order'].read_group(domain, ['product_id', 'product_qty'], ['product_id']):
            r[group['product_id'][0]] = group['product_qty']
        for product in self:
            product.sales_count = r.get(product.id, 0)
        return r

    pos_sales_count = fields.Integer(compute='_pos_sales_count', string='#Pos Sales')


 class ProductTemplate(models.Model):
    _inherit = 'product.template'

    @api.multi
    @api.depends('product_variant_ids.pos_sales_count')
    def _pos_sales_count(self):
        for product in self:
            product.pos_sales_count = sum([p.sales_count for p in product.product_variant_ids])

    pos_sales_count = fields.Integer(compute='_pos_sales_count', string='#POS Sales')

Step 2 : define action to link pos order line related to product:

<record id="action_product_pos_sale_list" model="ir.actions.act_window">
    <field name="name">Sale Order Lines</field>
    <field name="res_model">pos.order.line</field>
    <field name="context">{'search_default_product_id': [active_id], 'default_product_id': active_id}</field>
</record>

<record model="ir.ui.view" id="product_form_view_pos_sale_order_button">
    <field name="name">product.product.pos.sale.order</field>
    <field name="model">product.product</field>
    <field name="inherit_id" ref="product.product_normal_form_view"/>
    <field name="groups_id" eval="[(4, ref('sales_team.group_sale_salesman'))]"/>
    <field name="arch" type="xml">
        <div name="button_box" position="inside">
            <button class="oe_stat_button" name="%(action_product_pos_sale_list)d"
                type="action" icon="fa-usd">
                <field string="Sales" name="pos_sales_count" widget="statinfo" />
            </button>
        </div>
    </field>
</record>