19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:31:56 +01:00
parent a2f74aefd8
commit 4a4d12c333
844 changed files with 212348 additions and 270090 deletions

View file

@ -8,15 +8,17 @@
<data>
<record id="digest_tip_project_0" model="digest.tip">
<field name="name">Tip: Customize tasks and stages according to the project</field>
<field name="name">Tip: Use task states to keep track of your tasks' progression</field>
<field name="sequence">1200</field>
<field name="group_id" ref="project.group_project_manager"/>
<field name="group_id" ref="project.group_project_user"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Customize tasks and stages according to the project</p>
<p class="tip_content">Customize how tasks are named according to the project and create tailor made status messages for each step of the workflow. It helps to document your workflow: what should be done at which step.</p>
<img src="https://download.odoocdn.com/digests/project/static/src/img/project-custom-tasks.gif" class="illustration_border" />
</div>
<div>
<p class="tip_title">Tip: Use task states to keep track of your tasks' progression</p>
<p class="tip_content">
Quickly check the status of tasks for approvals or change requests and identify those on hold until dependencies are resolved with the hourglass icon.
</p>
<img src="https://download.odoocdn.com/digests/project/static/src/img/task-state-img.png" width="720" class="illustration_border" />
</div>
</field>
</record>
@ -26,14 +28,40 @@
<field name="group_id" ref="project.group_project_user"/>
<field name="tip_description" type="html">
<div>
<t t-set="project_record" t-value="object.env['project.project'].search([('alias_name', '!=', False)], limit=1, order='sequence asc')"/>
<t t-set="project_record" t-value="object.env['project.project'].search([('alias_name', '!=', False), ('alias_domain_id', '!=', False)], limit=1, order='sequence asc')"/>
<p class="tip_title">Tip: Create tasks from incoming emails</p>
<t t-if="project_record and project_record.alias_domain">
<p class="tip_content">Emails sent to <a t-attf-href="mailto:{{project_record.alias_value}}" target="_blank" style="color: #875a7b; text-decoration: none;"><t t-out="project_record.alias_value" /></a> will generate tasks in your <t t-out="project_record.name"></t> project.</p>
<t t-if="project_record.alias_email">
<p class="tip_content">Emails sent to <a t-attf-href="mailto:{{project_record.alias_email}}" target="_blank" style="color: #714B67; text-decoration: none;"><t t-out="project_record.alias_email" /></a> will generate tasks in your <t t-out="project_record.name"></t> project.</p>
</t>
<t t-else="">
<p class="tip_content">Create tasks by sending an email to the email address of your project.</p>
</t>
</div>
</field>
</record>
<record id="digest_tip_project_2" model="digest.tip">
<field name="name">Tip: Your Own Personal Kanban</field>
<field name="sequence">3200</field>
<field name="group_id" ref="project.group_project_user"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Your Own Personal Kanban</p>
<p class="tip_content">Use personal stages to organize your tasks and create your own workflow.</p>
<img src="https://download.odoocdn.com/digests/project/static/src/img/18-project-personal-stages.gif" width="540" class="illustration_border"/>
</div>
</field>
</record>
<record id="digest_tip_project_3" model="digest.tip">
<field name="name">Tip: Project-Specific Fields</field>
<field name="sequence">3900</field>
<field name="group_id" ref="project.group_project_manager"/>
<field name="tip_description" type="html">
<div>
<p class="tip_title">Tip: Project-Specific Fields</p>
<p class="tip_content">Add project-specific property fields on tasks to customize your project management process.</p>
<img src="https://download.odoocdn.com/digests/project/static/src/img/18-project-property-fields.gif" width="540" class="illustration_border"/>
</div>
</field>
</record>

View file

@ -1,21 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<record id="ir_cron_rating_project" model="ir.cron">
<field name="name">Project: Send rating</field>
<field name="model_id" ref="project.model_project_project"/>
<field name="name">Project Stage: Send rating</field>
<field name="model_id" ref="project.model_project_task_type"/>
<field name="state">code</field>
<field name="code">model._send_rating_all()</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
</record>
<record id="ir_cron_recurring_tasks" model="ir.cron">
<field name="name">Project: Create Recurring Tasks</field>
<field name="model_id" ref="project.model_project_task_recurrence"/>
<field name="state">code</field>
<field name="code">model._cron_create_recurring_tasks()</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="nextcall" eval="(DateTime.now().replace(hour=3, minute=0) + timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S')" />
</record>
</odoo>

View file

@ -14,31 +14,54 @@
<field name="default" eval="False"/>
<field name="description">Stage changed</field>
</record>
<record id="mt_task_blocked" model="mail.message.subtype">
<field name="name">Task Blocked</field>
<!-- new state subtypes-->
<record id="mt_task_in_progress" model="mail.message.subtype">
<field name="name">Task In Progress</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="description">Task blocked</field>
<field name="sequence" eval="101"/>
<field name="description">Task In Progress</field>
</record>
<record id="mt_task_ready" model="mail.message.subtype">
<field name="name">Task Ready</field>
<record id="mt_task_changes_requested" model="mail.message.subtype">
<field name="name">Changes Requested</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="description">Task ready for Next Stage</field>
<field name="sequence" eval="102"/>
<field name="description">Changes Requested</field>
</record>
<record id="mt_task_progress" model="mail.message.subtype">
<field name="name">Task in Progress</field>
<record id="mt_task_approved" model="mail.message.subtype">
<field name="name">Task Approved</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="sequence" eval="103"/>
<field name="description">Task approved</field>
</record>
<record id="mt_task_canceled" model="mail.message.subtype">
<field name="name">Task Cancelled</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="sequence" eval="104"/>
<field name="description">Task cancelled</field>
</record>
<record id="mt_task_done" model="mail.message.subtype">
<field name="name">Task Done</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="sequence" eval="105"/>
<field name="description">Task done</field>
</record>
<record id="mt_task_waiting" model="mail.message.subtype">
<field name="name">Task Waiting</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="sequence" eval="106"/>
<field name="description">Task Waiting</field>
<field name="hidden" eval="True"/>
</record>
<record id="mt_task_rating" model="mail.message.subtype">
<field name="name">Task Rating</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
</record>
<record id="mt_task_dependency_change" model="mail.message.subtype">
<field name="name">Task Dependency Changes</field>
<field name="res_model">project.task</field>
<field name="sequence" eval="108"/>
<field name="default" eval="False"/>
<field name="hidden" eval="True"/>
</record>
@ -66,25 +89,9 @@
<field name="parent_id" ref="mt_task_new"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_blocked" model="mail.message.subtype">
<field name="name">Task Blocked</field>
<field name="sequence">11</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_blocked"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_ready" model="mail.message.subtype">
<field name="name">Task Ready</field>
<field name="sequence">12</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_ready"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_stage" model="mail.message.subtype">
<field name="name">Task Stage Changed</field>
<field name="sequence">13</field>
<field name="sequence">16</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_stage"/>
@ -92,28 +99,69 @@
</record>
<record id="mt_project_task_rating" model="mail.message.subtype">
<field name="name">Task Rating</field>
<field name="sequence">14</field>
<field name="res_model">project.project</field>
<field name="default" eval="True"/>
<field name="parent_id" ref="mt_task_rating"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_dependency_change" model="mail.message.subtype">
<field name="name">Task Dependency Changes</field>
<field name="sequence">15</field>
<field name="sequence">27</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_dependency_change"/>
<field name="parent_id" ref="mt_task_rating"/>
<field name="relation_field">project_id</field>
<field name="hidden" eval="True"/>
</record>
<record id="mt_project_update_create" model="mail.message.subtype">
<field name="name">Update Created</field>
<field name="sequence">16</field>
<field name="sequence">19</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_update_create"/>
<field name="relation_field">project_id</field>
<field name="hidden" eval="True"/>
</record>
<record id="mt_project_task_in_progress" model="mail.message.subtype">
<field name="name">Task In Progress</field>
<field name="sequence">20</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_in_progress"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_changes_requested" model="mail.message.subtype">
<field name="name">Changes Requested</field>
<field name="sequence">21</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_changes_requested"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_approved" model="mail.message.subtype">
<field name="name">Task Approved</field>
<field name="sequence">22</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_approved"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_canceled" model="mail.message.subtype">
<field name="name">Task Canceled</field>
<field name="sequence">23</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_canceled"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_done" model="mail.message.subtype">
<field name="name">Task Done</field>
<field name="sequence">24</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_done"/>
<field name="relation_field">project_id</field>
</record>
<record id="mt_project_task_waiting" model="mail.message.subtype">
<field name="name">Task Waiting</field>
<field name="sequence">25</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_waiting"/>
<field name="relation_field">project_id</field>
<field name="hidden" eval="True"/>
</record>
</odoo>

