/// <summary>
        /// Manipulação de Afastamento para Férias Realizadas
        /// </summary>
        public void RnManipularAfastamentoFeriasRealizadas()
        {
            if ((Realizadas && Oid.Equals(new Guid())) || (planejamentoOld != null && planejamentoOld.Realizadas != Realizadas && Realizadas))
            {
                if (NotExistAfastamento(DtInicio, _DtRetorno))
                {
                    Afastamento = new ColaboradorAfastamento(Session)
                    {
                        Colaborador             = Periodo.Colaborador,
                        DtInicio                = DtInicio,
                        DtTermino               = _DtRetorno,
                        IsCriadoAutomaticamente = true,
                        TipoAfastamento         = TipoAfastamento.GetTipoAfastamentoParaFeriasRealizadas(Session),
                        TxObservacao            = string.Format("Confirmação de férias planejadas para o período aquisitivo de {0:dd/MM/yyyy} a {1:dd/MM/yyyy}.",
                                                                DtInicio, _DtRetorno)
                    };

                    // persistencia
                    Afastamento.Save();
                }
            }
            else if (Afastamento != null)
            {
                ColaboradorAfastamento afast = Afastamento;
                Afastamento = null;
                afast.Delete();
            }
        }
        /// <summary>
        /// Quando o objeto estiver carregado
        /// </summary>
        protected override void OnLoaded()
        {
            base.OnLoaded();

            if (afastamentoOld == null)
            {
                afastamentoOld = MemberwiseClone() as ColaboradorAfastamento;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Criação/recriação dos períodos aquisitivos
        /// </summary>
        public void CriarPeriodosAquisitivos()
        {
            if (DtAdmissao == DateTime.MinValue)
            {
                return;
            }

            // Períodos existentes
            Hashtable periodosHash = new Hashtable();

            foreach (ColaboradorPeriodoAquisitivo periodo in PeriodosAquisitivos)
            {
                string key = String.Format("{0:dd/MM/yyyy} - {1:dd/MM/yyyy}", periodo.DtInicio, periodo.DtTermino);

                if (!periodosHash.ContainsKey(key))
                {
                    periodosHash.Add(key, periodo);
                }
            }

            // Afastamentos não-remunerados
            Afastamentos.Filter = CriteriaOperator.Parse("TipoAfastamento.IsRemunerado = false");

            // Ordenação decrescente dos Afastamentos não-remunerados
            Afastamentos.Sorting.Add(new SortProperty("DtInicio", SortingDirection.Descending));

            List <ColaboradorAfastamento> ausencias = new List <ColaboradorAfastamento>(Afastamentos);

            // Retirada da ordenação
            Afastamentos.Sorting.RemoveAt(Afastamentos.Sorting.Count - 1);

            // Retirada do filtro
            Afastamentos.Filter = null;

            ColaboradorAfastamento ausencia = null;
            DateTime dtTerminoPeriodo, dtInicioProximoPeriodo = DtAdmissao, dtNow = DateUtil.ConsultarDataHoraAtual();

            // criação dos novos períodos aquisitivos
            while (dtInicioProximoPeriodo.Date <= dtNow.Date)
            {
                string key = string.Empty;

                dtTerminoPeriodo = dtInicioProximoPeriodo.Date.AddYears(1).AddDays(-1);     // data de término do período

                if (ausencia == null && ausencias.Count > 0)
                {
                    ausencia = ausencias[ausencias.Count - 1];
                }

                // Se houver ausência para o período atual, calcula o mesmo com retirada da mesma
                if (ausencia != null && ausencia.DtInicio.Date >= dtInicioProximoPeriodo.Date &&
                    ausencia.DtInicio.Date <= dtTerminoPeriodo.Date)
                {
                    DateTime dtInicio, dtTermino, dtTerminoAusencia = DateTime.MinValue;
                    int      qtdeAusencia = 0;

                    while (ausencia != null && ausencia.DtInicio.Date >= dtInicioProximoPeriodo.Date &&
                           ausencia.DtInicio.Date <= dtTerminoPeriodo.Date)
                    {
                        dtTerminoAusencia = ausencia.DtTermino;
                        qtdeAusencia     += ausencia.DtTermino.Subtract(ausencia.DtInicio).Days + 1;

                        dtInicio  = dtInicioProximoPeriodo.Date;
                        dtTermino = ausencia.DtInicio.Date.AddDays(-1);

                        if (dtTermino > dtInicio)
                        {
                            key = String.Format("{0:dd/MM/yyyy} - {1:dd/MM/yyyy}", dtInicio, dtTermino);

                            if (!periodosHash.ContainsKey(key))
                            {
                                new ColaboradorPeriodoAquisitivo(Session)
                                {
                                    Colaborador        = this,
                                    DtInicio           = dtInicio,
                                    DtTermino          = dtTermino,
                                    NbFeriasPlanejadas = 0
                                }.Save();
                            }
                            else
                            {
                                periodosHash.Remove(key);
                            }

                            dtInicioProximoPeriodo = dtTermino.AddDays(1);
                        }

                        // Remoção do Afastamento
                        ausencias.Remove(ausencia);

                        if (ausencias.Count > 0)
                        {
                            ausencia = ausencias[ausencias.Count - 1];
                            dtInicioProximoPeriodo = dtTerminoAusencia.Date.AddDays(1);
                        }
                        else
                        {
                            ausencia = null;
                        }
                    }

                    // Término da ausência
                    dtInicio  = dtTerminoAusencia.Date.AddDays(1);
                    dtTermino = dtTerminoPeriodo.AddYears(qtdeAusencia / 360).AddDays(qtdeAusencia % 360);
                    if (dtTermino > dtInicio)
                    {
                        key = String.Format("{0:dd/MM/yyyy} - {1:dd/MM/yyyy}", dtInicio, dtTermino);

                        if (!periodosHash.ContainsKey(key))
                        {
                            new ColaboradorPeriodoAquisitivo(Session)
                            {
                                Colaborador        = this,
                                DtInicio           = dtInicio,
                                DtTermino          = dtTermino,
                                NbFeriasPlanejadas = 0
                            }.Save();
                        }
                        else
                        {
                            periodosHash.Remove(key);
                        }

                        dtInicioProximoPeriodo = dtTermino.AddDays(1);
                    }
                }
                // se não houver ausência, o término é 1 ano depois do início
                else
                {
                    key = String.Format("{0:dd/MM/yyyy} - {1:dd/MM/yyyy}", dtInicioProximoPeriodo, dtTerminoPeriodo);

                    if (!periodosHash.ContainsKey(key))
                    {
                        new ColaboradorPeriodoAquisitivo(Session)
                        {
                            Colaborador        = this,
                            DtInicio           = dtInicioProximoPeriodo.Date,
                            DtTermino          = dtTerminoPeriodo,
                            NbFeriasPlanejadas = 0
                        }.Save();
                    }
                    else
                    {
                        periodosHash.Remove(key);
                    }

                    dtInicioProximoPeriodo = dtInicioProximoPeriodo.AddYears(1);
                }
            }

            // Apagando os períodos que ficaram no lixo
            foreach (DictionaryEntry periodoDic in periodosHash)
            {
                ((ColaboradorPeriodoAquisitivo)periodoDic.Value).Delete();
            }
        }
 /// <summary>
 /// Set da variável afastamentoOld para null
 /// </summary>
 public void SetAfastamentoOldToNull()
 {
     afastamentoOld = null;
 }