forked from Yaltik/golem
Merge branch 'master' into golem_resource_account
This commit is contained in:
commit
aad88c2fed
@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
|
||||
# Copyright 2017-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
|
||||
@ -18,7 +18,7 @@
|
||||
{
|
||||
'name': 'GOLEM Activity Member Registrations',
|
||||
'summary': 'GOLEM Activities Member Registrations management',
|
||||
'version': '10.0.1.1.0',
|
||||
'version': '10.0.1.1.3',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois, Michel Dessenne',
|
||||
'license': 'AGPL-3',
|
||||
@ -26,6 +26,8 @@
|
||||
'installable': True,
|
||||
'depends': ['golem_activity', 'golem_member'],
|
||||
'data': ['views/golem_activity_registration_views.xml',
|
||||
'views/golem_member_views.xml', 'views/golem_activity_views.xml',
|
||||
'views/golem_member_views.xml',
|
||||
'views/golem_activity_views.xml',
|
||||
'report/golem_member_card_templates.xml',
|
||||
'security/ir.model.access.csv']
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-06-14 23:16+0000\n"
|
||||
"PO-Revision-Date: 2017-06-28 17:30+0000\n"
|
||||
"POT-Creation-Date: 2018-03-17 14:18+0000\n"
|
||||
"PO-Revision-Date: 2018-03-17 14:18+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -17,6 +17,7 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
|
||||
msgid "Activities"
|
||||
msgstr "Activités"
|
||||
@ -36,6 +37,11 @@ msgstr "Inscriptions"
|
||||
msgid "All activities"
|
||||
msgstr "Toutes les activités"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Animator"
|
||||
msgstr "Intervenant"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
|
||||
msgid "Base price"
|
||||
@ -71,6 +77,21 @@ msgstr "Activités de la saison affichée par défaut"
|
||||
msgid "Current season?"
|
||||
msgstr "Saison en cours?"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Date start"
|
||||
msgstr "Début"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Date stop"
|
||||
msgstr "Fin"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Day"
|
||||
msgstr "Jour"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
|
||||
msgid "Default season"
|
||||
@ -106,6 +127,16 @@ msgstr "Liste des inscriptions aux activités"
|
||||
msgid "GOLEM Member"
|
||||
msgstr "Adhérent"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Hour start"
|
||||
msgstr "Début"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Hour stop"
|
||||
msgstr "Fin"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_id
|
||||
msgid "ID"
|
||||
@ -137,6 +168,11 @@ msgstr "Adhérent"
|
||||
msgid "Members"
|
||||
msgstr "Adhérents"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:38
|
||||
#: sql_constraint:golem.activity:0
|
||||
@ -186,13 +222,13 @@ msgid "Subscription"
|
||||
msgstr "Inscription"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:98
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:99
|
||||
#, python-format
|
||||
msgid "Subscription can not be executed : the targeted member is not on the same season as the activity."
|
||||
msgstr "L'inscription n'a pas pu être enregistrée : l'usager visé n'est pas ahdérant pour la même saison que celle pendant laquelle se déroule l'activité."
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:90
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:91
|
||||
#: sql_constraint:golem.activity.registration:0
|
||||
#, python-format
|
||||
msgid "This member has already been registered for this activity."
|
||||
@ -203,3 +239,7 @@ msgstr "L'usager a déjà été inscrit à cette activité."
|
||||
msgid "Total"
|
||||
msgstr "Total"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Type"
|
||||
msgstr "Type"
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-01-09 15:14+0000\n"
|
||||
"PO-Revision-Date: 2018-01-09 15:14+0000\n"
|
||||
"POT-Creation-Date: 2018-03-17 14:18+0000\n"
|
||||
"PO-Revision-Date: 2018-03-17 14:18+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -16,6 +16,7 @@ msgstr ""
|
||||
"Plural-Forms: \n"
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
|
||||
msgid "Activities"
|
||||
msgstr ""
|
||||
@ -35,6 +36,11 @@ msgstr ""
|
||||
msgid "All activities"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Animator"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_form_inherit_golem_activity_registration
|
||||
msgid "Base price"
|
||||
@ -70,6 +76,21 @@ msgstr ""
|
||||
msgid "Current season?"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Date start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Date stop"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_activity_registration_search
|
||||
msgid "Default season"
|
||||
@ -105,6 +126,16 @@ msgstr ""
|
||||
msgid "GOLEM Member"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Hour start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Hour stop"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.model.fields,field_description:golem_activity_registration.field_golem_activity_registration_id
|
||||
msgid "ID"
|
||||
@ -136,6 +167,11 @@ msgstr ""
|
||||
msgid "Members"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:38
|
||||
#: sql_constraint:golem.activity:0
|
||||
@ -185,13 +221,13 @@ msgid "Subscription"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:98
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:99
|
||||
#, python-format
|
||||
msgid "Subscription can not be executed : the targeted member is not on the same season as the activity."
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:90
|
||||
#: code:addons/golem_activity_registration/models/golem_activity_registration.py:91
|
||||
#: sql_constraint:golem.activity.registration:0
|
||||
#, python-format
|
||||
msgid "This member has already been registered for this activity."
|
||||
@ -202,3 +238,8 @@ msgstr ""
|
||||
msgid "Total"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_activity_registration
|
||||
#: model:ir.ui.view,arch_db:golem_activity_registration.golem_member_card_template_inherit_golem_activity_resgitration
|
||||
msgid "Type"
|
||||
msgstr ""
|
||||
|
||||
|
@ -0,0 +1,76 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@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>
|
||||
|
||||
<template id="golem_member_card_template_inherit_golem_activity_resgitration"
|
||||
inherit_id="golem_member.golem_member_card_template">
|
||||
<xpath expr="//div[@id='page_report_member']/div[1]" postion="after">
|
||||
<h3>Activities</h3>
|
||||
<table id="table_activity_ref" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Animator</th>
|
||||
<th>Day</th>
|
||||
<th>Hour start</th>
|
||||
<th>Hour stop</th>
|
||||
<th>Date start</th>
|
||||
<th id="activity_inherit_th">Date stop</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="activity_inherit_price_sum"
|
||||
t-foreach="member.activity_registration_ids" t-as="reg">
|
||||
<td class="col-xs-2">
|
||||
<span t-esc="reg.activity_id.name" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-esc="reg.activity_id.type_id.name" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-field="reg.activity_id.animator_id" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-field="reg.activity_id.weekday" />
|
||||
</td>
|
||||
<td class="col-xs-1">
|
||||
<t t-esc="'%02d:%02d' % (int(reg.activity_id.hour_start), round(reg.activity_id.hour_start % 1 * 60))" />
|
||||
</td>
|
||||
<td class="col-xs-1">
|
||||
<t t-esc="'%02d:%02d' % (int(reg.activity_id.hour_stop), round(reg.activity_id.hour_stop % 1 * 60))" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-if="reg.activity_id.is_fullseason" t-field="season.date_start" />
|
||||
<span t-else="" t-field="reg.activity_id.date_start" />
|
||||
</td>
|
||||
<td id="activity_inherit_td">
|
||||
<span t-if="reg.activity_id.is_fullseason" t-field="season.date_end" />
|
||||
<span t-else="" t-field="reg.activity_id.date_stop" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="activity_inherit_total" />
|
||||
</tbody>
|
||||
</table>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
@ -18,7 +18,7 @@
|
||||
{
|
||||
'name': 'GOLEM Activity Session Member Registrations States',
|
||||
'summary': 'GOLEM Activities Session Member Registration states',
|
||||
'version': '10.0.1.0.0',
|
||||
'version': '10.0.1.0.1',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois',
|
||||
'license': 'AGPL-3',
|
||||
@ -27,6 +27,6 @@
|
||||
'depends': ['golem_activity_registration', 'golem_payment'],
|
||||
'data': ['views/golem_activity_registration_views.xml',
|
||||
'views/golem_member_views.xml', 'views/golem_activity_views.xml',
|
||||
'wizard/golem_activity_registration_invoicing.xml',
|
||||
'report/golem_member_report.xml']
|
||||
'wizard/golem_activity_registration_invoicing.xml']
|
||||
# 'report/golem_member_report.xml']
|
||||
}
|
||||
|
@ -18,13 +18,13 @@
|
||||
{
|
||||
'name': 'GOLEM base module for global dependencies',
|
||||
'summary': 'GOLEM base installs base and shared dependencies for GOLEM',
|
||||
'version': '10.0.1.0.0',
|
||||
'version': '10.0.1.0.1',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois',
|
||||
'license': 'AGPL-3',
|
||||
'application': False,
|
||||
'installable': True,
|
||||
'depends': ['membership', 'contacts', 'mail', 'account_voucher',
|
||||
'depends': ['report', 'membership', 'contacts', 'mail', 'account_voucher',
|
||||
'partner_firstname', 'partner_contact_birthdate',
|
||||
'partner_contact_gender',
|
||||
'l10n_fr', 'l10n_fr_state', 'l10n_fr_department',
|
||||
@ -33,5 +33,7 @@
|
||||
'web_widget_url_check',
|
||||
# 'web_one2many_kanban',
|
||||
'web_responsive'],
|
||||
'data': ['security/golem_security.xml', 'views/menus.xml']
|
||||
'data': ['security/golem_security.xml',
|
||||
'views/menus.xml',
|
||||
'views/yaltik_base_assets.xml']
|
||||
}
|
||||
|
6
golem_base/static/src/css/yaltik.css
Normal file
6
golem_base/static/src/css/yaltik.css
Normal file
@ -0,0 +1,6 @@
|
||||
.golem_report_title {
|
||||
text-align: center;
|
||||
padding: 0.4em 0 0.4em 0;
|
||||
border: 1px solid grey;
|
||||
background-color: #eeeeee;
|
||||
}
|
31
golem_base/views/yaltik_base_assets.xml
Normal file
31
golem_base/views/yaltik_base_assets.xml
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@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>
|
||||
|
||||
<template id="report_assets_common_inherit_golem_base"
|
||||
inherit_id="report.assets_common">
|
||||
<xpath expr="." position="inside">
|
||||
<link rel="stylesheet" type="text/css"
|
||||
href="/golem_base/static/src/css/yaltik.css" />
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
</odoo>
|
@ -1,6 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright 2016 Fabien Bourgeois <fabien@yaltik.com>
|
||||
# Copyright 2016-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
|
||||
@ -18,13 +18,16 @@
|
||||
{
|
||||
'name': 'GOLEM families',
|
||||
'summary': 'GOLEM Members Families',
|
||||
'version': '10.0.2.1.1',
|
||||
'version': '10.0.2.2.0',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois',
|
||||
'license': 'AGPL-3',
|
||||
'application': False,
|
||||
'installable': True,
|
||||
'depends': ['golem_member'],
|
||||
'data': ['security/ir.model.access.csv', 'views/golem_family_views.xml',
|
||||
'views/golem_member_views.xml', 'views/res_partner_views.xml']
|
||||
'data': ['security/ir.model.access.csv',
|
||||
'views/golem_family_views.xml',
|
||||
'views/golem_member_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'report/golem_member_card_templates.xml']
|
||||
}
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-01-29 14:59+0000\n"
|
||||
"PO-Revision-Date: 2018-01-29 14:59+0000\n"
|
||||
"POT-Creation-Date: 2018-03-18 09:24+0000\n"
|
||||
"PO-Revision-Date: 2018-03-18 09:24+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -26,6 +26,31 @@ msgstr "# de membres"
|
||||
msgid "0000000000"
|
||||
msgstr "0000000000"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>Address</strong> :"
|
||||
msgstr "<strong>Adresse</strong> :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>Country</strong> :"
|
||||
msgstr "<strong>Pays</strong> :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family
|
||||
msgid "<strong>Family :</strong>"
|
||||
msgstr "<strong>Famille :</strong>"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family
|
||||
msgid "<strong>Role :</strong>"
|
||||
msgstr "<strong>Role :</strong>"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>State</strong> :"
|
||||
msgstr "<strong>Région</strong> :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
@ -48,6 +73,7 @@ msgid "City"
|
||||
msgstr "Ville"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Communication"
|
||||
@ -71,6 +97,11 @@ msgstr "Nombre"
|
||||
msgid "Country"
|
||||
msgstr "Pays"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Country :"
|
||||
msgstr "Pays :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_create_uid
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_create_uid
|
||||
@ -83,6 +114,11 @@ msgstr "Créé par"
|
||||
msgid "Created on"
|
||||
msgstr "Créé le"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Details"
|
||||
msgstr "Détails"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_display_name
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_display_name
|
||||
@ -107,6 +143,7 @@ msgstr "Familles"
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_id
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_id
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_id
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Family"
|
||||
@ -159,6 +196,16 @@ msgstr "Liste des rôles familiaux"
|
||||
msgid "GOLEM Member"
|
||||
msgstr "Adhérent"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.actions.report.xml,name:golem_family.golem_family_report_html
|
||||
msgid "Golem family report [HTML]"
|
||||
msgstr "Cartes adhérents des membres [HTML]"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.actions.report.xml,name:golem_family.golem_family_report_pdf
|
||||
msgid "Golem family report [PDF]"
|
||||
msgstr "Cartes adhérents des membres [PDF]"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
|
||||
msgid "Group By"
|
||||
@ -188,6 +235,11 @@ msgstr "Dernière mise à jour par"
|
||||
msgid "Last Updated on"
|
||||
msgstr "Dernière mise à jour le"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Mail :"
|
||||
msgstr "Mail :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_member_ids
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_member_ids
|
||||
@ -204,6 +256,11 @@ msgstr "Adhérents"
|
||||
msgid "Mobile"
|
||||
msgstr "Mobile"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Mobile :"
|
||||
msgstr "Portable :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_name
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
@ -233,6 +290,11 @@ msgstr "Partenaire"
|
||||
msgid "Phone"
|
||||
msgstr "Téléphone"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Phone :"
|
||||
msgstr "Téléphone :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Please save new member before assigning a family."
|
||||
@ -296,6 +358,11 @@ msgstr "Complément de rue"
|
||||
msgid "Website"
|
||||
msgstr "Site Web"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Website :"
|
||||
msgstr "Site Web :"
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-01-29 09:03+0000\n"
|
||||
"PO-Revision-Date: 2018-01-29 09:03+0000\n"
|
||||
"POT-Creation-Date: 2018-03-18 09:23+0000\n"
|
||||
"PO-Revision-Date: 2018-03-18 09:23+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -26,6 +26,31 @@ msgstr ""
|
||||
msgid "0000000000"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>Address</strong> :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>Country</strong> :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family
|
||||
msgid "<strong>Family :</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_card_template_inherit_golem_family
|
||||
msgid "<strong>Role :</strong>"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "<strong>State</strong> :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
@ -48,6 +73,7 @@ msgid "City"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Communication"
|
||||
@ -55,6 +81,9 @@ msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_count
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_count
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_count
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_count
|
||||
msgid "Count"
|
||||
msgstr ""
|
||||
|
||||
@ -80,6 +109,11 @@ msgstr ""
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_display_name
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_role_display_name
|
||||
@ -102,26 +136,17 @@ msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_id
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_member
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_id
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_member
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_id
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_member
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_search_inherit_golem_membership
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Family"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_count
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_count
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_count
|
||||
msgid "Family Count"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: code:addons/golem_family/models/golem_family.py:49
|
||||
#: code:addons/golem_family/models/golem_family.py:84
|
||||
#: code:addons/golem_family/models/golem_family.py:48
|
||||
#: code:addons/golem_family/models/golem_family.py:82
|
||||
#, python-format
|
||||
msgid "Family Members"
|
||||
msgstr ""
|
||||
@ -133,7 +158,6 @@ msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Family members"
|
||||
msgstr ""
|
||||
|
||||
@ -167,6 +191,16 @@ msgstr ""
|
||||
msgid "GOLEM Member"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.actions.report.xml,name:golem_family.golem_family_report_html
|
||||
msgid "Golem family report [HTML]"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.actions.report.xml,name:golem_family.golem_family_report_pdf
|
||||
msgid "Golem family report [PDF]"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_search
|
||||
msgid "Group By"
|
||||
@ -196,8 +230,14 @@ msgstr ""
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Mail :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_member_ids
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_member_family_member_ids
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_partner_family_member_ids
|
||||
#: model:ir.model.fields,field_description:golem_family.field_res_users_family_member_ids
|
||||
msgid "Members"
|
||||
@ -211,6 +251,11 @@ msgstr ""
|
||||
msgid "Mobile"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Mobile :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.model.fields,field_description:golem_family.field_golem_family_name
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
@ -240,6 +285,16 @@ msgstr ""
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Phone :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
msgid "Please save new member before assigning a family."
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
msgid "Put an internal note..."
|
||||
@ -298,6 +353,11 @@ msgstr ""
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_card_template
|
||||
msgid "Website :"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_family
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_family_form
|
||||
#: model:ir.ui.view,arch_db:golem_family.golem_member_form_inherit_golem_family
|
||||
|
108
golem_family/report/golem_member_card_templates.xml
Normal file
108
golem_family/report/golem_member_card_templates.xml
Normal file
@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@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>
|
||||
|
||||
<report id="golem_family_report_pdf" model="golem.family"
|
||||
string="Golem family report [PDF]" report_type="qweb-pdf"
|
||||
name="golem_family.golem_family_card_template"
|
||||
file="golem_family.golem_family_card_template"
|
||||
attachment="(object.name + '.pdf')" />
|
||||
<report id="golem_family_report_html" model="golem.family"
|
||||
string="Golem family report [HTML]" report_type="qweb-html"
|
||||
name="golem_family.golem_family_card_template"
|
||||
file="golem_family.golem_family_card_template"
|
||||
attachment="(object.name + '.html')" />
|
||||
|
||||
<template id="golem_family_card_template">
|
||||
<t t-call="report.html_container">
|
||||
<t t-call="report.external_layout">
|
||||
<div class="page">
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<div class="oe_structure"/>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<h2 class="golem_report_title">
|
||||
Family <span t-field="o.name" />
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<h3>Details</h3>
|
||||
<t if="o.city">
|
||||
<address>
|
||||
<strong>Address</strong> :
|
||||
<span t-field="o.street" /><br />
|
||||
<t t-if="o.street2">
|
||||
<span t-field="o.street2" /><br />
|
||||
</t>
|
||||
<span t-field="o.zip" />
|
||||
<span t-field="o.city" /><br />
|
||||
</address>
|
||||
</t>
|
||||
<t t-if="o.state_id">
|
||||
<strong>State</strong> :
|
||||
<span t-field="o.state_id" /><br />
|
||||
</t>
|
||||
<t t-if="o.country_id">
|
||||
<strong>Country</strong> :
|
||||
<span t-field="o.country_id" />
|
||||
</t>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<h3>Communication</h3>
|
||||
<t t-if="o.phone">
|
||||
Phone : <span t-field="o.phone" /><br />
|
||||
</t>
|
||||
<t t-if="o.mobile">
|
||||
Mobile : <span t-field="o.mobile" /><br />
|
||||
</t>
|
||||
<t t-if="o.email">
|
||||
Mail : <span t-field="o.email" /><br />
|
||||
</t>
|
||||
<t t-if="o.website">
|
||||
Website : <span t-field="o.website" /><br />
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</div>
|
||||
<t t-foreach="docs" t-as="o">
|
||||
<t t-foreach="o.member_ids" t-as="i" >
|
||||
<t t-call="golem_member.golem_member_card_template" >
|
||||
<t t-set="docs" t-value="i.member_id" />
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
<template id="golem_member_card_template_inherit_golem_family"
|
||||
inherit_id="golem_member.golem_member_card_template">
|
||||
<xpath expr="//div[@id='season_info']" position="before">
|
||||
<div class="col-xs-12 text-right" id="family_info" t-if="member.family_id">
|
||||
<strong>Family </strong> <span t-field="member.family_id.name" />
|
||||
<t t-if="member.family_role">(<em t-field="member.family_role.name" />)</t>
|
||||
</div>
|
||||
</xpath>
|
||||
</template>
|
||||
|
||||
|
||||
</odoo>
|
@ -19,7 +19,7 @@
|
||||
{
|
||||
'name': 'GOLEM non-profit members',
|
||||
'summary': 'Extends Odoo contacts for MJC',
|
||||
'version': '10.0.1.1.2',
|
||||
'version': '10.0.1.1.4',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois, Michel Dessenne',
|
||||
'license': 'AGPL-3',
|
||||
@ -30,7 +30,7 @@
|
||||
'data': ['views/golem_member_views.xml',
|
||||
'views/res_partner_views.xml',
|
||||
'views/golem_member_numberconfig_views.xml',
|
||||
'views/report_golem_member.xml',
|
||||
'report/golem_member_card_templates.xml',
|
||||
'data/golem_member_numberconfig_data.xml',
|
||||
'security/ir.model.access.csv']
|
||||
}
|
||||
|
66
golem_member/report/golem_member_card_templates.xml
Normal file
66
golem_member/report/golem_member_card_templates.xml
Normal file
@ -0,0 +1,66 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@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>
|
||||
|
||||
<report id="golem_member_report_pdf" model="golem.member"
|
||||
string="Golem member report [PDF]" report_type="qweb-pdf"
|
||||
name="golem_member.golem_member_card_template"
|
||||
file="golem_member.golem_member_card_template"
|
||||
attachment="(object.name + '.pdf')" />
|
||||
<report id="golem_member_report_html" model="golem.member"
|
||||
string="Golem member report [HTML]" report_type="qweb-html"
|
||||
name="golem_member.golem_member_card_template"
|
||||
file="golem_member.golem_member_card_template"
|
||||
attachment="(object.name + '.html')" />
|
||||
|
||||
<template id="golem_member_card_template">
|
||||
<t t-call="report.html_container">
|
||||
<t t-set="season" t-value="docs._default_season()" />
|
||||
<t t-foreach="docs" t-as="member" id="foreach_member">
|
||||
<t t-call="report.external_layout">
|
||||
<div id='page_report_member' class="page">
|
||||
<div class="row">
|
||||
<div class="col-xs-12" id="member_title">
|
||||
<h2 class="golem_report_title">
|
||||
<span t-field="member.name" />
|
||||
<small>(num. <span t-field="member.number" />)</small>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-xs-12" id="season_info">
|
||||
<h3 class="text-right" style="margin-top: 0;">
|
||||
Season :
|
||||
<span t-field="season.name" />
|
||||
<t t-if="season.date_start">
|
||||
<small>Period :
|
||||
<span t-field="season.date_start" /> -
|
||||
<span t-field="season.date_end" />
|
||||
</small>
|
||||
</t>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
@ -1,114 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@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>
|
||||
|
||||
<report id="golem_member_report_pdf" model="golem.member"
|
||||
string="Golem member report [PDF]" report_type="qweb-pdf"
|
||||
name="golem_member.golem_member_card_template"
|
||||
file="golem_member.golem_member_card_template"
|
||||
attachment="(object.name + '.pdf')" />
|
||||
<report id="golem_member_report_html" model="golem.member"
|
||||
string="Golem member report [HTML]" report_type="qweb-html"
|
||||
name="golem_member.golem_member_card_template"
|
||||
file="golem_member.golem_member_card_template"
|
||||
attachment="(object.name + '.html')" />
|
||||
|
||||
<template id="golem_member_card_template">
|
||||
<t t-call="report.html_container">
|
||||
<t t-set="season" t-value="docs._default_season()" />
|
||||
<t t-foreach="docs" t-as="member" id="foreach_member">
|
||||
<t t-call="report.external_layout">
|
||||
<div id='page_report_member' class="page">
|
||||
<div class="row">
|
||||
<div class="col-xs-6">
|
||||
<h2>
|
||||
<span t-field="member.name" />
|
||||
<small>(num. <span t-field="member.number" />)</small>
|
||||
</h2>
|
||||
</div>
|
||||
<div class="col-xs-6">
|
||||
<h3>
|
||||
Season :
|
||||
<span t-field="season.name" />
|
||||
<t t-if="season.date_start">
|
||||
<br />
|
||||
<small>Period :
|
||||
<span t-field="season.date_start" /> -
|
||||
<span t-field="season.date_end" />
|
||||
</small>
|
||||
</t>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
<h3>Activities</h3>
|
||||
<table id="table_activity_ref" class="table table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
<th>Type</th>
|
||||
<th>Animator</th>
|
||||
<th>Day</th>
|
||||
<th>Hour start</th>
|
||||
<th>Hour stop</th>
|
||||
<th>Date start</th>
|
||||
<th id="activity_inherit_th">Date stop</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr id="activity_inherit_price_sum"
|
||||
t-foreach="member.activity_registration_ids" t-as="reg">
|
||||
<td class="col-xs-2">
|
||||
<span t-esc="reg.activity_id.name" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-esc="reg.activity_id.type_id.name" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-field="reg.activity_id.animator_id" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-field="reg.activity_id.weekday" />
|
||||
</td>
|
||||
<td class="col-xs-1">
|
||||
<t t-esc="'%02d:%02d' % (int(reg.activity_id.hour_start), round(reg.activity_id.hour_start % 1 * 60))" />
|
||||
</td>
|
||||
<td class="col-xs-1">
|
||||
<t t-esc="'%02d:%02d' % (int(reg.activity_id.hour_stop), round(reg.activity_id.hour_stop % 1 * 60))" />
|
||||
</td>
|
||||
<td class="col-xs-2">
|
||||
<span t-if="reg.activity_id.is_fullseason" t-field="season.date_start" />
|
||||
<span t-else="" t-field="reg.activity_id.date_start" />
|
||||
</td>
|
||||
<td id="activity_inherit_td">
|
||||
<span t-if="reg.activity_id.is_fullseason" t-field="season.date_end" />
|
||||
<span t-else="" t-field="reg.activity_id.date_stop" />
|
||||
</td>
|
||||
</tr>
|
||||
<tr id="activity_inherit_total"></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
</template>
|
||||
|
||||
</odoo>
|
@ -18,7 +18,7 @@
|
||||
{
|
||||
'name': 'GOLEM non-profit membership handling',
|
||||
'summary': 'Extends Odoo membership',
|
||||
'version': '10.0.1.1.1',
|
||||
'version': '10.0.1.1.2',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Fabien Bourgeois, Michel Dessenne',
|
||||
'license': 'AGPL-3',
|
||||
@ -27,5 +27,5 @@
|
||||
'depends': ['golem_member', 'account', 'decimal_precision'],
|
||||
'data': ['views/golem_membership_invoice.xml',
|
||||
'views/golem_member_view.xml',
|
||||
'views/report_golem_member.xml']
|
||||
'report/golem_member_card_template.xml']
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<!--
|
||||
Copyright 2017 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Fabien Bourgeois <fabien@yaltik.com>
|
||||
Copyright 2018 Michel Dessenne <michel@yaltik.com>
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
@ -20,13 +20,13 @@
|
||||
'name': 'GOLEM non-profit resources',
|
||||
'summary': 'GOLEM resources management',
|
||||
'description': ''' GOLEM resources management ''',
|
||||
'version': '10.0.1.9.1',
|
||||
'version': '10.0.1.10.0',
|
||||
'category': 'GOLEM',
|
||||
'author': 'Youssef El Ouahby, Fabien Bourgeois',
|
||||
'license': 'AGPL-3',
|
||||
'application': True,
|
||||
'installable': True,
|
||||
'depends': ['product'],
|
||||
'depends': ['golem_base', 'product'],
|
||||
'data': ['views/golem_resource_views.xml',
|
||||
'views/golem_resource_type_views.xml',
|
||||
'views/golem_resource_reservation_views.xml',
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-10 07:13+0000\n"
|
||||
"PO-Revision-Date: 2018-03-10 07:13+0000\n"
|
||||
"POT-Creation-Date: 2018-03-17 08:07+0000\n"
|
||||
"PO-Revision-Date: 2018-03-17 08:07+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -31,6 +31,11 @@ msgstr "Un article générique peut être lié, dans l'objectif de monétiser de
|
||||
msgid "Active"
|
||||
msgstr "Actif"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_timetable_availibility_24
|
||||
msgid "All day"
|
||||
msgstr "Toute la journée"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_view_search
|
||||
msgid "Archived"
|
||||
@ -108,26 +113,16 @@ msgstr "Créé par"
|
||||
msgid "Created on"
|
||||
msgstr "Créé le"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date
|
||||
msgid "Date"
|
||||
msgstr "Date"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start
|
||||
msgid "Date start"
|
||||
msgstr "Date de début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop
|
||||
msgid "Date stop"
|
||||
msgstr "Date de fin"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_reservation_view_search
|
||||
msgid "Day"
|
||||
msgstr "Jour"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_day_start
|
||||
msgid "Day start"
|
||||
msgstr "Jour de début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_display_name
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_display_name
|
||||
@ -149,8 +144,7 @@ msgid "End availibility should be after than start availibility"
|
||||
msgstr "La fin de disponibilité ne peut pas être après le début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:110
|
||||
#: code:addons/golem_resource/models/golem_resource_timetable.py:55
|
||||
#: code:addons/golem_resource/models/golem_resource_timetable.py:70
|
||||
#, python-format
|
||||
msgid "End time should be after than start time"
|
||||
msgstr "L'heure de fin ne peut pas être après l'heure de début"
|
||||
@ -182,6 +176,11 @@ msgstr "GOLEM Resource Type"
|
||||
msgid "Golem Timetable"
|
||||
msgstr "Golem Timetable"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start
|
||||
msgid "Hour start"
|
||||
msgstr "Heure de début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_id
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_id
|
||||
@ -253,28 +252,28 @@ msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:200
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:222
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is already taken during this period : from {} to {} this day, please choose another périod before confirming."
|
||||
msgstr "Interdit : la ressource est déjà réservée durant cette période : de {} à {} ce jour, merci de choisir une autre période avant de confirmer."
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:182
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:201
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available during this period, please choose another time before confirming."
|
||||
msgstr "Interdit : la ressource n'est pas disponible durant cette période, merci de choisir d'autres horaires avant de confirmer à nouveau."
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:167
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:159
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available in this period, please choose another périod before confirming"
|
||||
msgstr "Interdit : la ressource n'est pas disponible durant cette période, merci de choisir d'autres dates avant de confirmer à nouveau."
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:187
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:208
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available this day. Please choose another date."
|
||||
msgstr "Interdit : la ressource n'est pas disponible ce jour de la semaine. Merci de choisir un autre jour."
|
||||
msgid "Not allowed, the resource is not available this day : {}. Please choose another date."
|
||||
msgstr "Interdit : la ressource n'est pas disponible ce jour : {}. Merci de choisir un autre jour."
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_note
|
||||
@ -298,7 +297,7 @@ msgid "Partner"
|
||||
msgstr "Partenaire"
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:142
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:134
|
||||
#, python-format
|
||||
msgid "Please enter the rejection reason"
|
||||
msgstr "Merci de saisir le motif du refus"
|
||||
@ -378,7 +377,7 @@ msgid "Resource Reservation list"
|
||||
msgstr "Liste des réservations"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4023
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4449
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_name
|
||||
msgid "Resource Type"
|
||||
msgstr "Type de ressource"
|
||||
@ -419,7 +418,11 @@ msgid "Start"
|
||||
msgstr "Début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start
|
||||
msgid "Start date"
|
||||
msgstr "Date de début"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree
|
||||
msgid "Start hour"
|
||||
msgstr "Heure de début"
|
||||
@ -436,7 +439,17 @@ msgid "Stop"
|
||||
msgstr "Fin"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_stop
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop
|
||||
msgid "Stop date"
|
||||
msgstr "Jour de fin"
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:102
|
||||
#, python-format
|
||||
msgid "Stop date should be after start date"
|
||||
msgstr "Stop date should be after start date"
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree
|
||||
msgid "Stop hour"
|
||||
msgstr "Heure de fin"
|
||||
@ -517,7 +530,7 @@ msgid "Without validation"
|
||||
msgstr "Sans validation"
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:156
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:148
|
||||
#, python-format
|
||||
msgid "You do not have permissions to validate or reject a reservation."
|
||||
msgstr "Vous n'avez pas les autorisations nécessaires pour valider ou rejeter une réservation."
|
||||
|
@ -6,8 +6,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 10.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-03-10 07:12+0000\n"
|
||||
"PO-Revision-Date: 2018-03-10 07:12+0000\n"
|
||||
"POT-Creation-Date: 2018-03-17 08:07+0000\n"
|
||||
"PO-Revision-Date: 2018-03-17 08:07+0000\n"
|
||||
"Last-Translator: <>\n"
|
||||
"Language-Team: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -31,6 +31,11 @@ msgstr ""
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_timetable_availibility_24
|
||||
msgid "All day"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_view_search
|
||||
msgid "Archived"
|
||||
@ -108,26 +113,16 @@ msgstr ""
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start
|
||||
msgid "Date start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop
|
||||
msgid "Date stop"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_reservation_view_search
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_day_start
|
||||
msgid "Day start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_display_name
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_display_name
|
||||
@ -149,8 +144,7 @@ msgid "End availibility should be after than start availibility"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:110
|
||||
#: code:addons/golem_resource/models/golem_resource_timetable.py:55
|
||||
#: code:addons/golem_resource/models/golem_resource_timetable.py:70
|
||||
#, python-format
|
||||
msgid "End time should be after than start time"
|
||||
msgstr ""
|
||||
@ -182,6 +176,11 @@ msgstr ""
|
||||
msgid "Golem Timetable"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start
|
||||
msgid "Hour start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_reservation_rejection_wizard_id
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_id
|
||||
@ -253,27 +252,27 @@ msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:200
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:222
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is already taken during this period : from {} to {} this day, please choose another périod before confirming."
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:182
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:201
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available during this period, please choose another time before confirming."
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:167
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:159
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available in this period, please choose another périod before confirming"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:187
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:208
|
||||
#, python-format
|
||||
msgid "Not allowed, the resource is not available this day. Please choose another date."
|
||||
msgid "Not allowed, the resource is not available this day : {}. Please choose another date."
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
@ -298,7 +297,7 @@ msgid "Partner"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:142
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:134
|
||||
#, python-format
|
||||
msgid "Please enter the rejection reason"
|
||||
msgstr ""
|
||||
@ -378,7 +377,7 @@ msgid "Resource Reservation list"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4023
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_id_4449
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_type_name
|
||||
msgid "Resource Type"
|
||||
msgstr ""
|
||||
@ -419,7 +418,11 @@ msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_start
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_start
|
||||
msgid "Start date"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree
|
||||
msgid "Start hour"
|
||||
msgstr ""
|
||||
@ -436,7 +439,17 @@ msgid "Stop"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_hour_stop
|
||||
#: model:ir.model.fields,field_description:golem_resource.field_golem_resource_reservation_date_stop
|
||||
msgid "Stop date"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:102
|
||||
#, python-format
|
||||
msgid "Stop date should be after start date"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: model:ir.ui.view,arch_db:golem_resource.golem_resource_timetable_view_tree
|
||||
msgid "Stop hour"
|
||||
msgstr ""
|
||||
@ -517,7 +530,7 @@ msgid "Without validation"
|
||||
msgstr ""
|
||||
|
||||
#. module: golem_resource
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:156
|
||||
#: code:addons/golem_resource/models/golem_resource_reservation.py:148
|
||||
#, python-format
|
||||
msgid "You do not have permissions to validate or reject a reservation."
|
||||
msgstr ""
|
||||
|
@ -19,6 +19,7 @@
|
||||
""" GOLEM Resource Reservation """
|
||||
|
||||
from math import modf
|
||||
from datetime import timedelta
|
||||
from odoo import models, fields, api, _
|
||||
from odoo.exceptions import ValidationError
|
||||
|
||||
@ -28,19 +29,18 @@ class GolemResourceReservation(models.Model):
|
||||
_name = 'golem.resource.reservation'
|
||||
_description = 'GOLEM Reservation Model'
|
||||
_inherit = 'mail.thread'
|
||||
_order = 'date desc,hour_start asc'
|
||||
_order = 'day_start desc, hour_start asc'
|
||||
|
||||
name = fields.Char(compute='_compute_name', store=True)
|
||||
# TODO: handle multiple days reservation
|
||||
date = fields.Date(required=True, index=True, readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
hour_start = fields.Float('Start hour', required=True, readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
hour_stop = fields.Float('Stop hour', required=True, readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
date_start = fields.Datetime(compute='_compute_date_start', store=True, index=True)
|
||||
date_stop = fields.Datetime(compute='_compute_date_stop', store=True, index=True)
|
||||
|
||||
date_start = fields.Datetime('Start date', required=True,
|
||||
index=True, readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
date_stop = fields.Datetime('Stop date', required=True,
|
||||
index=True, readonly=True,
|
||||
states={'draft': [('readonly', False)]})
|
||||
day_start = fields.Date(compute='_compute_day_hour_start', store=True)
|
||||
hour_start = fields.Float(compute='_compute_day_hour_start', store=True)
|
||||
resource_id = fields.Many2one('golem.resource', required=True, index=True,
|
||||
string='Resource', readonly=True,
|
||||
track_visibility='onchange',
|
||||
@ -68,46 +68,38 @@ class GolemResourceReservation(models.Model):
|
||||
|
||||
rejection_reason = fields.Text(readonly=True, track_visibility='onchange')
|
||||
|
||||
@api.depends('resource_id', 'date')
|
||||
@api.depends('resource_id', 'date_start')
|
||||
def _compute_name(self):
|
||||
""" Computes reservation name """
|
||||
for reservation in self:
|
||||
reservation.name = u'{}/{}'.format(reservation.resource_id.name,
|
||||
reservation.date)
|
||||
reservation.date_start)
|
||||
|
||||
@api.depends('date', 'hour_start')
|
||||
def _compute_date_start(self):
|
||||
""" Computes Date start """
|
||||
@api.depends('date_start')
|
||||
def _compute_day_hour_start(self):
|
||||
""" Computes Day and Hour Start : for better sorting """
|
||||
for reservation in self:
|
||||
minute_start, hour_start = modf(reservation.hour_start)
|
||||
hour_start = int(hour_start)
|
||||
minute_start = int(round(minute_start * 60))
|
||||
reservation.date_start = u'{} {}:{}:00'.format(reservation.date,
|
||||
hour_start, minute_start)
|
||||
if reservation.date_start:
|
||||
date_start = fields.Datetime.from_string(reservation.date_start)
|
||||
reservation.day_start = date_start.date().isoformat()
|
||||
reservation.hour_start = date_start.hour + date_start.minute / 60.0
|
||||
|
||||
@api.depends('date', 'hour_stop')
|
||||
def _compute_date_stop(self):
|
||||
""" Computes Date stop """
|
||||
for reservation in self:
|
||||
minute_stop, hour_stop = modf(reservation.hour_stop)
|
||||
hour_stop = int(hour_stop)
|
||||
minute_stop = int(round(minute_stop * 60))
|
||||
reservation.date_stop = u'{} {}:{}:00'.format(reservation.date,
|
||||
hour_stop, minute_stop)
|
||||
|
||||
@api.onchange('hour_start')
|
||||
def onchange_hour_start(self):
|
||||
@api.onchange('date_start')
|
||||
def onchange_date_start(self):
|
||||
""" Propose automatically stop hour after start hour had been filled """
|
||||
for reservation in self:
|
||||
if reservation.hour_start and not reservation.hour_stop:
|
||||
reservation.hour_stop = reservation.hour_start + 1
|
||||
if reservation.date_start:
|
||||
start = fields.Datetime.from_string(reservation.date_start)
|
||||
duration = timedelta(hours=1)
|
||||
reservation.date_stop = start + duration
|
||||
|
||||
@api.constrains('hour_start', 'hour_stop')
|
||||
def _check_hour_consistency(self):
|
||||
""" Checks hour consistency """
|
||||
|
||||
@api.constrains('date_start', 'date_stop')
|
||||
def _check_date_consistency(self):
|
||||
""" Checks date consistency """
|
||||
for reservation in self:
|
||||
if reservation.hour_stop <= reservation.hour_start:
|
||||
raise ValidationError(_('End time should be after than start time'))
|
||||
if reservation.date_stop <= reservation.date_start:
|
||||
raise ValidationError(_('Stop date should be after start date'))
|
||||
|
||||
@api.multi
|
||||
def state_draft(self):
|
||||
@ -162,8 +154,8 @@ class GolemResourceReservation(models.Model):
|
||||
for reservation in self:
|
||||
if reservation.state == 'confirmed':
|
||||
# Check is reservation is not taking place out of the resource avaibility period
|
||||
if reservation.date < reservation.resource_id.avaibility_start or \
|
||||
reservation.date > reservation.resource_id.avaibility_stop:
|
||||
if reservation.date_start < reservation.resource_id.avaibility_start or \
|
||||
reservation.date_stop > reservation.resource_id.avaibility_stop:
|
||||
verr = _('Not allowed, the resource is not available in '
|
||||
'this period, please choose another périod before '
|
||||
'confirming')
|
||||
@ -171,32 +163,62 @@ class GolemResourceReservation(models.Model):
|
||||
#check if the resource hasn't a total availibility
|
||||
if not reservation.resource_id.availibility_24_7:
|
||||
# Check if reservation is not taking place out the avaibility timetables
|
||||
is_day_allowed = False
|
||||
for timetable in reservation.resource_id.timetable_ids:
|
||||
# Check for the time according to resource timetable avaibility
|
||||
date = fields.Datetime.from_string(reservation.date)
|
||||
if int(timetable.weekday) == date.weekday():
|
||||
is_day_allowed = True
|
||||
if reservation.hour_start < timetable.time_start or \
|
||||
reservation.hour_stop > timetable.time_stop:
|
||||
verr = _('Not allowed, the resource is not available '
|
||||
'during this period, please choose another '
|
||||
'time before confirming.')
|
||||
raise ValidationError(verr)
|
||||
if not is_day_allowed:
|
||||
verr = _('Not allowed, the resource is not available '
|
||||
'this day. Please choose another date.')
|
||||
raise ValidationError(verr)
|
||||
date_start = fields.Datetime.from_string(reservation.date_start)
|
||||
date_stop = fields.Datetime.from_string(reservation.date_stop)
|
||||
reservation_period = [date_start + timedelta(days=x) for x in range(
|
||||
(date_stop - date_start).days + 1)]
|
||||
for reservation_day in reservation_period:
|
||||
is_day_allowed = False
|
||||
for timetable in reservation.resource_id.timetable_ids:
|
||||
# Check for the time according to resource timetable avaibility
|
||||
#date = fields.Datetime.from_string(reservation_day)
|
||||
if int(timetable.weekday) == reservation_day.weekday():
|
||||
is_day_allowed = True
|
||||
#only check if the day hasn't a 24 availibility
|
||||
if not timetable.availibility_24:
|
||||
reservation_day_date = reservation_day.date()
|
||||
day_start = date_start.date()
|
||||
day_stop = date_stop.date()
|
||||
if reservation_day_date == day_start and \
|
||||
reservation_day_date == day_stop:
|
||||
hour_start = date_start.hour + date_start.minute / 60.0
|
||||
hour_stop = date_stop.hour + date_stop.minute / 60.0
|
||||
elif reservation_day_date == day_start:
|
||||
hour_start = date_start.hour + date_start.minute / 60.0
|
||||
hour_stop = 23.98 # Just before 23:59
|
||||
elif reservation_day_date == day_stop:
|
||||
hour_start = 0.0
|
||||
hour_stop = date_stop.hour + date_stop.minute / 60.0
|
||||
else:
|
||||
#if the day is not a start nor stop it
|
||||
#should be covered on all day
|
||||
#strange, as availibility_24 is not True
|
||||
hour_start = 0.0
|
||||
hour_stop = 23.98
|
||||
|
||||
if is_day_allowed and (hour_start < timetable.time_start or \
|
||||
hour_stop > timetable.time_stop):
|
||||
verr = _('Not allowed, the resource is not available '
|
||||
'during this period, please choose another '
|
||||
'time before confirming.')
|
||||
raise ValidationError(verr)
|
||||
if not is_day_allowed:
|
||||
verr = _('Not allowed, the resource is not available '
|
||||
'this day : {}. Please choose another '
|
||||
'date.'.format(reservation_day.strftime('%A')))
|
||||
raise ValidationError(verr)
|
||||
# Check if the resource is already taken during this period
|
||||
# PERF : check the date, not iterate over all reservations
|
||||
# PERF : check for res that can be in conflict,
|
||||
# do not iterate over all reservations
|
||||
domain = [('resource_id', '=', reservation.resource_id.id),
|
||||
('date', '=', reservation.date),
|
||||
('date_start', '<=', reservation.date_stop),
|
||||
('date_stop', '>=', reservation.date_start),
|
||||
('state', 'in', ('confirmed', 'validated')),
|
||||
('id', '!=', reservation.id)]
|
||||
reservations = self.env['golem.resource.reservation'].search(domain)
|
||||
for other_res in reservations:
|
||||
if (other_res.hour_start < reservation.hour_start < other_res.hour_stop) or \
|
||||
(other_res.hour_start < reservation.hour_stop < other_res.hour_stop):
|
||||
if (other_res.date_start < reservation.date_start < other_res.date_stop) or \
|
||||
(other_res.date_start < reservation.date_stop < other_res.date_stop):
|
||||
verr = _('Not allowed, the resource is already taken '
|
||||
'during this period : from {} to {} this day, '
|
||||
'please choose another périod before confirming.')
|
||||
|
@ -37,8 +37,16 @@ class GolemTimetable(models.Model):
|
||||
('4', _('Friday')),
|
||||
('5', _('Saturday')),
|
||||
('6', _('Sunday'))], required=True)
|
||||
time_start = fields.Float(required=True, string='Start')
|
||||
time_stop = fields.Float(required=True, string='Stop')
|
||||
time_start = fields.Float(string='Start')
|
||||
time_stop = fields.Float(string='Stop')
|
||||
availibility_24 = fields.Boolean(string="All day")
|
||||
|
||||
@api.onchange('availibility_24')
|
||||
def onchange_availibility_24(self):
|
||||
""" fill time_start et time_stop if availibility_24 is True """
|
||||
for line in self:
|
||||
if line.availibility_24:
|
||||
line.update({'time_start': 0.0, 'time_stop': 23.98})
|
||||
|
||||
@api.onchange('time_start')
|
||||
def onchange_time_start(self):
|
||||
@ -47,9 +55,23 @@ class GolemTimetable(models.Model):
|
||||
if line.time_start and not line.time_stop:
|
||||
line.time_stop = line.time_start + 1
|
||||
|
||||
@api.constrains('availibility_24')
|
||||
def check_avaibility24(self):
|
||||
""" Checks hour consistency against avaibility 24 """
|
||||
for line in self:
|
||||
if line.availibility_24:
|
||||
line.write({'time_start': 0.0, 'time_stop': 23.98})
|
||||
|
||||
@api.constrains('time_start', 'time_stop')
|
||||
def _check_time_consistency(self):
|
||||
""" Checks time consistency """
|
||||
for timetable in self:
|
||||
if timetable.time_stop <= timetable.time_start:
|
||||
for line in self:
|
||||
if line.time_stop <= line.time_start:
|
||||
raise ValidationError(_('End time should be after than start time'))
|
||||
|
||||
@api.constrains('time_start', 'time_stop')
|
||||
def _check_time_all_day(self):
|
||||
""" Checks time all day availibility """
|
||||
for timetable in self:
|
||||
if timetable.time_stop > 23.98 and timetable.time_start == 0:
|
||||
timetable.write({'availibility_24': True})
|
||||
|
@ -43,9 +43,21 @@ class TestGolemResourceReservation(TransactionCase):
|
||||
})
|
||||
|
||||
self.timetable_obj = self.env['golem.resource.timetable']
|
||||
|
||||
timetable_data = {'resource_id': self.resource.id, 'weekday': '0',
|
||||
'time_start': 8.0, 'time_stop': 12.0}
|
||||
timetable_data2 = {'resource_id': self.resource.id, 'weekday': '1',
|
||||
'availibility_24': True}
|
||||
timetable_data3 = {'resource_id': self.resource.id, 'weekday': '2',
|
||||
'time_start': 7.0, 'time_stop': 23.98}
|
||||
timetable_data4 = {'resource_id': self.resource.id, 'weekday': '3',
|
||||
'availibility_24': True}
|
||||
|
||||
self.timetable_obj.create(timetable_data)
|
||||
self.timetable_obj.create(timetable_data2)
|
||||
self.timetable_obj.create(timetable_data3)
|
||||
self.timetable_obj.create(timetable_data4)
|
||||
|
||||
timetable_data['resource_id'] = self.resource_val.id
|
||||
self.timetable_obj.create(timetable_data)
|
||||
|
||||
@ -55,9 +67,8 @@ class TestGolemResourceReservation(TransactionCase):
|
||||
|
||||
self.data = {
|
||||
'resource_id': self.resource.id,
|
||||
'date': '2018-02-05', # is monday
|
||||
'hour_start': 11.0,
|
||||
'hour_stop': 12.0,
|
||||
'date_start': '2018-02-05 11:00:00', # is monday
|
||||
'date_stop': '2018-02-05 12:00:00',
|
||||
'partner_id': self.partner.id
|
||||
}
|
||||
self.res_obj = self.env['golem.resource.reservation']
|
||||
@ -67,28 +78,26 @@ class TestGolemResourceReservation(TransactionCase):
|
||||
reservation = self.res_obj.create(self.data)
|
||||
self.assertEqual(reservation.partner_id, self.partner)
|
||||
self.assertEqual(reservation.user_id, self.env.user)
|
||||
self.assertEqual(reservation.hour_start, 11.0)
|
||||
self.assertEqual(reservation.hour_stop, 12.0)
|
||||
self.assertEqual(reservation.state, 'draft')
|
||||
self.assertFalse(reservation.rejection_reason)
|
||||
self.assertEqual(reservation.name, 'Resource/2018-02-05')
|
||||
self.assertEqual(reservation.date_start, '2018-02-05 11:00:00')
|
||||
self.assertEqual(reservation.date_stop, '2018-02-05 12:00:00')
|
||||
self.assertEqual(reservation.state, 'draft')
|
||||
self.assertFalse(reservation.rejection_reason)
|
||||
self.assertEqual(reservation.name, 'Resource/2018-02-05 11:00:00')
|
||||
self.assertEqual(reservation.resource_id, self.resource)
|
||||
self.assertEqual(len(reservation.resource_timetable_ids), 1)
|
||||
self.assertEqual(len(reservation.resource_timetable_ids), 4)
|
||||
self.assertEqual(reservation.resource_id.reservation_ids[0], reservation)
|
||||
|
||||
def test_reservation_hours(self):
|
||||
""" Test thats stop hour can not be after or equal start hour """
|
||||
self.data['hour_stop'] = 7.0
|
||||
""" Test thats stop date can not be after or equal start date """
|
||||
self.data['date_stop'] = '2018-02-05 10:00:00'
|
||||
with self.assertRaises(ValidationError):
|
||||
self.res_obj.create(self.data)
|
||||
with self.assertRaises(ValidationError):
|
||||
self.res_obj.create({
|
||||
'resource_id': self.resource.id, 'date': '2018-02-05',
|
||||
'hour_start': 12.0, 'hour_stop': 12.0,
|
||||
'partner_id': self.partner.id
|
||||
})
|
||||
'resource_id': self.resource.id,
|
||||
'date_start': '2018-02-05 11:00:00',
|
||||
'date_stop': '2018-02-05 11:00:00',
|
||||
'partner_id': self.partner.id})
|
||||
|
||||
def test_state_basic(self):
|
||||
""" Tests basic state methods """
|
||||
@ -114,6 +123,7 @@ class TestGolemResourceReservation(TransactionCase):
|
||||
reservation.state_confirm()
|
||||
self.assertEqual(reservation.state, 'validated')
|
||||
|
||||
|
||||
def test_state_rejected(self):
|
||||
""" Tests state rejected """
|
||||
self.data['resource_id'] = self.resource_val.id
|
||||
@ -141,55 +151,73 @@ class TestGolemResourceReservation(TransactionCase):
|
||||
self.env.user.groups_id = [(2, group_manager.id, False)]
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_validated()
|
||||
self.assertIn(u'autorisations nécessaires pour valider', err.exception.args[0])
|
||||
self.assertIn(u'do not have permissions to validate', err.exception.args[0])
|
||||
|
||||
def test_confirmed_period(self):
|
||||
""" Test allowed period """
|
||||
self.data['date'] = '2012-01-01' # Out of period
|
||||
self.data['date_start'] = '2012-02-05 11:00:00' # Out of period
|
||||
reservation = self.res_obj.create(self.data)
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_confirm()
|
||||
self.assertIn(u'pas disponible durant cette période', err.exception.args[0])
|
||||
self.assertIn(u'pas disponible durant cette période', err.exception.args[0])
|
||||
|
||||
def test_confirmed_allowed_day(self):
|
||||
""" Test allowed day """
|
||||
self.data['date'] = '2018-02-06' # Bad day
|
||||
self.data['date_start'] = '2018-02-04 11:00:00' # Bad day
|
||||
reservation = self.res_obj.create(self.data)
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_confirm()
|
||||
self.assertIn('pas disponible ce jour', err.exception.args[0])
|
||||
self.assertIn('not available this day', err.exception.args[0])
|
||||
|
||||
def test_multidays_reservation(self):
|
||||
""" Test multidays reservation """
|
||||
#two days allowed reservation
|
||||
self.data['date_start'] = '2018-02-07 14:00:00' # Wednesday : allowed FROM 7
|
||||
self.data['date_stop'] = '2018-02-08 11:00:00' # Thursday : allowed
|
||||
reservation = self.res_obj.create(self.data)
|
||||
reservation.state_confirm()
|
||||
self.assertEqual(reservation.state, 'validated')
|
||||
reservation.state_draft()
|
||||
#Two days allowed but one not allowed in the middle
|
||||
reservation.write({'date_start': '2018-02-06 14:00:00',
|
||||
'date_stop': '2018-02-08 11:00:00'})
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_confirm()
|
||||
self.assertIn('not available during this period', err.exception.args[0])
|
||||
|
||||
def test_confirmed_allowed_hours(self):
|
||||
""" Test allowed hours """
|
||||
self.data['hour_stop'] = 14.0 # Out of range stop hour
|
||||
self.data['date_stop'] = '2018-02-05 14:00:00' # Out of range stop hour
|
||||
reservation = self.res_obj.create(self.data)
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_confirm()
|
||||
self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0])
|
||||
self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0])
|
||||
# Out of range start hour
|
||||
reservation = self.res_obj.create({'resource_id': self.resource.id,
|
||||
'date': '2018-02-05',
|
||||
'hour_start': 5.0, # Out of range start hour
|
||||
'hour_stop': 12.0,
|
||||
'date_start': '2018-02-05 05:00:00',
|
||||
'date_stop': '2018-02-05 12:00:00',
|
||||
'partner_id': self.partner.id})
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation.state_confirm()
|
||||
self.assertIn(u'merci de choisir d\'autres horaires', err.exception.args[0])
|
||||
self.assertIn(u'the resource is not available during this period', err.exception.args[0])
|
||||
|
||||
def test_confirmed_other_res(self):
|
||||
""" Test if there are other reservations in conflict """
|
||||
reservation = self.res_obj.create(self.data)
|
||||
reservation.state_confirm()
|
||||
reservation2 = self.res_obj.create({
|
||||
'resource_id': self.resource.id, 'date': '2018-02-05',
|
||||
'hour_start': 10.0, 'hour_stop': 11.0, # OK, no conflict
|
||||
'resource_id': self.resource.id,
|
||||
'date_start': '2018-02-05 10:00:00',
|
||||
'date_stop': '2018-02-05 11:00:00',
|
||||
'partner_id': self.partner.id
|
||||
})
|
||||
})
|
||||
reservation2.state_confirm()
|
||||
reservation3 = self.res_obj.create({
|
||||
'resource_id': self.resource.id, 'date': '2018-02-05',
|
||||
'hour_start': 10.0, 'hour_stop': 10.5, # Conflict with 2nd res
|
||||
'resource_id': self.resource.id,
|
||||
'date_start': '2018-02-05 11:20:00',
|
||||
'date_stop': '2018-02-05 11:40:00',# Conflict with 2nd res
|
||||
'partner_id': self.partner.id
|
||||
})
|
||||
})
|
||||
with self.assertRaises(ValidationError) as err:
|
||||
reservation3.state_confirm()
|
||||
self.assertIn(u'déjà réservée durant cette période', err.exception.args[0])
|
||||
self.assertIn(u'the resource is already taken', err.exception.args[0])
|
||||
|
@ -46,6 +46,7 @@ class TestGolemResourceTimetable(TransactionCase):
|
||||
self.assertEqual(timetable.resource_id, self.resource)
|
||||
self.assertEqual(timetable.time_start, 8.0)
|
||||
self.assertEqual(timetable.time_stop, 10.0)
|
||||
self.assertFalse(timetable.availibility_24)
|
||||
self.assertEqual(timetable, self.resource.timetable_ids[0])
|
||||
|
||||
def test_timetable_times(self):
|
||||
|
@ -39,9 +39,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<field name="arch" type="xml">
|
||||
<tree>
|
||||
<field name="resource_id" />
|
||||
<field name="date" />
|
||||
<field name="hour_start" widget="float_time" />
|
||||
<field name="hour_stop" widget="float_time" />
|
||||
<field name="date_start" />
|
||||
<field name="date_stop" />
|
||||
<field name="partner_id" />
|
||||
<field name="state" />
|
||||
</tree>
|
||||
@ -82,9 +81,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
</group>
|
||||
<group string="Reservation">
|
||||
<group>
|
||||
<field name="date" />
|
||||
<field name="hour_start" widget="float_time" />
|
||||
<field name="hour_stop" widget="float_time" />
|
||||
<field name="date_start" />
|
||||
<field name="date_stop" />
|
||||
<field name="user_id" options="{'no_create': True}" />
|
||||
<field name="partner_id" />
|
||||
<field name="note"
|
||||
|
@ -18,7 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
-->
|
||||
<odoo>
|
||||
<data>
|
||||
|
||||
<!-- Trees -->
|
||||
<record model="ir.ui.view" id="golem_resource_timetable_view_tree">
|
||||
<field name="name">GOLEM Resource Timetable Tree</field>
|
||||
@ -27,11 +26,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
<tree editable="bottom">
|
||||
<field name="resource_id" invisible="1" />
|
||||
<field name="weekday" />
|
||||
<field name="time_start" string="Start hour" widget="float_time" />
|
||||
<field name="time_stop" string="Stop hour" widget="float_time" />
|
||||
<field name="availibility_24"/>
|
||||
<field name="time_start" string="Start hour" widget="float_time"
|
||||
required="1" />
|
||||
<field name="time_stop" string="Stop hour" widget="float_time"
|
||||
required="1" />
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</odoo>
|
||||
|
Loading…
Reference in New Issue
Block a user