Quellcode durchsuchen

[ADD] bank cheque

Gogs vor 7 Jahren
Ursprung
Commit
e89eee9797

+ 43 - 1
controllers/main.py

@@ -45,6 +45,14 @@ class PosSales(http.Controller):
     def get_server_datetime(self):
         return datetime.now(self.get_timezone()).strftime(DATETIME_FORMAT)
 
+    '''
+        Check if module is installed
+    '''
+    def check_module(self, module_name):
+        module = request.env['ir.module.module'].search([('name', '=', module_name), ('state', '=', 'installed')])
+
+        return len(module) != 0
+        
     '''
         Get current user information
     '''
@@ -135,6 +143,38 @@ class PosSales(http.Controller):
             }
         } for journal in request.env['account.journal'].search([('type', 'in', ['bank', 'cash']), ('default_credit_account_id.currency_id', '=', False), ('active', '=', True)], order='id')]
     
+    '''
+        Get banks
+    '''
+    def get_banks(self):
+        banks = []
+
+        if self.check_module('eiru_bank_payments_references'):
+            banks = [{
+                    'id': bank.id,
+                    'name': bank.name,
+                    'displayName': bank.display_name
+                } for bank in request.env['res.bank'].search([('active', '=', True)])]
+
+        return banks
+
+    '''
+        Get bank payment types
+    '''
+    def get_bank_payment_types(self):
+        bank_types = []
+
+        if self.check_module('eiru_bank_payments_references'):
+            bank_types = [{
+                    'id': type.id,
+                    'name': type.name,
+                    'displayName': type.display_name,
+                    'code': type.code,
+                    'defaultState': type.default_state
+                } for type in request.env['res.bank.payments.type'].search([('is_receipt', '=', True)])]
+
+        return bank_types
+
     '''
         Get all active customers
     '''
@@ -244,7 +284,9 @@ class PosSales(http.Controller):
             'journals': self.get_journals(),
             'customers': self.get_customers(),
             'products': self.get_products(),
-            'paymentTerms': self.get_payment_terms()
+            'paymentTerms': self.get_payment_terms(),
+            'banks': self.get_banks(),
+            'bankPaymentTypes': self.get_bank_payment_types()
         })
 
     

+ 11 - 11
package.json

@@ -13,25 +13,25 @@
 		"babel-loader": "^7.1.2",
 		"babel-preset-env": "^1.6.1",
 		"babel-preset-stage-2": "^6.24.1",
-		"css-loader": "^0.28.7",
+		"css-loader": "^0.28.9",
 		"extract-text-webpack-plugin": "^3.0.2",
-		"file-loader": "^1.1.5",
-		"node-sass": "^4.5.3",
+		"file-loader": "^1.1.6",
+		"node-sass": "^4.7.2",
 		"pug": "^2.0.0-rc.4",
 		"sass-loader": "^6.0.6",
-		"style-loader": "^0.19.0",
+		"style-loader": "^0.20.1",
 		"url-loader": "^0.6.2",
-		"vue-loader": "^13.3.0",
-		"vue-template-compiler": "^2.5.2",
-		"webpack": "^3.8.1",
+		"vue-loader": "^14.0.3",
+		"vue-template-compiler": "^2.5.13",
+		"webpack": "^3.10.0",
 		"webpack-livereload-plugin": "^1.0.0"
 	},
 	"dependencies": {
-		"axios": "^0.17.0",
+		"axios": "^0.17.1",
 		"fuse.js": "^3.2.0",
-		"vue": "^2.5.2",
-		"vue-form-wizard": "^0.7.0",
-		"vue-js-modal": "^1.3.4",
+		"vue": "^2.5.13",
+		"vue-form-wizard": "^0.8.2",
+		"vue-js-modal": "^1.3.9",
 		"vuex": "^3.0.1"
 	}
 }

+ 21 - 12
src/App.vue

@@ -22,8 +22,6 @@
     import PaymentMethodStep from '@@/steps/PaymentMethod'
     import PaymentAmountStep from '@@/steps/PaymentAmount'
 
