utils.factory.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. angular.module('odoo')
  2. /**
  3. * -----------------------------------------------------------------------------
  4. * Description: Native SQL util instructions
  5. * -----------------------------------------------------------------------------
  6. */
  7. .factory('sqlFactory', function () {
  8. // Execute native SQL SELECT instruction
  9. var select = function(tableName, success, error) {
  10. var sql = 'SELECT * FROM ' + tableName;
  11. db.executeSql(sql, [], function(result) {
  12. success(result.rows);
  13. }, function(err) {
  14. error(err);
  15. });
  16. };
  17. // Execute native SQL SELECT instruction with a constraint
  18. var selectByConstraint = function(tableName, constraint, success, error) {
  19. var sql = 'SELECT * FROM ' + tableName + ' WHERE ' + constraint;
  20. db.executeSql(sql, [], function(result) {
  21. success(result.rows);
  22. }, function(err) {
  23. error(err);
  24. });
  25. };
  26. // Execute native SQL SELECT instruction with count instruction
  27. var count = function(tableName, success, error) {
  28. var sql = 'SELECT COUNT(*) AS total FROM ' + tableName;
  29. db.executeSql(sql, [], function(result) {
  30. success(result.rows.item(0).total);
  31. }, function(err) {
  32. error(err);
  33. });
  34. };
  35. return {
  36. select: select,
  37. selectByConstraint: selectByConstraint,
  38. count: count
  39. }
  40. })
  41. /**
  42. * -----------------------------------------------------------------------------
  43. * Description: Get user configuration from local database
  44. * -----------------------------------------------------------------------------
  45. */
  46. .factory('configFactory', function (sqlFactory) {
  47. return function (success, error) {
  48. sqlFactory.select('user', function (users) {
  49. if (users.length == 0) {
  50. success(0);
  51. } else if (users.length == 1) {
  52. success(users.item(0));
  53. } else {
  54. var configs = [];
  55. for (var i = 0; i < users.length; i++) {
  56. configs.push(users.item(i))
  57. }
  58. success(configs);
  59. }
  60. }, function (err) {
  61. error(err);
  62. });
  63. };
  64. })
  65. /**
  66. * -----------------------------------------------------------------------------
  67. * Description: Async loop util v2
  68. * -----------------------------------------------------------------------------
  69. */
  70. .factory('asyncLoopFactory', function () {
  71. return function (iterations, func, callback) {
  72. var index = 0;
  73. var done = false;
  74. var loop = {
  75. next: function () {
  76. if (done) {
  77. return;
  78. }
  79. if (index < iterations) {
  80. index++;
  81. func(loop);
  82. } else {
  83. done = true;
  84. callback();
  85. }
  86. },
  87. iteration: function() {
  88. return index - 1;
  89. },
  90. break: function() {
  91. done = true;
  92. callback();
  93. }
  94. };
  95. loop.next();
  96. return loop;
  97. }
  98. })
  99. /**
  100. * -----------------------------------------------------------------------------
  101. * Description: Native camera manager
  102. * -----------------------------------------------------------------------------
  103. */
  104. .factory('cameraFactory', function ($cordovaCamera) {
  105. // Take a picture using native camera
  106. var takePicture = function (success, error) {
  107. var options = {
  108. quality: 75,
  109. destinationType: Camera.DestinationType.DATA_URL,
  110. sourceType: Camera.PictureSourceType.CAMERA,
  111. allowEdit: true,
  112. encodingType: Camera.EncodingType.JPEG,
  113. targetWidth: 300,
  114. targetHeight: 300,
  115. popoverOptions: CameraPopoverOptions,
  116. saveToPhotoAlbum: false,
  117. correctOrientation:true
  118. };
  119. $cordovaCamera.getPicture(options).then(function(imageData) {
  120. success(imageData);
  121. }, function(err) {
  122. error(err);
  123. });
  124. };
  125. return {
  126. takePicture: takePicture
  127. }
  128. })
  129. /**
  130. * -----------------------------------------------------------------------------
  131. * Description: Native contacts manager
  132. * -----------------------------------------------------------------------------
  133. */
  134. .factory('contactFactory', function ($cordovaContacts) {
  135. // Save customer information to device contacts
  136. var save = function (customer, success, error) {
  137. if(!customer.mobile && !customer.phone && !customer.email) {
  138. error();
  139. return;
  140. }
  141. var contact = {
  142. name: {
  143. givenName: customer.name,
  144. familyName: '',
  145. formatted: ''
  146. },
  147. nickname: '',
  148. phoneNumbers: [
  149. {
  150. value: customer.phone,
  151. type: 'phone'
  152. },
  153. {
  154. value: customer.mobile,
  155. type: 'mobile'
  156. }
  157. ],
  158. emails: [
  159. {
  160. value: customer.email,
  161. type: 'home'
  162. }
  163. ],
  164. addresses: [
  165. {
  166. type: 'home',
  167. formatted: '',
  168. streetAddress: customer.street,
  169. locality: customer.city,
  170. region: '',
  171. postalCode: '',
  172. country: 'Paraguay'
  173. }
  174. ],
  175. ims: null,
  176. organizations: null,
  177. birthday: null,
  178. note: null,
  179. photos: null,
  180. categories: null,
  181. urls: null
  182. };
  183. $cordovaContacts.save(contact).then(function (result) {
  184. success(result);
  185. }, function (err) {
  186. error(err);
  187. });
  188. };
  189. return {
  190. save: save
  191. }
  192. });