123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- import { Injectable } from '@angular/core';
- import { DataProvider } from '../data-provider';
- import { OdooProvider } from '../odoo-provider';
- @Injectable()
- export class ProductTemplateSyncProvider {
- 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(() => {
- console.log('product_template: new products sended');
- return this.getUpdatedProducts();
- }).then(products => {
- return this.odooProvider.put("product_template", products);
- }).then(() => {
- console.log('product_template: modified products sended');
- return this.getDeletedProducts();
- }).then(products => {
- return this.odooProvider.delete("product_template", products);
- }).then(() => {
- console.log('product_template: deleted products sended');
- return this.odooProvider.get("product_template");
- }).then(products => {
- return this.storeProducts(products);
- }).then(() => {
- console.log('product_template: products downloaded');
- resolve(true);
- }).catch(e => {
- reject(e);
- });
- });
- }
- /**
- *
- */
- private getCreatedProducts(): Promise<any> {
- return new Promise((resolve, reject) => {
- this.dataProvider.getAll("product_template").then(templates => {
- resolve(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(templates => {
- let products = 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(templates => {
- let products = 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(() => {
- console.log(products);
-
-
- 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);
- });
- });
- }
- }
|