NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript==
// @name Gerador de Relatorios
// @namespace http*://itown-saraiva.cloudapp.net/*
// @version 1.0.274
// @description Gerador de relatorios para ITOWN
// @copyright 2014+, Wesley Nascimento
// @author Wesley Nascimento
// ==/UserScript==
/* REGEXP */
/* Injeção no HTML */
$(document).ready( function(){
//Cria modulos
var modulos = [];
modulos.push( new RelatorioDomingos() );
for(var m in modulos ){
m = modulos[m];
m.start();
}
});
/* Objetos de modulos */
function RelatorioDomingos(){
var $html, $progress;
var workPage = 'ListClosed';
var incrementer = 0;
var report = {};
//Constuctor
(function(){
if( hasSession() ){
report = JSON.parse( localStorage.getItem('session_report') );
}
})();
function start(){
var loc = location.href;
if( loc.indexOf( workPage ) > -1 ){
bind();
execute();
}
}
//Adiciona Botão de gerar relatorio
function bind(){
var $body = $('body');
var $button = $('<input type="button" value="Gerar Relatorio">');
$button.on('click', function(){
execute( true );
});
$html = $('<div style="border: 1px solid #000; position: fixed; width: 300px; top: 100px; right: 100px; display: none; background: #fff; text-align: center; padding: 5px;"></div>');
$progress = $('<div><span></span></div>');
$html.append( $progress );
$body.find('#main form p:eq(-1)').append( $button );
$body.append( $html );
}
function execute( newSession ){
//Se existe uma sessão iniciada,
//e não estiver configurado para iniciar uma nova Session
//Continua apartir da ultima Session
if( hasSession() ){
logic();
}
//Deleta a session anterior caso exista e começa denovo.
else if ( newSession ){
cleanSession();
logic();
}
}
//Executa a Logica do negocio
function logic(){
$html.show();
report.status = true;
var $scroller = $('div.scroller tr');
var max = $scroller.length - 1;
$scroller.each(function(index, value){
if( index === 0 ){
return true;
}
var $this = $( this );
var $os_id = $this.find("td:eq(0)");
$os_id.css("color", "rgb(243, 85, 3)");
var os_number = $os_id.text().match(/\d+/)[0];
var details_url = '/ServiceOrder/Details';
$.post( details_url, { id : os_number }, function( html ){
parseDetails( $(html) , max);
});
});
}
function parseDetails( $html, max ){
++incrementer;
$progress.html(incrementer + "/" + max);
var $table = $html.find('table:eq(0)');
var first_date_text = $table.find('tr:eq(1) td:eq(0)').text();
var last_date_text = $table.find('tr:eq(-1) td:eq(0)').text();
var first_date_date = mileToDate( stringToMile( first_date_text ) );
var last_date_date = mileToDate( stringToMile( last_date_text ) );
if( first_date_date.getDay() === 0 ){
var day = first_date_date.getDate() + "/" + (first_date_date.getMonth() + 1);
incrementField(day, 'open');
}
if( last_date_date.getDay() === 0 ){
var day = last_date_date.getDate() + "/" + (last_date_date.getMonth() + 1);
incrementField(day, 'closed')
var $table_quotation = $html.find('table:eq(1)');
//Se foi fechado no domingo pega o valor recebido
if( $table_quotation.find('tr').length > 1 ){
var value = $table_quotation.find('tr:eq(-1) td:eq(4)').text();
var money = Number( value.match(/\d+/)[0] );
incrementField(day, 'oow', money);
}
}
//Se for o ultimo item, salva o report
if(incrementer == max ){
var result = appendToSession( report );
showNext( result );
}
}
function showNext( result ){
var $skip = $('body').find('.PagedList-skipToNext');
if( !$skip.hasClass('disabled') ){
var url = $skip.find('a').attr("href");
if( typeof url !== "undefined")
location.href = url;
} else {
//Mostrar resultado antes de limpar
var open = 0,
closed = 0,
oow = 0,
length = 0;
var html = '';
html += '<table width="100%">';
html += '<tbody>';
html += '<tr><th>Ref</th><th>Abertas</th><th>Fechadas</th><th>OOW</th></tr>';
for(var day in result){
if( day == "status" ) continue;
var row = result[day];
html += '<tr><td>'+ day +'</td><td>' + row.open + '</td><td>' + row.closed + '</td><td>' + row.oow.formatMoney(2, ',', '.') + '</td></tr>';
open += row.open;
closed += row.closed;
oow += row.oow;
length++;
}
html += '<tr><td>Total</td><td>' + open + '</td><td>' + closed + '</td><td>' + oow.formatMoney(2, ',', '.') + '</td></tr>';
html += '<tr><td>Média</td><td colspan="3">' + (oow / length).formatMoney(2, ',', '.') + '</td></tr>';
html += '</tbody>';
html += '</table>';
$progress.html('Relatório');
$html.append( html );
cleanSession();
}
}
function incrementField(parent, field, val){
if ( typeof report[parent] == "undefined" ){
report[parent] = {
open : 0,
closed : 0,
oow : 0,
};
}
if( typeof val !== "undefined" ){
report[parent][field] += val ;
} else {
report[parent][field]++;
}
}
//Verifica se já existe uma Session
function hasSession(){
var session_report = localStorage.getItem('session_report');
if( session_report === null ){
return false;
}
try{
var json = JSON.parse( session_report );
} catch ( e ){
return false;
}
if( typeof json.status == "undefined"){
return false;
}
return json.status;
}
//Adiciona informações a Session Atual
function appendToSession( json ){
localStorage.setItem("session_report", JSON.stringify( json ) );
return json;
}
//Limpa a Session do navegador
function cleanSession(){
localStorage.removeItem("session_report");
}
//Converte um numero de milesegundos para um objeto Date
function mileToDate( mile ){
return new Date( mile );
}
//Converte um texto no formate de "dd/mm/YYYY H:i:s" em um numero de milesegundos
function stringToMile(str){
str = str.replace(/ /g, '');
var date = str.split(" ")[0];
var time = str.split(" ")[1];
var day = date.split("/")[0],
month = date.split("/")[1] - 1, //Fiz month number
year = date.split("/")[2];
var hours = time.split(":")[0],
minutes = time.split(":")[1],
seconds = time.split(":")[2];
return new Date(year, month, day, hours, minutes, seconds, 0).getTime();
}
//Methodos publicos
return {
start : start
}
}
Number.prototype.formatMoney = function(decPlaces, thouSeparator, decSeparator) {
var n = this,
decPlaces = isNaN(decPlaces = Math.abs(decPlaces)) ? 2 : decPlaces,
decSeparator = decSeparator == undefined ? "." : decSeparator,
thouSeparator = thouSeparator == undefined ? "," : thouSeparator,
sign = n < 0 ? "-" : "",
i = parseInt(n = Math.abs(+n || 0).toFixed(decPlaces)) + "",
j = (j = i.length) > 3 ? j % 3 : 0;
return "R$ " + sign + (j ? i.substr(0, j) + thouSeparator : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + thouSeparator) + (decPlaces ? decSeparator + Math.abs(n - i).toFixed(decPlaces).slice(2) : "");
};