Sélectionner une révision Git
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'}