Post by mats »

We are pleased to announce our Gantt chart is now available as an add-on app to the popular Odoo platform

We would love to hear your feedback on what features you would like to see implemented!

Check it out here: https://apps.odoo.com/apps/modules/13.0/bryntum_gantt/

Attachments
view_chart_icon.png
view_chart_icon.png (125.65 KiB) Viewed 129 times

Tired of debugging javascript errors in web applications? Try our powerful error logging service RootCause


Post by janverstr »

That is good news. Is there any info on which fields of Odoo this would use? Or do we need to configure this ourselves?


Post by Terence »

It depends on project (or project enterprise). This gantt solution adds some new fields based on the project model. See below our model definition. If correct you should not need to configure those fields yourself.


class Task(models.Model):
    _inherit = "project.task"

planned_date_begin = fields.Datetime("Start date")
planned_date_begin_formatted = fields.Char(compute='_compute_planned_date_begin')
planned_date_end = fields.Datetime("End date")

class ProjectProject(models.Model):
    _inherit = 'project.project'

project_start_date = fields.Datetime(string="Project Start Date",
                                     default=datetime.today())


class ProjectTask(models.Model):
    _inherit = 'project.task'

duration = fields.Integer(string="Duration (days)",
                          compute="_compute_duration", store=True)
percent_done = fields.Integer(string="Done %", default=0)
parent_index = fields.Integer(string="Parent Index", default=0)
assigned_ids = fields.Many2many('res.users', string="Assigned resources")
effort = fields.Integer(string="Effort (hours)")
gantt_calendar = fields.Selection([
    ('general', 'General'),
    ('business', 'Business'),
    ('night', 'Night shift')
], string="Gantt Calendar", default='general')
linked_ids = fields.One2many('project.task.linked',
                             inverse_name='to_id',
                             string='Linked')
scheduling_mode = fields.Selection([
    ('Normal', 'Normal'),
    ('FixedDuration', 'Fixed Duration'),
    ('FixedEffort', 'Fixed Effort'),
    ('FixedUnits', 'Fixed Units')
], string='Scheduling Mode')
constraint_type = fields.Selection([
    ('muststarton', 'Must start on'),
    ('mustfinishon', 'Must finish on'),
    ('startnoearlierthan', 'Start no earlier than'),
    ('startnolaterthan', 'Start no later than'),
    ('finishnoearlierthan', 'Finish no earlier than'),
    ('finishnolaterthan', 'Finish no later than')
], string='Constraint Type')
constraint_date = fields.Datetime(string="Constraint Date")
effort_driven = fields.Boolean(string="Effort Driven", default=False)
manually_scheduled = fields.Boolean(string="Manually Scheduled",
                                    default=False)

class ProjectTaskLinked(models.Model):
    _name = 'project.task.linked'
    _description = 'Project Task Linked'

from_id = fields.Many2one('project.task', ondelete='cascade', string='From')
to_id = fields.Many2one('project.task', ondelete='cascade', string='To')


class ResUsers(models.Model):
    _inherit = "res.users"

project_ids = fields.Many2many('project.task', string="Project")


Post Reply