Browse Source

[FIX] send correct data to server

robert 6 years ago
parent
commit
607fe90a42

+ 8 - 11
controllers/helpers/__init__.py

@@ -69,6 +69,7 @@ def get_data(mode=None):
             'banks': get_banks(),
             'bankPaymentTypes': get_bank_payment_types(),
             'chequeTypes': get_cheque_types(),
+            'warehouses': warehouses
         }
     
     if mode == 'product_taking':
@@ -99,15 +100,7 @@ def process_data(data=None):
 
         return order.id
 
-    def paying_order(
-            order_id,
-            supplier_invoice_number=None,
-            supplier_id=None,
-            cart_items=None,
-            date_now=None,
-            payment_term_id=None,
-            warehouse_id=None
-    ):
+    def paying_order(order_id, supplier_invoice_number=None, supplier_id=None, cart_items=None, date_now=None, payment_term_id=None):
         invoice = None
 
         if order_id:
@@ -166,8 +159,12 @@ def process_data(data=None):
         confirm_purchase_order(order_id)
 
     if mode == 'payment':
-        order_id = data.get('orderId')
-        paying_order(order_id, supplier_invoice_number)
+        order_id = data.get('purchaseOrderId', None)
+
+        if not order_id:
+            return
+
+        paying_order(order_id, supplier_invoice_number, supplier_id, cart_items, date_now, payment_term_id)
 
     if mode == 'picking':
         order_id = data.get('orderId')

+ 5 - 16
controllers/helpers/purchase_order.py

@@ -7,7 +7,7 @@ from stock_warehouse import get_location_id
 
 def get_purchase_orders():
     domain = [
-        ('state', '=', 'manual'),
+        ('state', '=', 'approved'),
         ('from_pop', '=', True)
     ]
 
@@ -25,16 +25,15 @@ def get_purchase_orders():
                 'mobile': po.partner_id.mobile or None,
                 'email': po.partner_id.email or None
             },
-            'userId': po.user_id.id,
-            'warehouseId': po.warehouse_id.id,
+            'locationId': po.location_id.id,
             'amountTotal': po.amount_total,
             'lines': [
                 {
                     'id': l.product_id.id,
                     'name': l.product_id.display_name,
                     'listPrice': l.product_id.list_price,
-                    'quantity': l.product_uom_qty,
-                    'price': l.product_id. list_price,
+                    'quantity': l.product_qty,
+                    'price': l.product_id.list_price,
                     'discount': 0
                 } for l in po.order_line
             ]
