I am making some changes on a specific module that raises an error when added to a recent addons package. The code works fine for a previous version of some addons, but when I add this module to a update list of addons I get an execution error and I get stuck on this problem.
The error is:
ValueError: Invalid field 'discharge_id' in leaf "<osv.ExtendedLeaf: ('discharge_id', 'in', [18]) on stock_picking (ctx: )>"
I believe if I put some parts of the code you can help me solve this.
The class for the main form:
class discharge_note(osv.osv):
_name = 'discharge.note'
_description = 'Discharge Note'
_inherit = 'mail.thread'
_columns = {
'name': fields.char('Reference', size=32, states={'confirmed': [('readonly', True)], 'done': [('readonly', True)]}),
'date': fields.datetime('Discharge Date'),
'user_id': fields.many2one('res.users', 'Responsible', states={'confirmed': [('readonly', True)], 'done': [('readonly', True)]}),
'description': fields.text('Description',),
'company_id': fields.many2one('res.company', 'Company', required=True),
'line_ids' : fields.one2many('discharge.note.line', 'discharge_id', 'Products to Discharge'),
'warehouse_id': fields.many2one('stock.warehouse', 'Warehouse', states={'confirmed': [('readonly', True)], 'done': [('readonly', True)]}),
'location_id': fields.related('warehouse_id', 'disc_local_id', type='many2one', relation='stock.location', string='Warehouse Location', store=True, readonly=True),
'state': fields.selection([('draft','New'),('confirmed','Waiting Availability'),('done','Delivery Done')], 'Status', track_visibility='onchange', required=True),
'ship_id': fields.many2one('ship', 'Ship'),
'picking_in_ids' : fields.one2many('stock.picking.in','discharge_id','Delivery Orders',),
'notes' : fields.char('Notes', size=255)
}
The class for the lines on document:
class discharge_note_line(osv.osv):
_name = "discharge.note.line"
_description="Stock Discharge Line"
_rec_name = 'product_id'
_columns = {
'product_id': fields.many2one('product.product', 'Product' ),
'product_uom_id': fields.many2one('product.uom', 'Product Unit of Measure'),
'product_qty': fields.float('Quantity', digits_compute=dp.get_precision('Product Unit of Measure')),
'discharge_id' : fields.many2one('discharge.note', 'Discharge Note', ondelete='cascade'),
'company_id': fields.related('discharge_id', 'company_id', type='many2one', relation='res.company', string='Company', store=True, readonly=True),
}
The stock.picking and stock_picking_in classes:
class stock_picking(osv.osv):
_name = "stock.picking"
_inherit = "stock.picking"
def do_partial(self, cr, uid, ids, partial_data, context=None):
picking_in_obj = self.pool.get('stock.picking.in')
res = super(stock_picking, self).do_partial(cr, uid, ids, partial_data, context=context)
note_ids = set()
ids = picking_in_obj.search(cr, uid, [('type', '=', 'in'), ('id', 'in', ids)])
for picking in picking_in_obj.browse(cr, uid, ids):
if picking.discharge_note_id:
note_ids.add(picking.discharge_note_id.id)
if note_ids:
self.pool.get('discharge.note').write(cr, uid, note_ids, {'state': 'done'}, context)
return res
class stock_picking_in(osv.osv):
_name = "stock.picking.in"
_inherit = "stock.picking.in"
_columns = {
'discharge_note_id' : fields.many2one('discharge.note', 'Discharge Note'),
}
I believe all code runs from here (method set_status_done):
def set_status_done(self, cr, uid, ids, context=None):
picking_in_obj = self.pool.get('stock.picking.in')
partial_picking_obj = self.pool.get('stock.partial.picking')
for note in self.browse(cr, uid, ids, context):
picking_in_ids = [picking.id for picking in note.picking_in_ids]
picking_in_obj.draft_validate(cr, uid, picking_in_ids, context=context)
# draft_validate sets the context for creating a partial picking
partial_fields = ('picking_id', 'move_ids', 'date')
partial_values = partial_picking_obj.default_get(cr, uid, partial_fields, context)
partial_values['move_ids'] = [(0, 0, v) for v in partial_values['move_ids']]
partial_id = partial_picking_obj.create(cr, uid, partial_values, context)
partial_picking_obj.do_partial(cr, uid, [partial_id], context)
return self.write(cr, uid, ids, {'state': 'done'})
Anyone can help me please?
Thank you very much
Have you put domain for discharge_id in xml or somewhere? This might be due to wrong domain of discharge_id.Have you passed context/domain in action window?
Thank you Nehal. I will check that and than post the results.