Prechádzať zdrojové kódy

lead form finished and related save feature in base view

robert2206 8 rokov pred
rodič
commit
e0b06a001b

+ 44 - 9
src/base/base-details-view.ts

@@ -1,7 +1,9 @@
 import { BaseView } from "./base-view";
 import { PouchService } from "../services/pouch-service";
 
-import { EventsManager } from "../base/events/event-manager";
+import { Observable } from "rxjs/Observable";
+import "rxjs/add/observable/from";
+
 
 /**
  *
@@ -119,19 +121,52 @@ export abstract class BaseDetailsView<T> extends BaseView<T> {
         this.setItem(Object.create(null));
     }
 
+    /**
+     * 
+     */
+    saveRelated(): Observable<any> {
+        let fields: Array<any> = super.getFieldsRelated();
+        
+        if (fields.length > 0) {
+            let field: any = null;
+
+            // for (let i = 0; i < fields.length; i++) {
+            //     field = fields[i];
+
+            //     if (field.options.type === "one2many") {
+            //         this.saveOneToMany(field.fieldName);
+            //     }
+                
+            // }
+
+            return Observable.from(fields);
+        }
+
+        return Observable.empty();
+    }
+
+    /**
+     * 
+     */
+    saveOneToMany(fieldName: string): void {
+        console.log(fieldName);
+    }
+
     /**
      * 
      * @param data 
      */
     performSave(): void {
         this.setItem(Object.assign(this.getItem(), { odoo_model: super.getModelName(), odoo_status: this.getAction() }));
-        super.getInjectable(PouchService).save(this.getItem()).subscribe(result => {
-            EventsManager.publish("app:changed", {
-                action: this.getAction() === "to_create" ? "add" : "update",
-                item: Object.assign(this.getItem(), { _id: result.id, _rev: result.rev })
-            });
-        }, error => {
-            EventsManager.publish("app:error", error);
-        });
+        this.saveRelated();
+        // super.getInjectable(PouchService).save(this.getItem()).subscribe(result => {
+        //     EventsManager.publish("app:changed", {
+        //         action: this.getAction() === "to_create" ? "add" : "update",
+        //         item: Object.assign(this.getItem(), { _id: result.id, _rev: result.rev })
+        //     });
+        // }, error => {
+        //     EventsManager.publish("app:error", error);
+        // });
     }
+
 }

+ 4 - 1
src/odoo/models/crm.lead.ts

@@ -2,6 +2,8 @@ import { OdooModel } from "../decorators/model";
 import { OdooField } from "../decorators/field";
 import { FieldTypes } from "../types/field";
 
+import { Partner } from "./res.partner"
+
 @OdooModel("crm.lead", [["active", "=", true]])
 export class Lead {
 
@@ -74,7 +76,8 @@ export class Lead {
     @OdooField(FieldTypes.CHAR)    
     partner_name: string
 
-    @OdooField(FieldTypes.MANY2ONE)    
+    @OdooField(FieldTypes.MANY2ONE)
+    @OdooField({ type: FieldTypes.ONE2MANY, related: Partner })
     partner_id: any;
 
     @OdooField(FieldTypes.CHAR)    

+ 1 - 1
src/pages/lead/lead.html

@@ -16,7 +16,7 @@
         </ion-item>
         <ion-item>
             <ion-label stacked>Cliente</ion-label>
-            <ion-input type="text" [value]="lead.customer?.name" name="customer"></ion-input>
+            <ion-input type="text" [value]="lead.partner_id?.name" name="partner_id" (input)="changeCustomer($event.target.value)"></ion-input>
         </ion-item>
         <ion-item>
             <ion-label stacked>Dirección</ion-label>

+ 19 - 9
src/pages/lead/lead.ts

@@ -1,4 +1,5 @@
 import { Component } from '@angular/core';
+import { } from "";
 import { NavController, NavParams } from 'ionic-angular';
 
 import { Lead } from "../../odoo/models/crm.lead";
@@ -33,14 +34,14 @@ export class LeadPage extends BaseDetailsView<Lead> {
      */
     ionViewDidLoad() {
         EventsManager.subscribe("app:select", data => { 
-            this.lead.customer = data.item;
+            this.lead.partner_id = data.item;
 
-            this.lead.street = this.lead.customer.street;
-            this.lead.city = this.lead.customer.city;
-            this.lead.contact_name = this.lead.customer.name;
-            this.lead.email = this.lead.customer.email;
-            this.lead.phone = this.lead.customer.phone;
-            this.lead.mobile = this.lead.customer.mobile;
+            this.lead.street = this.lead.partner_id.street;
+            this.lead.city = this.lead.partner_id.city;
+            this.lead.contact_name = this.lead.partner_id.name;
+            this.lead.email = this.lead.partner_id.email;
+            this.lead.phone = this.lead.partner_id.phone;
+            this.lead.mobile = this.lead.partner_id.mobile;
         });
     }
 
@@ -55,17 +56,26 @@ export class LeadPage extends BaseDetailsView<Lead> {
         });
     }
 
+    /**
+     * 
+     * @param e 
+     */
+    changeCustomer(customer: string): void {
+        this.lead.partner_id = customer;
+    }
+
     /**
      * 
      */
     formIsValid(): boolean {
-        return !!this.lead.name && !!this.lead.customer;
+        return !!this.lead.name && !!this.lead.partner_id;
     }
 
     /**
      * 
      */
     submit(): void {
-        console.log(this.lead);
+        super.setItem(this.lead);
+        super.performSave();
     }
 }