Option Strict On Option Explicit On Imports System.Data Imports System.Diagnostics Imports System.Globalization Imports System.IO Imports System.IO.Compression Imports System.Net.Http Imports System.Net.Http.Headers Imports System.Threading Imports System.Threading.Tasks Imports System.Windows.Forms.VisualStyles.VisualStyleElement Imports System.Xml Imports ADSistemaLibrary.SatXml Imports ADSistemaLibrary.SatXml.XmlSatCFDI Imports Extensiones Imports Microsoft.Reporting.WebForms Imports Newtonsoft.Json.Linq Imports ClsPaginas Partial Class Compras_eFacturas Inherits ClsPaginas #Region "Propiedades" 'CFDi Private _Folio As String Private Property SeriePago As String Set(value As String) ViewState("SeriePago") = value End Set Get Return ViewState("SeriePago").ToString End Get End Property Private Property FolioPago As String Set(value As String) ViewState("FolioPago") = value End Set Get Return ViewState("FolioPago").ToString End Get End Property Private Property Destino As String Set(value As String) ViewState("Destino") = value End Set Get Return ViewState("Destino").ToString End Get End Property Private Property CveFactura As Integer Set(value As Integer) ViewState("CveFactura") = value End Set Get Return CInt(ViewState("CveFactura")) End Get End Property Private Property CveFacturaPago As Integer Set(value As Integer) ViewState("CveFacturaPago") = value End Set Get Return CInt(ViewState("CveFacturaPago")) End Get End Property Private Property CveProveedor As Integer Set(value As Integer) ViewState("CveProveedor") = value End Set Get Return CInt(ViewState("CveProveedor")) End Get End Property Private Property Folio1 As String Set(value As String) ViewState("Folio1") = value End Set Get Return (ViewState("Folio1")).ToString End Get End Property Private Property Proveedor As String Set(value As String) ViewState("Proveedor") = value End Set Get Return (ViewState("Proveedor")).ToString End Get End Property Private Property Ejecutable As String Set(value As String) ViewState("Ejecutable") = value End Set Get Return ViewState("Ejecutable").ToString End Get End Property Private Property ChecandoCorreo As Boolean Set(value As Boolean) ViewState("ChecandoCorreo") = value End Set Get Return CType(ViewState("ChecandoCorreo"), Boolean) End Get End Property Private DTConceptos As DataTable Private Property Folio() As String Get Return _Folio End Get Set _Folio = Value End Set End Property Private Property Serie() As String Get If m_Serie Is Nothing Then Return "" Else Return m_Serie End If End Get Set m_Serie = Value End Set End Property Private m_Serie As String Private _fecha As String Private Property fecha() As String Get Return _fecha End Get Set _fecha = Value End Set End Property Private _tipoDeComprobante As String Private Property tipoDeComprobante() As String Get Return _tipoDeComprobante End Get Set _tipoDeComprobante = Value End Set End Property Private _formaDePago As String Private Property formaDePago() As String Get Return _formaDePago End Get Set _formaDePago = Value End Set End Property Private _subTotal As String Private Property subTotal() As String Get Return _subTotal End Get Set _subTotal = Value End Set End Property Private _descuento As String Private Property descuento() As String Get Return _descuento End Get Set _descuento = Value End Set End Property Private _total As String Private Property total() As String Get Return _total End Get Set _total = Value End Set End Property Private _moneda As String Private Property moneda() As String Get Return _moneda End Get Set _moneda = Value End Set End Property Private _metodoDePago As String Private Property metodoDePago() As String Get Return _metodoDePago End Get Set _metodoDePago = Value End Set End Property Private _condicionesDePago As String Private Property condicionesDePago() As String Get Return _condicionesDePago End Get Set _condicionesDePago = Value End Set End Property Private _LugarExpedicion As String Private Property LugarExpedicion() As String Get Return _LugarExpedicion End Get Set _LugarExpedicion = Value End Set End Property Private _NumCtaPagoNumCtaPago As String Private Property NumCtaPagoNumCtaPago() As String Get Return _NumCtaPagoNumCtaPago End Get Set _NumCtaPagoNumCtaPago = Value End Set End Property Private _noCertificado As String Private Property noCertificado() As String Get Return _noCertificado End Get Set _noCertificado = Value End Set End Property ''Emisor Private _EmiRFC As String Private Property EmiRFC() As String Get Return _EmiRFC End Get Set _EmiRFC = Value End Set End Property Private _EmiNombre As String Private Property EmiNombre() As String Get Return _EmiNombre End Get Set _EmiNombre = Value End Set End Property Private _DomFisCalle As String Private Property DomFisCalle() As String Get Return _DomFisCalle End Get Set _DomFisCalle = Value End Set End Property Private _DomFisNoExt As String Private Property DomFisNoExt() As String Get Return _DomFisNoExt End Get Set _DomFisNoExt = Value End Set End Property 'Dim _DomFisNoInt As String Private _DomFisCol As String Private Property DomFisCol() As String Get Return _DomFisCol End Get Set _DomFisCol = Value End Set End Property Private _DomFisCP As String Private Property DomFisCP() As String Get Return _DomFisCP End Get Set _DomFisCP = Value End Set End Property Private _DomFisMun As String Private Property DomFisMun() As String Get Return _DomFisMun End Get Set _DomFisMun = Value End Set End Property Private _DomFisLoc As String Private Property DomFisLoc() As String Get Return _DomFisLoc End Get Set _DomFisLoc = Value End Set End Property Private _DomFisEst As String Private Property DomFisEst() As String Get Return _DomFisEst End Get Set _DomFisEst = Value End Set End Property Private _DomFisPais As String Private Property DomFisPais() As String Get Return _DomFisPais End Get Set _DomFisPais = Value End Set End Property Private _ExpEnCalle As String Private Property ExpEnCalle() As String Get Return _ExpEnCalle End Get Set _ExpEnCalle = Value End Set End Property Private _ExpEnNoExt As String Private Property ExpEnNoExt() As String Get Return _ExpEnNoExt End Get Set _ExpEnNoExt = Value End Set End Property Private ExpEnCol As String Private _ExpEnCP As String Private Property ExpEnCP() As String Get Return _ExpEnCP End Get Set _ExpEnCP = Value End Set End Property Private _ExpEnMun As String Private Property ExpEnMun() As String Get Return _ExpEnMun End Get Set _ExpEnMun = Value End Set End Property Private _ExpEnLoc As String Private Property ExpEnLoc() As String Get Return _ExpEnLoc End Get Set _ExpEnLoc = Value End Set End Property Private _ExpEnEst As String Private Property ExpEnEst() As String Get Return _ExpEnEst End Get Set _ExpEnEst = Value End Set End Property Private _ExpEnPais As String Private Property ExpEnPais() As String Get Return _ExpEnPais End Get Set _ExpEnPais = Value End Set End Property Private _Regimen As String Private Property Regimen() As String Get Return _Regimen End Get Set _Regimen = Value End Set End Property ''Receptor Private _RecRfc As String Private Property RecRfc() As String Get Return _RecRfc End Get Set _RecRfc = Value End Set End Property Private _RecNombre As String Private Property RecNombre() As String Get Return _RecNombre End Get Set _RecNombre = Value End Set End Property Private _DomRecCalle As String Private Property DomRecCalle() As String Get Return _DomRecCalle End Get Set _DomRecCalle = Value End Set End Property Private _DomRecFisNoExt As String Private Property DomRecFisNoExt() As String Get Return _DomRecFisNoExt End Get Set _DomRecFisNoExt = Value End Set End Property Private _DomRecFisNoInt As String Private Property DomRecFisNoInt() As String Get Return _DomRecFisNoInt End Get Set _DomRecFisNoInt = Value End Set End Property Private _DomRecCol As String Private Property DomRecCol() As String Get Return _DomRecCol End Get Set _DomRecCol = Value End Set End Property Private _DomRecCP As String Private Property DomRecCP() As String Get Return _DomRecCP End Get Set _DomRecCP = Value End Set End Property Private _DomRecMun As String Private Property DomRecMun() As String Get Return _DomRecMun End Get Set _DomRecMun = Value End Set End Property Private _DomRecLoc As String Private Property DomRecLoc() As String Get Return _DomRecLoc End Get Set _DomRecLoc = Value End Set End Property Private _DomRecEst As String Private Property DomRecEst() As String Get Return _DomRecEst End Get Set _DomRecEst = Value End Set End Property Private _DomRecPais As String Private Property DomRecPais() As String Get Return _DomRecPais End Get Set _DomRecPais = Value End Set End Property 'IVA Private _TrasladoIVA As Double Private Property TrasladoIVA() As Double Get Return _TrasladoIVA End Get Set _TrasladoIVA = Value End Set End Property 'TFD Private _TFDUUID As String Private Property TFDUUID() As String Get Return _TFDUUID End Get Set _TFDUUID = Value End Set End Property Private _TFDFechaTimbrado As String Private Property TFDFechaTimbrado() As String Get Return _TFDFechaTimbrado End Get Set _TFDFechaTimbrado = Value End Set End Property Private _TFDSelloCFD As String Private Property TFDSelloCFD() As String Get Return _TFDSelloCFD End Get Set _TFDSelloCFD = Value End Set End Property Private _TFDNoCertSAT As String Private Property TFDNoCertSAT() As String Get Return _TFDNoCertSAT End Get Set _TFDNoCertSAT = Value End Set End Property Private _TFDSelloSAT As String Private Property TFDSelloSAT() As String Get Return _TFDSelloSAT End Get Set _TFDSelloSAT = Value End Set End Property Property DTGVPagosVinculacion As DataTable Get If ViewState("DTGVPagosVinculacion") Is Nothing Then Return New DataTable Else Return DirectCast(ViewState("DTGVPagosVinculacion"), DataTable) End If End Get Set(value As DataTable) ViewState("DTGVPagosVinculacion") = value End Set End Property Private Property CurretUUIDPagoVincular As String Get If ViewState("CurretUUIDPagoVincular") Is Nothing Then Return "-1" Else Return ViewState("CurretUUIDPagoVincular").ToString End If End Get Set(value As String) ViewState("CurretUUIDPagoVincular") = value End Set End Property Private Property XMLNodosPagosModalCount As Integer Get If ViewState("XMLNodosPagosModalCount") Is Nothing Then Return -1 Else Return ViewState("XMLNodosPagosModalCount").ToString.ToEntero End If End Get Set(value As Integer) ViewState("XMLNodosPagosModalCount") = value End Set End Property Private Property MontoPago As Decimal Get If ViewState("MontoPago") Is Nothing Then Return 0 Else Return (ViewState("MontoPago")).ToString.ToDecimal End If End Get Set(value As Decimal) ViewState("MontoPago") = value End Set End Property Private Property CveFacturaComplementoTraslado As Integer Get If ViewState("CveFacturaComplementoTraslado") Is Nothing Then Return -1 Else Return ViewState("CveFacturaComplementoTraslado").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveFacturaComplementoTraslado") = value End Set End Property Private Property ComprasEnComplemento As Integer Get If ViewState("ComprasEnComplemento") Is Nothing Then Return -1 Else Return ViewState("ComprasEnComplemento").ToString.ToEntero End If End Get Set(value As Integer) ViewState("ComprasEnComplemento") = value End Set End Property Private Property SeVinculoConComprasFaltantes As Boolean Get If ViewState("SeVinculoConComprasFaltantes") Is Nothing Then Return False Else Return Boolean.Parse(ViewState("SeVinculoConComprasFaltantes").ToString) End If End Get Set(value As Boolean) ViewState("SeVinculoConComprasFaltantes") = value End Set End Property Property DTTraslados As DataTable Get If ViewState("DTTraslados") Is Nothing Then Return New DataTable Else Return DirectCast(ViewState("DTTraslados"), DataTable) End If End Get Set(value As DataTable) ViewState("DTTraslados") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then ChecandoCorreo = False 'GvD.Columns(GvD.Columns.Count - 1).Visible = True '(UsuarioActual.CveRol = 1) 'GvD.Columns(GvD.Columns.Count - 2).Visible = (UsuarioActual.CveRol = 1) 'GvD.Columns(GvD.Columns.Count - 3).Visible = (UsuarioActual.CveRol = 1) ViewState("Orden") = String.Empty If UsuarioActual.CveEmpresa.Contiene(141, 152, 153, 160, 161, 162) Then System.Threading.Thread.Sleep(2000) txtFechaI.Text = Now.AddMonths(-1).FirstDayOfMonth().ToShortDateString ' String.Format("01/01/{0}", If(Now.Month > 6, Now.Year, Now.Year - 1)) txtFechaF.Text = Now.ToShortDateString 'txtFechaI.Text.ToDate.AddMonths(1).AddDays(-1).ToShortDateString Destino = String.Format("{0}Compras\", UsuarioActual.Empresa.Ruta) Ejecutable = "F:\Proyectos\wwwSIG\Utilerias\ADSUtilerias.exe" Form.DefaultButton = BtnConsultar.UniqueID DdlResponsable.DataSource = GlobalDTUsuarioResponsable(UsuarioActual.CveEmpresa) DdlResponsable.DataBind() DdlResponsable.Items.Insert(0, New ListItem("Todos", "-1")) DdlClasificacionProv.DataSource = GlobalDTProveedorClasificacion(UsuarioActual.CveEmpresa) DdlClasificacionProv.DataBind() DdlClasificacionProv.Items.Insert(0, New ListItem("Todos", "-1")) TxtFechaBitInicio.Text = Now.ToString("dd/MM/yyyy") TxtFechaBitFin.Text = Now.ToString("dd/MM/yyyy") TxtFolio.Focus() If UsuarioActual.Sesion("eFact-Proveedor").ToString <> "" Then TxtProveedor.Text = UsuarioActual.Sesion("eFact-Proveedor").ToString.Trim If UsuarioActual.Sesion("eFact-FI").ToString <> "" Then txtFechaI.Text = UsuarioActual.Sesion("eFact-FI").ToString.Trim If UsuarioActual.Sesion("eFact-FF").ToString <> "" Then txtFechaF.Text = UsuarioActual.Sesion("eFact-FF").ToString.Trim 'If UsuarioActual.CveUsuario = 100 Then lbDescargar.Visible = True 'If UsuarioActual.TienePermisoProceso(81) Then GvD.Columns(11).Visible = True : GvD.Columns(12).Visible = True 'If UsuarioActual.TienePermisoProceso(206) Then GvD.Columns(10).Visible = False 'If UsuarioActual.Empresa.Funcionalidad(156) = "1" Then GvD.Columns(5).Visible = True If UsuarioActual.TienePermisoProceso(81) Then GvD.Columns(14).Visible = True : GvD.Columns(15).Visible = True If UsuarioActual.TienePermisoProceso(206) Then GvD.Columns(13).Visible = False If UsuarioActual.Empresa.Funcionalidad(156) = "1" Then GvD.Columns(7).Visible = True If UsuarioActual.CveEmpresa.Contiene(13, 83) Then LnkRegistarFactura.Visible = True End If CargaGvBitacora() CargaDatos() MostrarSolcitudesSAT() If UsuarioActual.CveRol = 1 Then GVSolicitudesPendientes.Columns(8).Visible = True End If 'CARGA REGISTRO DE FACTURA CargaClasificacionesComprobaciones() CargaClasificaciones() CargaPS(-1) CargaPersoanlCajaChica() CargaPersonalViaticos() CargaDdlRetIVA() CargaDdlRetISR() Dim LblSubProyectoTemp As New Label CargarCentrosDeCosto(Nothing, DdlSubProyecto, Nothing, LblSubProyectoTemp, "Seleccione") LblSubProyecto.InnerText = $"{LblSubProyectoTemp.Text}:" End If removeasincevent() End Sub 'Private Sub CompararString() ' Dim cont As Integer = 10000 ' Dim Sb As New StringBuilder ' For i = 0 To cont ' Sb.AppendFormat("a{0}", i) ' Next 'End Sub Protected Sub BtnConsultar_Click(sender As Object, e As System.EventArgs) Handles BtnConsultar.Click CargaDatos() End Sub Private Sub CargaDatos() DTTraslados = New DataTable Dim Folio, RFC, Proveedor As String Folio = If(TxtFolio.Text.Trim.Length > 0, String.Format("%{0}%", TxtFolio.Text.Trim.ToUpper), "-1") RFC = "-1" 'If(TxtRFC.Text.Trim.Length > 0, TxtRFC.Text.Trim, "-1") Proveedor = If(TxtProveedor.Text.Trim.Length > 0, String.Format("%{0}%", TxtProveedor.Text.Trim.ToUpper.Replace(" ", "%")), "-1") UsuarioActual.Sesion("eFact-Proveedor") = TxtProveedor.Text.Trim If Folio = "" Then UsuarioActual.Sesion("eFact-FI") = txtFechaI.Text If Folio = "" Then UsuarioActual.Sesion("eFact-FF") = txtFechaF.Text Dim FechaI, FechaF As Date FechaI = txtFechaI.Text.ToDate FechaF = txtFechaF.Text.ToDate If Folio <> "-1" Then FechaI = MinFecha FechaF = MaxFecha txtFechaI.Text = MinFecha.ToString txtFechaF.Text = Now.ToShortDateString End If Dim DtPagos As DataTable = Nothing 'Dim DTTrasaldos As DataTable = Nothing Dim ObjDatos As New ClsCompras If ObjDatos.GetFacturas(-1, Folio, FechaI, FechaF, RFC, Proveedor, DdlValidado.SelectedValue.ToEntero, DdlResponsable.SelectedValue.ToEntero, DdlClasificacionProv.SelectedValue.ToEntero, DdlCveTipoProveedor.SelectedValue.ToEntero, DdlTipoComprobante.SelectedValue.ToString, UsuarioActual.CveEmpresa) Then If ObjDatos.DtResultados.Rows.Count > 0 Then GvD.DataSource = ObjDatos.DtResultados.FiltraParametros("TipoComprobante <> 'P' and TipoComprobante <> 'T' ") '.AsEnumerable().Take(100).CopyToDataTable() DtPagos = ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'P'") End If End If LblRegistros.Text = String.Format("{0} Registros", ObjDatos.DtResultados.FiltraParametros("TipoComprobante <> 'P' and TipoComprobante <> 'T' ").Rows.Count.ToString("N0")) LblTotalPagos.Text = String.Format("{0} Pagos", ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'P'").Rows.Count.ToString("N0")) If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then TabTraslados.Visible = True 'If ObjDatos.GetFacturas(-1, Folio, FechaI, FechaF, RFC, Proveedor, DdlValidado.SelectedValue.ToEntero, DdlResponsable.SelectedValue.ToEntero, DdlClasificacionProv.SelectedValue.ToEntero, DdlCveTipoProveedor.SelectedValue.ToEntero, DdlTipoComprobante.SelectedValue.ToString, UsuarioActual.CveEmpresa, Opcion:=2) Then ' If ObjDatos.DtResultados.Rows.Count > 0 Then ' DTTraslados = ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'T'") ' End If 'End If DTTraslados = ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'T'") End If LblTotalTraslados.Text = String.Format("{0} Traslados", ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'T'").Rows.Count.ToString("N0")) If DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 Then GvPagos.DataSource = DtPagos End If If DTTraslados IsNot Nothing AndAlso DTTraslados.Rows.Count > 0 Then GvTraslados.DataSource = DTTraslados End If ObjDatos.Dispose() GvD.DataBind() GvPagos.DataBind() GvTraslados.DataBind() UpPagos.Update() UpDatos.Update() UpTraslados.Update() UPRegistros.Update() End Sub Protected Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click GenerarPDF("Excel") End Sub Protected Sub ImgRefresh_Click(sender As Object, e As EventArgs) Handles ImgRefresh.Click If VerificaCorreo() Then CargaDatos() End If End Sub Private Function VerificaCorreo(Optional ValidaRowCount As Boolean = False) As Boolean Dim Retorno As Boolean = False Dim ObjProcess As Process = Nothing Dim Mensajes As String = "" Dim error1 As Boolean = False Dim CountProcesados As Integer = 0 Try ObjProcess = New Process() ObjProcess.StartInfo.RedirectStandardOutput = True ObjProcess.StartInfo.FileName = Ejecutable ObjProcess.StartInfo.Arguments = $"--mod eFacturas --e {UsuarioActual.CveEmpresa} --c " ObjProcess.StartInfo.UseShellExecute = False ObjProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal ObjProcess.Start() Dim myStreamReader As StreamReader = ObjProcess.StandardOutput 'Read the standard output of the spawned process. Mensajes = myStreamReader.ReadLine() If Mensajes.Length > 0 Then Dim msgs As String() = Mensajes.Split("|"c) Dim NFacturas As Integer = 0 If msgs.Length >= 2 Then Try NFacturas = msgs(0).ToEntero CountProcesados = msgs(0).ToEntero Mensajes = $"La actualización se realizó correctamente.
Facturas agregadas: { NFacturas }" Catch ex As Exception NFacturas = 0 Mensajes = "La actualización se realizó correctamente" End Try Else Mensajes = "La actualización se realizó correctamente" End If LnkNoRecibidas_Click(LnkNoRecibias, EventArgs.Empty, ValidaRowCount:=ValidaRowCount) 'Else ' Dim Str As New StringBuilder ' Dim conta As Integer = 1 ' Str.Append("Se encontraron las siguientes facturas con problema:
") ' Dim ARR As String() = Mensajes.Split("&"c) ' Dim ArrDetalle As String() ' For Each d As String In ARR ' Str.Append("") ' ArrDetalle = d.Split("|"c) ' For Each det As String In ArrDetalle ' Str.AppendFormat("", If(conta Mod 2 = 0, "TextoAlterno", "Texto"), det) ' Next ' Str.Append("") ' conta += 1 ' Next ' Str.Append("
SerieFolioFechaProveedorImporteMotivo
{1}
") ' Mensajes = Str.ToString End If ObjProcess.WaitForExit() ObjProcess.Close() Retorno = True Catch ex As Exception error1 = True OnError("Ocurrió un error al ejecutar el actualizador.", ex) End Try LblFacturasProcesadasCount.Text = "Procesados:" & CountProcesados RegistraScript("$('#ModalBitacoraEfacturas').modal()") CargaDatosBitacora() 'If Not error1 Then Alert(Mensajes, TipoMensaje.MsgInformacion) Return Retorno End Function Protected Sub BtnBuscarBitacora_Click(sender As Object, e As EventArgs) Handles BtnBuscarBitacora.Click CargaDatosBitacora() End Sub Protected Sub LnkBitacotaFacturas_Click(sender As Object, e As EventArgs) RegistraScript("$('#ModalBitacoraEfacturas').modal()") CargaDatosBitacora() End Sub Private Sub CargaDatosBitacora() LblFacturasProcesadasCount.Text = "" Dim ObjCompras As New ClsCompras If ObjCompras.GetFacturasBitacoraGet(TxtFechaBitInicio.Text.ToDate, TxtFechaBitFin.Text.ToDate, UsuarioActual.CveEmpresa) Then GvBitacoraEfacturas.DataSource = ObjCompras.DtResultados Else GvBitacoraEfacturas.DataSource = Nothing End If ObjCompras.Dispose() GvBitacoraEfacturas.DataBind() UpModalBitacoraEfacturas.Update() End Sub #Region "G V D A T O S" Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvD.RowDataBound If e.Row.RowType = DataControlRowType.Header Then e.Row.Cells(5).Attributes.Add("data-tipodato", "numeric") End If If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FindControl("lnkRegenerarPDF").Visible = True ' (UsuarioActual.CveRol = 1) 'e.Row.FindControl("lnkDownPdf").Visible = (UsuarioActual.CveRol = 1) 'e.Row.FindControl("lnkXML").Visible = (UsuarioActual.CveRol = 1) Select Case e.Row.DBCampo("TipoComprobante") Case "I" e.Row.FCLabel("LtTipoComprobante").Text = "Ingreso" e.Row.FCLabel("LtTipoComprobante").CssClass = "label label-sm label-success" e.Row.FCLabel("LtTipoComprobante").Attributes.Add("data-toggle", "tooltip") e.Row.FCLabel("LtTipoComprobante").Attributes.Add("title", "Ingreso") Case "E" e.Row.FCLabel("LtTipoComprobante").Text = "Egreso" e.Row.FCLabel("LtTipoComprobante").CssClass = "label label-sm label-warning" e.Row.FCLabel("LtTipoComprobante").Attributes.Add("data-toggle", "tooltip") ' e.Row.FCLabel("LtTipoComprobante").Attributes.Add("title", "Egreso") Case "P" e.Row.FCLabel("LtTipoComprobante").Text = "Pago" e.Row.FCLabel("LtTipoComprobante").CssClass = "label label-sm label-primary" e.Row.FCLabel("LtTipoComprobante").Attributes.Add("data-toggle", "tooltip") e.Row.FCLabel("LtTipoComprobante").Attributes.Add("title", "Complemento Pago") End Select e.Row.Cells(3).Attributes.Add("data-order", e.Row.DBCampo("FechaFactura").ToDate.Ticks.ToString) 'e.Row.Cells(4).Attributes.Add("data-order", Convert.ToInt64(e.Row.DBCampo("Total").ToDecimal).ToString.PadLeft(10, "0"c)) If File.Exists(String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML"))) Then e.Row.FCLiteral("LtlXML").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("XML"))) If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCLinkButton("LnkAgregarPago").Visible = True End If Else e.Row.FCLiteral("LtlXML").Text = "N/D" If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCLinkButton("LnkAgregarPago").Visible = False End If End If If File.Exists(String.Format("{0}{1}/{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("PDF"))) Then e.Row.FCLiteral("LtlPDF").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("PDF"))) Else e.Row.FCLiteral("LtlPDF").Text = "N/D" End If If e.Row.DBCampo("FueValidado").Contiene("1", "2", "3") Then e.Row.FCLinkButton("ImgValidarCFDi").Visible = False e.Row.FCLiteral("LtlValidado").Visible = True If e.Row.DBCampo("FueValidado") = "2" Then e.Row.FCLiteral("LtlValidado").Text = "Cancelada" e.Row.ForeColor = System.Drawing.Color.Red e.Row.FCHyperLink("HplProveedor").ForeColor = System.Drawing.Color.Red ElseIf e.Row.DBCampo("FueValidado") = "3" Then e.Row.FCLiteral("LtlValidado").Text = "Omitida" e.Row.ForeColor = System.Drawing.Color.Gray e.Row.FCHyperLink("HplProveedor").ForeColor = System.Drawing.Color.Gray End If Else If e.Row.DBCampo("TipoFactura") = "CFD" Then e.Row.FCLinkButton("ImgValidarCFDi").CommandName = "ValidarCFD" e.Row.FCLinkButton("ImgValidarCFDi").OnClientClick = "return confirm('La factura se validó en el sitio del SAT de comprobantes fiscales?');" End If e.Row.FCLinkButton("ImgValidarCFDi").Visible = True e.Row.FCLiteral("LtlValidado").Visible = False End If If e.Row.DBCampo("CveCompra") <> "" Then e.Row.FCLiteral("LtlFolio").Text = String.Format("{1}", e.Row.DBCampo("CveCompra"), e.Row.DBCampo("SerieFolio")) '1\Compras\GAPC480413QL3\A-69.xml e.Row.FCLinkButton("imgD").Visible = False End If If e.Row.DBCampo("CveProveedor") = "" Then e.Row.FCHyperLink("HplProv").Visible = True e.Row.FCHyperLink("HplProv").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveFactura={0}", e.Row.DBCampo("CveFactura")) Else Dim BloquePorComplemento As Integer = e.Row.DataKey("BloquePorComplemento").ToEntero e.Row.FCHyperLink("HplProveedor").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveProveedor={0}", e.Row.DBCampo("CveProveedor")) If e.Row.DBCampo("CveCompra") = "" AndAlso (e.Row.DBCampo("FueValidado") = "1" OrElse UsuarioActual.Empresa.Funcionalidad(529) = "1") Then ' OrElse UsuarioActual.CveEmpresa = 66 If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCHyperLink("HplAgregar").Visible = False Else e.Row.FCHyperLink("HplAgregar").NavigateUrl = String.Format("/Compras/Compras.aspx?CveFactura={0}&RFC={1}", e.Row.DBCampo("CveFactura"), e.Row.DBCampo("RFCDe")) If BloquePorComplemento > 0 Then e.Row.FCHyperLink("HplAgregar").Enabled = False e.Row.FCHyperLink("HplAgregar").Attributes.Add("title", "Bloqueo por complemento") End If End If Else e.Row.FCHyperLink("HplAgregar").Visible = False End If End If If e.Row.RowState = DataControlRowState.Edit OrElse e.Row.RowState = 5 Then End If If Not e.Row.DataKey("CveProveedor").ToEntero > 0 Then e.Row.FCCheckBox("chkRegistraFactura").Visible = False End If End If End Sub Protected Sub GvDatos_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvD.RowUpdating Dim ObjDatos As New ClsCompras Dim FueValidado As Integer = 0 If GvD.Rows(e.RowIndex).FCCheckBox("ChkFueValidado").Checked Then FueValidado = 1 If ObjDatos.UpdateEstatus(FueValidado, GvD.DataKeys(e.RowIndex).Value.ToString.ToEntero, UsuarioActual.CveEmpresa) Then GvD.EditIndex = -1 BtnConsultar_Click(sender, e) End If ObjDatos.Dispose() CargaDatos() End Sub Protected Sub GvDatos_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvD.RowCancelingEdit GvD.EditIndex = -1 CargaDatos() End Sub Protected Sub imgD_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) CveFactura = gvRow.DataKey("CveFactura").ToString.ToEntero Folio1 = gvRow.DataKey("SerieFolio").ToString Proveedor = gvRow.DataKey("NombreProveedor").ToString TxtDescripcion.Text = "" RegistraScript("$('#divDescripcion').modal()") UpDescripcion.Update() End Sub Protected Sub GvDatos_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvD.RowEditing GvD.EditIndex = e.NewEditIndex CargaDatos() End Sub Protected Sub GvDatos_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvD.RowCommand Dim ImgBtn As LinkButton = DirectCast(e.CommandSource, LinkButton) Dim GvRow As GridViewRow = DirectCast(ImgBtn.BindingContainer, GridViewRow) Dim ObjDatos As New ClsCompras Dim Correcto As Boolean = False Select Case e.CommandName Case "ValidarCFDi" Dim ObjValidacion As New ClsValidaCFDi(GvRow.DataKey("UUID"), GvRow.DataKey("RFCDe"), GvRow.DataKey("RFCPara"), GvRow.DataKey("Total").ToDecimal) If ObjValidacion.EsValida > 0 Then If ObjValidacion.EsValida = 2 Then Alert("La factura está cancelada ante el SAT.", TipoMensaje.MsgInformacion) End If Correcto = ObjDatos.UpdateEstatus(ObjValidacion.EsValida, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Else Alert("La Factura no se pudo validar.", TipoMensaje.MsgAdvertencia) End If ObjValidacion.Dispose() Case "ValidarCFD" Correcto = ObjDatos.UpdateEstatus(1, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Case "Omitir" Correcto = ObjDatos.UpdateEstatus(3, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) End Select ObjDatos.Dispose() If Correcto Then CargaDatos() End If End Sub #End Region #Region "G V P A G O S" Protected Sub GvPagos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvPagos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCLabel("LtTipoComprobante").Text = "Pago" e.Row.FCLabel("LtTipoComprobante").CssClass = "label label-sm label-primary" e.Row.FCLabel("LtTipoComprobante").Attributes.Add("data-toggle", "tooltip") e.Row.FCLabel("LtTipoComprobante").Attributes.Add("title", "Complemento Pago") End If e.Row.Cells(2).Attributes.Add("data-order", e.Row.DBCampo("FechaFactura").ToDate.Ticks.ToString) Dim RutaXML As String = String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML")) If File.Exists(String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML"))) Then e.Row.FCLiteral("LtlXML").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("XML"))) If e.Row.DBCampo("TipoComprobante") = "P" And e.Row.DBCampo("FueValidado") = "1" Then e.Row.FCLinkButton("LnkAgregarPagoP").Visible = True End If Else e.Row.FCLiteral("LtlXML").Text = "N/D" ' String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML")) ' If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCLinkButton("LnkAgregarPagoP").Visible = False End If End If If File.Exists(String.Format("{0}{1}/{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("PDF"))) Then e.Row.FCLiteral("LtlPDF").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("PDF"))) Else e.Row.FCLiteral("LtlPDF").Text = "N/D" ' String.Format("{0}{1}/{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("PDF")) End If If e.Row.DBCampo("FueValidado").Contiene("1", "2", "3") Then e.Row.FCLinkButton("ImgValidarCFDi").Visible = False e.Row.FCLiteral("LtlValidado").Visible = True If e.Row.DBCampo("FueValidado") = "2" Then e.Row.FCLiteral("LtlValidado").Text = "Cancelada" e.Row.ForeColor = System.Drawing.Color.Red e.Row.FCHyperLink("HplProveedor").ForeColor = System.Drawing.Color.Red ElseIf e.Row.DBCampo("FueValidado") = "3" Then e.Row.FCLiteral("LtlValidado").Text = "Omitida" e.Row.ForeColor = System.Drawing.Color.Gray e.Row.FCHyperLink("HplProveedor").ForeColor = System.Drawing.Color.Gray End If Else If e.Row.DBCampo("TipoFactura") = "CFD" Then e.Row.FCLinkButton("ImgValidarCFDi").CommandName = "ValidarCFD" e.Row.FCLinkButton("ImgValidarCFDi").OnClientClick = "return confirm('La factura se validó en el sitio del SAT de comprobantes fiscales?');" End If e.Row.FCLinkButton("ImgValidarCFDi").Visible = True e.Row.FCLiteral("LtlValidado").Visible = False End If If e.Row.DBCampo("CveCompra") <> "" Then e.Row.FCLiteral("LtlFolio").Text = String.Format("{1}", e.Row.DBCampo("CveCompra"), e.Row.DBCampo("SerieFolio")) '1\Compras\GAPC480413QL3\A-69.xml End If If e.Row.DBCampo("CveProveedor") = "" Then e.Row.FCHyperLink("HplProv").Visible = True e.Row.FCHyperLink("HplProv").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveFactura={0}", e.Row.DBCampo("CveFactura")) Else e.Row.FCHyperLink("HplProveedor").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveProveedor={0}", e.Row.DBCampo("CveProveedor")) If e.Row.DBCampo("CveCompra") = "" AndAlso (e.Row.DBCampo("FueValidado") = "1") Then ' OrElse UsuarioActual.CveEmpresa = 66 ' If e.Row.DBCampo("TipoComprobante") = "P" Then e.Row.FCHyperLink("HplAgregarP").Visible = False Else e.Row.FCHyperLink("HplAgregarP").NavigateUrl = String.Format("/Compras/Compras.aspx?CveFactura={0}&RFC={1}", e.Row.DBCampo("CveFactura"), e.Row.DBCampo("RFCDe")) End If Else 'si ya tiene cvecompra es que ya está validada e.Row.FCHyperLink("HplAgregarP").Visible = False End If End If Dim CveComplementoPagoCompra As Integer = e.Row.DataKey("CveComplementoPagoCompra").ToString.ToEntero If CveComplementoPagoCompra > 0 Then e.Row.FCLinkButton("LnkAgregarPagoP").CssClass = "btn btn-sm green" e.Row.FCLinkButton("LnkAgregarPagoP").Text = "" 'e.Row.FCLinkButton("LnkAgregarPagoP").ToolTip = "Ver vinculación" e.Row.FCLinkButton("LnkAgregarPagoP").Attributes.Add("Title", "Ver vinculación") Else e.Row.FCLinkButton("LnkAgregarPagoP").CssClass = "btn btn-sm blue" e.Row.FCLinkButton("LnkAgregarPagoP").Text = "" 'e.Row.FCLinkButton("LnkAgregarPagoP").ToolTip = "Vincular Pago" e.Row.FCLinkButton("LnkAgregarPagoP").Attributes.Add("Title", "Vincular Pago") End If End If End Sub Protected Sub GvPagos_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvPagos.RowUpdating Dim ObjDatos As New ClsCompras Dim FueValidado As Integer = 0 If GvPagos.Rows(e.RowIndex).FCCheckBox("ChkFueValidado").Checked Then FueValidado = 1 If ObjDatos.UpdateEstatus(FueValidado, GvD.DataKeys(e.RowIndex).Value.ToString.ToEntero, UsuarioActual.CveEmpresa) Then GvPagos.EditIndex = -1 End If ObjDatos.Dispose() CargaDatos() End Sub Protected Sub GvPagos_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvPagos.RowCancelingEdit GvPagos.EditIndex = -1 CargaDatos() End Sub Protected Sub GvPagos_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvPagos.RowEditing GvPagos.EditIndex = e.NewEditIndex CargaDatos() End Sub Protected Sub imgDP_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) CveFactura = gvRow.DataKey("CveFactura").ToString.ToEntero Folio1 = gvRow.DataKey("SerieFolio").ToString Proveedor = gvRow.DataKey("NombreProveedor").ToString TxtDescripcion.Text = "" RegistraScript("$('#divDescripcionPago').modal()") UpDescripcionPago.Update() End Sub Protected Sub GvPagos_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvPagos.RowCommand Dim ImgBtn As LinkButton = DirectCast(e.CommandSource, LinkButton) Dim GvRow As GridViewRow = DirectCast(ImgBtn.BindingContainer, GridViewRow) Dim ObjDatos As New ClsCompras Dim Correcto As Boolean = False Select Case e.CommandName Case "ValidarCFDi" Dim ObjValidacion As New ClsValidaCFDi(GvRow.DataKey("UUID"), GvRow.DataKey("RFCDe"), GvRow.DataKey("RFCPara"), 0) If ObjValidacion.EsValida > 0 Then If ObjValidacion.EsValida = 2 Then Alert("La factura está cancelada ante el SAT.", TipoMensaje.MsgInformacion) End If Correcto = ObjDatos.UpdateEstatus(ObjValidacion.EsValida, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Else Alert("La Factura no se pudo validar.", TipoMensaje.MsgAdvertencia) End If ObjValidacion.Dispose() Case "ValidarCFD" Correcto = ObjDatos.UpdateEstatus(1, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Case "Omitir" Correcto = ObjDatos.UpdateEstatus(3, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) End Select ObjDatos.Dispose() If Correcto Then CargaDatos() End If End Sub #End Region Protected Sub ImgCFDiMasivo_Click(sender As Object, e As EventArgs) Handles LnkCFDiMasivo.Click Dim ErrorTrans As Boolean = False If Tab.ActiveTabIndex = 0 Then For Each GvRow As GridViewRow In GvD.Rows If GvRow.DataKey("TipoFactura") = "CFDi" AndAlso GvRow.DataKey("FueValidado").Contiene("0", "1") Then Dim ObjValidacion As New ClsValidaCFDi(GvRow.DataKey("UUID"), GvRow.DataKey("RFCDe"), GvRow.DataKey("RFCPara"), GvRow.DataKey("Total").ToDecimal) If ObjValidacion.EsValida > 0 Then Dim ObjDatos As New ClsCompras If Not ObjDatos.UpdateEstatus(ObjValidacion.EsValida, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Then ErrorTrans = True End If ObjDatos.Dispose() End If ObjValidacion.Dispose() End If Next ElseIf Tab.ActiveTabIndex = 1 Then For Each GvRow As GridViewRow In GvPagos.Rows If GvRow.DataKey("TipoFactura") = "CFDi" AndAlso GvRow.DataKey("FueValidado").Contiene("0", "1") Then Dim ObjValidacion As New ClsValidaCFDi(GvRow.DataKey("UUID"), GvRow.DataKey("RFCDe"), GvRow.DataKey("RFCPara"), 0) If ObjValidacion.EsValida > 0 Then Dim ObjDatos As New ClsCompras If Not ObjDatos.UpdateEstatus(ObjValidacion.EsValida, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Then ErrorTrans = True End If ObjDatos.Dispose() End If ObjValidacion.Dispose() End If Next End If If Not ErrorTrans Then Alert("La verificación masiva ha terminado", TipoMensaje.MsgInformacion) CargaDatos() End If End Sub Protected Sub LnkNoRecibidas_Click(sender As Object, e As EventArgs, Optional ValidaRowCount As Boolean = False) Handles LnkNoRecibias.Click Dim DtNoRecibidas As New DataTable Dim Ruta As String = String.Format("{0}Compras\NoRecibidas-{1}.xml", UsuarioActual.Empresa.Ruta, UsuarioActual.CveEmpresa) Dim Str As New StringBuilder If IO.File.Exists(Ruta) Then DtNoRecibidas.ReadXml(Ruta) Dim conta As Integer = 1 Str.Append("Se procesó la información con la siguiente información:
") For Each dr As DataRow In DtNoRecibidas.FiltraParametros("", "Fecha DESC").Rows Str.AppendFormat("", If(conta Mod 2 = 0, "TextoAlterno", "Texto")) Str.AppendFormat("", dr("Serie")) Str.AppendFormat("", dr("Folio")) Str.AppendFormat("", If(dr("Fecha").ToString <> "", dr("Fecha").ToString.ToDate.ToShortDateString, "")) Str.AppendFormat("", dr("Proveedor")) Str.AppendFormat("", dr("Importe").ToString.ToDouble.FormatoNumero) Str.AppendFormat("", dr("Motivo")) Str.AppendFormat("", If(dr("Correo").ToString.Length > 20, dr("Correo").ToString.Substring(0, 20), dr("Correo").ToString())) Str.AppendFormat("", dr("FechaRecepcion").ToString.ToDate.ToShortDateString) Str.Append("") conta += 1 Next Str.Append("
SerieFolioFechaProveedorImporteMotivoCorreoF. Recepción
{0}{0}{0}{0}{0}{0}{0}{0}
") Else Str.Append("No se encontraron facturas pendientes de recibir.") End If If ValidaRowCount Then 'si las facturas no recividas son matores a cero se muestra el mensaje If DtNoRecibidas.Rows.Count > 0 Then Alert(Str.ToString, TipoMensaje.MsgInformacion) End If Else Alert(Str.ToString, TipoMensaje.MsgInformacion) End If DtNoRecibidas.Dispose() CargaDatos() End Sub #Region "G E N E R A P D F " Private Sub GenerarPDF(Optional Tipo As String = "PDF") Dim ObjDatos As New ClsCompras Dim FechaI As String = txtFechaI.Text Dim FechaF As String = txtFechaF.Text If txtFechaI.Text = "" Then FechaI = "-1" If txtFechaF.Text = "" Then FechaF = "-1" Dim Folio = If(TxtFolio.Text.Trim.Length > 0, String.Format("%{0}%", TxtFolio.Text.Trim.ToUpper), "-1") Dim Proveedor = If(TxtProveedor.Text.Trim.Length > 0, String.Format("%{0}%", TxtProveedor.Text.Trim.ToUpper.Replace(" ", "%")), "-1") Dim dt As DataTable = Nothing If ObjDatos.GetFacturas(-1, Folio, txtFechaI.Text.Trim.ToDate, txtFechaF.Text.Trim.ToDate, "-1", Proveedor, DdlValidado.SelectedValue.ToEntero, DdlResponsable.SelectedValue.ToEntero, DdlClasificacionProv.SelectedValue.ToEntero, DdlCveTipoProveedor.SelectedValue.ToEntero, DdlTipoComprobante.SelectedValue.ToString, UsuarioActual.CveEmpresa) Then If Tab.ActiveTabIndex = 0 Then dt = ObjDatos.DtResultados.FiltraParametros("TipoComprobante <> 'P'") Else dt = ObjDatos.DtResultados.FiltraParametros("TipoComprobante = 'P' ") End If Else Alert("No hay datos consultados", TipoMensaje.MsgAdvertencia) End If ObjDatos.Dispose() If dt IsNot Nothing Then Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("FechaInicio", FechaI)) params.Add(New ReportParameter("FechaFin", FechaF)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", Now.ToDateTime.ToShortDateString)) If Imagen.Exists Then params.Add(New ReportParameter("LogoPath", $"file//:{Imagen.FullName}")) Else params.Add(New ReportParameter("LogoPath", "")) End If If Tab.ActiveTabIndex = 2 Then ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", DTTraslados, params, $"FacturasBuzon_{Now.ToString("yyyyMMyyddmmss")}", Tipo) Else ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", dt, params, $"FacturasBuzon_{Now.ToString("yyyyMMyyddmmss")}", Tipo) End If End If End Sub Protected Sub LnkPdf_Click(sender As Object, e As EventArgs) Handles LnkPdf.Click GenerarPDF() End Sub #End Region #Region "S U B I R - F A C T U R A S - M A S I V A M E N T E" Private Sub LnkSubirFacturas_Click(sender As Object, e As EventArgs) Handles LnkSubirFacturas.Click RegistraScript(String.Format("$('#{0}').modal();", "ModalFacturas")) End Sub Private Sub BtnGuardarFaturas_Click(sender As Object, e As EventArgs) Handles BtnGuardarFaturas.Click If UsuarioActual.Empresa.SendMail.Trim.Length = 0 Then Alert("La Empresa no tiene configurado el envió de correo.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim sw As New Diagnostics.Stopwatch Dim swmili As Long = 0 Dim swTiempo As New StringBuilder sw.Start() Dim FileExtension As String = "-1" Dim filesgral As List(Of Archivo) = Anexo.getfiles().Archivos Dim filemove As String = "" Dim ListXML As New List(Of String) Dim ListPDF As New List(Of String) Dim ListDirectorios As New List(Of String) For Each fileItem As Archivo In filesgral FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") filemove = fileItem.filename If filemove <> "" Then 'filemove.FilesMove("", String.Format("{0}\Temp\Facturas", UsuarioActual.Empresa.Ruta)) 'filemove.FilesMove("", String.Format("Empresas\{0}\Temp\Facturas", UsuarioActual.CveEmpresa)) filemove.FilesMove("", String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) 'AGREGA XML A LA LISTA If FileExtension.ToUpper = "XML" Or FileExtension.ToUpper = "PDF" Then ListXML.Add(String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, filemove)) End If End If Next Dim fileEntries As String() = Directory.GetFiles(String.Format("{0}Temp\Facturas", UsuarioActual.Empresa.Ruta)) Dim ListaDirectoriosTemporales As New List(Of String) Dim ListaComprimidos As New List(Of String) 'Dim fileName As String Dim ArchivoExtension As String Dim sOnlyFilename As String For Each filePath In fileEntries ArchivoExtension = IO.Path.GetExtension(String.Format("{0}", filePath)).Replace(".", "") sOnlyFilename = System.IO.Path.GetFileName(filePath) If ArchivoExtension.ToUpper = "RAR" Or ArchivoExtension.ToUpper = "ZIP" Then 'ListaComprimidos.Add(filePath) ''CREO DIRECTORIO ALEATORIO 'Dim Aleatorio As New Random 'Dim TempDirectorio As String = String.Format("{0}{1}\{2}{3}", UsuarioActual.Empresa.Ruta, "Temp\Facturas", Date.Now.Ticks, Aleatorio.Next(100, 999)) 'Directory.CreateDirectory(TempDirectorio) 'ListaDirectoriosTemporales.Add(TempDirectorio) ''AGREGA DIRECTORIO A LA LISTA 'ListDirectorios.Add(TempDirectorio) ''DESCOMPRIME RAR 'DescomprimeFacturas(filePath, TempDirectorio) ''AGREGA XML A LA LISTA 'ListXML.AddRange(Directory.GetFiles(TempDirectorio)) ListXML.Add(filePath) End If Next Dim Arreglo As New ArrayList() ' Dim Archivos As String() = Directory.GetFiles(String.Format("{0}Empresas\{1}\Temp", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa)) 'Dim NombreArchivo As String Dim Bandera = True Dim Retorno = "" Dim ListaArchivosMail As New List(Of ClsSisMail.ArchivoMail) sw.Stop() swTiempo.AppendFormat("ReadFiles: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() Anexo.Text = "" UPAddFacturas.Update() For Each filePath In ListXML If File.Exists(filePath) Then Dim ArchivoAdjunto As New ClsSisMail.ArchivoMail ArchivoAdjunto.ArchivoBinario = File.ReadAllBytes(filePath) ArchivoAdjunto.Ruta = filePath ArchivoAdjunto.NombreArchivo = New FileInfo(filePath).Name ListaArchivosMail.Add(ArchivoAdjunto) End If Next sw.Stop() swTiempo.AppendFormat("Fill ClsSisMail.ArchivoMail: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() If ListaArchivosMail.Count > 0 Then Dim Correo As New ClsSisMail 'If Correo.SendMail(UsuarioActual.Empresa, "sig.buzon@gmail.com", "Facturas Efacturas " & Now.ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then If Correo.SendMail(UsuarioActual.Empresa, UsuarioActual.Empresa.Buzon_Mail, "Facturas Efacturas " & Now.ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then sw.Stop() swTiempo.AppendFormat("EnvioCorreo: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() System.Threading.Thread.Sleep(3000) 'ProcesaBuzon() sw.Stop() swTiempo.AppendFormat("espera: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() If VerificaCorreo(True) Then CargaDatos() End If sw.Stop() swTiempo.AppendFormat("Verifica En la app: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() Else Alert("Se presento un error al procesar las facturas.") End If End If sw.Stop() swTiempo.AppendFormat("BorrarInicio: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds sw.Start() For Each filePath In ListXML Try File.Delete(filePath) Catch ex As Exception End Try Next For Each s As String In ListaComprimidos Try File.Delete(s) Catch ex As Exception End Try Next For Each d As String In ListaDirectoriosTemporales Try Directory.Delete(d, True) Catch ex As Exception End Try Next sw.Stop() swTiempo.AppendFormat("BorrarEnd: ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds) swmili = sw.ElapsedMilliseconds GuardaLogefacturas(swTiempo.ToString()) 'ArchivoExtension = IO.Path.GetExtension(String.Format("{0}", filePath)).Replace(".", "") 'NombreArchivo = System.IO.Path.GetFileName(filePath) 'If ArchivoExtension.ToUpper = "XML" Then ' Dim ArchivoInfo As New FileInfo(filePath) ' Dim Fact2 As Modelos.eFactura = GuardaArchivoXML(filePath) ' If Fact2 IsNot Nothing Then ' Fact2.DirectorioTemporal = ArchivoInfo.DirectoryName & "\" ' Arreglo.Add(Fact2) ' End If 'End If 'If Arreglo.Count > 0 Then ' For Each Fact As Modelos.eFactura In Arreglo ' ' si es exploraciones, no debe de insertar del 2013 ' If UsuarioActual.CveEmpresa = 13 And Convert.ToDateTime(Fact.Fecha).Year < 2014 And Fact.TipodeComprobante <> "egreso" Then ' Bandera = False ' 'ModExtensiones.GuardaLog("'*******noingreso :" + Fact.ArchivoXML + " RFC: " + tRF + " Anio" + Convert.ToDateTime(Fact.Fecha).Year) ' End If ' 'por default, no alimentar facturas menores al 2013 ' If Convert.ToDateTime(Fact.Fecha).Year < 2013 Then ' Bandera = False ' 'ModExtensiones.GuardaLog("'*******noingreso :" + Fact.ArchivoXML + " RFC: " + tRF + " Anio" + Convert.ToDateTime(Fact.Fecha).Year) ' End If ' If Bandera Then ' If Not String.IsNullOrEmpty(Fact.TFDUUID) Then ' Dim Valida As New ClsValidaCFDi(Fact.TFDUUID, Fact.EmisorRFC, Fact.ReceptorRFC, Fact.Total, Fact.Fecha) ' If Valida.EsValida = 1 Then ' Fact.Validada = 1 ' End If ' Valida.Dispose() ' If Not String.IsNullOrEmpty(Fact.ArchivoPDF) Then ' Retorno = AgregaFactura(Fact) ' Else ' If GeneraPDF(Fact.DirectorioTemporal, Fact) Then ' ListPDF.Add(Fact.ArchivoPDF) ' Retorno = AgregaFactura(Fact) ' ' ModExtensiones.GuardaLog("'*******se genero el pdf :" + String.Format("{0}Empresas\{1}\Temp", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa) + Fact.ArchivoXML + " RFC: " + tRF + " Anio" + Convert.ToDateTime(Fact.Fecha).Year + "Retorno:" + Retorno) ' Else ' ' ModExtensiones.GuardaLog("'*******no se genero el pdf :" + String.Format("{0}Empresas\{1}\Temp", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa) + Fact.ArchivoXML + " RFC: " + tRF + " Anio" + Convert.ToDateTime(Fact.Fecha).Year + "Retorno:" + Retorno) ' End If ' End If ' End If ' End If ' Bandera = True ' Try ' If File.Exists(String.Format("{0}{1}", Fact.DirectorioTemporal, Fact.ArchivoXML)) Then ' File.Delete(String.Format("{0}{1}", Fact.DirectorioTemporal, Fact.ArchivoXML)) ' End If ' If File.Exists(String.Format("{0}{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF)) Then ' File.Delete(String.Format("{0}{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF)) ' End If ' Catch ex As Exception ' End Try ' Next 'End If RegistraScript(String.Format("$('#{0}').modal('hide');", "ModalFacturas")) 'Alert(String.Format("Se cargaron {0} Facturas", Arreglo.Count), TipoMensaje.MsgInformacion) End Sub Public Sub GuardaLogefacturas(Str As String) Dim ArchivoW As StreamWriter Dim strLineaTMP As String ' strLineaTMP = Chr(13) & Chr(10) & Day(Now) & "/" & Month(Now) & "/" & Year(Now) & " " & Hour(Now) & ":" & Minuto & ". " & Str & Chr(13) & Chr(10) strLineaTMP = String.Format("{0}{1}Log: {2}{3}:{4}", Chr(13), Chr(10), Str, DateTime.Now.ToShortDateString, DateTime.Now.ToShortTimeString) Try ArchivoW = New StreamWriter(String.Format("{0}\Logefacturas.txt", ModExtensiones.DirectorioBaseEmpresas), True, System.Text.Encoding.UTF8) Catch ex As UnauthorizedAccessException 'Alert("No hay permisos para guardar en el Log.", Extensiones.TipoMensaje.MsgError) Exit Sub Catch ex As Exception Exit Sub End Try Try ArchivoW.WriteLine(strLineaTMP) Catch End Try ArchivoW.Close() ArchivoW.Dispose() End Sub Private Function AgregaFactura(Fact As Modelos.eFactura) As String Dim Retorno As String = "" Dim Correcto As Boolean = False If Fact.Version = "3.2" Then Fact.TipodeComprobante = Fact.TipodeComprobante.Substring(0, 1) Dim ObjDatos As New ClsCompras ObjDatos.IniciaTransacSQL() ObjDatos.CveFactura = 0 Dim Ret As Integer = ObjDatos.AddFactura(Fact.Serie, Fact.Folio, Convert.ToDateTime(Fact.Fecha), Fact.EmisorNombre, Fact.EmisorRFC, Fact.subTotal, Fact.TrasladoIVA, Fact.Total, Fact.TFDUUID, Fact.ReceptorRFC, Fact.ArchivoXML, Fact.ArchivoPDF, Fact.Version, Fact.Descuento, Fact.Moneda, Fact.TipodeComprobante, Fact.TipoCambio, Fact.Validada, Fact.CveEmpresa, Fact.sUPPrefijo) If Ret >= 0 Then If Not Directory.Exists(Destino + Fact.EmisorRFC) Then Directory.CreateDirectory(Destino + Fact.EmisorRFC) End If 'Try ' If File.Exists(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) Then File.Delete(Destino & Retorno.EmisorRFC & "\" & NombreArchivo) ' File.Move(Temporal & NombreArchivo, Destino & Retorno.EmisorRFC & "\" & NombreArchivo) 'Catch ex As IOException ' GuardaLog("'ERROR :" & ex.Message) 'End Try Select Case Ret Case 0 Correcto = True Dim RRutaDestino As String = String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura) 'ModExtensiones.GuardaLog(String.Format(" '--------{0} Compra ya insertada : {1}{2} - {3}", ContadorGeneral, Fact.Serie, Fact.Folio, RRutaDestino)) If Not File.Exists(RRutaDestino) Then File.Move(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, Fact.ArchivoXML), RRutaDestino) ObjDatos.UpdateArchivo(ObjDatos.CveFactura, "XML") ModExtensiones.GuardaLog(" '--------XML Actualizado ") End If Correcto = True Exit Select Case 1 'muevo el archivo y lo renombro Dim StrMover As String = "" Try File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML), String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) File.Move(String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF), String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoXML) + " - " + String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) ModExtensiones.GuardaLog(" '++++++++ Archivo :" + String.Format("{0}\{1}", Fact.DirectorioTemporal, Fact.ArchivoPDF) + " - " + String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) 'si se movieron los dos archivos, los marca como correcto If File.Exists(String.Format("{0}{1}\{2}.xml", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) AndAlso File.Exists(String.Format("{0}{1}\{2}.pdf", Destino, Fact.EmisorRFC, ObjDatos.CveFactura)) Then Correcto = True End If Catch ex As Exception StrMover = ex.Message End Try ModExtensiones.GuardaLog(Convert.ToString(" '++++++++ Compra Insertada :" + Fact.Serie + Fact.Folio + " - Correcto:" + (If(Correcto, "Si", "No" + " Obs: "))) & StrMover) Exit Select End Select End If If Correcto Then ObjDatos.Commit() 'ya se insertó o está insertada Dim Idioma As New CultureInfo("es-MX") 'regreso el format 2014-07 Julio Retorno = Fact.Fecha.ToDate().ToString("yyyy-MM MMMM", Idioma) Else ObjDatos.RollBack() End If ObjDatos.Dispose() Return Retorno End Function Private Sub CargarFacturas(PathArchivo As String, NombreArchivo As String) Dim RFC As String = CargaEmisordeXML(String.Format("{0}", PathArchivo), "RFC", UsuarioActual.Empresa.RFC) If RFC IsNot Nothing Then If NombreArchivo <> "" Then DirectoryExistsCreate(String.Format("{0}Compras", UsuarioActual.Empresa.Ruta)) DirectoryExistsCreate(String.Format("{0}Compras\{1}", UsuarioActual.Empresa.Ruta, RFC.ToUpper)) Try File.Move(PathArchivo, String.Format("{0}Compras\{1}\{2}", UsuarioActual.Empresa.Ruta, RFC.ToUpper, NombreArchivo)) Catch ex As Exception Alert("Error") End Try 'NombreArchivo.FilesMove(NombreArchivo, String.Format("Empresas\{0}\Compras\{1}", UsuarioActual.CveEmpresa, RFC.ToUpper)) End If End If End Sub Private Sub DescomprimeFacturas(PathArchivo As String, Directorio As String) If Not Directory.Exists(Directorio) Then Directory.CreateDirectory(Directorio) End If Using archive As ZipArchive = ZipFile.OpenRead(String.Format("{0}", PathArchivo)) For Each entry As ZipArchiveEntry In archive.Entries If entry.FullName.EndsWith(".xml", StringComparison.OrdinalIgnoreCase) Then 'If File.Exists(String.Format("{0}Empresas\{1}\Temp\{2}\{3}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, Directorio, entry.Name)) Then ' File.Delete(String.Format("{0}Empresas\{1}\Temp\{2}\{3}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, Directorio, entry.Name)) 'End If 'entry.ExtractToFile(String.Format("{0}Empresas\{1}\Temp\{2}\{3}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, Directorio, entry.Name)) If File.Exists(String.Format("{0}\{1}", Directorio, entry.Name)) Then File.Delete(String.Format("{0}\{1}", Directorio, entry.Name)) End If entry.ExtractToFile(String.Format("{0}\{1}", Directorio, entry.Name)) End If Next End Using End Sub Public Shared Function CargaEmisordeXML(ArchivoXML As String, CampoXML As String, RFCEmpresaActual As String) As String Dim Valor As [String] = Nothing If File.Exists(ArchivoXML) Then Dim NombreArchivo As String = Path.GetFileName(ArchivoXML) Dim invalidChars As Char() = Path.GetInvalidFileNameChars() Dim invalidString As String = Regex.Escape(New String(invalidChars)) Dim NombreValido As String = Regex.Replace(NombreArchivo, (Convert.ToString("[") & invalidString) + "]", "") Try Dim XmlDoc As New XmlDocument() XmlDoc.Load(ArchivoXML) Dim nodo As XmlNode = XmlDoc.DocumentElement.ChildNodes(0) Dim node As XmlNode Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3" Dim RfcXML As String = "" Dim Prefijo As String = If(XmlDoc.DocumentElement.Prefix = "", "cfd", XmlDoc.DocumentElement.Prefix) Dim namespaces As New XmlNamespaceManager(XmlDoc.NameTable) If Not Prefijo.ToLower().Equals("cfdi") Then cfdVer = "http://www.sat.gob.mx/cfd/2" End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") node = XmlDoc.SelectSingleNode([String].Format("//{0}:Receptor", Prefijo), namespaces) If node IsNot Nothing Then RfcXML = ValorXML(node, "RFC") End If If RfcXML = RFCEmpresaActual Then Valor = ValorXML(nodo, CampoXML) End If Catch exx As XmlException Valor = Nothing 'Using file__1 As New System.IO.StreamWriter([String].Format("{0}\UtileriasLOG.txt", Path.GetDirectoryName(Application.StartupPath)), True, System.Text.Encoding.UTF8) ' file__1.WriteLine("{DateTime.Now}: {exx.Message}") ' file__1.Close() ' file__1.Dispose() 'End Using End Try End If Return Valor End Function Private Shared Function ValorXML(n As XmlNode, Campo As String, Optional retorno As [String] = "") As String If n Is Nothing Then Return retorno End If Dim o As XmlNode = n.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, Campo, StringComparison.CurrentCultureIgnoreCase) = 0) If o Is Nothing Then Return retorno Else Return o.Value End If End Function Private Function CargaDatosXML(XMLDoc As XmlDocument) As Modelos.eFactura Dim nodo As XmlNode = XMLDoc.DocumentElement If nodo.ChildNodes.Count = 2 Then nodo = nodo.ChildNodes(1) End If Dim Fact As Modelos.eFactura = Nothing Dim node As XmlNode = Nothing Dim RFC As String = "" Dim Prefijo As String = If(String.IsNullOrEmpty(XMLDoc.DocumentElement.Prefix), "cfd", XMLDoc.DocumentElement.Prefix) Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3" Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) If Prefijo.ToLower() <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2" End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") node = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces) 'AndAlso node.ChildNodes.Count > 0 If node IsNot Nothing Then RFC = ValorXML(node, "RFC") End If 'solo si el rfc receptor es el mismo al de la empresa seleccionada If RFC = UsuarioActual.Empresa.RFC AndAlso Convert.ToDateTime(ValorXML(nodo, "fecha")).Year >= 2013 Then Fact = New Modelos.eFactura() 'Fact.CveEmpresa = CveEmpresa Fact.Serie = ValorXML(nodo, "serie") If Not String.IsNullOrEmpty(Fact.Serie) Then Fact.Serie = Fact.Serie End If Fact.Version = ValorXML(nodo, "version").Replace("..", ".") Fact.Folio = ValorXML(nodo, "folio").TrimStart("0"c) Fact.Fecha = ValorXML(nodo, "fecha") Fact.subTotal = Convert.ToDouble(ValorXML(nodo, "subTotal").Replace("..", ".")) Fact.Total = Convert.ToDouble(ValorXML(nodo, "total")) Fact.Moneda = ValorXML(nodo, "Moneda") Fact.TipodeComprobante = ValorXML(nodo, "tipoDeComprobante") Fact.TipoCambio = Convert.ToDouble(ValorXML(nodo, "TipoCambio", "1.0")) Fact.Descuento = Convert.ToDouble(ValorXML(nodo, "descuento", "0")) Fact.CveEmpresa = UsuarioActual.CveEmpresa Fact.sUPPrefijo = Prefijo node = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Fact.EmisorRFC = ValorXML(node, "RFC") Fact.EmisorNombre = ValorXML(node, "nombre") End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces) ' AndAlso node.ChildNodes.Count > 0 If node IsNot Nothing Then Fact.ReceptorRFC = ValorXML(node, "RFC") End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Retencion", Prefijo), namespaces) Fact.TotalRetenciones = Convert.ToDouble(ValorXML(node, "totalImpuestosRetenidos", "0")) For Each retencion As XmlNode In nodeRetenciones If retencion.Attributes.GetNamedItem("impuesto").Value = "IVA" Then Fact.RetencionIVA += Convert.ToDouble(retencion.Attributes.GetNamedItem("importe").Value) End If If retencion.Attributes.GetNamedItem("impuesto").Value = "ISR" Then Fact.RetencionISR += Convert.ToDouble(retencion.Attributes.GetNamedItem("importe").Value) ' Do something. End If Next Fact.SumaTotalRetenciones += Fact.RetencionIVA Fact.SumaTotalRetenciones += Fact.RetencionISR Fact.TotalTraslados = Convert.ToDouble(ValorXML(node, "totalImpuestosTrasladados", "0")) 'Dim o As XmlNode = traslado.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, "impuesto", StringComparison.CurrentCultureIgnoreCase) = 0) Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Traslado", Prefijo), namespaces) For Each traslado As XmlNode In nodeTraslados ' If traslado.Attributes.GetNamedItem("impuesto").Value = "IVA" Dim impuesto As XmlNode = traslado.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, "impuesto", StringComparison.CurrentCultureIgnoreCase) = 0) If impuesto.Value = "IVA" Then Dim ImporteTRaslado As XmlNode = traslado.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, "Importe", StringComparison.CurrentCultureIgnoreCase) = 0) Fact.TrasladoIVA += Convert.ToDouble(ImporteTRaslado.Value) 'If traslado.Attributes("impuesto").Value = "ISR" Then ' TrasladoISR = traslado.Attributes("importe").Value 'End If ' Do something. End If Next Fact.SumaTotalTraslados += Fact.TrasladoIVA End If Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) Dim FacturaMisCuentasSAT As Boolean = False If nodeComp IsNot Nothing AndAlso nodeComp.ChildNodes.Count > 0 Then Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) Fact.TFDUUID = ValorXML(nodeTFD, "UUID", "") Dim nodeRF As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CFDIRegistroFiscal ", "registrofiscal"), namespaces) If nodeRF IsNot Nothing Then Fact.Folio = ValorXML(nodeRF, "folio").TrimStart("0"c) FacturaMisCuentasSAT = True End If Else Fact.TFDUUID = "" If String.IsNullOrEmpty(Fact.TFDUUID) AndAlso Fact.sUPPrefijo.ToLower() = "cfdi" Then 'Mensajes.AppendFormat("{0}|{1}|{2}|{3}|{4}|{5}{6}&", ValorXML(nodo, "serie"), ValorXML(nodo, "folio"), ValorXML(nodo, "fecha").ToDate().ToShortDateString(), Fact.EmisorNombre, ValorXML(nodo, "total").ToDouble().FormatoNumero(), '"Factura no timbrada correctamente.", "") 'CargaMensaje(ValorXML(nodo, "serie"), ValorXML(nodo, "folio"), ValorXML(nodo, "fecha").ToDate(), Fact.EmisorNombre, ValorXML(nodo, "total").ToDouble(), "Factura no timbrada correctamente.", '"", DateTime.Now) End If 'limpio los valores porque realmente no es una factura Fact = Nothing End If 'verifico si el metodo de pago esta dentro de la opcion valida If Convert.ToDateTime(ValorXML(nodo, "fecha")) >= ("2016/07/15").ToDate() Then Dim CasoPermitido As Boolean = False 'If CveEmpresa.Contiene(72, 80) AndAlso ValorXML(nodo, "MetododePago").ToUpper().PadRight(13, " "c).Substring(0, 13) = "TRANSFERENCIA" Then ' CasoPermitido = True 'End If 'If CveEmpresa = 5 OrElse FacturaMisCuentasSAT Then ' CasoPermitido = True 'End If If Not CasoPermitido Then If (Not (ValorXML(nodo, "MetododePago").ToUpper().PadLeft(2, "0"c).Substring(0, 2).Contiene("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "16", "17", "28", "98", "99", "NA") OrElse ValorXML(nodo, "MetododePago").ToUpper().Contiene("NO APLICA", "N/A", "N.A.", "NO IDENTIFICADO"))) Then Dim node2 As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) Dim Nombre As String = "" If node2 IsNot Nothing AndAlso node2.ChildNodes.Count > 0 Then Nombre = ValorXML(node2, "nombre") End If 'CargaMensaje(ValorXML(nodo, "serie"), ValorXML(nodo, "folio"), ValorXML(nodo, "fecha").ToDate(), ValorXML(node2, "nombre"), ValorXML(nodo, "total").ToDouble(), "Método de Pago Incorrecto:" + ValorXML(nodo, "MetododePago"), 'CorreoActual, FechaRecepcionCorreo) Return Nothing End If End If 'faltan leer los impuestos locales 'node = XMLDoc.SelectSingleNode(String.Format("//{0}:ImpuestosLocales", "implocal"), namespaces) 'If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then ' Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Retencion", Prefijo), namespaces) ' Fact.TotalRetenciones = ValorXML(node, "totalImpuestosRetenidos", "0").ToDouble ' For Each retencion As XmlNode In nodeRetenciones ' If retencion.Attributes("impuesto").Value = "IVA" Then ' Fact.RetencionIVA += retencion.Attributes("importe").Value.ToDouble ' End If ' If retencion.Attributes("impuesto").Value = "ISR" Then ' Fact.RetencionISR += retencion.Attributes("importe").Value.ToDouble ' End If ' ' Do something. ' Next ' Fact.SumaTotalRetenciones += Fact.RetencionIVA ' Fact.SumaTotalRetenciones += Fact.RetencionISR ' Fact.TotalTraslados = ValorXML(node, "totalImpuestosTrasladados", "0").ToDouble ' Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Traslado", Prefijo), namespaces) ' For Each traslado As XmlNode In nodeTraslados ' If traslado.Attributes("impuesto").Value = "IVA" Then ' Fact.TrasladoIVA += traslado.Attributes("importe").Value.ToDouble ' End If ' 'If traslado.Attributes("impuesto").Value = "ISR" Then ' ' TrasladoISR = traslado.Attributes("importe").Value ' 'End If ' ' Do something. ' Next ' Fact.SumaTotalTraslados += Fact.TrasladoIVA 'End If End If Else 'ModExtensiones.GuardaLog((Convert.ToString("'*******RFC incorrecto RFC Emp:") & RFC) + " RFC Fact: " + RFCReceptor) 'obtengo los datos del xml, para Dim node2 As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) 'If node2 IsNot Nothing AndAlso node2.ChildNodes.Count > 0 Then ' Mensajes.AppendFormat("{0}|{1}|{2}|{3}|{4}|{5}{6}&", ValorXML(nodo, "serie"), ValorXML(nodo, "folio"), ValorXML(nodo, "fecha").ToDate().ToShortDateString(), ValorXML(node2, "nombre"), ValorXML(nodo, "total").ToDouble().FormatoNumero(), ' "RFC Incorrecto:", RFC) ' CargaMensaje(ValorXML(nodo, "serie"), ValorXML(nodo, "folio"), ValorXML(nodo, "fecha").ToDate(), ValorXML(node2, "nombre"), ValorXML(nodo, "total").ToDouble(), Convert.ToString("RFC Incorrecto:") & RFC, ' CorreoActual, FechaRecepcionCorreo) 'Else ' CargaMensaje("", "", "01/01/2000".ToDate(), "", 0.0, Convert.ToString("RFC Incorrecto:") & RFC, ' CorreoActual, FechaRecepcionCorreo) 'End If End If Return Fact End Function Private Sub CargaImpuestosXML(XMLDoc As XmlDocument) Dim Prefijo As String = If(String.IsNullOrEmpty(XMLDoc.DocumentElement.Prefix), "cfd", XMLDoc.DocumentElement.Prefix) Dim cfdVer As String = "http://www.sat.gob.mx/cfd/3" Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) If Prefijo.ToLower() <> "cfdi" Then cfdVer = "http://www.sat.gob.mx/cfd/2" End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") TrasladoIVA = 0 '_TrasladoIVA = XMLDoc.DocumentElement.ChildNodes(3).Attributes("totalImpuestosTrasladados").Value Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Traslado", Prefijo), namespaces) For Each traslado As XmlNode In nodeTraslados If traslado.Attributes.GetNamedItem("impuesto").Value = "IVA" Then TrasladoIVA += traslado.Attributes.GetNamedItem("importe").Value.ToDouble() End If Next Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) If nodeComp IsNot Nothing AndAlso nodeComp.ChildNodes.Count > 0 Then Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) _TFDUUID = ValorXML(nodeTFD, "UUID", "") _TFDFechaTimbrado = ValorXML(nodeTFD, "FechaTimbrado", "") _TFDSelloCFD = ValorXML(nodeTFD, "selloCFD", "") _TFDNoCertSAT = ValorXML(nodeTFD, "noCertificadoSAT", "") _TFDSelloSAT = ValorXML(nodeTFD, "selloSAT", "") Dim nodeRF As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CFDIRegistroFiscal ", "registrofiscal"), namespaces) If nodeRF IsNot Nothing Then _Folio = ValorXML(nodeRF, "folio").TrimStart("0"c) End If End If End Sub Private Shared Sub CargaTFD(XMLDoc As XmlDocument) '_TFDUUID = XMLDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText '_TFDFechaTimbrado = XMLDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("FechaTimbrado").InnerText '_TFDSelloCFD = XMLDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("selloCFD").InnerText '_TFDNoCertSAT = XMLDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("noCertificadoSAT").InnerText '_TFDSelloSAT = XMLDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("selloSAT").InnerText End Sub Public Function GeneraPDF(Ruta As String, Fact As Modelos.eFactura) As Boolean Dim RutaXML As String = String.Empty Dim RutaPDF As String = String.Empty Dim Retorno As Boolean = False Try Dim XMLDoc As New XmlDocument() Dim TmpArchivoPDF As String = String.Format("{0}{1}-ttt.pdf", Ruta, Path.GetFileNameWithoutExtension(Fact.ArchivoXML)) Dim TmpArchivoQR As String = String.Format("{0}{1}-ttt.jpg", Ruta, Path.GetFileNameWithoutExtension(Fact.ArchivoXML)) Dim ArchivoXML As String = String.Format("{0}{1}", Ruta, Fact.ArchivoXML) ' If Not File.Exists(TmpArchivoPDF) Then XMLDoc.Load(ArchivoXML) CreaDTConceptos() CargaComprobanteXML(XMLDoc) CargaEmisorXML(XMLDoc) CargaReceptorXML(XMLDoc) CargaConceptosXML(XMLDoc) CargaImpuestosXML(XMLDoc) CargaTFD(XMLDoc) Dim QR As New ClbNegBICFDv3_2.ClsNegCBBGenerar() Dim dtotal As Decimal = (If(total.ToDecimal() <= 0.0D, 0.0001D, total.ToDecimal())) QR.GenerarCBB(EmiRFC, RecRfc, dtotal, TFDUUID, TmpArchivoQR) If System.IO.File.Exists(TmpArchivoQR) Then 'Dim ArchivoBaseXLS As String = String.Format("{0}FacturaPDF.xlsm", Ruta.Replace("Temp", "Compras")) If GeneraPDFNew(TmpArchivoPDF, TFDUUID, subTotal, descuento, total, TrasladoIVA.ToString(), moneda, formaDePago, TFDNoCertSAT, TFDFechaTimbrado.ToDate(), noCertificado, DTConceptos, TFDSelloCFD, TFDSelloSAT, TmpArchivoQR, Serie + Folio, tipoDeComprobante, "", RecRfc, RecNombre, DomRecCalle, DomRecCol, DomRecFisNoExt, DomRecFisNoInt, DomRecCP, DomRecMun, DomRecEst, Regimen, condicionesDePago, metodoDePago, NumCtaPagoNumCtaPago, fecha.ToDate()) Then Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) Retorno = True End If File.Delete(TmpArchivoQR) RutaPDF = TmpArchivoPDF Else Retorno = False End If 'Else 'RutaPDF = TmpArchivoPDF 'End If If DTConceptos IsNot Nothing Then DTConceptos.Dispose() End If Catch ex As Exception ModExtensiones.GuardaLog("11189" + ex.Message) End Try Return Retorno End Function Private Sub CargaComprobanteXML(XMLDoc As XmlDocument) Dim nodo As XmlNode = XMLDoc.DocumentElement Serie = ValorXML(nodo, "serie", "") _Folio = ValorXML(nodo, "folio", "") _fecha = ValorXML(nodo, "fecha", "") _tipoDeComprobante = ValorXML(nodo, "tipoDeComprobante", "") _formaDePago = ValorXML(nodo, "formaDePago", "") _subTotal = ValorXML(nodo, "subTotal", "0") _descuento = ValorXML(nodo, "descuento", "0") _total = ValorXML(nodo, "total", "0") _moneda = ValorXML(nodo, "Moneda") _metodoDePago = ValorXML(nodo, "metodoDePago", "") _condicionesDePago = ValorXML(nodo, "condicionesDePago", "") _LugarExpedicion = ValorXML(nodo, "LugarExpedicion", "") _NumCtaPagoNumCtaPago = ValorXML(nodo, "NumCtaPago", "") _noCertificado = XMLDoc.DocumentElement.Attributes.GetNamedItem("noCertificado").Value End Sub Private Sub CargaEmisorXML(XMLDoc As XmlDocument) Dim nodo As XmlNode = XMLDoc.DocumentElement.ChildNodes(0) _EmiRFC = ValorXML(nodo, "rfc", "") _EmiNombre = ValorXML(nodo, "nombre", "") nodo = XMLDoc.DocumentElement.ChildNodes(0).ChildNodes(0) _DomFisCalle = ValorXML(nodo, "calle", "") _DomFisNoExt = ValorXML(nodo, "noExterior", "") 'LblDomFisNoInt.Text = XMLDoc.DocumentElement.ChildNodes(0).ChildNodes(0).Attributes("noInterior").Value _DomFisCol = ValorXML(nodo, "colonia", "") _DomFisCP = ValorXML(nodo, "codigoPostal", "") _DomFisMun = ValorXML(nodo, "municipio", "") _DomFisLoc = ValorXML(nodo, "localidad", "") _DomFisEst = ValorXML(nodo, "estado", "") _DomFisPais = ValorXML(nodo, "pais", "") nodo = XMLDoc.DocumentElement.ChildNodes(0).ChildNodes(1) _ExpEnCalle = ValorXML(nodo, "calle", "") _ExpEnNoExt = ValorXML(nodo, "noExterior", "") 'LblExpEnNoInt.Text = XMLDoc.DocumentElement.ChildNodes(0).ChildNodes(1).Attributes("noInterior").Value ExpEnCol = ValorXML(nodo, "colonia", "") _ExpEnCP = ValorXML(nodo, "codigoPostal", "") _ExpEnMun = ValorXML(nodo, "municipio", "") _ExpEnLoc = ValorXML(nodo, "localidad", "") _ExpEnEst = ValorXML(nodo, "estado", "") _ExpEnPais = ValorXML(nodo, "pais", "") nodo = XMLDoc.DocumentElement.ChildNodes(0).ChildNodes(2) _Regimen = ValorXML(nodo, "Regimen", "") End Sub Private Sub CargaReceptorXML(XMLDoc As XmlDocument) Dim nodo As XmlNode = XMLDoc.DocumentElement.ChildNodes(1) _RecRfc = ValorXML(nodo, "rfc", "") _RecNombre = ValorXML(nodo, "nombre", "") nodo = XMLDoc.DocumentElement.ChildNodes(1).ChildNodes(0) _DomRecCalle = ValorXML(nodo, "calle", "") _DomRecFisNoExt = ValorXML(nodo, "noExterior", "") _DomRecFisNoInt = ValorXML(nodo, "noInterior", "") _DomRecCol = ValorXML(nodo, "colonia", "") _DomRecCP = ValorXML(nodo, "codigoPostal", "") _DomRecMun = ValorXML(nodo, "municipio", "") _DomRecLoc = ValorXML(nodo, "localidad", "") _DomRecEst = ValorXML(nodo, "estado", "") _DomRecPais = ValorXML(nodo, "pais", "") End Sub Private Sub CargaConceptosXML(XMLDoc As XmlDocument) Dim i As Integer = 0 'Dim SB As New StringBuilder() 'SB.Append("") 'SB.AppendLine("") Dim nodo As XmlNode = Nothing For i = 0 To XMLDoc.DocumentElement.ChildNodes(2).ChildNodes.Count - 1 nodo = XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i) 'SB.Append("") 'SB.Append("") 'SB.Append("") 'SB.Append("") 'SB.Append("") 'SB.Append("") 'SB.Append("") AddPS(nodo.Attributes.GetNamedItem("cantidad").Value.ToDouble(), nodo.Attributes.GetNamedItem("unidad").Value, nodo.Attributes.GetNamedItem("descripcion").Value, nodo.Attributes.GetNamedItem("valorUnitario").Value.ToDouble(), 0, nodo.Attributes.GetNamedItem("importe").Value.ToDouble()) Next 'SB.Append("
cantidaddescripcionvalorUnitarioimporteunidad
" & XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i).Attributes("cantidad").Value & "" & XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i).Attributes("descripcion").Value & "" & XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i).Attributes("valorUnitario").Value & "" & XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i).Attributes("importe").Value & "" & XMLDoc.DocumentElement.ChildNodes(2).ChildNodes(i).Attributes("unidad").Value & "
") 'If i > 0 Then Response.Write(SB.ToString) 'SB.Clear() End Sub Private Sub AddPS(Cantidad As Double, UM As String, PS As String, PU As Double, IVA As Double, Optional Total As Double = 0) If PS <> "IVA" Then Dim Row As DataRow = Nothing Row = DTConceptos.NewRow() Row("Consec") = DTConceptos.Rows.Count + 1 Row("Cantidad") = Cantidad Row("UM") = UM Row("PS") = PS Row("PU") = PU Row("IVA") = IVA Row("Total") = If(Total > 0, Total, (Cantidad * PU)) DTConceptos.Rows.Add(Row) End If End Sub Private Function GeneraPDFNew(TmpArchivoPDF As String, FolioFiscal As String, SubTotal As String, Descuento As String, Total As String, IVA As String, Moneda As String, FormaDePago As String, NoSerieCertificado As String, FechaCertificacion As DateTime, NoSerieCertificadoContribuyente As String, DTConceptos As DataTable, SelloCFDi As String, SelloSAT As String, CBB As String, Folio As String, TipodeComprobante As String, CadenaOriginalCFD As String, RFC As String, Cliente As String, Direccion As String, Colonia As String, NoExt As String, NoInt As String, CP As String, Ciudad As String, Estado As String, Regimen As String, CondicionPago As String, MetodoPago As String, NumCtaPago As String, fecha As System.DateTime) As Boolean Dim Retorno = False Dim NombreArchivo As String = TmpArchivoPDF Dim CadenaOriginal As String = (Convert.ToString((Convert.ToString((Convert.ToString("||1.0|") & FolioFiscal) + "|" + FechaCertificacion.ToString("yyyy-MM-dd") + "T" + FechaCertificacion.ToString("HH:mm:ss") + "|") & SelloCFDi) + "|") & NoSerieCertificado) + "||" Dim RutaFormato As String = String.Format("{0}Empresas\Grales\Formatos\CFDI.rdlc", ModExtensiones.DirectorioBaseEmpresas) 'Dim ArchivoTempXLS As String = String.Format("{0}\GenSis{1}-{2}", Path.GetDirectoryName(ArchivoBaseXLS), Now.Ticks, Path.GetFileName(ArchivoBaseXLS)) Dim Fiscal As String = String.Format("Domicilio Fiscal {0}{1} {2}{0}Col.{3}{0}CP. {4} {5},{6},{7}", vbCr, DomFisCalle, DomFisNoExt, DomFisCol, DomFisCP, DomFisMun, DomFisEst, DomFisPais) Try Dim parametros As New List(Of ReportParameter)() 'params.Add(New ReportParameter("ArchivoBaseXLS", ArchivoBaseXLS)) 'params.Add(New ReportParameter("TmpArchivoPDF", TmpArchivoPDF)) parametros.Add(New ReportParameter("FolioFiscal", FolioFiscal)) parametros.Add(New ReportParameter("SubTotal", SubTotal.FormatoNumero())) parametros.Add(New ReportParameter("Descuento", Descuento.FormatoNumero())) parametros.Add(New ReportParameter("Total", Total.FormatoNumero())) parametros.Add(New ReportParameter("IVA", IVA.FormatoNumero())) parametros.Add(New ReportParameter("Moneda", Moneda)) parametros.Add(New ReportParameter("FormaDePago", FormaDePago)) parametros.Add(New ReportParameter("NoSerieCertificado", NoSerieCertificado)) parametros.Add(New ReportParameter("FechaCertificacion", FechaCertificacion.ToString("yyyy-MM-dd") + "T" + FechaCertificacion.ToString("HH:mm:ss"))) parametros.Add(New ReportParameter("NoSerieCertificadoContribuyente", NoSerieCertificadoContribuyente)) parametros.Add(New ReportParameter("SelloCFDi", SelloCFDi)) parametros.Add(New ReportParameter("SelloSAT", SelloSAT)) parametros.Add(New ReportParameter("CBB", String.Format("file:///{0}", CBB))) parametros.Add(New ReportParameter("Folio", Folio)) parametros.Add(New ReportParameter("TipodeComprobante", TipodeComprobante.ToUpper())) parametros.Add(New ReportParameter("CadenaOriginalCFD", CadenaOriginalCFD)) parametros.Add(New ReportParameter("RFC", RFC)) parametros.Add(New ReportParameter("Cliente", Cliente)) parametros.Add(New ReportParameter("Direccion", Direccion)) parametros.Add(New ReportParameter("Colonia", Colonia)) parametros.Add(New ReportParameter("NoExt", NoExt)) parametros.Add(New ReportParameter("NoInt", NoInt)) parametros.Add(New ReportParameter("CP", CP)) parametros.Add(New ReportParameter("Ciudad", Ciudad)) parametros.Add(New ReportParameter("Estado", Estado)) parametros.Add(New ReportParameter("Regimen", Regimen)) parametros.Add(New ReportParameter("CondicionPago", CondicionPago)) parametros.Add(New ReportParameter("MetodoPago", MetodoPago)) parametros.Add(New ReportParameter("NumCtaPago", NumCtaPago)) parametros.Add(New ReportParameter("fecha", fecha.ToString("yyyy-MM-dd") + "T" + fecha.ToString("HH:mm:ss"))) parametros.Add(New ReportParameter("Fiscal", Fiscal)) parametros.Add(New ReportParameter("EmiNombre", EmiNombre)) parametros.Add(New ReportParameter("EmiRFC", EmiRFC)) parametros.Add(New ReportParameter("NoSerieCertificado", NoSerieCertificado)) parametros.Add(New ReportParameter("TotalLetra", Total.ToDouble().Texto2Letras(CveMoneda:=If(Moneda = "MXN", 1, If(Moneda = "USD", 2, 3))))) parametros.Add(New ReportParameter("Empresa", UsuarioActual.Empresa.Empresa)) 'params.Add(New ReportParameter("DTConceptos", DTConceptos)) Dim rds As New ReportDataSource() rds.Name = "DsOC" rds.Value = DTConceptos Dim Archivo As New System.IO.FileInfo(RutaFormato) If Archivo.Exists Then Dim MR As New ReportViewer() MR.LocalReport.DataSources.Add(rds) MR.LocalReport.ReportPath = RutaFormato MR.ProcessingMode = ProcessingMode.Local MR.LocalReport.EnableExternalImages = True MR.LocalReport.SetParameters(parametros) MR.LocalReport.Refresh() Dim warnings As Warning() = Nothing Dim streamids As String() = Nothing Dim mimeType As String = Nothing Dim encoding As String = Nothing Dim extension As String = Nothing Dim bytes As Byte() = Nothing bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) Using fs As New FileStream(NombreArchivo, FileMode.Create) fs.Write(bytes, 0, bytes.Length) fs.Close() End Using Retorno = True Else ModExtensiones.GuardaLog(String.Format("No existe formato Base")) End If Catch ex As Exception ModExtensiones.GuardaLog(String.Format("Ocurrio un Error al generar el reporte RLDC")) Retorno = False End Try Return Retorno End Function Private Sub CreaDTConceptos() DTConceptos = New DataTable() DTConceptos.Columns.Add("Consec", GetType(Integer)) DTConceptos.Columns.Add("Cantidad", GetType(Double)) DTConceptos.Columns.Add("UM", GetType(String)) DTConceptos.Columns.Add("PS", GetType(String)) DTConceptos.Columns.Add("PU", GetType(Double)) DTConceptos.Columns.Add("IVA", GetType(Double)) DTConceptos.Columns.Add("Total", GetType(Double)) End Sub #End Region #Region "Sat descargamasiva" Private Sub cargasolicitudes() LnkverificarSolicitudes.Visible = False Using nom As ClsNominas = New ClsNominas() If nom.SolicitudesGet(-1, UsuarioActual.CveEmpresa, CveTipoSolicitud:=2, Estatus:=0, Top:=50) Then GVSolicitudesPendientes.DataSource = nom.DtResultados If nom.DtResultados.Rows.Count > 0 Then LnkverificarSolicitudes.Visible = True End If GVSolicitudesPendientes.DataBind() End If If nom.SolicitudesGet(-1, UsuarioActual.CveEmpresa, CveTipoSolicitud:=2, Estatus:=1, Top:=50) Then GVSolicitudesNominas.DataSource = nom.DtResultados GVSolicitudesNominas.DataBind() End If End Using UPModalViewSolicitudes.Update() End Sub Protected Sub LnkShowSolicitudes_Click(ByVal sender As Object, ByVal e As EventArgs) TabPanel.ActiveTabIndex = 0 cargasolicitudes() RegistraScript("$('#ModalViewSolicitudes').modal();") End Sub 'Protected Sub LnkSolicitarSat_Click(ByVal sender As Object, ByVal e As EventArgs) ' 'Dim idSolicitudCFDI As Integer = 0 ' 'Dim idSolicitudMetadata As Integer = 0 ' 'Dim estatus As Integer = 0 ' 'Dim observaciones As String = "" ' 'Dim fechaInicio As DateTime = txtFechaIAdd.Text.ToDateTime() ' 'Dim fechaFin As DateTime = txtFechaFAdd.Text.ToDateTime() ' 'Dim cveUsuarioIng As Integer = UsuarioActual.CveUsuario ' 'Dim cveEmpresa As Integer = UsuarioActual.CveEmpresa ' 'Dim Continuar As Boolean = False ' 'Using nom As ClsNominas = New ClsNominas() ' ' Continuar = nom.SolicitudesAdd(idSolicitudCFDI, idSolicitudMetadata, estatus, observaciones, fechaInicio, fechaFin, cveUsuarioIng, cveEmpresa, 2) ' ' Dim api = New GeneralesAPIeFacturas() ' ' api.GeneraSolicitud() ' ' api.VerificaSolicitudesNominas() ' 'End Using ' 'If Continuar Then ' ' txtFechaIAdd.Text = "" ' ' txtFechaFAdd.Text = "" ' ' RegistraScript("$('#DModalSolicitudesNominas').modal('hide');") ' ' cargasolicitudes() ' ' Alert("se a envia la solicitud al sat, le enviaremos un correo en cuanto tengamos una respuesta", ModExtensiones.TipoMensaje.ToastInformacion) ' 'End If ' Dim idSolicitudCFDI As Integer = 0 ' Dim idSolicitudMetadata As Integer = 0 ' Dim estatus As Integer = 0 ' Dim observaciones As String = "" ' Dim fechaInicio As DateTime = txtFechaIAdd.Text.ToDateTime() ' Dim fechaFin As DateTime = txtFechaFAdd.Text.ToDateTime() ' Dim cveUsuarioIng As Integer = UsuarioActual.CveUsuario ' Dim cveEmpresa As Integer = UsuarioActual.CveEmpresa ' Dim Continuar As Boolean = False ' Using nom As ClsNominas = New ClsNominas() ' Continuar = nom.SolicitudesAdd(idSolicitudCFDI, idSolicitudMetadata, estatus, observaciones, fechaInicio, fechaFin, cveUsuarioIng, cveEmpresa, CveTipoSolicitud:=3) ' End Using ' If Continuar Then ' Dim sbResultado As StringBuilder = New StringBuilder() ' Dim api = New GeneralesAPIeFacturas() ' Dim ObjApiSolicitud As JToken = CType(api.GeneraSolicitud(UsuarioActual.CveEmpresa, 3), JToken) ' Dim resultSolicitud As List(Of String) = New List(Of String)() ' Dim resultVerificacion As List(Of String) = New List(Of String)() ' Dim ResultadoVerificaionOK = False ' Dim SeVerifico = False ' Dim TipoMensaje = ModExtensiones.TipoMensaje.MsgInformacion ' Dim ResultadoSolicitudOK = False ' If Not (ObjApiSolicitud Is Nothing) Then ' resultSolicitud = ObjApiSolicitud.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ' ResultadoSolicitudOK = Boolean.Parse(resultSolicitud(0)) ' Else ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' If ResultadoSolicitudOK Then ' Dim ObjApiVerificacion As JToken = CType(api.VerificaSolicitudesNominas(UsuarioActual.CveEmpresa, 3), JToken) ' If Not (ObjApiVerificacion Is Nothing) Then ' resultVerificacion = ObjApiVerificacion.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ' ResultadoVerificaionOK = Boolean.Parse(resultVerificacion(0)) ' SeVerifico = True ' Else ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' End If ' If resultSolicitud.Count = 4 Then ' If ResultadoSolicitudOK Then ' If resultSolicitud(1).ToString().Trim().Length > 0 Then ' sbResultado.Append($"{resultSolicitud(1)}
") ' Else ' sbResultado.Append($"Solicitud Generada Correctamente") ' sbResultado.Append($"Se presento un error al verificar las solicitudes
{resultSolicitud(1)}
") ' End If ' Else ' sbResultado.Append($"{resultSolicitud(1)}") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Else ' sbResultado.AppendLine("Se presento un error al generar la solicitud (API)
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' If SeVerifico AndAlso resultVerificacion.Count = 4 Then ' If ResultadoVerificaionOK Then ' sbResultado.Append($"{resultVerificacion(1)}
") ' Else ' sbResultado.Append($"Se presento un error al verificar las solicitudes {resultVerificacion(1)}
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Else ' sbResultado.AppendLine("Se presento un error al verificar las solicitudes (API)
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Alert(sbResultado.ToString(), TipoMensaje) ' End If ' If Continuar Then ' txtFechaIAdd.Text = "" ' txtFechaFAdd.Text = "" ' RegistraScript("$('#ModalViewSolicitudes').modal('hide');") ' cargasolicitudes() ' End If 'End Sub Protected Sub LnkSolicitarSat_Click(ByVal sender As Object, ByVal e As EventArgs) Dim sbResultado As StringBuilder = New StringBuilder() Dim idSolicitudCFDI As Integer = 0 Dim idSolicitudMetadata As Integer = 0 Dim estatus As Integer = 0 Dim observaciones As String = "" Dim fechaInicio As DateTime = txtFechaIAdd.Text.ToDateTime() Dim fechaFin As DateTime = txtFechaFAdd.Text.ToDateTime() Dim cveUsuarioIng As Integer = UsuarioActual.CveUsuario Dim cveEmpresa As Integer = UsuarioActual.CveEmpresa Dim CveSolicitudAgregada As Integer = -1 Dim Folio As Integer = -1 Using nom As ClsNominas = New ClsNominas() Dim CveTipoSolicitud As Integer = If(ChkMetaDatos.Checked, 202, 2) CveSolicitudAgregada = nom.SolicitudesAdd2(idSolicitudCFDI, idSolicitudMetadata, estatus, observaciones, fechaInicio, fechaFin, cveUsuarioIng, cveEmpresa, CveTipoSolicitud:=CveTipoSolicitud) If CveSolicitudAgregada > 0 Then Folio = nom.FolioSolicitud End If End Using If CveSolicitudAgregada > 0 Then Dim api = New GeneralesAPIeFacturas() Dim ObjApiSolicitud As JToken = CType(api.GeneraSolicitud(UsuarioActual.CveEmpresa, 2, CveSolicitudAgregada), JToken) Dim resultSolicitud As List(Of String) = New List(Of String)() Dim resultVerificacion As List(Of String) = New List(Of String)() Dim TipoMensaje = ModExtensiones.TipoMensaje.MsgInformacion Dim ResultadoSolicitudOK = False If Not (ObjApiSolicitud Is Nothing) Then resultSolicitud = ObjApiSolicitud.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ResultadoSolicitudOK = Boolean.Parse(resultSolicitud(0)) Else TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If If ResultadoSolicitudOK Then sbResultado.Append($"Solicitud registrada. {resultSolicitud(1)}
Folio: {Folio}") Else If ObjApiSolicitud IsNot Nothing AndAlso resultSolicitud.Count = 4 Then sbResultado.Append($"Solicitud registrada, pendiente de verificar en SAT
Folio: {Folio}
({resultSolicitud(1)})
") Else sbResultado.Append($"Solicitud registrada, pendiente de verificar en SAT
Folio: {Folio}") End If TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If Alert(sbResultado.ToString(), TipoMensaje) Else Alert("No se puedo registrar la solictud".ToString(), ModExtensiones.TipoMensaje.MsgAdvertencia) End If If CveSolicitudAgregada > 0 Then txtFechaIAdd.Text = "" txtFechaFAdd.Text = "" ChkMetaDatos.Checked = False RegistraScript("$('#ModalAgregarSolicitud').modal('hide');") cargasolicitudes() End If End Sub 'Protected Sub LnkverificarSolicitudes_Click(ByVal sender As Object, ByVal e As EventArgs) ' Dim sbResultado As StringBuilder = New StringBuilder() ' Dim api = New GeneralesAPIeFacturas() ' Dim ObjApiSolicitud As JToken = CType(api.GeneraSolicitud(UsuarioActual.CveEmpresa, 3), JToken) ' Dim resultSolicitud As List(Of String) = New List(Of String)() ' Dim resultVerificacion As List(Of String) = New List(Of String)() ' Dim ResultadoVerificaionOK = False ' Dim SeVerifico = False ' Dim TipoMensaje = ModExtensiones.TipoMensaje.MsgInformacion ' Dim ResultadoSolicitudOK = False ' If Not (ObjApiSolicitud Is Nothing) Then ' resultSolicitud = ObjApiSolicitud.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ' ResultadoSolicitudOK = Boolean.Parse(resultSolicitud(0)) ' Else ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' If ResultadoSolicitudOK Then ' Dim ObjApiVerificacion As JToken = CType(api.VerificaSolicitudesNominas(UsuarioActual.CveEmpresa, 3), JToken) ' If Not (ObjApiVerificacion Is Nothing) Then ' resultVerificacion = ObjApiVerificacion.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ' ResultadoVerificaionOK = Boolean.Parse(resultVerificacion(0)) ' SeVerifico = True ' Else ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' End If ' If resultSolicitud.Count = 4 Then ' If ResultadoSolicitudOK Then ' If resultSolicitud(2).ToString().Trim().Length > 0 Then ' sbResultado.Append($"{resultSolicitud(2)}
") ' Else ' sbResultado.Append($"Solicitud Generada Correctamente") ' sbResultado.Append($"Se presento un error al verificar las solicitudes
{resultSolicitud(1)}
") ' End If ' Else ' sbResultado.Append($"{resultSolicitud(1)}") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Else ' sbResultado.AppendLine("Se presento un error al generar la solicitud (API)
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' If SeVerifico AndAlso resultVerificacion.Count = 4 Then ' If ResultadoVerificaionOK Then ' sbResultado.Append($"{resultVerificacion(1)}
") ' Else ' sbResultado.Append($"Se presento un error al verificar las solicitudes {resultVerificacion(1)}
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Else ' sbResultado.AppendLine("Se presento un error al verificar las solicitudes (API)
") ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia ' End If ' Alert(sbResultado.ToString(), TipoMensaje) ' cargasolicitudes() 'End Sub Protected Sub LnkverificarSolicitudes_Click(ByVal sender As Object, ByVal e As EventArgs) Try Dim sbResultado As StringBuilder = New StringBuilder() Dim TipoMensaje = ModExtensiones.TipoMensaje.MsgInformacion For Each GvRow As GridViewRow In GVSolicitudesPendientes.Rows Dim CveSolicitudActual As Integer = GvRow.DataKey("CveSolicitud").ToEntero() Dim idSolicitud As String = GvRow.DataKey("idSolicitud").Trim() Dim CveTipoSolicitud As Integer = GvRow.DataKey("CveTipoSolicitud").ToEntero() Dim Folio As Integer = GvRow.DataKey("Folio").ToEntero() Dim resultSolicitud As List(Of String) = New List(Of String)() Dim resultVerificacion As List(Of String) = New List(Of String)() Dim ResultadoVerificaionOK = False Dim SeVerifico = False Dim ResultadoSolicitudOK = False Dim api = New GeneralesAPIeFacturas() Dim Verificar As Boolean = True If idSolicitud.Length = 0 Then Dim ObjApiSolicitud As JToken = CType(api.GeneraSolicitud(UsuarioActual.CveEmpresa, CveTipoSolicitud, CveSolicitudActual), JToken) If Not (ObjApiSolicitud Is Nothing) Then resultSolicitud = ObjApiSolicitud.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() ResultadoSolicitudOK = Boolean.Parse(resultSolicitud(0)) Try sbResultado.Append($"Solicitud {Folio} { resultSolicitud(1)}.
") If resultSolicitud(1).Contains("No se Generaron solicitudes al SAT") Then Verificar = False Else Verificar = True End If Catch ex As Exception sbResultado.Append($"Solicitud {Folio} solicitada a SAT.
") Verificar = False End Try Else TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If Else resultSolicitud = New List(Of String)() resultSolicitud.Add("true") resultSolicitud.Add("") resultSolicitud.Add("") resultSolicitud.Add("") ResultadoSolicitudOK = True Verificar = True End If If ResultadoSolicitudOK And Verificar Then Dim ObjApiVerificacion As JToken = CType(api.VerificaSolicitudesNominas(UsuarioActual.CveEmpresa, CveTipoSolicitud, CveSolicitudActual), JToken) If Not (ObjApiVerificacion Is Nothing) Then resultVerificacion = ObjApiVerificacion.[Select](Function(token) token.Values().Aggregate(Function(i, j) $"{i}|{j}").Value(Of String)()).ToList() 'If UsuarioActual.CveRol = 1 Then ' Dim respesta = New StringBuilder ' For Each s As String In resultVerificacion ' respesta.AppendLine($"{s} - ") ' Next ' Alert(respesta.ToString) 'End If ResultadoVerificaionOK = Boolean.Parse(resultVerificacion(0)) SeVerifico = True Else TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If Else If resultSolicitud.Count >= 4 Then sbResultado.Append($"({resultSolicitud(1)})
Folio:{Folio}
") Else sbResultado.Append($"Solicitud pendiente de verificar en SAT
Folio:{Folio}
") End If TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If 'If UsuarioActual.CveRol = 1 Then ' Alert($"SeVerifico {SeVerifico.ToString} resultVerificacion.Count {resultVerificacion.Count }") 'End If If Verificar Then If SeVerifico AndAlso resultVerificacion.Count >= 4 Then If ResultadoVerificaionOK Then sbResultado.Append($"Solicitud procesadaFolio: {Folio}
{resultVerificacion(1)}") Else sbResultado.Append($"Solicitud no verificada
Folio: {Folio}{resultVerificacion(1)}.
") TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If Else sbResultado.Append($"Se presento un error al verificar la solicitud Folio: {Folio}.
") TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If End If Next Alert(sbResultado.ToString(), TipoMensaje) cargasolicitudes() Catch ex As Exception Alert(ex.StackTrace) End Try End Sub Protected Sub LnkAgregarSolictud_Click(ByVal sender As Object, ByVal e As EventArgs) txtFechaIAdd.Text = "" txtFechaFAdd.Text = "" ChkMetaDatos.Checked = False UPModalViewSolicitudesAgregar.Update() RegistraScript("$('#ModalAgregarSolicitud').modal('show');") End Sub Protected Sub GVSolicitudesNominas_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DataKey("ArchivoXML").Length > 0 Then Dim UrlDescarga = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{e.Row.DataKey("ArchivoXML")}" If System.IO.File.Exists(UrlDescarga) Then Dim LnkDescargaXML As LinkButton = e.Row.FCLinkButton("LnkDescargaXML") ScriptManager.GetCurrent(Me).RegisterPostBackControl(LnkDescargaXML) LnkDescargaXML.Visible = True End If End If Dim lblobservaciones As Label = e.Row.FCLabel("lblobservaciones") Dim lBLTipoDescarga As Label = e.Row.FCLabel("lBLTipoDescarga") lblobservaciones.Attributes.Add("data-html", "true") lblobservaciones.Attributes.Add("data-toggle", "tooltip") lblobservaciones.Attributes.Add("data-placement", "top") lblobservaciones.Attributes.Add("title", e.Row.DataKey("Observaciones")) lBLTipoDescarga.Attributes.Add("data-html", "true") lBLTipoDescarga.Attributes.Add("data-toggle", "tooltip") lBLTipoDescarga.Attributes.Add("data-placement", "top") lBLTipoDescarga.Attributes.Add("title", e.Row.DataKey("TipoDescargaStr")) End If End Sub Protected Sub LnkDescargaXML_Click(ByVal sender As Object, ByVal e As EventArgs) Dim GvRow As GridViewRow = CType((CType(sender, LinkButton)).NamingContainer, GridViewRow) Dim UrlDescarga = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{GvRow.DataKey("ArchivoXML")}" Dim Archivo = New System.IO.FileInfo(UrlDescarga) If Archivo.Exists Then Response.Clear() Response.AddHeader("Content-Disposition", "attachment; filename=" & Archivo.Name) Response.AddHeader("Content-Length", Archivo.Length.ToString()) Response.ContentType = "text/octet-stream" Response.Flush() Response.TransmitFile(Archivo.FullName) Response.[End]() End If End Sub Private Sub MostrarSolcitudesSAT() LnkShowSolicitudes.Visible = False If UsuarioActual.Empresa.FielPFX.Trim.Length > 0 Then Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.FielPFX}" If File.Exists(ArchivoCertificado) Then LnkShowSolicitudes.Visible = True End If End If End Sub #End Region #Region "D E S C A R G A R - F A C T U R A " 'Protected Sub lbDescargar_Click(sender As Object, e As EventArgs) Handles lbDescargar.Click ' Dim Retorno As Boolean = False ' Dim ObjProcess As Process = Nothing ' Dim Mensajes As String = "" ' Dim error1 As Boolean = False ' Dim CountProcesados As Integer = 0 ' Try ' ObjProcess = New Process() ' ObjProcess.StartInfo.RedirectStandardOutput = True ' ObjProcess.StartInfo.FileName = Ejecutable ' ObjProcess.StartInfo.Arguments = $"--mod dsat2 --cveemp {UsuarioActual.CveEmpresa} --rfc {UsuarioActual.Empresa.RFC} --ciec {UsuarioActual.Empresa.CIEC} --razon {UsuarioActual.Empresa.Empresa} --fi {txtFechaI.Text} --ff {txtFechaF.Text}" ' ObjProcess.StartInfo.UseShellExecute = False ' ObjProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal ' ObjProcess.Start() ' Dim myStreamReader As StreamReader = ObjProcess.StandardOutput ' 'Read the standard output of the spawned process. ' Mensajes = myStreamReader.ReadLine() ' If Mensajes.Length > 0 Then ' Dim msgs As String() = Mensajes.Split("|"c) ' Dim NFacturas As Integer = 0 ' If msgs.Length >= 2 Then ' Try ' NFacturas = msgs(0).ToEntero ' CountProcesados = msgs(0).ToEntero ' Mensajes = $"La actualización se realizó correctamente.
Facturas agregadas: { NFacturas }" ' Catch ex As Exception ' NFacturas = 0 ' Mensajes = "La actualización se realizó correctamente" ' End Try ' Else ' Mensajes = "La descarga se realizó correctamente" ' End If ' End If ' ObjProcess.WaitForExit() ' ObjProcess.Close() ' Retorno = True ' Catch ex As Exception ' error1 = True ' OnError("Ocurrió un error al ejecutar el actualizador.", ex) ' End Try ' If Retorno Then CargaDatos() 'End Sub 'Private Sub ProcesaBuzon() ' Dim ObjProcess As Process = Nothing ' Dim Mensajes As String = "" ' Dim EjecutableUtilerias = Path.Combine(ModExtensiones.DirectorioBaseEmpresas, "Utilerias\ADSUtilerias.exe") ' Dim Folder = Path.Combine(ModExtensiones.DirectorioBaseEmpresas, "Empresas\") ' Dim error1 As Boolean = False ' Dim en As New CultureInfo("en-US") ' Dim fechai = txtFechaI.Text.Trim.ToDate.ToString("d", en) ' Dim fechaf = txtFechaF.Text.Trim.ToDate.ToString("d", en) ' Dim Salida As String = "" ' Try ' ObjProcess = New Process() ' ObjProcess.StartInfo.RedirectStandardOutput = True ' ObjProcess.StartInfo.FileName = EjecutableUtilerias ' ObjProcess.StartInfo.Verb = "runas" ' ObjProcess.StartInfo.Arguments = $"--mod dsat --e {UsuarioActual.CveEmpresa} --op 1 --fd {Folder} --fi {fechai} --ff {fechaf}" ' ObjProcess.StartInfo.UseShellExecute = False ' ObjProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal ' ObjProcess.Start() ' Salida = ObjProcess.StandardOutput.ReadToEnd() ' ObjProcess.WaitForExit() ' ObjProcess.Close() ' Catch ex As Exception ' error1 = True ' OnError("Ocurrió un error al ejecutar el actualizador.", ex) ' End Try 'End Sub #End Region #Region "B I T A C O R A" Private Sub CargaGvBitacora() Dim ObjGral As New ClsGenerales If ObjGral.GetHistorialBitacoraRemoveGet("Compras", UsuarioActual.CveEmpresa) Then GvBitacora.DataSource = ObjGral.DtResultados ObjGral.Dispose() End If GvBitacora.DataBind() End Sub Private Sub BtnRemove_Click(sender As Object, e As EventArgs) Handles BtnRemove.Click Dim Borrar As Boolean = False If Not TxtDescripcion.Text = "" Then Dim ObjGral As New ClsGenerales If ObjGral.AddHistorialBitacora(Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, "", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 1, TxtDescripcion.Text, "Compras", Folio1 + " / " + Proveedor) Then Borrar = True End If ObjGral.Dispose() If Borrar = True Then Dim ObjCompras As New ClsCompras If ObjCompras.DeleteFactura(CveFactura, UsuarioActual.CveEmpresa) Then GvD.EditIndex = -1 RegistraScript(String.Format("$('#{0}').modal('hide');", "divDescripcion")) Alert("La factura se eliminó correctamente.", TipoMensaje.MsgInformacion) CargaDatos() UpBitacora.Update() End If ObjCompras.Dispose() End If End If CargaGvBitacora() UpBitacora.Update() End Sub Private Sub BtnEliminarPago_Click(sender As Object, e As EventArgs) Handles BtnEliminarPago.Click Dim Borrar As Boolean = False If Not TxtDescripcion.Text = "" Then Dim ObjGral As New ClsGenerales If ObjGral.AddHistorialBitacora(Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, Nothing, "", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 1, TxtDescripcion.Text, "Compras", Folio1 + " / " + Proveedor) Then Borrar = True End If ObjGral.Dispose() If Borrar = True Then Dim ObjCompras As New ClsCompras If ObjCompras.DeleteFactura(CveFactura, UsuarioActual.CveEmpresa) Then GvPagos.EditIndex = -1 RegistraScript("$('#divDescripcionPago').modal('hide');") Alert("La factura se eliminó correctamente.", TipoMensaje.MsgInformacion) CargaDatos() UpBitacora.Update() End If ObjCompras.Dispose() End If End If CargaGvBitacora() UpBitacora.Update() End Sub Private Sub BtnMostrar_Click(sender As Object, e As EventArgs) Handles BtnMostrar.Click GvBitacora.Visible = True BtnOcultar.Visible = True BtnMostrar.Visible = False UpBitacora.Update() End Sub Private Sub BtnOcultar_Click(sender As Object, e As EventArgs) Handles BtnOcultar.Click GvBitacora.Visible = False BtnOcultar.Visible = False BtnMostrar.Visible = True UpBitacora.Update() End Sub #End Region Property MSGComplemento As String Get If ViewState("MSGComplemento") Is Nothing Then Return "" Else Return ViewState("MSGComplemento").ToString End If End Get Set(value As String) ViewState("MSGComplemento") = value End Set End Property Property ViculacionConPUE As Boolean Get If ViewState("ViculacionConPUE") Is Nothing Then Return False Else Return Boolean.Parse(ViewState("ViculacionConPUE").ToString) End If End Get Set(value As Boolean) ViewState("ViculacionConPUE") = value End Set End Property Property ListaComprasPUE As List(Of Integer) Get If ViewState("ListaComprasPUE") Is Nothing Then Return New List(Of Integer) Else Return DirectCast(ViewState("ListaComprasPUE"), List(Of Integer)) End If End Get Set(value As List(Of Integer)) ViewState("ListaComprasPUE") = value End Set End Property Property ComplementoConPUE As String Get If ViewState("ComplementoConPUE") Is Nothing Then Return "" Else Return ViewState("ComplementoConPUE").ToString End If End Get Set(value As String) ViewState("ComplementoConPUE") = value End Set End Property Property DT_ComprasSinIE As DataTable Get If ViewState("DT_ComprasSinIE") Is Nothing Then Return New DataTable Else Return DirectCast(ViewState("DT_ComprasSinIE"), DataTable) End If End Get Set(value As DataTable) ViewState("DT_ComprasSinIE") = value End Set End Property 'Property ComplementoComprasSinIE As String ' Get ' If ViewState("ComplementoComprasSinIE") Is Nothing Then ' Return "" ' Else ' Return ViewState("ComplementoComprasSinIE").ToString ' End If ' End Get ' Set(value As String) ' ViewState("ComplementoComprasSinIE") = value ' End Set 'End Property #Region "V I N C U L A R P A G O" Protected Sub LnkAgregarPago_Click(sender As Object, e As EventArgs) SeVinculoConComprasFaltantes = False Dim sbSinIE As New StringBuilder Dim TieneCompras As Boolean = False HdnCveIE.Value = "" MSGComplemento = "" ViculacionConPUE = False ListaComprasPUE.Clear() ComplementoConPUE = "" DT_ComprasSinIE = New DataTable Dim ListaComprasPUEInterna As New List(Of Integer) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim CveFacturaComplemento As Integer = gvRow.DataKey("CveFactura").ToString.ToEntero Dim CveComplementoPagoCompra As Integer = gvRow.DataKey("CveComplementoPagoCompra").ToString.ToEntero Dim SerieFolioIE As String = "" Dim UUIDPago As String = "" 'Dim ImportePago As Decimal = 0 Dim StrUUID As New StringBuilder Dim Monto As Decimal = 0 Dim nodePagos As XmlNode = Nothing Dim nodePagos2 As XmlNode = Nothing Dim nodeComp As XmlNode = Nothing Dim nodeaGral As XmlNode = Nothing Dim nodeTFD As XmlNode = Nothing Dim ImporteIES As Double = 0 Dim DiferenciaImportes As Double = 0 Dim TextoDiferenciaImporte As String = "" Dim FechaPago As Date Dim PagosCantidad As Integer = 0 Dim UUIDDuplicados As String = "" Dim ListaUUIDDuplicados As New List(Of String) DTGVPagosVinculacion = New DataTable MontoPago = 0D ComprasEnComplemento = 0 XMLNodosPagosModalCount = 0 Dim XMLDoc As New XmlDocument Dim Archivo As String = String.Format("{0}Compras\{1}\{2}", UsuarioActual.Empresa.Ruta, gvRow.DataKey("RFCDe"), gvRow.DataKey("XML")) Dim Prefijo As String = "" Dim DTDocumentosRelacionados As New DataTable DTDocumentosRelacionados.Columns.Add("Serie") DTDocumentosRelacionados.Columns.Add("SerieFolio") DTDocumentosRelacionados.Columns.Add("IdDocumento") DTDocumentosRelacionados.Columns.Add("Folio", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("MonedaDR") DTDocumentosRelacionados.Columns.Add("MetodoDePagoDR") DTDocumentosRelacionados.Columns.Add("ImpPagado", GetType(Decimal)) DTDocumentosRelacionados.Columns.Add("CveFactura", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("CveCompra", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("CveIE", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("Fecha", GetType(Date)) DTDocumentosRelacionados.Columns.Add("FolioPago") DTDocumentosRelacionados.Columns.Add("ImportePago", GetType(Decimal)) DTDocumentosRelacionados.Columns.Add("FechaPago", GetType(Date)) DTDocumentosRelacionados.Columns.Add("CveMetodoPago", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("SerieFolioCompra") DTDocumentosRelacionados.Columns.Add("CvePrePolizaDetalle", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("Tipo", GetType(String)) DTDocumentosRelacionados.Columns.Add("Manual", GetType(Boolean)) Dim TieneRegistros As Boolean = False If IO.File.Exists(Archivo) Then Dim SXML As String = File.ReadAllText(Archivo).Replace(vbLf, " ").Replace(vbCrLf, " ") SXML = SXML.Replace("o;?", "") SXML = SXML.Trim((Convert.ToChar(0))) XMLDoc.LoadXml(SXML) Dim Xml As New StringBuilder Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) Dim RootDocumento As XmlElement = XMLDoc.DocumentElement Dim VersionCFDI As String = ValorXML(RootDocumento, "version") If VersionCFDI = "3.3" Then Prefijo = "pago10" namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") namespaces.AddNamespace(XMLDoc.DocumentElement.Prefix, "http://www.sat.gob.mx/cfd/3") ElseIf VersionCFDI = "4.0" Then Prefijo = "pago20" namespaces.AddNamespace("pago20", "http://www.sat.gob.mx/Pagos20") namespaces.AddNamespace(XMLDoc.DocumentElement.Prefix, "http://www.sat.gob.mx/cfd/4") End If namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") nodeComp = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", XMLDoc.DocumentElement.Prefix), namespaces) nodeaGral = XMLDoc.SelectSingleNode(String.Format("//{0}:Comprobante", XMLDoc.DocumentElement.Prefix), namespaces) nodeTFD = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) 'Dim PrefijoPagos As String = "" 'For Each nodoPrefijo As XmlNode In nodeComp.ChildNodes ' If nodoPrefijo.Prefix <> "tfd" And nodoPrefijo.Prefix.ToUpper.Contains("PAGO") Then ' PrefijoPagos = nodoPrefijo.Prefix ' End If 'Next 'namespaces.AddNamespace(PrefijoPagos, "http://www.sat.gob.mx/Pagos") nodeComp = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", XMLDoc.DocumentElement.Prefix), namespaces) nodePagos = nodeComp.SelectSingleNode(String.Format("//{0}:Pagos/{0}:Pago", Prefijo), namespaces) nodePagos2 = nodeComp.SelectSingleNode(String.Format("//{0}:Pagos", Prefijo), namespaces) ' Dim nodePago As XmlNodeList = nodePagos.SelectNodes(String.Format("//{0}:DoctoRelacionado", "pago10"), namespaces) SeriePago = ValorXML(nodeaGral, "Serie") FolioPago = ValorXML(nodeaGral, "Folio") UUIDPago = ValorXML(nodeTFD, "UUID") LblUUID.Text = UUIDPago Dim nodePagosN As XmlNodeList nodePagosN = nodeComp.SelectNodes(String.Format("//{0}:Pagos", Prefijo), namespaces) For Each NodosPagos As XmlNode In nodePagosN For Each innernode As XmlNode In NodosPagos FechaPago = ValorXML(innernode, "FechaPago").ToDate PagosCantidad = PagosCantidad + 1 For Each node As XmlNode In innernode Dim Nrow As DataRow = DTDocumentosRelacionados.NewRow Nrow("Serie") = ValorXML(node, "Serie") Nrow("Folio") = ValorXML(node, "Folio").ToEntero Nrow("SerieFolio") = ValorXML(node, "Serie") & "-" & ValorXML(node, "Folio").ToEntero Nrow("IdDocumento") = ValorXML(node, "IdDocumento") Nrow("MonedaDR") = ValorXML(node, "MonedaDR") Nrow("MetodoDePagoDR") = ValorXML(node, "MetodoDePagoDR") Monto = Monto + ValorXML(node, "ImpPagado").ToDecimal Nrow("ImpPagado") = ValorXML(node, "ImpPagado").ToDecimal Nrow("Fecha") = FechaPago Nrow("Tipo") = "17" Nrow("Manual") = False DTDocumentosRelacionados.Rows.Add(Nrow) StrUUID.AppendFormat("'{0}',", ValorXML(node, "IdDocumento").Replace("'", "")) XMLNodosPagosModalCount = XMLNodosPagosModalCount + 1 Next Next Next Dim UUIDDuplicadosEnu = From row In DTDocumentosRelacionados.AsEnumerable() Let IdDocumento = row.Field(Of String)("IdDocumento") Group row By IdDocumento Into IdDocumentos = Group Where IdDocumentos.Count() > 1 Select IdDocumentos For Each UUIDDuplicadosRows In UUIDDuplicadosEnu For Each row In UUIDDuplicadosRows If Not ListaUUIDDuplicados.Contains(row.Field(Of String)("IdDocumento")) Then UUIDDuplicados = $"{UUIDDuplicados} {If(ListaUUIDDuplicados.Count > 0, "
", "") } {row.Field(Of String)("IdDocumento")}" ListaUUIDDuplicados.Add(row.Field(Of String)("IdDocumento")) End If Next Next MontoPago = Monto Dim NodosPagosString As String = Regex.Replace(nodePagos2.InnerXml, $"{Prefijo}:", "", RegexOptions.IgnoreCase) Dim ObjCompraFolios As New ClsCompras If ObjCompraFolios.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, NodosPagosString, UsuarioActual.CveEmpresa, OP:=If(CveComplementoPagoCompra > 0, 2, 1), CveFactura:=CveFacturaComplemento) Then ' '.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, nodePagos2.InnerXml.Replace("pago10:", ""), UsuarioActual.CveEmpresa) Then If ObjCompraFolios.DtResultados.Rows.Count > 0 Then For Each drow As DataRow In ObjCompraFolios.DtResultados.Rows For Each dRow2 As DataRow In DTDocumentosRelacionados.Rows If dRow2("IdDocumento").ToString.ToUpper = drow("IdDocumento").ToString.ToUpper Then dRow2("CveCompra") = drow("CveCompra").ToString.ToEntero dRow2("CveFactura") = drow("CveFactura").ToString.ToEntero dRow2("CveMetodoPago") = drow("CveMetodoPago").ToString.ToEntero dRow2("SerieFolioCompra") = drow("SerieFolioCompra").ToString Try If drow("CveIE").ToString.ToEntero > 0 Then dRow2("CveIE") = drow("CveIE").ToString.ToEntero dRow2("ImportePago") = drow("Importe").ToString.ToDecimal dRow2("FolioPago") = drow("FolioIE") dRow2("FechaPago") = drow("FechaDocumento") dRow2("CvePrePolizaDetalle") = drow("CvePrePolizaDetalle").ToString End If Catch ex As Exception dRow2("CvePrePolizaDetalle") = 0 End Try End If Next Next End If End If ObjCompraFolios.Dispose() DTDocumentosRelacionados = DTDocumentosRelacionados.FiltraParametros(" LEN(IdDocumento) > 0 ") GVPDocumentosRelacionadosPagos.DataSource = DTDocumentosRelacionados GVPDocumentosRelacionadosPagos.DataBind() DTGVPagosVinculacion = DTDocumentosRelacionados BtnVincularPago.Visible = False If DTDocumentosRelacionados.Rows.Count > 0 Then SerieFolioIE = DTDocumentosRelacionados.Rows(0)("SerieFolio").ToString 'DivVincularPagoManualmente.Visible = False BtnVincularPago.Visible = True TieneRegistros = True Else 'DivVincularPagoManualmente.Visible = True BtnVincularPago.Visible = False End If ComprasEnComplemento = DTGVPagosVinculacion.COUNT("CveCompra", " CveCompra > 0") If DTDocumentosRelacionados.MAX("CveCompra").ToString.ToEntero > 0 Then TieneCompras = True Else TieneCompras = False End If For Each dRow2 As DataRow In DTDocumentosRelacionados.Rows If dRow2("CveMetodoPago").ToString.ToEntero > 0 Then If dRow2("CveMetodoPago").ToString.ToEntero = 1 Then MSGComplemento = MSGComplemento & $" Compra {dRow2("SerieFolioCompra").ToString } bloqueado Tipo ""PUE"". " ListaComprasPUEInterna.Add(dRow2("CveCompra").ToString.ToEntero) ComplementoConPUE = $"{SeriePago}-{FolioPago}" End If End If Next DT_ComprasSinIE.Columns.Add("CveCompra", GetType(Integer)) DT_ComprasSinIE.Columns.Add("CveFactura", GetType(Integer)) DT_ComprasSinIE.Columns.Add("SerieFolioPago") DT_ComprasSinIE.Columns.Add("SerieFolioCompra") For Each dRow As DataRow In DTDocumentosRelacionados.Rows Dim nRow As DataRow = DT_ComprasSinIE.NewRow nRow("CveCompra") = dRow("CveCompra").ToString.ToEntero ' nRow("CveFactura") = dRow("CveFactura").ToString.ToEntero nRow("SerieFolioPago") = $"{SeriePago}-{FolioPago}" nRow("SerieFolioCompra") = dRow("SerieFolioCompra").ToString DT_ComprasSinIE.Rows.Add(nRow) Next Else Alert("Ocurrió un error al cargar los archivos de complementos pago", TipoMensaje.MsgError) End If CveFacturaPago = gvRow.DataKey("CveFactura").ToEntero CveProveedor = gvRow.DataKey("CveProveedor").ToEntero Dim ObjCompras As New ClsCompras 'If ObjCompras.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, nodePagos2.InnerXml.Replace("pago10:", "").Replace("pagos10:", ""), UsuarioActual.CveEmpresa) Then ' GvVincularPago.DataSource = ObjCompras.DtResultados ' If ObjCompras.DtResultados.Rows.Count > 0 Then ' SerieFolioIE = ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString ' DivVincularPagoManualmente.Visible = False ' BtnVincularPago.Visible = True ' TieneRegistros = True ' Else ' DivVincularPagoManualmente.Visible = True ' BtnVincularPago.Visible = False ' End If ' 'ImportePago = ObjCompras.DtResultados.SUMD("Monto") 'Else ' DivVincularPagoManualmente.Visible = False ' BtnVincularPago.Visible = False 'End If For Each GvRowF As GridViewRow In GVPDocumentosRelacionadosPagos.Rows Dim FechaDocumento As Date = GvRowF.DataKey("FechaPago").ToString.ToDate Dim FechaDoRecibo As Date = GvRowF.DataKey("Fecha").ToString.ToDate Dim CveIEDocumento As Integer = GvRowF.DataKey("CveIE").ToEntero If CveIEDocumento > 0 And FechaDocumento > New Date(1, 1, 1) Then Dim FT1 As Date = FechaDocumento If FechaDocumento <> New Date(1, 1, 1) Then FT1 = FechaDocumento.AddDays(-6) End If Dim FT2 As Date = FechaDocumento.AddDays(7) If Not (FechaDoRecibo >= FT1 And FechaDoRecibo < FT2) Then If TieneRegistros AndAlso UsuarioActual.TienePermisoProceso(286) Then 'DivVincularPagoManualmente.Visible = True End If MSGComplemento = MSGComplemento & " Existen mas de 3 días de diferencia entre la fecha del documento y la fecha de complemento. " Exit For End If End If Next If MSGComplemento.Trim.Length > 0 Then ' BtnVincularPago.Visible = False ViculacionConPUE = True End If 'saco la información de lo vinculado en el ie 'ImporteIES = ObjCompras.DtResultados.FiltraParametros("CveIE > 0").SUM("Importe") ImporteIES = DTDocumentosRelacionados.FiltraParametros("CveIE > 0").SUM("ImportePago") DiferenciaImportes = Monto - ImporteIES ObjCompras.Dispose() If TieneCompras Then If ImporteIES > 0 Then If Math.Abs(DiferenciaImportes) > 5 Then TextoDiferenciaImporte = $"  -   IE ${ImporteIES.FormatoNumero}
Diferencia { DiferenciaImportes.FormatoNumero() }
" BtnVincularPago.Visible = False MSGComplemento = MSGComplemento & $" Existe una diferencia mayor a $5.00 ({Math.Abs(DiferenciaImportes).ToString("###,###,###.00")})" If TieneRegistros AndAlso UsuarioActual.TienePermisoProceso(286) Then 'DivVincularPagoManualmente.Visible = True End If End If Else TextoDiferenciaImporte = $"No se encontraron pagos " BtnVincularPago.Visible = False MSGComplemento = MSGComplemento & $" No se encontraron pagos " If TieneRegistros AndAlso UsuarioActual.TienePermisoProceso(286) Then ' DivVincularPagoManualmente.Visible = True End If End If Else BtnVincularPago.Visible = False MSGComplemento = MSGComplemento & $"No se encontraron compras relacionadas" 'DivVincularPagoManualmente.Visible = False End If LblSerieFolioPago.Text = $"{SeriePago}-{FolioPago}" LblImportePago.Text = Monto.ToString("###,###,###.00") 'ImportePago.FormatoNumero LblPagosCantidad.Text = PagosCantidad.ToString LblImporteIE.Text = ImporteIES.FormatoNumero LblDiferencia.Text = If(DiferenciaImportes <> 0 And ImporteIES > 0, DiferenciaImportes.FormatoNumero, "") If MSGComplemento.Trim.Length > 0 And CveComplementoPagoCompra <= 0 Or ListaUUIDDuplicados.Count > 0 And CveComplementoPagoCompra <= 0 Then If ListaUUIDDuplicados.Count > 0 Then LblMensajeComlementoError.Text = $"Las siguientes UUID se encuentran duplicadas:
{UUIDDuplicados}
{MSGComplemento}" '
DVMensajecomplementoError.Visible = True Else LblMensajeComlementoError.Text = MSGComplemento DVMensajecomplementoError.Visible = True End If Else LblMensajeComlementoError.Text = "" DVMensajecomplementoError.Visible = False ' DivVincularPagoManualmente.Visible = False End If GvVincularPago.DataBind() ListaComprasPUE = ListaComprasPUEInterna 'If DivVincularPagoManualmente.Visible Then ' For Each GvRowValidaCompra As GridViewRow In GVPDocumentosRelacionadosPagos.Rows ' If GvRowValidaCompra.DataKey("CveCompra").ToEntero > 0 Then ' DivVincularPagoManualmente.Visible = True ' Exit For ' Else ' DivVincularPagoManualmente.Visible = False ' End If ' Next 'End If BtnVincularPago.Attributes.Add("data-toggle", "") BtnVincularPago.Attributes.Add("data-popout", "") BtnVincularPago.Attributes.Add("data-original-title", "") BtnVincularPago.Attributes.Add("data-btn-ok-label", "") If UsuarioActual.TienePermisoProceso(332) And (BtnVincularPago.Visible = False Or BtnVincularPago.Enabled = False) Then Dim FaltanCompras As Boolean = False For Each GvRowVal As GridViewRow In GVPDocumentosRelacionadosPagos.Rows If GvRowVal.DataKey("CveCompra").ToEntero > 0 Then FaltanCompras = True Exit For End If Next If FaltanCompras Then For Each GvRowVal As GridViewRow In GVPDocumentosRelacionadosPagos.Rows If GvRowVal.DataKey("CveIE").ToEntero > 0 Then BtnVincularPago.Enabled = True BtnVincularPago.Visible = True BtnVincularPago.Attributes.Add("data-toggle", "confirmation") BtnVincularPago.Attributes.Add("data-popout", "true") BtnVincularPago.Attributes.Add("data-original-title", "Se realizará la vinculación sin tener compras previamente registradas") BtnVincularPago.Attributes.Add("data-btn-ok-label", "Si") SeVinculoConComprasFaltantes = True Exit For End If Next End If End If If CveComplementoPagoCompra > 0 Then DVMensajecomplementoVinculado.Visible = True BtnVincularPago.Visible = False Else DVMensajecomplementoVinculado.Visible = False End If UpVincularPago.Update() RegistraScript("$('#ModalVincularPago').modal('show')", "VincularPagoModalShow") End Sub Private Sub BtnVincularPago_Click(sender As Object, e As EventArgs) Handles BtnVincularPago.Click 'VERIFICA QUE HALLA UN PAGO 'Dim Contador = 0 'For Each Gv As GridViewRow In GvVincularPago.Rows ' If Gv.FCCheckBox("ChkVincularPago").Checked Then ' Contador = 1 ' Exit For ' End If 'Next 'If Contador = 0 Then ' Alert("Tiene que seleccionar algun pago. Por favor verifique y vuelta a intentar.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If Dim TieneError = False Dim ObjCompra As New ClsCompras ObjCompra.IniciaTransacSQL() For Each Gv As GridViewRow In GVPDocumentosRelacionadosPagos.Rows If Gv.DataKey("CveCompra").ToEntero > 0 And Gv.DataKey("CveIE").ToEntero > 0 Then If Not ObjCompra.AddComplementoPago(Gv.DataKey("CveIE").ToEntero, Gv.DataKey("CveCompra").ToEntero, Gv.DataKey("ImpPagado").ToDecimal, Gv.DataKey("CvePrePolizaDetalle").ToEntero, CveFacturaPago) > 0 Then TieneError = True Exit For End If End If ' If HdnCveIE.Value.ToEntero > 0 Then ' If Gv.DataKey("CveCompra").ToEntero > 0 And Gv.FCLabel("LblCveIE").Text.ToEntero > 0 Then ' If Not ObjCompra.AddComplementoPago(Gv.FCLabel("LblCveIE").Text.ToEntero, Gv.DataKey("CveCompra").ToEntero, Gv.DataKey("ImpPagado").ToDecimal, Gv.FCLabel("LblCvePrePolizaDetalle").Text.ToEntero, CveFacturaPago) > 0 Then ' TieneError = True ' Exit For ' End If ' End If 'Else ' If Gv.DataKey("CveCompra").ToEntero > 0 Then ' If Not ObjCompra.AddComplementoPago(Gv.DataKey("CveIE").ToEntero, Gv.DataKey("CveCompra").ToEntero, Gv.DataKey("ImpPagado").ToDecimal, Gv.DataKey("CvePrePolizaDetalle").ToEntero, CveFacturaPago) > 0 Then ' TieneError = True ' Exit For ' End If ' End If 'End If Next If Not TieneError AndAlso Not ObjCompra.AddVincularPago(CveFacturaPago) Then TieneError = True End If If Not TieneError Then Dim objEventos As New ClsOIEventos(ObjCompra.IniciaTransacSQL) If ViculacionConPUE Then For Each CveCompraVinculada In ListaComprasPUE objEventos.AddEventoBitacora($"Complemento { ComplementoConPUE } vinculado manualmente (Compra PUE) ", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompra:=CveCompraVinculada) Next End If For Each Gv As GridViewRow In GVPDocumentosRelacionadosPagos.Rows If Boolean.Parse(Gv.DataKey("Manual").ToString) Then objEventos.AddEventoBitacora($"Complemento { LblSerieFolioPago.Text} vinculado manualmente a compra {Gv.DataKey("SerieFolio").ToString} y Pago { Gv.DataKey("FolioPago").ToString }", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompra:=Gv.DataKey("CveCompra").ToString.ToEntero) End If Next 'If HdnCveIE.Value.ToEntero > 0 Then ' For Each dRow As DataRow In DT_ComprasSinIE.Rows ' objEventos.AddEventoBitacora($"Complemento { dRow("SerieFolioPago").ToString } vinculado manualmente a compra {dRow("SerieFolioCompra").ToString}", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompra:=dRow("CveCompra").ToString.ToEntero) ' Next 'End If ObjCompra.Commit() HdnCveIE.Value = "" Alert("El pago fue vinculado correctamente", TipoMensaje.MsgInformacion) RegistraScript("$('#ModalVincularPago').modal('hide')", "VincularPagoModalHide") CargaDatos() Else ObjCompra.RollBack() Alert("Ocurrió un error al vincular el pago. Por favor verifique y vuelva a intentar", TipoMensaje.MsgError) End If ObjCompra.Dispose() End Sub Protected Sub ChkVincularPago_CheckedChanged(sender As Object, e As EventArgs) For Each Gvr As GridViewRow In GvVincularPago.Rows Gvr.FCCheckBox("ChkVincularPago").Checked = False Next CType(sender, CheckBox).Checked = True End Sub Protected Sub BtnVincularManualmente_Click(sender As Object, e As EventArgs) If HdnCveIE.Value <> "-1" AndAlso IsNumeric(HdnCveIE.Value) AndAlso HdnCveIE.Value.ToEntero > 0 Then 'VincularComplementoManualGV(HdnCveIE.Value.ToEntero) For Each dRow As DataRow In DTGVPagosVinculacion.Rows If HdnIdDocumento.Value = dRow("IdDocumento").ToString Then 'And dRow("CveIE").ToString.ToEntero <= 0 dRow("CveIE") = HdnCveIE.Value.ToEntero Dim ObjIE As New ClsBancos() Dim ObjCompras As New ClsCompras If ObjCompras.GetCompararComplementoPago(CveProveedor, -1, "", UsuarioActual.CveEmpresa, HdnCveIE.Value.ToEntero) Then Dim CompraEncontrada As Boolean = False For Each drowComparar As DataRow In ObjCompras.DtResultados.Rows If drowComparar("CveCompraPrePoliza").ToString.ToEntero > 0 AndAlso (dRow("CveCompra").ToString.ToEntero = drowComparar("CveCompraPrePoliza").ToString.ToEntero) Then dRow("FolioPago") = drowComparar("FolioIE") dRow("ImportePago") = dRow("ImpPagado") dRow("FechaPago") = drowComparar("Fecha").ToString.ToDate dRow("CvePrePolizaDetalle") = drowComparar("CvePrePolizaDetalle").ToString.ToEntero dRow("Tipo") = "E" dRow("Manual") = True CompraEncontrada = True Exit For End If Next If Not CompraEncontrada Then Try dRow("FolioPago") = ObjCompras.DtResultados(0)("FolioIE") dRow("ImportePago") = dRow("ImpPagado") dRow("FechaPago") = ObjCompras.DtResultados(0)("Fecha").ToString.ToDate dRow("CvePrePolizaDetalle") = ObjCompras.DtResultados(0)("CvePrePolizaDetalle").ToString.ToEntero dRow("Tipo") = "E" dRow("Manual") = True Catch ex As Exception End Try End If End If ObjCompras.Dispose() ObjIE.Dispose() End If Next End If DTGVPagosVinculacion.AcceptChanges() HdnIdDocumento.Value = "-1" GVPDocumentosRelacionadosPagos.DataSource = DTGVPagosVinculacion GVPDocumentosRelacionadosPagos.DataBind() UpVincularPago.Update() CurretUUIDPagoVincular = "" ValidaTablaDeVinculacion() End Sub Private Function ValidaTablaDeVinculacion() As Boolean Dim ResPuesta As Boolean = False Dim Vinculados As Integer = 0 Dim TodoVinculado As Boolean = False Dim Diferencia As Boolean = If(Math.Abs(DTGVPagosVinculacion.SUM("ImpPagado") - DTGVPagosVinculacion.SUM("ImportePago")).ToDecimal > 0.1D, True, False) Dim VinculacionManual As Boolean = If(DTGVPagosVinculacion.FiltraParametros("Manual = 1").Rows.Count > 0, True, False) Dim PermisoVinculacionDiferencia As Boolean = UsuarioActual.TienePermisoProceso(286) Dim PermisoVinculacionManual As Boolean = UsuarioActual.TienePermisoProceso(286) Dim MontoSuma As Decimal = DTGVPagosVinculacion.SUM("ImportePago").ToString.ToDecimal For Each dRow As DataRow In DTGVPagosVinculacion.Rows If dRow("CveIE").ToString.ToEntero > 0 Then Vinculados = Vinculados + 1 End If Next 'If XMLNodosPagosModalCount = Vinculados Then If ComprasEnComplemento = Vinculados And ComprasEnComplemento > 0 Then ' TodoVinculado = True End If If TodoVinculado Then If Diferencia Then If PermisoVinculacionDiferencia Then If VinculacionManual Then If PermisoVinculacionManual Then ResPuesta = True Else ResPuesta = False End If Else ResPuesta = True End If Else ResPuesta = False End If Else If VinculacionManual Then If PermisoVinculacionManual Then ResPuesta = True Else ResPuesta = False End If Else ResPuesta = True End If End If Else ResPuesta = False End If If Not MontoSuma = MontoPago And ResPuesta Then If Not PermisoVinculacionDiferencia Then ResPuesta = False End If End If If ResPuesta Then BtnVincularPago.Visible = True Else BtnVincularPago.Visible = False End If UpVincularPago.Update() Return ResPuesta End Function Private Sub GVPDocumentosRelacionadosPagos_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles GVPDocumentosRelacionadosPagos.RowCreated If e.Row.RowType = DataControlRowType.Header Then Dim HeaderGrid = DirectCast(sender, GridView) Dim HeaderGridRow = New GridViewRow(0, 0, DataControlRowType.Header, DataControlRowState.Insert) Dim HeaderCell = New TableCell HeaderCell.Text = "Documentos Relacionados" HeaderCell.ColumnSpan = 9 HeaderCell.Attributes.Add("style", "border-top: 1px solid #ddd; vertical-align: top; background-color: #DDD; color: #333333;font-family: 'Open Sans', sans-serif;font-size: 12px; text-align:center!important; font-weight: bold;") HeaderGridRow.Cells.Add(HeaderCell) GVPDocumentosRelacionadosPagos.Controls(0).Controls.AddAt(0, HeaderGridRow) End If End Sub Private Sub GVPDocumentosRelacionadosPagos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GVPDocumentosRelacionadosPagos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DataKey("CveFactura").ToEntero > 0 Then If e.Row.DataKey("CveCompra").ToEntero > 0 Then e.Row.Cells(4).Text = "" e.Row.ToolTip = "Compra registrada" e.Row.Cells(4).ForeColor = Drawing.Color.Green If e.Row.DataKey("CveIE").ToEntero <= 0 Or Boolean.Parse(e.Row.DataKey("Manual")) = True Then e.Row.Cells(6).Controls.Clear() Dim LiteralVincular As New Literal If UsuarioActual.TienePermisoProceso(286) Then ' permiso vinculación manual LiteralVincular.Text = $"" Else LiteralVincular.Text = "-" End If e.Row.Cells(6).Controls.Add(LiteralVincular) End If Else e.Row.Cells(4).Text = "" e.Row.ToolTip = "Factura recibida sin registrar" End If Else e.Row.Cells(4).Text = "" e.Row.ToolTip = "No se encontro el Folio Fiscal en el sistema" e.Row.Cells(4).ForeColor = Drawing.Color.Red End If End If End Sub #End Region Public Sub ImprimirPDFXML(NombreArchivo As String, rutaxml As String) Dim objxml As XmlSatCFDI = XmlSatCFDI.readXML(rutaxml) Dim rutaReporte As String = String.Format("{0}{1}", ModExtensiones.DirectorioBaseEmpresas, "\Empresas\Grales\Formatos\CFDIV3.rdlc") Dim QR As ClbNegBICFDv3_2.ClsNegCBBGenerar = New ClbNegBICFDv3_2.ClsNegCBBGenerar() Dim cQr As Byte() = QR.GenerarCBBBytes(objxml.emisor.Rfc, objxml.receptor.Rfc, objxml.comprobante.Total, objxml.complemento.UUID) Dim parametros As List(Of ReportParameter) = New List(Of ReportParameter)() parametros.Add(New ReportParameter("comprobante_Certificado", objxml.comprobante.Certificado)) parametros.Add(New ReportParameter("comprobante_CondicionesDePago", objxml.comprobante.CondicionesDePago)) parametros.Add(New ReportParameter("comprobante_Confirmacion", objxml.comprobante.Confirmacion)) parametros.Add(New ReportParameter("comprobante_Fecha", objxml.comprobante.Fecha)) parametros.Add(New ReportParameter("comprobante_Serie", objxml.comprobante.Serie)) parametros.Add(New ReportParameter("comprobante_Folio", objxml.comprobante.Folio)) parametros.Add(New ReportParameter("comprobante_Descuento", objxml.comprobante.Descuento.ToString("N2"))) parametros.Add(New ReportParameter("comprobante_SubTotal", objxml.comprobante.SubTotal.ToString("N2"))) parametros.Add(New ReportParameter("comprobante_Total", objxml.comprobante.Total.ToString("N2"))) parametros.Add(New ReportParameter("comprobante_Version", objxml.comprobante.Version)) parametros.Add(New ReportParameter("comprobante_TipoDeComprobante", objxml.comprobante.TipoDeComprobanteTexto)) parametros.Add(New ReportParameter("comprobante_FormaPago", objxml.comprobante.FormaPagoTexto)) parametros.Add(New ReportParameter("comprobante_LugarExpedicion", objxml.comprobante.LugarExpedicion)) parametros.Add(New ReportParameter("comprobante_NoCertificado", objxml.comprobante.NoCertificado)) parametros.Add(New ReportParameter("comprobante_Sello", objxml.comprobante.Sello)) parametros.Add(New ReportParameter("comprobante_Moneda", objxml.comprobante.Moneda)) parametros.Add(New ReportParameter("comprobante_TipoCambio", objxml.comprobante.TipoCambio.ToString("N2"))) parametros.Add(New ReportParameter("comprobante_MetodoPago", objxml.comprobante.MetodoPagoTexto)) parametros.Add(New ReportParameter("emisor_Rfc", objxml.emisor.Rfc)) parametros.Add(New ReportParameter("emisor_Nombre", objxml.emisor.Nombre)) parametros.Add(New ReportParameter("emisor_RegimenFiscal", objxml.emisor.RegimenFiscalTexto)) parametros.Add(New ReportParameter("receptor_Rfc", objxml.receptor.Rfc)) parametros.Add(New ReportParameter("receptor_Nombre", objxml.receptor.Nombre)) parametros.Add(New ReportParameter("receptor_NumRegIdTrib", objxml.receptor.NumRegIdTrib)) parametros.Add(New ReportParameter("receptor_ResidenciaFiscal", objxml.receptor.ResidenciaFiscal)) parametros.Add(New ReportParameter("receptor_UsoCFDI", objxml.receptor.UsoCFDITexto)) parametros.Add(New ReportParameter("complemento_FechaTimbrado", objxml.complemento.FechaTimbrado)) parametros.Add(New ReportParameter("complemento_NoCertificadoSAT", objxml.complemento.NoCertificadoSAT)) parametros.Add(New ReportParameter("complemento_RfcProvCertif", objxml.complemento.RfcProvCertif)) parametros.Add(New ReportParameter("complemento_SelloCFD", objxml.complemento.SelloCFD)) parametros.Add(New ReportParameter("complemento_SelloSAT", objxml.complemento.SelloSAT)) parametros.Add(New ReportParameter("complemento_UUID", objxml.complemento.UUID)) parametros.Add(New ReportParameter("complemento_CadenaOriginal", objxml.complemento.CadenaOriginal)) Using MR As ReportViewer = New ReportViewer() Dim rdsTotales As ReportDataSource = New ReportDataSource() Dim ltotales As List(Of utilValores) = New List(Of utilValores)() ltotales.Add(New utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2"))) If objxml.comprobante.Descuento > 0 Then ltotales.Add(New utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2"))) End If For Each item As CFDIImpuesto In objxml.Impuestos If item.Importe > 0 Then Dim TasaOCuota As Decimal = 0 Decimal.TryParse(item.TasaOCuota, TasaOCuota) ltotales.Add(New utilValores($"Impuestos {item.Tipo} {item.ImpuestoTexto} {(If(item.TipoFactor = "Tasa", (TasaOCuota * 100).ToString("N4"), item.TasaOCuota))} {(If(item.TipoFactor = "Tasa", "%", ""))}", item.Importe.ToString("N2"))) End If Next ltotales.Add(New utilValores("Total", objxml.comprobante.Total.ToString("N2"))) rdsTotales.Name = "dsTotales" rdsTotales.Value = ltotales MR.LocalReport.DataSources.Add(rdsTotales) Dim rds2 As ReportDataSource = New ReportDataSource() Dim limagenes As List(Of utilImage) = New List(Of utilImage)() limagenes.Add(New utilImage(cQr)) rds2.Name = "dsImagenes" rds2.Value = limagenes MR.LocalReport.DataSources.Add(rds2) Dim rdsrelacionados As ReportDataSource = New ReportDataSource() rdsrelacionados.Name = "dsRelacionados" rdsrelacionados.Value = objxml.cFDIRelacionados MR.LocalReport.DataSources.Add(rdsrelacionados) Dim rds1 As ReportDataSource = New ReportDataSource() rds1.Name = "dsConceptos" rds1.Value = objxml.GetConceptosforpdf() MR.LocalReport.DataSources.Add(rds1) MR.LocalReport.ReportPath = rutaReporte MR.ProcessingMode = ProcessingMode.Local MR.LocalReport.EnableExternalImages = True MR.LocalReport.SetParameters(parametros) MR.LocalReport.Refresh() Dim warnings As Warning() = Nothing Dim streamids As String() = Nothing Dim mimeType As String = Nothing Dim encoding As String = Nothing Dim extension As String = Nothing Dim bytes As Byte() = Nothing bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) Using fs As FileStream = New FileStream(NombreArchivo, FileMode.Create) fs.Write(bytes, 0, bytes.Length) fs.Close() End Using End Using End Sub Protected Sub lnkRegenerarPDF_Click(sender As Object, e As EventArgs) Dim gvrow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim strRFCde As String = gvrow.DataKey("RFCde") Dim strXml As String Dim strPDF As String Dim dirbase As String = String.Format("{0}{1}{2}\", UsuarioActual.Empresa.Ruta, "Compras\", strRFCde) If Directory.Exists(dirbase) Then strXml = String.Format("{0}{1}", dirbase, gvrow.DataKey("XML")) strPDF = String.Format("{0}{1}", dirbase, gvrow.DataKey("PDF")) If File.Exists(strXml) Then ImprimirPDFXML(strPDF, strXml) Alert("el pdf se regenero satisfactoriamente.") Else Alert($"No se encontro el xml favor de contactar a soporte tecnico{strXml.Replace("\", "/")}") End If Else Alert($"No se encontro el xml favor de contactar a soporte tecnico{dirbase.Replace("\", "/")}") End If ',PDF ' 'ImprimirPDFXML("C:\Generar PFX\405504.pdf", "C:\Generar PFX\405504.xml") End Sub Private Sub removeasincevent() 'For Each GvRow As GridViewRow In GvD.Rows ' Dim lnkDownPdf As LinkButton = GvRow.FCLinkButton("lnkDownPdf") ' Dim lnkXML As LinkButton = GvRow.FCLinkButton("lnkXML") ' If lnkDownPdf.Visible Then ' ScriptManager.GetCurrent(Me).RegisterPostBackControl(lnkDownPdf) ' End If ' If lnkXML.Visible Then ' ScriptManager.GetCurrent(Me).RegisterPostBackControl(lnkXML) ' End If 'Next End Sub Protected Sub lnkDownPdf_Click(sender As Object, e As EventArgs) Dim gvrow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim strRFCde As String = gvrow.DataKey("RFCde") Dim strPDF As String Dim dirbase As String = String.Format("{0}{1}{2}\", UsuarioActual.Empresa.Ruta, "Compras\", strRFCde) strPDF = String.Format("{0}{1}", dirbase, gvrow.DataKey("PDF")) If File.Exists(strPDF) Then Dim file As New System.IO.FileInfo(strPDF) Dim mimeType As String = "text/plain" Try mimeType = MimeMapping.GetMimeMapping(strPDF) Catch ex As Exception End Try Response.Clear() Response.ClearHeaders() Response.ClearContent() Response.AddHeader("Content-Disposition", $"attachment; filename= {Uri.EscapeDataString(file.Name)}") Response.AddHeader("Content-Length", file.Length.ToString()) Response.ContentType = mimeType Response.Flush() Response.TransmitFile(file.FullName) Response.End() End If End Sub Protected Sub lnkXML_Click(sender As Object, e As EventArgs) Dim gvrow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim strRFCde As String = gvrow.DataKey("RFCde") Dim strXml As String Dim dirbase As String = String.Format("{0}{1}{2}\", UsuarioActual.Empresa.Ruta, "Compras\", strRFCde) strXml = String.Format("{0}{1}", dirbase, gvrow.DataKey("XML")) If File.Exists(strXml) Then Dim file As New System.IO.FileInfo(strXml) Dim mimeType As String = "text/plain" Try mimeType = MimeMapping.GetMimeMapping(strXml) Catch ex As Exception End Try Response.Clear() Response.ClearHeaders() Response.ClearContent() Response.AddHeader("Content-Disposition", $"attachment; filename= {Uri.EscapeDataString(file.Name)}") Response.AddHeader("Content-Length", file.Length.ToString()) Response.ContentType = mimeType Response.Flush() Response.TransmitFile(file.FullName) Response.End() End If End Sub Protected Sub LnkRegenerarPdfnew_Click(sender As Object, e As EventArgs) Dim gvrow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim objxml As XmlSatCFDI = XmlSatCFDI.readXML(String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("XML"))) Dim XmlRutaArchivo As String = File.ReadAllText(String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("XML"))) Dim PDFRutaArchivo As String = String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("PDF")) Dim RutaRDLC = String.Format("{0}{1}", DirectorioBaseEmpresas, "Empresas\Grales\Formatos\ReciboDePagoGOPDF.rdlc") 'ModExtensiones.GuardaLog(" '--------PDF GenGoPdf Inicia ") Dim Respuesta As Boolean = False Dim Inicio As DateTime = DateTime.Now Dim goPdf As GoPdf.GoPdf = New GoPdf.GoPdf() Dim logotipo As Byte() = Nothing Try Dim result = goPdf.ExportarPdf(XmlRutaArchivo, logotipo, "", RutaRDLC, New GoPdf.Modelos.DatosAdicionales() With { .DomicilioReceptor = "" }) Dim Fin As DateTime = DateTime.Now If result IsNot Nothing Then File.WriteAllBytes(PDFRutaArchivo, result) Respuesta = True Alert($"PDF Generado") Else Alert($"PDF Error se genero nulo", TipoMensaje.MsgAdvertencia) End If CargaDatos() Catch ex As Exception Alert($"PDF Error {ex.Message} -- > {ex.StackTrace}", TipoMensaje.MsgAdvertencia) End Try 'If Not IsNothing(objxml) Then ' Dim rutaReporte As String = String.Format("{0}{1}", ModExtensiones.DirectorioBaseEmpresas, "\Empresas\Grales\Formatos\CFDIV3.rdlc") ' If Not IsNothing(objxml.complemento.Pagos) Then ' rutaReporte = String.Format("{0}{1}", ModExtensiones.DirectorioBaseEmpresas, "\Empresas\Grales\Formatos\CFDIV3Pago.rdlc") ' End If ' Dim NombreArchivo As String = String.Format("{0}{1}\{2}", Destino, gvrow.DataKey("RFCDe"), gvrow.DataKey("PDF")) ' Dim QR As ClbNegBICFDv3_2.ClsNegCBBGenerar = New ClbNegBICFDv3_2.ClsNegCBBGenerar() ' Dim cQr As Byte() = QR.GenerarCBBBytes(objxml.emisor.Rfc, objxml.receptor.Rfc, If(IsNothing(objxml.complemento.Pagos), objxml.comprobante.Total, objxml.complemento.Pagos.Monto), objxml.complemento.UUID) ' Dim parametros As List(Of ReportParameter) = New List(Of ReportParameter)() ' parametros.Add(New ReportParameter("comprobante_Certificado", objxml.comprobante.Certificado)) ' parametros.Add(New ReportParameter("comprobante_CondicionesDePago", objxml.comprobante.CondicionesDePago)) ' parametros.Add(New ReportParameter("comprobante_Confirmacion", objxml.comprobante.Confirmacion)) ' parametros.Add(New ReportParameter("comprobante_Fecha", objxml.comprobante.Fecha)) ' parametros.Add(New ReportParameter("comprobante_Serie", objxml.comprobante.Serie)) ' parametros.Add(New ReportParameter("comprobante_Folio", objxml.comprobante.Folio)) ' parametros.Add(New ReportParameter("comprobante_Descuento", objxml.comprobante.Descuento.ToString("N2"))) ' parametros.Add(New ReportParameter("comprobante_SubTotal", objxml.comprobante.SubTotal.ToString("N2"))) ' parametros.Add(New ReportParameter("comprobante_Total", objxml.comprobante.Total.ToString("N2"))) ' parametros.Add(New ReportParameter("comprobante_Version", objxml.comprobante.Version)) ' parametros.Add(New ReportParameter("comprobante_TipoDeComprobante", objxml.comprobante.TipoDeComprobanteTexto)) ' parametros.Add(New ReportParameter("comprobante_FormaPago", objxml.comprobante.FormaPagoTexto)) ' parametros.Add(New ReportParameter("comprobante_LugarExpedicion", objxml.comprobante.LugarExpedicion)) ' parametros.Add(New ReportParameter("comprobante_NoCertificado", objxml.comprobante.NoCertificado)) ' parametros.Add(New ReportParameter("comprobante_Sello", objxml.comprobante.Sello)) ' parametros.Add(New ReportParameter("comprobante_Moneda", objxml.comprobante.Moneda)) ' parametros.Add(New ReportParameter("comprobante_TipoCambio", objxml.comprobante.TipoCambio.ToString("N2"))) ' parametros.Add(New ReportParameter("comprobante_MetodoPago", objxml.comprobante.MetodoPagoTexto)) ' parametros.Add(New ReportParameter("emisor_Rfc", objxml.emisor.Rfc)) ' parametros.Add(New ReportParameter("emisor_Nombre", objxml.emisor.Nombre)) ' parametros.Add(New ReportParameter("emisor_RegimenFiscal", objxml.emisor.RegimenFiscalTexto)) ' parametros.Add(New ReportParameter("receptor_Rfc", objxml.receptor.Rfc)) ' parametros.Add(New ReportParameter("receptor_Nombre", objxml.receptor.Nombre)) ' parametros.Add(New ReportParameter("receptor_NumRegIdTrib", objxml.receptor.NumRegIdTrib)) ' parametros.Add(New ReportParameter("receptor_ResidenciaFiscal", objxml.receptor.ResidenciaFiscal)) ' parametros.Add(New ReportParameter("receptor_UsoCFDI", objxml.receptor.UsoCFDITexto)) ' parametros.Add(New ReportParameter("complemento_FechaTimbrado", objxml.complemento.FechaTimbrado)) ' parametros.Add(New ReportParameter("complemento_NoCertificadoSAT", objxml.complemento.NoCertificadoSAT)) ' parametros.Add(New ReportParameter("complemento_RfcProvCertif", objxml.complemento.RfcProvCertif)) ' parametros.Add(New ReportParameter("complemento_SelloCFD", objxml.complemento.SelloCFD)) ' parametros.Add(New ReportParameter("complemento_SelloSAT", objxml.complemento.SelloSAT)) ' parametros.Add(New ReportParameter("complemento_UUID", objxml.complemento.UUID)) ' parametros.Add(New ReportParameter("complemento_CadenaOriginal", objxml.complemento.CadenaOriginal)) ' If Not IsNothing(objxml.complemento.Pagos) Then ' parametros.Add(New ReportParameter("CPFechaPago", objxml.complemento.Pagos.FechaPago)) ' parametros.Add(New ReportParameter("CPFormaDePagoP", objxml.complemento.Pagos.FormaDePagoP)) ' parametros.Add(New ReportParameter("CPFormaDePagoPText", objxml.complemento.Pagos.FormaDePagoPText)) ' parametros.Add(New ReportParameter("CPMonedaP", objxml.complemento.Pagos.MonedaP)) ' parametros.Add(New ReportParameter("CPMonto", objxml.complemento.Pagos.Monto.ToString())) ' parametros.Add(New ReportParameter("CPTipoCambioP", objxml.complemento.Pagos.TipoCambioP.ToString())) ' parametros.Add(New ReportParameter("CPNumOperacion", objxml.complemento.Pagos.NumOperacion)) ' parametros.Add(New ReportParameter("CPNomBancoOrdExt", objxml.complemento.Pagos.NomBancoOrdExt)) ' parametros.Add(New ReportParameter("CPRfcEmisorCtaOrd", objxml.complemento.Pagos.RfcEmisorCtaOrd)) ' parametros.Add(New ReportParameter("CPCtaOrdenante", objxml.complemento.Pagos.CtaOrdenante)) ' parametros.Add(New ReportParameter("CPRfcEmisorCtaBen", objxml.complemento.Pagos.RfcEmisorCtaBen)) ' parametros.Add(New ReportParameter("CPCtaBeneficiario", objxml.complemento.Pagos.CtaBeneficiario)) ' End If ' Using MR As ReportViewer = New ReportViewer() ' Dim rdsTotales As ReportDataSource = New ReportDataSource() ' Dim ltotales As List(Of utilValores) = New List(Of utilValores)() ' ltotales.Add(New utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2"))) ' If objxml.comprobante.Descuento > 0 Then ' ltotales.Add(New utilValores("Descuento", objxml.comprobante.Descuento.ToString("N2"))) ' End If ' For Each item As CFDIImpuesto In objxml.Impuestos ' If item.Importe > 0 Then ' Dim TasaOCuota As Decimal = 0 ' Decimal.TryParse(item.TasaOCuota, TasaOCuota) ' ltotales.Add(New utilValores($"Impuestos {item.Tipo} {item.ImpuestoTexto} {(If(item.TipoFactor = "Tasa", (TasaOCuota * 100).ToString("N4"), item.TasaOCuota))} {(If(item.TipoFactor = "Tasa", "%", ""))}", item.Importe.ToString("N2"))) ' End If ' Next ' ltotales.Add(New utilValores("Total", objxml.comprobante.Total.ToString("N2"))) ' rdsTotales.Name = "dsTotales" ' rdsTotales.Value = ltotales ' MR.LocalReport.DataSources.Add(rdsTotales) ' Dim rds2 As ReportDataSource = New ReportDataSource() ' Dim limagenes As List(Of utilImage) = New List(Of utilImage)() ' limagenes.Add(New utilImage(cQr)) ' rds2.Name = "dsImagenes" ' rds2.Value = limagenes ' MR.LocalReport.DataSources.Add(rds2) ' Dim rdsrelacionados As ReportDataSource = New ReportDataSource() ' rdsrelacionados.Name = "dsRelacionados" ' rdsrelacionados.Value = objxml.cFDIRelacionados ' MR.LocalReport.DataSources.Add(rdsrelacionados) ' Dim rds1 As ReportDataSource = New ReportDataSource() ' rds1.Name = "dsConceptos" ' rds1.Value = objxml.GetConceptosforpdf() ' MR.LocalReport.DataSources.Add(rds1) ' If Not IsNothing(objxml.complemento.Pagos) Then ' Dim rdsp As ReportDataSource = New ReportDataSource() ' rdsp.Name = "dsPagos" ' rdsp.Value = objxml.complemento.Pagos.doctosRelacionados ' MR.LocalReport.DataSources.Add(rdsp) ' End If ' MR.LocalReport.ReportPath = rutaReporte ' MR.ProcessingMode = ProcessingMode.Local ' MR.LocalReport.EnableExternalImages = True ' MR.LocalReport.SetParameters(parametros) ' MR.LocalReport.Refresh() ' Dim warnings As Warning() = Nothing ' Dim streamids As String() = Nothing ' Dim mimeType As String = Nothing ' Dim encoding As String = Nothing ' Dim extension As String = Nothing ' Dim bytes As Byte() = Nothing ' bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) ' Using fs As FileStream = New FileStream(NombreArchivo, FileMode.Create) ' fs.Write(bytes, 0, bytes.Length) ' fs.Close() ' End Using ' End Using ' Alert("PDF Generado!") 'Else ' Alert("no se pudo procesar el archivo xml") 'End If End Sub Private Sub VinculacionMasivaComplementos() Dim CountVinculados As Integer = 0 Dim ValidadoSAT As Boolean = False Dim VinculacionValida As Boolean = False For Each gvRow As GridViewRow In GvPagos.Rows Dim DTDocumentosRelacionados As New DataTable Dim DTVinculacion As New DataTable Dim ObjValidacion As New ClsValidaCFDi(gvRow.DataKey("UUID"), gvRow.DataKey("RFCDe"), gvRow.DataKey("RFCPara"), 0) If ObjValidacion.EsValida > 0 Then If ObjValidacion.EsValida = 2 Then ValidadoSAT = False Else Dim ObjDatos As New ClsCompras ValidadoSAT = ObjDatos.UpdateEstatus(ObjValidacion.EsValida, gvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) ObjDatos.Dispose() End If Else ValidadoSAT = False End If ObjValidacion.Dispose() If Not ValidadoSAT Then Continue For End If Dim sbSinIE As New StringBuilder HdnCveIE.Value = "" MSGComplemento = "" ViculacionConPUE = False ListaComprasPUE.Clear() ComplementoConPUE = "" DT_ComprasSinIE = New DataTable Dim ListaComprasPUEInterna As New List(Of Integer) Dim CveComplementoPagoCompra As Integer = gvRow.DataKey("CveComplementoPagoCompra").ToString.ToEntero If CveComplementoPagoCompra > 0 Then Continue For End If Dim SerieFolioIE As String = "" Dim UUIDPago As String = "" 'Dim ImportePago As Decimal = 0 Dim StrUUID As New StringBuilder Dim Monto As Decimal = 0 Dim nodePagos As XmlNode = Nothing Dim nodePagos2 As XmlNode = Nothing Dim nodeComp As XmlNode = Nothing Dim nodeaGral As XmlNode = Nothing Dim nodeTFD As XmlNode = Nothing Dim ImporteIES As Double = 0 Dim DiferenciaImportes As Double = 0 Dim TextoDiferenciaImporte As String = "" Dim FechaPago As Date Dim PagosCantidad As Integer = 0 Dim XMLDoc As New XmlDocument Dim Archivo As String = String.Format("{0}Compras\{1}\{2}", UsuarioActual.Empresa.Ruta, gvRow.DataKey("RFCDe"), gvRow.DataKey("XML")) If IO.File.Exists(Archivo) Then Dim SXML As String = File.ReadAllText(Archivo).Replace(vbLf, " ").Replace(vbCrLf, " ") SXML = SXML.Replace("o;?", "") SXML = SXML.Trim((Convert.ToChar(0))) XMLDoc.LoadXml(SXML) Dim Xml As New StringBuilder Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) namespaces.AddNamespace(XMLDoc.DocumentElement.Prefix, "http://www.sat.gob.mx/cfd/3") namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("pago10", "http://www.sat.gob.mx/Pagos") nodeComp = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", XMLDoc.DocumentElement.Prefix), namespaces) nodeaGral = XMLDoc.SelectSingleNode(String.Format("//{0}:Comprobante", XMLDoc.DocumentElement.Prefix), namespaces) nodeTFD = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) nodePagos = nodeComp.SelectSingleNode(String.Format("//{0}:Pagos/{0}:Pago", "pago10"), namespaces) nodePagos2 = nodeComp.SelectSingleNode(String.Format("//{0}:Pagos", "pago10"), namespaces) 'Monto = ValorXML(nodePagos, "Monto").ToDecimal Dim nodePago As XmlNodeList = nodePagos.SelectNodes(String.Format("//{0}:DoctoRelacionado", "pago10"), namespaces) SeriePago = ValorXML(nodeaGral, "Serie") FolioPago = ValorXML(nodeaGral, "Folio") UUIDPago = ValorXML(nodeTFD, "UUID") LblUUID.Text = UUIDPago DTDocumentosRelacionados.Columns.Add("Serie") DTDocumentosRelacionados.Columns.Add("SerieFolio") DTDocumentosRelacionados.Columns.Add("IdDocumento") DTDocumentosRelacionados.Columns.Add("Folio", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("MonedaDR") DTDocumentosRelacionados.Columns.Add("MetodoDePagoDR") DTDocumentosRelacionados.Columns.Add("ImpPagado", GetType(Decimal)) DTDocumentosRelacionados.Columns.Add("CveFactura", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("CveCompra", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("CveIE", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("Fecha", GetType(Date)) DTDocumentosRelacionados.Columns.Add("FolioPago") DTDocumentosRelacionados.Columns.Add("ImportePago", GetType(Decimal)) DTDocumentosRelacionados.Columns.Add("FechaPago", GetType(Date)) DTDocumentosRelacionados.Columns.Add("CveMetodoPago", GetType(Integer)) DTDocumentosRelacionados.Columns.Add("SerieFolioCompra") Dim nodePagosN As XmlNodeList nodePagosN = nodeComp.SelectNodes(String.Format("//{0}:Pagos", "pago10"), namespaces) For Each NodosPagos As XmlNode In nodePagosN For Each innernode As XmlNode In NodosPagos FechaPago = ValorXML(innernode, "FechaPago").ToDate PagosCantidad = PagosCantidad + 1 For Each node As XmlNode In innernode Dim Nrow As DataRow = DTDocumentosRelacionados.NewRow Nrow("Serie") = ValorXML(node, "Serie") Nrow("Folio") = ValorXML(node, "Folio").ToEntero Nrow("SerieFolio") = ValorXML(node, "Serie") & "-" & ValorXML(node, "Folio").ToEntero Nrow("IdDocumento") = ValorXML(node, "IdDocumento") Nrow("MonedaDR") = ValorXML(node, "MonedaDR") Nrow("MetodoDePagoDR") = ValorXML(node, "MetodoDePagoDR") Monto = Monto + ValorXML(node, "ImpPagado").ToDecimal Nrow("ImpPagado") = ValorXML(node, "ImpPagado").ToDecimal Nrow("Fecha") = FechaPago DTDocumentosRelacionados.Rows.Add(Nrow) StrUUID.AppendFormat("'{0}',", ValorXML(node, "IdDocumento").Replace("'", "")) Next Next Next Dim ObjCompraFolios As New ClsCompras If ObjCompraFolios.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, nodePagos2.InnerXml.Replace("pago10:", ""), UsuarioActual.CveEmpresa, OP:=2) Then ' '.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, nodePagos2.InnerXml.Replace("pago10:", ""), UsuarioActual.CveEmpresa) Then If ObjCompraFolios.DtResultados.Rows.Count > 0 Then For Each drow As DataRow In ObjCompraFolios.DtResultados.Rows For Each dRow2 As DataRow In DTDocumentosRelacionados.Rows If dRow2("IdDocumento").ToString.ToUpper = drow("IdDocumento").ToString.ToUpper Then dRow2("CveCompra") = drow("CveCompra").ToString.ToEntero dRow2("CveFactura") = drow("CveFactura").ToString.ToEntero dRow2("CveMetodoPago") = drow("CveMetodoPago").ToString.ToEntero dRow2("SerieFolioCompra") = drow("SerieFolioCompra").ToString If drow("CveIE").ToString.ToEntero > 0 Then dRow2("CveIE") = drow("CveIE").ToString.ToEntero dRow2("ImportePago") = drow("Importe").ToString.ToDecimal End If dRow2("FolioPago") = drow("FolioIE") dRow2("FechaPago") = drow("FechaDocumento") End If Next Next End If End If ObjCompraFolios.Dispose() 'GVPDocumentosRelacionadosPagos.DataSource = DTDocumentosRelacionados 'GVPDocumentosRelacionadosPagos.DataBind() For Each dRow2 As DataRow In DTDocumentosRelacionados.Rows If dRow2("CveMetodoPago").ToString.ToEntero > 0 Then If dRow2("CveMetodoPago").ToString.ToEntero = 1 Then MSGComplemento = MSGComplemento & $" Compra {dRow2("SerieFolioCompra").ToString } bloqueado Tipo ""PUE"". " ListaComprasPUEInterna.Add(dRow2("CveCompra").ToString.ToEntero) ComplementoConPUE = $"{SeriePago}-{FolioPago}" End If End If Next DT_ComprasSinIE.Columns.Add("CveCompra", GetType(Integer)) DT_ComprasSinIE.Columns.Add("CveFactura", GetType(Integer)) DT_ComprasSinIE.Columns.Add("SerieFolioPago") DT_ComprasSinIE.Columns.Add("SerieFolioCompra") For Each dRow As DataRow In DTDocumentosRelacionados.Rows Dim nRow As DataRow = DT_ComprasSinIE.NewRow nRow("CveCompra") = dRow("CveCompra").ToString.ToEntero ' nRow("CveFactura") = dRow("CveFactura").ToString.ToEntero nRow("SerieFolioPago") = $"{SeriePago}-{FolioPago}" nRow("SerieFolioCompra") = dRow("SerieFolioCompra").ToString DT_ComprasSinIE.Rows.Add(nRow) Next Else VinculacionValida = False End If CveFacturaPago = gvRow.DataKey("CveFactura").ToEntero CveProveedor = gvRow.DataKey("CveProveedor").ToEntero Dim ObjCompras As New ClsCompras Dim TieneRegistros As Boolean = False If ObjCompras.GetCompararComplementoPago(gvRow.DataKey("CveProveedor").ToEntero, Monto, nodePagos2.InnerXml.Replace("pago10:", ""), UsuarioActual.CveEmpresa) Then ' GvVincularPago.DataSource = ObjCompras.DtResultados DTVinculacion = ObjCompras.DtResultados If ObjCompras.DtResultados.Rows.Count > 0 Then SerieFolioIE = ObjCompras.DtResultados.Rows(0)("SerieFolio").ToString 'DivVincularPagoManualmente.Visible = False VinculacionValida = True TieneRegistros = True Else 'DivVincularPagoManualmente.Visible = True VinculacionValida = False End If 'ImportePago = ObjCompras.DtResultados.SUMD("Monto") Else 'DivVincularPagoManualmente.Visible = False VinculacionValida = False End If For Each dRow As DataRow In DTDocumentosRelacionados.Rows Dim FechaDocumento As Date = dRow("FechaPago").ToString.ToDate Dim FechaDoRecibo As Date = dRow("Fecha").ToString.ToDate Dim CveIEDocumento As Integer = dRow("CveIE").ToString.ToEntero If CveIEDocumento > 0 And FechaDocumento > New Date(1, 1, 1) Then Dim FT1 As Date = FechaDocumento If FechaDocumento <> New Date(1, 1, 1) Then FT1 = FechaDocumento.AddDays(-6) End If Dim FT2 As Date = FechaDocumento.AddDays(7) If Not (FechaDoRecibo >= FT1 And FechaDoRecibo < FT2) Then VinculacionValida = False 'MSGComplemento = MSGComplemento & " Existen mas de 3 días de diferencia entre la fecha del documento y la fecha de complemento. " Exit For End If End If Next ObjCompras.Dispose() If VinculacionValida Then Dim TieneError = False Dim ObjCompra As New ClsCompras ObjCompra.IniciaTransacSQL() For Each DTRow As DataRow In DTVinculacion.Rows If Not ObjCompra.AddComplementoPago(DTRow("CveIE").ToString.ToEntero, DTRow("CveCompra").ToString.ToEntero, DTRow("Monto").ToString.ToDecimal, DTRow("CvePrePolizaDetalle").ToString.ToEntero, CveFacturaPago) > 0 Then TieneError = True End If Next If Not TieneError AndAlso Not ObjCompra.AddVincularPago(CveFacturaPago) Then TieneError = True Else CountVinculados = CountVinculados + 1 End If If Not TieneError Then ObjCompra.Commit() Else ObjCompra.RollBack() End If ObjCompra.Dispose() End If Next If CountVinculados > 0 Then Alert($"Se vincularon {CountVinculados} complementos") CargaDatos() End If End Sub Protected Sub LnkVinculacionMasivaComplementos_Click(sender As Object, e As EventArgs) VinculacionMasivaComplementos() End Sub #Region "TRASLADOS" Protected Sub GvTraslados_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvTraslados.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("TipoComprobante") = "T" Then e.Row.FCLabel("LtTipoComprobante").Text = "Traslado" e.Row.FCLabel("LtTipoComprobante").CssClass = "label label-sm label-primary" e.Row.FCLabel("LtTipoComprobante").Attributes.Add("data-toggle", "tooltip") e.Row.FCLabel("LtTipoComprobante").Attributes.Add("title", "Traslado") End If e.Row.Cells(2).Attributes.Add("data-order", e.Row.DBCampo("FechaFactura").ToDate.Ticks.ToString) Dim RutaXML As String = String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML")) If File.Exists(String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML"))) Then e.Row.FCLiteral("LtlXML").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("XML"))) If e.Row.DBCampo("TipoComprobante") = "T" And e.Row.DBCampo("FueValidado") = "1" Then ' e.Row.FCLinkButton("LnkAgregarTraslado").Visible = True e.Row.FCHyperLink("HplAgregar").NavigateUrl = String.Format("/Compras/Compras.aspx?CveFactura={0}&RFC={1}", e.Row.DBCampo("CveFactura"), e.Row.DBCampo("RFCDe")) End If Else e.Row.FCLiteral("LtlXML").Text = "N/D" ' String.Format("{0}{1}\{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("XML")) ' If e.Row.DBCampo("TipoComprobante") = "T" Then e.Row.FCLinkButton("LnkAgregarTraslado").Visible = False End If End If If File.Exists(String.Format("{0}{1}/{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("PDF"))) Then e.Row.FCLiteral("LtlPDF").Text = String.Format("Ver", HttpUtility.UrlEncode(e.Row.DBCampo("RFCDe")), HttpUtility.UrlEncode(e.Row.DBCampo("PDF"))) Else e.Row.FCLiteral("LtlPDF").Text = "N/D" ' String.Format("{0}{1}/{2}", Destino, e.Row.DBCampo("RFCDe"), e.Row.DBCampo("PDF")) End If If e.Row.DBCampo("FueValidado").Contiene("1", "2", "3") Then e.Row.FCLinkButton("ImgValidarCFDi").Visible = False e.Row.FCLiteral("LtlValidado").Visible = True If e.Row.DBCampo("FueValidado") = "2" Then e.Row.FCLiteral("LtlValidado").Text = "Cancelada" e.Row.ForeColor = Drawing.Color.Red e.Row.FCHyperLink("HplProveedor").ForeColor = Drawing.Color.Red ElseIf e.Row.DBCampo("FueValidado") = "3" Then e.Row.FCLiteral("LtlValidado").Text = "Omitida" e.Row.ForeColor = Drawing.Color.Gray e.Row.FCHyperLink("HplProveedor").ForeColor = Drawing.Color.Gray End If Else If e.Row.DBCampo("TipoFactura") = "CFD" Then e.Row.FCLinkButton("ImgValidarCFDi").CommandName = "ValidarCFD" e.Row.FCLinkButton("ImgValidarCFDi").OnClientClick = "return confirm('La factura se validó en el sitio del SAT de comprobantes fiscales?');" End If e.Row.FCLinkButton("ImgValidarCFDi").Visible = True e.Row.FCLiteral("LtlValidado").Visible = False End If If e.Row.DBCampo("CveCompra") <> "" Then e.Row.FCLiteral("LtlFolio").Text = String.Format("{1}", e.Row.DBCampo("CveCompra"), e.Row.DBCampo("SerieFolio")) '1\Compras\GAPC480413QL3\A-69.xml End If If e.Row.DBCampo("CveProveedor") = "" Then e.Row.FCHyperLink("HplProv").Visible = True e.Row.FCHyperLink("HplProv").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveFactura={0}", e.Row.DBCampo("CveFactura")) Else e.Row.FCHyperLink("HplProveedor").NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveProveedor={0}", e.Row.DBCampo("CveProveedor")) If e.Row.DBCampo("CveCompra") = "" AndAlso (e.Row.DBCampo("FueValidado") = "1") Then e.Row.FCHyperLink("HplAgregarT").Visible = False Else e.Row.FCHyperLink("HplAgregarT").Visible = False End If End If 'Dim CveComplementoTraslado As Integer = e.Row.DataKey("CveComplementoTraslado").ToString.ToEntero 'If CveComplementoTraslado > 0 Then ' e.Row.FCLinkButton("LnkAgregarTraslado").CssClass = "btn btn-sm green" ' e.Row.FCLinkButton("LnkAgregarTraslado").Text = "" ' e.Row.FCLinkButton("LnkAgregarTraslado").Attributes.Add("Title", "Ver vinculación") 'Else ' e.Row.FCLinkButton("LnkAgregarTraslado").CssClass = "btn btn-sm blue" ' e.Row.FCLinkButton("LnkAgregarTraslado").Text = "" ' e.Row.FCLinkButton("LnkAgregarTraslado").Attributes.Add("Title", "Vincular Traslado") 'End If End If End Sub Protected Sub GvTraslados_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvTraslados.RowCommand Dim ImgBtn As LinkButton = DirectCast(e.CommandSource, LinkButton) Dim GvRow As GridViewRow = DirectCast(ImgBtn.BindingContainer, GridViewRow) Dim ObjDatos As New ClsCompras Dim Correcto As Boolean = False Select Case e.CommandName Case "ValidarCFDi" Dim ObjValidacion As New ClsValidaCFDi(GvRow.DataKey("UUID"), GvRow.DataKey("RFCDe"), GvRow.DataKey("RFCPara"), 0) If ObjValidacion.EsValida > 0 Then If ObjValidacion.EsValida = 2 Then Alert("La factura está cancelada ante el SAT.", TipoMensaje.MsgInformacion) End If Correcto = ObjDatos.UpdateEstatus(ObjValidacion.EsValida, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Else Alert("La Factura no se pudo validar.", TipoMensaje.MsgAdvertencia) End If ObjValidacion.Dispose() Case "ValidarCFD" Correcto = ObjDatos.UpdateEstatus(1, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) Case "Omitir" Correcto = ObjDatos.UpdateEstatus(3, GvRow.DataKey("CveFactura").ToEntero, UsuarioActual.CveEmpresa) End Select ObjDatos.Dispose() If Correcto Then CargaDatos() End If End Sub Protected Sub LnkAgregarTraslado_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim CveComplementoTraslado As Integer = gvRow.DataKey("CveComplementoTraslado").ToEntero CveFacturaComplementoTraslado = gvRow.DataKey("CveFactura").ToEntero Dim SerieFolioTraslado As String = gvRow.DataKey("SerieFolio").ToString LnkVincularTraslado.Visible = False If CveComplementoTraslado > 0 Then DvMomdalVincualarTrasladoBusqueda.Visible = False DvModalVincularTrasladoVinculado.Visible = True LtlModalVincularTrasaldoTitulo.Text = "Traslado Vinculado" LnkModalModalVincularTrasaldoFolio.Text = gvRow.DataKey("SerieFolioVinculado") LnkModalModalVincularTrasaldoFolio.NavigateUrl = $"~/Compras/Compras.aspx?CveCompra={gvRow.DataKey("CveCompraTraslado")}" Else DvMomdalVincualarTrasladoBusqueda.Visible = True DvModalVincularTrasladoVinculado.Visible = False LtlModalVincularTrasaldoTitulo.Text = "Vincular Traslado" End If UpModalVincularTraslado.Update() RegistraScript("$('#DvModalVincularTrasaldo').modal('show');") End Sub Protected Sub BtnCargaCompraComplementoTraslado_Click(sender As Object, e As EventArgs) If HdnCveCompraComplementoTraslado.Value.ToString.ToEntero > 0 Then LnkVincularTraslado.Visible = True LnkModalModalVincularTrasaldoFolio.Text = HdnFolioCompraComplementoTraslado.Value.ToString LnkModalModalVincularTrasaldoFolio.NavigateUrl = $"~/Compras/Compras.aspx?CveCompra={HdnCveCompraComplementoTraslado.Value.ToString}" DvModalVincularTrasladoVinculado.Visible = True Else LnkVincularTraslado.Visible = False LnkModalModalVincularTrasaldoFolio.Text = "" LnkModalModalVincularTrasaldoFolio.NavigateUrl = "" DvModalVincularTrasladoVinculado.Visible = False LnkVincularTraslado.Visible = False End If UpModalVincularTraslado.Update() End Sub Protected Sub LnkVincularTraslado_Click(sender As Object, e As EventArgs) Dim ProcesoOk As Boolean = False If HdnCveCompraComplementoTraslado.Value.ToString.ToEntero > 0 Then Dim objCompras As New ClsCompras If objCompras.AddComplementoTraslado(CveFacturaComplementoTraslado, HdnCveCompraComplementoTraslado.Value.ToString.ToEntero, UsuarioActual.CveUsuario) Then ProcesoOk = True End If objCompras.Dispose() End If If ProcesoOk Then RegistraScript("$('#DvModalVincularTrasaldo').modal('hide');") CargaDatos() Alert("Traslado Vinculado correctamente.") End If End Sub #End Region Protected Sub LnkModalPersonalizar_Click(sender As Object, e As EventArgs) GvD.Columns(12).Visible = ChkModalPersonalzarFolioFiscal.Checked GvPagos.Columns(9).Visible = ChkModalPersonalzarFolioFiscal.Checked GvTraslados.Columns(9).Visible = ChkModalPersonalzarFolioFiscal.Checked UpDatos.Update() UpPagos.Update() UpTraslados.Update() RegistraScript("$('#DvmodalPersonalizar').modal('hide');") End Sub Protected Sub LnkPersonalizar_Click(sender As Object, e As EventArgs) RegistraScript("$('#DvmodalPersonalizar').modal('show');") End Sub Protected Sub LnkRemoveSolicitud_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim ProcesoOk As Boolean = False Dim CveSolicitud = gvRow.DataKey("CveSolicitud").ToEntero Dim Folio = gvRow.DataKey("Folio").ToEntero Using nom As ClsNominas = New ClsNominas() ProcesoOk = nom.SolicitudesCancelar(CveSolicitud, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) End Using If ProcesoOk Then Alert($"Solicitud {Folio} cancelada correctamente.") cargasolicitudes() End If End Sub #Region "REGISTRO DE FACTURAS" Private Property DTClasificacionesComprobaciones As DataTable Get If ViewState("DTClasificacionesComprobaciones") Is Nothing Then Return New DataTable Else Return DirectCast(ViewState("DTClasificacionesComprobaciones"), DataTable) End If End Get Set(value As DataTable) ViewState("DTClasificacionesComprobaciones") = value End Set End Property Private Property EstaAsociadoACajaChica() As Boolean Get Return If(IsNothing(ViewState("EstaAsociadoACajaChica")), False, CBool(ViewState("EstaAsociadoACajaChica"))) End Get Set ViewState("EstaAsociadoACajaChica") = Value End Set End Property Private Property EstaAsociadoAPersonal() As Boolean Get Return If(IsNothing(ViewState("EstaAsociadoAPersonal")), False, CBool(ViewState("EstaAsociadoAPersonal"))) End Get Set ViewState("EstaAsociadoAPersonal") = Value End Set End Property Private Property CveMoneda As Integer Get Return ViewState("CveMoneda").ToString.ToEntero End Get Set(value As Integer) ViewState("CveMoneda") = value End Set End Property Private Sub CargaClasificacionesComprobaciones() If UsuarioActual.TienePermisoProceso(300) Or UsuarioActual.TienePermisoProceso(301) Then Dim ObjClasificaciones As New ClsClasificaciones() If ObjClasificaciones.GetClasificacionesComprobaciones(UsuarioActual.CveEmpresa) Then If UsuarioActual.TienePermisoProceso(300) And UsuarioActual.TienePermisoProceso(301) Then DTClasificacionesComprobaciones = ObjClasificaciones.DtResultados Else If UsuarioActual.TienePermisoProceso(300) Then 'TipoComprobacion = 1 Biaticos DTClasificacionesComprobaciones = ObjClasificaciones.DtResultados.FiltraParametros("TipoComprobacion = 1") ElseIf UsuarioActual.TienePermisoProceso(301) Then 'TipoComprobacion = 2 Comprobaciones DTClasificacionesComprobaciones = ObjClasificaciones.DtResultados.FiltraParametros("TipoComprobacion = 2") End If End If End If ObjClasificaciones.Dispose() End If End Sub Private Sub CargaClasificaciones() 'DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltraParametros("", Orderby:="Clasificacion") 'DdlClasificacion.DataBind() End Sub Private Sub CargaPS(CveClasificacion As Integer) DdlPS.setEsWebService(UsuarioActual.Empresa.Funcionalidad(105) = "1") If UsuarioActual.Empresa.Funcionalidad(105) = "1" Then 'DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", DdlClasificacion.SelectedValue) DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", "-1") DdlPS.SelectedText = "" DdlPS.SelectedValue = "-1" Else DdlPS.ddl.Items.Clear() 'DdlPS.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion) If UsuarioActual.TienePermisoProceso(300) Or UsuarioActual.TienePermisoProceso(301) Then Dim DTTemp As New DataTable DTTemp.Columns.Add("CvePS", GetType(Integer)) DTTemp.Columns.Add("PSCodigo", GetType(String)) DTTemp.Columns.Add("CveClasificacion", GetType(Integer)) For Each dRow As DataRow In GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).Rows For Each drowCla As DataRow In DTClasificacionesComprobaciones.Rows If drowCla("CveClasificacion").ToString.ToEntero = dRow("CveClasificacion").ToString.ToEntero Then Dim InRow As DataRow = DTTemp.NewRow InRow("CvePS") = dRow("CvePS").ToString.ToEntero InRow("PSCodigo") = dRow("PSCodigo").ToString InRow("CveClasificacion") = dRow("CveClasificacion").ToString.ToEntero DTTemp.Rows.Add(InRow) End If Next Next DdlPS.DataSource = If(CveClasificacion > 0, DTTemp.FiltraParametros($"CveClasificacion = {CveClasificacion}"), DTTemp) Else DdlPS.DataSource = If(CveClasificacion > 0, GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltraParametros($"CveClasificacion = {CveClasificacion}"), GlobalDTPSSimplificado(UsuarioActual.CveEmpresa)) End If DdlPS.ddl.DataBind() DdlPS.ddl.Items.Insert(0, New ListItem("Seleccione el Producto", "-1")) End If End Sub Protected Sub RBLContado_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RBLContado.SelectedIndexChanged CargaContado() End Sub Private Sub CargaContado() DivPersonalReembolso.Visible = False DivCuentaCajaChicaReembolso.Visible = False Select Case RBLContado.SelectedValue Case "2" ' F y E DivPersonalReembolso.Visible = True RfvTxtNumeroReembolso.Enabled = True Case "6" ' Caja Chica DivCuentaCajaChicaReembolso.Visible = True RfvTxtNumeroReembolso.Enabled = True End Select UpRegistroFacturas.Update() End Sub Private Sub CargaPersoanlCajaChica() Dim dt As DataTable = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa) dt = dt.FiltraParametros(String.Format("CveTipoCuenta = 1")) DdlCuentaCajaChicaReembolso.DataSource = dt DdlCuentaCajaChicaReembolso.DataBind() End Sub Private Sub CargaPersonalViaticos() Dim dtpersonal As DataTable = GlobalDTRHPersonal(UsuarioActual.CveEmpresa) DdlPersonalReembolso.DataSource = dtpersonal.FiltraParametros("CveEstatusPersonal = 1") DdlPersonalReembolso.DataBind() End Sub Private Sub CargaDdlRetIVA() DdlRetIVAConcepto.Items.Insert(0, New ListItem("Honorarios/Serv. Prof.", "1")) DdlRetIVAConcepto.Items.Add(New ListItem("Arrendamiento", "4")) DdlRetIVAConcepto.Items.Insert(0, New ListItem("Fletes P.F.", "2")) DdlRetIVAConcepto.Items.Add(New ListItem("Resico", "5")) DdlRetIVAConcepto.Items.Add(New ListItem("General", "6")) End Sub Private Sub CargaDdlRetISR() DdlRetISRConcepto.Items.Insert(0, New ListItem("Honorarios", "1")) DdlRetISRConcepto.Items.Insert(1, New ListItem("Arrendamiento", "2")) DdlRetISRConcepto.Items.Insert(1, New ListItem("Resico", "3")) End Sub Protected Sub DdlPersonal2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlPersonalReembolso.SelectedIndexChanged ViewState("CvePersonal") = DdlPersonalReembolso.SelectedValue If DdlPersonalReembolso.SelectedValue.ToEntero > 0 Then EstaAsociadoAPersonal = True End If End Sub Protected Sub DdlCajaChica2_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlCuentaCajaChicaReembolso.SelectedIndexChanged Dim dr As DataRow = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("CveCuenta = " & DdlCuentaCajaChicaReembolso.SelectedValue) If dr IsNot Nothing Then CveMoneda = dr("CveMoneda").ToString.ToEntero EstaAsociadoACajaChica = True End If ViewState("CveCajaChica") = DdlCuentaCajaChicaReembolso.SelectedValue End Sub #End Region Protected Sub LnkRegistarFactura_Click(sender As Object, e As EventArgs) DVRegistraFacturas.Visible = True GvD.Columns(0).Visible = True UpRegistroFacturas.Update() UpDatos.Update() End Sub Protected Sub BtnGuardarFacturas_Click(sender As Object, e As EventArgs) Dim ErrorProceso As Boolean = False Dim Contador As Integer = 0 Dim ErrorProcesoStr As String = "" If Not DdlPS.SelectedValue.ToEntero > 0 Then Alert("Debe seleccionar un producto", TipoMensaje.MsgAdvertencia) Exit Sub End If For Each GvRow As GridViewRow In GvD.Rows If GvRow.FCCheckBox("chkRegistraFactura").Checked Then Dim CFDIXmlPath As String = $"{UsuarioActual.Empresa.Ruta}Compras\{GvRow.DataKey("RFCDe")}\{GvRow.DataKey("XML")}" If Not File.Exists(CFDIXmlPath) Then ErrorProceso = True Exit For End If Dim CompraActual As New Compra2(CFDIXmlPath, Compra2.EnumCargaCompra.DesdeArchivo, GlobalDTTiposGastos(UsuarioActual.CveEmpresa), UsuarioActual) CompraActual.CveFactura = GvRow.DataKey("CveFactura").ToEntero CompraActual.CveProveedor = GvRow.DataKey("CveProveedor").ToEntero CompraActual.CveTipoProveedor = GvRow.DataKey("CveTipoProveedor").ToEntero CompraActual.CveTipoConceptoProveedor = GvRow.DataKey("CveTipoProveedor").ToEntero CompraActual.TipoCompra = Compra2.EnumTipoCompra.Sin_definir CompraActual.IEPSGasto = True CompraActual.Descripcion = TxtDescripcionCompra.Text.Trim CompraActual.NombreProveedor = GvRow.DataKey("NombreProveedor") Dim CvePersonal As Integer = -1 'DdlPersonalReembolso.SelectedValue.ToEntero Dim CveCajachica As Integer = -1 'DdlCuentaCajaChicaReembolso.SelectedValue.ToEntero If RBLContado.SelectedValue.ToEntero = 6 Then CveCajachica = DdlCuentaCajaChicaReembolso.SelectedValue.ToEntero Else CvePersonal = DdlPersonalReembolso.SelectedValue.ToEntero End If CompraActual.ConfiguraRegistroRapidoReembolso(DdlPS.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, CveCajachica, CvePersonal, DdlRetIVAConcepto.SelectedValue.ToEntero, DdlRetISRConcepto.SelectedValue.ToEntero, NumeroReembolso:=TxtNumeroReembolso.Text) If CompraActual.AddCompra() Then Contador = Contador + 1 Else ErrorProceso = True ErrorProcesoStr = CompraActual.MensajeError Exit For End If End If Next If Not ErrorProceso Then CargaDatos() If Contador > 0 Then Alert($"Se registraron {Contador} Compras") End If Else Alert($"Se registraron {Contador} Compras. error {ErrorProcesoStr}", TipoMensaje.MsgAdvertencia) End If End Sub End Class Public Class Compra2 Enum EnumCargaCompra DesdeXML DesdeArchivo End Enum Public Enum EnumCFDIVersion v32 V33 V40 End Enum Public Enum EnumTipoCompra Sin_definir = -1 Gasto_con_almacen = 10 Activo_Fijo = 1 'Costo_Indirecto = 2 Almacen = 3 Almacen_con_costo_indirecto = 8 Costo_Indirecto = 4 Importación = 5 NC_Con_Productos = 6 Apoyo_Logístico = 9 NC_Por_Devolución = 11 Garantia = 12 End Enum Public Enum EnumModalidadAccionPS Agregar Actualizar End Enum Public Property CveCompra As Integer = -1 Public Property CveProveedor As Integer Public Property CveTipoConceptoProveedor As Integer Public Property CveMoneda As Integer Public Property Fecha As Date Public ReadOnly Property SerieFolio As String Get If Serie.Length > 0 Then Return $"{Serie}-{Folio}" Else Return $"{Folio}" End If End Get End Property Public Property Serie As String = "" Public Property Folio As String = "" Public Property FolioSecundario As String = "" Public Property Descripcion As String = "" Public Property CFDIVersion As EnumCFDIVersion = EnumCFDIVersion.V40 Public Property ProveedorNombre As String = "" Public Property EsImportacion As Boolean = False Public Property TC As Decimal = 1 Public Property SubTotal As Decimal = 0D Public Property SubTotal2 As Decimal = 0D Public Property Descuento As Decimal = 0D Public Property Total As Decimal = 0D Public Property Moneda As String = "" Public Property TipoComprobante As String Public Property TipoCambio As Decimal = 1 Public Property CompraNoDeducible As Integer = 0 Public Property IVA As Decimal = 0D Public Property IVADeducible As Decimal = 0D Public Property IVANoDeducible As Decimal = 0 Public Property IEPS As Decimal = 0D Public Property RetIVA As Decimal = 0D Public Property RetISR As Decimal = 0D Public Property PorcentajeIVA As Decimal = 0 Public Property PorcentajeISR As Decimal = 0 Public Property CveRetIVAConcepto As Integer = -1 Public Property CveRetISRConcepto As Integer = -1 Public Property CveSubProyecto As Integer = -1 Public Property UsuarioActual As Usuario Public ReadOnly Property ConceptoPrePolizaIVA As ConceptosRetenciones Get Dim Ret As New ConceptosRetenciones If EsImportacion Then Ret.CveConceptoAcreditable = 288 Ret.CveConceptoxAcreditar = 287 Else Ret.CveConceptoAcreditable = 19 Ret.CveConceptoxAcreditar = 14 End If Return Ret End Get End Property Public ReadOnly Property ConceptoPrePolizaRetIVA As ConceptosRetenciones Get Dim Ret As New ConceptosRetenciones Dim Funcionalidad, FuncionalidadxAcred As Integer If CveRetIVAConcepto = 1 Then Funcionalidad = 308 : FuncionalidadxAcred = 307 Ret.CveConceptoAcreditable = 22 Ret.CveConceptoxAcreditar = 15 ElseIf CveRetIVAConcepto = 2 Then Funcionalidad = 310 : FuncionalidadxAcred = 309 Ret.CveConceptoAcreditable = 184 Ret.CveConceptoxAcreditar = 183 ElseIf CveRetIVAConcepto = 3 Then Funcionalidad = 312 : FuncionalidadxAcred = 311 Ret.CveConceptoAcreditable = 186 Ret.CveConceptoxAcreditar = 185 ElseIf CveRetIVAConcepto = 4 Then Funcionalidad = 314 : FuncionalidadxAcred = 313 Ret.CveConceptoAcreditable = 249 Ret.CveConceptoxAcreditar = 248 ElseIf CveRetIVAConcepto = 5 Then Funcionalidad = 578 : FuncionalidadxAcred = 578 Ret.CveConceptoAcreditable = 286 Ret.CveConceptoxAcreditar = 285 ElseIf CveRetIVAConcepto = 6 Then Funcionalidad = 578 : FuncionalidadxAcred = 578 Ret.CveConceptoAcreditable = 333 Ret.CveConceptoxAcreditar = 334 End If Return Ret End Get End Property Public ReadOnly Property ConceptoPrePolizaRetISR As ConceptosRetenciones Get Dim Ret As New ConceptosRetenciones Dim Funcionalidad, FuncionalidadxAcred As Integer If CveRetISRConcepto = 1 Then Funcionalidad = 316 : FuncionalidadxAcred = 315 Ret.CveConceptoAcreditable = 23 Ret.CveConceptoxAcreditar = 16 ElseIf CveRetISRConcepto = 2 Then Funcionalidad = 318 : FuncionalidadxAcred = 317 Ret.CveConceptoAcreditable = 244 Ret.CveConceptoxAcreditar = 243 ElseIf CveRetISRConcepto = 3 Then Funcionalidad = 349 : FuncionalidadxAcred = 348 Ret.CveConceptoAcreditable = 328 Ret.CveConceptoxAcreditar = 327 End If Return Ret End Get End Property Public Property CveMetodoPago As Integer Public Property MetodoPago As String Public Property DocumentosRelacionadosUUIDSList As List(Of String) = New List(Of String) Public ReadOnly Property DocumentosRelacionadosUUIDSString As String Get Return GeneraStringDoctosRelacionados() End Get End Property Public Property DocumentosRelacionadosAnticiposUUIDList As List(Of String) = New List(Of String) Public Property TieneAnticiposXML As Boolean = False Public Property EmisorRFC As String Public Property ReceptorRFC As String Public Property UUID As String = "" Public Property TotalRetenciones As Decimal = 0D Public Property RetencionIVA As Decimal = 0D Public Property RetencionISR As Decimal = 0D Public Property SumaTotalRetenciones As Decimal = 0D Public Property TotalTraslados As Decimal = 0D Public Property TrasladoIVA As Decimal = 0D Public Property TrasladoIEPS As Decimal = 0D Public Property SumaTotalTraslados As Decimal = 0D Public Property OtrosImpuestos As Decimal = 0D Private Property OtrosImpuestosRetenciones As Decimal = 0D Public Property Amortizacion As Decimal = 0D Public Property FechaPago As Date 'FIX ME corregir usando fecha interna calculada por los dias de credito del proveedor Public Property AplicaNotaCredito As Boolean = False Public Property XMlStr As String Public Property XMLCargaExistosa As Boolean = True Public Property Observaciones As String = "" Public Property CveEstatusFactura As Integer = 1 Public Property CvePrePoliza As Integer = -1 Public Property Redondeo As Decimal = 0 Public Property IdPoliza As Integer = -1 Public Property CveCajaChica As Integer = -1 Public Property CvePersonal As Integer = -1 Public Property NumeroReembolso As String = "" Public Property CveProveedorSucursal As Integer = -1 Public Property AplicoPromocion As Boolean = False Public Property CveConceptoContableAlmacen As Integer = -1 Public Property NoDeducible As Integer = 0 Public Property CveTipoCompra As Integer = 1 Public Property TotalOriginal As Decimal = 0D Public Property CveTipoConcepto As Integer = 1 'FIX ME Esto tiene que ver con el CveTipoProveedor 1 y 3 es CveTipoConcepto 1 y 2 es CveTipoConcepto 2 Public Property CveSubProyectoPrincipal As Integer = -1 Public Property CveFactura As Integer = -1 Public Property CveFolioGarantia As Integer = -1 Public Property TmpDT As DataTable = New DataTable Public Property SubTotalConceptos As Decimal = 0D Private Errores As StringBuilder = New StringBuilder Public ReadOnly Property MensajeError As String Get Return Errores.ToString() End Get End Property Public Property CompraSaldo As Decimal = 0D Public Property SubTotalOriginal As Decimal = 0D Public Property SubTotal2Original As Double = 0D Public Property IVAOriginal As Decimal = 0D Public Property RetIVAOriginal As Decimal = 0D Public Property RetISROriginal As Decimal = 0D Public Property Proyecto As String = "" Public Property CveProyecto As Integer = -1 Public Property SubProyecto As String = "" Public Property TipoCompra As EnumTipoCompra = EnumTipoCompra.Sin_definir Private Property DTTiposGastos() As DataTable Public Property CveTipoProveedor As Integer = -1 Public Property IEPSGasto As Boolean = False Public Property OtrosImpuestosGasto As Boolean = False Public Property OCVinculada As Boolean = False Public Property NumNoDed As Integer = 0 Public Property CveTipoPoliza As Integer = -1 Public Property NombreProveedor As Object Public Property CveCreditoDetalle As Integer = -1 Public Property CveIE As Integer = -1 Public Property CveCompraAmortizacion As Integer = -1 Public Sub New(XmlFuente As String, OpcionCarga As EnumCargaCompra, DTTiposGastos As DataTable, UsuarioActual As Usuario) Errores = New StringBuilder Me.DTTiposGastos = DTTiposGastos Me.UsuarioActual = UsuarioActual If OpcionCarga = EnumCargaCompra.DesdeArchivo Then CargaDesdeArchivo(XmlFuente) Else CargaDesdeString(XmlFuente) End If End Sub Private Sub CargaDesdeArchivo(XmlFuenteRuta As String) Dim XMLDoc As New XmlDocument If IO.File.Exists(XmlFuenteRuta) Then XMlStr = File.ReadAllText(XmlFuenteRuta).Replace("<br>", "").Replace("<", "").Replace("o;?", "") Try XMLDoc.LoadXml(XMlStr) XMLCargaExistosa = True Catch ex As Exception Try Dim oReader = New StreamReader(XmlFuenteRuta, Encoding.GetEncoding("ISO-8859-1")) XMLDoc.Load(oReader) oReader.Dispose() XMLCargaExistosa = True Catch ex2 As Exception GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString()) Errores.AppendLine("Error al intentar leer el XML. Error:" & ex2.ToString()) XMLCargaExistosa = False End Try End Try End If If XMLCargaExistosa Then CargaComprobanteXML(XMLDoc) End If End Sub Private Sub CargaDesdeString(XmlFuente As String) XMlStr = XmlFuente.Replace("<br>", "").Replace("<", "").Replace("o;?", "") Dim XMLDoc As New XmlDocument Try XMLDoc.LoadXml(XMlStr) XMLCargaExistosa = True Catch ex As Exception GuardaLog("Error al intentar leer . Error:" & ex.ToString()) Errores.AppendLine("Error al intentar leer el XML. Error:" & ex.ToString()) XMLCargaExistosa = False End Try If XMLCargaExistosa Then CargaComprobanteXML(XMLDoc) End If End Sub Private Sub CargaComprobanteXML(XMLDoc As XmlDocument) Dim nodo As XmlNode = XMLDoc.DocumentElement Serie = ValorXML(nodo, "serie") Dim StrCFDIVerion As String = ValorXML(nodo, "version") If StrCFDIVerion = "3.2" Then CFDIVersion = EnumCFDIVersion.v32 ElseIf StrCFDIVerion = "3.3" Then CFDIVersion = EnumCFDIVersion.V33 ElseIf StrCFDIVerion = "4.0" Then CFDIVersion = EnumCFDIVersion.V40 Else GuardaLog($"CFDI Versión {StrCFDIVerion} no soportada") Errores.AppendLine($"CFDI Versión {StrCFDIVerion} no soportada") XMLCargaExistosa = False Exit Sub End If Folio = ValorXML(nodo, "folio") Fecha = ValorXML(nodo, "fecha").ToDate SubTotal = ValorXML(nodo, "subTotal").ToDecimal Total = ValorXML(nodo, "total").ToDecimal Descuento = ValorXML(nodo, "descuento").ToDecimal Moneda = ValorXML(nodo, "Moneda") CveMoneda = GlobalDTMonedas().FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT = '{Moneda}' ").ToEntero If Not CveMoneda > 0 Then GuardaLog($"Moneda {Moneda} no se obtuvo la clabe") Errores.AppendLine($"Moneda {Moneda} no se obtuvo la clabe") XMLCargaExistosa = False Exit Sub End If TipoComprobante = ValorXML(nodo, "tipoDeComprobante") TipoCambio = ValorXML(nodo, "TipoCambio", "1").ToDecimal If CFDIVersion = EnumCFDIVersion.V33 Or CFDIVersion = EnumCFDIVersion.V40 Then Dim drm As DataRow = GlobalDTVtaMetodoPago.FiltroPrimero(String.Format("ClaveMetodoPagoSAT = '{0}'", ValorXML(nodo, "MetodoPago"))) If drm IsNot Nothing Then CveMetodoPago = drm("CveMetodoPago").ToString.ToEntero MetodoPago = drm("MetodoPagoSAT").ToString End If End If Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix) Dim cfdVer As String = "" If CFDIVersion = EnumCFDIVersion.v32 Then Prefijo = "cfd" cfdVer = "http://www.sat.gob.mx/cfd/2" ElseIf CFDIVersion = EnumCFDIVersion.V33 Then cfdVer = "http://www.sat.gob.mx/cfd/3" Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") If TipoComprobante.ToUpper = "E" AndAlso (CFDIVersion = EnumCFDIVersion.V33 OrElse CFDIVersion = EnumCFDIVersion.V40) Then Dim UUIDS As String = "" Dim UUIDSLista As New List(Of String) Dim nodeCFDIRelacionados As XmlNode nodeCFDIRelacionados = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces) If nodeCFDIRelacionados IsNot Nothing Then For Each CFDIRelacionados As XmlNode In nodeCFDIRelacionados UUIDSLista.Add("" & CFDIRelacionados.Attributes("UUID").Value.ToString & "") Next End If DocumentosRelacionadosUUIDSList = UUIDSLista End If Dim node As XmlNode node = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then EmisorRFC = ValorXML(node, "RFC") End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then ReceptorRFC = ValorXML(node, "RFC") End If If UsuarioActual.CveEmpresa.Contiene(119, 7) Then node = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then If ValorXML(node, "TipoRelacion").ToString.Contiene("07") Then Dim nodeDocumentosRelacionados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:CfdiRelacionado", Prefijo), namespaces) For Each documento As XmlNode In nodeDocumentosRelacionados If documento.Attributes("UUID").Value <> "" Then DocumentosRelacionadosAnticiposUUIDList.Add(documento.Attributes("UUID").Value) End If TieneAnticiposXML = True Next End If End If End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Retenciones/{0}:Retencion", Prefijo), namespaces) TotalRetenciones = ValorXML(node, "totalImpuestosRetenidos", "0").ToDecimal If CFDIVersion = EnumCFDIVersion.V33 OrElse CFDIVersion = EnumCFDIVersion.V40 Then For Each retencion As XmlNode In nodeRetenciones If retencion.Attributes("Impuesto").Value = "002" Then RetencionIVA += retencion.Attributes("Importe").Value.ToDecimal If retencion.Attributes("Impuesto").Value = "001" Then RetencionISR += retencion.Attributes("Importe").Value.ToDecimal Next Else For Each retencion As XmlNode In nodeRetenciones If retencion.Attributes("impuesto").Value = "IVA" Then RetencionIVA += retencion.Attributes("importe").Value.ToDecimal If retencion.Attributes("impuesto").Value = "ISR" Then RetencionISR += retencion.Attributes("importe").Value.ToDecimal Next End If SumaTotalRetenciones += RetencionIVA SumaTotalRetenciones += RetencionISR TotalTraslados = ValorXML(node, "totalImpuestosTrasladados", "0").ToDecimal Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Traslados/{0}:Traslado", Prefijo), namespaces) If CFDIVersion = EnumCFDIVersion.V33 OrElse CFDIVersion = EnumCFDIVersion.V40 Then For Each traslado As XmlNode In nodeTraslados If traslado.Attributes("Importe") IsNot Nothing Then If traslado.Attributes("Impuesto").Value = "002" Then TrasladoIVA += traslado.Attributes("Importe").Value.ToDecimal If traslado.Attributes("Impuesto").Value = "003" Then TrasladoIEPS += traslado.Attributes("Importe").Value.ToDecimal End If Next Else For Each traslado As XmlNode In nodeTraslados If traslado.Attributes("Importe") IsNot Nothing Then If traslado.Attributes("impuesto").Value = "IVA" Then TrasladoIVA += traslado.Attributes("importe").Value.ToDecimal If traslado.Attributes("impuesto").Value = "IEPS" Then TrasladoIEPS += traslado.Attributes("importe").Value.ToDecimal End If Next End If SumaTotalTraslados += TrasladoIVA SumaTotalTraslados += TrasladoIEPS End If Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) UUID = ValorXML(nodeTFD, "UUID", "") Dim nodeRF As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CFDIRegistroFiscal ", "registrofiscal"), namespaces) If nodeRF IsNot Nothing Then Folio = ValorXML(nodeRF, "folio").TrimStart("0"c) End If node = node.SelectSingleNode(String.Format("//{0}:ImpuestosLocales", "implocal"), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then OtrosImpuestos = ValorXML(node, "TotaldeTraslados", "0").ToDecimal '2022.06.04-- se quitan los datos de retenciones de impuestos locales, generan conflicto. RMF 'OtrosImpuestosRetenciones = ValorXML(node, "TotaldeRetenciones", "0").ToDecimal End If End If If XMLCargaExistosa Then If Not ValidateUUID(UUID) Then GuardaLog($"UUID Invalido {UUID} .") Errores.AppendLine($"UUID Invalido {UUID} .") XMLCargaExistosa = False End If End If #Region "DETALLES" Dim ObjeFacturas As New ClsCompras Dim AjustaUltimoConcepto = False Dim nodeconceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces) Dim XML = Replace(nodeconceptos.OuterXml, "", "") 'salto de linea html XML = XML.Replace("<br>", "") XML = XML.Replace("<", "") XML = XML.Replace("&", "") 'adicional, si hay otros If ObjeFacturas.GetFacturasComparacionXML(StrCFDIVerion, XML, UsuarioActual.CveEmpresa) Then TmpDT = ObjeFacturas.DtResultados TmpDT.Columns.Add("CveSATPSActualizado") SubTotalConceptos = TmpDT.SUMD("Total").RoundSQL If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) End If 'VALIDA QUE EL XML SI VIENE CON EL CODIGO SAT 01010101 Dim ProductosCodigoSATNoPermitidos As New StringBuilder("") For Each drr As DataRow In TmpDT.FiltraParametros("ClaveProdServ = '01010101'").Rows ProductosCodigoSATNoPermitidos.AppendFormat("{0}
", drr("PS")) Next If ProductosCodigoSATNoPermitidos.ToString.Length > 0 Then Errores.AppendLine($"El comprobante contiene productos con código SAT '01010101', revise los productos:

