Browse Source

modularizado el modulo de sincronizacion

robert2206 8 years ago
parent
commit
f39262692a

+ 6 - 0
src/app/app.module.ts

@@ -24,6 +24,9 @@ import { AboutPage } from '../pages/about/about'
 import { DataProvider } from '../providers/data-provider';
 import { OdooProvider } from '../providers/odoo-provider';
 import { SyncProvider } from '../providers/sync-provider';
+import { ProductSyncProvider } from '../providers/sync/product-sync-provider';
+import { ProductAttributeLineSyncProvider } from '../providers/sync/product-attribute-line-sync-provider';
+import { ProductAttributeValueSyncProvider } from '../providers/sync/product-attribute-value-sync-provider';
 import { NetworkProvider } from '../providers/network-provider';
 import { PreferencesProvider } from '../providers/preferences-provider';
 import { ToolsProvider } from '../providers/tools-provider';
@@ -80,6 +83,9 @@ import { ChartModule } from 'ng2-chartjs2';
         DataProvider,
         OdooProvider,
         SyncProvider,
+        ProductSyncProvider,
+        ProductAttributeLineSyncProvider,
+        ProductAttributeValueSyncProvider,
         NetworkProvider,
         PreferencesProvider,
         ToolsProvider

+ 7 - 1
src/pages/product-details/product-details.ts

@@ -34,7 +34,7 @@ export class ProductDetailsPage {
         attribute_line_ids: []
     }
 
-     attributes = [
+    attributes = [
         {
             id: 1,
             name: "Talle",
@@ -129,6 +129,12 @@ export class ProductDetailsPage {
             this.product = this.params.data;
             this.product.doc_state = "updated";
         }
+
+        this.data.getAll('product_attribute_line').then(lines => { 
+            console.log(lines);
+        }).catch(e => { 
+            console.log(e);
+        });
     }
 
     /**

+ 4 - 4
src/pages/product-list/product-list.ts

@@ -39,8 +39,8 @@ export class ProductListPage extends DefaultListable<Product> implements INaviga
         });
 
         loader.present();
-        this.dataProvider.getAll("product").then(r => { 
-            this.elements = r.products.filter(item => {
+        this.dataProvider.getAll("product_template").then(r => {
+            this.elements = r.product_templates.filter(item => {
                 return item.doc_state !== "deleted"; 
             });
 
@@ -127,12 +127,12 @@ export class ProductListPage extends DefaultListable<Product> implements INaviga
     removeItem(item: any) {
         item.doc_state = "deleted";
         
-        this.dataProvider.delete("product", item).then(result => {
+        this.dataProvider.delete("product_template", item).then(result => {
             this.remove(item);
         }).catch(() => {
             this.toastCtrl.create({
                 message: "No se pudo eliminar el producto",
-                duration: 1000
+                duration: 3000
             }).present();
         });
     }

+ 17 - 25
src/providers/data-provider.ts

@@ -36,12 +36,7 @@ export class DataProvider {
             },
             {
                 singular: 'user',
-                plural: 'users',
-                relations: {
-                    partner: {
-                        belongsTo: 'partner'
-                    }
-                }
+                plural: 'users'
             },
             {
                 singular: 'currency',
@@ -49,21 +44,11 @@ export class DataProvider {
             },
             {
                 singular: 'company',
-                plural: 'companies',
-                relations: {
-                    currency: {
-                        belongsTo: 'currency'
-                    }
-                }
+                plural: 'companies'
             },
             {
-                singular: 'product',
-                plural: 'products',
-                relations: {
-                    company: {
-                        belongsTo: 'product'
-                    }
-                }
+                singular: 'product_template',
+                plural: 'product_templates'
             },
             {
                 singular: 'warehouse',
@@ -75,12 +60,19 @@ export class DataProvider {
             },
             {
                 singular: 'lead',
-                plural: 'leads',
-                relations: {
-                    partner: {
-                        belongsTo: 'partner'
-                    }
-                }
+                plural: 'leads'
+            },
+            {
+                singular: 'product_attribute_line',
+                plural: 'product_attribute_lines'
+            },
+            {
+                singular: 'product_attribute_value',
+                plural: 'product_attribute_value'
+            },
+            {
+                singular: 'product',
+                plural: 'products'
             }
         ]);
     }

+ 13 - 109
src/providers/sync-provider.ts

@@ -1,123 +1,27 @@
 import { Injectable } from '@angular/core';
-import { DataProvider } from './data-provider';
-import { OdooProvider } from './odoo-provider';
-// import { NetworkProvider } from './network-provider';
+import { ProductSyncProvider } from './sync/product-sync-provider';
+import { ProductAttributeLineSyncProvider } from './sync/product-attribute-line-sync-provider';
+import { ProductAttributeValueSyncProvider } from './sync/product-attribute-value-sync-provider';
 
 @Injectable()    
 export class SyncProvider {
 
     constructor(
-        public dataProvider: DataProvider,
-        public odooProvider: OdooProvider
+        public productTemplateSync: ProductSyncProvider,
+        public productAttributeLineSync: ProductAttributeLineSyncProvider,
+        public productAttributeValueSync: ProductAttributeValueSyncProvider
     ) { }
 
     /**
      *
      */
     doSync(): Promise<any> {
-        return new Promise((resolve, reject) => {
-            this.getCreatedProducts().then(products => {
-                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);
-            });
-        });
-    }
-
-    /**
-     *
-     */
-    private getCreatedProducts(): Promise<any> {
-        return new Promise((resolve, reject) => {
-            this.dataProvider.getAll("product").then(r => {
-                resolve(r.products.filter(item => {
-                    return item.doc_state === "created" || (item.doc_state === "updated" && !item.remote_id);
-                }));
-            }).catch(e => {
-                reject(e);
-            });
-        });
-    }
-
-    private 
-
-    /**
-     *
-     */
-    private getUpdatedProducts(): Promise<any> {
-        return new Promise((resolve, reject) => {
-            this.dataProvider.getAll("product").then(data => {
-                let products = data.products.filter(item => {
-                    return item.doc_state === "updated" && item.remote_id;
-                });
-                
-                resolve(products.map(item => {
-                    delete item.id;
-                    return item;
-                }));
-            }).catch(e => {
-                reject(e);
-            });
-        });
-    }
-
-    /**
-     *
-     */
-    private getDeletedProducts(): Promise<any> {
-        return new Promise((resolve, reject) => { 
-            this.dataProvider.getAll("product").then(data => {
-                let products = data.products.filter(item => { 
-                    return item.doc_state === "deleted";
-                });
-                
-                resolve(products.map(item => {
-                    delete item.id;
-                    return item;
-                }));
-            }).catch(e => { 
-                reject(e);
-            });
-        });
-    }
-
-    /**
-     *
-     */
-    private storeProducts(products: Array<any>): Promise<any> {
-        return new Promise((resolve, reject) => {
-            this.dataProvider.deleteAll("products").then(() => {
-                return;
-            }).then(() => {
-                
-                return this.dataProvider.save("products", products.map(item => {
-                    item.remote_id = item.id;
-                    item.doc_state = "sync";
-                    delete item.id;
-
-                    return item;
-                }));
-            }).then(() => { 
-                resolve();
-            }).catch(e => { 
-                reject(e);    
-            });
-        });
+        return Promise.all(
+            [
+                this.productTemplateSync.doSync(),
+                this.productAttributeLineSync.doSync(),
+                this.productAttributeValueSync.doSync()
+            ]
+        );
     }
 }

