2013-03-25 6 views
5

मेरे पास एक चयन क्षेत्र है (कई से एक विभाजन क्षेत्र) यदि मैं एक विभाजन का चयन करता हूं तो अपने 'कर्मचारियों को नोटबुक अनुभाग' पर लोड करने की आवश्यकता है। openerp 7 में इसे कैसे कार्यान्वित करें?बदले में ईवेंट पर कई बच्चों को कैसे लोड किया जाए?

अगर मैं चयनित प्रासंगिक संपत्ति आईडी फिर प्रासंगिक divisions.if विभाजन लोड करने के लिए चयन तो चरण के लिए

<record model="ir.ui.view" id="bpl_work_offer_form"> 
<field name="name">bpl.work.offer.form</field> 
<field name="model">bpl.work.offer</field> 
<field name="arch" type="xml"> 
<form string='bpl_work_offer' version='7.0'> 
<sheet> 

<group> 
    <group> 
     <field name='bpl_estate_id' /> 
     <field name='bpl_division_id' /> 
     <field name='user_id' /> 
    </group> 
    <group> 
     <field name='date_of_offer' /> 
     <field name='payment_type' /> 
     <field name='select_by' /> 
     <field name='no_of_workers' attrs="{'invisible':[('select_by','=','by_name')]}" /> 
     <field name='work_type' /> 

    </group> 
</group> 
<div name="Worker Selection"></div> 
<separator string='Select workers' /> 
<notebook attrs="{'invisible':[('select_by','=','by_count')]}"> 
    <page string="Tea Workers" attrs="{'readonly':[('work_type','!=','tea')]}"> 
     <field name='selected_tea_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
    <page string="Rubber Workers" attrs="{'readonly':[('work_type','!=','rubber')]}"> 
     <field name='selected_rubber_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
    <page string="Sundry Workers" attrs="{'readonly':[('work_type','!=','sundry')]}"> 
     <field name='selected_sundry_workers_line_ids' nolabel='1'> 
      <tree string='List' editable='bottom'> 
       <field name='worker_id' /> 
       <field name='is_selected' /> 
      </tree> 
     </field> 
     <group class='oe_subtotal_footer oe_right'> 
      <field name='total_workers' /> 
     </group> 
     <br /> 
     <br /> 
    </page> 
</notebook> 
</sheet> 
</form> 
</field> 
</record> 

<record model="ir.actions.act_window" id="bpl_work_offer_action"> 
<field name="name">bpl.work.offer.action</field> 
<field name="res_model">bpl.work.offer</field> 
<field name="view_type">form</field> 
<field name="view_mode">form</field> 
</record> 

मॉडल कोड

class company_new_registration(osv.osv): 
    _name = "bpl.company.n.registration" 
    _description = "Company" 
    _columns = { 
       'name': fields.char('Company Name', size=128, required=True), 
       'estates': fields.one2many('bpl.estate.n.registration', 'company_id', 'Estate')           
    } 
# Bill of Material 
company_new_registration() 

class estate_new_registration(osv.osv): 
    _name = "bpl.estate.n.registration" 
    _description = "Estates" 
    _columns = { 
     'name': fields.char('Estate Name', size=128, required=True), 
     'company_id': fields.many2one('bpl.company.n.registration', 'Company Name', select=True), 
     'divisions': fields.one2many('bpl.division.n.registration', 'estate_id', 'Division') 
    } 

estate_new_registration() 

class division_new_registration(osv.osv): 
    _name = "bpl.division.n.registration" 
    _description = "Divisions" 
    _columns = { 
     'name': fields.char('Division Name', size=128, required=True), 
     'estate_id': fields.many2one('bpl.estate.n.registration', 'Estate Name', select=True), 
    } 

division_new_registration() 

और जरूरत मानचित्रण निम्नलिखित में प्रासंगिक कार्यकर्ताओं लोड करने के लिए की जरूरत की जरूरत है वह काम प्रस्ताव (वृक्षारोपण परियोजना)

class bpl_work_offer(osv.osv): 
    _name = "bpl.work.offer" 
    _description = "BPL Work Offer" 
    _columns = { 
     'user_id': fields.many2one('res.users', 'User Name'), 
     'date_of_offer': fields.date('Date'), 
     'bpl_estate_id':fields.many2one('bpl.estate.n.registration', 'Estate', help='Estate'), 
     'bpl_division_id':fields.many2one('bpl.division.n.registration', 'Division', help='Division'), 
     'payment_type': fields.selection([('normal_work', 'Normal Work'), ('cash_work', 'Cash Work')], 'Payment Type'), 
     'select_by': fields.selection([('by_name', 'By Names'), ('by_count', 'By Count')], 'Select By'), 
     'no_of_workers': fields.integer('No of Workers'), 
     'work_type': fields.selection([('tea', 'Tea'), ('rubber', 'Rubber'), ('sundry', 'Sundry')], 'Work Type'), 
     'total_workers': fields.integer('Total Workers'), 
     'selected_tea_workers_line_ids': fields.one2many('bpl.selected.tea.workers.line', 'worker_id', 'Tea Workers', ondelete="cascade"), 
     'selected_rubber_workers_line_ids': fields.one2many('bpl.selected.rubber.workers.line', 'worker_id', 'Rubber Workers', ondelete="cascade"), 
     'selected_sundry_workers_line_ids': fields.one2many('bpl.selected.sundry.workers.line', 'worker_id', 'Sundry Workers', ondelete="cascade"), 
    } 

bpl_work_offer() 

class selected_tea_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.tea.workers.line' 
    _description = 'BPL Selected Tea Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Tea Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_tea_workers_line_ids() 

class selected_rubber_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.rubber.workers.line' 
    _description = 'BPL Selected Rubber Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Rubber Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_rubber_workers_line_ids() 

