diff --git a/Acarreos/CatChoferes.aspx b/Acarreos/CatChoferes.aspx index 6ccdc6e7c..df81b5c84 100644 --- a/Acarreos/CatChoferes.aspx +++ b/Acarreos/CatChoferes.aspx @@ -3,14 +3,7 @@ - - + Catálogo de Choferes @@ -212,12 +205,11 @@ <%----%> - Seleccione una + - MEX USA CAN - diff --git a/Acumuladores/CatFoliosGarantia.aspx b/Acumuladores/CatFoliosGarantia.aspx index 8974fb697..f707c911f 100644 --- a/Acumuladores/CatFoliosGarantia.aspx +++ b/Acumuladores/CatFoliosGarantia.aspx @@ -60,7 +60,6 @@
  • -
    @@ -71,12 +70,12 @@
    -
    +
    -
    +
    <%-- --%> @@ -108,12 +107,12 @@ -
    +
    -
    +
    " style="display: inline-block; margin-right: -20px; width: 150px;" /> " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info">
    diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index fe7480f7c..605070a2a 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -1285,7 +1285,7 @@ Public Class ClsInventarios Optional CveSeccionAlmacen As Integer = -1, Optional Serie As String = "", Optional Lote As String = "", Optional FechaCaducidad As Date = MinFecha, Optional Observaciones As String = "", Optional CveMovimientoDetalleEntrada As Integer = -1, Optional PUTC As Decimal = -1, Optional CostoIndirecto As Decimal = 0, Optional CveCompraDetalle As Integer = -1, Optional CveOrdenCompraDetalle As Integer = -1, Optional CveVentaDetalle As Integer = -1, - Optional CveContratoDetalle As Integer = -1, Optional CveUsuarioModifico As Integer = -1, Optional EsInterno As Integer = -1, Optional CveVentaDetallePadre As Integer = -1) As Boolean + Optional CveContratoDetalle As Integer = -1, Optional CveUsuarioModifico As Integer = -1, Optional EsInterno As Integer = -1, Optional CveVentaDetalleRemision As Integer = -1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Inv_MovimientosDetalleAdd") @@ -1311,7 +1311,7 @@ Public Class ClsInventarios .Add("@CveContratoDetalle", SqlDbType.Int).Value = CveContratoDetalle .Add("@CveUsuarioModifico", SqlDbType.Int).Value = CveUsuarioModifico .Add("@EsInterno", SqlDbType.Int).Value = EsInterno - .Add("@CveVentaDetallePadre", SqlDbType.Int).Value = CveVentaDetallePadre + .Add("@CveVentaDetalleRemision", SqlDbType.Int).Value = CveVentaDetalleRemision .Add("@CveMovimientoDetalle", SqlDbType.Int).Direction = ParameterDirection.Output End With diff --git a/App_Code/ClsMovimientos.vb b/App_Code/ClsMovimientos.vb index 680fbc2ae..c0ab586d4 100644 --- a/App_Code/ClsMovimientos.vb +++ b/App_Code/ClsMovimientos.vb @@ -376,6 +376,67 @@ Public Class ClsMovimientos OnError("Ocurrió un error al obtener el Reporte de CxC Detalle.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) End Try + Return Retorno + End Function + + Public Function AddNotificacionEdoCuentaCliente(CveCliente As Integer, Fecha As DateTime) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Sis_NotificacionesEdoCuentaClienteAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveCliente", SqlDbType.Int).Value = CveCliente + .Add("@Fecha", SqlDbType.DateTime).Value = Fecha + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As SqlException + OnError("Ocurrió un error al agregar notificaciones del estado de cuenta del Cliente.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function GetNotificacionEdoCuentaCliente(CveEmpresa As Integer, CveCliente As Integer, Fecha As DateTime) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Sis_NotificacionesEdoCuentaClienteGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveCliente", SqlDbType.Int).Value = CveCliente + .Add("@Fecha", SqlDbType.DateTime).Value = Fecha + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As SqlException + OnError("Ocurrió un error al obtener notificaciones del estado de cuenta del Cliente.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateNotificacionEdoCuentaCliente(CveNotificacionBitacora As Integer, Notifico As Boolean) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Sis_NotificacionesEdoCuentaClienteUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveNotificacionBitacora", SqlDbType.Int).Value = CveNotificacionBitacora + .Add("@Notifico", SqlDbType.Bit).Value = Notifico + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As SqlException + OnError("Ocurrió un error al actualizar notificaciones del estado de cuenta del Cliente.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return Retorno End Function diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 28c446361..a23c7af68 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -3989,12 +3989,17 @@ Namespace Modelos 'COMIENZA: VENTADETALLE 'CUANDO SEA SALIDA VA POR LA VENTA DETALLE DE LA FACTURA DE LA REMISION - OJO!! SOLO FUNCIONA HASTA ORITA QUE SE HACE SALIDA SOLO CUANDO SE FACTURA LA REMISION Dim CveVentaDetalle = If(ConceptoEntrada.Contiene(3, 40), DtDetalle.FiltroPrimeroValor("CveVentaDetalle", $"Consec={Consec}").ToEntero, MovDet("CveVentaDetalle").ToString.ToEntero) + + Dim CveVentaDetalleRemision As Integer = -1 + If ConceptoEntrada = 40 AndAlso MovDet("CveVentaDetalle").ToString().ToEntero() > 0 Then + CveVentaDetalleRemision = MovDet("CveVentaDetalle").ToString().ToEntero() + End If + 'CUANDO LA VENTADETALLE NO TENGA VALOR DEBE MARCAR ERROR, NUEVA RESTRICCION DE ALMACEN If CveVentaDetalle < 0 Then OcurrioError = True Exit For End If - 'TERMINA: VENTADETALLE If Cantidad < 0 Then ErrorList.Add("Ocurrió un Error al generar los movimientos de almacén. Por favor comuniquese con atención SIG.") @@ -4002,7 +4007,7 @@ Namespace Modelos Exit For End If - If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, Serie:=Serie, CveVentaDetalle:=CveVentaDetalle) Then + If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, Serie:=Serie, CveVentaDetalle:=CveVentaDetalle, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then ContadorMovtosDetalles += 1 Else OcurrioError = True @@ -5128,7 +5133,12 @@ Namespace Modelos End If End If - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad) Then + Dim CveVentaDetalleRemision As Integer = -1 + If CveConceptoMovimiento = 41 Then + CveVentaDetalleRemision = Dr("CveVentaDetalleRemision").ToString.ToEntero() + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then ErrorCancelar = True MensajeError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar." Exit For @@ -7191,25 +7201,34 @@ Namespace Modelos HttpContext.Current.Application("GlobalDTEmpresas") = value End Set End Property - Property GlobalDTClasificaciones(Optional CveEmpresa As Integer = -1, Optional CveCategoria As Integer = -1, Optional UsoClasificacion As Integer = -1) As DataTable + Property GlobalDTClasificaciones(Optional CveEmpresa As Integer = -1, Optional CveCategoria As Integer = -1, Optional UsoClasificacion As Integer = -1, Optional CveClasificacion As Integer = -1) As DataTable Get + Dim AppNombre As String = String.Format("GlobalDTClasificaciones-{0}", CveEmpresa) + 'sino existe, recarga los datos + If HttpContext.Current.Application(AppNombre) Is Nothing Then + Dim ObjClasificaciones As New ClsClasificaciones + If ObjClasificaciones.GetClasificaciones(CveEmpresa) Then HttpContext.Current.Application(AppNombre) = ObjClasificaciones.DtResultados + ObjClasificaciones.Dispose() + End If If CveEmpresa <> -1 Then Dim Str As New StringBuilder Str.AppendFormat("CveEmpresa = {0}", CveEmpresa) If CveCategoria <> -1 Then Str.AppendFormat(" AND CveCategoria = {0}", CveCategoria) If UsoClasificacion <> -1 Then Str.AppendFormat(" AND UsoClasificacion IN ({0},3) ", UsoClasificacion) - Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTClasificaciones"), DataTable), Str.ToString(), "", DataViewRowState.CurrentRows) + If CveClasificacion <> -1 Then Str.AppendFormat(" AND CveClasificacion = {0}", CveClasificacion) + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), Str.ToString(), "", DataViewRowState.CurrentRows) GlobalDTClasificaciones = Dv.ToTable Dv.Dispose() Else - GlobalDTClasificaciones = DirectCast(HttpContext.Current.Application("GlobalDTClasificaciones"), DataTable) + GlobalDTClasificaciones = DirectCast(HttpContext.Current.Application(AppNombre), DataTable) End If End Get Set(value As DataTable) - HttpContext.Current.Application("GlobalDTClasificaciones") = value + Dim AppNombre As String = String.Format("GlobalDTClasificaciones-{0}", CveEmpresa) + HttpContext.Current.Application(AppNombre) = value End Set End Property Property GlobalDTClasificaciones2(Optional CveEmpresa As Integer = -1, Optional CveCategoria As Integer = -1) As DataTable diff --git a/Ashx/TareasProgramadas.ashx b/Ashx/TareasProgramadas.ashx index 8171b5431..7ab7d8c50 100644 --- a/Ashx/TareasProgramadas.ashx +++ b/Ashx/TareasProgramadas.ashx @@ -8,9 +8,59 @@ Imports Newtonsoft.Json.Linq Imports Extensiones Imports System.IO Imports CrystalDecisions.CrystalReports.Engine -Imports CrystalDecisions.Shared +Imports CrystalDecisions.Shared +Imports Microsoft.Reporting.WebForms -Public Class TareasProgramadas : Implements IHttpHandler +Public Class TareasProgramadas : Implements IHttpHandler + + + Private ReadOnly Property GlobalDTUsuariosE140(Optional CveUsuario As Integer = -1, Optional CveCliente As Integer = -1, Optional CveProveedor As Integer = -1) As DataTable + Get + Dim CveEmpresa As Integer = 140 + Dim Str As New StringBuilder + If CveUsuario <> -1 Then Str.AppendFormat("CveUsuario = {0}", CveUsuario) + If CveEmpresa <> -1 Then Str.AppendFormat(" {0} CveEmpresa = {1}", If(Str.Length > 0, "AND", ""), CveEmpresa) + If CveCliente <> -1 Then Str.AppendFormat(" {0} CveCliente = {1}", If(Str.Length > 0, "AND", ""), CveCliente) + If CveProveedor <> -1 Then Str.AppendFormat(" {0} CveProveedor = {1}", If(Str.Length > 0, "AND", ""), CveProveedor) + + If CveUsuario <> -1 OrElse CveEmpresa <> -1 Then + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) + GlobalDTUsuariosE140 = Dv.ToTable + Dv.Dispose() + Else + GlobalDTUsuariosE140 = DirectCast(HttpContext.Current.Application("GlobalDTUsuarios"), DataTable) + End If + End Get + End Property + + Public Shared ReadOnly Property GlobalDTSubProyectosE140(CveProyecto As Integer, Optional CveSubProyecto As Integer = -1, Optional Estatus As Integer = 1) As DataTable + Get + Dim CveEmpresa As Integer = 140 + Dim AppNombre As String = String.Format("GlobalDTSubProyectos-{0}", CveEmpresa) + 'sino existe, recarga los datos + If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Or (DirectCast(HttpContext.Current.Application(AppNombre), DataTable) IsNot Nothing AndAlso DirectCast(HttpContext.Current.Application(AppNombre), DataTable).Rows.Count = 0) Then + Dim P As New ClsSubProyectos + If P.GetSubProyectos(CveEmpresa:=CveEmpresa) Then HttpContext.Current.Application(AppNombre) = P.DtResultados + P.Dispose() + End If + + If CveProyecto <> -1 OrElse CveSubProyecto <> -1 OrElse CveEmpresa <> -1 OrElse Estatus <> -1 Then + Dim StrSQL As New StringBuilder + If CveProyecto <> -1 Then StrSQL.AppendFormat(" AND CveProyecto = {0}", CveProyecto) + If CveSubProyecto <> -1 Then StrSQL.AppendFormat(" AND CveSubProyecto = {0}", CveSubProyecto) + If Estatus <> -1 Then StrSQL.AppendFormat(" AND CveEstatus = {0}", Estatus) + If CveEmpresa <> -1 Then StrSQL.AppendFormat(" AND CveEmpresa = {0}", CveEmpresa) + + Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), StrSQL.ToString.Trim.TrimStart("A"c, "N"c, "D"c), "", DataViewRowState.CurrentRows) + GlobalDTSubProyectosE140 = Dv.ToTable + Dv.Dispose() + + Else + GlobalDTSubProyectosE140 = DirectCast(HttpContext.Current.Application(AppNombre), DataTable) + End If + + End Get + End Property Private currentcontext As HttpContext Private URLParametros As New Hashtable @@ -20,6 +70,8 @@ Public Class TareasProgramadas : Implements IHttpHandler Dim retorno As String = "no se encontro la variable" Try Dim metodo As String = "" + Dim FechaActual As DateTime = Now + Dim FechaEnvio As DateTime = FechaActual If context.Request("var") IsNot Nothing Then URLParametros = Parametros(context.Request("var")) @@ -36,6 +88,9 @@ Public Class TareasProgramadas : Implements IHttpHandler End Using ElseIf context.Request("metodo") IsNot Nothing Then metodo = context.Request("metodo").ToString() + If context.Request("FechaEnvio") IsNot Nothing Then + FechaEnvio = context.Request("FechaEnvio").ToString().ToDateTime() + End If End If Select Case metodo @@ -46,7 +101,10 @@ Public Class TareasProgramadas : Implements IHttpHandler context.Response.Write(retorno) Case "EstadosCuenta" 'CargaEstadosCuenta(context, 119, 227774) - CargaEstadosCuenta(context, 119, -1) + CargaEstadosCuenta(context, 119, -1, FechaEnvio, FechaActual) + + Case "ScoreCard" + CargaScoreCard(context, 140, FechaEnvio) End Select Catch ex As Exception ex.GuardaLog(ex.ToString()) @@ -270,7 +328,7 @@ Public Class TareasProgramadas : Implements IHttpHandler #Region "E S T A D O S D E C U E N T A" - Private Sub CargaEstadosCuenta(ByVal context As HttpContext, pCveEmpresa As Integer, pCveCliente As Integer) + Private Sub CargaEstadosCuenta(ByVal context As HttpContext, pCveEmpresa As Integer, pCveCliente As Integer, FechaEnvio As DateTime, FechaActual As DateTime) Dim Retorno As New JArray() Dim DtEmpresas As DataTable = Nothing Using ObjEmpresas As New ClsSisEmpresas() @@ -282,7 +340,7 @@ Public Class TareasProgramadas : Implements IHttpHandler If DtEmpresas IsNot Nothing Then For Each Row As DataRow In DtEmpresas.Rows Dim Usuario = ValidaUsuarioSistema(Row("CveEmpresa").ToString().ToEntero()) - Dim obj = EjecutarEnvioEstadoCuenta(Usuario, pCveCliente:=pCveCliente) + Dim obj = EjecutarEnvioEstadoCuenta(Usuario, FechaEnvio, FechaActual, pCveCliente:=pCveCliente) Retorno.Add(obj) Next @@ -331,7 +389,7 @@ Public Class TareasProgramadas : Implements IHttpHandler End Sub - Private Function EjecutarEnvioEstadoCuenta(UsuarioActual As Usuario, Optional pCveCliente As Integer = -1) As JObject + Private Function EjecutarEnvioEstadoCuenta(UsuarioActual As Usuario, FechaEnvio As DateTime, FechaActual As DateTime, Optional pCveCliente As Integer = -1) As JObject Dim ClientesSinEnviar As New JArray() Dim ClientesEdoEnviado As New JArray() @@ -341,78 +399,133 @@ Public Class TareasProgramadas : Implements IHttpHandler New JProperty("Fecha", DateTime.Now.ToString("dd/MM/yyy HH:mm:ss")) ) Dim DTClientes As DataTable = Nothing + Dim EnviarPendientes As Boolean = False - 'Using ObjCliente As New ClsClientes - ' If ObjCliente.GetClientes(pCveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, TipoCliente:=-1, Estatus:=1) Then - ' If ObjCliente.DtResultados.Rows.Count > 0 Then - ' DTClientes = ObjCliente.DtResultados.Copy() - ' End If - ' End If - 'End Using + If FechaActual <> FechaEnvio Then + EnviarPendientes = True + End If - Using ObjMov As New ClsMovimientos - Dim FechaI As String = "-1" - Dim FechaF As String = "-1" - Dim FechaVI As String = "-1" - Dim FechaVF As String = "-1" - Dim TCEspecifico = -1 + If Not EnviarPendientes Then + Using ObjMov As New ClsMovimientos + Dim FechaI As String = "-1" + Dim FechaF As String = "-1" + Dim FechaVI As String = "-1" + Dim FechaVF As String = "-1" + Dim TCEspecifico = -1 - Dim CveCobranzaEstatus As Integer = -1 - Dim CveClienteClasificacion As Integer = -1 - Dim CveCliente As Integer = -1 - Dim AplicaAnticipos As Integer = 0 + Dim CveCobranzaEstatus As Integer = -1 + Dim CveClienteClasificacion As Integer = -1 + Dim CveCliente As Integer = -1 + Dim AplicaAnticipos As Integer = 0 - Dim CveSubProyecto As Integer = -1 - Dim CveVendedor As Integer = -1 - Dim Grupo As Integer = 5 - Dim TipoCambio As Integer = 1 - Dim TipoDocto As String = "-1" - Dim FechaCorte As DateTime = New DateTime(Now.Year, 12, 31) + Dim CveSubProyecto As Integer = -1 + Dim CveVendedor As Integer = -1 + Dim Grupo As Integer = 5 + Dim TipoCambio As Integer = 1 + Dim TipoDocto As String = "-1" + Dim FechaCorte As DateTime = New DateTime(Now.Year, 12, 31) - If ObjMov.GetCxC(FechaI, FechaF, CveCliente, CveSubProyecto, CveVendedor, -1, -1, "-1", UsuarioActual.CveEmpresa, Grupo, -1, TipoCambio, TCEspecifico, TipoDocto, FechaVI, FechaVF, FechaCorte:=FechaCorte, - EstatusCliente:=1, CveUsuarioConsulta:=UsuarioActual.CveUsuario, CveCobranzaEstatus:=CveCobranzaEstatus, CveClienteClasificacion:=-1, TipoCliente:=-1, AplicaAnticiposPagados:=AplicaAnticipos) Then - DTClientes = ObjMov.DtResultados.FiltraParametros("CveCliente > 0", DistinctColumns:={"CveCliente"}) - End If + If ObjMov.GetCxC(FechaI, FechaF, CveCliente, CveSubProyecto, CveVendedor, -1, -1, "-1", UsuarioActual.CveEmpresa, Grupo, -1, TipoCambio, TCEspecifico, TipoDocto, FechaVI, FechaVF, FechaCorte:=FechaCorte, + EstatusCliente:=1, CveUsuarioConsulta:=UsuarioActual.CveUsuario, CveCobranzaEstatus:=CveCobranzaEstatus, CveClienteClasificacion:=-1, TipoCliente:=-1, AplicaAnticiposPagados:=AplicaAnticipos) Then + DTClientes = ObjMov.DtResultados.FiltraParametros("CveCliente > 0", DistinctColumns:={"CveCliente"}) + End If - End Using + End Using + End If - If DTClientes IsNot Nothing Then + + If DTClientes IsNot Nothing OrElse EnviarPendientes Then 'DTClientes = DTClientes.FiltraParametros("CveCliente IN (227289,227429,227733,227838,228181,228544,229176,229481,230029,230432,230860,230911,230918,231197,231576,232173,232185,233055,233295,233357,233588,236379,236460,237161,237635,238285,238530,238622,238724,239033,239099,239865,239895,239903,240202,240235,240236,240238,240303,240340,262404,262517,264765,264806,264825,264848,264930,265063,265180,265213,265214,265236,265344,265492,265555,265669,265797,265952,265963,266156,266182,268346,268396,268488,268535,268539,268558,268562,268706,268726,268787,268868,268889,268910,268925,269023,269081,269089,272066,272070,272657,273080,273084,275627,276259,276587,281115,283110,284664,285392,287653,288711,291374,292444,295578,296375,296598,302728,303936,306897,307183,311007,320060,320685,320800,323520,323772,325237,326996,327801,330630,331741,332118,337105,340502,341796,342807,343858,355862,358123,365794,371524,375391,377122,377948,378267,380167,381210,381878,383098,383250,383339,383650,384472,385321,385585,386630,387114,388987,396341,396405,396541,401995,404175,408306,416386,416819,420275,438732,447566,447636,450284,464150,464376,468051,475172,475932,476984,477997,478426)") + Dim DtNotificaciones As DataTable = Nothing - For Each RowCliente As DataRow In DTClientes.Rows - - Dim CveCliente As Integer = RowCliente("CveCliente").ToString().ToEntero() - Dim Cliente As New Modelos.ClienteModel(CveCliente, UsuarioActual.CveEmpresa) + Dim TieneErrorRegistro As Boolean = False - If Cliente IsNot Nothing Then - Dim Correo As String = Cliente.CobranzaCorreo '"japmx95@gmail.com" 'RowCliente("CobranzaCorreo").ToString() + Dim ObjMovimientos As New ClsMovimientos + ObjMovimientos.IniciaTransacSQL() - Dim Envio As Boolean = False - If Not String.IsNullOrEmpty(Correo) Then - Envio = EnviarEstadoCuenta(UsuarioActual, Correo, Cliente) - End If + If Not EnviarPendientes Then + Try + For Each RowCliente As DataRow In DTClientes.Rows + If Not ObjMovimientos.AddNotificacionEdoCuentaCliente(RowCliente("CveCliente").ToString().ToEntero(), FechaEnvio) Then + GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta. CveCliente: " + RowCliente("CveCliente").ToString()) + TieneErrorRegistro = True + Exit For + End If + Next + Catch ex As Exception + GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta" + ex.ToString()) + TieneErrorRegistro = True + End Try + End If - If Envio Then - - ClientesEdoEnviado.Add(New JObject( - New JProperty("CveCliente", Cliente.CveCliente), - New JProperty("Cliente", Cliente.Nombre) - )) - - Using ObjBitacora As New ClsOIEventos - ObjBitacora.AddEventoBitacora("Se envió correo con el estado de cuenta del cliente", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCliente:=Cliente.CveCliente) - End Using - Else - ClientesSinEnviar.Add(New JObject( - New JProperty("CveCliente", Cliente.CveCliente), - New JProperty("Cliente", Cliente.Nombre) - )) - End If + If Not TieneErrorRegistro Then + If ObjMovimientos.GetNotificacionEdoCuentaCliente(UsuarioActual.CveEmpresa, -1, FechaEnvio) Then + DtNotificaciones = ObjMovimientos.DtResultados.Copy() + Else + TieneErrorRegistro = True End If - - Next - DTClientes.Dispose() + End If + + + If Not TieneErrorRegistro Then + ObjMovimientos.Commit() + Else + ObjMovimientos.RollBack() + If DtNotificaciones IsNot Nothing Then + DtNotificaciones.Clear() + DtNotificaciones = Nothing + End If + End If + ObjMovimientos.Dispose() + DTClientes.Dispose() + + Try + If DtNotificaciones IsNot Nothing Then + For Each Row As DataRow In DtNotificaciones.Rows + Dim CveCliente As Integer = Row("CveCliente").ToString().ToEntero() + Dim Cliente As New Modelos.ClienteModel(CveCliente, UsuarioActual.CveEmpresa) + + If Cliente IsNot Nothing Then + Dim Correo As String = Cliente.CobranzaCorreo + + Dim Envio As Boolean = False + If Not String.IsNullOrEmpty(Correo) Then + Envio = EnviarEstadoCuenta(UsuarioActual, Correo, Cliente) + End If + + If Envio Then + + Using ObjMov As New ClsMovimientos + ObjMov.UpdateNotificacionEdoCuentaCliente(Row("CveNotificacionBitacora").ToString().ToEntero(), Notifico:=True) + End Using + + ClientesEdoEnviado.Add(New JObject( + New JProperty("CveCliente", Cliente.CveCliente), + New JProperty("Cliente", Cliente.Nombre) + )) + + Using ObjBitacora As New ClsOIEventos + ObjBitacora.AddEventoBitacora("Se envió correo con el estado de cuenta del cliente", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCliente:=Cliente.CveCliente) + End Using + Else + ClientesSinEnviar.Add(New JObject( + New JProperty("CveCliente", Cliente.CveCliente), + New JProperty("Cliente", Cliente.Nombre) + )) + End If + End If + Next + End If + + Catch ex As Exception + GuardaLog("Ocurrio un error al agregar las notificaciones de edo cuenta. " + ex.ToString()) + End Try + + If DtNotificaciones IsNot Nothing Then + DtNotificaciones.Dispose() + End If + End If Json.Add(New JProperty("ClientesSinEnviar", ClientesSinEnviar)) Json.Add(New JProperty("ClientesEdoEnviado", ClientesEdoEnviado)) @@ -422,244 +535,245 @@ Public Class TareasProgramadas : Implements IHttpHandler Private Function EnviarEstadoCuenta(UsuarioActual As Usuario, Correo As String, Cliente As Modelos.ClienteModel) As Boolean Dim Retorno As Boolean = True - - Dim ArchivoPDF As Byte() = Nothing - - Dim Formato As String = "PDF" - Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/RepClientesCxC.rpt", UsuarioActual.Empresa.Ruta)) - Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) - Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) - 'OBTENEMOS LOS DATOS - Dim DtCxCFact As DataTable = Nothing - - Dim SaldoIngDolares As Double = 0 - Dim SaldoIngPesos As Double = 0 - Dim SaldoIngDolaresPesos As Double = 0 - Dim TotalIng As Double = 0 - Dim SaldoAntDolares As Double = 0 - Dim SaldoAntPesos As Double = 0 - Dim SaldoAntDolaresPesos As Double = 0 - Dim TotalAnt As Double = 0 - Dim ContaIng As Integer = 0 - Dim ContaAnt As Integer = 0 - Dim FechaCorte As Date = ("9999/01/01").ToDate - - Dim TipoDocto2 As String = "'Ing','NC','Dev'" - Dim FechaVencimientoI As String = "-1" - Dim FechaVencimientoF As String = "-1" - Dim FI As String = "-1" - Dim FF As String = "-1" - Dim dtt As DataTable = Nothing - Try - Using ObjMovtos As New ClsMovimientos() - If ObjMovtos.GetCxCClienteDetalle(Cliente.CveCliente, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa, CveClienteSucursal:=-1) Then - DtCxCFact = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'Act'", "TipoDocto") - 'cargo los anticipos NC - DtCxCFact.Columns.Add("SaldoAnticipo", GetType(Decimal)) - If ObjMovtos.GetAnticiposNCIxCCliente(Cliente.CveCliente, -1, -1) Then - dtt = ObjMovtos.DtResultados.FiltraParametros("Saldo > 0 AND SaldoVentaAnticipo = 0 AND ((Tipo = 'IxC' AND CveIE > 0) OR (Tipo = 'Ant' AND CveVenta > 0) OR (Tipo = 'NC' AND CveVenta > 0) OR (Tipo = 'Egs' AND CveVenta > 0) )") - End If - End If - End Using - Catch ex As Exception - Retorno = False - dtt = Nothing - OnError("Ocurrió un erro al obtener el CxC", ex) - End Try + Dim ArchivoPDF As Byte() = Nothing - If Not Retorno Then - Return Retorno - End If + Dim Formato As String = "PDF" + Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/RepClientesCxC.rpt", UsuarioActual.Empresa.Ruta)) + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) + 'OBTENEMOS LOS DATOS + Dim DtCxCFact As DataTable = Nothing - Try - If dtt IsNot Nothing AndAlso dtt.Rows.Count > 0 Then - For Each drt As DataRow In dtt.Rows - Dim drr As DataRow = DtCxCFact.NewRow - drr("TipoDocto") = drt("Tipo") - drr("SerieFolio") = drt("Folio") - drr("Original") = drt("Original") - drr("TipoCambio") = drt("TipoCambio") - drr("Saldo") = 0 - drr("SaldoAnticipo") = drt("Saldo") - drr("Fecha") = drt("Fecha") - drr("Moneda") = drt("Moneda") - drr("CveMoneda") = drt("CveMoneda") - DtCxCFact.Rows.Add(drr) - Next - End If + Dim SaldoIngDolares As Double = 0 + Dim SaldoIngPesos As Double = 0 + Dim SaldoIngDolaresPesos As Double = 0 + Dim TotalIng As Double = 0 + Dim SaldoAntDolares As Double = 0 + Dim SaldoAntPesos As Double = 0 + Dim SaldoAntDolaresPesos As Double = 0 + Dim TotalAnt As Double = 0 + Dim ContaIng As Integer = 0 + Dim ContaAnt As Integer = 0 + Dim FechaCorte As Date = ("9999/01/01").ToDate - If DtCxCFact IsNot Nothing Then - For Each Row As DataRow In DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})").Rows - If Row("TipoDocto").ToString = "Ing" Or Row("TipoDocto").ToString = "Rem" Or (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble > 0) Then 'Ingresos - ContaIng = ContaIng + 1 - If Row("CveMoneda").ToString.ToEntero = 1 Then - SaldoIngPesos = SaldoIngPesos + Row("Saldo").ToString.ToDouble - ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then - SaldoIngDolares = SaldoIngDolares + Row("Saldo").ToString.ToDouble - SaldoIngDolaresPesos = SaldoIngDolaresPesos + (Row("Saldo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) - End If + Dim TipoDocto2 As String = "'Ing','NC','Dev'" + Dim FechaVencimientoI As String = "-1" + Dim FechaVencimientoF As String = "-1" + Dim FI As String = "-1" + Dim FF As String = "-1" + Dim dtt As DataTable = Nothing - ElseIf (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble = 0) Or Row("TipoDocto").ToString = "IxC" Or Row("TipoDocto").ToString = "NC" Or Row("TipoDocto").ToString = "Dev" Then 'Anticipos, NC, IxC - ContaAnt = ContaAnt + 1 - If Row("CveMoneda").ToString.ToEntero = 1 Then - If Row("TipoDocto").ToString = "Dev" Then - SaldoAntPesos = SaldoAntPesos + Row("Saldo").ToString.ToDouble - Else - SaldoAntPesos = SaldoAntPesos + Row("SaldoAnticipo").ToString.ToDouble - End If - ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then - SaldoAntDolares = SaldoAntDolares + Row("Saldo").ToString.ToDouble - SaldoAntDolaresPesos = SaldoAntDolaresPesos + (Row("SaldoAnticipo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) + Try + Using ObjMovtos As New ClsMovimientos() + If ObjMovtos.GetCxCClienteDetalle(Cliente.CveCliente, "-1", "-1", -1, -1, UsuarioActual.CveEmpresa, CveClienteSucursal:=-1) Then + DtCxCFact = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'Act'", "TipoDocto") + 'cargo los anticipos NC + DtCxCFact.Columns.Add("SaldoAnticipo", GetType(Decimal)) + If ObjMovtos.GetAnticiposNCIxCCliente(Cliente.CveCliente, -1, -1) Then + dtt = ObjMovtos.DtResultados.FiltraParametros("Saldo > 0 AND SaldoVentaAnticipo = 0 AND ((Tipo = 'IxC' AND CveIE > 0) OR (Tipo = 'Ant' AND CveVenta > 0) OR (Tipo = 'NC' AND CveVenta > 0) OR (Tipo = 'Egs' AND CveVenta > 0) )") End If End If - Next - End If - - TotalIng = SaldoIngPesos + SaldoIngDolaresPesos - TotalAnt = SaldoAntPesos + SaldoAntDolaresPesos - - If TotalIng.RoundSQL(2) = 0 AndAlso TotalAnt.RoundSQL(2) = 0 Then + End Using + Catch ex As Exception Retorno = False + dtt = Nothing + GuardaLog("Ocurrió un erro al obtener el CxC. " + ex.ToString()) + End Try + + If Not Retorno Then Return Retorno End If - Dim DtCxCFact2 As DataTable = DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})") - - 'INGRESOS - If SaldoIngPesos > 0 Then - Dim drr As DataRow = DtCxCFact2.NewRow - drr("SerieFolio") = "Total Ing Pesos" - drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Saldo") = SaldoIngPesos - drr("CveMoneda") = 1 - DtCxCFact2.Rows.Add(drr) - End If - If SaldoIngDolares > 0 Then - Dim drr As DataRow = DtCxCFact2.NewRow - drr("SerieFolio") = "Total Ing Dólares" - drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Saldo") = SaldoIngDolares - drr("CveMoneda") = 2 - DtCxCFact2.Rows.Add(drr) - End If - - 'ANTICIPOS - If SaldoAntPesos > 0 Then - Dim drr As DataRow = DtCxCFact2.NewRow - drr("SerieFolio") = "Total Pesos" - drr("SaldoAnticipo") = SaldoAntPesos - drr("CveMoneda") = 1 - DtCxCFact2.Rows.Add(drr) - End If - If SaldoAntDolares > 0 Then - Dim drr As DataRow = DtCxCFact2.NewRow - drr("SerieFolio") = "Total Dólares" - drr("SaldoAnticipo") = SaldoAntDolares - drr("CveMoneda") = 2 - DtCxCFact2.Rows.Add(drr) - End If - - If DtCxCFact2 IsNot Nothing AndAlso DtCxCFact2.Rows.Count > 0 Then - Dim dr As DataRow = DtCxCFact2.Rows(0) - Dim lista = New List(Of CrystalParametro) - lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) - lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) - lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) - lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) - lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", DateTime.Now.ToShortDateString, FF))) - lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) - lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) - lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) - lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) - lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) - lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) - lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) - lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) - lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito - DtCxCFact2(0)("Saldo").ToString.ToDouble).FormatoNumero)) - lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) - lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) - lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) - lista.Add(New CrystalParametro("ContaIng", ContaIng)) - lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) - - If Imagen.Exists Then - lista.Add(New CrystalParametro("LogoPath", logouri)) - Else - lista.Add(New CrystalParametro("LogoPath", "")) + Try + If dtt IsNot Nothing AndAlso dtt.Rows.Count > 0 Then + For Each drt As DataRow In dtt.Rows + Dim drr As DataRow = DtCxCFact.NewRow + drr("TipoDocto") = drt("Tipo") + drr("SerieFolio") = drt("Folio") + drr("Original") = drt("Original") + drr("TipoCambio") = drt("TipoCambio") + drr("Saldo") = 0 + drr("SaldoAnticipo") = drt("Saldo") + drr("Fecha") = drt("Fecha") + drr("Moneda") = drt("Moneda") + drr("CveMoneda") = drt("CveMoneda") + DtCxCFact.Rows.Add(drr) + Next End If - Try + If DtCxCFact IsNot Nothing Then + For Each Row As DataRow In DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})").Rows + If Row("TipoDocto").ToString = "Ing" Or Row("TipoDocto").ToString = "Rem" Or (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble > 0) Then 'Ingresos + ContaIng = ContaIng + 1 + If Row("CveMoneda").ToString.ToEntero = 1 Then + SaldoIngPesos = SaldoIngPesos + Row("Saldo").ToString.ToDouble + ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then + SaldoIngDolares = SaldoIngDolares + Row("Saldo").ToString.ToDouble + SaldoIngDolaresPesos = SaldoIngDolaresPesos + (Row("Saldo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) + End If + + ElseIf (Row("TipoDocto").ToString = "Ant" And Row("Saldo").ToString.ToDouble = 0) Or Row("TipoDocto").ToString = "IxC" Or Row("TipoDocto").ToString = "NC" Or Row("TipoDocto").ToString = "Dev" Then 'Anticipos, NC, IxC + ContaAnt = ContaAnt + 1 + If Row("CveMoneda").ToString.ToEntero = 1 Then + If Row("TipoDocto").ToString = "Dev" Then + SaldoAntPesos = SaldoAntPesos + Row("Saldo").ToString.ToDouble + Else + SaldoAntPesos = SaldoAntPesos + Row("SaldoAnticipo").ToString.ToDouble + End If + ElseIf Row("CveMoneda").ToString.ToEntero = 2 Then + SaldoAntDolares = SaldoAntDolares + Row("Saldo").ToString.ToDouble + SaldoAntDolaresPesos = SaldoAntDolaresPesos + (Row("SaldoAnticipo").ToString.ToDouble * Row("TipoCambio").ToString.ToDouble) + End If + End If + Next + End If + + TotalIng = SaldoIngPesos + SaldoIngDolaresPesos + TotalAnt = SaldoAntPesos + SaldoAntDolaresPesos + + If TotalIng.RoundSQL(2) = 0 AndAlso TotalAnt.RoundSQL(2) = 0 Then + Retorno = False + Return Retorno + End If + + Dim DtCxCFact2 As DataTable = DtCxCFact.FiltraParametros($"TipoDocto IN ({TipoDocto2})") + + 'INGRESOS + If SaldoIngPesos > 0 Then + Dim drr As DataRow = DtCxCFact2.NewRow + drr("SerieFolio") = "Total Ing Pesos" + drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Saldo") = SaldoIngPesos + drr("CveMoneda") = 1 + DtCxCFact2.Rows.Add(drr) + End If + If SaldoIngDolares > 0 Then + Dim drr As DataRow = DtCxCFact2.NewRow + drr("SerieFolio") = "Total Ing Dólares" + drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 2").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Saldo") = SaldoIngDolares + drr("CveMoneda") = 2 + DtCxCFact2.Rows.Add(drr) + End If + + 'ANTICIPOS + If SaldoAntPesos > 0 Then + Dim drr As DataRow = DtCxCFact2.NewRow + drr("SerieFolio") = "Total Pesos" + drr("SaldoAnticipo") = SaldoAntPesos + drr("CveMoneda") = 1 + DtCxCFact2.Rows.Add(drr) + End If + If SaldoAntDolares > 0 Then + Dim drr As DataRow = DtCxCFact2.NewRow + drr("SerieFolio") = "Total Dólares" + drr("SaldoAnticipo") = SaldoAntDolares + drr("CveMoneda") = 2 + DtCxCFact2.Rows.Add(drr) + End If + + If DtCxCFact2 IsNot Nothing AndAlso DtCxCFact2.Rows.Count > 0 Then + Dim dr As DataRow = DtCxCFact2.Rows(0) + Dim lista = New List(Of CrystalParametro) + lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) + lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) + lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) + lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) + lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", DateTime.Now.ToShortDateString, FF))) + lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) + lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) + lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) + lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) + lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) + lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) + lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) + lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) + lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito - DtCxCFact2(0)("Saldo").ToString.ToDouble).FormatoNumero)) + lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) + lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) + lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) + lista.Add(New CrystalParametro("ContaIng", ContaIng)) + lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) + + If Imagen.Exists Then + lista.Add(New CrystalParametro("LogoPath", logouri)) + Else + lista.Add(New CrystalParametro("LogoPath", "")) + End If + + Try + If Archivo.Exists Then + ArchivoPDF = ImprimirPDFCrystal($"{UsuarioActual.Empresa.Ruta}Formatos/RepClientesCxC.rpt", DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) + Else + ArchivoPDF = ImprimirPDFCrystal(HttpContext.Current.Server.MapPath("~/Empresas/Grales/Formatos/RepClientesCxC.rpt"), DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) + End If + + Catch ex As Exception + ArchivoPDF = Nothing + GuardaLog("Ocurrió un erro al obtener el CxC" + ex.ToString()) + End Try + Else + Dim lista = New List(Of CrystalParametro) + lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) + lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) + lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) + lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) + lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", DateTime.Now.ToShortDateString, FF))) + lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) + lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) + lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) + lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) + lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) + lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) + lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) + lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) + lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito).FormatoNumero)) + + lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) + lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) + lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) + lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) + lista.Add(New CrystalParametro("ContaIng", ContaIng)) + lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) + + If Imagen.Exists Then + lista.Add(New CrystalParametro("LogoPath", logouri)) + Else + lista.Add(New CrystalParametro("LogoPath", "")) + End If + + Dim drr As DataRow = DtCxCFact2.NewRow + drr("SerieFolio") = "Total Ing Pesos" + drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") + drr("Saldo") = 0 + drr("SaldoAnticipo") = 0 + drr("CveMoneda") = 1 + DtCxCFact2.Rows.Add(drr) + If Archivo.Exists Then ArchivoPDF = ImprimirPDFCrystal($"{UsuarioActual.Empresa.Ruta}Formatos/RepClientesCxC.rpt", DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) Else ArchivoPDF = ImprimirPDFCrystal(HttpContext.Current.Server.MapPath("~/Empresas/Grales/Formatos/RepClientesCxC.rpt"), DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) End If - - Catch ex As Exception - OnError("Ocurrió error al mandar MAIL de Orden de Compra", ex) - End Try - Else - Dim lista = New List(Of CrystalParametro) - lista.Add(New CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa)) - lista.Add(New CrystalParametro("TipoCuentas", "Con Saldo")) - lista.Add(New CrystalParametro("NombreCliente", Cliente.Nombre)) - lista.Add(New CrystalParametro("FechaInicio", If(FI = "-1", "-", FI))) - lista.Add(New CrystalParametro("FechaFin", If(FF = "-1", DateTime.Now.ToShortDateString, FF))) - lista.Add(New CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre)) - lista.Add(New CrystalParametro("DireccionCliente", String.Format("Calle {0} #{1} Colonia {2}", Cliente.Direccion, If(Cliente.NoExt = "", "S/N", Cliente.NoExt), Cliente.Colonia))) - lista.Add(New CrystalParametro("ClienteCP", Cliente.CP)) - lista.Add(New CrystalParametro("ClienteCiudad", Cliente.Ciudad)) - lista.Add(New CrystalParametro("ClienteRFC", Cliente.RFC)) - lista.Add(New CrystalParametro("ClienteTelefono", Cliente.Telefono)) - lista.Add(New CrystalParametro("DiasCredito", Cliente.PlazoCobranza)) - lista.Add(New CrystalParametro("LimiteCredito", Cliente.LimiteCredito)) - lista.Add(New CrystalParametro("SaldoDisponible", (Cliente.LimiteCredito).FormatoNumero)) - - lista.Add(New CrystalParametro("SaldoIngDolares", SaldoIngDolares.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoIngPesos", SaldoIngPesos.FormatoNumero)) - lista.Add(New CrystalParametro("TotalIng", TotalIng.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoAntDolares", SaldoAntDolares.FormatoNumero)) - lista.Add(New CrystalParametro("SaldoAntPesos", SaldoAntPesos.FormatoNumero)) - lista.Add(New CrystalParametro("TotalAnt", TotalAnt.FormatoNumero)) - lista.Add(New CrystalParametro("ContaIng", ContaIng)) - lista.Add(New CrystalParametro("ContaAnt", ContaAnt)) - - If Imagen.Exists Then - lista.Add(New CrystalParametro("LogoPath", logouri)) - Else - lista.Add(New CrystalParametro("LogoPath", "")) End If - Dim drr As DataRow = DtCxCFact2.NewRow - drr("SerieFolio") = "Total Ing Pesos" - drr("Original") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Original", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Abonado") = DtCxCFact2.FiltraParametros("CveMoneda = 1").SUM("Abonado", "TipoDocto IN ('Ing','Rem') OR (TipoDocto = 'Ant' AND Saldo > 0)") - drr("Saldo") = 0 - drr("SaldoAnticipo") = 0 - drr("CveMoneda") = 1 - DtCxCFact2.Rows.Add(drr) + Catch ex As Exception + GuardaLog("Ocurrió un error al generar el pdf" + ex.ToString()) + ArchivoPDF = Nothing + End Try - If Archivo.Exists Then - ArchivoPDF = ImprimirPDFCrystal($"{UsuarioActual.Empresa.Ruta}Formatos/RepClientesCxC.rpt", DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) - Else - ArchivoPDF = ImprimirPDFCrystal(HttpContext.Current.Server.MapPath("~/Empresas/Grales/Formatos/RepClientesCxC.rpt"), DtCxCFact2.FiltraParametros("", "CveMoneda,Fecha"), lista, "Estado de cuenta", Formato) - End If - End If - - Catch ex As Exception - OnError("Ocurrió un error al generar el pdf", ex) - ArchivoPDF = Nothing - End Try - - If ArchivoPDF IsNot Nothing Then - Try - Dim Cuerpo As String = String.Format("Estimado cliente {0}, al presente del correo se anexa su estado actual de cartera en {1}.
    + If ArchivoPDF IsNot Nothing Then + Try + Dim Cuerpo As String = String.Format("Estimado cliente {0}, al presente del correo se anexa su estado actual de cartera en {1}.

    Quedamos a sus ordenes para cualquier duda o aclaración con su agente de Ventas.

    @@ -668,16 +782,18 @@ Public Class TareasProgramadas : Implements IHttpHandler
    ESTE CORREO SE GENERO EN FORMA AUTOMATICA.", Cliente.NombreComercial, UsuarioActual.Empresa.Empresa) - Dim Hilo As New System.Threading.Thread(Sub() MandaCorreo(ArchivoPDF, Correo, $"Estado Actual de Cartera {UsuarioActual.Empresa.Empresa}", Cuerpo)) - Hilo.Start() - Retorno = True - Catch ex As Exception + Retorno = MandaCorreo(ArchivoPDF, Correo, $"Estado Actual de Cartera {UsuarioActual.Empresa.Empresa}", Cuerpo) + Catch ex As Exception + Retorno = False + GuardaLog("Ocurrió error al mandar el correo de estado de cuenta. " + ex.ToString()) + End Try + Else Retorno = False - OnError("Ocurrió error al mandar el correo de estado de cuenta", ex) - End Try - Else + End If + Catch ex As Exception Retorno = False - End If + GuardaLog("Ocurrió error al mandar el correo de estado de cuenta" + ex.ToString()) + End Try Return Retorno End Function @@ -749,7 +865,7 @@ Public Class TareasProgramadas : Implements IHttpHandler Return Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body, Archivos:=LSRutasMail) Catch ex As Exception - OnError("Ocurrió un error al enviar el correo de edo cuenta", ex) + GuardaLog("Ocurrió error al mandar el correo de estado de cuenta. " + ex.ToString()) Return False End Try @@ -780,4 +896,430 @@ Public Class TareasProgramadas : Implements IHttpHandler End Sub #End Region +#Region "S C O R E C A R D" + Private Sub CargaScoreCard(ByVal context As HttpContext, pCveEmpresa As Integer, FechaEnvio As DateTime) + Dim Usuario = ValidaUsuarioSistema(pCveEmpresa) + Dim obj = EjecutarEnvioScoreCard(Usuario, FechaEnvio) + + End Sub + + Private Function EjecutarEnvioScoreCard(UsuarioActual As Usuario, FechaEnvio As DateTime) As Boolean + Dim DtGrupoVendedores As DataTable = Nothing + Dim DtGrupoSucursales As DataTable = Nothing + Dim DtGrupoEmpresa As DataTable = Nothing + + Using ObjVentas As New ClsVentas + 'VENDEDORES + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=0) Then + DtGrupoVendedores = ObjVentas.DtResultados.Copy + End If + 'SUCURSAL + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=1) Then + DtGrupoSucursales = ObjVentas.DtResultados.Copy + End If + 'EMPRESA + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, -1, -1, + -1, -1, -1, + -1, -1, GrupoSuperior:=2) Then + DtGrupoEmpresa = ObjVentas.DtResultados.Copy + End If + End Using + + Dim DtUsuarios As DataTable = GlobalDTUsuariosE140() + + Dim ListaDirectivos As New List(Of MUsuarioEnviar) + 'OSCAR FERNANDO LOPEZ CARRASCO + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2138}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'ANA IVETTE LOPEZ CARRASCO + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2292}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'FERNANDO MENDOZA LAMADRID + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2275}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'CARLOS ARMANDO MORENO GONZALEZ + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2763}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + 'EMMANUEL LOPEZ FIMBRES + ListaDirectivos.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3099}"), TipoUsuarioEnviar.Directivo) With + { + .SubProyecto = "Todos", + .ReporteEnviar = New MReporteEnviar() With + { + .Empresa = True, .Sucursal = True, .Vendedor = True + } + }) + + Dim PDFEmpresa As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoEmpresa) + Dim PDFSucursales As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoSucursales) + Dim PDFVendedores As Byte() = GenerarScoredCardDirectivo(UsuarioActual, DtGrupoVendedores) + + For Each UsuarioEnviar In ListaDirectivos + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + + If UsuarioEnviar.ReporteEnviar.Empresa Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFEmpresa, + .NombreArchivo = "ScoreCardEmpresa.pdf" + }) + End If + + If UsuarioEnviar.ReporteEnviar.Sucursal Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFSucursales, + .NombreArchivo = "ScoreCardSucursales.pdf" + }) + End If + + If UsuarioEnviar.ReporteEnviar.Vendedor Then + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = PDFVendedores, + .NombreArchivo = "ScoreCardVendedores.pdf" + }) + End If + + If LSRutasMail.Count > 0 Then + EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) + End If + + Next + + Dim ListaVendedores As New List(Of MUsuarioEnviar) + 'LUIS FERNADO GRIJALVA COTA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3236} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'FERNANDO GRIJALVA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3293} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'ADRIAN MURRIETA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3352} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'BRAYAM URIEL CORRALES + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {2700} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'DANIEL GASTELUM + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3360} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'ALEJANDRA QUINTERO + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3336} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'RICARDO FUENTES + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3363} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + 'GERMAN LUNA + ListaVendedores.Add(New MUsuarioEnviar(DtUsuarios.FiltroPrimero($"CveUsuario = {3354} AND CveSubProyecto > 0"), TipoUsuarioEnviar.Vendedor)) + + For Each UsuarioEnviar In ListaVendedores + Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) + Dim DtReporteVendedor As DataTable = Nothing + + If UsuarioEnviar.CveSubProyecto > 0 AndAlso UsuarioEnviar.CveVendedor > 0 Then + + Using ObjVentas As New ClsVentas + If ObjVentas.GetRepMetasVendedores(FechaEnvio, UsuarioActual.CveEmpresa, UsuarioEnviar.CveVendedor, -1, + -1, -1, -1, UsuarioEnviar.CveSubProyecto, -1, GrupoSuperior:=1) Then + DtReporteVendedor = ObjVentas.DtResultados.Copy + End If + End Using + + LSRutasMail.Add(New ClsSisMail.ArchivoMail With + { + .ArchivoBinario = GenerarScoredCard(UsuarioActual, UsuarioEnviar, DtReporteVendedor), + .NombreArchivo = "ScoreCardSucursales.pdf" + }) + + If LSRutasMail.Count > 0 Then + EnviarCorreoFactura(UsuarioActual, UsuarioEnviar, LSRutasMail) + End If + + End If + Next + + Return False + End Function + + Private Sub EnviarCorreoFactura(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, LSRutasMail As List(Of ClsSisMail.ArchivoMail)) + Dim ObjMail As New ClsSisMail() + Dim Mail As String = "jonathan.perez@adssistemas.mx" + Dim MailCC As String = "rene.molina@adssistemas.mx" + + Dim ExistePDF As Boolean = False + + If Not String.IsNullOrEmpty(Mail) Then + Try + Dim Asunto As String = $"ScoreCard: {Now.ToString("dd/MM/yyyy")}" + Dim Cuerpo As String = String.Empty + Dim ResultadoMail As Integer = 0 + + If ObjMail.SendMail(ClsPaginas.EmpresaNotificaciones, Mail, Asunto, Cuerpo, If(String.IsNullOrEmpty(MailCC), "", MailCC), LSRutasMail) Then + ResultadoMail = 1 + End If + + Catch ex As Exception + OnError("Ocurrió error al mandar el Mail", ex) + End Try + End If + End Sub + + Protected Function GenerarScoredCard(UsuarioActual As Usuario, UsuarioEnviar As MUsuarioEnviar, DtDatos As DataTable) As Byte() + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) + + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + If Imagen.Exists Then + params.Add(New ReportParameter("pImg", logouri)) + Else + params.Add(New ReportParameter("pImg", "")) + End If + params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) + params.Add(New ReportParameter("FechaImpresion", Today)) + params.Add(New ReportParameter("SubProyecto", UsuarioEnviar.SubProyecto)) + params.Add(New ReportParameter("Agente", UsuarioEnviar.Agente)) + + + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource + rds.Name = "DataSet1" + rds.Value = DtDatos + lrds.Add(rds) + + Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") + End Function + + Protected Function GenerarScoredCardDirectivo(UsuarioActual As Usuario, DtDatos As DataTable) As Byte() + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) + Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, UsuarioActual.CveEmpresa) + + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + If Imagen.Exists Then + params.Add(New ReportParameter("pImg", logouri)) + Else + params.Add(New ReportParameter("pImg", "")) + End If + params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Usuario)) + params.Add(New ReportParameter("FechaImpresion", Today)) + params.Add(New ReportParameter("SubProyecto", "Todos")) + params.Add(New ReportParameter("Agente", "Todos")) + + + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource + rds.Name = "DataSet1" + rds.Value = DtDatos + lrds.Add(rds) + + Return StreamPDF(UsuarioActual, "Empresas/Grales/Formatos/MetasVendedores.rdlc", lrds, params, "Rep. Metas por vendedores", "PDF") + End Function + + Public Enum TipoUsuarioEnviar + Directivo + Vendedor + End Enum + + Public Class MUsuarioEnviar + + Sub New(RowUsuario As DataRow, Tipo As TipoUsuarioEnviar) + If RowUsuario IsNot Nothing Then + Me.CveUsuario = RowUsuario("CveUsuario").ToString().ToEntero() + Me.Nombre = RowUsuario("Nombre").ToString() + Me.Correo = RowUsuario("Correo").ToString() + Me.CveSubProyecto = RowUsuario("CveSubProyecto").ToString().ToEntero() + Me.CveVendedor = RowUsuario("CveVendedor").ToString().ToEntero() + Me.Tipo = Tipo + + If Me.Tipo = TipoUsuarioEnviar.Vendedor Then + Me.Agente = Me.Nombre + Else + Me.Agente = "Todos" + End If + + If String.IsNullOrEmpty(SubProyecto) AndAlso CveSubProyecto > 0 Then + Me.SubProyecto = GlobalDTSubProyectosE140(-1, CveSubProyecto:=Me.CveSubProyecto).FiltroPrimeroValor("SubProyecto") + End If + End If + + End Sub + + Public Property CveUsuario As Integer + Public Property Nombre As String + Public Property Tipo As TipoUsuarioEnviar + Public Property ReporteEnviar As MReporteEnviar + Public Property CveSubProyecto As Integer + Public Property SubProyecto As String + Public Property Correo As String + Public Property CveVendedor As Integer + Public Property Agente As String + + End Class + + Public Class MReporteEnviar + Public Property Empresa As Boolean = False + Public Property Sucursal As Boolean = False + Public Property Vendedor As Boolean = False + 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) As Byte() + 'limpio ReportViwer + Dim sw As New System.Diagnostics.Stopwatch() + sw.Start() + 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.RutaArchivos + 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") 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 + + Dim EsProduccion As Boolean = UsuarioActual.Empresa.FacturaProduccion + + If EsProduccion Then + + Dim wsreport As New WSRDLC.WebServiceSoapClient + Dim params As New List(Of WSRDLC.ReportParameter) + Dim ds As New DataSet + For Each rpds As ReportDataSource In DataSource + Dim dt As DataTable = DirectCast(rpds.Value, Data.DataTable) + If dt Is Nothing Then + dt = New DataTable() + Else + dt = dt.Copy() + End If + dt.TableName = rpds.Name + ds.Tables.Add(dt) + Next + For Each rpds As ReportParameter In Parametros + Dim param As New WSRDLC.ReportParameter + param.Name = rpds.Name + param.Values = {rpds.Values(0)} + params.Add(param) + Next + Bytes = wsreport.StreamPDFBytes(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) + 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 + MR.Dispose() + MR = Nothing + 'Dim ruta = wsreport.StreamPDF(RutaReporte, ds, params.ToArray(), NombreArchivo, Formato, CveEmpresa, CveUsuario) + 'If File.Exists(ruta) Then + ' Bytes = File.ReadAllBytes(ruta) + ' File.Delete(ruta) + 'End If + 'Dim setup As AppDomainSetup = New AppDomainSetup + 'With setup + ' .ApplicationBase = Environment.CurrentDirectory + ' .LoaderOptimization = LoaderOptimization.MultiDomainHost + 'End With + 'setup.SetCompatibilitySwitches({"NetFx40_LegacySecurityPolicy"}) + 'Dim _casPolicyEnabledDomain As AppDomain = AppDomain.CreateDomain("Full Trust", Nothing, setup) + 'Dim fllreport As ADSReportLib.FullTrustReportviewer = Nothing + 'Try + + ' fllreport = CType(_casPolicyEnabledDomain.CreateInstanceFromAndUnwrap(GetType(ADSReportLib.FullTrustReportviewer).Assembly.CodeBase, GetType(ADSReportLib.FullTrustReportviewer).FullName), ADSReportLib.FullTrustReportviewer) + + ' fllreport.Initialize("DisplayName", RutaReporte, Parametros.AsEnumerable(), New List(Of String()), True) + ' For Each RDS As ReportDataSource In DataSource + ' fllreport.AddDataSources(RDS.Name, DirectCast(RDS.Value, DataTable)) + ' Next + ' 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 = fllreport.Render(Formato, Nothing, MimeType, Encoding, Extension, StreamIds) + ' fllreport = Nothing + '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}") + 'Finally + ' AppDomain.Unload(_casPolicyEnabledDomain) + 'End Try + 'If fllreport IsNot Nothing Then fllreport.liberarecursos() + + 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 Region + End Class \ No newline at end of file diff --git a/General/PopUpPaqueteriasGuias.aspx.cs b/General/PopUpPaqueteriasGuias.aspx.cs index ec353c294..02ca5fca7 100644 --- a/General/PopUpPaqueteriasGuias.aspx.cs +++ b/General/PopUpPaqueteriasGuias.aspx.cs @@ -736,6 +736,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas } } + ObjVentas.Dispose(); } private string DocumentoEntregaInterna() @@ -849,8 +850,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas private void MandaCorreoNotificacionGuia(string Correos) { - Correos.GuardaLog(); - + string body = DocumentoEntregaInterna(); ClsSisMail MailCls = new ClsSisMail(); diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index c622d7ac6..5d16c394f 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -335,7 +335,7 @@ Partial Class Inventarios_EntradasSalidas If Request("CveMovimiento") IsNot Nothing AndAlso Request("CveMovimiento").ToString.ToEntero > 0 Then - If UsuarioActual.CveUsuario = 100 AndAlso UsuarioActual.CveEmpresa = 140 Then + If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.CveEmpresa = 140 Then LnkGenerarVirtual.Visible = True End If diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 5f5646989..f696edd7f 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -2062,7 +2062,7 @@ Partial Class Inventarios_EntregaAlmacen DtDetalle = DtDatosDetalle.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows - If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=Dr1("Serie").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then Dim CveSeccionAlmacen As Integer = 0 For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows @@ -2120,7 +2120,7 @@ Partial Class Inventarios_EntregaAlmacen DtDetalle = DtDatosDetalleLote.FiltraParametros(String.Format("ConsecId = {0}", Dr("Consec"))) For Each Dr1 As DataRow In DtDetalle.Rows - If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr1("CvePS").ToString().ToEntero(), Dr1("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Lote:=Dr1("Lote").ToString(), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), CveSeccionAlmacen:=-1) Then CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal @@ -2171,7 +2171,7 @@ Partial Class Inventarios_EntregaAlmacen Else - If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=If(CBool(Dr("AplicaSeccion")), Dr("CveSeccion").ToString().ToEntero(), -1)) Then + If ObjInventario.GetExistenciasProducto(Dr("CvePS").ToString().ToEntero(), Dr("CveUM").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), CveTipoAlmacen:=9, CveVendedor:=CveVendedor, CveSubProyecto:=CveSubProyecto, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeApartados:=-1, Caducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString().ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString(), "-1"), CveSeccionAlmacen:=-1) Then CantidadSaldo = Dr("CantidadGV").ToString().ToDecimal diff --git a/Inventarios/RepTraspasoEmitido.aspx.cs b/Inventarios/RepTraspasoEmitido.aspx.cs index f0fd0f8df..c670c1054 100644 --- a/Inventarios/RepTraspasoEmitido.aspx.cs +++ b/Inventarios/RepTraspasoEmitido.aspx.cs @@ -62,7 +62,7 @@ public partial class Inventarios_RepTraspasoEmitido : ClsPaginas int CveEstatusTimbrado = 0; string FolioFiscal = Gvr.DataKey("FolioFiscal").ToString(),SelloCancelacion =""; int CveMovimiento = Gvr.DataKey("CveMovimiento").ToEntero(); - if (ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, 0, "XAXX010101000", UsuarioActual.Empresa.RFC, 2,false)) + if (ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, 0, UsuarioActual.Empresa.RFC, UsuarioActual.Empresa.RFC, 4,false)) { CancelacionFecha = ObjCancelacion.CancelacionFecha; SelloCancelacion = ObjCancelacion.CancelacionAcuse; diff --git a/OC/OC.aspx.vb b/OC/OC.aspx.vb index df8847e67..b83424a7b 100644 --- a/OC/OC.aspx.vb +++ b/OC/OC.aspx.vb @@ -6921,27 +6921,29 @@ Partial Class OC Dim tmpDTPS As DataTable = DtDetalle Dim DTAlmacen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($" CveTipoAlmacen IN (1,9) ") 'AND CveSucursal = {CveSucursal}") Dim objInv As New ClsInventarios - Dim consulta As New StringBuilder + 'Dim consulta As New StringBuilder - consulta.Append(" ") - consulta.Append(" DECLARE @TEMP TABLE (CvePS INT, CveSubProyecto INT);") - For Each row As DataRow In tmpDTPS.Rows - consulta.AppendFormat("INSERT INTO @TEMP VALUES ({0},{1});", row("CvePS"), row("CveSubProyecto")) - Next - consulta.Append(" SELECT CASE WHEN LEN (ISNULL (P.Codigo, '')) = 0 THEN P.PS ELSE CONCAT( P.Codigo, ' - ', P.PS) END AS Producto, SUM(OCPR.Cantidad) AS [Por Recibir] ") - For Each row As DataRow In DTAlmacen.Rows - consulta.AppendFormat(" ,SUM(CASE WHEN CS.CveAlmacen={0} THEN CS.Existencia - ISNULL(INV.Cantidad,0) ELSE 0 END) AS [{1}] ", row("CveAlmacen"), row("Almacen")) - Next - consulta.Append(" FROM @TEMP T ") - consulta.Append(" INNER JOIN [ProductosServicios] P ON P.CvePS = T.CvePS ") - consulta.Append(" LEFT JOIN [Inv_ExistenciasProductos] CS ON P.CvePS = CS.CvePS ") - consulta.Append(" LEFT JOIN Vw_InventarioPorSurtir INV ON INV.CvePS = P.CvePS AND INV.CveAlmacen = CS.CveAlmacen ") - consulta.Append(" LEFT JOIN Vw_OC_PorRecibir OCPR ON OCPR.CvePS = P.CvePS AND OCPR.CveAlmacen = CS.CveAlmacen AND OCPR.CveSubProyecto = T.CveSubProyecto") - consulta.Append(" WHERE P.CveTipoPS = 2") - consulta.Append(" GROUP BY P.CvePS,P.Codigo,P.PS") + 'consulta.Append(" ") + 'consulta.Append(" DECLARE @TEMP TABLE (CvePS INT, CveSubProyecto INT);") + 'For Each row As DataRow In tmpDTPS.Rows + ' consulta.AppendFormat("INSERT INTO @TEMP VALUES ({0},{1});", row("CvePS"), row("CveSubProyecto")) + 'Next + 'consulta.Append(" SELECT CASE WHEN LEN (ISNULL (P.Codigo, '')) = 0 THEN P.PS ELSE CONCAT( P.Codigo, ' - ', P.PS) END AS Producto, SUM(OCPR.Cantidad) AS [Por Recibir] ") + 'For Each row As DataRow In DTAlmacen.Rows + ' consulta.AppendFormat(" ,SUM(CASE WHEN CS.CveAlmacen={0} THEN CS.Existencia - ISNULL(INV.Cantidad,0) ELSE 0 END) AS [{1}] ", row("CveAlmacen"), row("Almacen")) + 'Next + 'consulta.Append(" FROM @TEMP T ") + 'consulta.Append(" INNER JOIN [ProductosServicios] P ON P.CvePS = T.CvePS ") + 'consulta.Append(" LEFT JOIN [Inv_ExistenciasProductos] CS ON P.CvePS = CS.CvePS ") + 'consulta.Append(" LEFT JOIN Vw_InventarioPorSurtir INV ON INV.CvePS = P.CvePS AND INV.CveAlmacen = CS.CveAlmacen ") + 'consulta.Append(" LEFT JOIN Vw_OC_PorRecibir OCPR ON OCPR.CvePS = P.CvePS AND OCPR.CveAlmacen = CS.CveAlmacen AND OCPR.CveSubProyecto = T.CveSubProyecto") + 'consulta.Append(" WHERE P.CveTipoPS = 2") + 'consulta.Append(" GROUP BY P.CvePS,P.Codigo,P.PS") - objInv.GetQuery(consulta.ToString()) + 'objInv.GetQuery(consulta.ToString()) + + objInv.GetExistenciasAlmacenDT(CveOrdenCompra, UsuarioActual.CveEmpresa) ' limpio los almacenes donde no tiene ningun producto existencia For i = objInv.DtResultados.Columns.Count - 1 To 1 Step -1 diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 4d351c6a8..fb3db29dc 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -3654,7 +3654,7 @@ Partial Class Ventas 'VALIDA EXISTENCIAS DE ALMACÉN 'Dim DrPS = GlobalDTProductosServicios(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") - Dim DrPS = GlobalDTPS(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") + Dim DrPS = GlobalDTPSSimplificado(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then Dim CveTipoPS As Integer = DrPS("CveTipoPS").ToString().ToEntero() @@ -6364,12 +6364,18 @@ Partial Class Ventas Else ' el cliente tiene crédito disponible, no tiene bloqueo DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("PA")) + Dim EsCotizacion As Boolean = False + If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then + EsCotizacion = True + End If If UsuarioActual.TienePermisoProceso(199) Then DdlTipoComprobante.SelectedValueExistInsert("Rem", "Remisión") ' puede remisionar If UsuarioActual.TienePermisoProceso(60) Then DdlTipoComprobante.SelectedValueExistInsert("Ing", "Ingresos") 'puede facturar DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) - + If EsCotizacion Then + DdlTipoComprobante.SelectedValueExistInsert("Cot", "Cotización") + End If TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", Now.AddDays(PlazoCobranzaRemision), Now.AddDays(PlazoCobranza)).ToShortDateString End If @@ -7124,6 +7130,10 @@ Partial Class Ventas GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").Enabled = False GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").ToolTip = "No se puede editar el descuento porque viene de una promoción" End If + + If Me.CveVenta > 0 AndAlso UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot") Then + GvPS.Rows(e.NewEditIndex).FCTextBox("TxtDescuento").Enabled = False + End If End Sub Protected Sub GvPS_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvPS.RowCancelingEdit GvPS.EditIndex = -1 @@ -19328,7 +19338,10 @@ Partial Class Ventas 'COMIENZA: VENTADETALLE 'CUANDO SEA SALIDA VA POR LA VENTA DETALLE DE LA FACTURA DE LA REMISION - OJO!! SOLO FUNCIONA HASTA ORITA QUE SE HACE SALIDA SOLO CUANDO SE FACTURA LA REMISION Dim CveVentaDetalle = If(ConceptoEntrada.Contiene(3, 40), TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"Consec={Consec}").ToEntero(), MovDet("CveVentaDetalle").ToString().ToEntero()) - Dim CveVentaDetallePadre As Integer = -1 + Dim CveVentaDetalleRemision As Integer = -1 + If ConceptoEntrada = 40 AndAlso MovDet("CveVentaDetalle").ToString().ToEntero() > 0 Then + CveVentaDetalleRemision = MovDet("CveVentaDetalle").ToString().ToEntero() + End If 'If ConceptoEntrada = 3 Then ' CveVentaDetalle = TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"Consec={Consec}").ToEntero() @@ -19365,7 +19378,7 @@ Partial Class Ventas CveMovimientoDetalleEntrada = MovDet("CveMovimientoDetalle").ToString().ToEntero() End If - If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalleEntrada, CveVentaDetallePadre:=CveVentaDetallePadre) Then + If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalleEntrada, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then ContadorMovtosDetalles += 1 Else OcurrioError = True