/// <summary> /// Método para descargar el XML si la nomina de empleado tiene Comprobante en la antigua versión /// </summary> /// <param name="idComprobante"></param> private void descargaXML_comprobante(int idComprobante) { //Instanciar registro en sesión using (SAT_CL.FacturacionElectronica.Comprobante Comprobante = new SAT_CL.FacturacionElectronica.Comprobante(idComprobante)) { //Si existe y está generado if (Comprobante.generado && Comprobante.habilitar) { //Obtener bytes del archivo XML byte[] comprobante_nomina_XML = System.IO.File.ReadAllBytes(Comprobante.ruta_xml); //Realizar descarga de archivo if (comprobante_nomina_XML.Length > 0) { //Instanciar al emisor using (CompaniaEmisorReceptor Emisor = new CompaniaEmisorReceptor(Comprobante.id_compania_emisor)) { Archivo.DescargaArchivo(comprobante_nomina_XML, string.Format("{0}_{1}{2}.xml", Emisor.nombre_corto != "" ? Emisor.nombre_corto : Emisor.rfc, Comprobante.serie, Comprobante.folio), Archivo.ContentType.binary_octetStream); } } } } }
/// <summary> /// Deshabilita el comprobante y sus dependencias /// </summary> /// <returns></returns> private void eliminaComprobante() { //Definiendo objeto de retorno RetornoOperacion resultado = new RetornoOperacion(1); //Instanciando el comprobante actual using (SAT_CL.FacturacionElectronica.Comprobante c = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(Session["id_registro"]))) { //Si el registro existe if (c.id_comprobante > 0) { //Si el comprobante no se ha timbrado if (!c.generado) { //Realziando la deshabilitación resultado = c.DeshabilitaComprobante(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario); //Si no existe error if (resultado.OperacionExitosa) { //Estableciendo estatus edición Session["estatus"] = Pagina.Estatus.Nuevo; inicializaForma(); } } else { resultado = new RetornoOperacion("El comprobante ya se ha timbrado, no es posible editarlo."); } } else { resultado = new RetornoOperacion("El comprobante no fue encontrado."); } } //Mostramos Mensaje lblError.Text = resultado.Mensaje; }
/// <summary> /// Realiza la solicitud de cancelación de los timbres solicitados /// </summary> private void cancelaTimbres() { //inicializando resultado RetornoOperacion resultado = new RetornoOperacion(); //Se evalua si existen DataKeys(Indices de Origen de Datos de los Registros en el GridView) if (gvComprobante.DataKeys.Count > 0) { //Se obtienen las filas que estan seleccionadas por el CheckBox "chkVarios" GridViewRow[] gvfilas = TSDK.ASP.Controles.ObtenerFilasSeleccionadas(gvComprobante, "chkVarios"); //Se evalua si existen filas seleccionadas en el GridView if (gvfilas.Length > 0) { //Validamos Màximo permitido de Comprobantes if (Convert.ToInt32(gvfilas.Length) <= Convert.ToInt32(CapaNegocio.m_capaNegocio.RegresaVariableCatalogoBD("Maximo Cancelacion CFDI"))) { //Definiendo objeto para almacenar los resultados del proceso string mensajes = ""; //Para cada fila seleccionada foreach (GridViewRow r in gvfilas) { //Definiendo objeto de resultado por operación RetornoOperacion res = new RetornoOperacion(); //Seleccionando la fila actual gvComprobante.SelectedIndex = r.RowIndex; //Instanciando comprobante actual using (SAT_CL.FacturacionElectronica.Comprobante c = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(gvComprobante.SelectedDataKey["Id"]))) { //Si existe el comprobante if (c.id_comprobante > 0) { //Realizando cancelación res = new RetornoOperacion(string.Format("{0}: {1}", gvComprobante.SelectedDataKey["Folio"], c.CancelaTimbreFiscalDigital(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario).Mensaje)); } else { res = new RetornoOperacion(string.Format("{0}: El comprobante no fue localizado.", gvComprobante.SelectedDataKey["Folio"])); } } //Añadiendo resultado al general mensajes += res.Mensaje + "<br/>"; } //Armando resultado general resultado = new RetornoOperacion(mensajes, true); } else { //Mostrando Mensaje resultado = new RetornoOperacion(string.Format("Sólo es posible la cancelación de {0} Comprobantes.", CapaNegocio.m_capaNegocio.RegresaVariableCatalogoBD("Maximo Cancelacion CFDI"))); } } else//Mostrando Mensaje { resultado = new RetornoOperacion("Debe Seleccionar al menos 1 Comprobante"); } } else { resultado = new RetornoOperacion("No existen comprobantes coincidentes por cancelar."); } //Actualizando contenido de forma cargaGridView(); //Mostrando resultado lblError.Text = resultado.Mensaje; }
/// <summary> /// Evento producido al dar click en algún elemento del menú desplegable de la página /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void lkbElementoMenu_Click(object sender, EventArgs e) { //Determinando el comando a ejecutar switch (((LinkButton)sender).CommandName) { case "Abrir": inicializaAperturaRegistro(); break; case "Salir": PilaNavegacionPaginas.DireccionaPaginaAnterior(); break; case "Eliminar": eliminaComprobante(); break; case "Cancelar": cancelaComprobante(); break; case "Bitacora": inicializaBitacoraRegistro(Session["id_registro"].ToString(), "119", "Comprobante Fiscal Digital"); break; case "Referencias": inicializaReferencias((Session["id_registro"]).ToString(), "119", "Comprobante Fiscal Digital"); break; case "VerTimbre": //Validamos Existencia de comprobante if (Convert.ToInt32(Session["id_registro"]) != 0) { //Instancia comprobante using (SAT_CL.FacturacionElectronica.Comprobante c = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(Session["id_registro"]))) { //Validamos Si se Genero la Factura if (c.generado) { //Generamos Ruta para Abrir Timbre string ruta_ventana = string.Format("TimbreFiscal.aspx?id_comprobante={0}", Session["id_registro"]); //Abriendo ventana de detalle ScriptServer.AbreNuevaVentana(ruta_ventana, "Timbre Fiscal", "location=NO,toolbar=NO,scrollbars=YES,menubar=NO,status=YES,width=700,height=420", Page); } } } break; case "XML": //Realizando descarga XML descargarXML(); break; case "PDF": //Obteniendo Ruta string urlReporte = TSDK.Base.Cadena.RutaRelativaAAbsoluta("~/FacturacionElectronica/Comprobante.aspx", "~/RDLC/Reporte.aspx"); //Instanciamos Comprobante using (SAT_CL.FacturacionElectronica.Comprobante objComprobante = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(Session["id_registro"]))) { //Validamos que exista el Comprobante if (objComprobante.id_comprobante > 0) { //Instanciando nueva ventana de navegador para apertura de registro TSDK.ASP.ScriptServer.AbreNuevaVentana(string.Format("{0}?idTipoReporte={1}&idRegistro={2}", urlReporte, "Comprobante", objComprobante.id_comprobante), "Comprobante", "location=NO,toolbar=NO,scrollbars=YES,menubar=NO,status=YES,width=800,height=500", Page); } } break; case "Timbrar": //Abre Ventana Modal ScriptServer.AlternarVentana(uplkbTimbrar, uplkbTimbrar.GetType(), "AbrirVentana", "contenidoConfirmacionTimbrarFacturacionElectronica", "confirmaciontimbrarFacturacionElectronica"); //Inicializa Valores inicializaValoresTimbrarFacturacionElectronica(); break; } }
/// <summary> /// Carga valores de un registro determinado /// </summary> private void inicializaValoresRegistro() { //Determinando el tipo de carga a realizar en base al estatus switch ((Pagina.Estatus)Session["estatus"]) { //Nuevo registro case Pagina.Estatus.Nuevo: //Id de Registro lblID.Text = "ID"; //Emisor using (SAT_CL.Global.CompaniaEmisorReceptor Emisor = new SAT_CL.Global.CompaniaEmisorReceptor(((SAT_CL.Seguridad.UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor)) { txtEmisor.Text = Emisor.nombre + " ID:" + Emisor.id_compania_emisor_receptor.ToString(); } //Serie y Folio txtSerie.Text = txtFolio.Text = ""; //Domicilio Emisor cargaDomicilioRequerido("emisor"); //Sucursal ddlSucursal.SelectedValue = "0"; //Domicilio de Sucursal txtDomicilioSucursal.Text = ""; //Receptor y Domicilio receptor txtReceptor.Text = txtDomicilioReceptor.Text = ""; //Método de Pago predeterminado "Transferencia Electrónica" ddlMetodoPago.SelectedValue = "5"; ddlNoCuentaPago.SelectedValue = "0"; //Tipo de Comprobante ddlTipoComprobante.SelectedValue = "1"; //Estatus ddlEstatus.SelectedValue = "1"; //Condiciones de Pago ddlCondicionesPago.SelectedValue = "1"; //Forma de Pago "Una sola exhibición" ddlFormaPago.SelectedValue = "1"; //Parcialidades y Datos de Comprobante Original inicializaParcialidades(); //Moneda y Tipo de Cambio ddlMoneda.SelectedValue = "1"; txtTipoCambio.Text = "1.0000"; //Fechas de Captura y Expedición txtFechaCaptura.Text = txtFechaExpedicion.Text = //Lugar de Expedición y Sello Digital txtSelloDigital.Text = ""; cargaDomicilioRequerido("lugar_expedicion"); //fecha Cancelación txtFechaCancelacion.Text = ""; //Check Timbrado chkGenerado.Checked = false; //Totales de Comprobante lblSubtotalCaptura.Text = lblSubtotalNacional.Text = lblDescuentosCaptura.Text = lblDescuentosNacional.Text = lblImpuestosCaptura.Text = lblImpuestosNacional.Text = lblTotalCaptura.Text = lblTotalNacional.Text = string.Format("{0:c4}", 0); break; //Lectura y edición de registro activo en sesión case Pagina.Estatus.Lectura: case Pagina.Estatus.Edicion: //Instanciando registro comprobante using (SAT_CL.FacturacionElectronica.Comprobante c = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(Session["id_registro"]))) { //Asignando valores de registro //Id de Registro lblID.Text = c.id_comprobante.ToString(); //Serie y Folio txtSerie.Text = c.serie; txtFolio.Text = c.folio.ToString(); //Emisor using (SAT_CL.Global.CompaniaEmisorReceptor Emisor = new SAT_CL.Global.CompaniaEmisorReceptor(c.id_compania_emisor)) { txtEmisor.Text = Emisor.nombre + " ID:" + Emisor.id_compania_emisor_receptor.ToString(); } //Domicilio Emisor cargaDomicilioRequerido("emisor"); //Sucursal ddlSucursal.SelectedValue = c.id_sucursal.ToString(); //Domicilio de Sucursal cargaDomicilioRequerido("sucursal"); //Receptor y Domicilio receptor using (CompaniaEmisorReceptor r = new CompaniaEmisorReceptor(c.id_compania_receptor)) { txtReceptor.Text = r.nombre + " ID:" + r.id_compania_emisor_receptor.ToString(); } cargaDomicilioRequerido("receptor"); //Método de Pago predeterminado "Transferencia Electrónica" ddlMetodoPago.SelectedValue = c.id_metodo_pago.ToString(); //Cargando Cuentas Pago SAT_CL.CapaNegocio.m_capaNegocio.CargaCatalogo(ddlNoCuentaPago, 42, "NO IDENTIFICADO", 25, "", c.id_compania_receptor, ""); ddlNoCuentaPago.SelectedValue = c.id_cuenta_pago.ToString(); //Tipo de Comprobante ddlTipoComprobante.SelectedValue = ((byte)c.tipo_comprobante).ToString(); //Estatus ddlEstatus.SelectedValue = ((byte)c.estatus_comprobante).ToString(); //Condiciones de Pago ddlCondicionesPago.SelectedValue = c.id_condiciones_pago.ToString(); //Forma de Pago "Una sola exhibición" ddlFormaPago.SelectedValue = c.id_forma_pago.ToString(); //Parcialidades y Datos de Comprobante Original txtNoParcialidad.Text = c.no_parcialidad.ToString(); txtTotalParcialidades.Text = c.total_parcialidades.ToString(); txtSerieOriginal.Text = c.serie_folio_original; txtFolioOriginal.Text = c.folio_original.ToString(); txtMontoFolioOriginal.Text = c.monto_folio_original.ToString(); txtFechaFolioOriginal.Text = Fecha.ConvierteDateTimeString(c.fecha_folio_original, "yyyy/MM/dd hh:mm:ss tt"); //Moneda y Tipo de Cambio if (c.id_moneda > 1) { using (TipoCambio tc = new TipoCambio(((SAT_CL.Seguridad.UsuarioSesion)Session["usuario_sesion"]).id_compania_emisor_receptor, c.id_moneda, c.fecha_tipo_cambio, 0)) { ddlMoneda.SelectedValue = tc.id_moneda.ToString(); txtTipoCambio.Text = tc.valor_tipo_cambio.ToString(); } } //Si no hay tipo de cambio else { ddlMoneda.SelectedValue = "1"; txtTipoCambio.Text = "1.0000"; } //Fechas de Captura y Expedición txtFechaCaptura.Text = c.fecha_captura.ToString("yyyy/MM/dd hh:mm:ss tt"); txtFechaExpedicion.Text = Fecha.ConvierteDateTimeString(c.fecha_expedicion, "yyyy/MM/dd hh:mm:ss tt"); //Lugar de Expedición y Sello Digital txtLugarExpedicion.Text = c.lugar_expedicion; txtSelloDigital.Text = c.sello; //fecha Cancelación txtFechaCancelacion.Text = Fecha.ConvierteDateTimeString(c.fecha_cancelacion, "yyyy/MM/dd hh:mm:ss tt"); //Check Timbrado chkGenerado.Checked = c.generado; //Totales de Comprobante lblSubtotalCaptura.Text = string.Format("{0:c4}", c.subtotal_moneda_captura); lblSubtotalNacional.Text = string.Format("{0:c4}", c.subtotal_moneda_nacional); lblDescuentosCaptura.Text = string.Format("{0:c4}", c.descuento_moneda_captura); lblDescuentosNacional.Text = string.Format("{0:c4}", c.descuento_moneda_nacional); lblImpuestosCaptura.Text = string.Format("{0:c4}", c.impuestos_moneda_captura); lblImpuestosNacional.Text = string.Format("{0:c4}", c.impuestos_moneda_nacional); lblTotalCaptura.Text = string.Format("{0:c4}", c.total_moneda_captura); lblTotalNacional.Text = string.Format("{0:c4}", c.total_moneda_nacional); } break; } //Estableciendo indice de tab por default //tbcComprobante.ActiveTabIndex = 0; }
/// <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; } } } } }
/// <summary> /// Evento disparado al presionar el LinkButton "Bitacora" o "Referencias" /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void lkbDetalles_Click(object sender, EventArgs e) { //Evaluando que el GridView tenga registros if (gvComprobantes.DataKeys.Count > 0) { //Referenciando al botón pulsado using (LinkButton boton = (LinkButton)sender) { //Seleccionando la fila actual Controles.SeleccionaFila(gvComprobantes, sender, "lnk", false); //Evaluando Boton Presionado switch (boton.CommandName) { case "Bitacora": { //Visualizando bitácora de registro inicializaBitacoraRegistro(gvComprobantes.SelectedValue.ToString(), "119", "Bitacora"); break; } case "Referencias": { //Visualizando referencia de registro inicializaReferencias(gvComprobantes.SelectedValue.ToString(), "119", "Combrobante"); break; } case "Email": { //Inicializando contenido de controles de envío de correo //Instanciando comprobante de interés using (SAT_CL.FacturacionElectronica.Comprobante comp = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(gvComprobantes.SelectedDataKey["Id"]))) { //Si hay comprobante timbrado if (comp.generado) { //Instanciando compañía de interés using (SAT_CL.Global.CompaniaEmisorReceptor c = new SAT_CL.Global.CompaniaEmisorReceptor(comp.id_compania_emisor)) { string destinatarios = ""; //Cargando contactos (Destinatarios) using (DataTable mitContactos = SAT_CL.Global.Referencia.CargaReferencias(comp.id_compania_receptor, 25, 2058)) { //Si hay elementos if (mitContactos != null) { foreach (DataRow r in mitContactos.Rows) { //Si ya existe contenido en el control if (destinatarios != "") { destinatarios = destinatarios + ";\r\n" + r.Field <string>("Valor"); } //De lo contrario else { destinatarios = r.Field <string>("Valor"); } } } } //Inicializando control de envío de comprobante wucEmailCFDI.InicializaControl(((SAT_CL.Seguridad.Usuario)Session["usuario"]).email, string.Format("CFDI {0} [{1}]", comp.serie + comp.folio.ToString(), c.rfc), destinatarios, "Los archivos se encuentran adjuntos en este mensaje. Si usted no ha solicitado el envío de este comprobante, por favor contacte a su ejecutivo de cuenta.", comp.id_comprobante); } } else { ScriptServer.MuestraNotificacion(this, "El comprobante no se ha timbrado.", ScriptServer.NaturalezaNotificacion.Error, ScriptServer.PosicionNotificacion.AbajoDerecha); } } //Abrir Ventana Modal ScriptServer.AlternarVentana(this, "EnvioEmail", "contenidoConfirmacionEmail", "confirmacionEmail"); break; } case "XML": { //Instanciamos Comprobante using (SAT_CL.FacturacionElectronica.Comprobante c = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(gvComprobantes.SelectedValue))) { //Si existe y está generado if (c.generado) { //Obteniendo bytes del archivo XML byte[] cfdi_xml = System.IO.File.ReadAllBytes(c.ruta_xml); //Realizando descarga de archivo if (cfdi_xml.Length > 0) { //Instanciando al emisor using (SAT_CL.Global.CompaniaEmisorReceptor em = new SAT_CL.Global.CompaniaEmisorReceptor(c.id_compania_emisor)) TSDK.Base.Archivo.DescargaArchivo(cfdi_xml, string.Format("{0}_{1}{2}.xml", em.nombre_corto != "" ? em.nombre_corto: em.rfc, c.serie, c.folio), TSDK.Base.Archivo.ContentType.binary_octetStream); } } } break; } case "PDF": { //Obteniendo Ruta string urlReporte = TSDK.Base.Cadena.RutaRelativaAAbsoluta("~/FacturacionElectronica/ReporteComprobante.ascx", "~/RDLC/Reporte.aspx"); //Instanciamos Comprobante using (SAT_CL.FacturacionElectronica.Comprobante objComprobante = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(gvComprobantes.SelectedValue))) { //Validamos que el comprobante se encuentre Timbrado if (objComprobante.generado) { //Instanciando nueva ventana de navegador para apertura de registro TSDK.ASP.ScriptServer.AbreNuevaVentana(string.Format("{0}?idTipoReporte={1}&idRegistro={2}", urlReporte, "Comprobante", objComprobante.id_comprobante), "Comprobante", "location=NO,toolbar=NO,scrollbars=YES,menubar=NO,status=YES,width=800,height=500", Page); } } break; } } } } }
/// <summary> /// Cancelar CFDI /// </summary> private RetornoOperacion cancelaCFDI() { //Declaramos resultado RetornoOperacion resultado = new RetornoOperacion(); //Inicializando Bloque Transaccional using (TransactionScope trans = TSDK.Datos.Transaccion.InicializaBloqueTransaccional(System.Transactions.IsolationLevel.ReadCommitted)) { //Instanciamos Comprobamte using (SAT_CL.FacturacionElectronica.Comprobante objCompobante = new SAT_CL.FacturacionElectronica.Comprobante(Convert.ToInt32(gvComprobantes.SelectedDataKey["Id"]))) { //Enviamos link resultado = objCompobante.CancelaComprobante(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario); //Validamos Resultado if (resultado.OperacionExitosa) { //Insertando Referencia resultado = SAT_CL.Global.Referencia.InsertaReferencia(objCompobante.id_comprobante, 119, SAT_CL.Global.ReferenciaTipo.ObtieneIdReferenciaTipo(0, 119, "Motivo Cancelación", 0, "Facturacion Electrónica"), txtMotivo.Text, TSDK.Base.Fecha.ObtieneFechaEstandarMexicoCentro(), ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario, true); //Validando Operación Exitosa if (resultado.OperacionExitosa) { //Instanciando Aplicaciones using (DataTable dtAplicaciones = SAT_CL.CXC.FichaIngresoAplicacion.ObtieneFichasFacturas(0, Convert.ToInt32(gvComprobantes.SelectedDataKey["IdFactura"]))) { //Validando que existan Aplicaciones if (TSDK.Datos.Validacion.ValidaOrigenDatos(dtAplicaciones)) { //Recorriendo Registros foreach (DataRow dr in dtAplicaciones.Rows) { //Instanciando Aplicacion de la Factura using (SAT_CL.CXC.FichaIngresoAplicacion fia = new SAT_CL.CXC.FichaIngresoAplicacion(Convert.ToInt32(dr["Id"]))) { //Validando que exista la Aplicación if (fia.id_ficha_ingreso_aplicacion > 0) { //Deshabilitando Ficha de Ingreso resultado = fia.DeshabilitarFichaIngresoAplicacion(((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario); //Validando Operación Exitosa if (!resultado.OperacionExitosa) { //Terminando Ciclo break; } else { //Instanciando Ficha de Ingreso using (SAT_CL.Bancos.EgresoIngreso fi = new SAT_CL.Bancos.EgresoIngreso(fia.id_egreso_ingreso)) { //Validando que exista el Registro if (fi.habilitar) { //Obteniendo Facturas Aplicadas using (DataTable dtAplicacionesFicha = SAT_CL.CXC.FichaIngresoAplicacion.ObtieneFichasFacturas(fi.id_egreso_ingreso, 0)) { //Si no existen Aplicaciones if (!TSDK.Datos.Validacion.ValidaOrigenDatos(dtAplicacionesFicha)) { //Actualizando Estatus de la Ficha resultado = fi.ActualizaFichaIngresoEstatus(SAT_CL.Bancos.EgresoIngreso.Estatus.Capturada, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario); //Validando Operación Correcta if (resultado.OperacionExitosa) { //Terminando Ciclo break; } } } } } } } } } //Validando Desaplicación Exitosa if (resultado.OperacionExitosa) { //Declaramos Variable int facturado = 0; //Obtenemos Facturado Fcaturacion facturado = FacturadoFacturacion.ObtieneRelacionFacturaElectronica(objCompobante.id_comprobante); //Instanciamos FcaturadoFacturacion using (FacturadoFacturacion objfacturado = new FacturadoFacturacion(facturado)) { //Instanciamos Facturado using (Facturado objFacturado = new Facturado(objfacturado.id_factura)) { //Actualizando Estatus de la Factura resultado = objFacturado.ActualizaEstatusFactura(Facturado.EstatusFactura.Registrada, ((SAT_CL.Seguridad.Usuario)Session["usuario"]).id_usuario); } } } } else { //Instanciando Factura resultado = new RetornoOperacion(Convert.ToInt32(gvComprobantes.SelectedDataKey["IdFactura"])); } //Validando Operación Exitosa if (resultado.OperacionExitosa) { //Cerramo Ventana Modal alternaVentanaModal("CancelarCFDI", btnAceptarCancelacionCFDI); //Carga Comprobante cargaComprobantes(); //Completando Transacción trans.Complete(); } } } } } } //Devolvemos Valor return(resultado); }
/// <summary> /// Exportar PDF y XML /// </summary> private void Exportar() { //Creamos lista de archivos List <KeyValuePair <string, byte[]> > archivos = new List <KeyValuePair <string, byte[]> >(); //Creamos lista errores List <string> errores = new List <string>(); //Verificando que el GridView contiene Registros if (gvComprobantes.DataKeys.Count > 0) { //Obteniendo Filas Seleccionadas GridViewRow[] selected_rows = Controles.ObtenerFilasSeleccionadas(gvComprobantes, "chkVarios"); //Verificando que existan filas Seleccionadas if (selected_rows.Length != 0) { //Almacenando Rutas el Arreglo foreach (GridViewRow row in selected_rows) { //Instanciando Comprobante de el Valor obtenido de la Fila Seleccionada using (SAT_CL.FacturacionElectronica.Comprobante comp = new SAT_CL.FacturacionElectronica.Comprobante (Convert.ToInt32(gvComprobantes.DataKeys[row.RowIndex].Value))) { //Validamos Seleccion de Radio Buton de PDF if (chkPDF.Checked == true) { //Añadimos PDF archivos.Add(new KeyValuePair <string, byte[]>(comp.serie + comp.folio.ToString() + ".pdf", comp.GeneraPDFComprobante())); } //Validando Selección de XML if (chkXML.Checked == true) { //Verificando que exista el Archivo if (File.Exists(comp.ruta_xml)) { //Guardando Archivo en arreglo de Bytes byte[] xml_file = System.IO.File.ReadAllBytes(comp.ruta_xml); //Añadimos XML archivos.Add(new KeyValuePair <string, byte[]>(comp.serie + comp.folio.ToString() + ".xml", xml_file)); } } } } //Genera el zip con las rutas byte[] file_zip = Archivo.ConvirteArchivoZIP(archivos, out errores); //Si almenos un archivo fue correcto descarga if (file_zip != null) { //Descarga el zip generado Archivo.DescargaArchivo(file_zip, "Facturas.zip", Archivo.ContentType.binary_octetStream); } else { //Recorremos errores foreach (string error in errores) { //Muestra mensaje de Error lblError.Text += error + " <br>"; } } } else//Mostrando Mensaje { lblError.Text = "Debe Seleccionar al menos un Comprobante"; } } }