sync.factory.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. angular.module(
  2. 'odoo.sync.factory',
  3. [
  4. 'odoo.utils.factory',
  5. 'odoo.interoperability.factory',
  6. 'odoo.storage.factory'
  7. ]
  8. )
  9. .factory('sync', function (storage, odoo, async) {
  10. return {
  11. syncCustomers: function (success, error) {
  12. // Get current user saved on mobile
  13. storage.get('user', function (users) {
  14. if (users.length == 1) {
  15. var userConfig = users.item(0);
  16. // 1. Transfer all new data from mobile to server
  17. storage.getByConstraint('partner', 'remote_id = 0 AND customer = 1', function(newPartners) {
  18. async.loop(newPartners.length, function (loop) {
  19. var data = newPartners.item(loop.iteration());
  20. // Avoid odoo server warning message
  21. delete data.id;
  22. delete data.remote_id;
  23. delete data.modified;
  24. delete data.modifiedDate;
  25. odoo.create('res.partner', data, userConfig, function (response) {
  26. loop.next();
  27. }, function (odooCreateError) {
  28. loop.break();
  29. });
  30. // End loop
  31. }, function() {
  32. // 2. Transfer all modified data from mobile to server
  33. storage.getByConstraint('partner', 'remote_id != 0 AND customer = 1 AND modified = 1', function (modifiedPartners) {
  34. async.loop(modifiedPartners.length, function (loop) {
  35. var localData = modifiedPartners.item(loop.iteration());
  36. odoo.read('res.partner', [['id', '=', localData.remote_id]], userConfig, function (response) {
  37. if (response.length == 1) {
  38. var remoteData = response[0];
  39. var remoteModifiedDate = new Date(remoteData.__last_update);
  40. var localModifiedDate = new Date(localData.modifiedDate);
  41. if (localModifiedDate > remoteModifiedDate) {
  42. var id = localData.remote_id;
  43. // Avoid odoo server warning message
  44. delete localData.id;
  45. delete localData.remote_id;
  46. delete localData.modified;
  47. delete localData.modifiedDate;
  48. odoo.write('res.partner', id, localData, userConfig, function (response) {
  49. loop.next();
  50. }, function (odooWriteError) {
  51. console.error(odooWriteError);
  52. loop.next();
  53. });
  54. } else {
  55. loop.next();
  56. }
  57. } else {
  58. loop.next();
  59. }
  60. }, function(odooReadError) {
  61. console.error(odooReadError);
  62. loop.next();
  63. });
  64. // End loop
  65. }, function () {
  66. // 3. Delete server data from mobile
  67. storage.getByConstraint('partner', 'remote_id != 0 AND customer = 1 AND modified = 2', function (deletedPartners) {
  68. async.loop(deletedPartners.length, function (loop) {
  69. var id = deletedPartners.item(loop.iteration()).remote_id;
  70. odoo.unlink('res.partner', id, userConfig, function (response) {
  71. loop.next();
  72. }, function (odooUnlinkError) {
  73. console.error(odooUnlinkError);
  74. loop.next();
  75. });
  76. // End loop
  77. }, function () {
  78. // 4. Download updated data from server to mobile
  79. odoo.read('res.partner', [['customer', '=', true]], userConfig, function (updatedPartners) {
  80. storage.deleteAllCustomers(function () {
  81. async.loop(updatedPartners.length, function (loop) {
  82. var data = updatedPartners[loop.iteration()];
  83. // Set id for save on local database
  84. data.remote_id = data.id;
  85. delete data.id;
  86. storage.saveCustomer(data, function (customerId) {
  87. loop.next();
  88. } ,function (saveCustomerError) {
  89. console.error(saveCustomerError);
  90. loop.next();
  91. });
  92. }, function () {
  93. success(updatedPartners);
  94. });
  95. }, function (deleteAllCustomersError) {
  96. error(deleteAllCustomersError);
  97. });
  98. }, function (odooReadError) {
  99. error(odooReadError);
  100. });
  101. });
  102. }, function (getDeletedPartnersError) {
  103. error(getDeletedPartnersError);
  104. });
  105. });
  106. }, function (getModifiedPartnersError) {
  107. error(getModifiedPartnersError);
  108. });
  109. });
  110. }, function (partnerGetByConstraintError) {
  111. error(partnerGetByConstraintError);
  112. });
  113. }
  114. }, function(userGetError) {
  115. error(userGetError);
  116. });
  117. }
  118. }
  119. });