public static IList <TabelaAtributo> TrataSubstituicoes(this PosicaoTL posicao, DateTime referencia, object baseObject, IList <TabelaAtributo> modelAsAttributes)
        {
            var eventos = posicao.GetMarco(referencia).Eventos.Clone();

            //Trata eventos permanentes
            if (posicao.ExisteEventoNoPassado(referencia, enumTipoEvento.Admissao))
            {
                eventos.Add(enumTipoEvento.Admissao);
            }
            if (posicao.ExisteEventoNoPassado(referencia, enumTipoEvento.Demissao))
            {
                eventos.Add(enumTipoEvento.Demissao);
            }

            var qtd = posicao.ObtemQtdOcorrenciasEventoNoPassado(referencia, enumTipoEvento.SubirCargo);

            for (int i = 1; i <= qtd; i++)
            {
                eventos.Add(enumTipoEvento.SubirCargo);
            }
            //

            if (eventos == null || eventos.Count() == 0)
            {
                return(modelAsAttributes);
            }

            object localBaseObject = baseObject;

            foreach (var evento in eventos)
            {
                switch (evento.Tipo)
                {
                case enumTipoEvento.Admissao:
                    modelAsAttributes.Single(a => a.AtributoId == 7).Valor = referencia;
                    break;

                case enumTipoEvento.Demissao:
                    modelAsAttributes.Single(a => a.AtributoId == 8).Valor = referencia;
                    break;

                case enumTipoEvento.SubirCargo:
                    var func = (Funcionario)localBaseObject;
                    func            = func.Clone();
                    func.Cargo      = func.Cargo.ObterCargoSuperior();
                    localBaseObject = func;
                    modelAsAttributes.Single(a => a.AtributoId == 12).Valor = func.Cargo.SalarioBase;
                    break;

                case enumTipoEvento.AlteraQtdPool:
                    modelAsAttributes.Single(a => a.AtributoId == 9).Valor = 320;
                    break;

                default:
                    break;
                }
            }

            return(modelAsAttributes);
        }
 public static int ObtemQtdOcorrenciasEventoNoPassado(this PosicaoTL posicao, DateTime referencia, enumTipoEvento tipo)
 {
     return((posicao.IsPool ? posicao.Marcos : posicao.FuncionarioUnico.Marcos)
            .Where(m => m.Referencia < referencia)
            .SelectMany(m => m.Eventos)
            .Count(x => x.Tipo == tipo));
 }
        public static double Calcular(this PosicaoTL posicao, DateTime referencia, out ResultDictionary results)
        {
            IList <TabelaAtributo> modelAsAttributes = null;
            IList <Regra>          regras            = null;
            object baseObject = null;

            using (var context = new Context())
            {
                if (posicao.IsPool)
                {
                    modelAsAttributes = posicao.GetModelAsAttributes();
                    baseObject        = posicao;
                    regras            = context.Regra.Where(r => r.Id == 5).ToList();
                }
                else
                {
                    modelAsAttributes = posicao.FuncionarioUnico.GetModelAsAttributes();
                    baseObject        = posicao.FuncionarioUnico;
                    regras            = context.Regra.Where(r => r.Id < 5).ToList();
                }
            }

            var finalModel = posicao.TrataSubstituicoes(referencia, baseObject, modelAsAttributes);
            var parameters = new CalculatorParams(finalModel, regras);
            var result     = new Calculator(parameters).Calculate(out results);

            return(result);
        }
 public static bool ExisteEventoNoPassado(this PosicaoTL posicao, DateTime referencia, enumTipoEvento tipo)
 {
     return((posicao.IsPool ? posicao.Marcos : posicao.FuncionarioUnico.Marcos)
            .Where(m => m.Referencia < referencia)
            .SelectMany(m => m.Eventos)
            .Any(x => x.Tipo == tipo));
 }
