nitesh
nitesh

Reputation: 266

Custom Module Add Customers Automatically in Openerp

I have a custom module where i have inherited res.partner.I have a field "doctor"(which is many2one field).When i create a customer i can select a doctor.In img 1 Willam is the customer and he has selected Nitesh as the doctor.I have created doctor_view.xml which will show all the details of the Doctor.Now in img 2 , as we have selected "Nitesh" as 'Doctor' for 'Customer Willam',i should display "Willam" under "Client" in img2. Can anyone help me in this?Thanks in advance Img1 Img2

My code

Customer.py

from qrcode import *
from osv import osv
from osv import fields

class res_partner(osv.osv):
 _inherit = "res.partner"
 _description = "adding fields to res.partner"
 _columns = { 

    'doctor': fields.many2one('crm.lead.doctor','Doctor'),
 }
 class crm_lead_doctor(osv.osv):
    _name = "crm.lead.doctor"
    _order = "name"
    _columns ={
        'name':fields.char('Doctor Name',required=True,size=64,translate=True),
        'doctor_id':fields.char('Doctor Id',size=64,readonly=True),
        'doctor_mobile': fields.char('Mobile',required=True,size=64),
        'doctor_email': fields.char('Email',size=64),
        'doctor_hospital': fields.many2one('crm.lead.hospital','Hospital'),
        'doctor_street': fields.char('Street', size=128),
        'doctor_street2': fields.char('Street2', size=128),
        'doctor_zip': fields.char('Zip', change_default=True, size=24),
        'doctor_city': fields.char('City', size=128),
        'doctor_state_id': fields.many2one("res.country.state", 'State'),
        'doctor_country_id': fields.many2one('res.country', 'Country'),
        'doctor_brochure': fields.char('Brochuer',size=64),
        'doctor_flyer': fields.char('Flyer',size=64),
        'doctor_training': fields.char('Training',size=64),
        'doctor_starterpacksent': fields.char('Strater pack sent',size=64),
        'doctor_no_of_deliveries': fields.char('No of Deliveries/year',size=64),
        'doctor_fee': fields.char('Fee',size=64),
        'doctor_registration': fields.char('Registration No',size=64),
        'doctor_pancard': fields.char('Pan Card No',size=64),
        'doctor_fiscalcode': fields.char('Fiscal Code',size=64),
        'doctor_iban': fields.char('IBAN',size=64),
        'doctor_contractset': fields.char('Contract Set',size=64),
        'doctor_contractrecieved': fields.char('Contract Recieved',size=64),
        'doctor_clients':fields.many2many('res.partner')
    }
    def create(self, cr, uid, vals, context={}):
        doc_seq = self.pool.get('ir.sequence').get(cr, uid, 'master.doctor')
        vals['doctor_id'] = doc_seq
        res = super(res_partner.crm_lead_doctor, self).create(cr, uid, vals, context)
        return res 

Doctor_view.xml

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>

    <record id="view_doctor_form_extended" model="ir.ui.view">
    <field name="name">crm.lead.doctor.form</field>
    <field name="model">crm.lead.doctor</field>
    <field name="arch" type="xml">
        <form string="Doctor Details" version="7.0">
            <group>
                <field name="name"/>
<!--                 <field name="doctor_id"/> -->
                <field name="doctor_mobile"/>
                <field name="doctor_email"/>
                <field name="doctor_hospital"/>
                <label for="street" string="Doctor Address"/>
                <div>
                    <field name="doctor_street" placeholder="Street..."/>
                    <field name="doctor_street2"/>
                    <div class="address_format">
                        <field name="doctor_city" placeholder="City" style="width: 40%%"/>
                        <field name="doctor_state_id" on_change="onchange_state(state_id)" options='{"no_open": True}' placeholder="State" style="width: 24%%"/>
                        <field name="doctor_zip" placeholder="ZIP" style="width: 34%%"/>
                    </div>
                    <field name="doctor_country_id" placeholder="Country" options='{"no_open": True}'/>
                </div>
            </group>
            <notebook>
                <page string="Sales">
                    <group>
                        <group>
                            <field name="doctor_brochure"/>
                            <field name="doctor_flyer"/>
                            <field name="doctor_training"/>
                            <field name="doctor_starterpacksent"/>
                            <field name="doctor_no_of_deliveries"/>
                            <field name="doctor_fee"/>
                        </group>
                        <group>
                            <field name="doctor_registration"/>
                            <field name="doctor_pancard"/>
                            <field name="doctor_fiscalcode"/>
                            <field name="doctor_iban"/>
                            <field name="doctor_contractset"/>
                            <field name="doctor_contractrecieved"/> 
                        </group> 
                    </group>
                </page>
                <page string="Clients">
                   <field name="doctor_clients"/>
                </page>
            </notebook>
        </form>
    </field>
    </record>
