Exemplo n.º 1
0
        public bool UpdatePeriodoPago(NOM_PeriodosPago updatedModel)
        {
            using (var context = new RHEntities())
            {
                //Validar periodo
                var itemPeriodo = context.NOM_PeriodosPago.FirstOrDefault(x => x.IdPeriodoPago == updatedModel.IdPeriodoPago);

                //Si el periodo ya esta autorizado, ya no se podrá hacer cambios
                if (itemPeriodo.Autorizado == true)
                {
                    return(false);
                }

                var old = GetPeriodoPagoById(updatedModel.IdPeriodoPago);
                if (old == null)
                {
                    return(false);
                }
                updatedModel.Fecha_Pago = updatedModel.Fecha_Fin;
                updatedModel.FechaMod   = DateTime.Now;

                context.Entry(old).CurrentValues.SetValues(updatedModel);
                var result = context.SaveChanges();
                return(result > 0 ? true : false);
            }
        }
Exemplo n.º 2
0
        //private void GetPermisos()
        //{
        //    var permisos = ctx.Permisos.Where(x => x.IdEmpleado == IdEmpleado &&
        //    ((x.FechaInicio >= Periodo.Fecha_Inicio && x.FechaInicio <= Periodo.Fecha_Fin) || (x.FechaFin >= Periodo.Fecha_Inicio && x.FechaFin <= Periodo.Fecha_Fin))
        //    ).ToList();

        //    foreach (var permiso in permisos)
        //    {
        //        var tipo = "PC";
        //        if (permiso.ConGoce == false)
        //        {
        //            tipo = "PS";
        //            NumDias = NumDias - (int)permiso.Dias;
        //        }
        //        SetIncidencias(permiso.FechaInicio, permiso.FechaFin, tipo, permiso.IdPermiso);
        //    }
        //}

        private void GetPermisos2(List <Permisos> listaPermisos, int idEmpl, NOM_PeriodosPago periodosPago)
        {
            var  fechaInicioPeriodo = periodosPago.Fecha_Inicio;
            var  fechaFinPeriodo    = periodosPago.Fecha_Fin;
            bool pagarPermiso       = false;
            var  permisos           = listaPermisos.Where(x => x.IdEmpleado == idEmpl).ToList();

            foreach (var permiso in permisos)
            {
                var tipo = "PC";

                if (permiso.ConGoce == false)
                {
                    var fechaInicioPermiso = permiso.FechaInicio;
                    var fechaFinPermiso    = permiso.FechaFin;

                    var diasPermisos = Utils.GetDiasByPeriodoRange(fechaInicioPermiso, fechaFinPermiso,
                                                                   fechaInicioPeriodo, fechaFinPeriodo);
                    NumDias -= diasPermisos;

                    tipo = "PS";
                    // NumDias = NumDias - (int)permiso.Dias;
                    pagarPermiso = false;
                }
                else
                {
                    pagarPermiso = true;
                }


                SetIncidencias(permiso.FechaInicio, permiso.FechaFin, tipo, permiso.IdPermiso, pagarDia: pagarPermiso);
            }
        }
Exemplo n.º 3
0
 public bool CrearPeriodo(NOM_PeriodosPago model)
 {
     using (var context = new RHEntities())
     {
         context.NOM_PeriodosPago.Add(model);
         var result = context.SaveChanges();
         return(result > 0 ? true : false);
     }
 }
Exemplo n.º 4
0
        public static async Task <int> GenerarXMLSintimbre(int[] idNominas, NOM_PeriodosPago periodosPago,
                                                           int idEjercicio, int idPeriodo, int idUsuario, bool isCfdi33 = false)
        {
            //TimbradoCore tcCore = new TimbradoCore();
            //var rxml = await tcCore.GenerarXmlAsync(idNominas, periodosPago, idEjercicio, idPeriodo, idUsuario,fromProcesando: true,isCfdi33:isCfdi33);

            TimbradoCoreV2 tcv2 = new TimbradoCoreV2();
            var            res  = await tcv2.CrearXmlDesdeElProcesado(idUsuario, periodosPago, null, idNominas, true);

            return(1);
        }
Exemplo n.º 5
0
 private void GetDiasFestivos2(List <C_DiasFestivos> lista, NOM_PeriodosPago periodoP)
 {
     foreach (var diaF in lista)
     {
         var dias = Utils.GetDiasByPeriodoRange(diaF.Fecha, diaF.Fecha, periodoP.Fecha_Inicio, periodoP.Fecha_Fin);
         if (dias > 0)
         {
             SetIncidencias(diaF.Fecha, diaF.Fecha, "DF", diaF.IdDiaFestivo, pagarDia: true);
         }
     }
 }
Exemplo n.º 6
0
 public void UpdateCfdiEstatus(NOM_PeriodosPago pp, GenerarCfdiEstatus estatus)
 {
     using (var context = new RHEntities())
     {
         var item = context.NOM_PeriodosPago.FirstOrDefault(x => x.IdPeriodoPago == pp.IdPeriodoPago);
         if (item != null)
         {
             item.CfdiGenerado = (int)estatus;
         }
         context.SaveChangesAsync();
     }
 }
Exemplo n.º 7
0
 public int GetFaltasByIdEmpleado(NOM_PeriodosPago ppPago, int idE)
 {
     try
     {
         //Faltas - tipo 7
         var faltas = _ctx.Inasistencias.Where(x => x.IdTipoInasistencia == 7 && x.IdEmpleado == idE &&
                                               x.Fecha >= ppPago.Fecha_Inicio && x.Fecha <= ppPago.Fecha_Fin).Select(e => e.IdEmpleado).Sum();
         return(faltas);
     }
     catch (Exception)
     {
         return(0);
     }
 }
Exemplo n.º 8
0
        public static async Task <int> GenerarXMLFiniquitoSintimbre(int idFiniquito, NOM_PeriodosPago periodosPago,
                                                                    int idEjercicio, int idPeriodo, int idUsuario, bool isCfdi33 = false)
        {
            //TimbradoCore tcCore = new TimbradoCore();
            //var rxml = await tcCore.GenerarXmlFiniquitoAsync(idFiniquito, periodosPago, idEjercicio, idPeriodo,
            //    idUsuario, fromProcesando: true, isCfdi33: isCfdi33);

            TimbradoCoreV2 tcv2 = new TimbradoCoreV2();

            int[] arrayId = new[] { idFiniquito };
            var   res     = await tcv2.CrearXmlDesdeElProcesado(idUsuario, periodosPago, null, arrayId, true);

            return(1);
        }
Exemplo n.º 9
0
        public static async Task <string> GetRecibosComplemento(int[] listNominas, NOM_PeriodosPago ppago, int idUsuario, string path, bool incluirDetalles)
        {
            //Se generan los recibos sin timbrado del sat
            if (listNominas != null)
            {
                PDFCore pcCore = new PDFCore();
                var     recibo =
                    await
                    pcCore.GetRecibosComplemento(listNominas, ppago.IdEjercicio, ppago, idUsuario, path, incluirDetalles);

                return(recibo);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 10
0
        public static void GetHorasExtras()
        {
            int[] empleados = new[] { 62, 65, 72 };

            NOM_PeriodosPago pp = new NOM_PeriodosPago();

            pp.Fecha_Fin    = new DateTime(2018, 01, 31);
            pp.Fecha_Inicio = new DateTime(2018, 01, 16);

            HorasExtrasClass ob = new HorasExtrasClass();
            var lista           = ob.GetHotasExtrasParaNomina(empleados, pp);

            foreach (var item in lista)
            {
                Console.WriteLine($" {item.IdEmpleado} {item.Fecha} {item.HorasTotales}");
            }
        }
Exemplo n.º 11
0
        //public List<ProcesoNominaViewModel> GetNominasByPeriodo(int idPeriodo)
        //{
        //    return (from n in ctx.NOM_Nomina
        //            join e in ctx.Empleado on n.IdEmpleado equals e.IdEmpleado
        //            where n.IdPeriodo == idPeriodo
        //            select new ProcesoNominaViewModel
        //            {
        //                IdEmpleado = e.IdEmpleado,
        //                Empleado = e.APaterno + " " + e.AMaterno + " " + e.Nombres,
        //                IdNomina = n.IdNomina,
        //                IdPeriodo = idPeriodo,
        //                Percepciones = n.TotalPercepciones,
        //                Deducciones = n.TotalDeducciones,
        //                Total = n.TotalNomina,
        //                TotalComplemento = n.TotalComplemento,
        //                Seleccionado = true
        //            }
        //        ).ToList();
        //}
        public static async Task <string> GetRecibosSinTimbre(int[] listNominas, NOM_PeriodosPago ppago, int idUsuario, string path, bool isCfdi33 = false)
        {
            //Se generan los recibos sin timbrado del sat
            if (listNominas != null)
            {
                PDFCore pcCore = new PDFCore();
                var     recibo =
                    await
                    pcCore.GetRecibosSintimbre(listNominas, ppago.IdEjercicio, ppago.IdPeriodoPago, idUsuario, path, isCfdi33);

                return(recibo);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 12
0
        public int GetInasistenciasByIdEmpleado(NOM_PeriodosPago ppPago, int idE)
        {
            //Fechas Periodo
            var FPI = ppPago.Fecha_Inicio;
            var FPF = ppPago.Fecha_Fin;

            //Faltas - tipo 9
            var faltas = _ctx.Inasistencias.Where(x => x.IdTipoInasistencia == 7 && x.IdEmpleado == idE).Select(e => e.IdEmpleado).Sum();

            //Permiso sin Goce
            var ps = _ctx.Permisos.Where(x => x.ConGoce == false && x.IdEmpleado == idE).Select(e => e.IdEmpleado).Sum();

            //Incapacidad -
            var incapacidad = _ctx.Incapacidades.Where(x => x.IdEmpleado == idE).Select(e => e.IdEmpleado).Sum();

            var totalInasistencias = faltas + ps + incapacidad;

            return(totalInasistencias);
        }
Exemplo n.º 13
0
        // GET: Ajustes
        public PartialViewResult Index()
        {
            int idPeriodoPago            = 0;
            NOM_PeriodosPago periodoPago = null;

            if (Session["periodo"] != null)
            {
                periodoPago       = Session["periodo"] as NOM_PeriodosPago;
                idPeriodoPago     = periodoPago.IdPeriodoPago;
                ViewBag.IdPeriodo = periodoPago.IdPeriodoPago;
            }

            ViewBag.PeriodoPago = periodoPago;

            DatoAjustesNomina da = new DatoAjustesNomina();
            var modelo           = da.GetDatosAjuste(idPeriodoPago);

            return(PartialView(modelo));
        }
Exemplo n.º 14
0
        public List <EmpleadosHoras> GetHotasExtrasParaNomina(int[] idEmpleados, NOM_PeriodosPago ppago)
        {
            List <HorasExtrasEmpleado> listaGeneral;

            using (var context = new RHEntities())
            {
                listaGeneral = (from t in context.HorasExtrasEmpleado
                                where idEmpleados.Contains(t.IdEmpleado) &&
                                t.Fecha >= ppago.Fecha_Inicio && t.Fecha <= ppago.Fecha_Fin
                                select t).ToList();
            }

            var listaGr = (from l in listaGeneral
                           group l by new { l.IdEmpleado, l.Fecha }
                           into gp
                           select new EmpleadosHoras()
            {
                IdEmpleado = gp.Key.IdEmpleado,
                Fecha = gp.Key.Fecha,
                StrFecha = gp.Key.Fecha.ToString("ddMM"),
                HorasTotales = gp.Sum(s => s.Horas)
            }).ToList();


            //from c in input
            //group c by new
            //{
            //    c.ProductGroup,
            //    c.BusinessDate.Year,
            //    c.BusinessDate.Month,
            //} into grp
            //select new ResultType()
            //{
            //    ProductGroup = grp.Key.ProductGroup,
            //    Month = new DateTime(grp.Key.Year, grp.Key.Month, 1),
            //    Sum = grp.Sum(s => s.Price),
            //};

            return(listaGr);
        }
Exemplo n.º 15
0
        /// <summary>
        /// Metodo que filtra la lista o depura el array de IdNominas a Timbrar
        /// con las nominas que no hayan sido timbrado anteriormente.
        /// </summary>
        /// <param name="arrayIds"></param>
        /// <param name="idSucusal"></param>
        /// <param name="idEjercicio"></param>
        /// <param name="idPeriodo"></param>
        /// <param name="pp"></param>
        /// <returns></returns>
        private int[] ValidarRecibosTimbrados(int[] arrayIds, int idSucusal, int idEjercicio, NOM_PeriodosPago pp)
        {
            //Buscamos en la Tabla las nominas contenidas en el array
            //pero que no esten timbrados correctamente
            int[] listaTimbrados = { };

            if (pp.IdTipoNomina != 11)
            {
                using (var context = new RHEntities())
                {
                    listaTimbrados = (from t in context.NOM_CFDI_Timbrado
                                      where
                                      arrayIds.Contains(t.IdNomina) && t.IdSucursal == idSucusal && t.IdEjercicio == idEjercicio &&
                                      t.IdPeriodo == pp.IdPeriodoPago && t.Cancelado == false && t.IsPrueba == false && t.ErrorTimbrado == false &&
                                      t.IdPeriodo == pp.IdPeriodoPago && t.FolioFiscalUUID != null
                                      select t.IdNomina).ToArray();
                }
            }
            else if (pp.IdTipoNomina == 11) //finiquito
            {
                using (var context = new RHEntities())
                {
                    listaTimbrados = (from t in context.NOM_CFDI_Timbrado
                                      where
                                      arrayIds.Contains(t.IdFiniquito) && t.IdSucursal == idSucusal && t.IdEjercicio == idEjercicio &&
                                      t.IdPeriodo == pp.IdPeriodoPago && t.Cancelado == false && t.IsPrueba == false &&
                                      t.ErrorTimbrado == false &&
                                      t.IdPeriodo == pp.IdPeriodoPago && t.FolioFiscalUUID != null
                                      select t.IdFiniquito).ToArray();
                }
            }


            //Si la lista timbrados no contiene elementos, entonces
            //retornamos el array inicial para que se timbren nuevamente
            if (listaTimbrados.Length <= 0)
            {
                return(arrayIds);
            }

            //Filtra ambas lista para que solo se retorne los id de nominas que no esten timbrados
            var nuevoArray = arrayIds.Where(x => !listaTimbrados.Contains(x)).ToArray();

            return(nuevoArray); //retorna un nuevo array de nominas filtradas
        }
Exemplo n.º 16
0
        public string crearExcel(int idusuario, string ruta, int IdSucursal, NOM_PeriodosPago pperiodo)
        {
            //Variables
            NOM_Finiquito              finiquito;
            Empleado                   empleado;
            Empleado_Contrato          empleadoC;
            string                     empresaF;
            string                     empresaC;
            NOM_FacturacionF_Finiquito factura;
            NOM_FacturacionC_Finiquito facturaC;
            DatosBancarios             datosbancarios;
            C_Banco_SAT                banco = new C_Banco_SAT();

            using (var context = new RHEntities())
            {
                finiquito = context.NOM_Finiquito.FirstOrDefault(x => x.IdPeriodo == pperiodo.IdPeriodoPago);
                empleado  = context.Empleado.FirstOrDefault(x => x.IdEmpleado == finiquito.IdEmpleado);
                //var empleadoC = ctx.Empleado_Contrato.Where(x => x.IdEmpleado == empleado.IdEmpleado && x.Status == true).FirstOrDefault();
                empleadoC = context.Empleado_Contrato.FirstOrDefault(x => x.IdEmpleado == empleado.IdEmpleado);


                empresaF =
                    context.Empresa.Where(x => x.IdEmpresa == empleadoC.IdEmpresaFiscal)
                    .Select(x => x.RazonSocial)
                    .FirstOrDefault();

                empresaC =
                    context.Empresa.Where(x => x.IdEmpresa == empleadoC.IdEmpresaComplemento)
                    .Select(x => x.RazonSocial)
                    .FirstOrDefault();

                if (empresaC == null)
                {
                    empresaC =
                        context.Empresa.Where(x => x.IdEmpresa == empleadoC.IdEmpresaSindicato)
                        .Select(x => x.RazonSocial)
                        .FirstOrDefault();
                }

                factura =
                    context.NOM_FacturacionF_Finiquito
                    .FirstOrDefault(x => x.IdFiniquito == finiquito.IdFiniquito && x.IdPeriodo == pperiodo.IdPeriodoPago);
                facturaC =
                    context.NOM_FacturacionC_Finiquito
                    .FirstOrDefault(x => x.IdFiniquito == finiquito.IdFiniquito && x.IdPeriodo == pperiodo.IdPeriodoPago);
                datosbancarios = context.DatosBancarios.FirstOrDefault(x => x.IdEmpleado == empleado.IdEmpleado);

                if (datosbancarios == null)
                {
                    banco = null;
                }
                else
                {
                    banco = context.C_Banco_SAT.FirstOrDefault(x => x.IdBanco == datosbancarios.IdBanco);
                }
            }



            var newruta = ValidarFolderUsuario(idusuario, ruta);

            //string[] arrayEmpresaF = empresaF.Split(' ');
            //string[] arrayEmpresaC = empresaC.Split(' ');
            int    contadorHojas = 0;
            string Nombre;
            string NombreF;
            int    nosiga = 0;

            newruta = $"{newruta} Dispersion {empleado?.APaterno} {empleado?.AMaterno} {empleado?.Nombres} - Finiquito.xlsx";


            var wb = new XLWorkbook();

            while (contadorHojas < 2)
            {
                int i = 6;
                if (contadorHojas == 0)
                {
                    //Nombre = arrayEmpresaF[0]+" " +arrayEmpresaF[1] + " " +arrayEmpresaF[2];
                    NombreF = empresaF;
                    nosiga  = datosbancarios == null ? 0 : datosbancarios.NoSigaF.Value;
                }
                else
                {
                    //Nombre = arrayEmpresaC[0] + " " + arrayEmpresaC[1] + " " + arrayEmpresaC[2];
                    NombreF = empresaC;
                    nosiga  = datosbancarios == null ? 0 : datosbancarios.NoSigaC.Value;
                }


                if (NombreF.Length > 30)
                {
                    NombreF = NombreF.Substring(0, 29);
                }

                var ws = wb.Worksheets.Add(NombreF);


                ws.Cell("C2").Value = NombreF;
                ws.Cell("C3").Value = "Dispersion";
                ws.Cell("C4").Value = pperiodo.Fecha_Inicio.ToString("dd/MM/yyyy") + " - " + pperiodo.Fecha_Fin.ToString("dd/MM/yyyy");



                ws.Range("C2:F2").Merge();
                ws.Cell("C2").Style
                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                .Font.SetBold();

                ws.Range("C3:F3").Merge();
                ws.Cell("C3").Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);

                ws.Range("C4:F4").Merge();
                ws.Cell("C4").Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                ws.Cell("C" + i).Value = banco == null ? "no tiene asignado banco" : banco.Descripcion;
                ws.Range("C" + i + ":F" + i).Merge();
                ws.Cell("C" + i).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                i++;
                ws.Cell("C" + i).Value = "NOMBRE DEL COLABORADOR";
                ws.Cell("D" + i).Value = "IMPORTE TOTAL";
                ws.Cell("E" + i).Value = "NoSiga";
                ws.Cell("F" + i).Value = "Cuenta";
                i++;

                ws.Cell("C" + i).Value = empleado.APaterno + " " + empleado.AMaterno + " " + empleado.Nombres;
                if (contadorHojas == 0)
                {
                    ws.Cell("D" + i).Value = finiquito.TOTAL_total;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                }
                else
                {
                    ws.Cell("D" + i).Value = 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                }

                ws.Cell("E" + i).Value = nosiga;
                ws.Cell("F" + i).Value = datosbancarios == null ? "Sin datos bancarios" : datosbancarios.CuentaBancaria;
                i = i + 4;

                ws.Cell("C" + i).Value = contadorHojas == 0 ? "RELATIVOS" : "FACTURA";


                ws.Range("C" + i + ":F" + i).Merge();
                ws.Cell("C" + i).Style
                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                .Font.SetBold();
                i++;
                if (contadorHojas == 0)
                {
                    ws.Cell("C" + i).Value = "CUOTAS IMSS - INFONAVIT";
                    ws.Cell("D" + i).Value = factura?.F_Cuota_IMSS_Infonavit ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "IMPUESTO SOBRE NOMINAS";
                    ws.Cell("D" + i).Value = factura?.F_ImpuestoNomina ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "AMORTIZACION INFONAVIT";
                    ws.Cell("D" + i).Value = factura?.F_Amortizacion_Infonavit ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "FONACOT";
                    ws.Cell("D" + i).Value = factura?.F_Fonacot ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "PENSION ALIMENTICIA";
                    ws.Cell("D" + i).Value = factura?.F_Pension_Alimenticia ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "RELATIVOS";
                    ws.Cell("D" + i).Value = factura?.F_Relativo ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "TOTAL DISPERSION";
                    ws.Cell("D" + i).Value = factura?.F_Total_Nomina ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                    ws.Cell("C" + i).Value = "TOTAL GENERAL";
                    ws.Cell("D" + i).Value = factura?.F_Total_Fiscal ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.00";
                    i++;
                }
                else
                {
                    ws.Cell("C" + i).Value = "PERCEPCIONES";
                    ws.Cell("D" + i).Value = facturaC?.C_Percepciones ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "SERVICIOS" + facturaC?.C_Porcentaje_Servicio ?? "0";
                    ws.Cell("D" + i).Value = facturaC?.C_Total_Servicio ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "RELATIVOS";
                    ws.Cell("D" + i).Value = facturaC?.C_Relativos ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "DESCUENTO";
                    ws.Cell("D" + i).Value = facturaC?.C_Descuentos ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "OTROS";
                    ws.Cell("D" + i).Value = facturaC?.C_Otros ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "SUB TOTAL";
                    ws.Cell("D" + i).Value = facturaC?.C_Subtotal ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "IVA";
                    ws.Cell("D" + i).Value = facturaC?.C_Total_IVA ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                    ws.Cell("C" + i).Value = "TOTAL DISPERSION COMPLEMENTO";
                    ws.Cell("D" + i).Value = facturaC?.C_Total_Complemento ?? 0;
                    ws.Cell("D" + i).Style.NumberFormat.Format = "$ #,##0.0000";
                    i++;
                }



                ws.Columns("7,3").AdjustToContents();
                ws.Columns("7,4").AdjustToContents();
                ws.Columns("7,5").AdjustToContents();
                ws.Columns("7,6").AdjustToContents();
                contadorHojas++;
            }


            wb.SaveAs(newruta);

            return(newruta);
        }
Exemplo n.º 17
0
        public string ExportarExcelReporteNomina(int idusuario, string ruta, NOM_PeriodosPago periodoPago)
        {
            List <DatosReporteNominas> datos;

            List <NOM_Nomina_Detalle> listaDetalles;
            List <NOM_Nomina>         listaNominas;
            List <NOM_Cuotas_IMSS>    listaCuotasImsss;

            using (var context = new RHEntities())
            {
                datos = (from emp in context.Empleado
                         join empPer in context.NOM_Empleado_PeriodoPago
                         on emp.IdEmpleado equals empPer.IdEmpleado
                         //join nom in ctx.NOM_Nomina
                         //on emp_per.IdPeriodoPago equals nom.IdPeriodo
                         where empPer.IdPeriodoPago == periodoPago.IdPeriodoPago
                         select new DatosReporteNominas
                {
                    IdEmpleado = emp.IdEmpleado,
                    //IdNomina = nom.IdNomina,
                    Nombres = emp.Nombres,
                    Paterno = emp.APaterno,
                    Materno = emp.AMaterno
                }).ToList();


                listaNominas = context.NOM_Nomina.Where(x => x.IdPeriodo == periodoPago.IdPeriodoPago).ToList();

                var arrayIdNominas = listaNominas.Select(x => x.IdNomina).ToArray();

                listaDetalles = (from d in context.NOM_Nomina_Detalle
                                 where arrayIdNominas.Contains(d.IdNomina)
                                 select d).ToList();


                listaCuotasImsss = (from c in context.NOM_Cuotas_IMSS
                                    where arrayIdNominas.Contains(c.IdNomina)
                                    select c).ToList();
            }


            var newruta = ValidarFolderUsuario(idusuario, ruta);

            newruta = newruta + "ReporteNomina_" + periodoPago.Descripcion + "_.xlsx";

            var wb = new XLWorkbook();
            var ws = wb.Worksheets.Add("Reporte Nominas ");

            ws.Cell("A1").Value = "ID EMPLEADO";
            ws.Cell("B1").Value = "EMPLEADO";
            ws.Cell("C1").Value = "PERCEPCIONES";
            ws.Cell("D1").Value = "DEDUCCIONES";
            ws.Cell("E1").Value = "COMPLEMENTO";
            ws.Cell("F1").Value = "SUELDOS";
            ws.Cell("G1").Value = "SALARIO DIARIO";
            ws.Cell("H1").Value = "SALARIO DIARIO I";
            ws.Cell("I1").Value = "SALARIO BASE C";
            ws.Cell("J1").Value = "SALARIO REAL";
            ws.Cell("K1").Value = "PENSION ALIMENTICIA";
            ws.Cell("L1").Value = "SUBSIDIO AL EMPLEO";
            ws.Cell("M1").Value = "IMPUESTO NOMINAS";
            ws.Cell("N1").Value = "CUOTA PATRONAL";
            ws.Cell("O1").Value = "CUOTA OBRERA";
            ws.Cell("P1").Value = "ISR";
            ws.Cell("Q1").Value = "INFONAVIT";
            ws.Cell("R1").Value = "FONACOT";
            ws.Cell("S1").Value = "TOTAL";


            int i = 2;

            foreach (var emp in datos)
            {
                if (emp == null)
                {
                    continue;
                }

                // var nomina = ctx.NOM_Nomina.Where(x => x.IdPeriodo == idPeriodo && x.IdEmpleado == emp.IdEmpleado).FirstOrDefault();
                var nomina = listaNominas.FirstOrDefault(x => x.IdEmpleado == emp.IdEmpleado);

                if (nomina == null)
                {
                    continue;
                }

                decimal totalPatron = 0;
                decimal totalObrero = 0;

                //var pension = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 48).FirstOrDefault();
                var pension = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 48);

                //var imss = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 42).FirstOrDefault();
                var imss = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 42);

                //var isr = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 43).FirstOrDefault();
                var isr = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 43);

                //var infonavit = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 51).FirstOrDefault();
                var infonavit = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 51);

                //var fonacot = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 52).FirstOrDefault();
                var fonacot = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 52);

                //var sueldo = ctx.NOM_Nomina_Detalle.Where(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 1).FirstOrDefault();
                var sueldo = listaDetalles.FirstOrDefault(x => x.IdNomina == nomina.IdNomina && x.IdConcepto == 1);

                var itemCuota = listaCuotasImsss.FirstOrDefault(x => x.IdNomina == nomina.IdNomina);

                if (itemCuota != null)
                {
                    totalPatron = itemCuota.TotalPatron;
                    totalObrero = itemCuota.TotalObrero;
                }

                ws.Cell($"A{i}").Value = emp.IdEmpleado;
                ws.Cell($"B{i}").Value = emp.Paterno + emp.Materno + emp.Nombres;

                if (nomina != null)
                {
                    ws.Cell($"C{i}").Value = nomina.TotalPercepciones;
                    ws.Cell($"D{i}").Value = nomina.TotalDeducciones;
                    ws.Cell($"E{i}").Value = nomina.TotalComplemento;
                    ws.Cell($"F{i}").Value = sueldo == null ? 0 : sueldo.Total;
                    ws.Cell($"G{i}").Value = nomina.SD;
                    ws.Cell($"H{i}").Value = nomina.SDI;
                    ws.Cell($"I{i}").Value = nomina.SBC;
                    ws.Cell($"J{i}").Value = nomina.SDReal;
                    ws.Cell($"K{i}").Value = pension == null ? 0 : pension.Total;
                    ws.Cell($"L{i}").Value = nomina.SubsidioEntregado;
                    ws.Cell($"M{i}").Value = nomina.TotalImpuestoSobreNomina;
                    ws.Cell($"N{i}").Value = totalPatron;
                    ws.Cell($"O{i}").Value = totalObrero;
                    ws.Cell($"P{i}").Value = isr == null ? 0 : isr.Total;
                    ws.Cell($"Q{i}").Value = infonavit == null ? 0 : infonavit.Total;
                    ws.Cell($"R{i}").Value = fonacot == null ? 0 : fonacot.Total;
                    ws.Cell($"S{i}").Value = nomina.TotalNomina;

                    i++;
                }
                else
                {
                    ws.Range($"C{i}:R{i}").Value = 0;

                    i++;
                }
            }

            ws.Cell($"C{i}").FormulaA1 = $"=SUM(C2:C{i - 1})";
            ws.Cell($"D{i}").FormulaA1 = $"=SUM(D2:D{i - 1})";
            ws.Cell($"E{i}").FormulaA1 = $"=SUM(E2:E{i - 1})";
            ws.Cell($"F{i}").FormulaA1 = $"=SUM(F2:F{i - 1})";
            ws.Cell($"K{i}").FormulaA1 = $"=SUM(K2:K{i - 1})";
            ws.Cell($"L{i}").FormulaA1 = $"=SUM(L2:L{i - 1})";
            ws.Cell($"M{i}").FormulaA1 = $"=SUM(M2:M{i - 1})";
            ws.Cell($"N{i}").FormulaA1 = $"=SUM(N2:N{i - 1})";
            ws.Cell($"O{i}").FormulaA1 = $"=SUM(O2:O{i - 1})";
            ws.Cell($"P{i}").FormulaA1 = $"=SUM(P2:P{i - 1})";
            ws.Cell($"Q{i}").FormulaA1 = $"=SUM(Q2:Q{i - 1})";
            ws.Cell($"R{i}").FormulaA1 = $"=SUM(R2:R{i - 1})";
            ws.Cell($"S{i}").FormulaA1 = $"=SUM(S2:S{i - 1})";

            ws.Range($"C2:S{i}").Style.NumberFormat.Format = "$ #,##0.00";
            ws.Range("A1:S1").Style.Font.SetBold();
            ws.Range($"A{i}:S{i}").Style.Font.SetBold();

            ws.Columns("1:19").AdjustToContents();

            wb.SaveAs(newruta);


            return(newruta);
        }
Exemplo n.º 18
0
        private static NOM_Nomina_Detalle CalculoDeInfonavit(NOM_Nomina nomina, NOM_PeriodosPago periodoPago, int dias = -1)
        {
            decimal totalADescontar = 0;
            //   DateTime fechaServidor = DateTime.Now;
            int diasDeDescuento = 0;

            if (dias >= 0)
            {
                diasDeDescuento = dias;
            }
            else
            {
                diasDeDescuento = nomina.Dias_Laborados;
            }


            //1) Obtener el prestamo infonavit de la tabla Prestamos pasando el Id del contrato
            var prestamoInfonavit = NominasDao.GetPrestamoInfonavitByIdContrato(nomina.IdContrato);

            //Infonavit no maneja saldo

            if (prestamoInfonavit == null)
            {
                return(null);
            }
            //Validar Fecha de inicio  del descuento

            if (periodoPago.Fecha_Inicio < prestamoInfonavit.FechaInicio && periodoPago.Fecha_Fin < prestamoInfonavit.FechaInicio)
            {
                return(null);
            }

            //if (fechaServidor >= prestamoInfonavit.FechaInicio)

            //Validar Fecha suspension
            //if (prestamoInfonavit.FechaSuspension != null)
            //{
            //    if (prestamoInfonavit.FechaSuspension > fechaServidor)
            //        return null;
            //}

            //Validar Fecha de Suspension del descuentos
            //if (fechaServidor < prestamoInfonavit.FechaSuspension)
            //{
            RH.BLL.Infonavit inf = new RH.BLL.Infonavit();
            if (diasDeDescuento > 0)
            {
                //CALCULO DEL CREDITO -
                var calculo = inf.GetInfonavitById(prestamoInfonavit.Id);
                totalADescontar = diasDeDescuento * calculo.DescuentoDiario;
            }

            //Se guarda como detalle de la nomina
            //GuardarConcepto(nomina.IdNomina, 51, totalADescontar, 0, totalADescontar, 0, 0, false, prestamoInfonavit.Id);

            NOM_Nomina_Detalle item = new NOM_Nomina_Detalle()
            {
                Id                  = 0,
                IdNomina            = nomina.IdNomina,
                IdConcepto          = 51,
                Total               = Utils.TruncateDecimales(totalADescontar),
                GravadoISR          = 0,
                ExentoISR           = Utils.TruncateDecimales(totalADescontar),
                IntegraIMSS         = 0,
                ImpuestoSobreNomina = 0,
                Complemento         = false,
                IdPrestamo          = prestamoInfonavit?.Id ?? 0
            };

            return(item);

            //}
        }
Exemplo n.º 19
0
        public bool guardarPeriodo(int[] arrayE, string[] periodoDatos, int idsucursal, int idCliente, int idUsuario)
        {
            try
            {
                //validacion
                if (periodoDatos == null)
                {
                    return(false);
                }

                if (Convert.ToInt32(periodoDatos[1]) == 0)
                {
                    return(false);
                }

                using (var context = new RHEntities())
                {
                    var    fechaInicio = Convert.ToDateTime(periodoDatos[3]);
                    var    anio        = fechaInicio.Year.ToString();
                    int    mes         = fechaInicio.Month;
                    var    fechaActual = DateTime.Now;
                    double calc        = (double)mes / (double)2;
                    var    bim         = (int)Math.Ceiling(calc);
                    var    esSindicato = false;
                    int    tipoNomina  = 0;
                    List <Empleado_Contrato> listaContratos = new List <Empleado_Contrato>();

                    var ejercicio = context.NOM_Ejercicio_Fiscal.Where(x => x.Anio == anio).Select(x => x.IdEjercicio).FirstOrDefault();

                    if (arrayE != null)//Para crear un periodo vacio donde no hay empleado seleccionados
                    {
                        listaContratos = (from c in context.Empleado_Contrato
                                          where arrayE.Contains(c.IdEmpleado)
                                          select c).ToList();
                    }

                    bool soloComplemento = false;
                    if (periodoDatos.Length == 9)
                    {
                        soloComplemento = Convert.ToBoolean(periodoDatos[8]);
                    }

                    //Get tipo de Nomina del periodo
                    tipoNomina = Convert.ToInt32(periodoDatos[0]);

                    if (tipoNomina == 17) //Sindicato
                    {
                        esSindicato = true;
                    }

                    var item = new NOM_PeriodosPago
                    {
                        IdTipoNomina    = tipoNomina, // Convert.ToInt32(periodoDatos[0]),
                        DiasPeriodo     = Convert.ToInt32(periodoDatos[1]),
                        Descripcion     = periodoDatos[2],
                        Fecha_Inicio    = Convert.ToDateTime(periodoDatos[3]),
                        Fecha_Fin       = Convert.ToDateTime(periodoDatos[4]),
                        Fecha_Pago      = Convert.ToDateTime(periodoDatos[4]),
                        IdEjercicio     = ejercicio,
                        Bimestre        = bim,
                        IdSucursal      = idsucursal,
                        Ultimo          = Convert.ToBoolean(periodoDatos[5]),
                        Especial        = Convert.ToBoolean(periodoDatos[6]),
                        IdTipoNominaSat = Convert.ToInt32(periodoDatos[7]),
                        SoloComplemento = soloComplemento,
                        Sindicato       = esSindicato,
                        FechaReg        = DateTime.Now,
                        IdCliente       = idCliente,
                        IdUsuario       = idUsuario
                    };

                    if (tipoNomina == 16)         //Asimilado
                    {
                        item.IdTipoNominaSat = 2; //E - extraordinaria
                    }


                    if (item.IdTipoNomina <= 0)
                    {
                        return(false);
                    }

                    context.NOM_PeriodosPago.Add(item);
                    var t = context.SaveChanges();

                    int idperiodo = item.IdPeriodoPago;

                    List <NOM_Empleado_PeriodoPago> listaEmpleadosPerio = new List <NOM_Empleado_PeriodoPago>();

                    if (arrayE != null)
                    {
                        foreach (var p in arrayE)
                        {
                            var itemContrato =
                                listaContratos.OrderByDescending(x => x.IdContrato)
                                .FirstOrDefault(x => x.IdEmpleado == p);

                            var itemEp = new NOM_Empleado_PeriodoPago
                            {
                                IdEmpleado             = p,
                                IdPeriodoPago          = idperiodo,
                                DiasDescuentoInfonavit = -1,
                                IdContrato             = itemContrato?.IdContrato ?? 0
                            };

                            listaEmpleadosPerio.Add(itemEp);
                        }
                        //guardamos la lista
                        context.NOM_Empleado_PeriodoPago.AddRange(listaEmpleadosPerio);
                        context.SaveChanges();
                    }
                }


                return(true);
            }
            catch (Exception e)
            {
                return(false);
            }
        }
Exemplo n.º 20
0
        //private static List<int> CalcularAguinaldo(Dictionary<int, int> datosEmpleado, int idEjercicio, int idPeriodo, DateTime fechaUltimoDia, int idSucursal, int idUsuario)
        //{
        //    //PARAMETROS CON LA LISTA DE LAS FALTAS MODIFICADAS -
        //    //PARA APLICARLO AL CALCULO

        //    //Variables -
        //    int faltas = 0;
        //    int diasEjercicioFiscal = 365;//Obtener desde la BD
        //    List<int> aguinaldosGenerados = new List<int>();//guarda los registros de aguinaldos generados

        //    var listaKey = datosEmpleado.Select(x => x.Key).ToArray();

        //    //Contratos de los emplados - activos
        //    var listaContratos = _NominasDao.GetContratoEmpleados(listaKey, idSucursal);

        //    //Zona Salarial
        //    var zonaSalarial = _NominasDao.GetZonaSalario(); //Zona de Salario 73.04

        //    //Dias del Ejercicio
        //    var ejercicioFiscal = _NominasDao.GetEjercicioFiscal(idEjercicio);
        //    diasEjercicioFiscal = ejercicioFiscal.Dias;


        //    //Por cada Empleado
        //    foreach (var contrato in listaContratos)
        //    {
        //        //fecha inicial
        //        var fechaInicialFiscal = contrato.FechaAlta;
        //        var fechaInicialReal = contrato.FechaReal;

        //        //Si fecha Inicial Fiscal es menor a 01-01-del Año Actual se pondra 01-01-del año actual = 01-01-2016


        //        //dias laborados del año
        //        decimal diasLaboradosFiscal = Utils.GetDiasEntreDosFechas(fechaInicialFiscal, fechaUltimoDia);
        //        decimal diasLaboradosComplemento = Utils.GetDiasEntreDosFechas(fechaInicialReal, fechaUltimoDia);

        //        //Dias aguinaldo de la Tabla Factor de Integracion
        //        var añosAntiguedad = fechaUltimoDia.Year - contrato.FechaAlta.Year;
        //        var añosAntiguedadReal = fechaUltimoDia.Year - contrato.FechaReal.Year;

        //        var factorIntegracion = NominasDao.GetFactoresIntegracionByAntiguedad(añosAntiguedad);
        //        var diasAguinaldoCorrespondiente = factorIntegracion.DiasAguinaldo;//obtener desde la BD

        //        // Faltas e inasistencias -- ?? - OBTENERLAS DESDE LA VISTA - PARA RECIBIRLO COMO PARAMETRO
        //        var faltasDescontar = datosEmpleado.Where(x => x.Key == contrato.IdEmpleado).Select(p => p.Value).FirstOrDefault();
        //        faltas = faltasDescontar;

        //        //Dias proporcional de pago de los 15 dias correspondientes del año
        //        var diasCorrespondienteFiscal = ((diasLaboradosFiscal - faltas) * diasAguinaldoCorrespondiente) / diasEjercicioFiscal;
        //        var diasCorrespondienteReal = ((diasLaboradosComplemento - faltas) * diasAguinaldoCorrespondiente) / diasEjercicioFiscal;

        //        //Total Fiscal
        //        var TotalFiscal = diasCorrespondienteFiscal * contrato.SD;
        //        //Total Real
        //        var totalReal = diasCorrespondienteReal * contrato.SalarioReal;
        //        //Tope Fiscal
        //        var TopeFiscal = 30 * zonaSalarial.SMG;
        //        //Excento
        //        var exento = TotalFiscal > TopeFiscal ? TopeFiscal : TotalFiscal;
        //        //Gravado
        //        var Gravado = TopeFiscal > TotalFiscal ? (TotalFiscal - TopeFiscal) : 0;
        //        //Complemento
        //        var TotalComplemento = totalReal - TotalFiscal;
        //        //Total Aguinaldo
        //        var TotalAguinaldo = TotalComplemento + TotalFiscal;

        //        //Guardar el registro en la Base de Datos
        //        NOM_Aguinaldo itemAguinaldo = new NOM_Aguinaldo()
        //        {
        //            IdAguinaldo = 0,
        //            IdPeriodo = idPeriodo,
        //            IdContrato = contrato.IdContrato,
        //            IdEmpleado = contrato.IdEmpleado,
        //            DiasAguinaldoFiscal = diasAguinaldoCorrespondiente,
        //            DiasAguinaldoReal = diasAguinaldoCorrespondiente,
        //            SD = contrato.SD,
        //            SDReal = contrato.SalarioReal,
        //            SalarioMinimo = zonaSalarial.SMG,
        //            FechaAlta = contrato.FechaAlta,
        //            FechaAntiguedad = contrato.FechaReal,
        //            FechaUltimoDia = fechaUltimoDia,
        //            FechaInicialFiscal = fechaInicialFiscal,
        //            FechaInicialReal = fechaInicialReal,
        //            TotalFaltas = faltas,
        //            Incapacidades = 0,
        //            FaltasInjustificadas = 0,
        //            PermisoSinGose = 0,
        //            DiasEjercicioFiscal = diasEjercicioFiscal,
        //            DiasLaboradosFiscal = (int)diasLaboradosFiscal,
        //            DiasLaboradosComplemento = (int)diasLaboradosComplemento,
        //            DiasCorrespondientesFiscal = diasCorrespondienteFiscal,
        //            DiasCorrespondientesComplemento = diasCorrespondienteReal,
        //            TotalFiscal = TotalFiscal,
        //            TopeFiscal = TopeFiscal,
        //            Excento = exento,
        //            Gravado = Gravado,
        //            TotalReal = totalReal,
        //            Complemento = TotalComplemento,
        //            TotalAguinaldoNeto = TotalAguinaldo

        //        };

        //        _NominasDao.AddAguinaldo(itemAguinaldo);
        //        aguinaldosGenerados.Add(itemAguinaldo.IdAguinaldo);
        //    }

        //    return aguinaldosGenerados;
        //}

        private static List <NotificationSummary> CalcularAguinaldoA(int[] arrayIdEmpleado, string[] faltasCapturadas, bool[] generarPensionAlimenticia, int idPeriodo, int idCliente, int idSucursal, int idUsuario, bool anual)
        {
            List <NotificationSummary> summaryList = new List <NotificationSummary>();

            //VARIABLES
            decimal  sm            = 0;
            int      dias          = 30;
            decimal  sd            = 0;
            decimal  sdi           = 0;
            int      diasAguinaldo = 15;//default
            int      diasEjercicio = 365;
            DateTime primerDia;
            DateTime fechaUltimoDia;
            DateTime fechaIngreso       = DateTime.Now;
            int      faltas             = 0;
            int      faltaPersonalizada = -1;
            int      diasTrabajados     = 0;
            decimal  sueldoMensual      = 0;
            decimal  proporcion         = 0;
            decimal  topeExento         = 0;
            decimal  aguinaldo          = 0;
            decimal  parteExento        = 0;
            decimal  parteGravado       = 0;

            decimal neto = 0;
            // decimal complemento = 0;
            decimal total              = 0;
            decimal iSobreNomina       = 0;
            decimal factor             = 0;
            decimal antiguedad         = 0;
            decimal IngresoGravable    = 0;
            decimal IngresoGravable304 = 0;
            decimal parteComplemento   = 0;

            List <NOM_Nomina> listaNominasGeneradas = new List <NOM_Nomina>();

            //Obtenemos los contratos
            List <Empleado_Contrato>     listaContratos         = new List <Empleado_Contrato>();
            List <C_FactoresIntegracion> listaFactorIntegracion = new List <C_FactoresIntegracion>();
            ZonaSalario      itemZonaSalario = new ZonaSalario();
            ParametrosConfig itemConfigISN   = new ParametrosConfig();
            NOM_PeriodosPago periodoPago     = new NOM_PeriodosPago();

            List <Incapacidades> listaIncapacidades = new List <Incapacidades>();
            List <Inasistencias> listaInasistencias = new List <Inasistencias>();
            List <Permisos>      listaPermisos      = new List <Permisos>();

            List <NOM_Empleado_Complemento> listaDatosComplementosDelPeriodo = null;

            Sucursal itemSucursal = new Sucursal();



            if (arrayIdEmpleado == null)
            {
                return(null);
            }

            if (arrayIdEmpleado.Length <= 0)
            {
                return(null);
            }

            //VALIDACION TIMBRADOS

            #region VALIDA QUE EL EMPLEADO YA TENGA SU NOMINA TIMBRADA EN ESTE PERIODO - para no conciderar en el procesado estas nominas

            NominasDao _nominasDao = new NominasDao();

            var arrayidEmpleadosCfdiGenerados = _nominasDao.GetEmpleadosIdCfdiGenerados(arrayIdEmpleado, idPeriodo);

            if (arrayidEmpleadosCfdiGenerados.Length > 0)
            {
                var idEmpSumm = string.Join(",", arrayidEmpleadosCfdiGenerados);

                summaryList.Add(new NotificationSummary()
                {
                    Reg = 0, Msg1 = $"Los empleados con id: {idEmpSumm} tienen su nominas timbradas en este periodo. \n Ya no se pueden volver a procesar.", Msg2 = ""
                });

                //Filtra los empleados que ya se timbraron
                var arrayFiltro = Utils.ElimarEnArrarDeOtroArray(arrayIdEmpleado, arrayidEmpleadosCfdiGenerados);
                arrayIdEmpleado = arrayFiltro;
            }
            #endregion

            if (arrayIdEmpleado.Length <= 0)
            {
                return(null);
            }

            //Buscamos los id de la nomina de los empleados,
            //para eliminar las nominas que hayan sido procesadas con ese id de empleado en el mismo periodo
            #region SE ELIMINA LOS REGISTROS DEL PROCESADO ANTERIOR

            var arrayIdNominas = _nominasDao.GetNominasIdByEmpleados(arrayIdEmpleado, idPeriodo);

            //si la nomina fue procesada anteriormente, se eliminan sus registros, para guardar sus nuevos valores.
            if (arrayIdNominas.Length > 0)
            {
                NominasDao.EliminarAguinaldosProcesados(arrayIdNominas);
            }


            #endregion

            #region GET DATA

            using (var context = new RHEntities())
            {
                periodoPago = context.NOM_PeriodosPago.FirstOrDefault(x => x.IdPeriodoPago == idPeriodo);

                //VALIDACIONES
                if (periodoPago == null)
                {
                    summaryList.Add(new NotificationSummary()
                    {
                        Reg = idPeriodo, Msg1 = $"No se encontró el periodo {idPeriodo}.", Msg2 = ""
                    });
                    return(null);
                }


                itemSucursal = context.Sucursal.FirstOrDefault(x => x.IdSucursal == periodoPago.IdSucursal);

                listaDatosComplementosDelPeriodo = _nominasDao.GetDatosComplementoDelPeriodo(idPeriodo);


                var fechaInicial = new DateTime(periodoPago.Fecha_Inicio.Year, periodoPago.Fecha_Inicio.Month, periodoPago.Fecha_Inicio.Day, 05, 00, 0);
                var fechaFinal   = new DateTime(periodoPago.Fecha_Fin.Year, periodoPago.Fecha_Fin.Month, periodoPago.Fecha_Fin.Day, 23, 50, 0);


                listaContratos = (from c in context.Empleado_Contrato
                                  where arrayIdEmpleado.Contains(c.IdEmpleado) &&
                                  c.Status == true
                                  select c).ToList();

                listaIncapacidades = (from i in context.Incapacidades
                                      where arrayIdEmpleado.Contains(i.IdEmpleado) &&
                                      i.FechaInicio >= fechaInicial && i.FechaInicio <= fechaFinal &&
                                      (i.IdIncapacidadesSat == 2 || i.IdIncapacidadesSat == 3)
                                      select i).ToList();     //tipo 2,3 - idEmpleado - fi y ff

                listaInasistencias = (from i in context.Inasistencias
                                      where arrayIdEmpleado.Contains(i.IdEmpleado) &&
                                      i.Fecha >= fechaInicial && i.Fecha <= fechaFinal &&
                                      (i.IdTipoInasistencia == 3 || i.IdTipoInasistencia == 4 || i.IdTipoInasistencia == 5 || i.IdTipoInasistencia == 8 || i.IdTipoInasistencia == 9 || i.IdTipoInasistencia == 10 || i.IdTipoInasistencia == 11 || i.IdTipoInasistencia == 16)
                                      select i).ToList();    // tipo 3,4,5,8,9,10,11,16 - idEmpleado - fecha-fechafin

                listaPermisos = (from p in context.Permisos
                                 where arrayIdEmpleado.Contains(p.IdEmpleado) &&
                                 p.FechaInicio >= fechaInicial && p.FechaInicio <= fechaFinal
                                 select p).ToList();    // id Empleado - FechaInicio-Fechafin

                itemZonaSalario = context.ZonaSalario.FirstOrDefault(x => x.Status == true);

                listaFactorIntegracion = context.C_FactoresIntegracion.ToList();

                //  var strNumerador = ((ParametrosDeConfiguracion)intNumerador).ToString().ToUpper();

                int idConfig = (int)ParametrosDeConfiguracion.ISN;

                itemConfigISN = context.ParametrosConfig.FirstOrDefault(x => x.IdConfig == idConfig);
            }


            #endregion

            //primerDia = periodoPago.Fecha_Inicio;
            fechaUltimoDia = periodoPago.Fecha_Fin;

            if (itemZonaSalario != null)
            {
                sm = itemZonaSalario.UMA;
            }


            diasEjercicio = Utils.GetDiasDelAño(fechaUltimoDia);
            topeExento    = sm * dias;

            //Listas
            List <NOM_Nomina_Detalle> listaDetalles   = new List <NOM_Nomina_Detalle>();
            List <NOM_Aguinaldo>      listaAguinaldos = new List <NOM_Aguinaldo>();


            //Por cada empleado
            int index = 0;
            foreach (var idArrayEmpleado in arrayIdEmpleado)
            {
                CalculoAnual Canual = new CalculoAnual();
                bool         anualOK = false;
                decimal      isr = 0, saldo = 0;
                bool         calcularPensionA   = true;
                decimal      pensionAlimenticia = 0;

                primerDia = periodoPago.Fecha_Inicio;
                var itemContrato = listaContratos.OrderByDescending(x => x.IdContrato).FirstOrDefault(x => x.IdEmpleado == idArrayEmpleado);

                //Validar si el contrato es null
                if (itemContrato == null)
                {
                    summaryList.Add(new NotificationSummary()
                    {
                        Reg = idArrayEmpleado, Msg1 = $"No se encontró contrato para el empleado: {idArrayEmpleado}.", Msg2 = ""
                    });

                    index++;
                    continue;
                }

                //Valida que el SD o SDI sea mayor a cero
                if (itemContrato.SD == 0 || itemContrato.SDI == 0)
                {
                    summaryList.Add(new NotificationSummary()
                    {
                        Reg = idArrayEmpleado, Msg1 = $"El contrato {itemContrato.IdContrato} tiene los valores SD: {itemContrato.SD}, SDI:{itemContrato.SDI}", Msg2 = ""
                    });

                    // index++;
                    // continue;
                }

                if (itemContrato.FechaIMSS != null)
                {
                    fechaIngreso = itemContrato.FechaIMSS.Value;

                    if (itemContrato.FechaIMSS > periodoPago.Fecha_Inicio)
                    {
                        primerDia = itemContrato.FechaIMSS.Value;
                    }
                    if (anual == true && fechaIngreso < new DateTime(DateTime.Now.Year, 1, 1))
                    {
                        anualOK = true;
                    }
                }



                #region PROCESO CALCULO

                sd             = itemContrato.SD;
                sdi            = itemContrato.SDI;
                sueldoMensual  = 0;
                diasTrabajados = 0;
                //obtenemos los años de antiguedad
                antiguedad = fechaIngreso.Year - fechaUltimoDia.Year;

                if (antiguedad == 0)
                {
                    antiguedad = 1;
                }
                //buscamos en la lista de factores los dias de aguinaldo
                var itemFactorIntegracion = listaFactorIntegracion.FirstOrDefault(x => x.Antiguedad == antiguedad);

                if (itemFactorIntegracion != null)
                {
                    diasAguinaldo = itemFactorIntegracion.DiasAguinaldo;
                }

                //FALTAS
                faltas             = 0;
                faltaPersonalizada = GetFaltaPersonalizada(faltasCapturadas[index]);

                faltas = faltaPersonalizada >= 0 ? faltaPersonalizada : GetFaltas(idArrayEmpleado, listaIncapacidades, listaInasistencias, listaPermisos);

                diasTrabajados = Utils.GetDiasEntreDosFechas(primerDia, fechaUltimoDia) - faltas;    // diasEjercicio - faltas;

                sueldoMensual = dias * sd;

                proporcion = ((decimal)diasAguinaldo * (decimal)diasTrabajados) / (decimal)diasEjercicio;

                aguinaldo = sd * proporcion;

                if (aguinaldo <= topeExento)
                {
                    parteExento  = aguinaldo;
                    parteGravado = 0;
                }
                else
                {
                    parteExento  = topeExento;
                    parteGravado = aguinaldo - topeExento;
                }

                IngresoGravable    = sueldoMensual;
                IngresoGravable304 = ((parteGravado / diasTrabajados) * (decimal)30.40) + sueldoMensual;


                if (parteGravado > 0 && !anualOK)
                {
                    var IsrAguinaldo = MNominas.CalculoIsrSubsidio174(parteGravado, sd);
                    isr = IsrAguinaldo.ResultadoIsrOSubsidio;
                }
                if (anualOK)
                {
                    if (arrayIdNominas.Length > 0)
                    {
                        NominasDao.EliminarCalculosAnuales(arrayIdNominas);
                    }

                    Canual = MNominas.GetCalculoAnualconPrevision(idArrayEmpleado, periodoPago.IdEjercicio, sd, sdi, itemContrato.IdEmpresaFiscal, parteGravado, 0);
                    isr    = Canual.ResultadoIsrOSubsidio > 0 ? Math.Abs(Canual.ResultadoIsrOSubsidio) : 0;
                    saldo  = Canual.ResultadoIsrOSubsidio < 0 ? Math.Abs(Canual.ResultadoIsrOSubsidio) : 0;
                }
                neto = aguinaldo - isr;


                //PENSION ALIMENTICIA
                if (generarPensionAlimenticia != null)
                {
                    calcularPensionA = generarPensionAlimenticia[index];
                }

                if (calcularPensionA)
                {
                    if (itemContrato.PensionAlimenticiaPorcentaje != null)
                    {
                        decimal porcentaje = 0;

                        porcentaje = itemContrato.PensionAlimenticiaPorcentaje.Value;

                        if (porcentaje > 0)
                        {
                            pensionAlimenticia = (neto * (porcentaje / 100));

                            //Se le descuenta al neto
                            if (pensionAlimenticia > 0)
                            {
                                neto = (neto - pensionAlimenticia);
                            }
                        }
                    }
                }



                //parte de complemento
                //complemento = 0;



                var porcentajeSobreNomina = (decimal)0.03;

                if (itemConfigISN != null)
                {
                    porcentajeSobreNomina = itemConfigISN.ValorDecimal;
                }

                //iSobreNomina = (sd * diasAguinaldo) * porcentajeSobreNomina; // mty
                iSobreNomina = aguinaldo * porcentajeSobreNomina;    //cancun

                iSobreNomina = iSobreNomina.TruncateDecimal(2);

                //COMPLEMENTO
                parteComplemento = 0;


                #region NUEVO CÁLCULO DE COMPLEMENTO

                //Busca en la lista de Datos de Complemento lo correspondiente al colaborador
                //Obtenemos una lista con los concentos de complemento
                var complementoEmpleado =
                    listaDatosComplementosDelPeriodo.Where(x => x.IdEmpleado == itemContrato.IdEmpleado)
                    .ToList();

                //valida que la lista no este vacia
                if (complementoEmpleado?.Count > 0)
                {
                    //Complemento que se subio en el Layout
                    var sumaTotalComplemento = complementoEmpleado.Select(x => x.Cantidad).Sum();

                    //Regla se aplico en monterrey por causa de descuento de lado de complemento
                    //donde el complemento se queda menor que el fiscal y eso genera negativo
                    //para no aplicar negativo se pondra cero
                    if (neto > sumaTotalComplemento)
                    {
                        parteComplemento = 0;
                    }
                    else
                    {
                        parteComplemento = (sumaTotalComplemento - neto.TruncateDecimal(2));
                    }
                }

                #endregion


                total = parteComplemento + neto;


                #endregion

                #region item Nomina
                //1.-Crear un item para Nominas
                //1) Crear el registro de nomina --------------------------------------------
                NOM_Nomina itemNomina = new NOM_Nomina();
                itemNomina.IdNomina                             = 0;
                itemNomina.IdCliente                            = idCliente;
                itemNomina.IdSucursal                           = idSucursal;
                itemNomina.IdEjercicio                          = periodoPago.IdEjercicio;
                itemNomina.IdPeriodo                            = idPeriodo;
                itemNomina.IdEmpleado                           = itemContrato.IdEmpleado;
                itemNomina.IdContrato                           = itemContrato.IdContrato;
                itemNomina.FechaReg                             = DateTime.Now;
                itemNomina.IdUsuario                            = idUsuario;
                itemNomina.CFDICreado                           = false;
                itemNomina.TotalNomina                          = neto;
                itemNomina.TotalPercepciones                    = 0;
                itemNomina.TotalDeducciones                     = 0;
                itemNomina.TotalOtrosPagos                      = 0;
                itemNomina.TotalComplemento                     = parteComplemento;
                itemNomina.TotalImpuestoSobreNomina             = iSobreNomina;
                itemNomina.TotalImpuestoSobreNomina_Complemento = 0;
                itemNomina.TotalObligaciones                    = 0;
                itemNomina.TotalCuotasIMSS                      = 0;
                itemNomina.TotalCuotasIMSSComplemento           = 0;
                itemNomina.SubsidioCausado                      = 0;
                itemNomina.SubsidioEntregado                    = 0;
                itemNomina.ISRantesSubsidio                     = isr;
                itemNomina.SD                       = itemContrato.SD;
                itemNomina.SDI                      = itemContrato.SDI;
                itemNomina.SBC                      = itemContrato.SBC;
                itemNomina.SDReal                   = itemContrato.SalarioReal;
                itemNomina.IdEmpresaFiscal          = itemContrato.IdEmpresaFiscal;
                itemNomina.IdEmpresaComplemento     = itemContrato.IdEmpresaComplemento;
                itemNomina.IdEmpresaAsimilado       = itemContrato.IdEmpresaAsimilado;
                itemNomina.IdEmpresaSindicato       = itemContrato.IdEmpresaSindicato;
                itemNomina.IdMetodo_Pago            = itemContrato.FormaPago;
                itemNomina.Dias_Laborados           = diasTrabajados;
                itemNomina.Faltas                   = faltas;
                itemNomina.Prima_Riesgo             = 0;
                itemNomina.TipoTarifa               = 5;//mensual
                itemNomina.SBCotizacionDelProcesado = 0;
                itemNomina.XMLSinTimbre             = null;
                itemNomina.SMGV                     = itemZonaSalario.SMG;
                itemNomina.UMA                      = itemZonaSalario.UMA;


                _NominasDao.CrearNomina(itemNomina);
                listaNominasGeneradas.Add(itemNomina);
                #endregion

                #region item Detalle Nomina


                //2.- Crear un item para Detalle de nomina
                NOM_Nomina_Detalle itemNominaDetalle = new NOM_Nomina_Detalle();
                itemNominaDetalle.Id                  = 0;
                itemNominaDetalle.IdNomina            = itemNomina.IdNomina;
                itemNominaDetalle.IdConcepto          = 2;
                itemNominaDetalle.Total               = aguinaldo;
                itemNominaDetalle.GravadoISR          = parteGravado;
                itemNominaDetalle.ExentoISR           = parteExento;
                itemNominaDetalle.IntegraIMSS         = 0;
                itemNominaDetalle.ExentoIMSS          = 0;
                itemNominaDetalle.ImpuestoSobreNomina = iSobreNomina;
                itemNominaDetalle.Complemento         = false;
                itemNominaDetalle.IdPrestamo          = 0;

                listaDetalles.Add(itemNominaDetalle);

                if (isr > 0)
                {
                    NOM_Nomina_Detalle itemDetalleIsr = new NOM_Nomina_Detalle();
                    itemDetalleIsr.Id                  = 0;
                    itemDetalleIsr.IdNomina            = itemNomina.IdNomina;
                    itemDetalleIsr.IdConcepto          = 43;
                    itemDetalleIsr.Total               = isr;
                    itemDetalleIsr.GravadoISR          = 0;
                    itemDetalleIsr.ExentoISR           = 0;
                    itemDetalleIsr.IntegraIMSS         = 0;
                    itemDetalleIsr.ExentoIMSS          = 0;
                    itemDetalleIsr.ImpuestoSobreNomina = 0;
                    itemDetalleIsr.Complemento         = false;
                    itemDetalleIsr.IdPrestamo          = 0;

                    listaDetalles.Add(itemDetalleIsr);
                }

                // datos anual

                /* if (anualOK)
                 * {
                 *   NOM_Nomina_Detalle itemanual = new NOM_Nomina_Detalle()
                 *   {
                 *       Id = 0,
                 *       IdNomina = itemNomina.IdNomina,
                 *       IdConcepto = Canual.ResultadoIsrOSubsidio < 0 ? 143 : 43,
                 *       Total = Math.Abs(Canual.ResultadoIsrOSubsidio),
                 *       GravadoISR = 0,
                 *       ExentoISR = 0,
                 *       IntegraIMSS = 0,
                 *       ImpuestoSobreNomina = 0,
                 *       Complemento = false
                 *
                 *   };
                 *
                 *   listaDetalles.Add(itemanual);
                 *
                 * }*/

                if (pensionAlimenticia > 0)
                {
                    NOM_Nomina_Detalle itemPension = new NOM_Nomina_Detalle()
                    {
                        Id                  = 0,
                        IdNomina            = itemNomina.IdNomina,
                        IdConcepto          = 48,
                        Total               = pensionAlimenticia,
                        GravadoISR          = pensionAlimenticia,
                        ExentoISR           = 0,
                        IntegraIMSS         = 0,
                        ImpuestoSobreNomina = 0,
                        Complemento         = false
                    };

                    listaDetalles.Add(itemPension);
                }

                #endregion

                #region item Aguinaldo


                //3.- Creo un item para Aguinaldo

                NOM_Aguinaldo itemAguinaldo = new NOM_Aguinaldo();

                itemAguinaldo.IdAguinaldo         = 0;
                itemAguinaldo.IdEjercicio         = periodoPago.IdEjercicio;
                itemAguinaldo.IdPeriodo           = periodoPago.IdPeriodoPago;
                itemAguinaldo.IdContrato          = itemContrato.IdContrato;
                itemAguinaldo.IdEmpleado          = itemContrato.IdEmpleado;
                itemAguinaldo.IdNomina            = itemNomina.IdNomina;
                itemAguinaldo.SD                  = sd;
                itemAguinaldo.SDI                 = sdi;
                itemAguinaldo.SalarioMinimo       = sm;
                itemAguinaldo.DiasAguinaldo       = diasAguinaldo;
                itemAguinaldo.DiasEjercicioFiscal = diasEjercicio;
                itemAguinaldo.FechaIngreso        = fechaIngreso;
                itemAguinaldo.FechaPrimerDia      = primerDia;
                itemAguinaldo.FechaUltimoDia      = fechaUltimoDia;
                itemAguinaldo.TotalFaltas         = faltas;
                int?personalF = null;

                if (faltaPersonalizada >= 0)
                {
                    personalF = faltaPersonalizada;
                }

                itemAguinaldo.FaltasPersonalizadas = personalF;
                itemAguinaldo.Incapacidades        = 0;
                itemAguinaldo.FaltasInjustificadas = 0;
                itemAguinaldo.PermisoSinGose       = 0;
                itemAguinaldo.DiasTrabajados       = diasTrabajados;
                itemAguinaldo.SueldoMensual        = sueldoMensual;
                itemAguinaldo.Proporcion           = proporcion;
                itemAguinaldo.TopeExcento          = topeExento;
                itemAguinaldo.Aguinaldo            = aguinaldo;
                itemAguinaldo.Exento      = parteExento;
                itemAguinaldo.Gravado     = parteGravado;
                itemAguinaldo.ISR         = isr;
                itemAguinaldo.Neto        = neto;
                itemAguinaldo.Complemento = parteComplemento;
                itemAguinaldo.Total       = total;
                itemAguinaldo.ISN3        = iSobreNomina;
                itemAguinaldo.Factor      = factor;
                itemAguinaldo.FechaReg    = DateTime.Now;
                itemAguinaldo.CalcularPensionAlimenticia = calcularPensionA;
                itemAguinaldo.PensionAlimenticia         = pensionAlimenticia;
                itemAguinaldo.SaldoAnual = saldo;

                listaAguinaldos.Add(itemAguinaldo);

                #endregion



                index++;
            }                                                         //-> fin for
            NominasDao.GuardarDetallesNomina(listaDetalles, null, 0); //Aguinaldo - no aplica agregar incapacidades
            _NominasDao.AddRangeAguinaldos(listaAguinaldos);


            //Obtener las empresas fiscales
            var listaNominaA   = _nominasDao.GetDatosNominas(idPeriodo);
            var listaAguinaldo = _nominasDao.GetAguinaldosByIdPeriodo(idPeriodo);

            var empresaFiscal      = listaNominaA.Where(x => x.IdEmpresaFiscal != null).Select(x => x.IdEmpresaFiscal).Distinct().ToArray();
            var empresaComplemento = listaNominaA.Select(x => x.IdEmpresaComplemento).Distinct().ToArray();

            empresaFiscal      = empresaFiscal.Distinct().ToArray();
            empresaComplemento = empresaComplemento.Distinct().ToArray();

            var porcentajeIva = _nominasDao.PorcentajeIVA();

            foreach (var itemFiscal in empresaFiscal)
            {
                decimal isn             = 0;
                decimal totalPercepcion = 0;
                decimal totalFiscal     = 0;
                decimal totalPension    = 0;
                decimal relativo        = 0;

                isn = listaNominaA.Where(x => x.IdEmpresaFiscal == itemFiscal).Sum(x => x.TotalImpuestoSobreNomina);

                totalPercepcion = listaNominaA.Where(x => x.IdEmpresaFiscal == itemFiscal).Sum(x => x.TotalNomina);

                var arrayIdNom = listaNominaA.Select(x => x.IdNomina).ToArray();

                var listaA = (from p in listaAguinaldo where arrayIdNom.Contains(p.IdNomina) select p).ToList();

                totalPension = listaA.Sum(x => x.PensionAlimenticia);

                relativo = isn + totalPension;

                totalFiscal = relativo + totalPercepcion;

                _nominasDao.CrearFactura(idPeriodo, itemFiscal.Value, 0, isn, 0, 0, totalPension, relativo, totalPercepcion, totalFiscal, porcentajeIva);
            }

            foreach (var itemComp in empresaComplemento)
            {
                if (itemComp == null)
                {
                    continue;
                }

                decimal totalPercepcionesC = 0;


                decimal relativoC          = 0;
                decimal subTotalC          = 0;
                decimal totalIVAC          = 0;
                decimal totalComple        = 0;
                decimal porcentajeServicio = 0;
                decimal totalServicio      = 0;

                decimal isn = 0;

                isn = listaNominaA.Where(x => x.IdEmpresaComplemento == itemComp).Sum(x => x.TotalImpuestoSobreNomina);

                totalPercepcionesC = listaNominaA.Where(x => x.IdEmpresaComplemento == itemComp).Sum(x => x.TotalComplemento);


                //resultado complemento de la factura
                porcentajeServicio = itemSucursal.PorcentajeServicio;    //  _nominasDao.PorcentajeServicioHold(ppago.IdSucursal);
                porcentajeServicio = porcentajeServicio / 100;
                totalServicio      = totalPercepcionesC * porcentajeServicio;

                relativoC = isn;
                subTotalC = relativoC + totalPercepcionesC + totalServicio;

                totalIVAC   = (porcentajeIva / 100) * subTotalC;
                totalComple = totalIVAC + subTotalC;

                _nominasDao.CrearFacturaComplemento(idPeriodo, itemComp.Value, totalPercepcionesC, porcentajeServicio, totalServicio, 0, isn, relativoC, subTotalC, totalIVAC, totalComple);
            }


            return(summaryList);
        }
