From 7f5a20aa40c00fea42c68211f311b6b24ad64c9e Mon Sep 17 00:00:00 2001
From: rsanchez <rsanchez@curisit.net>
Date: Mon, 27 Oct 2014 18:17:26 +0000
Subject: [PATCH] #2021 feature - Added frontend validations and confirmations on sensitive actions.

---
 securis/src/main/resources/static/js/licenses.js |  143 +++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 119 insertions(+), 24 deletions(-)

diff --git a/securis/src/main/resources/static/js/licenses.js b/securis/src/main/resources/static/js/licenses.js
index 7617858..6dfe849 100644
--- a/securis/src/main/resources/static/js/licenses.js
+++ b/securis/src/main/resources/static/js/licenses.js
@@ -159,6 +159,53 @@
 			return LIC_STATUSES[status];
 		}
 
+		var _createSuccessCallback = function(actionName, message, _innerCallback) {
+			return function() {
+				_innerCallback && _innerCallback();
+				toaster.pop('success', actionName, message);
+			}
+		}
+		var _createErrorCallback = function(pack, actionName, _innerCallback) {
+			return function(error) {
+	            console.log(error);
+	            _innerCallback && _innerCallback();
+				toaster.pop('error', actionName, $L.get("Error on action '{0}', pack '{1}'. Reason: {2}", actionName, pack.code, $L.get(error.headers('X-SECURIS-ERROR'))));
+			}
+		}
+		this.getPacksList = function(pack, _onsuccess, _onerror) {
+			return packResource.query(_onsuccess, _onerror);
+		}
+		this.activate = function(license, _onsuccess, _onerror) {
+			console.log('Activation on license: ' + license.id);
+			var _success = _createSuccessCallback($L.get('Activation'), $L.get("License '{0}' {1} successfully", license.code, $L.get("activated")), _onsuccess);
+			var _error = _createErrorCallback(license, $L.get('Activation'), _onerror);
+			licenseResource.activate({id: license.id}, _success, _error);
+		}
+		this.block = function(license, _onsuccess, _onerror) {
+			console.log('Block on license: ' + license.id);
+			var _success = _createSuccessCallback($L.get('Block'), $L.get("License '{0}' {1} successfully", license.code, $L.get("blocked")), _onsuccess);
+			var _error = _createErrorCallback(license, $L.get('Block'), _onerror);
+			licenseResource.putonhold({id: license.id}, _success, _error);
+		}
+		this.unblock = function(license, _onsuccess, _onerror) {
+			console.log('Unblock on license: ' + license.id);
+			var _success = _createSuccessCallback($L.get('Unblock'), $L.get("License '{0}' {1} successfully", license.code, $L.get("unblocked")), _onsuccess);
+			var _error = _createErrorCallback(license, $L.get('Unblock'), _onerror);
+			licenseResource.putonhold({id: license.id}, _success, _error);
+		}
+		this.cancel = function(license, extra_data, _onsuccess, _onerror) {
+			console.log('Cancellation on license: ' + license.id);
+			var _success = _createSuccessCallback($L.get('Cancellation'), $L.get("License '{0}' {1} successfully", license.code, $L.get("cancelled")), _onsuccess);
+			var _error = _createErrorCallback(license, $L.get('Cancellation'), _onerror);
+			var params = angular.extend({id: license.id}, extra_data);
+			licenseResource.cancel(params, _success, _error);
+		}
+		this.delete = function(license, _onsuccess, _onerror) {
+			console.log('Delete on license: ' + license.id);
+			var _success = _createSuccessCallback($L.get('Deletion'), $L.get("License '{0}' {1} successfully", license.code, $L.get("deleted")), _onsuccess);
+			var _error = _createErrorCallback(license, $L.get('Deletion'), _onerror);
+			licenseResource.delete({licenseId: license.id}, _success, _error);
+		}
 	}]);
 	
 	app.directive('fileLoader',
@@ -217,6 +264,9 @@
         				$scope.mandatoryFieldErrorMsg = function(displayname) {
         					return $L.get("'{0}' is required.", $L.get(displayname));
         				}
+        				$scope.field1ShouldBeGreaterThanField2 = function(field1, field2) {
+        					return $L.get("{0} should be greater than {1}", $L.get(field1), $L.get(field2));
+        				}
         				$scope.ellipsis = function(txt, len) {
         					if (!txt || txt.length <= len) return txt;
         					return txt.substring(0, len) + '...';
@@ -269,36 +319,79 @@
 				$scope.packs = Packs.getPacksList();
 				
 				$scope.save = function() {
-					if ($scope.pack.num_activations > 0) {
-						BootstrapDialog.confirm($L.get("The pack '{0}' has active licenses, Do you want to modify it ?", $scope.pack.code), function(answer){
-	                        if (answer) {
-	                        	Packs.savePackData($scope.pack, $scope.isNew, function() {
-	                			    if (!$scope.isNew) $scope.showForm = false;
-	                				$scope.packs = Packs.getPacksList();
-	                        	});
-	                        }
-	                    });
-					} else {
-                    	Packs.savePackData($scope.pack, $scope.isNew, function() {
-            			    if (!$scope.isNew) {
-            			    	$scope.showForm = false;
-            			    } else {
-            			    	$scope.newPack();
-            			    }
-            				$scope.packs = Packs.getPacksList();
-                    	});
-				    }
+                	Packs.savePackData($scope.pack, $scope.isNew, function() {
+        			    if (!$scope.isNew) {
+        			    	$scope.showForm = false;
+        			    } else {
+        			    	$scope.newPack();
+        			    }
+        				$scope.packs = Packs.getPacksList();
+                	});
 				}
 
 				/**
 				 * Execute an action over the pack, activation, onhold, cancellation
 				 */
 				$scope.execute = function(action, pack) {
-					
-					Packs[action](pack || $scope.pack, function() {
-					    if (!$scope.isNew) $scope.showForm = false;
-						$scope.packs = Packs.getPacksList();
-					});
+					var _execute = function(extra_data) {
+						Packs[action](pack || $scope.pack, extra_data, function() {
+						    if (!$scope.isNew) $scope.showForm = false;
+							$scope.packs = Packs.getPacksList();
+						});
+					}
+					if (action === 'delete') {
+						BootstrapDialog.confirm($L.get("The pack '{0}' will be deleted, are you sure ?", $scope.pack.code), function(answer) {
+	                        if (answer) {
+	                        	_execute();
+	                        }
+	                    });
+					} else {
+						if (action === 'cancel') {
+							BootstrapDialog.show({
+								title: $L.get("Pack cancellation"),
+								type: BootstrapDialog.TYPE_DANGER,
+								message: function(dialog) {
+									var $content = $('<div></div>');
+									var $message = $('<div></div>');
+					                var pageToLoad = dialog.getData('pageToLoad');
+					                $message.append($('<label/>').text($L.get("The pack '{0}' and all its licenses will be cancelled, this action cannot be undone", $scope.pack.code)));
+					                $content.append($message);
+
+									var $message = $('<div style="margin-top:10pt;"/>');
+					                var pageToLoad = dialog.getData('pageToLoad');
+					                $message.append($('<label style="margin-right:5pt;"/>').text($L.get("Cancellation reason:") + " "));
+					                $message.append($('<input type="text" style="width:100%;" maxlength="512" id="_cancellation_reason"/>'));
+					                $content.append($message);
+					            	return $content;								 
+								},
+								closable: true,
+								buttons: [{
+							        id: 'btn-cancel',   
+							        label: $L.get('Close'),
+							        cssClass: 'btn-default', 
+							        action: function(dialogRef) {    
+							            dialogRef.close();
+							        }
+							    }, {
+							        id: 'btn-ok',   
+							        label: $L.get('Cancel pack'),
+							        cssClass: 'btn-primary', 
+							        action: function(dialogRef){
+							        	var reason = $('#_cancellation_reason').val();
+							        	console.log('Ready to cancel pack, by reason: ' + reason);
+							            if (!reason) {
+							            	$('#_cancellation_reason').focus();
+							            } else {
+							            	_execute({reason: reason});
+								            dialogRef.close();
+							            }
+							        }
+							    }]
+							});
+						} else {
+							_execute();
+						}
+					}
 				}
 				
 
@@ -309,6 +402,8 @@
                             license_preactivation: true,
                             status: 'CR',
                             num_licenses: 1,
+                            init_valid_date: new Date(),
+                            default_valid_period: 30,
                             license_type_id: null,
                             organization_id: null  //!$scope.refs.organization_id || !$scope.refs.organization_id.length ? null : $scope.refs.organization_id[0].id
 					}

--
Gitblit v1.3.2