Forráskód Böngészése

mejorado la interfaz de presupuestos

robert2206 8 éve
szülő
commit
a9da4c5cef

+ 2 - 2
src/components/olist-footer/olist-footer.ts

@@ -4,8 +4,8 @@ import { Slots } from "../../utils/slots";
 
 @Component({
     selector: "olist-footer",
-    templateUrl: "olist-footer.html",
-    viewProviders: [ Content ]
+    templateUrl: "olist-footer.html"
+    // viewProviders: [ Content ]
 })
 export class OListFooter {
 

+ 5 - 5
src/pages/budget-list/budget-list.html

@@ -1,8 +1,8 @@
-<olist-header title="Presupuestos" (toggle)="toggleSearch()" (search)="search($event)"></olist-header>
+<!--<olist-header title="Presupuestos" (toggle)="toggleSearch()" (search)="search($event)"></olist-header>-->
 
-<ion-content class="has-header">
+<ion-content>
 
-    <ion-list [virtualScroll]="visibleElements" approxItemHeight="30px">
+    <!--<ion-list [virtualScroll]="visibleElements">
         <ion-card *virtualItem="let item" (doubleTap)="showOptions($event, item)">
             <ion-item>
                 <h2>{{ item.name }}</h2>
@@ -13,8 +13,8 @@
                 </p>
             </ion-item>
         </ion-card>
-    </ion-list>
+    </ion-list>-->
 
 </ion-content>
 
-<olist-footer [hasElements]="hasVisibleElements()" (create)="goToPage(null)" (more)="seek($event)"></olist-footer>
+<!--<olist-footer [hasElements]="hasVisibleElements()" (create)="goToPage(null)" (more)="seek($event)"></olist-footer>-->

+ 4 - 4
src/pages/budget-list/budget-list.ts

@@ -35,16 +35,16 @@ export class BudgetListPage extends DefaultListable<SaleOrder> implements INavig
      *
      */
     ngOnInit() {
-        this.events.subscribe(Slots.ITEM_SAVED, data => {
-            this.add(data[0]);
-        });
+        // this.events.subscribe(Slots.ITEM_SAVED, data => {
+        //     this.add(data[0]);
+        // });
     }
 
     /**
      *
      */
     ngOnDestroy() {
-        this.events.unsubscribe(Slots.ITEM_SAVED);
+        // this.events.unsubscribe(Slots.ITEM_SAVED);
     }
 
     /**

+ 47 - 22
src/pages/sale-order-details/sale-order-details.html

@@ -4,19 +4,24 @@
 <!--Contenido del formulario-->
 <ion-content class="has-header">
 
-    <ion-slides #saleSlides [options]="{onlyExternal: !customer.id}" (ionWillChange)="onSlideChanged($event)">
+    <ion-slides #saleSlides (ionSlideWillChange)="onSlideChanged($event)">
         <!--Cliente-->
         <ion-slide>
             <h1>Seleccione un cliente:</h1>
             <ion-searchbar #customerSearchInput placeholder="Buscar cliente" (ionInput)="searchCustomer($event)"></ion-searchbar>
 
-            <ion-list inset *ngIf="search" [virtualScroll]="customers" approxItemHeight="30px">
-                <ion-item *virtualItem="let item" (doubleTap)="selectCustomer(item)">
-                    {{ item.name }}
-                </ion-item>
-            </ion-list>
+            <div *ngIf="isSearch()">
+                <!--<ion-list inset [virtualScroll]="customers" approxItemHeight="30px">-->
+                <ion-list inset *ngFor="let c of customers">
+                    <!--<ion-item *virtualItem="let item" (doubleTap)="selectCustomer(item)">-->
+                    <ion-item (doubleTap)="selectCustomer(c)">
+                        {{ c.name }}
+                        <ion-icon name="checkmark" item-right></ion-icon>
+                    </ion-item>
+                </ion-list>
+            </div>
 
-            <div *ngIf="!search">
+            <div *ngIf="!isSearch()">
                 <h1>Datos del cliente:</h1>
 
                 <ion-list inset>
@@ -49,22 +54,20 @@
         </ion-slide>
 
         <!--Líneas de presupuesto-->
-        <ion-slide>
+        -<ion-slide>
             <h1>Líneas del presupuesto</h1>
             <ion-searchbar #productSearchInput placeholder="Buscar producto" (ionInput)="searchProduct($event)" (doubleTap)="readBarcode()"></ion-searchbar>
 
-            <!--<div class="no-element" *ngIf="lines.length == 0 && !search">
-                <p>Sin elementos</p>
-            </div>-->
-
-           <div class="sale-content-wrapper" *ngIf="search">
+           <div class="sale-content-wrapper" *ngIf="isSearch()">
 
-               <ion-scroll scrollY="true" inset [virtualScroll]="products" approxItemHeight="30px">
-                    <ion-item *virtualItem="let p" (doubleTap)="selectProduct(p)">
-                        <ion-thumbnail item-left>
+               <!--<ion-scroll inset scrollY="true" [virtualScroll]="products" approxItemHeight="30px">-->
+               <ion-scroll inset scrollY="true" *ngFor="let p of products">
+                    <!--<ion-item *virtualItem="let p" (doubleTap)="selectProduct(p)">-->
+                    <ion-item (doubleTap)="selectProduct(p)">
+                        <!--<ion-thumbnail item-left>
                             <ion-img [src]="p.image_medium" *ngIf="!p.image_medium"></ion-img>
                             <img src="./assets/images/product.png" *ngIf="!p.image_medium"/>
-                        </ion-thumbnail>
+                        </ion-thumbnail>-->
 
                         <h2>{{ p.name }}</h2>
 
@@ -77,10 +80,12 @@
 
            </div>
 
-           <div class="sale-content-wrapper" *ngIf="!search">
+           <div class="sale-content-wrapper" *ngIf="!isSearch()">
 
-                <ion-scroll scrollY="true" [virtualScroll]="lines" approxItemHeight="30px">
-                    <ion-item *virtualItem="let l">
+                <!--<ion-scroll scrollY="true" [virtualScroll]="lines" approxItemHeight="30px">-->
+                <ion-scroll scrollY="true" *ngFor="let l of lines">
+                    <!--<ion-item *virtualItem="let l">-->
+                    <ion-item>
                         <ion-thumbnail item-left>
                             <ion-img src="l.image_medium" *ngIf="l.image_medium"></ion-img>
                             <img src="./assets/images/product.png" *ngIf="!l.image_medium"/>
@@ -108,7 +113,7 @@
                         </button>
 
                         <ion-row>
-                             <ion-col width-33>
+                            <ion-col width-33>
                                 <button ion-button primary clear small icon-only (click)="removeQuantity(l)">
                                     <ion-icon name="remove-circle"></ion-icon>
                                 </button>
@@ -142,8 +147,28 @@
 
         <!--Finalizar presupuesto-->
         <ion-slide>
-            <h1>Finalizar</h1>
+            <div class="finish-sale">
+                <h1>Finalizar presupuesto</h1>
 
+                <ion-list inset>
+                    <ion-item>
+                        <ion-label>SubTotal:</ion-label>
+                        <ion-input text-right readonly [ngModel]="total"></ion-input>
+                    </ion-item>
+
+                    <ion-item>
+                        <ion-label>Descuento:</ion-label>
+                        <ion-input text-right readonly value="0"></ion-input>
+                    </ion-item>
+
+                    <ion-item>
+                        <ion-label>Total:</ion-label>
+                        <ion-input text-right readonly [ngModel]="total"></ion-input>
+                    </ion-item>
+                </ion-list>
+
+                <button ion-button color="primary" (click)="saveSale()">Guardar presupuesto</button>
+            </div>
         </ion-slide>
     </ion-slides>
 </ion-content>

+ 23 - 4
src/pages/sale-order-details/sale-order-details.scss

@@ -1,22 +1,41 @@
 page-sale-order-details {
 
-    ion-scroll, .sale-content-wrapper, .slide-zoom {
+    ion-scroll, .slide-zoom, .sale-content-wrapper {
         width: 100% !important;
-        height: 100% !important;
     }
 
-    .sale-content-wrapper, .slide-zoom {
+    ion-scroll, .slide-zoom {
+          height: 100% !important;
+    }
+
+    .sale-content-wrapper {
+        height: calc(100% - 100px) !important;
+    }
+
+    .sale-content-wrapper, .slide-zoom, .finish-sale {
         display: flex;
         flex-direction: column;
     }
 
     .sale-content-wrapper {
         padding: 0 10px;
-        margin-bottom: 35px;
     }
 
     h1 {
         font-size: 12pt;
         color: #909090;
     }
+
+    .sale-total {
+        margin-top: auto;
+    }
+
+    .sale-total > ion-list {
+        margin: 0px !important;
+    }
+
+    .sale-total > ion-list > ion-item {
+        box-shadow: inset 0 0 0 0 #fff !important;
+        border-bottom: 0px !important;
+    }
 }

+ 27 - 8
src/pages/sale-order-details/sale-order-details.ts

@@ -14,13 +14,7 @@ import { Slots } from "../../utils/slots";
     providers: [Partner]
 })
 export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
-
-    @ViewChild("saleSlides")
-    slider: Slides;
-    @ViewChild("customerSearchInput")
-    customerSearchBar: Searchbar;
-    @ViewChild("productSearchInput")
-    productSearchBar: Searchbar;
+    
     search: boolean = false;
     footer: any = {
         show: true,
@@ -37,7 +31,14 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
     products: Array<Product>;
     lines: Array<{ product: Product, price: number, quantity: number, subtotal: number }>
     total: number;
-    
+
+    @ViewChild("saleSlides")
+    slider: Slides;
+    @ViewChild("customerSearchInput")
+    customerSearchBar: Searchbar;
+    @ViewChild("productSearchInput")
+    productSearchBar: Searchbar;
+  
     constructor(
         public navCtrl: NavController,
         public alertCtrl: AlertController,
@@ -80,6 +81,8 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
         this.events.publish(Slots.APP_LOADING);
 
         this.db.getAll(DataProvider.DOCS.PARTNER).then((partners: Array<Partner>) => {
+            console.log(partners);
+            
             this.customers = partners.filter(item => { 
                 return item.customer && item.doc_state != "deleted";
             });
@@ -144,6 +147,10 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
         this.search = !this.search;
     }
 
+    isSearch(): boolean {
+        return this.search;
+    }
+
     /**
      *
      */
@@ -198,6 +205,7 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
      */
     selectProduct(item: Product): void {
         this.addItem(item);
+
         this.search = false;
         this.productSearchBar.value = "";
     }
@@ -206,6 +214,10 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
      *
      */
     addItem(item: Product): void {
+        if (!item) {
+            return;
+        }
+
         let index = this.indexOf(item);
 
         if (index == -1) {
@@ -359,4 +371,11 @@ export class SaleOrderDetailsPage extends DetailsView<SaleOrder> {
         this.lines.splice(index, 1);
         this.sumTotal();
     }
+
+    /**
+     *
+     */
+    saveSale(): void {
+
+    }
 }

+ 2 - 2
src/pages/sale-order-list/sale-order-list.html

@@ -1,7 +1,7 @@
 <olist-header title="Presupuestos" (toggle)="toggleSearch()" (search)="search($event)"></olist-header>
 
 <ion-content class="has-header">
-
+    <olist-footer [hasElements]="hasItems()" (create)="goToPage(null)"></olist-footer>
 </ion-content>
 
-<olist-footer [hasElements]="hasItems()" (create)="goToPage(null)"></olist-footer>
+

+ 2 - 1
src/theme/odoo.scss

@@ -54,7 +54,8 @@ ion-card ion-row ion-col button ion-icon {
 }
 
 .has-header {
-    margin-top: 56px;
+    top: 56px !important;
+    height: calc(100% - 56px) !important;
 }
 
 // .action-sheet-cancel ion-icon, .action-sheet-destructive ion-icon {