opportunity.sync.factory.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. angular.module('odoo')
  2. /**
  3. * -----------------------------------------------------------------------------
  4. * Description: Local storage manager for crm stage data
  5. * -----------------------------------------------------------------------------
  6. */
  7. .factory('opportunitiesDataFactory', function (
  8. opportunitiesStorageFactory,
  9. leadsRemoteFactory,
  10. odooFactory,
  11. sqlFactory,
  12. asyncLoopFactory
  13. ) {
  14. /**
  15. *
  16. */
  17. var pull = function (id, success, error) {
  18. if (id) {
  19. odooFactory.read('crm.lead', [['id', '=', id]], function (response) {
  20. success(response);
  21. }, function (odooErr) {
  22. error(odooErr);
  23. });
  24. } else {
  25. odooFactory.read('crm.lead', [['type', '=', 'opportunity']], function (response) {
  26. success(response);
  27. }, function (odooErr) {
  28. error(odooErr);
  29. });
  30. }
  31. }
  32. /**
  33. *
  34. */
  35. var push = function (id, data, success, error) {
  36. leadsRemoteFactory.push(id, data, function (response) {
  37. success(response);
  38. }, function (err) {
  39. error(err);
  40. });
  41. }
  42. /**
  43. *
  44. */
  45. var destroy = function (id, success, error) {
  46. leadsRemoteFactory.destroy(id, function (response) {
  47. success(response);
  48. }, function (err) {
  49. error(err);
  50. });
  51. }
  52. /**
  53. *
  54. */
  55. var get = function (constraint, success, error) {
  56. sqlFactory.selectByConstraint('lead', constraint, function (leads) {
  57. success(leads);
  58. }, function (err) {
  59. error(err);
  60. });
  61. }
  62. /**
  63. *
  64. */
  65. var getAll = function (success, error) {
  66. get("type = 'opportunity' AND modified != 2", function (opportunities) {
  67. var data = [];
  68. for (var i = 0; i < opportunities.length; i++) {
  69. data.push(opportunities.item(i));
  70. }
  71. success(data);
  72. }, function (selectErr) {
  73. error(selectErr);
  74. });
  75. }
  76. /**
  77. *
  78. */
  79. var syncNewData = function (success, error) {
  80. get("remote_id = 0 AND type = 'opportunity'", function (newOpportunities) {
  81. asyncLoopFactory(newOpportunities.length, function (loop) {
  82. var data = newOpportunities.item(loop.iteration());
  83. push(null, data, function (response) {
  84. loop.next();
  85. }, function (pushErr) {
  86. loop.next();
  87. });
  88. // end loop
  89. }, function () {
  90. success(newOpportunities);
  91. });
  92. }, function (getErr) {
  93. error(getErr);
  94. });
  95. }
  96. /**
  97. *
  98. */
  99. var syncUpdatedData = function (success, error) {
  100. get("remote_id != 0 AND modified = 1 AND type = 'opportunity'", function (updatedOpportunities) {
  101. asyncLoopFactory(updatedOpportunities.length, function (loop) {
  102. var data = updatedOpportunities.item(loop.iteration());
  103. console.log(data);
  104. push(data.remote_id, data, function (response) {
  105. loop.next();
  106. }, function (pushErr) {
  107. loop.next();
  108. });
  109. // end loop
  110. }, function () {
  111. success(updatedOpportunities);
  112. });
  113. }, function (getErr) {
  114. error(getErr);
  115. });
  116. }
  117. /**
  118. *
  119. */
  120. var syncDeletedData = function (success, error) {
  121. get("remote_id != 0 AND modified = 2 AND type = 'opportunity'", function (deletedOpportunities) {
  122. asyncLoopFactory(deletedOpportunities.length, function (loop) {
  123. var id = deletedOpportunities.item(loop.iteration()).remote_id;
  124. destroy(id, function (response) {
  125. loop.next();
  126. }, function (destroyErr) {
  127. loop.next();
  128. });
  129. // end loop
  130. }, function () {
  131. success(deletedOpportunities);
  132. });
  133. }, function (getErr) {
  134. error(getErr);
  135. });
  136. }
  137. /**
  138. *
  139. */
  140. var downloadSyncData = function (success, error) {
  141. pull(null, function (opportunities) {
  142. opportunitiesStorageFactory.removeAll(function () {
  143. asyncLoopFactory(opportunities.length, function (loop) {
  144. var data = opportunities[loop.iteration()];
  145. data.remote_id = data.id;
  146. delete data.id;
  147. opportunitiesStorageFactory.save(data, function (opportunity) {
  148. loop.next();
  149. }, function (saveErr) {
  150. loop.next();
  151. });
  152. }, function () {
  153. success(opportunities);
  154. });
  155. }, function (removeAllErr) {
  156. error(removeAllErr);
  157. });
  158. }, function (pullErr) {
  159. error(pullErr);
  160. });
  161. }
  162. /**
  163. *
  164. */
  165. var sync = function (success, error) {
  166. syncNewData(function () {
  167. console.log('opportunities --> new data ok');
  168. syncUpdatedData(function () {
  169. console.log('opportunities --> updated data ok');
  170. syncDeletedData(function () {
  171. console.log('opportunities --> deleted data ok');
  172. downloadSyncData(function (data) {
  173. console.log('opportunities --> download data ok');
  174. success(data);
  175. }, function (syncErr) {
  176. error(syncErr);
  177. });
  178. }, function (syncErr) {
  179. error(syncErr);
  180. });
  181. }, function (syncErr) {
  182. error(syncErr);
  183. });
  184. }, function (syncErr) {
  185. error(syncErr);
  186. });
  187. }
  188. return {
  189. pull: pull,
  190. push: push,
  191. destroy: destroy,
  192. getAll: getAll,
  193. sync: sync
  194. }
  195. });