Hi Guys
I've been toying with adding 2 fields to the sale.order and account.invoice objects. The need arose after a certain client needs to identify themseives to there client via this numbers for delivery to a branch. The additions to the code were made in sale.py and account_invoice.py and there respective form views. the columns added where also added to res.partner. Here is my additions to the sales.py and account_Iinvoice.py.
_columns = {
'supplier_number':fields.char('Supplier Number', size = 25 , required = False, readonly=True),
'branch_number':fields.char('Branch Code',size=10, required = False, readonly=False),
}
The problem comes in getting the values to the fields. When i ad the following to the sale onchange_partner_id method
def onchange_partner_id(self, cr, uid, ids, part, context=None):
if not part:
return {'value': {'partner_invoice_id': False, 'partner_shipping_id': False, 'payment_term': False, 'fiscal_position': False}}
part = self.pool.get('res.partner').browse(cr, uid, part, context=context)
addr = self.pool.get('res.partner').address_get(cr, uid, [part.id], ['delivery', 'invoice', 'contact'])
pricelist = part.property_product_pricelist and part.property_product_pricelist.id or False
payment_term = part.property_payment_term and part.property_payment_term.id or False
fiscal_position = part.property_account_position and part.property_account_position.id or False
dedicated_salesman = part.user_id and part.user_id.id or uid
suppnum = part.x_Supplier_Number
branchnum = part.ref
val = {
'partner_invoice_id': addr['invoice'],
'partner_shipping_id': addr['delivery'],
'payment_term': payment_term,
'fiscal_position': fiscal_position,
'user_id': dedicated_salesman,
'supplier_number':suppnum,
'branch_number':branchnum,
}
if pricelist:
val['pricelist_id'] = pricelist
return {'value': val}
I have also edited the _prepare_invoice method to include updating the fields for invoice creation. as follows.
def _prepare_invoice(self, cr, uid, order, lines, context=None):
"""Prepare the dict of values to create the new invoice for a
sales order. This method may be overridden to implement custom
invoice generation (making sure to call super() to establish
a clean extension chain).
:param browse_record order: sale.order record to invoice
:param list(int) line: list of invoice line IDs that must be
attached to the invoice
:return: dict of value to create() the invoice
"""
if context is None:
context = {}
journal_ids = self.pool.get('account.journal').search(cr, uid,
[('type', '=', 'sale'), ('company_id', '=', order.company_id.id)],
limit=1)
if not journal_ids:
raise osv.except_osv(_('Error!'),
_('Please define sales journal for this company: "%s" (id:%d).') % (order.company_id.name, order.company_id.id))
invoice_vals = {
'name': order.client_order_ref or '',
'origin': order.name,
'type': 'out_invoice',
'reference': order.client_order_ref or order.name,
'account_id': order.partner_id.property_account_receivable.id,
'partner_id': order.partner_invoice_id.id,
'journal_id': journal_ids[0],
'branch_number': order.branch_number,
'supplier_number': order.supplier_number,
'invoice_line': [(6, 0, lines)],
'currency_id': order.pricelist_id.currency_id.id,
'comment': order.note,
'payment_term': order.payment_term and order.payment_term.id or False,
'fiscal_position': order.fiscal_position.id or order.partner_id.property_account_position.id,
'date_invoice': context.get('date_invoice', False),
'company_id': order.company_id.id,
'user_id': order.user_id and order.user_id.id or False
}
# Care for deprecated _inv_get() hook - FIXME: to be removed after 6.1
invoice_vals.update(self._inv_get(cr, uid, order, context=context))
return invoice_vals
This works fine and loads the values of supplier Number and branch code perfectly. My problem is such that.
When i hit the update button the supplier number disappears and ( i suspect this is in button_dummy method please confirm).
When i need the branch number for a delivery address which is stored in the res.partner.child_ids.category_id.id field in the res.partner i do not know how to reference the field. Should i store this in child_ids.ref rather. And then create a onchange_parnter_shipping_id method to call when delivery address changes.
I would appreciate any assistance thank You