Repository
odoo/odoo · module folder
Module version
1.4
Category
Services/Project
Folder size
15.33 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/project
Last tracking update
2026-08-15 22:44:19
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Raphael Collet, Thibault Delavallée, Odoo Translation Bot, Denis Ledoux, David Monjoie, Aaron Bohy, Géry Debongnie, Christophe Monniez, Jorge Pinna Puissant, Alexandre Kühn, Toufik Ben Jaa, Julien Castiaux, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Paul Morelle, Enric Tobella, Sébastien Theys, Julien Mougenot, Achraf (abz), Prakash Prajapati, Rémy Voet (ryv), Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, William Braeckman, Romain Estievenart, Didier (did), Audric Onockx (auon), Nicolas Bayet, Abdelouahab (abla), Mathieu Walravens, luvi, Hubert Van De Walle, Renaud Thiry, Vincent Larcin, damr, tsm-odoo, Louis Wicket (wil), alsh-odoo, Gaetan Vanden Bergh (gavb), Maximilien (malb), Victor Piryns (pivi), Dylan Kiss (dyki), Rahul Prajapati, Chong Wang (cwg), Odoo, Xavier Bol (xbo), Brieuc-brd, omra-odoo, Andrzej(pian), Giang Pham, rajh-odoo, kdeb@odoo.com, sesn-odoo, Walid (wasa), Deependra Solanki, maad-odoo, Youssef Bashandy, bary, Maryam Kia, Maxime de Neuville, suth-odoo, Abderraouf Ghrissi (abgh), Julien Carion (juca), Bastien Fafchamps (bafa), adsh-odoo, Tanguy Quéguineur, Julien Segers (juse), dise, Rodolpho Lima, sami odoo, asno-odoo, mano-odoo, aamo-odoo, guce, yagp-odoo, sabr, Pierre Pulinckx (PIPU), st-yes, Chris Duvivier, Cuong, Nguyen Minh Tran Manh, Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, K Theja (kthe), zel-odoo, Mahdi Alijani (malj), Raja Prasad, yame-odoo, bona-odoo, Krzysztof Magusiak (krma), Ajit Singh, vpan-odoo, Maeva De Keyser (MDEK), utma-odoo, Hadi El Yakhni, mjvi-odoo, desh, bhna-odoo, K Theja (kthe@odoo.com), dise-odoo, Yash Pathak, Quentin Colla (qucol), path-odoo, Waleed Elgamal, oumaima-aarabe, Elliot ELCO, Vincent Janssen, Shubham Patel, Maxime de Neuville (mane), YoussefM890, maap-odoo, Aurélien Bertrand, rapa, mibav-odoo, damrOdoo, abbhi-Odoo, Sébastien Geelen, saurabh, dhtr-odoo, Abdelouahab Laaroussi (abla), Zachary (zavan), Kadam Darji, raja prasad, Farah (ahmfa), ksin-odoo, ELCO, njor-odoo, chpa-odoo, nikhil, Abdullah (abye), Dhruvkumar Nagar, makb-odoo, rusi-odoo, ksja-odoo, djhan, shib-odoo, pcbe-odoo, SYF
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
agreement_project, crm_lead_to_task, crm_project_task, document_page_project, fieldservice_project, helpdesk_mgmt_project, hr_timesheet, maintenance_project, pms_project, project_account, project_administrator_restricted_visibility, project_department, project_group, project_hr, project_hr_skills, project_key, project_mail_plugin, project_merge, project_milestone_status, project_mrp, project_parent, project_parent_task_filter, project_pivot, project_sequence, project_sms, project_stage_extra_info, project_stock, project_tag_hierarchy, project_tag_multicompany, project_tag_security, project_task_code, project_task_default_stage, project_task_default_user, project_task_description_template, project_task_name_with_id, project_task_note, project_task_parent_due_auto, project_task_personal_stage_auto_fold, project_task_product, project_task_pull_request, project_task_stage_auto_state, project_task_stage_mgmt, project_task_stage_state, project_task_tag, project_timeline, project_todo, project_type, project_version, website_project
Description

Code Analysis

