--- /dev/null
+/*
+Copyright (c) Igor Barma, Alexandre Desoubeaux, Christian Martel, Eric Brun, Mathieu Amblard, Gwenael Gevet, Pierre Guillot, 2012
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Alexandre Lefevre, Marc Salvat 2014-2016
+ * Copyright Alexandre Desoubeaux, Christian Martel, Cedric Lecarpentier, Marc Salvat, Marc Suarez, Harifetra Ramamonjy 2017
+For licensing, see README.txt or http://www.pentilanero.com (Cecill-C or AGPL or LGPL)
+*/
+Ext.ns("EntSavoie.PopulationFilter");
+EntSavoie.PopulationFilter.PopulationFilter = function (config) {
+ Ext.apply(this, config);
+
+ // Ajoute le texte des erreurs
+ Ext.QuickTips.init();
+ // turn on validation errors beside the field globally
+ Ext.form.Field.prototype.msgTarget = 'side';
+
+ // stock l'id de la filterId
+ this.filterId = null;
+
+
+ // definition des controles
+ this.removeFilterBtn = this.removeFilterBtn || new Ext.Button ({
+ tooltip: this.i18n.PopulationFilter.PopulationFilter.removeFilterBtn.tooltip,
+ iconCls: 'grid-delete',
+ style: "margin-left: 3px;",
+ handler: this.onRemoveFilter,
+ scope: this
+ });
+
+ //record Creator
+ this.valuesRecordCreator = this.valuesRecordCreator || Ext.data.Record.create(["value", "displayText"]);
+
+ //definition des combos
+ this.operatorCombo = this.operatorCombo || new Ext.form.ComboBox({
+ listClass: "applicationManager-portlet",
+ allowBlank: false,
+ value: '=',
+ triggerAction: 'all',
+ fieldLabel: this.i18n.PopulationFilter.PopulationFilter.operatorCombo.fieldLabel,
+ width: 50,
+ autoSelect: false,
+ mode: 'local',
+ store: new Ext.data.SimpleStore({
+ fields: ['value', 'displayText'],
+ data: [['equal', '='], ['except', '!=']]
+ }),
+ valueField: 'value',
+ displayField: 'displayText'
+ });
+
+ this.criteriaCombo = this.criteriaCombo || new Ext.form.ComboBox({
+ listClass: "applicationManager-portlet",
+ triggerAction: 'all',
+ fieldLabel: this.i18n.PopulationFilter.PopulationFilter.criteriaCombo.fieldLabel,
+ emptyText: this.i18n.PopulationFilter.PopulationFilter.criteriaCombo.emptyText,
+ width: 120,
+ autoSelect: false,
+ mode: 'local',
+ store: new Ext.data.SimpleStore({
+ fields: ['value', 'displayText'],
+ data: [['etab', this.i18n.PopulationFilter.PopulationFilter.criteriaCombo.store.data.etab], ['userRoleNat', this.i18n.PopulationFilter.PopulationFilter.criteriaCombo.store.data.userRoleNat], ['classe', this.i18n.PopulationFilter.PopulationFilter.criteriaCombo.store.data.classe]]
+ }),
+ valueField: 'value',
+ displayField: 'displayText'
+ });
+
+ this.valuesStore= this.valuesStore || new Ext.data.JsonStore({
+ fields: ['value', 'displayText']
+ });
+
+ this.valuesCombo = this.valuesCombo || new Ext.form.ComboBox({
+ listClass: "applicationManager-portlet",
+ triggerAction: 'all',
+ fieldLabel: this.i18n.PopulationFilter.PopulationFilter.valuesCombo. fieldLabel,
+ width: 170,
+ autoSelect: false,
+ mode: 'local',
+ store: this.valuesStore,
+ valueField: 'value',
+ displayField: 'displayText',
+ disabled: true
+ });
+
+
+
+ // listeners
+ this.criteriaCombo.on('select', this.onSelectCriteriaCombo, this);
+ this.operatorCombo.on('select', this.onSelectOperatorCombo, this);
+ this.valuesCombo.on('select', this.onSelectValuesCombo, this);
+
+
+ EntSavoie.PopulationFilter.PopulationFilter.superclass.constructor.call(this, {
+ border: false,
+ layout: 'table',
+ layoutConfig: {
+ columns: 4
+ },
+ style: 'margin: 5px;',
+ height: 30,
+ width: 400,
+ items: [
+ this.criteriaCombo,
+ this.operatorCombo,
+ this.valuesCombo,
+ this.removeFilterBtn
+ ]
+ });
+
+
+};
+
+Ext.extend(EntSavoie.PopulationFilter.PopulationFilter, Ext.Panel, {
+ initComponent: function () {
+ EntSavoie.PopulationFilter.PopulationFilter.superclass.initComponent.call(this);
+ },
+
+ clearInterface: function() {
+ this.filterId = null;
+ },
+
+ refreshInterface: function(filterId) {
+ this.clearInterface();
+
+ this.filterId = filterId;
+
+ Ext.Ajax.request({
+ url: this.renderURLAjax+"&jspPage=/ajax/getFilterInfo.jsp",
+ params: {
+ filterId: filterId
+ },
+ scope: this,
+ success: this.onSuccessRefreshInterface,
+ failure: this.onFailureRefreshInterface
+ });
+
+ },
+
+ onSuccessRefreshInterface: function(response, options) {
+ /* Code verifiant le succes de la requete */
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onSuccessRefreshInterface.alert.title, this.i18n.PopulationFilter.PopulationFilter.onSuccessRefreshInterface.alert.msg, function(btn){});
+ }
+ /* Code verifiant le succes de la requete */
+ else {
+ this.criteriaCombo.setValue(backObj.criteria);
+ this.operatorCombo.setValue(backObj.operator);
+
+ //on update le store de ValuesCombo avec les val du Json
+ var storeValues = backObj.values;
+ for(i = 0; i < storeValues.length; i++){
+ var currJson = storeValues[i];
+ this.valuesStore.add(new this.valuesRecordCreator({
+ value: currJson.value,
+ displayText: currJson.displayText
+ }));
+ }
+ this.valuesCombo.setValue(backObj.displayValue);
+ this.valuesCombo.enable();
+ }
+ },
+
+ onFailureRefreshInterface: function(response, options) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onFailureRefreshInterface.alert.title, this.i18n.PopulationFilter.PopulationFilter.onFailureRefreshInterface.alert.msg, function(btn){});
+ },
+
+ //suppressipon d'un filtre
+ onRemoveFilter: function(btn) {
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: "removeFilter",
+ filterId: this.filterId
+ },
+ scope: this,
+ success: this.onSuccessRemoveFilter,
+ failure: this.onFailureRemoveFilter
+ });
+ },
+
+ onSuccessRemoveFilter: function(response, options) {
+ /* Code verifiant le succes de la requete */
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onSuccessRemoveFilter.alert.title, this.i18n.PopulationFilter.PopulationFilter.onSuccessRemoveFilter.alert.msg, function(btn){});
+ }
+ this.destroy();
+ this.filterContainer.doLayout();
+
+ },
+
+ onFailureRemoveFilter: function(response, options) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onFailureRemoveFilter.alert.title, this.i18n.PopulationFilter.PopulationFilter.onFailureRemoveFilter.alert.msg, function(btn){});
+ },
+
+ onSelectCriteriaCombo: function(combobox, record, index){
+ this.valuesCombo.disable();
+ this.onActionChangedCombo("FCriteria", record);
+ },
+
+ onSelectOperatorCombo: function(combobox, record, index){
+ this.onActionChangedCombo("FOperator", record);
+ },
+
+ onSelectValuesCombo: function(combobox, record, index){
+ this.onActionChangedCombo("FValues", record);
+ },
+
+ //modification des combobox
+ onActionChangedCombo: function(typeCombo, record){
+ Ext.Ajax.request({
+ url: this.actionURLAjax,
+ params: {
+ cmd: "editFilter",
+ newValue: record.get('value'),
+ combobox: typeCombo,
+ filterId: this.filterId
+ },
+ scope: this,
+ success: this.onSuccessChangedCombo,
+ failure: this.onFailureChangedCombo
+ });
+ },
+
+ onSuccessChangedCombo: function(response, options) {
+ /* Code verifiant le succes de la requete */
+ var backObj = Ext.decode(response.responseText);
+ if (!backObj.success) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onSuccessChangedCombo.alert.title, this.i18n.PopulationFilter.PopulationFilter.onSuccessChangedCombo.alert.msg, function(btn){});
+ }else{
+ if (backObj.action == "updateValues") {
+ //on vide le store courant
+ this.valuesStore.removeAll();
+ //on update le store de ValuesCombo avec les val du Json
+ var storeValues = backObj.json;
+ for(i = 0; i < storeValues.length; i++){
+ var currJson = storeValues[i];
+ this.valuesStore.add(new this.valuesRecordCreator({
+ value: currJson.value,
+ displayText: currJson.displayText
+ }));
+ }
+ this.valuesCombo.reset();
+ this.valuesCombo.enable();
+ }
+ }
+ },
+
+ onFailureChangedCombo: function(response, options) {
+ Ext.MessageBox.alert(this.i18n.PopulationFilter.PopulationFilter.onFailureChangedCombo.alert.title, this.i18n.PopulationFilter.PopulationFilter.onFailureChangedCombo.alert.msg, function(btn){});
+ }
+
+
+});