| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 | 
							- angular.module('odoo')
 
-     /**
 
-      * -----------------------------------------------------------------------------
 
-      *  Description:    Native SQL util instructions
 
-      * -----------------------------------------------------------------------------
 
-      */
 
-     .factory('sqlFactory', function () {
 
-         /**
 
-          *
 
-          */
 
-         var count = function (tableName, success, error) {
 
-             var sql = 'SELECT COUNT(*) AS total FROM ' + tableName;
 
-             db.executeSql(sql, [], function (result) {
 
-                 success(result.rows.item(0).total);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-         // Execute native SQL SELECT instruction
 
-         var select = function (tableName, success, error) {
 
-             var sql = 'SELECT * FROM ' + tableName;
 
-             db.executeSql(sql, [], function (result) {
 
-                 success(result.rows);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-         // Execute native SQL SELECT instruction with a constraint
 
-         var selectByConstraint = function (tableName, constraint, success, error) {
 
-             var sql = 'SELECT * FROM ' + tableName + ' WHERE ' + constraint;
 
-             db.executeSql(sql, [], function (result) {
 
-                 success(result.rows);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-         // Execute native SQL SELECT instruction with a constraint
 
-         var selectById = function (tableName, id, success, error) {
 
-             var sql = 'SELECT * FROM ' + tableName + ' WHERE id = ?';
 
-             db.executeSql(sql, [id], function (result) {
 
-                 success(result.rows);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-         // Execute native SQL SELECT instruction with count instruction
 
-         var count = function (tableName, success, error) {
 
-             var sql = 'SELECT COUNT(*) AS total FROM ' + tableName;
 
-             db.executeSql(sql, [], function (result) {
 
-                 success(result.rows.item(0).total);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-         return {
 
-             select: select,
 
-             selectByConstraint: selectByConstraint,
 
-             selectById: selectById,
 
-             count: count
 
-         }
 
-     })
 
-     /**
 
-      * -----------------------------------------------------------------------------
 
-      *  Description:    Get user configuration from local database
 
-      * -----------------------------------------------------------------------------
 
-      */
 
-     .factory('configFactory', function (sqlFactory) {
 
-         return function (success, error) {
 
-             sqlFactory.select('user', function (users) {
 
-                 if (users.length == 0) {
 
-                     success(0);
 
-                 } else if (users.length == 1) {
 
-                     success(users.item(0));
 
-                 } else {
 
-                     var configs = [];
 
-                     for (var i = 0; i < users.length; i++) {
 
-                         configs.push(users.item(i))
 
-                     }
 
-                     success(configs);
 
-                 }
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         };
 
-     })
 
-     /**
 
-      * -----------------------------------------------------------------------------
 
-      *  Description:    Async loop util v2
 
-      * -----------------------------------------------------------------------------
 
-      */
 
-     .factory('asyncLoopFactory', function () {
 
-         return function (iterations, func, callback) {
 
-             var index = 0;
 
-             var done = false;
 
-             var loop = {
 
-                 next: function () {
 
-                     if (done) {
 
-                         return;
 
-                     }
 
-                     if (index < iterations) {
 
-                         index++;
 
-                         func(loop);
 
-                     } else {
 
-                         done = true;
 
-                         callback();
 
-                     }
 
-                 },
 
-                 iteration: function () {
 
-                     return index - 1;
 
-                 },
 
-                 break: function () {
 
-                     done = true;
 
-                     callback();
 
-                 }
 
-             };
 
-             loop.next();
 
-             return loop;
 
-         }
 
-     })
 
-     /**
 
-     * -----------------------------------------------------------------------------
 
-     *  Description:    Native device functions manager
 
-     * -----------------------------------------------------------------------------
 
-     */
 
-     .factory('deviceFactory', function (
 
-         $timeout,
 
-         $rootScope,
 
-         $cordovaToast,
 
-         $cordovaCamera,
 
-         $cordovaDialogs,
 
-         $cordovaContacts,
 
-         $cordovaVibration,
 
-         $cordovaGeolocation,
 
-         $cordovaDeviceMotion,
 
-         $cordovaLaunchNavigator
 
-     ) {
 
-         var vibrateDuration = 50;
 
-         /**
 
-          *
 
-          */
 
-         var takePicture = function (success, error) {
 
-             var options = {
 
-                 quality: 75,
 
-                 destinationType: Camera.DestinationType.DATA_URL,
 
-                 sourceType: Camera.PictureSourceType.CAMERA,
 
-                 allowEdit: true,
 
-                 encodingType: Camera.EncodingType.JPEG,
 
-                 targetWidth: 300,
 
-                 targetHeight: 300,
 
-                 popoverOptions: CameraPopoverOptions,
 
-                 saveToPhotoAlbum: false,
 
-                 correctOrientation: true
 
-             };
 
-             $cordovaCamera.getPicture(options).then(function (imageData) {
 
-                 success(imageData);
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var saveContact = function (contact, success, error) {
 
-             if (!contact.mobile && !contact.phone && !contact.email) {
 
-                 return error('No hay nada que guardar');
 
-             }
 
-             var info = {
 
-                 name: {
 
-                     givenName: contact.name,
 
-                     familyName: '',
 
-                     formatted: ''
 
-                 },
 
-                 nickname: '',
 
-                 phoneNumbers: [
 
-                     {
 
-                         value: contact.phone,
 
-                         type: 'phone'
 
-                     },
 
-                     {
 
-                         value: contact.mobile,
 
-                         type: 'mobile'
 
-                     }
 
-                 ],
 
-                 emails: [
 
-                     {
 
-                         value: contact.email,
 
-                         type: 'home'
 
-                     }
 
-                 ],
 
-                 addresses: [
 
-                     {
 
-                         type: 'home',
 
-                         formatted: '',
 
-                         streetAddress: contact.street,
 
-                         locality: contact.city,
 
-                         region: '',
 
-                         postalCode: '',
 
-                         country: 'Paraguay'
 
-                     }
 
-                 ],
 
-                 ims: null,
 
-                 organizations: null,
 
-                 birthday: null,
 
-                 note: null,
 
-                 photos: null,
 
-                 categories: null,
 
-                 urls: null
 
-             };
 
-             $cordovaContacts.save(info).then(function (result) {
 
-                 $cordovaVibration.vibrate(vibrateDuration);
 
-                 success(result);
 
-             }, function (err) {
 
-                 $cordovaVibration.vibrate(vibrateDuration);
 
-                 error(err);
 
-             });
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var getCurrentPosition = function (success, error) {
 
-             var options = {
 
-                 timeout: 10000,
 
-                 enableHighAccuracy: false
 
-             }
 
-             notify('Obteniendo localización');
 
-             $cordovaGeolocation.getCurrentPosition(options).then(function (position) {
 
-                 notify('Localización obtenida con éxito');
 
-                 success(position);
 
-             }, function (err) {
 
-                 notify('No se pudo obtener la localización, revise si su GPS está activo', true);
 
-                 error(err);
 
-             });
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var navigate = function (destination, success, error) {
 
-             if (!destination.partner_latitude || !destination.partner_longitude) {
 
-                 return error('No hay destino');
 
-             }
 
-             $cordovaLaunchNavigator.navigate(destination).then(function () {
 
-                 success('Navigator launched');
 
-             }, function (err) {
 
-                 error(err);
 
-             });
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var vibrate = function () {
 
-             $cordovaVibration.vibrate(vibrateDuration);
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var toast = function (message, long) {
 
-             long = long || false;
 
-             $cordovaToast.show(message, long ? 'long' : 'short', 'bottom');
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var confirm = function (message, title, success) {
 
-             $cordovaDialogs.confirm(message, title, ['Aceptar', 'Cancelar']).then(function (index) {
 
-                 success(index);
 
-             });
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var notify = function (message, long) {
 
-             vibrate();
 
-             toast(message, long);
 
-         }
 
-         /**
 
-          *
 
-          */
 
-         var detectShake = function () {
 
-             var previousMeasurements = {};
 
-             var options = {
 
-                 frequency: 100,
 
-                 deviation: 25
 
-             }
 
-             var watcher = null;
 
-             var startWatching = function () {
 
-                 watcher = $cordovaDeviceMotion.watchAcceleration(options);
 
-                 watcher.then(null, function (err) {
 
-                     console.log(err);
 
-                 }, function (currentMeasurements) {
 
-                     evaluateShake(currentMeasurements);
 
-                 });
 
-             }
 
-             var evaluateShake = function (currentMeasurements) {
 
-                 var measurements = {};
 
-                 if (previousMeasurements.x) {
 
-                     measurements.x = Math.abs(previousMeasurements.x, currentMeasurements.x);
 
-                     measurements.y = Math.abs(previousMeasurements.y, currentMeasurements.y);
 
-                     measurements.z = Math.abs(previousMeasurements.x, currentMeasurements.z);
 
-                 }
 
-                 if (measurements.x + measurements.y + measurements.z > options.deviation) {
 
-                     stopWatching();
 
-                     previousMeasurements = {};
 
-                 } else {
 
-                     previousMeasurements = currentMeasurements;
 
-                 }
 
-             }
 
-             var stopWatching = function () {
 
-                 watcher.clearWatch();
 
-                 $timeout(function () {
 
-                     startWatching();
 
-                 }, 1500);
 
-                 $rootScope.$broadcast('device.shaked');
 
-             }
 
-             startWatching();
 
-         }
 
-         return {
 
-             takePicture: takePicture,
 
-             saveContact: saveContact,
 
-             getCurrentPosition: getCurrentPosition,
 
-             navigate: navigate,
 
-             vibrate: vibrate,
 
-             toast: toast,
 
-             confirm: confirm,
 
-             notify: notify,
 
-             detectShake: detectShake
 
-         }
 
-     });
 
 
  |