Views touched (131)
XML IDNameModelTypeStatus
account_analytic_account_view_form_inherit account.analytic.account.form.inherit account.analytic.account form Inherits analytic.view_account_analytic_account_form
digest_digest_view_form digest.digest.view.form.inherit.project.task digest.digest form Inherits digest.digest_digest_view_form
edit_project project.project.form project.project form New
mail_activity_plan_view_form_project_and_task mail.activity.plan.view.form.project.and.task mail.activity.plan form Inherits mail.mail_activity_plan_view_form
open_view_all_tasks_list_view open.view.all.tasks.list.view project.task list Inherits view_task_tree2
open_view_blocked_by_list_view open.view.blocked.by.list.view project.task list Inherits project.open_view_all_tasks_list_view
open_view_my_tasks_list_view open.view.my.tasks.list.view project.task list Inherits view_task_tree2
portal_layout Portal layout: project menu entry ir.ui.view qweb Inherits portal.portal_breadcrumbs
portal_my_home Projects / Tasks ir.ui.view qweb Inherits portal.portal_my_home
portal_my_project My Project ir.ui.view qweb New
portal_my_projects My Projects ir.ui.view qweb New
portal_my_task My Task ir.ui.view qweb Inherits portal.portal_sidebar
portal_my_task_allocated_hours_template portal_my_task_allocated_hours_template ir.ui.view qweb New
portal_my_tasks My Tasks ir.ui.view qweb New
portal_my_tasks_badge_widget_template badge Widget Template ir.ui.view qweb New
portal_my_tasks_priority_widget_template Priority Widget Template ir.ui.view qweb New
portal_my_tasks_state_widget_template Status Widget Template ir.ui.view qweb New
portal_task_share_wizard task.share.wizard task.share.wizard Inherits portal.portal_share_wizard
portal_tasks_list Tasks List ir.ui.view qweb New
project.milestone_deadline project.milestone_deadline ir.ui.view qweb New
project_kanban_view_group_stage project.project.kanban.group.stage project.project kanban Inherits view_project_kanban
project_list_view_group_stage project.project.list.group.stage project.project list Inherits view_project
project_message_user_assigned project_message_user_assigned ir.ui.view qweb New
project_milestone_view_form project.milestone.view.form project.milestone form New
project_milestone_view_kanban project.milestone.view.kanban project.milestone kanban New
project_milestone_view_tree project.milestone.view.list project.milestone list New
project_project_stage_view_form project.project.stage.view.form project.project.stage form New
project_project_stage_view_form_quick_create project.project.stage.view.form.quick.create project.project.stage form New
project_project_stage_view_kanban project.project.stage.view.kanban project.project.stage kanban New
project_project_stage_view_search project.project.stage.view.search project.project.stage search New
project_project_stage_view_tree project.project.stage.view.list project.project.stage list New
project_project_view_activity project.project.view.activity project.project activity New
project_project_view_form_simplified project.project.view.form.simplified project.project form New
project_project_view_form_simplified_footer project.project.view.form.simplified project.project form Inherits project.project_project_view_form_simplified
project_project_view_form_simplified_template project.project.create.wizard.form project.template.create.wizard form New
project_role_view_form project.role.form project.role form New
project_role_view_kanban project.role.kanban project.role kanban New
project_role_view_list project.role.list project.role list New
project_role_view_search project.role.search project.role search New
project_share_wizard_confirm_form project.share.wizard.view.form project.share.wizard form New
project_share_wizard_view_form project.share.wizard.view.form project.share.wizard form New
project_sharing_portal Project Sharing View Embed ir.ui.view qweb New
project_sharing_project_task_view_form project.sharing.project.task.view.form project.task form New
project_sharing_project_task_view_kanban project.sharing.project.task.view.kanban project.task kanban New
project_sharing_project_task_view_search project.task.search.form project.task search Inherits project.view_task_search_form_base
project_sharing_project_task_view_tree project.sharing.project.task.list project.task list Inherits project_task_view_tree_main_base
project_sharing_quick_create_task_form project.task.form.quick_create project.task form New
project_sub_task_view_kanban_mobile project.task.kanban project.task kanban Inherits project.view_task_kanban
project_tags_form_view Tags project.tags form New
project_tags_search_view Tags project.tags search New
project_tags_tree_view Tags project.tags list New
project_task_burndown_chart_report_view_graph project.task.burndown.chart.report.view.graph project.task.burndown.chart.report graph New
project_task_burndown_chart_report_view_search project.task.burndown.chart.report.view.search project.task.burndown.chart.report search New
project_task_convert_to_subtask_view_form project.task.convert.to.subtask.form project.task form New
project_task_graph_view_project_milestone project.task.view.graph.project.milestone project.task graph Inherits view_project_task_graph
project_task_kanban_view_project_milestone project.task.kanban.inherit.project.milestone project.task kanban Inherits view_task_kanban
project_task_pivot_view_project_milestone project.task.view.pivot.project.milestone project.task pivot Inherits view_project_task_pivot
project_task_templates_kanban project.task.templates.list project.task kanban Inherits view_task_kanban
project_task_templates_list project.task.templates.list project.task list Inherits project_task_view_tree_base
project_task_tree_view_project_milestone project.task.view.tree.project.milestone project.task list Inherits project_task_view_tree_base
project_task_view_activity project.task.activity project.task activity New
project_task_view_tree_base project.task.view.list.base project.task list Inherits project_task_view_tree_main_base
project_task_view_tree_main_base project.task.view.list.main.base project.task list New
project_templates_view_form project.project.template.form project.project form Inherits project.edit_project
project_templates_view_kanban project.project.template.kanban project.project kanban Inherits project.view_project_kanban
project_templates_view_list project.project.template.list project.project list Inherits project.view_project
project_update_default_description Project Update Description ir.ui.view qweb New
project_update_view_form project.update.view.form project.update form New
project_update_view_kanban project.update.view.kanban project.update kanban New
project_update_view_search project.update.view.search project.update search New
project_update_view_tree project.update.view.list project.update list New
project_view_kanban project.project.kanban project.project kanban New
project_view_kanban_inherit_project project.kanban.inherit.project project.project kanban Inherits project.view_project_kanban
quick_create_project_form project.form.quick_create project.project form New
quick_create_task_form project.task.form.quick_create project.task form New
quick_create_task_form_inherit_view_default_project project.task.form.quick.create project.task form Inherits quick_create_task_form
quick_create_task_form_res_partner project.task.form.quick_create.res.partner project.task form Inherits quick_create_task_form
rating_rating_view_form_project rating.rating.form.project rating.rating form Inherits rating.rating_rating_view_form_text
rating_rating_view_graph rating.rating.view.graph.project rating.rating graph Inherits rating.rating_rating_view_graph
rating_rating_view_pivot rating.rating.view.pivot.project rating.rating pivot Inherits rating.rating_rating_view_pivot
rating_rating_view_search_project rating.rating.search.project rating.rating search Inherits rating.rating_rating_view_search
rating_rating_view_tree_project rating.rating.list.project rating.rating list Inherits rating.rating_rating_view_tree
res_config_settings_view_form res.config.settings.view.form.inherit.project res.config.settings form Inherits base.res_config_settings_view_form
task_invitation_follower task_invitation_follower ir.ui.view qweb New
task_link_preview_front_end task_link_preview_front_end ir.ui.view qweb Inherits portal.frontend_layout
task_link_preview_portal_layout task_link_preview_portal_layout ir.ui.view qweb Inherits portal.portal_layout
task_track_depending_tasks task_track_depending_tasks ir.ui.view qweb New
task_type_edit project.task.type.form project.task.type form New
task_type_search project.task.type.search project.task.type search New
task_type_tree project.task.type.list project.task.type list New
task_type_tree_inherited project.task.type.list.inherited project.task.type list Inherits task_type_tree
view_account_analytic_account_list_inherit account.analytic.account.list.inherit account.analytic.account list Inherits analytic.view_account_analytic_account_list
view_project project.project.list project.project list New
view_project_calendar project.project.calendar project.project calendar New
view_project_config project.project.list.config project.project list Inherits project.view_project
view_project_config_group_stage project.project.list.config.group.stage project.project list Inherits view_project_config
view_project_config_kanban project.kanban.inherit.config.project project.project kanban Inherits view_project_kanban
view_project_config_kanban_group_stage project.kanban.inherit.config.project.group.stage project.project kanban Inherits view_project_config_kanban
view_project_kanban project.project.kanban project.project kanban New
view_project_project_filter project.project.select project.project search New
view_project_project_stage_delete_wizard project.project.stage.delete.wizard.form project.project.stage.delete.wizard form New
view_project_project_stage_unarchive_wizard project.project.stage.delete.wizard.form project.project.stage.delete.wizard form New
view_project_task_graph project.task.graph project.task graph New
view_project_task_graph_inherit project.task.graph.inherit project.task graph Inherits project.view_project_task_graph
view_project_task_pivot project.task.pivot project.task pivot New
view_project_task_pivot_inherit project.task.pivot.inherit project.task pivot Inherits project.view_project_task_pivot
view_project_task_type_delete_confirmation_wizard project.task.type.delete.wizard.form project.task.type.delete.wizard form New
view_project_task_type_delete_wizard project.task.type.delete.wizard.form project.task.type.delete.wizard form New
view_project_task_type_kanban project.task.type.kanban project.task.type kanban New
view_project_task_type_unarchive_wizard project.task.type.delete.wizard.form project.task.type.delete.wizard form New
view_task_all_calendar project.task.all.calendar project.task calendar Inherits view_task_calendar
view_task_calendar project.task.calendar project.task calendar New
view_task_form2 project.task.form project.task form New
view_task_form_res_partner project.task.form.res.partner project.task form Inherits view_task_form2
view_task_kanban project.task.kanban project.task kanban New
view_task_kanban_inherit_all_task project.task.kanban.inherit.all.task project.task kanban Inherits view_task_kanban
view_task_kanban_inherit_my_task project.task.kanban.inherit.my.task project.task kanban Inherits view_task_kanban
view_task_kanban_inherit_view_default_project project.task.kanban project.task kanban Inherits view_task_kanban
view_task_kanban_res_partner project.task.kanban.res.partner project.task kanban Inherits view_task_kanban_inherit_all_task
view_task_partner_info_form res.partner.task.buttons res.partner form Inherits base.view_partner_form
view_task_project_user_fsm_graph_base report.project.task.user.graph report.project.task.user graph Inherits view_task_project_user_graph
view_task_project_user_fsm_pivot_base report.project.task.user.pivot report.project.task.user pivot Inherits view_task_project_user_pivot
view_task_project_user_graph report.project.task.user.graph report.project.task.user graph New
view_task_project_user_pivot report.project.task.user.pivot report.project.task.user pivot New
view_task_project_user_search report.project.task.user.search report.project.task.user search Inherits project.view_task_search_form_project_fsm_base
view_task_search_form project.task.search.form project.task search Inherits view_task_search_form_project_base
view_task_search_form_base project.task.search.form project.task search New
view_task_search_form_project_base project.task.search.form.project.base project.task search Inherits view_task_search_form_project_fsm_base
view_task_search_form_project_fsm_base project.task.search.form.project.base project.task search Inherits view_task_search_form_base
view_task_template_search_form project.task.search.form project.task search Inherits view_task_search_form
view_task_tree2 project.task.list project.task list Inherits project_task_view_tree_base
HTTP endpoints (9)
Route(s)HandlerAuthTypeMethodsFlags
/project_sharing/attachment/add_image ProjectCustomerPortal.add_image user http POST sudo website
/my/projects/<int:project_id>, /my/projects/<int:project_id>/page/<int:page> ProjectCustomerPortal.portal_my_project public http ALL website
/my/projects/<int:project_id>/task/<int:task_id>/recurrent_tasks ProjectCustomerPortal.portal_my_project_recurrent_tasks user http GET sudo website
/my/projects/<int:project_id>/task/<int:task_id>/subtasks ProjectCustomerPortal.portal_my_project_subtasks user http GET sudo website
/my/projects/<int:project_id>/task/<int:task_id> ProjectCustomerPortal.portal_my_project_task public http ALL sudo website
/my/projects, /my/projects/page/<int:page> ProjectCustomerPortal.portal_my_projects user http ALL website
/my/tasks/<int:task_id> ProjectCustomerPortal.portal_my_task public http ALL website
/my/tasks, /my/tasks/page/<int:page> ProjectCustomerPortal.portal_my_tasks user http ALL website
/my/projects/<int:project_id>/project_sharing, /my/projects/<int:project_id>/project_sharing/<path:subpath> ProjectCustomerPortal.render_project_backend_view user http GET sudo
Models touched (29)

