flaschengeist-frontend/src/components/baruser/CreditLists.vue

320 lines
9.8 KiB
Vue
Raw Normal View History

2019-12-21 07:20:25 +00:00
<template>
2020-01-14 21:01:24 +00:00
<div>
<v-dialog v-model="dialog" max-width="290">
<v-card>
<v-card-title class="headline"
>Transaktion ist länger als 5 Minuten her!</v-card-title
>
<v-card-text>
Da die Transaktion länger als 5 Minutern her ist, kann eine
Stornierung nicht durchgeführt werden. Wende dich bitte an den
Finanzer.
</v-card-text>
<v-card-actions>
<v-spacer />
<v-btn text @click="dialog = false">
Verstanden
</v-btn>
</v-card-actions>
</v-card>
</v-dialog>
<v-progress-linear v-if="loading && users.length !== 0" indeterminate />
2020-01-23 22:25:21 +00:00
<v-container>
<AddAmountSkeleton v-if="loading && users.length === 0" />
2020-01-23 22:25:21 +00:00
</v-container>
<v-navigation-drawer v-model="menu" right app clipped>
2020-02-16 19:35:13 +00:00
<v-list-item-group>
<div
v-for="message in messages"
three-line
:key="messages.indexOf(message)"
>
<v-list-item three-line>
<v-list-item-content>
<v-list-item-title>{{ now(message.date) }}</v-list-item-title>
<v-list-item-subtitle>{{ message.message }}</v-list-item-subtitle>
<v-list-item-subtitle class="red--text" v-if="message.storno">STORNIERT!!!</v-list-item-subtitle>
<v-list-item-action-text @click.stop="storno(message)"
>Klicken um zu Stornieren
</v-list-item-action-text>
</v-list-item-content>
</v-list-item>
</div>
2020-02-16 19:35:13 +00:00
</v-list-item-group>
</v-navigation-drawer>
2020-01-14 21:01:24 +00:00
<div v-for="user in users" :key="users.indexOf(user)">
<div v-if="isFiltered(user)">
<v-container>
2020-01-23 22:25:21 +00:00
<v-card :loading="user.loading">
<v-list-item>
<v-list-item-title class="title"
>{{ user.firstname }} {{ user.lastname }}</v-list-item-title
>
</v-list-item>
<v-card-text>
<v-row>
<v-col cols="10">
<v-row>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 200,
user: user
})
"
:color="color"
:disabled="user.locked"
>2 </v-btn
>
</v-col>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 100,
user: user
})
"
:color="color"
:disabled="user.locked"
>1 </v-btn
>
</v-col>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 50,
user: user
})
"
:color="color"
:disabled="user.locked"
>0,50 </v-btn
>
</v-col>
</v-row>
<v-row>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 40,
user: user
})
"
:color="color"
:disabled="user.locked"
>0,40 </v-btn
>
</v-col>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 20,
user: user
})
"
:color="color"
:disabled="user.locked"
>0,20 </v-btn
>
</v-col>
<v-col>
<v-btn
class="creditBtn"
block
@click="
2020-02-16 19:35:13 +00:00
addAmount({
username: user.username,
amount: 10,
user: user
})
"
:color="color"
:disabled="user.locked"
>0,10 </v-btn
>
</v-col>
</v-row>
</v-col>
<v-col align-self="center">
<v-row>
<v-list-item>
<v-list-item-action-text :class="getColor(user.type)"
>{{
(user.amount / 100).toFixed(2)
}}
</v-list-item-action-text
>
</v-list-item>
</v-row>
</v-col>
</v-row>
<v-alert v-if="user.locked" type="error"
>{{ user.firstname }} darf nicht mehr anschreiben.
{{ user.firstname }} sollte sich lieber mal beim Finanzer
melden.</v-alert
>
</v-card-text>
</v-card>
2020-02-16 19:35:13 +00:00
<v-snackbar
v-for="message in messages"
:key="messages.indexOf(message)"
:color="message.error ? 'error' : 'success'"
bottom
:timeout="3000"
:multi-line="true"
v-model="message.visible"
>
{{ message.message }}
</v-snackbar>
</v-container>
</div>
</div>
2020-01-14 21:01:24 +00:00
</div>
2019-12-21 07:20:25 +00:00
</template>
<script>
2020-01-14 21:01:24 +00:00
import { mapGetters, mapActions } from 'vuex'
2020-01-23 22:25:21 +00:00
import AddAmountSkeleton from '../user/Skeleton/AddAmountSkeleton'
2019-12-21 12:16:37 +00:00
2020-01-14 21:01:24 +00:00
export default {
name: 'CreditLists',
2020-01-23 22:25:21 +00:00
components: { AddAmountSkeleton },
2020-01-14 21:01:24 +00:00
props: {},
data() {
return {
color: 'green accent-4',
menu: true,
dialog: false
2019-12-21 07:20:25 +00:00
}
2020-01-14 21:01:24 +00:00
},
created() {
this.menu = this.menu_from_store
2020-01-14 21:01:24 +00:00
this.getUsers()
},
methods: {
...mapActions({
addAmount: 'barUsers/addAmount',
getUsers: 'barUsers/getUsers',
deactivate: 'barUsers/deactivateMenu',
commitStorno: 'barUsers/storno'
2020-01-14 21:01:24 +00:00
}),
getColor(type) {
return type === 'credit' ? 'title green--text' : 'title red--text'
},
isFiltered(user) {
try {
return (
user.firstname.toLowerCase().includes(this.filter.toLowerCase()) ||
user.lastname.toLowerCase().includes(this.filter.toLowerCase())
)
} catch (e) {
return true
}
},
storno(message) {
if (!message.error) {
if (!this.under5minutes(message.date)) this.dialog = true
else {
this.commitStorno({username: message.user.username, amount: message.amount, date: message.date})
}
}
2020-01-14 21:01:24 +00:00
}
},
computed: {
...mapGetters({
users: 'barUsers/users',
2020-01-23 22:25:21 +00:00
filter: 'barUsers/filter',
2020-02-16 19:35:13 +00:00
loading: 'barUsers/usersLoading',
messages: 'barUsers/messages',
menu_from_store: 'barUsers/menu'
2020-02-16 19:35:13 +00:00
}),
under5minutes() {
return now => {
var actual = new Date()
var zero = new Date(0)
var date = new Date(actual - now)
if (
date.getFullYear() === zero.getFullYear() &&
date.getMonth() === zero.getMonth() &&
date.getDate() === zero.getDate()
) {
if (date.getMinutes() < 6) {
return true
}
}
return false
}
},
now() {
return now => {
var actual = new Date()
var zero = new Date(0)
var date = new Date(actual - now)
if (date.getFullYear() === zero.getFullYear()) {
if (date.getMonth() === zero.getMonth()) {
if (date.getDate() === zero.getDate()) {
if (date.getHours() === zero.getDate()) {
if (date.getMinutes() < 1) {
return 'vor ' + date.getSeconds() + ' Sekunden'
} else if (date.getMinutes() < 10) {
return 'vor ' + date.getMinutes() + ' Minuten'
} else {
return now.getHours() + ':' + now.getMinutes()
}
} else {
return now.getHours() + ':' + now.getMinutes()
}
}
}
}
return (
now.getDate() +
'.' +
now.getMonth() +
'.' +
now.getFullYear() +
' ' +
now.getHours() +
':' +
now.getMinutes()
)
}
}
},
watch: {
menu(newValue) {
if (!newValue) this.deactivate()
},
menu_from_store(newValue) {
if (newValue) this.menu = this.menu_from_store
}
2020-01-14 21:01:24 +00:00
}
}
2019-12-21 07:20:25 +00:00
</script>
<style scoped>
2020-01-14 21:01:24 +00:00
.creditBtn {
margin: 2px;
}
2019-12-21 07:20:25 +00:00
</style>