CalculoTC logo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
var Utilidades = (function(utils) {

  utils.datasSobrepostas = function(inicialPrimeiro, finalPrimeiro, inicialSegundo, finalSegundo) {
    return (inicialPrimeiro <= finalSegundo) && (finalPrimeiro >= inicialSegundo);
  };

  utils.incluiMarcoTemporal = function(dataInicial, dataFinal, marco) {
    return marco > dataInicial && marco <= dataFinal;
  };
  
  utils.ordenarPorDataInicial = function(linha1, linha2) {
    return linha1[0] - linha2[0];
  };
  
  utils.compactarMatriz = function(linha) {
    return linha !== null;
  };

  // https://toddmotto.com/understanding-javascript-types-and-reliable-type-checking/
  utils.isDate = function(elem) {
    return Object.prototype.toString.call(elem).slice(8, -1) === 'Date';
  };
  
  utils.diaSeguinte = function(d) {
    var novaData = new Date(d.getTime());
    novaData.setDate(d.getDate() + 1);
    return novaData;
  };

  utils.diaAnterior = function(d) {
    var novaData = new Date(d.getTime());
    novaData.setDate(d.getDate() - 1);
    return novaData;
  };
  
  utils.ano = function(d) {
    return parseInt(Utilities.formatDate(d, 'UTC', 'yyyy'), 10);
  };
  
  utils.mes = function(d) {
    return parseInt(Utilities.formatDate(d, 'UTC', 'MM'), 10);
  };
  
  utils.copiarMatriz = function(arr) {
    return arr.map(function(item) {
      return item;
    });
  };
  
  utils.validarPeriodos = function(periodos) {
    
    if (!Array.isArray(periodos)) { 
      throw new Error('Dado de entrada "periodos" não é matriz.'); 
    }
    
    periodos = periodos.filter(function(periodo) {
      return periodo[0] !== "" && periodo[1] !== "";
    });
    
    periodos.forEach(function(periodo, idx) {
      if (!utils.isDate(periodo[0]) || !utils.isDate(periodo[1])) {
        throw new Error('A linha ' + (idx + 1) + ' da matriz fornecida contém uma data inválida.');
      }
      if (periodo[0] > periodo[1]) {
        throw new Error('Na linha ' + (idx + 1) + ' da matriz fornecida a data inicial é maior que a final.');
      }
    });
    
    return periodos;
  };
  
  utils.validarMarcosTemporais = function(marcosTemporais) {

    if (!Array.isArray(marcosTemporais)) { 
      throw new Error('Dado de entrada "marcosTemporais" não é matriz.'); 
    }
    
    marcosTemporais = marcosTemporais.map(function(linha) {
      return linha[0];
    }).filter(function(marcoTemporal) {
      return utils.isDate(marcoTemporal);
    }).sort(function(data1, data2) {
      return data1 - data2;
    });
    
    return marcosTemporais;
  };
  
  return utils;

})(Utilidades || Object.create(null));