[FIX] project: fix various bugs

Restore Project Kanban view for mobile.
Added a name for the default stage of the tasks in the Internal project
Removal of redundancy for the creation of the Internal project and its tasks
Fix task_reccurrence for the type 'after'. (too much task created or bad task created)

Task-2326258

closes odoo/odoo#64607

Signed-off-by: Yannick Tivisse (yti) <yti@odoo.com>
This commit is contained in:
Francois (fge)
2021-01-15 12:20:54 +00:00
committed by Laurent Stukkens (LTU)
parent 069488257c
commit 568fe91341
7 changed files with 61 additions and 37 deletions
+1 -14
View File
@@ -19,20 +19,7 @@ def create_internal_project(cr, registry):
admin = env.ref('base.user_admin', raise_if_not_found=False)
if not admin:
return
project_vals = []
for company in env['res.company'].search([]):
company = company.with_company(company)
project_vals += [{
'name': _('Internal'),
'allow_timesheets': True,
'company_id': company.id,
'task_ids': [(0, 0, {
'name': name,
'company_id': company.id,
}) for name in [_('Training'), _('Meeting')]]
}]
project_ids = env['project.project'].create(project_vals)
project_ids = env['res.company'].search([])._create_internal_project_task()
env['account.analytic.line'].create([{
'name': _("Analysis"),
'user_id': admin.id,
@@ -24,4 +24,9 @@
<field name="value">15</field>
</record>
<record id="internal_project_default_stage" model="project.task.type">
<field name="sequence">1</field>
<field name="name">Internal</field>
</record>
</odoo>
+10 -14
View File
@@ -48,22 +48,18 @@ class ResCompany(models.Model):
def _create_internal_project_task(self):
results = []
type_ids = [(4, self.env.ref('hr_timesheet.internal_project_default_stage').id)]
for company in self:
company = company.with_company(company)
internal_project = company.env['project.project'].sudo().create({
results += [{
'name': _('Internal'),
'allow_timesheets': True,
'company_id': company.id,
})
company.env['project.task'].sudo().create([{
'name': _('Training'),
'project_id': internal_project.id,
'company_id': company.id,
}, {
'name': _('Meeting'),
'project_id': internal_project.id,
'company_id': company.id,
}])
results.append(internal_project)
return results
'type_ids': type_ids,
'task_ids': [(0, 0, {
'name': name,
'company_id': company.id,
}) for name in [_('Training'), _('Meeting')]]
}]
project_ids = self.env['project.project'].create(results)
return project_ids
+9 -5
View File
@@ -774,7 +774,8 @@ class Task(models.Model):
self.recurrence_message = False
for task in self.filtered(lambda t: t.recurring_task and t._is_recurrence_valid()):
date = fields.Date.today()
number_occurrences = min(5, task.repeat_number if task.repeat_type == 'after' else 5)
recurrence_left = task.recurrence_id.recurrence_left if task.recurrence_id else task.repeat_number
number_occurrences = min(5, recurrence_left if task.repeat_type == 'after' else 5)
delta = task.repeat_interval if task.repeat_unit == 'day' else 1
recurring_dates = self.env['project.task.recurrence']._get_next_recurring_dates(
date + timedelta(days=delta),
@@ -790,10 +791,13 @@ class Task(models.Model):
task.repeat_month,
count=number_occurrences)
date_format = self.env['res.lang']._lang_get(self.env.user.lang).date_format
task.recurrence_message = '<ul>'
for date in recurring_dates[:5]:
task.recurrence_message += '<li>%s</li>' % date.strftime(date_format)
if task.repeat_type == 'after' and task.repeat_number > 5 or task.repeat_type == 'forever' or len(recurring_dates) > 5:
if recurrence_left == 0:
recurrence_title = _('There are no more occurrences.')
else:
recurrence_title = _('Next Occurrences:')
task.recurrence_message = '<p><span class="fa fa-check-circle"></span> %s</p><ul>' % recurrence_title
task.recurrence_message += ''.join(['<li>%s</li>' % date.strftime(date_format) for date in recurring_dates[:5]])
if task.repeat_type == 'after' and recurrence_left > 5 or task.repeat_type == 'forever' or len(recurring_dates) > 5:
task.recurrence_message += '<li>...</li>'
task.recurrence_message += '</ul>'
if task.repeat_type == 'until':
@@ -214,7 +214,7 @@ class ProjectTaskRecurrence(models.Model):
def _create_next_task(self):
for recurrence in self:
task = self.sudo().task_ids[-1]
task = recurrence.sudo().task_ids[-1]
create_values = recurrence._new_task_values(task)
new_task = self.env['project.task'].sudo().create(create_values)
if not new_task.parent_id and task.child_ids:
+31 -1
View File
@@ -445,6 +445,37 @@
</field>
</record>
<record id="project_view_kanban" model="ir.ui.view">
<field name="name">project.project.kanban</field>
<field name="model">project.project</field>
<field name="arch" type="xml">
<kanban class="o_kanban_mobile">
<field name="user_id" string="Project Manager"/>
<templates>
<t t-name="kanban-box">
<div t-attf-class="oe_kanban_content oe_kanban_global_click o_kanban_get_form">
<div class="row">
<div class="col-12">
<strong><field name="name" string="Project Name"/></strong>
</div>
</div>
<div class="row">
<div class="col-8">
<field name="partner_id" string="Contact"/>
</div>
<div class="col-4">
<div class="oe_kanban_bottom_right float-right">
<field name="user_id" widget="many2one_avatar_user"/>
</div>
</div>
</div>
</div>
</t>
</templates>
</kanban>
</field>
</record>
<record id="project_project_view_form_simplified" model="ir.ui.view">
<field name="name">project.project.view.form.simplified</field>
<field name="model">project.project</field>
@@ -731,7 +762,6 @@
</group>
<group attrs="{'invisible': ['|', ('recurring_task', '=', False), ('recurrence_message', '=', False)]}">
<div class="alert alert-success o_form_project_recurrence_message" role="status">
<p><span class="fa fa-check-circle"></span> Next Occurrences:</p>
<field name="recurrence_message" widget="html" class="mb-0" />
</div>
</group>
@@ -23,6 +23,7 @@ class Company(models.Model):
raise ValidationError(_('The Internal Project of a company should be in that company.'))
def init(self):
type_ids = [(4, self.env.ref('hr_timesheet.internal_project_default_stage').id)]
for company in self.search([('leave_timesheet_project_id', '=', False)]):
company = company.with_company(company)
project = company.env['project.project'].search([
@@ -35,6 +36,7 @@ class Company(models.Model):
'name': _('Internal'),
'allow_timesheets': True,
'company_id': company.id,
'type_ids': type_ids,
})
company.write({
'leave_timesheet_project_id': project.id,
@@ -43,7 +45,7 @@ class Company(models.Model):
task = company.env['project.task'].create({
'name': _('Time Off'),
'project_id': company.leave_timesheet_project_id.id,
'active': False,
'active': True,
'company_id': company.id,
})
company.write({
@@ -63,7 +65,7 @@ class Company(models.Model):
task = company.env['project.task'].sudo().create({
'name': _('Time Off'),
'project_id': company.leave_timesheet_project_id.id,
'active': False,
'active': True,
'company_id': company.id,
})
company.write({