From 2d080e7c5a404b3788d6d5d92ddd8eda18694b35 Mon Sep 17 00:00:00 2001
From: Juliana <juliana@le-filament.com>
Date: Mon, 8 Jan 2018 10:51:55 +0100
Subject: [PATCH] update 8-01

---
 __init__.py                  |  3 +-
 __manifest__.py              |  3 ++
 models/__init__.py           |  3 +-
 models/procurement.py        |  6 +--
 models/product.py            |  3 +-
 models/res_config.py         | 17 +++++++++
 views/product_views.xml      |  1 +
 views/res_config_views.xml   | 13 +++++++
 views/sale_views.xml         | 10 +++++
 wizard/__init__.py           |  4 ++
 wizard/sale_views_wizard.py  | 74 ++++++++++++++++++++++++++++++++++++
 wizard/sale_views_wizard.xml | 42 ++++++++++++++++++++
 12 files changed, 173 insertions(+), 6 deletions(-)
 create mode 100644 models/res_config.py
 create mode 100644 views/res_config_views.xml
 create mode 100644 wizard/__init__.py
 create mode 100644 wizard/sale_views_wizard.py
 create mode 100644 wizard/sale_views_wizard.xml

diff --git a/__init__.py b/__init__.py
index a5e7e1d..eb6cc70 100644
--- a/__init__.py
+++ b/__init__.py
@@ -1,3 +1,4 @@
 # -*- coding: utf-8 -*-
 
-import models
\ No newline at end of file
+import models
+import wizard
\ No newline at end of file
diff --git a/__manifest__.py b/__manifest__.py
index 7eacbd9..8a9b0ac 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -18,6 +18,9 @@
 	'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',
 	],
 	'qweb': [
     ],
diff --git a/models/__init__.py b/models/__init__.py
index 4c86822..57bb6eb 100644
--- a/models/__init__.py
+++ b/models/__init__.py
@@ -4,4 +4,5 @@ import lf_link_sale_project
 import product
 import procurement
 import sale_order
-import sale_config_settings
\ No newline at end of file
+import sale_config_settings
+import res_config
\ No newline at end of file
diff --git a/models/procurement.py b/models/procurement.py
index 11a8b94..bdee566 100644
--- a/models/procurement.py
+++ b/models/procurement.py
@@ -7,6 +7,9 @@ from odoo import api, fields, models, _
 class LeFilamentProcurementOrder(models.Model):
     _inherit = 'procurement.order'
 
+    def _is_procurement_task(self):
+        return self.product_id.type == 'service' and self.product_id.track_service == 'task' and self.product_id.product_link == False
+
     def _get_stage_id(self):
     	Stage = self.env['project.task.type']
     	stage = self.product_id.with_context(force_company=self.company_id.id).project_task_type_id
@@ -34,9 +37,7 @@ class LeFilamentProcurementOrder(models.Model):
     	project.lf_total_budget = project.lf_total_budget + self.sale_line_id.price_subtotal
 
     def _create_service_task(self):
-    	stage = self._get_stage_id()
         project = self._get_project()
-        self._update_project_data(project)
         planned_hours = self._convert_qty_company_hours()
         task = self.env['project.task'].create({
             'name': '%s:%s' % (self.origin or '', self.product_id.name),
@@ -49,7 +50,6 @@ class LeFilamentProcurementOrder(models.Model):
             'description': self.name + '<br/>',
             'project_id': project.id,
             'company_id': self.company_id.id,
-            'stage_id': stage.id,
         })
         self.write({'task_id': task.id})
 
diff --git a/models/product.py b/models/product.py
index 2034a44..709feeb 100644
--- a/models/product.py
+++ b/models/product.py
@@ -7,4 +7,5 @@ class LeFilamentProductTemplate(models.Model):
     _inherit = 'product.template'
 
     project_task_type_id = fields.Many2one(
-        'project.task.type', 'Project Task Type')
\ No newline at end of file
+        'project.task.type', 'Project Task Type')
+    product_link = fields.Boolean('Produit à lier au projet')
\ No newline at end of file
diff --git a/models/res_config.py b/models/res_config.py
new file mode 100644
index 0000000..902e06c
--- /dev/null
+++ b/models/res_config.py
@@ -0,0 +1,17 @@
+# -*- 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 api, fields, models
+
+class ProjectLFConfiguration(models.TransientModel):
+    _name = 'project.config.settings'
+    _inherit = 'project.config.settings'
+
+    lf_tarif_jour = fields.Float('Tarif Jour')
+
+    @api.multi
+    def set_default_lf_tarif_jour(self):
+        Values = self.env['ir.values'].sudo()
+        Values.set_default('project.config.settings', 'lf_tarif_jour', self.lf_tarif_jour)
\ No newline at end of file
diff --git a/views/product_views.xml b/views/product_views.xml
index 0a0df78..606453d 100644
--- a/views/product_views.xml
+++ b/views/product_views.xml
@@ -7,6 +7,7 @@
         <field name="arch" type="xml">
             <field name="project_id" position="after">
                 <field name="project_task_type_id" attrs="{'invisible':['|', ('type','!=','service'), ('track_service', '&lt;&gt;', 'task')]}"/>