New fields (2)
  • project_count Integer
    compute='_compute_project_count' export_string_translation=False args: 'Project Count'
  • project_ids One2many → project.project
    export_string_translation=False string='Projects' args: 'project.project', 'account_id'
Public methods (1)
  • action_view_projects(self)

New fields (2)
  • kpi_project_task_opened Boolean
    args: 'Open Tasks'
  • kpi_project_task_opened_value Integer
    compute='_compute_project_task_opened_value' export_string_translation=False
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • action_send_mail(self)

New fields (4)
  • limited_access Boolean
    default=False export_string_translation=False args: 'Limited Access'
  • partner_email Char
    export_string_translation=False related='partner_id.email'
  • partner_id Many2one → res.partner
    export_string_translation=False readonly=True required=True args: 'res.partner', 'Collaborator'
  • project_id Many2one → project.project
    domain=[('privacy_visibility', 'in', ['portal', 'invited_users']), ('is_template', '=', False)] export_string_translation=False readonly=True required=True args: 'project.project', 'Project Shared'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)

New fields (13)
  • can_be_marked_as_done Boolean
    compute='_compute_can_be_marked_as_done' export_string_translation=False
  • deadline Date
    copy=False tracking=True
  • done_task_count Integer
    compute='_compute_task_count' export_string_translation=False groups='project.group_project_milestone' args: '# of Done Tasks'
  • is_deadline_exceeded Boolean
    compute='_compute_is_deadline_exceeded' export_string_translation=False
  • is_deadline_future Boolean
    compute='_compute_is_deadline_future' export_string_translation=False
  • is_reached Boolean
    copy=False default=False string='Reached'
  • name Char
    required=True
  • project_allow_milestones Boolean
    compute='_compute_project_allow_milestones' compute_sudo=True export_string_translation=False search='_search_project_allow_milestones'
  • project_id Many2one → project.project
    default=_get_default_project_id domain=[('is_template', '=', False)] index=True ondelete='cascade' required=True args: 'project.project'
  • reached_date Date
    compute='_compute_reached_date' export_string_translation=False store=True
  • sequence Integer
    default=10 args: 'Sequence'
  • task_count Integer
    compute='_compute_task_count' export_string_translation=False groups='project.group_project_milestone' args: '# of Tasks'
  • task_ids One2many → project.task
    export_string_translation=False args: 'project.task', 'milestone_id', 'Tasks'
Public methods (3)
  • action_view_tasks(self)
  • copy(self, default=None)
  • toggle_is_reached(self, is_reached)

