product-template-sync-provider.ts 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. import { Injectable } from '@angular/core';
  2. import { DataProvider } from '../data-provider';
  3. import { OdooProvider } from '../odoo-provider';
  4. @Injectable()
  5. export class ProductTemplateSyncProvider {
  6. constructor(
  7. public dataProvider: DataProvider,
  8. public odooProvider: OdooProvider
  9. ) { }
  10. /**
  11. *
  12. */
  13. doSync(): Promise<any> {
  14. return new Promise((resolve, reject) => {
  15. this.getCreatedProducts().then(products => {
  16. return products;
  17. }).then(products => {
  18. return this.odooProvider.post("product_template", products);
  19. }).then(() => {
  20. console.log('product_template: new products sended');
  21. return this.getUpdatedProducts();
  22. }).then(products => {
  23. return this.odooProvider.put("product_template", products);
  24. }).then(() => {
  25. console.log('product_template: modified products sended');
  26. return this.getDeletedProducts();
  27. }).then(products => {
  28. return this.odooProvider.delete("product_template", products);
  29. }).then(() => {
  30. console.log('product_template: deleted products sended');
  31. return this.odooProvider.get("product_template");
  32. }).then(products => {
  33. return this.storeProducts(products);
  34. }).then(() => {
  35. console.log('product_template: products downloaded');
  36. resolve(true);
  37. }).catch(e => {
  38. reject(e);
  39. });
  40. });
  41. }
  42. /**
  43. *
  44. */
  45. private getCreatedProducts(): Promise<any> {
  46. return new Promise((resolve, reject) => {
  47. this.dataProvider.getAll("product_template").then(templates => {
  48. resolve(templates.filter(item => {
  49. return item.doc_state === "created" || (item.doc_state === "updated" && !item.remote_id);
  50. }));
  51. }).catch(e => {
  52. reject(e);
  53. });
  54. });
  55. }
  56. /**
  57. *
  58. */
  59. private getUpdatedProducts(): Promise<any> {
  60. return new Promise((resolve, reject) => {
  61. this.dataProvider.getAll("product_template").then(templates => {
  62. let products = templates.filter(item => {
  63. return item.doc_state === "updated" && item.remote_id;
  64. });
  65. resolve(products.map(item => {
  66. delete item.id;
  67. return item;
  68. }));
  69. }).catch(e => {
  70. reject(e);
  71. });
  72. });
  73. }
  74. /**
  75. *
  76. */
  77. private getDeletedProducts(): Promise<any> {
  78. return new Promise((resolve, reject) => {
  79. this.dataProvider.getAll("product_template").then(templates => {
  80. let products = templates.filter(item => {
  81. return item.doc_state === "deleted";
  82. });
  83. resolve(products.map(item => {
  84. delete item.id;
  85. return item;
  86. }));
  87. }).catch(e => {
  88. reject(e);
  89. });
  90. });
  91. }
  92. /**
  93. *
  94. */
  95. private storeProducts(products: Array<any>): Promise<any> {
  96. return new Promise((resolve, reject) => {
  97. this.dataProvider.deleteAll("product_template").then(() => {
  98. return;
  99. }).then(() => {
  100. console.log(products);
  101. return this.dataProvider.save("product_template", products.map(item => {
  102. item.remote_id = item.id;
  103. item.doc_state = "sync";
  104. delete item.id;
  105. return item;
  106. }));
  107. }).then(() => {
  108. resolve();
  109. }).catch(e => {
  110. reject(e);
  111. });
  112. });
  113. }
  114. }