Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 28d970189b4fa51a766d865b68fc9b6b91d65537
  • 16.0 par défaut protégée
  • 18.0
3 résultats

__manifest__.py

Blame
  • sale_views_wizard.py 4,53 Kio
    # -*- coding: utf-8 -*- 
    
    # © 2017 Le Filament (<http://www.le-filament.com>)
    # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
    
    from odoo import models, fields, api
    from datetime import datetime
    from dateutil.relativedelta import relativedelta
     
    class LeFilamentSaleWizard(models.TransientModel): 
        _name = 'lefilament.sale.views.wizard' 
        _description = 'Sale Project Assignment'
    
        @api.model
        def _default_sale_id(self):
        	return self.env['sale.order'].browse(self.env.context.get('active_id'))
    
        @api.model
        def _default_project_project_id(self):
        	return self._default_sale_id().project_project_id
    
        @api.model
        def _default_related_project_id(self):
        	return self._default_sale_id().related_project_id
    
        @api.model
        def _default_project_name(self):
            return self._default_sale_id().partner_id.name
    
        sale_id = fields.Many2one('sale.order', string='Sale', default=_default_sale_id)
        project_id = fields.Many2one('project.project', string='Projet existant', default=_default_project_project_id)
        project_name = fields.Char('Nouveau Projet', default=_default_project_name)
        related_project_id = fields.Many2one('account.analytic.account', string='Compte Analytique', default=_default_related_project_id)
        related_project_name = fields.Char('Nouveau Compte Analytique', default=_default_project_name)
    
        @api.onchange('project_id')
        def onchange_project_id(self):
            self.related_project_id = self.project_id.analytic_account_id
    
        @api.multi
        def close_dialog(self):
        	sale_id = self.env['sale.order'].browse(self.env.context.get('active_id'))
            if self.project_id:
                sale_id.project_id = self.project_id.analytic_account_id
                sale_id.project_project_id = self.project_id
                project_id_new = self.project_id.id
            else:
                sale_id._create_analytic_account(prefix=None)
                project_id_new = sale_id.project_id.project_create({'name': self.project_name, 'use_tasks': True})
            stage_id_new = self.env['ir.values'].get_default('sale.config.settings', 'project_task_type_id')
            stage_new = self.env['project.task.type'].browse(stage_id_new)
            lf_tarif_jour = self.env['ir.values'].get_default('project.config.settings', 'lf_tarif_jour')
            lf_heures_jour = self.env['ir.values'].get_default('project.config.settings', 'lf_heures_jour')
            for line in sale_id.order_line:
                if line.product_id.project_id:
                    project = line.product_id.project_id
                    project_id = project.id
                    date_plan = datetime.strptime(line.procurement_ids.date_planned,'%Y-%m-%d %H:%M:%S')
                    date_deadline = (date_plan.date() + relativedelta(years=int(line.procurement_ids.product_qty))).strftime('%Y-%m-%d')
                    stage = line.product_id.project_task_type_id
                else:
                    stage = stage_new
                    project_id = project_id_new
                    date_deadline = line.procurement_ids.date_planned
                # planned_hours = line.procurement_ids._convert_qty_company_hours()
                project_date = self.env['project.project'].browse(project_id)
                project_date.lf_total_budget = project_date.lf_total_budget + line.price_subtotal
                project_date.lf_tarif_jour = lf_tarif_jour
                planned_hours = (line.price_subtotal / lf_tarif_jour) * lf_heures_jour
                first_line = line.name.split('\n', 1)[0]
                description_line = "<p>"
                i = 1
                for line_name in line.name:
                    if line_name == '\n':
                        description_line = description_line + "</p><p>"
                    else:
                        description_line = description_line + line_name
                task = self.env['project.task'].create({
                    'name': first_line,
                    'date_deadline': date_deadline,
                    'planned_hours': planned_hours,
                    'remaining_hours': planned_hours,
                    'partner_id': sale_id.partner_id.id or self.partner_dest_id.id,
                    'user_id': self.env.uid,
                    'procurement_id': line.procurement_ids.id,
                    'description': description_line + '</p><br/>',
                    'project_id': project_id,
                    'company_id': line.procurement_ids.company_id.id,
                    'stage_id': stage.id,
                    })
            sale_id.tasks_ids = self.env['project.task'].search([('sale_line_id', 'in', sale_id.order_line.ids)])
            sale_id.tasks_count = len(sale_id.tasks_ids)
            return {'type': 'ir.actions.act_window_close'}