Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
                }
            }
        }
Beispiel #4
0
        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);
        }