1
votes

How can I change the status field default value of formdownload model record to true when a value is picked in form_serial_no_id Many2one field of plot.allocate model?

I have written a method to override odoo create function of the PlotAllocation model but it's still not changing the value of status field to true. Instead, it goes to the override function of create method in the parent class(plot.allocate). Anytime I save record, control goes to the create function of the parent method and ignore the create function of class PlotAllocation that inherit the plot.allocate model. How can I fix this?

from openerp import models, fields, api


class CompanyName(models.Model):
    _name = 'companyname'
    _rec_name = 'company_name'

    company_name = fields.Char(string="Company Name", required=True)
    company_short_code = fields.Char(string="Company short code", required=True)


class FormDownload(models.Model):
    _name = 'formdownload'
    _rec_name = 'form_serial_no'

    name = fields.Many2one('companyname', string="Company Name", ondelete='cascade',
                           required=True)
    form_serial_no = fields.Char(string="Form Serial No", readonly=True)
    status = fields.Boolean(string="Status", default=False)

    @api.model
    def create(self, vals):
        serial_no = self.env['ir.sequence'].get('formdownload.form_serial_no')
        code = self.env['companyname'].browse(vals['name']).company_short_code

        # capitalize company short code values
        code = code.upper()

        # merge code and serial number
        vals['form_serial_no'] = code + serial_no
        return super(FormDownload, self).create(vals)


class PlotAllocation(models.Model):
    _inherit = 'plot.allocate'

    form_serial_no_id = fields.Many2one('formdownload',
                                        domain=[('status', '=', False)],
                                        ondelete='cascade', string="Form Serial No")

    def create(self, vals):
        form_id = vals['form_serial_no_id']
        form_obj = self.env['formdownload'].browse(vals['status'])

        if form_id:
            form_obj.write({'status': True})

        return super(PlotAllocation, self).create(vals)

Here is the create override function of the parent class

class plot_allocate(osv.osv):
    _name = 'plot.allocate'
    _inherit = ['mail.thread', 'ir.needaction_mixin']    

def create(self, cr, uid, vals, context=None):
        offer_dt = vals.get('offer_dt')
        offer_price = vals.get('offer_price')
        plot_no = vals.get('plot_no')
        payment_plan = vals.get('payment_plan')
        # generate and store the offer letter reference number
        vals['offer_letter_reference_number'] = self.pool.get(
            'ir.sequence').get(cr, uid, 'offer_letter_reference_number')
        # override creation method to prevent creation of duplicate plots
        if plot_no:
            plot_no_duplicate = self.search(
                cr, uid, [('plot_no', '=', plot_no)])
            if plot_no_duplicate:
                raise osv.except_osv(
                    _('Duplicate!'),
                    _('Plot No is allocated or is open for allocation already'))
        # change status of unallocated plots to allocated in unit_master
        unit_master = self.pool.get('unit.master').browse(cr, uid, plot_no)
        # change corresponding plot in unit_master to allocated
        unit_master.write({'status': 'allocated'})
        project_and_plot_id = super(
            plot_allocate, self).create(
            cr, uid, vals, context=context)
        plot = self.browse(cr, uid, project_and_plot_id, context=context)
        if payment_plan:
            self.calc_payment_plan(cr, uid, plot, offer_dt, payment_plan)
        return project_and_plot_id
3
You are comparing boolean with integer, does it make sense ? if vals['form_serial_no_id'] == status:Emipro Technologies Pvt. Ltd.
what is vals['name'] here?AKHIL MATHEW
which version of odoo you are using in this?Bhuro
@bhuro, i use odoo 8Ropo

3 Answers

1
votes

try this :

@api.model   
def create(self, vals):
    status = self.env['formdownload'].browse(vals['form_serial_no_id'])         
    if self.form_serial_no_id.id == status.status:
        status.write({'status': True})     
    return super(PlotAllocation, self).create(vals)
1
votes

Try this:

@api.model
def create(self, vals):
    form_id = vals['form_serial_no_id'].id
    form_obj = self.env['formdownload'].browse([form_id])

    if your condition:
        form_obj.write({'status':True})

    return super(PlotAllocation, self).create(vals)
0
votes

i tried this code and it work just fine :

@api.model
 def create(self, vals):
        rec_id = super(PlotAllocation, self).create(vals)
        if rec_id.form_serial_no_id :
            # raise exceptions.ValidationError('Your code is here should make the status of companyname to true')
            # print 'Your code is here should make the status of companyname to true'
            rec_id.form_serial_no_id.status = True
        return rec_id