ability to define user at create expense and fill

This commit is contained in:
Akhil Gupta
2021-06-07 17:03:17 +05:30
parent 8cea4579eb
commit 164b694bc6
2 changed files with 69 additions and 153 deletions

View File

@@ -29,6 +29,7 @@ export default {
showMore: false, showMore: false,
quickEntry: null, quickEntry: null,
myVehicles: [], myVehicles: [],
users: [],
selectedVehicle: this.vehicle, selectedVehicle: this.vehicle,
expenseModel: this.expense, expenseModel: this.expense,
processQuickEntry: false, processQuickEntry: false,
@@ -53,8 +54,10 @@ export default {
mounted() { mounted() {
this.myVehicles = this.vehicles this.myVehicles = this.vehicles
this.selectedVehicle = this.vehicle this.selectedVehicle = this.vehicle
this.fetchVehicleUsers()
if (!this.expense.id) { if (!this.expense.id) {
this.expenseModel = this.getEmptyExpense() this.expenseModel = this.getEmptyExpense()
this.expenseModel.userId = this.me.id
} }
}, },
methods: { methods: {
@@ -66,20 +69,25 @@ export default {
odoReading: '', odoReading: '',
date: new Date(), date: new Date(),
comments: '', comments: '',
userId: '',
} }
}, },
fetchVehicleUsers() {
store
.dispatch('vehicles/fetchUsersByVehicleId', { vehicleId: this.selectedVehicle.id })
.then((data) => {
this.users = data
})
.catch((err) => console.log(err))
},
createExpense() { createExpense() {
this.tryingToCreate = true this.tryingToCreate = true
this.expenseModel.vehicleId = this.selectedVehicle.id this.expenseModel.vehicleId = this.selectedVehicle.id
this.expenseModel.userId = this.me.id // this.expenseModel.userId = this.me.id
if (this.expense.id) { if (this.expense.id) {
axios axios
.put( .put(`/api/vehicles/${this.selectedVehicle.id}/expenses/${this.expense.id}`, this.expenseModel)
`/api/vehicles/${this.selectedVehicle.id}/expenses/${this.expense.id}`,
this.expenseModel
)
.then((data) => { .then((data) => {
this.$buefy.toast.open({ this.$buefy.toast.open({
message: 'Expense Updated Successfully', message: 'Expense Updated Successfully',
@@ -88,9 +96,7 @@ export default {
}) })
this.expenseModel = this.getEmptyExpense() this.expenseModel = this.getEmptyExpense()
if (this.processQuickEntry) { if (this.processQuickEntry) {
store store.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }).then((data) => {})
.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id })
.then((data) => {})
} }
}) })
.catch((ex) => { .catch((ex) => {
@@ -115,11 +121,9 @@ export default {
}) })
this.expenseModel = this.getEmptyExpense() this.expenseModel = this.getEmptyExpense()
if (this.processQuickEntry) { if (this.processQuickEntry) {
store store.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }).then((data) => {
.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }) this.quickEntry = null
.then((data) => { })
this.quickEntry = null
})
} }
}) })
.catch((ex) => { .catch((ex) => {
@@ -145,14 +149,7 @@ export default {
<div class="column is-two-thirds"> <div class="column is-two-thirds">
<h1 class="title">Create Expense</h1> <h1 class="title">Create Expense</h1>
<h1 class="subtitle"> <h1 class="subtitle">
{{ {{ [selectedVehicle.nickname, selectedVehicle.registration, selectedVehicle.make, selectedVehicle.model].join(' | ') }}
[
selectedVehicle.nickname,
selectedVehicle.registration,
selectedVehicle.make,
selectedVehicle.model,
].join(' | ')
}}
</h1> </h1>
</div> </div>
<div class="column is-one-thirds"> <div class="column is-one-thirds">
@@ -161,26 +158,21 @@ export default {
</div> </div>
<form @submit.prevent="createExpense"> <form @submit.prevent="createExpense">
<b-field label="Select a vehicle"> <b-field label="Select a vehicle">
<b-select <b-select v-model="selectedVehicle" placeholder="Vehicle" required expanded :disabled="expense.id">
v-model="selectedVehicle"
placeholder="Vehicle"
required
expanded
:disabled="expense.id"
>
<option v-for="option in myVehicles" :key="option.id" :value="option"> <option v-for="option in myVehicles" :key="option.id" :value="option">
{{ option.nickname }} {{ option.nickname }}
</option> </option>
</b-select> </b-select>
</b-field> </b-field>
<b-field label="Expense by">
<b-select v-model="expenseModel.userId" placeholder="User" required expanded :disabled="expense.id">
<option v-for="option in users" :key="option.userId" :value="option.userId">
{{ option.name }}
</option>
</b-select>
</b-field>
<b-field label="Expense Date"> <b-field label="Expense Date">
<b-datepicker <b-datepicker v-model="expenseModel.date" placeholder="Click to select..." icon="calendar" :max-date="new Date()"> </b-datepicker>
v-model="expenseModel.date"
placeholder="Click to select..."
icon="calendar"
:max-date="new Date()"
>
</b-datepicker>
</b-field> </b-field>
<b-field label="Expense Type*"> <b-field label="Expense Type*">
<b-input v-model="expenseModel.expenseType" expanded required></b-input> <b-input v-model="expenseModel.expenseType" expanded required></b-input>
@@ -190,26 +182,13 @@ export default {
<p class="control"> <p class="control">
<span class="button is-static">{{ me.currency }}</span> <span class="button is-static">{{ me.currency }}</span>
</p> </p>
<b-input <b-input v-model.number="expenseModel.amount" type="number" min="0" expanded step=".001" required></b-input>
v-model.number="expenseModel.amount"
type="number"
min="0"
expanded
step=".001"
required
></b-input>
</b-field> </b-field>
<b-field label="Odometer Reading"> <b-field label="Odometer Reading">
<p class="control"> <p class="control">
<span class="button is-static">{{ me.distanceUnitDetail.short }}</span> <span class="button is-static">{{ me.distanceUnitDetail.short }}</span>
</p> </p>
<b-input <b-input v-model.number="expenseModel.odoReading" type="number" min="0" expanded required></b-input>
v-model.number="expenseModel.odoReading"
type="number"
min="0"
expanded
required
></b-input>
</b-field> </b-field>
<b-field> <b-field>
@@ -221,21 +200,11 @@ export default {
</b-field> </b-field>
</fieldset> </fieldset>
<b-field> <b-field>
<b-switch v-if="quickEntry" v-model="processQuickEntry" <b-switch v-if="quickEntry" v-model="processQuickEntry">Mark selected Quick Entry as processed</b-switch>
>Mark selected Quick Entry as processed</b-switch
>
</b-field> </b-field>
<br /> <br />
<b-field> <b-field>
<b-button <b-button tag="input" native-type="submit" :disabled="tryingToCreate" type="is-primary" label="Create Expense" expanded> </b-button>
tag="input"
native-type="submit"
:disabled="tryingToCreate"
type="is-primary"
label="Create Expense"
expanded
>
</b-button>
</b-field> </b-field>
</form> </form>
</Layout> </Layout>

View File

@@ -32,6 +32,7 @@ export default {
showMore: false, showMore: false,
quickEntry: null, quickEntry: null,
myVehicles: [], myVehicles: [],
users: [],
selectedVehicle: this.vehicle, selectedVehicle: this.vehicle,
fillupModel: this.fillup, fillupModel: this.fillup,
processQuickEntry: false, processQuickEntry: false,
@@ -47,16 +48,10 @@ export default {
}, },
watch: { watch: {
'fillupModel.fuelQuantity': function(old, newOne) { 'fillupModel.fuelQuantity': function(old, newOne) {
this.fillupModel.totalAmount = round( this.fillupModel.totalAmount = round(this.fillupModel.fuelQuantity * this.fillupModel.perUnitPrice, 2)
this.fillupModel.fuelQuantity * this.fillupModel.perUnitPrice,
2
)
}, },
'fillupModel.perUnitPrice': function(old, newOne) { 'fillupModel.perUnitPrice': function(old, newOne) {
this.fillupModel.totalAmount = round( this.fillupModel.totalAmount = round(this.fillupModel.fuelQuantity * this.fillupModel.perUnitPrice, 2)
this.fillupModel.fuelQuantity * this.fillupModel.perUnitPrice,
2
)
}, },
quickEntry: function(newOne, old) { quickEntry: function(newOne, old) {
if (old == null && newOne !== null) { if (old == null && newOne !== null) {
@@ -67,11 +62,21 @@ export default {
mounted() { mounted() {
this.myVehicles = this.vehicles this.myVehicles = this.vehicles
this.selectedVehicle = this.vehicle this.selectedVehicle = this.vehicle
this.fetchVehicleUsers()
if (!this.fillup.id) { if (!this.fillup.id) {
this.fillupModel = this.getEmptyFillup() this.fillupModel = this.getEmptyFillup()
this.fillupModel.userId = this.me.id
} }
}, },
methods: { methods: {
fetchVehicleUsers() {
store
.dispatch('vehicles/fetchUsersByVehicleId', { vehicleId: this.selectedVehicle.id })
.then((data) => {
this.users = data
})
.catch((err) => console.log(err))
},
getEmptyFillup() { getEmptyFillup() {
return { return {
vehicleId: this.selectedVehicle.id, vehicleId: this.selectedVehicle.id,
@@ -85,18 +90,16 @@ export default {
date: new Date(), date: new Date(),
fillingStation: '', fillingStation: '',
comments: '', comments: '',
userId: '',
} }
}, },
async createFillup() { async createFillup() {
this.tryingToCreate = true this.tryingToCreate = true
this.fillupModel.vehicleId = this.selectedVehicle.id this.fillupModel.vehicleId = this.selectedVehicle.id
this.fillupModel.userId = this.me.id // this.fillupModel.userId = this.me.id
if (this.fillup.id) { if (this.fillup.id) {
axios axios
.put( .put(`/api/vehicles/${this.selectedVehicle.id}/fillups/${this.fillup.id}`, this.fillupModel)
`/api/vehicles/${this.selectedVehicle.id}/fillups/${this.fillup.id}`,
this.fillupModel
)
.then((data) => { .then((data) => {
this.$buefy.toast.open({ this.$buefy.toast.open({
message: 'Fillup Updated Successfully', message: 'Fillup Updated Successfully',
@@ -105,11 +108,9 @@ export default {
}) })
this.fillupModel = this.getEmptyFillup() this.fillupModel = this.getEmptyFillup()
if (this.processQuickEntry) { if (this.processQuickEntry) {
store store.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }).then((data) => {
.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }) this.quickEntry = null
.then((data) => { })
this.quickEntry = null
})
} }
}) })
.catch((ex) => { .catch((ex) => {
@@ -134,9 +135,7 @@ export default {
}) })
this.fillupModel = this.getEmptyFillup() this.fillupModel = this.getEmptyFillup()
if (this.processQuickEntry) { if (this.processQuickEntry) {
store store.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id }).then((data) => {})
.dispatch('vehicles/setQuickEntryAsProcessed', { id: this.quickEntry.id })
.then((data) => {})
} }
}) })
.catch((ex) => { .catch((ex) => {
@@ -163,14 +162,7 @@ export default {
<div class="column is-two-thirds"> <div class="column is-two-thirds">
<h1 class="title">Create Fillup</h1> <h1 class="title">Create Fillup</h1>
<h1 class="subtitle"> <h1 class="subtitle">
{{ {{ [selectedVehicle.nickname, selectedVehicle.registration, selectedVehicle.make, selectedVehicle.model].join(' | ') }}
[
selectedVehicle.nickname,
selectedVehicle.registration,
selectedVehicle.make,
selectedVehicle.model,
].join(' | ')
}}
</h1> </h1>
</div> </div>
<div class="column is-one-thirds"> <div class="column is-one-thirds">
@@ -180,37 +172,24 @@ export default {
</div> </div>
<form class="" @submit.prevent="createFillup"> <form class="" @submit.prevent="createFillup">
<b-field label="Select a vehicle"> <b-field label="Select a vehicle">
<b-select <b-select v-model="selectedVehicle" placeholder="Vehicle" required expanded :disabled="fillup.id">
v-model="selectedVehicle"
placeholder="Vehicle"
required
expanded
:disabled="fillup.id"
>
<option v-for="option in myVehicles" :key="option.id" :value="option"> <option v-for="option in myVehicles" :key="option.id" :value="option">
{{ option.nickname }} {{ option.nickname }}
</option> </option>
</b-select> </b-select>
</b-field> </b-field>
<b-field label="Expense by">
<b-select v-model="fillupModel.userId" placeholder="User" required expanded :disabled="fillup.id">
<option v-for="option in users" :key="option.userId" :value="option.userId">
{{ option.name }}
</option>
</b-select>
</b-field>
<b-field label="Fillup Date"> <b-field label="Fillup Date">
<b-datepicker <b-datepicker v-model="fillupModel.date" placeholder="Click to select..." icon="calendar" trap-focus :max-date="new Date()"> </b-datepicker>
v-model="fillupModel.date"
placeholder="Click to select..."
icon="calendar"
trap-focus
:max-date="new Date()"
>
</b-datepicker>
</b-field> </b-field>
<b-field label="Quantity*" addons> <b-field label="Quantity*" addons>
<b-input <b-input v-model.number="fillupModel.fuelQuantity" type="number" step=".001" min="0" expanded required></b-input>
v-model.number="fillupModel.fuelQuantity"
type="number"
step=".001"
min="0"
expanded
required
></b-input>
<b-select v-model="fillupModel.fuelUnit" placeholder="Fuel Unit" required> <b-select v-model="fillupModel.fuelUnit" placeholder="Fuel Unit" required>
<option v-for="(option, key) in fuelUnitMasters" :key="key" :value="key"> <option v-for="(option, key) in fuelUnitMasters" :key="key" :value="key">
{{ option.long }} {{ option.long }}
@@ -221,47 +200,25 @@ export default {
><p class="control"> ><p class="control">
<span class="button is-static">{{ me.currency }}</span> <span class="button is-static">{{ me.currency }}</span>
</p> </p>
<b-input <b-input v-model.number="fillupModel.perUnitPrice" type="number" min="0" step=".001" expanded required></b-input>
v-model.number="fillupModel.perUnitPrice"
type="number"
min="0"
step=".001"
expanded
required
></b-input>
</b-field> </b-field>
<b-field label="Total Amount Paid"> <b-field label="Total Amount Paid">
<p class="control"> <p class="control">
<span class="button is-static">{{ me.currency }}</span> <span class="button is-static">{{ me.currency }}</span>
</p> </p>
<b-input <b-input v-model.number="fillupModel.totalAmount" type="number" min="0" step=".001" expanded required></b-input>
v-model.number="fillupModel.totalAmount"
type="number"
min="0"
step=".001"
expanded
required
></b-input>
</b-field> </b-field>
<b-field label="Odometer Reading"> <b-field label="Odometer Reading">
<p class="control"> <p class="control">
<span class="button is-static">{{ me.distanceUnitDetail.short }}</span> <span class="button is-static">{{ me.distanceUnitDetail.short }}</span>
</p> </p>
<b-input <b-input v-model.number="fillupModel.odoReading" type="number" min="0" expanded required></b-input>
v-model.number="fillupModel.odoReading"
type="number"
min="0"
expanded
required
></b-input>
</b-field> </b-field>
<b-field> <b-field>
<b-checkbox v-model="fillupModel.isTankFull">Did you get a full tank?</b-checkbox> <b-checkbox v-model="fillupModel.isTankFull">Did you get a full tank?</b-checkbox>
</b-field> </b-field>
<b-field> <b-field>
<b-checkbox v-model="fillupModel.hasMissedFillup" <b-checkbox v-model="fillupModel.hasMissedFillup">Did you miss the fillup entry before this one?</b-checkbox>
>Did you miss the fillup entry before this one?</b-checkbox
>
</b-field> </b-field>
<b-field> <b-field>
<b-switch v-model="showMore">Fill more details</b-switch> <b-switch v-model="showMore">Fill more details</b-switch>
@@ -275,21 +232,11 @@ export default {
</b-field> </b-field>
</fieldset> </fieldset>
<b-field> <b-field>
<b-switch v-if="quickEntry" v-model="processQuickEntry" <b-switch v-if="quickEntry" v-model="processQuickEntry">Mark selected Quick Entry as processed</b-switch>
>Mark selected Quick Entry as processed</b-switch
>
</b-field> </b-field>
<br /> <br />
<b-field> <b-field>
<b-button <b-button tag="input" native-type="submit" :disabled="tryingToCreate" type="is-primary" label="Create Fillup" expanded> </b-button>
tag="input"
native-type="submit"
:disabled="tryingToCreate"
type="is-primary"
label="Create Fillup"
expanded
>
</b-button>
<p v-if="authError"> <p v-if="authError">
There was an error logging in to your account. There was an error logging in to your account.
</p> </p>