Advertisement
Guest User

Calculo1

a guest
Jul 30th, 2015
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Groovy 3.16 KB | None | 0 0
  1. package com.inova10.simulador.calculos.rubricas.inova10
  2.  
  3. import com.inova10.simulador.Remuneracao
  4. import com.inova10.simulador.IndiceRemuneracao
  5. import com.inova10.simulador.Rubrica
  6. import com.inova10.simulador.calculos.rubricas.Calculo
  7. import com.inova10.simulador.calculos.RegraAposentadoria
  8. import com.inova10.simulador.relatorios.ResolvedorDeMensagensParaRelatorio
  9. import com.inova10.simulador.Trabalhador
  10.  
  11. class Calculo1 extends Calculo{
  12.     private static Calculo1 instance = null;
  13.  
  14.     public media = 0
  15.     public soma = 0
  16.     public resultadoFinal = 0
  17.     public tempoNecessario = 0
  18.     public quantidadeTotal = 0
  19.     public quantidadeMaiores = 0
  20.     public pssRestituido = 0
  21.     public proporcionalDeduzidoPssRestituido = 0
  22.  
  23.     public tempoLiquido = 0
  24.     public valorProporcional = 0
  25.     public isProporcional = false
  26.     private Calculo1(){}
  27.     public static Calculo1 getInstance(){
  28.         return instance?instance:new Calculo1();
  29.     }
  30.  
  31.     public Boolean pertenceAEstaRegra(String regra){
  32.         return true
  33.     }
  34.  
  35.     def calcula(Rubrica rubrica, List<Remuneracao> remuneracaoAtual, String descricaoRegra, Trabalhador trabalhador, Integer tempoLiquido){
  36.         if(remuneracaoAtual.isEmpty())return "salarioContribuicaoNull"
  37.         if(IndiceRemuneracao.count() <= 0)return "indiceRemuneracao"
  38.         if(!rubrica){
  39.             rubrica = new Rubrica()
  40.         }
  41.         println(rubrica)
  42.  
  43.         remuneracaoAtual.sort()
  44.         remuneracaoAtual = remuneracaoAtual.findAll{it.validate() && it.valor > 0}
  45.         Integer total = remuneracaoAtual.size()
  46.         //remuneracaoAtual = remuneracaoAtual[total-total*0.8..total-1]
  47.  
  48.         List<Remuneracao> novaRemuneracao = new ArrayList<Remuneracao>();
  49.         for (Remuneracao r:remuneracaoAtual){
  50.             //valida a remuneração
  51.             if(r.validate() && 0 < r.valor){
  52.                 this.quantidadeTotal++
  53.                 def indiceCorrecao = IndiceRemuneracao.find("from IndiceRemuneracao as id where id.referencia = ? order by id.aplicacao desc limit 1", [r.data])
  54.  
  55.                 if(indiceCorrecao){
  56.                     //aplica o indice a remuneração
  57.                     def remuneracaoCorrigida = r.valor * indiceCorrecao.valor
  58.                     this.soma += remuneracaoCorrigida
  59.                     novaRemuneracao.add(remuneracaoCorrigida)
  60.                 }
  61.             }
  62.         }
  63.  
  64.         if(!novaRemuneracao.isEmpty()){
  65.             List<Double> maiores = this.excluiValoresAbaixoDaMargem(0.2, novaRemuneracao);
  66.             for(Double r: maiores){
  67.                 this.valorProporcional += r
  68.             }
  69.  
  70.             this.quantidadeMaiores = maiores.size();
  71.             this.pssRestituido = rubrica.pssRestituido
  72.             this.proporcionalDeduzidoPssRestituido = this.valorProporcional - this.pssRestituido
  73.             this.media = this.proporcionalDeduzidoPssRestituido/this.quantidadeMaiores;
  74.             if(!ResolvedorDeMensagensParaRelatorio.getMessage(descricaoRegra).contains("INTEGRAL")){
  75.                 isProporcional = true
  76.                 this.tempoLiquido = tempoLiquido
  77.                 this.tempoNecessario = trabalhador.sexo.equals("M") ? 12775:10950
  78.                 this.resultadoFinal = this.media/this.tempoNecessario*this.tempoLiquido
  79.             }
  80.             return this.resultadoFinal;
  81.         }
  82.     }
  83.  
  84.     private List<Double> excluiValoresAbaixoDaMargem (double porcentagem, List<Double> valores){
  85.         Integer total = valores.size();
  86.         Integer margem = (int) total*porcentagem;
  87.         valores.sort();
  88.         List<Double> novosValores = valores[margem..total-1];
  89.         return novosValores;
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement