define("UsrGroupSections1Page", [], function() {
return {
entitySchemaName: "UsrGroupSections",
messages: {},
attributes: {
/* Атрибут, который хранит текущее количество активных ежедневных секций. */
"responseCollectionTrainings": {
"dataValueType": Terrasoft.DataValueType.INTEGER,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},
/* Атрибут, который хранит значение системной настройки. */
"maximumDailyActiveSections": {
"dataValueType": Terrasoft.DataValueType.INTEGER,
"type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
}
},
methods: {
/* Запускается при загрузке схемы страницы и вызывает метод подсчета текущего количества активных ежедневных секций и метод считывания значения системной настройки. */
onEntityInitialized: function(){
this.callParent(arguments);
this.getPeriodicityActiveNumber();
this.getMaximumDailyActiveSections();
},
/* Вычисляет текущее количество активных ежедневных секций и записывает полученное значение в атрибут "responseCollectionTrainings". */
getPeriodicityActiveNumber: function() {
var periodicity = "Ежедневно";
var esqPeriodicity = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrGroupSections"
});
esqPeriodicity.addColumn("UsrName");
var groupFilters = this.Ext.create("Terrasoft.FilterGroup");
var filterPerodicity = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UsrPeriodicity.Name", periodicity);
var thisId = this.get("Id");
var filterId = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.NOT_EQUAL, "Id", thisId);
var filterIsActive = this.Terrasoft.createColumnFilterWithParameter(this.Terrasoft.ComparisonType.EQUAL, "UsrIsActive", true);
groupFilters.addItem(filterPerodicity);
groupFilters.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
groupFilters.addItem(filterIsActive);
groupFilters.logicalOperation = this.Terrasoft.LogicalOperatorType.AND;
groupFilters.addItem(filterId);
esqPeriodicity.filters.add(groupFilters);
esqPeriodicity.getEntityCollection(function(result) {
if (!result.success) {
this.showInformationDialog("Request error");
return;
}
else {
var lengthCollection = result.collection.collection.length;
this.set("responseCollectionTrainings", lengthCollection);
}
}, this);
},
/* Добавляет валидацию к полю "Периодичность". При изменении данного поля либо сохранении записи будет вызываться метод-валидатор. */
setValidationConfig: function() {
this.callParent(arguments);
this.addColumnValidator("UsrPeriodicity", this.periodicityValidator);
},
/* Метод-валидатор — если секция ежедневная, сравнивает текущее количество активных ежедневных секций с системной настройкой "GymsNumber" и в случае превышения добавляет в поле "Периодичность" предупреждающее сообщение. Сохранение записи в таком случае невозможно. */
periodicityValidator: function() {
var invalidMessage= "";
var periodicity = this.get("UsrPeriodicity").displayValue;
if (periodicity==="Daily") {
var isActive = this.get("UsrIsActive");
var myVariable = this.get("maximumDailyActiveSections");
var lengthCollection = this.get("responseCollectionTrainings");
if (lengthCollection >= myVariable && isActive) {
invalidMessage = "The number of gyms is limited. No more than " + myVariable + " daily trainings.";
}
}
else {
invalidMessage = "";
}
return {
invalidMessage: invalidMessage
};
},
/* Получает значение системной настройки "GymsNumber". */
getMaximumDailyActiveSections: function() {
var myVariable;
var callback = function(value) {
myVariable = value;
};
this.Terrasoft.SysSettings.querySysSettingsItem("GymsNumber", callback, this);
if (myVariable === undefined) {
return;
}
else {
this.set("maximumDailyActiveSections", myVariable);
}
}
},
modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
/* Без изменений. */
details: /**SCHEMA_DETAILS*/{
// …
}/**SCHEMA_DETAILS*/,
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
/* Без изменений. */
diff: /**SCHEMA_DIFF*/[
// …
]/**SCHEMA_DIFF*/
};
});