First partial version of the module

Complies with 2 first objectives:
- nouveau champ "équipe" dans évènement public pour le faire apparaître dans les calendriers de tous ses organisateurs/formateurs
- calendrier unique par salarié avec évènements personnels, évènements communs, et à terme évènements à inscription publique
=> synchroniser les évènements publics dans le calendrier personnel du responsable et des organisateurs/formateurs de l'évènement
(ces évènements publics ne seront pas modifiables depuis les agendas personnels)
This commit is contained in:
Olivier Sarrat 2016-11-14 15:13:16 +01:00
parent 388bd038b6
commit d8876d8cdf
9 changed files with 284 additions and 0 deletions

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
import controllers
import models

View File

@ -0,0 +1,39 @@
# -*- coding: utf-8 -*-
{
'name': "groupeurd_calendar",
'summary': """
Adaptation du module "smile_event_event_calendar" pour les besoins spécifiques du Groupe URD.""",
'description': """
- nouveau champ "équipe" dans évènement public pour le faire apparaître dans les calendriers de tous ses organisateurs/formateurs
- calendrier unique par salarié avec évènements personnels, évènements communs, et à terme évènements à inscription publique
=> synchroniser les évènements publics dans le calendrier personnel du responsable et des organisateurs/formateurs de l'évènement (ces évènements publics ne seront pas modifiables depuis les agendas personnels)
- visibilité des calendriers de tous les autres salariés
- accès à des vues personnalisées : planning de tous les salariés par semaine, planning de tous les salariés par mois
- synchro bi-directionnelle avec Thunderbird
- [optionnel] partage .ics des calendriers
""",
'author': "Groupe URD",
'website': "http://www.urd.org",
# Categories can be used to filter modules in modules listing
# Check https://github.com/odoo/odoo/blob/10.0/odoo/addons/base/module/module_data.xml
# for the full list
'category': 'Events',
'version': '0.1',
# any module necessary for this one to work correctly
'depends': ['smile_event_event_calendar'],
# always loaded
'data': [
# 'security/ir.model.access.csv',
'views.xml',
],
# only loaded in demonstration mode
'demo': [
#'demo.xml',
],
}

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from openerp import http
# class GroupeurdCalendar(http.Controller):
# @http.route('/groupeurd_calendar/groupeurd_calendar/', auth='public')
# def index(self, **kw):
# return "Hello, world"
# @http.route('/groupeurd_calendar/groupeurd_calendar/objects/', auth='public')
# def list(self, **kw):
# return http.request.render('groupeurd_calendar.listing', {
# 'root': '/groupeurd_calendar/groupeurd_calendar',
# 'objects': http.request.env['groupeurd_calendar.groupeurd_calendar'].search([]),
# })
# @http.route('/groupeurd_calendar/groupeurd_calendar/objects/<model("groupeurd_calendar.groupeurd_calendar"):obj>/', auth='public')
# def object(self, obj, **kw):
# return http.request.render('groupeurd_calendar.object', {
# 'object': obj
# })

View File

@ -0,0 +1,25 @@
<openerp>
<data>
<!-- -->
<!-- <record id="object0" model="groupeurd_calendar.groupeurd_calendar"> -->
<!-- <field name="name">Object 0</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object1" model="groupeurd_calendar.groupeurd_calendar"> -->
<!-- <field name="name">Object 1</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object2" model="groupeurd_calendar.groupeurd_calendar"> -->
<!-- <field name="name">Object 2</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object3" model="groupeurd_calendar.groupeurd_calendar"> -->
<!-- <field name="name">Object 3</field> -->
<!-- </record> -->
<!-- -->
<!-- <record id="object4" model="groupeurd_calendar.groupeurd_calendar"> -->
<!-- <field name="name">Object 4</field> -->
<!-- </record> -->
<!-- -->
</data>
</openerp>

View File

@ -0,0 +1,33 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * groupeurd_calendar
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 8.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-14 13:54+0000\n"
"PO-Revision-Date: 2016-11-14 13:54+0000\n"
"Last-Translator: <>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: groupeurd_calendar
#: model:ir.model,name:groupeurd_calendar.model_calendar_event
#: model:ir.model,name:groupeurd_calendar.model_event_event
msgid "Event"
msgstr "Évènement"
#. module: groupeurd_calendar
#: field:event.event,team_ids:0
msgid "Event team members"
msgstr "Equipe de l'évènement"
#. module: groupeurd_calendar
#: view:calendar.event:groupeurd_calendar.revised_calendar_event_form
msgid "{\"readonly\":[('event_event_id','!=',False)]}"
msgstr "{\"readonly\":[('event_event_id','!=',False)]}"

View File

