diff --git a/App_Code/ClsCompras.vb b/App_Code/ClsCompras.vb index e70d402ef..211711478 100644 --- a/App_Code/ClsCompras.vb +++ b/App_Code/ClsCompras.vb @@ -4,6 +4,7 @@ Option Strict On Imports System.Data Imports System.Data.SqlClient Imports Extensiones +Imports iText.StyledXmlParser.Css.Resolve.Shorthand.Impl Public Class ClsCompras Implements IDisposable @@ -3115,6 +3116,29 @@ Public Class ClsCompras Return Retorno End Function + + Public Function GetComprobacionPagosContabilizados(CvePersonal As Integer, CveCajaChica As Integer, NumeroReembolso As String, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Comp_ComprobacionPagosContabilizadosGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CvePersonal", SqlDbType.Int).Value = CvePersonal + .Add("@CveCajaChica", SqlDbType.Int).Value = CveCajaChica + .Add("@NumeroReembolso", SqlDbType.VarChar).Value = NumeroReembolso + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveComprobacion", SqlDbType.Int).Direction = ParameterDirection.Output + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al consultar los pagos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + Public Function GetRepComprasInventarios(FechaIC As Date, FechaFC As Date, FechaI As Date, FechaF As Date, CveEmpresa As Integer, CveSubProyecto As Integer, CveProveedor As Integer) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Comp_InventariosRepGet") diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index 3e40a0e45..d49198115 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -865,6 +865,37 @@ Public Class ClsContabilidad End Function + Public Function PrePolizaCompraCambiaReembolso(CvePrePoliza As Integer, CvePrePolizaVieja As Integer, CveCompra As Integer, CveEmpresa As Integer, Opcion As Integer) As Boolean + Dim Retorno As Boolean = False + + SeUnifico = False + YaEstabaUnifida = False + EstaContabilizada = False + + DataAdapter("PA_Conta_PrePolizaCompraCambiaReembolso") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CvePrePoliza", SqlDbType.Int).Value = CvePrePoliza + .Add("@CvePrePolizaVieja", SqlDbType.Int).Value = CvePrePolizaVieja + .Add("@CveCompra", SqlDbType.Int).Value = CveCompra + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@Opcion", SqlDbType.Int).Value = Opcion + End With + + Try + + SqlAdapter.Fill(Data) + Retorno = True + Catch ex1 As SqlException + OnError("Ocurrió un error al actualizar prepolizas", ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + Catch ex As Exception + OnError("Ocurrió un error al actualizar prepolizas", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + + End Function + Public Function PrePolizaSimplificacion(CvePrePoliza As Integer, CveEmpresa As Integer) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Conta_PrePolizasSimplificacion") @@ -878,9 +909,9 @@ Public Class ClsContabilidad SqlAdapter.Fill(Data) Retorno = True Catch ex1 As SqlException - OnError("Ocurrió un error al simplificar prepolizas", ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + OnError("Ocurrió un error al actualizar prepolizas", ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) Catch ex As Exception - OnError("Ocurrió un error al simplificar prepolizas", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + OnError("Ocurrió un error al actualizar prepolizas", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) End Try Return Retorno diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 578f763ff..d72277ae2 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -173,9 +173,13 @@ Public Class ClsPaginas Dim tHora As Integer = 0 'If UsuarioActual IsNot Nothing AndAlso UsuarioActual.Empresa IsNot Nothing Then tHora = UsuarioActual.Empresa.UTCOffset Try - If HttpContext.Current.Session IsNot Nothing AndAlso HttpContext.Current.Session("UsuarioSIG") IsNot Nothing AndAlso CType(HttpContext.Current.Session("UsuarioSIG"), Usuario).Empresa IsNot Nothing Then tHora = CType(HttpContext.Current.Session("UsuarioSIG"), Usuario).Empresa.UTCOffset + If HttpContext.Current IsNot Nothing Then + If HttpContext.Current.Session IsNot Nothing AndAlso HttpContext.Current.Session("UsuarioSIG") IsNot Nothing AndAlso CType(HttpContext.Current.Session("UsuarioSIG"), Usuario).Empresa IsNot Nothing Then + tHora = CType(HttpContext.Current.Session("UsuarioSIG"), Usuario).Empresa.UTCOffset + End If + End If Catch ex As Exception - + tHora = 0 End Try Return If(tHora <> 0, Now.ToUniversalTime.AddMinutes(tHora), Now) diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb index f9233fa4d..dc36ee5f2 100644 --- a/App_Code/modExtensiones.vb +++ b/App_Code/modExtensiones.vb @@ -331,7 +331,7 @@ Namespace Extensiones Public Sub GuardaLogAD(Mensaje As String, Optional Archivo As String = "Log") Dim ArchivoW As StreamWriter - Dim MensajeFormato As String = String.Format("{0}{1}Log: {2} | Fecha:{3}", Chr(13), Chr(10), Mensaje, ClsPaginas.NowADS().ToString("dd/MM/yyyy HH:mm")) + Dim MensajeFormato As String = String.Format("{0}{1}Log: {2} | Fecha:{3}", Chr(13), Chr(10), Mensaje, DateTime.Now.ToString("dd/MM/yyyy HH:mm")) Try ArchivoW = New StreamWriter(String.Format("{0}\Log\{1}.txt", AppDomain.CurrentDomain.BaseDirectory, Archivo), True, System.Text.Encoding.UTF8) diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 5b51e5a52..dd10e1160 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -13,6 +13,9 @@ Imports MoreLinq Imports System.Data.SqlClient Imports ClsPaginas Imports System.Activities.Expressions +Imports Microsoft.Data.Edm.Expressions +Imports Telerik.Web.UI +Imports DocumentFormat.OpenXml.Math Partial Class Compras_Compras Inherits ClsPaginas @@ -3549,7 +3552,7 @@ Partial Class Compras_Compras ViewState("CveProveedor") = ObjProveedor.CveProveedor ViewState("CveTipoProveedor") = ObjProveedor.CveTipoProveedor - RFCProveedor = ObjProveedor.RFC + RFCProveedor = ObjProveedor.RFC If ObjProveedor.CveTipoProveedor = 2 Then LblProveedor.Text = "Acreedor:" Else @@ -8693,10 +8696,6 @@ Partial Class Compras_Compras Next - 'If Not validaNumeroReembolso() Then - ' Exit Sub - 'End If - Dim ObjCompra As New ClsCompras Dim ObjProveedores As New ClsCompProveedores(ObjCompra.IniciaTransacSQL()) Dim ObjInventario As New ClsInventarios(ObjCompra.IniciaTransacSQL) @@ -9240,6 +9239,9 @@ Partial Class Compras_Compras End If + If Retorno AndAlso Not validaNumeroReembolso(ObjCompra.IniciaTransacSQL()) Then + Retorno = False + End If Catch ex As Exception Alert("Ocurrió un error al actualizar la compra", TipoMensaje.MsgError) @@ -9248,6 +9250,9 @@ Partial Class Compras_Compras Finally + + + If Retorno Then If ObjContabilidad.MensajePolizaDescuadre IsNot Nothing AndAlso ObjContabilidad.MensajePolizaDescuadre.ToString <> "" Then Alert(ObjContabilidad.MensajePolizaDescuadre.ToString) @@ -9290,12 +9295,109 @@ Partial Class Compras_Compras End Sub - Private Function validaNumeroReembolso() As Boolean + Private Function validaNumeroReembolso(transaccionSql As SqlTransaction) As Boolean - If NumeroReembolsoOriginal <> TxtNumeroReembolso.Text Then + + Dim objCompras As New ClsCompras(transaccionSql) + Dim objConta As New ClsContabilidad(transaccionSql) + + + Dim tienePagoContabilizado As Boolean = False + Dim ErrorProceso As Boolean = False + + Dim CvePrePolizaReembolsoActual As Integer = CvePrePoliza + Dim CvePrePolizaReembolsoNuevo As Integer = -1 + + If TxtRembolsoNumero.Text.Trim.Length > 0 Then + + Dim CvePersonalVal As Integer = -1 + Dim CveCajaChicaVal As Integer = -1 + + If RblRembolso.SelectedValue.ToEntero = 1 Then + CvePersonalVal = DdlRembolsoPersonal.SelectedValue.ToEntero + Else + CveCajaChicaVal = DdlRembolsoCajaChica.SelectedValue.ToEntero + End If + + If objCompras.GetComprobacion(CvePersonalVal, CveCajaChicaVal, TxtRembolsoNumero.Text.Trim, UsuarioActual.CveEmpresa) Then + + If objCompras.DtResultados.Rows.Count > 0 Then + CvePrePolizaReembolsoNuevo = objCompras.DtResultados.Rows(0)("CvePrePoliza").ToString.ToEntero + Else + + Dim tConcepto As String = If(DdlRembolsoPersonal.SelectedValue.ToEntero > 0, DdlRembolsoPersonal.SelectedItem.Text, DdlRembolsoCajaChica.SelectedItem.Text) + + tConcepto = String.Format("{0}-{1}", tConcepto, TxtRembolsoNumero.Text.Trim) + + CvePrePolizaReembolsoNuevo = objConta.AddPrePolizas("Compras Comproba", 1, 0, 0, 1, TxtFecha.Text.ToDate, tConcepto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + + If Not objCompras.AddComprobacion(DdlRembolsoPersonal.SelectedValue.ToEntero, DdlRembolsoCajaChica.SelectedValue.ToEntero, TxtRembolsoNumero.Text.Trim, CvePrePolizaReembolsoNuevo, UsuarioActual.CveEmpresa) > 0 Then + ErrorProceso = True + End If + + + End If + End If + + + If NumeroReembolsoOriginal = "" And TxtRembolsoNumero.Text.Trim.Length > 0 Then + + + If objCompras.GetComprobacionPagosContabilizados(CvePersonalVal, CveCajaChicaVal, TxtRembolsoNumero.Text.Trim, UsuarioActual.CveEmpresa) Then + + If objCompras.DtResultados IsNot Nothing AndAlso objCompras.DtResultados.Rows.Count > 0 Then + tienePagoContabilizado = True + End If + + If tienePagoContabilizado Then + Alert($"No se puede actualizar el número de reembolso {TxtRembolsoNumero.Text}, ya tiene pagos contabilizados.", TipoMensaje.MsgAdvertencia) + Return False + End If + + + If objConta.GetPrePoliza(CvePrePoliza, UsuarioActual.CveEmpresa) Then + + Dim FolioPoliza As Integer = objConta.DtResultados.Rows(0)("FolioPoliza").ToString.ToEntero + + If FolioPoliza > 0 Then + If Not objConta.ContabilizaDesContabilizaPrePoliza(CvePrePoliza, False, UsuarioActual.CveEmpresa) Then + ErrorProceso = True + End If + End If + + End If + + + Else + ErrorProceso = True + End If + + + + ElseIf NumeroReembolsoOriginal.Length > 0 And TxtRembolsoNumero.Text.Trim.Length > 0 Then + 'cambiar de prepoliza la compra actual, de la prepoliza actual a la nueva + If Not objConta.PrePolizaCompraCambiaReembolso(CvePrePolizaReembolsoNuevo, CvePrePoliza, CveCompra, UsuarioActual.CveEmpresa, 1) Then + ErrorProceso = True + End If + End If + + + Else + + If NumeroReembolsoOriginal.Length > 0 And TxtRembolsoNumero.Text.Trim.Length = 0 Then + 'Actualizar PrePoliza Actual de Donde CveCompra = CveCompra poner CvePrePolizaOriginal + If Not objConta.PrePolizaCompraCambiaReembolso(-1, CvePrePoliza, CveCompra, UsuarioActual.CveEmpresa, 2) Then + ErrorProceso = True + End If + End If End If + + + + Return If(ErrorProceso, False, True) + End Function Private Sub MandaCorreoActualizacionDetalle() @@ -10785,7 +10887,7 @@ Partial Class Compras_Compras If ChkConsignacion.Checked Then End If - UpINV.Update() + UpInv.Update() End Sub @@ -11611,6 +11713,8 @@ Partial Class Compras_Compras #Region " AJUSTA IMPORTES " Private Sub AjustaImporteUltimoConcepto(ImporteAjuste As Decimal, Optional EsCarga As Boolean = False) + + If ImporteAjuste = 0 Then Exit Sub Dim Amortizacion As Decimal = 0 @@ -17322,18 +17426,18 @@ Partial Class Compras_Compras End If End If - Select Case Modalidad - Case "A" - If Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> TmpDT.MAX("IVAPorcentaje").ToDouble And TmpDT.MAX("IVAPorcentaje").ToDouble <> 0 And Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> 0 And TmpDT.Rows.Count > 0 Then - Alert("No puede haber dos tipos de IVA en la compra.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - Case "U" - If Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> TmpDT.FiltraParametros($"Consec <> {Index}").MAX("IVAPorcentaje").ToDouble And TmpDT.FiltraParametros($"Consec <> {Index}").MAX("IVAPorcentaje").ToDouble <> 0 And Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> 0 And TmpDT.FiltraParametros($"Consec <> {Index}").Rows.Count > 0 Then - Alert("No puede haber dos tipos de IVA en la compra.", TipoMensaje.MsgAdvertencia) - Exit Sub - End If - End Select + 'Select Case Modalidad + ' Case "A" + ' If Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> TmpDT.MAX("IVAPorcentaje").ToDouble And TmpDT.MAX("IVAPorcentaje").ToDouble <> 0 And Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> 0 And TmpDT.Rows.Count > 0 Then + ' Alert("No puede haber dos tipos de IVA en la compra.", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + ' Case "U" + ' If Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> TmpDT.FiltraParametros($"Consec <> {Index}").MAX("IVAPorcentaje").ToDouble And TmpDT.FiltraParametros($"Consec <> {Index}").MAX("IVAPorcentaje").ToDouble <> 0 And Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2) <> 0 And TmpDT.FiltraParametros($"Consec <> {Index}").Rows.Count > 0 Then + ' Alert("No puede haber dos tipos de IVA en la compra.", TipoMensaje.MsgAdvertencia) + ' Exit Sub + ' End If + 'End Select Dim Total As Decimal = (TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal) - TxtDescuentoModal.Text.ToDecimal diff --git a/Compras/eFacturas.aspx b/Compras/eFacturas.aspx index 34fdee2b6..fc05ef3e2 100644 --- a/Compras/eFacturas.aspx +++ b/Compras/eFacturas.aspx @@ -69,9 +69,9 @@
  • Solicitudes SAT
  • -
  • + <%--
  • Bitácora Facturas -
  • + --%>
  • Vinculación Masiva Complementos
  • @@ -1360,7 +1360,7 @@
    - diff --git a/Compras/eFacturas.aspx.vb b/Compras/eFacturas.aspx.vb index 3405f0e7e..f95f0a88a 100644 --- a/Compras/eFacturas.aspx.vb +++ b/Compras/eFacturas.aspx.vb @@ -27,6 +27,7 @@ Imports SharpCompress.Reader Imports System.Drawing Imports Microsoft.Owin.Security.Provider Imports Telerik.Web.UI +Imports Stimulsoft.Base.StiDbType 'Imports Telerik.Web.UI @@ -785,7 +786,7 @@ Partial Class Compras_eFacturas End If CargaGvBitacora() - CargaDatos() + CargaDatos(NowADS()) MostrarSolcitudesSAT() If UsuarioActual.CveRol = 1 Then @@ -810,10 +811,10 @@ Partial Class Compras_eFacturas End Sub Protected Sub BtnConsultar_Click(sender As Object, e As System.EventArgs) Handles BtnConsultar.Click - CargaDatos() + CargaDatos(NowADS()) End Sub - Private Sub CargaDatos() + Private Sub CargaDatos(NowEmpresa As DateTime) DTTraslados = New DataTable @@ -832,7 +833,7 @@ Partial Class Compras_eFacturas FechaI = MinFecha FechaF = MaxFecha txtFechaI.Text = MinFecha.ToString - txtFechaF.Text = NowADS().ToShortDateString + txtFechaF.Text = NowEmpresa.ToShortDateString End If Dim DtPagos As DataTable = Nothing @@ -887,13 +888,13 @@ Partial Class Compras_eFacturas End Sub Protected Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click - GenerarPDF("Excel") + GenerarPDF(NowADS(), "Excel") End Sub Protected Sub ImgRefresh_Click(sender As Object, e As EventArgs) Handles ImgRefresh.Click If VerificaCorreo() Then - CargaDatos() + CargaDatos(NowADS()) End If End Sub @@ -982,7 +983,7 @@ Partial Class Compras_eFacturas End Sub - Protected Sub LnkBitacotaFacturas_Click(sender As Object, e As EventArgs) + Protected Sub LnkBitacoraFacturas_Click(sender As Object, e As EventArgs) RegistraScript("$('#ModalBitacoraEfacturas').modal()") CargaDatosBitacora() @@ -1137,11 +1138,11 @@ Partial Class Compras_eFacturas ObjDatos.Dispose() - CargaDatos() + CargaDatos(NowADS()) 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() + CargaDatos(NowADS()) End Sub @@ -1157,7 +1158,7 @@ Partial Class Compras_eFacturas Protected Sub GvDatos_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvD.RowEditing GvD.EditIndex = e.NewEditIndex - CargaDatos() + CargaDatos(NowADS()) End Sub Protected Sub GvDatos_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvD.RowCommand @@ -1187,7 +1188,7 @@ Partial Class Compras_eFacturas ObjDatos.Dispose() If Correcto Then - CargaDatos() + CargaDatos(NowADS()) End If End Sub @@ -1300,15 +1301,15 @@ Partial Class Compras_eFacturas GvPagos.EditIndex = -1 End If ObjDatos.Dispose() - CargaDatos() + CargaDatos(NowADS()) 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() + CargaDatos(NowADS()) 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() + CargaDatos(NowADS()) End Sub Protected Sub imgDP_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) @@ -1347,7 +1348,7 @@ Partial Class Compras_eFacturas ObjDatos.Dispose() If Correcto Then - CargaDatos() + CargaDatos(NowADS()) End If End Sub #End Region @@ -1386,7 +1387,7 @@ Partial Class Compras_eFacturas If Not ErrorTrans Then Alert("La verificación masiva ha terminado", TipoMensaje.MsgInformacion) - CargaDatos() + CargaDatos(NowADS()) End If @@ -1432,11 +1433,11 @@ Partial Class Compras_eFacturas DtNoRecibidas.Dispose() - CargaDatos() + CargaDatos(NowADS()) End Sub #Region "G E N E R A P D F " - Private Sub GenerarPDF(Optional Tipo As String = "PDF") + Private Sub GenerarPDF(Fecha As DateTime, Optional Tipo As String = "PDF") Dim ObjDatos As New ClsCompras Dim FechaI As String = txtFechaI.Text Dim FechaF As String = txtFechaF.Text @@ -1470,7 +1471,7 @@ Partial Class Compras_eFacturas params.Add(New ReportParameter("FechaInicio", FechaI)) params.Add(New ReportParameter("FechaFin", FechaF)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) - params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) + params.Add(New ReportParameter("FechaImpresion", Fecha.ToDateTime.ToShortDateString)) If Imagen.Exists Then params.Add(New ReportParameter("LogoPath", $"file//:{Imagen.FullName}")) @@ -1481,9 +1482,9 @@ Partial Class Compras_eFacturas If Tab.ActiveTabIndex = 2 Then - ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", DTTraslados, params, $"FacturasBuzon_{NowADS().ToString("yyyyMMyyddmmss")}", Tipo) + ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", DTTraslados, params, $"FacturasBuzon_{Fecha.ToString("yyyyMMyyddmmss")}", Tipo) Else - ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", dt, params, $"FacturasBuzon_{NowADS().ToString("yyyyMMyyddmmss")}", Tipo) + ImprimirPDF("Empresas/Grales/Formatos/RepFacturas.rdlc", dt, params, $"FacturasBuzon_{Fecha.ToString("yyyyMMyyddmmss")}", Tipo) End If @@ -1491,7 +1492,7 @@ Partial Class Compras_eFacturas End Sub Protected Sub LnkPdf_Click(sender As Object, e As EventArgs) Handles LnkPdf.Click - GenerarPDF() + GenerarPDF(NowADS()) End Sub #End Region @@ -1556,7 +1557,7 @@ Partial Class Compras_eFacturas End Sub - Private Sub SubirFacturas(ByRef ListComprimidos As List(Of String), ByRef ListXML As List(Of String), ByRef ListPDF As List(Of String)) + Private Sub SubirFacturas(ByRef ListComprimidos As List(Of String), ByRef ListXML As List(Of String), ByRef ListPDF As List(Of String), Optional Validada As Integer = 0) Dim DTLOG As New DataTable DTLOG.Columns.Add("Serie", GetType(String)) DTLOG.Columns.Add("Folio", GetType(String)) @@ -1638,35 +1639,6 @@ Partial Class Compras_eFacturas 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 As String 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 - ' ListXML.Add(filePath) - ' End If - 'Next - - 'Dim Arreglo As New ArrayList() - 'Dim Bandera As Boolean = True - 'Dim Retorno As String = "" - '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() @@ -1710,12 +1682,13 @@ Partial Class Compras_eFacturas If File.Exists(filePathXML) Then Dim a As New ComprobanteFactura(eFacturasLog) - Dim FF As Factura = a.CargaComprobanteXML(File.ReadAllText(filePathXML), UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.RFC, UsuarioActual.CveEmpresa, True, rowLog, NombreArchivo:=fInfoXML.Name) + Dim FF As Factura = a.CargaComprobanteXML(File.ReadAllText(filePathXML), UsuarioActual.Empresa.Ruta, UsuarioActual.Empresa.RFC, UsuarioActual.CveEmpresa, True, rowLog, NombreArchivo:=fInfoXML.Name, Validada:=Validada) If FF IsNot Nothing AndAlso FF.CveFactura > 0 Then If RutaPDF = "" Then - a.GeneraPDF(UsuarioActual.Empresa.Ruta, FF, UsuarioActual.Empresa.Ruta, True) + Dim Hilo As New System.Threading.Thread(Sub() ProcesarPDF(UsuarioActual, a, FF)) + Hilo.Start() Else Dim PDfDestino As String = $"{UsuarioActual.Empresa.Ruta}\Compras\{FF.EmisorRFC}\{FF.CveFactura}.PDF" If File.Exists(PDfDestino) Then @@ -1736,40 +1709,6 @@ Partial Class Compras_eFacturas 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 " & NowADS().ToString("yyyyMMddhhmmss"), "Facturas", Archivos:=ListaArchivosMail) Then - - ' If Correo.SendMail(UsuarioActual.Empresa, UsuarioActual.Empresa.Buzon_Mail, "Facturas Efacturas " & NowADS().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) @@ -1777,38 +1716,6 @@ Partial Class Compras_eFacturas sw.Start() - 'For Each filePath As String In ListXML - ' Try - ' File.Delete(filePath) - ' Catch ex As Exception - ' End Try - 'Next - - - 'For Each filePath As String In ListPDF - ' 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 - For Each s As String In ListXML Try File.Delete(s) @@ -1829,74 +1736,6 @@ Partial Class Compras_eFacturas 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 - - mesajeFaturasSubidas(DTLOG) @@ -1905,6 +1744,10 @@ Partial Class Compras_eFacturas 'Alert(String.Format("Se cargaron {0} Facturas", Arreglo.Count), TipoMensaje.MsgInformacion) End Sub + Private Sub ProcesarPDF(UsuarioActual As Usuario, a As ComprobanteFactura, FF As Factura) + a.GeneraPDF(UsuarioActual, UsuarioActual.Empresa.Ruta, FF, UsuarioActual.Empresa.Ruta, True) + End Sub + Private Sub mesajeFaturasSubidas(DTLOG As DataTable) @@ -2430,7 +2273,7 @@ Partial Class Compras_eFacturas '_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 + Public Function GeneraPDF(UsuarioActual As Usuario, 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 @@ -2709,33 +2552,30 @@ Partial Class Compras_eFacturas Using nom As ClsNominas = New ClsNominas() - 'PRUEBAS - If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.CveEmpresa = 119 Then - If nom.SolicitudesGet(1589, UsuarioActual.CveEmpresa, CveTipoSolicitud:=2, Estatus:=-1, Top:=1) Then - GVSolicitudesPendientes.DataSource = nom.DtResultados + 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() + If nom.DtResultados.Rows.Count > 0 Then + LnkverificarSolicitudes.Visible = True End If - Else - 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 + GVSolicitudesPendientes.DataBind() End If + 'If nom.SolicitudesGet(1611, UsuarioActual.CveEmpresa, CveTipoSolicitud:=2, Estatus:=-1, Top:=50) Then + ' GVSolicitudesPendientes.DataSource = nom.DtResultados - If nom.SolicitudesGet(-1, UsuarioActual.CveEmpresa, CveTipoSolicitud:=2, Estatus:=1, Top:=1) Then - GVSolicitudesNominas.DataSource = nom.DtResultados - GVSolicitudesNominas.DataBind() + ' 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 + GVSolicitudesHistorial.DataSource = nom.DtResultados + GVSolicitudesHistorial.DataBind() End If End Using @@ -3009,6 +2849,8 @@ Partial Class Compras_eFacturas Protected Sub LnkverificarSolicitudes_Click(ByVal sender As Object, ByVal e As EventArgs) Try Dim sbResultado As StringBuilder = New StringBuilder() + Dim sbArchivosFaltantes As New StringBuilder() + Dim TipoMensaje As ModExtensiones.TipoMensaje = ModExtensiones.TipoMensaje.MsgInformacion Dim ListComprimidos As New List(Of String) @@ -3028,7 +2870,7 @@ Partial Class Compras_eFacturas Dim SeVerifico As Boolean = False Dim ResultadoSolicitudOK As Boolean = False - Dim api As New GeneralesAPIeFacturas() + Dim api As New GeneralesAPIeFacturas(If(EsProduccion, "http://localhost:4001/", "http://localhost:60281/")) Dim Verificar As Boolean = True @@ -3068,42 +2910,41 @@ Partial Class Compras_eFacturas If ResultadoSolicitudOK And Verificar Then - 'Dim ObjApiVerificacion As JToken = CType(api.VerificaSolicitudesNominas(UsuarioActual.CveEmpresa, CveTipoSolicitud, CveSolicitudActual), JToken) + If EsProduccion 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 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 + ResultadoVerificaionOK = Boolean.Parse(resultVerificacion(0)) + SeVerifico = True + Else + TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia + End If + Else + ResultadoVerificaionOK = True + SeVerifico = True + End If - ' Alert(respesta.ToString) - ' End If - - ' ResultadoVerificaionOK = Boolean.Parse(resultVerificacion(0)) - ' SeVerifico = True - 'Else - ' TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia - 'End If - - Dim Archivo = New FileInfo(String.Format("{0}DescargasSATXML\Compras\{1}.gzip", UsuarioActual.Empresa.Ruta, CveSolicitudDetalle)) + Dim Archivo = New FileInfo(String.Format("{0}DescargasSATXML\Compras\{1}.zip", UsuarioActual.Empresa.Ruta, CveSolicitudDetalle)) Dim fileName = Archivo.Name Dim filemove = Archivo.FullName - If Archivo.Exists Then + If ResultadoVerificaionOK AndAlso Archivo.Exists Then Try 'COPIAR ARCHIVO A LA CARPETA DE PROCESAMIENTO DE FACTURAS, SE ELIMINARAN ESOS ARCHIVOS TEMPORALES Dim destFile = String.Format("{0}Temp\Facturas\{1}", UsuarioActual.Empresa.Ruta, fileName) File.Copy(filemove, destFile, overwrite:=True) - ListComprimidos.Add(destFile) - ResultadoVerificaionOK = True - SeVerifico = True + If File.Exists(destFile) Then + ListComprimidos.Add(destFile) + Else + sbArchivosFaltantes.AppendFormat("
    Folio: {0} Archivo: {1}", Folio, fileName) + End If Catch ex As Exception ex.ToString().GuardaLog() + sbArchivosFaltantes.AppendFormat("
    Folio: {0} Archivo: {1}. Error al procesar", Folio, fileName) End Try End If @@ -3119,8 +2960,8 @@ Partial Class Compras_eFacturas TipoMensaje = ModExtensiones.TipoMensaje.MsgAdvertencia End If - If SeVerifico AndAlso UsuarioActual.CveRol = 1 AndAlso UsuarioActual.CveEmpresa = 119 Then - SubirFacturas(ListComprimidos, ListXML, ListPDF) + If SeVerifico Then + SubirFacturas(ListComprimidos, ListXML, ListPDF, Validada:=1) End If 'If UsuarioActual.CveRol = 1 Then @@ -3146,6 +2987,11 @@ Partial Class Compras_eFacturas Next Alert(sbResultado.ToString(), TipoMensaje) + + If sbArchivosFaltantes.Length > 0 Then + Alert($"No se pudieron procesar los siguientes folios. {sbArchivosFaltantes.ToString()}", TipoMensaje.MsgError) + End If + cargasolicitudes() Catch ex As Exception Alert(ex.StackTrace) @@ -3161,17 +3007,24 @@ Partial Class Compras_eFacturas RegistraScript("$('#ModalAgregarSolicitud').modal('show');") End Sub - Protected Sub GVSolicitudesNominas_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) + Protected Sub GVSolicitudesHistorial_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 As String = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{e.Row.DataKey("ArchivoXML")}" + Dim UrlDescarga As String = $"{UsuarioActual.Empresa.Ruta}DescargasSATXML\\Compras\\{e.Row.DataKey("CveSolicitudDetalle")}.zip" If System.IO.File.Exists(UrlDescarga) Then Dim LnkDescargaXML As LinkButton = e.Row.FCLinkButton("LnkDescargaXML") ScriptManager.GetCurrent(Me).RegisterPostBackControl(LnkDescargaXML) LnkDescargaXML.Visible = True + Else + Dim UrlDescarga2 As String = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{e.Row.DataKey("ArchivoXML")}" + If System.IO.File.Exists(UrlDescarga2) Then + Dim LnkDescargaXML As LinkButton = e.Row.FCLinkButton("LnkDescargaXML") + ScriptManager.GetCurrent(Me).RegisterPostBackControl(LnkDescargaXML) + LnkDescargaXML.Visible = True + End If End If End If @@ -3193,9 +3046,14 @@ Partial Class Compras_eFacturas Protected Sub LnkDescargaXML_Click(ByVal sender As Object, ByVal e As EventArgs) Dim GvRow As GridViewRow = CType((CType(sender, LinkButton)).NamingContainer, GridViewRow) - Dim UrlDescarga As String = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{GvRow.DataKey("ArchivoXML")}" + Dim UrlDescarga As String = $"{UsuarioActual.Empresa.Ruta}DescargasSATXML\\Compras\\{GvRow.DataKey("CveSolicitudDetalle")}.zip" Dim Archivo As New System.IO.FileInfo(UrlDescarga) + If Not Archivo.Exists Then + Dim UrlDescarga2 As String = $"{UsuarioActual.Empresa.Ruta}NomXMLSAT\\Descargas\\{GvRow.DataKey("ArchivoXML")}" + Archivo = New System.IO.FileInfo(UrlDescarga2) + End If + If Archivo.Exists Then Response.Clear() Response.AddHeader("Content-Disposition", "attachment; filename=" & Archivo.Name) @@ -3205,6 +3063,7 @@ Partial Class Compras_eFacturas Response.TransmitFile(Archivo.FullName) Response.[End]() End If + End Sub Private Sub MostrarSolcitudesSAT() @@ -3341,7 +3200,7 @@ Partial Class Compras_eFacturas GvD.EditIndex = -1 RegistraScript(String.Format("$('#{0}').modal('hide');", "divDescripcion")) Alert("La factura se eliminó correctamente.", TipoMensaje.MsgInformacion) - CargaDatos() + CargaDatos(NowADS()) UpBitacora.Update() End If @@ -3366,7 +3225,7 @@ Partial Class Compras_eFacturas GvPagos.EditIndex = -1 RegistraScript("$('#divDescripcionPago').modal('hide');") Alert("La factura se eliminó correctamente.", TipoMensaje.MsgInformacion) - CargaDatos() + CargaDatos(NowADS()) UpBitacora.Update() End If @@ -4038,7 +3897,7 @@ Partial Class Compras_eFacturas Alert("El pago fue vinculado correctamente", TipoMensaje.MsgInformacion) RegistraScript("$('#ModalVincularPago').modal('hide')", "VincularPagoModalHide") - CargaDatos() + CargaDatos(NowADS()) Else ObjCompra.RollBack() Alert("Ocurrió un error al vincular el pago. Por favor verifique y vuelva a intentar", TipoMensaje.MsgError) @@ -4489,7 +4348,7 @@ Partial Class Compras_eFacturas Alert($"PDF Error se genero nulo", TipoMensaje.MsgAdvertencia) End If - CargaDatos() + CargaDatos(NowADS()) Catch ex As Exception Alert($"PDF Error {ex.Message} -- > {ex.StackTrace}", TipoMensaje.MsgAdvertencia) @@ -4963,7 +4822,7 @@ Partial Class Compras_eFacturas If CountVinculados > 0 Then Alert($"Se vincularon {CountVinculados} complementos") - CargaDatos() + CargaDatos(NowADS()) End If @@ -5098,7 +4957,7 @@ Partial Class Compras_eFacturas ObjDatos.Dispose() If Correcto Then - CargaDatos() + CargaDatos(NowADS()) End If End Sub @@ -5171,7 +5030,7 @@ Partial Class Compras_eFacturas If ProcesoOk Then RegistraScript("$('#DvModalVincularTrasaldo').modal('hide');") - CargaDatos() + CargaDatos(NowADS()) Alert("Traslado Vinculado correctamente.") End If @@ -5493,7 +5352,7 @@ Partial Class Compras_eFacturas Next If Not ErrorProceso Then - CargaDatos() + CargaDatos(NowADS()) If Contador > 0 Then Alert($"Se registraron {Contador} Compras") End If @@ -7779,7 +7638,7 @@ Namespace ADS.eFacturas ' End If 'End Sub - Public Function CargaComprobanteXML(StrFuente As String, DirectorioEmpresa As String, RFCEmpresa As String, CveEmpresa As Integer, Registrar As Boolean, ByRef rowLog As DataRow, NombreArchivo As String) As Factura + Public Function CargaComprobanteXML(StrFuente As String, DirectorioEmpresa As String, RFCEmpresa As String, CveEmpresa As Integer, Registrar As Boolean, ByRef rowLog As DataRow, NombreArchivo As String, Optional Validada As Integer = 0) As Factura Dim SeValido As Boolean = False @@ -8039,6 +7898,8 @@ Namespace ADS.eFacturas If Fact.ReceptorRFC = RFCEmpresa Then + Fact.Validada = Validada + Dim ObjCompra As New ClsCompras Dim Correcto As Boolean = False @@ -8134,7 +7995,7 @@ Namespace ADS.eFacturas - Public Function GeneraPDF(ByVal Ruta As String, ByVal Fact As Factura, DirectorioEmpresa As String, Guardar As Boolean) As Boolean + Public Function GeneraPDF(UsuarioActual As Usuario, ByVal Ruta As String, ByVal Fact As Factura, DirectorioEmpresa As String, Guardar As Boolean) As Boolean Dim RutaXML As String = String.Empty Dim RutaPDF As String = String.Empty Dim Retorno As Boolean = False @@ -8197,7 +8058,7 @@ Namespace ADS.eFacturas If (Fact.Version = "3.3" Or Fact.Version = "4.0") Then Dim cxml As XmlSatCFDI = XmlSatCFDI.readXML(ArchivoXML, ArchivoLog) ModExtensiones.GuardaLogAD(String.Format(" *********** UUID : {0} ***********", cxml.complemento.UUID), ArchivoLog) - cxml.ImprimirPDF(TmpArchivoPDF, DirectorioEmpresa, Fact.TipoComprobante) + cxml.ImprimirPDF(UsuarioActual, TmpArchivoPDF, DirectorioEmpresa, Fact.TipoComprobante) Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) Try @@ -8216,9 +8077,9 @@ Namespace ADS.eFacturas ModExtensiones.GuardaLogAD(String.Format(" *********** TFDUUID : {0} ***********", Fact.UUID), ArchivoLog) Dim DomFiscal As String = String.Format("Domicilio Fiscal {0}{1} {2}{0}Col.{3}{0}CP. {4} {5},{6},{7}", vbCr, Fact.DomFisCalle, Fact.DomFisNoExt, Fact.DomFisCol, Fact.DomFisCP, Fact.DomFisMun, Fact.DomFisEst, Fact.DomFisPais) - If GeneraPDFNew(TmpArchivoPDF, Fact.UUID, Fact.SubTotal, Fact.Descuento, Fact.Total, Fact.TrasladoIVA.FormatoNumero(), Fact.Moneda, Fact.FormaDePago, Fact.TFDNoCertSAT, Fact.TFDFechaTimbrado.ToDate(), Fact.noCertificado, + If GeneraPDFNew(UsuarioActual, TmpArchivoPDF, Fact.UUID, Fact.SubTotal, Fact.Descuento, Fact.Total, Fact.TrasladoIVA.FormatoNumero(), Fact.Moneda, Fact.FormaDePago, Fact.TFDNoCertSAT, Fact.TFDFechaTimbrado.ToDate(), Fact.noCertificado, Fact.DTConceptos, Fact.TFDSelloCFD, Fact.TFDSelloSAT, TmpArchivoQR, Fact.Serie + Fact.Folio, Fact.TipoComprobante, "", Fact.ReceptorRFC, Fact.RecNombre, Fact.DomRecCalle, Fact.DomRecCol, Fact.DomRecFisNoExt, - Fact.DomRecFisNoInt, Fact.DomRecCP, Fact.DomRecMun, Fact.DomRecEst, Fact.Regimen, Fact.condicionesDePago, Fact.MetododePago, Fact.NumCtaPagoNumCtaPago, NowADS, Fact.DtPagos, Fact.DtDocumentosR, Fact.RetencionIVA, + Fact.DomRecFisNoInt, Fact.DomRecCP, Fact.DomRecMun, Fact.DomRecEst, Fact.Regimen, Fact.condicionesDePago, Fact.MetododePago, Fact.NumCtaPagoNumCtaPago, DateTime.Now, Fact.DtPagos, Fact.DtDocumentosR, Fact.RetencionIVA, Fact.RetencionISR, Fact.EmiNombre, Fact.EmiRFC, Fact.ReceptorNombre, DirectorioEmpresa, DomFiscal) Then Fact.ArchivoPDF = Path.GetFileName(TmpArchivoPDF) @@ -8259,7 +8120,7 @@ Namespace ADS.eFacturas End Function - Private Function GeneraPDFNew(ByVal TmpArchivoPDF As String, ByVal FolioFiscal As String, ByVal SubTotal As Decimal, ByVal Descuento As Decimal, ByVal Total As Decimal, ByVal IVA As String, ByVal Moneda As String, ByVal FormaDePago As String, + Private Function GeneraPDFNew(UsuarioActual As Usuario, ByVal TmpArchivoPDF As String, ByVal FolioFiscal As String, ByVal SubTotal As Decimal, ByVal Descuento As Decimal, ByVal Total As Decimal, ByVal IVA As String, ByVal Moneda As String, ByVal FormaDePago As String, ByVal NoSerieCertificado As String, ByVal FechaCertificacion As DateTime, ByVal NoSerieCertificadoContribuyente As String, ByVal DTConceptos As DataTable, ByVal SelloCFDi As String, ByVal SelloSAT As String, ByVal CBB As String, ByVal Folio As String, ByVal TipodeComprobante As String, ByVal CadenaOriginalCFD As String, ByVal RFC As String, ByVal Cliente As String, ByVal Direccion As String, ByVal Colonia As String, ByVal NoExt As String, ByVal NoInt As String, ByVal CP As String, ByVal Ciudad As String, ByVal Estado As String, ByVal Regimen As String, ByVal CondicionPago As String, ByVal MetodoPago As String, ByVal NumCtaPago As String, @@ -8267,7 +8128,7 @@ Namespace ADS.eFacturas Optional EmiNombre As String = "", Optional EmiRFC As String = "", Optional NombreEmpresa As String = "", Optional DirectorioEmpresa As String = "", Optional DomFiscal As String = "") As Boolean - Dim RutaRDLC As String = If(TipodeComprobante = "Pag", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIPago.rdlc", $"{DirectorioEmpresa}..\Grales\Formatos\CFDI.rdlc") + Dim RutaRDLC As String = If(TipodeComprobante = "Pag", "Grales\Formatos\CFDIPago.rdlc", "Grales\Formatos\CFDI.rdlc") Dim Retorno As Boolean = False Dim NombreArchivo As String = TmpArchivoPDF @@ -8319,47 +8180,44 @@ Namespace ADS.eFacturas parametros.Add(New ReportParameter("Empresa", NombreEmpresa)) + Dim listaDs As New List(Of ReportDataSource) - Using MR As New ReportViewer() - Dim rds1 As New ReportDataSource() - rds1.Name = "DsOC" - rds1.Value = DTConceptos + Dim rds1 As New ReportDataSource() + rds1.Name = "DsOC" + rds1.Value = DTConceptos - MR.LocalReport.DataSources.Add(rds1) + 'MR.LocalReport.DataSources.Add(rds1) + listaDs.Add(rds1) - If DtPagos IsNot Nothing Then - Dim rds2 As New ReportDataSource() - rds2.Name = "DsPago" - rds2.Value = DtPagos - MR.LocalReport.DataSources.Add(rds2) - End If - If DtRelacionados IsNot Nothing Then - Dim rds3 As New ReportDataSource() - rds3.Name = "DsDocRelacionados" - rds3.Value = DtRelacionados - MR.LocalReport.DataSources.Add(rds3) - End If + If DtPagos IsNot Nothing Then + Dim rds2 As New ReportDataSource() + rds2.Name = "DsPago" + rds2.Value = DtPagos + 'MR.LocalReport.DataSources.Add(rds2) + listaDs.Add(rds2) + End If - MR.LocalReport.ReportPath = RutaFormato - MR.ProcessingMode = ProcessingMode.Local - MR.LocalReport.EnableExternalImages = True - MR.LocalReport.SetParameters(parametros) - MR.LocalReport.Refresh() + If DtRelacionados IsNot Nothing Then + Dim rds3 As New ReportDataSource() + rds3.Name = "DsDocRelacionados" + rds3.Value = DtRelacionados + 'MR.LocalReport.DataSources.Add(rds3) + listaDs.Add(rds3) + End If - 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) + Dim bytes As Byte() = Nothing + + bytes = StreamPDF(UsuarioActual, RutaRDLC, listaDs, parametros, NombreArchivo:=NombreArchivo, Formato:="PDF") + If bytes IsNot Nothing Then Using fs As New FileStream(NombreArchivo, FileMode.Create) fs.Write(bytes, 0, bytes.Length) fs.Close() End Using - End Using - Retorno = True + Retorno = True + Else + Retorno = False + End If Else ModExtensiones.GuardaLogAD("ERROR: No existe Formato Base", ArchivoLog) End If @@ -8423,7 +8281,7 @@ Namespace ADS.eFacturas Dim Pagos As New List(Of Pago)() For Each nodePago As XmlNode In NodosNodePagos - Dim FechaPago As DateTime = NowADS() + Dim FechaPago As DateTime = DateTime.Now Try FechaPago = ValorXML(nodePago, "FechaPago").ToDate() Catch e As Exception @@ -8501,6 +8359,115 @@ Namespace ADS.eFacturas End Function + Public Function StreamPDF(UsuarioActual As Usuario, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing, Optional SubReportData As Modelos.MSubReportData = Nothing) As Byte() + 'limpio ReportViwer + Dim sw As Stopwatch = Stopwatch.StartNew() + + + Dim Bytes As Byte() = Nothing + Dim CveUsuario As Integer = 0 + Dim CveEmpresa As Integer = 0 + Dim RutaEmpresa As String = "" + If UsuarioActual IsNot Nothing Then + CveUsuario = UsuarioActual.CveUsuario + CveEmpresa = UsuarioActual.CveEmpresa + RutaEmpresa = UsuarioActual.Empresa.Ruta + End If + + Dim bdir As String = If(RutaReporte.Contains("Empresas"), ModExtensiones.DirectorioBaseEmpresas, AppDomain.CurrentDomain.BaseDirectory) + 'TOMAR LA RUTA BASE PARA EL DIRECTORIO DE LA EMPRESA + If Not String.IsNullOrEmpty(RutaEmpresa) AndAlso Not RutaReporte.Contains("Grales") AndAlso Not RutaReporte.Contains("Contabilidad/Reportes/") AndAlso Not RutaReporte.Contains("Contabilidad/Reportes/") AndAlso Not RutaReporte.Contains("AC/Reportes/") Then + bdir = RutaEmpresa.Replace($"{CveEmpresa}/", "") + End If + RutaReporte.Replace("/", "\") + If Not RutaReporte.ToUpper().StartsWith(bdir.ToUpper()) Then + RutaReporte = String.Format("{0}{1}", bdir, RutaReporte) + End If + If EsProduccion Then + Dim wsreport As New WSRDLC2.WebServiceSoapClient + Dim params As New List(Of WSRDLC2.ReportParameter) + Dim reportobjects As New List(Of WSRDLC2.ReportObjects) + Dim jsonData As String = Nothing + If SubReportData IsNot Nothing Then + jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(SubReportData) + End If + Dim ds As New DataSet + For Each rpds As ReportDataSource In DataSource + If rpds.Value IsNot Nothing Then + If rpds.Value.GetType().ToString() = "System.Data.DataTable" Then + Dim dt As DataTable = DirectCast(rpds.Value, Data.DataTable) + dt = dt.Copy() + dt.TableName = rpds.Name + ds.Tables.Add(dt) + Else + Dim ojext As New WSRDLC2.ReportObjects + ojext.Name = rpds.Name + ojext.Value = rpds.Value + reportobjects.Add(ojext) + End If + Else + Dim dt As DataTable = New DataTable() + dt.TableName = If(String.IsNullOrEmpty(rpds.Name), "DataTable1", rpds.Name) + ds.Tables.Add(dt) + End If + Next + For Each rpds As ReportParameter In Parametros + Dim param As New WSRDLC2.ReportParameter + param.Name = rpds.Name + 'SI ES TEXTO, QUITAR TABS Y OTROS ESPACIOS QUE DEN PROBLEMAS AL MANDAR LA PETICION + If rpds IsNot Nothing AndAlso rpds.Values IsNot Nothing AndAlso rpds.Values.Count > 0 AndAlso rpds.Values(0) IsNot Nothing AndAlso rpds.Values(0).GetType() = GetType(String) Then + param.Values = {rpds.Values(0).Replace(vbVerticalTab, "")} + Else + param.Values = {rpds.Values(0)} + End If + params.Add(param) + Next + Bytes = wsreport.StreamNEWPDFBytes(RutaReporte, ds, reportobjects.ToArray(), params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario, jsonData) + wsreport = Nothing + params = Nothing + ds.Dispose() : ds = Nothing + Else + If IsNothing(MR) Then MR = New ReportViewer + Try + ' MasterReporteador.LocalReport.DataSources.Clear() + For Each RDS As ReportDataSource In DataSource + MR.LocalReport.DataSources.Add(RDS) + Next + 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 + Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) + Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + Catch ex As Exception + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + End Try + Try + MR.Dispose() + Catch ex As Exception + GuardaLog($"Error: { ex.ToString() }") + End Try + MR = Nothing + + End If + sw.Stop() + If sw.Elapsed.TotalSeconds > 5 Then + GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") + End If + Return Bytes + End Function + End Class @@ -8975,10 +8942,10 @@ Namespace ADS.eFacturas End If End Function - Public Sub ImprimirPDF(NombreArchivo As String, DirectorioEmpresa As String, TipodeComprobante As String) + Public Sub ImprimirPDF(UsuarioActual As Usuario, NombreArchivo As String, DirectorioEmpresa As String, TipodeComprobante As String) Dim objxml As XmlSatCFDI = Me - Dim rutaReporte As String = If(TipodeComprobante = "Pag", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIV3Pago.rdlc", $"{DirectorioEmpresa}..\Grales\Formatos\CFDIV3.rdlc") + Dim rutaReporte As String = If(TipodeComprobante = "Pag", "Grales\Formatos\CFDIV3Pago.rdlc", "Grales\Formatos\CFDIV3.rdlc") Dim cQr As Byte() = Nothing @@ -9043,7 +9010,8 @@ Namespace ADS.eFacturas parametros.Add(New ReportParameter("CPCtaBeneficiario", objxml.complemento.Pagos.CtaBeneficiario)) End If - Using MR As New ReportViewer() + Try + Dim listaDS As New List(Of ReportDataSource) Dim rdsTotales As New ReportDataSource() Dim ltotales As New List(Of utilValores)() ltotales.Add(New utilValores("Subtotal", objxml.comprobante.SubTotal.ToString("N2"))) @@ -9062,51 +9030,49 @@ Namespace ADS.eFacturas ltotales.Add(New utilValores("Total", objxml.comprobante.Total.ToString("N2"))) rdsTotales.Name = "dsTotales" rdsTotales.Value = ltotales - MR.LocalReport.DataSources.Add(rdsTotales) + listaDS.Add(rdsTotales) Dim rds2 As New ReportDataSource() Dim limagenes As New List(Of utilImage)() limagenes.Add(New utilImage(cQr)) rds2.Name = "dsImagenes" rds2.Value = limagenes - MR.LocalReport.DataSources.Add(rds2) + listaDS.Add(rds2) Dim rdsrelacionados As New ReportDataSource() rdsrelacionados.Name = "dsRelacionados" rdsrelacionados.Value = objxml.cFDIRelacionados - MR.LocalReport.DataSources.Add(rdsrelacionados) + listaDS.Add(rdsrelacionados) Dim rds1 As New ReportDataSource() rds1.Name = "dsConceptos" rds1.Value = objxml.GetConceptosforpdf() - MR.LocalReport.DataSources.Add(rds1) + listaDS.Add(rds1) If objxml.complemento.Pagos IsNot Nothing Then Dim rdsp As New ReportDataSource() rdsp.Name = "dsPagos" rdsp.Value = objxml.complemento.Pagos.doctosRelacionados - MR.LocalReport.DataSources.Add(rdsp) + listaDS.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) Dim bytes As Byte() = Nothing - bytes = MR.LocalReport.Render("PDF", Nothing, mimeType, encoding, extension, streamids, warnings) + bytes = StreamPDF(UsuarioActual, rutaReporte, listaDs, parametros, NombreArchivo:=NombreArchivo, Formato:="PDF") + + If bytes IsNot Nothing Then + Using fs As New FileStream(NombreArchivo, FileMode.Create) + fs.Write(bytes, 0, bytes.Length) + fs.Close() + End Using + End If + + Catch ex As Exception + ex.ToString().GuardaLogAD() + End Try - Using fs As New FileStream(NombreArchivo, FileMode.Create) - fs.Write(bytes, 0, bytes.Length) - fs.Close() - End Using - End Using End Sub Public Class utilValores @@ -9124,6 +9090,117 @@ Namespace ADS.eFacturas End Sub Public Property ImagenByte As Byte() End Class + + Public Function StreamPDF(UsuarioActual As Usuario, RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing, Optional SubReportData As Modelos.MSubReportData = Nothing) As Byte() + 'limpio ReportViwer + Dim sw As Stopwatch = Stopwatch.StartNew() + + + Dim Bytes As Byte() = Nothing + Dim CveUsuario As Integer = 0 + Dim CveEmpresa As Integer = 0 + Dim RutaEmpresa As String = "" + If UsuarioActual IsNot Nothing Then + CveUsuario = UsuarioActual.CveUsuario + CveEmpresa = UsuarioActual.CveEmpresa + RutaEmpresa = UsuarioActual.Empresa.Ruta + End If + + Dim bdir As String = If(RutaReporte.Contains("Empresas"), ModExtensiones.DirectorioBaseEmpresas, AppDomain.CurrentDomain.BaseDirectory) + 'TOMAR LA RUTA BASE PARA EL DIRECTORIO DE LA EMPRESA + If Not String.IsNullOrEmpty(RutaEmpresa) AndAlso Not RutaReporte.Contains("Grales") AndAlso Not RutaReporte.Contains("Contabilidad/Reportes/") AndAlso Not RutaReporte.Contains("Contabilidad/Reportes/") AndAlso Not RutaReporte.Contains("AC/Reportes/") Then + bdir = RutaEmpresa.Replace($"{CveEmpresa}/", "") + End If + RutaReporte.Replace("/", "\") + If Not RutaReporte.ToUpper().StartsWith(bdir.ToUpper()) Then + RutaReporte = String.Format("{0}{1}", bdir, RutaReporte) + End If + If EsProduccion Then + Dim wsreport As New WSRDLC2.WebServiceSoapClient + Dim params As New List(Of WSRDLC2.ReportParameter) + Dim reportobjects As New List(Of WSRDLC2.ReportObjects) + Dim jsonData As String = Nothing + If SubReportData IsNot Nothing Then + jsonData = Newtonsoft.Json.JsonConvert.SerializeObject(SubReportData) + End If + Dim ds As New DataSet + For Each rpds As ReportDataSource In DataSource + If rpds.Value IsNot Nothing Then + If rpds.Value.GetType().ToString() = "System.Data.DataTable" Then + Dim dt As DataTable = DirectCast(rpds.Value, Data.DataTable) + dt = dt.Copy() + dt.TableName = rpds.Name + ds.Tables.Add(dt) + Else + Dim ojext As New WSRDLC2.ReportObjects + ojext.Name = rpds.Name + ojext.Value = rpds.Value + reportobjects.Add(ojext) + End If + Else + Dim dt As DataTable = New DataTable() + dt.TableName = If(String.IsNullOrEmpty(rpds.Name), "DataTable1", rpds.Name) + ds.Tables.Add(dt) + End If + Next + For Each rpds As ReportParameter In Parametros + Dim param As New WSRDLC2.ReportParameter + param.Name = rpds.Name + 'SI ES TEXTO, QUITAR TABS Y OTROS ESPACIOS QUE DEN PROBLEMAS AL MANDAR LA PETICION + If rpds IsNot Nothing AndAlso rpds.Values IsNot Nothing AndAlso rpds.Values.Count > 0 AndAlso rpds.Values(0) IsNot Nothing AndAlso rpds.Values(0).GetType() = GetType(String) Then + param.Values = {rpds.Values(0).Replace(vbVerticalTab, "")} + Else + param.Values = {rpds.Values(0)} + End If + params.Add(param) + Next + Bytes = wsreport.StreamNEWPDFBytes(RutaReporte, ds, reportobjects.ToArray(), params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario, jsonData) + wsreport = Nothing + params = Nothing + ds.Dispose() : ds = Nothing + Else + If IsNothing(MR) Then MR = New ReportViewer + Try + ' MasterReporteador.LocalReport.DataSources.Clear() + For Each RDS As ReportDataSource In DataSource + MR.LocalReport.DataSources.Add(RDS) + Next + 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 + Bytes = MR.LocalReport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds, Warnings) + Catch ex As Microsoft.Reporting.WebForms.ScriptManagerNotFoundException + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error: {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + Catch ex As Exception + GuardaLog($"Error: { If(ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, ex.Message) } | Descripcion: {If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException IsNot Nothing AndAlso ex.InnerException.InnerException.Message IsNot Nothing, ex.InnerException.InnerException.Message, If(ex.InnerException IsNot Nothing AndAlso ex.InnerException.Message IsNot Nothing, ex.InnerException.Message, "Sin descripcion"))} - Ruta {RutaReporte}") + 'HAY QUE VALIDAR QUE LOS OBJETOS QUE SE USAN PARA GUARDAR LOG EXISTEN!!! IPP 14 AGOSTO 2017 + 'GuardaLog($"Error {ex.InnerException.Message} | Descripcion: {If(ex.InnerException.InnerException IsNot Nothing, ex.InnerException.InnerException.Message, "Sin descripcion")} - Ruta {RutaReporte}") + End Try + + Try + MR.Dispose() + Catch ex As Exception + GuardaLog($"Error: { ex.ToString() }") + End Try + + MR = Nothing + + End If + sw.Stop() + If sw.Elapsed.TotalSeconds > 5 Then + GuardaLog($"Reporte:{RutaReporte} | Tiempo Renderizado Milisegundos: {sw.ElapsedMilliseconds},Total Segundos: {sw.Elapsed.TotalSeconds} ") + End If + Return Bytes + End Function End Class Public Module InlineAssignHelper diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 05ce189f9..26a8e02ba 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -7572,7 +7572,7 @@ Partial Class Ventas UpFacturasRelacionadas.Update() End Sub Protected Sub CreaTmpFacturasRelacionadas() - If CveVenta <= 0 OrElse EsCreaApartirDe Then + If CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual Then Me.TmpDTFacturasRelacionadas = New DataTable() Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("CveVenta", GetType(Integer))) Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("SerieFolio", GetType(String))) @@ -7580,7 +7580,7 @@ Partial Class Ventas End If End Sub Protected Sub LnkAgregarFacturaRelacionada_Click(sender As Object, e As EventArgs) - If CveVenta <= 0 OrElse EsCreaApartirDe Then + If CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual Then If Me.TmpDTFacturasRelacionadas Is Nothing Then CreaTmpFacturasRelacionadas() End If @@ -7611,7 +7611,7 @@ Partial Class Ventas End Sub Protected Sub LnkAgregarFolioFiscalRelacionada_Click(sender As Object, e As EventArgs) - If CveVenta <= 0 OrElse EsCreaApartirDe Then + If CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual Then If Me.TmpDTFacturasRelacionadas Is Nothing Then CreaTmpFacturasRelacionadas() End If @@ -7641,7 +7641,7 @@ Partial Class Ventas End Sub Protected Sub BtnAgregarFacturasRelaciondas_Click(sender As Object, e As EventArgs) - If CveVenta <= 0 OrElse EsCreaApartirDe Then + If CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual Then If Me.TmpDTFacturasRelacionadas Is Nothing OrElse Me.TmpDTFacturasRelacionadas.Rows.Count = 0 Then Me.AplicaRelacionManual = False Alert("No hay facturas para relacionar", TipoMensaje.MsgAdvertencia) @@ -7655,7 +7655,7 @@ Partial Class Ventas End If Me.AplicaRelacionManual = True - RegistraScript("$('#DivFacturasRelaciondas').modal('hide');", "R1") + RegistraScript("$('#DivFacturasRelacionadas').modal('hide');", "R1") Alert("Las facturas seleccionadas se relacionaran con la factura nueva") End If @@ -7723,7 +7723,7 @@ Partial Class Ventas ' RBLPago.SelectedValue = "2" 'End If - If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso Me.PermiteCredito Then + If Me.PermiteCredito Then If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then Dim CreditoDispo As Decimal = CargaCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) If CreditoDispo > 0 Then @@ -13425,6 +13425,14 @@ Partial Class Ventas End If Obj.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() If HdnFolioFiscalNC.Value <> "0" And HdnFolioFiscalNC.Value <> "" Then Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) + + 'SI LA NOTA DE CREDITO ES POR AMORTIZACION DE ANTICIPO , TAMBIEN DEBE TENER EL TIPO RELACION 07 + If DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 2 AndAlso DdlTipoRelacionAnticipo.SelectedValue.ToEntero() = 7 Then + Obj.CveTipoRelacion = 7 + Timbre.CFDIRelacionados.TipoRelacion = "07" + Timbre.CFDIRelacionados.TipoRelacionTexto = "CFDI por aplicación de anticipo" + End If + End If ' cuando es refacturacoin es cfdirelacionado, con relacion 04 If Timbre.Comprobante.TipoComprobante = "I" AndAlso NuevaFactura = 1 Then @@ -13501,25 +13509,6 @@ Partial Class Ventas Timbre.CFDIRelacionados.TipoRelacionTexto = "" End If - 'SI LAS FACTURAS SE RELACIONARAN MANUALMENTE SE AGREGAN - If Me.AplicaRelacionManual AndAlso DdlTipoRelacionARelacionar.SelectedValue.ToEntero() > 0 Then - - Dim CveTipoRelacion As Integer = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() - - Obj.CveTipoRelacion = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() - - Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {CveTipoRelacion}") - - Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString() - Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString() - - For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows - If GvRow.RowType = DataControlRowType.DataRow Then - Timbre.CFDIRelacionados.UUID.Add(GvRow.DataKey("FolioFiscal").Replace("test", "")) - End If - Next - End If - 'DEVOLUCIONES DE OTRA VENTA, APLICADAS EN UNA NUEVA If UsuarioActual.CveEmpresa.Contiene(1, 189) AndAlso Obj.TipoDocto = "Ing" AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then If ListaDevolucionesAplicadas IsNot Nothing AndAlso ListaDevolucionesAplicadas.Count > 0 Then @@ -13540,6 +13529,27 @@ Partial Class Ventas End If End If + 'SI LAS FACTURAS SE RELACIONARAN MANUALMENTE SE AGREGAN + If Me.AplicaRelacionManual AndAlso DdlTipoRelacionARelacionar.SelectedValue.ToEntero() > 0 Then + + Dim CveTipoRelacion As Integer = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() + + Obj.CveTipoRelacion = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() + + Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {CveTipoRelacion}") + + Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString() + Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString() + + Timbre.CFDIRelacionados.UUID.Clear() + + For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows + If GvRow.RowType = DataControlRowType.DataRow Then + Timbre.CFDIRelacionados.UUID.Add(GvRow.DataKey("FolioFiscal").Replace("test", "")) + End If + Next + End If + Dim totSubTotal As Decimal = Obj.SubTotal Dim totIVA As Decimal = Obj.IVA Dim totRetIVA As Decimal = Obj.RetIVA @@ -30215,6 +30225,13 @@ Partial Class Ventas CveVentaUsadoDevolucionEfectivo = DdlVentaUsado.SelectedValue.ToEntero() End If + 'SI SE VA APLICAR A LA FACTURA ACTUAL, NO UTILIZAR LOS DATOS DE AMORTIZACION + Me.TmpDTAnticiposNCIxCCliente = Nothing + GVAnticipos.DataSource = Me.TmpDTAnticiposNCIxCCliente + GVAnticipos.DataBind() + DdlTipoAmortizacionAnticipo.SelectedValueExist("-1") + DdlTipoRelacionAnticipo.SelectedValueExist("-1") + AplicarNC(DdlNCPS.SelectedValue.ToEntero(), EsNCAmortizacion:=ChkAplicaNCAnticipo.Checked, AplicaImpuestosLocales:=AplicaImpuestosLocales, AplicaNuevoDocumento:=AplicaNuevoDocumento, AplicoNCFacturaActual:=True) End Sub @@ -39420,6 +39437,19 @@ Partial Class Ventas Protected Sub LnkFacturasRelacionadas_Click(sender As Object, e As EventArgs) CargaFacturasARelacionar() + If Me.AplicoNCFacturaActual Then + + DivDdlFacturaRela.Visible = True + BtnAgregarFacturasRelaciondas.Visible = True + DdlTipoRelacionARelacionar.Enabled = True + DdlFacturaARelacionar.Enabled = True + + Me.TmpDTFacturasRelacionadas = Nothing + + GvFacturasRelacionadas.Columns(2).Visible = True + GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas + GvFacturasRelacionadas.DataBind() + End If RegistraScript("$('#DivFacturasRelacionadas').modal('show')") UpFacturasRelacionadas.Update() End Sub