Skip to content
Extraits de code Groupes Projets
Valider cde84b22 rédigé par Benjamin - Le Filament's avatar Benjamin - Le Filament
Parcourir les fichiers

[MIG] Make module installable in v12

parent 02488e4a
Branches
Aucune étiquette associée trouvée
1 requête de fusion!114.0 sale overview
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
{
'name': 'Le Filament - Link Sales Order to Project',
'version': '10.0.1.0.0',
'version': '12.0.1.0.0',
'license': 'AGPL-3',
'description': """
MODULE LINK SALE ORDER / PROJECT LE FILAMENT
This module depends upon *sale_service* and *lefilament_projets* modules.
- This module provides a new functionality to transform your sale order in
projects and tasks (and to update those in case sale order is updated)
- Product template has been enhanced, invoicing policy section in order to
set how each product should behave when transformed from sale order to
project/task.
""",
'author': 'LE FILAMENT',
'category': 'LE FILAMENT',
'depends': ['sale_timesheet', 'lefilament_projets'],
......@@ -23,8 +11,6 @@
],
'website': 'http://www.le-filament.com',
'data': [
'views/product_views.xml',
'views/sale_config_settings_views.xml',
'wizard/sale_views_wizard.xml',
'views/sale_views.xml',
'views/res_config_views.xml',
......
......@@ -206,6 +206,6 @@ msgid "sale.config.settings"
msgstr "sale.config.settings"
#. module: lefilament_link_sale_project
#: selection:product.template,track_service:0
#: selection:product.template,service_tracking:0
msgid "Create a project and link tasks"
msgstr "Créer un projet et lier des tâches"
# -*- coding: utf-8 -*-
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from . import product
from . import sale_config_settings
from . import res_config
from . import project_task_type
from . import project
from . import project_task
from . import project_task_type
from . import res_company
from . import res_config
from . import sale_order
# -*- coding: utf-8 -*-
# © 2017 Le Filament (<https://le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import fields, models
class LeFilamentProductTemplate(models.Model):
_inherit = 'product.template'
class ResCompany(models.Model):
_inherit = 'res.company'
## Project
lf_tarif_jour = fields.Float(string='Day Price',)
lf_alias_prefix = fields.Char(string='Alias prefix')
## Sale
project_task_type_id = fields.Many2one(
'project.task.type', 'Project task stage')
track_service = fields.Selection(selection_add=[
('project', 'Create a project and link tasks')])
comodel_name='project.task.type',
string='Initial step')
# -*- coding: utf-8 -*-
# © 2017 Le Filament (<https://le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class ProjectLFConfiguration(models.TransientModel):
_name = 'project.config.settings'
_inherit = 'project.config.settings'
from odoo import fields, models
lf_tarif_jour = fields.Float('Day Price')
lf_alias_prefix = fields.Char('Alias prefix')
@api.multi
def set_default_generate_project_alias(self):
Values = self.env['ir.values'].sudo() or self.env['ir.values']
for config in self:
Values.set_default('project.config.settings',
'generate_project_alias',
config.generate_project_alias)
class ResConfiguration(models.TransientModel):
_inherit = 'res.config.settings'
@api.multi
def set_default_lf_tarif_jour(self):
return self.env['ir.values'].sudo().set_default(
'project.config.settings', 'lf_tarif_jour', self.lf_tarif_jour)
## Project
lf_tarif_jour = fields.Float(
string='Day Price',
related='company_id.lf_tarif_jour',
readonly=False)
lf_alias_prefix = fields.Char(
string='Alias prefix',
related='company_id.lf_alias_prefix',
readonly=False)
@api.multi
def set_default_alias_prefix(self):
return self.env['ir.values'].sudo().set_default(
'project.config.settings',
'lf_alias_prefix',
self.lf_alias_prefix
)
## Sale
project_task_type_id = fields.Many2one(
related='company_id.project_task_type_id',
string='Initial step')
# -*- coding: utf-8 -*-
# © 2017 Le Filament (<https://le-filament.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
from odoo import api, fields, models
class LeFilamentSaleConfiguration(models.TransientModel):
_inherit = 'sale.config.settings'
project_task_type_id = fields.Many2one(
'project.task.type', 'Initial step')
@api.multi
def set_project_task_type(self):
return self.env['ir.values'].sudo().set_default(
'sale.config.settings',
'project_task_type_id',
self.project_task_type_id.id
)
......@@ -14,15 +14,12 @@ class SaleOrder(models.Model):
@api.multi
def lefilament_update_tasks(self):
for order in self:
stage_id_new = self.env['ir.values'].get_default(
'sale.config.settings', 'project_task_type_id')
stage_id_new = self.env.user.company_id.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')
sale_project_id = order.project_project_id
project_id = sale_project_id.id
lf_tarif_jour = self.env.user.company_id.lf_tarif_jour
lf_heures_jour = self.env.user.company_id.lf_heures_jour
project_id = order.project_ids[0].id
project_total_budget = 0
for line in order.order_line:
task_id_refer = self.env['project.task'].search(
......@@ -50,7 +47,7 @@ class SaleOrder(models.Model):
task_id_refer.planned_hours = planned_hours
task_id_refer.price_subtotal = line.price_subtotal
else:
if line.product_id.track_service == 'project':
if line.product_id.service_tracking == 'task_new_project':
if line.product_id.project_id:
project = line.product_id.project_id
project_id = project.id
......@@ -119,7 +116,7 @@ class LeFilamentSaleOrderLine(models.Model):
)
expense_type_id = expense_type_id and expense_type_id.id
prod_list = self.env['product.template'].search(
[('track_service', 'in', ['task', 'timesheet'])]
[('service_type', 'in', ['task', 'timesheet'])]
)
domain = [
('product_id', 'in', prod_list.ids),
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2017 Le Filament (<https://le-filament.com>)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="lefilament_view_product_timesheet_form" model="ir.ui.view">
<field name="name">lefilament.product.template.timesheet.form</field>
<field name="model">product.template</field>
<field name="inherit_id" ref="sale_timesheet.view_product_timesheet_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='project_id']" position="attributes">
<attribute name="attrs">{'invisible':['|', ('type','!=','service'), ('track_service', '&lt;&gt;', 'task'), ('track_service', '&lt;&gt;', 'project')]}</attribute>
</xpath>
<field name="project_id" position="after">
<field name="project_task_type_id" attrs="{'invisible':['|', ('type','!=','service'), ('track_service', '&lt;&gt;', 'project')]}"/>
</field>
</field>
</record>
</odoo>
......@@ -31,7 +31,6 @@
<field name="arch" type="xml">
<xpath expr="//notebook" position="inside">
<page string="Project Stages"
attrs="{'invisible': [('use_tasks', '=', False)]}"
name="project_stages">
<field name="type_ids"/>
</page>
......
......@@ -3,14 +3,58 @@
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="view_lefilament_project_config_settings" model="ir.ui.view">
<field name="name">project.lefilament.settings</field>
<field name="model">project.config.settings</field>
<field name="inherit_id" ref="project.view_config_settings"/>
<field name="name">res.config.lefilament.project.settings</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="project.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='module_rating_project']" position="after">
<field name="lf_tarif_jour" class="oe_inline oe_text_right" />
<field name="lf_alias_prefix" class="oe_inline" />
<xpath expr="//div[@id='use_collaborative_pad']" position="before">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<div class="text-muted">
Link Sale Project
</div>
<div class="content-group" >
<div class="row mt16">
<label class="col-lg-3 o_light_label" for="lf_tarif_jour"/>
<field name="lf_tarif_jour"/>
</div>
<div class="row mt16">
<label class="col-lg-3 o_light_label" for="lf_alias_prefix"/>
<field name="lf_alias_prefix"/>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
<record id="view_lefilament_sale_config_settings" model="ir.ui.view">
<field name="name">res.config.lefilament.sale.settings</field>
<field name="model">res.config.settings</field>
<field name="inherit_id" ref="sale.res_config_settings_view_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@data-key='sale_management']" position="inside">
<h2>Task</h2>
<div class="row mt16 o_settings_container" id="lefilament_link_sale_project">
<div class="col-12 col-lg-6 o_setting_box">
<div class="o_setting_left_pane">
</div>
<div class="o_setting_right_pane">
<div class="content-group" >
<div class="row mt16">
<label class="col-lg-3 o_light_label" for="project_task_type_id"/>
<field name="project_task_type_id"/>
</div>
</div>
</div>
</div>
</div>
</xpath>
</field>
</record>
</odoo>
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2017 Le Filament (<https://le-filament.com>)
License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
<odoo>
<record id="lefilament_view_sales_config" model="ir.ui.view">
<field name="name">lefilament.sale.settings</field>
<field name="model">sale.config.settings</field>
<field name="inherit_id" ref="sale.view_sales_config"/>
<field name="arch" type="xml">
<div id="main" position="inside">
<group string="Task">
<field name="project_task_type_id" class="oe_inline"/>
</group>
</div>
</field>
</record>
</odoo>
......@@ -10,8 +10,8 @@
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<header>
<button name="%(lefilament_open_create_project)d" type="action" string="Create project" attrs="{'invisible': ['|', ('project_project_id', '!=', False), ('state', '!=', 'sale')]}"/>
<button name="lefilament_update_tasks" type="object" string="Update tasks" attrs="{'invisible': ['|', ('project_project_id', '=', False), ('state', '!=', 'sale')]}" class="btn-primary"/>
<button name="%(lefilament_open_create_project)d" type="action" string="Create project" attrs="{'invisible': ['|', ('project_ids', '!=', False), ('state', '!=', 'sale')]}"/>
<button name="lefilament_update_tasks" type="object" string="Update tasks" attrs="{'invisible': ['|', ('project_ids', '=', False), ('state', '!=', 'sale')]}" class="btn-primary"/>
</header>
</field>
</record>
......
......@@ -17,8 +17,8 @@ class LeFilamentSaleWizard(models.TransientModel):
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
def _default_project_ids(self):
return self._default_sale_id().project_ids[0]
@api.model
def _default_related_project_id(self):
......@@ -34,7 +34,7 @@ class LeFilamentSaleWizard(models.TransientModel):
sale_id = fields.Many2one('sale.order', string='Sale',
default=_default_sale_id)
project_id = fields.Many2one('project.project', string='Existing project',
default=_default_project_project_id)
default=_default_project_ids)
project_name = fields.Char('New project', default=_default_project_name)
related_project_id = fields.Many2one('account.analytic.account',
string='Analytical account related',
......@@ -52,25 +52,21 @@ class LeFilamentSaleWizard(models.TransientModel):
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
sale_id.project_ids = 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_id_new = self.env.user.company_id.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')
lf_alias_prefix = self.env['ir.values'].get_default(
'project.config.settings', 'lf_alias_prefix')
ir_values = self.env['ir.values'].get_default(
'project.config.settings', 'generate_project_alias')
lf_tarif_jour = self.env.user.company_id.lf_tarif_jour
lf_heures_jour = self.env.user.company_id.lf_heures_jour
lf_alias_prefix = self.env.user.company_id.lf_alias_prefix
for line in sale_id.order_line:
if line.product_id.track_service == 'project':
if line.product_id.service_tracking == 'task_new_project':
if line.product_id.project_id:
project = line.product_id.project_id
project_id = project.id
......@@ -103,7 +99,7 @@ class LeFilamentSaleWizard(models.TransientModel):
+ line.price_subtotal)
project_date.lf_tarif_jour = lf_tarif_jour
if not line.product_id.project_id:
if ir_values and lf_alias_prefix:
if lf_alias_prefix:
lf_alias_name = lf_alias_prefix + project_date.name
project_date.alias_name = lf_alias_name
planned_hours = ((line.price_subtotal / lf_tarif_jour)
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter