| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- from odoo import models, api, fields
- import logging
- _logger = logging.getLogger(__name__)
- class AccountAnalyticLine(models.Model):
- _inherit = 'account.analytic.line'
- @api.model_create_multi
- def create(self, vals_list):
- records = super().create(vals_list)
- for record in records:
- self._stc_auto_link_so_line(self.browse(record.id))
- return records
- def write(self, vals):
- res = super().write(vals)
- for record in self:
- # Si se está actualizando el empleado o no hay so_line, volver a buscar la línea
- if 'employee_id' in vals or not record.so_line:
- self._stc_auto_link_so_line(self.browse(record.id))
- return res
- def _stc_auto_link_so_line(self, record):
- _logger.info('[STC] Analizando línea de tiempo ID %s', record.id)
- if record.project_id:
- _logger.info('[STC] Proyecto: %s', record.project_id.id)
- sale_order = record.project_id.reinvoiced_sale_order_id
- if sale_order:
- _logger.info('[STC] Proyecto tiene reinvoiced_sale_order_id: %s', sale_order.id)
- template_lines = self.env['sale.order.template.line'].search([
- ('project_id', '=', record.project_id.id)
- ])
- _logger.info('[STC] Líneas de plantilla encontradas para el proyecto: %s', template_lines.ids)
- if template_lines:
- order_lines = sale_order.order_line.filtered(lambda l: l.template_line_id in template_lines)
- _logger.info('[STC] Líneas de pedido encontradas en el SO: %s', order_lines.ids)
- if record.employee_id:
- template_lines_with_employee = template_lines.filtered(lambda l: l.employee_id == record.employee_id)
- _logger.info('[STC] Líneas de plantilla con empleado %s: %s', record.employee_id.id, template_lines_with_employee.ids)
- order_lines_with_employee = order_lines.filtered(lambda l: l.template_line_id in template_lines_with_employee)
- _logger.info('[STC] Líneas de pedido con empleado: %s', order_lines_with_employee.ids)
- if order_lines_with_employee:
- record.so_line = order_lines_with_employee[0].id
- _logger.info('[STC] Asociada so_line %s por empleado', order_lines_with_employee[0].id)
- return
- if order_lines:
- record.so_line = order_lines[0].id
- _logger.info('[STC] Asociada so_line %s por default', order_lines[0].id)
- else:
- _logger.info('[STC] No se encontraron líneas de pedido asociables')
- else:
- _logger.info('[STC] No se encontraron líneas de plantilla para el proyecto')
- else:
- _logger.info('[STC] Proyecto no tiene reinvoiced_sale_order_id')
- else:
- _logger.info('[STC] No tiene proyecto')
- class ProjectProject(models.Model):
- _inherit = 'project.project'
- sale_order_template_project = fields.Boolean(
- string='Disponible para plantillas de venta',
- help='Si está activo, este proyecto puede ser seleccionado en líneas de plantillas de venta.'
- )
|