Reputation: 144
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
Upvotes: 1
Views: 6020
Reputation: 1659
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)
Upvotes: 1
Reputation: 14721
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
Upvotes: 0
Reputation: 260
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)
Upvotes: 1