From fa9b73d081f61f68db4c5469de5d7a3d90d824d2 Mon Sep 17 00:00:00 2001 From: Leonardo Silveira Date: Tue, 11 Jun 2024 21:09:06 -0300 Subject: [PATCH] RED-89 - um chip de saldo pros planejamentos --- .../pages/dashboard/controles-dashboard.vue | 2 +- .../movimentacao/lista-movimentacoes.vue | 6 +-- .../planejamento/lista-planejamentos.vue | 16 +++--- web-app-vue/src/services/formaters.js | 51 +++++++++++++++---- .../src/shared/chip-saldo-movimentacao.vue | 34 +++++++++++++ .../src/shared/chip-saldo-planejamento.vue | 34 +++++++++++++ web-app-vue/src/shared/chip-saldo.vue | 16 ------ 7 files changed, 120 insertions(+), 39 deletions(-) create mode 100644 web-app-vue/src/shared/chip-saldo-movimentacao.vue create mode 100644 web-app-vue/src/shared/chip-saldo-planejamento.vue delete mode 100644 web-app-vue/src/shared/chip-saldo.vue diff --git a/web-app-vue/src/pages/dashboard/controles-dashboard.vue b/web-app-vue/src/pages/dashboard/controles-dashboard.vue index 92fed3c..df6fdda 100644 --- a/web-app-vue/src/pages/dashboard/controles-dashboard.vue +++ b/web-app-vue/src/pages/dashboard/controles-dashboard.vue @@ -166,7 +166,7 @@ import { computed, onMounted, ref, watch } from 'vue' import { VueUiDonut, VueUiSparkbar, VueUiSparkStackbar, VueUiXy } from 'vue-data-ui' import ChipPeriodo from '@/shared/chip-periodo.vue' import { useDashboardStore } from '@/stores/dashboardStore' -import ChipSaldo from '@/shared/chip-saldo.vue' +import ChipSaldo from '@/shared/chip-saldo-movimentacao.vue' import { donutConfig, lineChartConfig, diff --git a/web-app-vue/src/pages/movimentacao/lista-movimentacoes.vue b/web-app-vue/src/pages/movimentacao/lista-movimentacoes.vue index fca18b4..6d1fe26 100644 --- a/web-app-vue/src/pages/movimentacao/lista-movimentacoes.vue +++ b/web-app-vue/src/pages/movimentacao/lista-movimentacoes.vue @@ -20,7 +20,7 @@ icon="mdi-dots-vertical" > - + @@ -188,7 +188,7 @@ import { prepareBalance, prepareDate } from '@/services/formaters' import { endOfMonth, format, startOfMonth } from 'date-fns' import CategoriaAutocomplete from '@/shared/categoria-autocomplete.vue' import ContaAutocomplete from '@/shared/conta-autocomplete.vue' -import ChipSaldo from '@/shared/chip-saldo.vue' +import ChipSaldo from '@/shared/chip-saldo-movimentacao.vue' import ChipConta from '@/shared/chip-conta.vue' import ChipPeriodo from '@/shared/chip-periodo.vue' import ChipMovimentacao from '@/shared/chip-movimentacao.vue' @@ -239,8 +239,6 @@ const agrupamentoCategoria = computed(() => { .filter((ac) => ac.saldo !== 0) }) -const saldo = computed(() => prepareBalance(movimentacoes.value)) - const statusFiltro = computed(() => ({ inicio: filtro.dataInicio && format(prepareDate(filtro.dataInicio), 'yyyy-MM-dd'), fim: filtro.dataFim && format(prepareDate(filtro.dataFim), 'yyyy-MM-dd'), diff --git a/web-app-vue/src/pages/planejamento/lista-planejamentos.vue b/web-app-vue/src/pages/planejamento/lista-planejamentos.vue index 0bdf1f5..e8a6154 100644 --- a/web-app-vue/src/pages/planejamento/lista-planejamentos.vue +++ b/web-app-vue/src/pages/planejamento/lista-planejamentos.vue @@ -8,7 +8,8 @@ @click="drawer = !drawer" icon="mdi-dots-vertical" > - + +

Não há planejamentos para exibir

@@ -22,8 +23,7 @@
- + @@ -35,6 +35,7 @@ import DetalhePlanejamento from '@/pages/planejamento/detalhe-planejamento.vue' import { computed, onMounted, reactive, ref } from 'vue' import { usePlanejamentoStore } from '@/stores/planejamentoStore' import { useCategoriaStore } from '@/stores/categoriaStore' +import ChipSaldoPlanejamento from '@/shared/chip-saldo-planejamento.vue' const drawer = ref(false) @@ -47,8 +48,10 @@ const categoriaStore = useCategoriaStore() const planejamentos = computed(() => { const planejamentos = planejamentoStore.store.planejamentos || [] - return planejamentos.filter(p => filtros.tipo_movimentacao_id != null ? - filtros.tipo_movimentacao_id === p.tipo_movimentacao_id : true + return planejamentos.filter((p) => + filtros.tipo_movimentacao_id != null + ? filtros.tipo_movimentacao_id === p.tipo_movimentacao_id + : true ) }) @@ -73,5 +76,4 @@ const delPlanejamento = async (planejamento) => { } } - + diff --git a/web-app-vue/src/services/formaters.js b/web-app-vue/src/services/formaters.js index 1bcb127..d2e25b7 100644 --- a/web-app-vue/src/services/formaters.js +++ b/web-app-vue/src/services/formaters.js @@ -3,7 +3,7 @@ import { parseISO } from 'date-fns' export const prepareDate = (date) => { // console.log(`date: ${JSON.stringify(date)}`) if (!date) return date - if(date.value) date = date.value + if (date.value) date = date.value if (date.toLocaleDateString) return date if (!isNaN(date)) return new Date(date) return parseISO(date) @@ -35,18 +35,47 @@ export const readTextFile = (file) => { }) } -export const prepareBalance = (movimentacoes) => { +export const prepareBalance = (movimentacoes, field = 'valor') => { if (!movimentacoes.length) return 0 - return movimentacoes.filter(m => !m.interna).reduce( - (p, c) => { - return { valor: isPositiveOrNegative(p) + isPositiveOrNegative(c), tipo_movimentacao_id: 1 } - }, - { valor: 0 } - ).valor + return movimentacoes + .filter((m) => !m.interna) + .reduce( + (p, c) => { + return { + [field]: isPositiveOrNegative(p, field) + isPositiveOrNegative(c, field), + tipo_movimentacao_id: 1 + } + }, + { [field]: 0 } + )[field] } -const isPositiveOrNegative = (m) => { - const v = parseFloat(m.valor) - if (m.tipo_movimentacao_id == 1) return v +export const prepareIncome = (movimentacoes, field = 'valor') => { + if (!movimentacoes.length) return 0 + return movimentacoes + .filter((m) => !m.interna && m.tipo_movimentacao_id === 1) + .reduce( + (p, c) => { + return { [field]: p[field] + parseFloat(c[field]) } + }, + { [field]: 0 } + )[field] +} + +export const prepareExpense = (movimentacoes, field = 'valor') => { + if (!movimentacoes.length) return 0 + return movimentacoes + .filter((m) => !m.interna && m.tipo_movimentacao_id === 2) + .reduce( + (p, c) => { + return { [field]: p[field] + parseFloat(c[field]) } + }, + { [field]: 0 } + )[field] +} + +const isPositiveOrNegative = (m, field = 'valor') => { + const v = parseFloat(m[field]) + if (m.tipo_movimentacao_id === 1) return v return -v } diff --git a/web-app-vue/src/shared/chip-saldo-movimentacao.vue b/web-app-vue/src/shared/chip-saldo-movimentacao.vue new file mode 100644 index 0000000..2abed5c --- /dev/null +++ b/web-app-vue/src/shared/chip-saldo-movimentacao.vue @@ -0,0 +1,34 @@ + + + diff --git a/web-app-vue/src/shared/chip-saldo-planejamento.vue b/web-app-vue/src/shared/chip-saldo-planejamento.vue new file mode 100644 index 0000000..a8b7ed3 --- /dev/null +++ b/web-app-vue/src/shared/chip-saldo-planejamento.vue @@ -0,0 +1,34 @@ + + + diff --git a/web-app-vue/src/shared/chip-saldo.vue b/web-app-vue/src/shared/chip-saldo.vue deleted file mode 100644 index bbfc861..0000000 --- a/web-app-vue/src/shared/chip-saldo.vue +++ /dev/null @@ -1,16 +0,0 @@ - - -