Hello.
I'm using SugarCRM Enterprise 7.5.
I already found a way to validate related fields from the model RevenueLineItems using javascript (backbone.js + underscore.js), and show an error message on the screen. It's being used on the EditView.
But I have some problems:
- If I try to force an error to a field and call the 'callback' function, the form submits, when it shouldn't. The error isn't for the Revenue model, but to a related Account model field (the relationship is RevenueLineItems -> Opportunities -> Accounts).
- If I put a 'return false;' to the validation, the Save button becomes blocked, that's why I commented the 'return' code.
How do I prevent the form from submitting in a specified condition, without blocking the Save button?
Here is the code (custom/modules/RevenueLineItems/clients/base/views/record/record.js):
({
extendsFrom: 'RevenueLineItemsRecordView',
initialize: function (options) {
this._super('initialize', [options]);
//add custom message key
//app.error.errorName2Keys['custom_message'] = 'ERR_CUSTOM_MESSAGE';
//add validation
//console.log("initialize");
this.model.addValidationTask('check_account_type', _.bind(this._doValidateCheckType, this));
},
_doValidateCheckType: function(fields, errors, callback) {
var receita = app.data.createBean('RevenueLineItems', {id: this.model.id});
var request = receita.fetch();
request.xhr.done(function () {
//console.log('Receita: '+receita.get('id') );
var receita_op = receita.getRelatedCollection('opportunities');
var opportunities = receita_op.fetch();
opportunities.xhr.done(function () {
//console.log(receita_op);
for (var i = 0; i < receita_op.length; ++i) {
var opportunity = receita_op.models[i];
var op_accounts = opportunity.getRelatedCollection('accounts');
var accounts = op_accounts.fetch();
accounts.xhr.done(function () {
//console.log(op_accounts);
for (var i = 0; i < op_accounts.length; ++i) {
var account = op_accounts.models[i];
if (receita.get('sales_stage') == 'Closed Won'
&& (account.get('id') != ""
|| account.get('cnpj_c') != "")) {
errors['sales_stage'] = errors['sales_stage'] || {};
errors['sales_stage'].field_error = true;
app.alert.show('message-id', {
level: 'error',
messages: 'CNPJ required',
autoClose: false
});
// return false;
}
}
});
}
});
});
callback(null, fields, errors);
}
})
Any help would be appreciated.
Thanks.