boletahonorarios
Version:
Realizar boletas de honorarios de manera automática
181 lines (145 loc) • 5.76 kB
JavaScript
/* global $ */
const recursos = require('../recursos.json');
//iniciar sesión
const sendCredentials = (user,selectors) => {
$("#"+selectors.campoRut).val(user.rut);
$("#"+selectors.campoClave).val(user.password);
$("#"+selectors.botonIngresar).click();
};
//tipo retención
const gotToDestinatary = (selectors) => {
document.querySelector('input[value="'+selectors.radioTipoRetencion+'"]').checked = true;
document.getElementById(selectors.continuarRetencion).click();
};
//agrega jquery a la pagina
const addJquery = () =>{
script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js';
document.head.appendChild(script);
};
//completa formulario
const fillForm = (work, destinatary, zone, commune, selectors) => {
zone = zone || null;
commune = commune || null;
fecha= destinatary.fecha.split('-');
day= fecha[0];
month= fecha[1];
year= fecha[2];
$('select[name='+selectors.diaBoleta+']').val(day);
$('select[name='+selectors.diaBoleta+']').change();
$('select[name='+selectors.mesBoleta+']').val(month);
$('select[name='+selectors.mesBoleta+']').change();
$('select[name='+selectors.yearBoleta+']').val(year);
$('select[name='+selectors.yearBoleta+']').change();
$('#'+selectors.valorPrestacion).val(work.value);
$('#'+selectors.prestacion).val(work.description);
$('input[name='+selectors.rutDestin+']').val(destinatary.rut);
$('input[name='+selectors.dvDestin+']').val(destinatary.dv);
$('input[name='+selectors.nombreDestin+']').val(destinatary.name);
$('input[name='+selectors.domicilioDestin+']').val(destinatary.address);
$('select[name='+selectors.regionDestin+']').val(zone);
$('select[name='+selectors.regionDestin+']').change();
$('select[name='+selectors.comunaDestin+']').val(commune);
$('select[name='+selectors.comunaDestin+']').change()
};
//confirma datos y crea preview boleta
const createPreview = (selectors) => {
$('#'+selectors.confirmarDatos).click();
};
//confirma emision boleta
const confirm = (selectors) => {
document.querySelector('input[name="'+selectors.confirmarEmision+'"]').click();
};
//seleccionar enviar boleta por email
const sendEmail = (selectors) => {
document.querySelector('#'+selectors.enviarEmail).click();
};
//confirmar emision envio email con boleta
const confirmSendEmail = (destinatary,selectors) => {
$('input[name="'+selectors.campoCorreo+'"]').val(destinatary.email);
$('#'+selectors.confirmarEnvioCorreo).click();
};
//salir
const exit = (selectors) => {
$('#'+selectors.salir).click();
};
//le da tiempo a las ejecuciones
function delay(time) {
return new Promise(function(resolve) {
setTimeout(resolve, time)
});
};
//todo
function progress(num, totalaction){
const perceten= 100/totalaction;
let progress= num*perceten || 0;
console.log('Progreso: '+progress+'%');
};
const hacerboleta = (async (work, destinatary, zone, commune, selectors, loginUri,user) => {
//iniciar puppeteer
var result = new Object();
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
try{
await page.goto(loginUri);
await page.waitForSelector('#'+selectors.botonIngresar);
await delay(500);
await page.evaluate(sendCredentials, user, selectors);
await delay(500);
await page.waitForSelector('#'+selectors.continuarRetencion);
await page.evaluate(gotToDestinatary, selectors);
await delay(500);
await page.waitForSelector('#'+selectors.confirmarDatos);
await page.evaluate(addJquery);
await delay(500);
await page.evaluate(fillForm, work, destinatary, zone, commune, selectors);
await delay(1000);
await page.evaluate(createPreview, selectors);
await delay(500);
await page.waitForSelector('input[name="'+selectors.confirmarEmision+'"]');
await delay(1500);
await page.evaluate(confirm,selectors);
await delay(1500);
await page.screenshot({
path: 'ultimaBoleta.png'
});
await page.waitForSelector('#'+selectors.enviarEmail);
await delay(3000);
await page.evaluate(sendEmail,selectors);
await page.waitForSelector('#'+selectors.confirmarEnvioCorreo);
await delay(3000);
await page.evaluate(confirmSendEmail,destinatary,selectors);
await delay(3000);
await page.evaluate(exit,selectors);
var result={
ok:true,
msj: 'Boleta Emitida'
}
await browser.close();
return result
} catch (e){
await page.screenshot({
path: 'error.png'
});
var result={
ok:false,
msj: 'Ha ocurrido un error: '+ e
};
await browser.close();
return result
}
});
//todo función boleta honorarios para agente normal
const emitirBoleta = async (work, destinatary, zone, commune, selectors, loginUri,user) => {
return new Promise(function(resolve) {
const emite = hacerboleta(work, destinatary, zone, commune, selectors, loginUri,user)
console.log(emite)
return resolve(emite)
});
};
module.exports = {
emitirBoleta: emitirBoleta,
recursos: recursos
};