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*/
    };
});