import { requestCallback, request } from '../lib/request' import { renderEuro, renderLabelWithSum } from '../lib/renderers' const endpoints = { list: '/api/saving_account', item: '/api/saving_account', } const getList = async (query, callback) => { return requestCallback(`${endpoints.list}?${new URLSearchParams(query)}`, {}, callback ?? (() => true)) } const getOne = async (query, callback) => { return request(`${endpoints.list}?${new URLSearchParams(query)}`, {}) .then((data) => data.rows[0] ?? null) .then(callback ?? (() => true)) } const write = async (endpoint, data, callback, callbackError) => { return requestCallback( endpoint, { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify(fixData(data)), }, callback ?? (() => true), ).catch(callbackError ?? (() => true)) } const create = async (data, callback, callbackError) => { return write(`${endpoints.item}`, fixData(data), callback, callbackError) } const update = async (data, callback, callbackError) => { return write(`${endpoints.item}/${data.id}`, data, callback, callbackError) } const remove = async (id, callback, callbackError) => { return requestCallback( `${endpoints.item}/${id}`, { method: 'DELETE', headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, }, callback ?? (() => true), ).catch(callbackError ?? (() => true)) } const fixData = (data) => { if (data.blocked_amount) { data.blocked_amount = parseFloat(data.blocked_amount) } else { data.blocked_amount = 0.0 } if (data.released_amount) { data.released_amount = parseFloat(data.released_amount) } else { data.released_amount = 0.0 } return data } const createForm = (item) => { if (!item) { item = { id: null, label: null, color: '#9eb1e7', rules: [], month_threshold: null, ignore_transactions: 0, } } const data = { ...item } return { data: data, error: null, fields: [ { label: 'Libellé', type: 'text', required: true, key: 'label', }, { label: 'Montant bloqué', type: 'number', key: 'blocked_amount', }, { label: 'Montant débloqué', type: 'number', key: 'released_amount', }, ], } } const getListFields = () => { return [ { key: 'label', label: 'Libellé', }, { key: 'blocked_amount', renderLabel: (rows) => renderLabelWithSum('Montant bloqué', rows, 'blocked_amount'), width: '200px', thClasses: ['text-end'], tdClasses: ['text-end'], render: (item) => renderEuro(item.blocked_amount), }, { key: 'released_amount', renderLabel: (rows) => renderLabelWithSum('Montant débloqué', rows, 'released_amount'), width: '200px', thClasses: ['text-end'], tdClasses: ['text-end'], render: (item) => renderEuro(item.released_amount), }, ] } export { endpoints, getList, getOne, create, update, remove, createForm, getListFields }