Browse Source

[ADD] b_shift : weekly summary email

pull/116/head
Elouan Le Bars 5 years ago
parent
commit
e583365691
  1. 1
      beesdoo_shift/__openerp__.py
  2. 19
      beesdoo_shift/data/cron.xml
  3. 58
      beesdoo_shift/data/mail_template.xml
  4. 1836
      beesdoo_shift/i18n/fr.po
  5. 1837
      beesdoo_shift/i18n/fr_BE.po
  6. 45
      beesdoo_shift/models/task.py

1
beesdoo_shift/__openerp__.py

@ -21,6 +21,7 @@
"data/stage.xml", "data/stage.xml",
"data/system_parameter.xml", "data/system_parameter.xml",
"data/cron.xml", "data/cron.xml",
"data/mail_template.xml",
"security/group.xml", "security/group.xml",
"security/ir.model.access.csv", "security/ir.model.access.csv",
"views/task_template.xml", "views/task_template.xml",

19
beesdoo_shift/data/cron.xml

@ -23,7 +23,7 @@
<field name="args">()</field> <field name="args">()</field>
<field name="active" eval="False" /> <field name="active" eval="False" />
</record> </record>
<record id="ir_cron_compute_shift_counter" model="ir.cron"> <record id="ir_cron_compute_shift_counter" model="ir.cron">
<field name="name">Compute Shift Counter</field> <field name="name">Compute Shift Counter</field>
<field name="interval_number">4</field> <field name="interval_number">4</field>
@ -35,5 +35,20 @@
<field name="args">()</field> <field name="args">()</field>
<field name="active" eval="False" /> <field name="active" eval="False" />
</record> </record>
<record id="ir_cron_send_weekly_emails" model="ir.cron">
<field name="name">Send weekly shift summary</field>
<field name="interval_number">7</field>
<field name="interval_type">days</field>
<field name="numbercall">-1</field>
<field name="doall" eval="True" />
<field name="nextcall"
eval="str(datetime.utcnow() + timedelta((6-datetime.utcnow().weekday()) % 7 ))"
/>
<field name="model">beesdoo.shift.shift</field>
<field name="function">_cron_send_weekly_emails</field>
<field name="args">()</field>
<field name="active" eval="False" />
</record>
</data> </data>
</odoo>
</odoo>

58
beesdoo_shift/data/mail_template.xml

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!-- Mail template are declared in a NOUPDATE block
so users can freely customize/delete them -->
<data noupdate="1">
<record id="email_template_shift_summary" model="mail.template">
<field name="name">Shift Summary</field>
<field name="subject">Your next shift (${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y - %H:%M')})</field>
<field name="email_from">${object.worker_id.company_id.email}</field>
<field name="partner_to">${object.replaced_id.id or object.worker_id.id|safe}</field>
<field name="model_id" ref="model_beesdoo_shift_shift"/>
<field name="auto_delete" eval="True"/>
<field name="lang">${object.worker_id.lang}</field>
<field name="body_html"><![CDATA[
<div style="font-family: 'Lucica Grande', Ubuntu, Arial, Verdana, sans-serif; font-size: 12px; color: rgb(34, 34, 34); background-color: #FFF; ">
<p>Hello ${object.worker_id.name},</p>
<p>You are awaited the ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%d.%m.%Y')}
for the shift starting at ${format_tz(object.start_time,object.worker_id.tz or 'Europe/Brussels','%H:%M')}.
<br/><br/>Please contact us at ${object.worker_id.company_id.email} if you have any trouble attending the shift.
</p>
<br/>
<p>Sustainably yours,</p>
<p>${object.worker_id.company_id.name}.</p>
% if object.worker_id.company_id.street:
${object.worker_id.company_id.street}
% endif
% if object.worker_id.company_id.street2:
${object.worker_id.company_id.street2}<br/>
% endif
% if object.worker_id.company_id.city or object.worker_id.company_id.zip:
${object.worker_id.company_id.zip} ${object.worker_id.company_id.city}<br/>
% endif
% if object.worker_id.company_id.country_id:
${object.worker_id.company_id.state_id and ('%s, ' % object.worker_id.company_id.state_id.name) or ''} ${object.worker_id.company_id.country_id.name or ''}<br/>
% endif
% if object.worker_id.company_id.phone:
Phone:&nbsp; ${object.worker_id.company_id.phone}
% endif
% if object.worker_id.company_id.website:
<div>
Web :&nbsp;<a href="${object.worker_id.company_id.website}">${object.worker_id.company_id.website}</a>
</div>
%endif
% if object.worker_id.company_id.logo_url:
<div>
<img src=${object.worker_id.company_id.logo_url}>
</div>
%endif
</div>
]]></field>
</record>
</data>
</odoo>

1836
beesdoo_shift/i18n/fr.po
File diff suppressed because it is too large
View File

1837
beesdoo_shift/i18n/fr_BE.po
File diff suppressed because it is too large
View File

45
beesdoo_shift/models/task.py

@ -1,7 +1,10 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from openerp import models, fields, api, _
from openerp.exceptions import UserError, ValidationError
import json import json
from datetime import datetime, timedelta
from openerp import _, api, fields, models
from openerp.exceptions import UserError, ValidationError
class TaskStage(models.Model): class TaskStage(models.Model):
_name = 'beesdoo.shift.stage' _name = 'beesdoo.shift.stage'
@ -180,20 +183,20 @@ class Task(models.Model):
self.ensure_one() self.ensure_one()
self._revert() self._revert()
update = int(self.env['ir.config_parameter'].get_param('always_update', False)) update = int(self.env['ir.config_parameter'].get_param('always_update', False))
new_stage = self.env['beesdoo.shift.stage'].browse(new_stage) new_stage = self.env['beesdoo.shift.stage'].browse(new_stage)
data = {} data = {}
DONE = self.env.ref('beesdoo_shift.done') DONE = self.env.ref('beesdoo_shift.done')
ABSENT = self.env.ref('beesdoo_shift.absent') ABSENT = self.env.ref('beesdoo_shift.absent')
EXCUSED = self.env.ref('beesdoo_shift.excused') EXCUSED = self.env.ref('beesdoo_shift.excused')
NECESSITY = self.env.ref('beesdoo_shift.excused_necessity') NECESSITY = self.env.ref('beesdoo_shift.excused_necessity')
if not (self.worker_id or self.replaced_id) and new_stage in (DONE, ABSENT, EXCUSED, NECESSITY): if not (self.worker_id or self.replaced_id) and new_stage in (DONE, ABSENT, EXCUSED, NECESSITY):
raise UserError(_("You cannot change to the status %s if the is no worker defined on the shift") % new_stage.name) raise UserError(_("You cannot change to the status %s if the is no worker defined on the shift") % new_stage.name)
if update or not (self.worker_id or self.replaced_id): if update or not (self.worker_id or self.replaced_id):
return return
if self.worker_id.working_mode == 'regular': if self.worker_id.working_mode == 'regular':
if not self.replaced_id: #No replacement case if not self.replaced_id: #No replacement case
status = self.worker_id.cooperative_status_ids[0] status = self.worker_id.cooperative_status_ids[0]
@ -207,14 +210,14 @@ class Task(models.Model):
data['sc'] = 1 data['sc'] = 1
else: else:
data['sr'] = 1 data['sr'] = 1
if new_stage == ABSENT and not self.replaced_id: if new_stage == ABSENT and not self.replaced_id:
data['sr'] = - 1 data['sr'] = - 1
if status.sr <= 0: if status.sr <= 0:
data['sc'] = -1 data['sc'] = -1
if new_stage == ABSENT and self.replaced_id: if new_stage == ABSENT and self.replaced_id:
data['sr'] = -1 data['sr'] = -1
if new_stage == EXCUSED: if new_stage == EXCUSED:
data['sr'] = -1 data['sr'] = -1
@ -233,3 +236,29 @@ class Task(models.Model):
raise UserError(_("The worker has not a proper working mode define, please check the worker is subscribed")) raise UserError(_("The worker has not a proper working mode define, please check the worker is subscribed"))
status.sudo()._change_counter(data) status.sudo()._change_counter(data)
self._set_revert_info(data, status) self._set_revert_info(data, status)
@api.model
def _cron_send_weekly_emails(self):
"""
Send a summary email for all workers
if they have a shift planned during the week.
"""
tasks = self.env["beesdoo.shift.shift"]
shift_summary_mail_template = self.env.ref(
"beesdoo_shift.email_template_shift_summary", False
)
start_time = datetime.now() + timedelta(days=1)
end_time = datetime.now() + timedelta(days=7)
confirmed_tasks = tasks.search(
[
("start_time", ">", start_time.strftime("%Y-%m-%d 00:00:01")),
("start_time", "<", end_time.strftime("%Y-%m-%d 23:59:59")),
("worker_id", "!=", False),
("stage_id", "=", self.env.ref("beesdoo_shift.open").id),
]
)
for rec in confirmed_tasks:
shift_summary_mail_template.send_mail(rec.id, True)
Loading…
Cancel
Save