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/recurring_transaction', [
$("#create-income"), $("#edit-income")
], {
estimate_value: x => Math.abs(utils.round(parseFloat(x), 2)),
day: x => parseInt(x),
month: x => parseInt(x)
}, [
["name", "Recurring income must have a name"],
["estimate_value", "Income value must be provided"],
["estimate_value", "Income value must be a number", value => !isNaN(value)],
["estimate_value", "Income value must be greater than $0.00", value => value > 0],
["day", "Invalid day", utils.validate.day],
["month", "invalid month", utils.validate.month]
], async function () {
modal.close();
await chart.refresh();
await populate_incomes_table();
});
$("#delete-income").on("click", async function () {
const id = $("#edit-income").find('[name="id"]').val();
await api.delete('/budget/recurring_transaction/' + id);
ui.show_banner({
message: `Income ${id} deleted`
});
modal.close();
await chart.refresh();
await populate_incomes_table();
});
api.get("/budget/accounts").then(function ({
accounts
}) {
const payment_account_fields = ui.get_inputs(["#create-income", "#edit-income"], "payment_account");
for (const $payment_account_field of payment_account_fields) {
ui.generate_account_options($payment_account_field, accounts);
}
});
const month_fields = ui.get_inputs(["#create-income", "#edit-income"], "month").map(ui.generate_month_options);
const day_fields = ui.get_inputs(["#create-income", "#edit-income"], "day");
day_fields.forEach(function ($day_field) {
month_fields.forEach(function ($month_field) {
$month_field.on('click', function () {
ui.generate_day_options($day_field, $month_field.val());
});
});
ui.generate_day_options($day_field);
});
populate_incomes_table();
async function populate_incomes_table() {
$("#incomes-list").empty();
const {
incomes
} = await api.get("/budget/incomes");
for (const income of incomes) {
list_row.create("incomes", {
title: `${income.name}:`,
text: `$${income.estimate_value} ${utils.get_recurring_text(income.month)} ${utils.format_day(income.day)}`
}).on('click', function () {
ui.prefill_inputs("#edit-income", income);
modal.create('edit-income-modal');
});
}
}
populate_income_history_table();
async function populate_income_history_table() {
$("#income-history-list").empty();
const {
income_history
} = await api.get("/budget/incomes/history");
for (const income of income_history) {
list_row.create("income-history", {
title: `${income.name}:`,
text: `$${income.value.toFixed(2)} on ${income.date}`
}).on('click', function () {
ui.prefill_inputs("#edit-income-history", income);
modal.create('edit-income-history-modal');
});
}
}