Exemplo n.º 21
0
        private static List <NOM_Nomina_Detalle> CalculoDeFonacot(NOM_Nomina nomina, NOM_PeriodosPago periodoPago)
        {
            decimal  totalDescuento = 0;
            DateTime fechaServidor  = DateTime.Now;
            List <NOM_Nomina_Detalle> listaFonacot = new List <NOM_Nomina_Detalle>();

            //1) Obtener los creditos fonacot
            var prestamosFonacot = NominasDao.GetPrestamosFonacotByIdContrato(nomina.IdContrato);

            if (prestamosFonacot.Count > 0)
            {
                //2) Por cada prestamo se obtiene su monto de descuento y se guarda en el detalle de la nomina con el id del Prestamo fonacot
                foreach (var prestamo in prestamosFonacot)
                {
                    //validar Saldo > 0
                    if (prestamo.Saldo <= 0)
                    {
                        continue;                      // nueva iteracion del for
                    }
                    //validar Fecha de Inicio del Descuento
                    //if (fechaServidor < prestamo.FechaInicioDescuento) continue;
                    //if (  periodoPago.Fecha_Inicio > prestamo.FechaInicioDescuento || periodoPago.Fecha_Fin > prestamo.FechaInicioDescuento) continue;

                    if (periodoPago.Fecha_Inicio < prestamo.FechaInicioDescuento && periodoPago.Fecha_Fin < prestamo.FechaInicioDescuento)
                    {
                        continue;
                    }
                    //validar FechaSuspension
                    //if (!(fechaServidor < prestamo.FechaSuspension)) continue;

                    //validar que la retencion no sea mayor que el saldo
                    var cantidadDescuento = prestamo.Retencion > prestamo.Saldo
                        ? prestamo.Saldo
                        : prestamo.Retencion;

                    //Guardar en el detalle de la nomina
                    //GuardarConcepto(nomina.IdNomina, 52, cantidadDescuento, 0, cantidadDescuento, 0, 0,false, prestamo.Id);
                    NOM_Nomina_Detalle item = new NOM_Nomina_Detalle()
                    {
                        Id                  = 0,
                        IdNomina            = nomina.IdNomina,
                        IdConcepto          = 52,
                        Total               = Utils.TruncateDecimales(cantidadDescuento),
                        GravadoISR          = 0,
                        ExentoISR           = Utils.TruncateDecimales(cantidadDescuento),
                        IntegraIMSS         = 0,
                        ImpuestoSobreNomina = 0,
                        Complemento         = false,
                        IdPrestamo          = prestamo.Id
                    };

                    //return item;

                    listaFonacot.Add(item);


                    //Guarda el total de todos los prestamos fonacot activos
                    totalDescuento += cantidadDescuento;
                }


                return(listaFonacot);
            }

            return(null);
        }
