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('crm_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 (opportunityId) {
  148. loop.next();
  149. }, function (saveErr) {
  150. loop.next();
  151. });
  152. }, function () {
  153. success(opportunities);
  154. });
  155. }, function (removeAllErr) {
  156. console.log(removeAllErr);
  157. error(removeAllErr);
  158. });
  159. }, function (pullErr) {
  160. error(pullErr);
  161. });
  162. }
  163. /**
  164. *
  165. */
  166. var sync = function (success, error) {
  167. syncNewData(function () {
  168. console.log('opportunities --> new data ok');
  169. syncUpdatedData(function () {
  170. console.log('opportunities --> updated data ok');
  171. syncDeletedData(function () {
  172. console.log('opportunities --> deleted data ok');
  173. downloadSyncData(function (data) {
  174. console.log('opportunities --> download data ok');
  175. success(data);
  176. }, function (syncErr) {
  177. error(syncErr);
  178. });
  179. }, function (syncErr) {
  180. error(syncErr);
  181. });
  182. }, function (syncErr) {
  183. error(syncErr);
  184. });
  185. }, function (syncErr) {
  186. error(syncErr);
  187. });
  188. }
  189. return {
  190. pull: pull,
  191. push: push,
  192. destroy: destroy,
  193. getAll: getAll,
  194. sync: sync
  195. }
  196. });