İçereği Atla
Menü
Bu soru işaretlendi
2 Cevaplar
2229 Görünümler

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
Vazgeç
En İyi Yanıt

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
Vazgeç
En İyi Yanıt

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
Vazgeç
İlgili Gönderiler Cevaplar Görünümler Aktivite
0
Ağu 25
65
3
Ağu 25
396
2
Ağu 25
444
0
Ağu 25
201
1
Ağu 25
558