TIP: You can type at any time to perform a new search.
Project
project · odoo/odoo
🛠 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
Found by automated static analysis: patterns worth a look before/after upgrading this module to a newer Odoo version.
- 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 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_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) | 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 (29)
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 (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 (1)-
action_send_mail(self)
New fields (4)
-
limited_accessBooleandefault=Falseexport_string_translation=False args: 'Limited Access' -
partner_emailCharexport_string_translation=Falserelated='partner_id.email' -
partner_idMany2one → res.partnerexport_string_translation=Falsereadonly=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' -
nameCharrequired=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) -
toggle_is_reached(self, is_reached)
New fields (53)
-
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' -
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'export_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_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' -
is_favoriteBooleancompute='_compute_is_favorite'compute_sudo=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_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=Falsestring='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=Falsegroups='project.group_project_milestone' -
milestone_count_reachedIntegercompute='_compute_milestone_reached_count'export_string_translation=Falsegroups='project.group_project_milestone' -
milestone_idsOne2many → project.milestonecopy=Trueexport_string_translation=False args: 'project.milestone', 'project_id' -
milestone_progressIntegercompute='_compute_milestone_reached_count'export_string_translation=Falsegroups='project.group_project_milestone' args: 'Milestones Reached' -
nameChardefault_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' -
open_task_countIntegercompute='_compute_open_task_count'export_string_translation=Falsestring='Open Task Count' -
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' -
privacy_visibilitySelectiondefault='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=Truestring='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_warningCharcompute='_compute_privacy_visibility_warning'export_string_translation=False args: 'Privacy Visibility Warning' -
resource_calendar_idMany2one → resource.calendarcompute='_compute_resource_calendar_id'export_string_translation=Falsestring='Working Time' args: 'resource.calendar' -
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' -
stage_id_colorIntegerexport_string_translation=Falserelated='stage_id.color'string='Stage Color' -
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.typeexport_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>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_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)
-
activeBooleandefault=Trueexport_string_translation=False -
colorIntegerexport_string_translation=Falsestring='Color' -
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 -
sequenceIntegerdefault=50export_string_translation=False
-
action_unarchive(self) -
copy_data(self, default=None) -
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 (4)
-
activeBooleandefault=True -
colorIntegerdefault=_get_default_color -
nameCharrequired=Truetranslate=True -
sequenceIntegerexport_string_translation=False
-
copy_data(self, default=None)
New fields (4)
-
access_modeSelectiondefault='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_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_linkCharhelp='Anyone with this link can access the project in read mode.' args: 'Public 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) 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)
-
activeBooleandefault=Trueexport_string_translation=False -
allocated_hoursFloattracking=True args: 'Allocated Time' -
allow_milestonesBooleanexport_string_translation=Falserelated='project_id.allow_milestones' -
allow_recurring_tasksBooleanexport_string_translation=Falserelated='project_id.allow_recurring_tasks' -
allow_task_dependenciesBooleanexport_string_translation=Falserelated='project_id.allow_task_dependencies' -
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' -
current_user_same_company_partnerBooleancompute='_compute_current_user_same_company_partner'compute_sudo=Trueexport_string_translation=False -
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=True -
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)]"relation='task_dependencies_rel'string='Blocked By'tracking=True args: 'project.task' -
dependent_idsMany2many → project.taskcolumn1='depends_on_id'column2='task_id'copy=Falsedomain="[('project_id', '!=', False), ('id', '!=', id)]"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_ccCharhelp='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_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=True args: 'project.milestone', 'Milestone' -
nameCharindex='trigram'required=Truestring='Title'tracking=True -
parent_idMany2one → project.taskdomain="['!', ('id', 'child_of', id), ('project_id', '!=', False)]"index=Trueinverse='_inverse_parent_id'string='Parent Task'tracking=True 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=True 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'help="The current user's personal task stage."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=True 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)]"falsy_value_label=_lt('🔒 Private')index=Trueprecompute=Truereadonly=Falserecursive=Truestore=Truestring='Project'tracking=True args: 'project.project' -
project_privacy_visibilitySelectionrelated='project_id.privacy_visibility'string='Project Visibility'tracking=False -
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=True args: 'project.task.type' -
stage_id_colorIntegerexport_string_translation=Falserelated='stage_id.color'string='Stage Color' -
stateSelectioncompute='_compute_state'copy=Falsedefault='01_in_progress'index=Trueinverse='_inverse_state'readonly=Falserecursive=Truerequired=Truestore=Truestring='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_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), ('active', '=', True)]"falsy_value_label=_lt('👤 Unassigned')relation='project_task_user_rel'string='Assignees'tracking=True args: 'res.users' -
website_message_idsOne2manydomain=<expr>export_string_translation=False -
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_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_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_closedSelectionreadonly=Truestring='Closing Stage' args: [('closed', 'Closed tasks'), ('open', 'Open tasks')] -
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 (15)
-
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' -
colorIntegerexport_string_translation=Falsestring='Color' -
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='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: 'Send a customer rating request' -
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')]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_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) -
copy_data(self, default=None) -
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 (3)
-
role_idMany2one → project.rolerequired=Truestring='Project Role' args: 'project.role' -
user_idsMany2many → res.usersdomain=[('share', '=', False), ('active', '=', True)]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 (33)
-
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_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 (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 (1)
-
favorite_project_idsMany2many → project.projectcopy=Falseexport_string_translation=Falsestring='Favorite Projects' args: 'project.project', 'project_favorite_user_rel', 'user_id', 'project_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…