167 lines
6.0 KiB
Vue
167 lines
6.0 KiB
Vue
<template>
|
|
<v-dialog v-model="dialog_add_jurnaltrx" persistent width="60vw">
|
|
<v-card>
|
|
<v-card-title class="headline grey lighten-2">
|
|
TAMBAH TRANSAKSI JURNAL
|
|
</v-card-title>
|
|
<v-card-text>
|
|
<v-layout row wrap>
|
|
<v-flex xs2 pr-1>
|
|
<v-text-field
|
|
v-model="trx_acc.coaAccountNo" hide-details
|
|
label="Nomor Account" outline readonly
|
|
></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs3 px-1>
|
|
<v-autocomplete
|
|
label="Deskripsi Account" hide-details outline
|
|
v-model="trx_acc" :items="list_account"
|
|
item-text="coaDescription" return-object
|
|
></v-autocomplete>
|
|
</v-flex>
|
|
<v-flex xs3 px-1>
|
|
<v-text-field
|
|
v-model="trx_info" hide-details
|
|
label="Informasi Transaksi" outline
|
|
></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs2 px-1>
|
|
<v-text-field
|
|
v-model="trx_debit" hide-details @blur="handleBlur('trx_debit')"
|
|
label="Debit" outline prefix="Rp." @focus="handleFocus('trx_debit')"
|
|
></v-text-field>
|
|
</v-flex>
|
|
<v-flex xs2 pl-1>
|
|
<v-text-field
|
|
v-model="trx_kredit" hide-details @blur="handleBlur('trx_kredit')"
|
|
label="Kredit" outline prefix="Rp." @focus="handleFocus('trx_kredit')"
|
|
></v-text-field>
|
|
</v-flex>
|
|
</v-layout>
|
|
</v-card-text>
|
|
<v-card-actions>
|
|
<v-spacer></v-spacer>
|
|
<v-btn @click="batalJurnalTrx()" color="red" class="white--text">Batal</v-btn>
|
|
<v-btn @click="simpanJurnalTrx()" color="primary" class="white--text">Simpan</v-btn>
|
|
</v-card-actions>
|
|
</v-card>
|
|
</v-dialog>
|
|
</template>
|
|
|
|
<script>
|
|
module.exports = {
|
|
data() {
|
|
return {
|
|
trx_acc: {},
|
|
trx_info: "",
|
|
trx_debit: 0.00,
|
|
trx_kredit: 0.00
|
|
}
|
|
},
|
|
computed: {
|
|
dialog_add_jurnaltrx: {
|
|
get() {
|
|
return this.$store.state.journal.dialog_add_jurnaltrx
|
|
},
|
|
set(val) {
|
|
this.$store.commit("journal/update_dialog_add_jurnaltrx", val)
|
|
}
|
|
},
|
|
list_account() {
|
|
return this.$store.state.journal.list_account
|
|
},
|
|
journal_balik_new() {
|
|
return this.$store.state.journal.journal_balik_new
|
|
},
|
|
summary_balik_new() {
|
|
return this.$store.state.journal.summary_balik_new
|
|
}
|
|
},
|
|
methods: {
|
|
formatCurrency(value) {
|
|
const num = parseFloat(value);
|
|
if (isNaN(num)) return 0;
|
|
return num.toFixed(2).replace('.', ',').replace(/\B(?=(\d{3})+(?!\d))/g, ".");
|
|
},
|
|
parseCurrency(value) {
|
|
let cleanedValue = String(value).replace(/\./g, '');
|
|
cleanedValue = cleanedValue.replace(',', '.');
|
|
return parseFloat(cleanedValue) || 0;
|
|
},
|
|
handleFocus(modelname) {
|
|
const currentValue = this[modelname];
|
|
this[modelname] = String(currentValue).replace(/\./g, '');
|
|
},
|
|
handleBlur(modelname) {
|
|
const currentValue = this[modelname];
|
|
const parsedValue = this.parseCurrency(currentValue);
|
|
this[modelname] = parsedValue;
|
|
this[modelname] = this.formatCurrency(parsedValue);
|
|
},
|
|
batalJurnalTrx() {
|
|
this.dialog_add_jurnaltrx = false
|
|
},
|
|
simpanJurnalTrx() {
|
|
let temp_trx = JSON.parse(JSON.stringify(this.journal_balik_new))
|
|
var count = temp_trx.length
|
|
|
|
const debit = this.parseCurrency(this.trx_debit);
|
|
const kredit = this.parseCurrency(this.trx_kredit);
|
|
|
|
let new_trx = {
|
|
...this.trx_acc,
|
|
jurnalTxID: "temp_" + (count + 1),
|
|
jurnalTxCoaID: this.trx_acc.coaID,
|
|
jurnalTxDebit: debit,
|
|
jurnalTxCredit: kredit,
|
|
jurnalTxDescription: this.trx_acc.coaDescription,
|
|
jurnalAddOnValue: this.trx_info
|
|
}
|
|
|
|
temp_trx.push(new_trx)
|
|
|
|
const total = temp_trx.reduce((acc, item) => {
|
|
const debit = Number(item.jurnalTxDebit)
|
|
const kredit = Number(item.jurnalTxCredit)
|
|
|
|
acc.total_debit += debit
|
|
acc.total_kredit += kredit
|
|
return acc
|
|
}, {total_debit: 0, total_kredit: 0 })
|
|
total.balance = total.total_debit - total.total_kredit
|
|
|
|
this.$store.commit("journal/update_journal_balik_new", temp_trx)
|
|
this.$store.commit("journal/update_summary_balik_new", total)
|
|
this.dialog_add_jurnaltrx = false
|
|
}
|
|
},
|
|
watch: {
|
|
dialog_add_jurnaltrx(val) {
|
|
if (val) {
|
|
this.$nextTick(() => {
|
|
this.trx_acc = {}
|
|
this.trx_info = ""
|
|
this.trx_debit = 0.00
|
|
this.trx_kredit = 0.00
|
|
})
|
|
}
|
|
},
|
|
trx_debit: {
|
|
immediate: true,
|
|
handler(newValue) {
|
|
if (typeof newValue === 'number') {
|
|
this.trx_debit = this.formatCurrency(newValue);
|
|
}
|
|
}
|
|
},
|
|
trx_kredit: {
|
|
immediate: true,
|
|
handler(newValue) {
|
|
if (typeof newValue === 'number') {
|
|
this.trx_kredit = this.formatCurrency(newValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</script> |