const $ = require('jquery');
const api = require('../utils/api');
const utils = require('../utils');
const chart = require('./chart_and_messages');
const list_row = require('../ui/list_row');
const ui = require('../ui/common');
const modal = require('../utils/modal');
api.on_submit("/budget/withdrawal", [
$("#create-withdrawal"), $("#edit-withdrawal")
], {
value: x => -Math.abs(utils.round(parseFloat(x), 2)),
date: x => parseInt(x),
month: x => parseInt(x)
}, [
["name", "Recurring withdrawal must have a name"],
["value", "Withdrawal value must be provided"], // value=0 will be accounted for here
["value", "Withdrawal value must be a number", value => !isNaN(value)],
["date", "Invalid date", utils.validate.date],
["month", "Invalid month", utils.validate.month]
], async function() {
modal.close();
await chart.refresh();
await populate_withdrawals_table();
});
$("#delete-withdrawal").on("click", async function() {
const id = $("#edit-withdrawal").find('[name="id"]').val();
await api.delete('/budget/withdrawal/' + id);
ui.show_banner({
message: `Withdrawal ${id} deleted`
});
modal.close();
await chart.refresh();
await populate_withdrawals_table();
});
const month_fields = ui.get_inputs(["#create-withdrawal", "#edit-withdrawal"], "month").map(ui.generate_month_options);
const date_fields = ui.get_inputs(["#create-withdrawal", "#edit-withdrawal"], "date");
date_fields.forEach(function($date_field) {
month_fields.forEach(function($month_field) {
$month_field.on('click', function() {
ui.generate_date_options($date_field, $month_field.val());
});
});
ui.generate_date_options($date_field);
});
populate_withdrawals_table();
async function populate_withdrawals_table() {
$("#withdrawals-list").empty();
const {
withdrawals
} = await api.get("/budget/withdrawals");
for (const withdrawal of withdrawals) {
list_row.create("withdrawals", {
title: `${withdrawal.name}:`,
text: `$${Math.abs(withdrawal.value)} ${utils.get_recurring_text(withdrawal.month)} ${utils.format_date(withdrawal.date)}`
}, function() {
ui.prefill_inputs("#edit-withdrawal", withdrawal);
modal.create('edit-withdrawal-modal');
});
}
}