TIP: You can type at any time to perform a new search.
Project
project · odoo/odoo
Security findings
Migration considerations
- Raw `cr.execute()` INSERT/UPDATE/DELETE bypasses the ORM (no compute/constrains/tracking/mail): `UPDATE ir_model_access a SET perm_read = true FROM ir_model_data d WHERE d.res_id = a.id AND d.model = 'ir.model.access' AND d.module = 'project' AND d.name = 'access_project_milestone_portal'` - re-check the table/column names still match after upgrading. migration-raw-sql-write · source
Migration review checklist, not a compatibility verdict. No target version is selected: apply version-specific advice only when migrating to that version or later.
- Repository
- odoo/odoo · module folder
- Module version
- 1.4
- Category
- Services/Project
- Folder size
- 14.99 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/project
- Last tracking update
- 2026-10-05 00:19:51
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Christophe Matthieu, Denis Ledoux, Aaron Bohy, Géry Debongnie, Lucas Perais (lpe), qsm-odoo, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Paul Morelle, Enric Tobella, Sébastien Theys, Julien Mougenot, std-odoo, Achraf (abz), David Beguin, Prakash Prajapati, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, Romain Estievenart, Miquel Raïch, Didier (did), Florian Charlier, Mathieu Walravens, luvi, Renaud Thiry, Vincent Larcin, tsm-odoo, Victor Piryns (pivi), amdi-odoo, Pierre-Yves Dufays, Dylan Kiss (dyki), Chong Wang (cwg), Xavier Bol (xbo), Brieuc-brd, Noe Antoine, omra-odoo, Andrzej(pian), rajh-odoo, Youssef Bashandy, Maryam Kia, Maxime de Neuville, Mohamed GadAlrab, Bastien Fafchamps (bafa), adsh-odoo, Tanguy Quéguineur, Alex Kühn, nihp-odoo, adch-odoo, mano-odoo, Harsh Shah, aamo-odoo, thle-odoo, Xavier Luyckx (xlu), Cuong, Nguyen Minh Tran Manh, Lucas Lefèvre (lul), Pierre Pulinckx, Bastien PIERRE, Michaël Mattiello, pish-odoo, Hoste Patrick, Mahdi Alijani (malj), bona-odoo, Krzysztof Magusiak (krma), Hazem Ibrahim, Maeva De Keyser (MDEK), utma-odoo, nsirjacobs, mjvi-odoo, pajo, bhna-odoo, K Theja (kthe@odoo.com), Giorgio Tocco (gito), akha, romc-odoo, Yash Pathak, Julien Launois (jula), Quentin Colla (qucol), Kai Chang (kacha), Yagnik ✗ (yagp), path-odoo, Waleed Elgamal, oumaima-aarabe, Yash Tiwari (Yatiw), Vincent Janssen, Benoit Socias (bso), Maxime de Neuville (mane), YoussefM890, maap-odoo, Aurélien Bertrand, rapa, mibav-odoo, damrOdoo, abbhi-Odoo, Sébastien Geelen, assk-odoo, dhtr-odoo, Abdelouahab Laaroussi (abla), Atovange, Kadam Darji, Julien (jdeh), raja prasad, Martin Lefèvre (mlef), Farah (ahmfa), ksin-odoo, Julien Carion, ELCO, njor-odoo, chpa-odoo, Oussema Heni, stefanorigano (sri), Abdullah (abye), Julien Coppin (jucop), makb-odoo, rusi-odoo, ksja-odoo, djhan, SYF, Julien Piron, Jean Schoenlaub, Mahiv Ram
- Odoo dependencies
- Python dependencies
- None
- System dependencies
- None
- Required by
- hr_timesheet, project_account, project_hr_skills, project_mail_plugin, project_mrp, project_sms, project_stock, project_todo, website_project, website_sale_project
- Description
Code Analysis
Views touched (135)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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_format_date |
Portal Formatted Date | ir.ui.view | qweb | New |
portal_layout |
Portal layout: project menu entry | ir.ui.view | qweb | Inherits portal.portal_breadcrumbs |
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_card |
project.sharing.project.task.view.card | project.task | 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_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_card |
project.project.template.card | project.project | Inherits project.view_project_card | |
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_time_by_stage_report_view_graph |
project.time.by.stage.report.view.graph | project.task.stage.report | graph | New |
project_time_by_stage_report_view_pivot |
project.time.by.stage.report.view.pivot | project.task.stage.report | pivot | New |
project_time_by_stage_report_view_search |
project.time.by.stage.report.view.search | project.task.stage.report | search | New |
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_graph |
project.update.view.graph | project.update | graph | 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_card_inherit_project |
project.kanban.inherit.project | project.project | kanban | Inherits project.view_project_card |
project_view_kanban |
project.project.kanban | project.project | kanban | New |
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_card |
project.project.card | project.project | New | |
view_project_card_group_stage |
project.project.card.group.stage | project.project | Inherits view_project_card | |
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_card |
project.task.card | project.task | New | |
view_task_card_subtask_mobile |
project.task.card.subtask.mobile | project.task | Inherits view_task_card | |
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_no_default_grouping |
project.task.kanban.no.default.grouping | 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_tree2 |
project.task.list | project.task | list | Inherits project_task_view_tree_base |
HTTP endpoints (9)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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 (33)
New fields (2)
-
project_countIntegercompute='_compute_project_count'export_string_translation=False args: 'Project Count' -
project_idsOne2many → project.projectexport_string_translation=Falsestring='Projects' args: 'project.project', 'account_id'
-
action_view_projects(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
kpi_project_task_openedBooleanargs: 'Open Tasks' -
kpi_project_task_opened_valueIntegercompute='_compute_project_task_opened_value'export_string_translation=False
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 (0)No public methods.
New fields (0)
No new fields.
Public methods (1)-
action_send_mail(self)
New fields (4)
-
access_modeSelectiondefault='view'required=Truestring='Access Mode' args: [('view', 'View'), ('edit', 'Edit'), ('advanced_edit', 'Advanced Edit')] -
partner_emailCharexport_string_translation=Falserelated='partner_id.email' -
partner_idMany2one → res.partnerexport_string_translation=Falseindex=Truereadonly=Truerequired=True args: 'res.partner', 'Collaborator' -
project_idMany2one → project.projectdomain=[('privacy_visibility', 'in', ['portal', 'invited_users']), ('is_template', '=', False)]export_string_translation=Falsereadonly=Truerequired=True args: 'project.project', 'Project Shared'
-
create(self, vals_list)@api.model_create_multi -
unlink(self)
New fields (13)
-
can_be_marked_as_doneBooleancompute='_compute_can_be_marked_as_done'export_string_translation=False -
deadlineDatecopy=Falsetracking=True -
done_task_countIntegercompute='_compute_task_count'export_string_translation=Falsegroups='project.group_project_milestone' args: '# of Done Tasks' -
is_deadline_exceededBooleancompute='_compute_is_deadline_exceeded'export_string_translation=False -
is_deadline_futureBooleancompute='_compute_is_deadline_future'export_string_translation=False -
is_reachedBooleancopy=Falsedefault=Falsestring='Reached' -
nameCharcopy=Truerequired=True -
project_allow_milestonesBooleancompute='_compute_project_allow_milestones'compute_sudo=Trueexport_string_translation=Falsesearch='_search_project_allow_milestones' -
project_idMany2one → project.projectdefault=_get_default_project_iddomain=[('is_template', '=', False)]index=Trueondelete='cascade'required=True args: 'project.project' -
reached_dateDatecompute='_compute_reached_date'export_string_translation=Falsestore=True -
sequenceIntegerdefault=10 args: 'Sequence' -
task_countIntegercompute='_compute_task_count'export_string_translation=Falsegroups='project.group_project_milestone' args: '# of Tasks' -
task_idsOne2many → project.taskexport_string_translation=False args: 'project.task', 'milestone_id', 'Tasks'
-
action_view_tasks(self) -
copy(self, default=None)
New fields (59)
-
access_instruction_messageCharcompute='_compute_access_instruction_message'export_string_translation=False args: 'Access Instruction Message' -
account_idMany2one → account.analytic.accountcopy=Falsedomain="['|', ('company_id', '=', False), ('company_id', '=?', company_id)]"ondelete='set null' args: 'account.analytic.account' -
activeBooleancopy=Falsedefault=Trueexport_string_translation=False -
alias_idMany2onehelp='Internal email associated with this project. Incoming emails are automatically synchronized with Tasks (or optionally Issues if the Issue Tracker module is installed).' -
allow_milestonesBooleaninverse='_inverse_allow_milestones' args: 'Milestones' -
allow_recurring_tasksBooleaninverse='_inverse_allow_recurring_tasks' args: 'Recurring Tasks' -
allow_task_dependenciesBooleaninverse='_inverse_allow_task_dependencies' args: 'Task Dependencies' -
allowed_internal_user_idsMany2many → res.userscomodel_name='res.users'compute='_compute_allowed_internal_user_ids'domain=<expr>readonly=Falserelation='project_allowed_internal_users_rel'store=Truestring='Team Members' -
analytic_account_balanceMonetaryrelated='account_id.balance' -
can_mark_milestone_as_doneBooleancompute='_compute_next_milestone_id'export_string_translation=Falsegroups='project.group_project_milestone' -
closed_task_countIntegercompute='_compute_closed_task_count'export_string_translation=False -
collaborator_countIntegercompute='_compute_collaborator_count'compute_sudo=Trueexport_string_translation=False args: '# Collaborators' -
collaborator_idsOne2many → project.collaboratorcopy=Falseexport_string_translation=Falsestring='Collaborators' args: 'project.collaborator', 'project_id' -
colorIntegerexport_string_translation=Falsestring='Color Index' -
company_idMany2one → res.companycompute='_compute_company_id'inverse='_inverse_company_id'readonly=Falsestore=Truestring='Company' args: 'res.company' -
currency_idMany2one → res.currencycompute='_compute_currency_id'compute_sql='_compute_sql_currency_id'compute_sudo=Trueexport_string_translation=Falsereadonly=Truestring='Currency' args: 'res.currency' -
dateDatecopy=Falsehelp='Date on which this project ends. The timeframe defined on the project is taken into account when viewing its planning.'index=Truestring='Expiration Date'tracking=True -
date_last_stage_updateDatetimedefault=fields.Datetime.nowindex=Truestring='Last Stage Update' -
date_startDatecopy=Falsestring='Start Date' -
descriptionHtmlhelp='Description to provide more information and context about this project' -
duration_trackingJsongroups='project.group_project_stages' -
favorite_user_idsMany2many → res.userscopy=Falseexport_string_translation=Falsestring='Members' args: 'res.users', 'project_favorite_user_rel', 'project_id', 'user_id' -
google_map_iframeHtmlcompute='_compute_google_map_iframe'export_string_translation=Falsesanitize=False -
is_favoriteBooleancompute='_compute_is_favorite'compute_sql='_compute_sql_is_favorite'compute_sudo=Truecopy=Trueexport_string_translation=Falsereadonly=Falsesearch='_search_is_favorite'string='Show Project on Dashboard' -
is_milestone_deadline_exceededBooleancompute='_compute_next_milestone_id'export_string_translation=Falsegroups='project.group_project_milestone' -
is_milestone_exceededBooleancompute='_compute_is_milestone_exceeded'export_string_translation=Falsesearch='_search_is_milestone_exceeded' -
is_rottingBooleangroups='project.group_project_stages' -
is_templateBooleancopy=Falseexport_string_translation=False -
label_tasksChardefault=<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_colorIntegercompute='_compute_last_update_color'export_string_translation=False -
last_update_idMany2one → project.updatecopy=Falseexport_string_translation=Falseindex='btree_not_null'string='Last Update' args: 'project.update' -
last_update_statusSelectioncompute='_compute_last_update_status'default='to_define'export_string_translation=Falsereadonly=Falserequired=Trueselection=[('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_countIntegercompute='_compute_milestone_count'export_string_translation=False -
milestone_count_reachedIntegercompute='_compute_milestone_reached_count'export_string_translation=False -
milestone_idsOne2many → project.milestonecopy=Trueexport_string_translation=False args: 'project.milestone', 'project_id' -
milestone_progressIntegercompute='_compute_milestone_reached_count'export_string_translation=False args: 'Milestones Reached' -
nameCharcopy=Truedefault_export_compatible=Trueindex='trigram'required=Truetracking=Truetranslate=True args: 'Name' -
next_milestone_idMany2one → project.milestonecompute='_compute_next_milestone_id'export_string_translation=Falsegroups='project.group_project_milestone' args: 'project.milestone' -
next_milestone_statusCharcompute='_compute_next_milestone_info'compute_sudo=Trueexport_string_translation=False -
open_task_countIntegercompute='_compute_open_task_count'export_string_translation=Falsestring='Open Task Count' -
partner_emailCharexport_string_translation=Falsereadonly=Falserelated='partner_id.email' -
partner_idMany2one → res.partnerbypass_search_access=Truedomain="['|', ('company_id', '=?', company_id), ('company_id', '=', False)]"index='btree_not_null'string='Customer'tracking=True args: 'res.partner' -
partner_phoneCharexport_string_translation=Falsereadonly=Falserelated='partner_id.phone' -
privacy_visibilitySelectiondefault='portal'help="Project and task visibility\nControl who can access this project:\n\n• Internal users: choose whether access is limited to team members or available to everyone in your organization.\n• Portal users: choose whether invited collaborators can access the project.\n\nAccess levels for portal users\n\n• View: can access tasks and send messages.\n• Edit: can create and update tasks.\n• Advanced Edit: create and update tasks, change their priority, and move them between stages.\n\nOther rules\n\n• Internal users can open a task from a direct link, even if they don't have access to the project application.\n• Project admins have access to private projects, even if they are not team members."required=Truestring='Visibility'tracking=True args: [('followers', 'Team members only'), ('invited_users', 'Team members and invited portal users'), ('employees', 'All internal users'), ('portal', 'All internal users and invited portal users')] -
resource_calendar_idMany2one → resource.calendarcompute='_compute_resource_calendar_id'export_string_translation=Falsestring='Working Time' args: 'resource.calendar' -
rotting_daysIntegergroups='project.group_project_stages' -
sequenceIntegerdefault=10export_string_translation=False -
show_ratingsBooleancompute='_compute_show_ratings'export_string_translation=False -
stage_idMany2one → project.project.stagecopy=Falsedefault=_default_stage_idgroup_expand='_read_group_expand_full'groups='project.group_project_stages'index=Trueondelete='restrict'string='Stage'tracking=True args: 'project.project.stage' -
tag_idsMany2many → project.tagsrelation='project_project_project_tags_rel'string='Tags' args: 'project.tags' -
task_completion_percentageFloatcompute='_compute_task_completion_percentage'export_string_translation=False -
task_countIntegercompute='_compute_task_count'export_string_translation=Falsestring='Task Count' -
task_idsOne2many → project.taskdomain="[('is_closed', '=', False)]"export_string_translation=Falsestring='Tasks' args: 'project.task', 'project_id' -
task_properties_definitionPropertiesDefinitionargs: 'Task Properties' -
tasksOne2many → project.taskstring='Task Activities' args: 'project.task', 'project_id' -
type_idsMany2many → project.task.typedefault=<expr>export_string_translation=Falsestring='Tasks Stages' args: 'project.task.type', 'project_task_type_rel', 'project_id', 'type_id' -
update_countIntegercompute='_compute_total_update_ids'export_string_translation=False -
update_idsOne2many → project.updateexport_string_translation=False args: 'project.update', 'project_id' -
user_idMany2one → res.usersdefault=<expr>domain="[('share', '=', False), '|', ('company_id', '=?', company_id), ('company_ids', 'in', company_id)]"falsy_value_label=_lt('👤 Unassigned')string='Project Manager'tracking=True args: 'res.users'
-
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_project_form(self) -
action_open_share_project_wizard(self) -
action_project_task_burndown_chart_report(self) -
action_project_time_by_stage_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 -
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_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None, share_token=True) -
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) -
project_update_all_action(self) -
template_to_project_confirmation_callback(self, callbacks) -
toggle_favorite(self) -
unlink(self) -
write(self, vals)
New fields (7)
-
activeBooleandefault=Trueexport_string_translation=False -
company_idMany2one → res.companystring='Company' args: 'res.company' -
foldBooleanhelp='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_idMany2one → mail.templatedomain=[('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' -
nameCharrequired=Truetranslate=True args: 'Stage Name' -
rotting_threshold_daysIntegerdefault=0help='Day count before projects in this stage become stale. Set to 0 to disable.' args: 'Days to rot' -
sequenceIntegerdefault=50export_string_translation=False
-
action_unarchive(self) -
unlink_wizard(self, stage_view=False) -
write(self, vals)
New fields (3)
-
projects_countIntegercompute='_compute_projects_count'export_string_translation=False args: 'Number of Projects' -
stage_idsMany2many → project.project.stagecontext={'active_test': False}export_string_translation=Falseondelete='cascade'string='Stages To Delete' args: 'project.project.stage' -
stages_activeBooleancompute='_compute_stages_active'export_string_translation=False
-
action_archive(self) -
action_unarchive_project(self) -
action_unlink(self)
New fields (5)
-
activeBooleandefault=True -
colorIntegerdefault=_get_default_color -
nameCharrequired=Truetranslate=True -
sequenceIntegerexport_string_translation=False -
user_idsMany2many → res.usersdomain=<expr>string='Team Members' args: 'res.users', 'project_role_res_users_rel', 'project_role_id', 'res_users_id'
No public methods.
New fields (4)
-
access_modeSelectiondefault='view'help='View: can access tasks and send messages.\nEdit: can create and update tasks.\nAdvanced Edit: create and update tasks, change their priority, and move them between stages.'required=Truestring='Access' args: [('view', 'View'), ('edit', 'Edit'), ('advanced_edit', 'Advanced Edit')] -
parent_wizard_idMany2one → project.share.wizardexport_string_translation=False args: 'project.share.wizard' -
partner_idMany2one → res.partnerrequired=Truestring='Collaborator' args: 'res.partner' -
send_invitationBooleancompute='_compute_send_invitation'default=Truereadonly=Falsestore=Truestring='Send Invitation'
No public methods.
New fields (3)
-
collaborator_idsOne2many → project.share.collaborator.wizardstring='Collaborators' args: 'project.share.collaborator.wizard', 'parent_wizard_id' -
existing_partner_idsMany2many → res.partnercompute='_compute_existing_partner_ids'export_string_translation=False args: 'res.partner' -
share_linkCharargs: 'Share Link'
-
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)
-
colorIntegerdefault=_get_default_colorhelp='Transparent tags are not visible in the kanban view of your projects and tasks.'string='Color' -
nameCharrequired=Truetranslate=True args: 'Name' -
project_idsMany2many → project.projectexport_string_translation=Falsestring='Projects' args: 'project.project', 'project_project_project_tags_rel' -
task_idsMany2many → project.taskexport_string_translation=Falsestring='Tasks' args: 'project.task'
-
arrange_tag_list_by_id(self, tag_list, id_order)@api.modelRe-order a list of record values (dict) according to a given ID sequence. This method rearranges the input ``tag_list`` so that the resulting list follows the order specified in ``id_order``. Complexity is O(n). :param list[dict] tag_list: Ordered (by ID) list of record values, each record being a dict containing at least an 'id' key. :param list[int] id_order: List of integer IDs specifying the desired order of records. :returns: The sorted list of record values (dict) following the given ID sequence. :rtype: list[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 (69)
-
activeBooleandefault=Trueexport_string_translation=False -
allocated_hoursFloattracking=8 args: 'Allocated Time' -
allow_milestonesBooleanexport_string_translation=Falserelated='project_id.allow_milestones' -
allow_recurring_tasksBooleancompute='_compute_allow_recurring_tasks'compute_sudo=Trueexport_string_translation=False -
allow_task_dependenciesBooleancompute='_compute_allow_task_dependencies'compute_sudo=Trueexport_string_translation=False -
attachment_idsOne2many → ir.attachmentcompute='_compute_attachment_ids'export_string_translation=Falsehelp="Attachments that don't come from a message"string='Attachments' args: 'ir.attachment' -
child_idsOne2many → project.taskdomain=[('recurring_task', '=', False), '|', ('parent_id.is_template', '=', True), ('is_template', '=', False)]export_string_translation=Falsestring='Sub-tasks' args: 'project.task', 'parent_id' -
closed_depend_on_countIntegercompute='_compute_depend_on_count'compute_sudo=Truestring='Closed Depending on Tasks' -
closed_subtask_countIntegercompute='_compute_subtask_count'export_string_translation=False args: 'Closed Sub-tasks Count' -
colorIntegerexport_string_translation=Falsestring='Color Index' -
company_idMany2one → res.companycompute='_compute_company_id'copy=Truedefault=_default_company_idreadonly=Falserecursive=Truestore=Truestring='Company' args: 'res.company' -
create_dateDatetimeindex=Truereadonly=True args: 'Created On' -
date_assignDatetimecopy=Falsehelp='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=Truestring='Assigning Date' -
date_deadlineDatetimecopy=Falseindex=Truestring='Deadline'tracking=7 -
date_endDatetimecopy=Falseindex=Truestring='Ending Date' -
date_last_stage_updateDatetimecopy=Falsehelp='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=Truereadonly=Truestring='Last Stage Update' -
depend_on_countIntegercompute='_compute_depend_on_count'compute_sudo=Truestring='Depending on Tasks' -
depend_on_idsMany2many → project.taskcolumn1='task_id'column2='depends_on_id'copy=Falsedomain="[('project_id', '!=', False), ('id', '!=', id), ('is_template', '=', False)]"relation='task_dependencies_rel'string='Blocked By'tracking=22 args: 'project.task' -
dependent_idsMany2many → project.taskcolumn1='depends_on_id'column2='task_id'copy=Falsedomain="[('project_id', '!=', False), ('id', '!=', id), ('is_template', '=', False)]"export_string_translation=Falserelation='task_dependencies_rel'string='Block' args: 'project.task' -
dependent_tasks_countIntegercompute='_compute_dependent_tasks_count'export_string_translation=Falsestring='Dependent Tasks' -
descriptionHtmlsanitize_attributes=Falsestring='Description' -
display_follow_buttonBooleancompute='_compute_display_follow_button'compute_sudo=Trueexport_string_translation=False -
display_in_projectBooleancompute='_compute_display_in_project'export_string_translation=Falsestore=True -
display_nameCharhelp='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_buttonBooleancompute='_compute_display_parent_task_button'compute_sudo=Trueexport_string_translation=False -
displayed_image_idMany2one → ir.attachmentdomain="[('res_model', '=', 'project.task'), ('res_id', '=', id), ('mimetype', 'ilike', 'image')]"string='Cover Image' args: 'ir.attachment' -
email_fromCharargs: 'Email From' -
has_late_and_unreached_milestoneBooleancompute='_compute_has_late_and_unreached_milestone'export_string_translation=Falsesearch='_search_has_late_and_unreached_milestone' -
has_project_templateBooleanexport_string_translation=Falserelated='project_id.is_template'string='Has Project Template' -
has_template_ancestorBooleancompute='_compute_has_template_ancestor'export_string_translation=Falserecursive=Truesearch='_search_has_template_ancestor'store=True -
is_closedBooleancompute='_compute_is_closed'search='_search_is_closed' args: 'Closed state' -
is_templateBooleanexport_string_translation=False -
link_preview_nameCharcompute='_compute_link_preview_name'export_string_translation=False -
milestone_idMany2one → project.milestonecompute='_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=Falsestore=Truetracking=21 args: 'project.milestone', 'Milestone' -
nameCharcopy=Trueindex='trigram'required=Truestring='Title'tracking=1 -
parent_idMany2one → project.taskdomain="['!', ('id', 'child_of', id), '|', ('project_id', '!=', False), ('is_template', '=' , True)]"index=Trueinverse='_inverse_parent_id'string='Parent Task'tracking=20 args: 'project.task' -
partner_idMany2one → res.partnercompute='_compute_partner_id'domain="['|', ('company_id', '=?', company_id), ('company_id', '=', False)]"index='btree_not_null'readonly=Falserecursive=Truestore=Truestring='Customer'tracking=10 args: 'res.partner' -
partner_phoneCharcompute='_compute_partner_phone'copy=Falseinverse='_inverse_partner_phone'readonly=Falsestore=Truestring='Contact Number' -
personal_stage_idMany2one → project.task.stage.personalcompute='_compute_personal_stage_id'compute_sudo=Falsegroup_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_idMany2one → project.task.typedomain="[('user_id', '=', uid)]"group_expand='_read_group_personal_stage_type_ids'readonly=Falserelated='personal_stage_id.stage_id'store=Falsestring='Personal Stage' args: 'project.task.type' -
personal_stage_type_idsMany2many → project.task.typecolumn1='task_id'column2='stage_id'copy=Falsedomain="[('user_id', '=', uid)]"export_string_translation=Falsegroup_expand='_read_group_personal_stage_type_ids'ondelete='restrict'string='Personal Stages' args: 'project.task.type', 'project_task_user_rel' -
portal_user_namesCharcompute='_compute_portal_user_names'compute_sudo=Trueexport_string_translation=Falsesearch='_search_portal_user_names' -
prioritySelectiondefault='0'index=Truestring='Priority'tracking=2 args: [('0', 'Low priority'), ('1', 'Medium priority'), ('2', 'High priority'), ('3', 'Urgent')] -
project_idMany2one → project.projectchange_default=Truecompute='_compute_project_id'domain="['|', ('company_id', '=', False), ('company_id', '=?', company_id)]"index=Trueprecompute=Truereadonly=Falserecursive=Truestore=Truestring='Project'tracking=4 args: 'project.project' -
project_privacy_visibilitySelectionrelated='project_id.privacy_visibility'string='Project Visibility'tracking=False -
project_sharing_portal_user_idsMany2many → res.userscompute='_compute_project_sharing_portal_user_ids'string='Assignable Portal Users' args: 'res.users' -
rating_activeBooleanrelated='stage_id.rating_active'string='Stage Rating Status' -
recurrence_idMany2one → project.task.recurrencecopy=Falseindex='btree_not_null' args: 'project.task.recurrence' -
recurring_countIntegercompute='_compute_recurring_count'string='Tasks in Recurrence' -
recurring_taskBooleanstring='Recurrent' -
repeat_intervalIntegercompute='_compute_repeat'compute_sudo=Truedefault=1readonly=Falsestring='Repeat Every' -
repeat_typeSelectioncompute='_compute_repeat'compute_sudo=Truedefault='forever'readonly=Falsestring='Until' args: [('forever', 'Forever'), ('until', 'Until')] -
repeat_unitSelectioncompute='_compute_repeat'compute_sudo=Truedefault='week'readonly=False args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')] -
repeat_untilDatecompute='_compute_repeat'compute_sudo=Truereadonly=Falsestring='End Date' -
role_idsMany2many → project.rolehelp='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' -
sequenceIntegerdefault=10export_string_translation=Falsestring='Sequence' -
stage_idMany2one → project.task.typecompute='_compute_stage_id'default=_get_default_stage_iddomain="[('project_ids', '=', project_id)]"group_expand='_read_group_stage_ids'index=Trueondelete='restrict'readonly=Falsestore=Truestring='Stage'tracking=6 args: 'project.task.type' -
stateSelectioncompute='_compute_state'copy=Falsedefault='01_in_progress'index=Trueinverse='_inverse_state'readonly=Falserecursive=Truerequired=Truestore=Truestring='State'tracking=5 args: [('01_in_progress', 'In Progress'), ('02_changes_requested', 'Changes Requested'), ('03_approved', 'Approved'), *CLOSED_STATES.items(), ('04_waiting_normal', 'Waiting')] -
subtask_allocated_hoursFloatcompute='_compute_subtask_allocated_hours'export_string_translation=Falsehelp='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_percentageFloatcompute='_compute_subtask_completion_percentage'export_string_translation=False -
subtask_countIntegercompute='_compute_subtask_count'export_string_translation=False args: 'Sub-task Count' -
tag_idsMany2many → project.tagsstring='Tags' args: 'project.tags' -
task_propertiesPropertiescopy=Truedefinition='project_id.task_properties_definition' args: 'Properties' -
user_idsMany2many → res.userscolumn1='task_id'column2='user_id'context={'active_test': False}default=_default_user_idsdomain="['|', ('share', '=', False), ('id', 'in', project_sharing_portal_user_ids), ('active', '=', True), '|', ('company_id', '=?', company_id), ('company_ids', 'in', company_id)]"falsy_value_label=_lt('👤 Unassigned')relation='project_task_user_rel'string='Assignees'tracking=3 args: 'res.users' -
working_days_closeFloataggregator='avg'compute='_compute_elapsed'store=Truestring='Working Days to Close' -
working_days_openFloataggregator='avg'compute='_compute_elapsed'store=Truestring='Working Days to Assign' -
working_hours_closeFloataggregator='avg'compute='_compute_elapsed'digits=(16, 2)store=Truestring='Working Hours to Close' -
working_hours_openFloataggregator='avg'compute='_compute_elapsed'digits=(16, 2)store=Truestring='Working Hours to Assign' -
write_dateDatetimereadonly=True args: 'Last Updated On'
-
OPEN_STATES(self)@propertyReturn 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_share_task_wizard(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_toggle_assign(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. See similar method for all partners `get_mention_suggestions()`. -
get_portal_url(self, suffix=None, report_type=None, download=None, query_string=None, anchor=None, share_token=True) -
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) -
unlink(self) -
update_date_end(self, stage_id) -
write(self, vals)
New fields (15)
-
allocated_hoursFloatreadonly=Truestring='Allocated Time' -
dateDatetimereadonly=True args: 'Date' -
date_assignDatetimereadonly=Truestring='Assignment Date' -
date_deadlineDatereadonly=Truestring='Deadline' -
date_last_stage_updateDatereadonly=Truestring='Last Stage Update' -
is_canceledBooleanreadonly=Truestring='Cancelled' -
is_doneBooleanreadonly=Truestring='Done' -
is_openBooleanreadonly=Truestring='Open' -
milestone_idMany2one → project.milestonereadonly=True args: 'project.milestone' -
partner_idMany2one → res.partnerreadonly=Truestring='Customer' args: 'res.partner' -
project_idMany2one → project.projectreadonly=True args: 'project.project' -
stage_idMany2one → project.task.typereadonly=True args: 'project.task.type' -
stateSelectionreadonly=Truestring='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_idsMany2many → project.tagscolumn1='project_task_id'column2='project_tags_id'readonly=Truerelation='project_tags_project_task_rel'string='Tags' args: 'project.tags' -
user_idsMany2many → res.userscolumn1='task_id'column2='user_id'readonly=Truerelation='project_task_user_rel'string='Assignees' args: 'res.users'
-
task_specific_fields(self)@property
New fields (5)
-
repeat_intervalIntegerdefault=1string='Repeat Every' -
repeat_typeSelectiondefault='forever'string='Until' args: [('forever', 'Forever'), ('until', 'Until')] -
repeat_unitSelectiondefault='week'export_string_translation=False args: [('day', 'Days'), ('week', 'Weeks'), ('month', 'Months'), ('year', 'Years')] -
repeat_untilDatestring='End Date' -
task_idsOne2many → project.taskcopy=False args: 'project.task', 'recurrence_id'
No public methods.
New fields (3)
-
stage_idMany2one → project.task.typedomain="[('user_id', '=', user_id)]"export_string_translation=Falseondelete='set null' args: 'project.task.type' -
task_idMany2one → project.taskexport_string_translation=Falseindex=Trueondelete='cascade'required=True args: 'project.task' -
user_idMany2one → res.usersexport_string_translation=Falseindex=Trueondelete='cascade'required=True args: 'res.users'
No public methods.
New fields (17)
-
company_idMany2one → res.companyreadonly=Truestring='Company' args: 'res.company' -
create_dateDatetimereadonly=True args: 'Create Date' -
date_deadlineDatetimereadonly=Truestring='Deadline' -
date_last_stage_updateDatetimereadonly=Truestring='Last Stage Update' -
is_closedBooleanreadonly=Truestring='Closed state' -
milestone_idMany2one → project.milestonereadonly=True args: 'project.milestone' -
nameCharreadonly=Truestring='Task Title' -
partner_idMany2one → res.partnerreadonly=Truestring='Customer' args: 'res.partner' -
prioritySelectionreadonly=Truestring='Priority' args: [('0', 'Low priority'), ('1', 'Medium priority'), ('2', 'High priority'), ('3', 'Urgent')] -
project_idMany2one → project.projectreadonly=Truestring='Project' args: 'project.project' -
sequenceIntegerreadonly=Truestring='Sequence' -
stage_idMany2one → project.task.typereadonly=Truestring='Stage' args: 'project.task.type' -
tag_idsMany2many → project.tagsreadonly=Truerelated='task_id.tag_ids'string='Tags' args: 'project.tags' -
task_idMany2one → project.taskreadonly=Truestring='Task' args: 'project.task' -
task_propertiesPropertiesdefinition='project_id.task_properties_definition' args: 'Properties' -
time_spentFloataggregator='avg'readonly=Truestring='Time Spent' -
user_idsMany2many → res.usersreadonly=Truerelated='task_id.user_ids'string='Assignees' args: 'res.users'
-
init(self)
New fields (14)
-
activeBooleandefault=Trueexport_string_translation=False args: 'Active' -
auto_validation_stateBooleandefault=Falsehelp="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' -
foldBooleanstring='Folded' -
mail_template_idMany2one → mail.templatedomain=[('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' -
nameCharrequired=Truestring='Stage Name'translate=True -
project_idsMany2many → project.projectdefault=<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_activeBooleanargs: 'Ask for Ratings' -
rating_request_deadlineDatetimecompute='_compute_rating_request_deadline'export_string_translation=Falsestore=True -
rating_statusSelectiondefault='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=Trueselection=[('stage', 'When reaching this stage'), ('periodic', 'On a periodic basis')]string='Customer Ratings Status' -
rating_status_periodSelectiondefault='monthly'required=Trueselection=[('daily', 'Daily'), ('weekly', 'Weekly'), ('bimonthly', 'Twice a Month'), ('monthly', 'Once a Month'), ('quarterly', 'Quarterly'), ('yearly', 'Yearly')]string='Rating Frequency' -
rating_template_idMany2one → mail.templatedomain=[('model', '=', 'project.task')]string='Rating Email Template' args: 'mail.template' -
rotting_threshold_daysIntegerdefault=0help='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' -
sequenceIntegerdefault=1 -
user_idMany2one → res.userscompute='_compute_user_id'default=_default_user_idindex=Truestore=True args: 'res.users', 'Stage Owner'
-
action_unarchive(self) -
unlink_wizard(self, stage_view=False) -
write(self, vals)
New fields (4)
-
project_idsMany2many → project.projectdomain="['|', ('active', '=', False), ('active', '=', True)]"export_string_translation=Falseondelete='cascade'string='Projects' args: 'project.project' -
stage_idsMany2many → project.task.typeexport_string_translation=Falseondelete='cascade'string='Stages To Delete' args: 'project.task.type' -
stages_activeBooleancompute='_compute_stages_active'export_string_translation=False -
tasks_countIntegercompute='_compute_tasks_count'export_string_translation=False args: 'Number of Tasks'
-
action_archive(self) -
action_confirm(self) -
action_unarchive_task(self) -
action_unlink(self)
New fields (8)
-
alias_domain_idMany2one → mail.alias.domainstring='Alias Domain' args: 'mail.alias.domain' -
alias_nameCharstring='Alias Name' -
dateDatestring='Expiration Date' -
date_startDatestring='Start Date' -
nameCharrequired=Truestring='Name' -
role_to_users_idsOne2many → project.template.role.to.users.mapdefault=_default_role_to_users_ids args: 'project.template.role.to.users.map', 'wizard_id' -
template_has_datesBooleancompute='_compute_template_has_dates' -
template_idMany2one → project.projectdefault=<expr> args: 'project.project'
-
action_open_template_view(self)@api.model -
create_project_from_template(self)
New fields (4)
-
role_idMany2one → project.rolerequired=Truestring='Project Role' args: 'project.role' -
role_user_idsMany2manyexport_string_translation=Falserelated='role_id.user_ids' -
user_idsMany2many → res.usersdomain=<expr>string='Assignees' args: 'res.users' -
wizard_idMany2one → project.template.create.wizardexport_string_translation=False args: 'project.template.create.wizard'
No public methods.
New fields (14)
-
closed_task_countIntegerexport_string_translation=Falsereadonly=True args: 'Closed Task Count' -
closed_task_percentageIntegercompute='_compute_closed_task_percentage'export_string_translation=False args: 'Closed Task Percentage' -
colorIntegercompute='_compute_color'export_string_translation=False -
dateDatedefault=fields.Date.context_todaytracking=True -
descriptionHtml -
label_tasksCharrelated='project_id.label_tasks' -
nameCharrequired=Truetracking=True args: 'Title' -
name_croppedCharcompute='_compute_name_cropped'export_string_translation=False -
progressIntegertracking=True -
progress_percentageFloatcompute='_compute_progress_percentage'export_string_translation=False -
project_idMany2one → project.projectdomain=[('is_template', '=', False)]export_string_translation=Falseindex=Truerequired=True args: 'project.project' -
statusSelectionexport_string_translation=Falserequired=Trueselection=[('on_track', 'On Track'), ('at_risk', 'At Risk'), ('off_track', 'Off Track'), ('on_hold', 'On Hold'), ('done', 'Complete')]tracking=True -
task_countIntegerexport_string_translation=Falsereadonly=True args: 'Task Count' -
user_idMany2one → res.usersdefault=<expr>required=Truestring='Author' args: 'res.users'
-
create(self, vals_list)@api.model_create_multi -
default_get(self, fields)@api.model -
unlink(self)
New fields (34)
-
company_idMany2one → res.companyreadonly=Truestring='Company' args: 'res.company' -
create_dateDatetimereadonly=True args: 'Create Date' -
date_assignDatetimereadonly=Truestring='Assignment Date' -
date_deadlineDatetimereadonly=Truestring='Deadline' -
date_endDatetimereadonly=Truestring='Ending Date' -
date_last_stage_updateDatetimereadonly=Truestring='Last Stage Update' -
delay_endings_daysFloataggregator='avg'digits=(16, 2)readonly=Truestring='Days to Deadline' -
dependent_idsMany2many → project.taskcolumn1='depends_on_id'column2='task_id'domain="[('allow_task_dependencies', '=', True), ('id', '!=', id)]"readonly=Truerelation='task_dependencies_rel'string='Block' args: 'project.task' -
descriptionTextreadonly=True -
display_in_projectBooleanexport_string_translation=False -
has_project_templateBooleanreadonly=True -
has_template_ancestorBooleanreadonly=True -
is_closedBooleanreadonly=Truestring='Closed state' -
is_templateBooleanreadonly=True -
message_is_followerBooleanrelated='task_id.message_is_follower' -
milestone_idMany2one → project.milestonereadonly=True args: 'project.milestone' -
nameCharreadonly=Truestring='Task Title' -
nbrIntegerreadonly=True args: '# of Tasks' -
parent_idMany2one → project.taskreadonly=Truestring='Parent Task' args: 'project.task' -
partner_idMany2one → res.partnerreadonly=Truestring='Customer' args: 'res.partner' -
personal_stage_type_idsMany2many → project.task.typecolumn1='task_id'column2='stage_id'readonly=Truerelation='project_task_user_rel'string='Personal Stage' args: 'project.task.type' -
prioritySelectionreadonly=Truestring='Priority' args: [('0', 'Low priority'), ('1', 'Medium priority'), ('2', 'High priority'), ('3', 'Urgent')] -
project_idMany2one → project.projectreadonly=Truestring='Project' args: 'project.project' -
rating_avgFloataggregator='avg'readonly=True args: 'Average Rating (1-5)' -
rating_last_valueFloataggregator='avg'readonly=True args: 'Last Rating (1-5)' -
stage_idMany2one → project.task.typereadonly=Truestring='Stage' args: 'project.task.type' -
stateSelectionreadonly=Truestring='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_idsMany2many → project.tagscolumn1='project_task_id'column2='project_tags_id'readonly=Truerelation='project_tags_project_task_rel'string='Tags' args: 'project.tags' -
task_idMany2one → project.taskreadonly=Truestring='Task' args: 'project.task' -
user_idsMany2many → res.userscolumn1='task_id'column2='user_id'readonly=Truerelation='project_task_user_rel'string='Assignees' args: 'res.users' -
working_days_closeFloataggregator='avg'digits=(16, 2)readonly=Truestring='Working Days to Close' -
working_days_openFloataggregator='avg'digits=(16, 2)readonly=Truestring='Working Days to Assign' -
working_hours_closeFloataggregator='avg'digits=(16, 2)readonly=Truestring='Working Hours to Close' -
working_hours_openFloataggregator='avg'digits=(16, 2)readonly=Truestring='Working Hours to Assign'
-
init(self)
New fields (2)
-
group_project_stagesBooleanimplied_group='project.group_project_stages' args: 'Project Stages' -
module_hr_timesheetBooleanstring='Task Logs'
-
set_values(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (3)
-
project_idsOne2many → project.projectexport_string_translation=Falsestring='Projects' args: 'project.project', 'partner_id' -
task_countIntegercompute='_compute_task_count'export_string_translation=Falsestring='# Tasks' -
task_idsOne2many → project.taskexport_string_translation=Falsestring='Tasks' args: 'project.task', 'partner_id'
-
action_view_tasks(self)
New fields (3)
-
favorite_project_idsMany2many → project.projectcopy=Falseexport_string_translation=Falsestring='Favorite Projects' args: 'project.project', 'project_favorite_user_rel', 'user_id', 'project_id' -
followed_project_idsMany2many → project.projectexport_string_translation=Falsesearch='_search_followed_project_ids'store=False args: 'project.project' -
project_role_idsMany2many → project.rolecopy=Falseexport_string_translation=Falsestring='Project Roles' args: 'project.role', 'project_role_res_users_rel', 'res_users_id', 'project_role_id'
-
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_visibilitySelectionrelated='task_id.project_privacy_visibility' -
task_idMany2one → project.taskdefault=<expr> args: 'project.task'
No public methods.
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…
Loading…