Snippets

Zenduit Team pull devices and device status

Created by Shane Graham last modified
'use strict';

var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
require('babel/register');

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

var Zoho = require('./Zoho.js');
var ZohoCredentials = require('./zohoConfig.json');
var MyAdmin = require('./MyAdmin.js');
var config = require('./config.json');
var ZenduitDebugger = require('./zendu.debugger.js');
var myAdmin = new MyAdmin();
var zoho = new Zoho(ZohoCredentials.auth);

var argv = require('minimist')(process.argv.slice(2));
var _debug = argv.x ? true : false;
var _debugger = argv.x === 'debugger';

var zenduHelper = new ZenduitDebugger(_debug, false, _debugger);

var PORT = config.server.ContactCreator.port;
var URL = config.server.ContactCreator.url;
var params = [];
params.selectColumns = 'Accounts(GeotabContactID)';
params.fromIndex = 1;
params.toIndex = 200;

var accountCheck = null;
var accounts = [];
var geoAccounts = {};
var _this = null;
var totals = { terminated: 0, devices: 0, unActivated: 0, suspended: 0 };
var churnRate = 0;

var CrmSync = (function () {
	function CrmSync() {
		_classCallCheck(this, CrmSync);

		zenduHelper.bind(this, 'Init');
		zenduHelper.bind(this, 'authenticate');
		zenduHelper.bind(this, 'getDevices');
		zenduHelper.bind(this, 'sortDevices');
		zenduHelper.bind(this, 'AccountsCallBack');
		zenduHelper.bind(this, 'getAccounts');
		zenduHelper.bind(this, 'Next');
		zenduHelper.bind(this, 'finish');
		zenduHelper.bind(this, 'finish2');
		zenduHelper.bind(this, 'checkAccounts');
	}

	_createClass(CrmSync, [{
		key: 'Init',
		value: function Init() {
			_this = this;
			this['continue'] = false;
			this.getAccounts();
			accountCheck = setInterval(this.checkAccounts, 1000);
		}
	}, {
		key: 'Next',
		value: function Next() {
			var _this2 = this;

			Promise.resolve().then(this.authenticate).then(function (user) {
				return _this2.user = user;
			}).then(this.getDevices).then(function (devices) {
				return _this2.devices = devices;
			}).then(this.sortDevices)['catch'](zenduHelper.errFn);
		}
	}, {
		key: 'checkAccounts',
		value: function checkAccounts() {
			if (this['continue']) {
				clearInterval(accountCheck);
				accountCheck = null;
				this.Next();
			}
		}
	}, {
		key: 'authenticate',
		value: function authenticate() {
			zenduHelper.log('Authenticating...');
			return myAdmin.authenticate(config.myAdmin);
		}
	}, {
		key: 'getDevices',
		value: function getDevices() {
			var apiKey = this.user.userId;
			var sessionId = this.user.sessionId;
			var today = new Date();
			var DeviceParams = {
				apiKey: apiKey,
				sessionId: sessionId,
				forAccount: 'GOFL02',
				fromDate: today,
				toDate: today
			};
			return myAdmin.call('GetDeviceContracts', DeviceParams);
		}
	}, {
		key: 'getAccounts',
		value: function getAccounts() {
			zoho.getRecords(params, this.AccountsCallBack);
		}
	}, {
		key: 'AccountsCallBack',
		value: function AccountsCallBack(err, response, body) {

			var res = JSON.parse(body).response;

			var _rows = res.result.Accounts.row;
			_rows.forEach(function (value) {
				var tmpdb = [];
				if (typeof value.FL != 'undefined') {
					if (value.FL.constructor === Array) {
						value.FL.forEach(function (data, index) {
							if (data.val == 'ACCOUNTID') tmpdb.id = data.content;else data.val == 'GeotabContactID';
							tmpdb.geotabID = data.content;
						});
						if (tmpdb.geotabID != 0) accounts.push(tmpdb);
					}
				}
			});
			if (_rows.length >= 200) {
				params.fromIndex += 200;
				params.toIndex += 200;
				zoho.getRecords(params, _this.AccountsCallBack);
			} else {
				this['continue'] = true;
			}
		}
	}, {
		key: 'finish',
		value: function finish(err, response, body) {}
	}, {
		key: 'sortDevices',
		value: function sortDevices() {

			for (var i = 0; i < this.devices.length - 1; i++) {
				var device = this.devices[i];
				var userContact = 0;

				if (typeof device.userContact != 'undefined') {
					userContact = device.userContact.id;
				}

				if (typeof geoAccounts[userContact] == 'undefined' && userContact > 0) {
					geoAccounts[userContact] = {};
					geoAccounts[userContact].deviceTypes = { proPlusMode: 0, proMode: 0, baseMode: 0, suspendMode: 0, customDevice: 0, passiveMode: 0, terminated: 0, unactivated: 0, other: 0, total: 0 };
				}
				if (userContact > 0) {

					if (device.device.serialNumber.charAt(0) == 'C') {
						geoAccounts[userContact].deviceTypes.customDevice++;
					} else {
						totals.devices++;
						if (typeof device.activeDevicePlan != 'undefined') if (device.activeDevicePlan.name == 'ProPlus Mode') geoAccounts[userContact].deviceTypes.proPlusMode++;else if (device.activeDevicePlan.name == 'Pro Mode') geoAccounts[userContact].deviceTypes.proMode++;else if (device.activeDevicePlan.name == 'Base Mode') geoAccounts[userContact].deviceTypes.baseMode++;else if (device.activeDevicePlan.name == 'Suspend Mode') {
							geoAccounts[userContact].deviceTypes.suspendMode++;
							totals.suspended++;
						} else if (device.activeDevicePlan.name == 'Passive Mode') {
							geoAccounts[userContact].deviceTypes.passiveMode++;
						} else console.log(device);else {
							if (device.isTerminated) {
								geoAccounts[userContact].deviceTypes.terminated++;
								totals.terminated++;
							} else if (device.isUnactivated) {
								geoAccounts[userContact].deviceTypes.unactivated++;
								totals.unActivated++;
							} else geoAccounts[userContact].deviceTypes.other++;
						}
					}
					geoAccounts[userContact].deviceTypes.total++;
				}
			}

			var xmlData = '<Accounts>';
			var count = 0;
			for (var i = 0; i < accounts.length; i++) {
				if (typeof geoAccounts[accounts[i].geotabID] != 'undefined') {
					count++;
					xmlData += '\n<row no="' + count + '">';
					xmlData += '\n\t<FL val="Id">' + accounts[i].id + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-PROPLUS">' + geoAccounts[accounts[i].geotabID].deviceTypes.proPlusMode + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-PRO">' + geoAccounts[accounts[i].geotabID].deviceTypes.proMode + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-BASE">' + geoAccounts[accounts[i].geotabID].deviceTypes.baseMode + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-SUSPEND">' + geoAccounts[accounts[i].geotabID].deviceTypes.suspendMode + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-TERMINATED">' + geoAccounts[accounts[i].geotabID].deviceTypes.terminated + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-CUSTOM-ASSET">' + geoAccounts[accounts[i].geotabID].deviceTypes.customDevice + '</FL>';
					xmlData += '\n\t<FL val="MONTHLY-OTHER">' + geoAccounts[accounts[i].geotabID].deviceTypes.other + '</FL>';
					xmlData += '\n\t<FL val="Not Activated">' + geoAccounts[accounts[i].geotabID].deviceTypes.unactivated + '</FL>';
					xmlData += '\n</row>';

					if (count % 100 == 0) {
						xmlData += '</Accounts>';
						var updateParams = {};
						updateParams.version = 4;
						updateParams.xmlData = xmlData;
						zoho.updateRecord(updateParams, this.finish);
						xmlData = '<Accounts>';
						count = 0;
					}
				}
			}
			xmlData += '</Accounts>';
			var updateParams = {};
			updateParams.version = 4;
			updateParams.xmlData = xmlData;
			zoho.updateRecord(updateParams, this.finish);
			churnRate = totals.terminated / totals.devices;

			var reportParams = 'TotalDevices=' + totals.devices + '&TotalUnactivated=' + totals.unActivated + '&TotalSuspended=' + totals.suspended + '&TotalTerminated=' + totals.terminated + '&ChurnRate=' + Math.round(churnRate * 10000) / 100;
			zoho.updateReports(reportParams, this.finish2);
		}
	}, {
		key: 'finish2',
		value: function finish2(err, response, body) { console.log("Finshed Sync!"); }
	}]);

	return CrmSync;
})();

;

var CS = new CrmSync();
CS.Init();

//console.log(body);

//console.log(body)

Comments (1)

  1. Linda Melson

    goodreads.com/user/show/177488397-editsiz-serverler twitch.tv/editsizserverler behance.net/editsizserverl instapaper.com/p/14184805 coub.com/metin2-pvpserverler myanimelist.net/profile/editsizserverler worldcosplay.net/member/1754620 onmogul.com/editsiz-serverler metin2pvpserverler.hashnode.dev/metin2-pvp-serverler gaiaonline.com/profiles/editsizserverler/46656672/ leetcode.com/editsizserverler/ coolors.co/u/editsiz_serverler unsplash.com/@editsizserverler metin2-pvp-serverler.jimdosite.com/ zazzle.com/mbr/238039878416461152 brownbook.net/business/52637466/metin2-pvp-serverler community.tubebuddy.com/index.php?members/205346/#about reedsy.com/discovery/user/editsizserverler hackerearth.com/@editsizserverlerorg wakelet.com/wake/7OIcdWsbjqXHh82vRa9ZZ peatix.com/user/21877725/view penzu.com/public/eef09aac2dcbfc71 experiment.com/users/eeditsizserverler pearltrees.com/editsizserverler wefunder.com/editsizserverler imageevent.com/editsizserverler ourclass.mn.co/members/23696284 friendtalk.mn.co/members/23696354 slides.com/editsizserverler roosterteeth.com/g/user/EditsizServerler/activity opencollective.com/editsiz-serverler pastelink.net/erd7vohi fairygodboss.com/users/profile/48WIpe-gxe/editsizserverler codingame.com/profile/e076eaf315403d3ed090624d8cdccc234708506 jigsawplanet.com/editsizserverler?viewas=3d85ff6a3ee9 jsfiddle.net/editsizserverler/x0sorwL5/6/ jsfiddle.net/editsizserverler/x0sorwL5/7/ jsfiddle.net/editsizserverler/x0sorwL5/8/ jsfiddle.net/editsizserverler/x0sorwL5/9/ jsfiddle.net/editsizserverler/x0sorwL5/10/ jsfiddle.net/editsizserverler/x0sorwL5/11/ jsfiddle.net/editsizserverler/x0sorwL5/12/ jsfiddle.net/editsizserverler/x0sorwL5/13/ jsfiddle.net/editsizserverler/x0sorwL5/14/ jsfiddle.net/editsizserverler/x0sorwL5/15/ jsfiddle.net/editsizserverler/x0sorwL5/16/ jsfiddle.net/editsizserverler/x0sorwL5/17/ jsfiddle.net/editsizserverler/x0sorwL5/18/ jsfiddle.net/editsizserverler/x0sorwL5/19/ jsfiddle.net/editsizserverler/x0sorwL5/20/ jsfiddle.net/editsizserverler/x0sorwL5/21/ jsfiddle.net/editsizserverler/x0sorwL5/22/ jsfiddle.net/editsizserverler/x0sorwL5/23/ jsfiddle.net/editsizserverler/x0sorwL5/24/ jsfiddle.net/editsizserverler/x0sorwL5/25/ jsfiddle.net/editsizserverler/x0sorwL5/26/ jsfiddle.net/editsizserverler/x0sorwL5/27/ jsfiddle.net/editsizserverler/x0sorwL5/28/ jsfiddle.net/editsizserverler/x0sorwL5/29/ jsfiddle.net/editsizserverler/x0sorwL5/30/ jsfiddle.net/editsizserverler/x0sorwL5/31/ jsfiddle.net/editsizserverler/x0sorwL5/32/ jsfiddle.net/editsizserverler/x0sorwL5/33/ jsfiddle.net/editsizserverler/x0sorwL5/34/ jsfiddle.net/editsizserverler/x0sorwL5/35/ jsfiddle.net/editsizserverler/x0sorwL5/36/ jsfiddle.net/editsizserverler/x0sorwL5/37/ jsfiddle.net/editsizserverler/x0sorwL5/38/ jsfiddle.net/editsizserverler/x0sorwL5/39/ jsfiddle.net/editsizserverler/x0sorwL5/40/ jsfiddle.net/editsizserverler/x0sorwL5/41/ jsfiddle.net/editsizserverler/x0sorwL5/42/ jsfiddle.net/editsizserverler/x0sorwL5/43/ jsfiddle.net/editsizserverler/x0sorwL5/44/ jsfiddle.net/editsizserverler/x0sorwL5/45/ jsfiddle.net/editsizserverler/x0sorwL5/46/ jsfiddle.net/editsizserverler/x0sorwL5/47/ jsfiddle.net/editsizserverler/x0sorwL5/48/ jsfiddle.net/editsizserverler/x0sorwL5/49/ jsfiddle.net/editsizserverler/x0sorwL5/50/ jsfiddle.net/editsizserverler/x0sorwL5/51/ jsfiddle.net/editsizserverler/x0sorwL5/52/ jsfiddle.net/editsizserverler/x0sorwL5/53/ jsfiddle.net/editsizserverler/x0sorwL5/54/ jsfiddle.net/editsizserverler/x0sorwL5/55/ jsfiddle.net/editsizserverler/x0sorwL5/56/ jsfiddle.net/editsizserverler/x0sorwL5/57/ jsfiddle.net/editsizserverler/x0sorwL5/58/ jsfiddle.net/editsizserverler/x0sorwL5/59/ jsfiddle.net/editsizserverler/x0sorwL5/60/ jsfiddle.net/editsizserverler/x0sorwL5/61/ jsfiddle.net/editsizserverler/x0sorwL5/62/ jsfiddle.net/editsizserverler/x0sorwL5/63/ jsfiddle.net/editsizserverler/x0sorwL5/64/ jsfiddle.net/editsizserverler/x0sorwL5/65/ jsfiddle.net/editsizserverler/x0sorwL5/66/ jsfiddle.net/editsizserverler/x0sorwL5/67/ jsfiddle.net/editsizserverler/x0sorwL5/68/ jsfiddle.net/editsizserverler/x0sorwL5/69/ jsfiddle.net/editsizserverler/x0sorwL5/70/ jsfiddle.net/editsizserverler/x0sorwL5/71/ jsfiddle.net/editsizserverler/x0sorwL5/72/ jsfiddle.net/editsizserverler/x0sorwL5/73/ jsfiddle.net/editsizserverler/x0sorwL5/74/ jsfiddle.net/editsizserverler/x0sorwL5/75/ jsfiddle.net/editsizserverler/x0sorwL5/76/ jsfiddle.net/editsizserverler/x0sorwL5/77/ jsfiddle.net/editsizserverler/x0sorwL5/78/ jsfiddle.net/editsizserverler/x0sorwL5/79/ jsfiddle.net/editsizserverler/x0sorwL5/80/ jsfiddle.net/editsizserverler/x0sorwL5/81/ jsfiddle.net/editsizserverler/x0sorwL5/82/ jsfiddle.net/editsizserverler/x0sorwL5/83/ jsfiddle.net/editsizserverler/x0sorwL5/84/ jsfiddle.net/editsizserverler/x0sorwL5/85/ jsfiddle.net/editsizserverler/x0sorwL5/86/ jsfiddle.net/editsizserverler/x0sorwL5/87/ jsfiddle.net/editsizserverler/x0sorwL5/88/ jsfiddle.net/editsizserverler/x0sorwL5/89/ jsfiddle.net/editsizserverler/x0sorwL5/90/ jsfiddle.net/editsizserverler/x0sorwL5/91/ jsfiddle.net/editsizserverler/x0sorwL5/92/ jsfiddle.net/editsizserverler/x0sorwL5/93/ jsfiddle.net/editsizserverler/x0sorwL5/94/ jsfiddle.net/editsizserverler/x0sorwL5/95/ jsfiddle.net/editsizserverler/x0sorwL5/96/ jsfiddle.net/editsizserverler/x0sorwL5/97/ jsfiddle.net/editsizserverler/x0sorwL5/98/ jsfiddle.net/editsizserverler/x0sorwL5/99/ jsfiddle.net/editsizserverler/x0sorwL5/100/ intensedebate.com/people/johnhenry2233 pxhere.com/en/photographer-me/4238660 longisland.com/profile/editsizserverler/ metin2-pvp-serverler.webflow.io/ anyflip.com/homepage/gwyra/preview pinshape.com/users/4109032-editsizserverlerorg allmyfaves.com/editsizserverler pexels.com/tr-tr/@editsiz-serverler-1225707393/ slideserve.com/editsizserverler archive.org/details/@editsizserverler divephotoguide.com/user/editsizserverler/ metal-archives.com/users/editsizserverler band.us/band/94702101 camp-fire.jp/profile/editsizserverler subscribe.ru/author/31420877 my.desktopnexus.com/blogamca/journal/metin2-pvp-serverler-49878/ replit.com/@editsizserverle fliphtml5.com/tr/homepage/pspuy/editsizserverlerorg/ free-ebooks.net/profile/1562629/editsiz-serverler qooh.me/editsizsrvl pubhtml5.com/homepage/exapj/ zzb.bz/Ib8s8 australian-school-holidays.mn.co/members/23780373 metin2pvpserverler.gallery.ru/ justpaste.it/eoa85 profile.hatena.ne.jp/editsizserverler/ indiegogo.com/individuals/37682987 taz.de/ list.ly/editsizserverlerorg/lists mypaper.pchome.com.tw/tomasvanek/post/1381781942 mypaper.pchome.com.tw/tomasvanek/post/1381781943 metin2pvpserverler.mystrikingly.com/ ted.com/profiles/46748800 play.eslgaming.com/player/20056929/ metin2pvpserverler.threadless.com/about knowyourmeme.com/users/editsiz-serverler active.popsugar.com/@editsizserverler/profile sitetanitimlari.seesaa.net/article/503120781.html sitetanitimlari.seesaa.net/article/502999078.html sitetanitimlari.seesaa.net/article/502585593.html sitetanitimlari.seesaa.net/article/502585551.html sitetanitimlari.seesaa.net/article/502585519.html sitetanitimlari.seesaa.net/article/502585492.html sitetanitimlari.seesaa.net/article/502585455.html sitetanitimlari.seesaa.net/article/498056830.html filmizle2018.blog.fc2.com/blog-entry-21.html filmizle2018.blog.fc2.com/blog-entry-26.html filmizle2018.blog.fc2.com/blog-entry-31.html ameblo.jp/sitetanitimlari/entry-12787859138.html connect.garmin.com/modern/profile/97fe48da-7177-4ae0-bf0e-34fbe1334538 reddit.com/user/uflee/ agario.buzzsprout.com/2066066/14949093-metin2 linkedin.com/posts/okeyoyna_metin2-ejderhalar-merhaba-metin2-oyununa-activity-7171861395326582784-UlrI/ linkedin.com/pulse/metin2-pvp-serverler-listeleri-okey-oyna-jyhpf/ blogger.com/profile/15166393869257970818 draft.blogger.com/profile/15166393869257970818 instagram.com/realokey/ blogger.com/profile/05227574979353865473 draft.blogger.com/profile/05227574979353865473 tumblr.com/onlineokey twitter.com/mt2org twitch.tv/okeyoynaa pinterest.com/a99io/ google.com/url?q=https://www.okeyoyna.com vimeo.com/846733433 wordpress.com/tr/forums/topic/metin2-pvp-tanirim-scpriti/ dailymotion.com/video/x8e47pq gravatar.com/realokey grepo.travelcarma.com/okeyoyna/okey-oyna beatstars.com/zaferozkel okeyoyunu.mystrikingly.com/ gamblingtherapy.org/user/okeyoyna public.tableau.com/app/profile/okey.oyna/vizzes okeyoyna.amebaownd.com/posts/53051499 wefunder.com/okey sovren.media/u/okeyoyna/ lazi.vn/user/okeyoyna gravatar.com/realokey soundcloud.com/okey-oyna okey-oyna.webflow.io/ guides.co/g/okey-oyna/372469 flickr.com/people/200607646@N08/ my.desktopnexus.com/realokey giantbomb.com/profile/okeyoyna/ giantbomb.com/profile/okeyoyna/blog/ encinitas.bubblelife.com/community/okey_oyna sites.bubblelife.com/users/okeyoynacom_a31336 fanart-central.net/user/okeyoyna/profile klse.i3investor.com/web/cube/blog/okeyoyna globalcatalog.com/okeyoyna.tr articlesjust4you.com/members/okeyoyna/ issuu.com/realokey audiomack.com/okeyoynacom/song/dj-okey-oyna-dii-kartal audiomack.com/okeyoynacom gitlab.nic.cz/okeyoyna ameblo.jp/okeyoyna/entry-12849563639.html ameblo.jp/okeyoyna/ profile.ameba.jp/ameba/okeyoyna nintendo-master.com/profil/okeyoyna band.us/band/94698085 pastelink.net/192agg8x pastelink.net/sxqkqqcx pastelink.net/do4ziud7 pastelink.net/9ebiqvd9 pastelink.net/urv9w3xn agario.buzzsprout.com/2066066/14949093-metin2 reverbnation.com/okeyoynacom disqus.com/by/efehanzkel/about/ hub.docker.com/u/okeyoyna tinhte.vn/members/okey-oyna.3017475/ openhumans.net/member/okeyoyna/ research.openhumans.org/member/okeyoyna/ openhumans.com/member/okeyoyna/ portfolium.com/okeyoyna anobii.com/en/0152c9fb8c9e13a07a/profile/activity gitlab.ifam.edu.br/okeyoyna peatix.com/group/16198815 peatix.com/user/21949084/view rapidapi.com/okeyoynacom/api/demo-project85460/details zillow.com/profile/okeyoynacom/ pinterest.com/a99io/ pinterest.ph/a99io/ pinterest.com/a99io/ pinterest.com.mx/a99io/ pinterest.it/a99io/ pinterest.fr/a99io/ pinterest.ca/a99io/ pinterest.jp/a99io/ pinterest.co.uk/a99io/ pinterest.de/a99io/ pinterest.es/a99io/ se.pinterest.com/a99io/ tr.pinterest.com/a99io/ ru.pinterest.com/a99io/ id.pinterest.com/a99io/ cs.pinterest.com/a99io/ es.pinterest.com/a99io/ pl.pinterest.com/a99io/ pt.pinterest.com/a99io/ br.pinterest.com/a99io/ co.pinterest.com/a99io/ nl.pinterest.com/a99io/ se.pinterest.com/a99io/ at.pinterest.com/a99io/ dk.pinterest.com/a99io/ in.pinterest.com/a99io/ ro.pinterest.com/a99io/ sk.pinterest.com/a99io/ fi.pinterest.com/a99io/ ar.pinterest.com/a99io/ freelance.habr.com/freelancers/okeyoyna 500px.com/p/okeyoyna?view=photos

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.