New fields (53)
  • access_instruction_message Char
    compute='_compute_access_instruction_message' export_string_translation=False args: 'Access Instruction Message'
  • account_id Many2one → account.analytic.account
    copy=False domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id)]" ondelete='set null' args: 'account.analytic.account'
  • active Boolean
    copy=False default=True export_string_translation=False
  • alias_id Many2one
    help='Internal email associated with this project. Incoming emails are automatically synchronized with Tasks (or optionally Issues if the Issue Tracker module is installed).'
  • allow_milestones Boolean
    inverse='_inverse_allow_milestones' args: 'Milestones'
  • allow_recurring_tasks Boolean
    inverse='_inverse_allow_recurring_tasks' args: 'Recurring Tasks'
  • allow_task_dependencies Boolean
    inverse='_inverse_allow_task_dependencies' args: 'Task Dependencies'
  • analytic_account_balance Monetary
    related='account_id.balance'
  • can_mark_milestone_as_done Boolean
    compute='_compute_next_milestone_id' export_string_translation=False groups='project.group_project_milestone'
  • closed_task_count Integer
    compute='_compute_closed_task_count' export_string_translation=False
  • collaborator_count Integer
    compute='_compute_collaborator_count' compute_sudo=True export_string_translation=False args: '# Collaborators'
  • collaborator_ids One2many → project.collaborator
    copy=False export_string_translation=False string='Collaborators' args: 'project.collaborator', 'project_id'
  • color Integer
    export_string_translation=False string='Color Index'
  • company_id Many2one → res.company
    compute='_compute_company_id' inverse='_inverse_company_id' readonly=False store=True string='Company' args: 'res.company'
  • currency_id Many2one → res.currency
    compute='_compute_currency_id' export_string_translation=False readonly=True string='Currency' args: 'res.currency'
  • date Date
    copy=False help='Date on which this project ends. The timeframe defined on the project is taken into account when viewing its planning.' index=True string='Expiration Date' tracking=True
  • date_start Date
    copy=False string='Start Date'
  • description Html
    help='Description to provide more information and context about this project'
  • duration_tracking Json
    groups='project.group_project_stages'
  • favorite_user_ids Many2many → res.users
    copy=False export_string_translation=False string='Members' args: 'res.users', 'project_favorite_user_rel', 'project_id', 'user_id'
  • is_favorite Boolean
    compute='_compute_is_favorite' compute_sudo=True export_string_translation=False readonly=False search='_search_is_favorite' string='Show Project on Dashboard'
  • is_milestone_deadline_exceeded Boolean
    compute='_compute_next_milestone_id' export_string_translation=False groups='project.group_project_milestone'
  • is_milestone_exceeded Boolean
    compute='_compute_is_milestone_exceeded' export_string_translation=False search='_search_is_milestone_exceeded'
  • is_template Boolean
    copy=False export_string_translation=False
  • label_tasks Char
    default=<expr> help='Name used to refer to the tasks of your project e.g. tasks, tickets, sprints, etc...' string='Use Tasks as' translate=True
  • last_update_color Integer
    compute='_compute_last_update_color' export_string_translation=False
  • last_update_id Many2one → project.update
    copy=False export_string_translation=False string='Last Update' args: 'project.update'
  • last_update_status Selection
    compute='_compute_last_update_status' default='to_define' export_string_translation=False readonly=False required=True selection=[('on_track', 'On Track'), ('at_risk', 'At Risk'), ('off_track', 'Off Track'), ('on_hold', 'On Hold'), ('to_define', 'Set Status'), ('done', 'Complete')] store=True
  • milestone_count Integer
    compute='_compute_milestone_count' export_string_translation=False groups='project.group_project_milestone'
  • milestone_count_reached Integer
    compute='_compute_milestone_reached_count' export_string_translation=False groups='project.group_project_milestone'
  • milestone_ids One2many → project.milestone
    copy=True export_string_translation=False args: 'project.milestone', 'project_id'
  • milestone_progress Integer
    compute='_compute_milestone_reached_count' export_string_translation=False groups='project.group_project_milestone' args: 'Milestones Reached'
  • name Char
    default_export_compatible=True index='trigram' required=True tracking=True translate=True args: 'Name'
  • next_milestone_id Many2one → project.milestone
    compute='_compute_next_milestone_id' export_string_translation=False groups='project.group_project_milestone' args: 'project.milestone'
  • open_task_count Integer
    compute='_compute_open_task_count' export_string_translation=False string='Open Task Count'
  • partner_id Many2one → res.partner
    bypass_search_access=True domain="['|', ('company_id', '=?', company_id), ('company_id', '=', False)]" index='btree_not_null' string='Customer' tracking=True args: 'res.partner'
  • privacy_visibility Selection
    default='portal' help='Project and Task Visibility:\n- Invited internal users: Can access only the project or tasks they follow. Assignees automatically get access.\n- Invited internal and portal users: Same as above, extended to portal users.\n- All internal users: Full access to the project and all its tasks.\n- All internal and invited portal users: Internal users get full access. Portal users can access only the project or tasks they follow.\n\nPortal Access Levels:\n- Read-only: Portal users see tasks via their portal but can’t edit them.\n- Edit (limited): Portal users access kanban/list views and can edit limited fields on followed tasks.\n- Edit: Same as above, with access to all tasks.\n\nOther Rules:\n- Internal users can open a task from a direct link, even without project access.\n- Project admins have access to private projects, even if not followers.\n' required=True string='Visibility' tracking=True args: [('followers', 'Invited internal users'), ('invited_users', 'Invited internal and portal users'), ('employees', 'All internal users'), ('portal', 'All internal users and invited portal users')]
  • privacy_visibility_warning Char
    compute='_compute_privacy_visibility_warning' export_string_translation=False args: 'Privacy Visibility Warning'
  • resource_calendar_id Many2one → resource.calendar
    compute='_compute_resource_calendar_id' export_string_translation=False string='Working Time' args: 'resource.calendar'
  • sequence Integer
    default=10 export_string_translation=False
  • show_ratings Boolean
    compute='_compute_show_ratings' export_string_translation=False
  • stage_id Many2one → project.project.stage
    copy=False default=_default_stage_id group_expand='_read_group_expand_full' groups='project.group_project_stages' index=True ondelete='restrict' string='Stage' tracking=True args: 'project.project.stage'
  • stage_id_color Integer
    export_string_translation=False related='stage_id.color' string='Stage Color'
  • tag_ids Many2many → project.tags
    relation='project_project_project_tags_rel' string='Tags' args: 'project.tags'
  • task_completion_percentage Float
    compute='_compute_task_completion_percentage' export_string_translation=False
  • task_count Integer
    compute='_compute_task_count' export_string_translation=False string='Task Count'
  • task_ids One2many → project.task
    domain="[('is_closed', '=', False)]" export_string_translation=False string='Tasks' args: 'project.task', 'project_id'
  • task_properties_definition PropertiesDefinition
    args: 'Task Properties'
  • tasks One2many → project.task
    string='Task Activities' args: 'project.task', 'project_id'
  • type_ids Many2many → project.task.type
    export_string_translation=False string='Tasks Stages' args: 'project.task.type', 'project_task_type_rel', 'project_id', 'type_id'
  • update_count Integer
    compute='_compute_total_update_ids' export_string_translation=False
  • update_ids One2many → project.update
    export_string_translation=False args: 'project.update', 'project_id'
  • user_id Many2one → res.users
    default=<expr> falsy_value_label=_lt('👤 Unassigned') string='Project Manager' tracking=True args: 'res.users'
Public methods (30)
  • action_create_from_template(self, values=None, role_to_users_mapping=None)
  • action_create_template_from_project(self)
  • action_get_list_view(self)
  • action_open_share_project_wizard(self)
  • action_profitability_items(self, section_name, domain=None, res_id=False)
  • action_project_task_burndown_chart_report(self)
  • action_toggle_project_template_mode(self)
  • action_undo_convert_to_template(self)
  • action_view_all_rating(self)
    return the action to see all the rating of the project and activate default filters
  • action_view_tasks(self)
  • action_view_tasks_analysis(self)
    return the action to see the tasks analysis report of the project
  • action_view_tasks_from_project_milestone(self)
  • check_features_enabled(self, updated_features=None)
    @api.model
  • copy(self, default=None)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • create_template_from_project_undo_callback(self, callbacks)
  • get_last_update_or_default(self)
  • get_milestones(self)
  • get_panel_data(self)
  • get_template_tasks(self)
  • map_tasks(self, new_project_id)
    copy and map tasks from old to new project
  • message_subscribe(self, partner_ids=None, subtype_ids=None)
    Subscribe to newly created task but not all existing active task when subscribing to a project. User update notification preference of project its propagated to all the tasks that the user is currently following.
  • message_unsubscribe(self, partner_ids=None)
  • name_create(self, name)
    @api.model
  • project_update_all_action(self)
  • template_to_project_confirmation_callback(self, callbacks)
  • toggle_favorite(self)
  • unlink(self)
  • write(self, vals)

New fields (7)
  • active Boolean
    default=True export_string_translation=False
  • color Integer
    export_string_translation=False string='Color'
  • company_id Many2one → res.company
    string='Company' args: 'res.company'
  • fold Boolean
    help='If enabled, this stage will be displayed as folded in the Kanban and List views of your projects. Projects in a folded stage are considered as closed.' args: 'Folded'
  • mail_template_id Many2one → mail.template
    domain=[('model', '=', 'project.project')] help='If set, an email will be automatically sent to the customer when the project reaches this stage.' string='Email Template' args: 'mail.template'
  • name Char
    required=True translate=True
  • sequence Integer
    default=50 export_string_translation=False
Public methods (4)
  • action_unarchive(self)
  • copy_data(self, default=None)
  • unlink_wizard(self, stage_view=False)
  • write(self, vals)

New fields (3)
  • projects_count Integer
    compute='_compute_projects_count' export_string_translation=False args: 'Number of Projects'
  • stage_ids Many2many → project.project.stage
    context={'active_test': False} export_string_translation=False ondelete='cascade' string='Stages To Delete' args: 'project.project.stage'
  • stages_active Boolean
    compute='_compute_stages_active' export_string_translation=False
Public methods (3)
  • action_archive(self)
  • action_unarchive_project(self)
  • action_unlink(self)

New fields (4)
  • active Boolean
    default=True
  • color Integer
    default=_get_default_color
  • name Char
    required=True translate=True
  • sequence Integer
    export_string_translation=False
Public methods (1)
  • copy_data(self, default=None)

New fields (4)
  • access_mode Selection
    default='read' help='Read: collaborators can view tasks but cannot edit them.\nEdit with limited access: collaborators can view and edit tasks they follow in the Kanban view.\nEdit: collaborators can view and edit all tasks in the Kanban view. Additionally, they can choose which tasks they want to follow.' required=True args: [('read', 'Read'), ('edit_limited', 'Edit with limited access'), ('edit', 'Edit')]
  • parent_wizard_id Many2one → project.share.wizard
    export_string_translation=False args: 'project.share.wizard'
  • partner_id Many2one → res.partner
    required=True string='Collaborator' args: 'res.partner'
  • send_invitation Boolean
    compute='_compute_send_invitation' default=True readonly=False store=True string='Send Invitation'
Public methods (0)

No public methods.

New fields (3)
  • collaborator_ids One2many → project.share.collaborator.wizard
    string='Collaborators' args: 'project.share.collaborator.wizard', 'parent_wizard_id'
  • existing_partner_ids Many2many → res.partner
    compute='_compute_existing_partner_ids' export_string_translation=False args: 'res.partner'
  • share_link Char
    help='Anyone with this link can access the project in read mode.' args: 'Public Link'
Public methods (4)
  • action_send_mail(self)
  • action_share_record(self)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model

New fields (4)
  • color Integer
    default=_get_default_color help='Transparent tags are not visible in the kanban view of your projects and tasks.' string='Color'
  • name Char
    required=True translate=True args: 'Name'
  • project_ids Many2many → project.project
    export_string_translation=False string='Projects' args: 'project.project', 'project_project_project_tags_rel'
  • task_ids Many2many → project.task
    export_string_translation=False string='Tasks' args: 'project.task'
Public methods (5)
  • arrange_tag_list_by_id(self, tag_list, id_order)
    @api.model
    Re-order a list of record values (dict) following a given id sequence, in O(n). :param tag_list: ordered (by id) list of record values, each record being a dict containing at least an 'id' key :param id_order: list of value (int) corresponding to the id of the records to re-arrange :returns: Sorted list of record values (dict)
  • formatted_read_group(self, domain, groupby=(), aggregates=(), having=(), offset=0, limit=None, order=None) -> <expr>
    @api.model
  • name_create(self, name)
    @api.model
  • name_search(self, name='', domain=None, operator='ilike', limit=100)
    @api.model
  • search_read(self, domain=None, fields=None, offset=0, limit=None, order=None)
    @api.model

New fields (72)
  • active Boolean
    default=True export_string_translation=False
  • allocated_hours Float
    tracking=True args: 'Allocated Time'
  • allow_milestones Boolean
    export_string_translation=False related='project_id.allow_milestones'
  • allow_recurring_tasks Boolean
    export_string_translation=False related='project_id.allow_recurring_tasks'
  • allow_task_dependencies Boolean
    export_string_translation=False related='project_id.allow_task_dependencies'
  • attachment_ids One2many → ir.attachment
    compute='_compute_attachment_ids' export_string_translation=False help="Attachments that don't come from a message" string='Attachments' args: 'ir.attachment'
  • child_ids One2many → project.task
    domain=[('recurring_task', '=', False), '|', ('parent_id.is_template', '=', True), ('is_template', '=', False)] export_string_translation=False string='Sub-tasks' args: 'project.task', 'parent_id'
  • closed_depend_on_count Integer
    compute='_compute_depend_on_count' compute_sudo=True string='Closed Depending on Tasks'
  • closed_subtask_count Integer
    compute='_compute_subtask_count' export_string_translation=False args: 'Closed Sub-tasks Count'
  • color Integer
    export_string_translation=False string='Color Index'
  • company_id Many2one → res.company
    compute='_compute_company_id' copy=True default=_default_company_id readonly=False recursive=True store=True string='Company' args: 'res.company'
  • create_date Datetime
    index=True readonly=True args: 'Created On'
  • current_user_same_company_partner Boolean
    compute='_compute_current_user_same_company_partner' compute_sudo=True export_string_translation=False
  • date_assign Datetime
    copy=False help='Date on which this task was last assigned (or unassigned). Based on this, you can get statistics on the time it usually takes to assign tasks.' readonly=True string='Assigning Date'
  • date_deadline Datetime
    copy=False index=True string='Deadline' tracking=True
  • date_end Datetime
    copy=False index=True string='Ending Date'
  • date_last_stage_update Datetime
    copy=False help='Date on which the state of your task has last been modified.\nBased on this information you can identify tasks that are stalling and get statistics on the time it usually takes to move tasks from one stage/state to another.' index=True readonly=True string='Last Stage Update'
  • depend_on_count Integer
    compute='_compute_depend_on_count' compute_sudo=True string='Depending on Tasks'
  • depend_on_ids Many2many → project.task
    column1='task_id' column2='depends_on_id' copy=False domain="[('project_id', '!=', False), ('id', '!=', id)]" relation='task_dependencies_rel' string='Blocked By' tracking=True args: 'project.task'
  • dependent_ids Many2many → project.task
    column1='depends_on_id' column2='task_id' copy=False domain="[('project_id', '!=', False), ('id', '!=', id)]" export_string_translation=False relation='task_dependencies_rel' string='Block' args: 'project.task'
  • dependent_tasks_count Integer
    compute='_compute_dependent_tasks_count' export_string_translation=False string='Dependent Tasks'
  • description Html
    sanitize_attributes=False string='Description'
  • display_follow_button Boolean
    compute='_compute_display_follow_button' compute_sudo=True export_string_translation=False
  • display_in_project Boolean
    compute='_compute_display_in_project' export_string_translation=False store=True
  • display_name Char
    help='Use these keywords in the title to set new tasks:\n\n #tags Set tags on the task\n @user Assign the task to a user\n ! Set the task a medium priority\n !! Set the task a high priority\n !!! Set the task a urgent priority\n\n Make sure to use the right format and order e.g. Improve the configuration screen #feature #v16 @Mitchell !' inverse='_inverse_display_name'
  • display_parent_task_button Boolean
    compute='_compute_display_parent_task_button' compute_sudo=True export_string_translation=False
  • displayed_image_id Many2one → ir.attachment
    domain="[('res_model', '=', 'project.task'), ('res_id', '=', id), ('mimetype', 'ilike', 'image')]" string='Cover Image' args: 'ir.attachment'
  • email_cc Char
    help='Email addresses that were in the CC of the incoming emails from this task and that are not currently linked to an existing customer.'
  • email_from Char
    args: 'Email From'
  • has_late_and_unreached_milestone Boolean
    compute='_compute_has_late_and_unreached_milestone' export_string_translation=False search='_search_has_late_and_unreached_milestone'
  • has_project_template Boolean
    export_string_translation=False related='project_id.is_template' string='Has Project Template'
  • has_template_ancestor Boolean
    compute='_compute_has_template_ancestor' export_string_translation=False recursive=True search='_search_has_template_ancestor' store=True
  • is_closed Boolean
    compute='_compute_is_closed' search='_search_is_closed' args: 'Closed state'
  • is_template Boolean
    export_string_translation=False
  • link_preview_name Char
    compute='_compute_link_preview_name' export_string_translation=False
  • milestone_id Many2one → project.milestone
    compute='_compute_milestone_id' domain="[('project_id', '=', project_id)]" help='Deliver your services automatically when a milestone is reached by linking it to a sales order item.' index='btree_not_null' readonly=False store=True tracking=True args: 'project.milestone', 'Milestone'
  • name Char
    index='trigram' required=True string='Title' tracking=True
  • parent_id Many2one → project.task
    domain="['!', ('id', 'child_of', id), ('project_id', '!=', False)]" index=True inverse='_inverse_parent_id' string='Parent Task' tracking=True args: 'project.task'
  • partner_id Many2one → res.partner
    compute='_compute_partner_id' domain="['|', ('company_id', '=?', company_id), ('company_id', '=', False)]" index='btree_not_null' readonly=False recursive=True store=True string='Customer' tracking=True args: 'res.partner'
  • partner_phone Char
    compute='_compute_partner_phone' copy=False inverse='_inverse_partner_phone' readonly=False store=True string='Contact Number'
  • personal_stage_id Many2one → project.task.stage.personal
    compute='_compute_personal_stage_id' compute_sudo=False group_expand='_read_group_personal_stage_type_ids' help="The current user's personal stage." search='_search_personal_stage_id' string='Personal Stage State' args: 'project.task.stage.personal'
  • personal_stage_type_id Many2one → project.task.type
    domain="[('user_id', '=', uid)]" group_expand='_read_group_personal_stage_type_ids' help="The current user's personal task stage." readonly=False related='personal_stage_id.stage_id' store=False string='Personal Stage' args: 'project.task.type'
  • personal_stage_type_ids Many2many → project.task.type
    column1='task_id' column2='stage_id' copy=False domain="[('user_id', '=', uid)]" export_string_translation=False group_expand='_read_group_personal_stage_type_ids' ondelete='restrict' string='Personal Stages' args: 'project.task.type', 'project_task_user_rel'
  • portal_user_names Char
    compute='_compute_portal_user_names' compute_sudo=True export_string_translation=False search='_search_portal_user_names'
  • priority Selection
    default='0' index=True string='Priority' tracking=True args: [('0', 'Low priority'), ('1', 'Medium priority'), ('2', 'High priority'), ('3', 'Urgent')]
  • project_id Many2one → project.project
    change_default=True compute='_compute_project_id' domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id)]" falsy_value_label=_lt('🔒 Private') index=True precompute=True readonly=False recursive=True store=True string='Project' tracking=True args: 'project.project'
  • project_privacy_visibility Selection
    related='project_id.privacy_visibility' string='Project Visibility' tracking=False
  • rating_active Boolean
    related='stage_id.rating_active' string='Stage Rating Status'
  • recurrence_id Many2one → project.task.recurrence
    copy=False index='btree_not_null' args: 'project.task.recurrence'
  • recurring_count Integer
    compute='_compute_recurring_count' string='Tasks in Recurrence'
  • recurring_task Boolean
    string='Recurrent'
  • repeat_interval Integer
    compute='_compute_repeat' compute_sudo=True default=1 readonly=False string='Repeat Every'
  • repeat_type Selection
    compute='_compute_repeat' compute_sudo=True default='forever' readonly=False string='Until' args: [('forever', 'Forever'), ('until', 'Until')]
  • repeat_unit Selection
    compute='_compute_repeat' compute_sudo=True default='week' readonly=False args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')]
  • repeat_until Date
    compute='_compute_repeat' compute_sudo=True readonly=False string='End Date'
  • role_ids Many2many → project.role
    help='When you create a project from a template, you can choose which employee takes each role. These employees will be added to the tasks, along with anyone already assigned.' string='Project Roles' args: 'project.role'
  • sequence Integer
    default=10 export_string_translation=False string='Sequence'
  • stage_id Many2one → project.task.type
    compute='_compute_stage_id' default=_get_default_stage_id domain="[('project_ids', '=', project_id)]" group_expand='_read_group_stage_ids' index=True ondelete='restrict' readonly=False store=True string='Stage' tracking=True args: 'project.task.type'
  • stage_id_color Integer
    export_string_translation=False related='stage_id.color' string='Stage Color'
  • state Selection
    compute='_compute_state' copy=False default='01_in_progress' index=True inverse='_inverse_state' readonly=False recursive=True required=True store=True string='State' tracking=True args: [('01_in_progress', 'In Progress'), ('02_changes_requested', 'Changes Requested'), ('03_approved', 'Approved'), *CLOSED_STATES.items(), ('04_waiting_normal', 'Waiting')]
  • subtask_allocated_hours Float
    compute='_compute_subtask_allocated_hours' export_string_translation=False help='Sum of the hours allocated for all the sub-tasks (and their own sub-tasks) linked to this task. Usually less than or equal to the allocated hours of this task.' args: 'Sub-tasks Allocated Time'
  • subtask_completion_percentage Float
    compute='_compute_subtask_completion_percentage' export_string_translation=False
  • subtask_count Integer
    compute='_compute_subtask_count' export_string_translation=False args: 'Sub-task Count'
  • tag_ids Many2many → project.tags
    string='Tags' args: 'project.tags'
  • task_properties Properties
    copy=True definition='project_id.task_properties_definition' args: 'Properties'
  • user_ids Many2many → res.users
    column1='task_id' column2='user_id' context={'active_test': False} default=_default_user_ids domain="[('share', '=', False), ('active', '=', True)]" falsy_value_label=_lt('👤 Unassigned') relation='project_task_user_rel' string='Assignees' tracking=True args: 'res.users'
  • website_message_ids One2many
    domain=<expr> export_string_translation=False
  • working_days_close Float
    aggregator='avg' compute='_compute_elapsed' store=True string='Working Days to Close'
  • working_days_open Float
    aggregator='avg' compute='_compute_elapsed' store=True string='Working Days to Assign'
  • working_hours_close Float
    aggregator='avg' compute='_compute_elapsed' digits=(16, 2) store=True string='Working Hours to Close'
  • working_hours_open Float
    aggregator='avg' compute='_compute_elapsed' digits=(16, 2) store=True string='Working Hours to Assign'
  • write_date Datetime
    readonly=True args: 'Last Updated On'
