Advertisement
chava_vm

mysql-pdf

Apr 3rd, 2019
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const mysql = require("mysql");
  2. var pdf = require('html-pdf');
  3.  
  4. function connectDB(options){
  5.     return new Promise(function (resolve, reject){
  6.         const conn = mysql.createConnection(options);
  7.         conn.connect(function (err){
  8.             if(err){
  9.                 reject(err);
  10.             }
  11.             resolve(conn);
  12.         });
  13.     });
  14. }
  15.  
  16. function queryDB(conn, sql, data=null){
  17.     return new Promise(function (resolve, reject){
  18.         conn.query(sql, data, function(err, result){
  19.             if(err){
  20.                 reject(err);
  21.             }
  22.             resolve(result);
  23.         });
  24.     });
  25. }
  26.  
  27. function getAge(DOB) {
  28.     var today = new Date();
  29.     var birthDate = new Date(DOB);
  30.     var age = today.getFullYear() - birthDate.getFullYear();
  31.     var m = today.getMonth() - birthDate.getMonth();
  32.     if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {
  33.         age = age - 1;
  34.     }
  35.  
  36.     return age;
  37. }
  38.  
  39. async function program(empId){
  40.  
  41.     const conn = await connectDB({
  42.         host: "*.*.*.*",
  43.         user: "",
  44.         database: "",
  45.         password: ""
  46.     });
  47.  
  48.  
  49.     let sql=`select *
  50.              from employees
  51.              join dept_emp
  52.              on employees.emp_no = dept_emp.emp_no
  53.              join departments
  54.              on dept_emp.dept_no = departments.dept_no
  55.              where employees.emp_no=?;`;
  56.  
  57.     let params = [empId];
  58.     const [record] = await queryDB(conn, sql, params);
  59.  
  60.     if(!record){
  61.         res.status(400).send({
  62.             error: true,
  63.             message: "NO existe el empleado..."
  64.         });
  65.     }
  66.  
  67.     //Número
  68.     var numero = "Número de empleado: "+record.emp_no;
  69.  
  70.     //Nombre
  71.     var nombre = "Nombre: "+record.last_name+", "+record.first_name;
  72.  
  73.     //Titulos
  74.     var infoTitulos = "Títulos: <br>";
  75.     query = 'SELECT * FROM titles WHERE emp_no=?;';
  76.     const titulos = await queryDB(conn, query, params);
  77.  
  78.     titulos.forEach(titulo => {
  79.  
  80.         infoTitulos += "<br>"+titulo["title"]+"&nbsp;-&nbsp;Del "+titulo["from_date"].toISOString().slice(0,10)+"&nbsp;&nbsp;al "+titulo["to_date"].toISOString().slice(0,10);
  81.        
  82.     });
  83.  
  84.     //Departamento
  85.     var departamento = "Departamento: "+record.dept_name;
  86.    
  87.     //Edad
  88.     const age = getAge(record.birth_date);
  89.     var edad = "Edad: " + age + " años";
  90.  
  91.  
  92.     //Salarios
  93.     var infoSalario = "Salarios: <br>";
  94.     sql=`select * from salaries where emp_no=?;`;
  95.     const salarios = await queryDB(conn, sql, params);
  96.  
  97.     conn.end();
  98.  
  99.     if(!salarios){
  100.         res.status(400).send({
  101.             error: true,
  102.             message: "Nada en tabla salarios..."
  103.         });
  104.         return;
  105.     }
  106.  
  107.     salarios.forEach(sal => {
  108.         infoSalario += "<br>"+sal["from_date"].toISOString().slice(0,10)+"&nbsp;&nbsp;&nbsp;"+sal["to_date"].toISOString().slice(0,10)+"&nbsp;&nbsp;&nbsp;$"+sal["salary"], infoSalario;
  109.     });
  110.  
  111.     const min = salarios.reduce(function(p,c){
  112.         return p<c.salary?p:c.salary;
  113.     }, Infinity);
  114.    
  115.     const max = salarios.reduce(function(p,c){
  116.         return p>c.salary?p:c.salary;
  117.     }, 0);
  118.    
  119.     var numSalarios = "Count: "+salarios.length;
  120.     var minMax = "Min: $"+min+" \nMax: $"+max;
  121.  
  122.     var contenido = `
  123.     <h1>REPORTE DE EMPLEADO</h1>
  124.     <p>` + numero + `</p>
  125.     <hr>
  126.     <p>` + nombre + `</p>
  127.     <hr>
  128.     <p>` + infoTitulos + `</p>
  129.     <hr>
  130.     <p>` + departamento + `</p>
  131.     <hr>
  132.     <p>` + edad + `</p>
  133.     <hr>
  134.     <p>` + infoSalario + `</p>
  135.     <p>` + numSalarios + `</p>
  136.     <hr>
  137.     <p>` + minMax + `</p>
  138.     `;
  139.  
  140.     pdf.create(contenido).toFile('./reporte.pdf', function(err, res) {
  141.         if (err){
  142.             console.log(err);
  143.         } else {
  144.             console.log(res);
  145.         }
  146.     });
  147. }
  148.  
  149. const empId = process.argv[2];
  150. program(empId);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement