diff --git a/odex25_base/management_bugs/__init__.py b/odex25_base/management_bugs/__init__.py new file mode 100644 index 000000000..5305644df --- /dev/null +++ b/odex25_base/management_bugs/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import models \ No newline at end of file diff --git a/odex25_base/management_bugs/__manifest__.py b/odex25_base/management_bugs/__manifest__.py new file mode 100644 index 000000000..1cb4959fe --- /dev/null +++ b/odex25_base/management_bugs/__manifest__.py @@ -0,0 +1,55 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# This module you will Support for Odoo Open source platform. +# Error control and bug fixes. +# It will process the data entered and return a message indicating whether +# the company is eligible or not. +# +# Copyright (C) 2020- todooweb.com (https://www.todooweb.com) +# @author ToDOO (https://www.linkedin.com/company/todooweb) +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################### +{ + 'name': "System Bugs Management", + 'summary': """System Bugs Management""", + 'description': """ + System Bugs Management. Error control and bug fixes in the Odoo Open source platform + """, + 'version': '14.0.0.0.1', + 'category': 'Tools', + 'license': 'LGPL-3', + 'author': "ToDOO (www.todooweb.com)", + 'website': "https://todooweb.com/", + 'contributors': [ + "Equipo Dev ", + "Edgar Naranjo ", + "Tatiana Rosabal ", + ], + 'support': 'devtodoo@gmail.com', + 'depends': [ + 'base', + 'project', + ], + 'data': [ + 'security/ir.model.access.csv', + 'security/management_bug_security.xml', + 'views/management_bug.xml', + 'data/bugs_data.xml', + ], + + 'images': [ + 'static/description/screenshot_management_bug.png', + ], + 'installable': True, + 'application': True, + 'auto_install': False, +} diff --git a/odex25_base/management_bugs/data/bugs_data.xml b/odex25_base/management_bugs/data/bugs_data.xml new file mode 100644 index 000000000..c8d73387d --- /dev/null +++ b/odex25_base/management_bugs/data/bugs_data.xml @@ -0,0 +1,39 @@ + + + + Route log odoo + True + /var/log/odoo + + + + Bugs and Issues + followers + + + + Support Team + + + + Development Team + + + + QA Testing Team + + + + + Check Log System Odoo + + code + model.action_check_all_bugs() + + 30 + minutes + -1 + + + + \ No newline at end of file diff --git a/odex25_base/management_bugs/i18n/es.po b/odex25_base/management_bugs/i18n/es.po new file mode 100644 index 000000000..f22e5f74f --- /dev/null +++ b/odex25_base/management_bugs/i18n/es.po @@ -0,0 +1,330 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * management_bugs +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.0-20190207\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-04-06 17:31+0000\n" +"PO-Revision-Date: 2020-04-06 17:31+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form_me +msgid "Accept" +msgstr "Aceptar" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_active +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_active +msgid "Active" +msgstr "Activo" + +#. module: management_bugs +#: selection:management.bug.assign,type_assign:0 +msgid "Agent" +msgstr "Agente" + +#. module: management_bugs +#: model:ir.ui.menu,name:management_bugs.menu_projects_management_bug +msgid "All Bugs" +msgstr "Listado Bugs" + +#. module: management_bugs +#: model:ir.actions.act_window,name:management_bugs.action_management_bug +msgid "All bugs" +msgstr "Listado bugs" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_type_assign +msgid "Assign" +msgstr "Asignar" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_form +#: model:ir.ui.view,arch_db:management_bugs.management_bug_search +#: model:ir.ui.view,arch_db:management_bugs.management_bug_tree +msgid "Bugs" +msgstr "Bugs" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_form +msgid "CLAIM" +msgstr "RECLAMAR" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form_me +msgid "Cancel" +msgstr "Cancelar" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_code +msgid "Code" +msgstr "Código" + +#. module: management_bugs +#: model:ir.model,name:management_bugs.model_configuration_bug +msgid "Configuration Bug" +msgstr "Configuracion Bug" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.configuration_bug_form +#: model:ir.ui.view,arch_db:management_bugs.configuration_bug_search +#: model:ir.ui.view,arch_db:management_bugs.configuration_bug_tree +msgid "Configuration bug" +msgstr "Configuracion bug" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_create_uid +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_create_uid +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_create_uid +#: model:ir.model.fields,field_description:management_bugs.field_team_support_create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_create_date +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_create_date +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_create_date +#: model:ir.model.fields,field_description:management_bugs.field_team_support_create_date +msgid "Created on" +msgstr "Creado el" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_date_error +msgid "Date error" +msgstr "Fecha error" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_description +msgid "Description" +msgstr "Descripción" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_display_name +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_display_name +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_display_name +#: model:ir.model.fields,field_description:management_bugs.field_team_support_display_name +msgid "Display Name" +msgstr "Nombre a mostrar" + +#. module: management_bugs +#: code:addons/management_bugs/models/bug_digest.py:16 +#, python-format +msgid "Do not have access, skip this data for user's digest email" +msgstr "No tiene acceso, omita estos datos para el correo electrónico de resumen del usuario +" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_form +msgid "Document Name" +msgstr "Nombre documento" + +#. module: management_bugs +#: selection:management.bug,type_bug:0 +msgid "Error" +msgstr "Error" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_hour_error +msgid "Hours" +msgstr "Horas" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_id +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_id +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_id +#: model:ir.model.fields,field_description:management_bugs.field_team_support_id +msgid "ID" +msgstr "ID" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug___last_update +#: model:ir.model.fields,field_description:management_bugs.field_management_bug___last_update +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign___last_update +#: model:ir.model.fields,field_description:management_bugs.field_team_support___last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_write_uid +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_write_uid +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_write_uid +#: model:ir.model.fields,field_description:management_bugs.field_team_support_write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_write_date +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_write_date +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_write_date +#: model:ir.model.fields,field_description:management_bugs.field_team_support_write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_team_support_leader_id +msgid "Leader" +msgstr "Jefe de equipo" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_line +msgid "Line" +msgstr "Linea" + +#. module: management_bugs +#: model:ir.ui.menu,name:management_bugs.menu_projects_all_bugs +msgid "Management Bugs" +msgstr "Administrar Bugs" + +#. module: management_bugs +#: model:ir.model,name:management_bugs.model_management_bug +msgid "Management bug" +msgstr "Administrar bug" + +#. module: management_bugs +#: model:ir.model,name:management_bugs.model_management_bug_assign +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_form_me +#: model:ir.ui.view,arch_db:management_bugs.management_bug_assign_tree +msgid "Management bug assign" +msgstr "Administrar asignacion bug" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_team_support_member_ids +msgid "Members" +msgstr "Socios" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_name +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_name +#: model:ir.model.fields,field_description:management_bugs.field_team_support_name +msgid "Name" +msgstr "Nombre" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_note +msgid "Note" +msgstr "Nota" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_note +msgid "Notes" +msgstr "Notas" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_form +msgid "Other data" +msgstr "Otros datos" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_project_id +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_project_id +msgid "Projects" +msgstr "Proyectos" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_search +#: selection:management.bug,state:0 +msgid "Resolved" +msgstr "Resuelta" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_configuration_bug_route +msgid "Route" +msgstr "Ruta" + +#. module: management_bugs +#: model:configuration.bug,name:management_bugs.configuration01 +msgid "Route log odoo" +msgstr "Ruta log odoo" + +#. module: management_bugs +#: model:ir.actions.act_window,name:management_bugs.action_configuration_bug +#: model:ir.ui.menu,name:management_bugs.menu_projects_configuration_bug +msgid "Setting" +msgstr "Configracion" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_state +msgid "Status" +msgstr "Estado" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_form +msgid "TRANSFER / ASIGN" +msgstr "TRANSFERIR / ASIGNAR" + +#. module: management_bugs +#: model:ir.model,name:management_bugs.model_project_task +msgid "Task" +msgstr "Tarea" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.team_support_form +msgid "Team Members" +msgstr "Miembros equipo" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_support_id +#: model:ir.model.fields,field_description:management_bugs.field_project_task_support_id +#: selection:management.bug.assign,type_assign:0 +msgid "Team Support" +msgstr "Equipo soporte" + +#. module: management_bugs +#: model:ir.actions.act_window,name:management_bugs.action_team_support +#: model:ir.model,name:management_bugs.model_team_support +#: model:ir.ui.menu,name:management_bugs.menu_projects_team_support +#: model:ir.ui.view,arch_db:management_bugs.team_support_form +#: model:ir.ui.view,arch_db:management_bugs.team_support_search +#: model:ir.ui.view,arch_db:management_bugs.team_support_tree +msgid "Team support" +msgstr "Equipo soporte" + +#. module: management_bugs +#: model:ir.model.fields,help:management_bugs.field_configuration_bug_route +msgid "The path to the file should contain the container folders, Ex: /var/log/.." +msgstr "La ruta al archivo debe contener las carpetas del contenedor, Ej: / var / log / .." + +#. module: management_bugs +#: code:addons/management_bugs/models/management_bug.py:230 +#, python-format +msgid "The support team does not has a members" +msgstr "El equipo de soporte no tiene miembros" + +#. module: management_bugs +#: code:addons/management_bugs/models/management_bug.py:228 +#, python-format +msgid "The support team does not has a team leader" +msgstr "El equipo de soporte no tiene una líder de equipo" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_type_bug +msgid "Type Bug" +msgstr "Tipo Bug" + +#. module: management_bugs +#: model:ir.ui.view,arch_db:management_bugs.management_bug_search +#: selection:management.bug,state:0 +msgid "Unresolved" +msgstr "No resuelta" + +#. module: management_bugs +#: model:ir.model.fields,field_description:management_bugs.field_management_bug_assign_user_id +msgid "User" +msgstr "Usuario" + +#. module: management_bugs +#: selection:management.bug,type_bug:0 +msgid "Warning" +msgstr "Warning" + diff --git a/odex25_base/management_bugs/models/__init__.py b/odex25_base/management_bugs/models/__init__.py new file mode 100644 index 000000000..f0db6291e --- /dev/null +++ b/odex25_base/management_bugs/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import management_bug diff --git a/odex25_base/management_bugs/models/management_bug.py b/odex25_base/management_bugs/models/management_bug.py new file mode 100644 index 000000000..631167bc4 --- /dev/null +++ b/odex25_base/management_bugs/models/management_bug.py @@ -0,0 +1,281 @@ +# -*- coding: utf-8 -*- +import glob +import os +import shutil + +from odoo import api, fields, models, tools, SUPERUSER_ID, _ +from odoo.exceptions import UserError, AccessError, ValidationError + + +class ManagementBug(models.Model): + _name = 'management.bug' + _description = 'Management bug' + _order = 'id' + + name = fields.Char(string='Name', required=True, translate=True) + code = fields.Char('Code') + date_error = fields.Date('Date error') + hour_error = fields.Char('Hours') + description = fields.Text('Description') + type_bug = fields.Selection([ + ('error', 'Error'), + ('warning', 'Warning')], 'Type Bug', track_visibility='always', default=lambda self: self._context.get('type', 'warning')) + line = fields.Char('Line') + project_id = fields.Many2one('project.project', 'Projects', track_visibility='onchange') + active = fields.Boolean('Active', default=True) + state = fields.Selection([ + ('unresolved', 'Unresolved'), + ('resolved', 'Resolved')], 'Status', track_visibility='onchage', default='unresolved') + note = fields.Text('Notes') + + def read_route_file(self, route): + name_route = '' + if glob.glob(route + '/*'): + list_path = glob.glob(route + '/*.log') + for name in list_path: + separate_name = name.split('/')[-1:] + if separate_name[0] == 'odoo.log': + name_route = name + return name_route + + def action_check_all_bugs(self): + dict_error = { + 'name': '', + 'code': '', + 'date_error': False, + 'hour_error': False, + 'description': '', + 'type_bug': False, + 'line': '' + } + dict_init = { + 'name': '', + 'code': '', + 'date_error': False, + 'hour_error': False, + 'description': '', + 'type_bug': False, + 'line': '' + } + details_line = 0 + name_error = 'ERROR-' + name_warn = 'WARNING-' + list_display = [] + # data configuration + obj_setting_id = self.env['configuration.bug'].search([('active', '=', True)]) + if obj_setting_id: + for obj_setting in obj_setting_id: + route = obj_setting.route + file_touch = self.read_route_file(route) + if file_touch: + # copy log + destination_route = '/tmp/' + 'new_log.log' + if os.path.exists(file_touch): + with open(file_touch, 'rb') as forigen: + with open(destination_route, 'wb') as fdestino: + shutil.copyfileobj(forigen, fdestino) + # read log new + if os.path.exists(destination_route): + file_lines = open(destination_route, 'r') + for line in file_lines: + details_line += 1 + count_character = 0 + line = line.split(' ') + if 'ERROR' in line or 'WARNING' in line: + dict_error['date_error'] = line[0] + dict_error['hour_error'] = line[1] + dict_error['code'] = line[2] + dict_error['description'] = line[-1] + dict_error['line'] = details_line + if 'ERROR' in line: + dict_error['name'] = name_error + line[2] + dict_error['type_bug'] = 'error' + for i in line: + list_display = line + if i != 'ERROR': + count_character += 1 + if count_character <= 4: + list_display.pop(0) + dict_error['description'] = " ".join(list_display) + else: + dict_error['name'] = name_warn + line[2] + dict_error['type_bug'] = 'warning' + for i in line: + list_display = line + if i != 'WARNING': + count_character += 1 + if count_character <= 4: + list_display.pop(0) + dict_error['description'] = " ".join(list_display) + create_bug = self.env['management.bug'] + # create model (data) + if len(dict_error) > 0: + # eliminar los que tengan valor False + dict_error = dict(filter(lambda x: x[1] != False, dict_error.items())) + # crear bug + create_bug.create(dict_error) + dict_error.update(dict_init) + # delete new log + file_lines.close() + os.remove(destination_route) + + def action_claim_bug(self): + self.ensure_one() + ir_model_data = self.env['ir.model.data'] + try: + compose_form_id = ir_model_data.get_object_reference('management_bugs', 'management_bug_assign_form_me')[1] + except ValueError: + compose_form_id = False + return { + "name": "Claim a Bugs", + "view_type": "form", + "view_mode": "form", + "res_model": "management.bug.assign", + "type": "ir.actions.act_window", + 'view_id': compose_form_id, + 'target': 'new', + } + + def action_to_assign_bug(self): + self.ensure_one() + ir_model_data = self.env['ir.model.data'] + try: + compose_form_id = ir_model_data.get_object_reference('management_bugs', 'management_bug_assign_form')[1] + except ValueError: + compose_form_id = False + return { + "name": "Transfer or Assign", + "view_type": "form", + "view_mode": "form", + "res_model": "management.bug.assign", + "type": "ir.actions.act_window", + 'view_id': compose_form_id, + 'target': 'new', + } + + +class ConfigurationBug(models.Model): + _name = "configuration.bug" + _description = "Configuration Bug" + + name = fields.Char(string='Name', required=True, translate=True) + active = fields.Boolean('Active') + route = fields.Char('Route', required=True, help='The path to the file should contain the container folders, Ex: /var/log/..') + + @api.constrains('route') + def _add_constrains_fields(self): + if self.route: + if not self.route == '/var/log/odoo': + raise ValidationError("The route of the file should are '/var/log/odoo' .") + + +class ManagementBugAssign(models.TransientModel): + _name = "management.bug.assign" + _description = "Management bug assign" + _rec_name = 'type_assign' + + type_assign = fields.Selection([ + ('agent', 'Agent'), + ('team', 'Team Support')], 'Assign', track_visibility='onchage', default='agent', required=True, index=True) + user_id = fields.Many2one('res.users', 'User') + support_id = fields.Many2one('team.support', 'Team Support') + project_id = fields.Many2one('project.project', 'Projects', track_visibility='onchange') + note = fields.Text('Note') + + def action_do_transfer(self): + self.ensure_one() + dict_task = { + 'name': '', + 'project_id': '', + 'user_id': '', + 'support_id': '', + 'description': '' + } + name_task = '' + active_bug_ids = self.env.context.get('active_ids', []) + for bug in self.env['management.bug'].sudo().browse(active_bug_ids): + # make sure that each bug appears at most once in the list + if self.note: + if not bug.note: + bug.note = '' + bug.note += str(self.env.user.name) + ': ' + self.note + ' \n' + ' \n' + create_task = self.env['project.task'] + if bug.type_bug: + if bug.type_bug == 'error': + name_task = '[Develop] ' + bug.name + if bug.type_bug == 'warning': + name_task = '[Support] ' + bug.name + dict_task['name'] = name_task + if self.project_id: + for project in self.env['project.project'].sudo().browse(self.project_id): + dict_task['project_id'] = project.id['id'] + if self.project_id.user_id: + obj_support_id = self.env['team.support'].search([('leader_id', '=', self.project_id.user_id.id)]) + if obj_support_id: + for support in obj_support_id: + list_members = support.member_ids + if list_members: + if self.user_id in list_members: + if self.type_assign == 'agent': + dict_task['user_id'] = self.user_id.id + dict_task['support_id'] = support.id + # else: + # raise UserError(_('The support team does not has a team leader')) + # else: + # raise UserError(_('The support team does not has a members')) + + if self.support_id: + obj_support_id = self.env['team.support'].search([('id', '=', self.support_id.id)]) + if obj_support_id: + for obj_support in obj_support_id: + dict_task['support_id'] = obj_support.id + dict_task['user_id'] = self.project_id.user_id.id + dict_task['description'] = bug.description + create_task.create(dict_task) + bug.state = 'resolved' + + def action_do_claim(self): + self.ensure_one() + dict_task = { + 'name': '', + 'project_id': '', + 'user_id': '', + 'description': '' + } + name_task = '' + active_bug_ids = self.env.context.get('active_ids', []) + for bug in self.env['management.bug'].sudo().browse(active_bug_ids): + # make sure that each bug appears at most once in the list + if self.note: + if not bug.note: + bug.note = '' + bug.note += str(self.env.user.name) + ': ' + self.note + ' \n' + ' \n' + create_task = self.env['project.task'] + if bug.type_bug: + if bug.type_bug == 'error': + name_task = '[Develop] ' + bug.name + if bug.type_bug == 'warning': + name_task = '[Support] ' + bug.name + dict_task['name'] = name_task + if self.project_id: + for project in self.env['project.project'].sudo().browse(self.project_id): + dict_task['project_id'] = project.id['id'] + dict_task['user_id'] = self.env.user.id + dict_task['description'] = bug.description + create_task.create(dict_task) + bug.state = 'resolved' + + +class TeamSupport(models.Model): + _name = 'team.support' + _description = 'Team support' + + name = fields.Char('Name', index=True, required=True) + leader_id = fields.Many2one('res.users', 'Leader') + member_ids = fields.Many2many('res.users', 'team_user_support_rel', 'support_id', 'user_id', 'Members') + + +class Task(models.Model): + _inherit = "project.task" + + support_id = fields.Many2one('team.support', 'Team Support') diff --git a/odex25_base/management_bugs/security/ir.model.access.csv b/odex25_base/management_bugs/security/ir.model.access.csv new file mode 100644 index 000000000..d294df306 --- /dev/null +++ b/odex25_base/management_bugs/security/ir.model.access.csv @@ -0,0 +1,5 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_management_bug,access_management_bug,model_management_bug,project.group_project_manager,1,1,1,1 +access_configuration_bug,access_configuration_bug,model_configuration_bug,project.group_project_manager,1,1,1,1 +access_team_support,access_team_support,model_team_support,project.group_project_manager,1,1,1,1 +access_management_bug_assign,access_management_bug_assign,model_management_bug_assign,project.group_project_manager,1,1,1,1 \ No newline at end of file diff --git a/odex25_base/management_bugs/security/management_bug_security.xml b/odex25_base/management_bugs/security/management_bug_security.xml new file mode 100755 index 000000000..d8b5cce02 --- /dev/null +++ b/odex25_base/management_bugs/security/management_bug_security.xml @@ -0,0 +1,28 @@ + + + + + Management bug all user + + [(1, '=', 1)] + + + + Configuration bug all user + + [(1, '=', 1)] + + + + Team Support all user + + [(1, '=', 1)] + + + + Management Bug Assign all user + + [(1, '=', 1)] + + + diff --git a/odex25_base/management_bugs/static/description/icon.png b/odex25_base/management_bugs/static/description/icon.png new file mode 100644 index 000000000..4047a5ad3 Binary files /dev/null and b/odex25_base/management_bugs/static/description/icon.png differ diff --git a/odex25_base/management_bugs/static/description/index.html b/odex25_base/management_bugs/static/description/index.html new file mode 100644 index 000000000..24f60a589 --- /dev/null +++ b/odex25_base/management_bugs/static/description/index.html @@ -0,0 +1,77 @@ + + + + + + +