Public methods (41)
  • OPEN_STATES(self)
    @property
    Return a list of the technical names complementing the CLOSED_STATES, a.k.a the open states
  • TASK_PORTAL_READABLE_FIELDS(self)
    @property
  • TASK_PORTAL_WRITABLE_FIELDS(self)
    @property
  • action_archive(self)
  • action_convert_to_subtask(self)
  • action_convert_to_template(self)
  • action_create_from_template(self, values=None)
  • action_dependent_tasks(self)
  • action_open_parent_task(self)
  • action_open_ratings(self)
  • action_open_subtasks(self)
  • action_open_task(self)
  • action_project_sharing_open_blocking(self)
  • action_project_sharing_open_subtasks(self)
  • action_project_sharing_open_task(self)
  • action_project_sharing_recurring_tasks(self)
  • action_project_sharing_view_parent_task(self)
  • action_recurring_tasks(self)
  • action_redirect_to_project_task_form(self)
  • action_undo_convert_to_template(self)
  • action_unlink_recurrence(self)
  • copy(self, default=None)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • fields_get(self, allfields=None, attributes=None)
    @api.model
  • get_empty_list_help(self, help_message)
    @api.model
  • get_import_templates(self)
    @api.model
  • get_mention_suggestions(self, search, limit=8)
    Return the 'limit'-first followers of the given task or followers of its project matching a 'search' string as a list of partner data (returned by `_to_store()`). See similar method for all partners `get_mention_suggestions()`.
  • get_unusual_days(self, date_from, date_to=None)
    @api.model
  • is_blocked_by_dependences(self)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • message_subscribe(self, partner_ids=None, subtype_ids=None)
  • message_update(self, msg_dict, update_vals=None)
  • plan_task_in_calendar(self, vals)
  • project_sharing_toggle_is_follower(self)
  • rating_apply(self, rate, token=None, rating=None, feedback=None, subtype_xmlid=None, notify_delay_send=False)
  • stage_find(self, section_id, domain=[], order='sequence, id')
    Override of the base.stage method Parameter of the stage search taken from the lead: :param section_id: if set, stages must belong to this section or be a default stage; if not set, stages must be default stages
  • unlink(self)
  • update_date_end(self, stage_id)
  • write(self, vals)

New fields (13)
  • allocated_hours Float
    readonly=True string='Allocated Time'
  • date Datetime
    readonly=True args: 'Date'
  • date_assign Datetime
    readonly=True string='Assignment Date'
  • date_deadline Date
    readonly=True string='Deadline'
  • date_last_stage_update Date
    readonly=True string='Last Stage Update'
  • is_closed Selection
    readonly=True string='Closing Stage' args: [('closed', 'Closed tasks'), ('open', 'Open tasks')]
  • milestone_id Many2one → project.milestone
    readonly=True args: 'project.milestone'
  • partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • project_id Many2one → project.project
    readonly=True args: 'project.project'
  • stage_id Many2one → project.task.type
    readonly=True args: 'project.task.type'
  • state Selection
    readonly=True string='State' args: [('01_in_progress', 'In Progress'), ('1_done', 'Done'), ('04_waiting_normal', 'Waiting'), ('03_approved', 'Approved'), ('1_canceled', 'Cancelled'), ('02_changes_requested', 'Changes Requested')]
  • tag_ids Many2many → project.tags
    column1='project_task_id' column2='project_tags_id' readonly=True relation='project_tags_project_task_rel' string='Tags' args: 'project.tags'
  • user_ids Many2many → res.users
    column1='task_id' column2='user_id' readonly=True relation='project_task_user_rel' string='Assignees' args: 'res.users'
Public methods (1)
  • task_specific_fields(self)
    @property

New fields (5)
  • repeat_interval Integer
    default=1 string='Repeat Every'
  • repeat_type Selection
    default='forever' string='Until' args: [('forever', 'Forever'), ('until', 'Until')]
  • repeat_unit Selection
    default='week' export_string_translation=False args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')]
  • repeat_until Date
    string='End Date'
  • task_ids One2many → project.task
    copy=False args: 'project.task', 'recurrence_id'
Public methods (0)

No public methods.

New fields (3)
  • stage_id Many2one → project.task.type
    domain="[('user_id', '=', user_id)]" export_string_translation=False ondelete='set null' args: 'project.task.type'
  • task_id Many2one → project.task
    export_string_translation=False index=True ondelete='cascade' required=True args: 'project.task'
  • user_id Many2one → res.users
    export_string_translation=False index=True ondelete='cascade' required=True args: 'res.users'
Public methods (0)

No public methods.

