|
@@ -1,8 +1,60 @@
|
|
|
angular.module('odoo')
|
|
|
|
|
|
-.factory('config', function (storage) {
|
|
|
+/**
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ * Description: Native SQL util instructions
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
+.factory('sql', function () {
|
|
|
+
|
|
|
+ // 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 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,
|
|
|
+ count: count
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+/**
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ * Description: Get user configuration from local database
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
+.factory('config', function (sql) {
|
|
|
return function (success, error) {
|
|
|
- storage.get('user', function (users) {
|
|
|
+ sql.get('user', function (users) {
|
|
|
success(users);
|
|
|
}, function (err) {
|
|
|
error(err);
|
|
@@ -10,6 +62,51 @@ angular.module('odoo')
|
|
|
};
|
|
|
})
|
|
|
|
|
|
+/**
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ * Description: Async loop util v2
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
+.factory('asyncLoop', 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: Async loop util
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
.factory('async', function () {
|
|
|
return {
|
|
|
loop: function (iterations, func, callback) {
|
|
@@ -47,88 +144,105 @@ angular.module('odoo')
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+/**
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ * Description: Native camera manager
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
.factory('camera', function ($cordovaCamera) {
|
|
|
- return {
|
|
|
- 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);
|
|
|
- });
|
|
|
- }
|
|
|
+ // Take a picture using native camera
|
|
|
+ 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);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ return {
|
|
|
+ takePicture: takePicture
|
|
|
}
|
|
|
})
|
|
|
|
|
|
+/**
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ * Description: Native contacts manager
|
|
|
+ * -----------------------------------------------------------------------------
|
|
|
+ */
|
|
|
.factory('contact', function ($cordovaContacts) {
|
|
|
|
|
|
- return {
|
|
|
- save: function (customer, success, error) {
|
|
|
- if(!customer.mobile && !customer.phone && !customer.email) {
|
|
|
- error();
|
|
|
- return;
|
|
|
- }
|
|
|
+ // Save customer information to device contacts
|
|
|
+ var save = function (customer, success, error) {
|
|
|
+ if(!customer.mobile && !customer.phone && !customer.email) {
|
|
|
+ error();
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
- var contact = {
|
|
|
- name: {
|
|
|
- givenName: customer.name,
|
|
|
- familyName: '',
|
|
|
- formatted: ''
|
|
|
+ var contact = {
|
|
|
+ name: {
|
|
|
+ givenName: customer.name,
|
|
|
+ familyName: '',
|
|
|
+ formatted: ''
|
|
|
+ },
|
|
|
+ nickname: '',
|
|
|
+ phoneNumbers: [
|
|
|
+ {
|
|
|
+ value: customer.phone,
|
|
|
+ type: 'phone'
|
|
|
},
|
|
|
- nickname: '',
|
|
|
- phoneNumbers: [
|
|
|
- {
|
|
|
- value: customer.phone,
|
|
|
- type: 'phone'
|
|
|
- },
|
|
|
- {
|
|
|
- value: customer.mobile,
|
|
|
- type: 'mobile'
|
|
|
- }
|
|
|
- ],
|
|
|
- emails: [
|
|
|
- {
|
|
|
- value: customer.email,
|
|
|
- type: 'home'
|
|
|
- }
|
|
|
- ],
|
|
|
- addresses: [
|
|
|
- {
|
|
|
- type: 'home',
|
|
|
- formatted: '',
|
|
|
- streetAddress: customer.street,
|
|
|
- locality: customer.city,
|
|
|
- region: '',
|
|
|
- postalCode: '',
|
|
|
- country: 'Paraguay'
|
|
|
- }
|
|
|
- ],
|
|
|
- ims: null,
|
|
|
- organizations: null,
|
|
|
- birthday: null,
|
|
|
- note: null,
|
|
|
- photos: null,
|
|
|
- categories: null,
|
|
|
- urls: null
|
|
|
- };
|
|
|
+ {
|
|
|
+ value: customer.mobile,
|
|
|
+ type: 'mobile'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ emails: [
|
|
|
+ {
|
|
|
+ value: customer.email,
|
|
|
+ type: 'home'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ addresses: [
|
|
|
+ {
|
|
|
+ type: 'home',
|
|
|
+ formatted: '',
|
|
|
+ streetAddress: customer.street,
|
|
|
+ locality: customer.city,
|
|
|
+ region: '',
|
|
|
+ postalCode: '',
|
|
|
+ country: 'Paraguay'
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ ims: null,
|
|
|
+ organizations: null,
|
|
|
+ birthday: null,
|
|
|
+ note: null,
|
|
|
+ photos: null,
|
|
|
+ categories: null,
|
|
|
+ urls: null
|
|
|
+ };
|
|
|
|
|
|
- $cordovaContacts.save(contact).then(function (result) {
|
|
|
- success(result);
|
|
|
- }, function (err) {
|
|
|
- error(err);
|
|
|
- });
|
|
|
- }
|
|
|
+ $cordovaContacts.save(contact).then(function (result) {
|
|
|
+ success(result);
|
|
|
+ }, function (err) {
|
|
|
+ error(err);
|
|
|
+ });
|
|
|
+ };
|
|
|
+
|
|
|
+ return {
|
|
|
+ save: save
|
|
|
}
|
|
|
});
|