+                <field name="product_link" attrs="{'invisible':['|', ('type','!=','service'), ('track_service', '&lt;&gt;', 'task')]}"/>
             </field>
         </field>
     </record>
diff --git a/views/res_config_views.xml b/views/res_config_views.xml
new file mode 100644
index 0000000..9ddf308
--- /dev/null
+++ b/views/res_config_views.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<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="arch" type="xml">
+            <xpath expr="//field[@name='module_rating_project']" position="after">
+				<field name="lf_tarif_jour"  class="oe_inline oe_text_right" />
+            </xpath>
+        </field>
+    </record>
+</odoo>
\ No newline at end of file
diff --git a/views/sale_views.xml b/views/sale_views.xml
index 75d6e9b..040d609 100644
--- a/views/sale_views.xml
+++ b/views/sale_views.xml
@@ -3,6 +3,16 @@
 <odoo>
 	<data>
 
+		<record id="lefilament_view_order_form" model="ir.ui.view">
+            <field name="name">lefilament.sale.order.form</field>
+            <field name="model">sale.order</field>
+            <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="Créer un projet" attrs="{'invisible': ['|', ('project_project_id', '!=', False), ('state', '!=', 'sale')]}"/>
+                </header>
+            </field>
+        </record>
 
 	</data>
 </odoo>
\ No newline at end of file
diff --git a/wizard/__init__.py b/wizard/__init__.py
new file mode 100644
index 0000000..5a71743
--- /dev/null
+++ b/wizard/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import sale_views_wizard
\ No newline at end of file
diff --git a/wizard/sale_views_wizard.py b/wizard/sale_views_wizard.py
new file mode 100644
index 0000000..0e6fe2e
--- /dev/null
+++ b/wizard/sale_views_wizard.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*- 
+from odoo import models, fields, api 
+ 
+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')
+        for line in sale_id.order_line:
+            if line.product_id.project_id:
+                project = line.product_id.project_id
+                project_id = project.id
+                stage = line.product_id.project_task_type_id
+            else:
+                stage = stage_new
+                project_id = project_id_new
+            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
+            task = self.env['project.task'].create({
+                'name': '%s:%s' % ('', line.product_id.name),
+                'date_deadline': line.procurement_ids.date_planned,
+                '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': line.procurement_ids.name + '<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'}
\ No newline at end of file
diff --git a/wizard/sale_views_wizard.xml b/wizard/sale_views_wizard.xml
new file mode 100644
index 0000000..41544c6
--- /dev/null
+++ b/wizard/sale_views_wizard.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<odoo>
+	<data>
+
+		<record id="lefilament_project_view_form_create" model="ir.ui.view">
+            <field name="name">lefilament.project.view.form.create</field>
+            <field name="model">lefilament.sale.views.wizard</field>
+            <field name="arch" type="xml">
+                <form string="Lien Projet">
+                    <sheet>
+                        <group>
+                            <group>
+                                <field name="project_id" options="{'no_quick_create': True, 'no_create_edit' : True}" />
+                                <field name="project_name" attrs="{'required': [('project_id', '=', False)]}"/>
+                            </group>
+                        </group>
+                        <group>
+                            <group>
+                                <field name="related_project_id" options="{'no_quick_create': True, 'no_create_edit' : True}" readonly="1"/>
+                            </group>
+                        </group>
+                        <footer>
+                            <button string="Create" name="close_dialog" type="object" class="btn-primary"/>
+                            <button string="Discard" class="btn-default" special="cancel"/>
+                        </footer>
+
+                    </sheet>
+                </form>
+            </field>
+        </record>
+
+		<record id="lefilament_open_create_project" model="ir.actions.act_window">
+            <field name="name">Créer un Projet</field>
+            <field name="res_model">lefilament.sale.views.wizard</field>
+            <field name="view_type">form</field>
+            <field name="view_mode">form</field>
+            <field name="target">new</field>
+        </record>
+
+	</data>
+</odoo>
\ No newline at end of file
-- 
GitLab