Ir al contenido
Menú
Se marcó esta pregunta
2 Respuestas
2194 Vistas

I need to modify this patch to modify button function of the dialog... any help???:

patch(SaleOrderLineProductField.prototype, 'sale_product_matrix', {


/**
* Triggers Matrix Dialog opening
*
* @param {String} jsonInfo matrix dialog content
* @param {integer} productTemplateId product.template id
* @param {editedCellAttributes} list of product.template.attribute.value ids
* used to focus on the matrix cell representing the edited line.
*
* @private
*/
_openMatrixConfigurator: function (jsonInfo, productTemplateId, editedCellAttributes) {
const infos = JSON.parse(jsonInfo);
const saleOrderRecord = this.props.record.model.root;
const MatrixDialog = new Dialog(this, {
title: this.env._t('Choose Product Variants'),
size: 'extra-large', // adapt size depending on matrix size?
$content: $(qweb.render(
'product_matrix.matrix', {
header: infos.header,
rows: infos.matrix,
format({price, currency_id}) {
if (!price) { return ""; }
const sign = price < 0 ? '-' : '+';
const formatted = formatMonetary(
Math.abs(price),
{
currencyId: currency_id,
},
);
return markup(`${sign} ${formatted}`);
}
}
)),
buttons: [
{text: this.env._t('Confirm'), classes: 'btn-primary', close: true, click: function (result) {
const $inputs = this.$('.o_matrix_input');
var matrixChanges = [];
_.each($inputs, function (matrixInput) {
if (matrixInput.value && matrixInput.value !== matrixInput.attributes.value.nodeValue) {
matrixChanges.push({
qty: parseFloat(matrixInput.value),
ptav_ids: matrixInput.attributes.ptav_ids.nodeValue.split(",").map(function (id) {
return parseInt(id);
}),
});
}
});
if (matrixChanges.length > 0) {
// NB: server also removes current line opening the matrix
saleOrderRecord.update({
grid: JSON.stringify({changes: matrixChanges, product_template_id: productTemplateId}),
grid_update: true // to say that the changes to grid have to be applied to the SO.
});
}
}},
{text: this.env._t('Close'), close: true},
],
}).open();

MatrixDialog.opened(function () {
MatrixDialog.$content.closest('.o_dialog_container').removeClass('d-none');
if (editedCellAttributes.length > 0) {
const str = editedCellAttributes.toString();
MatrixDialog.$content.find('.o_matrix_input').filter((k, v) => v.attributes.ptav_ids.nodeValue === str)[0].focus();
} else {
MatrixDialog.$content.find('.o_matrix_input:first()').focus();
}
});
},
});


Avatar
Descartar
Mejor respuesta

you can make the following changes:

patch(SaleOrderLineProductField.prototype, 'sale_product_matrix', {
// ...

/**
* Triggers Matrix Dialog opening
*
* @param {String} jsonInfo matrix dialog content
* @param {integer} productTemplateId product.template id
* @param {editedCellAttributes} list of product.template.attribute.value ids
* used to focus on the matrix cell representing the edited line.
*
* @private
*/
_openMatrixConfigurator: function (jsonInfo, productTemplateId, editedCellAttributes) {
const infos = JSON.parse(jsonInfo);
const saleOrderRecord = this.props.record.model.root;
const MatrixDialog = new Dialog(this, {
title: this.env._t('Choose Product Variants'),
size: 'extra-large', // adapt size depending on matrix size?
$content: $(qweb.render(
'product_matrix.matrix', {
header: infos.header,
rows: infos.matrix,
format({price, currency_id}) {
if (!price) { return ""; }
const sign = price < 0 ? '-' : '+';
const formatted = formatMonetary(
Math.abs(price),
{
currencyId: currency_id,
},
);
return markup(`${sign} ${formatted}`);
}
}
)),
buttons: [
{
text: this.env._t('Custom Button'), // Modify the button text
classes: 'btn-primary',
close: true,
click: function (result) {
// Modify the button functionality here
console.log('Custom button clicked!');
}
},
{text: this.env._t('Close'), close: true},
],
}).open();

// ...
},
});

In the above code, the changes have been made to the button section of the MatrixDialog object. You can modify the button text by changing the text property to your desired label. Additionally, you can customize the button's functionality by modifying the click function inside the button object.

Avatar
Descartar
Mejor respuesta

Hey , 

 You can add the same  code with different patch name and only add your required code , so indirectly you will be writing code to extend SaleOrderLineProductField only .


hope this helps :)

Avatar
Descartar
Publicaciones relacionadas Respuestas Vistas Actividad
3
ago 25
324
2
ago 25
334
0
ago 25
151
1
ago 25
508
1
jul 25
829