Commit 7e9aa8a0 by François C.

Adaptations pour nouveau cron génération des services (durée paramétrable)

parent f4db68f7
......@@ -25,4 +25,8 @@
<field name="key">lacagette_membership.committees_shift_id</field>
<field name="value"> </field>
</record>
<record id="shift_creation_days" model="ir.config_parameter">
<field name="key">lacagette_membership.shift_creation_days</field>
<field name="value">180</field>
</record>
</odoo>
......@@ -44,4 +44,17 @@
<field name="active" eval="False"/>
<field name="priority">1</field>
</record>
<record forcecreate="True" id="cron_shifts_generation" model="ir.cron">
<field name="name">Generate shifts (La Cagette version)</field>
<field name="user_id" ref="base.user_root" />
<field name="interval_number">1</field>
<field name="interval_type">weeks</field>
<field name="numbercall">-1</field>
<field name="doall" eval="False"/>
<field name="model" eval="'lacagette.shift.template'"/>
<field name="function" eval="'run_shift_creation'"/>
<field name="args" eval="'()'"/>
<field name="active" eval="False"/>
<field name="priority">1</field>
</record>
</odoo>
\ No newline at end of file
......@@ -5,3 +5,4 @@ from . import shift_registration
from . import shift_counter_event
from . import shift_shift
from . import member_state_change
from . import shift_template
\ No newline at end of file
......@@ -58,7 +58,7 @@ class ResPartner(models.Model):
SELECT s.id
FROM shift_extension as s
WHERE s.date_stop > now()
AND partner_id IN (SELECT id FROM res_partner WHERE cooperative_state in ('up_to_date', 'unsubscribed')
AND partner_id IN (SELECT id FROM res_partner WHERE cooperative_state in ('up_to_date', 'unsubscribed'))
"""
self.env.cr.execute(sql)
extension_ids = self.env.cr.fetchall()
......
# -*- coding: utf-8 -*-
from openerp import _, api, models, fields
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta
import logging
_logger = logging.getLogger(__name__)
class ShiftTemplate(models.Model):
_name = "lacagette.shift.template"
_inherit = 'shift.template'
@api.model
def ng_create_shifts_from_template(self, instance=None, after=False, before=False):
conf = self.env['ir.config_parameter']
shift_creation_days = int(conf.get_param("lacagette_membership.shift_creation_days"))
if not before:
before = fields.Datetime.to_string(
datetime.today() + timedelta(days=shift_creation_days))
for template in instance:
if len(str(template.rrule).strip()) == 0:
continue # It's not a recurring template
after = template.last_shift_date
rec_dates = template.get_recurrent_dates(
after=after, before=before)
for rec_date in rec_dates:
start_date_object_tz = datetime.strptime(
template.start_datetime_tz, '%Y-%m-%d %H:%M:%S')
date_begin = datetime.strftime(
rec_date + timedelta(hours=(start_date_object_tz.hour)) +
timedelta(minutes=(start_date_object_tz.minute)),
"%Y-%m-%d %H:%M:%S")
if date_begin.split(" ")[0] <= template.last_shift_date:
continue
end_date_object_tz = datetime.strptime(
template.end_datetime_tz, '%Y-%m-%d %H:%M:%S')
diff_day = end_date_object_tz.day - start_date_object_tz.day
diff_month = end_date_object_tz.month -\
start_date_object_tz.month
diff_year = end_date_object_tz.year - start_date_object_tz.year
date_end = datetime.strftime(
rec_date + timedelta(hours=(end_date_object_tz.hour)) +
timedelta(minutes=(end_date_object_tz.minute)) +
relativedelta(days=diff_day) +
relativedelta(months=diff_month) +
relativedelta(years=diff_year),
"%Y-%m-%d %H:%M:%S")
rec_date = datetime.strftime(rec_date, "%Y-%m-%d")
vals = {
'shift_template_id': template.id,
'name': template.name,
'user_ids': [(6, 0, template.user_ids.ids)],
'company_id': template.company_id.id,
'seats_max': template.seats_max,
'seats_availability': template.seats_availability,
'seats_min': template.seats_min,
'date_begin_tz': date_begin,
'date_end_tz': date_end,
'state': 'draft',
'reply_to': template.reply_to,
'address_id': template.address_id.id,
'description': template.description,
'shift_type_id': template.shift_type_id.id,
'week_number': template.week_number,
'week_list': template.week_list,
'shift_ticket_ids': None,
}
shift_id = self.env['shift.shift'].create(vals)
for ticket in template.shift_ticket_ids:
vals = {
'name': ticket.name,
'shift_id': shift_id.id,
'product_id': ticket.product_id.id,
'price': ticket.price,
'deadline': ticket.deadline,
'seats_availability': ticket.seats_availability,
'seats_max': ticket.seats_max,
}
if ticket.product_id.shift_type_id.is_ftop:
vals['seats_availability'] = 'limited'
vals['seats_max'] = 0
ticket_id = self.env['shift.ticket'].create(vals)
for attendee in ticket.registration_ids:
state, strl_id = attendee._get_state(rec_date)
if state:
vals = {
'partner_id': attendee.partner_id.id,
'user_ids': [(6, 0, template.user_ids.ids)],
'state': state,
'email': attendee.email,
'phone': attendee.phone,
'name': attendee.name,
'shift_id': shift_id.id,
'shift_ticket_id': ticket_id.id,
'tmpl_reg_line_id': strl_id,
'template_created': True,
}
self.env['shift.registration'].with_context(
from_shift_template=True).create(vals)
@api.model
def run_shift_creation(self):
# This method is called by the cron task
conf = self.env['ir.config_parameter']
shift_creation_days = int(conf.get_param("lacagette_membership.shift_creation_days"))
#templates = self.env['shift.template'].search([('recurrency', '=', True)])
templates = self.env['shift.template'].search([('id', '=', 60)])
for template in templates:
self.ng_create_shifts_from_template( instance=template,
before=fields.Datetime.to_string(
datetime.today() + timedelta(days=shift_creation_days)))
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment