Odoo.sh 13e Sales app
Please see screenshot. I have a popover widget that when you click on it, does calculations based on numbers passed to it.
The screenshot is from runbot, and the popover is just like this example one. Now the $14.00 that's in the popover, I'd like to click on it, and update the Unit Price (price_unit) for that line item, but no matter what I try, I can't get it to update.
How can I do this?
Screenshot: https://snipboard.io/eFYxRK.jpg
The Widget you reference is pulling information already on the Sale Order Line.
Does your customization create a field on the Sale Order Line and have the Widget show it?
Also, is this a case to use Pricelists? (ie is there a calculation are you doing that can't be done with a Pricelist?)
@Ray Carnes:
No, it can't be done as a pricelist as these care choices made by the user on the fly. Client is particular that this works in a certain way.
The fields are all created in the model, sale.order.line.
Then I extended the view sale.view_order_form and added the fields invisible:
<record id="sale_order_line_tree_stock_price_custom" model="ir.ui.view">
<field name="name">sale.order.line.tree.stock.price.custom</field>
<field name="model">sale.order</field>
<field name="type">form</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<xpath expr="//page/field[@name='order_line']/tree/field[@name='price_unit']" position="before">
<field name="last_price" invisible="1"/>
<field name="last_date_order" invisible="1"/>
<field name="gross_profit_percent" invisible="1"/>
<field name="repl_cost_current" invisible="1"/>
<widget name="custom_price_widget" width="0.1"/>
</xpath>
</record>
Then there's the javascript call:
<record id="sale_order_line_view_price_custom" model="ir.ui.view">
<field name="name">sale.order.line.view.price.custom</field>
<field name="type">qweb</field>
<field name="inherit_id" ref="web.assets_backend"/>
<field name="arch" type="xml">
<xpath expr="." position="inside">
<script type="text/javascript" src="/mw_custom/static/src/js/saleOrderLinePriceCustom.js"/>
</xpath>
</field>
</record>
Which pulled from this template:
<templates>
<div t-name="mw_custom.icon">
<div>
<a tabindex="0" class="fa fa-usd text-primary"/>
</div>
</div>
<div t-name="mw_custom.CustomPricePopOver">
<table>
<tr>
<th>Last Price</th>
<td>$<span t-esc="data.last_price"/></td>
</tr>
<tr>
<td colspan="2"><span t-esc="data.last_date_order"/></td>
</tr>
<tr>
<td colspan="2"><hr/></td>
</tr>
<tr>
<th>GP%: <span t-esc="data.gp_price"/></th>
<td><a href="#">Calculate</a></td>
</tr>
<tr>
<td>Repl Cost: <span t-esc="data.repl_cost_current"/></td>
<td>Percent: <input type="text" size="3" id="gross_profit_percent"/></td>
</tr>
</table>
<button id="closeThis">Close</button>
</div>
</templates>
And populated everything and was able to handle all calculations with the JS, which went through MANY iterations, but no mater what I did, I couldn't get the results of the calculations to pass back to sale.order.line.
The result of the script would've had two: and by clicking "Use" buttons next to each, one of those was to update sale_oder_line.price_unit on the line we're working on. But it didn't seem that the line/row had an id yet because it's not saved yet, nor could I find a unique identifier for the specific field, and even when I tried to tree down through all the DOM elements, once I would mouse away from the line, price_unit would revert to whatever it had initially.