[FIX] web_widget_one2many_product_picker_sale_secondary_unit: Secondary unit management

pull/1875/head
Alexandre D. Díaz 2021-05-21 14:37:09 +02:00
parent 4ba804cf70
commit 24cab7509d
5 changed files with 94 additions and 6 deletions

View File

@ -0,0 +1,27 @@
// Copyright 2021 Tecnativa - Alexandre Díaz
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
odoo.define("web_widget_one2many_product_picker_sale_secondary_unit.One2ManyProductPickerRecord", function(
require
) {
"use strict";
const One2ManyProductPickerRecord = require("web_widget_one2many_product_picker.One2ManyProductPickerRecord");
One2ManyProductPickerRecord.include({
/**
* @override
*/
_setMasterUomMap: function () {
this._super.apply(this, arguments);
if ((this.state && this.state.data && this.state.data.secondary_uom_id) ||
!this.state && this.recordSearch && this.recordSearch.sale_secondary_uom_id) {
_.extend(this.master_uom_map, {
"field_uom": "secondary_uom",
"field_uom_qty": "secondary_uom_qty",
"search_field_uom": "sale_secondary_uom_id",
});
}
},
});
});

View File

@ -0,0 +1,21 @@
// Copyright 2021 Tecnativa - Alexandre Díaz
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
odoo.define(
"web_widget_one2many_product_picker_sale_secondary_unit.One2ManyProductPickerRenderer",
function(require) {
"use strict";
const One2ManyProductPickerRenderer = require("web_widget_one2many_product_picker.One2ManyProductPickerRenderer");
One2ManyProductPickerRenderer.include({
_isEqualState: function(state_a, state_b) {
const res = this._super.apply(this, arguments);
const secondary_uom_id_a =
state_a.data.secondary_uom_id && state_a.data.secondary_uom_id.data.id;
const secondary_uom_id_b =
state_b.data.secondary_uom_id && state_b.data.secondary_uom_id.data.id;
return res && secondary_uom_id_a === secondary_uom_id_b;
},
});
}
);

View File

@ -0,0 +1,27 @@
// Copyright 2021 Tecnativa - Alexandre Díaz
// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
odoo.define("web_widget_one2many_product_picker_sale_secondary_unit.FieldOne2ManyProductPicker", function(
require
) {
"use strict";
const FieldOne2ManyProductPicker = require("web_widget_one2many_product_picker.FieldOne2ManyProductPicker");
FieldOne2ManyProductPicker.include({
// Model product.product fields
search_read_fields: _.unique([].concat(FieldOne2ManyProductPicker.prototype.search_read_fields, [
"sale_secondary_uom_id",
])),
/**
* @private
* @returns {Object}
*/
_getDefaultOptions: function() {
const res = this._super.apply(this, arguments);
res.field_map.secondary_uom = "secondary_uom_id";
res.field_map.secondary_uom_qty = "secondary_uom_qty";
return res;
},
});
});

View File

@ -1,17 +1,18 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<template> <template>
<t t-extend="One2ManyProductPicker.FlipCard">
<t t-extend="One2ManyProductPicker.FlipCard.Front">
<t <t
t-jquery="t[t-if='state'] > t[t-elif='!is_virtual'] > div:first-child > span:first-child" t-jquery="t[t-call='One2ManyProductPicker.ActionButton']"
t-operation="after" t-operation="after"
> >
<t <t
t-if="state.model === 'sale.order.line' &amp;&amp; state.data['secondary_uom_id']" t-if="state.model === 'sale.order.line' &amp;&amp; state.data['secondary_uom_id'] &amp;&amp; (!is_virtual || modified)"
> >
<span <span
data-field="secondary_uom_qty" t-att-data-field="field_map[field_uom_qty]"
data-esc="str(secondary_uom_qty) + ' x ' + secondary_uom_id.data.display_name" t-attf-data-esc="str({{field_map.product_uom_qty}}) + ' x ' + {{field_map.product_uom}}.data.display_name"
class="badge badge-primary font-weight-bold rounded-0 mt-1 p-2" class="badge badge-primary mw-100 text-truncate overflow-hidden d-inline-block float-left font-weight-bold rounded-0 m-0 p-2"
/> />
</t> </t>
</t> </t>

View File

@ -6,6 +6,18 @@
inherit_id="web_widget_one2many_product_picker.assets_backend" inherit_id="web_widget_one2many_product_picker.assets_backend"
> >
<xpath expr="." position="inside"> <xpath expr="." position="inside">
<script
type="text/javascript"
src="/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/widgets/field_one2many_product_picker.js"
/>
<script
type="text/javascript"
src="/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/record.js"
/>
<script
type="text/javascript"
src="/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/One2ManyProductPicker/renderer.js"
/>
<script <script
type="text/javascript" type="text/javascript"
src="/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/abstract_view.js" src="/web_widget_one2many_product_picker_sale_secondary_unit/static/src/js/views/abstract_view.js"