diff --git a/helpdesk_project/__init__.py b/helpdesk_project/__init__.py index e69de29bb2..9a7e03eded 100644 --- a/helpdesk_project/__init__.py +++ b/helpdesk_project/__init__.py @@ -0,0 +1 @@ +from . import models \ No newline at end of file diff --git a/helpdesk_project/__manifest__.py b/helpdesk_project/__manifest__.py index 76fbc55cbe..55bc851ac6 100644 --- a/helpdesk_project/__manifest__.py +++ b/helpdesk_project/__manifest__.py @@ -15,8 +15,11 @@ "PESOL ," "Odoo Community Association (OCA)", "website": "https://github.com/OCA/helpdesk", - "depends": ["helpdesk_mgmt"], - "data": [], + "depends": ["helpdesk_mgmt","project",], + "data": [ + 'views/project_views.xml', + 'views/ticket_views.xml', + ], "demo": [], "development_status": "Alpha", "application": True, diff --git a/helpdesk_project/models/__init__.py b/helpdesk_project/models/__init__.py new file mode 100644 index 0000000000..d49f1509cb --- /dev/null +++ b/helpdesk_project/models/__init__.py @@ -0,0 +1,2 @@ +from . import project +from . import helpdesk_ticket \ No newline at end of file diff --git a/helpdesk_project/models/helpdesk_ticket.py b/helpdesk_project/models/helpdesk_ticket.py new file mode 100644 index 0000000000..a03b16a3a4 --- /dev/null +++ b/helpdesk_project/models/helpdesk_ticket.py @@ -0,0 +1,53 @@ +from odoo import api, fields, models + + +class HelpdeskTicket(models.Model): + _inherit = 'helpdesk.ticket' + + name = fields.Char(string='Name') + + #Uno o varios tickets pueden estar asignados a un proyecto + project_id = fields.Many2one( + comodel_name='project.project', + string='Proyecto') + + #Uno o varios tickets pueden estar asignados a una tarea' + task_id = fields.Many2one( + comodel_name='project.task', + string='Tarea') + + def action_new_view(self): + # action = self.env.ref("helpdesk_project.project_alta_ticket_action").read()[0] + action = self.env.ref("helpdesk_project.task_action_ticket_new").read()[0] + action['context']={ + 'default_task_id' : self.id, + 'default_project_id' : self.project_id and self.project_id.id + } + return action + + # Si busco la tarea sin indicar el proyecto completar el proyecto de esa tarea + # (onchange en tarea que complete el projecto) + # si busco primero el proyecto solo permitir seleccionar tareas de ese proyecto + # (onchange a project que devuelva un domain) + + # Al buscar una tarea sin poner el proyecto que se obtenga el proyecto + @api.onchange('task_id') + def _onchange_task_id(self): + if self.task_id and self.task_id.project_id: + self.project_id = self.task_id.project_id + else: + self.project_id = False + + + # Al buscar un proyecto filtrar (domain) las posibles tareas de ese proyecto + @api.onchange('project_id') + def _onchange_project_id(self): + if self.project_id: + domain = {'task_id':[('project_id',"=",self.project_id.id)]} + #domain = [(project_id,"=",self.project_id.id)] + #domain = {'task_id':[]} + else: + domain = {} + return {'domain' : domain} + + diff --git a/helpdesk_project/models/project.py b/helpdesk_project/models/project.py new file mode 100644 index 0000000000..139338a3bb --- /dev/null +++ b/helpdesk_project/models/project.py @@ -0,0 +1,48 @@ +from odoo import api, fields, models + + +class ProjectTask(models.Model): + + _inherit = 'project.task' + + ticket_ids = fields.One2many(comodel_name='helpdesk.ticket', inverse_name='task_id', string='Tareas') + + tickets_count = fields.Integer(compute='contar_tickets',string='Tcks.') + + + @api.depends('ticket_ids') + def contar_tickets(self): + self.tickets_count = len(self.ticket_ids) + + def action_view_tickets_miVersion(self): + action = self.env.ref("helpdesk_project.project_alta_ticket_action").read()[0] + # action['context']={ + # 'default_task_id' : self.id, + # 'default_project_id' : self.project_id and self.project_id.id + # } + action['res_id'] = 0 + return action + + def action_view_tickets(self): + action = self.env.ref("helpdesk_project.task_action_ticket_new").read()[0] + action['context']={ + 'default_task_id' : self.id, + 'default_project_id' : self.project_id and self.project_id.id + } + return action + + # def action_view_tickets(self): + # action = self.env.ref('sale.action_quotations_with_onboarding').read()[0] + # action['context'] = { + # 'search_default_draft': 1, + # 'search_default_partner_id': self.partner_id.id, + # 'default_partner_id': self.partner_id.id, + # 'default_opportunity_id': self.id + # } + # action['domain'] = [('opportunity_id', '=', self.id), ('state', 'in', ['draft', 'sent'])] + # quotations = self.mapped('order_ids').filtered(lambda l: l.state in ('draft', 'sent')) + # if len(quotations) == 1: + # action['views'] = [(self.env.ref('sale.view_order_form').id, 'form')] + # action['res_id'] = quotations.id + # return action + \ No newline at end of file diff --git a/helpdesk_project/views/project_views.xml b/helpdesk_project/views/project_views.xml new file mode 100644 index 0000000000..b4a55bc713 --- /dev/null +++ b/helpdesk_project/views/project_views.xml @@ -0,0 +1,65 @@ + + + + + + project.task.inherit.view.form + project.task + + + + + + + + + + + + + + + + + + + + ALTA_TICKETS_DESDE_TAREAS + helpdesk.ticket + form,tree + [('task_id','=',active_id)] + {'search_default_task_id':active_id,'default_task_id':active_id} + + new + + + + + + TICKET + helpdesk.ticket + form,tree + [('task_id','=',active_id)] + + + + + + \ No newline at end of file diff --git a/helpdesk_project/views/ticket_views.xml b/helpdesk_project/views/ticket_views.xml new file mode 100644 index 0000000000..3bfa1173ba --- /dev/null +++ b/helpdesk_project/views/ticket_views.xml @@ -0,0 +1,22 @@ + + + + + helpdesk.ticket.inherit.view.form + helpdesk.ticket + + + + + + + + + + + + + + + + \ No newline at end of file