/// <summary> /// Método encargado de Timbrar Toda la Nómina /// </summary> /// <param name="serie">Serie</param> /// <param name="id_cuenta_pago">Cuenta Pago del Emisor</param> /// <param name="ruta_xslr_co">Ruta para la cadena Original en Linea</param> /// <param name="ruta_xslr_co_local">Ruta para la Cadena Original desconectado</param> /// <param name="id_usuario">Id Usuario</param> /// <returns></returns> public RetornoOperacion TimbraNomina_V3_3(string serie, string ruta_xslr_co, string ruta_xslr_co_local, int id_usuario) { //Declaramos Objeto Resultado RetornoOperacion result = new RetornoOperacion(0); //Declaramos Objeto Resultado RetornoOperacion ResultadoMensaje = new RetornoOperacion(0); //Guardamos Mensaje string mensaje = ""; //Instanciando Nomina de Empleados using (DataTable dtNominaEmpleados = SAT_CL.Nomina.NomEmpleado.ObtieneNominasEmpleadoRegistrados(this._id_nomina)) { //Validando que existan Registros if (Validacion.ValidaOrigenDatos(dtNominaEmpleados)) { //Recorriendo Nominas de Empleados foreach (DataRow dr in dtNominaEmpleados.Rows) { //Instanciando Nómina Empleado using (SAT_CL.Nomina.NomEmpleado ne = new SAT_CL.Nomina.NomEmpleado(Convert.ToInt32(dr["Id"]))) { //Validando que exista el Registro if (ne.habilitar && ne.estatus == NomEmpleado.Estatus.Registrado) { //Validando Timbrado Anterior if (ne.id_comprobante == 0) { //Timbrando Nómina del Empleado result = ne.ImportaTimbraNominaEmpleadoComprobante_V3_3(this._version, serie, ruta_xslr_co, ruta_xslr_co_local, id_usuario); } else { //Instanciando Excepción result = new RetornoOperacion("La Nómina del Empleado fue timbrada en el esquema 3.2"); } } else { //Instanciando Excepción result = new RetornoOperacion("No Existe la Nómina del Empleado"); } } //Construyendo mensaje de este Timbrado de Nómina de Empleado ResultadoMensaje = new RetornoOperacion(mensaje += string.Format("{0}, ", result.Mensaje), true); } } } //Devolvemos Resultado return(ResultadoMensaje); }
/// <summary> /// Exportar XML y PDF de la nomina de empleados /// </summary> private void exportarNominasEmpleado() { //Declarar lista de archivos List <KeyValuePair <string, byte[]> > archivos = new List <KeyValuePair <string, byte[]> >(); //Declarar lista de errores List <string> errores = new List <string>(); //Verificar que el gridview contenga registros if (gvNominaEmpleados.DataKeys.Count > 0) { //Obtener filas seleccionadas GridViewRow[] filasSeleccionadas = Controles.ObtenerFilasSeleccionadas(gvNominaEmpleados, "chkVariosNominaEmpleado"); //Verificar que existan filas seleccionadas if (filasSeleccionadas.Length > 0) { //Almacenar rutas en un arreglo foreach (GridViewRow row in filasSeleccionadas) {//Instanciar Nomina de Empleado del valor obtenido de la fila seleccionada using (SAT_CL.Nomina.NomEmpleado NomEmp = new SAT_CL.Nomina.NomEmpleado(Convert.ToInt32(gvNominaEmpleados.DataKeys[row.RowIndex].Value))) { //Instanciar al comprobante que corresponde a la nómina //Si la nomina de empleado usa comprobante en la version anterior if (NomEmp.id_comprobante != 0) { using (SAT_CL.FacturacionElectronica.Comprobante Comprobante = new SAT_CL.FacturacionElectronica.Comprobante(NomEmp.id_comprobante)) { //Validar seleccion de PDF if (chkPDF.Checked == true) { //Añadir PDF using (CompaniaEmisorReceptor Emisor = new CompaniaEmisorReceptor(Comprobante.id_compania_emisor)) { archivos.Add(new KeyValuePair <string, byte[]>(Emisor.nombre_corto != "" ? Comprobante.serie : Emisor.rfc + Comprobante.serie + Comprobante.folio.ToString() + ".pdf", NomEmp.GeneraPDFComprobanteNomina33())); } } //Validar seleccion de XML if (chkXML.Checked == true) { //Guardar archivo en arreglo de bytes byte[] archivoXML = System.IO.File.ReadAllBytes(Comprobante.ruta_xml); //Añadir XML a la lista using (CompaniaEmisorReceptor Emisor = new CompaniaEmisorReceptor(Comprobante.id_compania_emisor)) { archivos.Add(new KeyValuePair <string, byte[]>(Emisor.nombre_corto != "" ? Emisor.nombre_corto : Emisor.rfc + Comprobante.serie + Comprobante.folio.ToString() + ".xml", archivoXML)); } } } } //Si la nomina de empleado usa comprobante en la version 3.3 else if (NomEmp.id_comprobante33 != 0) { using (SAT_CL.FacturacionElectronica33.Comprobante Comprobante33 = new SAT_CL.FacturacionElectronica33.Comprobante(NomEmp.id_comprobante33)) { //Validar seleccion de PDF if (chkPDF.Checked == true) { //Añadir PDF archivos.Add(new KeyValuePair <string, byte[]>(Comprobante33.serie + Comprobante33.folio.ToString() + ".pdf", NomEmp.GeneraPDFComprobanteNomina33())); } //Validar seleccion de XML if (chkXML.Checked == true) { //Guardar archivo en arreglo de bytes byte[] archivoXML = System.IO.File.ReadAllBytes(Comprobante33.ruta_xml); //Añadir XML a la lista archivos.Add(new KeyValuePair <string, byte[]>(Comprobante33.serie + Comprobante33.folio.ToString() + ".xml", archivoXML)); } } } } } //Generar archivo comprimido con las rutas byte[] zip_file = Archivo.ConvirteArchivoZIP(archivos, out errores); //Si al menos un archivo fue correcto; descarga. if (zip_file != null) { Archivo.DescargaArchivo(zip_file, "NominasEmpleado.zip", Archivo.ContentType.binary_octetStream); } else { //Recorrer errores foreach (string error in errores) { //Muestra mensaje de error //lblError.Text += error + "<br>"; } } } else //Mostrar mensaje { //lblError.Text ="Debe seleccionar al menos un comprobante."; } } }
/// <summary> /// Evento Producido al Dar Click al Link de Imprimir Nomina /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void lnkDescargarNomina_Click(object sender, EventArgs e) { //Revisar que el GridView contenga registros if (gvNominaEmpleados.DataKeys.Count > 0) { //Seleccionar la fila Controles.SeleccionaFila(gvNominaEmpleados, sender, "lnk", false); //Instanciar a la nomina de empleado using (SAT_CL.Nomina.NomEmpleado NomEmp = new SAT_CL.Nomina.NomEmpleado(Convert.ToInt32(gvNominaEmpleados.SelectedDataKey["Id"]))) { //Obtener el control que activa el evento LinkButton enlace = (LinkButton)sender; //Botón presionado switch (enlace.CommandName) { case "PDF": { //Obtener ruta string urlReporte = TSDK.Base.Cadena.RutaRelativaAAbsoluta("~/FacturacionElectronica/ReporteComprobante.ascx", "~/RDLC/Reporte.aspx"); //Instanciar el tipo de comprobante //Si la nomina de empleado usa comprobante en la version anterior if (NomEmp.id_comprobante != 0) { using (SAT_CL.FacturacionElectronica.Comprobante Comprobante = new SAT_CL.FacturacionElectronica.Comprobante(NomEmp.id_comprobante)) { if (Comprobante.generado) { //Instanciar nueva ventana del navegador TSDK.ASP.ScriptServer.AbreNuevaVentana(string.Format("{0}?idTipoReporte={1}&idRegistro={2}", urlReporte, "Comprobante", Comprobante.id_comprobante), "Comprobante", "location=NO,toolbar=NO,scrollbars=YES,menubar=NO,status=YES,width=800,height=500", Page); } } } //Si la nomina de empleado usa comprobante en la version 3.3 else if (NomEmp.id_comprobante33 != 0) { using (SAT_CL.FacturacionElectronica33.Comprobante Comprobante33 = new SAT_CL.FacturacionElectronica33.Comprobante(NomEmp.id_comprobante33)) { if (Comprobante33.bit_generado) { //Instanciar nueva ventana del navegador TSDK.ASP.ScriptServer.AbreNuevaVentana(string.Format("{0}?idTipoReporte={1}&idRegistro={2}", urlReporte, "ComprobanteV33", Comprobante33.id_comprobante33), "Comprobante", "location=NO,toolbar=NO,scrollbars=YES,menubar=NO,status=YES,width=800,height=500", Page); } } } else { ScriptServer.MuestraNotificacion(this, "La nómina de empleado no tiene un comprobante.", ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha); } break; } case "XML": { //Si la nomina de empleado usa comprobante versión 3.3 if (NomEmp.id_comprobante33 > 0) { descargaXML_comprobante33(NomEmp.id_comprobante33); } //Si la nómina de empleado usa comprobante en la antigua version else if (NomEmp.id_comprobante > 0) { descargaXML_comprobante(NomEmp.id_comprobante); } else { ScriptServer.MuestraNotificacion(this, "La nómina de empleado no tiene un comprobante.", ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha); } break; } } } } }