Example #5
0
        private void SetCellStyle(PosicaoTL posicao, DateTime referencia, DataGridViewCellStyle cellStyle)
        {
            var marco = posicao.GetMarco(referencia);

            if (_cenario.AplicarCores && marco.Eventos.Any(x => x.Tipo == enumTipoEvento.Admissao))
            {
                cellStyle.BackColor = Color.Green;
            }
            else if (_cenario.AplicarCores && marco.Eventos.Any(x => x.Tipo == enumTipoEvento.Demissao))
            {
                cellStyle.BackColor = Color.Red;
            }
            else if (_cenario.AplicarCores && marco.Eventos.Any(x => x.Tipo == enumTipoEvento.SubirCargo))
            {
                cellStyle.BackColor = Color.Blue;
            }
            else if (_cenario.AplicarCores && marco.Eventos.Any(x => x.Tipo == enumTipoEvento.AlteraQtdPool))
            {
                cellStyle.BackColor = Color.Yellow;
            }
            else
            {
                cellStyle.BackColor = Color.White;
            }
        }
        private IList <TabelaAtributo> TrataSubstituicoes(PosicaoTL posicao, DateTime referencia, IList <TabelaAtributo> modelAsAttributes)
        {
            var marcos  = posicao.IsPool ? posicao.Marcos : posicao.FuncionarioUnico.Marcos;
            var eventos = marcos.Where(x => x.Referencia == referencia).SelectMany(x => x.Eventos);

            if (eventos == null || eventos.Count() == 0)
            {
                return(modelAsAttributes);
            }

            foreach (var evento in eventos)
            {
                switch (evento.Tipo)
                {
                case enumTipoEvento.Admissao:
                    modelAsAttributes.Single(a => a.AtributoId == 7).Valor = referencia;
                    break;

                case enumTipoEvento.Demissao:
                    modelAsAttributes.Single(a => a.AtributoId == 8).Valor = referencia;
                    break;

                case enumTipoEvento.AlteraQtdPool:
                    modelAsAttributes.Single(a => a.AtributoId == 9).Valor = 320;
                    break;

                default:
                    break;
                }
            }

            return(modelAsAttributes);
        }
        private double Calcular(PosicaoTL posicao, DateTime referencia)
        {
            IList <TabelaAtributo> modelAsAttributes = null;
            IList <Regra>          regras            = null;

            using (var context = new Context())
            {
                if (posicao.IsPool)
                {
                    modelAsAttributes = posicao.GetModelAsAttributes();
                    regras            = context.Regra.Where(r => r.Id == 3).ToList();
                }
                else
                {
                    modelAsAttributes = posicao.FuncionarioUnico.GetModelAsAttributes();
                    regras            = context.Regra.Where(r => r.Id < 3).ToList();
                }
            }

            var finalModel = TrataSubstituicoes(posicao, referencia, modelAsAttributes);
            var parameters = new CalculatorParams(finalModel, regras);
            var result     = new Calculator(parameters).Calculate();

            return(result);
        }
        private List <Marco> GetMarcos(PosicaoTL posicao)
        {
            var result = new List <Marco>();

            for (DateTime i = xDateTimePickerMonth1.Value; i <= xDateTimePickerMonth2.Value; i = i.AddMonths(1))
            {
                result.Add(new Marco(i, posicao));
            }
            return(result);
        }
        private void xButton1_Click(object sender, EventArgs e)
        {
            GeraColunasTimeLine();

            var source = new List <PosicaoTL>();

            using (var context = new Context())
            {
                for (int i = 0; i < context.Posicao.Count; i++)
                {
                    var posicao = context.Posicao[i];

                    /*
                     * var modelAsAttributes = posicao.GetModelAsAttributes();
                     * var parameters = new CalculatorParams(modelAsAttributes, context.Regra);
                     * var result = new Calculator(parameters).Calculate();
                     */
                    var p = new PosicaoTL()
                    {
                        Id   = posicao.Id,
                        Nome = posicao.Nome,
                    };
                    if (posicao.IsPool)
                    {
                        p.QtdHoras = posicao.QtdHoras;
                        p.Marcos   = GetMarcos(p);
                    }
                    else
                    {
                        p.Funcionarios = new[] { new FuncionarioTL()
                                                 {
                                                     Id = context.Funcionario[i].Id, Nome = context.Funcionario[i].Nome, Nascimento = context.Funcionario[i].Nascimento, Sexo = context.Funcionario[i].Sexo, Salario = context.Funcionario[i].Salario, Admissao = context.Funcionario[i].Admissao, Rescisao = context.Funcionario[i].Rescisao
                                                 } }.ToList();
                        p.FuncionarioUnico.Marcos = GetMarcos(p);
                    }
                    source.Add(p);
                }
            }
            xDataGridView1.DataSource = source;
        }
Example #10
0
        public static void FillPositions(this Cenario calcParams)
        {
            calcParams.Posicoes = new List <PosicaoTL>();
            using (var context = new Context())
            {
                for (int i = 0; i < context.Posicao.Count; i++)
                {
                    var posicao = context.Posicao[i];

                    /*
                     * var modelAsAttributes = posicao.GetModelAsAttributes();
                     * var parameters = new CalculatorParams(modelAsAttributes, context.Regra);
                     * var result = new Calculator(parameters).Calculate();
                     */
                    var p = new PosicaoTL()
                    {
                        Id   = posicao.Id,
                        Nome = posicao.Nome,
                    };
                    if (posicao.IsPool)
                    {
                        p.QtdHoras = posicao.QtdHoras;
                        p.Marcos   = calcParams.GetMarcos(p);
                    }
                    else
                    {
                        p.Funcionarios = new[] { new FuncionarioTL()
                                                 {
                                                     Id = context.Funcionario[i].Id, Nome = context.Funcionario[i].Nome, Nascimento = context.Funcionario[i].Nascimento, Sexo = context.Funcionario[i].Sexo, Salario = context.Funcionario[i].Salario, Cargo = context.Funcionario[i].Cargo, Admissao = context.Funcionario[i].Admissao, Rescisao = context.Funcionario[i].Rescisao
                                                 } }.ToList();
                        p.FuncionarioUnico.Marcos = calcParams.GetMarcos(p);
                    }
                    calcParams.Posicoes.Add(p);
                }
            }
        }
        public static Marco GetMarco(this PosicaoTL posicao, DateTime referencia)
        {
            var marcos = posicao.IsPool ? posicao.Marcos : posicao.FuncionarioUnico.Marcos;

            return(marcos.Single(m => m.Referencia == referencia));
        }
 public static double Calcular(this PosicaoTL posicao, DateTime referencia)
 {
     return(posicao.Calcular(referencia, out ResultDictionary results));
 }
Example #13
0
        private static List <Marco> GetMarcos(DateTime dataInicial, DateTime dataFinal, PosicaoTL posicao)
        {
            var result = new List <Marco>();

            for (DateTime i = dataInicial; i <= dataFinal; i = i.AddMonths(1))
            {
                result.Add(new Marco(i, posicao));
            }
            return(result);
        }
Example #14
0
 private static List <Marco> GetMarcos(this Cenario calcParams, PosicaoTL posicao)
 {
     return(GetMarcos(calcParams.DataInicial, calcParams.DataFinal, posicao));
 }