from odoo import api, fields, models


class RepairOrder(models.Model):
    _inherit = 'repair.order'

    # =========================
    # RELACIÓN PRINCIPAL ERP
    # =========================

    sale_order_id = fields.Many2one(
        'sale.order',
        string='Venta Principal',
        ondelete='set null',
        index=True
    )

    # =========================
    # HISTÓRICO DOCUMENTOS
    # =========================

    sale_order_ids = fields.Many2many(
        'sale.order',
        'repair_sale_rel',
        'repair_id',
        'sale_id',
        string='Documentos Comerciales'
    )

    # =========================
    # COMPRAS
    # =========================

    purchase_order_ids = fields.Many2many(
        'purchase.order',
        'repair_purchase_rel',
        'repair_id',
        'purchase_id',
        string='Pedidos de Compra'
    )

    # =========================
    # ALBARANES
    # =========================

    picking_ids = fields.One2many(
        'stock.picking',
        'repair_order_id',
        string='Albaranes'
    )

    # =========================
    # SMART BUTTONS
    # =========================

    sale_order_count = fields.Integer(
        compute='_compute_sale_order_count',
        string='Ventas'
    )

    purchase_order_count = fields.Integer(
        compute='_compute_purchase_order_count',
        string='Compras'
    )

    picking_count = fields.Integer(
        compute='_compute_picking_count',
        string='Albaranes'
    )

    # =========================
    # CONTADORES
    # =========================

    def _compute_sale_order_count(self):

        for record in self:

            record.sale_order_count = len(
                record.sale_order_ids
            )

    def _compute_purchase_order_count(self):

        for record in self:

            record.purchase_order_count = len(
                record.purchase_order_ids
            )

    def _compute_picking_count(self):

        for record in self:

            record.picking_count = len(
                record.picking_ids
            )

    # =========================
    # SMART BUTTON ACTIONS
    # =========================

    def action_view_sale_orders(self):

        self.ensure_one()

        return {
            'type': 'ir.actions.act_window',
            'name': 'Ventas',
            'view_mode': 'list,form',
            'res_model': 'sale.order',
            'domain': [
                ('id', 'in', self.sale_order_ids.ids)
            ],
        }

    def action_view_purchase_orders(self):

        self.ensure_one()

        return {
            'type': 'ir.actions.act_window',
            'name': 'Compras',
            'view_mode': 'list,form',
            'res_model': 'purchase.order',
            'domain': [
                ('id', 'in', self.purchase_order_ids.ids)
            ],
        }

    def action_view_pickings(self):

        self.ensure_one()

        return {
            'type': 'ir.actions.act_window',
            'name': 'Albaranes',
            'view_mode': 'list,form',
            'res_model': 'stock.picking',
            'domain': [
                ('id', 'in', self.picking_ids.ids)
            ],
        }

    # =========================
    # SECUENCIA OT
    # =========================

    @api.model
    def create(self, vals):

        if not vals.get('name'):

            vals['name'] = self.env[
                'ir.sequence'
            ].next_by_code(
                'repair.order.ot'
            ) or 'OT-00000'

        return super().create(vals)
