[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:
committed by
Laurent Stukkens (LTU)
parent
069488257c
commit
568fe91341
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user