download-service.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { Injectable } from "@angular/core";
  2. import { Observable } from "rxjs/Observable";
  3. import { Observer } from "rxjs/Observer";
  4. import { OdooService } from "./odoo-service";
  5. import { PouchService } from "./pouch-service";
  6. import { getMetadataStorage } from "../odoo/utils/metadata-storage";
  7. import "rxjs/add/observable/from";
  8. import "rxjs/add/operator/concatMap";
  9. import "rxjs/add/operator/map";
  10. @Injectable()
  11. export class DownloadService {
  12. constructor(
  13. public odoo: OdooService,
  14. public pouch: PouchService
  15. ) {
  16. }
  17. /**
  18. *
  19. */
  20. do(): Observable<any> {
  21. return this.pouch.getAll("user")
  22. .concatMap(users => this.login(users.docs.shift()))
  23. .concatMap(logged => Observable.from(getMetadataStorage().getModels()))
  24. .concatMap(item => this.odoo.searchRead(item.model.name, []).map(r => {
  25. return Object.assign(r, { type: item.model.document });
  26. })).concatMap(data => this.store(data));
  27. }
  28. /**
  29. *
  30. */
  31. protected login(user: any): Observable<any> {
  32. this.odoo.initialize("http://localhost:8100");
  33. return this.odoo.login(user.db, user.username, user.password);
  34. }
  35. /**
  36. *
  37. */
  38. protected store(data: any): Observable<any> {
  39. let type = data.type;
  40. let records = data.records;
  41. return Observable.from(records).concatMap(item => this.pouch.save(Object.assign(item, { type: type })));
  42. }
  43. }