-    import { INIT_SALE, CHECK_CART, CHECK_CUSTOMER, CHECK_PAYMENT_METHOD, CHECK_AMOUNT_RECEIVED, CREATE_SALE, RESET_SALE } from '@/constants/actionTypes'
-
     export default {
         components: {
             FormWizard,
@@ -35,24 +33,35 @@
         },
         computed: mapGetters([
             'isSale',
+            'selectedBank',
             'processing',
             'completed'
         ]),
         methods: mapActions([
-            INIT_SALE,
-            CHECK_CART,
-            CHECK_CUSTOMER,
-            CHECK_AMOUNT_RECEIVED,
-            CREATE_SALE,
-            RESET_SALE
+            'initSale',
+            'checkCart',
+            'checkCustomer',
+            'checkPaymentMethod',
+            'checkAmountReceived',
+            'createSale',
+            'resetSale'
         ]),
         watch: {
-            completed(value) {
-                if (value) {
-                    this.$refs.wizard.changeTab(3, 0, false)
+            selectedBank(value) {
+                if (!value) {
+                    return
+                }
 
-                    this.resetSale()
+                this.$refs.wizard.changeTab(2, 3, false)
+            },
+            completed(value) {
+                if (!value) {
+                    return
                 }
+                
+                this.$refs.wizard.changeTab(3, 0, false)
+
+                this.resetSale()
             }
         },
         mounted() {

+ 146 - 0
src/components/common/DropdownSearcher.vue

@@ -0,0 +1,146 @@
+<template lang="pug">
+    .searcher
+        span.input-icon.fa.fa-search(@click='onClickOptions')
+        input.search-input(v-model='search' :placeholder='placeholder' autofocus)
+        .dropdown-options(:class="{'input-show': showOptions }")
+            ul.input-options
+                li.input-option(v-for='option in getOptions()' :key='option.id' @click='onSelectOption(option)') {{ option.name }}
+</template>
+
+<script>
+    export default {
+        props: {
+            placeholder: {
+                type: String,
+                default: 'Buscar'
+            },
+            autofocus: {
+                type: Boolean,
+                default: false
+            },
+            items: {
+                type: Array,
+                default: [],
+                required: true
+            },
+            keys: {
+                type: Array,
+                default: [],
+                required: true
+            }
+        },
+        watch: {
+            search(value, lastValue) {
+                value = value.trim()
+
+                if (!value && value.length != lastValue.length) {
+                    this.selectedOption = null
+                }
+
+                this.showOptions = !!value && !this.selectedOption
+
+                this.performSearch(value)
+            }
+        },
+        methods: {
+            getOptions() {
+                return this.results.length == 0 ? this.items : this.results
+            },
+            performSearch(value) {
+                this.results = []
+
+                if (this.selectedOption) {
+                    return
+                }
+                
+                for (let item of this.items) {
+                    for (let field in item) {
+                        if (typeof item[field] !== 'string') {
+                            continue
+                        }
+
+                        if (this.keys.length !== 0 && this.keys.indexOf(field) === -1) {
+                            continue
+                        }
+
+                        if (item[field].toLowerCase().indexOf(value.toLowerCase()) !== -1) {
+                            this.results.push(item)
+                            break
+                        }
+                    }
+                }
+            },
+            onClickOptions() {
+                this.showOptions = !this.showOptions || !!this.search
+            },
+            onSelectOption(item) {
+                this.selectedOption = item
+
+                this.search = item.name
+                this.results = []
+                
+                this.$emit('onSelect', item)
+            }
+        },
+        data() {
+            return {
+                search: '',
+                results: [],
+                selectedOption: null,
+                showOptions: false
+            }
+        }
+    }
+</script>
+
+<style lang="sass">
+    @import '../../assets/variables'
+    .searcher
+        width: 100%
+        height: 35px
+        position: relative
+        .input-icon
+            position: absolute
+            top: 14px
+            right: 10px
+            font-size: 12pt
+            color: $app-dark-color
+            &:hover
+                cursor: pointer
+        .search-input
+            width: 100%
+            height: 100%
+            border-radius: 0
+            font-size: 12pt
+            font-weight: normal
+        .dropdown-options
+            display: none
+            position: absolute
+            background: $app-light-color
+            border: 1px solid $app-separator-color
+            box-shadow: 0 3px 5px $app-separator-color
+            z-index: 10
+            top: 45px
+            left: 0
+            right: 0
+            bottom: -325px
+            padding: 0
+            animation-duration: 500ms
+            overflow-y: auto
+            &.input-show
+                display: block
+            ul
+                li
+                    height: 35px
+                    display: block
+                    text-align: left
+                    margin: 10px 0 0 10px
+                    font-size: 12pt
+                    font-weight: normal
+                    border-bottom: 1px solid $app-border-color
+                    &:last-child
+                        margin-bottom: 10px
+                    &:hover
+                        border-bottom: 2px solid $app-main-color
+                        cursor: pointer
+</style>

+ 3 - 1
src/components/common/index.js

@@ -1,6 +1,7 @@
 import CardGrid from './CardGrid'
 import Cart from './Cart'
 import Searcher from './Searcher'
+import DropdownSearcher from './DropdownSearcher'
 import Ticket from './Ticket'
 import Spinner from './Spinner'
 
@@ -9,5 +10,6 @@ export {
     Cart,
     Searcher,
     Ticket,
-    Spinner
+    Spinner,
+    DropdownSearcher
 }

+ 5 - 5
src/components/forms/CustomerForm.vue

@@ -9,13 +9,13 @@
                 hr
             .form-item(:class="'form-item-' + type")
                 label.form-label(:class="'form-label-' + type") Nombre
-                input.form-input(:class="'form-input-' + type" :value="customer.name || ''" v-model='customer.name' :readonly="mode === 'details'")
+                input.form-input(:class="'form-input-' + type"  v-model='customer.name' :readonly="mode === 'details'")
             .form-item(:class="'form-item-' + type")
                 label.form-label(:class="'form-label-' + type") R.U.C/C.I.Nº
-                input.form-input(:class="'form-input-' + type" :value="customer.ruc || ''" v-model='customer.ruc' :readonly="mode === 'details'")
+                input.form-input(:class="'form-input-' + type" v-model='customer.ruc' :readonly="mode === 'details'")
             .form-item(:class="'form-item-' + type")
                 label.form-label(:class="'form-label-' + type") Celular
-                input.form-input(:class="'form-input-' + type" :value="customer.mobile || ''" v-model='customer.mobile' :readonly="mode === 'details'")
+                input.form-input(:class="'form-input-' + type" v-model='customer.mobile' :readonly="mode === 'details'")
             div(v-if="mode === 'details'")
                 .form-item(:class="'form-item-' + type")
                     label.form-label(:class="'form-label-' + type") Teléfono
@@ -30,8 +30,8 @@
                     label.form-label(:class="'form-label-' + type") Créditos
                     input.form-input(:class="'form-input-' + type" :value="customer.credit || 0" readonly)
             .form-actions(v-if="mode === 'form'")
-                button.form-action(@click='onAccept' :disabled='isValid() === false') Aceptar
-                button.form-action(@click='onCancel') Cancelar
+                button.form-action(@click.prevent='onAccept' :disabled='isValid() === false') Aceptar
+                button.form-action(@click.prevent='onCancel') Cancelar
 </template>
 
 <script>

+ 163 - 0
src/components/modals/PaymentBankModal.vue

@@ -0,0 +1,163 @@
+<template lang="pug">
+    modal(name='payment-bank-modal' transition='nice-modal-fade' @before-close='beforeClose' height='auto' width='670' :classes="['v--modal', 'payment-bank-modal']")
+        h2.modal-title
+        form
+            .form-item
+                label.form-label Banco
+                dropdown-searcher.form-input(:items='banks' :keys="['name']" placeholder='Seleccione un banco' @onSelect='selectBank')
+            .form-item
+                label.form-label Tipo de Operación
+                select.form-input(v-model='bankTypeId')
+                    option(v-for='type in paymentTypes' :key='type.id' :value='type.id') {{ type.name }}
+            .form-item(:style="{ display: isCheque() ? 'block' : 'none' }")
+                label.form-label Nº de Cuenta
+                input.form-input(v-model='data.accountNumber')
+            .form-item
+                label.form-label Nº de {{ isCheque() ? 'Cheque' : 'Boleta' }}
+                input.form-input(v-model='data.bankNumber')    
+            .form-item
+                label.form-label Monto
+                input.form-input
+            .form-item(:style="{ display: isCheque() ? 'block' : 'none' }")
+                label.form-label Vencimiento
+                input.form-input(type='date' v-model='data.dueDate')
+            .form-item(:style="{ display: isCheque() ? 'block' : 'none' }")
+                label.form-label Titular
+                input.form-input(v-model='data.holder')
+            .form-actions
+                button.form-action(value='accept' @click.stop.prevent='onSubmit' :disabled='!isValid()') Aceptar
+                button.form-action(value='cancel' @click.stop.prevent='onSubmit') Cancelar
+</template>
+
+<script>
+    import DropdownSearcher from '@@/common/DropdownSearcher'
+
+    export default {
+        components: {
+            DropdownSearcher
+        },
+        props: {
+            show: {
+                type: Boolean,
+                default: false
+            },
+            banks: {
+                type: Array,
+                default: []
+            },
+            paymentTypes: {
+                type: Array,
+                default: []
+            }
+        },
+        computed: {
+            bankTypeId: {
+                get() {
+                    if (!this.data.bankType && this.paymentTypes.length > 0) {
+                        this.data.bankType = this.paymentTypes[0]
+                    }
+
+                    return (this.data.bankType && this.data.bankType.id) || 1
+                },
+                set(value) {
+                    this.data.bankType = this.paymentTypes.find(type => type.id == value)
+
+                    if (!this.isCheque()) {
+                        this.data.dueDate = null
+                        this.data.accountNumber = null
+                        this.data.holder = null
+                    }
+                }
+            }
+        },
+        watch: {
+            show(value) {
+                if (!value) {
+                    this.$modal.hide('payment-bank-modal')
+                    return
+                }
+
+                this.$modal.show('payment-bank-modal')
+            }
+        },
+        methods: {
+            selectBank(bank) {
+                this.data.bank = bank
+            },
+            beforeClose(e) {
+                if (this.show) {
+                    e.stop()
+                }
+            },
+            getHeight() {
+                return this.isCheque() ? '400' : '250'
+            },
+            isValid() {
+                let noBank = !!this.data.bank && !!this.data.bankType && !!this.data.bankNumber
+
+                return this.isCheque() ? noBank && !!this.data.dueDate && !!this.data.accountNumber && !!this.data.holder : noBank
+            },
+            isCheque() {
+                return (this.data.bankType && this.data.bankType.code === 'CH') || false
+            },
+            onSubmit(e) {
+                if (e.target.value === 'cancel') {
+                    this.data.bank = null
+                    this.data.bankType = null
+                    this.data.bankNumber = null
+                    this.data.dueDate = null
+                    this.data.accountNumber = null
+                    this.data.holder = null
+                }
+
+                this.$emit('onSubmit', this.data)
+            }
+        },
+        data() {
+            return {
+                data: {
+                    bank: null,
+                    bankType: null,
+                    bankNumber: null,
+                    dueDate: null,
+                    accountNumber: null,
+                    holder: null
+                }
+            }
+        }
+    }
+</script>
+
+<style lang="sass">
+    @import '../../assets/variables'
+    .payment-bank-modal
+        padding: 15px !important
+        form
+            width: 100%
+            height: 100%
+            .form-item
+                width: 100%
+                height: 45px
+                margin-bottom: 10px
+                .form-label
+                    width: 30%
+                    height: 45px
+                    font-size: 14pt
+                .form-input
+                    width: 70%
+                    height: 45px
+                    font-size: 14pt
+                    border-radius: 0
+                    display: inline-block
+            .form-actions
+                float: right
+                .form-action
+                    width: 150px
+                    height: 40px
+                    border: none
+                    box-shadow: none
+                    border-radius: 0
+                    margin-right: 5px
+                    background: $app-main-color
+                    color: $app-bg-color
+</style>

+ 13 - 8
src/components/steps/PaymentMethod.vue

@@ -31,18 +31,19 @@
                     label.form-label Método de Pago
                     select.form-input(v-model='journalId')
                         option(v-for='journal in journals' :value='journal.id') {{ journal.displayName }}
+        payment-bank-modal(:show='!!showBankPaymentModal' :banks='banks' :paymentTypes='bankPaymentTypes' @onSubmit='submitBankPayment')
 </template>
 
 <script>
     import { mapGetters, mapActions } from 'vuex'
 
     import Ticket from '@@/common/Ticket'
-
-    import { CHANGE_PAYMENT_TYPE, SELECT_JOURNAL, SELECT_PAYMENT_TERM, COMPUTE_PAYMENT_LINES } from '@/constants/actionTypes'
+    import PaymentBankModal from '@@/modals/PaymentBankModal'
 
     export default {
         components: {
-            Ticket
+            Ticket,
+            PaymentBankModal
         },
         computed: {
             paymentTermId: {
@@ -84,14 +85,18 @@
                 'selectedPaymentTerm',
                 'journals',
                 'selectedCurrency',
-                'selectedJournal'
+                'selectedJournal',
+                'showBankPaymentModal',
+                'banks',
+                'bankPaymentTypes'
             ])
         },
         methods: mapActions([
-            CHANGE_PAYMENT_TYPE,
-            SELECT_JOURNAL,
-            SELECT_PAYMENT_TERM,
-            COMPUTE_PAYMENT_LINES
+            'changePaymentType',
+            'selectJournal',
+            'selectPaymentTerm',
+            'computePaymentLines',
+            'submitBankPayment'
         ])
     }
 </script>

+ 1 - 2
src/store/actions.js

@@ -55,8 +55,7 @@ const actions = {
         
         return axios.get(INIT_SALE_URL).then(response => {
             dispatch(COMPLETE_SALE, false)
-            dispatch(EXPLODE_DATA, response.data)
-            
+            dispatch(EXPLODE_DATA, response.data)            
         }).catch(error => {
             console.log(error)
         })

+ 5 - 1
src/store/index.js

@@ -14,6 +14,8 @@ import journal from '@/store/modules/journal'
 import payment from '@/store/modules/payment'
 import product from '@/store/modules/product'
 import user from '@/store/modules/user'
+import bank from '@/store/modules/bank'
+import bankPaymentType from '@/store/modules/bankPaymentType'
 
 Vue.use(Vuex)
 
@@ -30,7 +32,9 @@ const store = new Vuex.Store({
         journal,
         payment,
         product,
-        user
+        user,
+        bank,
+        bankPaymentType
     },
     strict: true
 })

+ 129 - 0
src/store/modules/bank.js

@@ -0,0 +1,129 @@
+const state = {
+    banks: [],
+    selectedBank: null,
+    bankOperationNumber: null,
+    bankDueDate: null,
+    accountBankNumber: null,
+    holderBankName: null
+}
+
+const getters = {
+    /**
+     * 
+     * @param {*} state 
+     */
+    banks(state) {
+        return state.banks
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    selectedBank(state) {
+        return state.selectedBank
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    bankOperationNumber(state) {
+        return state.bankOperationNumber
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    bankDueDate(state) {
+        return state.dueDate
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    accountBankNumber(state) {
+        return state.accountBankNumber
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    holderBankName(state) {
+        return state.holderBankName
+    }
+}
+
+const mutations = {
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setBanks (state, payload) {
+        state.banks = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setSelectedBank(state, payload) {
+        state.selectedBank = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setBankOperationNumber(state, payload) {
+        state.bankOperationNumber = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setBankDueDate(state, payload) {
+        state.bankDueDate = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setAccountBankNumber(state, payload) {
+        state.accountBankNumber = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setHolderBankName(state, payload) {
+        state.holderBankName = payload
+    }
+}
+
+const actions = {
+    /**
+     * 
+     * @param {*} param0 
+     * @param {*} payload 
+     */
+    initBanks ({ commit}, payload) {
+        commit('setBanks', payload)
+    },
+    /**
+     * 
+     * @param {*} param0 
+     */
+    resetBanks ({ commit }) {
+
+    }
+}
+
+export default {
+    state,
+    getters,
+    actions,
+    mutations
+}

+ 66 - 0
src/store/modules/bankPaymentType.js

@@ -0,0 +1,66 @@
+const state = {
+    bankPaymentTypes: [],
+    selectedBankPaymentType: null
+}
+
+const getters = {
+    /**
+     * 
+     * @param {*} state 
+     */
+    bankPaymentTypes (state) {
+        return state.bankPaymentTypes
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    selectedBankPaymentType (state) {
+        return state.selectedBankPaymentType
+    }
+}
+
+const mutations = {
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setBankPaymentTypes (state, payload) {
+        state.bankPaymentTypes = payload
+    },
+    /**
+     * 
+     * @param {*} state 
+     * @param {*} payload 
+     */
+    setSelectedBankPaymentType (state, payload) {
+        state.selectedBankPaymentType = payload
+    }
+
+}
+
+const actions = {
+    /**
+     * 
+     * @param {*} param0 
+     * @param {*} payload 
+     */
+    initBankPaymentTypes ({ commit }, payload) {
+        commit('setBankPaymentTypes', payload)
+    },
+    /**
+     * 
+     * @param {*} param0 
+     */
+    resetBankPaymentTypes ({ commit }) {
+
+    }
+}
+
+export default {
+    state,
+    getters,
+    actions,
+    mutations
+}

+ 29 - 57
src/store/modules/cart.js

@@ -1,57 +1,29 @@
-import { 
-    SET_CART, 
-    PUSH_TO_CART, 
-    PULL_FROM_CART,
-    SET_DATE,
-    SET_CART_TOTAL,
-    SET_ITEM_TO_DISCOUNT,
-    SET_ITEM_PRICE,
-    RESET_PRICE
-} from '@/constants/mutationTypes'
-
-import { 
-    ADD_TO_CART, 
-    DECREASE_FROM_CART,
-    UNDO_PRICE,
-    CHANGE_PRICE,
-    APPLY_PRICE,
-    REMOVE_FROM_CART, 
-    CHANGE_CART_TOTAL, 
-    RESET_CART 
-} from '@/constants/actionTypes'
-
-const initialState = {
+const state = {
     cartItems: [],
     cartTotal: 0,
     itemToDiscount: null
 }
 
-const state = {
-    cartItems: initialState.cartItems,
-    cartTotal: initialState.cartTotal,
-    itemToDiscount: null
-}
-
 const getters = {
     /**
      * 
      * @param {*} state 
      */
-    cartItems(state) {
+    cartItems (state) {
         return state.cartItems
     },
     /**
      * 
      * @param {*} state 
      */
-    cartTotal(state) {
+    cartTotal (state) {
         return state.cartTotal
     },
     /**
      * 
      * @param {*} state 
      */
-    itemToDiscount(state) {
+    itemToDiscount (state) {
         return state.itemToDiscount
     }
 }
@@ -62,7 +34,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_CART] (state, payload) {
+    setCart (state, payload) {
         state.cartItems = payload
     },
     /**
@@ -70,7 +42,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [PUSH_TO_CART] (state, payload) {
+    pushToCart (state, payload) {
         let productFound = state.cartItems.find(item => item.id === payload.id)
 
         if (productFound) {
@@ -93,7 +65,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [PULL_FROM_CART] (state, payload) {
+    pullFromCart (state, payload) {
         let productFoundIndex = state.cartItems.findIndex(item => item.id === payload.item.id)
 
         if (state.cartItems[productFoundIndex].quantity === 1) {
@@ -115,7 +87,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_CART_TOTAL] (state, payload) {
+    setCartTotal (state, payload) {
         state.cartTotal = payload
     },
     /**
@@ -123,7 +95,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_ITEM_TO_DISCOUNT] (state, payload) {
+    setItemToDiscount (state, payload) {
         state.itemToDiscount = payload
     },
     /**
@@ -131,7 +103,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_ITEM_PRICE] (state, payload) {
+    setItemPrice (state, payload) {
         let foundProduct = state.cartItems.find(item => item.id === state.itemToDiscount.id)
 
         foundProduct.price = payload
@@ -141,7 +113,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [RESET_PRICE] (state, payload) {
+    resetPrice (state, payload) {
         let foundProduct = state.cartItems.find(item => item.id === payload.id)
         foundProduct.price = foundProduct.listPrice
     }
@@ -153,16 +125,16 @@ const actions = {
      * @param {*} param0 
      * @param {*} payload 
      */
-    [ADD_TO_CART] ({ commit }, payload) {
-        commit(PUSH_TO_CART, payload)
+    addToCart ({ commit }, payload) {
+        commit('pushToCart', payload)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [DECREASE_FROM_CART] ({ commit }, payload) {
-        commit(PULL_FROM_CART, {
+    decreaseFromCart ({ commit }, payload) {
+        commit('pullFromCart', {
             item: payload,
             mode: 'partial'
         })
@@ -172,36 +144,36 @@ const actions = {
      * @param {*} param0 
      * @param {*} payload 
      */
-    [UNDO_PRICE] ({ commit }, payload) {
-        commit(RESET_PRICE, payload)
+    undoPrice ({ commit }, payload) {
+        commit('resetPrice', payload)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [CHANGE_PRICE] ({ commit }, payload) {
-        commit(SET_ITEM_TO_DISCOUNT, payload)
+    changePrice ({ commit }, payload) {
+        commit('setItemToDiscount', payload)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [APPLY_PRICE] ({ commit }, payload) {
+    applyPrice ({ commit }, payload) {
         if (payload) {
-            commit(SET_ITEM_PRICE, payload)
+            commit('setItemPrice', payload)
         }
 
-        commit(SET_ITEM_TO_DISCOUNT, null)
+        commit('setItemToDiscount', null)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [REMOVE_FROM_CART] ({ commit }, payload) {
-        commit(PULL_FROM_CART, {
+    removeFromCart ({ commit }, payload) {
+        commit('pullFromCart', {
             item: payload,
             mode: 'full'
         })
@@ -211,17 +183,17 @@ const actions = {
      * @param {*} param0 
      * @param {*} payload 
      */
-    [CHANGE_CART_TOTAL] ({ commit }, payload) {
-        commit(SET_CART_TOTAL, payload)
+    changeCartTotal ({ commit }, payload) {
+        commit('setCartTotal', payload)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [RESET_CART] ({ commit }) {
-        commit(SET_CART, [])
-        commit(SET_CART_TOTAL, 0)
+    resetCart ({ commit }) {
+        commit('setCart', [])
+        commit('setCartTotal', 0)
     }
 }
 

+ 61 - 35
src/store/modules/journal.js

@@ -1,26 +1,8 @@
-import { 
-    SET_JOURNALS, 
-    SET_LOADING_JOURNALS, 
-    AUTOSELECT_JOURNAL, 
-    SET_SELECTED_JOURNAL 
-} from '@/constants/mutationTypes'
-
-import { 
-    INIT_JOURNALS, 
-    SELECT_JOURNAL,
-    RESET_JOURNAL
-} from '@/constants/actionTypes'
-
-const initialState = {
+const state = {
     journals: [],
     loadingJournals: false,
-    selectedJournal: null
-}
-
-const state = {
-    journals: initialState.journals,
-    loadingJournals: !initialState.loadingJournals,
-    selectedJournal: initialState.selectedJournal
+    selectedJournal: null,
+    showBankPaymentModal: false
 }
 
 const getters = {
@@ -44,6 +26,13 @@ const getters = {
      */
     selectedJournal(state) {
         return state.selectedJournal
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    showBankPaymentModal(state) {
+        return state.showBankPaymentModal
     }
 }
 
@@ -53,7 +42,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_JOURNALS] (state, payload) {
+    setJournals (state, payload) {
         state.journals = payload
     },
     /**
@@ -61,7 +50,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_LOADING_JOURNALS] (state, payload) {
+    setLoadingJournals (state, payload) {
         state.loadingJournals = !!payload
     },
     /**
@@ -69,7 +58,7 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [AUTOSELECT_JOURNAL] (state) {
+    autoSelectJournal (state) {
         state.selectedJournal = state.journals.find(j => j.type === 'cash')
     },
     /**
@@ -77,13 +66,28 @@ const mutations = {
      * @param {*} state 
      * @param {*} payload 
      */
-    [SET_SELECTED_JOURNAL] (state, payload) {
+    setSelectedJournal (state, payload) {
         if (!payload) {
             state.selectedJournal = payload
             return
         }
 
         state.selectedJournal = state.journals.find(item => item.id === payload)
+
+        if (state.selectedJournal.type && state.selectedJournal.type === 'bank') {
+            state.showBankPaymentModal = true;
+        }
+
+        if (state.selectedJournal.type && state.selectedJournal.type === 'cash') {
+            state.showBankPaymentModal = false;
+        }
+    },
+    /**
+     * 
+     * @param {*} state 
+     */
+    setShowBankPaymentModal (state, payload) {
+        state.showBankPaymentModal = !!payload
     }
 }
 
@@ -93,27 +97,49 @@ const actions = {
      * @param {*} param0 
      * @param {*} payload 
      */
-    [INIT_JOURNALS] ({ commit }, payload) {
-        commit(SET_JOURNALS, payload)
-        commit(AUTOSELECT_JOURNAL)
-        commit(SET_LOADING_JOURNALS)
+    initJournals ({ commit }, payload) {
+        commit('setJournals', payload)
+        commit('autoSelectJournal')
+        commit('setLoadingJournals')
+    },
+    /**
+     * 
+     * @param {*} param0 
+     * @param {*} payload 
+     */
+    selectJournal ({ commit }, payload) {
+        commit('setSelectedJournal', payload)
     },
     /**
      * 
      * @param {*} param0 
      * @param {*} payload 
      */
-    [SELECT_JOURNAL] ({ commit }, payload) {
-        commit(SET_SELECTED_JOURNAL, payload)
+    submitBankPayment({ commit }, payload) {
+        if (!payload.bank) {
+            commit('autoSelectJournal')
+            commit('setShowBankPaymentModal', false)
+            return
+        }
+        
+        commit('setSelectedBank', payload.bank)
+        commit('setSelectedBankPaymentType', payload.bankType)
+        commit('setBankOperationNumber', payload.bankNumber)
+        commit('setBankDueDate', payload.dueDate)
+        commit('setAccountBankNumber', payload.accountNumber)
+        commit('setHolderBankName', payload.holder)
+
+        commit('setShowBankPaymentModal', false)
     },
     /**
      * 
      * @param {*} param0 
      */
-    [RESET_JOURNAL] ({ commit }) {
-        commit(SET_LOADING_JOURNALS, true)
-        commit(SET_JOURNALS, [])
-        commit(SET_SELECTED_JOURNAL, null)
+    resetJournal ({ commit }) {
+        commit('setLoadingJournals', true)
+        commit('setJournals', [])
+        commit('setSelectedJournal', null)
+        commit('setShowBankPaymentModal', false)
     }
 }
 

+ 3 - 1
webpack.config.js

@@ -19,7 +19,9 @@ module.exports = {
         }
     },
     plugins: [
-        new LiveReloadPlugin(),
+        new LiveReloadPlugin({
+            appendScriptTag: true
+        }),
         new ExtractTextPlugin('main.css')
     ],
     module: {

+ 175 - 64
yarn.lock

@@ -34,6 +34,10 @@ ajv-keywords@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.0.tgz#a296e17f7bfae7c1ce4f7e0de53d29cb32162df0"
 
+ajv-keywords@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762"
+
 ajv@^4.9.1:
   version "4.11.8"
   resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
@@ -197,14 +201,14 @@ aws4@^1.2.1:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
 
-axios@^0.17.0:
-  version "0.17.0"
-  resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.0.tgz#7da747916db803f761651d6091d708789b953c6a"
+axios@^0.17.1:
+  version "0.17.1"
+  resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d"
   dependencies:
-    follow-redirects "^1.2.3"
+    follow-redirects "^1.2.5"
     is-buffer "^1.1.5"
 
-babel-code-frame@^6.11.0, babel-code-frame@^6.22.0:
+babel-code-frame@^6.22.0:
   version "6.22.0"
   resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
   dependencies:
@@ -1025,6 +1029,10 @@ caniuse-lite@^1.0.30000684:
   version "1.0.30000701"
   resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000701.tgz#9d673cf6b74dcb3d5c21d213176b011ac6a45baa"
 
+caseless@~0.11.0:
+  version "0.11.0"
+  resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
+
 caseless@~0.12.0:
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
@@ -1194,6 +1202,10 @@ commander@2.8.x:
   dependencies:
     graceful-readlink ">= 1.0.0"
 
+commander@^2.9.0:
+  version "2.13.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c"
+
 commondir@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b"
@@ -1328,22 +1340,22 @@ css-color-names@0.0.4:
   version "0.0.4"
   resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
 
-css-loader@^0.28.7:
-  version "0.28.7"
-  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b"
+css-loader@^0.28.9:
+  version "0.28.9"
+  resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.9.tgz#68064b85f4e271d7ce4c48a58300928e535d1c95"
   dependencies:
-    babel-code-frame "^6.11.0"
+    babel-code-frame "^6.26.0"
     css-selector-tokenizer "^0.7.0"
-    cssnano ">=2.6.1 <4"
+    cssnano "^3.10.0"
     icss-utils "^2.1.0"
     loader-utils "^1.0.2"
     lodash.camelcase "^4.3.0"
-    object-assign "^4.0.1"
+    object-assign "^4.1.1"
     postcss "^5.0.6"
-    postcss-modules-extract-imports "^1.0.0"
-    postcss-modules-local-by-default "^1.0.1"
-    postcss-modules-scope "^1.0.0"
-    postcss-modules-values "^1.1.0"
+    postcss-modules-extract-imports "^1.2.0"
+    postcss-modules-local-by-default "^1.2.0"
+    postcss-modules-scope "^1.1.0"
+    postcss-modules-values "^1.3.0"
     postcss-value-parser "^3.3.0"
     source-list-map "^2.0.0"
 
@@ -1359,7 +1371,7 @@ cssesc@^0.1.0:
   version "0.1.0"
   resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4"
 
-"cssnano@>=2.6.1 <4":
+cssnano@^3.10.0:
   version "3.10.0"
   resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38"
   dependencies:
@@ -1435,12 +1447,18 @@ debug@^2.2.0:
   dependencies:
     ms "2.0.0"
 
-debug@^2.6.8, debug@^2.6.9:
+debug@^2.6.8:
   version "2.6.9"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
   dependencies:
     ms "2.0.0"
 
+debug@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
+  dependencies:
+    ms "2.0.0"
+
 debug@~2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
@@ -1717,9 +1735,9 @@ faye-websocket@~0.10.0:
   dependencies:
     websocket-driver ">=0.5.1"
 
-file-loader@^1.1.5:
-  version "1.1.5"
-  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.5.tgz#91c25b6b6fbe56dae99f10a425fd64933b5c9daa"
+file-loader@^1.1.6:
+  version "1.1.6"
+  resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8"
   dependencies:
     loader-utils "^1.0.2"
     schema-utils "^0.3.0"
@@ -1763,11 +1781,11 @@ flatten@^1.0.2:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
 
-follow-redirects@^1.2.3:
-  version "1.2.5"
-  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.5.tgz#ffd3e14cbdd5eaa72f61b6368c1f68516c2a26cc"
+follow-redirects@^1.2.5:
+  version "1.4.1"
+  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.4.1.tgz#d8120f4518190f55aac65bb6fc7b85fcd666d6aa"
   dependencies:
-    debug "^2.6.9"
+    debug "^3.1.0"
 
 for-in@^0.1.3:
   version "0.1.8"
@@ -1856,6 +1874,16 @@ gaze@^1.0.0:
   dependencies:
     globule "^1.0.0"
 
+generate-function@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+  dependencies:
+    is-property "^1.0.0"
+
 get-caller-file@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
@@ -1887,6 +1915,16 @@ glob-parent@^2.0.0:
   dependencies:
     is-glob "^2.0.0"
 
+glob@^6.0.4:
+  version "6.0.4"
+  resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22"
+  dependencies:
+    inflight "^1.0.4"
+    inherits "2"
+    minimatch "2 || 3"
+    once "^1.3.0"
+    path-is-absolute "^1.0.0"
+
 glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
   version "7.1.2"
   resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
@@ -1922,6 +1960,15 @@ har-schema@^1.0.5:
   version "1.0.5"
   resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e"
 
+har-validator@~2.0.6:
+  version "2.0.6"
+  resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
+  dependencies:
+    chalk "^1.1.1"
+    commander "^2.9.0"
+    is-my-json-valid "^2.12.4"
+    pinkie-promise "^2.0.0"
+
 har-validator@~4.2.1:
   version "4.2.1"
   resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a"
@@ -2180,6 +2227,15 @@ is-glob@^2.0.0, is-glob@^2.0.1:
   dependencies:
     is-extglob "^1.0.0"
 
+is-my-json-valid@^2.12.4:
+  version "2.17.1"
+  resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz#3da98914a70a22f0a8563ef1511a246c6fc55471"
+  dependencies:
+    generate-function "^2.0.0"
+    generate-object-property "^1.1.0"
+    jsonpointer "^4.0.0"
+    xtend "^4.0.0"
+
 is-number@^2.1.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
@@ -2214,6 +2270,10 @@ is-promise@^2.0.0:
   version "2.1.0"
   resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
 
+is-property@^1.0.0:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
 is-regex@^1.0.3:
   version "1.0.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
@@ -2328,6 +2388,10 @@ jsonify@~0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
 
+jsonpointer@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
 jsprim@^1.2.2:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918"
@@ -2575,7 +2639,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
 
-minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
+"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4, minimatch@~3.0.2:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   dependencies:
@@ -2674,9 +2738,9 @@ node-pre-gyp@^0.6.36:
     tar "^2.2.1"
     tar-pack "^3.4.0"
 
-node-sass@^4.5.3:
-  version "4.5.3"
-  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.5.3.tgz#d09c9d1179641239d1b97ffc6231fdcec53e1568"
+node-sass@^4.7.2:
+  version "4.7.2"
+  resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.7.2.tgz#9366778ba1469eb01438a9e8592f4262bcb6794e"
   dependencies:
     async-foreach "^0.1.3"
     chalk "^1.1.1"
@@ -2693,9 +2757,10 @@ node-sass@^4.5.3:
     nan "^2.3.2"
     node-gyp "^3.3.1"
     npmlog "^4.0.0"
-    request "^2.79.0"
-    sass-graph "^2.1.1"
+    request "~2.79.0"
+    sass-graph "^2.2.4"
     stdout-stream "^1.4.0"
+    "true-case-path" "^1.0.2"
 
 "nopt@2 || 3":
   version "3.0.6"
@@ -2765,7 +2830,7 @@ oauth-sign@~0.8.1:
   version "0.8.2"
   resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
 
-object-assign@^4.0.1, object-assign@^4.1.0:
+object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
   version "4.1.1"
   resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
 
@@ -3091,27 +3156,27 @@ postcss-minify-selectors@^2.0.4:
     postcss "^5.0.14"
     postcss-selector-parser "^2.0.0"
 
-postcss-modules-extract-imports@^1.0.0:
+postcss-modules-extract-imports@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85"
   dependencies:
     postcss "^6.0.1"
 
-postcss-modules-local-by-default@^1.0.1:
+postcss-modules-local-by-default@^1.2.0:
   version "1.2.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069"
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
 
-postcss-modules-scope@^1.0.0:
+postcss-modules-scope@^1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90"
   dependencies:
     css-selector-tokenizer "^0.7.0"
     postcss "^6.0.1"
 
-postcss-modules-values@^1.1.0:
+postcss-modules-values@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20"
   dependencies:
@@ -3388,6 +3453,10 @@ qs@~5.1.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/qs/-/qs-5.1.0.tgz#4d932e5c7ea411cca76a312d39a606200fd50cd9"
 
+qs@~6.3.0:
+  version "6.3.2"
+  resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c"
+
 qs@~6.4.0:
   version "6.4.0"
   resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@@ -3580,7 +3649,7 @@ repeating@^2.0.0:
   dependencies:
     is-finite "^1.0.0"
 
-request@2, request@^2.79.0, request@^2.81.0:
+request@2, request@^2.81.0:
   version "2.81.0"
   resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0"
   dependencies:
@@ -3607,6 +3676,31 @@ request@2, request@^2.79.0, request@^2.81.0:
     tunnel-agent "^0.6.0"
     uuid "^3.0.0"
 
+request@~2.79.0:
+  version "2.79.0"
+  resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
+  dependencies:
+    aws-sign2 "~0.6.0"
+    aws4 "^1.2.1"
+    caseless "~0.11.0"
+    combined-stream "~1.0.5"
+    extend "~3.0.0"
+    forever-agent "~0.6.1"
+    form-data "~2.1.1"
+    har-validator "~2.0.6"
+    hawk "~3.1.3"
+    http-signature "~1.1.0"
+    is-typedarray "~1.0.0"
+    isstream "~0.1.2"
+    json-stringify-safe "~5.0.1"
+    mime-types "~2.1.7"
+    oauth-sign "~0.8.1"
+    qs "~6.3.0"
+    stringstream "~0.0.4"
+    tough-cookie "~2.3.0"
+    tunnel-agent "~0.4.1"
+    uuid "^3.0.0"
+
 require-directory@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
@@ -3654,7 +3748,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853"
 
-sass-graph@^2.1.1:
+sass-graph@^2.2.4:
   version "2.2.4"
   resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
   dependencies:
@@ -3683,6 +3777,13 @@ schema-utils@^0.3.0:
   dependencies:
     ajv "^5.0.0"
 
+schema-utils@^0.4.3:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.3.tgz#e2a594d3395834d5e15da22b48be13517859458e"
+  dependencies:
+    ajv "^5.0.0"
+    ajv-keywords "^2.1.0"
+
 scss-tokenizer@^0.2.3:
   version "0.2.3"
   resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
@@ -3903,12 +4004,12 @@ strip-json-comments@~2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
 
-style-loader@^0.19.0:
-  version "0.19.0"
-  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.19.0.tgz#7258e788f0fee6a42d710eaf7d6c2412a4c50759"
+style-loader@^0.20.1:
+  version "0.20.1"
+  resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.20.1.tgz#33ac2bf4d5c65a8906bc586ad253334c246998d0"
   dependencies:
-    loader-utils "^1.0.2"
-    schema-utils "^0.3.0"
+    loader-utils "^1.1.0"
+    schema-utils "^0.4.3"
 
 supports-color@^2.0.0:
   version "2.0.0"
@@ -4012,6 +4113,12 @@ trim-right@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
 
+"true-case-path@^1.0.2":
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.2.tgz#7ec91130924766c7f573be3020c34f8fdfd00d62"
+  dependencies:
+    glob "^6.0.4"
+
 tty-browserify@0.0.0:
   version "0.0.0"
   resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -4022,6 +4129,10 @@ tunnel-agent@^0.6.0:
   dependencies:
     safe-buffer "^5.0.1"
 
+tunnel-agent@~0.4.1:
+  version "0.4.3"
+  resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
+
 tweetnacl@^0.14.3, tweetnacl@~0.14.0:
   version "0.14.5"
   resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
@@ -4132,21 +4243,21 @@ void-elements@^2.0.1:
   version "2.0.1"
   resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
 
-vue-form-wizard@^0.7.0:
-  version "0.7.0"
-  resolved "https://registry.yarnpkg.com/vue-form-wizard/-/vue-form-wizard-0.7.0.tgz#fcfbb2d7b430cb9e2642ba577cf5c192131aa80e"
+vue-form-wizard@^0.8.2:
+  version "0.8.2"
+  resolved "https://registry.yarnpkg.com/vue-form-wizard/-/vue-form-wizard-0.8.2.tgz#f5720264de9a810d0abdecde0d5c9faa1151a065"
 
 vue-hot-reload-api@^2.2.0:
   version "2.2.0"
   resolved "https://registry.yarnpkg.com/vue-hot-reload-api/-/vue-hot-reload-api-2.2.0.tgz#9a21b35ced3634434a43ee80efb7350ea8fb206d"
 
-vue-js-modal@^1.3.4:
-  version "1.3.4"
-  resolved "https://registry.yarnpkg.com/vue-js-modal/-/vue-js-modal-1.3.4.tgz#0371c79d4a519dde320d43b9847ba8b404247e1f"
+vue-js-modal@^1.3.9:
+  version "1.3.9"
+  resolved "https://registry.yarnpkg.com/vue-js-modal/-/vue-js-modal-1.3.9.tgz#f2107252111bd0d16eb8e320bc383aa2c4d03a47"
 
-vue-loader@^13.3.0:
-  version "13.3.0"
-  resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-13.3.0.tgz#3bf837d490ba5dea6fc07e0835ffa6c688c8af33"
+vue-loader@^14.0.3:
+  version "14.0.3"
+  resolved "https://registry.yarnpkg.com/vue-loader/-/vue-loader-14.0.3.tgz#26df42fb2a40e21e9799eb1adc15fff763b99bd2"
   dependencies:
     consolidate "^0.14.0"
     hash-sum "^1.0.2"
@@ -4159,19 +4270,19 @@ vue-loader@^13.3.0:
     resolve "^1.4.0"
     source-map "^0.6.1"
     vue-hot-reload-api "^2.2.0"
-    vue-style-loader "^3.0.0"
+    vue-style-loader "^4.0.1"
     vue-template-es2015-compiler "^1.6.0"
 
-vue-style-loader@^3.0.0:
-  version "3.0.1"
-  resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-3.0.1.tgz#c8b639bb2f24baf9d78274dc17e4f264c1deda08"
+vue-style-loader@^4.0.1:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/vue-style-loader/-/vue-style-loader-4.0.1.tgz#252300d32eb97e83c1a1cb5b2029e2d8c3adcf9f"
   dependencies:
     hash-sum "^1.0.2"
     loader-utils "^1.0.2"
 
-vue-template-compiler@^2.5.2:
-  version "2.5.2"
-  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.2.tgz#6f198ebc677b8f804315cd33b91e849315ae7177"
+vue-template-compiler@^2.5.13:
+  version "2.5.13"
+  resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.13.tgz#12a2aa0ecd6158ac5e5f14d294b0993f399c3d38"
   dependencies:
     de-indent "^1.0.2"
     he "^1.1.0"
@@ -4180,9 +4291,9 @@ vue-template-es2015-compiler@^1.6.0:
   version "1.6.0"
   resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"
 
-vue@^2.5.2:
-  version "2.5.2"
-  resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.2.tgz#fd367a87bae7535e47f9dc5c9ec3b496e5feb5a4"
+vue@^2.5.13:
+  version "2.5.13"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1"
 
 vuex@^3.0.1:
   version "3.0.1"
@@ -4209,9 +4320,9 @@ webpack-sources@^1.0.1:
     source-list-map "^2.0.0"
     source-map "~0.5.3"
 
-webpack@^3.8.1:
-  version "3.8.1"
-  resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83"
+webpack@^3.10.0:
+  version "3.10.0"
+  resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.10.0.tgz#5291b875078cf2abf42bdd23afe3f8f96c17d725"
   dependencies:
     acorn "^5.0.0"
     acorn-dynamic-import "^2.0.0"