{ProductosCodigoSATNoPermitidos.ToString}") End If Else GuardaLog($"Error al cargar detalles GetFacturasComparacionXML.") Errores.AppendLine($"Error al cargar detalles GetFacturasComparacionXML.") XMLCargaExistosa = False End If ObjeFacturas.Dispose() If CFDIVersion = EnumCFDIVersion.V33 OrElse CFDIVersion = EnumCFDIVersion.V40 Then If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) End If TmpDT.AcceptChanges() ValidacionesTotalesXml() End If Me.PorcentajeIVA = TmpDT.MAX("IVAPorcentaje").ToDecimal #End Region End Sub Public Function ConfiguraRegistroRapidoReembolso(CvePS As Integer, CveSubProyecto As Integer, CveCajaChica As Integer, CvePersonal As Integer, CveRetIVAConcepto As Integer, CveRetISRConcepto As Integer, NumeroReembolso As String) As Boolean Dim respuesta As Boolean = True Me.CveSubProyecto = CveSubProyecto Me.CveSubProyectoPrincipal = CveSubProyecto Me.CveCajaChica = CveCajaChica Me.CvePersonal = CvePersonal Me.CveRetIVAConcepto = CveRetIVAConcepto Me.CveRetISRConcepto = CveRetISRConcepto Me.CveTipoPoliza = 3 Me.NumeroReembolso = NumeroReembolso Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(-1, CveSubProyecto, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("") If dRowSubProyecto IsNot Nothing Then Me.Proyecto = dRowSubProyecto("Proyecto").ToString Me.CveProyecto = (dRowSubProyecto("CveProyecto").ToString).ToEntero Me.SubProyecto = dRowSubProyecto("SubProyecto").ToString Else Errores.AppendLine($"Error al cargar el Sub Proyecto CveSubProyecto: {CveSubProyecto}") Return False End If Dim DTIndex As DataTable = TmpDT.FiltraParametros("", DistinctColumns:={"Consec"}) For Each dRowIndex As DataRow In DTIndex.Rows If Not UpdatePSReembolso(dRowIndex("Consec").ToString.ToEntero, CvePS) Then respuesta = False End If Next If respuesta AndAlso IEPS > 0 Then If Not AgregaIEPSReembolso(CvePS:=CvePS) Then respuesta = False Else IEPS = 0 End If End If If Not AjustesValidacion() Then respuesta = False End If Return respuesta End Function Private Function AjustesValidacion() As Boolean Dim respuesta = True 'VALIDA IMPORTES If Not ValidaTotalesGuardar() Then respuesta = False End If If Not AjustaCombustibles() Then respuesta = False End If If Not AjustaIVA() Then respuesta = False End If If Not AjustaRetIVA() Then respuesta = False End If If Not AjustaRetISR() Then respuesta = False End If Return respuesta End Function Private Function ValidaTotalesGuardar() As Boolean Dim EsValido = True 'VALIDA IMPORTES 'VALIDA TOTAL CON LOS IMPORTES TOTALES Dim TempSubTotal, TempDescuentos, TempIVA, TempSubTotal2, TempRetIVA, TempRetISR, TempTotal, DifTotales, TempIEPS As Decimal Dim Amortizacion As Decimal = 0 Dim TieneAmortizacion As Boolean = False If DocumentosRelacionadosAnticiposUUIDList IsNot Nothing AndAlso DocumentosRelacionadosAnticiposUUIDList.Count > 0 Then 'Fix me ' AndAlso ArrAnticipos IsNot Nothing AndAlso ArrAnticipos.Count > 0 Then 'TieneAmortizacion = True End If 'If CveCompra < 0 AndAlso Not TieneAmortizacion Then ' LblAmortizacion.Text = "0.00" 'End If 'If UsuarioActual.CveEmpresa = 119 AndAlso TieneAmortizacion Then ' Amortizacion = LblAmortizacion.Text.Trim.ToDecimal ' TxtSubTotal.Text = (TxtSubTotal.Text.ToDouble + Amortizacion).ToString 'End If TempSubTotal = SubTotal SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 TempDescuentos = Descuento + Amortizacion TempSubTotal2 = TempSubTotal - TempDescuentos TempIVA = IVA TempIEPS = IEPS TempRetIVA = RetIVA TempRetISR = RetISR TempTotal = Math.Round(TempSubTotal2 + TempIVA + TempIEPS - TempRetIVA - TempRetISR + OtrosImpuestos - Amortizacion, 2) DifTotales = Total - TempTotal Dim DiferenciaPermitida = 0.6 If Math.Abs(DifTotales) > DiferenciaPermitida Then Errores.AppendLine($"Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.[{Math.Abs(DifTotales) - DiferenciaPermitida}]") EsValido = False ElseIf DifTotales <> 0 Then SubTotal2 = (SubTotal2 + DifTotales) SubTotal = (SubTotal + DifTotales) SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 End If Dim DiferenciaSubtotales = 0.0D If CveCompra > 0 Or CveFactura > 0 Or OCVinculada Then If SubTotalOriginal = Nothing Then SubTotalOriginal = 0 End If If SubTotal2Original = Nothing Then SubTotal2Original = 0 End If DiferenciaSubtotales = SubTotal2Original.ToString.ToDecimal - TmpDT.SUM("Total").ToString.ToDecimal '[IPP] PARCHE: Factura TELMEX para APH 12/ENERO/2018 If CveFactura = 286290 Then DiferenciaSubtotales += Descuento End If If Math.Abs(DiferenciaSubtotales) > 1 And Not CompraNoDeducible = 1 Then 'EsNoDeducible Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.") EsValido = False Else AjustaImporteUltimoConcepto(DiferenciaSubtotales) End If Else DiferenciaSubtotales = (SubTotal2 - TmpDT.SUMD("Total")).ToString.ToDecimal If Math.Abs(DiferenciaSubtotales) > 1 Then Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.") EsValido = False Else AjustaImporteUltimoConcepto(DiferenciaSubtotales) End If End If Return EsValido End Function Private Function AjustaCombustibles() As Boolean Dim Respuesta As Boolean = False Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ") Dim DiferenciaIVas As Decimal = IVA - IVADetalles If Not TmpDT.Columns.Contains("AplicaIEPS") Then TmpDT.Columns.Add(New DataColumn("AplicaIEPS", GetType(Boolean))) End If If Not TmpDT.Columns.Contains("IEPSGrabaIVA") Then TmpDT.Columns.Add(New DataColumn("IEPSGrabaIVA", GetType(Boolean))) End If For Each dRow As DataRow In TmpDT.Rows Dim DttPS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=dRow("CvePS").ToString.ToEntero) If DttPS IsNot Nothing AndAlso DttPS.Rows.Count > 0 Then Dim DrPS As DataRow = DttPS.Rows(0) dRow("AplicaIEPS") = Boolean.Parse(DrPS("AplicaIEPS").ToString) dRow("IEPSGrabaIVA") = Boolean.Parse(DrPS("IEPSGrabaIVA").ToString) Else dRow("AplicaIEPS") = False dRow("IEPSGrabaIVA") = False End If Next Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" AplicaIEPS = 'True' AND IEPSGrabaIVA = 'False' AND IVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConIVA = CantidadRegistroConIVA + 1 End If IndiceContador = IndiceContador + 1 Next IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido End If Next Else TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then Respuesta = False If IVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Alert("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.", TipoMensaje.MsgAdvertencia) Respuesta = False End If Else Respuesta = True End If If Respuesta Then Dim IEPSPSDetalles As Decimal = TmpDT.SUMD("IEPSPS", " IEPSPS > 0 ") Dim DiferenciaIEPSPS As Decimal = IEPS - IEPSPSDetalles Dim DTConsultaIEPSPS As New DataTable DTConsultaIEPSPS = TmpDT.FiltraParametros(" AplicaIEPS = 'True'") Dim IndiceContador As Integer = 0 Dim IndicePrimero As Integer = 0 For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And dRow("IEPSPS").ToString.ToDecimal > 0 Then IndicePrimero = IndiceContador Exit For End If IndiceContador = IndiceContador + 1 Next If DiferenciaIEPSPS.RoundSQL(2) <> 0 Then TmpDT.Rows(IndicePrimero)("IEPSPS") = TmpDT.Rows(IndicePrimero)("IEPSPS").ToString.ToDecimal + DiferenciaIEPSPS TmpDT.AcceptChanges() End If For Each dRow As DataRow In TmpDT.Rows If dRow("IEPSPSPorcentaje").ToString.ToDecimal > 0 AndAlso dRow("IEPSPS").ToString.ToDecimal = 0 Then dRow("IEPSPSPorcentaje") = 0 End If Next TmpDT.AcceptChanges() End If Return Respuesta End Function Private Function AjustaIVA() As Boolean Dim Respuesta As Boolean = False Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ") Dim DiferenciaIVas As Decimal = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0 Then If Math.Abs(DiferenciaIVas) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" IVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConIVA = CantidadRegistroConIVA + 1 End If IndiceContador = IndiceContador + 1 Next IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA For Each dRow As DataRow In TmpDT.Rows dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then Respuesta = False If IVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaIVas} entre el IVA de la compra y los detalles.") Respuesta = False End If Else Respuesta = True End If Return Respuesta End Function Private Function AjustaRetIVA() As Boolean Dim Respuesta As Boolean = False Dim RetIVADetalles As Decimal = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") Dim DiferenciaRetIVA As Decimal = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0 Then If Math.Abs(DiferenciaRetIVA) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" RetIVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConRetIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("RetIVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConRetIVA = CantidadRegistroConRetIVA + 1 End If IndiceContador = IndiceContador + 1 Next RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") DiferenciaRetIVA = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetIVA) / CantidadRegistroConRetIVA For Each dRow As DataRow In TmpDT.Rows dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("RetIVA") = TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") DiferenciaRetIVA = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0.01D Then Respuesta = False If RetIVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("RetIVA").ToString.ToDecimal > 0 Then dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal + DiferenciaRetIVA TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetIVA, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaRetIVA} entre el RetIVA de la compra y los detalles.") End If Else Respuesta = True End If Return Respuesta End Function Private Function AjustaRetISR() As Boolean Dim Respuesta As Boolean = False Dim RetISRDetalles As Decimal = TmpDT.SUMD("RetISR", " RetISR > 0 ") Dim DiferenciaRetISR As Decimal = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0 Then If Math.Abs(DiferenciaRetISR) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" RetISR > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConRetISR As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("RetISR").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConRetISR = CantidadRegistroConRetISR + 1 End If IndiceContador = IndiceContador + 1 Next RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ") DiferenciaRetISR = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetISR) / CantidadRegistroConRetISR For Each dRow As DataRow In TmpDT.Rows dRow("RetISR") = dRow("RetISR").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("RetISR") = TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ") DiferenciaRetISR = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0.01D Then Respuesta = False If RetISRDetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("RetISR").ToString.ToDecimal > 0 Then dRow("RetISR") = dRow("RetISR").ToString.ToDecimal + DiferenciaRetISR TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetISR, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaRetISR} entre el RetISR de la compra y los detalles.") Respuesta = False End If Else Respuesta = True End If Return Respuesta End Function Private Function AgregaIEPSReembolso(CvePS As Integer) As Boolean Dim respuesta As Boolean = True If IEPSGasto Or OtrosImpuestosGasto Then 'AGREGA IEPS COMO CONCEPTO If IEPSGasto Then AgregarConceptoIEPS(TrasladoIEPS, CvePS) For Each Dr As DataRow In TmpDT.Rows Dr("IEPSPS") = 0 Dr("IEPSPSPorcentaje") = 0 Next TmpDT.AcceptChanges() End If 'AGREGA OTROS IMPUESTOS COMO CONCEPTO If OtrosImpuestosGasto Then AgregarConceptoIEPS(OtrosImpuestos, CvePS) End If Else respuesta = False Errores.AppendLine("Debe seleccionar al menos un impuesto. ") End If CalculaTotales() Return respuesta End Function Private Sub AgregarConceptoIEPS(IEPS As Decimal, CvePS1 As Integer) Dim SubTotalR As Decimal = TmpDT.SUM("Total").ToString.ToDecimal Dim PSS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS") Dim PSS2 As DataTable = TmpDT.FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS") If PSS.Rows.Count > 0 Or PSS2.Rows.Count > 0 Then Dim CveUM As Integer = 0 Dim UM As String = "" Dim CveClasificacion As Integer = 0 Dim Clasificacion As String = "" Dim CvePS As Integer = 0 Dim PS As String = "" Dim CveTipoPS As Integer = 0 If PSS.Rows.Count > 0 Then CveUM = PSS.Rows(0)("CveUM").ToString.ToEntero UM = PSS.Rows(0)("UnidadMedida").ToString CveClasificacion = PSS.Rows(0)("CveClasificacion").ToString.ToEntero Clasificacion = PSS.Rows(0)("Clasificacion").ToString CvePS = PSS.Rows(0)("CvePS").ToString.ToEntero PS = PSS.Rows(0)("PS").ToString CveTipoPS = PSS.Rows(0)("CveTipoPS").ToString.ToEntero End If Dim Cantidad As Decimal = 1 Dim CveSubProyectoContrato As String = "-1" Dim CveProyecto As String = "-1" Dim SubProyecto As String = "SE" Dim Proyecto As String = "SE" Dim Obs As String = "" Dim PU As Decimal = IEPS Dim Total As Decimal = Cantidad * PU Dim IVA As Decimal = 0 Dim Descuento As Decimal = 0 If PSS2.Rows.Count > 0 Then CveUM = PSS2.Rows(0)("CveUM").ToString.ToEntero UM = PSS2.Rows(0)("UM").ToString CveClasificacion = PSS2.Rows(0)("CveClasificacion").ToString.ToEntero Clasificacion = PSS2.Rows(0)("Clasificacion").ToString CvePS = PSS2.Rows(0)("CvePS").ToString.ToEntero PS = PSS2.Rows(0)("PS").ToString CveTipoPS = PSS2.Rows(0)("CveTipoPS").ToString.ToEntero CveSubProyectoContrato = PSS2.Rows(0)("CveSubProyecto").ToString CveProyecto = PSS2.Rows(0)("CveProyecto").ToString SubProyecto = PSS2.Rows(0)("SubProyecto").ToString Proyecto = PSS2.Rows(0)("Proyecto").ToString Obs = PSS2.Rows(0)("Obs").ToString Dim CveTipoGasto As Integer = PSS2.Rows(0)("CveTipoGasto").ToString.ToEntero Dim TipoGasto As String = PSS2.Rows(0)("TipoGasto").ToString AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False, CveTipoGasto:=CveTipoGasto, TipoGasto:=TipoGasto, ModalidadAccionPS:=EnumModalidadAccionPS.Agregar) Else AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False) End If End If Dim SubTotalIEPS = TmpDT.SUM("Total").ToString.ToDecimal Me.SubTotal = Math.Round(SubTotalIEPS, 2) Me.SubTotalConceptos = Math.Round(SubTotalIEPS, 2) PSS.Dispose() End Sub Private Function AddPS(Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, CveTipoPS As Integer, CveSubProyectoContrato As String, SubProyecto As String, Proyecto As String, CveProyecto As String, Obs As String, PU As Decimal, Total As Decimal, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, IEPSPS As Decimal, IEPSPSIVA As Decimal, Descuento As Decimal, Optional CveOrdenCompraDetalle As Integer = -1, Optional TCalculaTotales As Boolean = True, Optional PSCodigo As String = "-", Optional PSDescripcion As String = "-", Optional CantidadF As Double = -1, Optional EntregaDirecta As Integer = -1, Optional OtrosGastos As Decimal = 0, Optional CveSATPS As Integer = -1, Optional CargaXml As Boolean = False, Optional CveTipoGasto As Integer = -1, Optional TipoGasto As String = "", Optional PorcentajeIVA As Decimal = 0, Optional PorcentajeIEPS As Decimal = 0, Optional PorcentajeRetIVA As Decimal = 0, Optional PorcentajeRetISR As Decimal = 0, Optional NoDeducible As Boolean = False, Optional CveContratoDetalle As Integer = -1, Optional CveCultivoCuadroDetalle As Integer = -1, Optional CveSATPSActualizado As Boolean = False, Optional TemporadaCuadro As String = "", Optional ModalidadAccionPS As EnumModalidadAccionPS = EnumModalidadAccionPS.Agregar, Optional Con As Integer = -1, Optional CveProgramaOperativo As Integer = -1, Optional CveUnidadAdministrativa As Integer = -1, Optional CveFuenteFinanciamiento As Integer = -1, Optional CveTipoGastoAC As Integer = -1, Optional CveClasificacionOG As Integer = -1) As Integer Dim Row As DataRow = Nothing Row = TmpDT.NewRow() Dim Retorno As Integer = 0 Dim CveContrato = -1 Dim CveSubProyecto = -1 Dim Valores As String() ''CONTRATOS If CveSubProyectoContrato.Contains("|"c) Then Valores = CveSubProyectoContrato.Split("|"c) CveContrato = Valores(1).ToEntero CveSubProyecto = Valores(0).ToEntero Else CveSubProyecto = CveSubProyectoContrato.ToEntero End If 'DR PS Dim DrPS As DataRow = Nothing If CvePS > 0 Then DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) End If If DrPS IsNot Nothing Then Row("PSCodigo") = If(PSCodigo = "", DrPS("PSCodigo").ToString, PSCodigo) Row("CveMetodoInventario") = DrPS("Inv_CveMetodoInventario").ToString.ToEntero If CveTipoCompra = EnumTipoCompra.Garantia AndAlso DrPS("AplicaSerie").ToString = "True" Then Row("CveMetodoInventario") = "1" End If Else Row("PSCodigo") = PSCodigo Row("CveMetodoInventario") = 0 End If If ModalidadAccionPS = EnumModalidadAccionPS.Actualizar Then Row("Consec") = Con Else Row("Consec") = TmpDT.Rows.Count + 1 End If If (CFDIVersion = EnumCFDIVersion.V33 Or CFDIVersion = EnumCFDIVersion.V40) And CveSATPS > 0 Then Dim DrPSSAT As DataRow = Nothing If CargaXml Then DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("") Else DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("") End If If DrPSSAT IsNot Nothing Then Row("SATClaveProductoServicio") = DrPSSAT("SATClaveProductoServicio").ToString Row("CveSATPS") = DrPSSAT("CveSATPS").ToString If CveSATPSActualizado Then Row("CveSATPSActualizado") = 1 Else Row("CveSATPSActualizado") = 0 End If End If End If Try If (DrPS("CvePSCargo").ToString <> "") Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto) CveTipoPS = 2 End If Catch ex As Exception End Try Dim DecimalesPermitidos = 6 Row("CveConcepto") = TmpDT.Rows.Count + 1 Row("Cantidad") = Math.Round(Cantidad, DecimalesPermitidos) Row("CantidadF") = If(CantidadF = -1, Math.Round(Cantidad, DecimalesPermitidos), Math.Round(CantidadF, DecimalesPermitidos)) Row("CveUM") = CveUM Row("UM") = UM Row("CveClasificacion") = CveClasificacion Row("CveClasificacionActualizar") = CveClasificacion Row("Clasificacion") = Clasificacion Row("CvePS") = CvePS Row("PS") = PS Row("CveTipoPS") = CveTipoPS Row("PSDescripcion") = PSDescripcion Row("CveSubProyecto") = CveSubProyecto.ToEntero Row("CveProyecto") = CveProyecto.ToEntero Row("CveContrato") = CveContrato.ToEntero Row("SubProyecto") = If(SubProyecto = "Seleccione", "Sin Sub Proyecto", SubProyecto) Row("Proyecto") = If(Proyecto = "Seleccione", "Sin Proyecto", Proyecto) Row("CveActivoFijo") = -1 Row("Obs") = Obs Row("CveActivoFijo") = -1 Row("CodAF") = "-1" Row("TipoAF") = -1 Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle Row("EntregaDirecta") = EntregaDirecta Row("NoDeducible") = NoDeducible Total = Math.Round(PU, DecimalesPermitidos) * Cantidad - Descuento Row("PU") = Math.Round(PU, DecimalesPermitidos) If CargaXml And (CFDIVersion = EnumCFDIVersion.V33 Or CFDIVersion = EnumCFDIVersion.V40) Then If CveFactura > 0 And IVA = 0 Then Row("IVA") = 0 Row("IVAPorcentaje") = 0 Else Row("IVA") = Math.Round(IVA, DecimalesPermitidos) Row("IVAPorcentaje") = PorcentajeIVA End If Row("RetIVA") = Math.Round(RetIVA, DecimalesPermitidos) Row("RetIVAPorcentaje") = PorcentajeRetIVA Row("RetISR") = Math.Round(RetISR, DecimalesPermitidos) Row("RetISRPorcentaje") = PorcentajeRetISR Row("IEPSPS") = Math.Round(IEPSPS, DecimalesPermitidos) Row("IEPSPSPorcentaje") = PorcentajeIEPS Else 'If DdlIVA.SelectedValue.ToDouble = 0 Then Row("IVA") = 0 Else Row("IVA") = Math.Round(IVA * Total, DecimalesPermitidos) If CveFactura > 0 And IVA = 0 Then Row("IVA") = 0 Row("IVAPorcentaje") = 0 Else Row("IVA") = (IVA * Total).RoundSQL Row("IVAPorcentaje") = IVA End If Row("RetIVA") = (RetIVA * Total).RoundSQL Row("RetIVAPorcentaje") = RetIVA Row("RetISR") = (RetISR * Total).RoundSQL Row("RetISRPorcentaje") = RetISR Row("IEPSPS") = (IEPSPS * Total).RoundSQL Row("IEPSPSPorcentaje") = IEPSPS End If Row("ImporteConImpuestos") = (Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal) + Row("IVA").ToString.ToDecimal + Row("IEPSPS").ToString.ToDecimal - (Row("RetIVA").ToString.ToDecimal + Row("RetISR").ToString.ToDecimal) Row("ImporteSinImpuestos") = Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal Row("IEPSPSIVA") = Math.Round(IEPSPSIVA * Total, DecimalesPermitidos) Row("IEPSPSIVAPorcentaje") = IEPSPSIVA Row("Descuento") = Math.Round(Descuento, DecimalesPermitidos) Row("OtrosGastos") = Math.Round(OtrosGastos, DecimalesPermitidos) Row("Total") = Math.Round(Total, DecimalesPermitidos) Row("CveTipoGasto") = CveTipoGasto Row("TipoGasto") = If(CveTipoGasto > 0, TipoGasto, "") Row("CveContratoDetalle") = CveContratoDetalle Row("CveCultivoCuadroDetalle") = CveCultivoCuadroDetalle Row("TemporadaCuadro") = TemporadaCuadro If UsuarioActual.Empresa.UsaAC Then Row("CveProgramaOperativo") = CveProgramaOperativo Row("CveUnidadAdministrativa") = CveUnidadAdministrativa Row("CveFuenteFinanciamiento") = CveFuenteFinanciamiento Row("CveTipoGastoAC") = CveTipoGastoAC Row("CveClasificacionOG") = CveClasificacionOG End If 'Esta parte es para validar cuando la factura tenga ieps en o se asignara el ieps como una partida ya no se considere If (CveFactura > 0 Or CveCompra > 0) And IEPS = 0 Then Row("IEPSPS") = 0 Row("IEPSPSPorcentaje") = 0 End If TmpDT.Rows.Add(Row) TmpDT.Rows.IndexOf(Row) If TCalculaTotales Then CalculaTotales(True) End If Return Retorno End Function Private Sub CalculaTotales(Optional CalculaIVA As Boolean = False, Optional EsNoDeducible As Boolean = False) 'VARIABLES DE CALCULO Dim LocalSubTotal, LocalDescuentos, LocalAmortizacion, LocalIVA, LocalSubTotal2, LocalRetIVA, LocalRetISR, LocalIEPSPS, LocalTotal, LocalSubTotalIVA, LocalSubTotalIEPSIVA As Decimal 'HACEMOS CALCULOS LocalSubTotalIVA = TmpDT.SUMD("IVA") LocalSubTotalIEPSIVA = TmpDT.SUMD("IEPSPSIVA") LocalSubTotal = (TmpDT.SUMD("Total") + TmpDT.SUMD("Descuento")).RoundSQL(8) LocalRetIVA = TmpDT.SUMD("RetIVA") LocalRetISR = TmpDT.SUMD("RetISR") LocalIEPSPS = TmpDT.SUMD("IEPSPS") If CveCompra > 0 AndAlso CveFactura > 0 Then LocalIVA = IVA Else LocalIVA = If(TmpDT.SUM("IVA") > 0, LocalSubTotalIVA + LocalSubTotalIEPSIVA, 0) End If LocalDescuentos = TmpDT.SUMD("Descuento") If Not CveCompra > 0 Then LocalAmortizacion = Me.Amortizacion End If 'RETENCIONES Dim Retenciones = 0D Retenciones = LocalRetIVA Retenciones += LocalRetISR LocalSubTotal2 = LocalSubTotal - LocalDescuentos LocalTotal = LocalSubTotal2 + LocalIVA + LocalIEPSPS - Retenciones 'ASIGNAMOS VALORES A VISTA If CveCompra > 0 Or CveFactura > 0 Or Me.OCVinculada Then SubTotal = LocalSubTotal SubTotal2 = LocalSubTotal2 Descuento = LocalDescuentos If EsNoDeducible Then IVA = LocalIVA RetIVA = LocalRetIVA RetISR = LocalRetISR IEPS = LocalIEPSPS End If Total = LocalTotal Else SubTotal = LocalSubTotal SubTotal2 = LocalSubTotal2 IVA = LocalIVA Descuento = LocalDescuentos RetIVA = LocalRetIVA RetISR = LocalRetISR IEPS = LocalIEPSPS Total = LocalTotal 'VALORES PROPIEDAD CompraSaldo = LocalTotal End If Me.NumNoDed = TmpDT.COUNT("CvePS", "NoDeducible = True ") End Sub Private Function UpdatePSReembolso(Index As Integer, CvePS As Integer) As Boolean Dim Respuesta As Boolean = True Dim DrPS As DataRow = Nothing Try DrPS = TmpDT.Select($"Consec = {Index}")(0) If DrPS Is Nothing Then Errores.AppendLine($"No se encontrol el producto con index {Index}") Return False End If Catch ex As Exception Errores.AppendLine($"No se encontrol el producto con index {Index}") Return False End Try 'DATOS GENERALES DrPS("Obs") = "" DrPS("Proyecto") = Proyecto DrPS("CveProyecto") = CveProyecto DrPS("SubProyecto") = SubProyecto DrPS("CveSubProyecto") = CveSubProyecto DrPS("CveContratoDetalle") = -1 'IMPORTES - [CANTIDAD Y PRECIO] Dim Cantidad = DrPS("Cantidad").ToString.ToDouble Dim PU = DrPS("PU").ToString.ToDouble Dim Descuento = DrPS("Descuento").ToString.ToDouble Dim Total = (Cantidad * PU) - Descuento DrPS("NoDeducible") = NoDeducible Dim PSRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If PSRow IsNot Nothing Then Dim CveTipoPS As Integer = PSRow("CveTipoPS").ToString.ToEntero If PSRow("CvePSCargo").ToString <> "" Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto) CveTipoPS = 2 End If DrPS("CveClasificacion") = PSRow("CveClasificacion").ToString DrPS("Clasificacion") = PSRow("Clasificacion").ToString DrPS("CvePS") = CvePS DrPS("PS") = PSRow("PS").ToString DrPS("CveTipoPS") = CveTipoPS DrPS("CveSATPS") = PSRow("CveSATPS").ToString.ToEntero DrPS("SATClaveProductoServicio") = PSRow("SATClaveProductoServicio").ToString DrPS("CveSATPSActualizado") = 0 DrPS("CveUM") = PSRow("CveUnidadMedida").ToString.ToEntero DrPS("UM") = PSRow("UnidadMedida").ToString Dim DrTipoGasto As DataRow = Me.DTTiposGastos.FiltroPrimero("") DrPS("CveTipoGasto") = DrTipoGasto("CveTipoGasto") DrPS("TipoGasto") = DrTipoGasto("TipoGasto") If UsuarioActual.Empresa.Funcionalidad(562).ToEntero > 0 Then DrPS("AplicaCostoIndirecto") = "0" End If DrPS("CveCultivoCuadroDetalle") = -1 DrPS("TemporadaCuadro") = "" Else Errores.AppendLine($"No se encontrol el producto con CvePS {CvePS}") Respuesta = False End If TmpDT.AcceptChanges() Return Respuesta End Function Private Sub ValidacionesTotalesXml() If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) End If Dim Msg As String = "" Dim SubtotalTemp = TmpDT.SUMD("Total") + Math.Round(TmpDT.SUM("Descuento") + Math.Round(TmpDT.SUM("Amortizacion")), 2).ToDecimal Dim DescuentosTemp = TmpDT.SUMD("Descuento") Dim Subtotal2Temp = TmpDT.SUMD("Total") Dim IVATemp = TmpDT.SUMD("IVA") Dim IEPSTemp = TmpDT.SUMD("IEPSPS") Dim RetIVATemp = TmpDT.SUMD("RetIVA") Dim RetISRTemp = TmpDT.SUMD("RetISR") Dim TotalTemp As Decimal = Subtotal2Temp - RetIVATemp - RetISRTemp + Math.Round(IVATemp, 6) + IEPSTemp + OtrosImpuestos - OtrosImpuestosRetenciones If Math.Abs(Math.Round(DescuentosTemp, 6) - Math.Round(Descuento, 6)) > 0.01 Then Msg &= String.Format("- Los descuentos del detalle no coinciden con el descuento general
") End If If Math.Abs(Math.Round(IVATemp, 6) - Math.Round(TrasladoIVA, 6)) > 0.01 Then Msg &= String.Format("- Los IVAS del detalle no coinciden con el IVA general
") End If If Math.Abs(Math.Round(IEPSTemp, 6) - Math.Round(TrasladoIEPS, 6)) > 0.01 Then Msg &= String.Format("- Los IEPS del detalle no coinciden con el IEPS general
") End If If Math.Abs(Math.Round(RetIVATemp, 6) - Math.Round(RetencionIVA, 6)) > 0.01 Then Msg &= String.Format("- Los RetIVA del detalle no coinciden con el RetIVA general
") End If If Math.Abs(Math.Round(RetISRTemp, 6) - Math.Round(RetencionISR, 6)) > 0.01 Then Msg &= String.Format("- Las RetISR del detalle no coinciden con el RetIVA general
") End If If Math.Abs(Math.Round(TotalTemp, 2) - Math.Round(Total, 2)) > 0.01 Then Msg &= String.Format("- El total generado por los detalles no coincide con el total general
({0}-{1})", Math.Round(TotalTemp, 2), Math.Round(Total, 2)) End If If Msg <> "" Then Errores.AppendLine($" El comprobante XML presenta las siguientes inconsistencias:{Msg}. ") Else DescuentosTemp = Descuento IVATemp = TrasladoIVA TotalTemp = Total RetIVATemp = RetencionIVA RetISRTemp = RetencionISR IEPSTemp = TrasladoIEPS End If Me.SubTotal = SubtotalTemp Me.Descuento = DescuentosTemp Me.SubTotal2 = Subtotal2Temp Me.IVA = IVATemp Me.Total = TotalTemp Me.RetIVA = RetIVATemp Me.RetISR = RetISRTemp Me.IEPS = IEPSTemp CompraSaldo = TotalTemp AsignaValoresOriginales(SubtotalTemp, Subtotal2Temp, IVATemp, RetIVATemp, RetISRTemp, Total) End Sub Private Sub AsignaValoresOriginales(SubTotal As Decimal, SubTotal2 As Double, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, Total As Decimal) SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 IVAOriginal = IVA RetIVAOriginal = RetIVA RetISROriginal = RetISR TotalOriginal = Total End Sub Private Sub AjustaImporteUltimoConcepto(ImporteAjuste As Decimal, Optional EsCarga As Boolean = False) If ImporteAjuste = 0 Then Exit Sub Dim Amortizacion As Decimal = 0 If TmpDT.Rows.Count > 0 Then ' si hay movimientos y si esta afectando al total, que se haga el ajuste Dim Indice As Integer = If(TmpDT.Rows(TmpDT.Rows.Count - 1)("CvePS").ToString = UsuarioActual.Empresa.Funcionalidad(112).ToString, TmpDT.Rows.Count - 2, TmpDT.Rows.Count - 1) Dim tPU As Decimal If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal Else tPU = 0 End If If TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU < 0 Then 'si es negativo, que tome el dato anterior Indice = Indice - 1 If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal Else tPU = 0 End If End If TmpDT.Rows(Indice)("PU") = TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU TmpDT.Rows(Indice)("Total") = TmpDT.Rows(Indice)("Total").ToString.ToDecimal + ImporteAjuste TmpDT.Rows(Indice)("IEPSPS") = (TmpDT.Rows(Indice)("Total").ToString.ToDecimal() * TmpDT.Rows(Indice)("IEPSPSPorcentaje").ToString.ToDecimal()).RoundAD(2) TmpDT.Rows(Indice)("IVA") = (TmpDT.Rows(Indice)("PU").ToString.ToDecimal * TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal - TmpDT.Rows(Indice)("Descuento").ToString.ToDecimal) * TmpDT.Rows(Indice)("IVAPorcentaje").ToString.ToDecimal TmpDT.AcceptChanges() End If SubTotal = TmpDT.SUMD("Total") If Not EsCarga Then Descuento = TmpDT.SUMD("Descuento") End If SubTotalConceptos = SubTotal End Sub Public Function ValidateUUID(ByVal uuid As String) As Boolean Dim pattern As String = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" Dim regex As New Regex(pattern) Return regex.IsMatch(uuid) End Function Private Function GeneraStringDoctosRelacionados() As String Dim DoctosRelacionados As String = "-1" Dim listaUUIDSRelacionados As New List(Of String) If DocumentosRelacionadosUUIDSList.Count > 0 Then For Each s As String In DocumentosRelacionadosUUIDSList If s.Trim.Length > 0 Then listaUUIDSRelacionados.Add(s.Trim) End If Next End If If listaUUIDSRelacionados.Count > 0 Then DoctosRelacionados = String.Join(",", listaUUIDSRelacionados.ToArray()) End If Return DoctosRelacionados End Function Private Function ValorXML(n As XmlNode, Campo As String, Optional Retorno As String = "") As String Dim o As XmlNode = n.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, Campo, True) = 0) If o Is Nothing Then Return Retorno Else Return o.Value End If End Function Public Function AddCompra() As Boolean If Not AjustesValidacion() Then Return False Dim respuesta As Boolean = True Dim ObjCompras As New ClsCompras Dim ObjConta As New ClsContabilidad(ObjCompras.IniciaTransacSQL()) If Not AddPrepolizaCabecera(ObjConta) Then respuesta = False End If If respuesta AndAlso ObjCompras.AddCompra(If(Me.TipoComprobante = "I", "Fac", "NC"), Me.Descripcion, Me.Serie, Me.Folio, Me.FolioSecundario, Me.CveProveedor, Me.SubTotal, Me.Descuento, Me.Amortizacion, Me.IVA, Me.RetIVA, Me.RetISR, Me.IEPS, Me.OtrosImpuestos, Me.Redondeo, Me.Total, Me.Fecha, Me.CveMoneda, Me.TipoCambio, If(Me.FechaPago = Nothing, Me.Fecha, Me.FechaPago), Me.AplicaNotaCredito, Me.Observaciones, Me.CveEstatusFactura, Me.CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Me.IdPoliza, CveCajaChica:=Me.CveCajaChica, CvePersonal:=Me.CvePersonal, NumeroReembolso:=Me.NumeroReembolso, CveProveedorSucursal:=Me.CveProveedorSucursal, AplicoPromocion:=Me.AplicoPromocion, PorcentajeIVA:=Me.PorcentajeIVA, CveMetodoPago:=Me.CveMetodoPago, CveRetIVAConcepto:=Me.CveRetIVAConcepto, CveConceptoContableAlmacen:=Me.CveConceptoContableAlmacen, CveRetISRConcepto:=Me.CveRetISRConcepto, NoDeducible:=Me.NoDeducible, CveTipoCompra:=Me.CveTipoCompra, TotalOriginal:=Me.TotalOriginal, CveTipoConcepto:=Me.CveTipoConcepto, EsImportacion:=Me.EsImportacion, CveFactura:=Me.CveFactura, CveSubProyecto:=Me.CveSubProyectoPrincipal, DoctosRelacionados:=Me.DocumentosRelacionadosUUIDSString, CveFolioGarantia:=Me.CveFolioGarantia) Then Me.CveCompra = ObjCompras.CveCompra Else respuesta = False End If If respuesta AndAlso Me.CveCompra > 0 Then For Each Row As DataRow In Me.TmpDT.Rows Dim TipoRecepcion As Integer = -1 Dim Referencia = "" Dim EsNoDeducible As Boolean = False Dim CveAF = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 1, Row("CveActivoFijo").ToString.ToEntero, -1) Dim CveAFC = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 2, Row("CveActivoFijo").ToString.ToEntero, -1) If Not ObjCompras.AddCompraDetalle(Me.CveCompra, Row("CveUM").ToString.ToEntero, Row("CvePS").ToString.ToEntero, Row("CveSubProyecto").ToString.ToEntero, -1, CveAF, Row("Cantidad").ToString.ToDecimal, Row("PU").ToString.ToDecimal, Row("IVA").ToString.ToDecimal, Row("Total").ToString.ToDecimal, Row("Descuento").ToString.ToDecimal, Row("Obs").ToString, Row("CveOrdenCompraDetalle").ToString.ToEntero, TipoRecepcion, Row("CveContrato").ToString.ToEntero, Row("CvePresupuestoEgreso").ToString.ToEntero, AplicaCostoIndirecto:=Row("AplicaCostoIndirecto").ToString.ToEntero, EstatusAlmacen:=Row("EntregaDirecta").ToString.ToEntero, CvePersonal:=CvePersonal, CveTipoGasto:=Row("CveTipoGasto").ToString.ToEntero, AF_Medida:=Row("AFMedida").ToString.ToEntero, AF_TipoMantenimiento:=Row("AFTipoMantenimiento").ToString.ToEntero, Referencia:=Referencia, OtrosGastos:=Row("OtrosGastos").ToString.ToDecimal, RetIVA:=Row("RetIVA").ToString.ToDecimal, RetISR:=Row("RetISR").ToString.ToDecimal, IEPSPS:=Row("IEPSPS").ToString.ToDecimal.RoundSQL, IEPSPSIVA:=Row("IEPSPSIVA").ToString.ToDecimal, IVAPorcentaje:=Row("IVAPorcentaje").ToString.ToDecimal, RetIVAPorcentaje:=Row("RetIVAPorcentaje").ToString.ToDecimal, RetISRPorcentaje:=Row("RetISRPorcentaje").ToString.ToDecimal, IEPSPSPorcentaje:=Row("IEPSPSPorcentaje").ToString.ToDecimal, IEPSPSIVAPorcentaje:=Row("IEPSPSIVAPorcentaje").ToString.ToDecimal, NoDeducible:=If((Row("NoDeducible").ToString().ToUpper().Contiene("TRUE", "1")) AndAlso EsNoDeducible, True, False), CveContratoDetalle:=Row("CveContratoDetalle").ToString.ToEntero, CveCultivoCuadroDetalle:=Row("CveCultivoCuadroDetalle").ToString.ToEntero, CveActivoFijoCompra:=CveAFC) Then respuesta = False Exit For End If Next End If If respuesta Then If Not AddPrepolizaDetalles(ObjConta) Then respuesta = False End If If respuesta AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 4) Then If ObjConta.ValorPolizaDescuadre > 0 Then Errores.AppendLine($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}.") GuardaLogAD($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") respuesta = False End If End If If respuesta Then If Not ObjCompras.UpdateCompraFactura(Me.CveCompra, Me.CveFactura, Me.Serie, Me.Folio) Then respuesta = False End If If respuesta Then ObjCompras.Commit() Else ObjCompras.RollBack() End If ObjCompras.Dispose() ObjConta.Dispose() Return respuesta End Function Private Function AddPrepolizaCabecera(ByRef ObjConta As ClsContabilidad) As Boolean Dim respuesta As Boolean = False Dim ConceptoPoliza As String = String.Format("{0} - {1} - {2}", NombreProveedor, SerieFolio, "") Me.CvePrePoliza = ObjConta.AddPrePolizas("eFacturas/Registrar", 1, Me.Total, Me.Total, Me.CveMoneda, Me.Fecha, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, "", CveTipoPoliza:=Me.CveTipoPoliza) respuesta = If(Me.CvePrePoliza > 0, True, False) Return respuesta End Function Private Function AddPrePolizaDetalles(ByRef ObjConta As ClsContabilidad) As Boolean Dim respuesta As Boolean = True Dim Concepto As String = $"{Me.NombreProveedor} {Me.SerieFolio}" Dim Referencia As String = Me.SerieFolio Dim importeMovimiento As Decimal Dim importeMN As Decimal '6 For Each RowDetalle As DataRow In TmpDT.FiltraParametros("ISNULL(TipoAF,0) <> 2", "", {"CveClasificacion", "CveSubProyecto"}).Rows importeMovimiento = TmpDT.SUMD("Total", $" CveClasificacion = {RowDetalle("CveClasificacion").ToString} AND CveSubProyecto = {RowDetalle("CveSubProyecto").ToString}") importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If importeMN <> 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 6, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=Me.CveCreditoDetalle, ImporteME:=If(TipoCambio = 1, 0, importeMovimiento), TipoCambio:=TipoCambio, CveClasificacion:=RowDetalle("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=RowDetalle("CveSubProyecto").ToString().ToEntero(), Contabilizable:=True) Then respuesta = False Exit For End If End If Next '14 If respuesta AndAlso Me.IVA > 0 Then importeMovimiento = Me.IVA importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 14, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=Me.PorcentajeIVA, Contabilizable:=True) Then respuesta = False End If End If '25 If respuesta AndAlso Me.IEPS > 0 Then importeMovimiento = Me.IEPS importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, 25, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If ' If respuesta AndAlso Me.RetIVA > 0 Then importeMovimiento = Me.RetIVA importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetIVA If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If ' If respuesta AndAlso Me.RetISR > 0 Then importeMovimiento = Me.RetISR importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetISR If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If '5 If respuesta Then importeMovimiento = Me.Total importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ConPreP As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(1, Me.CveMoneda, False, Me.CveTipoConceptoProveedor) Dim ImporteME = importeMovimiento Dim UsaComplementaria As Boolean = True If Me.CveMoneda > 1 Then ImporteME = importeMovimiento If UsuarioActual.CveEmpresa.Contiene(13, 83) Then 'caso excepcional de complementarias UsaComplementaria = False importeMN = importeMovimiento * Me.TipoCambio Else importeMN = importeMovimiento End If If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ConPreP.CveConcepto, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If If respuesta AndAlso Me.CveMoneda > 1 AndAlso UsaComplementaria Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, (importeMovimiento * Me.TipoCambio - importeMovimiento).RoundSQL, ConPreP.CveConceptoComplementario, Referencia, Concepto, CveCompra:=Me.CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=Me.CvePersonal, CveCompraAmortizacion:=Me.CveCompraAmortizacion, TipoCambio:=Me.TipoCambio, TipoCambioPago:=1, ImporteME:=ImporteME, CveSubProyecto:=Me.CveSubProyecto) Then respuesta = False End If End If End If Return respuesta End Function End Class Public Class GeneralesAPIeFacturas Inherits ADSNetLibraryzdE.HelpersE.ConexionesE.SIGAPIE.BaseSIGAPIeFacturas Public Sub New(ByVal Optional domainApi As String = "http://localhost:4001/", ByVal Optional token As String = "") MyBase.New(domainApi, token) End Sub Public Function GeneraSolicitud(CveEmpresa As Integer, CveTipoSolicitud As Integer, CveSolicitud As Integer) As Object Return getData(Of Object)($"GeneraSolicitud/{CveEmpresa}/{CveTipoSolicitud}/{CveSolicitud}", Nothing, ADSNetLibraryzdE.HelpersE.ConexionesE.SIGAPIE.requestMethod.[GET], False) End Function Public Function VerificaSolicitudesNominas(CveEmpresa As Integer, CveTipoSolicitud As Integer, CveSolicitud As Integer) As Object Return getData(Of Object)($"VerificaSolicitudesNominas/{CveEmpresa}/{CveTipoSolicitud}/{CveSolicitud}", Nothing, ADSNetLibraryzdE.HelpersE.ConexionesE.SIGAPIE.requestMethod.[GET], False) End Function Public Function CancelarSolicitud(CveEmpresa As Integer, CveSolicitud As Integer, CveUsuario As Integer) As Object Return getData(Of Object)($"CancelarSolicitud/{CveEmpresa}/{CveSolicitud}/{CveUsuario}", Nothing, ADSNetLibraryzdE.HelpersE.ConexionesE.SIGAPIE.requestMethod.[GET], False) End Function End Class Namespace ADSNetLibraryzdE.HelpersE.ConexionesE.SIGAPIE Public Enum requestMethod POST = 1 [GET] = 2 End Enum Public Class BaseSIGAPIeFacturas Private Const tituloLog As String = "ADSNetLibrary.Helpers.Conexiones.SIGAPI" Public domainApi As String Public authorization As String Protected RouteController As String = "" Protected FullRoute As String = "" Public Function GetRoutbyclass() As String Dim classname As String = Me.[GetType]().Name Return classname.Substring(0, classname.Length - 12) End Function Public Function GetRoute(ByVal path As String) As String If String.IsNullOrEmpty(FullRoute) Then Return String.Format("api/{0}/{1}", (If(String.IsNullOrEmpty(RouteController), GetRoutbyclass(), RouteController)), path) Else Return String.Format("{0}{1}", FullRoute, path) End If End Function Public Sub New(ByVal domainApi As String, ByVal Optional authorization As String = Nothing, ByVal Optional fullRoute As String = Nothing) If String.IsNullOrEmpty(domainApi) Then domainApi = "http://localhost:4001/" End If Me.authorization = authorization Me.domainApi = domainApi Me.FullRoute = fullRoute End Sub Public Async Function getDataAsync(Of T As {Class, New})(ByVal path As String, ByVal requestobject As Object, ByVal Optional reqmet As requestMethod = requestMethod.POST, ByVal Optional needauthorization As Boolean = True, ByVal Optional isfullpath As Boolean = False) As Task(Of T) Dim objreturn As T = Nothing Using client As HttpClient = New HttpClient() client.BaseAddress = New Uri(domainApi) client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) If needauthorization Then client.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", authorization) End If client.Timeout = TimeSpan.FromMinutes(15) Dim response As HttpResponseMessage = New HttpResponseMessage() Dim strjsonreq = Newtonsoft.Json.JsonConvert.SerializeObject(requestobject) Dim content As StringContent = New StringContent(strjsonreq, Encoding.UTF8, "application/json") Dim route As String = If(isfullpath, path, GetRoute(path)) Try Select Case reqmet Case requestMethod.POST response = Await client.PostAsync(route, content) Case requestMethod.[GET] response = Await client.GetAsync(route) End Select If response.IsSuccessStatusCode Then Dim jsondata As String = Await response.Content.ReadAsStringAsync() Dim settings As Newtonsoft.Json.JsonSerializerSettings = New Newtonsoft.Json.JsonSerializerSettings With { .NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore, .MissingMemberHandling = Newtonsoft.Json.MissingMemberHandling.Ignore } objreturn = Newtonsoft.Json.JsonConvert.DeserializeObject(Of T)(jsondata, settings) Else End If Catch e As Exception End Try End Using Return objreturn End Function Public Function getData(Of T As {Class, New})(ByVal path As String, ByVal requestobject As Object, ByVal Optional reqmet As requestMethod = requestMethod.POST, ByVal Optional needauthorization As Boolean = True, ByVal Optional isfullpath As Boolean = False) As T Return AsyncHelper.RunSync(Of T)(Function() getDataAsync(Of T)(path, requestobject, reqmet, needauthorization, isfullpath)) End Function End Class Friend Module AsyncHelper Private ReadOnly _myTaskFactory As TaskFactory = New TaskFactory(CancellationToken.None, TaskCreationOptions.None, TaskContinuationOptions.None, TaskScheduler.[Default]) Function RunSync(Of TResult)(ByVal func As Func(Of Task(Of TResult))) As TResult 'Return AsyncHelper._myTaskFactory.StartNew(Of Task(Of TResult))(func).Unwrap(Of TResult)().GetAwaiter().GetResult() Return AsyncHelper._myTaskFactory.StartNew(Of Task(Of TResult))(func).Unwrap().GetAwaiter().GetResult() End Function Sub RunSync(ByVal func As Func(Of Task)) AsyncHelper._myTaskFactory.StartNew(Of Task)(func).Unwrap().GetAwaiter().GetResult() End Sub End Module End Namespace