sales.js 6.68 KB
"use strict";

var json2csv = require('json2csv');

var config;
var db;

function init(options) {
    config = options.config;
    db = options.db;
}

function _getLastHoursSalesPerChipInfo(hour, cb) {
    let dbConnection = db.connection();
    if (!dbConnection) {
        cb("db is not connected");
        return;
    }

    let query = "select CHIP_INFO, COUNT(1) as TRX, sum(PRICE) as AMOUNT, to_char(max(TIME_START), 'YYYY-MM-DD HH24:MI:SS') as LAST_TS from T_TRANS where TIME_START >= sysdate - :hour / 24 and CHIP_INFO is not null and (TRANS_STAT = '200' or TRANS_STAT = '1200') group by CHIP_INFO order by CHIP_INFO asc";
    dbConnection.execute(query, [hour], function(err, res) {
        if (err) {
            cb(err, null);
            return;
        }

        let retval = db.createResultObject(res);

        if (retval && retval.length > 0) {
            cb(null, retval);
        }
        else {
            cb(null, null);
        }
    });
}

function getLastHoursSalesPerChipInfo(req, res, next) {
    let hour = req.params.hour;
    if (!hour) {
        hour = 1;
    }

    _getLastHoursSalesPerChipInfo(hour, function(err, result) {
        if (err) {
            res.send(err.message);
            return;
        }

        if (req.query.format == 'csv') {
            let fields = ['CHIP_INFO', 'TRX', 'AMOUNT', 'LAST_TS']
            let csv = json2csv({data: result, fields: fields});

            res.type('text');
            res.end(csv);
        }
        else if (req.query.format == 'html') {
            let fields = [
                {
                    title: 'CHIP_INFO',
                    isBold: true
                },
                {
                    title: 'TRX',
                    isNumber: true
                },
                {
                    title: 'AMOUNT',
                    isNumber: true
                },
                {
                    title: 'LAST_TS'
                }
            ];

            res.render(
                'table.html',
                {
                    title: 'Sales per gateway in ' + hour + ' hour(s)',
                    fields: fields,
                    rows: result
                }
            );

        } else {
            res.json(result);
        }
    });
}

function _getLastHoursSalesPerProduct(hour, cb) {
    let dbConnection = db.connection();
    if (!dbConnection) {
        cb("db is not connected");
        return;
    }

    let query = "select NOM as PRODUCT, COUNT(1) as TRX, sum(PRICE) as AMOUNT, to_char(max(TIME_START), 'YYYY-MM-DD HH24:MI:SS') as LAST_TS from T_TRANS where TIME_START >= sysdate - :hour / 24 and (TRANS_STAT = '200' or TRANS_STAT = '1200') group by NOM order by NOM asc";
    dbConnection.execute(query, [hour], function(err, res) {
        if (err) {
            cb(err, null);
            return;
        }

        let retval = db.createResultObject(res);

        if (retval && retval.length > 0) {
            cb(null, retval);
        }
        else {
            cb(null, null);
        }
    });
}

function getLastHoursSalesPerProduct(req, res, next) {
    let hour = req.params.hour;
    if (!hour) {
        hour = 1;
    }

    _getLastHoursSalesPerProduct(hour, function(err, result) {
        if (err) {
            res.send(err.message);
            return;
        }

        if (req.query.format == 'csv') {
            let fields = ['PRODUCT', 'TRX', 'AMOUNT', 'LAST_TS']
            let csv = json2csv({data: result, fields: fields});

            res.type('text');
            res.end(csv);

        }
        else if (req.query.format == 'html') {

            let fields = [
                {
                    title: 'PRODUCT',
                    isBold: true
                },
                {
                    title: 'TRX',
                    isNumber: true
                },
                {
                    title: 'AMOUNT',
                    isNumber: true
                },
                {
                    title: 'LAST_TS'
                }
            ];

            res.render(
                'table.html',
                {
                    title: 'Sales per product in ' + hour + ' hour(s)',
                    fields: fields,
                    rows: result
                }
            );

        } else {
            res.json(result);
        }
    });
}

function _getLastHoursSalesPerCustomer(hour, cb) {
    let dbConnection = db.connection();
    if (!dbConnection) {
        cb("db is not connected");
        return;
    }

    let query = "select T_STORE_USER.FULL_NAME as CUSTOMER, COUNT(1) as TRX, sum(PRICE) as AMOUNT, to_char(max(TIME_START), 'YYYY-MM-DD HH24:MI:SS') as LAST_TS from T_TRANS left join T_STORE_USER ON T_STORE_USER.USER_NAME = T_TRANS.USER_NAME where TIME_START >= sysdate - :hour / 24 and (TRANS_STAT = '200' or TRANS_STAT = '1200') group by T_STORE_USER.FULL_NAME order by T_STORE_USER.FULL_NAME asc";
    dbConnection.execute(query, [hour], function(err, res) {
        if (err) {
            cb(err, null);
            return;
        }

        let retval = db.createResultObject(res);

        if (retval && retval.length > 0) {
            cb(null, retval);
        }
        else {
            cb(null, null);
        }
    });
}

function getLastHoursSalesPerCustomer(req, res, next) {
    let hour = req.params.hour;
    if (!hour) {
        hour = 1;
    }

    _getLastHoursSalesPerCustomer(hour, function(err, result) {
        if (err) {
            res.send(err.message);
            return;
        }

        if (req.query.format == 'csv') {
            let fields = ['CUSTOMER', 'TRX', 'AMOUNT', 'LAST_TS']
            let csv = json2csv({data: result, fields: fields});

            res.type('text');
            res.end(csv);

        }
        else if (req.query.format == 'html') {

            let fields = [
                {
                    title: 'CUSTOMER',
                    isBold: true
                },
                {
                    title: 'TRX',
                    isNumber: true
                },
                {
                    title: 'AMOUNT',
                    isNumber: true
                },
                {
                    title: 'LAST_TS'
                }
            ];

            res.render(
                'table.html',
                {
                    title: 'Sales per customer in ' + hour + ' hour(s)',
                    fields: fields,
                    rows: result
                }
            );

        } else {
            res.json(result);
        }
    });
}

exports.init = init;
exports.getLastHoursSalesPerChipInfo = getLastHoursSalesPerChipInfo;
exports.getLastHoursSalesPerProduct = getLastHoursSalesPerProduct;
exports.getLastHoursSalesPerCustomer = getLastHoursSalesPerCustomer;