Commit b0a44056 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Replantea detalles de activity, project y program

Adapta base común para estas vistas administrativas, aprovechando la
base general de las otras vistas de detalle.

Recupera los listados de contactos, documentos, organizaciones y
plataformas para las entidades de proyecto y programa. Fix #91.
parent f2e4a0dd
Loading
Loading
Loading
Loading
+103 −0
Original line number Diff line number Diff line
define([
	'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/detail/_Detail'
], function(
	declare
	, lang
	, _Detail
) {

	return declare(_Detail, {
		//	summary:
		//		Base de vistas de detalle para las entidades actividad y superiores.

		constructor: function(args) {

			this.config = {
				documentTarget: 'documents',
				contactTarget: 'contacts',
				organisationTarget: 'organisations',
				platformTarget: 'platforms'
			};

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

		_setMainConfigurations: function() {

			this.inherited(arguments);

			this.widgetConfigs = this._merge([this.widgetConfigs || {}, {
				organisationList: this._getOrganisationsConfig(),
				platformList: this._getPlatformsConfig(),
				contactList: this._getContactsConfig(),
				documentList: this._getDocumentsConfig()
			}]);
		},

		_clearModules: function() {

			this.inherited(arguments);

			this._publish(this._getWidgetInstance('contactList').getChannel('CLEAR'));
			this._publish(this._getWidgetInstance('documentList').getChannel('CLEAR'));
			this._publish(this._getWidgetInstance('platformList').getChannel('CLEAR'));
			this._publish(this._getWidgetInstance('organisationList').getChannel('CLEAR'));
		},

		_itemAvailable: function(res) {

			this.inherited(arguments);

			var data = res?.data;

			if (!data) {
				return;
			}

			let documents = data.documents;
			documents && this._dataToDocuments(documents);

			let contacts = data.contacts;
			contacts && this._dataToContacts(contacts);

			let platforms = data.platforms;
			platforms && this._dataToPlatforms(platforms);

			let organisations = data.organisations;
			organisations && this._dataToOrganisations(organisations);
		},

		_dataToDocuments: function(dataItems) {

			dataItems.forEach(function(dataItem) {

				this._injectEntityData(dataItem.document, this.documentTarget);
			}, this);
		},

		_dataToContacts: function(dataItems) {

			this._injectEntityData(dataItems, this.contactTarget);
		},

		_dataToPlatforms: function(dataItems) {

			this._injectEntityData(dataItems, this.platformTarget);
		},

		_dataToOrganisations: function(dataItems) {

			this._injectEntityData(dataItems, this.organisationTarget);
		},

		_injectEntityData: function(entityData, entityTarget) {

			this._emitEvt('INJECT_DATA', {
				data: entityData,
				target: entityTarget
			});
		}
	});
});
+98 −0
Original line number Diff line number Diff line
define([
	'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/detail/_DetailAdministrative'
], function(
	declare
	, lang
	, _DetailAdministrative
) {

	return declare(_DetailAdministrative, {
		//	summary:
		//		Base de vistas de detalle para las entidades proyecto y programa.

		constructor: function(args) {

			this.config = {
				_descendantTargetLocal: 'administrativeDescendants'
			};

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

		_setMainConfigurations: function() {

			this.inherited(arguments);

			let additionalConfig = this._getAdditionalDescendantListConfig();

			this.widgetConfigs = this._merge([{
				info: {},
				descendantList: this._getActivitiesOrProjectsConfig(additionalConfig)
			}, this.widgetConfigs || {}]);
		},

		_clearModules: function() {

			this.inherited(arguments);

			this._publish(this._getWidgetInstance('descendantList').getChannel('CLEAR'));
		},

		_refreshModules: function() {

			this.inherited(arguments);

			this._prepareDescendantTarget();
			this._refreshDescendantData();
		},

		_prepareDescendantTarget: function() {

			this.target[1] = lang.replace(this._descendantTargetBase, {
				id: this.pathVariableId
			});
		},

		_refreshDescendantData: function() {

			let widgetInstance = this._getWidgetInstance('descendantList');

			this._publish(widgetInstance.getChannel('UPDATE_TARGET'), {
				target: this.target[1]
			});

			this._requestDescendantData();
		},

		_requestDescendantData: function() {

			this._emitEvt('REQUEST', {
				method: 'POST',
				target: this.target[1],
				action: '_search',
				query: {
					returnFields: this._descendantFields
				}
			});
		},

		_dataAvailable: function(res, resWrapper) {

			if (resWrapper.target !== this.target[1] || !res?.data) {
				return;
			}

			this._dataToDescendantList(res.data);
		},

		_dataToDescendantList: function(data) {

			this._emitEvt('INJECT_DATA', {
				data: data,
				target: this._descendantTargetLocal
			});
		}
	});
});
+4 −2
Original line number Diff line number Diff line
@@ -74,9 +74,11 @@ define([

			this.inherited(arguments);

			if (resWrapper.target === this.target[1] && res?.data) {
				this._dataToActivities(res.data);
			if (resWrapper.target !== this.target[1] || !res?.data) {
				return;
			}

			this._dataToActivities(res.data);
		},

		_dataToActivities: function(data) {
+53 −55
Original line number Diff line number Diff line
define([
	'src/redmicConfig'
	, 'app/designs/details/main/_ActivityBase'
	, 'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/component/base/_ExternalConfig'
	, 'src/detail/_DetailAdministrative'
	, 'src/detail/_GenerateReport'
	, 'src/detail/activity/_ActivityLayoutWidget'
	, 'app/designs/details/_AddWidgetSelector'
	, 'templates/ActivityInfo'
], function(
	redmicConfig
	, _ActivityBase
	, declare
	, lang
	, _ExternalConfig
	, _DetailAdministrative
	, _GenerateReport
	, _ActivityLayoutWidget
	, _AddWidgetSelector
	, TemplateInfo
	, ActivityInfoTemplate
) {

	return declare([_ActivityBase, _AddWidgetSelector, _ActivityLayoutWidget, _ExternalConfig, _GenerateReport], {
	return declare([_DetailAdministrative, _ActivityLayoutWidget, _ExternalConfig, _GenerateReport], {
		//	summary:
		//		Vista de detalle de actividades.

		constructor: function(args) {

			this.config = {
				activityTarget: redmicConfig.services.activity,
				target: redmicConfig.services.activity,
				reportService: 'activity',
				ancestorsTarget: redmicConfig.services.activityAncestors,
				infoTarget: 'infoWidgetTarget',
				externalConfigPropName: 'detailLayouts.activity'
				externalConfigPropName: 'detailLayouts.activity',
				pathParent: redmicConfig.viewPaths.activityCatalog,
				templateInfo: ActivityInfoTemplate,
				_infoTarget: 'infoWidgetTarget'
			};

			lang.mixin(this, this.config, args);
@@ -39,25 +39,11 @@ define([

		_setMainConfigurations: function() {

			this.target = [this.activityTarget];

			this.viewPathsWidgets = {
				organisations: redmicConfig.viewPaths.organisationDetails,
				platforms: redmicConfig.viewPaths.platformDetails,
				documents: redmicConfig.viewPaths.bibliographyDetails
			};

			this.pathParent = redmicConfig.viewPaths.activityCatalog;
			this.inherited(arguments);

			this.widgetConfigs = this._merge([{
				info: this._getInfoConfig({
					template: TemplateInfo
				}),
				spatialExtension: this._getSpatialExtensionConfig(),
				organisationList: this._getOrganisationsConfig(),
				platformList: this._getPlatformsConfig(),
				contactList: this._getContactsConfig(),
				documentList: this._getDocumentsConfig()
				info: {},
				spatialExtension: this._getSpatialExtensionConfig()
			}, this.widgetConfigs || {}]);
		},

@@ -67,6 +53,15 @@ define([
			this._onEvt('ME_OR_ANCESTOR_HIDDEN', lang.hitch(this, this._onActivityDetailsHidden));
		},

		_refreshModules: function() {

			this.inherited(arguments);

			this._publish(this._getWidgetInstance('info').getChannel('UPDATE_TARGET'), {
				target: this._infoTarget
			});
		},

		_onGotExternalConfig: function(evt) {

			var configValue = evt[this.externalConfigPropName];
@@ -92,18 +87,28 @@ define([

		_itemAvailable: function(res) {

			var path = res.data.path;
			this.inherited(arguments);

			this._activityData = res.data;
			this._requestAncestorsData(res);

			this._ancestorsTarget = lang.replace(this.ancestorsTarget, { path: path });
			this._addTargetToArray(this._ancestorsTarget);
			this._prepareSpatialExtension();

			this._emitEvt('INJECT_DATA', {
				data: this._activityData,
				target: this.infoTarget
			this._emitEvt('GET_EXTERNAL_CONFIG', {
				propertyName: this.externalConfigPropName
			});

			this._prepareCustomWidgets();
		},

		_requestAncestorsData: function(res) {

			this._ancestorsTarget = lang.replace(this.ancestorsTarget, {
				path: res?.data?.path
			});

			this._addTargetToArray(this._ancestorsTarget);

			this._emitEvt('REQUEST', {
				method: 'POST',
				target: this._ancestorsTarget,
@@ -112,16 +117,19 @@ define([
					returnFields: ['id', 'path', 'name']
				}
			});
		},

			this._prepareSpatialExtension();
		_prepareSpatialExtension: function() {

			this._emitEvt('GET_EXTERNAL_CONFIG', {
				propertyName: this.externalConfigPropName
			});
			var wkt = this._activityData.spatialExtension;
			if (!wkt) {
				return;
			}

			this._prepareCustomWidgets();
			var mapInstance = this._getWidgetInstance('spatialExtension');
			this._once(mapInstance.getChannel('BBOX_CHANGED'), lang.hitch(this, this._showSpatialExtension, wkt));

			this.inherited(arguments);
			this._showWidget('spatialExtension');
		},

		_dataAvailable: function(res) {
@@ -133,25 +141,15 @@ define([

			this._activityData.ancestors = ancestors;

			this._emitEvt('INJECT_DATA', {
				data: this._activityData,
				target: this.infoTarget
			});

			this._updateInteractive();
			this._dataToInfo();
		},

		_prepareSpatialExtension: function() {

			var wkt = this._activityData.spatialExtension;
			if (!wkt) {
				return;
			}

			var mapInstance = this._getWidgetInstance('spatialExtension');
			this._once(mapInstance.getChannel('BBOX_CHANGED'), lang.hitch(this, this._showSpatialExtension, wkt));
		_dataToInfo: function() {

			this._showWidget('spatialExtension');
			this._emitEvt('INJECT_DATA', {
				data: this._activityData,
				target: this._infoTarget
			});
		},

		_showSpatialExtension: function(wkt) {
@@ -171,7 +169,7 @@ define([

		_onActivityDetailsHidden: function() {

			this.target = [this.activityTarget];
			this.target = [redmicConfig.services.activity];

			if (this._lastWktLayer) {
				var mapInstance = this._getWidgetInstance('spatialExtension');
+16 −42
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ define([
	'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/detail/_GenerateReport'
	, 'app/designs/details/main/_DetailsBase'
	, 'src/detail/_DetailAdministrativeAncestor'
	, 'src/redmicConfig'
	, 'templates/ProgramInfo'
	, 'templates/ProjectList'
@@ -10,13 +10,13 @@ define([
	declare
	, lang
	, _GenerateReport
	, _DetailsBase
	, _DetailAdministrativeAncestor
	, redmicConfig
	, TemplateInfo
	, TemplateProjects
	, ProgramInfoTemplate
	, ProjectListTemplate
) {

	return declare([_DetailsBase, _GenerateReport], {
	return declare([_DetailAdministrativeAncestor, _GenerateReport], {
		//	summary:
		//		Vista de detalle de programas.

@@ -24,50 +24,24 @@ define([

			this.config = {
				target: redmicConfig.services.program,
				activitiesTargetBase: redmicConfig.services.projectProgram,
				reportService: 'program',
				pathParent: redmicConfig.viewPaths.programCatalog
				pathParent: redmicConfig.viewPaths.programCatalog,
				templateInfo: ProgramInfoTemplate,
				_descendantTargetBase: redmicConfig.services.projectProgram,
				_descendantFields: redmicConfig.returnFields.project
			};

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

		_setMainConfigurations: function() {
		_getAdditionalDescendantListConfig: function() {

			this.target = [this.target];

			this.widgetConfigs = this._merge([{
				info: this._getInfoConfig({
					template: TemplateInfo,
					target: this.target[0]
				}),
				projectList: this._getActivitiesOrProjectsConfig({
			return {
				title: 'projects',
					target: this.activityTarget,
					template: TemplateProjects,
					href: redmicConfig.viewPaths.projectDetails,
					height: 6
				})
			}, this.widgetConfigs || {}]);
		},

		_getActivityTargetData: function() {

			this._emitEvt('REQUEST', {
				method: 'POST',
				target: this.target[1],
				action: '_search',
				query: {
					returnFields: redmicConfig.returnFields.project
				}
			});
		},

		_dataAvailable: function(res, resWrapper) {

			if (resWrapper.target === this.target[1]) {
				this._dataToActivities(res);
			}
				target: this.descendantTarget,
				template: ProjectListTemplate,
				href: redmicConfig.viewPaths.projectDetails
			};
		}
	});
});
Loading