--- /dev/null
+# -*- coding: utf-8 -*-
+
+from osv import osv
+from osv import fields
+
+class CreateMember(osv.osv_memory):
+ _name = 'bikecoop.create.member.wizard'
+ _description = 'Wizard to create a new bikecoop member or update the membership'
+
+ _columns = {
+ 'member_ident': fields.char('Member identifier', size=64, help='Unique identifier for this member'),
+ 'membership_state': fields.char('Membership state', size=64),
+ 'membership_start': fields.date('Membership start date'),
+ 'membership_stop': fields.date('Membership end date'),
+ 'partner_id': fields.many2one('res.partner', 'Main partner', help='The partner to invoice in'),
+ 'street': fields.char('Street', size=128),
+ 'street2': fields.char('Street ...', size=128),
+ 'zip': fields.char('ZIP code', size=24),
+ 'city': fields.char('City', size=128),
+ 'country_id': fields.many2one('res.country', 'Country'),
+ 'birthdate': fields.date('Birthdate'),
+ 'gender_id': fields.many2one('bikecoop.partner.theme', 'Gender', domain=[('domain', '=', 'gender')]),
+ 'occupation_id': fields.many2one('bikecoop.partner.theme', 'Main occupation', domain=[('domain', '=', 'occupation')]),
+ 'nationality_id': fields.many2one('res.country', 'Nationality'),
+ 'volunteer_com': fields.boolean('Communication workgroup', help='Check this box if you want to be volunteer for communication subjects'),
+ 'volunteer_anim': fields.boolean('Animation workgroup', help='Check this box if you want to be volunteer for animation subjects'),
+ 'volunteer_admin': fields.boolean('Adminstration workgroup', help='Check this box if you want to be volunteer for administration subjects'),
+ 'volunteer_workshop': fields.boolean('Workshop workgroup', help='Check this box if you want to be volunteer for bike workshop subjects'),
+ 'associate_members': fields.one2many('res.partner', 'associate_member', 'Associate members', help='Partners to associate to main partner for this membership.'),
+ 'comment': fields.text('Others volunteer activities', help='If you want being volunteer in other workshop activities that are not mentionned behind.'),
+ }
+
+ def onchange_partner_id(self, cr, uid, ids, partner_id, context=None):
+ """
+ Found already associates members of the partner who is selected in the
+ wizard and load default address datas
+ #TODO
+ - Update volunters activities
+ """
+ if not partner_id:
+ res = {
+ 'member_ident': False,
+ 'membership_state': False,
+ 'membership_start': False,
+ 'membership_stop': False,
+ 'street': False,
+ 'street2': False,
+ 'zip': False,
+ 'city': False,
+ 'country_id': False,
+ 'birthdate': False,
+ 'gender_id': False,
+ 'occupation_id': False,
+ 'nationality_id': False,
+ 'volunteer_com': False,
+ 'comment': False,
+ 'associate_members': False,
+ }
+ return {'value': res}
+
+ part_obj = self.pool.get('res.partner')
+ address_obj = self.pool.get('res.partner.address')
+
+ partner_fields_name = [
+ 'member_ident',
+ 'membership_state',
+ 'membership_start',
+ 'membership_stop',
+ 'date',
+ 'gender_id',
+ 'occupation_id',
+ 'nationality_id',
+ 'volunteer_ids',
+ 'comment',
+ ]
+ part = part_obj.read(cr, uid, partner_id, partner_fields_name, context=context)
+
+ address_data = part_obj.address_get(cr, uid, [partner_id], ['default'])
+ address_fields_name = [
+ 'street',
+ 'street2',
+ 'zip',
+ 'city',
+ 'country_id'
+ ]
+ if address_data['default']:
+ address = address_obj.read(cr, uid, address_data['default'], address_fields_name, context=context)
+
+ associate_members_ids = part_obj.browse(cr, uid, partner_id, context=context).associate_members
+ associate_members = []
+ for i in associate_members_ids:
+ associate_members.append(i.id)
+
+ res = {
+ 'member_ident': part['member_ident'],
+ 'membership_state': part['membership_state'],
+ 'membership_start': part['membership_start'],
+ 'membership_stop': part['membership_stop'],
+ 'street': address['street'],
+ 'street2': address['street2'],
+ 'zip': address['zip'],
+ 'city': address['city'],
+ 'country_id': address['country_id'],
+ 'birthdate': part['date'],
+ 'gender_id': part['gender_id'],
+ 'occupation_id': part['occupation_id'],
+ 'nationality_id': part['nationality_id'],
+ 'comment': part['comment'],
+ 'associate_members': associate_members,
+ }
+
+ return {
+ 'value' : res
+ }
+
+
+ def confirm_members(self, cr, uid, ids, context=None):
+ """
+ This function should create or update partner informations into the database.
+ """
+
+ return {'type': 'ir.actions.act_window_close'}
+
+CreateMember()
+
+# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+ <data>
+ <record id="view_bikecoop_create_member_form" model="ir.ui.view">
+ <field name="name">bikecoop.create.member.wizard.form</field>
+ <field name="model">bikecoop.create.member.wizard</field>
+ <field name="type">form</field>
+ <field name="priority" eval="8"/>
+ <field name="arch" type="xml">
+ <form string="Create bikecoop member">
+ <group colspan="4" col="2">
+ <field name="partner_id" on_change="onchange_partner_id(partner_id)"/>
+ </group>
+ <separator string="The membership status" colspan="4"/>
+ <group colspan="4">
+ <field name="member_ident" readonly="1" />
+ <field name="membership_state" readonly="1"/>
+ <field name="membership_start" readonly="1"/>
+ <field name="membership_stop" readonly="1"/>
+ <separator string="Address" colspan="4"/>
+ <field name="street"/>
+ <field name="street2"/>
+ <field name="zip"/>
+ <field name="city"/>
+ <field name="country_id" widget="selection"/>
+ </group>
+ <separator string="Personal information" colspan="4"/>
+ <group colspan="4">
+ <field name="birthdate"/>
+ <field name="gender_id" widget="selection"/>
+ <field name="occupation_id" widget="selection"/>
+ <field name="nationality_id" widget="selection"/>
+ <field name="volunteer_com"/>
+ <field name="volunteer_anim"/>
+ <field name="volunteer_admin"/>
+ <field name="volunteer_workshop"/>
+ <field name="comment"/>
+ </group>
+ <separator string="Associate members" colspan="4"/>
+ <group colspan="4">
+ <field name="associate_members" nolabel="1"/>
+ </group>
+ <button string="Cancel" icon="gtk-cancel" special="cancel"/>
+ <button string="Validate" icon="gtk-ok" type="object" name="confirm_members"/>
+ </form>
+ </field>
+ </record>
+
+ <record model="ir.actions.act_window" id="act_open_bikecoop_create_member_view">
+ <field name="name">Create bikecoop member</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">bikecoop.create.member.wizard</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="domain">[]</field>
+ <field name="context">{}</field>
+ <field name="target">new</field>
+ </record>
+
+ <record model="ir.actions.act_window.view" id="act_open_bikecoop_create_member_view_form">
+ <field name="act_window_id" ref="act_open_bikecoop_create_member_view"/>
+ <field name="sequence" eval="20"/>
+ <field name="view_mode">form</field>
+ <field name="view_id" ref="view_bikecoop_create_member_form"/>
+ </record>
+
+ <menuitem id="menu_bikecoop_create_member"
+ parent="bikecoop.menu_bikecoop"
+ sequence="20"
+ action="act_open_bikecoop_create_member_view"/>
+ </data>
+</openerp>