View file

@ -7,21 +7,21 @@
<field name="model_id" ref="project.model_project_task"/>
<field name="subject">Reception of {{ object.name }}</field>
<field name="use_default_to" eval="True"/>
<field name="description">Set this template on a project's stage to automate email when tasks reach stages</field>
<field name="description">Automatically send an email to customers when a task reaches a specific stage in a project by setting this template on that stage</field>
<field name="body_html" type="html">
<div>
Dear <t t-out="object.partner_id.name or 'customer'">Brandon Freeman</t>,<br/>
Thank you for your enquiry.<br />
If you have any questions, please let us know.
<br/><br/>
Thank you,
Dear <t t-out="object.partner_id.name or 'customer'">Brandon Freeman</t>,<br/><br/>
Thank you for contacting us. We appreciate your interest in our products/services.<br/>
Our team is currently reviewing your inquiry and will respond to your email as soon as possible.<br/>
If you have any further questions or concerns in the meantime, please do not hesitate to let us know. We are here to help.<br/><br/>
Thank you for your patience.<br/>
Best regards,
<t t-if="user.signature">
<br />
<t t-out="user.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="user.signature or ''">Mitchell Admin</t></div>
</t>
</div>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
@ -29,9 +29,11 @@
<record id="rating_project_request_email_template" model="mail.template">
<field name="name">Project: Task Rating Request</field>
<field name="model_id" ref="project.model_project_task"/>
<field name="subject">{{ object.project_id.company_id.name }}: Satisfaction Survey</field>
<field name="active" eval="False"/>
<field name="subject">{{ object.project_id.company_id.name or user.env.company.name }}: Satisfaction Survey</field>
<field name="email_from">{{ (object._rating_get_operator().email_formatted if object._rating_get_operator() else user.email_formatted) }}</field>
<field name="partner_to" >{{ object._rating_get_partner().id }}</field>
<field name="use_default_to" eval="False"/>
<field name="description">Set this template on a project stage to request feedback from your customers. Enable the "customer ratings" feature on the project</field>
<field name="body_html" type="html">
<div>
@ -46,7 +48,7 @@
<t t-else="">
Hello,<br/><br/>
</t>
Please take a moment to rate our services related to the task "<strong t-out="object.name or ''">Planning and budget</strong>"
Please take a moment to rate our services related to the <strong t-out="object.name or ''">Planning and budget</strong> task
<t t-if="object._rating_get_operator().name">
assigned to <strong t-out="object._rating_get_operator().name or ''">Mitchell Admin</strong>.<br/>
</t>
@ -55,27 +57,27 @@
</t>
</td></tr>
<tr><td style="text-align: center;">
<table border="0" cellpadding="0" cellspacing="0" width="590" summary="o_mail_notification" style="width:100%; margin: 32px 0px 32px 0px;">
<tr><td style="font-size: 13px;">
<strong>Tell us how you feel about our service</strong><br/>
<table border="0" cellpadding="0" cellspacing="0" width="590" style="width:100%; margin: 32px 0px 32px 0px; display: inline-table;">
<tr><td style="font-size: 13px;text-align:center;">
<strong>Tell us how you feel about our services</strong><br/>
<span style="font-size: 12px; opacity: 0.5; color: #454748;">(click on one of these smileys)</span>
</td></tr>
<tr><td style="font-size: 13px;">
<table style="width:100%;text-align:center;margin-top:2rem;">
<tr>
<td>
<a t-attf-href="/rate/{{ access_token }}/5">
<img alt="Satisfied" src="/rating/static/src/img/rating_5.png" title="Satisfied"/>
<a t-attf-href="/rate/{{ access_token }}/5" t-att-class="'pe-none' if object._rating_get_operator() else ''">
<img alt="Happy" src="/rating/static/src/img/rating_5.png" title="Happy"/>
</a>
</td>
<td>
<a t-attf-href="/rate/{{ access_token }}/3">
<img alt="Okay" src="/rating/static/src/img/rating_3.png" title="Okay"/>
<a t-attf-href="/rate/{{ access_token }}/3" t-att-class="'pe-none' if object._rating_get_operator() else ''">
<img alt="Neutral" src="/rating/static/src/img/rating_3.png" title="Neutral"/>
</a>
</td>
<td>
<a t-attf-href="/rate/{{ access_token }}/1">
<img alt="Dissatisfied" src="/rating/static/src/img/rating_1.png" title="Dissatisfied"/>
<a t-attf-href="/rate/{{ access_token }}/1" t-att-class="'pe-none' if object._rating_get_operator() else ''">
<img alt="Unhappy" src="/rating/static/src/img/rating_1.png" title="Unhappy"/>
</a>
</td>
</tr>
@ -84,12 +86,25 @@
</table>
</td></tr>
<tr><td valign="top" style="font-size: 13px;">
We appreciate your feedback. It helps us to improve continuously.
<t t-if="object.project_id.rating_status == 'stage'">
<br/><br/><span style="margin: 0px 0px 0px 0px; font-size: 12px; opacity: 0.5; color: #454748;">This customer survey has been sent because your task has been moved to the stage <b t-out="object.stage_id.name or ''">In progress</b></span>
We appreciate your feedback. It helps us improve continuously.
<t t-if="object.stage_id.rating_status == 'stage'">
<br/><span style="margin: 0; font-size: 12px; opacity: 0.5; color: #454748;">This satisfaction survey has been sent because your task has been moved to the <b t-out="object.stage_id.name or ''">In progress</b> stage</span>
</t>
<t t-if="object.project_id.rating_status == 'periodic'">
<br/><span style="margin: 0px 0px 0px 0px; font-size: 12px; opacity: 0.5; color: #454748;">This customer survey is sent <b t-out="object.project_id.rating_status_period or ''">Weekly</b> as long as the task is in the <b t-out="object.stage_id.name or ''">In progress</b> stage.</span>
<t t-if="object.stage_id.rating_status == 'periodic'">
<br/><span style="margin: 0; font-size: 12px; opacity: 0.5; color: #454748;">This satisfaction survey is sent <b t-out="object.stage_id.rating_status_period or ''">weekly</b> as long as the task is in the <b t-out="object.stage_id.name or ''">In progress</b> stage.</span>
</t>
</td></tr>
<tr><td><br/>Best regards,</td></tr>
<tr><td>
<t t-out="object.project_id.company_id.name or ''">YourCompany</t>
</td></tr>
<tr><td style="opacity: 0.5;">
<t t-out="object.project_id.company_id.phone or ''">1 650-123-4567</t>
<t t-if="object.project_id.company_id.email">
| <a t-attf-href="mailto:{{ object.project_id.company_id.email }}" style="text-decoration:none; color: #454748;" t-out="object.project_id.company_id.email or ''">info@yourcompany.com</a>
</t>
<t t-if="object.project_id.company_id.website">
| <a t-attf-href="{{ object.project_id.company_id.website }}" style="text-decoration:none; color: #454748;" t-out="object.project_id.company_id.website or ''">http://www.example.com</a>
</t>
</td></tr>
</tbody>
@ -102,10 +117,20 @@
<!-- You have been assigned email -->
<template id="project_message_user_assigned">
<span>Dear <t t-esc="assignee_name"/>,</span>
<div>
Dear <t t-esc="assignee_name"/>,
<br/><br/>
<span style="margin-top: 8px;">You have been assigned to the <t t-esc="model_description or 'document'"/> <t t-esc="object.display_name"/>.</span>
<br/>
</div>
</template>
<!-- You have been invited to follow the task -->
<template id="task_invitation_follower">
<div>
Hello <t t-out="partner_name"/>,
<br/><br/>
<span style="margin-top: 8px;">You have been invited to follow Task Document : <t t-out="object.display_name"/>.</span>
</div>
</template>
</data>
</odoo>

