Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 0b2102ba0a9c188ebd661a0f9fc3e86984c68032
  • 12.0 par défaut protégée
2 résultats

biocenys_project.py

Blame
  • biocenys_project.py 7,25 Kio
    # Copyright 2021 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    from odoo import fields, models, api
    
    
    class BiocenysProject(models.Model):
        _name = 'biocenys.project'
        _inherit = ['mail.thread', 'mail.activity.mixin']
        _description = 'Projet Biocenys'
    
        # ------------------------------------------------------
        # Default functions
        # ------------------------------------------------------
        def _get_default_favorite_user_ids(self):
            return [(6, 0, [self.env.uid])]
    
        # ------------------------------------------------------
        # Fields declaration
        # ------------------------------------------------------
        name = fields.Char(
            string='Numéro de projet',
            required=True)
        partner_id = fields.Many2one(
            comodel_name='res.partner',
            string='Client',
            domain="[('is_company', '=', True)]",
            required=False)
        partner_ids = fields.One2many(
            comodel_name='biocenys.project.partners',
            inverse_name='biocenys_project_id',
            string='Partner_ids',
            required=False)
    
        crm_lead_ids = fields.One2many(
            comodel_name='crm.lead',
            inverse_name='biocenys_project_id',
            string='Opportunités')
        sale_order_ids = fields.One2many(
            comodel_name='sale.order',
            inverse_name='biocenys_project_id',
            string='Devis / Commandes')
        sale_order_line_ids = fields.One2many(
            comodel_name='sale.order.line',
            inverse_name='biocenys_project_id',
            string='Lignes de commandes')
        invoice_ids = fields.One2many(
            comodel_name='account.invoice',
            inverse_name='biocenys_project_id',
            string='Factures')
    
        active = fields.Boolean(default=True)
        favorite_user_ids = fields.Many2many(
            comodel_name='res.users',
            relation='biocenys_project_favorite_user_rel',
            column1='biocenys_project_id',
            column2='user_id',
            default=_get_default_favorite_user_ids,
            string='Members')
        is_favorite = fields.Boolean(
            compute='_compute_is_favorite',
            inverse='_inverse_is_favorite',
            string='Projet favori')
    
        opportunity_count = fields.Integer(
            string='Nombre d\'opportunités',
            compute='_compute_opportunity_count',
            store=True)
        sale_count = fields.Integer(
            string='Nombre de ventes',
            compute='_compute_sale_count',
            store=True)
        sale_ol_count = fields.Integer(
            string='Nombre de lignes de commandes',
            compute='_compute_sale_ol_count',
            store=True)
        invoice_count = fields.Integer(
            string='Nombre de factures',
            compute='_compute_invoice_count',
            store=True)
    
        # ------------------------------------------------------
        # Computed fields / Search Fields
        # ------------------------------------------------------
        def _compute_is_favorite(self):
            """
            Copy from project.project
            """
            for project in self:
                project.is_favorite = self.env.user in project.favorite_user_ids
    
        def _inverse_is_favorite(self):
            """
            Copy from project.project
            """
            favorite_projects = not_fav_projects = \
                self.env['biocenys.project'].sudo()
            for project in self:
                if self.env.user in project.favorite_user_ids:
                    favorite_projects |= project
                else:
                    not_fav_projects |= project
    
            not_fav_projects.write({'favorite_user_ids': [(4, self.env.uid)]})
            favorite_projects.write({'favorite_user_ids': [(3, self.env.uid)]})
    
        @api.multi
        @api.depends('crm_lead_ids')
        def _compute_opportunity_count(self):
            for r in self:
                r.opportunity_count = len(r.crm_lead_ids)
    
        @api.multi
        @api.depends('sale_order_ids')
        def _compute_sale_count(self):
            for r in self:
                r.sale_count = len(r.sale_order_ids)
    
        @api.multi
        @api.depends('sale_order_line_ids', 'sale_order_line_ids.state')
        def _compute_sale_ol_count(self):
            for r in self:
                r.sale_ol_count = len(r.sale_order_line_ids.filtered(
                    lambda sol: sol.state == 'sale'))
    
        @api.multi
        @api.depends('invoice_ids')
        def _compute_invoice_count(self):
            for r in self:
                r.invoice_count = len(r.invoice_ids)
    
        # ------------------------------------------------------
        # Actions
        # ------------------------------------------------------
        def action_create_opportunity(self):
            return {
                'type': 'ir.actions.act_window',
                'views': [[self.env.ref('crm.crm_case_form_view_oppor').id,
                           "form"]],
                'view_mode': 'form',
                'res_model': 'crm.lead',
                'target': 'current',
                'context': {
                    'default_partner_id': self.partner_id.id,
                    'default_biocenys_project_id': self.id,
                },
            }
    
        def action_show_opportunities(self):
            return {
                'type': 'ir.actions.act_window',
                'name': 'Opportunités',
                'views': [
                    [self.env.ref('crm.crm_case_kanban_view_leads').id, "kanban"],
                    [self.env.ref('crm.crm_case_tree_view_oppor').id, "tree"],
                    [False, "form"]
                ],
                'view_mode': 'kanban',
                'res_model': 'crm.lead',
                'target': 'current',
                'context': {'search_default_biocenys_project_id': self.id}
            }
    
        def action_show_sales(self):
            return {
                'type': 'ir.actions.act_window',
                'name': 'Devis / Commandes',
                'views': [
                    [self.env.ref('sale.view_quotation_tree').id, "tree"],
                    [False, "form"]
                ],
                'view_mode': 'tree',
                'res_model': 'sale.order',
                'target': 'current',
                'context': {'search_default_biocenys_project_id': self.id}
            }
    
        def action_show_sales_ol(self):
            tree_view_id = self.env.ref(
                'biocenys_project.biocenys_sale_order_line_tree_inherited').id
            graph_view_id = self.env.ref(
                'biocenys_project.biocenys_sale_order_line_graph_view').id
            pivot_view_id = self.env.ref(
                'biocenys_project.biocenys_sale_order_line_pivot_view').id
            return {
                'type': 'ir.actions.act_window',
                'name': 'Lignes de commandes',
                'views': [
                    [tree_view_id, "tree"],
                    [False, "form"],
                    [graph_view_id, "graph"],
                    [pivot_view_id, "pivot"]
                ],
                'view_mode': 'tree',
                'res_model': 'sale.order.line',
                'target': 'current',
                'context': {
                    'search_default_biocenys_project_id': self.id
                }
            }
    
        def action_show_invoices(self):
            return {
                'type': 'ir.actions.act_window',
                'name': 'Factures',
                'views': [
                    [self.env.ref('account.invoice_tree_with_onboarding').id,
                     "tree"],
                    [False, "form"]
                ],
                'view_mode': 'tree',
                'res_model': 'account.invoice',
                'target': 'current',
                'context': {'search_default_biocenys_project_id': self.id}
            }