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