You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
96 lines
3.5 KiB
96 lines
3.5 KiB
/** @odoo-module **/
|
|
import { registry } from "@web/core/registry";
|
|
import { useInputField } from "@web/views/fields/input_field_hook";
|
|
import { _t } from "@web/core/l10n/translation";
|
|
import { Component,useRef } from "@odoo/owl";
|
|
import { standardFieldProps } from "@web/views/fields/standard_field_props";
|
|
import { Dialog } from "@web/core/dialog/dialog";
|
|
import { AlertDialog } from "@web/core/confirmation_dialog/confirmation_dialog";
|
|
import { jsonrpc } from "@web/core/network/rpc_service";
|
|
export class FieldAutoFill extends Component {
|
|
/**
|
|
* Define the template for the DatePickerField component.
|
|
* The template name should match the one used in the XML template.
|
|
*/
|
|
static template = 'FieldAutoFill'
|
|
setup() {
|
|
super.setup();
|
|
this.input = useRef('input_data');
|
|
useInputField({
|
|
getValue: () => this.props.value || "",
|
|
refName: "input_data"
|
|
});
|
|
var values = this.props.record._values
|
|
for (const key in values) {
|
|
if (values.hasOwnProperty(key)) {
|
|
const value = values[key];
|
|
if (key == this.props.name){
|
|
this.props.value = values[key]
|
|
}
|
|
}
|
|
}
|
|
$('.o_form_button_save').click(() => {
|
|
this.props.value = $('#input_field_auto_fill').val()
|
|
})
|
|
}
|
|
/**
|
|
*Its a keyup function which will display the values according to key pressed
|
|
*/
|
|
_onKeyup(ev) {
|
|
var value = ev.target.value;
|
|
var model = this.env.model.env.searchModel.resModel
|
|
var self=this;
|
|
var values = this.__owl__.props.record._config.fields
|
|
for (const key in values) {
|
|
if (values.hasOwnProperty(key)) {
|
|
if (values[key].name == this.props.name){
|
|
this.props.type = values[key].type
|
|
}
|
|
}
|
|
}
|
|
if(this.props.type === "char") {
|
|
this.env.model.rpc('/matching/records',{
|
|
model: model,
|
|
field: this.props.name,
|
|
value: value,
|
|
})
|
|
.then(function(result) {
|
|
if(result.length > 0) {
|
|
self.input.el.nextSibling.style.display = 'block';
|
|
var table = self.input.el.nextSibling;
|
|
$(table).find('tr').remove();
|
|
var i;
|
|
for(i = 0; i < result.length; i++) {
|
|
var row = table.insertRow(i);
|
|
var cell = row.insertCell(0);
|
|
cell.innerHTML = result[i];
|
|
}
|
|
} else {
|
|
self.input.el.nextSibling.style.display = 'none';;
|
|
}
|
|
});
|
|
} else {
|
|
this.env.model.dialog.add(AlertDialog, {
|
|
body: _t("Only Supported for 'char' type please change field type to 'char'"),
|
|
});
|
|
return false;
|
|
}
|
|
}
|
|
/*
|
|
*Function to add data to the input field from the table which will
|
|
display values
|
|
*/
|
|
_onTableRowClicked(ev) {
|
|
this.input.el.value = ev.target.textContent;
|
|
this.input.el.nextSibling.style.display = 'none';
|
|
}
|
|
}
|
|
FieldAutoFill.props = {
|
|
...standardFieldProps,
|
|
value: { type: Function, optional: true },
|
|
}
|
|
export const Fieldautofill = {
|
|
component: FieldAutoFill,
|
|
supportedTypes: ["char"],
|
|
};
|
|
registry.category("fields").add("auto_fill", Fieldautofill);
|
|
|