Activités : inscription par créneau interne #41
19
golem_activity_registration_slot/__init__.py
Normal file
19
golem_activity_registration_slot/__init__.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from . import models
|
31
golem_activity_registration_slot/__manifest__.py
Normal file
31
golem_activity_registration_slot/__manifest__.py
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
{
|
||||||
|
'name': 'GOLEM activity registration slot',
|
||||||
|
'summary': 'GOLEM activity registration slot',
|
||||||
|
'description': ''' GOLEM activity registration slot management ''',
|
||||||
|
'version': '10.0.0.0.1',
|
||||||
|
'category': 'GOLEM',
|
||||||
|
'author': 'Youssef El Ouahby, Fabien Bourgeois',
|
||||||
|
'license': 'AGPL-3',
|
||||||
|
'application': True,
|
||||||
|
'installable': True,
|
||||||
|
'depends': ['golem_activity_registration'],
|
||||||
|
'data': ['views/golem_activity_views.xml']
|
||||||
|
}
|
19
golem_activity_registration_slot/models/__init__.py
Normal file
19
golem_activity_registration_slot/models/__init__.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from . import golem_activity, golem_activity_registration_slot, golem_activity_registration
|
33
golem_activity_registration_slot/models/golem_activity.py
Normal file
33
golem_activity_registration_slot/models/golem_activity.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
""" GOLEM Activity adaptations """
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
class GolemActivity(models.Model):
|
||||||
|
""" GOLEM Activity adaptations """
|
||||||
|
_inherit = 'golem.activity'
|
||||||
|
|
||||||
|
individual_slots = fields.Boolean(string='Individual slots activity')
|
||||||
|
slots_number = fields.Integer(string='Registration Slot Number')
|
||||||
|
slots_duration = fields.Float(string='Registration Slot Duration')
|
||||||
|
registration_slot_ids = fields.One2many('golem.activity.registration.slot', 'activity_id',
|
||||||
|
string='Registration Slots')
|
||||||
|
|
||||||
|
#@api.constrains('slots_number', 'slots_duration')
|
@ -0,0 +1,45 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
""" GOLEM Activity Registration """
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
class GolemActivityRegistration(models.Model):
|
||||||
|
""" GOLEM Activity Registration Adaptations"""
|
||||||
|
_inherit = 'golem.activity.registration'
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def create(self, vals):
|
||||||
|
""" Create registration slot """
|
||||||
|
reg = super(GolemActivityRegistration, self).create(vals)
|
||||||
|
if reg.activity_id.individual_slots:
|
||||||
|
slots = self.env['golem.activity.registration.slot'].search(
|
||||||
|
[('activity_id', '=', reg.activity_id.id)], order='hour_stop')
|
||||||
|
if len(slots) >= reg.activity_id.slots_number:
|
||||||
|
verr = _(u'No available slot to register in this activity')
|
||||||
|
raise ValidationError(verr)
|
||||||
|
hour_start = slots[-1].hour_stop if slots else reg.activity_id.hour_start
|
||||||
|
self.env['golem.activity.registration.slot'].create({
|
||||||
|
'activity_id': reg.activity_id.id,
|
||||||
|
'member_id': reg.member_id.id,
|
||||||
|
'hour_start': hour_start,
|
||||||
|
'hour_stop': hour_start + reg.activity_id.slots_duration
|
||||||
|
})
|
||||||
|
return reg
|
@ -0,0 +1,63 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
# Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
# Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU Affero General Public License as
|
||||||
|
# published by the Free Software Foundation, either version 3 of the
|
||||||
|
# License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU Affero General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Affero General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
""" GOLEM Activity Registration Slot """
|
||||||
|
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
from odoo.exceptions import ValidationError
|
||||||
|
|
||||||
|
class GolemActivityRegistrationSlot(models.Model):
|
||||||
|
""" GOLEM Activity Registration Slot """
|
||||||
|
_name = 'golem.activity.registration.slot'
|
||||||
|
_order = 'sequence'
|
||||||
|
|
||||||
|
_description = 'GOLEM Activity Registration Slot'
|
||||||
|
activity_id = fields.Many2one('golem.activity', required=True,
|
||||||
|
string='Activity', ondelete='cascade',
|
||||||
|
index=True)
|
||||||
|
member_id = fields.Many2one('golem.member', string='Member',
|
||||||
|
ondelete='cascade', index=True)
|
||||||
|
hour_start = fields.Float('Start time')
|
||||||
|
hour_stop = fields.Float('Stop time')
|
||||||
|
sequence = fields.Integer('Sequence')
|
||||||
|
|
||||||
|
@api.constrains('hour_start', 'hour_stop')
|
||||||
|
def check_slot_hours(self):
|
||||||
|
""" Check slot hours consistency """
|
||||||
|
for slot in self:
|
||||||
|
if slot.hour_start >= slot.hour_stop:
|
||||||
|
verr = _(u'Slot start must be before slot stop')
|
||||||
|
raise ValidationError(verr)
|
||||||
|
if slot.hour_start < slot.activity_id.hour_start or \
|
||||||
|
slot.hour_stop > slot.activity_id.hour_stop:
|
||||||
|
verr = _(u'Slot start and stop must be between activity start and'
|
||||||
|
' activity stop.')
|
||||||
|
raise ValidationError(verr)
|
||||||
|
|
||||||
|
@api.constrains('sequence')
|
||||||
|
def calculate_slot_hours(self):
|
||||||
|
""" Calcualte slot hours """
|
||||||
|
slots = self.env['golem.activity.registration.slot'].search(
|
||||||
|
[('activity_id', '=', self[0].activity_id.id)], order='sequence')
|
||||||
|
for id_slot, slot in enumerate(slots):
|
||||||
|
hour_start = slot.activity_id.hour_start + (slot.activity_id.slots_duration * id_slot)
|
||||||
|
hour_stop = hour_start + slot.activity_id.slots_duration
|
||||||
|
slot.write({
|
||||||
|
'hour_start': hour_start,
|
||||||
|
'hour_stop': hour_stop
|
||||||
|
})
|
@ -0,0 +1,52 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
Copyright 2018 Youssef El Ouahby <youssef@yaltik.com>
|
||||||
|
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||||
|
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU Affero General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU Affero General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Affero General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<!-- Forms -->
|
||||||
|
<record id="golem_activity_form_inherit_golem_activity_registration_slot"
|
||||||
|
model="ir.ui.view">
|
||||||
|
<field name="name">Add registration slot to activity form</field>
|
||||||
|
<field name="model">golem.activity</field>
|
||||||
|
<field name="inherit_id" ref="golem_activity.golem_activity_form" />
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<field name='list_price' position='after'>
|
||||||
|
<field name='individual_slots'/>
|
||||||
|
</field>
|
||||||
|
<page name='activity_others' position='before'>
|
||||||
|
<page name='individual_slots_tab' string='Individual Slots'
|
||||||
|
attrs="{'invisible': [('individual_slots', '!=', True)]}">
|
||||||
|
<group>
|
||||||
|
<field name='slots_number'/>
|
||||||
|
<field name='slots_duration' widget='float_time'/>
|
||||||
|
<field name='registration_slot_ids'>
|
||||||
|
<tree editable='bottom'>
|
||||||
|
<field name="sequence" widget="handle"/>
|
||||||
|
<field name="member_id"/>
|
||||||
|
<field name='hour_start' widget='float_time'/>
|
||||||
|
<field name='hour_stop' widget='float_time'/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</group>
|
||||||
|
</page>
|
||||||
|
</page>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
Loading…
Reference in New Issue
Block a user