diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb index 04d56a648..36a2814a5 100644 --- a/App_Code/ClsGenerales.vb +++ b/App_Code/ClsGenerales.vb @@ -1,6 +1,7 @@ Option Strict On Option Explicit On +Imports System Imports System.Data Imports System.Data.SqlClient Imports Extensiones @@ -4111,6 +4112,32 @@ Public Class ClsGenerales #End Region + + Public Function GetMediosTransporte(CveOrigen As Integer, Estatus As Boolean, CveEmpresa As Integer, CveTipoNomina As Integer, CveSubProyecto As Integer, Tipo As Integer, GPO As Integer) As Boolean + + Dim Retorno As Boolean = False + DataAdapter("PA_Agro_OrigenGet") + With SqlAdapter.SelectCommand.Parameters + .Add("@CveOrigen", SqlDbType.Int).Value = CveOrigen + .Add("@Estatus", SqlDbType.Bit).Value = Estatus + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveTipoNomina", SqlDbType.Int).Value = CveTipoNomina + .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto + .Add("@Tipo", SqlDbType.Int).Value = Tipo + .Add("@GPO", SqlDbType.Int).Value = GPO + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError($"Ocurrió un error al obtener los medios de transporte.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + End Class diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index d2f7e6a76..e08b9b811 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -3052,6 +3052,27 @@ Public Class ClsNominas #End Region + Public Function GetAsistenciabetweendate(CveEmpresa As Integer, FechaInicio As DateTime, FechaFin As DateTime) As Boolean + Dim retorno As Boolean = False + Try + DTSet = New DataSet() + DataAdapter("PA_RH_AsistenciaBetweenDates", CommandType.StoredProcedure) + With SqlAdapter.SelectCommand.Parameters + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@FechaInicio", SqlDbType.DateTime).Value = FechaInicio + .Add("@FechaFin", SqlDbType.DateTime).Value = FechaFin + End With + SqlAdapter.Fill(Data) + retorno = True + Catch sqEx As SqlException + retorno = False + OnError("Ocurrió un error al obtener la asistencia de nomina.", sqEx, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + retorno = False + OnError("Ocurrió un error al obtener la asistencia de nomina.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + Return retorno + End Function Public Sub addParameters(varsql As String, sqltipe As SqlDbType, valor As Object) SqlAdapter.SelectCommand.Parameters.Add(varsql, sqltipe).Value = valor diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 469a026bf..f7896eacb 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1091,13 +1091,17 @@ Public Class ClsPaginas ' Application("GlobalDTSucursales") = value ' End Set 'End Property - Property GlobalDTSATUsosCFDI(Optional EsPersonaFisica As Integer = -1) As DataTable + Property GlobalDTSATUsosCFDI(Optional EsPersonaFisica As Integer = -1, Optional RegimenFiscalReceptor As String = "-1") As DataTable Get If EsPersonaFisica <> -1 Then - Dim Tipo As String = "" - If EsPersonaFisica = 1 Then Tipo = "AplicaPersonaFisica = 1" Else Tipo = "AplicaPersonaMoral = 1" + Dim Tipo As New StringBuilder + If EsPersonaFisica = 1 Then Tipo.Append("AplicaPersonaFisica = 1") Else Tipo.Append("AplicaPersonaMoral = 1") - Dim Dv As New DataView(DirectCast(Application("GlobalDTSATUsosCFDI"), DataTable), Tipo, " UsoCFDIDescripcion", DataViewRowState.CurrentRows) + If RegimenFiscalReceptor <> "-1" Then + Tipo.AppendFormat("AND RegimenFiscalReceptor LIKE '%{0}%'", RegimenFiscalReceptor) + End If + + Dim Dv As New DataView(DirectCast(Application("GlobalDTSATUsosCFDI"), DataTable), Tipo.ToString(), " UsoCFDIDescripcion", DataViewRowState.CurrentRows) GlobalDTSATUsosCFDI = Dv.ToTable Dv.Dispose() Else diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb index 23b1710e4..67bf2bda2 100644 --- a/App_Code/ClsRH.vb +++ b/App_Code/ClsRH.vb @@ -7180,6 +7180,31 @@ chkAplicaVacacion As Boolean, chkAplicaIncapacidad As Boolean, chkAplicaRetardo #End Region + + Public Function UpPersonalSupervisorMasiva(CveEmpresa As Integer, CveUsuario As Integer, registros As List(Of RequestUpSupervisorMasiva)) As Boolean + Dim Retorno As Boolean = False + Dim xmlProductos As System.Xml.Linq.XDocument = Nothing + If registros IsNot Nothing AndAlso registros.Count > 0 Then + xmlProductos = New System.Xml.Linq.XDocument(New System.Xml.Linq.XElement("registros", From x In registros Select New System.Xml.Linq.XElement("registro", New System.Xml.Linq.XElement("CvePersonal", x.CvePersonal), New System.Xml.Linq.XElement("CveUsuario", x.CveUsuario), New System.Xml.Linq.XElement("CveCliente", x.CveCliente)))) + End If + Data = New DataTable + SqlDataAdapter("PA_RH_PersonalSupervisorMasivaUP") + With SqlAdapter.SelectCommand.Parameters + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@xmlRegistros", SqlDbType.Xml).Value = xmlProductos.ToString() + End With + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch Ex1 As SqlException + Me.OnError("Ocurrió un error al guardar los supervisores.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + Catch ex As Exception + OnError("Ocurrió un error al guardar los supervisores.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + Return Retorno + End Function + 'Public msgsError As New StringBuilder() 'Public Sub OnError(Mensaje As String, Exeption As Exception, Optional InfoAdicional As String = "") ' GuardaLog(String.Format("{0} DESCRIPCIÓN DETALLADA: {1} {2} {3}", Mensaje, Exeption.ToString, vbCrLf, InfoAdicional)) @@ -7236,3 +7261,8 @@ Public Class RequestUpAsistenciaDetalle Public Property CveSubProyecto As Integer Public Property Motivo As String End Class +Public Class RequestUpSupervisorMasiva + Public Property CvePersonal As Integer + Public Property CveUsuario As Integer + Public Property CveCliente As Integer +End Class \ No newline at end of file diff --git a/App_Code/ClsVentas.vb b/App_Code/ClsVentas.vb index 26432a79f..1e17d5ae3 100644 --- a/App_Code/ClsVentas.vb +++ b/App_Code/ClsVentas.vb @@ -745,7 +745,8 @@ Public Class ClsVentas Public Function UpdateEstatusFactura(Estatus As Integer, FolioFiscal As String, SelloSAT As String, FechaCancelacion As DateTime, CveVenta As Integer, Optional IdPolizaCancelacion As Integer = -1, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional CveUsuarioCambiaEstatus As Integer = -1, Optional FechaCambioEstatus As String = "-1", Optional RFCReceptor As String = "-1", - Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", Optional EstadoCancelacion As String = "") As Boolean + Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", Optional EstadoCancelacion As String = "", + Optional CveEstadoCancelacion As Integer = 0) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_VentasUpdateEstatus") @@ -765,6 +766,7 @@ Public Class ClsVentas .Add("@CveMotivoCancelacion", SqlDbType.Int).Value = CveMotivoCancelacion .Add("@MotivoCancelacion", SqlDbType.VarChar).Value = MotivoCancelacion .Add("@EstadoCancelacion", SqlDbType.VarChar).Value = EstadoCancelacion + .Add("@CveEstadoCancelacion", SqlDbType.TinyInt).Value = CveEstadoCancelacion End With Try @@ -855,7 +857,7 @@ Public Class ClsVentas Return Retorno End Function - Public Function UpdateCancelaVenta(CveVenta As Integer, FechaCancelacion As DateTime, SelloCancelacionSAT As String, CveEmpresa As Integer, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional EstadoCancelacion As String = "") As Boolean + Public Function UpdateCancelaVenta(CveVenta As Integer, FechaCancelacion As DateTime, SelloCancelacionSAT As String, CveEmpresa As Integer, Optional CvePAC As Integer = -1, Optional CveEstatusRefacturacion As Integer = 0, Optional EstadoCancelacion As String = "", Optional CveEstadoCancelacion As Integer = 0) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Vta_VentasCancelacion") @@ -868,6 +870,7 @@ Public Class ClsVentas .Add("@CvePAC", SqlDbType.SmallInt).Value = CvePAC .Add("@CveEstatusRefacturacion", SqlDbType.TinyInt).Value = CveEstatusRefacturacion .Add("@EstadoCancelacion", SqlDbType.VarChar).Value = EstadoCancelacion + .Add("@CveEstadoCancelacion", SqlDbType.TinyInt).Value = CveEstadoCancelacion .Add("@Cancelada", SqlDbType.SmallInt).Direction = ParameterDirection.Output End With diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index fcad20aec..087d8e134 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -4636,8 +4636,8 @@ Namespace Modelos ''' Cancela la factura para poder realizar la refacturacion ''' ''' - Public Function CancelarPorRefacturacion(CveMotivoCancelacion As Integer, Motivo As String, Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = False) As MCancelacionVentaMensaje - Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, FolioSustitucion:=FolioSustitucion, ValidarSAT:=ValidarSAT) + Public Function CancelarPorRefacturacion(CveMotivoCancelacion As Integer, Motivo As String, Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = False, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje + Return CancelarVenta(Me, Me.UsuarioActual, EsRefacturacion:=True, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, FolioSustitucion:=FolioSustitucion, ValidarSAT:=ValidarSAT, CveEstadoCancelacion:=CveEstadoCancelacion) End Function ''' ''' Cancela la factura y realiza las operaciones correspondientes @@ -4645,15 +4645,15 @@ Namespace Modelos ''' ''' ''' - Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True) As MCancelacionVentaMensaje + Public Function CancelarFactura(RealizarDevolucionAlmacen As Boolean, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveMotivoCancelacion As Integer = -1, Optional Motivo As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje 'Comprobante emitido con errores sin relación - Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo) + Return CancelarVenta(Me, Me.UsuarioActual, RealizarDevolucionAlmacen:=RealizarDevolucionAlmacen, ListaRemisionesCancelar:=ListaRemisionesCancelar, CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=Motivo, CveEstadoCancelacion:=CveEstadoCancelacion) End Function Private Function CancelarVenta(ObjFactura As Modelos.Factura, UsuarioActual As Usuario, Optional EsRefacturacion As Boolean = False, Optional RealizarDevolucionAlmacen As Boolean = False, - Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, - Optional FechaCancelacion As String = "-1", Optional AcuseCancelacion As String = "", - Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True) As MCancelacionVentaMensaje + Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, Optional CveEstatusFacturaAsignado As Integer = -1, Optional FechaCancelacion As String = "-1", + Optional AcuseCancelacion As String = "", Optional CveMotivoCancelacion As Integer = -1, Optional MotivoCancelacion As String = "", + Optional FolioSustitucion As String = "", Optional ValidarSAT As Boolean = True, Optional CveEstadoCancelacion As Integer = 0) As MCancelacionVentaMensaje Dim Retorno As New MCancelacionVentaMensaje() Dim ErrorList As New List(Of String) @@ -4801,6 +4801,7 @@ Namespace Modelos Dim CveEstatusRefacturacion As Integer = If(ObjFactura.CveEstatusRefacturacion <= 0, 0, ObjFactura.CveEstatusRefacturacion) + If Not EsRefacturacion Then CveEstatusRefacturacion = 0 End If @@ -4828,7 +4829,7 @@ Namespace Modelos Dim Continuar As Boolean = False Dim ContinuarCancelacion As Boolean = False Dim ObtenerAcuse As Boolean = False - Dim RequiereAceptacion As Boolean = False + Dim RequiereAceptacion As Boolean = True Dim Mensaje As String = "" Dim CveSATMotivoCancelacion As Integer = -1 @@ -4845,6 +4846,14 @@ Namespace Modelos CveEstatusFacturaAsignado = 23 End If + 'SI NO SE ASIGNA EL ESTATUS DE CANCELACION, TOMA EL GUARADO DE LA FACTURA + CveEstadoCancelacion = If(CveEstadoCancelacion <= 0, ObjFactura.CveEstadoCancelacion, CveEstadoCancelacion) + + 'SI YA SE CONOCE EL ESTADO DE CANCELACION, NO LO VERIFICA ANTE EL SAT + If CveEstadoCancelacion > 0 Then + ValidarSAT = False + End If + If CveEstatusFacturaAsignado <= 0 Then Try If ObjFactura.FolioFiscal <> "" AndAlso (UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1) Then @@ -4919,22 +4928,26 @@ Namespace Modelos If Vigencia.EstatusCancelacion.ToUpper() = "EN PROCESO" Then CveEstatus = 20 ContinuarCancelacion = False + RequiereAceptacion = True ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then CveEstatus = 20 ContinuarCancelacion = True RequiereAceptacion = True ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then ContinuarCancelacion = True + RequiereAceptacion = False CveEstatus = 5 End If Else If Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then ContinuarCancelacion = True + RequiereAceptacion = False CveEstatus = 5 Else CveEstatus = 20 ContinuarCancelacion = False + RequiereAceptacion = True CancelacionFecha = Now.Date CancelacionAcuse = "" End If @@ -4951,10 +4964,19 @@ Namespace Modelos CancelacionFecha = Now.Date CancelacionAcuse = "" - Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFactura.FechaCP, Now) + 'VERICA SI YA SE TIENE EL ESTADO DE CANCELACION, PARA SABER SI REQUIERE ACEPTACION + If CveEstadoCancelacion > 0 Then + If CveEstadoCancelacion = 1 Then + RequiereAceptacion = False + ElseIf CveEstadoCancelacion = 2 Then + RequiereAceptacion = True + End If + Else + Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFactura.FechaCP, Now) - If ObjFactura.Total < 5000D OrElse diasTimbrado <= 3 OrElse ObjFactura.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then - RequiereAceptacion = False + If ObjFactura.Total < 1000D OrElse diasTimbrado <= 1 OrElse ObjFactura.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then + RequiereAceptacion = False + End If End If End If @@ -5596,13 +5618,14 @@ Namespace Modelos If CveEstatus.Contiene(4, 5) Then - If Not ObjVentas.UpdateCancelaVenta(CveVenta, CancelacionFecha, CancelacionAcuse, UsuarioActual.CveEmpresa, CvePACCancelacion, CveEstatusRefacturacion, EstadoCancelacion:=EstadoCancelacion) Then + If Not ObjVentas.UpdateCancelaVenta(CveVenta, CancelacionFecha, CancelacionAcuse, UsuarioActual.CveEmpresa, CvePACCancelacion, CveEstatusRefacturacion, EstadoCancelacion:=EstadoCancelacion, CveEstadoCancelacion:=CveEstadoCancelacion) Then ErrorCancelar = True MensajeError = "Ocurrió un error al guardar el estatus de cancelación." End If Else If Not ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, CancelacionAcuse, CancelacionFecha, CveVenta, IDPoliza, CvePAC:=CvePACCancelacion, CveEstatusRefacturacion:=CveEstatusRefacturacion, - CveUsuarioCambiaEstatus:=UsuarioActual.CveUsuario, FechaCambioEstatus:=Now.ToString("yyyy-MM-dd HH:mm:ss.mmm"), CveMotivoCancelacion:=CveMotivoCancelacion, MotivoCancelacion:=MotivoCancelacion, EstadoCancelacion:=EstadoCancelacion) Then + CveUsuarioCambiaEstatus:=UsuarioActual.CveUsuario, FechaCambioEstatus:=Now.ToString("yyyy-MM-dd HH:mm:ss.mmm"), CveMotivoCancelacion:=CveMotivoCancelacion, + MotivoCancelacion:=MotivoCancelacion, EstadoCancelacion:=EstadoCancelacion, CveEstadoCancelacion:=CveEstadoCancelacion) Then ErrorCancelar = True MensajeError = "Ocurrió un error al guardar el estatus de cancelación." End If @@ -6257,6 +6280,7 @@ Namespace Modelos Public Property RFCReceptor As String = "" Public Property ServicioDomicilio As Boolean Public Property CveEstatusRefacturacion As Integer = 0 + Public Property CveEstadoCancelacion As Integer = 0 Public Property NuevaFactura As Integer Public Property EnviarCorreo As Boolean = False Public Property ErrorList As List(Of String) diff --git a/Bancos/IE.aspx b/Bancos/IE.aspx index 53cd7fdc2..bc6b90616 100644 --- a/Bancos/IE.aspx +++ b/Bancos/IE.aspx @@ -1370,9 +1370,9 @@ - + - + diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb index 8290aef4f..f3eade517 100644 --- a/Bancos/IE.aspx.vb +++ b/Bancos/IE.aspx.vb @@ -4606,7 +4606,7 @@ Partial Class Bancos_IE End If - If Not ErrorCancelarComplemento Then + If CveMotivoCancelacion > 0 AndAlso CveSATMotivoCancelacion > 0 Then Dim ObjCancelacion As New Timbrado If EstatusSATCancelado(FolioFiscalCancelar, UsuarioActual.Empresa.RFC, RFCReceptorCancelar) Then @@ -4621,7 +4621,7 @@ Partial Class Bancos_IE Else If ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscalCancelar, 0, RFCReceptorCancelar, UsuarioActual.Empresa.RFC, CvePACCancelacion, CveSATMotivoCancelacion:=CveSATMotivoCancelacion) Then - If Banc.UpdateComplementoPago(CveComplementoPagoCancelar, "-1", -1, UsuarioActual.CveEmpresa, 2, CvePACCancelacion, FechaCancelacion:=ObjCancelacion.CancelacionFecha, SelloCancelacion:=ObjCancelacion.CancelacionAcuse) Then + If Banc.UpdateComplementoPago(CveComplementoPagoCancelar, "-1", -1, UsuarioActual.CveEmpresa, 2, CvePACCancelacion, FechaCancelacion:=ObjCancelacion.CancelacionFecha, SelloCancelacion:=ObjCancelacion.CancelacionAcuse, CveSATMotivoCancelacion:=CveSATMotivoCancelacion) Then CargaComplementosPago() RegistraScript("$('#ModalCancelarComplemetno').modal('hide');") ErrorCancelarComplemento = False @@ -5902,16 +5902,20 @@ Partial Class Bancos_IE e.Row.FCDropDownList("DdlMotivoCancelacion").DataBind() e.Row.FCDropDownList("DdlMotivoCancelacion").Items.Insert(0, New ListItem("Seleccione Uno", "-1")) + If e.Row.DataKey("Estatus").ToEntero = 1 Then + e.Row.FCLiteral("LtlMotivoCancelacion").Visible = True + End If + Else e.Row.FCLinkButton("LnkCancelarComplemetno").Visible = False e.Row.FCDropDownList("DdlMotivoCancelacion").Visible = False + + If e.Row.DataKey("Estatus").ToEntero = 2 Then + e.Row.FCLiteral("LtlMotivoCancelacion").Visible = True + End If End If - If e.Row.DataKey("Estatus").ToEntero = 2 Then - e.Row.FCLiteral("LtlMotivoCancelacion").Visible = True - Else - e.Row.FCDropDownList("DdlMotivoCancelacion").Visible = False - End If + ElseIf e.Row.DataKey("Tipo") = "Egs" Then diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index df4a7914f..3f722b885 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -1016,7 +1016,7 @@ Partial Class PopUpVerFactura Private Sub ImprimeFormatoCartaPorte(CveMovimiento As Integer) If CveMovimiento > 0 Then Dim ObjInv As New ClsInventarios - + Dim SerieFolio As String = "" Dim DomicilioSucursal As String = "" Dim LugarFecha As String = "" diff --git a/Nomina/Nomina.aspx.cs b/Nomina/Nomina.aspx.cs index f56d87ecc..77e8f2368 100644 --- a/Nomina/Nomina.aspx.cs +++ b/Nomina/Nomina.aspx.cs @@ -22,6 +22,28 @@ public partial class Nomina_Nomina2 : ClsPaginas { get { return 5; } } + + private DateTime FechaInicioPeriodo + { + get + { + if (ViewState["FechaInicioPeriodo"] == null) { return DateTime.Now; } + else { return (DateTime)ViewState["FechaInicioPeriodo"]; } + } + + set { ViewState["FechaInicioPeriodo"] = value; } + } + private DateTime FechaFinPeriodo + { + get + { + if (ViewState["FechaFinPeriodo"] == null) { return DateTime.Now.AddDays(1); } + else { return (DateTime)ViewState["FechaFinPeriodo"]; } + } + + set { ViewState["FechaFinPeriodo"] = value; } + } + private DataTable dtNomConceptos { get @@ -422,7 +444,6 @@ public partial class Nomina_Nomina2 : ClsPaginas dtempleados = null; dtConceptos = null; DataTable dtPeriodo = new DataTable(); - DataTable dtasistencia = new DataTable(); LnkAutorizar.Visible = false; Estatus = 5; if (FiltCvePeriodo > 0) @@ -438,6 +459,10 @@ public partial class Nomina_Nomina2 : ClsPaginas int CvePrePolizaProvisionAsimilados = drow["CvePrePolizaAsimilables"].ToString().ToEntero(); int CvePrePolizaProrrateo = drow["CvePrePolizaProrrateo"].ToString().ToEntero(); + + FechaInicioPeriodo = (DateTime)dtPeriodo.Rows[0]["FechaInicio"]; + FechaFinPeriodo = (DateTime)dtPeriodo.Rows[0]["FechaFin"]; + //LnkConceptoEmpleado.Visible = (Estatus == 1); LnkRegistrarProvision.Visible = (Estatus >= 2);//&& (CvePrePolizaProvision <= 0 || UsuarioActual.CveUsuario == 100); LnkRegistrarProvision.Text = CvePrePolizaProvision <= 0 ? "Registrar provisión" : "Regenerar provisión"; @@ -466,7 +491,7 @@ public partial class Nomina_Nomina2 : ClsPaginas dtempleadosConceptos = objnom.DTSetResultados.Tables[4]; dtConceptos = objnom.DTSetResultados.Tables[0]; dtPeriodo = objnom.DTSetResultados.Tables[1]; - dtasistencia = objnom.DTSetResultados.Tables[2]; + //dtasistencia = objnom.DTSetResultados.Tables[2]; CvePeriodoSeleccionado = FiltCvePeriodo; continuar = true; } @@ -826,74 +851,87 @@ public partial class Nomina_Nomina2 : ClsPaginas GvNominas.DataSource = null; GvNominas.DataBind(); } - if (cargaasistencia) - { - if (dtPeriodo != null && dtPeriodo.Rows.Count > 0) - { - - DateTime FechaInicio = (DateTime)dtPeriodo.Rows[0]["FechaInicio"]; - DateTime FechaFin = (DateTime)dtPeriodo.Rows[0]["FechaFin"]; - StringBuilder gvasistencia = new StringBuilder(); - gvasistencia.Append("
"); - if (true) - { - DateTime fecha = FechaInicio; - - gvasistencia.Append(""); - gvasistencia.Append(""); - while (fecha <= FechaFin) - { - gvasistencia.AppendFormat("", fecha); - fecha = fecha.AddDays(1); - } - gvasistencia.Append(""); - } - string tipo = ""; - foreach (DataRow rempl in dtempleados.FiltraParametros("CvePersonal>0").Rows) - { - int CvePersonal = rempl["CvePersonal"].ToString().ToEntero(); - string nombre = rempl["Nombre"].ToString(); - string Codigo = rempl["Codigo"].ToString(); - DateTime fecha = FechaInicio; int HorasDobles, HorasTriples; - gvasistencia.Append(""); - gvasistencia.AppendFormat("", CvePersonal, nombre, Codigo); - while (fecha <= FechaFin) - { - DataRow drow = dtasistencia.FiltroPrimero(string.Format("Fecha='{0:yyyy/MM/dd}' AND CvePersonal={1}", fecha, CvePersonal)); - tipo = "-"; - if (drow != null) - { - tipo = string.Format("{0} ({1}%)", drow["Tipo"], drow["PorcentajePago"]); - HorasDobles = drow["HorasDobles"].ToString().ToEntero(); - HorasTriples = drow["HorasTriples"].ToString().ToEntero(); - if (HorasDobles > 0) - { - - tipo = string.Format("{0}
{1} horas dobles", tipo, HorasDobles); - } - if (HorasTriples > 0) - { - - tipo = string.Format("{0}
{1} horas triple", tipo, HorasTriples); - } - drow.Delete(); - } - gvasistencia.AppendFormat("", tipo, CvePersonal, fecha); - fecha = fecha.AddDays(1); - } - gvasistencia.Append(""); - } - gvasistencia.Append("
Nombre{0:dd/MM/yyyy}
{2} {1} {0}
"); - ltlGvAsistencia.Text = gvasistencia.ToString(); - } - } #endregion + + if (cargaasistencia && dtPeriodo != null && dtPeriodo.Rows.Count > 0) + { + cargarasistencia(); + } if (dtempleados != null) { LnkAutorizar.Visible = (dtempleados.COUNT("CvePersonal", "CvePersonal > 0 AND NomAutorizado =0") > 0) || (Estatus < 2); LnkCancelarNomina.Visible = (dtempleados.COUNT("CvePersonal", "CvePersonal > 0 AND NomAutorizado =1 AND SeTimbro=0") > 0); } UpDatos.Update(); + } + public void cargarasistencia() + { + + + + + DateTime FechaInicio = FechaInicioPeriodo; + DateTime FechaFin = FechaFinPeriodo; + DataTable dtasistencia; + using (ClsNominas objnom = new ClsNominas()) + { + objnom.GetAsistenciabetweendate(UsuarioActual.CveEmpresa, FechaInicio, FechaFin); + dtasistencia = objnom.DtResultados; + } + StringBuilder gvasistencia = new StringBuilder(); + gvasistencia.Append("
"); + if (true) + { + DateTime fecha = FechaInicio; + + gvasistencia.Append(""); + gvasistencia.Append(""); + while (fecha <= FechaFin) + { + gvasistencia.AppendFormat("", fecha); + fecha = fecha.AddDays(1); + } + gvasistencia.Append(""); + } + string tipo = ""; + foreach (DataRow rempl in dtempleados.FiltraParametros("CvePersonal>0").Rows) + { + int CvePersonal = rempl["CvePersonal"].ToString().ToEntero(); + string nombre = rempl["Nombre"].ToString(); + string Codigo = rempl["Codigo"].ToString(); + DateTime fecha = FechaInicio; int HorasDobles, HorasTriples; + gvasistencia.Append(""); + gvasistencia.AppendFormat("", CvePersonal, nombre, Codigo); + while (fecha <= FechaFin) + { + DataRow drow = dtasistencia.FiltroPrimero(string.Format("Fecha='{0:yyyy/MM/dd}' AND CvePersonal={1}", fecha, CvePersonal)); + tipo = "-"; + if (drow != null) + { + tipo = string.Format("{0} ({1}%)", drow["Tipo"], drow["PorcentajePago"]); + HorasDobles = drow["HorasDobles"].ToString().ToEntero(); + HorasTriples = drow["HorasTriples"].ToString().ToEntero(); + if (HorasDobles > 0) + { + + tipo = string.Format("{0}
{1} horas dobles", tipo, HorasDobles); + } + if (HorasTriples > 0) + { + + tipo = string.Format("{0}
{1} horas triple", tipo, HorasTriples); + } + drow.Delete(); + } + gvasistencia.AppendFormat("", tipo, CvePersonal, fecha); + fecha = fecha.AddDays(1); + } + gvasistencia.Append(""); + } + gvasistencia.Append("
Nombre{0:dd/MM/yyyy}
{2} {1} {0}
"); + ltlGvAsistencia.Text = gvasistencia.ToString(); + + } private void setGVNominas() { @@ -1240,7 +1278,7 @@ public partial class Nomina_Nomina2 : ClsPaginas if (CveNomina > 0) { - + DdlMotivoCancelacion.Items.Insert(0, new ListItem("Seleccione", "-1")); using (ClsNominas Nom = new ClsNominas()) { @@ -1256,7 +1294,7 @@ public partial class Nomina_Nomina2 : ClsPaginas string SerieFolio = Nom.SerieFolio; DataRow rowc = get_GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa).FiltroPrimero(string.Format("CveMotivoCancelacion={0}", DdlMotivoCancelacion.SelectedValue)); int CveMotivoCancelacion = -1; - if(rowc != null) + if (rowc != null) { CveMotivoCancelacion = rowc["CveSATMotivoCancelacion"].ToString().ToEntero(); } diff --git a/RH/ActualizacionMasiva.aspx b/RH/ActualizacionMasiva.aspx index 8e3367d30..6b748fd11 100644 --- a/RH/ActualizacionMasiva.aspx +++ b/RH/ActualizacionMasiva.aspx @@ -3,6 +3,51 @@ + @@ -10,19 +55,37 @@ Cargas Masivas -
  • Carga Masiva
  • +
  • + Carga Masiva
  • -
    -
    -
    - - - -
    -
    +
    +
    +
    + +
    + Turno: +
    + + + +
    + + +
    + + + +
    + +
    + + + +
    +
      <%--
    • Cliente:
    • --%> -
    • Proyecto: - - - -
    • -
    • SubProyecto: - - - -
    • -
    •   Turno: - - - -
    + +
    + + + +
    diff --git a/RH/CatPersonal.aspx.vb b/RH/CatPersonal.aspx.vb index 5ffc3dff2..6c56fa07f 100644 --- a/RH/CatPersonal.aspx.vb +++ b/RH/CatPersonal.aspx.vb @@ -62,7 +62,7 @@ Partial Class RH_CatPersonal CargaJornada() CargaEstados() CargaSatRiesgoPuesto() - + CargaMedioTransporte() LoadDefaultValues() @@ -288,6 +288,18 @@ Partial Class RH_CatPersonal 'End If UpSubProyecto.Update() End Sub + Private Sub CargaMedioTransporte() + Dim objgenerales As New ClsGenerales() + objgenerales.GetMediosTransporte(-1, True, UsuarioActual.CveEmpresa, -1, -1, -1, -1) + DdlMedioTransporte.Items.Clear() + DdlMedioTransporte.DataSource = objgenerales.DtResultados + DdlMedioTransporte.DataBind() + 'filtro por usuario subproyecto/sucursal vsh + 'If UsuarioActual.CveEmpresa = 7 Then + ' DdlSubProyectoAsignado.DataSource = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1).FiltraParametros($"CveSubProyecto = { UsuarioActual.CveSubProyecto }") + 'End If + 'UpSubProyecto.Update() + End Sub Private Sub CargaTipoCentroCosto() diff --git a/Scripts/custom.js b/Scripts/custom.js index 6be5230a7..d08183fbc 100644 --- a/Scripts/custom.js +++ b/Scripts/custom.js @@ -71,15 +71,21 @@ function log(mensaje) { } function FiltrarTabla(idtxt, idtable, idcontador) { if ($('#' + idtxt).val() == '') { $('table#' + idtable + ' tr').css('display', 'table-row'); } - else { $('table#' + idtable + ' tr:not(.ADtr)').css('display', 'none'); $('table#' + idtable + ' tr:contains("' + $('#' + idtxt).val() + '")').css('display', 'table-row'); } + else { + $('table#' + idtable + ' tr:not(.ADtr)').css('display', 'none'); $('table#' + idtable + ' tr:contains("' + $('#' + idtxt).val() + '")').css('display', 'table-row'); + $('div.ADScroller .ADScroller-header table#' + idtable + ' tr:not(.ADtr)').css('display', ''); + } if ($('#' + idcontador).length > 0) { $('#' + idcontador).html($('#' + idtable + ' tr:visible').length); } } function FiltrarTablaV2(idtxt, idtable, idcontador) { - if ($(idtxt).val() == '') { $(idtable + ' tr').css('display', 'table-row'); } - else { $(idtable + ' tr:not(.ADtr)').css('display', 'none'); $(idtable + ' tr:contains("' + $(idtxt).val() + '")').css('display', 'table-row'); } + if ($(idtxt).val() == '') { $(idtable + ' tr').css('display', ''); } + else { + $(idtable + ' tr:not(.ADtr)').css('display', 'none'); $(idtable + ' tr:contains("' + $(idtxt).val() + '")').css('display', ''); + $('div.ADScroller .ADScroller-header '+idtable + ' tr:not(.ADtr)').css('display', ''); + } if ($('#' + idcontador).length > 0) { $('#' + idcontador).html($(idtable + ' tr:visible').length); } diff --git a/Ventas/ClientesAbonar.aspx b/Ventas/ClientesAbonar.aspx index 332b5e7ed..531702304 100644 --- a/Ventas/ClientesAbonar.aspx +++ b/Ventas/ClientesAbonar.aspx @@ -187,11 +187,18 @@
    -
    - -
    +
    +
    Otros Ingresos:
    +
    + + +
    Liquidación:
    +
    + +
    +
    @@ -264,6 +271,8 @@ DataKeyNames="TipoDocto,CveVenta,CveCliente,SerieFolio,Original,SubTotal,IVA,IEPS,RetIVA,RetISR,Num3,CveSubProyecto,CveMoneda,Saldo,TipoCambio, RFC,UUID,Fecha,PorcentajeIVA,DescuentoProntoPago,CveTipoRetencion,Descuento,ClaveMetodoPagoSAT" CssClass="table table-striped table-advance table-hover Widthall" Style="text-align: center;" GridLines="None"> + + <%--0--%> @@ -272,58 +281,84 @@ + <%--1--%> Venta - - <%----%> + <%--2--%> - Fecha Venta + Tipo
    Docto
    + + + +
    + <%--3--%> + + Fecha
    Venta
    + <%--4--%> - Fecha Vencimiento + Fecha
    Vencimiento
    + <%--5--%> - Días Vencidos + Días
    Vencidos
    -   +
    - - + <%--6--%> + + Método
    de Pago
    + + + +
    + <%--7--%> + + Forma
    de Pago
    + + + +
    + <%--8--%> - Monto Compra + Monto
    Compra
     
    + <%--9--%>   + <%--10--%> Abonado   + <%--11--%> Saldo   + <%--12--%> Abonar @@ -331,6 +366,7 @@ + <%--13--%> Ot. Ing. @@ -338,33 +374,96 @@ + <%--14--%> - Descuento Pronto Pago + Descuento
    Pronto Pago
     
    - + <%--15--%> + + Generar
    NC
    + + + <%--16--%> + + Col. 1 + + + + + <%--17--%> + + Col. 2 + + + + + <%--18--%> + + Col. 3 + + + + + <%--19--%> + + Col. 4 + + + + + <%--20--%> + + Col. 5 + + + + + <%--21--%> + + Col. 6 + + + + + <%--22--%> + + Col. 7 + + + + + <%--23--%> + + Total
    Liquidación
    + + + +
    + + <%--24--%> Auxiliar + <%--25--%> CveVenta - - + <%--26--%> - Complemento Pago + Complemento
    Pago
    @@ -508,7 +607,7 @@ diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index bba882c29..207f07c10 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -257,7 +257,7 @@ Partial Class Ventas_ClientesAbonar IdCuentaBancaria = 0 - TxtOtrosImportes.Attributes.Add("onKeyUp", String.Format("FnSuma(this,{0},{1});", "TxtTotal", 0)) + TxtOtrosImportes.Attributes.Add("onKeyUp", String.Format("FnSuma(this,{0},{1},-1);", "TxtTotal", 0)) If CveMoneda > 0 Then LbTipoMoneda.Text = String.Format("Pago en {0}", GlobalDTMonedas.FiltraParametros(String.Format("CveMoneda = {0}", CveMoneda)).Rows(0)("Moneda")) @@ -292,6 +292,12 @@ Partial Class Ventas_ClientesAbonar RVTxtFechaDocumento.MaximumValue = Now.ToString("dd/MM/yyyy") + + If UsuarioActual.Empresa.Funcionalidad(590) = "1" Then + DvLiquidacion1.Visible = True + DvLiquidacion2.Visible = True + End If + End If If (CveMonedaFiltro = 2 And ChkPagarPesos.Checked) Then @@ -497,6 +503,7 @@ Partial Class Ventas_ClientesAbonar End Sub Protected Sub GvCxC_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvCxC.RowDataBound + If e.Row.RowType = DataControlRowType.DataRow Then Dim moneda As Integer = 0 If e.Row.RowIndex = 0 Then @@ -507,6 +514,19 @@ Partial Class Ventas_ClientesAbonar e.Row.Cells(3).Visible = False e.Row.Cells(4).Visible = False e.Row.BackColor = Drawing.Color.LightGray + + + e.Row.FCTextBox("TxtLiquidacionCol1").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol2").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol3").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol4").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol5").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol6").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol7").Visible = False + e.Row.FCTextBox("TxtLiquidacionCol8").Visible = False + + + End If If e.Row.RowIndex = 1 Then e.Row.Cells(0).Width = Unit.Pixel(25) @@ -548,9 +568,9 @@ Partial Class Ventas_ClientesAbonar End Select If e.Row.DBCampo("DescuentoProntoPago").ToDecimal() > 0 Then - e.Row.FCCheckBox("Chk").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1}); FnCambia({2},this,{1},0,{3},{4}); FnSeleccionaNC({5},{6},{0});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo"), e.Row.FCCheckBox("Chk").ClientID, CveMonedaFiltro, moneda, e.Row.FCCheckBox("Chk").ClientID, e.Row.FCCheckBox("ChkGenerarNC").ClientID)) + e.Row.FCCheckBox("Chk").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1},{5}); FnCambia({2},this,{1},0,{3},{4}); FnSeleccionaNC({5},{6},{0});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo"), e.Row.FCCheckBox("Chk").ClientID, CveMonedaFiltro, moneda, e.Row.FCCheckBox("Chk").ClientID, e.Row.FCCheckBox("ChkGenerarNC").ClientID, e.Row.DBCampo("CveVenta"))) Else - e.Row.FCCheckBox("Chk").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1}); FnCambia({2},this,{1},0,{3},{4});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo"), e.Row.FCCheckBox("Chk").ClientID, CveMonedaFiltro, moneda)) + e.Row.FCCheckBox("Chk").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1},{5}); FnCambia({2},this,{1},0,{3},{4},{5});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo"), e.Row.FCCheckBox("Chk").ClientID, CveMonedaFiltro, moneda, e.Row.DBCampo("CveVenta"))) End If If Not UsuarioActual.Empresa.Funcionalidad(536) = "1" Then @@ -578,9 +598,32 @@ Partial Class Ventas_ClientesAbonar If e.Row.DBCampo("DescuentoProntoPago").ToDecimal() > 0 AndAlso e.Row.DBCampo("DiasVencidos").ToEntero() <= 0 Then e.Row.FCCheckBox("ChkGenerarNC").Visible = True - e.Row.FCCheckBox("ChkGenerarNC").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1}); FnCambia({2},this,{1},0,{3},{4}); FnEditarImporte({2}, {0});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo").ToDecimal - e.Row.DBCampo("DescuentoProntoPago").ToDecimal, e.Row.FCCheckBox("ChkGenerarNC").ClientID, CveMonedaFiltro, moneda)) + e.Row.FCCheckBox("ChkGenerarNC").Attributes.Add("onclick", String.Format("FnSuma(this,{0},{1},{5}); FnCambia({2},this,{1},0,{3},{4}); FnEditarImporte({2}, {0});", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo").ToDecimal - e.Row.DBCampo("DescuentoProntoPago").ToDecimal, e.Row.FCCheckBox("ChkGenerarNC").ClientID, CveMonedaFiltro, moneda, e.Row.DBCampo("CveVenta"))) End If + e.Row.FCTextBox("TxtLiquidacionCol1").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol2").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol3").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol4").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol5").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol6").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol7").Attributes.Add("class", $"ClsSelLiquidacion ClsSelLiquidacionVenta{e.Row.DBCampo("CveVenta").ToEntero}") + e.Row.FCTextBox("TxtLiquidacionCol8").Attributes.Add("class", $"ClsSelLiquidacionVentaTotal{e.Row.DBCampo("CveVenta").ToEntero}") + + + e.Row.FCTextBox("TxtLiquidacionCol1").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol2").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol3").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol4").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol5").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol6").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + e.Row.FCTextBox("TxtLiquidacionCol7").Attributes.Add("onkeyup", $"SumaLiquidacion(this,{e.Row.DBCampo("CveVenta").ToString},{CveMonedaFiltro},{ moneda})") + + + + + + Else e.Row.FCTextBox("TxtAbonar").Visible = False e.Row.FCTextBox("TxtComision").Visible = False @@ -823,7 +866,9 @@ Partial Class Ventas_ClientesAbonar 'inserto las ventas que voy a pagar For Each gvr As GridViewRow In GvCxC.Rows + If gvr.FCCheckBox("Chk").Checked Then + Dim ObjFactura As Modelos.Factura = Nothing If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then @@ -861,6 +906,7 @@ Partial Class Ventas_ClientesAbonar If gvr.DataKey("TipoDocto") = "Ant" AndAlso UsuarioActual.CveEmpresa.Contiene(1, 119, 158) Then EsAnticipoEspecial = True If dtConceptos IsNot Nothing Then + For Each Row As DataRow In dtConceptos.Rows Dim ConceptoContable = Row("CveConcepto").ToString.ToEntero @@ -1487,7 +1533,84 @@ Partial Class Ventas_ClientesAbonar End If End If + Next + + + Dim ImporteLiquidacion1 As Decimal = gvr.FCTextBox("TxtLiquidacionCol1").Text.ToDecimal + Dim ImporteLiquidacion2 As Decimal = gvr.FCTextBox("TxtLiquidacionCol2").Text.ToDecimal + Dim ImporteLiquidacion3 As Decimal = gvr.FCTextBox("TxtLiquidacionCol3").Text.ToDecimal + Dim ImporteLiquidacion4 As Decimal = gvr.FCTextBox("TxtLiquidacionCol4").Text.ToDecimal + Dim ImporteLiquidacion5 As Decimal = gvr.FCTextBox("TxtLiquidacionCol5").Text.ToDecimal + Dim ImporteLiquidacion6 As Decimal = gvr.FCTextBox("TxtLiquidacionCol6").Text.ToDecimal + Dim ImporteLiquidacion7 As Decimal = gvr.FCTextBox("TxtLiquidacionCol7").Text.ToDecimal + + Dim CveClasificacionCol1 As Integer = 21267 + Dim CveClasificacionCol2 As Integer = 21229 + Dim CveClasificacionCol3 As Integer = 21520 + Dim CveClasificacionCol4 As Integer = 21519 + Dim CveClasificacionCol5 As Integer = 21547 + Dim CveClasificacionCol6 As Integer = 21572 + Dim CveClasificacionCol7 As Integer = 21571 + + Dim CveSubProyectoLiquidacion As Integer = gvr.DataKey("CveSubProyecto").ToEntero + + Dim CveConceptoLiquidacion As Integer = 51 + + If ImporteLiquidacion1 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion1, "Liquidacion Col 1", CveConceptoLiquidacion, "Liquidacion Col 2", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion1 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol1) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + If ImporteLiquidacion2 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion2, "Liquidacion Col 2", CveConceptoLiquidacion, "Liquidacion Col 2", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion2 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol2) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + If ImporteLiquidacion3 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion3, "Liquidacion Col 4", CveConceptoLiquidacion, "Liquidacion Col 3", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion3 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol3) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + + If ImporteLiquidacion4 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion4, "Liquidacion Col 4", CveConceptoLiquidacion, "Liquidacion Col 4", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion4 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol4) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + + + If ImporteLiquidacion5 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion5, "Liquidacion Col 5", CveConceptoLiquidacion, "Liquidacion Col 5", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion5 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol5) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + If ImporteLiquidacion6 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion6, "Liquidacion Col 6", CveConceptoLiquidacion, "Liquidacion Col 6", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion6 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol6) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + If ImporteLiquidacion7 <> 0 Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, False, ImporteLiquidacion7, "Liquidacion Col 7", CveConceptoLiquidacion, "Liquidacion Col 7", Now, -1, -1, CveIE, gvr.FCHyperLink("HplF2").Text.ToEntero, -1, CveSubProyectoLiquidacion, ViewState("CveCliente").ToString.ToEntero, ImporteMX:=ImporteLiquidacion7 * tipoCambioPago, TipoCambio:=TipoCambioGeneral, TipoCambioPago:=tipoCambioPago, PorcentajeImpuesto:=0, CveClasificacion:=CveClasificacionCol7) Then + MsgError = "No se pudo insertar la póliza" + Exit For + End If + End If + + + End If If gvr.FCCheckBox("ChkGenerarNC").Checked AndAlso ObjFactura IsNot Nothing Then ObjFactura.DescuentoProntoPago = gvr.DataKey("DescuentoProntoPago").ToDecimal() @@ -3136,4 +3259,46 @@ Partial Class Ventas_ClientesAbonar Calendario.EndDate = DateTime.Now End Sub + + +#Region "LIQUIDACION" + + Protected Sub ChkLiquidacion_CheckedChanged(sender As Object, e As EventArgs) + + + If ChkLiquidacion.Checked Then + '16-23 + GvCxC.Columns(16).Visible = True + GvCxC.Columns(17).Visible = True + GvCxC.Columns(18).Visible = True + GvCxC.Columns(19).Visible = True + GvCxC.Columns(20).Visible = True + GvCxC.Columns(21).Visible = True + GvCxC.Columns(22).Visible = True + GvCxC.Columns(23).Visible = True + + GvCxC.Columns(26).Visible = False + + Else + GvCxC.Columns(16).Visible = False + GvCxC.Columns(17).Visible = False + GvCxC.Columns(18).Visible = False + GvCxC.Columns(19).Visible = False + GvCxC.Columns(20).Visible = False + GvCxC.Columns(21).Visible = False + GvCxC.Columns(22).Visible = False + GvCxC.Columns(23).Visible = False + + GvCxC.Columns(26).Visible = True + + + End If + + UPVentas.Update() + + End Sub + +#End Region + + End Class diff --git a/Ventas/RepConciliacionEmitidosSat.aspx b/Ventas/RepConciliacionEmitidosSat.aspx index fa07791c0..0c790f970 100644 --- a/Ventas/RepConciliacionEmitidosSat.aspx +++ b/Ventas/RepConciliacionEmitidosSat.aspx @@ -215,7 +215,7 @@
    - +
    diff --git a/Ventas/RepConciliacionEmitidosSat.aspx.cs b/Ventas/RepConciliacionEmitidosSat.aspx.cs index b318417ef..7cf8cc869 100644 --- a/Ventas/RepConciliacionEmitidosSat.aspx.cs +++ b/Ventas/RepConciliacionEmitidosSat.aspx.cs @@ -224,13 +224,14 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas ClsCGame ObjCGame = new ClsCGame(ObjVentas.IniciaTransacSQL()); ClsEdocumentacion ObjDocCliente = new ClsEdocumentacion(ObjVentas.IniciaTransacSQL()); ClsAcumuladores ObjAcum = new ClsAcumuladores(ObjVentas.IniciaTransacSQL()); - //ClsContPAQi ObjContPaq = null; + ClsContPAQi ObjContPaq = null; //StringBuilder MensajeAlert = new StringBuilder() ; Modelos.Factura.MMensajeFactura Resp = new Modelos.Factura.MMensajeFactura(); DataTable DtDetalle = objfact.DtDetalle; try { - // objfact.GuardarVenta(ref objfact, ref ObjVentas, ref ObjConta, ref ObjInventario, ref ObjContr, ref DtDetalle, objfact.CveNCaVincular, ref ObjContPaq, ref ObjBancos, ref ObjOS, ref ObjEventos, ref ObjCGame, ref ObjClientes, ref Resp, ObjAcum: ObjAcum); + objfact.GuardarVenta(ref objfact, ref ObjVentas, ref ObjConta, ref ObjInventario, ref ObjContr, ref DtDetalle, objfact.CveNCaVincular, ref ObjContPaq, + ref ObjBancos, ref ObjOS, ref ObjEventos, ref ObjCGame, ref ObjClientes, false, ObjAcum,ref Resp); } catch (Exception e) @@ -803,6 +804,28 @@ public partial class Ventas_RepConciliacionEmitidosSat : ClsPaginas } //String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) } + + protected void DdlClasificacion_SelectedIndexChanged(object sender, EventArgs e) + { + + int CveClasificacion = DdlClasificacion.SelectedValue.ToEntero(); + if (UsuarioActual.Empresa.Funcionalidad(141).ToString() == "1") + { + + DdlPS.setEsWebService(true); + DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString()); + DdlPS.ddlWS.Attributes.Add("data-pagina", "ventas/ventas"); + DdlPS.ddlWS.Attributes.Add("data-Estatus", "1"); + } + else + { + + DdlPS.setEsWebService(false); + DdlPS.ddl.DataSource = get_GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion: CveClasificacion, Estatus: 1, AplicaParaVenta: 1); + DdlPS.ddl.DataBind(); + } + UpModalDefaults.Update(); + } } namespace ADSistemaLibrary2.SatXml { diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index 3e278eee2..9e94a4355 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -1170,11 +1170,13 @@ - + + + diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index e35a5f8a6..805a7c828 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -1267,6 +1267,15 @@ Partial Class Ventas End Set End Property + Private Property CveEstadoCancelacion As Integer + Get + Return If(IsNothing(ViewState("CveEstadoCancelacion")), 0, CType(ViewState("CveEstadoCancelacion"), Integer)) + End Get + Set(value As Integer) + ViewState("CveEstadoCancelacion") = value + End Set + End Property + Private Property PermiteCredito As Boolean Get Return If(IsNothing(ViewState("PermiteCredito")), False, CBool(ViewState("PermiteCredito"))) @@ -1321,6 +1330,14 @@ Partial Class Ventas ViewState("RFCReceptorVenta") = value End Set End Property + Private Property RegimenFiscalCliente As String + Get + Return IfNull(ViewState("RegimenFiscalCliente"), "").ToString() + End Get + Set(value As String) + ViewState("RegimenFiscalCliente") = value + End Set + End Property Private Property Adjunto As String Get Return If(IsNothing(ViewState("Adjunto")), "", ViewState("Adjunto").ToString()) @@ -2245,6 +2262,7 @@ Partial Class Ventas SeCancelaRemisionProceso = False TotalOriginal = 0 CveAlmacenDevolucion = 0 + Me.CveEstadoCancelacion = 0 txtFechaICot.Text = Now.AddMonths(-3).ToShortDateString TxtFechaIRem.Text = Now.AddMonths(-3).ToShortDateString @@ -2478,6 +2496,25 @@ Partial Class Ventas HlFacturasRelaciondas.Visible = True End If + If Request("CveOrdenProduccion") IsNot Nothing AndAlso IsNumeric(Request("CveOrdenProduccion")) AndAlso Request("CveOrdenProduccion").ToEntero() > 0 Then + DdlSubProyectoDatos.SelectedValueExist(11954) + Using ObjVentas As New ClsNominas + + If ObjVentas.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, "", -Request("CveOrdenProduccion").ToEntero()) Then + TmpDT = ObjVentas.DtResultados + TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) + TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) + TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) + TmpDT.Columns.Add("TieneProntoPago", GetType(String)) + TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) + GvPS.DataSource = ObjVentas.DtResultados + GvPS.DataBind() + + 'IEPS A NIVEL DETALLE + 'TxtIEPS.Text = If(TmpDT.SUM("IEPS") > 0, TmpDT.SUM("IEPS").FormatoNumero, TxtIEPS.Text) + End If + End Using + End If If Request("CveEmbarqueManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveEmbarqueManifiesto")) AndAlso Request("CveEmbarqueManifiesto").ToEntero() > 0 Then DdlMoneda.SelectedValueExist(2) Using ObjVentas As New ClsNominas @@ -5662,8 +5699,12 @@ Partial Class Ventas 'End If End Sub Private Sub CargaUsoCFDI() - DdlUsoCFDI.DataSource = GlobalDTSATUsosCFDI(UsuarioActual.Empresa.EsPersonaFisica) - DdlSucursalUsoCFDI.DataSource = GlobalDTSATUsosCFDI(UsuarioActual.Empresa.EsPersonaFisica) + If UsuarioActual.Empresa.Funcionalidad(350) <> "1" Then + RegimenFiscalCliente = "-1" + End If + + DdlUsoCFDI.DataSource = GlobalDTSATUsosCFDI(UsuarioActual.Empresa.EsPersonaFisica, RegimenFiscalReceptor:=RegimenFiscalCliente) + DdlSucursalUsoCFDI.DataSource = GlobalDTSATUsosCFDI(UsuarioActual.Empresa.EsPersonaFisica, RegimenFiscalReceptor:=RegimenFiscalCliente) DdlUsoCFDI.DataBind() DdlSucursalUsoCFDI.DataBind() @@ -5945,6 +5986,10 @@ Partial Class Ventas ViewState("CliLocalidad") = If(ObjCliente.Localidad.Trim.Length = 0, ObjCliente.Ciudad.Trim, ObjCliente.Localidad.Trim) ViewState("CliPais") = ObjCliente.Pais ImprimeNombreSucursal = ObjCliente.ImprimeNombreSucursal + If UsuarioActual.Empresa.Funcionalidad(350) = "1" Then + RegimenFiscalCliente = ObjCliente.DtResultados(0)("CodigoRegimenFiscal").ToString() + CargaUsoCFDI() + End If 'ViewState("NumCtaPago") = ObjCliente.NumCtaPago ViewState("ClienteDesglosaIEPS") = ObjCliente.DesglosaIEPS If Not ClienteDesglosaIEPS Then @@ -10092,8 +10137,8 @@ Partial Class Ventas 'si es cancelacion, debe de conservar el folio actual If Not EsCancelacion Then ObjFactura.Folio = If(EstablecioFolio Or VistaPrevia Or (CveVenta > 0 And (NuevaFactura.Contiene(0, 2))), TxtFolio.Text.Trim.ToEntero(), -1) - 'SI ES FACTURACION DE REMISION O COTIZACION NO TOMAR EL FOLIO QUE SE MUESTRA - If Not EsCancelacion AndAlso ObjFactura.Folio > 0 AndAlso TipoDoctoViejo.Contiene("Rem", "Cot") Then + 'SI NO ESTABLECIO UN FOLIO FIJO Y SI ES FACTURACION DE REMISION O COTIZACION NO TOMAR EL FOLIO QUE SE MUESTRA + If Not EstablecioFolio AndAlso (Not EsCancelacion AndAlso ObjFactura.Folio > 0 AndAlso TipoDoctoViejo.Contiene("Rem", "Cot")) Then ObjFactura.Folio = -1 End If @@ -19239,6 +19284,7 @@ Partial Class Ventas End Sub Protected Sub TxtFolio_TextChanged(sender As Object, e As System.EventArgs) Handles TxtFolio.TextChanged ViewState("EstablecioFolio") = True + Alert("Se estableció el Folio Fijo para el nuevo documento.") End Sub Private Sub HabilitarFacturacionSucursal() trsucursalciente.Visible = True @@ -20716,12 +20762,14 @@ Partial Class Ventas If Vigencia.EsCancelable = "Cancelable sin aceptación" Then 'script = "BtnRefacturacionConfirmarAceptacion();" + Me.CveEstadoCancelacion = 1 sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) sb.Append("Está seguro de realizar la refacturación?.") End If If Vigencia.EsCancelable = "Cancelable con aceptación" OrElse String.IsNullOrEmpty(Vigencia.EsCancelable) Then 'script = "BtnRefacturacionConfirmar();" + Me.CveEstadoCancelacion = 2 sb.AppendFormat("{0}
    ", "Cancelable con aceptación") sb.Append("Está seguro de cancelar el documento para realizar la refacturación?.") End If @@ -23110,7 +23158,7 @@ Partial Class Ventas If ObjVentas.EliminarVenta(CveVenta) Then ObjVentas.Commit() - Alert("La venta ha sido eliminada correctamente.", TipoMensaje.MsgInformacion) + Alert("La venta ha sido eliminada correctamente.", TipoMensaje.MsgInformacion, "document.location.href=""/Ventas/Clientes.aspx?CveCliente=" & CveCliente & """;") Else ObjVentas.RollBack() End If @@ -23441,6 +23489,13 @@ Partial Class Ventas sb.Append("No encontrado
    ") sb.Append("Está seguro de cancelar el documento?.") Else + 'GUARDA EL ESTADO DE CANCELACION + If Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then + Me.CveEstadoCancelacion = 2 + ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then + Me.CveEstadoCancelacion = 1 + End If + sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then sb.Append("Está seguro de cancelar el documento?.") @@ -23628,7 +23683,7 @@ Partial Class Ventas 'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) 'ObjE.Dispose() - resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoRefacturacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text.Trim()) + resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoRefacturacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion) Else Dim ListaRemisionesCancelar As New List(Of Integer) If ChkCanRem.Checked Then @@ -23641,7 +23696,7 @@ Partial Class Ventas ObjFacturaCancelacion.CveAlmacenDevolucion = CveAlmacenDevolucion - resp = ObjFacturaCancelacion.CancelarFactura(ChkDevAlm.Checked, ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim()) + resp = ObjFacturaCancelacion.CancelarFactura(ChkDevAlm.Checked, ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion) End If SWatch.Stop() @@ -30543,7 +30598,11 @@ Partial Class Ventas BtnEmitirImprimir.Text = "Facturar" DdlTipoComprobante.SelectedValue = "Ing" - TxtFecha.Text = Now.ToShortDateString() + + If Not (EstablecioFolio AndAlso UsuarioActual.TienePermisoProceso(130)) Then + TxtFecha.Text = Now.ToShortDateString() + End If + UpPS.Update() UpFacturar.Update() @@ -31261,7 +31320,9 @@ Partial Class Ventas Dim TipoDoctoViejo As String = DdlTipoComprobante.SelectedValue DdlTipoComprobante.SelectedValue = TipoDoctoNuevo - TxtFecha.Text = Now.ToString() + If Not (EstablecioFolio AndAlso UsuarioActual.TienePermisoProceso(130)) Then + TxtFecha.Text = Now.ToString() + End If TxtFechaPago.Text = If(TipoDoctoViejo = "Rem" AndAlso EsDiasCreditoFijo, Now.AddDays(DiasCredito), If(DdlTipoComprobante.SelectedValue = "Rem", Now.AddDays(PlazoCobranzaRemision), Now.AddDays(PlazoCobranza))).ToShortDateString TxtFechaEjecucion.Text = Now.ToString() diff --git a/vwd.webinfo b/vwd.webinfo index e457e81ff..f65beefe5 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -412,6 +412,8 @@ + +