Commit 5833458c authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Estrena vista unificada de catálogo de actividades

Migra desde main de diseño con la lógica relativa a activity hacia nueva
vista con su lógica, común a parte pública y administrativa. Se
gestionan los permisos de qué se puede mostrar en tiempo de ejecución,
en lugar de generar 2 vistas independientes. Sólo se importa la
funcionalidad relativa a la edición si el usuario tiene permisos
suficientes para ello.

Simplifica las antiguas vistas al máximo para simplemente importar a la
nueva, se eliminará cuando se migre a las nuevas rutas.

Controla casos de error para ser menos vulnerable a los entresijos del
ciclo de vida.
parent 2984e045
Loading
Loading
Loading
Loading
+136 −0
Original line number Diff line number Diff line
define([
	"app/designs/base/_Main"
	'app/designs/base/_Main'
	, 'app/base/views/extensions/_AddCompositeSearchInTooltipFromTextSearch'
	, "app/designs/textSearchFacetsList/Controller"
	, "app/designs/textSearchFacetsList/Layout"
	, 'app/designs/textSearchFacetsList/Controller'
	, 'app/designs/textSearchFacetsList/Layout'
	, 'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/catalog/activity/_ActivityEdition'
	, 'src/component/browser/_Select'
	, 'src/component/browser/bars/Order'
	, 'src/component/browser/bars/SelectionBox'
	, 'src/component/browser/bars/Total'
	, 'src/redmicConfig'
	, "dojo/_base/declare"
	, "dojo/_base/lang"
	, "templates/ActivityList"
	, "src/component/browser/_Select"
	, "src/component/browser/bars/SelectionBox"
	, "src/component/browser/bars/Order"
	, "src/component/browser/bars/Total"
	, 'src/util/Credentials'
	, 'templates/ActivityList'
], function(
	_Main
	, _AddComposite
	, Controller
	, Layout
	, redmicConfig
	, declare
	, lang
	, templateList
	, _ActivityEdition
	, _Select
	, SelectionBox
	, Order
	, SelectionBox
	, Total
	, redmicConfig
	, Credentials
	, templateList
) {
	return declare([Layout, Controller, _Main, _AddComposite], {

	var declareItems = [Layout, Controller, _Main, _AddComposite];

	if (Credentials.userIsEditor()) {
		declareItems.push(_ActivityEdition);
	}

	return declare(declareItems, {
		//	summary:
		//		Extensión para establecer la configuración de las vistas de activity.
		//	description:
		//
		//		Vista de catálogo de actividades.

		constructor: function(args) {

			this.config = {
				browserExts: [_Select],
				title: this.i18n.activities
				title: this.i18n.activitiesCatalogView,
				ownChannel: "activitiesCatalog",

				mask: {"download":{}},
				reportService: "activity",

				activityTarget: redmicConfig.services.activity,
				selectionTarget: redmicConfig.services.activity,
				activityProjectTarget: redmicConfig.services.activityProject,
				perms: null,

				browserExts: [_Select]
			};

			lang.mixin(this, this.config, args);

			this.target = this.activityTarget;
		},

		_setMainConfigurations: function() {
@@ -50,7 +71,18 @@ define([
			}, this.filterConfig || {}]);

			this.browserConfig = this._merge([{
				selectionTarget: this.selectionTarget,
				template: templateList,
				rowConfig: {
					buttonsConfig: {
						listButton: [{
							icon: "fa-info-circle",
							btnId: "details",
							title: "info",
							href: this.viewPaths.activityCatalogDetails
						}]
					}
				},
				bars: [{
					instance: Total
				},{
@@ -61,12 +93,12 @@ define([
				}],
				orderConfig: {
					options: [
						{value: "name"},
						{value: "code"},
						{value: "activityType.name", label: this.i18n.activityType},
						{value: "startDate"},
						{value: "endDate"},
						{value: "updated"}
						{value: 'name'},
						{value: 'code'},
						{value: 'activityType.name', label: this.i18n.activityType},
						{value: 'startDate'},
						{value: 'endDate'},
						{value: 'updated'}
					]
				}
			}, this.browserConfig || {}]);
@@ -78,6 +110,27 @@ define([
			this.textSearchConfig = this._merge([{
				showExpandIcon: true
			}, this.textSearchConfig || {}]);
		},

		_setOwnCallbacksForEvents: function() {

			this._onEvt('CONNECT', this._createTarget);
		},

		_createTarget: function() {

			var target = this.activityTarget;

			if (this.pathVariableId && Number.isInteger(parseInt(this.pathVariableId, 10))) {
				target = lang.replace(this.activityProjectTarget, {
					id: this.pathVariableId
				});
			}

			this._publish(this.getChannel('UPDATE_TARGET'), {
				target: target,
				refresh: true
			});
		}
	});
});
+115 −0
Original line number Diff line number Diff line
define([
	'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'dojo/aspect'
	, 'app/base/views/extensions/_EditionWizardView'
], function(
	declare
	, lang
	, aspect
	, _EditionWizardView
) {

	return declare(_EditionWizardView, {
		//	summary:
		//		Extensión de vista de catálogo de actividades para añadir funcionalidad relativa a la edición de
		//		registros.

		constructor: function(args) {

			this.config = {
				addPath: this.viewPaths.activityAdd
			};

			lang.mixin(this, this.config, args);

			aspect.after(this, '_setConfigurations', lang.hitch(this, this._setActivityEditionConfigurations));
			aspect.before(this, '_setBrowserButtons', lang.hitch(this, this._setActivityEditionBrowserButtons));
		},

		_setActivityEditionConfigurations: function() {

			if (!this.listButtonsEdition) {
				console.warn('Tried to add activity load data button, but edition buttons config was not found!');
				return;
			}

			this.listButtonsEdition.push({
				icon: 'fa-keyboard-o',
				btnId: 'goToChildren',
				href: [
					lang.replace(this.viewPaths.activityGeoDataAdd, {
						activityid: '{id}',
						id: 'new'
					}),
					this.viewPaths.activityCitation,
					this.viewPaths.activitySurveyStation,
					this.viewPaths.activityObjectCollection,
					this.viewPaths.activityTracking,
					this.viewPaths.activityInfrastructure,
					this.viewPaths.activityArea
				],
				chooseHref: function(item) {

					var activityTypeId = item.activityType.id,
						activityCategory = item.activityCategory,
						validActivityTypeCitation = [2, 10];

					if (activityCategory === 'ci' || validActivityTypeCitation.indexOf(activityTypeId) !== -1) {
						return 1;
					}
					if (activityCategory === 'ft') {
						return 2;
					}
					if (activityCategory === 'oc') {
						return 3;
					}
					if (['at', 'pt', 'tr'].indexOf(activityCategory) !== -1) {
						return 4;
					}
					if (activityCategory === 'if') {
						return 5;
					}
					if (activityCategory === 'ar') {
						return 6;
					}

					return 0;
				},
				title: 'data-loader'
			});
		},

		_setActivityEditionBrowserButtons: function() {

			if (!this.listButtonsEdition) {
				console.warn('Tried to add activity edition buttons, but edition buttons config was not found!');
				return;
			}

			var findIndexCallback = lang.hitch(this, function(button) {

				return button.groupId && button.groupId === this._editionGroupId;
			});

			var editionButtonIndex = this.listButtonsEdition.findIndex(findIndexCallback);

			if (editionButtonIndex !== -1) {
				this.listButtonsEdition[editionButtonIndex].icons.push({
					icon: 'fa-edit',
					btnId: 'edit',
					title: 'edit',
					option: 'default',
					href: this.viewPaths.activityEdit
				},{
					icon: 'fa-copy',
					btnId: 'copy',
					title: 'copy',
					href: this.viewPaths.activityAdd
				});
			} else {
				console.warn('Tried to add activity edition buttons, but edition button group config was not found!');
			}
		}
	});
});
+5 −145
Original line number Diff line number Diff line
define([
	"app/designs/textSearchFacetsList/main/Activity"
	, "app/base/views/extensions/_EditionWizardView"
	, 'src/redmicConfig'
	, "dojo/_base/declare"
	, "dojo/_base/lang"
	, "dojo/aspect"
	'src/catalog/activity/ActivityCatalogView'
], function (
	ActivityMain
	, _EditionWizardView
	, redmicConfig
	, declare
	, lang
	, aspect
	ActivityCatalogView
) {
	return declare([ActivityMain, _EditionWizardView], {
		//	summary:
		//		Vista de Activity.
		//	description:
		//		Muestra la información.

		constructor: function (args) {
			//this.authenticate();

			this.config = {
				addPath: this.viewPaths.activityAdd,
				activityTarget: redmicConfig.services.activity,
				selectionTarget: redmicConfig.services.activity,
				activityProjectTarget: redmicConfig.services.activityProject,
				perms: null
			};

			lang.mixin(this, this.config, args);

			this.target = this.activityTarget;
		},

		_setConfigurations: function() {

			this.browserConfig = this._merge([{
				selectionTarget: this.selectionTarget,
				rowConfig: {
					buttonsConfig: {
						listButton: [{
							groupId: "edition",
							icons: [{
								icon: "fa-edit",
								btnId: "edit",
								title: "edit",
								option: "default",
								href: this.viewPaths.activityEdit
							},{
								icon: "fa-copy",
								btnId: "copy",
								title: "copy",
								href: this.viewPaths.activityAdd
							}]
						},{
							icon: "fa-info-circle",
							btnId: "details",
							title: "info",
							href: this.viewPaths.activityDetails
						},{
							icon: "fa-keyboard-o",
							btnId: "goToChildren",
							href: [
								lang.replace(this.viewPaths.activityGeoDataAdd, {
									activityid: "{id}",
									id: "new"
								}),
								this.viewPaths.activityCitation,
								this.viewPaths.activitySurveyStation,
								this.viewPaths.activityObjectCollection,
								this.viewPaths.activityTracking,
								this.viewPaths.activityInfrastructure,
								this.viewPaths.activityArea
							],
							condition: function(item) {

								return true;
								/*var validActivityType = [2, 10, 6, 31, 32, 7, 13, 19];
								return (item.activityType && validActivityType.indexOf(item.activityType.id) !== -1);*/
							},
							chooseHref: function(item) {

								var activityTypeId = item.activityType.id,
									activityCategory = item.activityCategory,
									validActivityTypeCitation = [2, 10];

								if (activityCategory === "ci" || validActivityTypeCitation.indexOf(activityTypeId) !== -1) {
									return 1;
								}
								if (activityCategory === "ft") {
									return 2;
								}
								if (activityCategory === "oc") {
									return 3;
								}
								if (["at", "pt", "tr"].indexOf(activityCategory) !== -1) {
									return 4;
								}
								if (activityCategory === "if") {
									return 5;
								}
								if (activityCategory === "ar") {
									return 6;
								}

								return 0;
							},
							title: "data-loader"
						}]
					}
				}
			}, this.browserConfig || {}]);

			this.filterConfig = this._merge([{
				initQuery: {
					vFlags: null,
					qFlags: null,
					accessibilityIds: null
				}
			}, this.filterConfig || {}]);
		},

		_setOwnCallbacksForEvents: function() {

			this._onEvt('CONNECT', this._createTarget);
		},

		_createTarget: function() {

			var target = this.activityTarget;

			if (this.pathVariableId && Number.isInteger(parseInt(this.pathVariableId, 10))) {
				target = lang.replace(this.activityProjectTarget, {
					id: this.pathVariableId
				});
			}

			this._publish(this.getChannel('UPDATE_TARGET'), {
				target: target,
				refresh: true
			});
		}
	});
	return ActivityCatalogView;
});
+13 −10
Original line number Diff line number Diff line
@@ -45,14 +45,16 @@ define([

		_addListButtonsEdition: function() {

			var browserRowButtons = this._getBrowserButtons();
			var browserRowButtons = this._getBrowserButtons(),
				buttons;

			if (browserRowButtons && browserRowButtons.length) {
				this._mergeInEditionButtons(browserRowButtons);
				buttons = this._mergeInEditionButtons(browserRowButtons);
			} else {
				this._setBrowserButtons(lang.clone(this.listButtonsEdition));
				buttons = lang.clone(this.listButtonsEdition);
			}

			this._setBrowserButtons(buttons);
			delete this.listButtonsEdition;
		},

@@ -79,6 +81,8 @@ define([
			} else if (this.listButtonsEdition.length) {
				browserRowButtons = browserRowButtons.concat(this.listButtonsEdition);
			}

			return browserRowButtons;
		},

		_getBrowserButtons: function() {
@@ -107,13 +111,12 @@ define([

		_setBrowserButtons: function(listButton) {

			this._setBrowserConfig(this._merge([{
				rowConfig: {
					buttonsConfig: {
						listButton: listButton
					}
			if (!this.browserConfig || !this.browserConfig.rowConfig || !this.browserConfig.rowConfig.buttonsConfig) {
				console.warn('Tried to add edition buttons to browser row config, but base config was not found!');
				return;
			}
			}, this._getBrowserConfig() || {}]));

			this.browserConfig.rowConfig.buttonsConfig.listButton = listButton;
		},

		_mixEditionEventsAndActions: function() {
+4 −42
Original line number Diff line number Diff line
define([
	"app/designs/textSearchFacetsList/main/Activity"
	, 'src/redmicConfig'
	, "dojo/_base/declare"
	, "dojo/_base/lang"
	'src/catalog/activity/ActivityCatalogView'
], function (
	ActivityMain
	, redmicConfig
	, declare
	, lang
	ActivityCatalogView
) {
	return declare(ActivityMain, {
		//	summary:
		//		Vista de Activity Catalog.

		constructor: function (args) {

			this.config = {
				mask: {"download":{}},
				target: redmicConfig.services.activity,
				reportService: "activity",
				title: this.i18n.activitiesCatalogView,
				ownChannel: "activitiesCatalog"
			};

			lang.mixin(this, this.config, args);
		},

		_setConfigurations: function() {

			this.browserConfig = this._merge([{
				rowConfig: {
					buttonsConfig: {
						listButton: [{
							icon: "fa-info-circle",
							btnId: "details",
							title: "info",
							href: this.viewPaths.activityCatalogDetails
						}]
					}
				}
			}, this.browserConfig || {}]);
		}
	});
	return ActivityCatalogView;
});
Loading