My client has a requirement to set lead times on products, on a per customer basis. For instance:
The product is a search report on coal mining activity in the vicinity of a property. The standard lead time is 5 days.
Customer A asks for a search report on coal mining activity around a property. We really like Customer A, so we have decided that they will have that report within 3 working days. The customer specific lead time should be set to -2 ( 2 days less than standard)
Customer B asks for a search report on coal mining activity around a property. They always pay their bills late, though, so we have secretly decided that they're at the back of the queue - they will have that report within 7 working days. The customer specific lead time should be set to 2 (2 days more than standard)
What I want to do is to add an extra tab to the res.partner view, called Lead Times, and have the product list (including variants) display in a table there. Each row will have
<tr>
<td>product name</td> <td><input type="text" value="a number"></td>
<tr>
This is where I've got to so far:
The model (models/customer.py)
# encoding=utf8
from odoo import fields, api, models
import logging
logging.basicConfig(level=logging.DEBUG)
from datetime import datetime, timedelta
class Customer(models.Model):
_name = 'lead_times'
partner_id = fields.Many2one('res.partner')
product_id = fields.Many2one('product.product')
lead_time = fields.Integer('lead_time')
class MsukPartner(models.Model):
_inherit = 'res.partner'
lead_times = fields.Many2one(compute='_get_lead_times', store=False)
def _get_lead_times(self):
lead_time_rows = self.env['lead_times'].search([('partner_id', '=', 780)])
return lead_time_rows
That has produced a table which looks like this:.
miningsearchesuk=# \d lead_times Table "public.lead_times" Column | Type | Modifiers -------------+-----------------------------+--------------------------------------------------------- id | integer | not null default nextval('lead_times_id_seq'::regclass) create_uid | integer | product_id | integer | write_uid | integer | write_date | timestamp without time zone | create_date | timestamp without time zone | partner_id | integer | lead_time | integer | Indexes: "lead_times_pkey" PRIMARY KEY, btree (id) Foreign-key constraints: "lead_times_create_uid_fkey" FOREIGN KEY (create_uid) REFERENCES res_users(id) ON DELETE SET NULL "lead_times_partner_id_fkey" FOREIGN KEY (partner_id) REFERENCES res_partner(id) ON DELETE SET NULL "lead_times_product_id_fkey" FOREIGN KEY (product_id) REFERENCES product_product(id) ON DELETE SET NULL "lead_times_write_uid_fkey" FOREIGN KEY (write_uid) REFERENCES res_users(id) ON DELETE SET NULL miningsearchesuk=#
The view (views/res_partner_views.xml)
<odoo> <record id="view_partner_msuk_form" model="ir.ui.view"> <field name="name">res.partner.msuk.form</field> <field name="model">res.partner</field> <field name="inherit_id" ref="base.view_partner_form" /> <field name="arch" type="xml"> <notebook position="inside"> <page string="Lead Times"> <group> <field name="lead_times" /> <!--<field name="product_id" />--> </group> </page> </notebook> </field> </record> </odoo>
__init__.py
# -*- encoding: utf-8 -*- from . import project from . import product from . import sale from . import crm from . import project_category from . import product
from . import customer
What I see on screen:
(screenshot deleted as it was causing a 400 error from the forum, I think)
I've created a lead_time entry manually, and set a breakpoint just before _get_lead_times in customer.py. Here's the output:
> /home/miningsearchesuk/src/python/project_template/models/customer.py(21)_get_lead_times()
-> lead_time_rows = self.env['lead_times'].search([('partner_id', '=', 780)])
(Pdb) list
16
17 lead_times = fields.Many2one(compute='_get_lead_times', store=False)
18
19 def _get_lead_times(self):
20 import pdb; pdb.set_trace()
21 -> lead_time_rows = self.env['lead_times'].search([('partner_id', '=', 780)])
22 return lead_time_rows
23
[EOF]
(Pdb) lead_time_rows
*** NameError: name 'lead_time_rows' is not defined
(Pdb) n
> /home/miningsearchesuk/src/python/project_template/models/customer.py(22)_get_lead_times()
-> return lead_time_rows
(Pdb) lead_time_rows
lead_times(1,)
(Pdb) pp lead_time_rows.read([])
[{'__last_update': '2018-07-18 09:53:01',
'create_date': False,
'create_uid': False,
'display_name': u'lead_times,1',
'id': 1,
'lead_time': 5,
'partner_id': (780, u'3MS Construction Ltd'),
'product_id': (16, u'Further Site Investigation'),
'write_date': False,
'write_uid': False}]
(Pdb)
Can anyone give me any hints as to what to do next? How do I get my lead_time_rows to appear as I want?
Thanks