evoleasing-account/actions/calendarActions.js
2021-12-06 15:48:05 +03:00

87 lines
2.2 KiB
JavaScript

import axios from 'axios';
import { Cookies } from 'react-cookie';
import Router from 'next/router';
import moment from 'moment';
import { nSQL } from "@nano-sql/core";
import { concatSeries } from "async";
import * as actionTypes from '../constants/actionTypes';
import * as currentState from '../reducers/initialState';
if(process.browser)
{
FormData.prototype.appendObject = function(obj, namespace)
{
let keyName;
for (var key in obj)
{
if (obj.hasOwnProperty(key))
{
keyName = [namespace, '[', key, ']'].join('');
this.append(keyName, obj[key]);
}
}
};
}
export const getCalendar = ({ dispatch, date_from, date_to }) =>
{
console.log("getCalendar", date_from, date_to);
return new Promise((resolve, reject) =>
{
axios.post(`${ process.env.NEXT_PUBLIC_SELF_API_HOST }/api/calendar`, {},
{
withCredentials: true,
})
.then((response) =>
{
const periods = {};
concatSeries(response.data, (contract, callback) =>
{
let payments = [];
for(let i in contract.payments)
{
const mdate = moment(contract.payments[i].date, "DD-MM-YYYY");
periods[mdate.format('YYYYMM')] = mdate.format('YYYYMM');
payments.push({ ...contract.payments[i], ...{ contract: { number: contract.number, date: contract.date }, date: mdate.format("YYYY-MM-DD"), js_date: mdate.toDate() } });
}
let query = nSQL(payments)
.query("select")
.where([ [ "js_date", ">=", date_from ], "AND", [ "js_date", "<=", date_to ] ])
.orderBy("number", "asc")
.exec().then((rows) =>
{
callback(null, rows);
});
}, (error, result) =>
{
let calendar = [];
nSQL(result)
.query("select", ["date", "SUM(total_amount) AS total"])
.groupBy(["date ASC"])
.exec().then(async (grouped_rows) =>
{
for(let i in grouped_rows)
{
const payments = await nSQL(result).query("select").where([[ "date", "=", grouped_rows[i].date ]]).exec();
calendar.push({ ...grouped_rows[i], ...{ payments: payments }});
}
console.log("TOTAL calendar", calendar);
dispatch({ type: actionTypes.CALENDAR, data: { payments: calendar, periods: periods } });
});
});
resolve();
})
.catch((error) =>
{
console.error(error);
reject();
});
});
}