+
+
+
+
+<%--
+
+
+
+ --%>
+
+
+
+
+
+
+
+
-
+ <%--
+ --%>
diff --git a/AF/CatAF.aspx.vb b/AF/CatAF.aspx.vb
index 239c3235c..e8dfe0bfd 100644
--- a/AF/CatAF.aspx.vb
+++ b/AF/CatAF.aspx.vb
@@ -32,6 +32,19 @@ Partial Class AF_CatAF
ViewState("DTAFCaracteristicas") = value
End Set
End Property
+
+ Private Property DtDatos As DataTable
+ Get
+ If ViewState("DtDatos") Is Nothing Then
+ ViewState("DtDatos") = New DataTable
+ End If
+ Return DirectCast(ViewState("DtDatos"), DataTable)
+ End Get
+ Set(value As DataTable)
+ ViewState("DtDatos") = value
+ End Set
+ End Property
+
#End Region
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
@@ -46,6 +59,9 @@ Partial Class AF_CatAF
CargaDatos()
End If
+ CargaPersonalizacion()
+
+
End If
End Sub
@@ -278,7 +294,7 @@ Partial Class AF_CatAF
GvDatos.DataSource = DtActivosFijos
GvDatos.DataBind()
- 'LtlTotalRegistros.Text = DtActivosFijos.Rows.Count.ToString.FormatoNumero(0)
+ LtlTotalRegistros.Text = DtActivosFijos.Rows.Count.ToString.FormatoNumero(0)
UpGV.Update()
OrdenaDatos()
@@ -492,5 +508,251 @@ Partial Class AF_CatAF
#End Region
+#Region " P E R S O N A L I Z A R C O L U M N A S "
+ Protected Sub LnkPersonalizar_Click(sender As Object, e As EventArgs)
+
+ ChkGuardarPersonalizacion.Checked = False
+ RegistraScript("$('#DivPersonalizar').modal('show')")
+
+ End Sub
+
+ Protected Sub BtnPersonalizar_Click(sender As Object, e As System.EventArgs) Handles BtnPersonalizar.Click
+
+ If ChkGuardarPersonalizacion.Checked Then
+ GuardaPersonalizacion()
+ End If
+
+ Personaliza()
+ CargaGvDatos()
+ UpGV.Update()
+
+ End Sub
+
+
+
+ Private Sub GuardaPersonalizacion()
+
+ Dim objUsuario As New ClsSisUsuarios
+ Dim ListPersonalizada As New List(Of String)
+
+ If ChkCodigo.Checked Then ListPersonalizada.Add("Codigo")
+
+ If ChkDescripcion.Checked Then ListPersonalizada.Add("Descripcion")
+
+ If ChkTipoActivoFijo.Checked Then ListPersonalizada.Add("TipoActivoFijo")
+
+ If ChkSubTIpoActivoFijo.Checked Then ListPersonalizada.Add("SubTIpoActivoFijo")
+
+ If ChkResponsable.Checked Then ListPersonalizada.Add("Responsable")
+
+ If ChkNoSerie.Checked Then ListPersonalizada.Add("NoSerie")
+
+ If ChkAño.Checked Then ListPersonalizada.Add("Año")
+
+ If ChkSubProyecto.Checked Then ListPersonalizada.Add("SubProyecto")
+
+ If ChkEstadoActivoFijo.Checked Then ListPersonalizada.Add("EstadoActivoFijo")
+
+ If ChkFechaIng.Checked Then ListPersonalizada.Add("FechaIng")
+
+ If ChkGrupo.Checked Then ListPersonalizada.Add("Grupo")
+
+ If ChkMarcaActivoFijo.Checked Then ListPersonalizada.Add("MarcaActivoFijo")
+
+ If ChkModeloActivoFijo.Checked Then ListPersonalizada.Add("ModeloActivoFijo")
+
+ If ChkNombreCuenta.Checked Then ListPersonalizada.Add("NombreCuenta")
+
+ If ChkValorCompra.Checked Then ListPersonalizada.Add("ValorCompra")
+
+ If ChkFechaCompra.Checked Then ListPersonalizada.Add("FechaCompra")
+
+ If ChkFechaBaja.Checked Then ListPersonalizada.Add("FechaBaja")
+
+ If ChkProyecto.Checked Then ListPersonalizada.Add("Proyecto")
+
+ 'If ChkSubProyecto.Checked Then ListPersonalizada.Add("SubProyecto")
+
+ If ChkNombreCliente.Checked Then ListPersonalizada.Add("NombreCliente")
+
+ If ChkObservaciones.Checked Then ListPersonalizada.Add("Observaciones")
+
+
+ If objUsuario.AddUsuariosPersonalizaciones(UsuarioActual, "CatAF.aspx", String.Join("|", ListPersonalizada)) Then
+ 'Alert("Personalizacion guardada")
+ End If
+
+ objUsuario.Dispose()
+
+ End Sub
+
+
+ Private Sub CargaPersonalizacion()
+
+ Dim strBasePersonalizacion As String = UsuarioActual.Personalizaciones("CatAF.aspx")
+
+ If strBasePersonalizacion.Trim.Length > 0 Then
+
+ ChkCodigo.Checked = False
+ ChkDescripcion.Checked = False
+ ChkTipoActivoFijo.Checked = False
+ ChkSubTIpoActivoFijo.Checked = False
+ ChkResponsable.Checked = False
+ ChkNoSerie.Checked = False
+ ChkAño.Checked = False
+ ChkSubProyecto.Checked = False
+ ChkEstadoActivoFijo.Checked = False
+ ChkFechaIng.Checked = False
+ ChkGrupo.Checked = False
+ ChkMarcaActivoFijo.Checked = False
+ ChkModeloActivoFijo.Checked = False
+ ChkNombreCuenta.Checked = False
+ ChkValorCompra.Checked = False
+ ChkFechaCompra.Checked = False
+ ChkFechaBaja.Checked = False
+ 'ChkNoSerie.Checked = False
+ 'ChkEstadoActivoFijo.Checked = False
+ 'ChkResponsable.Checked = False
+ ChkProyecto.Checked = False
+ 'ChkSubProyecto.Checked = False
+ ChkNombreCliente.Checked = False
+ ChkObservaciones.Checked = False
+
+ Dim Personalizaciones As String() = strBasePersonalizacion.Split("|"c)
+
+ For Each personalizacion As String In Personalizaciones
+ Select Case personalizacion
+ Case "Codigo"
+ ChkCodigo.Checked = True
+ Exit Select
+ Case "Descripcion"
+ ChkDescripcion.Checked = True
+ Exit Select
+ Case "TipoActivoFijo"
+ ChkTipoActivoFijo.Checked = True
+ Exit Select
+ Case "SubTIpoActivoFijo"
+ ChkSubTIpoActivoFijo.Checked = True
+ Exit Select
+ Case "Responsable"
+ ChkResponsable.Checked = True
+ Exit Select
+ Case "NoSerie"
+ ChkNoSerie.Checked = True
+ Exit Select
+ Case "Año"
+ ChkAño.Checked = True
+ Exit Select
+ Case "SubProyecto"
+ ChkSubProyecto.Checked = True
+ Exit Select
+ Case "EstadoActivoFijo"
+ ChkEstadoActivoFijo.Checked = True
+ Exit Select
+ Case "FechaIng"
+ ChkFechaIng.Checked = True
+ Exit Select
+ Case "Grupo"
+ ChkGrupo.Checked = True
+ Exit Select
+ Case "MarcaActivoFijo"
+ ChkMarcaActivoFijo.Checked = True
+ Exit Select
+ Case "ModeloActivoFijo"
+ ChkModeloActivoFijo.Checked = True
+ Exit Select
+ Case "NombreCuenta"
+ ChkNombreCuenta.Checked = True
+ Exit Select
+ Case "ValorCompra"
+ ChkValorCompra.Checked = True
+ Exit Select
+ Case "FechaCompra"
+ ChkFechaCompra.Checked = True
+ Exit Select
+ Case "FechaBaja"
+ ChkFechaBaja.Checked = True
+ Exit Select
+ Case "Proyecto"
+ ChkProyecto.Checked = True
+ Exit Select
+ Case "NombreCliente"
+ ChkNombreCliente.Checked = True
+ Exit Select
+ Case "Observaciones"
+ ChkObservaciones.Checked = True
+ Exit Select
+ Case Else
+ Exit Select
+ End Select
+ Next
+
+ Else
+ PersonalizaDefault()
+ End If
+
+ Personaliza()
+
+ UPPersonalizar.Update()
+
+ End Sub
+
+
+ Private Sub PersonalizaDefault()
+
+ ChkCodigo.Checked = True
+ ChkDescripcion.Checked = True
+ ChkTipoActivoFijo.Checked = True
+ ChkSubTIpoActivoFijo.Checked = True
+ ChkResponsable.Checked = True
+ ChkNoSerie.Checked = True
+ ChkAño.Checked = True
+ ChkSubProyecto.Checked = True
+ ChkEstadoActivoFijo.Checked = True
+ ChkFechaIng.Checked = True
+
+ End Sub
+
+
+ Private Sub Personaliza()
+
+ GvDatos.Columns(0).Visible = ChkCodigo.Checked
+ GvDatos.Columns(1).Visible = ChkDescripcion.Checked
+ GvDatos.Columns(2).Visible = ChkTipoActivoFijo.Checked
+ GvDatos.Columns(3).Visible = ChkSubTIpoActivoFijo.Checked
+ GvDatos.Columns(4).Visible = ChkResponsable.Checked
+ GvDatos.Columns(5).Visible = ChkNoSerie.Checked
+ GvDatos.Columns(6).Visible = ChkAño.Checked
+ GvDatos.Columns(7).Visible = ChkSubProyecto.Checked
+ GvDatos.Columns(8).Visible = ChkEstadoActivoFijo.Checked
+ GvDatos.Columns(9).Visible = ChkFechaIng.Checked
+
+ GvDatos.Columns(10).Visible = ChkGrupo.Checked
+ GvDatos.Columns(11).Visible = ChkMarcaActivoFijo.Checked
+ GvDatos.Columns(12).Visible = ChkModeloActivoFijo.Checked
+ GvDatos.Columns(13).Visible = ChkNombreCuenta.Checked
+ GvDatos.Columns(14).Visible = ChkValorCompra.Checked
+ GvDatos.Columns(15).Visible = ChkFechaCompra.Checked
+ GvDatos.Columns(16).Visible = ChkFechaBaja.Checked
+ 'GvDatos.Columns(17).Visible = ChkNoSerie.Checked
+ 'GvDatos.Columns(18).Visible = ChkEstadoActivoFijo.Checked
+ 'GvDatos.Columns(19).Visible = ChkResponsable.Checked
+ GvDatos.Columns(17).Visible = ChkProyecto.Checked
+ 'GvDatos.Columns(18).Visible = ChkSubProyecto.Checked
+ GvDatos.Columns(18).Visible = ChkNombreCliente.Checked
+ GvDatos.Columns(19).Visible = ChkObservaciones.Checked
+
+
+
+ 'Personalizo = 1
+ 'If Personalizo = 1 Then
+ ' ImgExcelPersonalizado.Visible = True
+ 'Else
+ ' ImgExcelPersonalizado.Visible = False
+ 'End If
+
+ End Sub
+
+#End Region
End Class
diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb
index 0792aa609..5c3ef1f46 100644
--- a/App_Code/ClsGenerales.vb
+++ b/App_Code/ClsGenerales.vb
@@ -2617,18 +2617,18 @@ Public Class ClsGenerales
End Try
Return Retorno
- End Function
-
-
+ End Function
+
+
#End Region
-
+
#Region "Bitacora"
Public Function GetHistorialBitacora(CveAcarreo As Integer, CveOrdenCompra As Integer, CveActivoFijo As Integer,
CveOS As Integer, CvePS As Integer, CveCompra As Integer, CveIE As Integer,
CveEmpresa As Integer, Optional CveUsuario As Integer = -1, Optional CvePersonal As Integer = -1,
Optional IdPoliza As Integer = -1, Optional CvePrePoliza As Integer = -1, Optional CvePeriodo As Integer = -1, Optional CveConceptoNomina As Integer = -1, Optional CvePromocion As Integer = -1,
Optional CveAsistencia As Integer = -1, Optional CveAsistenciaDetalle As Integer = -1, Optional CveTipoBitacora As Integer = -1,
- Optional FechaInicio As String = "", Optional FechaFin As String = "", Optional Fecha As Date = MinFecha) As Boolean
+ Optional FechaInicio As String = "", Optional FechaFin As String = "", Optional Fecha As Date = MinFecha, Optional CveContrato As Integer = -1) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Gral_HistorialBitacoraGet")
@@ -2648,6 +2648,7 @@ Public Class ClsGenerales
.Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo
.Add("@CveConceptoNomina", SqlDbType.Int).Value = CveConceptoNomina
.Add("@CvePromocion", SqlDbType.Int).Value = CvePromocion
+ .Add("@CveContrato", SqlDbType.Int).Value = CveContrato
.Add("@CveAsistencia", SqlDbType.Int).Value = CveAsistencia
@@ -2698,7 +2699,7 @@ Public Class ClsGenerales
CveIE As Integer, Actual As String, Anterior As String, CveUsuario As Integer,
CveEmpresa As Integer, SeElimino As Integer, Descripcion As String, Tipo As String,
Id_Clave As String, Optional IdPoliza As Integer = -1, Optional CvePromocion As Integer = -1, Optional CveUsuarioTabla As Integer = -1,
- Optional CvePersonal As Integer = -1, Optional Motivo As String = "", Optional Fecha As String = "1900/01/01") As Boolean
+ Optional CvePersonal As Integer = -1, Optional Motivo As String = "", Optional Fecha As String = "1900/01/01", Optional CveContrato As Integer = -1) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Gral_HistorialBitacoraAdd")
@@ -2725,6 +2726,7 @@ Public Class ClsGenerales
.Add("@CvePersonal", SqlDbType.Int).Value = CvePersonal
.Add("@Motivo", SqlDbType.VarChar).Value = Motivo
.Add("@Fecha", SqlDbType.DateTime).Value = Fecha
+ .Add("@CveContrato", SqlDbType.Int).Value = CveContrato
End With
diff --git a/App_Code/ClsValidaCFDi.vb b/App_Code/ClsValidaCFDi.vb
index c2e19cc0c..35248b76d 100644
--- a/App_Code/ClsValidaCFDi.vb
+++ b/App_Code/ClsValidaCFDi.vb
@@ -97,18 +97,24 @@ Public Class ClsValidaCFDi
oAcuse = wsConsultaCFDI.Consulta(String.Format("?re={0}&rr={1}&tt={2}&id={3}", LRFCEmisor, LRFCReceptor, Importe, LFolioFiscal.ToUpper))
'oAcuse = wsConsultaCFDI.Consulta("?re=LESA6211234B2&rr=GCO890418M56&tt=0000001360.000000&id=0C8BAD9C-A8C6-4A48-8FF5-0687AC6F1581")
'Alert(oAcuse.Estado)
- If oAcuse.Estado.ToLower = "vigente" Then
- EsValida = 1
- End If
- If oAcuse.Estado.ToLower = "cancelado" Then
- EsValida = 2
- End If
- If oAcuse.ValidacionEFOS = "100" Then
- EnListaEFOS = True
+ If oAcuse IsNot Nothing AndAlso oAcuse.Estado IsNot Nothing AndAlso oAcuse.ValidacionEFOS IsNot Nothing Then
+ If oAcuse.Estado.ToLower = "vigente" Then
+ EsValida = 1
+ End If
+ If oAcuse.Estado.ToLower = "cancelado" Then
+ EsValida = 2
+ End If
+
+ If oAcuse.ValidacionEFOS = "100" Then
+ EnListaEFOS = True
+ Else
+ EnListaEFOS = False
+ End If
Else
- EnListaEFOS = False
+ EsValida = 0
End If
+
Catch ex As Exception
MsgError = "Op1. No se pudo validar la vigencia ante el SAT "
GuardaLog(String.Format("Op1. {0}", ex.Message))
@@ -122,7 +128,7 @@ Public Class ClsValidaCFDi
Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(LFolioFiscal.ToUpper, LRFCEmisor.Replace("%26", "&"), LRFCReceptor.Replace("%26", "&"), Importe, True)
- If Vigencia IsNot Nothing Then
+ If Vigencia IsNot Nothing AndAlso Vigencia.Estado IsNot Nothing AndAlso Vigencia.EsCancelable IsNot Nothing AndAlso Vigencia.EstatusCancelacion IsNot Nothing Then
If Not Vigencia.Estado.ToUpper().Contains("NO ENCONTRADO") AndAlso Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then
EsValida = 1
End If
diff --git a/App_Code/LogicNominas.vb b/App_Code/LogicNominas.vb
index 6d02f294b..86d3ec501 100644
--- a/App_Code/LogicNominas.vb
+++ b/App_Code/LogicNominas.vb
@@ -148,6 +148,7 @@ Public Class LogicNominas
Dim totalDb As Decimal
Dim subTotalDb As Decimal
Dim CodigoPostal As String = ""
+ Dim CLABEInterbancaria As String = ""
Dim ObjIncapacidades As New List(Of CFDINominaIncapacidades)
'Conexiones a la Base de Datos
@@ -175,7 +176,7 @@ Public Class LogicNominas
ClaveBanco = drow("ClaveBanco").ToString()
BancoNumCuenta = drow("BancoNumCuenta").ToString()
-
+ CLABEInterbancaria = drow("CLABE").ToString()
'If TimbreIndemnizacion Then
' cfdi.Timbrado = drow("SeTimbroFiniquitoVal").ToString().ToEntero() = 1
' cfdi.IStimbreFiniquito = True
@@ -495,8 +496,19 @@ Public Class LogicNominas
cfdi.Nomina.Receptor.Puesto = Puesto
cfdi.Nomina.Receptor.CodigoRiesgoPuesto = CveSATRiesgoPuesto.ToString()
cfdi.Nomina.Receptor.PeriodicidadPago = PeriodicidadPago
+ If Not IsNothing(CLABEInterbancaria) OrElse CLABEInterbancaria.Trim().Length > 16 Then
+ cfdi.Nomina.Receptor.NumeroCuenta = CLABEInterbancaria
+ Else
+ cfdi.Nomina.Receptor.NumeroCuenta = BancoNumCuenta
+ End If
+
+
cfdi.Nomina.Receptor.CodigoBanco = ClaveBanco
- cfdi.Nomina.Receptor.NumeroCuenta = BancoNumCuenta
+ If Not IsNothing(cfdi.Nomina.Receptor.NumeroCuenta) AndAlso
+ cfdi.Nomina.Receptor.NumeroCuenta.Trim().Length > 17 Then
+ cfdi.Nomina.Receptor.CodigoBanco = ""
+
+ End If
cfdi.Nomina.Receptor.SDI = SDI
cfdi.Nomina.Receptor.SBC = SalarioDiarioSS
cfdi.Nomina.Receptor.Sindicalizado = If(Sindicalizado, "Sí", "No")
diff --git a/Ashx/CargaEventos.ashx b/Ashx/CargaEventos.ashx
index dab9d8862..b87b8b817 100644
--- a/Ashx/CargaEventos.ashx
+++ b/Ashx/CargaEventos.ashx
@@ -554,7 +554,7 @@ Public Class CargaEventos : Implements IHttpHandler, IRequiresSessionState
Dim cevent As CalendarEvent = New CalendarEvent()
cevent.id = dr("CveContrato").ToString.ToEntero
- cevent.title = dr("DescripcionContrato").ToString
+ cevent.title = If(dr("CodigoAF").ToString.Trim.Length > 0, $"#{dr("CodigoAF").ToString}-{dr("DescripcionContrato").ToString}", $"-{dr("DescripcionContrato").ToString}")
cevent.start = String.Format("{0:s}", dr("FechaInicial").ToString.ToDateTime)
cevent.end = If(tipoVista = "fecha", String.Format("{0:s}", dr("FechaInicial").ToString.ToDateTime.AddHours(1)), String.Format("{0:s}", dr("FechaFinal").ToString.ToDateTime))
cevent.FechaFinal = String.Format("{0:s}", dr("FechaFinal").ToString.ToDateTime)
diff --git a/Bancos/Creditos.aspx.vb b/Bancos/Creditos.aspx.vb
index 7ae86544c..6d1bb5b0a 100644
--- a/Bancos/Creditos.aspx.vb
+++ b/Bancos/Creditos.aspx.vb
@@ -965,7 +965,7 @@ Partial Class Bancos_Creditos
If CveCredito > 0 Then
If ObjCredito.UpdateCreditos(CveCredito, DdlTipoCredito.SelectedValue.ToEntero, TxtReferencia.Text, TxtObservaciones.Text, -1, -1, -1, DdlTipoMoneda.SelectedValue.ToEntero, TxtFechaInicio.Text.ToString.ToDate, FechaVencimiento, TxtTasa.Text.Trim.ToDouble, TxtSobreTasa.Text.Trim.ToDouble, TxtIVA.Text.ToDouble / 100,
TxtPlazo.Text.Trim.ToEntero, -1, TxtVehiculoValor.Text.ToString.ToDouble, TxtComisionValor.Text.ToString.ToDouble, TxtSeguroMensual.Text.ToString.ToDouble, TxtOtrosGastosValor.Text.ToString.ToDouble,
- DdlProveedores.SelectedValue.ToEntero, RBLClasificacionContable.SelectedValue.ToEntero, DdlCtaContable.SelectedValue.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, AplicaAnticipo:=If(RBLAnticipo.SelectedValue.ToEntero = 1, True, False),
+ DdlProveedores.SelectedValue.ToEntero, RBLClasificacionContable.SelectedValue.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, AplicaAnticipo:=If(RBLAnticipo.SelectedValue.ToEntero = 1, True, False),
CreditoAnticipo:=TxtVehiculoAnticipo.Text.ToDouble, ComisionAnticipo:=TxtComisionAnticipo.Text.ToDouble, SeguroAnticipo:=TxtSeguroAnticipo.Text.ToDouble, OtrosGastosAnticipo:=TxtOtrosGastosAnticipo.Text.ToDouble, FondoGarantia:=TxtFondoGarantia.Text.ToDouble, SeguroValor:=TxtSeguroValor.Text.ToDouble, TipoInteres:=ChkTipoInteres.Checked) Then
If RegeneraTablaAmortizacion Then
diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb
index 0553d1423..11c0e9156 100644
--- a/Compras/Compras.aspx.vb
+++ b/Compras/Compras.aspx.vb
@@ -6423,10 +6423,21 @@ Partial Class Compras_Compras
Dim CvePrePoliza2Almacen As Integer = ObjConta.AddPrePolizas("Compras/Registrar/Almacen", If(EsContado And CvePlantillaPrePoliza = 1, 2, CvePlantillaPrePoliza), ImporteCompra, TxtTotal.Text.ToDouble, DdlMoneda.SelectedValue.ToEntero, NowADS(), ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FolioFijo:=FolioFijo, ReglaFolioPoliza:=ObjCompras.ObtenerReglaFolio(DdlTipoTransaccion.SelectedValue, DdlTipoTransaccionCaja.SelectedValue, UsuarioActual.CveEmpresa), CveTipoPoliza:=ObjConta.ObtenerTipoPoliza(DdlTipoTransaccion.SelectedValue, DdlTipoTransaccionCaja.SelectedValue, UsuarioActual.CveEmpresa))
If CvePrePoliza2Almacen > 0 Then
- If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza2Almacen, True, importeMN.RoundSQL(2), importeMN.RoundSQL(2), 205, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, CveIE:=CveIE, CvePersonal:=CvePersonal, CveMovimientoAlmacen:=CveMovimientoInventario, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, Contabilizable:=ContabilizableAlmacen) Then
+
+ Dim ImpPrepoliza As Decimal = 0D
+ Dim ImpPrepolizaMN As Decimal = 0D
+
+ For Each gvRowInv As GridViewRow In GvInv.Rows
+ Dim gvCantidad As Decimal = gvRowInv.FCTextBox("TbCantidad").Text.ToDecimal
+ Dim gvPU As Decimal = gvRowInv.DataKey("PU").ToDecimal
+ ImpPrepoliza = ImpPrepoliza + (gvCantidad * gvPU)
+ Next
+ ImpPrepolizaMN = ImpPrepoliza * tipoCambioActual * Multiplicador
+
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza2Almacen, True, ImpPrepolizaMN.RoundSQL(2), ImpPrepolizaMN.RoundSQL(2), 205, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, CveIE:=CveIE, CvePersonal:=CvePersonal, CveMovimientoAlmacen:=CveMovimientoInventario, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, Contabilizable:=ContabilizableAlmacen) Then
ErrorPrepoliza = True
End If
- If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza2Almacen, False, importeMN.RoundSQL(2), importeMN.RoundSQL(2), 68, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, CveIE:=CveIE, CvePersonal:=CvePersonal, CveMovimientoAlmacen:=CveMovimientoInventario, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, Contabilizable:=ContabilizableAlmacen) Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza2Almacen, False, ImpPrepolizaMN.RoundSQL(2), ImpPrepolizaMN.RoundSQL(2), 68, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, CveIE:=CveIE, CvePersonal:=CvePersonal, CveMovimientoAlmacen:=CveMovimientoInventario, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, Contabilizable:=ContabilizableAlmacen) Then
ErrorPrepoliza = True
End If
Else
@@ -13318,10 +13329,11 @@ Partial Class Compras_Compras
dtt = dtt.FiltraParametros($"Fecha >= #{NowADS.AddMonths(-12).ToString("yyyy/MM/dd")}#")
End If
DDLDevolucion.DataSource = dtt
- DDLDevolucion.Items.Insert(0, New ListItem("Seleccione", "-1"))
+
End If
objcompras.Dispose()
DDLDevolucion.DataBind()
+ DDLDevolucion.Items.Insert(0, New ListItem("Seleccione", "-1"))
UPDevolucion.Update()
End Sub
diff --git a/Contratos/Presupuestos.aspx.vb b/Contratos/Presupuestos.aspx.vb
index 65d860f72..caa64a63f 100644
--- a/Contratos/Presupuestos.aspx.vb
+++ b/Contratos/Presupuestos.aspx.vb
@@ -412,7 +412,7 @@ Partial Class Contratos_Presupuestos
CveConceptoContableNom = CveAgrupador
End If
- If CveClasificacion > 0 Then
+ If CveClasificacion > 0 Or CveConceptoContableNom > 0 Then
If ImporteClasi > 0 Then
TieneError = Not ObjCont.AddPresupuestosDetalle(CvePresupuestoNuevo, CveClasificacion, CveTipoGasto, ImporteClasi, ObsDetalle, CveConceptoContableNom:=CveConceptoContableNom)
If TieneError Then
diff --git a/Contratos/RepPresupuestosDetalle.aspx.vb b/Contratos/RepPresupuestosDetalle.aspx.vb
index 36b32b15f..434af89c8 100644
--- a/Contratos/RepPresupuestosDetalle.aspx.vb
+++ b/Contratos/RepPresupuestosDetalle.aspx.vb
@@ -82,7 +82,9 @@ Partial Class Contratos_RepPresupuestosDetalle
Private Sub CargaSubProyecto()
DdlSubProyecto.Items.Clear()
If DdlProyecto.SelectedValue.ToEntero > 0 Or UsuarioActual.Empresa.Tipo_CentroCosto = 1 Then
- DdlSubProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, DdlProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(DdlProyecto.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, 1))
+ DdlSubProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110),
+ GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, DdlProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, -1, 1),
+ GlobalDTSubProyectos(UsuarioActual.CveEmpresa, -1, DdlProyecto.SelectedValue.ToEntero, 1))
End If
DdlSubProyecto.Items.Insert(0, New ListItem("Todos", "-1"))
DdlSubProyecto.DataBind()
@@ -94,19 +96,21 @@ Partial Class Contratos_RepPresupuestosDetalle
Dim CveProyecto = IfNull(Request("CveProyecto"), -1).ToString.ToEntero
Dim CveSubProyecto = IfNull(Request("CveSubProyecto"), -1).ToString.ToEntero
Dim CveTipoGasto = IfNull(Request("CveTipoGasto"), -1).ToString.ToEntero
- Dim Agrupador = IfNull(Request("Agrupador"), -1).ToString.ToEntero
+ Dim Agrupador = IfNull(Request("Agrupador"), -1).ToString.ToEntero
+
Gpo = IfNull(Request("CveAgrupador"), -1).ToString.ToEntero
+
Dim Mensual = CBool(IfNull(Request("Mensual"), False))
Dim EsProyecto = CBool(IfNull(Request("EsProyecto"), False))
'If Agrupador = 1 Then Agrupador = 2 Else Agrupador = 1
DdlAgrupador.SelectedValueExist(Agrupador)
DdlClasificacion.SelectedValueExist(CveClasificacion)
- If DdlAgrupador.SelectedValue.ToEntero = 1 Then
+ If DdlAgrupador.SelectedValue.ToEntero = 1 Then 'Clasificación
DdlClasificacion.SelectedValueExist(Gpo)
DdlProyecto.SelectedValueExist(CveProyecto)
DdlSubProyecto.SelectedValueExist(CveSubProyecto)
- ElseIf DdlAgrupador.SelectedValue.ToEntero = 2 Then
+ ElseIf DdlAgrupador.SelectedValue.ToEntero = 2 Then ' Centro costo
If Not EsProyecto Then
Dim Dr As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, Gpo)(0)
DdlProyecto.SelectedValueExist(Dr("CveProyecto"))
@@ -121,6 +125,10 @@ Partial Class Contratos_RepPresupuestosDetalle
TxtFiltrosFechaInicio.Text = FechaInicio
TxtFiltrosFechaFin.Text = FechaFin
ChkMensual.Checked = Mensual
+
+ If Agrupador = 1 Then Agrupador = 2 Else Agrupador = 1
+ DdlAgrupador.SelectedValueExist(Agrupador)
+
End Sub
#End Region
diff --git a/Inventarios/TrasladoSolicitud.aspx b/Inventarios/TrasladoSolicitud.aspx
index dcf9b466e..47be19ad5 100644
--- a/Inventarios/TrasladoSolicitud.aspx
+++ b/Inventarios/TrasladoSolicitud.aspx
@@ -89,6 +89,8 @@
+
+
@@ -163,6 +165,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -185,14 +201,7 @@
- <%--
-
-
-
-
-
-
--%>
-
+
diff --git a/Inventarios/TrasladoSolicitud.aspx.vb b/Inventarios/TrasladoSolicitud.aspx.vb
index f0633a349..0741c1373 100644
--- a/Inventarios/TrasladoSolicitud.aspx.vb
+++ b/Inventarios/TrasladoSolicitud.aspx.vb
@@ -323,7 +323,7 @@ Partial Class Inventarios_TrasladoSolicitud
Estatus = 3
End If
- Dim Folio As Integer = ObjInventarios.AddTrasladoSolicitud("", DdlAlmacenOrigen.SelectedValue.ToEntero, DdlAlmacenDestino.SelectedValue.ToEntero, Estatus, -1, NowADS, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EstatusAlmacen:=EstatusAlmacen)
+ Dim Folio As Integer = ObjInventarios.AddTrasladoSolicitud(TxtObservaciones.text, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlAlmacenDestino.SelectedValue.ToEntero, Estatus, -1, NowADS, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, EstatusAlmacen:=EstatusAlmacen)
If Folio > 0 Then
CveTraspasoSolicitud = ObjInventarios.CveTraspasoSolicitud
diff --git a/Nomina/CatPeriodos.aspx b/Nomina/CatPeriodos.aspx
index cd697aca8..1787267e5 100644
--- a/Nomina/CatPeriodos.aspx
+++ b/Nomina/CatPeriodos.aspx
@@ -187,7 +187,7 @@
-
@@ -383,6 +383,12 @@
+
+ Mes:
+
+
+
+
diff --git a/Nomina/CatPeriodos.aspx.vb b/Nomina/CatPeriodos.aspx.vb
index d195014ed..6a5f39df1 100644
--- a/Nomina/CatPeriodos.aspx.vb
+++ b/Nomina/CatPeriodos.aspx.vb
@@ -227,8 +227,8 @@ Partial Class Nomina_CatPeriodos
RegistraScript("$('#divAddPeriodo').modal('show');")
End Sub
Protected Sub BtnAgregar_Click(sender As Object, e As System.EventArgs) Handles BtnAgregar.Click
- Dim ObjNom_Periodos As New ClsNominas
+ Dim mensajeerror As String = ""
Dim EsInicioMes As Boolean
Dim EsFinMes As Boolean
Dim EsInicioSS As Boolean
@@ -237,72 +237,85 @@ Partial Class Nomina_CatPeriodos
Dim EsFinAño As Boolean
Dim FueCalculado As Boolean
Dim Numero As Integer = TxtNumeroAdd.Text.Trim.ToEntero()
- Dim FechaInicio As Date = TxtFechaInicioAdd.Text.Trim.ToDate
- Dim FechaFin As Date = TxtFechaFinAdd.Text.Trim.ToDate
- Dim Mes As Integer = FechaFin.Month
+ Dim FechaInicio As Date = TxtFechaInicioAdd.Text().Trim.ToDate()
+ Dim FechaFin As Date = TxtFechaFinAdd.Text.Trim().ToDate()
+ Dim Mes As Integer = TxtMes.Text.Trim().ToEntero()
+ If Not ((FechaFin.Month = 12 And (Mes = 1)) OrElse (FechaFin.Month = 1 And (Mes = 12)) OrElse (Math.Abs(FechaFin.Month - Mes) <= 1)) OrElse
+ Mes > 12 OrElse Mes < 1 Then
+ TxtMes.Text = FechaFin.Month.ToString()
+ mensajeerror = "El mes seleccionado para el periodo de nómina debe ser el mes actual, el mes anterior, o el mes siguiente a la fecha de finalización."
+ End If
Dim Ejercicio As Integer = FechaFin.Year
Dim CveTipoPeriodo As Integer = DdlTipoPeriodoAdd.SelectedValue.ToEntero()
Dim Estatus As Integer = DdlEstatusAdd.SelectedValue.ToEntero()
Dim CvePeriodo As Integer = hdnCvePerido.Value.ToEntero()
Dim CveSubTipoPeriodo As Integer = TxtCveSubTipoPeriodoAdd.Text.ToEntero()
- If CveSubTipoPeriodo <= 1 Then
- CveSubTipoPeriodo = 1
- End If
- For Each item As ListItem In CBLchk.Items
- Select Case item.Value.ToEntero()
- Case 1
- If item.Selected Then EsInicioMes = True Else EsInicioMes = False
- Case 2
- If item.Selected Then EsFinMes = True Else EsFinMes = False
- Case 3
- If item.Selected Then EsInicioSS = True Else EsInicioSS = False
- Case 4
- If item.Selected Then EsFinSS = True Else EsFinSS = False
- Case 5
- If item.Selected Then EsInicioAño = True Else EsInicioAño = False
- Case 6
- If item.Selected Then EsFinAño = True Else EsFinAño = False
- Case 7
- If item.Selected Then FueCalculado = True Else FueCalculado = False
- End Select
- Next
- If Comando = "Agregar" Then
+ If (mensajeerror = "") Then
- If ObjNom_Periodos.AddPeriodo(CveTipoPeriodo, Ejercicio, Mes, Numero, FechaInicio, FechaFin, EsInicioMes, EsFinMes, EsInicioSS, EsFinSS, EsInicioAño, EsFinAño, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlTurno.SelectedValue.ToEntero(), DdlEstatus.SelectedValue.ToEntero(), CveSubTipoPeriodo) Then
+ Using ObjNom_Periodos As New ClsNominas
+
+ If CveSubTipoPeriodo <= 1 Then
+ CveSubTipoPeriodo = 1
+ End If
+ For Each item As ListItem In CBLchk.Items
+ Select Case item.Value.ToEntero()
+ Case 1
+ If item.Selected Then EsInicioMes = True Else EsInicioMes = False
+ Case 2
+ If item.Selected Then EsFinMes = True Else EsFinMes = False
+ Case 3
+ If item.Selected Then EsInicioSS = True Else EsInicioSS = False
+ Case 4
+ If item.Selected Then EsFinSS = True Else EsFinSS = False
+ Case 5
+ If item.Selected Then EsInicioAño = True Else EsInicioAño = False
+ Case 6
+ If item.Selected Then EsFinAño = True Else EsFinAño = False
+ Case 7
+ If item.Selected Then FueCalculado = True Else FueCalculado = False
+ End Select
+ Next
+ If Comando = "Agregar" Then
+
+ If ObjNom_Periodos.AddPeriodo(CveTipoPeriodo, Ejercicio, Mes, Numero, FechaInicio, FechaFin, EsInicioMes, EsFinMes, EsInicioSS, EsFinSS, EsInicioAño, EsFinAño, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, DdlTurno.SelectedValue.ToEntero(), DdlEstatus.SelectedValue.ToEntero(), CveSubTipoPeriodo) Then
+
+ Alert("El nuevo Periodo se guardó correctamente.", TipoMensaje.MsgInformacion)
+ UpDatos.Update()
+ ViewState("DTNom_Periodos") = ObjNom_Periodos.DtResultados.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa)
+ GlobalDTNominasPeriodos(-1, -1, UsuarioActual.CveEmpresa) = Nothing
+ CargaDatos()
+ If String.IsNullOrEmpty(ViewState("Orden").ToString()) Then
+ CargaGrid(ViewState("Orden").ToString())
+ Else
+ CargaGrid("")
+ End If
+
+ End If
+ ElseIf Comando = "Actualizar" Then
+
+ If ObjNom_Periodos.UpdatePeriodo(FechaInicio, FechaFin, EsInicioMes, EsFinMes, EsInicioSS, EsFinSS, EsInicioAño, EsFinAño, FueCalculado, CveTipoPeriodo, Ejercicio, Mes, Numero, Estatus, CvePeriodo, UsuarioActual.CveEmpresa, DdlTurno.SelectedValue.ToEntero(), CveSubTipoPeriodo) Then
+
+ Alert("Los cambios se guardaron correctamente.", TipoMensaje.MsgInformacion)
+ UpDatos.Update()
+ ViewState("DTNom_Periodos") = ObjNom_Periodos.DtResultados.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa)
+ GlobalDTNominasPeriodos(-1, -1, UsuarioActual.CveEmpresa) = Nothing
+ CargaDatos()
+ If String.IsNullOrEmpty(ViewState("Orden").ToString()) Then
+ CargaGrid(ViewState("Orden").ToString())
+ Else
+ CargaGrid("")
+ End If
+ End If
- Alert("El nuevo Periodo se guardó correctamente.", TipoMensaje.MsgInformacion)
- UpDatos.Update()
- ViewState("DTNom_Periodos") = ObjNom_Periodos.DtResultados.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa)
- GlobalDTNominasPeriodos(-1, -1, UsuarioActual.CveEmpresa) = Nothing
- CargaDatos()
- If String.IsNullOrEmpty(ViewState("Orden").ToString()) Then
- CargaGrid(ViewState("Orden").ToString())
- Else
- CargaGrid("")
End If
- End If
- ElseIf Comando = "Actualizar" Then
-
- If ObjNom_Periodos.UpdatePeriodo(FechaInicio, FechaFin, EsInicioMes, EsFinMes, EsInicioSS, EsFinSS, EsInicioAño, EsFinAño, FueCalculado, CveTipoPeriodo, Ejercicio, Mes, Numero, Estatus, CvePeriodo, UsuarioActual.CveEmpresa, DdlTurno.SelectedValue.ToEntero(), CveSubTipoPeriodo) Then
-
- Alert("Los cambios se guardaron correctamente.", TipoMensaje.MsgInformacion)
- UpDatos.Update()
- ViewState("DTNom_Periodos") = ObjNom_Periodos.DtResultados.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa)
- GlobalDTNominasPeriodos(-1, -1, UsuarioActual.CveEmpresa) = Nothing
- CargaDatos()
- If String.IsNullOrEmpty(ViewState("Orden").ToString()) Then
- CargaGrid(ViewState("Orden").ToString())
- Else
- CargaGrid("")
- End If
- End If
-
+ End Using
+ RegistraScript("$('#divAddPeriodo').modal('hide');")
+ Else
+ Alert(mensajeerror, TipoMensaje.MsgAdvertencia)
End If
- RegistraScript("$('#divAddPeriodo').modal('hide');")
-
'ObjNom_Periodos.Dispose()
End Sub
@@ -321,6 +334,7 @@ Partial Class Nomina_CatPeriodos
TxtFechaFinAdd.Text = GvRow.DataKey("FechaFin").ToString()
DdlEstatusAdd.SelectedValueExist(GvRow.DataKey("Estatus").ToString().ToEntero())
hdnCvePerido.Value = GvRow.DataKey("CvePeriodo").ToString()
+ TxtMes.Text = GvRow.DataKey("Mes").ToString()
TxtCveSubTipoPeriodoAdd.Text = GvRow.DataKey("CveSubTipoPeriodo").ToString()
For Each item As ListItem In CBLchk.Items
@@ -351,6 +365,7 @@ Partial Class Nomina_CatPeriodos
TxtNumeroAdd.Text = ""
TxtFechaInicioAdd.Text = ""
TxtFechaFinAdd.Text = ""
+ TxtMes.Text = ""
DdlEstatusAdd.SelectedValueExist(-1)
DdlTurno.SelectedValueExist(-1)
For Each item As ListItem In CBLchk.Items
diff --git a/Nomina/Nomina.aspx b/Nomina/Nomina.aspx
index 39250c7b2..ca6d5a9d8 100644
--- a/Nomina/Nomina.aspx
+++ b/Nomina/Nomina.aspx
@@ -2533,13 +2533,13 @@
OnRowDataBound="GVNominaPendiente_RowDataBound">
-
-
+
+
-
-
+
+
diff --git a/Transportes/RepContratoDetalle.aspx b/Transportes/RepContratoDetalle.aspx
index 55fd4775b..64fbfe248 100644
--- a/Transportes/RepContratoDetalle.aspx
+++ b/Transportes/RepContratoDetalle.aspx
@@ -145,12 +145,12 @@
-
-
-
-
-
+
+
+
+
+
@@ -396,9 +396,46 @@
-
-
+
+
+
+
+
+
+
+
+
+ Historial de Modificación
+
+
+
+
+
+
+
+
+
+
+ Fecha
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<%-- Pre init --%>
@@ -593,7 +630,7 @@
Observacion
+ ID="TxtObservacion">
diff --git a/Transportes/RepContratoDetalle.aspx.vb b/Transportes/RepContratoDetalle.aspx.vb
index eca2e6001..c5228d721 100644
--- a/Transportes/RepContratoDetalle.aspx.vb
+++ b/Transportes/RepContratoDetalle.aspx.vb
@@ -113,6 +113,7 @@ Partial Class RepContratoDetalle
CveViajePasajero = 0
Session("FileExtension") = ""
ArchivoUpdate = ""
+ CargaGvBitacora()
End If
End Sub
@@ -266,7 +267,7 @@ Partial Class RepContratoDetalle
Response.Clear()
Response.ClearHeaders()
Response.ClearContent()
- Response.AddHeader("Content-Disposition", "attachment; filename=" & LbFolio.Text & ".pdf")
+ Response.AddHeader("Content-Disposition", "attachment; filename=" & LbFolio.Text & $"{File.Extension}")
Response.AddHeader("Content-Length", File.Length.ToString())
'Response.ContentType = "text/plain"
Response.ContentType = "application/octet-stream"
@@ -298,7 +299,7 @@ Partial Class RepContratoDetalle
Try
If ObjContratos.UpdateContratos(CveContrato, LbFolio.Text, TxtDescripcion.Text, "", UsuarioActual.CveProveedor, DdlClientes.SelectedValue.ToEntero, -1, TxtFechaSalida.Text.ToDate, TxtFechaRegreso.Text.ToDate, TxtUbicacion.Text, "",
DdlSubProyecto.SelectedValue.ToEntero, -1, -1, -1, -1, ArchivoUpdate, "", -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False, TxtAnticipo.Text.ToDecimal, -1, TxtImporte.Text.ToDecimal,
- DdlMoneda.SelectedValue.ToEntero, 0, CveContratoTipo:=CveContratoTipo, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveContratosEstatus:=CveContratoEstatus, Observaciones:=TxtObservacion.Text) Then
+ DdlMoneda.SelectedValue.ToEntero, 0, CveContratoTipo:=CveContratoTipo, CveTipoAF:=DdlTipoAF.SelectedValue.ToEntero, CveContratosEstatus:=CveContratoEstatus, Observaciones:=TxtObservaciones.Text) Then
Alert("Contrato actualizado correctamente")
End If
ObjContratos.Commit()
@@ -606,6 +607,19 @@ Partial Class RepContratoDetalle
End Sub
#End Region
+#Region "Bitacora historial"
+ Private Sub CargaGvBitacora()
+ ' COMENTADO POR IPP PARA SUBIR 5 ABRIL 2017
+ If CveContrato > 0 Then
+ Dim ObjGral As New ClsGenerales()
+ If ObjGral.GetHistorialBitacora(-1, -1, -1, -1, -1, -1, -1, UsuarioActual.CveEmpresa, CveContrato:=CveContrato) Then
+ GvBitacora.DataSource = ObjGral.DtResultados
+ End If
+ ObjGral.Dispose()
+ End If
+ GvBitacora.DataBind()
+ End Sub
+#End Region
End Class
diff --git a/Transportes/RepContratosCalendario.aspx b/Transportes/RepContratosCalendario.aspx
index 0a69f7351..13f2f9301 100644
--- a/Transportes/RepContratosCalendario.aspx
+++ b/Transportes/RepContratosCalendario.aspx
@@ -126,7 +126,7 @@