<record id="view_doctor_tree_extended" model="ir.ui.view">
    <field name="name">crm.lead.doctor.tree</field>
    <field name="model">crm.lead.doctor</field>
    <field name="arch" type="xml">
        <tree string="Doctor Details" version="7.0">
                <field name="doctor_id"/>
                <field name="name"/>
                <field name="doctor_mobile"/>
                <field name="doctor_email"/>
                <field name="doctor_hospital"/>
        </tree>
    </field>
    </record>

    <record id="new_doctor" model="ir.actions.act_window">
        <field name="name">Doctors</field>
        <field name="type">ir.actions.act_window</field>
        <field name="res_model">crm.lead.doctor</field>
        <field name="view_type">form</field>
        <field name="view_mode">tree,form</field>
        <field name="view_id" ref="view_doctor_tree_extended"/>
    </record>

<!-- ===========================Menu Settings=========================== -->
<menuitem name ="Doctors - Hospitals" id = "menu_lead" />
  <menuitem name="Doctors" id="sub_menu_lead" parent="menu_lead" />
    <menuitem name="Doctors" id="create_lead" parent="sub_menu_lead" action="new_doctor"/>

</data>
</openerp>

Upvotes: 1

Views: 551

Answers (2)

TimoSolo
TimoSolo

Reputation: 7325

If I understand correctly you want to see the customer under the doctor's clients?

The customer will show under the doctor's clients only once you save the customer. Before you save, the link is not created so it wont show in the doctor's form view.

If you save the customer, and then open the doctor it should show as a client.

Upvotes: 0

CZoellner
CZoellner

Reputation: 14778

that's a perfect example for a one2many relationship between doctor-client. if you would realise it that way in openerp, you will have the clients shown in your doctor-view.

many2many would make sense, if your client has more than one doctor.

little hint: 'doctor_clients':fields.one2many('res.partner','doctor')

from qrcode import *
from osv import osv
from osv import fields

class res_partner(osv.osv):
 _inherit = "res.partner"
 _description = "adding fields to res.partner"
 _columns = { 

    'doctor': fields.many2one('crm.lead.doctor','Doctor'), #the so called relation_field for the one2many relation to crm.lead.doctor
 }
 class crm_lead_doctor(osv.osv):
    _name = "crm.lead.doctor"
    _order = "name"
    _columns ={
        'name':fields.char('Doctor Name',required=True,size=64,translate=True),
        'doctor_id':fields.char('Doctor Id',size=64,readonly=True),
        'doctor_mobile': fields.char('Mobile',required=True,size=64),
        'doctor_email': fields.char('Email',size=64),
        'doctor_hospital': fields.many2one('crm.lead.hospital','Hospital'),
        'doctor_street': fields.char('Street', size=128),
        'doctor_street2': fields.char('Street2', size=128),
        'doctor_zip': fields.char('Zip', change_default=True, size=24),
        'doctor_city': fields.char('City', size=128),
        'doctor_state_id': fields.many2one("res.country.state", 'State'),
        'doctor_country_id': fields.many2one('res.country', 'Country'),
        'doctor_brochure': fields.char('Brochuer',size=64),
        'doctor_flyer': fields.char('Flyer',size=64),
        'doctor_training': fields.char('Training',size=64),
        'doctor_starterpacksent': fields.char('Strater pack sent',size=64),
        'doctor_no_of_deliveries': fields.char('No of Deliveries/year',size=64),
        'doctor_fee': fields.char('Fee',size=64),
        'doctor_registration': fields.char('Registration No',size=64),
        'doctor_pancard': fields.char('Pan Card No',size=64),
        'doctor_fiscalcode': fields.char('Fiscal Code',size=64),
        'doctor_iban': fields.char('IBAN',size=64),
        'doctor_contractset': fields.char('Contract Set',size=64),
        'doctor_contractrecieved': fields.char('Contract Recieved',size=64),
        'doctor_clients':fields.one2many('res.partner','doctor','Clients') #here we use 'doctor' the new field of res.partner as relation_field to bind the relation
    }
    def create(self, cr, uid, vals, context={}):
        doc_seq = self.pool.get('ir.sequence').get(cr, uid, 'master.doctor')
        vals['doctor_id'] = doc_seq
        res = super(res_partner.crm_lead_doctor, self).create(cr, uid, vals, context)

the views are just fine return res

Upvotes: 1

Related Questions