+ 53 - 0
src/providers/sync/product-attribute-line-sync-provider.ts

@@ -0,0 +1,53 @@
+import { Injectable } from '@angular/core';
+import { DataProvider } from '../data-provider';
+import { OdooProvider } from '../odoo-provider';
+
+@Injectable()
+export class ProductAttributeLineSyncProvider {
+
+    constructor(
+        public dataProvider: DataProvider,
+        public odooProvider: OdooProvider
+    ) { }
+
+    /**
+     *
+     */
+    doSync(): Promise<any> {
+        return new Promise((reject, resolve) => {
+            this.odooProvider.get('product_attribute_line').then(lines => {
+                return lines;
+            }).then(lines => {
+                return this.storeLines(lines);
+            }).then(() => {
+                resolve();
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+
+    }
+
+        /**
+     *
+     */
+    private storeLines(lines: Array<any>): Promise<any> {
+        return new Promise((reject, resolve) => {
+            this.dataProvider.deleteAll('product_attribute_line').then(() => {
+                return;
+            }).then(() => {
+                return this.dataProvider.save('product_attribute_line', lines.map(item => {
+                    item.remote_id = item.id;
+                    item.doc_state = "sync";
+                    delete item.id;
+
+                    return item;
+                }));
+            }).then(() => {
+                resolve();
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+    }
+}

+ 53 - 0
src/providers/sync/product-attribute-value-sync-provider.ts

@@ -0,0 +1,53 @@
+import { Injectable } from '@angular/core';
+import { DataProvider } from '../data-provider';
+import { OdooProvider } from '../odoo-provider';
+
+@Injectable()
+export class ProductAttributeValueSyncProvider {
+
+    constructor(
+        public dataProvider: DataProvider,
+        public odooProvider: OdooProvider
+    ) { }
+
+    /**
+     *
+     */
+    doSync(): Promise<any> {
+        return new Promise((reject, resolve) => {
+            this.odooProvider.get('product_attribute_value').then(values => {
+                return values;
+            }).then(lines => {
+                return this.storeValues(lines);
+            }).then(() => {
+                resolve();
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+
+    }
+
+        /**
+     *
+     */
+    private storeValues(values: Array<any>): Promise<any> {
+        return new Promise((reject, resolve) => {
+            this.dataProvider.deleteAll('product_attribute_value').then(() => {
+                return;
+            }).then(() => {
+                return this.dataProvider.save('product_attribute_value', values.map(item => {
+                    item.remote_id = item.id;
+                    item.doc_state = "sync";
+                    delete item.id;
+
+                    return item;
+                }));
+            }).then(() => {
+                resolve();
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+    }
+}

+ 120 - 0
src/providers/sync/product-sync-provider.ts

@@ -0,0 +1,120 @@
+import { Injectable } from '@angular/core';
+import { DataProvider } from '../data-provider';
+import { OdooProvider } from '../odoo-provider';
+
+@Injectable()
+export class ProductSyncProvider {
+
+    constructor(
+        public dataProvider: DataProvider,
+        public odooProvider: OdooProvider
+    ) { }
+
+    /**
+     *
+     */
+    doSync(): Promise<any> {
+        return new Promise((resolve, reject) => {
+            this.getCreatedProducts().then(products => {
+                return products;
+            }).then(products => {
+                return this.odooProvider.post("product_template", products);
+            }).then(() => {
+                return this.getUpdatedProducts();
+            }).then(products => {
+                return this.odooProvider.put("product_template", products);
+            }).then(() => {
+                return this.getDeletedProducts();
+            }).then(products => {
+                return this.odooProvider.delete("product_template", products);
+            }).then(() => {
+                return this.odooProvider.get("product_template");
+            }).then(products => {
+                return this.storeProducts(products);
+            }).then(() => {
+                resolve(true);    
+            }).catch(e => { 
+                reject(e);
+            });
+        });
+    }
+
+    /**
+     *
+     */
+    private getCreatedProducts(): Promise<any> {
+        return new Promise((resolve, reject) => {
+            this.dataProvider.getAll("product_template").then(r => {
+                resolve(r.product_templates.filter(item => {
+                    return item.doc_state === "created" || (item.doc_state === "updated" && !item.remote_id);
+                }));
+            }).catch(e => {
+                reject(e);
+            });
+        });
+    }
+
+    /**
+     *
+     */
+    private getUpdatedProducts(): Promise<any> {
+        return new Promise((resolve, reject) => {
+            this.dataProvider.getAll("product_template").then(data => {
+                let products = data.product_templates.filter(item => {
+                    return item.doc_state === "updated" && item.remote_id;
+                });
+                
+                resolve(products.map(item => {
+                    delete item.id;
+                    return item;
+                }));
+            }).catch(e => {
+                reject(e);
+            });
+        });
+    }
+
+    /**
+     *
+     */
+    private getDeletedProducts(): Promise<any> {
+        return new Promise((resolve, reject) => { 
+            this.dataProvider.getAll("product_template").then(data => {
+                let products = data.product_templates.filter(item => { 
+                    return item.doc_state === "deleted";
+                });
+                
+                resolve(products.map(item => {
+                    delete item.id;
+                    return item;
+                }));
+            }).catch(e => { 
+                reject(e);
+            });
+        });
+    }
+
+    /**
+     *
+     */
+    private storeProducts(products: Array<any>): Promise<any> {
+        return new Promise((resolve, reject) => {
+            this.dataProvider.deleteAll("product_template").then(() => {
+                return;
+            }).then(() => {
+                
+                return this.dataProvider.save("product_template", products.map(item => {
+                    item.remote_id = item.id;
+                    item.doc_state = "sync";
+                    delete item.id;
+
+                    return item;
+                }));
+            }).then(() => { 
+                resolve();
+            }).catch(e => { 
+                reject(e);    
+            });
+        });
+    }
+}

+ 3 - 3
src/providers/token-service.ts

@@ -11,9 +11,9 @@ import 'rxjs/add/observable/throw'
 @Injectable()
 export class TokenService {
 
-    username: string = 'Shopping';
-    password: string = 'Ping_@3040/paraguaY';
-    url: string = 'https://tienda.maluquina.com.py';
+    username: string = 'admin';
+    password: string = 'setlos/16';
+    url: string = 'http://192.168.88.123:8069';
 
     constructor(
         private http: Http,

+ 2 - 2
src/providers/tools-provider.ts

@@ -33,10 +33,10 @@ export class ToolsProvider {
     private getUserInformation(): Promise<any> {
         return new Promise((resolve, reject) => {
 
-            this.dataProvider.getAll("users").then(r => {
+            this.dataProvider.getAll("user").then(r => {
 
                 if (r.users.length == 0) {
-                    this.odooProvider.get("users").then(users => {
+                    this.odooProvider.get("user").then(users => {
                 
                     let user = users.filter(item => {
                         return item.jwt_token === this.preferencesProvider.getToken();