public override AnalisisDeLicenciaOrdinaria GetAnalisisCalculoVacacionesPara(IRepositorioLicencia repositorio_licencia, IRepositorioDePersonas repositorio_personas, Persona unaPersona, DateTime fecha_de_consulta) { var analisis = new AnalisisDeLicenciaOrdinaria(); var vacas_perdidas = new List <VacacionesPermitidas>(); var saldo = new SaldoLicencia(); saldo.Detalle = new List <SaldoLicenciaDetalle>(); unaPersona.TipoDePlanta = repositorio_personas.GetTipoDePlantaActualDe(unaPersona); var calculador_de_vacaciones = new CalculadorDeVacaciones(repositorio_licencia); var aprobadas = this.LicenciasAprobadasPara(repositorio_licencia, unaPersona); List <SolicitudesDeVacaciones> solicitudes = new List <SolicitudesDeVacaciones>(aprobadas.ToArray()); this.LicenciasPendientesPara(repositorio_licencia, unaPersona).ForEach(pendiente => solicitudes.Add(pendiente)); solicitudes = solicitudes.OrderBy(s => s.Persona.Documento).ThenBy(t => t.Desde()).ToList(); var permitidas_descontando_perdidas = this.LicenciasPermitidasPara(repositorio_licencia, unaPersona, vacas_perdidas); var vacaciones_solicitables = calculador_de_vacaciones.DiasSolicitables(permitidas_descontando_perdidas, solicitudes, fecha_de_consulta, unaPersona, analisis, vacas_perdidas); var permitidas_calculadas = this.LicenciasCalculadasPara(repositorio_licencia, unaPersona); vacaciones_solicitables.ForEach(vac_solic => saldo.Detalle.Add(new SaldoLicenciaDetalle { Periodo = vac_solic.Periodo(), Disponible = vac_solic.CantidadDeDias() })); analisis.SetCalculoSinDescuento(permitidas_calculadas); analisis.Saldo = vacaciones_solicitables; return(analisis); }
public List <VacacionesSolicitables> DiasSolicitables(List <VacacionesPermitidas> permitidas, List <SolicitudesDeVacaciones> solicitudes, DateTime fecha_de_calculo, Persona persona, AnalisisDeLicenciaOrdinaria analisis, List <VacacionesPermitidas> perdidas) { var vacaciones_solicitables = new List <VacacionesSolicitables>(); //var perdidas = new List<VacacionesPermitidas>(); // var pendientes_de_aprobar = pendientes.FindAll(pend => pend.Desde() >= aprobadas.Last().Desde()); var permitidas_consumibles = Clonar(permitidas); permitidas_consumibles.OrderBy(pc => pc.Periodo).ToList().ForEach(pc => { analisis.Add(pc); }); solicitudes = this.DividirSolicitudes(solicitudes); if (solicitudes.Count() == 0) { var vacaciones_permitidas = permitidas_consumibles.FindAll(permitida => permitida.Periodo >= persona.TipoDePlanta.Prorroga(fecha_de_calculo).UsufructoDesde);// fecha_de_calculo.Year - 1); //El -1 representa la prórroga vacaciones_permitidas.ForEach(permitida => vacaciones_solicitables.Add(new VacacionesSolicitables(permitida.Periodo, permitida.CantidadDeDias()))); return(vacaciones_solicitables); } solicitudes.ForEach(solicitud => ImputarA(solicitud.Clonar(), permitidas_consumibles, persona, fecha_de_calculo, analisis) ); permitidas_consumibles.RemoveAll(consumible => consumible.Periodo < persona.TipoDePlanta.Prorroga(fecha_de_calculo).UsufructoDesde); permitidas_consumibles.ForEach(consumible => vacaciones_solicitables.Add(new VacacionesSolicitables(consumible.Periodo, consumible.CantidadDeDias()))); //var perdidas = _repositorio_licencia.VacacionesPerdidasDe(persona.Documento); analisis.LasAutorizadasSinDescontarSon(perdidas, _repositorio_licencia.GetVacasPermitidasPara(persona, new ConceptoLicenciaAnualOrdinaria())); analisis.CompletarLicenciasPerdidasPorVencimiento(); analisis.QuitarLineasInnecesarias(); return(vacaciones_solicitables); }
private void ImputarA(SolicitudesDeVacaciones aprobadas, List <VacacionesPermitidas> permitidas_consumibles, Persona persona, DateTime fecha_calculo, AnalisisDeLicenciaOrdinaria analisis) { //permitidas_consumibles.RemoveAll(consumible => aprobadas.AnioMinimoImputable() > consumible.Periodo && aprobadas.AnioMaximoImputable().Last().Periodo() <= consumible.Periodo); var permitidas_consumibles_log = new List <VacacionesPermitidas>(permitidas_consumibles); //quito las vacaciones que fueron permitidas, pero no se las puede tomar porque ya las perdió. permitidas_consumibles.RemoveAll(consumible => aprobadas.AnioMinimoImputable(persona) > consumible.Periodo); var permitidas_consumibles2 = new List <VacacionesPermitidas>(permitidas_consumibles); var permitidas_log = new List <VacacionesPermitidas>(permitidas_consumibles2); //me quedo solo con la parte que puedo consumir, de las vacaciones que se aprobaron. permitidas_consumibles2.RemoveAll(consumible => aprobadas.AnioMaximoImputable().Last().Periodo() < consumible.Periodo); var permitidas_aplicables = permitidas_consumibles2.FindAll(consumible => consumible.CantidadDeDias() > 0); var primera_permitida_aplicable = new VacacionesPermitidas(); if (permitidas_aplicables.Count() == 0) { _repositorio_licencia.LoguearError(permitidas_log, aprobadas, persona, fecha_calculo); return; //throw new SolicitudInvalidaException(); } primera_permitida_aplicable = permitidas_aplicables.First(); if (primera_permitida_aplicable.CantidadDeDias() > aprobadas.CantidadDeDias()) { primera_permitida_aplicable.RestarDias(aprobadas.CantidadDeDias()); analisis.Add(aprobadas, primera_permitida_aplicable); //_repositorio_licencia.LoguearDetalleCalculoLicencia(aprobadas, primera_permitida_aplicable.Periodo, persona, fecha_calculo, false, false); } else { aprobadas.DiasYaImputados(primera_permitida_aplicable.CantidadDeDias()); primera_permitida_aplicable.RestarDias(primera_permitida_aplicable.CantidadDeDias()); //_repositorio_licencia.LoguearDetalleCalculoLicencia(aprobadas, primera_permitida_aplicable.Periodo, persona, fecha_calculo, true, false); if (primera_permitida_aplicable.CantidadDeDias() == 0) { permitidas_consumibles.Remove(primera_permitida_aplicable); analisis.Add(primera_permitida_aplicable, aprobadas, analisis); } if (aprobadas.CantidadDeDias() > 0) { ImputarA(aprobadas, permitidas_consumibles, persona, fecha_calculo, analisis); } } }
public void Add(VacacionesPermitidas permitidas_consumibles, SolicitudesDeVacaciones solicitud, AnalisisDeLicenciaOrdinaria analisis) { var log = this.lineas.Find(l => l.PeriodoAutorizado == permitidas_consumibles.Periodo); if (analisis.LineaCompleta(log)) { log = new LogCalculoVacaciones() { PeriodoAutorizado = 0, CantidadDiasAutorizados = 0, CantidadDiasDescontados = solicitud.DiasYaImputados(), LicenciaDesde = solicitud.Desde(), LicenciaHasta = solicitud.Hasta() }; analisis.AddALaAuthorizacionDelPeriodo(log, permitidas_consumibles.Periodo); } else { log.CantidadDiasDescontados = solicitud.DiasYaImputados(); log.LicenciaDesde = solicitud.Desde(); log.LicenciaHasta = solicitud.Hasta(); } //var log = new LogCalculoVacaciones() { PeriodoAutorizado = 0, CantidadDiasAutorizados = 0, CantidadDiasDescontados = solicitud.DiasYaImputados(), LicenciaDesde = solicitud.Desde(), LicenciaHasta = solicitud.Hasta() }; //lineas.Add(log); }