Skip to content

Commit

Permalink
should be fine with postgres and sqlite now
Browse files Browse the repository at this point in the history
  • Loading branch information
sombriks committed May 14, 2024
1 parent 545adcb commit 8c5a395
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 26 deletions.
34 changes: 22 additions & 12 deletions service-node-koa/app/services/dashboard.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ export const getDashboard = async ({ usuario_id, inicio, fim }) => {
inicio = new Date(inicio).toISOString()
fim = new Date(fim).toISOString()
return {
receitaDespesaTotalPeriodo: await receitaDespesaTotalPeriodo({ usuario_id, inicio, fim }),
receitaDespesaEfetivadaPeriodo: await receitaDespesaEfetivadaPeriodo({ usuario_id, inicio, fim }),
despesaConta: await despesaConta({ usuario_id, inicio, fim }),
despesaCategoria: await despesaCategoria({ usuario_id, inicio, fim }),
receitaConta: await receitaConta({ usuario_id, inicio, fim }),
receitaCategoria: await receitaCategoria({ usuario_id, inicio, fim }),
composicaoDespesas: await composicaoDespesas({ usuario_id, inicio, fim }),
composicaoReceitas: await composicaoReceitas({ usuario_id, inicio, fim }),
receitaDespesaTotalPeriodo: unwrap(await receitaDespesaTotalPeriodo({ usuario_id, inicio, fim })),
receitaDespesaEfetivadaPeriodo: unwrap(await receitaDespesaEfetivadaPeriodo({ usuario_id, inicio, fim })),
despesaConta: unwrap(await despesaConta({ usuario_id, inicio, fim })),
despesaCategoria: unwrap(await despesaCategoria({ usuario_id, inicio, fim })),
receitaConta: unwrap(await receitaConta({ usuario_id, inicio, fim })),
receitaCategoria: unwrap(await receitaCategoria({ usuario_id, inicio, fim })),
composicaoDespesas: unwrap(await composicaoDespesas({ usuario_id, inicio, fim })),
composicaoReceitas: unwrap(await composicaoReceitas({ usuario_id, inicio, fim })),
saldos: {
// Saldos relativos ao período
anteriorGeral: 0,
Expand Down Expand Up @@ -143,7 +143,7 @@ async function composicaoDespesas({ usuario_id, inicio, fim }){
for await (const conta of contas) {
const conta_id = conta.id
conta.color = conta.cor
conta.data = await knex.raw(`
conta.data = unwrap(await knex.raw(`
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
Expand All @@ -153,7 +153,7 @@ async function composicaoDespesas({ usuario_id, inicio, fim }){
select descricao as label, cor as color, sum(valor) as value
from data_frame
group by descricao, cor
`,{conta_id, inicio, fim})
`,{conta_id, inicio, fim}))
}
return contas.filter(c => c.data.length)
}
Expand All @@ -163,7 +163,7 @@ async function composicaoReceitas({ usuario_id, inicio, fim }){
for await (const conta of contas) {
const conta_id = conta.id
conta.color = conta.cor
conta.data = await knex.raw(`
conta.data = unwrap(await knex.raw(`
with data_frame as (select categoria.descricao, categoria.cor, movimentacao.valor
from movimentacao
left join categoria on categoria.id = movimentacao.categoria_id
Expand All @@ -173,7 +173,17 @@ async function composicaoReceitas({ usuario_id, inicio, fim }){
select descricao as label, cor as color, sum(valor) as value
from data_frame
group by descricao, cor
`,{conta_id, inicio, fim})
`,{conta_id, inicio, fim}))
}
return contas.filter(c => c.data.length)
}

/**
* knex.raw behaves differently on sqlite and postgres
*
* @param result
*/
function unwrap(result) {
// XXX check env or knex cfg instead
return result.rows ?? result
}
32 changes: 18 additions & 14 deletions web-app-vue/src/components/dashboard/controles-dashboard.vue
Original file line number Diff line number Diff line change
Expand Up @@ -61,21 +61,21 @@
<h3>Composição de despesas</h3>
<div v-for="conta in composicaoDespesas" :key="conta.descricao">
<h4>{{ conta.descricao }}</h4>
<VueUiSparkstackbar
<VueUiSparkStackbar
:config="sparkStackBarConfig"
:dataset="conta.data"
></VueUiSparkstackbar>
></VueUiSparkStackbar>
</div>
<br />
<v-divider></v-divider>
<br />
<h3>Composição de receitas</h3>
<div v-for="conta in composicaoReceitas" :key="conta.descricao">
<h4>{{ conta.descricao }}</h4>
<VueUiSparkstackbar
<VueUiSparkStackbar
:config="sparkStackBarConfig"
:dataset="conta.data"
></VueUiSparkstackbar>
></VueUiSparkStackbar>
</div>
</v-expansion-panel-text>
</v-expansion-panel>
Expand Down Expand Up @@ -165,7 +165,7 @@
<script setup>
import { endOfMonth, startOfMonth } from 'date-fns'
import { computed, onMounted, ref } from 'vue'
import { VueUiDonut, VueUiSparkbar, VueUiSparkstackbar, VueUiXy } from 'vue-data-ui'
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'
Expand All @@ -186,7 +186,7 @@ const dashboardState = useDashboardStore()
const receitaDespesaBarConfig = computed(() => {
const total =
dashboardState.store.dashboard?.receitaDespesaTotalPeriodo?.reduce((acc, e) => {
acc += e.value
acc += parseFloat(e.value)
return acc
}, 0) || 0
return {
Expand All @@ -206,47 +206,49 @@ const receitaDespesaTotalPeriodo = computed(() => {
return dashboardState.store.dashboard?.receitaDespesaTotalPeriodo?.map((r) => ({
...r,
name: r.label,
prefix: 'R$ '
prefix: 'R$ ',
value: parseFloat(r.value)
}))
})
const receitaDespesaEfetivadaPeriodo = computed(() => {
return dashboardState.store.dashboard?.receitaDespesaEfetivadaPeriodo?.map((r) => ({
...r,
name: r.label,
prefix: 'R$ '
prefix: 'R$ ',
value: parseFloat(r.value)
}))
})
const despesaConta = computed(() => {
return dashboardState.store.dashboard?.despesaConta?.map((r) => ({
...r,
name: `${r.label}`,
values: [r.value]
values: [parseFloat(r.value)]
}))
})
const despesaCategoria = computed(() => {
return dashboardState.store.dashboard?.despesaCategoria?.map((r) => ({
...r,
name: `${r.label}`,
values: [r.value]
values: [parseFloat(r.value)]
}))
})
const receitaConta = computed(() => {
return dashboardState.store.dashboard?.receitaConta?.map((r) => ({
...r,
name: `${r.label}`,
values: [r.value]
values: [parseFloat(r.value)]
}))
})
const receitaCategoria = computed(() => {
return dashboardState.store.dashboard?.receitaCategoria?.map((r) => ({
...r,
name: `${r.label}`,
values: [r.value]
values: [parseFloat(r.value)]
}))
})
Expand All @@ -256,7 +258,8 @@ const composicaoDespesas = computed(() => {
...g,
data: g.data.map((r) => ({
...r,
name: r.label
name: r.label,
value: parseFloat(r.value)
}))
}
})
Expand All @@ -268,7 +271,8 @@ const composicaoReceitas = computed(() => {
...g,
data: g.data.map((r) => ({
...r,
name: r.label
name: r.label,
value: parseFloat(r.value)
}))
}
})
Expand Down

0 comments on commit 8c5a395

Please sign in to comment.