diff --git a/models/__init__.py b/models/__init__.py index 38ce05d0c8b42297c5b12146334e821de00126fb..6c5713ee1fca38f6180bea4ac8f1547f1eca38cd 100644 --- a/models/__init__.py +++ b/models/__init__.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- import product -import procurement import sale_config_settings import res_config import project_task_type diff --git a/models/procurement.py b/models/procurement.py deleted file mode 100644 index e913cdbbb3644fd30b4387ce942b16df8acfa57d..0000000000000000000000000000000000000000 --- a/models/procurement.py +++ /dev/null @@ -1,65 +0,0 @@ -# -*- 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 LeFilamentProcurementOrder(models.Model): - _inherit = 'procurement.order' - - def _is_procurement_task(self): - return self.product_id.type == 'service' and self.product_id.track_service == 'task' - - 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 - if not stage: - stage_id = self.env['ir.values'].get_default('sale.config.settings', 'project_task_type_id') - stage = self.env['project.task.type'].browse(stage_id) - return stage - - def _get_project(self): - Project = self.env['project.project'] - project = self.product_id.with_context(force_company=self.company_id.id).project_id - if not project and self.sale_line_id: - # find the project corresponding to the analytic account of the sales order - account = self.sale_line_id.order_id.project_id - if not account: - self.sale_line_id.order_id._create_analytic_account() - account = self.sale_line_id.order_id.project_id - project = Project.search([('analytic_account_id', '=', account.id)], limit=1) - if not project: - project_id = account.project_create({'name': self.sale_line_id.order_id.partner_id.name, 'use_tasks': True}) - project = Project.browse(project_id) - return project - - def _update_project_data(self, project): - project.lf_total_budget = project.lf_total_budget + self.sale_line_id.price_subtotal - - def _create_service_task(self): - project = self._get_project() - planned_hours = self._convert_qty_company_hours() - task = self.env['project.task'].create({ - 'name': '%s:%s' % (self.origin or '', self.product_id.name), - 'date_deadline': self.date_planned, - 'planned_hours': planned_hours, - 'remaining_hours': planned_hours, - 'partner_id': self.sale_line_id.order_id.partner_id.id or self.partner_dest_id.id, - 'user_id': self.env.uid, - 'procurement_id': self.id, - 'description': self.name + '<br/>', - 'project_id': project.id, - 'company_id': self.company_id.id, - }) - self.write({'task_id': task.id}) - - msg_body = _("Task Created (%s): <a href=# data-oe-model=project.task data-oe-id=%d>%s</a>") % (self.product_id.name, task.id, task.name) - self.message_post(body=msg_body) - if self.sale_line_id.order_id: - self.sale_line_id.order_id.message_post(body=msg_body) - task_msg = _("This task has been created from: <a href=# data-oe-model=sale.order data-oe-id=%d>%s</a> (%s)") % (self.sale_line_id.order_id.id, self.sale_line_id.order_id.name, self.product_id.name) - task.message_post(body=task_msg) - - return task \ No newline at end of file diff --git a/models/sale_order.py b/models/sale_order.py index 4c509fe81cc08354ec05d576708ecab5d4c0e2b6..d260f84615b18db82bca4349dc213d857db6f15e 100644 --- a/models/sale_order.py +++ b/models/sale_order.py @@ -81,44 +81,17 @@ class SaleOrder(models.Model): project_date.lf_tarif_jour = lf_tarif_jour project_date.lf_total_budget = project_total_budget order.tasks_ids = self.env['project.task'].search([('sale_line_id', 'in', order.order_line.ids)]) - order.tasks_count = len(order.tasks_ids) + order.tasks_unt = len(order.tasks_ids) class LeFilamentSaleOrderLine(models.Model): _inherit = "sale.order.line" @api.multi def _compute_analytic(self, domain=None): - lines = {} - force_so_lines = self.env.context.get("force_so_lines") if not domain and self.ids: # To filter on analyic lines linked to an expense expense_type_id = self.env.ref('account.data_account_type_expenses', raise_if_not_found=False) expense_type_id = expense_type_id and expense_type_id.id - domain = [('so_line', 'in', self.ids), '|', ('amount', '<=', 0.0), ('project_id', '!=', False)] - - data = self.env['account.analytic.line'].read_group( - domain, - ['so_line', 'unit_amount', 'product_uom_id'], ['product_uom_id', 'so_line'], lazy=False - ) - # If the unlinked analytic line was the last one on the SO line, the qty was not updated. - if force_so_lines: - for line in force_so_lines: - lines.setdefault(line, 0.0) - for d in data: - if not d['product_uom_id']: - continue - line = self.browse(d['so_line'][0]) - lines.setdefault(line, 0.0) - uom = self.env['product.uom'].browse(d['product_uom_id'][0]) - if line.product_uom.category_id == uom.category_id: - qty = uom._compute_quantity(d['unit_amount'], line.product_uom) - else: - qty = d['unit_amount'] - lines[line] += qty - - for line, qty in lines.items(): - if line.product_id.track_service == 'project': - line.qty_delivered = 0 - else: - line.qty_delivered = qty - return True + prod_list = self.env['product.template'].search([('track_service','in', ['task','timesheet'])]) + domain = [('product_id', 'in', prod_list.ids), ('so_line', 'in', self.ids), '|', ('amount', '<=', 0.0), ('project_id', '!=', False)] + return super(LeFilamentSaleOrderLine, self)._compute_analytic(domain=domain) \ No newline at end of file diff --git a/wizard/sale_views_wizard.py b/wizard/sale_views_wizard.py index b52f9e02178fde63829e5a191ce392314dc743de..3a132e75caabc1268e408023d4f0debd12977d24 100644 --- a/wizard/sale_views_wizard.py +++ b/wizard/sale_views_wizard.py @@ -65,9 +65,15 @@ class LeFilamentSaleWizard(models.TransientModel): date_deadline = (date_plan.date() + relativedelta(years=int(line.product_uom_qty))).strftime('%Y-%m-%d') stage = line.product_id.project_task_type_id if sale_id.partner_id.is_company == True: - name_task = sale_id.partner_id.name + " - " + stage.name + if stage.name: + name_task = sale_id.partner_id.name + " - " + stage.name + else: + name_task = sale_id.partner_id.name else: - name_task = sale_id.partner_id.parent_id.name + " - " + stage.name + if stage.name: + name_task = sale_id.partner_id.parent_id.name + " - " + stage.name + else: + name_task = sale_id.partner_id.parent_id.name else: stage = stage_new project_id = project_id_new