New fields (15)
  • active Boolean
    default=True export_string_translation=False args: 'Active'
  • auto_validation_state Boolean
    default=False help="Automatically modify the state when the customer replies to the feedback for this stage.\n * Good feedback from the customer will update the state to 'Approved' (green bullet).\n * Neutral or bad feedback will set the kanban state to 'Changes Requested' (orange bullet).\n" args: 'Automatic Kanban Status'
  • color Integer
    export_string_translation=False string='Color'
  • fold Boolean
    string='Folded'
  • mail_template_id Many2one → mail.template
    domain=[('model', '=', 'project.task')] help='If set, an email will be automatically sent to the customer when the task reaches this stage.' string='Email Template' args: 'mail.template'
  • name Char
    required=True string='Name' translate=True
  • project_ids Many2many → project.project
    default=<expr> help='Projects in which this stage is present. If you follow a similar workflow in several projects, you can share this stage among them and get consolidated information this way.' string='Projects' args: 'project.project', 'project_task_type_rel', 'type_id', 'project_id'
  • rating_active Boolean
    args: 'Send a customer rating request'
  • rating_request_deadline Datetime
    compute='_compute_rating_request_deadline' export_string_translation=False store=True
  • rating_status Selection
    default='stage' help='Collect feedback from your customers by sending them a rating request when a task enters a certain stage. To do so, define a rating email template on the stage.\nRating when changing stage: an email will be automatically sent when a task reaches the stage.\nPeriodic rating: an email will be automatically sent at regular intervals as long as the task remains in the stage.' required=True selection=[('stage', 'when reaching this stage'), ('periodic', 'on a periodic basis')] string='Customer Ratings Status'
  • rating_status_period Selection
    default='monthly' required=True selection=[('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a Month'), ('monthly', 'Once a Month'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')] string='Rating Frequency'
  • rating_template_id Many2one → mail.template
    domain=[('model', '=', 'project.task')] help='If set, a rating request will automatically be sent by email to the customer when the task reaches this stage. \nAlternatively, it will be sent at a regular interval as long as the task remains in this stage.' string='Rating Email Template' args: 'mail.template'
  • rotting_threshold_days Integer
    default=0 help='Day count before tasks in this stage become stale. Set to 0 to disable Changing this parameter will not affect the rotting status/date of resources last updated before this change.' args: 'Days to rot'
  • sequence Integer
    default=1
  • user_id Many2one → res.users
    compute='_compute_user_id' default=_default_user_id index=True store=True args: 'res.users', 'Stage Owner'
Public methods (4)
  • action_unarchive(self)
  • copy_data(self, default=None)
  • unlink_wizard(self, stage_view=False)
  • write(self, vals)

New fields (4)
  • project_ids Many2many → project.project
    domain="['|', ('active', '=', False), ('active', '=', True)]" export_string_translation=False ondelete='cascade' string='Projects' args: 'project.project'
  • stage_ids Many2many → project.task.type
    export_string_translation=False ondelete='cascade' string='Stages To Delete' args: 'project.task.type'
  • stages_active Boolean
    compute='_compute_stages_active' export_string_translation=False
  • tasks_count Integer
    compute='_compute_tasks_count' export_string_translation=False args: 'Number of Tasks'
Public methods (4)
  • action_archive(self)
  • action_confirm(self)
  • action_unarchive_task(self)
  • action_unlink(self)

New fields (8)
  • alias_domain_id Many2one → mail.alias.domain
    string='Alias Domain' args: 'mail.alias.domain'
  • alias_name Char
    string='Alias Name'
  • date Date
    string='Expiration Date'
  • date_start Date
    string='Start Date'
  • name Char
    required=True string='Name'
  • role_to_users_ids One2many → project.template.role.to.users.map
    default=_default_role_to_users_ids args: 'project.template.role.to.users.map', 'wizard_id'
  • template_has_dates Boolean
    compute='_compute_template_has_dates'
  • template_id Many2one → project.project
    default=<expr> args: 'project.project'
Public methods (2)
  • action_open_template_view(self)
    @api.model
  • create_project_from_template(self)

New fields (3)
  • role_id Many2one → project.role
    required=True string='Project Role' args: 'project.role'
  • user_ids Many2many → res.users
    domain=[('share', '=', False), ('active', '=', True)] string='Assignees' args: 'res.users'
  • wizard_id Many2one → project.template.create.wizard
    export_string_translation=False args: 'project.template.create.wizard'
Public methods (0)

No public methods.

New fields (14)
  • closed_task_count Integer
    export_string_translation=False readonly=True args: 'Closed Task Count'
  • closed_task_percentage Integer
    compute='_compute_closed_task_percentage' export_string_translation=False args: 'Closed Task Percentage'
  • color Integer
    compute='_compute_color' export_string_translation=False
  • date Date
    default=fields.Date.context_today tracking=True
  • description Html
  • label_tasks Char
    related='project_id.label_tasks'
  • name Char
    required=True tracking=True args: 'Title'
  • name_cropped Char
    compute='_compute_name_cropped' export_string_translation=False
  • progress Integer
    tracking=True
  • progress_percentage Float
    compute='_compute_progress_percentage' export_string_translation=False
  • project_id Many2one → project.project
    domain=[('is_template', '=', False)] export_string_translation=False index=True required=True args: 'project.project'
  • status Selection
    export_string_translation=False required=True selection=[('on_track', 'On Track'), ('at_risk', 'At Risk'), ('off_track', 'Off Track'), ('on_hold', 'On Hold'), ('done', 'Complete')] tracking=True
  • task_count Integer
    export_string_translation=False readonly=True args: 'Task Count'
  • user_id Many2one → res.users
    default=<expr> required=True string='Author' args: 'res.users'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • unlink(self)

New fields (33)
  • company_id Many2one → res.company
    readonly=True string='Company' args: 'res.company'
  • create_date Datetime
    readonly=True args: 'Create Date'
  • date_assign Datetime
    readonly=True string='Assignment Date'
  • date_deadline Datetime
    readonly=True string='Deadline'
  • date_end Datetime
    readonly=True string='Ending Date'
  • date_last_stage_update Datetime
    readonly=True string='Last Stage Update'
  • delay_endings_days Float
    aggregator='avg' digits=(16, 2) readonly=True string='Days to Deadline'
  • dependent_ids Many2many → project.task
    column1='depends_on_id' column2='task_id' domain="[('allow_task_dependencies', '=', True), ('id', '!=', id)]" readonly=True relation='task_dependencies_rel' string='Block' args: 'project.task'
  • description Text
    readonly=True
  • display_in_project Boolean
    export_string_translation=False
  • has_template_ancestor Boolean
    readonly=True
  • is_closed Boolean
    readonly=True string='Closed state'
  • is_template Boolean
    readonly=True
  • message_is_follower Boolean
    related='task_id.message_is_follower'
  • milestone_id Many2one → project.milestone
    readonly=True args: 'project.milestone'
  • name Char
    readonly=True string='Task Title'
  • nbr Integer
    readonly=True args: '# of Tasks'
  • parent_id Many2one → project.task
    readonly=True string='Parent Task' args: 'project.task'
  • partner_id Many2one → res.partner
    readonly=True string='Customer' args: 'res.partner'
  • personal_stage_type_ids Many2many → project.task.type
    column1='task_id' column2='stage_id' readonly=True relation='project_task_user_rel' string='Personal Stage' args: 'project.task.type'
  • priority Selection
    readonly=True string='Priority' args: [('0', 'Low priority'), ('1', 'Medium priority'), ('2', 'High priority'), ('3', 'Urgent')]
  • project_id Many2one → project.project
    readonly=True string='Project' args: 'project.project'
  • rating_avg Float
    aggregator='avg' readonly=True args: 'Average Rating (1-5)'
  • rating_last_value Float
    aggregator='avg' readonly=True args: 'Last Rating (1-5)'
  • stage_id Many2one → project.task.type
    readonly=True string='Stage' args: 'project.task.type'
  • state Selection
    readonly=True string='State' args: [('01_in_progress', 'In Progress'), ('1_done', 'Done'), ('04_waiting_normal', 'Waiting'), ('03_approved', 'Approved'), ('1_canceled', 'Cancelled'), ('02_changes_requested', 'Changes Requested')]
  • tag_ids Many2many → project.tags
    column1='project_task_id' column2='project_tags_id' readonly=True relation='project_tags_project_task_rel' string='Tags' args: 'project.tags'
  • task_id Many2one → project.task
    readonly=True string='Task' args: 'project.task'
  • user_ids Many2many → res.users
    column1='task_id' column2='user_id' readonly=True relation='project_task_user_rel' string='Assignees' args: 'res.users'
  • working_days_close Float
    aggregator='avg' digits=(16, 2) readonly=True string='Working Days to Close'
  • working_days_open Float
    aggregator='avg' digits=(16, 2) readonly=True string='Working Days to Assign'
  • working_hours_close Float
    aggregator='avg' digits=(16, 2) readonly=True string='Working Hours to Close'
  • working_hours_open Float
    aggregator='avg' digits=(16, 2) readonly=True string='Working Hours to Assign'
Public methods (1)
  • init(self)

New fields (2)
  • group_project_stages Boolean
    implied_group='project.group_project_stages' args: 'Project Stages'
  • module_hr_timesheet Boolean
    string='Task Logs'
Public methods (1)
  • set_values(self)

New fields (3)
  • project_ids One2many → project.project
    export_string_translation=False string='Projects' args: 'project.project', 'partner_id'
  • task_count Integer
    compute='_compute_task_count' export_string_translation=False string='# Tasks'
  • task_ids One2many → project.task
    export_string_translation=False string='Tasks' args: 'project.task', 'partner_id'
Public methods (1)
  • action_view_tasks(self)

New fields (1)
  • favorite_project_ids Many2many → project.project
    copy=False export_string_translation=False string='Favorite Projects' args: 'project.project', 'project_favorite_user_rel', 'user_id', 'project_id'
Public methods (1)
  • create(self, vals_list)
    @api.model_create_multi

New fields (0)

No new fields.

Public methods (1)
  • get_embedded_actions_settings(self)

New fields (2)
  • project_privacy_visibility Selection
    related='task_id.project_privacy_visibility'
  • task_id Many2one → project.task
    default=<expr> args: 'project.task'
Public methods (0)

No public methods.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…