@@ -84,18 +83,8 @@ def create_purchase_order(supplier_id, cart_items, date_order, currency_id, pric
 def confirm_purchase_order(purchase_order_id):
     po = r.env['purchase.order'].browse(purchase_order_id)
     po.write({
-        'state': 'done'
+        'state': 'approved'
     })
-    
-    # po.action_purchase_confirm()
-
-    # for picking in po.picking_ids:
-    #         picking.force_assign()
-    #         picking.action_done()
-
-    # po.write({
-    #     'state': 'done'
-    # })
 
     return po.action_purchase_confirm()
 

+ 18 - 2
src/components/common/Card.vue

@@ -1,6 +1,7 @@
 <template lang="pug">
     .card(@click='onClick' :class="{ 'selected-card': isSelected }")
-        h2.card-title {{ title }}
+        .card-title
+            h2.card-title-item(v-for='t in getTitle()') {{ t }}
         img.card-image(:src="'data:image/png;base64,' + (image || 'iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAAAAACPAi4CAAAACXZwQWcAAABAAAAAQADq8/hgAAAEWklEQVRYw9WX6XKjRhCAef8HiySQvGt5vfZuEselOUAcEpe4GdI9MAgQOjb5k3SVyzY1801PX9OtNf9StP80QJR5miRpXtb/AFCnvmMySgmhlJn2Mal+BSBSj1NCGeNSGAMOd0/iQYCI95TAXnm+FCr/I2ZYPwJILEJhPaGm7flBFIW+Z5sUvwEivguovG7pMR0cV2e+BbYArF3cBqQclKfEvryvSB2KaHa6BYhgDSP7ZN7gmUNQCf86wCdgcBaKq04/cTzAuwbA/czKb8VdZYMSI8IAEOJ+XjTiFkF4SDjOARIIHLiBK+4E/xHOIdEloMSAAwZx7hEOBKIquwA4lFPbR/3uEhzCqSUmgBiwrGgeIlQm5b0zO0CN3yKw34QgQC4JKZqrGAFC0MpWvuwJ3V6hWD3BI5wchoDaBAumzYQgmsrd7ewZx5bosHIAAAtQp4+nXUuA+2yXy9Xyi4OsIorjauBLZQWtd0Gqrt3EvCXQlb4BMZYfsPP7cr0gvS4FaNw6Qus0ovtez8DZcYyHt8Wmk9XWdF+Mjf570Ke4q46UgAgUCtX55mKl/wSbsD83hrEE0VGJ1RrEWHz2aaXuIAEe7b3SNG/601oSzL/W20/T2r2uDNACARvjWelZQTTaCiCg2vSR1bzrsFgSQMk8SbPi8FWX+0GFbX2OXMarDoAmOGfo+wpXt7cwj4Hv+1n+rSMYW3HOfS4TAgHZIDIVYG38wNzchyB+kj4ZUwB4npw6ABokmgA2qz9kfbIkoWDLzQSQ0tbw2gA20kA/nmyqCHG8nmqQd2prbSKQZAIwnk5B5PSE/EWfACCUZGFSgHQKeE6DsCcExfc5wKEDRLMaJHBwTwA/zFzhOLBBPGODoCfEyYUb0XVBB1AGHXvho/SVDsSjF15QrtMG1xlpsDbCrCewj7UxAWAJSjsAlJOuHI0AX9Mi8IMgsJnMC2MMOJA2f7RhXI8AG/2LVxZZVlQWmKElnAFiT5nMH62L67Mb3lTmbIzVK3Uc9r6GvJAEyMa6d0KXP1oXliqbRPPzN0NvBcrBAmSpr37wlrB8GeRS6zkJECZVNRKeuLfty1C+wc/zp7TD9jVQN7DUDq2vkUEzfAymIl9uZ5iL1B0U1Rw7surmc4SE/sUBE3KaDB8Wd1QS7hJQga4Kayow2aAsXiV0L458HE/jx9UbPi33CIf+ITwDSnxM/IcIcAGIrHzaH+BX8Ky4awdq41nBZYsjG4/kEQLjg9Q5A9A1jJ7u3CJEa1OzmuvSKgubwPA24IT7WT7fJ5YmEtwbASWO2AkP94871WpPOCc8vmYHaORhv5lf75VrV3bD+9nZIrUJamhXN9v9kMlu3wonYVlGe9msU1/cGTgKpx0YmO2fsrKq66rMk8Bh7dd99sDIk+xxxsE5icqhqfsLflkz1pkbukSCBzI5bqG0EGrPGvfK2FeGDseRi1I5eVFuB8WvDp51FvsH13Fcz4+y6n86Oz8kfwPMD02INEiadQAAAABJRU5ErkJggg==')")
         .card-details(v-if='details.length > 0')
             span(v-for='detail in details') {{ computeDetail(detail) }}
@@ -10,7 +11,7 @@
     export default {
         props: {
             title: {
-                type: String,
+                type: String || Array,
                 default: 'Sin título'
             },
             image: {
@@ -31,6 +32,13 @@
             }
         },
         methods: {
+            getTitle() {
+                if (typeof this.title === 'string') {
+                    return [this.title]
+                }
+
+                return this.title
+            },
             computeDetail(detail) {
                 if (detail.format === 'currency') {
                     return this.$options.filters.currency(detail.value, {...this.options})
@@ -69,6 +77,14 @@
             margin-top: 10px
             position: absolute
             top: 0
+            z-index: 1
+            .card-title-item
+                font-size: 8pt
+                text-align: center
+                margin-top: 10px
+                margin-bottom: 0
+                &:nth-child(2n)
+                    margin-top: 5px
         .card-image
             width: 80px
             height: 80px;

+ 42 - 6
src/components/common/CardGrid.vue

@@ -2,7 +2,7 @@
     .card-grid-wrapper
         .card-grid
             add-card(v-if='canAdd' @onClickAdd='onClickAdd')
-            card(v-for='item in items' :key='item.id' :title='item.name' :image='item.imageMedium' :isSelected='item.id === selectedId' :details='computeDetails(item)' :options='defaultOptions.currency' @onClick='onClickCard(item)')
+            card(v-for='item in items' :key='item.id' :title='getHeader(item)' :image='getImage(item)' :isSelected='item.id === selectedId' :details='getDetails(item)' :options='defaultOptions.currency' @onClick='onClickCard(item)')
         .no-items(v-show='!items || items.length == 0')
             p No hay items
 </template>
@@ -21,7 +21,15 @@
                 type: Boolean,
                 default: false
             },
-            details: {
+            headerKeys: {
+                type: Array,
+                default: []
+            },
+            imageKey: {
+                type: String,
+                default: null
+            },
+            footerKeys: {
                 type: Array,
                 default: []
             },
@@ -44,17 +52,45 @@
             }
         },
         methods: {
-            computeDetails(item) {
-                if (!this.details) {
+            getHeader(item) {
+                if (this.headerKeys.length == 0) {
+                    return item.name
+                }
+
+                return this.headerKeys.map(key => {
+                    let value = item
+
+                    for (let k of key.split('.')) {
+                        value = value[k]
+                    }
+
+                    return value
+                })
+            },
+            getImage(item) {
+                if (!this.imageKey) {
+                    return item.image
+                }
+
+                let image = item
+
+                for (let part of this.imageKey.split('.')) {
+                    image = image[part]
+                }
+
+                return image
+            },
+            getDetails(item) {
+                if (!this.footerKeys) {
                     return []
                 }
 
-                if (this.details.length === 0) {
+                if (this.footerKeys.length === 0) {
                     return []
                 }
 
                 let results = []
-                let computableDetails = this.details.map(item => item.split(/:/))
+                let computableDetails = this.footerKeys.map(item => item.split(/:/))
 
                 for (let detail of computableDetails) {
                     for (let field in item) {

+ 84 - 3
src/components/steps/BudgetStep.vue

@@ -2,8 +2,44 @@
     .purchase-step
         .budget-selector-step
             .budget-selector
-                searcher
-                card-grid
+                searcher(
+                    mode='normal'
+                    :items='purchaseOrders'
+                    :keys="['name', 'partner.name']"
+                )
+                card-grid(
+                    imageKey='partner.image'
+                    :items='visiblePurchaseOrders',
+                    :headerKeys="['name', 'partner.name']"
+                    :footerKeys="['amountTotal:c']"
+                    @onSelect='selectPurchaseOrder'
+                )
+            transition(name='slide-fade')
+                form.purchase-order-form(v-if='!!selectedPurchaseOrder')
+                    .form-separator
+                        h3 Detalles Generales
+                        hr
+                    .form-item
+                        label.form-label Descripción
+                        input.form-input(v-model='selectedPurchaseOrder.name' readonly)
+                    .form-item
+                        label.form-label Monto
+                        input.form-input(v-model='selectedPurchaseOrder.amountTotal' readonly)
+                    .form-separator
+                        h3 Items
+                        hr
+                    .form-item
+                        table
+                            thead
+                                tr
+                                    th Descripción
+                                    th Precio
+                                    th Cantidad
+                            tbody
+                                tr(v-for='item in cartItems')
+                                    td {{ item.name }}
+                                    td {{ item.price }}
+                                    td {{ item.quantity }}
 </template>
 
 <script>
@@ -14,7 +50,17 @@
         components: {
             Searcher,
             CardGrid
-        }
+        },
+        computed: mapGetters([
+            'purchaseOrders',
+            'visiblePurchaseOrders',
+            'selectedPurchaseOrder',
+            'cartItems'
+        ]),
+        methods: mapActions([
+            'filterPurchaseOrders',
+            'selectPurchaseOrder'
+        ])
     }
 </script>
 
@@ -28,5 +74,40 @@
             display: flex
             .budget-selector
                 width: 100%
+                height: 100
+            .purchase-order-form
+                width: 380px
                 height: 100%
+                margin-right: 0
+                .form-separator
+                    h3
+                        color: #9e9e9e
+                        font-size: 8pt
+                    hr
+                        margin-top: 5px
+                .form-item
+                    width: 100%
+                    margin-bottom: 15px
+                    height: 35px
+                    .form-label
+                        width: 30%
+                        height: 35px
+                        font-size: 10pt
+                    .form-input
+                        width: 70%
+                        height: 35px
+                        font-size: 10pt
+                        border-radius: 0
+                    table
+                        width: 100%
+                        tr
+                            background: #fff
+                            th, td
+                                font-size: 8pt
+            .slide-fade-enter-active
+                transition: all 300ms ease
+            .slide-fade-enter
+                transform: translateX(300px)
+                opacity: 0
+
 </style>

+ 11 - 3
src/store/app.js

@@ -167,15 +167,23 @@ const actions = {
         if (['purchase', 'expense', 'payment'].includes(mode)) {
             data = {
                 ...data,
+                items: getters.cartItems.map(item => {
+                    return {
+                        id: item.id,
+                        name: item.name,
+                        quantity: item.quantity,
+                        price: item.price
+                    }
+                }),
                 total: getters.cartTotal,
                 purchaseOrderId: (getters.selectedPurchaseOrder && getters.selectedPurchaseOrder.id) || null,
                 paymentTermId: getters.selectedPaymentTerm.id,
                 journalId: getters.selectedJournal.id,
                 payment: getters.initialPayment > getters.cartTotal ? getters.cartTotal : getters.initialPayment,
                 paymentMethod: getters.paymentMethod,
-                supplierId: getters.selectedSupplier.id,
-                currencyId: getters.selectedCurrency.id,
-                warehouseId: getters.selectedWarehouse.id                
+                supplierId: (getters.selectedSupplier && getters.selectedSupplier.id) || null,
+                currencyId: (getters.selectedCurrency && getters.selectedCurrency.id) || null,
+                warehouseId: (getters.selectedWarehouse && getters.selectedWarehouse.id) || null
             }
         }
 

+ 16 - 0
src/store/modules/cart.js

@@ -111,6 +111,22 @@ const actions = {
         commit('setCartTotal', payload)
         dispatch('changeAmountToPay', payload)
     },
+    updateFromPurchaseOrder({ commit, dispatch }, purchaseOrder) {
+        dispatch('resetCart')
+
+        if (!purchaseOrder) {
+            return
+        }
+
+        let total = 0
+        for (let line of purchaseOrder.lines) {
+            total = total + (line.price * line.quantity)
+
+            commit('pushToCart', line)
+        }
+
+        dispatch('changeCartTotal', total)
+    },
     resetCart({ commit }) {
         commit('setCartItems', [])
         commit('setCartTotal', 0)

+ 4 - 3
src/store/modules/purchaseOrder.js

@@ -16,7 +16,7 @@ const getters = {
         return state.filteredPurchaseOrders.length === 0 ? state.purchaseOrders : state.filteredPurchaseOrders
     },
     selectedPurchaseOrder(state) {
-        return state.purchaseOrders
+        return state.selectedPurchaseOrder
     }
 }
 
@@ -43,8 +43,9 @@ const actions = {
     filterPurchaseOrders({ commit }, filtered) {
         commit('setFilteredPurchaseOrders', filtered)
     },
-    selectPurchaseOrder({ commit, dispatch }, saleOrder) {
-        commit('setSelectedPurchaseOrder', saleOrder)
+    selectPurchaseOrder({ commit, dispatch }, purchaseOrder) {
+        commit('setSelectedPurchaseOrder', purchaseOrder)
+        dispatch('updateFromPurchaseOrder', purchaseOrder)
     },
     resetPurchaseOrder({ commit }) {
         commit('setLoadingPurchaseOrder', true)