Jira Code: OSI -61
Created the UI for login and signup page to give access for existing customer and a new customer in site builder.
HTML PART
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Fav and touch icons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.ico">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.ico">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.ico">
<link rel="apple-touch-icon-precomposed" href="ico/apple-touch-icon-57-precomposed.ico">
<link rel="shortcut icon" href="assets/ico/favicon.ico">
<title>AQUVERSE® | Login</title>
<!-- Bootstrap core CSS -->
<link href="assets/bootstrap/css/bootstrap.css" rel="stylesheet">
<!-- Custom styles for this template -->
<link href="assets/css/style.css" rel="stylesheet">
<link href="assets/css/skin-6.css" rel="stylesheet">
<link href="assets/css-custom/store-custom.css" rel="stylesheet">
<!-- Just for debugging purposes. -->
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->
<!-- include pace script for automatic web page progress bar -->
<style type="text/css">
.btn btn-primary {
background-color: #f4511e;
border: none;
color: white;
padding: 7px 10px;
text-align: center;
font-size: 16px;
margin: 4px 2px;
opacity: 1;
transition: 0.3s;
}
#btn {
background-color: #3498db;
border: none;
color: white;
padding: 7px 10px;
text-align: center;
font-size: 15px;
margin: 4px 2px;
opacity: 1;
transition: 0.3s;
}
.btn btn-primary:hover {
opacity: 0.6
}
#btn:hover {
opacity: 0.6
}
a:link {
color: #454545;
}
/* visited link */
a:visited {
color: #34495E;
}
/* mouse over link */
a:hover {
color: red;
}
</style>
<script>
paceOptions = {
elements: true
};
</script>
<script src="assets/js/pace.min.js"></script>
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
<script src="assets/js/jquery/jquery-2.1.3.min.js"></script>
<script src="assets/bootstrap/js/bootstrap.min.js"></script>
<!-- include validate.js // jquery plugin -->
<script src="assets/js/jquery.validate.js"></script>
<!-- include global content load js -->
<script src="assets/js-custom/load-global-functions.js"></script>
<script src="assets/js-custom/addon-lib.js"></script>
<script src="assets/js-custom/login-page.js"></script>
<!--Custom CSS for login page-->
<style>
</style>
</head>
<body>
<!-- Fixed navbar start -->
<div class="navbar navbar-tshop navbar-fixed-top megamenu" role="navigation">
<div class="navbar-top">
<div class="container">
<div class="row">
<div class="col-lg-6 col-sm-6 col-xs-6 col-md-6">
<div class="pull-left ">
<ul class="userMenu ">
<li class="phone-number">
<a href="callto:+18558928231">
<span> <i class="glyphicon glyphicon-phone-alt "></i></span>
<span class="hidden-xs" style="margin-left:5px"> +1-855-892-8231 </span>
</a>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<!--/.navbar-top-->
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only"> Toggle navigation </span>
<span class="icon-bar"> </span>
<span class="icon-bar"> </span>
<span class="icon-bar"> </span>
</button>
<a class="navbar-brand " href="index.html"> <img src="images/logo.png" alt="AQUVERSE LOGO" style="height:35px;"> </a>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="login.html"> Login </a></li>
</ul>
</div>
<!--/.nav-collapse -->
</div>
<!--/.container -->
</div>
<!-- /.Fixed navbar -->
<div class="container main-container headerOffset">
<div class="row">
<div class="breadcrumbDiv col-lg-12">
<ul class="breadcrumb">
<li><a href="index.html">Home</a></li>
<li class="active"> Authentication</li>
</ul>
</div>
</div>
<div class="row">
<div class="col-lg-10 col-md-10 col-sm-10">
<h1 class="section-title-inner"><span><i class="fa fa-lock"></i> Authentication</span></h1>
<div class="row userInfo">
<!-- EMPLOYEE LOGIN -->
<div class="col-xs-12 col-sm-6">
<h2 class="block-title-1"><span>CUSTOMER LOGIN</span></h2>
<form role="form" id="employeeForm" autocomplete="off">
<div class="form-group">
<label>Email address</label>
<input title="Please enter valid Email ID" type="email" class="form-control" placeholder="Enter Your Work Email" required autocomplete="new-email">
</div>
<div class="form-group">
<label>Password</label>
<input title="Please enter valid Password" type="password" class="form-control" placeholder="Password" onkeypress="employeeLogin(event,'onkeypress');" minlength="3" required autocomplete="new-password">
</div>
<div class="error">
</div>
<div class="form-group">
<!-- <p><a title="Setup Account" href="forgot-password.html?type=newuser">Setup Account</a></p> -->
<p><a title="Forgot Password?" href="forgot-password.html?type=changepassword">Setup Account/Forgot Password ? </a></p>
</div>
<button type="button" class="btn btn-primary" onclick="employeeLogin(event,'onclick');">
<i class="fa fa-sign-in"></i> LOGIN
</button>
<button type="button" id="btn" class="btn btn-primary" onclick="continueAsGuest(event,'onclick');">
<i class="fa fa-sign-in"></i> CONTINUE SHOPPING
</button>
</form>
</div>
<div class="col-xs-12 col-sm-6">
<h2 class="block-title-1"><span>CUSTOMER SIGN UP</span></h2>
<form role="form" id="customerSignupForm" autocomplete="">
<div class="form-group">
<label>First name</label>
<input title="Please enter your first name" type="name" id="Fname" class="form-control" placeholder="Enter your first name" required autocomplete="">
</div>
<div class="form-group">
<label>Last name</label>
<input title="Please enter your last name" type="name" id="Lname" class="form-control" placeholder="Enter your last name" required autocomplete="">
</div>
<div class="form-group">
<label>Email address</label>
<input title="Please enter valid Email ID" type="email" id="custEmail" class="form-control" placeholder="Enter Your Work Email" pattern=".+@globex.com" size="30" required autocomplete="new-email">
</div>
<div class="form-group">
<label>Password</label>
<input title="Please enter valid Password" type="password" id="custPassword" class="form-control" placeholder="Password" onkeypress="customerSignUp(event,'onkeypress');" minlength="4" required autocomplete="new-password">
</div>
<div class="error">
</div>
<button type="button" id="btn1" class="btn btn-primary" onclick="customerSignUp(event,'onclick');">
<i class="fa fa-sign-in"></i> SIGN UP
</button>
</form>
</div>
</div>
<!--/row end-->
</div>
<div class="col-lg-3 col-md-3 col-sm-5"> </div>
</div>
<!--/row-->
<div style="clear:both"></div>
<div style="clear:both"></div>
</div>
<!-- /.main-container -->
<div class="gap"></div>
<footer>
<div class="footer-bottom">
<div class="container">
<p class="pull-left"> OneSource IML | <strong><a href="callto:+18668725722">+1-855-892-8231</a></strong> | 8am-5pm CST Mon - Fri </p>
<div class="pull-right paymentMethodImg">
<img height="30" class="pull-right" src="images/osiml_logo_sm.png" alt="OneSource IML Logo footer">
</div>
</div>
</div>
<!--/.footer-bottom-->
</footer>
<!-- Le javascript
================================================== -->
<!-- include SweetAlert2 and optionally add polfill -->
<script src="assets/plugins-custom/sweetalert2.all.js"></script>
<!-- Include a polyfill for ES6 Promises (optional) for IE11 and Android browser -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/core-js/2.4.1/core.js"></script>
<!-- include parallax plugin -->
<script type="text/javascript" src="assets/js/jquery.parallax-1.1.js"></script>
<!-- optionally include helper plugins -->
<script type="text/javascript" src="assets/js/helper-plugins/jquery.mousewheel.min.js"></script>
<!-- include mCustomScrollbar plugin //Custom Scrollbar -->
<script type="text/javascript" src="assets/js/jquery.mCustomScrollbar.js"></script>
<!-- include icheck plugin // customized checkboxes and radio buttons -->
<script type="text/javascript" src="assets/plugins/icheck-1.x/icheck.min.js"></script>
<!-- include grid.js // for equal Div height -->
<script src="assets/plugins/jquery-match-height-master/dist/jquery.matchHeight-min.js"></script>
<script src="assets/js/grids.js"></script>
<!-- include carousel slider plugin -->
<script src="assets/js/owl.carousel.min.js"></script>
<!-- jQuery select2 // custom select -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.0/js/select2.min.js"></script>
<!-- include touchspin.js // touch friendly input spinner component -->
<script src="assets/js/bootstrap.touchspin.js"></script>
<!-- include custom script for site -->
<script src="assets/js/script.js"></script>
</body>
</html>
Java script part
/*to clears all cookies (self invoking function) when login page loads*/
(function() {
clearAllCookies();
})();
$(document).ready(function() {
/* Login Function :
- EMPLOYEE LOGIN
*/
/* Validate Login Form on keyup and submit for Employee Login */
$("#employeeForm").validate({
errorLabelContainer: $("#employeeForm div.error")
});
/* validated for Employee Login on keypress */
$('#employeeForm input').on("keypress", function() {
$("#employeeForm div.error").empty();
var validateResponse = $("#employeeForm").validate();
});
$("#customerSignupForm").validate({
errorLabelContainer: $("#customerSignupForm div.error")
});
$('#customerSignupForm input').on("keypress", function() {
$("#customerSignupForm div.error").empty();
var validateResponse = $("#customerSignupForm").validate();
});
});
/*Handle login for Employee
- Login Function
- Handle Login Response
*/
function employeeLogin(event, type) {
if ((event.keyCode == 13) || (type == 'onclick')) {
var employeeEmailId = $('#employeeForm input')[0].value;
var employeePassword = $('#employeeForm input')[1].value;
if (checkForParameter(employeeEmailId) && checkForParameter(employeePassword) && validateEmail(employeeEmailId)) {
swal({
title: 'Validating Credentials!',
text: 'Please wait...',
onOpen: function changeArrowfunction() {
swal.showLoading();
}
});
var timeStamp = Date.parse(new Date()).toString();
var encrypt_data = encryptionModule.processData(timeStamp, employeePassword, 'encrypt');
encrypt_data = encodeAndDecodeString(encrypt_data, true);
employeePassword = encrypt_data;
var u = getSuiteletURL['login'] + "&status=login" + "&email=" + escape(employeeEmailId) + "&cred=" + encodeURIComponent(employeePassword) + "×tamp=" + escape(timeStamp) + "&guestid=" + getCookie('guestUniqueNumber');
var cb = 'employeeLoginResponse';
getJSONP(u + '&callback=' + cb);
} else {
if (!(checkForParameter(employeeEmailId)) && !(checkForParameter(employeePassword))) {
swal('Empty Fields', 'Please enter required fields', 'error');
} else if (!checkForParameter(employeePassword)) {
swal('Empty Fields', 'Please enter Password', 'error');
} else if (!checkForParameter(employeeEmailId)) {
swal('Empty Fields', 'Please enter Email ID', 'error');
} else {
swal('Invalid Email', 'Please enter valid Email ID', 'error');
}
}
}
}
function employeeLoginResponse(data) {
var employeeLoginResponseObj = convertEscapetoUnescape(data);
if (employeeLoginResponseObj[0].responseString == 'SUCCESS') {
if (typeof(Storage) !== "undefined") {
if (validateLoginServerStatus(employeeLoginResponseObj)) {
setCookie("customerID", employeeLoginResponseObj[0].customerID, 1);
setCookie("customerEmailID", employeeLoginResponseObj[0].customerEmailID, 1);
setCookie("customerName", employeeLoginResponseObj[0].customerName, 1);
var empName = employeeLoginResponseObj[0].customerFirstName + ' ' + assignDefaultValue(employeeLoginResponseObj[0].customerLastName, '');
setCookie("customerRealName", empName, 1);
setCookie("serverPhrase", employeeLoginResponseObj[0].serverPhrase, 1);
var getCookieValue = getCookie('serverPhrase') + getCookie('customerID') + getCookie('customerEmailID');
var passPhrase = giveNumberCode(getCookieValue, 7);
setCookie("customerPassPhrase", passPhrase, 1);
setCookie("customerVerifyChekout", 'false', 1);
setCookie("customerTimeStamp", 'false', 1);
setCookie("guestUniqueNumber", 'false', -1);
setCookie("customerPassPhraseGuest", 'false', -1);
swal("Authorized", "Will be redirecting to homepage soon..", "success");
if (getParameterByName('REDIRECT_TO') == 'cart')
window.location.href = 'cart.html';
else
window.location.href = 'index.html';
} else {
swal('UNAUTHORIZED', 'UNAUTHORIZED ACCESS', 'error');
}
} else {
console.log("Your browser doesnot support cookies");
swal('Oops...', 'Your browser doesnot support cookies', 'error');
}
} else {
swal('UNAUTHORIZED', 'Couldn\'t validate Customer', 'error');
}
}
//triggers when user want to continue as guest
function continueAsGuest(event, type) {
if (validateGuestAccess()) {
window.location.href = 'shop.html';
} else {
var UNIQUE_ID = guestUniqueNumber();
setCookie("guestUniqueNumber", UNIQUE_ID, 2);
setCookie("customerPassPhraseGuest", giveNumberCode(UNIQUE_ID, 5), 2);
window.location.href = 'login.html';
}
}
// sign up a new customer to the webstore
function customerSignUp(event, type) {
if ((event.keyCode == 13) || (type == 'onclick')) {
var customerFirstName = $('#Fname').val();
var customerLastName = $('#Lname').val();
var customerEmailId = $('#custEmail').val();
var customerPassword = $('#custPassword').val();
if (customerValidation({ "First Name": customerFirstName, "Last Name": customerLastName, "EmailId": customerEmailId, "Password": customerPassword })) {
swal({
title: 'Validating Customer!',
text: 'Please wait...',
onOpen: function changeArrowfunction() {
swal.showLoading();
}
});
var timeStamp = Date.parse(new Date()).toString();
var encrypt_data = encryptionModule.processData(timeStamp, customerPassword, 'encrypt');
encrypt_data = encodeAndDecodeString(encrypt_data, true);
customerPassword = encrypt_data;
var u = getSuiteletURL['signup'] + "&status=signup" + "&firstname=" + escape(customerFirstName) + "&lastname=" + escape(customerLastName) + "&email=" + escape(customerEmailId) + "&cred=" + encodeURIComponent(customerPassword) + "×tamp=" + escape(timeStamp);
var cb = 'customerSignupResponse';
getJSONP(u + '&callback=' + cb);
}
}
}
function customerValidation(obj) {
try {
for (var key in obj)
if (!checkForParameter(obj[key].toString().trim())) {
swal('Empty Fields', 'Please enter ' + key, 'error');
return false;
}
if (!validateEmail(obj.EmailId.toString().trim())) {
swal('Not Vaild Email', 'Please enter Email ID', 'error');
return false;
}
if ((obj.Password.toString().trim()).length < 4) {
swal('Not Vaid Password', 'Password length should be atleast 4', 'error');
return false;
}
return true;
} catch (err) {
return false
}
}
function customerSignupResponse(data) {
var customerSignupResponseObj = convertEscapetoUnescape(data);
if (customerSignupResponseObj[0].responseString != "FAILURE") {
swal(customerSignupResponseObj[0].responseMessage, '', customerSignupResponseObj[0].responseString);
//AFTER CLEAR THE FIED AFTER CUSTOMER CREATION
$('#Fname').val('');
$('#Lname').val('');
$('#custEmail').val('');
$('#custPassword').val('');
} else {
swal('UNAUTHORIZED', customerSignupResponseObj[0].responseMessage, 'error');
console.log(customerSignupResponseObj[0]);
}
}
Suitelet
/**
* @NApiVersion 2.x
* @NScriptType Suitelet
* @NModuleScope SameAccount
*/
/**
* Script Description
* This script is to handle login request and forgot password request from
* Aquverse
*
* Created on 21-February-2019 by J&J
*/
/*******************************************************************************
* * OneSource IML | OSI-61 | Aquverse *
* **************************************************************************
*
*
* Author: Jobin & Jismi IT Services LLP
*
* REVISION HISTORY
*
*
******************************************************************************/
/**
* SCRIPT ID : customdeploy_osi_52_jj_sl_aquverse_sign
*
* DEPLOYMENT ID : customdeploy_osi_52_jj_sl_aquverse_sign
*
*/
var CONTEXT;
define(['N/record', 'N/search', 'N/email', 'N/runtime', 'N/log'], function(record, search, email, runtime, log) {
//To check whether a value exists in parameter
/* function checkForParameter(parameter, parameterName) {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "null" && parameter != "undefined" && parameter != " " && parameter != false) {
return true;
} else {
if (parameterName)
log.debug('Empty Value found', 'Empty Value for parameter ' + parameterName);
return false;
}
}*/
//Custom Encoding a given string (for validation and fraud detection)
/*function giveServerCode(someString, sizeLimit) {
sizeLimit = ((sizeLimit) ? (sizeLimit) : (5));
sizeLimit = parseInt(sizeLimit);
someString = someString.toString();
var letters = ["d", "e", "g", ";", "w", "o", "q", "5", "p", ".", "a", "2", "z", "3", "l", "m", "4", "'", "b", "c", "7", "s", "8", "r", "u", "v", "y", "t", "0", "@", "1", "f", ":", "6", "h", "i", ",", "n", " ", "x", "j", "k", "9"];
var numberCode = "";
for (var i = 0; i < someString.length; i++) {
var letter = someString[i].toLowerCase();
var number = letters.indexOf(letter) + 1;
if (number < 10) {
number = "0" + number;
}
numberCode += number;
}
return ((numberCode) % (Math.pow(10, sizeLimit)));
}*/
//To encode/decode a string into BASE64
function encodeAndDecodeString(inputString, isEncode) {
try {
var Base64 = {
_keyStr: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
encode: function(e) {
var t = "";
var n, r, i, s, o, u, a;
var f = 0;
e = Base64._utf8_encode(e);
while (f < e.length) {
n = e.charCodeAt(f++);
r = e.charCodeAt(f++);
i = e.charCodeAt(f++);
s = n >> 2;
o = (n & 3) << 4 | r >> 4;
u = (r & 15) << 2 | i >> 6;
a = i & 63;
if (isNaN(r)) {
u = a = 64
} else if (isNaN(i)) {
a = 64
}
t = t + this._keyStr.charAt(s) +
this._keyStr.charAt(o) +
this._keyStr.charAt(u) +
this._keyStr.charAt(a)
}
return t
},
decode: function(e) {
var t = "";
var n, r, i;
var s, o, u, a;
var f = 0;
e = e.replace(/[^A-Za-z0-9+/=]/g, "");
while (f < e.length) {
s = this._keyStr.indexOf(e.charAt(f++));
o = this._keyStr.indexOf(e.charAt(f++));
u = this._keyStr.indexOf(e.charAt(f++));
a = this._keyStr.indexOf(e.charAt(f++));
n = s << 2 | o >> 4;
r = (o & 15) << 4 | u >> 2;
i = (u & 3) << 6 | a;
t = t + String.fromCharCode(n);
if (u != 64) {
t = t + String.fromCharCode(r)
}
if (a != 64) {
t = t + String.fromCharCode(i)
}
}
t = Base64._utf8_decode(t);
return t
},
_utf8_encode: function(e) {
e = e.replace(/rn/g, "n");
var t = "";
for (var n = 0; n < e.length; n++) {
var r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r)
} else if (r > 127 && r < 2048) {
t += String.fromCharCode(r >> 6 | 192);
t += String.fromCharCode(r & 63 | 128)
} else {
t += String.fromCharCode(r >> 12 | 224);
t += String.fromCharCode(r >> 6 & 63 | 128);
t += String.fromCharCode(r & 63 | 128)
}
}
return t
},
_utf8_decode: function(e) {
var t = "";
var n = 0;
var r = c1 = c2 = 0;
while (n < e.length) {
r = e.charCodeAt(n);
if (r < 128) {
t += String.fromCharCode(r);
n++
} else if (r > 191 && r < 224) {
c2 = e.charCodeAt(n + 1);
t += String.fromCharCode((r & 31) << 6 | c2 &
63);
n += 2
} else {
c2 = e.charCodeAt(n + 1);
c3 = e.charCodeAt(n + 2);
t += String.fromCharCode((r & 15) << 12 |
(c2 & 63) << 6 | c3 & 63);
n += 3
}
}
return t
}
}
inputString = inputString.toString();
if (isEncode)
return Base64.encode(inputString);
else
return Base64.decode(inputString);
} catch (err) {
log.debug("Error ", "Error at function encodeAndDecodeString()");
return false;
}
}
//custom encryption module
var encryptionModule = {
encrypt: function(key, value) {
var result = "";
for (i = 0; i < value.length; ++i) {
result += String.fromCharCode(key[i % key.length] ^ value.charCodeAt(i));
}
return result;
},
decrypt: function(key, value) {
var result = "";
for (i = 0; i < value.length; ++i) {
result += String.fromCharCode(key[i % key.length] ^ value.charCodeAt(i));
}
return result;
},
encode: function(k, s) {
var enc = "";
var str = "";
// make sure that input is string
str = s.toString();
for (var i = 0; i < s.length; i++) {
// create block
var a = s.charCodeAt(i);
// bitwise XOR
var b = a ^ k;
enc = enc + String.fromCharCode(b);
}
return enc;
},
finalResult: function(key, value, times, type, index) {
times = encryptionModule.assignDefaultValue(times, 1);
index = encryptionModule.assignDefaultValue(index, 1);
key = key.toString();
var radKey = parseInt((parseFloat(key) * times * encryptionModule.giveNumberCode(index.toString())) / 1000000000);
radKey = encryptionModule.giveNumberCode(radKey.toString());
if (times > index)
return encryptionModule.finalResult(radKey, value, times, type, index + 1);
if (type == 'encrypt' || type == 1)
for (var i = 0; i < times; i++)
if (i % 2 == 0)
value = encryptionModule.encode(key, value);
else
value = encryptionModule.encrypt(encryptionModule.giveNumberCode(key), value);
else if (type == 'decrypt' || type == 2)
for (var i = 0; i < times; i++)
if (i % 2 == 0)
value = encryptionModule.encode(key, value);
else
value = encryptionModule.decrypt(encryptionModule.giveNumberCode(key), value);
else
for (var i = 0; i < times; i++)
value = encryptionModule.encode(key, value);
return value;
},
processData: function(key, value, type) {
key = key.toString();
value = value.toString();
if (type == 'encrypt' || type == 1) {
value = encryptionModule.encrypt(key, value);
value = encryptionModule.encrypt(encryptionModule.giveNumberCode(key).toString(), value);
} else if (type == 'decrypt' || type == 2) {
value = encryptionModule.decrypt(encryptionModule.giveNumberCode(key).toString(), value);
value = encryptionModule.decrypt(key, value);
} else
value = encryptionModule.encode(key, value);
return value;
},
giveNumberCode: function(someString) {
var letters = ["d", "e", "g", ";", "w", "o", "q", "5", "p", ".", "*", "a", "2", "/", "z", "3", "l", "+", "m", "%", "4", "'", "b", "c", "7", "s", "8", "r", "u", "-", "v", "y", "t", "0", "@", "1", "f", ":", "6", "h", "i", ",", "n", " ", "x", "j", "k", "9"];
var numberCode = "";
for (var i = 0; i < someString.length; i++) {
var letter = someString[i].toLowerCase();
var number = letters.indexOf(letter) + 1;
if (number < 10) {
number = "0" + number;
}
numberCode += number;
}
numberCode = ((numberCode * 3.14159265359) / 2.22144146908) * 2.64575131106;
if (numberCode.toString().split(".")[1]) {
if (numberCode.toString().split(".")[1].length > 5) {
numberCode = numberCode.toString().split(".")[1];
}
}
numberCode = parseInt(numberCode) % 1000000;
return numberCode;
},
checkForParameter: function(parameter) {
if (parameter != "" && parameter != null && parameter != undefined && parameter != "undefined" && parameter != " " && parameter != false) {
return true;
} else {
if (paremeterName)
log.debug('Empty Value found', 'Empty Value for parameter ' + paremeterName);
return false;
}
},
assignDefaultValue: function(value, defaultValue) {
if (encryptionModule.checkForParameter(value))
return value;
else
return defaultValue;
},
};
var main = {
routeRequest: function(context) {
log.debug('context.request.method', context.request.method);
if (checkForParameter(context.request.parameters.status)) {
if (checkForParameter(context.request.parameters.callback)) {
var status = context.request.parameters.status;
if (status == 'signup')
return main.signUpCustomer(context);
else
return main.sendResponse('FAILURE', escape('INVALID STATUS'), false, escape('main.routeRequest()'), context);
}
}
return false;
},
runCustomerSearch: function(customerEmail) {
var customerSearchObj = search.create({
type: "customer",
filters: [
["isinactive", "is", "F"],
"AND",
["email", "is", customerEmail]
],
columns: [
search.createColumn({
name: "entityid",
sort: search.Sort.ASC,
label: "ID"
}),
search.createColumn({ name: "altname", label: "Name" }),
search.createColumn({ name: "email", label: "Email" }),
search.createColumn({ name: "phone", label: "Phone" }),
search.createColumn({ name: "altphone", label: "Office Phone" }),
search.createColumn({ name: "fax", label: "Fax" }),
search.createColumn({ name: "contact", label: "Primary Contact" }),
]
});
var searchResultCount = customerSearchObj.runPaged().count;
log.debug("customerSearchObj result count", searchResultCount);
if (searchResultCount > 0)
return true;
else
return false;
},
signUpCustomer: function(context) {
var customerFirstname = unescape(context.request.parameters.firstname);
var customerLastname = unescape(context.request.parameters.lastname);
var customerEmail = unescape(context.request.parameters.email);
customerEmail = customerEmail.toString().trim();
var customerPassword = unescape(context.request.parameters.cred);
var timeStamp = unescape(context.request.parameters.timestamp);
customerPassword = encodeAndDecodeString(customerPassword, false);
customerPassword = encryptionModule.processData(timeStamp, customerPassword, 'decrypt');
customerPassword = customerPassword.toString().trim();
log.debug('customerPassword', customerPassword)
if (checkForParameter(customerEmail)) {
var isCustomerExits = main.runCustomerSearch(customerEmail);
if (isCustomerExits)
return main.sendResponse('info', escape('Customer Already Exists'), false, escape('main.signUpCustomer()'), context);
else {
var objRecord = record.create({
type: record.Type.CUSTOMER,
isDynamic: true,
});
objRecord.setValue({
fieldId: 'customform',
value: '2' //{"value":"2","text":"OS Customer Form"}
});
objRecord.setValue({
fieldId: 'entitystatus',
value: '13' //{"value":"13","text":"CUSTOMER-Customer Closed (Won)"}
});
objRecord.setValue({
fieldId: 'isperson',
value: 'T'
});
objRecord.setValue({
fieldId: 'firstname',
value: customerFirstname
});
objRecord.setValue({
fieldId: 'lastname',
value: customerLastname
});
objRecord.setValue({
fieldId: 'email',
value: customerEmail
});
objRecord.setValue({
fieldId: 'taxable',
value: true
});
objRecord.setValue({
fieldId: 'currency',
value: "1" //{"value":"1","text":"USD"}
});
objRecord.setValue({
fieldId: 'terms',
value: "" //{"value":"","text":""},
});
objRecord.setValue({
fieldId: 'salesrep',
value: "95177" //a House Account
});
objRecord.setValue({
fieldId: 'category',
value: "8" //Water Webstore (Aquverse.com)
});
objRecord.setValue({
fieldId: 'custentity6', //Fulfill Cust
value: "2" //None
});
objRecord.setValue({
fieldId: 'custentity_jj_webstore_password',
value: customerPassword
});
var recordId = objRecord.save({
enableSourcing: true,
ignoreMandatoryFields: true
});
log.debug('recordId', recordId);
return main.sendResponse('success', escape('CUSTOMER IS CREATED'), true, escape('main.signUpCustomer()'), context);
}
} else
return main.sendResponse('info', escape('NO EMAIL-ID IS GIVEN'), false, escape('main.signUpCustomer()'), context);
},
onRequest: function(context) {
CONTEXT = context;
var isProccessed = main.routeRequest(context);
log.debug("Is request Proccessed ", isProccessed);
},
sendResponse: function(responseString, responseMessage, isPositive, responseLocation, context, moreDetailsObj) {
if (!checkForParameter(context))
context = CONTEXT;
var responseObj = {};
var responseArray = [];
var callBackFunction = context.request.parameters.callback;
if (isPositive) {
responseObj.responseString = responseString;
responseObj.responseMessage = responseMessage;
if (checkForParameter(moreDetailsObj))
responseObj.moreDetailsObj = moreDetailsObj
} else {
responseObj.responseString = responseString;
responseObj.responseMessage = responseMessage;
responseObj.responseLocation = responseLocation;
if (checkForParameter(moreDetailsObj))
responseObj.moreDetailsObj = moreDetailsObj
}
responseArray.push(responseObj);
var responseStrJson = callBackFunction + '(\'' + JSON.stringify(responseArray) + '\');';
context.response.write(responseStrJson);
if (isPositive)
return true;
else
return false;
},
remainingUsage: function() {
//var scriptObj = runtime.getCurrentScript();
var remainingTime = runtime.getCurrentScript().getRemainingUsage();
return remainingTime;
},
};
for (var key in main) {
if (typeof main[key] === 'function') {
main[key] = trycatch(main[key], key);
}
}
function trycatch(myfunction, key) {
function logDetails(error) {
log.debug("Error in function " + key, JSON.stringify(error));
log.debug('Error on function ' + key, JSON.stringify(getError(error)));
log.error("Error in function " + key, JSON.stringify(error));
log.error('Error on function ' + key, JSON.stringify(getError(error)));
return true;
}
return function() {
try {
return myfunction.apply(this, arguments);
} catch (error) {
var islogDetails = logDetails(error);
var responseObj = {};
var responseArray = [];
responseObj.responseString = 'FAILURE';
responseObj.responseMessage = escape(JSON.stringify(getError(error)));
responseObj.responseLocation = 'Error in main.' + key + '()';
responseArray.push(responseObj);
var context = CONTEXT;
if (checkForParameter(context.request.parameters.callback)) {
var callBackFunction = context.request.parameters.callback;
var responseStrJson = callBackFunction + '(\'' + JSON.stringify(responseArray) + '\');';
context.response.write(responseStrJson);
} else {
var responseStrJson = JSON.stringify(responseArray);
context.response.write(responseStrJson);
}
return false;
}
}
};
return main;
});
function getError(e) {
var stErrMsg = '';
if (e.getDetails != undefined) {
stErrMsg = '_' + e.getCode() + '<br>' + e.getDetails() + '<br>' +
e.getStackTrace();
} else {
stErrMsg = '_' + e.toString();
}
return stErrMsg;
}