Browse Source

test de sincronizacion de productos

robert2206 8 years ago
parent
commit
cdf9c48aaa
3 changed files with 124 additions and 24 deletions
  1. 33 0
      src/providers/data-provider.ts
  2. 50 0
      src/providers/odoo-provider.ts
  3. 41 24
      src/providers/sync-provider.ts

+ 33 - 0
src/providers/data-provider.ts

@@ -93,6 +93,39 @@ export class DataProvider {
         });
     }
 
+    /**
+     *
+     */
+    deleteAll(type: string): Promise<any> {
+        return new Promise((res, rej) => { 
+            
+            this.getAll(type).then(data => {
+                return data;
+            }).then(data => {
+                console.log(data);
+                
+                let promises: Array<Promise<any>> = [];
+
+                for (let i = 0; i < data.length; i++) {
+                    promises.push(new Promise((resolve, reject) => {
+                        resolve(this.data.rel.del(type, data[i]));
+                    }));
+                }
+
+                return promises;
+            }).then(p => {
+                console.log(p);
+                
+                return Promise.all(p);    
+            }).then(() => { 
+                res(true);
+            }).catch(e => {
+                rej(e);
+            });
+            
+        });    
+    }
+
     /**
      *
      */

+ 50 - 0
src/providers/odoo-provider.ts

@@ -33,6 +33,10 @@ export class OdooProvider {
      * 
      */
     post(resource: string, data: Array<any>): Promise<any> {
+        if (data.length == 0) {
+            return;
+        }
+
         let headers = new Headers({
             'Content-Type':  'application/x-www-form-urlencoded',
             'Authorization': 'JWT ' + this.preferencesProvider.getToken()
@@ -96,13 +100,59 @@ export class OdooProvider {
      *
      */
     put(resource: string, data: Array<any>) {
+        if (data.length == 0) {
+            return;
+        }
 
+        let headers = new Headers({
+            'Content-Type':  'application/x-www-form-urlencoded',
+            'Authorization': 'JWT ' + this.preferencesProvider.getToken()
+        });
+
+        let options = new RequestOptions({ headers: headers });
+
+        let toSend: Array<Observable<Response>> = [];
+        for (let i = 0; i < data.length; i++) {
+            this.encodeData(data[i]);
+            toSend.push(this.http.put(this.url + resource + '/' + data[i].id, this.encodeData(data[i]), options));
+        }
+
+        return new Promise((resolve, reject) => { 
+            Observable.forkJoin(toSend).subscribe(r => { 
+                resolve(r);
+            }, e => {
+                reject(e);
+            });
+        });
     }
 
     /**
      *
      */
     delete(resource: string, data: Array<any>) {
+        if (data.length == 0) {
+            return;
+        }
 
+        let headers = new Headers({
+            'Content-Type':  'application/x-www-form-urlencoded',
+            'Authorization': 'JWT ' + this.preferencesProvider.getToken()
+        });
+
+        let options = new RequestOptions({ headers: headers });
+
+        let toSend: Array<Observable<Response>> = [];
+        for (let i = 0; i < data.length; i++) {
+            this.encodeData(data[i]);
+            toSend.push(this.http.delete(this.url + resource + '/' + data[i].id, options));
+        }
+
+        return new Promise((resolve, reject) => { 
+            Observable.forkJoin(toSend).subscribe(r => { 
+                resolve(r);
+            }, e => {
+                reject(e);
+            });
+        });
     }
 }

+ 41 - 24
src/providers/sync-provider.ts

@@ -17,30 +17,26 @@ export class SyncProvider {
     doSync(): Promise<any> {
         return new Promise((resolve, reject) => {
             this.getCreatedProducts().then(products => {
-                if (products.length == 0) {
-                    resolve();
-                }
-                
-                this.odooProvider.post("products", products).then(r => { 
-                    resolve(r);
-                }).catch(e => {
-                    reject(e);
-                });
-            });            
-        });
-    }
-
-    /**
-     *
-     */
-    private pushCreatedProducts(): any {
-        this.getCreatedProducts().then(p => {
-            let promises = this.odooProvider.post("products", p);
-            
-            console.log(promises);
-            
-        }).catch(e => {
-            console.log(e);
+                return products;
+            }).then(products => {
+                return this.odooProvider.post("products", products);
+            }).then(() => {
+                return this.getUpdatedProducts();
+            }).then(products => {
+                return this.odooProvider.put("products", products);
+            }).then(() => {
+                return this.getDeletedProducts();
+            }).then(products => {
+                return this.odooProvider.delete("products", products);
+            }).then(() => {
+                return this.odooProvider.get("products");
+            }).then(products => {
+                return this.storeProducts(products);
+            }).then(() => {
+                resolve(true);    
+            }).catch(e => { 
+                reject(e);
+            });
         });
     }
 
@@ -88,4 +84,25 @@ export class SyncProvider {
             });
         });
     }
+
+    /**
+     *
+     */
+    private storeProducts(products: Array<any>): Promise<any> {
+        if (products.length == 0) {
+            return;
+        }
+
+        return new Promise((resolve, reject) => {
+            this.dataProvider.deleteAll("products").then(r => { 
+                return r;
+            }).then(ok => {
+                console.log(ok);
+                
+                resolve(ok);
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+    }
 }