@ -0,0 +1,87 @@
# -*- coding: utf-8 -*-
from openerp import models, fields, api
#Debuggger package
import pdb
## APPELER "pdb.set_trace()" pour faire un point de débuggage qu'on peut piloter ensuite depuis la console
#
# "event.event" est l'objet pour les évènements publics
#
class Event(models.Model):
_name = "event.event"
_inherit = "event.event"
#le champ "team_ids" est conçu pour n'etre modifiable que depuis l'interface sur un event.event
# => il sert d'interface pour modifier le calendar_event.partner_ids qui lui stocke la valeur de référence sur cette information
team_ids = fields.Many2many("res.partner", string="Event team members")
# le décorateur "@api.model" indique que le "self" est alors une classe "event.event" générique
@api.model
def create(self, vals):
#Ajouter le responsable (user_id) à l'équipe pour que l'évènement soit visible dans son calendrier
team_ids_vals = vals['team_ids'][0][2]
team_ids_vals.append(self.env['res.users'].search([('id','=',vals['user_id'])]).partner_id.id)
vals['team_ids'] = [(6,False,team_ids_vals)]
event = super(Event, self).create(vals)
return event
# le décorateur "@api.multi" indique que le "self" dans la fonction est tableau d'objets "event.event"
@api.multi
def write(self, vals):
# Ajouter le responsable (user_id) à l'équipe s'il a été modifié
if vals.get('user_id'):
team_ids_vals = []
if vals.get('team_ids'):
team_ids_vals = vals['team_ids'][0][2]
else:
event = self
for team_member_id in event.team_ids:
team_ids_vals.append(team_member_id.id)
team_ids_vals.append(self.env['res.users'].search([('id','=',vals['user_id'])]).partner_id.id)
vals['team_ids'] = [(6,False,team_ids_vals)]
res = super(Event, self).write(vals)
context = dict(self._context or {})
if context.get("from_eventevent_interface"):
for event in self:
for calendar_event in self.env['calendar.event'].search([('event_event_id','=',event.id)]):
calendar_event.partner_ids = event.team_ids
if vals.get('user_id'):
calendar_event.user_id = event.user_id
return res
#
# "calendar.event" est l'objet pour les évènements affichés dans les calendriers des utilisateurs
#
class CalendarEvent(models.Model):
_inherit = 'calendar.event'
@api.model
def create(self, vals):
calendar_event = super(CalendarEvent, self).create(vals)
if calendar_event.event_event_id:
calendar_event.partner_ids = calendar_event.event_event_id.team_ids
calendar_event.partner_ids |= calendar_event.event_event_id.user_id.partner_id
return calendar_event
@api.multi
def write(self, vals):
res = super(CalendarEvent, self).write(vals)
# Après la modification, si la modif n'est pas faite depuis l'event.event,
# on met à jour la team member listes de l'event.event
context = dict(self._context or {})
if context.get("from_eventevent_interface") != True :
for calendar_event in self:
if calendar_event.event_event_id:
calendar_event.event_event_id.team_ids = calendar_event.partner_ids
return res

View File

@ -0,0 +1,2 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_groupeurd_calendar_groupeurd_calendar,groupeurd_calendar.groupeurd_calendar,model_groupeurd_calendar_groupeurd_calendar,,1,0,0,0
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
2 access_groupeurd_calendar_groupeurd_calendar groupeurd_calendar.groupeurd_calendar model_groupeurd_calendar_groupeurd_calendar 1 0 0 0

View File

@ -0,0 +1,22 @@
<openerp>
<data>
<!-- <template id="listing"> -->
<!-- <ul> -->
<!-- <li t-foreach="objects" t-as="object"> -->
<!-- <a t-attf-href="#{ root }/objects/#{ object.id }"> -->
<!-- <t t-esc="object.display_name"/> -->
<!-- </a> -->
<!-- </li> -->
<!-- </ul> -->
<!-- </template> -->
<!-- <template id="object"> -->
<!-- <h1><t t-esc="object.display_name"/></h1> -->
<!-- <dl> -->
<!-- <t t-foreach="object._fields" t-as="field"> -->
<!-- <dt><t t-esc="field"/></dt> -->
<!-- <dd><t t-esc="object[field]"/></dd> -->
<!-- </t> -->
<!-- </dl> -->
<!-- </template> -->
</data>
</openerp>

View File

@ -0,0 +1,53 @@
<openerp>
<data>
<!-- VIEWS -->
<record id="revised_event_form" model="ir.ui.view">
<field name="name">Event edition form with team management</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_form" />
<field name="arch" type="xml">
<field name="address_id" position="after">
<field name="team_ids" widget="many2many_tags" />
</field>
<field name="organizer_id" position="attributes">
<attribute name="invisible">1</attribute>
</field>
</field>
</record>
<!-- -->
<record id="revised_calendar_event_form" model="ir.ui.view">
<field name="name">Calendar Event edition form without name modification if linked to public event</field>
<field name="model">calendar.event</field>
<field name="inherit_id" ref="calendar.view_calendar_event_form" />
<field name="arch" type="xml">
<field name="name" position="attributes">
<attribute name="attrs">{"readonly":[('event_event_id','!=',False)]}</attribute>
</field>
<field name="user_id" position="attributes">
<attribute name="attrs">{"readonly":[('event_event_id','!=',False)]}</attribute>
</field>
</field>
</record>
<!-- ACTIONS -->
<record model="ir.actions.act_window" id="event.action_event_view">
<field name="name">Events</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.event</field>
<field name="view_type">form</field>
<field name="view_mode">kanban,calendar,tree,form</field>
<field name="context">{"search_default_upcoming":1,"from_eventevent_interface":1}</field>
<field name="search_view_id" ref="event.view_event_search"/>
<field name="help" type="html"><p class="oe_view_nocontent_create">
Click to add a new event.
</p><p>
Odoo helps you schedule and efficiently organize your events:
track registrations and participations, automate the confirmation emails,
sell tickets, etc.
</p>
</field>
</record>
</data>
</openerp>