소스 검색

[ADD] Selecionar Facturas

adrielso 7 년 전
부모
커밋
6f6412d056

+ 5 - 4
models/res_partner.py

@@ -4,9 +4,9 @@ class ResPartner(models.Model):
     _inherit = 'res.partner'
 
     @api.model
-    def get_customers(self):
+    def get_partners(self):
         domain = [('customer', '=', True), ('active', '=', True), ('credit', '>', 0)]
-        customers = []
+        partners = []
 
         for customer in self.env['res.partner'].search(domain):
             categories = []
@@ -43,7 +43,7 @@ class ResPartner(models.Model):
                         'movelines': movelines
                     })
 
-            customers.append({
+            partners.append({
                 'id': customer.id,
                 'name': customer.name,
                 'display_name': customer.display_name,
@@ -57,4 +57,5 @@ class ResPartner(models.Model):
                 'categories': categories,
                 'invoices': invoices
             })
-        return customers
+            
+        return partners

+ 10 - 10
src/App.vue → src/Payments.vue

@@ -2,9 +2,9 @@
 	.payments
 		form-wizard(title="" subtitle="" finishButtonText="Finalizar" color="#8c9bad" nextButtonText="Continuar" backButtonText="Volver" transition="fade" @on-complete="completeSale()")
 			tab-content(title="Selecionar Cliente" :before-change="checkPartner")
-				customer-step
+				partner-step
 			tab-content(title="Seleccionar Factura")
-				SelectInvoiceStep
+				invoice-step
 		loader
 </template>
 
@@ -12,8 +12,8 @@
 	import {FormWizard, TabContent }	from 'vue-form-wizard'
 	import 'vue-form-wizard/dist/vue-form-wizard.min.css'
 
-	import CustomerStep from '@/components/customer/CustomerStep'
-	import SelectInvoiceStep from '@/components/invoice/SelectInvoiceStep'
+	import PartnerStep from '@/components/partner/PartnerStep'
+	import InvoiceStep from '@/components/invoice/InvoiceStep'
 	import Loader from '@/components/Loader'
 
 	import {mapActions, mapGetters } from 'vuex'
@@ -23,20 +23,20 @@
 		components: {
 			TabContent,
 			FormWizard,
-			CustomerStep,
-			SelectInvoiceStep,
-			Loader,
+			PartnerStep,
+			InvoiceStep,
+			Loader
 		},
 		computed: mapGetters([
-			'hasSelectedCustomer'
+			'hasSelectedPartner'
 		]),
 		methods: {
 			checkPartner() {
-				if (!this.hasSelectedCustomer){
+				if (!this.hasSelectedPartner){
 					this.notify('Nesesitas selecionar un cliente para continuar')
 				}
 
-				return this.hasSelectedCustomer
+				return this.hasSelectedPartner
 			},
 			...mapActions([
 			    'initPayment',

+ 63 - 0
src/components/invoice/InvoiceCard.vue

@@ -0,0 +1,63 @@
+<template lang="pug">
+    .invoice-card
+        h2.invoice-date 21/07/2017
+        h2.invoice-title Factura: venta/2017/0024
+        h2.invoice-total Total  1.000.000
+        h2.invoice-saldo  Saldo  980.000
+</template>
+
+<script>
+    export default {
+    }
+</script>
+
+<style lang="sass">
+    .invoice-card
+        width: 200px
+        height: 110px
+        margin: 5px
+        border: 1px solid #d3d3d3
+        display: inline-block
+        position: relative
+
+        &:hover
+            cursor: pointer
+
+        .invoice-title
+            width: 100%
+            height: 30px
+            font-size: 12pt
+            text-align: center
+            margin-top: 25px
+            position: absolute
+            top: 0
+
+        .invoice-date
+            width: 100%
+            height: 30px
+            font-size: 9pt
+            text-align: right
+            padding-right: 10px
+            margin-top: 5px
+            position: absolute
+            top: 0
+
+        .invoice-total, .invoice-saldo
+            width: 100%
+            height: 22px
+            padding-top: 5px
+            margin: 0px
+            text-align: center
+            font-size: 10pt
+            font-weight: bold
+            color: #fff
+            position: absolute
+
+        .invoice-total
+            background: #4caf50
+            bottom: 23px
+
+        .invoice-saldo
+            background: #d32f2f
+            bottom: 0
+</style>

+ 26 - 0
src/components/invoice/InvoiceContainer.vue

@@ -0,0 +1,26 @@
+<template lang="pug">
+    .invoice-step
+        invoice-searcher
+        invoice-grid
+</template>
+
+<script>
+    import InvoiceSearcher from '@/components/invoice/InvoiceSearcher'
+    import InvoiceGrid from '@/components/invoice/InvoiceGrid'
+
+    export default {
+        components: {
+            InvoiceSearcher,
+            InvoiceGrid
+        }
+    }
+</script>
+
+<style lang="sass">
+    .invoice-step
+        width: calc(100% - 500px)
+        height: 100%
+        padding-right: 5px
+        display: inline-block
+
+</style>

+ 38 - 0
src/components/invoice/InvoiceGrid.vue

@@ -0,0 +1,38 @@
+<template lang="pug">
+    .invoice-container
+        .invoice-grid
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+            invoice-card
+</template>
+
+<script>
+    import InvoiceCard from '@/components/invoice/InvoiceCard'
+
+    export default {
+
+        components: {
+            InvoiceCard
+        }
+    }
+</script>
+
+<style lang="sass">
+    .invoice-container
+        width: 100%
+        height: cal(100% -50px)
+        margin-top: 15px
+        overflow-y: auto
+
+        .invoice-grid
+            width: 100%
+</style>

+ 25 - 0
src/components/invoice/InvoiceSearcher.vue

@@ -0,0 +1,25 @@
+<template lang="pug">
+    .invoice-searcher
+        input(type="text" placeholder="Buscar una Factura" v-model="search")
+</template>
+
+<script>
+    export default {
+    }
+</script>
+
+<style lang="sass">
+    .invoice-searcher
+        width: 100%
+        height: 35px
+
+        input
+            width: 100%
+            height: inherit
+            text-align: center
+            border-radius: 0
+            font:
+                size: 11pt
+                style: normal
+                weight: bold
+</style>

+ 20 - 0
src/components/invoice/InvoiceStep.vue

@@ -0,0 +1,20 @@
+<template lang="pug">
+    .payments-step
+        invoice-container
+        move-container
+</template>
+
+<script>
+    import InvoiceContainer from '@/components/invoice/InvoiceContainer'
+    import MoveContainer from '@/components/invoice/MoveContainer'
+
+    export default {
+        components: {
+            InvoiceContainer,
+            MoveContainer
+        }
+    }
+</script>
+
+<style lang="sass">
+</style>

+ 23 - 0
src/components/invoice/MoveContainer.vue

@@ -0,0 +1,23 @@
+<template lang="pug">
+    .move-container
+            h3 Aqui va las lineas de la Factura
+</template>
+
+<script>
+    // import InvoiceSearcher from '@/components/invoice/InvoiceSearcher'
+    export default {
+        components: {
+        }
+    }
+</script>
+
+<style lang="sass">
+    .move-container
+        width: 300px
+        height: 100px
+        border-left: 1px solid #d3d3d3
+        padding-left: 10px
+        display: inline-block
+        vertical-align: top
+
+</style>

+ 0 - 11
src/components/invoice/SelectInvoiceStep.vue

@@ -1,11 +0,0 @@
-<template lang="pug">
-    h3 Aquí vamos seleccionar la factura
-</template>
-
-<script>
-    export default {
-    }
-</script>
-
-<style lang="css">
-</style>

+ 12 - 12
src/components/customer/CustomerCard.vue → src/components/partner/PartnerCard.vue

@@ -1,7 +1,7 @@
 <template lang="pug">
-    .customer-card(@click="selectCustomer(item)" v-bind:class="{ 'selected-customer': isSelectedCustomer() }")
-        h2.customer-name {{ item.name }}
-        img.customer-photo(:src="this.item.image_medium ? 'data:image/png;base64,' + this.item.image_medium : '/base/static/src/img/avatar.png'")
+    .partner-card(@click="selectPartner(item)" v-bind:class="{ 'selected-partner': isSelectedPartner() }")
+        h2.partner-name {{ item.name }}
+        img.partner-photo(:src="this.item.image_medium ? 'data:image/png;base64,' + this.item.image_medium : '/base/static/src/img/avatar.png'")
 </template>
 
 <script>
@@ -17,22 +17,22 @@
             }
         },
         computed: mapGetters([
-            'selectedCustomer',
-            'hasSelectedCustomer'
+            'selectedPartner',
+            'hasSelectedPartner'
         ]),
         methods: {
-            isSelectedCustomer() {
-                return this.hasSelectedCustomer ? this.item.id === this.selectedCustomer.id : false
+            isSelectedPartner() {
+                return this.hasSelectedPartner ? this.item.id === this.selectedPartner.id : false
             },
             ...mapActions([
-                'selectCustomer',
+                'selectPartner',
             ])
         }
     }
 </script>
 
 <style lang="sass">
-    .customer-card
+    .partner-card
         width: 130px
         height: 160px
         margin: 5px
@@ -40,14 +40,14 @@
         display: inline-block
         position: relative
 
-        &.selected-customer
+        &.selected-partner
             transition-duration: 0.3s
             border-bottom: 3px solid #7c7bad
 
         &:hover
             cursor: pointer
 
-        .customer-name
+        .partner-name
             width: 100%
             height: 30px
             font-size: 9pt
@@ -56,7 +56,7 @@
             position: absolute
             top: 0
 
-        .customer-photo
+        .partner-photo
             width: 80px
             height: 80px
             margin: 0

+ 6 - 6
src/components/customer/CustomerDetails.vue → src/components/partner/PartnerDetails.vue

@@ -1,6 +1,6 @@
 <template lang="pug">
     .customer-form-item
-        label(v-for="(invoice, index) in customerInvoices" :key="invoice")
+        label(v-for="(invoice, index) in partnerInvoices" :key="invoice")
             span.form-label Factura
             label.form-label-number {{ invoice.number }}
             .table-header
@@ -13,7 +13,7 @@
             .table-body
                 table
                     tbody
-                        tr(v-for="moveline in customerMoveLine[index]" :key="moveline")
+                        tr(v-for="moveline in partnerMoveLine[index]" :key="moveline")
                             td {{ formatDate(moveline.date_maturity) }}
                             td {{ formatNumber(moveline.debit) }}
                             td {{ formatNumber(moveline.amount_residual) }}
@@ -24,10 +24,10 @@
 
     export default {
         computed: mapGetters([
-            'hasSelectedCustomer',
-            'selectedCustomer',
-            'customerInvoices',
-            'customerMoveLine'
+            'hasSelectedPartner',
+            'selectedPartner',
+            'partnerInvoices',
+            'partnerMoveLine'
         ]),
         methods:{
             formatNumber(valor){

+ 8 - 8
src/components/customer/CustomerGrid.vue → src/components/partner/PartnerGrid.vue

@@ -1,30 +1,30 @@
 <template lang="pug">
-    .customers-grid-wrapper
-        .customers-grid
-            customer-card(v-for="customer in customers" :key="customer" :item="customer")
+    .partner-grid-wrapper
+        .partner-grid
+            partner-card(v-for="partner in partners" :key="partner" :item="partner")
 </template>
 
 <script>
     import { mapGetters } from 'vuex'
-    import CustomerCard from '@/components/customer/CustomerCard'
+    import PartnerCard from '@/components/partner/PartnerCard'
 
     export default {
         components: {
-            CustomerCard
+            PartnerCard
         },
         computed: mapGetters([
-            'customers'
+            'partners'
         ])
     }
 </script>
 
 <style lang="sass">
-    .customers-grid-wrapper
+    .partner-grid-wrapper
         width: 100%
         height: calc(100% - 100px)
         margin-top: 15px
         overflow-y: auto
 
-        .customers-grid
+        .partner-grid
             width: 100%
 </style>

+ 10 - 10
src/components/customer/CustomerGridDetails.vue → src/components/partner/PartnerGridDetails.vue

@@ -1,31 +1,31 @@
 <template lang="pug">
-    .customer-details-invoice
-        from.customer-form
+    .partner-details-invoice
+        from.partner-form
             .form-separator
                 h3 Detalles de Cuenta
                 hr
-            .customer-form-item
-                customer-details
+            .partner-form-item
+                partner-details
 </template>
 
 <script>
     import { mapGetters } from 'vuex'
-    import CustomerDetails from '@/components/customer/CustomerDetails'
+    import PartnerDetails from '@/components/partner/PartnerDetails'
 
     export default {
         components: {
-            CustomerDetails
+            PartnerDetails
         },
     }
 </script>
 
 <style lang="sass">
-    .customer-details-invoice
+    .partner-details-invoice
         width: 100%
         height: 100%
         margin: 0px 4px 0px 0px
-        
-        .customer-form
+
+        .partner-form
             width: 100%
             height: 100%
 
@@ -36,7 +36,7 @@
                 hr
                     margin-top: 3px
 
-            .customer-form-item
+            .partner-form-item
                 width: 100%
                 height: 410px
                 overflow-y: auto

+ 6 - 6
src/components/customer/CustomerSearcher.vue → src/components/partner/PartnerSearcher.vue

@@ -1,5 +1,5 @@
 <template lang="pug">
-    .customer-searcher
+    .partner-searcher
         input(type="text" placeholder="Buscar un cliente" v-model="search")
 </template>
 
@@ -9,16 +9,16 @@
 
     export default {
         computed: mapGetters([
-            'customers'
+            'partners'
         ]),
         methods: {
             initFuse() {
                 if (this.fuse) {
-                    this.fuse.setCollection(this.customers)
+                    this.fuse.setCollection(this.partners)
                     return
                 }
 
-                this.fuse = new Fuse(this.customers, {
+                this.fuse = new Fuse(this.partners, {
                     shouldSort: true,
                     threshold: 0.4,
                     location: 0,
@@ -42,7 +42,7 @@
             ])
         },
         watch: {
-            customers() {
+            partners() {
                 this.initFuse()
             },
             search() {
@@ -62,7 +62,7 @@
     }
 </script>
 <style lang="sass">
-    .customer-searcher
+    .partner-searcher
         width: 100%
         height: 35px
 

+ 20 - 21
src/components/customer/CustomerStep.vue → src/components/partner/PartnerStep.vue

@@ -1,47 +1,46 @@
 <template lang="pug">
     .payments-step
-        .customers-step
-            .customers-left
-                customer-searcher
-                customers-grid
+        .partner-step
+            .partner-left
+                partner-searcher
+                partner-grid
             transition(name="slide-fade")
-                .customers-right(v-if="hasSelectedCustomer")
-                    customer-grid-details
+                .partner-right(v-if="hasSelectedPartner")
+                    partner-grid-details
 </template>
 
 <script>
 
-
     import { mapGetters } from 'vuex'
-    import CustomerSearcher from '@/components/customer/CustomerSearcher'
-    import CustomersGrid from '@/components/customer/CustomerGrid'
-    import CustomerGridDetails from '@/components/customer/CustomerGridDetails'
+    import PartnerSearcher from '@/components/partner/PartnerSearcher'
+    import PartnerGrid from '@/components/partner/PartnerGrid'
+    import PartnerGridDetails from '@/components/partner/PartnerGridDetails'
 
     export default {
         components: {
-            CustomerSearcher,
-            CustomersGrid,
-            CustomerGridDetails
+            PartnerSearcher,
+            PartnerGrid,
+            PartnerGridDetails
         },
-    computed: mapGetters([
-            'hasSelectedCustomer'
-    ])
-}
+        computed: mapGetters([
+            'hasSelectedPartner'
+        ])
+    }
 </script>
 <style lang="sass">
     .payments-step
-        .customers-step
+        .partner-step
             width: 100%
             height: 100%
             display: flex
 
-            .customers-left, .customers-right
+            .partner-left, .partner-right
                 height: 100%
 
-            .customers-left
+            .partner-left
                 width: 100%
 
-            .customers-right
+            .partner-right
                 width: 360px
                 margin: 0 15px
 

+ 4 - 5
src/index.js

@@ -1,15 +1,14 @@
 import Vue from 'vue'
-import App from '@/App'
+import Payments from '@/Payments'
 import VModal from 'vue-js-modal'
 import store from '@/store'
-
+console.log(store);
 // vue.use
 Vue.use(VModal)
 // Vue.config.
 Vue.config.productionTip = false
 Vue.config.silent = true
 
-console.log(store);
 openerp.eiru_payments = (instance, local) => {
 
 	local.PaymentsWidget = instance.Widget.extend({
@@ -18,9 +17,9 @@ openerp.eiru_payments = (instance, local) => {
 			this.vm = new Vue({
 				store,
 				el: this.el,
-				template: '<App />',
+				template: '<Payments />',
 				components:{
-					App
+					Payments
 				},
 				data: {
 					payments_instance: this

+ 1 - 1
src/store/actions.js

@@ -6,7 +6,7 @@ const actions = {
         commit('setPaymentsInstance', payload)
 
         let promises =[
-            dispatch('fetchCustomers')
+            dispatch('fetchPartners')
         ]
 
         Promise.all(promises).then(() => {

+ 2 - 2
src/store/index.js

@@ -6,7 +6,7 @@ import getters from '@/store/getters'
 import actions from '@/store/actions'
 import mutations from '@/store/mutations'
 // Modules
-import customers from '@/store/modules/customers'
+import partners from '@/store/modules/partners'
 import loader from '@/store/modules/loader'
 
 Vue.use(Vuex)
@@ -17,7 +17,7 @@ const Store = new Vuex.Store({
     mutations,
     actions,
     modules:{
-        customers,
+        partners,
         loader
     }
 })

+ 0 - 82
src/store/modules/customers.js

@@ -1,82 +0,0 @@
-const state = {
-    customers: [],
-    filtered: [],
-    selectedCustomerInvoices: [],
-    selectedCustomer: null
-}
-
-const getters ={
-    customers(state){
-        return state.filtered.length === 0 ? state.customers : state.filtered
-    },
-    hasSelectedCustomer(state){
-        return !!state.selectedCustomer
-    },
-    selectedCustomer(state){
-        return state.selectedCustomer
-    },
-    customerInvoices(state){
-        return state.selectedCustomerInvoices
-    },
-    customerMoveLine(state){
-        let moveline= []
-        state.selectedCustomerInvoices.forEach(item =>{
-            moveline.push(item.movelines);
-        })
-        return  !! moveline ? moveline : []
-    }
-}
-
-const mutations ={
-    pushCustomers(state, payload){
-        state.customers =[ ...payload.customers]
-    },
-    selectCustomer(state, payload){
-        state.selectedCustomer = payload.customer
-    },
-    selectCustomerInvoices(state, payload){
-        state.selectedCustomerInvoices = state.selectedCustomer.invoices
-    },
-    applyCustomersFilter(state, payload){
-        state.filtered = payload
-    }
-}
-
-const actions ={
-    fetchCustomers({ commit, dispatch }){
-        return new Promise((resolve, reject) => {
-            let ResPartner = new openerp.web.Model('res.partner')
-
-            ResPartner.call('get_customers',{
-                context: new openerp.web.CompoundContext()
-            }).then(response => {
-                commit('pushCustomers',{
-                    customers: response
-                })
-
-                dispatch('loaded', 'customers')
-
-                resolve()
-            }).fail(error => {
-                console.log(error)
-                reject(error)
-            })
-        })
-    },
-    selectCustomer({ commit }, payload){
-        commit('selectCustomer',{
-            customer: payload
-        })
-        commit('selectCustomerInvoices')
-    },
-    filterCustomers({ commit },payload){
-        commit('applyCustomersFilter', payload)
-    }
-}
-
-export default {
-    state,
-    getters,
-    mutations,
-    actions
-}

+ 2 - 2
src/store/modules/loader.js

@@ -2,7 +2,7 @@ const state = {
     loaded: {
         // company: false,
         // currencies: false,
-        customers: false,
+        partners: false
         // products: false,
         // journals: false,
         // periods: false,
@@ -21,7 +21,7 @@ const getters = {
         return state.messages
     },
     isLoaded(state) {
-        return state.loaded.customers
+        return state.loaded.partners
                    }
 }
 

+ 82 - 0
src/store/modules/partners.js

@@ -0,0 +1,82 @@
+const state = {
+    partners: [],
+    filtered: [],
+    selectedPartnerInvoices: [],
+    selectedPartner: null
+}
+
+const getters ={
+    partners(state){
+        return state.filtered.length === 0 ? state.partners : state.filtered
+    },
+    hasSelectedPartner(state){
+        return !!state.selectedPartner
+    },
+    selectedPartner(state){
+        return state.selectedPartner
+    },
+    partnerInvoices(state){
+        return state.selectedPartnerInvoices
+    },
+    partnerMoveLine(state){
+        let moveline= []
+        state.selectedPartnerInvoices.forEach(item =>{
+            moveline.push(item.movelines);
+        })
+        return  !! moveline ? moveline : []
+    }
+}
+
+const mutations ={
+    pushPartners(state, payload){
+        state.partners =[ ...payload.partners]
+    },
+    selectPartner(state, payload){
+        state.selectedPartner = payload.partner
+    },
+    selectPartnerInvoices(state, payload){
+        state.selectedPartnerInvoices = state.selectedPartner.invoices
+    },
+    applyPartnersFilter(state, payload){
+        state.filtered = payload
+    }
+}
+
+const actions ={
+    fetchPartners({ commit, dispatch }){
+        return new Promise((resolve, reject) => {
+            let ResPartner = new openerp.web.Model('res.partner')
+
+            ResPartner.call('get_partners',{
+                context: new openerp.web.CompoundContext()
+            }).then(response => {
+                commit('pushPartners',{
+                    partners: response
+                })
+
+                dispatch('loaded', 'partners')
+
+                resolve()
+            }).fail(error => {
+                console.log(error)
+                reject(error)
+            })
+        })
+    },
+    selectPartner({ commit }, payload){
+        commit('selectPartner',{
+            partner: payload
+        })
+        commit('selectPartnerInvoices')
+    },
+    filterCustomers({ commit },payload){
+        commit('applyPartnersFilter', payload)
+    }
+}
+
+export default {
+    state,
+    getters,
+    mutations,
+    actions
+}