Browse Source

upload service implemented

robert2206 8 years ago
parent
commit
5af6426a97

+ 7 - 0
src/pages/home/home.ts

@@ -2,6 +2,8 @@ import { Component } from '@angular/core';
 import { NavController, NavParams, MenuController } from 'ionic-angular';
 import { SyncService } from "../../services/sync-service";
 
+import "rxjs/add/operator/count";
+
 @Component({
 	selector: 'page-home',
   	templateUrl: 'home.html'
@@ -20,8 +22,13 @@ export class HomePage {
 		this.menuCtrl.enable(true);
 
 		this.sync.do().subscribe(result => { 
+			// result.count().subscribe(x => {
+			// 	console.log(x);
+				
+			// });
 			console.log(result);
 			
+			
 		}, error => console.error(error));	
   	}
 }

+ 6 - 1
src/services/download-service.ts

@@ -48,6 +48,11 @@ export class DownloadService {
         let type = data.type;
         let records = data.records;
         
-        return Observable.from(records).concatMap(item => this.pouch.save(Object.assign(item, { type: type })));
+        return Observable.from(records).map((r: any) => {
+            r.remote_id = r.id;
+            delete r.id;
+            
+            return r;
+        }).concatMap(item => this.pouch.save(Object.assign(item, { type: type, doc_state: "none" })));
     }
 }

+ 2 - 1
src/services/sync-service.ts

@@ -22,7 +22,8 @@ export class SyncService {
      *
      */
     do(): Observable<any> {
-        return this.removeAll().concat(this.download.do());
+        // return this.removeAll().concat(this.download.do());
+        return this.upload.do();
     }
 
     /**

+ 41 - 5
src/services/upload-service.ts

@@ -5,6 +5,15 @@ import { Observer } from "rxjs/Observer";
 import { PouchService } from "../services/pouch-service";
 import { OdooService } from "../services/odoo-service";
 
+import { getMetadataStorage } from "../odoo/utils/metadata-storage";
+
+import "rxjs/add/operator/filter";
+import "rxjs/add/observable/from";
+import "rxjs/add/operator/concatMap";
+import "rxjs/add/operator/map";
+import "rxjs/add/operator/groupBy";
+import "rxjs/add/operator/mergeAll";
+
 @Injectable()
 export class UploadService {
 
@@ -14,15 +23,42 @@ export class UploadService {
     ) { }
 
     do(): Observable<any> {
-        return Observable.create();
+        return this.pouch.getAll("user")
+            .concatMap(users => this.login(users.docs.shift()))
+            .concatMap(logged => Observable.from(getMetadataStorage().getModels()))
+            .concatMap(item => this.pouch.getAll(item.model.document))
+            .concatMap(result => Observable.from(result.docs).filter((r: any) => {
+                return r.doc_state == "none";
+            }).groupBy((r: any) => {
+                return r.doc_state;
+            })).mergeAll().concatMap(doc => this.processDocument(doc));    
+    }
+    
+    /**
+     *
+     */
+    private login(user: any): Observable<any> {
+        this.odoo.initialize("http://localhost:8100");
+        
+        return this.odoo.login(user.db, user.username, user.password);
     }
 
     /**
      *
      */
-    toCreate(): Observable<any> {
-        return Observable.create((observer: Observer<any>) => {
-         
-        });
+    protected processDocument(doc: any): Observable<any> {
+        let id: number = doc.remote_id;
+        let model: string = doc.type;
+
+        delete doc.type;
+        delete doc.remote_id;
+
+        if (doc.doc_state === "created") {
+            this.odoo.create(model, doc);
+        } else if (doc.doc_state === "updated") {
+            return this.odoo.write(model, [[id], doc]);
+        } 
+
+        return this.odoo.unlink(model, [[id]]);
     }
 }