/// <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; } }
/// <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; }