Management System Bugs. Error control and bug fixes in the Odoo Open source platform.

+
+
+

For this module helps to manage bugs in "Project" module:

+
    +
  • Offers the ability to keep track of the bug.
  • +
  • You can see number of bugs assigned to the employee.
  • +
  • The automatics task generate and contact.
  • +
  • Manage team support and members.
  • +
  • A cron that runs every 30 min reading the odoo ".log".
  • +
  • Classify bugs into "error" and "warning".
  • +
  • Bugs are generated in the "All bugs" menu.
  • +
  • Once the bugs are generated, the tasks corresponding to a support team or agent are generated.
  • +
  • You can "Transfer", "Assign" or "Claim" a bug. Generating a new task associated with a Support Team or Agent.
  • +
+
+
+
+

Key Features:

+
    +
  • Issues
  • +
  • Stages
  • +
  • Bugs assigned to employee in kanban and tree view
  • +
+
+
+
+

Click for more APPS

+
+
+

Our Services

+
+ +
+
+

Help and Support

+
Feel free to contact us, if you need any help with your Odoo integration or addiontal features.
+ + +
+ + + diff --git a/odex25_base/management_bugs/static/description/logo.png b/odex25_base/management_bugs/static/description/logo.png new file mode 100644 index 000000000..6f08586ef Binary files /dev/null and b/odex25_base/management_bugs/static/description/logo.png differ diff --git a/odex25_base/management_bugs/static/description/odoo-customization.png b/odex25_base/management_bugs/static/description/odoo-customization.png new file mode 100644 index 000000000..9428b371d Binary files /dev/null and b/odex25_base/management_bugs/static/description/odoo-customization.png differ diff --git a/odex25_base/management_bugs/static/description/odoo-implementation.png b/odex25_base/management_bugs/static/description/odoo-implementation.png new file mode 100644 index 000000000..ce95b2141 Binary files /dev/null and b/odex25_base/management_bugs/static/description/odoo-implementation.png differ diff --git a/odex25_base/management_bugs/static/description/odoo-integration.png b/odex25_base/management_bugs/static/description/odoo-integration.png new file mode 100644 index 000000000..87726511c Binary files /dev/null and b/odex25_base/management_bugs/static/description/odoo-integration.png differ diff --git a/odex25_base/management_bugs/static/description/screenshot_management_bug.png b/odex25_base/management_bugs/static/description/screenshot_management_bug.png new file mode 100644 index 000000000..a9f588a3e Binary files /dev/null and b/odex25_base/management_bugs/static/description/screenshot_management_bug.png differ diff --git a/odex25_base/management_bugs/views/management_bug.xml b/odex25_base/management_bugs/views/management_bug.xml new file mode 100644 index 000000000..99fa9d416 --- /dev/null +++ b/odex25_base/management_bugs/views/management_bug.xml @@ -0,0 +1,316 @@ + + + + + + project.project.inherit.form + project.project + + + + True + + + + + + + project.task.inherit.form + project.task + + + + + + + + + + + + management.bug.form + management.bug + +
+
+
+ +
+ +
+
+
+ + + + + + + + + + + + + + + + + + +
+
+
+
+ + + + management.bug.tree + management.bug + + + + + + + + + + + + + + + + + + management.bug.search + management.bug + + + + + + + + + + + + + + + + + All bugs + management.bug + tree,form + + {'search_default_unresolved': 1} + + + + + configuration.bug.form + configuration.bug + +
+ + + + + + + + + + + +
+
+
+ + + + configuration.bug.tree + configuration.bug + + + + + + + + + + + + configuration.bug.search + configuration.bug + + + + + + + + + Setting + configuration.bug + tree,form + + + + + + + management.bug.assign.form + management.bug.assign + +
+ + + + + + + + + + + + + +
+
+
+
+
+ + + + management.bug.assign.me.form + management.bug.assign + +
+ + + + + + + + + + +
+
+
+
+
+ + + + + + management.bug.assign.tree + management.bug.assign + + + + + + + + + + team.support.form + team.support + +
+ + + + + + + + + + + + + + + + +
+ X +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+ + + + team.support.tree + team.support + + + + + + + + + + + team.support.search + team.support + + + + + + + + + + Team support + team.support + tree,form + + + + + + + + + + +
\ No newline at end of file