class selected_sundry_workers_line_ids(osv.osv): 
    _name = 'bpl.selected.sundry.workers.line' 
    _description = 'BPL Selected Sundry Workers line' 
    _columns = { 
     'worker_id':fields.many2one('bpl.worker', 'Sundry Worker', ondelete='cascade', help='Worker'), 
     'is_selected': fields.boolean('Select', help="Selected or not"), 
     } 

selected_sundry_workers_line_ids() 
+0

कृपया हमें कोड तुम इतनी लिखा था हम आपको – furins

+0

@furins कोड added.shall मदद कर सकते हैं मैं तुम्हें करने के लिए मेरे पूरे मॉड्यूल भेजते हैं तो यू चाहते हैं दिखा।? अब मॉडल कोड भी जोड़ा गया –

+0

मुझे कोड भेजने के संबंध में स्निपेट के लिए @ एनीमरी धन्यवाद: नहीं, धन्यवाद, क्योंकि यह अन्य उपयोगकर्ताओं द्वारा उपलब्ध नहीं होगा, इसलिए कोई भी आपके उत्तर से नहीं सीख पाएगा। कृपया अपने कोड का हिस्सा बनाने के लिए इस तरह जिथब, बिटबकेट, गिस्ट या किसी अन्य सेवा का उपयोग करें या कृपया इसे सारांशित करने का प्रयास करें, केवल आवश्यक भागों – furins

उत्तर

1

का उपयोग करेंअद्यतन करने के लिए one2many महत्व देता

def on_change(self,cr,uid,ids,ur_field,context=None): 
    if context is None: 
     context = {} 
    value_list = val = [] 
    if ur_field: 
     ur_conditions here 
     value_list = (1,ID,{Values}) 
     val = {'one2manyfield':value_list} 
    if not ur_field: 
     val = {'one2manyfield':False} 
    return {'val':val} 
2

आप अपने onchange समारोह बनाने के लिए निम्न उदाहरण का उपयोग कर सकते हैं। यह एक onchange समारोह मैं चालान के लिए बनाया है (बस एक उदाहरण)

def onchange_partner_id(self, cr, uid, ids, type, partner_id,\ 
     date_invoice=False, payment_term=False, partner_bank_id=False, company_id=False): 
    res = super(account_invoice, self).onchange_partner_id(cr, uid, ids, type, partner_id, 
      date_invoice=date_invoice, payment_term=payment_term, partner_bank_id=partner_bank_id, 
      company_id=company_id) 

    invoice_lines = [] 
    product_ids = self.pool.get('product.product').search(cr, uid, [],limit=5) 
    for p in self.pool.get('product.product').browse(cr, uid, product_ids): 
     invoice_lines.append((0,0,{'product_id':p.id,'name':p.name, 
          'account_id':p.categ_id.property_account_income_categ.id, 
          }))#this dict contain keys which are fields of one2many field 
    res['value']['invoice_line']=invoice_lines 
    return res 

अगर वहाँ केवल एक लाइन तो जोड़े जाने के लिए है रेस [ 'मूल्य'] अद्यतन ({ 'one2many_fieldmname':। [(0,0, {'field1': value1, 'field2': value2, 'fieldn': valueen})] })

उपरोक्त उदाहरण में मैं 5 उत्पादों को खोज रहा हूं और इन उत्पादों को इनवॉइसलाइन में जोड़ा गया है। तो आपके बदले में फ़ंक्शन में आपको भी उस कर्मचारी को खोजना होगा जो विभाजन के अंतर्गत आता है।

अपने कोड में, रूप में "bpl_work_offer_form" आप क्षेत्र bpl_division_id पर onchange समारोह जोड़ने की है। (मेरे उदाहरण partner_id many2one क्षेत्र है और invoice_line one2many क्षेत्र है।)

आप और अधिक करने की जरूरत है एक 2many फ़ील्ड लोड करने के लिए अचयन का उपयोग करते समय सावधान रहें। बदले में फ़ंक्शन में आपको पहले अपने कई क्षेत्रों में लोड किए गए सभी रिकॉर्ड अनलिंक करना होगा। क्योंकि यदि एक बार रिकॉर्ड सहेजा जाता है तो यदि विनिमय फिर से लोड हो जाता है तो एक नई लाइन बनाई जाएगी। इसलिए आपको इसे सही तरीके से प्रबंधित करने की आवश्यकता है।

संदर्भ: http://doc.openerp.com/trunk/developers/server/06_misc_on_change_tips/

+0

हाय अनोम, क्या आप ऐनी मैरी के प्रश्न पर अपना उत्तर अनुकूलित कर सकते हैं और दस्तावेज़ीकरण के कुछ लिंक प्रदान कर सकते हैं? धन्यवाद – furins

+0

मैंने एक सही उदाहरण प्रदान किया है। ऐनी मैरी इसका परीक्षण कर सकती है और थोड़ा बदलाव के साथ ऐनी मैरी इसे आसानी से प्राप्त कर सकती है। – OmaL

+0

इस प्रकार एनी मैरी स्वीकृति के लिए प्रतीक्षा करें। इस सवाल में दो अलग-अलग रिश्ते हैं, इसलिए उदाहरण केवल आंशिक रूप से प्रासंगिक है, और यही कारण है कि मैंने एक और विस्तृत उत्तर मांगा। मैंने भविष्य में पाठकों को सहायता प्रदान करने के लिए भी बक्षीस रखा, न केवल ऐनी मैरी: तो यह अच्छा होगा अगर आप अपने कट-एंड-पेस्ट कोड को अनुकूलित करने के तरीके को समझें और यदि आप दस्तावेज़ीकरण के संदर्भ प्रदान करते हैं। – furins

संबंधित मुद्दे