Initial commit: Project packages

This commit is contained in:
Ernad Husremovic 2025-08-29 15:20:52 +02:00
commit 89613c97b0
753 changed files with 496325 additions and 0 deletions

View file

@ -0,0 +1,41 @@
<?xml version='1.0' encoding='utf-8'?>
<odoo>
<data noupdate="1">
<record id="digest.digest_digest_default" model="digest.digest">
<field name="kpi_project_task_opened">True</field>
</record>
</data>
<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="sequence">1200</field>
<field name="group_id" ref="project.group_project_manager"/>
<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>
</field>
</record>
<record id="digest_tip_project_1" model="digest.tip">
<field name="name">Tip: Create tasks from incoming emails</field>
<field name="sequence">1300</field>
<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')"/>
<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 t-else="">
<p class="tip_content">Create tasks by sending an email to the email address of your project.</p>
</t>
</div>
</field>
</record>
</data>
</odoo>

View file

@ -0,0 +1,21 @@
<?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="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

@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo noupdate="1">
<!-- Task-related subtypes for messaging / Chatter -->
<record id="mt_task_new" model="mail.message.subtype">
<field name="name">Task Created</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="hidden" eval="True"/>
<field name="description">Task Created</field>
</record>
<record id="mt_task_stage" model="mail.message.subtype">
<field name="name">Stage Changed</field>
<field name="res_model">project.task</field>
<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>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="description">Task blocked</field>
</record>
<record id="mt_task_ready" model="mail.message.subtype">
<field name="name">Task Ready</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
<field name="description">Task ready for Next Stage</field>
</record>
<record id="mt_task_progress" model="mail.message.subtype">
<field name="name">Task in Progress</field>
<field name="res_model">project.task</field>
<field name="default" eval="False"/>
</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="default" eval="False"/>
<field name="hidden" eval="True"/>
</record>
<!-- Update-related subtypes for messaging / Chatter -->
<record id="mt_update_create" model="mail.message.subtype">
<field name="name">Update Created</field>
<field name="res_model">project.update</field>
<field name="default" eval="False"/>
<field name="description">Update Created</field>
<field name="hidden" eval="True"/>
</record>
<!-- Project-related subtypes for messaging / Chatter -->
<record id="mt_project_stage_change" model="mail.message.subtype">
<field name="name">Project Stage Changed</field>
<field name="sequence">9</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="hidden" eval="True"/>
</record>
<record id="mt_project_task_new" model="mail.message.subtype">
<field name="name">Task Created</field>
<field name="sequence">10</field>
<field name="res_model">project.project</field>
<field name="default" eval="False"/>
<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="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_stage"/>
<field name="relation_field">project_id</field>
</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="res_model">project.project</field>
<field name="default" eval="False"/>
<field name="parent_id" ref="mt_task_dependency_change"/>
<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="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>
</odoo>

View file

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<data noupdate="1">
<!-- Sample stage-related template -->
<record id="mail_template_data_project_task" model="mail.template">
<field name="name">Project: Request Acknowledgment</field>
<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="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,
<t t-if="user.signature">
<br />
<t t-out="user.signature or ''">--<br/>Mitchell Admin</t>
</t>
</div>
</field>
<field name="lang">{{ object.partner_id.lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
<!-- Mail sent to request a rating for a task -->
<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="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="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>
<t t-set="access_token" t-value="object._rating_get_access_token()"/>
<t t-set="partner" t-value="object._rating_get_partner()"/>
<table border="0" cellpadding="0" cellspacing="0" width="590" style="width:100%; margin:0px auto;">
<tbody>
<tr><td valign="top" style="font-size: 13px;">
<t t-if="partner.name">
Hello <t t-out="partner.name or ''">Brandon Freeman</t>,<br/><br/>
</t>
<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>"
<t t-if="object._rating_get_operator().name">
assigned to <strong t-out="object._rating_get_operator().name or ''">Mitchell Admin</strong>.<br/>
</t>
<t t-else="">
.<br/>
</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/>
<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>
</td>
<td>
<a t-attf-href="/rate/{{ access_token }}/3">
<img alt="Okay" src="/rating/static/src/img/rating_3.png" title="Okay"/>
</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>
</td>
</tr>
</table>
</td></tr>
</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>
</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>
</td></tr>
</tbody>
</table>
</div>
</field>
<field name="lang">{{ object._rating_get_partner().lang }}</field>
<field name="auto_delete" eval="True"/>
</record>
<!-- You have been assigned email -->
<template id="project_message_user_assigned">
<span>Dear <t t-esc="assignee_name"/>,</span>
<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/>
</template>
</data>
</odoo>

View file

@ -0,0 +1,25 @@
<odoo>
<data>
<record id="project_done_email_template" model="mail.template">
<field name="name">Project: Project Completed</field>
<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="description">Set on project's stages to inform customers when a project reaches that stage</field>
<field name="body_html" type="html">
<div>
Dear <t t-out="object.partner_id.name or 'customer'">Brandon Freeman</t>,<br/>
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>
</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>
</odoo>

View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Project Stages -->
<record id="project_project_stage_0" model="project.project.stage">
<field name="sequence">10</field>
<field name="name">To Do</field>
</record>
<record id="project_project_stage_1" model="project.project.stage">
<field name="sequence">15</field>
<field name="name">In Progress</field>
</record>
<record id="project_project_stage_2" model="project.project.stage">
<field name="sequence">20</field>
<field name="name">Done</field>
<field name="fold" eval="True"/>
</record>
<record id="project_project_stage_3" model="project.project.stage">
<field name="sequence">25</field>
<field name="name">Canceled</field>
<field name="fold" eval="True"/>
</record>
</odoo>

File diff suppressed because it is too large Load diff