odoo-provider.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import { Injectable } from '@angular/core';
  2. import { Http, Headers, Response, RequestOptions } from '@angular/http';
  3. import { Observable } from 'rxjs/Observable';
  4. import { PreferencesProvider } from './preferences-provider';
  5. import 'rxjs/add/operator/toPromise'
  6. import 'rxjs/add/operator/map';
  7. import 'rxjs/add/operator/catch';
  8. import 'rxjs/add/observable/throw';
  9. import 'rxjs/add/observable/forkJoin';
  10. @Injectable()
  11. export class OdooProvider {
  12. private url: string;
  13. constructor(
  14. private http: Http,
  15. private preferencesProvider: PreferencesProvider
  16. ) {
  17. this.url = preferencesProvider.getHost();
  18. this.normalizeUrl();
  19. }
  20. /**
  21. *
  22. */
  23. private normalizeUrl(): void {
  24. this.url = (this.url.startsWith('http://') ? this.url : 'http://' + this.url) + '/api/';
  25. }
  26. /**
  27. *
  28. */
  29. post(resource: string, data: Array<any>): Promise<any> {
  30. let headers = new Headers({
  31. 'Content-Type': 'application/x-www-form-urlencoded',
  32. 'Authorization': 'JWT ' + this.preferencesProvider.getToken()
  33. });
  34. let options = new RequestOptions({ headers: headers });
  35. let toSend: Array<Observable<Response>> = [];
  36. for (let i = 0; i < data.length; i++) {
  37. this.encodeData(data[i]);
  38. toSend.push(this.http.post(this.url + resource, this.encodeData(data[i]), options));
  39. }
  40. return new Promise((resolve, reject) => {
  41. Observable.forkJoin(toSend).subscribe(r => {
  42. resolve(r);
  43. }, e => {
  44. reject(e);
  45. });
  46. });
  47. }
  48. /**
  49. *
  50. */
  51. private encodeData(data: any) {
  52. let body = [];
  53. for (let field in data) {
  54. if (['doc_state', "remote_id", "rev"].indexOf(field) == -1) {
  55. continue;
  56. }
  57. body.push(field + "=" + data[field]);
  58. }
  59. return body.join("&");
  60. }
  61. /**
  62. *
  63. */
  64. get(resource: string, id?: number, filter?: Array<[string, string]>): Promise<any> {
  65. this.url = this.url + resource;
  66. let headers = new Headers({
  67. 'Authorization': 'JWT ' + this.preferencesProvider.getToken()
  68. });
  69. let options = new RequestOptions({ headers: headers });
  70. return new Promise((resolve, reject) => {
  71. this.http.get(this.url, options).toPromise().then(r => {
  72. resolve(r);
  73. }).catch(e => {
  74. reject(e);
  75. });
  76. });
  77. }
  78. /**
  79. *
  80. */
  81. put(resource: string, data: Array<any>) {
  82. }
  83. /**
  84. *
  85. */
  86. delete(resource: string, data: Array<any>) {
  87. }
  88. /**
  89. *
  90. */
  91. private extractData(response: Response): any {
  92. return response.json() || [];
  93. }
  94. /**
  95. *
  96. */
  97. private handleError(error: any) {
  98. let msg = error._body;
  99. return Observable.throw(msg);
  100. }
  101. }