project_task.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. # -*- coding: utf-8 -*-
  2. from odoo import models, fields, api
  3. from datetime import datetime, timedelta
  4. class ProjectTask(models.Model):
  5. _inherit = "project.task"
  6. x_start_date = fields.Date(string="Fecha inicio")
  7. x_end_date = fields.Date(string="Fecha final")
  8. x_days_duration = fields.Integer(string="Duración (Días)", compute="compute_days_duration", store=True)
  9. @api.depends("x_start_date","x_end_date")
  10. def compute_days_duration(self):
  11. for rec in self:
  12. if rec.x_start_date and rec.x_end_date:
  13. days = (rec.x_end_date - rec.x_start_date).days
  14. day_date = rec.x_start_date
  15. duration = 0
  16. for day in range(days + 1):
  17. weekday = day_date.weekday()
  18. if weekday not in [5,6]:
  19. duration += 1
  20. day_date += timedelta(days=1)
  21. rec.x_days_duration = duration
  22. else:
  23. rec.x_days_duration = 0
  24. @api.depends('date_deadline', 'planned_date_begin', 'user_ids')
  25. def _compute_allocated_hours(self):
  26. for rec in self:
  27. rec.allocated_hours = 0
  28. @api.depends('project_id')
  29. def _compute_display_in_project(self):
  30. for rec in self:
  31. rec.display_in_project = True
  32. @api.depends('project_id', 'parent_id')
  33. def _compute_show_display_in_project(self):
  34. for rec in self:
  35. rec.show_display_in_project = False
  36. @api.onchange("x_start_date")
  37. def onchange_start_date(self):
  38. for rec in self:
  39. if rec.x_start_date:
  40. rec.planned_date_begin = datetime.combine(rec.x_start_date, datetime.min.time()) + timedelta(hours=15)
  41. @api.onchange("x_end_date")
  42. def onchange_end_date(self):
  43. for rec in self:
  44. if rec.x_end_date:
  45. rec.date_deadline = datetime.combine(rec.x_end_date, datetime.min.time()) + timedelta(hours=12)
  46. def write(self, vals):
  47. res = super().write(vals)
  48. if vals and type(vals) == dict:
  49. for rec in self:
  50. if vals.get("x_start_date"):
  51. rec.planned_date_begin = datetime.combine(rec.x_start_date, datetime.min.time()) + timedelta(hours=15)
  52. if vals.get("x_end_date"):
  53. rec.date_deadline = datetime.combine(rec.x_end_date, datetime.min.time()) + timedelta(hours=12)
  54. return res