2
0
mirror of https://github.com/frappe/books.git synced 2025-02-04 21:18:32 +00:00
books/src/components/ReconciliationValidation.vue
2019-09-03 15:14:38 +05:30

93 lines
2.6 KiB
Vue

<template>
<div id="importWizard" class="modal-body" style="overflow: hidden;">
<div class="row">
<div class="col-12">
<!-- <div v-for="(entry, i) in entries" :key="i">{{ entry['Date'] }}</div> -->
<table class="table table-sm">
<thead style="font-size: 13px">
<tr>
<th scope="col">
<input type="checkbox" checked="true" ref="all" @change="allSelected" />
</th>
<th
scope="col"
v-for="(fieldname, index) in Object.keys(entries[0])"
:key="index"
>{{ fieldname }}</th>
</tr>
</thead>
<tbody style="font-size: 13px">
<tr v-for="(entry, index) in entries" :key="index">
<th scope="row">
<input type="checkbox" checked="true" :ref="'cb-'+index" @change="rowSelected" />
</th>
<td v-for="(fieldname, idx) in Object.keys(entry)" :key="idx">{{ entry[fieldname] }}</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-12 text-right">
<f-button primary @click="reconcile">{{ 'Reconcile' }}</f-button>
</div>
</div>
</div>
</template>
<script>
const luxon = require('luxon');
export default {
props: ['entries', 'afterReconcile'],
data() {
return {
selectedEntries: []
};
},
methods: {
allSelected() {
for (let i = 0; i < this.entries.length; i++) {
this.$refs['cb-' + i][0].checked = this.$refs['all'].checked;
}
},
rowSelected() {
for (let i = 0; i < this.entries.length; i++) {
if (!this.$refs['cb-' + i][0].checked) {
this.$refs['all'].checked = false;
}
}
},
close() {
this.$modal.hide();
},
async reconcile() {
for (let i = 0; i < this.entries.length; i++) {
if (this.$refs['cb-' + i][0].checked)
this.selectedEntries.push(this.entries[i]);
}
for (let entry of this.selectedEntries) {
const payment = await frappe.getDoc('Payment', entry['Payment Entry']);
const clearanceDate =
luxon.DateTime.fromFormat(
entry['Clearance Date'],
'dd/MM/yy'
).toISO() ||
luxon.DateTime.fromFormat(
entry['Clearance Date'],
'dd/MM/yyyy'
).toISO();
payment.set({ clearanceDate });
await payment.update();
}
this.close();
await this.afterReconcile();
}
}
};
</script>
<style>
.modal-dialog {
max-width: 600px !important;
}
</style>