Exemplo n.º 22
0
        public string crearexcel(int idusuario, string ruta, int idSucursal, NOM_PeriodosPago Periodo, bool complemento, DateTime FechaIni, DateTime FechaFin)
        {
            using (var context = new RHEntities())
            {
                var cliente = (from c in context.Cliente
                               join s in context.Sucursal
                               on c.IdCliente equals s.IdCliente
                               where s.IdSucursal == idSucursal
                               select c.Nombre).FirstOrDefault();

                var sucursal = context.Sucursal.FirstOrDefault(x => x.IdSucursal == idSucursal);

                List <SucursalesEmpresa> ListaEmpresas = new List <SucursalesEmpresa>();
                ReportesDAO       rep     = new ReportesDAO();
                List <int>        lista   = new List <int>();
                List <NOM_Nomina> nominas = new List <NOM_Nomina>();
                ReportesDAO       banemp  = new ReportesDAO();

                bool spei, bnte;



                int CountTotal = 0;

                if (complemento == false) // pregunta si la sesion esta en modo complemento o no
                {
                    ListaEmpresas = rep.ListSucursalEmpresaFiscales(idSucursal);
                    // si no esta en modo complemento solo trae el listado de las empresas fiscales
                }
                else
                {
                    if (Periodo.Sindicato == false)
                    // si la sesion esta en modo complemento , pregunta si el periodo es sindicato o no
                    {
                        ListaEmpresas = rep.ListaSucursalesEmpresasConComplemento(idSucursal, Periodo);
                        // si es solo complemento /trae las empresas fiscales y complemento
                    }
                    else
                    {
                        ListaEmpresas = rep.ListaSucursalesEmpresasConSindicato(idSucursal);
                        // si es sindicato trae las empresas fiscales , complemento y sindicato
                    }
                }
                var idempelados = rep.GetIdEmpleadosProcesados(Periodo.IdPeriodoPago);

                if (idempelados == null)
                {
                    return("No se encontró datos en este periodo");
                }

                var newruta = ValidarFolderUsuario(idusuario, ruta);
                var nombre  = "Dispersion " + cliente + " del Periodo " + Periodo.Descripcion;
                newruta = newruta + nombre + ".xlsx";
                var wb = new XLWorkbook();



                foreach (var emp in ListaEmpresas)
                {
                    List <RegistroEmpleados> pago_efectivo = new List <RegistroEmpleados>();
                    spei = false;
                    bnte = false;
                    decimal total = 0, totale = 0, totalS = 0, totalB = 0, totalisr = 0;
                    if (Periodo.IdTipoNomina == 16)
                    {
                        nominas =
                            context.NOM_Nomina.Where(
                                x => x.IdPeriodo == Periodo.IdPeriodoPago && x.IdEmpresaAsimilado == emp.IdTabla)
                            .ToList();
                    }
                    else if (Periodo.SoloComplemento == false && Periodo.Sindicato == false)
                    {
                        nominas =
                            context.NOM_Nomina.Where(
                                x =>
                                x.IdPeriodo == Periodo.IdPeriodoPago &&
                                (x.IdEmpresaFiscal == emp.IdTabla || x.IdEmpresaComplemento == emp.IdTabla))
                            .ToList();
                    }
                    else if (Periodo.SoloComplemento == true)
                    {
                        nominas =
                            context.NOM_Nomina.Where(
                                x => x.IdPeriodo == Periodo.IdPeriodoPago && x.IdEmpresaComplemento == emp.IdTabla)
                            .ToList();
                    }
                    else if (Periodo.IdTipoNomina == 17 || Periodo.Sindicato == true)
                    {
                        nominas =
                            context.NOM_Nomina.Where(
                                x => x.IdPeriodo == Periodo.IdPeriodoPago && x.IdEmpresaSindicato == emp.IdTabla)
                            .ToList();
                    }

                    int count = 0;
                    int aux   = 1;


                    if (emp.RP != null)
                    {
                        CountTotal =
                            nominas.Count(x => x.IdEmpresaFiscal == emp.IdTabla || x.IdEmpresaAsimilado == emp.IdTabla);
                    }
                    else
                    {
                        CountTotal =
                            nominas.Count(
                                x => x.IdEmpresaComplemento == emp.IdTabla || x.IdEmpresaSindicato == emp.IdTabla);
                    }

                    string[] nombreEmpresa;
                    int      i = 7;
                    int      j = 0;

                    if (CountTotal >= 0)
                    {
                        if (Periodo.IdTipoNomina == 16)
                        {
                            var lista_idnomina = nominas.Select(x => x.IdNomina).ToList();
                            totalisr =
                                context.NOM_Nomina_Detalle.Where(
                                    x => x.IdConcepto == 43 && lista_idnomina.Contains(x.IdNomina))
                                .Select(x => x.Total)
                                .Sum();
                        }

                        nombreEmpresa = emp.Nombre.Split(' ');
                        var nombreHoja = "Dispersion " + nombreEmpresa[0];

                        if (nombreHoja.Length > 30)
                        {
                            nombreHoja = nombreHoja.Substring(0, 30);
                        }

                        var ws = wb.Worksheets.Add(nombreHoja);
                        ws.Cell("A3").Value = $"{cliente} - {sucursal.Ciudad}"; //mty
                        ws.Cell("A4").Value = emp.Nombre;
                        ws.Cell("A5").Value = "Dispersion";
                        ws.Cell("A6").Value = FechaIni.ToString("dd-MM-yyyy") + " al " + FechaFin.ToString("dd-MM-yyyy");

                        foreach (var em in nominas)
                        {
                            var listbank = banemp.datosBancariosByEmpresa(em.IdEmpleado);

                            if (!lista.Contains(listbank.IdBanco))
                            {
                                lista.Add(listbank.IdBanco);
                            }
                        }
                        List <ListadoBancoEmpleados> listadoRegistros = new List <ListadoBancoEmpleados>();
                        foreach (var b in lista)
                        {
                            var datos = rep.datosBancoEmpleados(b, nominas, emp.IdTabla);
                            listadoRegistros.Add(datos);
                        }



                        if (emp.RP != null)
                        {
                            foreach (var r in listadoRegistros)
                            {
                                if (r.IdBanco == 2)
                                {
                                    if (!bnte)
                                    {
                                        ws.Cell("A" + i).Value = r.NombreBanco;
                                        ws.Range("A" + i + ":E" + i).Merge();
                                        ws.Cell("A" + i)
                                        .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1);
                                        i++;
                                        ws.Cell("A" + i).Value = "NoSiga";
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("B" + i).Value = "NOMBRE DEL COLABORADOR";
                                        ws.Cell("B" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("C" + i).Value = "IMPORTE TOTAL";
                                        ws.Cell("C" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("D" + i).Value = "Cuenta";
                                        ws.Cell("D" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("E" + i).Value = "Metodo De Pago";
                                        ws.Cell("E" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        i++;
                                        bnte = true;
                                    }

                                    foreach (var e in r.empleados.OrderBy(x => x.NoSigaF).ThenBy(im => im.Importe))
                                    {
                                        if (e.tipocuenta != "Efectivo")
                                        {
                                            if (e.NoSigaF > 0)
                                            {
                                                ws.Cell("A" + i).Value = e.NoSigaF;
                                            }
                                            else
                                            {
                                                ws.Cell("A" + i).Value = 0;
                                            }

                                            ws.Cell("B" + i).Value = e.Empleado;
                                            ws.Cell("C" + i).Value = Utils.TruncateDecimales(e.Importe);
                                            ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                            ws.Cell("D" + i).Value    = e.cuenta;
                                            ws.Cell("D" + i).DataType = XLCellValues.Text;
                                            ws.Cell("E" + i).Value    = e.tipocuenta;


                                            total  = total + e.Importe;
                                            totalB = totalB + e.Importe;
                                            i++;
                                        }
                                        else
                                        {
                                            pago_efectivo.Add(e);
                                        }
                                    }
                                    ws.Cell("B" + i).Value                     = "Suma";
                                    ws.Cell("B" + i).Style.Font.Bold           = true;
                                    ws.Cell("C" + i).Value                     = totalB;
                                    ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                    ws.Cell("C" + i).Style.Font.Bold           = true;
                                    i++;
                                }
                                else
                                {
                                    if (!spei)
                                    {
                                        ws.Cell("A" + i).Value = "SPEI";
                                        ws.Range("A" + i + ":E" + i).Merge();
                                        ws.Cell("A" + i)
                                        .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1);
                                        i++;
                                        ws.Cell("A" + i).Value = "NoSiga";
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("B" + i).Value = "NOMBRE DEL COLABORADOR";
                                        ws.Cell("B" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("C" + i).Value = "IMPORTE TOTAL";
                                        ws.Cell("C" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("D" + i).Value = "Cuenta";
                                        ws.Cell("D" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("E" + i).Value = "Metodo De Pago";
                                        ws.Cell("E" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        i++;
                                        spei = true;
                                    }



                                    foreach (var e in r.empleados.OrderBy(x => x.NoSigaF).ThenBy(im => im.Importe))
                                    {
                                        if (e.tipocuenta != "Efectivo")
                                        {
                                            if (e.NoSigaF > 0)
                                            {
                                                ws.Cell("A" + i).Value = e.NoSigaF;
                                            }
                                            else
                                            {
                                                ws.Cell("A" + i).Value = 0;
                                            }

                                            ws.Cell("B" + i).Value = e.Empleado;
                                            ws.Cell("C" + i).Value = Utils.TruncateDecimales(e.Importe);
                                            ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                            ws.Cell("D" + i).Value    = e.cuenta;
                                            ws.Cell("D" + i).DataType = XLCellValues.Text;
                                            ws.Cell("E" + i).Value    = e.tipocuenta;
                                            total  = total + e.Importe;
                                            totalS = totalS + e.Importe;
                                            i++;
                                        }
                                        else
                                        {
                                            pago_efectivo.Add(e);
                                        }
                                    }


                                    count++;
                                    aux++;
                                }
                            }

                            if (spei)
                            {
                                ws.Cell("B" + i).Value                     = "Suma";
                                ws.Cell("B" + i).Style.Font.Bold           = true;
                                ws.Cell("C" + i).Value                     = totalS;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                ws.Cell("C" + i).Style.Font.Bold           = true;
                            }
                        }
                        else
                        {
                            foreach (var r in listadoRegistros)
                            {
                                if (r.IdBanco == 2)
                                {
                                    if (!bnte)
                                    {
                                        ws.Cell("A" + i).Value = r.NombreBanco;
                                        ws.Range("A" + i + ":E" + i).Merge();
                                        ws.Cell("A" + i)
                                        .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1);
                                        i++;
                                        ws.Cell("A" + i).Value = "NoSiga";
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("B" + i).Value = "NOMBRE DEL COLABORADOR";
                                        ws.Cell("B" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("C" + i).Value = "IMPORTE TOTAL";
                                        ws.Cell("C" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("D" + i).Value = "Cuenta";
                                        ws.Cell("D" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("E" + i).Value = "Metodo De Pago";
                                        ws.Cell("E" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        i++;
                                        bnte = true;
                                    }

                                    foreach (var e in r.empleados.OrderBy(x => x.NoSigaC).ThenBy(im => im.Importe))
                                    {
                                        if (e.tipocuenta != "Efectivo")
                                        {
                                            if (e.NoSigaC > 0)
                                            {
                                                ws.Cell("A" + i).Value = e.NoSigaC;
                                            }
                                            else
                                            {
                                                ws.Cell("A" + i).Value = 0;
                                            }

                                            ws.Cell("B" + i).Value = e.Empleado;
                                            ws.Cell("C" + i).Value = Utils.TruncateDecimales(e.Importe);
                                            ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                            ws.Cell("D" + i).Value    = e.cuenta;
                                            ws.Cell("D" + i).DataType = XLCellValues.Text;
                                            ws.Cell("E" + i).Value    = e.tipocuenta;
                                            total  = total + e.Importe;
                                            totalB = totalB + e.Importe;
                                            i++;
                                        }
                                        else
                                        {
                                            pago_efectivo.Add(e);
                                        }
                                    }
                                    ws.Cell("B" + i).Value                     = "Suma";
                                    ws.Cell("B" + i).Style.Font.Bold           = true;
                                    ws.Cell("C" + i).Value                     = totalB;
                                    ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                    ws.Cell("C" + i).Style.Font.Bold           = true;
                                    i++;
                                }
                                else
                                {
                                    if (!spei)
                                    {
                                        ws.Cell("A" + i).Value = "SPEI";
                                        ws.Range("A" + i + ":E" + i).Merge();
                                        ws.Cell("A" + i)
                                        .Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1);
                                        i++;
                                        ws.Cell("A" + i).Value = "NoSiga";
                                        ws.Cell("A" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("B" + i).Value = "NOMBRE DEL COLABORADOR";
                                        ws.Cell("B" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("C" + i).Value = "IMPORTE TOTAL";
                                        ws.Cell("C" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("D" + i).Value = "Cuenta";
                                        ws.Cell("D" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        ws.Cell("E" + i).Value = "Metodo De Pago";
                                        ws.Cell("E" + i).Style.Fill.BackgroundColor =
                                            XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                                        i++;
                                        spei = true;
                                    }



                                    foreach (var e in r.empleados.OrderBy(x => x.NoSigaC).ThenBy(im => im.Importe))
                                    {
                                        if (e.tipocuenta != "Efectivo")
                                        {
                                            if (e.NoSigaC > 0)
                                            {
                                                ws.Cell("A" + i).Value = e.NoSigaC;
                                            }
                                            else
                                            {
                                                ws.Cell("A" + i).Value = 0;
                                            }

                                            ws.Cell("B" + i).Value = e.Empleado;
                                            ws.Cell("C" + i).Value = Utils.TruncateDecimales(e.Importe);
                                            ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                            ws.Cell("D" + i).Value    = e.cuenta;
                                            ws.Cell("D" + i).DataType = XLCellValues.Text;
                                            ws.Cell("E" + i).Value    = e.tipocuenta;
                                            total  = total + e.Importe;
                                            totalS = totalS + e.Importe;
                                            i++;
                                        }
                                        else
                                        {
                                            pago_efectivo.Add(e);
                                        }
                                    }



                                    aux++;
                                }
                            }

                            if (spei)
                            {
                                ws.Cell("B" + i).Value                     = "Suma";
                                ws.Cell("B" + i).Style.Font.Bold           = true;
                                ws.Cell("C" + i).Value                     = totalS;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                ws.Cell("C" + i).Style.Font.Bold           = true;
                            }
                        }
                        //////////////////////////////////////////////////////////////////////////////
                        i++;
                        ws.Cell("A" + i).Value = "EFECTIVO";
                        ws.Range("A" + i + ":E" + i).Merge();
                        ws.Cell("A" + i).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);
                        ws.Cell("A" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1);
                        i++;
                        ws.Cell("A" + i).Value = "NoSiga";
                        ws.Cell("A" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                        ws.Cell("B" + i).Value = "NOMBRE DEL COLABORADOR";
                        ws.Cell("B" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                        ws.Cell("C" + i).Value = "IMPORTE TOTAL";
                        ws.Cell("C" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                        ws.Cell("D" + i).Value = "Cuenta";
                        ws.Cell("D" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                        ws.Cell("E" + i).Value = "Metodo De Pago";
                        ws.Cell("E" + i).Style.Fill.BackgroundColor = XLColor.FromTheme(XLThemeColor.Accent1, 0.5);
                        i++;
                        foreach (var e in pago_efectivo.OrderBy(x => x.NoSigaC).ThenBy(im => im.Importe))
                        {
                            if (e.NoSigaC > 0)
                            {
                                ws.Cell("A" + i).Value = e.NoSigaC;
                            }
                            else
                            {
                                ws.Cell("A" + i).Value = 0;
                            }

                            ws.Cell("B" + i).Value = e.Empleado;
                            ws.Cell("C" + i).Value = Utils.TruncateDecimales(e.Importe);
                            ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                            ws.Cell("D" + i).Value    = e.cuenta;
                            ws.Cell("D" + i).DataType = XLCellValues.Text;
                            ws.Cell("E" + i).Value    = e.tipocuenta;
                            total  = total + e.Importe;
                            totale = totale + e.Importe;
                            i++;
                        }
                        ws.Cell("B" + i).Value                     = "Suma";
                        ws.Cell("B" + i).Style.Font.Bold           = true;
                        ws.Cell("C" + i).Value                     = totale;
                        ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                        ws.Cell("C" + i).Style.Font.Bold           = true;
                        i++;
                        /////////////////////////////////////////////////////

                        ws.Cell("B" + i).Value                       = "Total Dispersion:";
                        ws.Cell("B" + i).Style.Font.Bold             = true;
                        ws.Cell("C" + i).Value                       = total;
                        ws.Cell("C" + i).Style.NumberFormat.Format   = "$ #,##0.00";
                        ws.Cell("C" + i).Style.Font.Bold             = true;
                        ws.Cell("C" + i).Style.Font.FontSize         = 13;
                        ws.Cell("C" + i).Style.Border.TopBorder      = XLBorderStyleValues.Medium;
                        ws.Cell("C" + i).Style.Border.TopBorderColor = XLColor.Black;
                        /////////////////////////////////////////////////////
                        if (emp.RP != null)
                        {
                            var factura =
                                context.NOM_Facturacion.Where(
                                    x => x.IdEmpresaFi_As == emp.IdTabla && x.IdPeriodo == Periodo.IdPeriodoPago)
                                .FirstOrDefault();
                            if (factura != null)
                            {
                                #region FACTURA

                                i = i + 2;
                                ws.Cell("B" + i).Value = "Relativos";
                                ws.Range("B" + i + ":F" + i).Merge();
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                                .Font.SetBold();
                                i = i + 1;

                                ws.Cell("B" + i).Value = "CUOTAS IMSS E INFONAVIT";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Cuota_IMSS_Infonavit;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IMPUESTO SOBRE NOMINAS";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Impuesto_Nomina;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "AMORTIZACION INFONAVIT";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Amortizacion_Infonavit;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;

                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                if (Periodo.IdTipoNomina == 16)
                                {
                                    ws.Cell("B" + i).Value = "ISR";
                                    ws.Cell("C" + i).Value = totalisr;
                                }
                                else
                                {
                                    ws.Cell("B" + i).Value = "FONACOT";
                                    ws.Cell("C" + i).Value = factura.F_Fonacot;
                                }
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                if (factura.F_Pension_Alimenticia > 0)
                                {
                                    ws.Cell("B" + i).Value = "PENSION ALIMENTICIA";
                                    ws.Cell("B" + i).Style
                                    .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                    .Font.SetBold();
                                    ws.Cell("C" + i).Value = factura.F_Pension_Alimenticia;
                                    ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                    i = i + 1;
                                }

                                ws.Cell("B" + i).Value = "RELATIVO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Relativo + totalisr;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "TOTAL PERCEPCIONES";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Total_Nomina;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "TOTAL NETO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.F_Total_Fiscal + totalisr;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;

                                #endregion
                            }
                        }
                        else
                        {
                            var factura =
                                context.NOM_FacturacionComplemento.Where(
                                    x => x.IdPeriodo == Periodo.IdPeriodoPago && x.IdEmpresaC == emp.IdTabla)
                                .FirstOrDefault();

                            var facturaS =
                                context.NOM_FacturacionSindicato.Where(
                                    x => x.IdPeriodo == Periodo.IdPeriodoPago && x.IdEmpresaS == emp.IdTabla)
                                .FirstOrDefault();

                            if (factura != null)
                            {
                                #region FACTURA
                                i = i + 2;
                                ws.Cell("B" + i).Value = "FACTURACION";
                                ws.Range("B" + i + ":F" + i).Merge();
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                                .Font.SetBold();
                                i = i + 1;

                                ws.Cell("B" + i).Value = "PERCEPCIONES";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Percepciones;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "SERVICIOS " + factura.C_Porcentaje_Servicio;
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Total_Servicio;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;



                                ws.Cell("B" + i).Value = "RELATIVO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Relativos;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "DESCUENTOS";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Descuentos;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "OTROS";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Otros;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "SUBTOTAL";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Subtotal;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IVA";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Total_IVA;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "TOTAL NETO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = factura.C_Total_Complemento;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                #endregion
                            }
                            else if (facturaS != null) // facturacion de sindicato
                            {
                                #region FACTURA S



                                i = i + 2;
                                ws.Cell("B" + i).Value = "FACTURACION";
                                ws.Range("B" + i + ":F" + i).Merge();
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                                .Font.SetBold();
                                i = i + 1;

                                ws.Cell("B" + i).Value = "PERCEPCIONES SINDICATO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Percepcion_Sindicato;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "SERVICIOS " + facturaS.S_Porcentaje_Comision;
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Total_Comision;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;


                                ws.Cell("B" + i).Value = "PERCEPCIONES FISCAL";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Percepcion_Fiscal;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IVA PERCEPCION FISCAL";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_IVA_Percepcion_Fiscal;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;


                                ws.Cell("B" + i).Value = "DIFERENCIA EMPRESA";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Dif_Montvde;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "CUOTA LEGADO";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Cuota_Legado;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "COSTO IMSS";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Costo_IMSS;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IVA COSTO IMSS";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_IVA_Costo_IMSS;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IMPUESTO SOBRE NOMINA";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Total_Porcentaje_Nomina;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "IVA IMPUESTO SOBRE NOMINA";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_IVA_Porcentaje_Nomina;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;
                                ws.Cell("B" + i).Value = "TOTAL FACTURA";
                                ws.Cell("B" + i).Style
                                .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left)
                                .Font.SetBold();
                                ws.Cell("C" + i).Value = facturaS.S_Total_Sindicato;
                                ws.Cell("C" + i).Style.NumberFormat.Format = "$ #,##0.00";
                                i = i + 1;


                                #endregion
                            }
                        }


                        //ESTILOS DE LAS CELDAS
                        #region ESTILOS
                        ws.Range("A3:E3").Merge();
                        ws.Cell("A3").Style
                        .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                        .Font.SetBold();
                        ws.Range("A4:E4").Merge();
                        ws.Cell("A4").Style
                        .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center)
                        .Font.SetBold();

                        ws.Range("A5:E5").Merge();
                        ws.Cell("A5").Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);

                        ws.Range("A6:E6").Merge();
                        ws.Cell("A6").Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center);

                        ws.Columns("8,1").AdjustToContents();
                        ws.Columns("8,2").AdjustToContents();
                        ws.Columns("8,3").AdjustToContents();
                        ws.Columns("8,4").AdjustToContents();
                        ws.Columns("8,5").AdjustToContents();
                        #endregion
                    }
                }
                wb.SaveAs(newruta);

                //Guardar como, y aqui ponemos la ruta de nuestro archivo

                return(newruta);
            }
        }
Exemplo n.º 23
0
        public List <EmpleadoIncidencias> GetIncidenciasByPeriodo(NOM_PeriodosPago ppago, int[] idEmpleados = null)
        {
            int[] empleadosArray;

            //Generar Array de IdEmpleados
            if (idEmpleados == null)
            {
                //Obtiene el id de todos los empleados que estan asignado al periodo

                empleadosArray = ctx.NOM_Empleado_PeriodoPago.Where(x => x.IdPeriodoPago == ppago.IdPeriodoPago)
                                 .Select(x => x.IdEmpleado)
                                 .ToArray();
            }
            else
            {
                //id de empleados especificos
                empleadosArray = idEmpleados;
            }

            //var empleados = ctx.NOM_Empleado_PeriodoPago.Where(x => x.IdPeriodoPago == ppago.IdPeriodoPago).ToList();

            var lista = new List <EmpleadoIncidencias>();

            Periodo = ppago;
            Empleados emp = new Empleados();

            foreach (var item in empleadosArray)
            {
                IncXEmpleado = new List <Incidencia>();
                IdEmpleado   = item;
                //   string nombreEmpleado = emp.GetNombreCompleto(IdEmpleado);
                NumDias = Periodo.DiasPeriodo;

                var empComp = ctx.Empleado.FirstOrDefault(x => x.IdEmpleado == item);

                EmpleadoIncidencias empIn = new EmpleadoIncidencias();
                empIn.IdEmpleado = IdEmpleado;

                //empIn.NombreEmpleado = nombreEmpleado;
                empIn.Paterno = empComp.APaterno;
                empIn.Materno = empComp.AMaterno;
                empIn.Nombres = empComp.Nombres;

                var fecha = Periodo.Fecha_Inicio;

                while (fecha <= Periodo.Fecha_Fin)
                {
                    var inc = new Incidencia
                    {
                        Fecha          = fecha,
                        TipoIncidencia = "X",
                        SePaga         = true
                    };

                    IncXEmpleado.Add(inc);

                    //incrementa la fecha en uno
                    fecha = fecha.AddDays(1);
                }

                //GetDiasFestivos();
                GetDiasDescanso();
                //GetVacaciones();
                //GetPermisos();
                //GetInasistencias();
                //GetIncapacidades();
                GetNuevoIngreso();
                GetBajas();

                empIn.Incidencias = IncXEmpleado;
                empIn.DiasAPagar  = NumDias;
                empIn.idPeriodo   = Periodo.IdPeriodoPago;
                lista.Add(empIn);
            }
            return(lista);
        }
Exemplo n.º 24
0
 /// <summary>
 /// Prestamo Infonavit = 25
 /// </summary>
 /// <param name="nomina"></param>
 /// <param name="periodoPago"></param>
 /// <returns></returns>
 public static NOM_Nomina_Detalle PrestamoInfonavit(NOM_Nomina nomina, NOM_PeriodosPago periodoPago, int dias)
 {
     return(CalculoDeInfonavit(nomina, periodoPago, dias));
 }
Exemplo n.º 25
0
        //private void GetVacaciones()
        //{
        //    var vacaciones = (from v in ctx.Vacaciones
        //                      join pv in ctx.PeriodoVacaciones on v.IdPeridoVacaciones equals pv.IdPeridoVacaciones
        //                      join con in ctx.Empleado_Contrato on pv.IdEmpleado_Contrato equals con.IdContrato
        //                      where con.IdEmpleado == IdEmpleado &&
        //                      ((v.FechaInicio >= Periodo.Fecha_Inicio && v.FechaInicio <= Periodo.Fecha_Fin) || (v.FechaFin >= Periodo.Fecha_Inicio && v.FechaFin <= Periodo.Fecha_Fin))
        //                      select v
        //            ).ToList();


        //    foreach (var vacacion in vacaciones)
        //    {
        //        SetIncidencias(vacacion.FechaInicio, vacacion.FechaFin, "V", vacacion.Id);
        //    }
        //}

        private void GetVacaciones2(List <Vacaciones> listaV, List <PeriodoVacaciones> listaPV, List <Empleado_Contrato> listaC, NOM_PeriodosPago periodoP, int idEmpleado)
        {
            var listaVac = (from v in listaV
                            join pv in listaPV on v.IdPeridoVacaciones equals pv.IdPeridoVacaciones
                            join con in listaC on pv.IdEmpleado_Contrato equals con.IdContrato
                            where con.IdEmpleado == idEmpleado &&
                            //((v.FechaInicio >= periodoP.Fecha_Inicio && v.FechaInicio <= periodoP.Fecha_Fin) || (v.FechaFin >= periodoP.Fecha_Inicio && v.FechaFin <= periodoP.Fecha_Fin))
                            //((periodoP.Fecha_Inicio >= v.FechaInicio && periodoP.Fecha_Inicio <= v.FechaFin)||(periodoP.Fecha_Fin >= v.FechaInicio && periodoP.Fecha_Fin <= v.FechaFin))
                            ((periodoP.Fecha_Inicio >= v.FechaInicio && periodoP.Fecha_Inicio <= v.FechaFin) || (periodoP.Fecha_Fin >= v.FechaInicio))
                            select v).ToList();


            foreach (var vacacion in listaVac)
            {
                var dias = Utils.GetDiasByPeriodoRange(vacacion.FechaInicio, vacacion.FechaFin, periodoP.Fecha_Inicio, periodoP.Fecha_Fin);

                if (dias > 0)
                {
                    SetIncidencias(vacacion.FechaInicio, vacacion.FechaFin, "V", vacacion.Id, pagarDia: true);
                }
            }
        }
Exemplo n.º 26
0
        public void UpdatePeriodoPago(NOM_PeriodosPago updatedModel)
        {
            PeriodosPago p = new PeriodosPago();

            p.UpdatePeriodoPago(updatedModel);
        }
Exemplo n.º 27
0
        private void GetInasistencias2Nominas(List <Inasistencias> listaInasistenciasNomina, int idEmpleado, int diasDelPeriodo, NOM_PeriodosPago periodoP)
        {
            var inas = listaInasistenciasNomina.Where(x => x.IdEmpleado == idEmpleado).ToList();

            foreach (var inasistencia in inas)
            {
                var tipoInasistencia = ctx.C_TiposInasistencia.FirstOrDefault(x => x.IdTipoInasistencia == inasistencia.IdTipoInasistencia);

                if (!tipoInasistencia.DerechoPago)
                {
                    if (inasistencia.FechaFin != null)
                    {
                        var dias = Utils.GetDiasByPeriodoRange(inasistencia.Fecha, inasistencia.FechaFin.Value.Date,
                                                               periodoP.Fecha_Inicio, periodoP.Fecha_Fin);

                        //if (dias > 0)
                        //{
                        // NumDias = NumDias - inasistencia.Dias;
                        //SetIncidencias(inasistencia.Fecha, inasistencia.FechaFin.Value.Date, tipoInasistencia.Clave, inasistencia.IdInasistencia, pagarDia: false);
                        if (SetIncidenciasInasistencia(inasistencia.Fecha, inasistencia.FechaFin.Value.Date, tipoInasistencia.Clave, inasistencia.IdInasistencia, derechoPago: false))
                        {
                            if (dias > 0)
                            {
                                NumDias = NumDias - inasistencia.Dias;
                            }
                        }
                        // }
                    }
                }
                else
                {
                    //Valida si esa fecha ya la tiene como asistencia
                    // si lo tiene como falta lo cambia a asistencia e incrementa los dias

                    if (SetIncidenciasInasistencia(inasistencia.Fecha, inasistencia.FechaFin.Value.Date, tipoInasistencia.Clave, inasistencia.IdInasistencia, derechoPago: true))
                    {
                        NumDias = NumDias + inasistencia.Dias;
                    }
                }
            }

            //Esto es para el caso que si RH agrego como faltas
            //Pero nomina agrega las mismas fechas pero como asistencias
            if (NumDias > diasDelPeriodo)
            {
                NumDias = diasDelPeriodo;
            }
        }
Exemplo n.º 28
0
 /// <summary>
 /// Prestamo Fonacot = 26
 /// </summary>
 /// <param name="nomina"></param>
 /// <returns></returns>
 public static List <NOM_Nomina_Detalle> PrestamoFonacot(NOM_Nomina nomina, NOM_PeriodosPago periodoPago)
 {
     return(CalculoDeFonacot(nomina, periodoPago));
 }
Exemplo n.º 29
0
        //private void GetIncapacidades()
        //{
        //    var incapacidades = ctx.Incapacidades.Where(x => x.IdEmpleado == IdEmpleado &&
        //        ((x.FechaInicio >= Periodo.Fecha_Inicio && x.FechaInicio <= Periodo.Fecha_Fin) || (x.FechaFin >= Periodo.Fecha_Inicio && x.FechaFin <= Periodo.Fecha_Fin))
        //    ).ToList();


        //    foreach (var incapacidad in incapacidades)
        //    {
        //        if (incapacidad.IdIncapacidadesSat == 1)
        //        {
        //            SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IR", incapacidad.Id, isIncapaciodad: true);
        //        }
        //        else if (incapacidad.IdIncapacidadesSat == 2)
        //        {
        //            SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IE", incapacidad.Id, isIncapaciodad: true);
        //        }
        //        else
        //        {
        //            SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IM", incapacidad.Id, isIncapaciodad: true);
        //        }

        //    }
        //}

        private void GetIncapacidades2(List <Incapacidades> listaIncapacidades, int idEmpleado, NOM_PeriodosPago periodosPago)
        {
            var incapacidades = listaIncapacidades.Where(x => x.IdEmpleado == idEmpleado).ToList();

            foreach (var incapacidad in incapacidades)
            {
                if (incapacidad.IdIncapacidadesSat == 1)
                {
                    var dias = Utils.GetDiasByPeriodoRange(incapacidad.FechaInicio, incapacidad.FechaFin, periodosPago.Fecha_Inicio, periodosPago.Fecha_Fin);

                    if (dias > 0)
                    {
                        NumDias -= dias;

                        SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IR", incapacidad.Id, isIncapaciodad: true, pagarDia: false);
                    }
                }
                else if (incapacidad.IdIncapacidadesSat == 2)
                {
                    var dias = Utils.GetDiasByPeriodoRange(incapacidad.FechaInicio, incapacidad.FechaFin, periodosPago.Fecha_Inicio, periodosPago.Fecha_Fin);

                    if (dias > 0)
                    {
                        NumDias -= dias;
                        SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IE", incapacidad.Id, isIncapaciodad: true, pagarDia: false);
                    }
                }
                else
                {
                    var dias = Utils.GetDiasByPeriodoRange(incapacidad.FechaInicio, incapacidad.FechaFin, periodosPago.Fecha_Inicio, periodosPago.Fecha_Fin);
                    if (dias > 0)
                    {
                        NumDias -= dias;
                        SetIncidencias(incapacidad.FechaInicio, incapacidad.FechaFin, "IM", incapacidad.Id, isIncapaciodad: true, pagarDia: false);
                    }
                }
            }
        }
Exemplo n.º 30
0
        public List <EmpleadoIncidencias> GetIncidenciasByPeriodo2(NOM_PeriodosPago ppago, int[] idEmpleados = null)
        {
            int[] empleadosArray;

            //Generar Array de IdEmpleados
            if (idEmpleados == null)
            {
                //Obtiene el id de todos los empleados que estan asignado al periodo
                using (var context = new RHEntities())
                {
                    empleadosArray = context.NOM_Empleado_PeriodoPago.Where(x => x.IdPeriodoPago == ppago.IdPeriodoPago)
                                     .Select(x => x.IdEmpleado)
                                     .ToArray();
                }
            }
            else
            {
                //id de empleados especificos
                empleadosArray = idEmpleados;
            }



            var lista = new List <EmpleadoIncidencias>();

            Periodo = ppago;
            Empleados emp = new Empleados();


            //GET - Lista Empleados
            List <Empleado>          listaEmpleados            = new List <Empleado>();
            List <C_DiasFestivos>    listaDiasFestivos         = new List <C_DiasFestivos>();
            List <Empleado_Contrato> listaContratos            = new List <Empleado_Contrato>();
            List <Vacaciones>        listaVacaciones           = new List <Vacaciones>();
            List <PeriodoVacaciones> listaPeriodoVacaciones    = new List <PeriodoVacaciones>();
            List <Permisos>          listaPermisos             = new List <Permisos>();
            List <Inasistencias>     listaInasistenciasNominas = new List <Inasistencias>();
            List <Inasistencias>     listaInasistenciasRH      = new List <Inasistencias>();
            List <Incapacidades>     listaIncapacidades        = new List <Incapacidades>();

            using (var context = new RHEntities())
            {
                listaEmpleados = (from e in context.Empleado
                                  where empleadosArray.Contains(e.IdEmpleado)
                                  select e).ToList();

                listaContratos = (from c in context.Empleado_Contrato
                                  where empleadosArray.Contains(c.IdEmpleado)
                                  select c).ToList();

                // listaDiasFestivos = context.C_DiasFestivos.Where(x => x.Fecha >= Periodo.Fecha_Inicio && x.Fecha <= Periodo.Fecha_Fin).ToList();
                listaDiasFestivos = context.C_DiasFestivos.Where(x => Periodo.Fecha_Inicio >= x.Fecha && Periodo.Fecha_Inicio <= x.Fecha).ToList();



                //Lista Vacaciones
                listaVacaciones = (from v in context.Vacaciones
                                   //where ((v.FechaInicio >= ppago.Fecha_Inicio && v.FechaInicio <= ppago.Fecha_Fin) || (v.FechaFin >= ppago.Fecha_Inicio && v.FechaFin <= ppago.Fecha_Fin))
                                   // where ((ppago.Fecha_Inicio >= v.FechaInicio && ppago.Fecha_Inicio <= v.FechaFin) || (ppago.Fecha_Fin >= v.FechaInicio && ppago.Fecha_Fin <= v.FechaFin))
                                   where ((ppago.Fecha_Inicio >= v.FechaInicio && ppago.Fecha_Inicio <= v.FechaFin) || (ppago.Fecha_Fin >= v.FechaInicio))
                                   select v).ToList();

                //Lista Periodo vacaciones
                listaPeriodoVacaciones = (from pv in context.PeriodoVacaciones
                                          //  join c in listaContratos on pv.IdEmpleado_Contrato equals c.IdContrato
                                          select pv).ToList();


                //Lista Permisos
                listaPermisos = (from per in context.Permisos
                                 where empleadosArray.Contains(per.IdEmpleado)
                                 //&& ((per.FechaInicio >= ppago.Fecha_Inicio && per.FechaInicio <= ppago.Fecha_Fin) || (per.FechaFin >= ppago.Fecha_Inicio && per.FechaFin <= ppago.Fecha_Fin))
                                 //&& ((ppago.Fecha_Inicio >= per.FechaInicio && ppago.Fecha_Inicio <= per.FechaFin)||(ppago.Fecha_Fin >= per.FechaInicio && ppago.Fecha_Fin <= per.FechaFin))
                                 && ((ppago.Fecha_Inicio >= per.FechaInicio && ppago.Fecha_Inicio <= per.FechaFin) || (ppago.Fecha_Fin >= per.FechaInicio))
                                 select per).ToList();


                //ListaInasistencias

                listaInasistenciasNominas = (from inaNom in context.Inasistencias
                                             where empleadosArray.Contains(inaNom.IdEmpleado) &&
                                             inaNom.idPeriodo == ppago.IdPeriodoPago
                                             //&& ((inaNom.Fecha >= ppago.Fecha_Inicio && inaNom.Fecha <= ppago.Fecha_Fin) || (inaNom.FechaFin >= ppago.Fecha_Inicio && inaNom.FechaFin <= ppago.Fecha_Fin))
                                             //&& ((ppago.Fecha_Inicio >= inaNom.Fecha && ppago.Fecha_Inicio <= inaNom.Fecha) || (ppago.Fecha_Fin >= inaNom.Fecha && ppago.Fecha_Fin <= inaNom.Fecha))
                                             && ((ppago.Fecha_Inicio >= inaNom.Fecha && ppago.Fecha_Inicio <= inaNom.Fecha) || (ppago.Fecha_Fin >= inaNom.Fecha))
                                             select inaNom).ToList();

                listaInasistenciasRH = (from inaRh in context.Inasistencias
                                        where empleadosArray.Contains(inaRh.IdEmpleado) &&
                                        inaRh.idPeriodo == 0
                                        //&& ((inaRh.Fecha >= ppago.Fecha_Inicio && inaRh.Fecha <= ppago.Fecha_Fin) || (inaRh.FechaFin >= ppago.Fecha_Inicio && inaRh.FechaFin <= ppago.Fecha_Fin))
                                        //&& ((ppago.Fecha_Inicio >= inaRh.Fecha && ppago.Fecha_Inicio <= inaRh.Fecha)||(ppago.Fecha_Fin >= inaRh.Fecha && ppago.Fecha_Fin <= inaRh.Fecha))
                                        && ((ppago.Fecha_Inicio >= inaRh.Fecha && ppago.Fecha_Inicio <= inaRh.Fecha) || (ppago.Fecha_Fin >= inaRh.Fecha))
                                        select inaRh).ToList();

                listaIncapacidades = (from inca in context.Incapacidades
                                      where empleadosArray.Contains(inca.IdEmpleado)
                                      //&& ((inca.FechaInicio >= ppago.Fecha_Inicio && inca.FechaInicio <= ppago.Fecha_Fin) || (inca.FechaFin >= ppago.Fecha_Inicio && inca.FechaFin <= ppago.Fecha_Fin))
                                      //&& ((ppago.Fecha_Inicio >= inca.FechaInicio && ppago.Fecha_Inicio <= inca.FechaFin)||(ppago.Fecha_Fin >= inca.FechaInicio && ppago.Fecha_Fin <= inca.FechaFin))
                                      && ((ppago.Fecha_Inicio >= inca.FechaInicio && ppago.Fecha_Inicio <= inca.FechaFin) || (ppago.Fecha_Fin >= inca.FechaInicio))
                                      select inca).ToList();
            }

            foreach (var item in empleadosArray)
            {
                NumDias      = Periodo.DiasPeriodo;
                IncXEmpleado = new List <Incidencia>();
                IdEmpleado   = item;

                var empComp = listaEmpleados.FirstOrDefault(x => x.IdEmpleado == item);
                //var empComp = ctx.Empleado.FirstOrDefault(x => x.IdEmpleado == item);

                if (empComp == null)
                {
                    continue;
                }

                EmpleadoIncidencias empIn = new EmpleadoIncidencias();
                empIn.IdEmpleado = IdEmpleado;

                //empIn.NombreEmpleado = nombreEmpleado;
                empIn.Paterno = empComp.APaterno;
                empIn.Materno = empComp.AMaterno;
                empIn.Nombres = empComp.Nombres;

                var fecha = Periodo.Fecha_Inicio;

                while (fecha <= Periodo.Fecha_Fin)
                {
                    var inc = new Incidencia
                    {
                        Fecha          = fecha,
                        TipoIncidencia = "X",
                        SePaga         = true
                    };

                    IncXEmpleado.Add(inc);

                    //incrementa la fecha en uno
                    fecha = fecha.AddDays(1);
                }

                GetDiasFestivos2(listaDiasFestivos, ppago);

                GetVacaciones2(listaVacaciones, listaPeriodoVacaciones, listaContratos, ppago, item);
                GetPermisos2(listaPermisos, item, ppago);
                GetInasistencias2Rh(listaInasistenciasRH, item, Periodo.DiasPeriodo, ppago);

                GetDiasDescanso2(listaContratos, item);

                GetIncapacidades2(listaIncapacidades, item, ppago);

                GetNuevoIngreso2(listaContratos, item);

                GetDiasDeBajaDelEmpleado(listaContratos, item);

                GetInasistencias2Nominas(listaInasistenciasNominas, item, Periodo.DiasPeriodo, ppago);

                empIn.Incidencias = IncXEmpleado;
                empIn.DiasAPagar  = NumDias;
                empIn.idPeriodo   = Periodo.IdPeriodoPago;
                lista.Add(empIn);
            }
            return(lista);
        }