Здравствуйте. Задача была в валидации по полю и системной настройке. Читал статьи по фильтрам в ESQ и по форуму перелистал всё.
Всё работает, кроме одного момента.
Валидация:
Если значение выпадающего списка frequency равно "Ежедневно" и в выпадающем списке active поле = "Да" и количество записей в базе больше чем системной настройке(в данном случае 5) - срабатывает валидация на поле и всплывающее уведомление при попытке сохранения, или изменения записи.
frequency - выпадающий список периодичностей;
active - выпадающий список активности;
ermsg - сообщение ошибки;
maxCount - системная настройка (ранее "MaxAmountofDailyActivities");
response.collection.getCount() - актуальное кол-во записей;
При сохранении записи с полем "Ежедневно" + "Да", если таких записей уже 5 - валидация работает и правильно выдаёт ошибку.
1.Но если любую другую запись, например с полем "Еженедельно" + "Да" изменить на "Ежедневно" + "Да", то ошибка не показывается и запись сохраняется. В данный момент записей становится уже 6.
2.Но если далее создавать записи с "Ежедневно" + "Да" или изменять другие на "Ежедневно" + "Да", ошибка показывается и всё продолжает работать нормально.
код метода прикрепил ниже + скриншоты
methods: {
asyncValidate: function(callback, scope) {
this.callParent([function(response) {
if (!this.validateResponse(response)) {
return;
}
Terrasoft.chain(
function(next) {
this.validateSwimmingPrograms(function(response) {
if (this.validateResponse(response)) {
next();
}
}, this);
},
function(next) {
callback.call(scope, response);
next();
}, this);
}, this]);
},
validateSwimmingPrograms: function(callback, scope) {
Terrasoft.SysSettings.querySysSettingsItem("MaxAmountofDailyActivities", function(maxCount) {
var frequency = "";
var active = "";
var ermsg = this.get("Resources.Strings.ErrorMessage");
var result = {success: true};
if (this.get("UsrFrequency")) {
frequency = this.get("UsrFrequency").displayValue;
}
if (this.get("UsrActive")) {
active = this.get("UsrActive").displayValue;
}
var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "UsrSwimmingPrograms" });
esq.addColumn("UsrFrequency.Name", "UsrFrequencyName");
esq.addColumn("UsrActive.Name", "UsrActiveName");
esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"UsrFrequency.Name", "Ежедневно"));
esq.filters.addItem(esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"UsrActive.Name", "Да"));
esq.getEntityCollection(function(response) {
if (response.success && frequency === "Еженедельно" || frequency === "Ежемесячно" ||
frequency === "Ежедневно" && active === "Нет"){
result.success = true;
}
else if (response.success && frequency === "Ежедневно" && active === "Да" && (!this.isAddMode() &&
response.collection.getCount() > maxCount) || (this.isAddMode() &&
response.collection.getCount() >= maxCount)) {
result.message = maxCount + ermsg + active;
result.success = false;
}
callback.call(scope || this, result);
}, this);
}, this);
}
},
Ниже по очереди:
- Уже созданные 5 записей;
- при создании 6-ой с "Ежедневно" + "Да" выдаёт ошибку(выводит системную настройку(5), и в конце активность;
- При создании другой записи с другиме полями - ошибку не выводит(как и надо);
- При смене в пред. записи поля на "Ежедневно" - сохраняет (должно выводить ошибку);
- При последующих сохранения изменения записей всё работает корректно(где надо выдаёт ошибку, где не надо - не выдёт).