Commit 6a5e182c0535e229ca584cd50bec96211bdd8b5a

Authored by Adhidarma Hadiwinoto
1 parent 9fbadb4777
Exists in master

sales per customer

Showing 2 changed files with 84 additions and 0 deletions Side-by-side Diff

... ... @@ -54,4 +54,8 @@ app.get("/apikey/:apikey/sales/last-hour/per-chip-info/:hour", sales.getLastHour
54 54 app.get("/apikey/:apikey/sales/last-hour/per-product", sales.getLastHoursSalesPerProduct);
55 55 app.get("/apikey/:apikey/sales/last-hour/per-product/:hour", sales.getLastHoursSalesPerProduct);
56 56  
  57 +app.get("/apikey/:apikey/sales/last-hour/per-customer", sales.getLastHoursSalesPerCustomer);
  58 +app.get("/apikey/:apikey/sales/last-hour/per-customer/:hour", sales.getLastHoursSalesPerCustomer);
  59 +
  60 +
57 61 app.listen(config.listen_port);
... ... @@ -168,7 +168,87 @@ function getLastHoursSalesPerProduct(req, res, next) {
168 168 });
169 169 }
170 170  
  171 +function _getLastHoursSalesPerCustomer(hour, cb) {
  172 + let dbConnection = db.connection();
  173 + if (!dbConnection) {
  174 + cb("db is not connected");
  175 + return;
  176 + }
  177 +
  178 + 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";
  179 + dbConnection.execute(query, [hour], function(err, res) {
  180 + if (err) {
  181 + cb(err, null);
  182 + return;
  183 + }
  184 +
  185 + let retval = db.createResultObject(res);
  186 +
  187 + if (retval && retval.length > 0) {
  188 + cb(null, retval);
  189 + }
  190 + else {
  191 + cb(null, null);
  192 + }
  193 + });
  194 +}
  195 +
  196 +function getLastHoursSalesPerCustomer(req, res, next) {
  197 + let hour = req.params.hour;
  198 + if (!hour) {
  199 + hour = 1;
  200 + }
  201 +
  202 + _getLastHoursSalesPerCustomer(hour, function(err, result) {
  203 + if (err) {
  204 + res.send(err.message);
  205 + return;
  206 + }
  207 +
  208 + if (req.query.format == 'csv') {
  209 + let fields = ['CUSTOMER', 'TRX', 'AMOUNT', 'LAST_TS']
  210 + let csv = json2csv({data: result, fields: fields});
  211 +
  212 + res.type('text');
  213 + res.end(csv);
  214 +
  215 + }
  216 + else if (req.query.format == 'html') {
  217 +
  218 + let fields = [
  219 + {
  220 + title: 'CUSTOMER',
  221 + isBold: true
  222 + },
  223 + {
  224 + title: 'TRX',
  225 + isNumber: true
  226 + },
  227 + {
  228 + title: 'AMOUNT',
  229 + isNumber: true
  230 + },
  231 + {
  232 + title: 'LAST_TS'
  233 + }
  234 + ];
  235 +
  236 + res.render(
  237 + 'table.html',
  238 + {
  239 + title: 'Sales per customer in ' + hour + ' hour(s)',
  240 + fields: fields,
  241 + rows: result
  242 + }
  243 + );
  244 +
  245 + } else {
  246 + res.json(result);
  247 + }
  248 + });
  249 +}
171 250  
172 251 exports.init = init;
173 252 exports.getLastHoursSalesPerChipInfo = getLastHoursSalesPerChipInfo;
174 253 exports.getLastHoursSalesPerProduct = getLastHoursSalesPerProduct;
  254 +exports.getLastHoursSalesPerCustomer = getLastHoursSalesPerCustomer;