-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
107 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,41 @@ | ||
import { | ||
delRecorrencia, | ||
findRecorrencia, | ||
findRecorrencia, geraLancamentos, | ||
insertRecorrencia, | ||
listRecorrencia, | ||
updateRecorrencia | ||
} from "../services/index.mjs"; | ||
} from '../services/index.mjs' | ||
|
||
export const listRecorrenciaRequest = async ctx => { | ||
const {usuario_id} = ctx.request.params; | ||
const {q = "", limit = 10, offset = 0} = ctx.request.query; | ||
ctx.body = await listRecorrencia({usuario_id, q, limit, offset}); | ||
}; | ||
const { usuario_id } = ctx.request.params | ||
const { q = '', limit = 10, offset = 0 } = ctx.request.query | ||
ctx.body = await listRecorrencia({ usuario_id, q, limit, offset }) | ||
} | ||
|
||
export const insertRecorrenciaRequest = async ctx => { | ||
const {usuario_id} = ctx.request.params; | ||
const recorrencia = ctx.request.body; | ||
ctx.body = await insertRecorrencia({usuario_id, recorrencia}) | ||
const { usuario_id } = ctx.request.params | ||
const recorrencia = ctx.request.body | ||
ctx.body = await insertRecorrencia({ usuario_id, recorrencia }) | ||
} | ||
|
||
export const findRecorrenciaRequest = async ctx => { | ||
const {usuario_id, id} = ctx.request.params; | ||
ctx.body = await findRecorrencia({usuario_id, id}) | ||
const { usuario_id, id } = ctx.request.params | ||
ctx.body = await findRecorrencia({ usuario_id, id }) | ||
} | ||
|
||
export const updateRecorrenciaRequest = async ctx => { | ||
const {usuario_id, id} = ctx.request.params; | ||
const recorrencia = ctx.request.body; | ||
ctx.body = await updateRecorrencia({usuario_id, id, recorrencia}) | ||
const { usuario_id, id } = ctx.request.params | ||
const recorrencia = ctx.request.body | ||
ctx.body = await updateRecorrencia({ usuario_id, id, recorrencia }) | ||
} | ||
|
||
export const delRecorrenciaRequest = async ctx => { | ||
const {usuario_id, id} = ctx.request.params; | ||
ctx.body = await delRecorrencia({usuario_id, id}) | ||
const { usuario_id, id } = ctx.request.params | ||
ctx.body = await delRecorrencia({ usuario_id, id }) | ||
} | ||
|
||
export const geraLancamentosRequest = async ctx => { | ||
const { usuario_id, id } = ctx.request.params | ||
const result = await geraLancamentos({ usuario_id, id }) | ||
ctx.body = result | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,30 +1,65 @@ | ||
import {knex} from "../config/db/index.mjs"; | ||
import { knex } from '../config/db/index.mjs' | ||
import { addMonths, differenceInDays, differenceInMonths, differenceInYears } from 'date-fns' | ||
|
||
export const listRecorrencia = ({usuario_id = -1, q = "", limit = 10, offset = 0}) => { | ||
return knex("recorrencia") | ||
.where({usuario_id}) | ||
.andWhereLike("descricao", `%${q}%`) | ||
export const listRecorrencia = ({ usuario_id = -1, q = '', limit = 10, offset = 0 }) => { | ||
return knex('recorrencia') | ||
.whereIn('conta_id', knex('conta').select('id').where({ usuario_id })) | ||
.andWhereLike('descricao', `%${q}%`) | ||
.offset(offset) | ||
.limit(limit); | ||
}; | ||
.limit(limit) | ||
} | ||
|
||
export const findRecorrencia = ({usuario_id = -1, id = -1}) => { | ||
return knex("recorrencia") | ||
.where({usuario_id, id}) | ||
export const findRecorrencia = ({ id = -1 }) => { | ||
return knex('recorrencia') | ||
.where({ id }) | ||
.first() | ||
} | ||
|
||
export const insertRecorrencia = ({usuario_id, recorrencia}) => { | ||
recorrencia.usuario_id = usuario_id | ||
return knex("recorrencia").insert(recorrencia, ["id"]) | ||
export const insertRecorrencia = ({ recorrencia }) => { | ||
return knex('recorrencia').insert(recorrencia, ['id']) | ||
} | ||
|
||
export const updateRecorrencia = ({ usuario_id, id, recorrencia }) => { | ||
recorrencia.id = id | ||
return knex('recorrencia').update(recorrencia).where({ id }) | ||
} | ||
|
||
export const delRecorrencia = ({ id }) => { | ||
return knex('recorrencia').del().where({ id }) | ||
} | ||
|
||
export const geraLancamentos = async ({ usuario_id, id }) => { | ||
const recorrencia = await findRecorrencia({ usuario_id, id }) | ||
if (!recorrencia) throw new Error('recorrencia não encontrada!') | ||
await limparParcelas(recorrencia) | ||
const numParcelas = calculaParcelas(recorrencia) | ||
const lancamentos = [] | ||
for (let i = 0; i < numParcelas; i++) { | ||
lancamentos.push({ | ||
descricao: `${recorrencia.descricao} (${i + 1}/${numParcelas})`, | ||
categoria_id: recorrencia.categoria_id, | ||
recorrencia_id: recorrencia.id, | ||
conta_id: recorrencia.conta_id, | ||
tipo_movimentacao_id: recorrencia.tipo_movimentacao_id, | ||
vencimento: addMonths(recorrencia.inicial, i).toISOString(), | ||
valor: recorrencia.valorParcela | ||
}) | ||
} | ||
const result = await knex('movimentacao').insert(lancamentos) | ||
return { success: true } | ||
} | ||
|
||
export const updateRecorrencia = ({usuario_id, id, recorrencia}) => { | ||
recorrencia.usuario_id = usuario_id; | ||
recorrencia.id = id; | ||
return knex("recorrencia").update(recorrencia).where({usuario_id, id}) | ||
const limparParcelas = async (recorrencia) => { | ||
return await knex('movimentacao').del().where({ recorrencia_id: recorrencia.id }) | ||
} | ||
|
||
export const delRecorrencia = ({usuario_id, id}) => { | ||
return knex("recorrencia").del().where({usuario_id, id}) | ||
const calculaParcelas = ({ tipo_recorrencia_id, inicial, final }) => { | ||
switch (tipo_recorrencia_id) { | ||
case 1: | ||
return 1 + differenceInMonths(final, inicial) | ||
case 2: | ||
return 1 + differenceInYears(final, inicial) | ||
default: | ||
return 1 + differenceInDays(final, inicial) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters