Advertisement
Guest User

Untitled

a guest
Sep 26th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let Pool = require('pg').Pool;
  2. let pool = new Pool({
  3.   host: '127.0.0.1',
  4.   user: process.env.DB_USER,
  5.   password: process.env.DB_PWD,
  6.   database: 'savemany'
  7. });
  8. let request = require('request');
  9. let Client = require('node-rest-client').Client;
  10.  
  11. let client = new Client();
  12.  
  13. module.exports.model = {
  14.   write: (type, description, amount, billname, comment, transfer, tags) => {
  15.  
  16.     // let transferBill = transfer.split(',')[1];
  17.     // let billId = parseInt(billname.split(',')[0]);
  18.     // let sp = transferBill;
  19.     // let transferType = transfer.split(',')[2];
  20.  
  21.     let obj = {
  22.       'type': type,
  23.       'description': description,
  24.       'amount': amount,
  25.       'billname': billname.split(',')[1],
  26.       'comment': comment,
  27.       'transfer': transfer.split(',')[1],
  28.       'tags': tags,
  29.       'billid': parseInt(billname.split(',')[0])
  30.     };
  31.  
  32.     writeCommonOperation(obj);
  33.  
  34.     switch (type) {
  35.       case 'income':
  36.         writeIncome(obj.amount, obj.billname);
  37.  
  38.         break;
  39.  
  40.       case 'expenses':
  41.         writeExpenses(obj.amount, obj.billname);
  42.  
  43.         break;
  44.  
  45.       case 'transfer':
  46.         writeTransfer(obj.type, obj.transfer, obj.amount, obj.billname);
  47.  
  48.         break;
  49.  
  50.       default:
  51.         break;
  52.     }
  53.  
  54.     amount = parseInt(amount);
  55.  
  56.     // if (sp)
  57.     //   tags = tags + ',' + `${billName} → ${transferBill}`;
  58.     // else
  59.     //   tags = tags + ',' + `${billName}`;
  60.   },
  61.   read: (billid) => {
  62.     return new Promise((resolve, reject) => {
  63.       pool.query(`
  64.                 SELECT *
  65.                 FROM transactions
  66.                 WHERE billid=$1`,
  67.         [billid], (err, result) => {
  68.  
  69.           if (err) reject(err);
  70.  
  71.           resolve(result.rows);
  72.         });
  73.     })
  74.  
  75.   },
  76.   delete: (transcastid, cb) => {
  77.     pool.query(`
  78.             DELETE FROM transactions
  79.             WHERE id=$1`,
  80.       [transcastid], (err, result) => {
  81.  
  82.         if (err) throw err;
  83.         cb();
  84.       });
  85.   },
  86.   all: (username, cb) => {
  87.     pool.query(`
  88.             SELECT *
  89.             FROM bills
  90.             INNER JOIN transactions
  91.             ON transactions.billid = bills.id
  92.             WHERE bills.username = $1          
  93.             ORDER BY transactions._date DESC
  94.             `, [username], (err, result) => {
  95.  
  96.       if (err) throw err;
  97.  
  98.       cb(result.rows);
  99.     });
  100.   },
  101.   today: (username, cb) => {
  102.     pool.query(`
  103.             SELECT *
  104.             FROM bills
  105.             INNER JOIN transactions
  106.             ON transactions.billid = bills.id
  107.             WHERE bills.username = $1          
  108.             AND _date >= now()::date + interval '1h'
  109.             ORDER BY transactions._date DESC`,
  110.       [username], (err, result) => {
  111.  
  112.         if (err) throw err;
  113.  
  114.         cb(result.rows);
  115.       });
  116.   },
  117.   reset: (username, cb) => {
  118.     pool.query(`
  119.       DELETE FROM transactions USING bills
  120.       WHERE bills.id = transactions.billid
  121.       AND bills.username=$1`,
  122.       [username], (err, result) => {
  123.         if (err) throw err;
  124.  
  125.         // cb();
  126.       });
  127.   }
  128. };
  129.  
  130. let getValute = () => {
  131.   let cbrFinance = 'http://www.cbr.ru/scripts/XML_daily.asp';
  132.  
  133.   return new Promise((resolve, reject) => {
  134.     client.get(cbrFinance, (data, response) => {
  135.       debugger;
  136.       resolve(data);
  137.     });
  138.   });
  139. };
  140.  
  141. let writeIncome = (amount, billName) => {
  142.   pool.query(`
  143.     UPDATE bills
  144.     SET balance=balance+$1
  145.     WHERE name=$2`,
  146.     [amount, billName], (error, result, body) => {
  147.  
  148.       if (error) throw error;
  149.     }
  150.   );
  151. };
  152.  
  153. let writeExpenses = (amount, billName) => {
  154.   pool.query(`
  155.     UPDATE bills
  156.     SET balance=balance-$1
  157.     WHERE name=$2`,
  158.     [amount, billName], (error, result, body) => {
  159.  
  160.     if (error) throw error;
  161.     }
  162.   );
  163. };
  164.  
  165. let writeTransfer = (...args) => {
  166.   if (parseInt(args[1]) === 840) {
  167.     getValute().then((valute) => {
  168.       let valtueArr = valute.ValCurs.Valute;
  169.       let EUR;
  170.       let USD = valtueArr.filter((obj) => {
  171.         return obj.NumCode === 840;
  172.       });
  173.  
  174.       _amount = args[2] / parseInt(USD[0].Value);
  175.       pool.query(`
  176.                         UPDATE bills
  177.                         SET balance=balance+$1
  178.                         WHERE name=$2`,
  179.         [Math.ceil(_amount), transferBill], (error, result, body) => {
  180.  
  181.           if (error) throw error;
  182.         });
  183.  
  184.       pool.query(`
  185.                         UPDATE bills
  186.                         SET balance=balance-$1
  187.                         WHERE name=$2`,
  188.         [args[2], args[3]], (error, result, body) => {
  189.           // debugger
  190.           if (error) throw error;
  191.         });
  192.     });
  193.   } else {
  194.     pool.query(`
  195.           UPDATE bills
  196.           SET balance=balance+$1
  197.           WHERE name=$2`,
  198.       [args[2], args[1]], (error, result, body) => {
  199.         // debugger
  200.         if (error) throw error;
  201.       });
  202.  
  203.     pool.query(`
  204.           UPDATE bills
  205.           SET balance=balance-$1
  206.           WHERE name=$2`,
  207.       [args[2], args[3]], (error, result, body) => {
  208.  
  209.         if (error) throw error;
  210.       });
  211.   }
  212. };
  213.  
  214. let writeCommonOperation = (obj) => {
  215.   let spTransfer = obj.transfer === undefined ? '' : obj.transfer.split(',')[1];
  216.  
  217.   if (obj.type === 'transfer')
  218.     tags = obj.tags + ',' + `${obj.billname} → ${obj.transfer}`;
  219.   else
  220.     tags = obj.tags + ',' + `${obj.billname}`;
  221.  
  222.   pool.query(`
  223.     INSERT INTO transactions
  224.     (description, type, amount, billname, comment, billid, tag, sp, _date)
  225.     VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)`,
  226.     [obj.description, obj.type, obj.amount, obj.billname, obj.comment,
  227.       obj.billid, tags, spTransfer, new Date()],
  228.     (err, result) => {
  229.  
  230.       if (err) throw new Error(err);
  231.     });
  232. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement