Skip to content

Commit

Permalink
[IMP] event_registration_create_student: add force create student act…
Browse files Browse the repository at this point in the history
…ion (avanzosc#1245)
  • Loading branch information
leiremartinezdesantos committed Sep 14, 2021
1 parent 0b93a3b commit de73244
Show file tree
Hide file tree
Showing 5 changed files with 144 additions and 77 deletions.
24 changes: 18 additions & 6 deletions event_registration_create_student/i18n/es.po
Expand Up @@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-03 09:09+0000\n"
"PO-Revision-Date: 2021-09-03 09:09+0000\n"
"POT-Creation-Date: 2021-09-09 08:31+0000\n"
"PO-Revision-Date: 2021-09-09 08:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -49,6 +49,11 @@ msgstr "Evento"
msgid "Event Registration"
msgstr "Registro de eventos"

#. module: event_registration_create_student
#: model:ir.actions.server,name:event_registration_create_student.action_create_student_partner
msgid "Force student create"
msgstr "Forzar creación de alumno"

#. module: event_registration_create_student
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_event__generate_student_email_check
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_registration__generate_student_email_check
Expand Down Expand Up @@ -79,7 +84,9 @@ msgstr "Última modificación el"
msgid ""
"Notice that you are confirming an attendee that coincides with the Reserved"
" by partner email."
msgstr "Tenga en cuenta que está intentando confirmar un asistente cuyo email coincide con el email del Reservado por"
msgstr ""
"Tenga en cuenta que está intentando confirmar un asistente cuyo email "
"coincide con el email del Reservado por"

#. module: event_registration_create_student
#: model_terms:ir.ui.view,arch_db:event_registration_create_student.view_event_form
Expand All @@ -92,7 +99,9 @@ msgstr "Alumnos"
msgid ""
"The Reserved by is not the one attending the event. Creates new partner for "
"Student field."
msgstr "El Reservado por no es quien atenda al evento. Crea un nuevo contacto para el campo Alumno."
msgstr ""
"El Reservado por no es quien atenda al evento. Crea un nuevo contacto para "
"el campo Alumno."

#. module: event_registration_create_student
#: code:addons/event_registration_create_student/models/event_registration.py:0
Expand All @@ -104,12 +113,15 @@ msgstr "El Reservado Por no está especificado!"
#: code:addons/event_registration_create_student/models/event_registration.py:0
#, python-format
msgid "You must first fill the participant data! (Name, email...)"
msgstr "Primero debe rellenar la información del participante! (Nombre, email...)"
msgstr ""
"Primero debe rellenar la información del participante! (Nombre, email...)"

#. module: event_registration_create_student
#: code:addons/event_registration_create_student/models/event_registration.py:0
#, python-format
msgid ""
"You must set/generate an email for the attendee in order to create a portal "
"user!"
msgstr "Debe especificar/generar un email para el participante del evento para poder crear un Usuario Portal!"
msgstr ""
"Debe especificar/generar un email para el participante del evento para poder"
" crear un Usuario Portal!"
24 changes: 18 additions & 6 deletions event_registration_create_student/i18n/eu_ES.po
Expand Up @@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-03 09:10+0000\n"
"PO-Revision-Date: 2021-09-03 09:10+0000\n"
"POT-Creation-Date: 2021-09-09 08:31+0000\n"
"PO-Revision-Date: 2021-09-09 08:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -49,6 +49,11 @@ msgstr "Gertakizuna"
msgid "Event Registration"
msgstr "Ekitaldien erregistroa"

#. module: event_registration_create_student
#: model:ir.actions.server,name:event_registration_create_student.action_create_student_partner
msgid "Force student create"
msgstr "Ikaslea sortzera behartu"

#. module: event_registration_create_student
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_event__generate_student_email_check
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_registration__generate_student_email_check
Expand All @@ -59,7 +64,8 @@ msgstr "Sortu ikaslearen emaila"
#: model:ir.model.fields,help:event_registration_create_student.field_event_event__generate_student_email_check
#: model:ir.model.fields,help:event_registration_create_student.field_event_registration__generate_student_email_check
msgid "Generate the Student an email at confirm if not set."
msgstr "Sortu ikaslearentzako email bat konfirmatzerakoan, hau ezarrita ez badago."
msgstr ""
"Sortu ikaslearentzako email bat konfirmatzerakoan, hau ezarrita ez badago."

#. module: event_registration_create_student
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_event__id
Expand All @@ -79,7 +85,9 @@ msgstr "Azken aldaketa"
msgid ""
"Notice that you are confirming an attendee that coincides with the Reserved"
" by partner email."
msgstr "Kontuan izan Erreserba egilearen kontaktuaren emailalk eta partaidearen emailak berdinak direla"
msgstr ""
"Kontuan izan Erreserba egilearen kontaktuaren emailalk eta partaidearen "
"emailak berdinak direla"

#. module: event_registration_create_student
#: model_terms:ir.ui.view,arch_db:event_registration_create_student.view_event_form
Expand All @@ -92,7 +100,9 @@ msgstr "Ikasleak"
msgid ""
"The Reserved by is not the one attending the event. Creates new partner for "
"Student field."
msgstr "Erreserba egilea ez da ebentuaren partaidea. Kontaktu berri bat sortuko du ikaslearentzat."
msgstr ""
"Erreserba egilea ez da ebentuaren partaidea. Kontaktu berri bat sortuko du "
"ikaslearentzat."

#. module: event_registration_create_student
#: code:addons/event_registration_create_student/models/event_registration.py:0
Expand All @@ -112,4 +122,6 @@ msgstr "Partaidearen datuak bete behar dira! (Izena, emaila...)"
msgid ""
"You must set/generate an email for the attendee in order to create a portal "
"user!"
msgstr "Email bat ezarri/sortu behar duzu partaidearen erabiltzaile portala sortu ahal izateko!"
msgstr ""
"Email bat ezarri/sortu behar duzu partaidearen erabiltzaile portala sortu "
"ahal izateko!"
Expand Up @@ -6,8 +6,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 14.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-03 09:07+0000\n"
"PO-Revision-Date: 2021-09-03 09:07+0000\n"
"POT-Creation-Date: 2021-09-09 08:31+0000\n"
"PO-Revision-Date: 2021-09-09 08:31+0000\n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
Expand Down Expand Up @@ -49,6 +49,11 @@ msgstr ""
msgid "Event Registration"
msgstr ""

#. module: event_registration_create_student
#: model:ir.actions.server,name:event_registration_create_student.action_create_student_partner
msgid "Force student create"
msgstr ""

#. module: event_registration_create_student
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_event__generate_student_email_check
#: model:ir.model.fields,field_description:event_registration_create_student.field_event_registration__generate_student_email_check
Expand Down
154 changes: 91 additions & 63 deletions event_registration_create_student/models/event_registration.py
Expand Up @@ -35,85 +35,113 @@ def action_confirm(self):
result = super(EventRegistration, self).action_confirm()
if not self:
return result
self.create_registration_student()
return result

group_portal = self.env.ref('base.group_portal')
def create_registration_student(self):
# Action to create res.partner for student_id field
for registration in self:
student_user = None
# Only create student partner if student_id is None
if not registration.student_id:
if registration.create_student_check:
attendee_user = None
if not registration.partner_id:
raise ValidationError(
_("The ticket reserved by is not specified!"))

if not registration.name:
raise ValidationError(
_("You must first fill the participant data! "
"(Name, email...)"))
else:
# Check if user already exists with the set email field in
# event.registration
attendee_user = self.create_get_user({
'login': registration.email}, False)

reserved_by = registration.partner_id

if attendee_user and attendee_user.partner_id == reserved_by:
raise ValidationError(
_("Notice that you are confirming an attendee that "
"coincides with the Reserved by partner email."))

student_user = attendee_user
student_partner = attendee_user.partner_id if \
student_user else None

if not student_partner:
# Create res.partner for event.registration Student
student_partner = self.env['res.partner'].create({
'name': registration.name,
'email': registration.email,
'phone': registration.phone,
'mobile': registration.mobile,
'parent_id': reserved_by.id
})

else:
student_partner = registration.partner_id

registration.write({
'student_id': student_partner.id})
student_partner = registration.action_create_student_partner()

else:
student_partner = registration.student_id
student_user = student_partner.user_id

if student_partner and registration.generate_student_email_check \
and not student_partner.email:
# If event.registration email is not set, generate one
student_partner.write({
'email': registration.generate_user_email()})
registration.action_generate_student_email(student_partner)

if not student_user and registration.create_student_user_check:
if not student_partner.email:
if not registration.email:
raise ValidationError(
_("You must set/generate an email for the attendee"
" in order to create a portal user!"))
# If partner does not have an email, use the one from
# event.register
student_partner.write({'email': registration.email})

# If student partner does not have Portal User, create one
student_user = registration.create_get_user({
'name': registration.name,
'email': student_partner.email,
'login': student_partner.email,
'partner_id': student_partner.id,
'groups_id': [(4, group_portal.id)]
student_user = registration.action_create_student_user(
student_partner)

return True

def action_create_student_partner(self, force_create=False):
if not self.partner_id:
raise ValidationError(
_("The ticket reserved by is not specified!"))

booked_by = self.partner_id
if not force_create and not self.create_student_check:
# If check 'create_student_check' not clicked, set Booked by as
# student
student_partner = booked_by
else:
if not self.name:
raise ValidationError(
_("You must first fill the participant data! "
"(Name, email...)"))

if not force_create:
# Check if user already exists with the set email field in
# event.registration
attendee_user = self.create_get_user({
'login': self.email}, False)

if attendee_user and attendee_user.partner_id == booked_by:
raise ValidationError(
_("Notice that you are confirming an attendee that "
"coincides with the Reserved by partner email."))

student_user = attendee_user
student_partner = attendee_user.partner_id if \
student_user else None
else:
student_partner = None

if not student_partner:
# Create res.partner for event.registration Student
student_partner = self.env['res.partner'].create({
'name': self.name,
'email': self.email,
'phone': self.phone,
'mobile': self.mobile,
'parent_id': booked_by.id
})

return result
self.write({
'student_id': student_partner.id})
return student_partner

def action_create_student_user(self, student_partner=None):

if not student_partner:
if not self.student_id:
return None
student_partner = self.student_id

group_portal = self.env.ref('base.group_portal')
if not student_partner.email:
if not self.email:
raise ValidationError(
_("You must set/generate an email for the attendee"
" in order to create a portal user!"))
# If partner does not have an email, use the one from
# event.register
student_partner.write({'email': self.email})

# If student partner does not have Portal User, create one
student_user = self.create_get_user({
'name': self.name,
'email': student_partner.email,
'login': student_partner.email,
'partner_id': student_partner.id,
'groups_id': [(4, group_portal.id)]
})

return student_user

def action_generate_student_email(self, student_partner):
# If event.registration email is not set, generate one
student_email = self.generate_user_email()
student_partner.write({
'email': student_email})
self.write({
'email': student_email})

def create_get_user(self, vals, create=True):
login = vals.get('login')
Expand Down
10 changes: 10 additions & 0 deletions event_registration_create_student/views/event_view.xml
Expand Up @@ -16,4 +16,14 @@
</page>
</field>
</record>
<record id="action_create_student_partner" model="ir.actions.server">
<field name="name">Force student create</field>
<field name="model_id" ref="event.model_event_registration"/>
<field name="binding_model_id" ref="event.model_event_registration" />
<field name="state">code</field>
<field name="code">
for record in records:
record.action_create_student_partner(True)
</field>
</record>
</odoo>

0 comments on commit de73244

Please sign in to comment.