View file

@ -5,7 +5,8 @@
<field name="model_id" ref="project.model_project_project"/>
<field name="subject">Project status - {{ object.name }}</field>
<field name="email_from">{{ (object.partner_id.email_formatted if object.partner_id else user.email_formatted) }}</field>
<field name="partner_to" >{{ object.partner_id.id }}</field>
<field name="partner_to" eval="False"/>
<field name="use_default_to" eval="True"/>
<field name="description">Set on project's stages to inform customers when a project reaches that stage</field>
<field name="body_html" type="html">
<div>
@ -13,12 +14,11 @@
It is my pleasure to let you know that we have successfully completed the project "<strong t-out="object.name or ''">Renovations</strong>".
<t t-if="user.signature">
<br />
<t t-out="user.signature or ''">--<br/>Mitchell Admin</t>
<div>--<br/><t t-out="user.signature or ''">Mitchell Admin</t></div>
</t>
</div>
<br/><span style="margin: 0px 0px 0px 0px; font-size: 12px; opacity: 0.5; color: #454748;" groups="project.group_project_stages">You are receiving this email because your project has been moved to the stage <b t-out="object.stage_id.name or ''">Done</b></span>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
</data>

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<odoo noupdate="1">
<!-- Project Stages -->
<record id="project_project_stage_0" model="project.project.stage">
<field name="sequence">10</field>
@ -19,7 +19,48 @@
<record id="project_project_stage_3" model="project.project.stage">
<field name="sequence">25</field>
<field name="name">Canceled</field>
<field name="name">Cancelled</field>
<field name="fold" eval="True"/>
</record>
<!-- Project Task export template -->
<record id="project_task_export_template" model="ir.exports">
<field name="name">Tasks</field>
<field name="resource">project.task</field>
</record>
<record id="project_task_export_template_line_id" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">id</field>
</record>
<record id="project_task_export_template_line_project_id" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">project_id</field>
</record>
<record id="project_task_export_template_line_name" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">name</field>
</record>
<record id="project_task_export_template_line_user_ids" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">user_ids</field>
</record>
<record id="project_task_export_template_line_stage_id" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">stage_id</field>
</record>
<record id="project_task_export_template_line_state" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">state</field>
</record>
<record id="project_task_export_template_line_tag_ids" model="ir.exports.line">
<field name="export_id" ref="project_task_export_template"/>
<field name="name">tag_ids</field>
</record>
</odoo>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="project_tour" model="web_tour.tour">
<field name="name">project_tour</field>
<field name="sequence">110</field>
<field name="rainbow_man_message">Congratulations, you are now a master of project management.</field>
</record>
</odoo>