From 8b80d6c1270d34dea6d1a8a6df8c8a7198b688f3 Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 24 Jul 2020 18:50:28 -0700 Subject: [PATCH 01/37] -ajustes de secciones --- Inventarios/Apartados.aspx.vb | 2 +- Inventarios/EntregaAlmacen.aspx | 44 +++++++++++++-------------- Inventarios/EntregaAlmacen.aspx.vb | 2 +- Inventarios/Kardex.aspx.vb | 4 +-- Inventarios/ResguardoMaterial.aspx | 2 +- Inventarios/ResguardoMaterial.aspx.vb | 29 +++++++++++++++--- Ventas/ProductosServicios.aspx | 2 +- Ventas/ProductosServicios.aspx.vb | 13 +++++--- 8 files changed, 61 insertions(+), 37 deletions(-) diff --git a/Inventarios/Apartados.aspx.vb b/Inventarios/Apartados.aspx.vb index 21708ab8a..6853eb7ec 100644 --- a/Inventarios/Apartados.aspx.vb +++ b/Inventarios/Apartados.aspx.vb @@ -836,7 +836,7 @@ Partial Class Inventarios_Apartados GvDatosDesapartado.Columns(5).Visible = DtTemp.MAX("Serie").ToString <> "" GvDatosDesapartado.Columns(6).Visible = DtTemp.MAX("Lote").ToString <> "" GvDatosDesapartado.Columns(7).Visible = DtTemp.MAX("FechaCaducidad").ToString.ToDate > MinFecha - GvDatosDesapartado.Columns(8).Visible = DtTemp.MAX("CveSeccionAlmacen").ToString.ToEntero > 0 + GvDatosDesapartado.Columns(8).Visible = DtTemp.MAX("AplicaSeccion") = "True" GvDatosDesapartado.DataSource = DtTemp GvDatosDesapartado.DataBind() diff --git a/Inventarios/EntregaAlmacen.aspx b/Inventarios/EntregaAlmacen.aspx index 2c2378d3e..8d4ff3ea1 100644 --- a/Inventarios/EntregaAlmacen.aspx +++ b/Inventarios/EntregaAlmacen.aspx @@ -21,20 +21,22 @@ } .gvInventario tr td:nth-child(4) { - width: 18% !important; + width: 12% !important; text-align: center !important; } .gvInventario tr th:nth-child(4) { - width: 18% !important; + width: 12% !important; } .gvEscondeColumna tr td:nth-child(3) { display: none; + width:0px; } .gvEscondeColumna tr th:nth-child(3) { display: none; + width:0px; } .btn.default:hover { @@ -406,6 +408,12 @@
+ +
+
+ +
+
@@ -429,40 +437,32 @@ -
-
-
- -
-
-
- + <%--GV DATOS--%> - + DataKeyNames="Consec,CvePS,Codigo,CodigoBarras,AplicaSerieLote,CveUM,CantidadC,CantidadF,UM,PS,CveClasificacion,CveVentaDetalle,CveTamaño,AplicaSeccion, AplicaSerie,AplicaLote,AplicaCaducidad" HeaderStyle-CssClass="Titulos" CssClass="table table-striped table-hover Widthall ScrollAD gvInventario mysmallbtn" data-heighterror="450" data-freezerows="1" GridLines="None"> + - + - + - - + + - + - - + - - + + - + diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 1fda0e0ee..c4b208c08 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -927,7 +927,7 @@ Partial Class Inventarios_EntregaAlmacen If e.Row.DBCampo("Inv_CveMetodoInventario").Contiene("5", "6") Then e.Row.FCTextBox("TbCantidadF").Enabled = False Else - e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").FormatoNumero() + e.Row.FCTextBox("TbCantidadF").Text = e.Row.DBCampo("CantidadF").ToDecimal.ToString("#,##0.######") End If End If diff --git a/Inventarios/Kardex.aspx.vb b/Inventarios/Kardex.aspx.vb index 67eba9064..6cafe91de 100644 --- a/Inventarios/Kardex.aspx.vb +++ b/Inventarios/Kardex.aspx.vb @@ -168,9 +168,9 @@ Partial Class Inventarios_Kardex TxtSerie.Text = "" If ddlProducto2.SelectedValue.ToEntero > 0 Then - Dim Dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, ddlProducto2.SelectedValue.ToEntero).FiltroPrimero("") + Dim Dr As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=ddlProducto2.SelectedValue.ToEntero).FiltroPrimero("") If Dr IsNot Nothing Then - If Dr("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then + If Dr("AplicaSerie").ToString = "True" Then DivSerie.Visible = True Else DivSerie.Visible = False diff --git a/Inventarios/ResguardoMaterial.aspx b/Inventarios/ResguardoMaterial.aspx index 688c514df..939bb9015 100644 --- a/Inventarios/ResguardoMaterial.aspx +++ b/Inventarios/ResguardoMaterial.aspx @@ -242,7 +242,7 @@ diff --git a/Inventarios/ResguardoMaterial.aspx.vb b/Inventarios/ResguardoMaterial.aspx.vb index c706e4f5c..0df638679 100644 --- a/Inventarios/ResguardoMaterial.aspx.vb +++ b/Inventarios/ResguardoMaterial.aspx.vb @@ -275,8 +275,8 @@ Partial Class Inventarios_ResguardoMaterial DdlAlmacenDestinoLiberacion.DataBind() DdlAlmacenDestinoLiberacion.Items.Insert(0, New ListItem("Seleccione", "-1")) - DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1) - DdlSeccionAlmacen.DataBind() + 'DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1) + 'DdlSeccionAlmacen.DataBind() CargaPS() End Sub @@ -335,9 +335,11 @@ Partial Class Inventarios_ResguardoMaterial End Sub Private Sub VerificaProducto() If DdlProducto2.SelectedValue.ToEntero > 0 Then - Dim drp As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlProducto2.SelectedValue.ToEntero).FiltroPrimero("") + Dim drp As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=DdlProducto2.SelectedValue.ToEntero).FiltroPrimero("") If drp IsNot Nothing Then + + 'activa Serie If CBool(drp("AplicaSerie")) Then ThSerie.Visible = True @@ -349,6 +351,16 @@ Partial Class Inventarios_ResguardoMaterial If CBool(drp("AplicaSeccion")) Then ThSeccion.Visible = True TrSeccion.Visible = True + If DdlAlmacen.SelectedValue.ToEntero > 0 Then + DdlSeccionAlmacen.Items.Clear() + Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) + DdlSeccionAlmacen.DataSource = dtt + DdlSeccionAlmacen.DataBind() + If dtt.Rows.Count > 1 Then + DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) + End If + dtt.Dispose() + End If End If 'activa lote If CBool(drp("AplicaLote")) Then @@ -445,7 +457,7 @@ Partial Class Inventarios_ResguardoMaterial registro.Item("Estatus") = "" registro.Item("SeccionAlmacen") = If(DdlSeccionAlmacen.SelectedValue.ToEntero > 0, DdlSeccionAlmacen.SelectedItem.Text, "") registro.Item("Serie") = TxtnSerie.Text - registro.Item("Lote") = If(TxtLote.Text = "", "-1", TxtLote.Text) + registro.Item("Lote") = If(TxtLote.Text = "", "", TxtLote.Text) registro.Item("FechaCaducidad") = If(TxtCaducidad.Text = "", MinFecha.ToString, TxtCaducidad.Text) registro.Item("CveSeccionAlmacen") = If(DdlSeccionAlmacen.SelectedValue.ToEntero > 0, DdlSeccionAlmacen.SelectedValue.ToEntero, -1) registro.Item("Observaciones") = TxtObservacionesdetalle.Text @@ -823,10 +835,17 @@ Partial Class Inventarios_ResguardoMaterial MensajeError = "Ocurrió un error al guardar el movimiento de entrada correctamente. Por favor vuelva a intentar." TieneError = True Else + If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then + Dim CveSeccionAlmacen As Integer = 0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows + If CBool(Dr("AplicaSeccion")) Then + CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenDestino.SelectedValue.ToEntero, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero + Else + CveSeccionAlmacen = -1 + End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, - Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, + Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Dr("Serie").ToString, Observaciones:=Dr("Observaciones").ToString) Then TieneError = True MensajeError = "Ocurrió un error al guardar los movimientos de entrada" diff --git a/Ventas/ProductosServicios.aspx b/Ventas/ProductosServicios.aspx index 36274682c..075222523 100644 --- a/Ventas/ProductosServicios.aspx +++ b/Ventas/ProductosServicios.aspx @@ -2072,7 +2072,7 @@
- + + + + + + +
diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index b933ebc07..832652772 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -1190,7 +1190,7 @@ Partial Class Inventarios_EntradasSalidas End Sub - Protected Sub AddNew(CvePS As Integer, PS As String, CveUM As Integer, UM As String, Cantidad As Double, PU As Double, SerieLote As String, CodigoAF As String, Codigo As String, CveAF As String, Observaciones As String, Lote As String, FechaCaducidad As Date, CveSeccionAlmacen As Integer, SeccionAlmacen As String) + Protected Sub AddNew(CvePS As Integer, PS As String, CveUM As Integer, UM As String, Cantidad As Double, PU As Double, Serie As String, CodigoAF As String, Codigo As String, CveAF As String, Observaciones As String, Lote As String, FechaCaducidad As Date, CveSeccionAlmacen As Integer, SeccionAlmacen As String) If DdlAlmacen.SelectedValue.ToEntero <= 0 Then Alert("Seleccione un almacen", TipoMensaje.MsgAdvertencia) : RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") : DdlProducto2.SelectedText = "" : Exit Sub Dim Valido As Boolean = True @@ -1201,7 +1201,7 @@ Partial Class Inventarios_EntradasSalidas Dim FechaCaducidadVal As Date = If(RowPS("AplicaCaducidad").ToString = "True", FechaCaducidad, MinFecha) - If CveMetodoInventario = 5 And (String.IsNullOrEmpty(SerieLote.Trim()) OrElse SerieLote = "-1") Then + If CveMetodoInventario = 5 And (String.IsNullOrEmpty(Serie.Trim()) OrElse Serie = "-1") Then Valido = False Alert("El producto requiere Serie", TipoMensaje.MsgAdvertencia) End If @@ -1209,9 +1209,9 @@ Partial Class Inventarios_EntradasSalidas 'salida If Valido AndAlso DdlConcepto.SelectedValue.Contiene({"3", "5", "7", "8", "11", "12", "13", "15", "16", "17", "20", "21", "30", "31"}) Then ' salida de almacen - Dim Existencia As Double = GetExistencias(CvePS, CveUM, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, -1, If(SerieLote = "", "-1", SerieLote), If(Lote = "", "-1", Lote), FechaCaducidadVal) + Dim Existencia As Double = GetExistencias(CvePS, CveUM, UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, -1, If(Serie = "", "-1", Serie), If(Lote = "", "-1", Lote), FechaCaducidadVal) ' LbAgregar.ToolTip = Existencia.ToString - If Existencia - Cantidad - DtMovimientos.SUM("Cantidad", $"CvePS = {CvePS} AND CveUM = {CveUM} {If(SerieLote <> "", $" AND Serie = '{SerieLote}'", "")}") < 0 Then + If Existencia - Cantidad - DtMovimientos.SUM("Cantidad", $"CvePS = {CvePS} AND CveUM = {CveUM} {If(Serie <> "", $" AND Serie = '{Serie}'", "")}") < 0 Then If Existencia <= 0 Then Alert("No hay existencia del producto", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") @@ -1230,12 +1230,12 @@ Partial Class Inventarios_EntradasSalidas If Valido Then Dim CveClasificacion As Integer - Dim dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS).FiltroPrimero("", "PS") - If dr IsNot Nothing Then CveClasificacion = dr("CveClasificacion").ToString.ToEntero + 'Dim dr As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS).FiltroPrimero("", "PS") + If RowPS IsNot Nothing Then CveClasificacion = RowPS("CveClasificacion").ToString.ToEntero 'VALIDA QUE LA SERIE NO SEA IGUAL AL CODIGO O CODIGOBARRAS - If SerieLote <> "" And (SerieLote.ToUpper = dr("Codigo").ToString.ToUpper Or SerieLote.ToUpper = dr("CodigoBarras").ToString.ToUpper) Then - Alert($"La serie indicada {SerieLote} coincide con el codigo o codigo de barras del producto. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) + If Serie <> "" And (Serie.ToUpper = RowPS("Codigo").ToString.ToUpper Or Serie.ToUpper = RowPS("CodigoBarras").ToString.ToUpper) Then + Alert($"La serie indicada {Serie} coincide con el codigo o codigo de barras del producto. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If @@ -1258,7 +1258,7 @@ Partial Class Inventarios_EntradasSalidas registro.Item("CodigoAF") = CodigoAF registro.Item("Codigo") = Codigo registro.Item("CveAF") = CveAF - registro.Item("Serie") = If(SerieLote <> "", SerieLote, "") + registro.Item("Serie") = If(Serie <> "", Serie, "") registro.Item("Lote") = If(Lote <> "", Lote, "") registro.Item("FechaCaducidad") = FechaCaducidad registro.Item("Observaciones") = Observaciones @@ -2938,6 +2938,7 @@ Partial Class Inventarios_EntradasSalidas End If TdSeriePS.Visible = False + TdSeccionPSAdd.Visible = False Dim Dr = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras= '{TxtCodigoPS.Text}'") If Dr Is Nothing Then @@ -2947,7 +2948,7 @@ Partial Class Inventarios_EntradasSalidas Exit Sub End If - If Dr("Inv_CveMetodoInventario").ToString.ToEntero = 5 Then + If Dr("AplicaSerie").ToString = "True" Then TdSeriePSAdd.Visible = True TxtSeriePS.Focus() CvePSSerieLote = Dr("CvePS").ToString.ToEntero @@ -2956,8 +2957,32 @@ Partial Class Inventarios_EntradasSalidas UMSerieLote = Dr("UnidadMedida").ToString Exit Sub End If + Dim CveSeccionAlmacen As Integer = -1 + Dim SeccionAlmacen As String = "" - AddNew(Dr("CvePS").ToString.ToEntero, Dr("PSCodigo").ToString, Dr("CveUM").ToString.ToEntero, Dr("UnidadMedida").ToString, 1, Dr("CostoPromedio").ToString.ToDouble, "", "", "", "", "", "", MinFecha, -1, "") + If Dr("AplicaSeccion").ToString = "True" Then + If DdlAlmacen.SelectedValue.ToEntero <= 1 Then + Alert("No se ha especificado el almacen para especificar la sección", TipoMensaje.MsgError) + Exit Sub + End If + DdlSeccionPSAdd.Items.Clear() + Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, Dr("CvePS").ToString.ToEntero) + DdlSeccionPSAdd.DataSource = dtt + DdlSeccionPSAdd.DataBind() + If dtt.Rows.Count > 1 Then + DdlSeccionPSAdd.Items.Insert(0, New ListItem("Seleccione", "-1")) + ' si solo hay un movimiento, debe de agregar, sino debe de esperar a que seleccionen + Exit Sub + DdlSeccionPSAdd.Focus() + TdSeccionPSAdd.Visible = True + Else + CveSeccionAlmacen = DdlSeccionPSAdd.SelectedValue.ToEntero + SeccionAlmacen = DdlSeccionPSAdd.SelectedItem.Text + End If + + End If + + AddNew(Dr("CvePS").ToString.ToEntero, Dr("PSCodigo").ToString, Dr("CveUM").ToString.ToEntero, Dr("UnidadMedida").ToString, 1, Dr("CostoPromedio").ToString.ToDouble, "", "", "", "", "", "", MinFecha, CveSeccionAlmacen, SeccionAlmacen) TxtCodigoPS.Text = "" TxtCodigoPS.Focus() @@ -2968,6 +2993,11 @@ Partial Class Inventarios_EntradasSalidas If TxtSeriePS.Text.Trim = "" Then Exit Sub End If + If TdSeccionPSAdd.Visible Then + If DdlSeccionAlmacen.SelectedValue.ToEntero <= 0 Then + Exit Sub + End If + End If AddNew(CvePSSerieLote, PSSerieLote, CveUMSerieLote, UMSerieLote, 1, 0, TxtSeriePS.Text.Trim, "", "", "", "", "", MinFecha, -1, "") From 528f5d03c0d09e1a790e4d54c48cf9e2137f5558 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 25 Jul 2020 15:19:09 -0700 Subject: [PATCH 08/37] - modulo en movimeinto --- Inventarios/RecepcionAlmacen.aspx.vb | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index b6642b36d..ea1db1741 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -2382,6 +2382,8 @@ Partial Class Inventarios_RecepcionAlmacen Dim CveClienteActual = -1 Dim CveAlmacenDestino = CveAlmacenApartado + Dim CveSeccionDestino As Integer = -1 + For Each Dr As DataRow In ObjInventario.DtResultados.Rows If CveVendedorActual = -1 Or (Dr("CveVendedor").ToString.ToEntero <> CveVendedorActual Or Dr("CveCliente").ToString.ToEntero <> CveClienteActual) Then @@ -2391,7 +2393,7 @@ Partial Class Inventarios_RecepcionAlmacen MovtosSalida.Add(CveMovtoSalidaActual) FoliosSalida.Add(ObjInventario.Folio) - CveMovtoEntradaActual = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, CveMovimientoRelacionado:=CveMovtoSalidaActual, CveVendedor:=Dr("CveVendedor").ToString.ToEntero, CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text) + CveMovtoEntradaActual = ObjInventario.AddMovimiento(CveAlmacenDestino, 9, 1, FechaMovto, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCompraSurtir, -1, -1, -1, Observaciones:=TxtObservaciones.Text.Trim, TipoCambio:=If(DdlMonedaTC.SelectedValue.ToEntero = 1, -1, TipoCambio), CveAlmacenDestino:=CveAlmacenDestino, CveMovimientoRelacionado:=CveMovtoSalidaActual, CveVendedor:=Dr("CveVendedor").ToString.ToEntero, CveCliente:=Dr("CveCliente").ToString.ToEntero, Remision:=TxtRemision.Text, Modulo:="RA/G7") MovtosEntrada.Add(CveMovtoEntradaActual) FoliosEntrada.Add(ObjInventario.Folio) @@ -2408,8 +2410,14 @@ Partial Class Inventarios_RecepcionAlmacen ErrorMovInv = True Exit For End If + If CBool(Dr("AplicaSeccion")) Then + CveSeccionDestino = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, CveAlmacenDestino, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero + Else + CveSeccionDestino = -1 + End If - If Not ObjInventario.AddMovimientoDetalle(CveMovtoEntradaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + + If Not ObjInventario.AddMovimientoDetalle(CveMovtoEntradaActual, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSeccionDestino, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True Exit For End If From f14aa26df189dcba51845ee413426c07b365e364 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 25 Jul 2020 15:19:36 -0700 Subject: [PATCH 09/37] -global almacen usuarios --- Sistemas/UsuarioDetalle.aspx.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sistemas/UsuarioDetalle.aspx.vb b/Sistemas/UsuarioDetalle.aspx.vb index 855f31886..44533c341 100644 --- a/Sistemas/UsuarioDetalle.aspx.vb +++ b/Sistemas/UsuarioDetalle.aspx.vb @@ -1326,8 +1326,8 @@ Partial Class Sistemas_UsuarioDetalle 'RECARGA GLOBAL ALMACEN - If ObjUsuarios.GetAlmacen(-1, UsuarioActual.CveEmpresa) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing - + 'If ObjUsuarios.GetAlmacen(-1, UsuarioActual.CveEmpresa) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing + GlobalDTAlmacenUsuarios(-1, UsuarioActual.CveEmpresa) = Nothing 'RECARGA GLOBAL EMPRESAS USUARIOS If ObjUsuarios.GetUsuariosEmpresas(-1) Then From 98e5d27aeada76553e45808b7d0108ad14befa8b Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 25 Jul 2020 15:56:45 -0700 Subject: [PATCH 10/37] -- seccion en importacion de AF --- AF/AF.aspx | 10 + AF/AF.aspx.vb | 566 ++++++++++++++++++++++++++------------------------ 2 files changed, 302 insertions(+), 274 deletions(-) diff --git a/AF/AF.aspx b/AF/AF.aspx index c4357400e..82e22650c 100644 --- a/AF/AF.aspx +++ b/AF/AF.aspx @@ -2903,6 +2903,16 @@
+
+
Sección:
+
+ + + + + +
+
+ +
+ +
@@ -62,10 +66,17 @@ - - + <%----%> + - + <%----%> + + + + + + + diff --git a/Inventarios/AjustesSeccionAlmacen.aspx.vb b/Inventarios/AjustesSeccionAlmacen.aspx.vb index 726db4464..f4d99325d 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx.vb +++ b/Inventarios/AjustesSeccionAlmacen.aspx.vb @@ -33,7 +33,8 @@ Partial Class Inventarios_AjustesSeccionAlmacen Private Sub CargaDatos() Dim ObjInv As New ClsInventarios - If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacen.SelectedValue.ToEntero, DdlClasificaciones.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then + Dim FolioAux As String = If(TxtFolioFiltro.Text.Length > 0, TxtFolioFiltro.Text, "-1") + If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacen.SelectedValue.ToEntero, DdlClasificaciones.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, FolioAux) Then GvD.DataSource = ObjInv.DtResultados End If @@ -48,6 +49,14 @@ Partial Class Inventarios_AjustesSeccionAlmacen e.Row.FCDropDownList("DDlS").DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) e.Row.FCDropDownList("DDlS").DataBind() + Dim ExistenciasAux As Decimal = e.Row.DataKey("Existencia").ToDecimal + e.Row.FCRangeValidator("RVR").Enabled = ExistenciasAux > 0 + If ExistenciasAux > 0 Then + e.Row.FCRangeValidator("RVR").MaximumValue = ExistenciasAux + Else + e.Row.FCCheckBox("Chk").Visible = False + e.Row.FCRangeValidator("RVR").MaximumValue = 0 + End If End If End Sub @@ -77,11 +86,12 @@ Partial Class Inventarios_AjustesSeccionAlmacen Dim CveMovimientoDetalleEntrada As Integer = 0 Dim Cont As Integer = 0 Dim Lista As New Hashtable + Dim Cantidad As Decimal = 0 For Each gvr As GridViewRow In GvD.Rows 'que este seleccionado y que tenga diferente seccion If gvr.FCCheckBox("Chk").Checked AndAlso gvr.FCDropDownList("DDlS").SelectedValue.ToEntero <> gvr.DataKey("CveSeccionAlmacen").ToEntero Then - + Cantidad = gvr.FCTextBox("TxtCantidad").Text.ToDecimal() If gvr.DataKey("CveSeccionAlmacen").ToEntero > 0 Then ObjPS.UpdateAplicaSeccionAlmacen(gvr.DataKey("CvePS").ToEntero, UsuarioActual.CveEmpresa, True) Else @@ -89,7 +99,7 @@ Partial Class Inventarios_AjustesSeccionAlmacen End If If Not Lista.ContainsKey(gvr.DataKey("CvePS").ToEntero) Then Lista.Add(gvr.DataKey("CvePS").ToEntero, gvr.FCDropDownList("DDlS").SelectedValue.ToEntero) 'guardo que dato le corresponde - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, gvr.DataKey("Existencia").ToDecimal, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, 0, -1, CveSeccionAlmacen:=gvr.DataKey("CveSeccionAlmacen").ToEntero, Serie:=gvr.DataKey("Serie"), Lote:=gvr.DataKey("Lote"), FechaCaducidad:=gvr.DataKey("FechaCaducidad").ToDate) Then + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Cantidad, gvr.DataKey("CveUM").ToEntero, gvr.DataKey("CvePS").ToEntero, 0, -1, CveSeccionAlmacen:=gvr.DataKey("CveSeccionAlmacen").ToEntero, Serie:=gvr.DataKey("Serie"), Lote:=gvr.DataKey("Lote"), FechaCaducidad:=gvr.DataKey("FechaCaducidad").ToDate) Then ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" Exit For @@ -109,7 +119,7 @@ Partial Class Inventarios_AjustesSeccionAlmacen For Each Row As DataRow In resultado.Rows Dim CvePS = Row("CvePS").ToString().ToEntero() - Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() + 'Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim PU As Decimal = Row("PUOriginal").ToString().ToDecimal() Dim CveUM As Integer = Row("CveUM").ToString().ToEntero() Dim CveSeccionAlmacen As Integer = Lista(Row("CvePS").ToString().ToEntero()) 'GvD.Rows(ind).FCDropDownList("DDlS").SelectedValue.ToEntero ' IfNull(Row("CveSeccionAlmacen"), "-1").ToString().ToEntero() @@ -288,7 +298,7 @@ Partial Class Inventarios_AjustesSeccionAlmacen Try Dim DtExistenciasSecciones As DataTable = Nothing - If ObjInventario.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacenExcel.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa) Then + If ObjInventario.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacenExcel.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, "-1") Then DtExistenciasSecciones = ObjInventario.DtResultados.Copy() End If @@ -447,4 +457,12 @@ Partial Class Inventarios_AjustesSeccionAlmacen End If End Sub + Protected Sub Chk_Click(sender As Object, e As EventArgs) + Dim row As GridViewRow = (CType((CType(sender, CheckBox)).NamingContainer, GridViewRow)) + Dim ExistenciaBackup As Integer = row.DataKey("Existencia").ToEntero() + row.FCTextBox("TxtCantidad").Enabled = Not row.FCTextBox("TxtCantidad").Enabled + If Not row.FCTextBox("TxtCantidad").Enabled Then + row.FCTextBox("TxtCantidad").Text = ExistenciaBackup + End If + End Sub End Class \ No newline at end of file From 50b207180a61e6938fd095e42dab7871f6dce0db Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Mon, 27 Jul 2020 17:49:36 -0700 Subject: [PATCH 12/37] =?UTF-8?q?nuevo=20cat=C3=A1logo=20CatAlmacenClasifi?= =?UTF-8?q?cacionSecciones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsInventarios.vb | 86 ++++++++++ App_Code/ClsPaginas.vb | 1 + .../CatAlmacenClasificacionSecciones.aspx | 91 +++++++++++ .../CatAlmacenClasificacionSecciones.aspx.cs | 153 ++++++++++++++++++ 4 files changed, 331 insertions(+) create mode 100644 Inventarios/CatAlmacenClasificacionSecciones.aspx create mode 100644 Inventarios/CatAlmacenClasificacionSecciones.aspx.cs diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index b792e8c86..0f779f97c 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -5029,6 +5029,92 @@ Public Class ClsInventarios #End Region +#Region "Almacen Clasificacion Secciones" + Public Function AddAlmacenClasificacionSecciones(CveAlmacen As Integer, CveClasificacion As Integer, CveClasificacionDetalle As Integer, CveMarca As Integer, + CveSeccionAlmacen As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Inv_AlmacenClasificacionesSeccionesAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveAlmacen", SqlDbType.Int).Value = CveAlmacen + .Add("@CveClasificacion", SqlDbType.Int).Value = CveClasificacion + .Add("@CveClasificacionDetalle", SqlDbType.Int).Value = CveClasificacionDetalle + .Add("@CveMarca", SqlDbType.Int).Value = CveMarca + .Add("@CveSeccionAlmacen", SqlDbType.Int).Value = CveSeccionAlmacen + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar la relación Almacén Clasificación Sección.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function GetAlmacenClasificacionSecciones(CveSeccionClasificacion As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Inv_AlmacenClasificacionesSeccionesGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSeccionClasificacion", SqlDbType.Int).Value = CveSeccionClasificacion + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el Almacén Clasificación Sección.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function UpdateAlmacenClasificacionSecciones(CveSeccionClasificacion As Integer, CveAlmacen As Integer, CveClasificacion As Integer, CveClasificacionDetalle As Integer, + CveMarca As Integer, CveSeccionAlmacen As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Inv_AlmacenClasificacionesSeccionesUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSeccionClasificacion", SqlDbType.Int).Value = CveSeccionClasificacion + .Add("@CveAlmacen", SqlDbType.Int).Value = CveAlmacen + .Add("@CveClasificacion", SqlDbType.Int).Value = CveClasificacion + .Add("@CveClasificacionDetalle", SqlDbType.Int).Value = CveClasificacionDetalle + .Add("@CveMarca", SqlDbType.Int).Value = CveMarca + .Add("@CveSeccionAlmacen", SqlDbType.Int).Value = CveSeccionAlmacen + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el Almacén Clasificación Sección.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function RemoveAlmacenClasificacionSecciones(CveSeccionClasificacion As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Inv_AlmacenClasificacionesSeccionesDelete") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSeccionClasificacion", SqlDbType.Int).Value = CveSeccionClasificacion + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar el Almacén Clasificación Sección.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function +#End Region + #Region " IDisposable Support " ' IDisposable Protected Overridable Sub Dispose(ByVal disposing As Boolean) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 67aade701..4d7d3b574 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4482,6 +4482,7 @@ Public Class ClsPaginas PaginaDict.Add("/Inventarios/AjustesSeccionAlmacen.aspx".ToUpper(), 892) PaginaDict.Add("/Inventarios/RepTraspasoAlmacen.aspx".ToUpper(), 688) PaginaDict.Add("/Inventarios/EntregasPorRealizar.aspx".ToUpper(), 728) + PaginaDict.Add("/Inventarios/CatAlmacenClasificacionSecciones.aspx".ToUpper(), 764) #End Region #Region "MF" diff --git a/Inventarios/CatAlmacenClasificacionSecciones.aspx b/Inventarios/CatAlmacenClasificacionSecciones.aspx new file mode 100644 index 000000000..20e77d5e7 --- /dev/null +++ b/Inventarios/CatAlmacenClasificacionSecciones.aspx @@ -0,0 +1,91 @@ +<%@ Page Title="Inventarios - Catálogo almacén clasificación secciones" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CatAlmacenClasificacionSecciones.aspx.cs" Inherits="Inventarios_CatAlmacenClasificacionSecciones" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Catálogo de Almacén Clasificacion Secciones + + + + +
  • + +
  • + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs b/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs new file mode 100644 index 000000000..8e44d3ef3 --- /dev/null +++ b/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs @@ -0,0 +1,153 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using System.Data; +using Extensiones; + +public partial class Inventarios_CatAlmacenClasificacionSecciones : ClsPaginas +{ + private int CveSeccionClasificacion + { + get + { + return ViewState["CveSeccionClasificacion"].ToString().ToEntero(); + } + + set + { + ViewState["CveSeccionClasificacion"] = value; + } + } + + protected void Page_Load(object sender, EventArgs e) + { + if (!Page.IsPostBack) + { + CargarDatos(); + CargarDropDowns(); + } + } + + private void CargarDatos() + { + ClsInventarios Objinv = new ClsInventarios(); + if (Objinv.GetAlmacenClasificacionSecciones(-1,UsuarioActual.CveEmpresa)) + { + GvDatos.DataSource = Objinv.DtResultados; + } + Objinv.Dispose(); + GvDatos.DataBind(); + } + private void CargarDropDowns() + { + DdlAlmacen.DataSource = get_GlobalDTAlmacen(UsuarioActual.CveEmpresa); + DdlAlmacen.DataBind(); + DdlAlmacen.Items.Insert(0, new ListItem("Seleccione", "-1")); + + DdlClasificacion.DataSource = get_GlobalDTClasificaciones(CveEmpresa:UsuarioActual.CveEmpresa); + DdlClasificacion.DataBind(); + DdlClasificacion.Items.Insert(0, new ListItem("Seleccione", "-1")); + + DdlTipo.DataSource = get_GlobalDTClasificacionesDetalle(UsuarioActual.CveEmpresa); + DdlTipo.DataBind(); + DdlTipo.Items.Insert(0, new ListItem("Seleccione", "-1")); + + ClsProductosServicios ObjMarcas = new ClsProductosServicios(); + ObjMarcas.GetMarcas(UsuarioActual.CveEmpresa); + DdlMarca.DataSource = ObjMarcas.DtResultados; + ObjMarcas.Dispose(); + DdlMarca.DataBind(); + DdlMarca.Items.Insert(0, new ListItem("Seleccione", "-1")); + + } + + protected void DdlAlmacen_Change(object sender, EventArgs e) + { + + int CveAlmacen = ((DropDownList)sender).SelectedValue.ToEntero(); + CargarSeccionAlmacen(CveAlmacen); + + } + private void CargarSeccionAlmacen(int CveAlmacen) + { + DdlSeccionAlmacen.DataSource = get_GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, CveAlmacen); + DdlSeccionAlmacen.DataBind(); + DdlSeccionAlmacen.Items.Insert(0, new ListItem("Seleccione", "-1")); + } + + protected void BtnAgregarAlmacenClasificacionSeccion_Click(object sender, EventArgs e) + { + DdlAlmacen.SelectedValue = "-1"; + DdlClasificacion.SelectedValue = "-1"; + DdlTipo.SelectedValue = "-1"; + DdlMarca.SelectedValue = "-1"; + DdlSeccionAlmacen.Items.Clear(); + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void BtnAgregarACS_Click(object sender, EventArgs e) + { + ClsInventarios ObjInv = new ClsInventarios(); + + if (BtnAgregarACS.Text == "Agregar") + { + if (ObjInv.AddAlmacenClasificacionSecciones(DdlAlmacen.SelectedValue.ToEntero(),DdlClasificacion.SelectedValue.ToEntero(),DdlTipo.SelectedValue.ToEntero(), + DdlMarca.SelectedValue.ToEntero(),DdlSeccionAlmacen.SelectedValue.ToEntero())) + { + Alert("Se agregó correctamente Almacén Clasificación Sección"); + } + }else + { + if (ObjInv.UpdateAlmacenClasificacionSecciones(CveSeccionClasificacion,DdlAlmacen.SelectedValue.ToEntero(), DdlClasificacion.SelectedValue.ToEntero(), DdlTipo.SelectedValue.ToEntero(), + DdlMarca.SelectedValue.ToEntero(), DdlSeccionAlmacen.SelectedValue.ToEntero())) + { + Alert("Se actualizó correctamente Almacén Clasificación Sección"); + } + } + + CargarDatos(); + UpDatos.Update(); + + ObjInv.Dispose(); + } + + protected void LnkEditar_Click(object sender, EventArgs e) + { + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + string CveAlmacen = GvRow.DataKey("CveAlmacen"); + string CveClasificacion = GvRow.DataKey("CveClasificacion"); + string CveClasificacionDetalle = GvRow.DataKey("CveClasificacionDetalle"); + string CveMarca = GvRow.DataKey("CveMarca"); + string CveSeccionAlmacen = GvRow.DataKey("CveSeccionAlmacen"); + BtnAgregarACS.Text = "Actualizar"; + + CveSeccionClasificacion = GvRow.DataKey("CveSeccionClasificacion").ToEntero(); + + DdlAlmacen.SelectedValue = CveAlmacen; + CargarSeccionAlmacen(CveAlmacen.ToEntero()); + DdlClasificacion.SelectedValue = CveClasificacion; + DdlTipo.SelectedValue = CveClasificacionDetalle; + DdlMarca.SelectedValue = CveMarca; + DdlSeccionAlmacen.SelectedValueExist(CveSeccionAlmacen); + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void LnkEliminar_Click(object sender,EventArgs e) + { + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + int CveSeccionClasificacion = GvRow.DataKey("CveSeccionClasificacion").ToEntero(); + ClsInventarios ObjInv = new ClsInventarios(); + if (ObjInv.RemoveAlmacenClasificacionSecciones(CveSeccionClasificacion)) + { + CargarDatos(); + UpDatos.Update(); + Alert("Se eliminó correctamente Almacén Clasificación Sección"); + } + ObjInv.Dispose(); + } +} \ No newline at end of file From a91e60b0057f12aeff3c284319d5770c12ca8b33 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 28 Jul 2020 10:33:31 -0700 Subject: [PATCH 13/37] Cargar ddl proyecto subproyecto con Centro de costo --- OC/PopUpBuscarReq.aspx | 4 ++-- OC/PopUpBuscarReq.aspx.vb | 29 +++++++++++++++-------------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/OC/PopUpBuscarReq.aspx b/OC/PopUpBuscarReq.aspx index 2bb888b1e..5e52d59d0 100644 --- a/OC/PopUpBuscarReq.aspx +++ b/OC/PopUpBuscarReq.aspx @@ -68,13 +68,13 @@ - Proyecto: + - + diff --git a/OC/PopUpBuscarReq.aspx.vb b/OC/PopUpBuscarReq.aspx.vb index f4d2d40c4..92216f52f 100644 --- a/OC/PopUpBuscarReq.aspx.vb +++ b/OC/PopUpBuscarReq.aspx.vb @@ -70,18 +70,19 @@ Partial Class OC_PopUpBuscarReq txtFechaI.Text = Now.FirstDayOfMonth.AddMonths(-3).ToShortDateString CargaEstatus() - If UsuarioActual.Empresa.GralSoloProyecto Then - TdProyecto.Visible = False - TdProyecto2.Visible = False - LtSubProyecto.Text = "Proyecto:" - Else - 'DdlProyectos.DataSource = DtEstatusUsuarios.FiltraParametros("", "", {"CveProyecto", "Proyecto"}) 'GlobalDTProyectos(UsuarioActual.CveEmpresa, 1) - 'DdlProyectos.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), - ' GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1)) - DdlProyectos.DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) - DdlProyectos.DataBind() - DdlProyectos.Items.Insert(0, New ListItem("Todos", "-1")) - End If + CargarCentrosDeCosto(DdlProyectos, DdlSubProyectos, LblProyecto, LtSubProyecto) + 'If UsuarioActual.Empresa.GralSoloProyecto Then + ' TdProyecto.Visible = False + ' TdProyecto2.Visible = False + ' LtSubProyecto.Text = "Proyecto:" + 'Else + ' 'DdlProyectos.DataSource = DtEstatusUsuarios.FiltraParametros("", "", {"CveProyecto", "Proyecto"}) 'GlobalDTProyectos(UsuarioActual.CveEmpresa, 1) + ' 'DdlProyectos.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), + ' ' GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1)) + ' DdlProyectos.DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) + ' DdlProyectos.DataBind() + ' DdlProyectos.Items.Insert(0, New ListItem("Todos", "-1")) + 'End If DdlProveedor.DataSource = GlobalDTCompProveedores(UsuarioActual.CveEmpresa) DdlProveedor.DataBind() @@ -161,10 +162,10 @@ Partial Class OC_PopUpBuscarReq Dim CveProyecto = -1 Dim CveSubProyecto = -1 - If UsuarioActual.Empresa.GralSoloProyecto Then + If LblProyecto.Visible Then + CveProyecto = DdlProyectos.SelectedValue.ToEntero CveSubProyecto = DdlSubProyectos.SelectedValue.ToEntero Else - CveProyecto = DdlProyectos.SelectedValue.ToEntero CveSubProyecto = DdlSubProyectos.SelectedValue.ToEntero End If From 5338f397713767bc2d4ba612b0e943ccb196fa85 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 28 Jul 2020 16:57:55 -0700 Subject: [PATCH 14/37] - --- Ventas/ProductosServicios.aspx | 438 ++++++++++++++------------ Ventas/ProductosServicios.aspx.vb | 16 +- Ventas/RepRecuperacionPeriodo.aspx.cs | 2 +- Ventas/Ventas.aspx.vb | 2 +- 4 files changed, 245 insertions(+), 213 deletions(-) diff --git a/Ventas/ProductosServicios.aspx b/Ventas/ProductosServicios.aspx index 075222523..089baf909 100644 --- a/Ventas/ProductosServicios.aspx +++ b/Ventas/ProductosServicios.aspx @@ -549,11 +549,13 @@
    +
    +
    @@ -721,6 +723,7 @@
    Seleccionar Todos +
    @@ -785,234 +788,239 @@ -
    -
    -
    -
    -
    - - Inventarios -
    -
    -
    + + + +
    +
    +
    +
    +
    + + Inventarios +
    +
    +
    +
    +
    -
    -
    -
    - <%--
    +
    + <%--
    --%> -
    - -
    - - - - - - - +
    + +
    + + + + + + + +
    +
    +
    + +
    + +
    +
    + + + <%--Nuevo R: 27/09/2017--%> + +
    + +
    + + + +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + + + + + + + + + + +
    +
    -
    - -
    - +
    +
    +
    +
    +
    + + Concepto Relacionado +
    +
    +
    +
    +
    -
    - - - <%--Nuevo R: 27/09/2017--%> - -
    - -
    - - - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    - +
    +
    + +
    + + + +
    +

    -
    -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    - - - - - - - - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - Concepto Relacionado -
    -
    -
    -
    -
    -
    -
    -
    - -
    - - - -
    -
    -
    -
    -
    -
    -
    -
    - - Comercio Exterior -
    -
    -
    -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    -
    -
    - - -
    -
    -
    -
    - - Secciones de Almacen -
    -
    -
    - -
    +
    +
    +
    + + Comercio Exterior +
    +
    +
    -
    - - - - -<%-- +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + Secciones de Almacen +
    +
    +
    + +
    +
    +
    +
    + + + + + <%-- --%> - - - - - - - + + + + + + + +
    +
    -
    -
    - - -
    -
    + + +
    +
    + + @@ -1085,6 +1093,8 @@ Característica + + @@ -1092,6 +1102,8 @@ Opción + + @@ -1099,6 +1111,8 @@ Fecha Ing. + + @@ -1106,6 +1120,8 @@ Usuario + + @@ -1748,6 +1764,8 @@

    El producto seleccionado en el recuadro de arriba sera unificado en el producto actual + +

    @@ -1980,6 +1998,7 @@

    Tipo de Clasificación: +

    @@ -1990,6 +2009,7 @@   +
    diff --git a/Ventas/ProductosServicios.aspx.vb b/Ventas/ProductosServicios.aspx.vb index 3346340c1..e88ebc310 100644 --- a/Ventas/ProductosServicios.aspx.vb +++ b/Ventas/ProductosServicios.aspx.vb @@ -1127,6 +1127,13 @@ Partial Class ProductosyServicios Return End If + If ddlMetodos.SelectedValue = "5" Or ChkSerie.Checked Then + If Not (ddlMetodos.SelectedValue = "5" And ChkSerie.Checked) Then + Dim Mensaje As String = If(ddlMetodos.SelectedValue = "5", "Si el método de salida del inventario es 'SerieLote' el producto debe poder aplicar serie", "Si el produco aplica serie el método de inventario debe ser 'SerieLote'") + Alert(Mensaje) + Exit Sub + End If + End If 'If DdlSubFamilia.SelectedValue = "-1" AndAlso UsuarioActual.TienePermisoProceso(138) Then ' Alert("Se debe especificar Familia y Subfamilia de Costos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) ' Exit Sub @@ -2640,11 +2647,16 @@ Partial Class ProductosyServicios Else ChkSerie.Checked = False End If - + UpConta.Update() End Sub Protected Sub ChkSerie_CheckedChanged(sender As Object, e As EventArgs) - + If ChkSerie.Checked Then + ddlMetodos.SelectedValueExist("5") + Else + ddlMetodos.SelectedValueExist("-1") + End If + UpConta.Update() End Sub Protected Sub ChkSeccion_CheckedChanged(sender As Object, e As EventArgs) diff --git a/Ventas/RepRecuperacionPeriodo.aspx.cs b/Ventas/RepRecuperacionPeriodo.aspx.cs index 3718754c3..b5d5eefc9 100644 --- a/Ventas/RepRecuperacionPeriodo.aspx.cs +++ b/Ventas/RepRecuperacionPeriodo.aspx.cs @@ -298,7 +298,7 @@ public partial class Ventas_RepRecuperacionPeriodo : ClsPaginas DdlCuentaBancaria.Items.Clear(); if (DdlBanco.SelectedValue.ToEntero() > 0) { - DdlCuentaBancaria.DataSource = get_GlobalDTBancosCuentas(-1, CveEmpresa:= UsuarioActual.CveEmpresa).FiltraParametros($"CveBanco = {DdlBanco.SelectedValue.ToEntero()}"); + DdlCuentaBancaria.DataSource = get_GlobalDTBancosCuentas(-1, CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros($"CveBanco = {DdlBanco.SelectedValue.ToEntero()}"); } DdlCuentaBancaria.Items.Insert(0, new ListItem("Todos", "-1")); DdlCuentaBancaria.DataBind(); diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 91b72eaad..b1bba871d 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -9577,7 +9577,7 @@ Partial Class Ventas End If - If UsuarioActual.Empresa.Funcionalidad(280) = "1" And RblPaqueteria.SelectedValue = "1" Then + If UsuarioActual.Empresa.Funcionalidad(280) = "1" And RblPaqueteria.SelectedValue = "1" And Not factura.TipoDocto.Contiene("Rem", "Ped") Then NotificarPaqueteria() End If End If From c7f6f4d76c9453619c5b0de7d6e3f3ab3b171fc8 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 28 Jul 2020 23:13:39 -0700 Subject: [PATCH 15/37] -- liberar con secciones --- RH/Personal.aspx | 13 ++++++--- RH/Personal.aspx.vb | 66 ++++++++++++++++++++++++++++----------------- 2 files changed, 51 insertions(+), 28 deletions(-) diff --git a/RH/Personal.aspx b/RH/Personal.aspx index 9dce78f67..61cb93da8 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -829,7 +829,7 @@ - @@ -3861,13 +3861,18 @@
    @@ -723,7 +723,7 @@ - +
    From bb323d26ebf05ccd0900c4a631273daac36920d4 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Wed, 29 Jul 2020 12:40:43 -0700 Subject: [PATCH 21/37] =?UTF-8?q?se=20agreg=C3=B3=20el=20rol=20de=20almace?= =?UTF-8?q?nista=20a=20los=20usuarios=20que=20pueden=20realizar=20entregas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Inventarios/EntregasPorRealizar.aspx.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Inventarios/EntregasPorRealizar.aspx.cs b/Inventarios/EntregasPorRealizar.aspx.cs index d3a5ba81e..38a82c6c9 100644 --- a/Inventarios/EntregasPorRealizar.aspx.cs +++ b/Inventarios/EntregasPorRealizar.aspx.cs @@ -104,7 +104,7 @@ public partial class Inventarios_EntregasPorRealizar : ClsPaginas private void CargarPersonal() { - DataTable UsuariosConRolLogistico = get_GlobalDTUsuarios(CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros("CveRol IN (1339,1386,1430)"); + DataTable UsuariosConRolLogistico = get_GlobalDTUsuarios(CveEmpresa: UsuarioActual.CveEmpresa).FiltraParametros("CveRol IN (1339,1386,1430,1155)"); DdlUsuario.DataSource = UsuariosConRolLogistico; DdlUsuario.DataBind(); DdlUsuario.Items.Insert(0, new ListItem("Seleccione", "-1")); From 222f0f2570d31884512a0b37c4a098bcb8b8c7dd Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Wed, 29 Jul 2020 13:03:02 -0700 Subject: [PATCH 22/37] --- Bin/System.IdentityModel.Tokens.Jwt.dll | Bin 0 -> 90320 bytes ...ystem.IdentityModel.Tokens.Jwt.dll.refresh | Bin 0 -> 274 bytes Bin/System.IdentityModel.Tokens.Jwt.xml | 1433 +++++++++++++++++ 3 files changed, 1433 insertions(+) create mode 100644 Bin/System.IdentityModel.Tokens.Jwt.dll create mode 100644 Bin/System.IdentityModel.Tokens.Jwt.dll.refresh create mode 100644 Bin/System.IdentityModel.Tokens.Jwt.xml diff --git a/Bin/System.IdentityModel.Tokens.Jwt.dll b/Bin/System.IdentityModel.Tokens.Jwt.dll new file mode 100644 index 0000000000000000000000000000000000000000..bb9aec48743ab4b3b4155e0636531d4dc9c2bfa6 GIT binary patch literal 90320 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 literal 0 HcmV?d00001 diff --git a/Bin/System.IdentityModel.Tokens.Jwt.dll.refresh b/Bin/System.IdentityModel.Tokens.Jwt.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..e775ba7e5480dc048e4779c47dd367d4040e9f33 GIT binary patch literal 274 zcmbu2K?=e!5JlgKilBnH?MlIwx+{pbMN4B9+akTZ`jRV1n3>G~FZth3&YFTFJvA?T zLC%?xiiY5MsPy(xx0ETIHBXhuM!%E~+>$bIV#QMDsan$7ukw-IGdTyhI~f}jYC8AE pn%Mb1Dnakyy-jZKw&g96`D@19nx))^i?fp&Sfs>%|F6sr`~djbH8}tP literal 0 HcmV?d00001 diff --git a/Bin/System.IdentityModel.Tokens.Jwt.xml b/Bin/System.IdentityModel.Tokens.Jwt.xml new file mode 100644 index 000000000..808377f8e --- /dev/null +++ b/Bin/System.IdentityModel.Tokens.Jwt.xml @@ -0,0 +1,1433 @@ + + + + System.IdentityModel.Tokens.Jwt + + + +

    + Defines the inbound and outbound mapping for claim claim types from jwt to .net claim + + + + + Initializes static members of the class. + + + + + Gets the InboundClaimTypeMap used by JwtSecurityTokenHandler when producing claims from jwt. + + + + + Gets the OutboundClaimTypeMap is used by JwtSecurityTokenHandler to shorten claim types when creating a jwt. + + + + + Constants for Json Web tokens. + + + + + A URI that represents the JSON XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON array XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON null data type + + When mapping json to .Net Claim(s), we use empty string to represent the claim value and set the ClaimValueType to JsonNull + + + + Delegate that can be set on to control serialization of objects into JSON. + + Object to serialize + The serialized object. + + + + Delegate that can be set on to control deserialization JSON into objects. + + JSON to deserialize. + Type expected. + The deserialized object. + + + + Dictionary extensions for serializations + + + + + Gets or sets a to use when serializing objects to JSON. + + If 'value' is null. + + + + Gets or sets a to use when deserializing objects from JSON. + + If 'value' is null. + + + + Serializes an object to JSON. + + The object to serialize + The object as JSON. + + + + Deserialzes JSON into an instance of type T. + + The object type. + The JSON to deserialze. + A new instance of type T. + + + + Deserialzes JSON into an instance of . + + The JSON to deserialze. + A new instance . + + + + Deserialzes JSON into an instance of . + + The JSON to deserialze. + A new instance . + + + + Constants for Json Web tokens. + + + + + Short header type. + + + + + Long header type. + + + + + Short token type. + + + + + Long token type. + + + + + JWS - Token format: 'header.payload.signature'. Signature is optional, but '.' is required. + + + + + JWE - Token format: 'protectedheader.encryptedkey.iv.cyphertext.authenticationtag'. + + + + + The number of parts in a JWE token. + + + + + The number of parts in a JWS token. + + + + + The maximum number of parts in a JWT. + + + + + JWE header alg indicating a shared symmetric key is directly used as CEK. + + + + + Initializes a new instance of which contains JSON objects representing the cryptographic operations applied to the JWT and optionally any additional properties of the JWT. + The member names within the JWT Header are referred to as Header Parameter Names. + These names MUST be unique and the values must be (s). The corresponding values are referred to as Header Parameter Values. + + + + + Initializes a new instance of the class. Default string comparer . + + + + + Initializes a new instance of . + With the Header Parameters: + { { typ, JWT }, { alg, SigningCredentials.Algorithm } } + + used creating a JWS Compact JSON. + + + + Initializes a new instance of . + With the Header Parameters: + { { typ, JWT }, { alg, EncryptingCredentials.Alg }, { enc, EncryptingCredentials.Enc } } + + used creating a JWE Compact JSON. + If 'encryptingCredentials' is null. + + + + Initializes a new instance of . + With the Header Parameters: + { { typ, JWT }, { alg, SigningCredentials.Algorithm } } + + used when creating a JWS Compact JSON. + provides a mapping for the 'alg' value so that values are within the JWT namespace. + + + + Initializes a new instance of . + With the Header Parameters: + { { typ, JWT }, { alg, SigningCredentials.Algorithm } } + + used when creating a JWS Compact JSON. + provides a mapping for the 'alg' value so that values are within the JWT namespace. + If 'signingCredentials' is null. + + + + Gets the signature algorithm that was used to create the signature. + + If the signature algorithm is not found, null is returned. + + + + Gets the content mime type (Cty) of the token. + + If the content mime type is not found, null is returned. + + + + Gets the encryption algorithm (Enc) of the token. + + If the content mime type is not found, null is returned. + + + + Gets the passed in the constructor. + + This value may be null. + + + + Gets the iv of symmetric key wrap. + + + + + Gets the key identifier for the security key used to sign the token + + + + + Gets the passed in the constructor. + + This value may be null. + + + + Gets the mime type (Typ) of the token. + + If the mime type is not found, null is returned. + + + + Gets the thumbprint of the certificate used to sign the token + + + + + Deserializes Base64UrlEncoded JSON into a instance. + + Base64url encoded JSON to deserialize. + An instance of . + Use to customize JSON serialization. + + + + Encodes this instance as Base64UrlEncoded JSON. + + Base64UrlEncoded JSON. + Use to customize JSON serialization. + + + + Deserialzes JSON into a instance. + + The JSON to deserialize. + An instance of . + Use to customize JSON serialization. + + + + Gets a standard claim from the header. + A standard claim is either a string or a value of another type serialized in JSON format. + + The key of the claim. + The standard claim string; or null if not found. + + + + Serializes this instance to JSON. + + This instance as JSON. + Use to customize JSON serialization. + + + + List of header parameter names see: http://tools.ietf.org/html/rfc7519#section-5. + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.10 + also:https://tools.ietf.org/html/rfc7519#section-5.2 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7518#section-4.7.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.3 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.4 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.9 + also:https://tools.ietf.org/html/rfc7519#section-5.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.6 + + + + + see:https://tools.ietf.org/html/rfc7515#page-12 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.5 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.3 + + + + + Initializes a new instance of which contains JSON objects representing the claims contained in the JWT. Each claim is a JSON object of the form { Name, Value }. + + + + + Initializes a new instance of the class with no claims. Default string comparer . + Creates a empty + + + + + Initializes a new instance of the class with . Default string comparer . + The claims to add. + + + + + Initializes a new instance of the class with claims added for each parameter specified. Default string comparer . + + If this value is not null, a { iss, 'issuer' } claim will be added. + If this value is not null, a { aud, 'audience' } claim will be added + If this value is not null then for each a { 'Claim.Type', 'Claim.Value' } is added. If duplicate claims are found then a { 'Claim.Type', List<object> } will be created to contain the duplicate values. + If notbefore.HasValue is 'true' a { nbf, 'value' } claim is added. + If expires.HasValue is 'true' a { exp, 'value' } claim is added. + + + + Initializes a new instance of the class with claims added for each parameter specified. Default string comparer . + + If this value is not null, a { iss, 'issuer' } claim will be added. + If this value is not null, a { aud, 'audience' } claim will be added + If this value is not null then for each a { 'Claim.Type', 'Claim.Value' } is added. If duplicate claims are found then a { 'Claim.Type', List<object> } will be created to contain the duplicate values. + If notbefore.HasValue is 'true' a { nbf, 'value' } claim is added. + If expires.HasValue is 'true' a { exp, 'value' } claim is added. + If issuedAt.HasValue is 'true' a { iat, 'value' } claim is added. + Comparison is set to + The 4 parameters: 'issuer', 'audience', 'notBefore', 'expires' take precednece over (s) in 'claims'. The values in 'claims' will be overridden. + If 'expires' <= 'notbefore'. + + + + Gets the 'value' of the 'actor' claim { actort, 'value' }. + + If the 'actor' claim is not found, null is returned. + + + + Gets the 'value' of the 'acr' claim { acr, 'value' }. + + If the 'acr' claim is not found, null is returned. + + + + Gets the 'value' of the 'amr' claim { amr, 'value' } as list of strings. + + If the 'amr' claim is not found, an empty enumerable is returned. + + + + Gets the 'value' of the 'auth_time' claim { auth_time, 'value' }. + + If the 'auth_time' claim is not found OR could not be converted to , null is returned. + + + + Gets the 'value' of the 'audience' claim { aud, 'value' } as a list of strings. + + If the 'audience' claim is not found, an empty enumerable is returned. + + + + Gets the 'value' of the 'azp' claim { azp, 'value' }. + + If the 'azp' claim is not found, null is returned. + + + + Gets 'value' of the 'c_hash' claim { c_hash, 'value' }. + + If the 'c_hash' claim is not found, null is returned. + + + + Gets the 'value' of the 'expiration' claim { exp, 'value' }. + + If the 'expiration' claim is not found OR could not be converted to , null is returned. + + + + Gets the 'value' of the 'JWT ID' claim { jti, 'value' }. + + If the 'JWT ID' claim is not found, null is returned. + + + + Gets the 'value' of the 'Issued At' claim { iat, 'value' }. + + If the 'Issued At' claim is not found OR cannot be converted to null is returned. + + + + Gets the 'value' of the 'issuer' claim { iss, 'value' }. + + If the 'issuer' claim is not found, null is returned. + + + + Gets the 'value' of the 'expiration' claim { nbf, 'value' }. + + If the 'notbefore' claim is not found OR could not be converted to , null is returned. + + + + Gets the 'value' of the 'nonce' claim { nonce, 'value' }. + + If the 'nonce' claim is not found, null is returned. + + + + Gets the 'value' of the 'subject' claim { sub, 'value' }. + + If the 'subject' claim is not found, null is returned. + + + + Gets the 'value' of the 'notbefore' claim { nbf, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'notbefore' claim is not found, then is returned. Time is returned as UTC. + + + + Gets the 'value' of the 'expiration' claim { exp, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'expiration' claim is not found, then is returned. + + + + Gets a for each JSON { name, value }. + + Each (s) returned will have the translated according to the mapping found in . Adding and removing to will affect the value of the . + and will be set to the value of ( if null). + + + + Adds a JSON object representing the to the + + { 'Claim.Type', 'Claim.Value' } is added. If a JSON object is found with the name == then a { 'Claim.Type', List<object> } will be created to contain the duplicate values. + See For details on how is applied. + 'claim' is null. + + + + Adds a number of to the as JSON { name, value } pairs. + + For each a JSON pair { 'Claim.Type', 'Claim.Value' } is added. If duplicate claims are found then a { 'Claim.Type', List<object> } will be created to contain the duplicate values. + + Any in the that is null, will be ignored. + 'claims' is null. + + + + Gets the DateTime using the number of seconds from 1970-01-01T0:0:0Z (UTC) + + Claim in the payload that should map to an integer. + If the claim is not found, the function returns: DateTime.MinValue + + If an overflow exception is thrown by the runtime. + The DateTime representation of a claim. + + + + Serializes this instance to JSON. + + This instance as JSON. + Use to customize JSON serialization. + + + + Encodes this instance as Base64UrlEncoded JSON. + + Base64UrlEncoded JSON. + Use to customize JSON serialization. + + + + Deserializes Base64UrlEncoded JSON into a instance. + + base64url encoded JSON to deserialize. + An instance of . + Use to customize JSON serialization. + + + + Deserialzes JSON into a instance. + + The JSON to deserialize. + An instance of . + Use to customize JSON serialization. + + + + List of registered claims from different sources + http://tools.ietf.org/html/rfc7519#section-4 + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-frontchannel-1_0.html#OPLogout + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + A designed for representing a JSON Web Token (JWT). + + + + + Initializes a new instance of from a string in JWS Compact serialized format. + + A JSON Web Token that has been serialized in JWS Compact serialized format. + 'jwtEncodedString' is null. + 'jwtEncodedString' contains only whitespace. + 'jwtEncodedString' is not in JWS Compact serialized format. + + The contents of this have not been validated, the JSON Web Token is simply decoded. Validation can be accomplished using + + + + + Initializes a new instance of the class where the contains the crypto algorithms applied to the encoded and . The jwtEncodedString is the result of those operations. + + Contains JSON objects representing the cryptographic operations applied to the JWT and optionally any additional properties of the JWT + Contains JSON objects representing the claims contained in the JWT. Each claim is a JSON object of the form { Name, Value } + base64urlencoded JwtHeader + base64urlencoded JwtPayload + base64urlencoded JwtSignature + 'header' is null. + 'payload' is null. + 'rawSignature' is null. + 'rawHeader' or 'rawPayload' is null or whitespace. + + + + Initializes an instance of where the contains the crypto algorithms applied to the innerToken . + + Defines cryptographic operations applied to the 'innerToken'. + + base64urlencoded key + base64urlencoded JwtHeader + base64urlencoded initialization vector. + base64urlencoded encrypted innerToken + base64urlencoded authentication tag. + 'header' is null. + 'innerToken' is null. + 'rawHeader' is null. + 'rawEncryptedKey' is null. + 'rawInitialVector' is null or empty. + 'rawCiphertext' is null or empty. + 'rawAuthenticationTag' is null or empty. + + + + Initializes a new instance of the class where the contains the crypto algorithms applied to the encoded and . The jwtEncodedString is the result of those operations. + + Contains JSON objects representing the cryptographic operations applied to the JWT and optionally any additional properties of the JWT + Contains JSON objects representing the claims contained in the JWT. Each claim is a JSON object of the form { Name, Value } + 'header' is null. + 'payload' is null. + + + + Initializes a new instance of the class specifying optional parameters. + + If this value is not null, a { iss, 'issuer' } claim will be added. + If this value is not null, a { aud, 'audience' } claim will be added + If this value is not null then for each a { 'Claim.Type', 'Claim.Value' } is added. If duplicate claims are found then a { 'Claim.Type', List<object> } will be created to contain the duplicate values. + If expires.HasValue a { exp, 'value' } claim is added. + If notbefore.HasValue a { nbf, 'value' } claim is added. + The that will be used to sign the . See for details pertaining to the Header Parameter(s). + If 'expires' <= 'notbefore'. + + + + Gets the 'value' of the 'actor' claim { actort, 'value' }. + + If the 'actor' claim is not found, null is returned. + + + + Gets the list of 'audience' claim { aud, 'value' }. + + If the 'audience' claim is not found, enumeration will be empty. + + + + Gets the (s) for this token. + If this is a JWE token, this property only returns the encrypted claims; + the unencrypted claims should be read from the header seperately. + + (s) returned will NOT have the translated according to + + + + Gets the Base64UrlEncoded associated with this instance. + + + + + Gets the Base64UrlEncoded associated with this instance. + + + + + Gets the associated with this instance if the token is signed. + + + + + Gets the 'value' of the 'JWT ID' claim { jti, ''value' }. + + If the 'JWT ID' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'issuer' claim { iss, 'value' }. + + If the 'issuer' claim is not found, an empty string is returned. + + + + Gets the associated with this instance. + Note that if this JWT is nested ( != null, this property represnts the payload of the most inner token. + This property can be null if the content type of the most inner token is unrecognized, in that case + the content of the token is the string returned by PlainText property. + + + + + Gets the associated with this instance. + + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed to one of the two constructors + or + + + + Gets the s for this instance. + + + + + Gets the signature algorithm associated with this instance. + + If there is a associated with this instance, a value will be returned. Null otherwise. + + + + Gets the to use when writing this token. + + + + + Gets the to use when writing this token. + + + + + Gets or sets the that signed this instance. + + .ValidateSignature(...) sets this value when a is used to successfully validate a signature. + + + + Gets the "value" of the 'subject' claim { sub, 'value' }. + + If the 'subject' claim is not found, null is returned. + + + + Gets the 'value' of the 'notbefore' claim { nbf, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'notbefore' claim is not found, then is returned. + + + + Gets the 'value' of the 'expiration' claim { exp, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'expiration' claim is not found, then is returned. + + + + Serializes the and + + A string containing the header and payload in JSON format. + + + + Decodes the string into the header, payload and signature. + + the tokenized string. + the original token. + + + + Decodes the payload and signature from the JWS parts. + + Parts of the JWS including the header. + Assumes Header has already been set. + + + + Decodes the payload and signature from the JWE parts. + + Parts of the JWE including the header. + Assumes Header has already been set. + + + + A designed for creating and validating Json Web Tokens. See: http://tools.ietf.org/html/rfc7519 and http://www.rfc-editor.org/info/rfc7515 + + + + + Default claim type mapping for inbound claims. + + + + + Default value for the flag that determines whether or not the InboundClaimTypeMap is used. + + + + + Default claim type mapping for outbound claims. + + + + + Default claim type filter list. + + + + + Default JwtHeader algorithm mapping + + + + + Static initializer for a new object. Static initializers run before the first instance of the type is created. + + + + + Initializes a new instance of the class. + + + + + Gets or sets the property which is used when determining whether or not to map claim types that are extracted when validating a . + If this is set to true, the is set to the JSON claim 'name' after translating using this mapping. Otherwise, no mapping occurs. + The default value is true. + + + + + Gets or sets the which is used when setting the for claims in the extracted when validating a . + The is set to the JSON claim 'name' after translating using this mapping. + The default value is ClaimTypeMapping.InboundClaimTypeMap. + + 'value' is null. + + + + Gets or sets the which is used when creating a from (s). + The JSON claim 'name' value is set to after translating using this mapping. + The default value is ClaimTypeMapping.OutboundClaimTypeMap + + This mapping is applied only when using or . Adding values directly will not result in translation. + 'value' is null. + + + + Gets the outbound algorithm map that is passed to the constructor. + + + + Gets or sets the used to filter claims when populating a claims form a . + When a is validated, claims with types found in this will not be added to the . + The default value is ClaimTypeMapping.InboundClaimFilter. + + 'value' is null. + + + + Gets or sets the property name of the will contain the original JSON claim 'name' if a mapping occurred when the (s) were created. + See for more information. + + If .IsNullOrWhiteSpace('value') is true. + + + + Gets or sets the property name of the will contain .Net type that was recognized when JwtPayload.Claims serialized the value to JSON. + See for more information. + + If .IsNullOrWhiteSpace('value') is true. + + + + Returns a value that indicates if this handler can validate a . + + 'true', indicating this instance can validate a . + + + + Gets the value that indicates if this instance can write a . + + 'true', indicating this instance can write a . + + + + Gets the type of the . + + The type of + + + + Determines if the string is a well formed Json Web Token (JWT). + see: http://tools.ietf.org/html/rfc7519 + + String that should represent a valid JWT. + Uses matching one of: + JWS: @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (dir): @"^[A-Za-z0-9-_]+\.\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (wrappedkey): @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]$" + + + 'false' if the token is null or whitespace. + 'false' if token.Length is greater than . + 'true' if the token is in JSON compact serialization format. + + + + + Returns a Json Web Token (JWT). + + A that contains details of contents of the token. + A JWS and JWE can be returned. + If is provided, then a JWE will be created. + If is provided then a JWS will be created. + If both are provided then a JWE with an embedded JWS will be created. + + + + + Creates a JWT in 'Compact Serialization Format'. + + The issuer of the token. + The audience for this token. + The source of the (s) for this token. + The notbefore time for this token. + The expiration time for this token. + The issue time for this token. + Contains cryptographic material for generating a signature. + If is not null, then a claim { actort, 'value' } will be added to the payload. See for details on how the value is created. + See for details on how the HeaderParameters are added to the header. + See for details on how the values are added to the payload. + Each in the will map by applying . Modifying could change the outbound JWT. + If is provided, then a JWS will be created. + + A Base64UrlEncoded string in 'Compact Serialization Format'. + + + + Creates a JWT in 'Compact Serialization Format'. + + The issuer of the token. + The audience for this token. + The source of the (s) for this token. + Translated into 'epoch time' and assigned to 'nbf'. + Translated into 'epoch time' and assigned to 'exp'. + Translated into 'epoch time' and assigned to 'iat'. + Contains cryptographic material for signing. + Contains cryptographic material for encrypting. + If is not null, then a claim { actort, 'value' } will be added to the payload. for details on how the value is created. + See for details on how the HeaderParameters are added to the header. + See for details on how the values are added to the payload. + Each in the will map by applying . Modifying could change the outbound JWT. + + A Base64UrlEncoded string in 'Compact Serialization Format'. + If 'expires' <= 'notBefore'. + + + + Creates a Json Web Token (JWT). + + A that contains details of contents of the token. + is used to sign . + + + + Creates a + + The issuer of the token. + The audience for this token. + The source of the (s) for this token. + The notbefore time for this token. + The expiration time for this token. + The issue time for this token. + Contains cryptographic material for generating a signature. + Contains cryptographic material for encrypting the token. + If is not null, then a claim { actort, 'value' } will be added to the payload. for details on how the value is created. + See for details on how the HeaderParameters are added to the header. + See for details on how the values are added to the payload. + Each on the added will have translated according to the mapping found in + . Adding and removing to will affect the name component of the Json claim. + is used to sign . + is used to encrypt or . + + A . + If 'expires' <= 'notBefore'. + + + + Creates a + + The issuer of the token. + The audience for this token. + The source of the (s) for this token. + The notbefore time for this token. + The expiration time for this token. + The issue time for this token. + Contains cryptographic material for generating a signature. + If is not null, then a claim { actort, 'value' } will be added to the payload. for details on how the value is created. + See for details on how the HeaderParameters are added to the header. + See for details on how the values are added to the payload. + Each on the added will have translated according to the mapping found in + . Adding and removing to will affect the name component of the Json claim. + is used to sign . + + A . + If 'expires' <= 'notBefore'. + + + + Creates a Json Web Token (JWT). + + A that contains details of contents of the token. + is used to sign . + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' $gt; . + + If the 'token' is in JWE Compact Serialization format, only the protected header will be deserialized. + This method is unable to decrypt the payload. Use to obtain the payload. + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' is greater than . + + If the 'token' is in JWE Compact Serialization format, only the protected header will be deserialized. + This method is unable to decrypt the payload. Use to obtain the payload. + + + + Deserializes token with the provided . + + . + The current . + The + This method is not current supported. + + + + Reads and validates a 'JSON Web Token' (JWT) encoded as a JWS or JWE in Compact Serialized Format. + + the JWT encoded as JWE or JWS + Contains validation parameters for the . + The that was validated. + is null or whitespace. + is null. + .Length $gt; MamimumTokenSizeInBytes. + does not have 3 or 5 parts. + returns false. + was a JWE was not able to be decrypted. + 'kid' header claim is not null AND decryption fails. + 'enc' header claim is null or empty. + 'exp' claim is < DateTime.UtcNow. + is null or whitespace and is null. Audience is not validated if is set to false. + 'aud' claim did not match either or one of . + 'nbf' claim is > 'exp' claim. + .signature is not properly formatted. + 'exp' claim is missing and is true. + is not null and expirationTime.HasValue is false. When a TokenReplayCache is set, tokens require an expiration time. + 'nbf' claim is > DateTime.UtcNow. + could not be added to the . + is found in the cache. + A from the JWT. Does not include claims found in the JWT header. + + Many of the exceptions listed above are not thrown directly from this method. See to examin the call graph. + + + + + Validates the JSON payload of a . + + The token to validate. + Contains validation parameters for the . + A from the jwt. Does not include the header claims. + + + + Serializes a into a JWT in Compact Serialization Format. + + to serialize. + + The JWT will be serialized as a JWE or JWS. + will be used to create the JWT. If there is an inner token, the inner token's payload will be used. + If either or .SigningCredentials are set, the JWT will be signed. + If is set, a JWE will be created using the JWT above as the plaintext. + + 'token' is null. + 'token' is not a not . + both and are set. + both and .EncryptingCredentials are set. + if is set and is not set. + A JWE or JWS in 'Compact Serialization Format'. + + + + Obtains a and validates the signature. + + Bytes to validate. + Signature to compare against. + to use. + Crypto algorithm to use. + Priority will be given to over . + 'true' if signature is valid. + + + + Validates that the signature, if found or required, is valid. + + A JWS token. + that contains signing keys. + If 'jwt' is null or whitespace. + If 'validationParameters' is null. + If a signature is not found and is true. + If the 'token' has a key identifier and none of the (s) provided result in a validated signature. + This can indicate that a key refresh is required. + If after trying all the (s), none result in a validated signature AND the 'token' does not have a key identifier. + A that has the signature validated if token was signed. + If the 'token' is signed, the signature is validated even if is false. + If the 'token' signature is validated, then the will be set to the key that signed the 'token'.It is the responsibility of to set the + + + + Creates a from a . + + The to use as a source. + The value to set + Contains parameters for validating the token. + A containing the . + + + + Creates the 'value' for the actor claim: { actort, 'value' } + + as actor. + representing the actor. + If is not null: +   If 'type' is 'string', return as string. +   if 'type' is 'BootstrapContext' and 'BootstrapContext.SecurityToken' is 'JwtSecurityToken' +     if 'JwtSecurityToken.RawData' != null, return RawData. +     else return . +   if 'BootstrapContext.Token' != null, return 'Token'. + default: new ( ( actor.Claims ). + + 'actor' is null. + + + + Determines if the audiences found in a are valid. + + The audiences found in the . + The being validated. + required for validation. + See for additional details. + + + + Validates the lifetime of a . + + The value of the 'nbf' claim if it exists in the 'jwtToken'. + The value of the 'exp' claim if it exists in the 'jwtToken'. + The being validated. + required for validation. + for additional details. + + + + Determines if the issuer found in a is valid. + + The issuer to validate + The that is being validated. + required for validation. + The issuer to use when creating the (s) in the . + for additional details. + + + + Determines if a is already validated. + + The value of the 'exp' claim if it exists in the '. + The that is being validated. + required for validation. + + + + Returns a to use when validating the signature of a token. + + The representation of the token that is being validated. + The that is being validated. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Returns a to use when decryption a JWE. + + The the token that is being decrypted. + The that is being decrypted. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Decrypts a JWE and returns the clear text + + the JWE that contains the cypher text. + contains crypto material. + the decoded / cleartext contents of the JWE. + if 'jwtToken' is null. + if 'validationParameters' is null. + if 'jwtToken.Header.enc' is null or empty. + if 'jwtToken.Header.kid' is not null AND decryption fails. + if the JWE was not able to be decrypted. + + + + Validates the is an expected value. + + The that signed the . + The to validate. + The current . + If the is a then the X509Certificate2 will be validated using the CertificateValidator. + + + + Serializes to XML a token of the type handled by this instance. + + The XML writer. + A token of type . + + + + Log messages and codes + + + + From 1b89476500aacc500feddfd3a0ea3f53fcf2cb61 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Wed, 29 Jul 2020 13:11:22 -0700 Subject: [PATCH 23/37] --- Bin/Microsoft.IdentityModel.JsonWebTokens.dll | Bin 0 -> 58584 bytes ...ft.IdentityModel.JsonWebTokens.dll.refresh | Bin 0 -> 298 bytes Bin/Microsoft.IdentityModel.JsonWebTokens.xml | 736 ++++ Bin/Microsoft.IdentityModel.Logging.dll | Bin 0 -> 32272 bytes ...icrosoft.IdentityModel.Logging.dll.refresh | Bin 0 -> 274 bytes Bin/Microsoft.IdentityModel.Logging.xml | 398 ++ Bin/Microsoft.IdentityModel.Tokens.dll | Bin 0 -> 156368 bytes ...Microsoft.IdentityModel.Tokens.dll.refresh | Bin 0 -> 270 bytes Bin/Microsoft.IdentityModel.Tokens.xml | 3367 +++++++++++++++++ Bin/Microsoft.Owin.xml | 3316 ++++++++++++++++ 10 files changed, 7817 insertions(+) create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.dll create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.JsonWebTokens.xml create mode 100644 Bin/Microsoft.IdentityModel.Logging.dll create mode 100644 Bin/Microsoft.IdentityModel.Logging.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.Logging.xml create mode 100644 Bin/Microsoft.IdentityModel.Tokens.dll create mode 100644 Bin/Microsoft.IdentityModel.Tokens.dll.refresh create mode 100644 Bin/Microsoft.IdentityModel.Tokens.xml create mode 100644 Bin/Microsoft.Owin.xml diff --git a/Bin/Microsoft.IdentityModel.JsonWebTokens.dll b/Bin/Microsoft.IdentityModel.JsonWebTokens.dll new file mode 100644 index 0000000000000000000000000000000000000000..1c17c5a22fbd8f7978ae2e0170940dcb10f30954 GIT binary patch literal 58584 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 M_qGjnkC^xW0~EF#ivR!s literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh b/Bin/Microsoft.IdentityModel.JsonWebTokens.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..db176b08bab9460ed157a9297796328a8e5cfa2b GIT binary patch literal 298 zcmb`DK?=e!5JmrqM9_k`?MlI&;wB)PMhy*3G3~<3t1oi~2{RM^e=`&E{j}Q3>7=5d z7ul)RRkJ!pB~C^u}^xao+~8(Z)iVnr + + + Microsoft.IdentityModel.JsonWebTokens + + + + + Constants for Json Web tokens. + + + + + A URI that represents the JSON XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON array XML data type. + + When mapping json to .Net Claim(s), if the value was not a string (or an enumeration of strings), the ClaimValue will serialized using the current JSON serializer, a property will be added with the .Net type and the ClaimTypeValue will be set to 'JsonClaimValueType'. + + + + A URI that represents the JSON null data type + + When mapping json to .Net Claim(s), we use empty string to represent the claim value and set the ClaimValueType to JsonNull + + + + A designed for representing a JSON Web Token (JWT). + + + + + Initializes a new instance of from a string in JWS or JWE Compact serialized format. + + A JSON Web Token that has been serialized in JWS or JWE Compact serialized format. + 'jwtEncodedString' is null or empty. + 'jwtEncodedString' is not in JWS or JWE Compact serialization format. + + The contents of the returned have not been validated, the JSON Web Token is simply decoded. Validation can be accomplished using the validation methods in + + + + + Initializes a new instance of the class where the header contains the crypto algorithms applied to the encoded header and payload. + + A string containing JSON which represents the cryptographic operations applied to the JWT and optionally any additional properties of the JWT. + A string containing JSON which represents the claims contained in the JWT. Each claim is a JSON object of the form { Name, Value }. + 'header' is null. + 'payload' is null. + + + + Gets the 'value' of the 'actort' claim { actort, 'value' }. + + If the 'actort' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'alg' claim { alg, 'value' }. + + If the 'alg' claim is not found, an empty string is returned. + + + + Gets the list of 'aud' claim { aud, 'value' }. + + If the 'aud' claim is not found, enumeration will be empty. + + + + Gets the AuthenticationTag from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the Ciphertext from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets a for each JSON { name, value }. + + + + + Gets the 'value' of the 'cty' claim { cty, 'value' }. + + If the 'cty' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'enc' claim { enc, 'value' }. + + If the 'enc' value is not found, an empty string is returned. + + + + Gets the EncryptedKey from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Represents the cryptographic operations applied to the JWT and optionally any additional properties of the JWT. + + + + + Gets the 'value' of the 'jti' claim { jti, ''value' }. + + If the 'jti' claim is not found, an empty string is returned. + + + + Gets the InitializationVector from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the associated with this instance. + + + + + Gets the 'value' of the 'iat' claim { iat, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'iat' claim is not found, then is returned. + + + + Gets the 'value' of the 'iss' claim { iss, 'value' }. + + If the 'iss' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'kid' claim { kid, 'value' }. + + If the 'kid' claim is not found, an empty string is returned. + + + + Represents the JSON payload. + + + + + Gets the EncodedHeader from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the EncodedPayload from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the EncodedSignature from the original raw data of this instance when it was created. + + The original JSON Compact serialized format passed into the constructor. + + + + Gets the original raw data of this instance when it was created. + + + + + Not implemented. + + + + + Not implemented. + + + + + Gets the 'value' of the 'sub' claim { sub, 'value' }. + + If the 'sub' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'typ' claim { typ, 'value' }. + + If the 'typ' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'nbf' claim { nbf, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'nbf' claim is not found, then is returned. + + + + Gets the 'value' of the 'exp' claim { exp, 'value' } converted to a assuming 'value' is seconds since UnixEpoch (UTC 1970-01-01T0:0:0Z). + + If the 'exp' claim is not found, then is returned. + + + + Gets the 'value' of the 'x5t' claim { x5t, 'value' }. + + If the 'x5t' claim is not found, an empty string is returned. + + + + Gets the 'value' of the 'zip' claim { zip, 'value' }. + + If the 'zip' claim is not found, an empty string is returned. + + + + Decodes the string into the header, payload and signature. + + the tokenized string. + the original token. + + + + Decodes the payload and signature from the JWE parts. + + Parts of the JWE including the header. + Assumes Header has already been set. + + + + Decodes the payload and signature from the JWS parts. + + Parts of the JWS including the header. + Assumes Header has already been set. + + + + Gets the 'value' corresponding to the provided key from the JWT payload { key, 'value' }. + + If the key has no corresponding value, returns null. + + + + Gets the 'value' corresponding to the provided key from the JWT header { key, 'value' }. + + If the key has no corresponding value, returns null. + + + + A designed for creating and validating Json Web Tokens. + See: http://tools.ietf.org/html/rfc7519 and http://www.rfc-editor.org/info/rfc7515. + + + + + Gets the type of the . + + The type of + + + + Determines if the string is a well formed Json Web Token (JWT). + see: http://tools.ietf.org/html/rfc7519 + + String that should represent a valid JWT. + Uses matching: + JWS: @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (dir): @"^[A-Za-z0-9-_]+\.\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$" + JWE: (wrappedkey): @"^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]$" + + + 'false' if the token is null or whitespace. + 'false' if token.Length is greater than . + 'true' if the token is in JSON compact serialization format. + + + + + Returns a value that indicates if this handler can validate a . + + 'true', indicating this instance can validate a . + + + + Creates a JWS (Json Web Signature). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWS. + A JWS in Compact Serialization Format. + + + + Creates a JWE (Json Web Encryption). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWT. + Defines the security key and algorithm that will be used to encrypt the JWT. + A JWE in compact serialization format. + + + + Creates a JWE (Json Web Encryption). + + A string containing JSON which represents the JWT token payload. + Defines the security key and algorithm that will be used to sign the JWT. + Defines the security key and algorithm that will be used to encrypt the JWT. + Defines the compression algorithm that will be used to compress the JWT token payload. + A JWE in compact serialization format. + + + + Compress a JWT token string. + + + + if 'token' is null. + if 'algorithm' is null. + if the compression algorithm is not supported. + Compressed JWT token bytes. + + + + Decompress JWT token bytes. + + + + if 'tokenBytes' is null. + if 'algorithm' is null. + if the decompression algorithm is not supported. + Decompressed JWT token + + + + Decrypts a JWE and returns the clear text + + the JWE that contains the cypher text. + contains crypto material. + the decoded / cleartext contents of the JWE. + if 'jwtToken' is null. + if 'validationParameters' is null. + if 'jwtToken.Enc' is null or empty. + if decompression failed. + if 'jwtToken.Kid' is not null AND decryption fails. + if the JWE was not able to be decrypted. + + + + Returns a to use when validating the signature of a token. + + The that is being validated. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Returns a to use when decrypting a JWE. + + The the token that is being decrypted. + The that is being decrypted. + A required for validation. + Returns a to use for signature validation. + If key fails to resolve, then null is returned + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' is greater than . + If the 'token' is in JWE Compact Serialization format, only the protected header will be deserialized. + This method is unable to decrypt the payload. Use to obtain the payload. + + + + Converts a string into an instance of . + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A + 'token' is null or empty. + 'token.Length' is greater than . + + + + Validates a JWS or a JWE. + + A 'JSON Web Token' (JWT) in JWS or JWE Compact Serialization Format. + A required for validation. + A + + + + Validates the JWT signature. + + + + + Obtains a and validates the signature. + + Bytes to validate. + Signature to compare against. + to use. + Crypto algorithm to use. + Priority will be given to over . + 'true' if signature is valid. + + + + Constants for Json Web Tokens. + + + + + Short header type. + + + + + Long header type. + + + + + Short token type. + + + + + Long token type. + + + + + JWS - Token format: 'header.payload.signature'. Signature is optional, but '.' is required. + + + + + JWE - Token format: 'protectedheader.encryptedkey.iv.cyphertext.authenticationtag'. + + + + + The number of parts in a JWE token. + + + + + The number of parts in a JWS token. + + + + + The maximum number of parts in a JWT. + + + + + JWE header alg indicating a shared symmetric key is directly used as CEK. + + + + + List of header parameter names see: http://tools.ietf.org/html/rfc7519#section-5. + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.10 + also:https://tools.ietf.org/html/rfc7519#section-5.2 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7518#section-4.7.1.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.2 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.3 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.4 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.9 + also:https://tools.ietf.org/html/rfc7519#section-5.1 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.6 + + + + + see:https://tools.ietf.org/html/rfc7515#page-12 + + + + + see:https://tools.ietf.org/html/rfc7515#section-4.1.5 + + + + + see:https://tools.ietf.org/html/rfc7516#section-4.1.3 + + + + + List of registered claims from different sources + http://tools.ietf.org/html/rfc7519#section-4 + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://openid.net/specs/openid-connect-core-1_0.html#IDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-core-1_0.html#CodeIDToken + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://openid.net/specs/openid-connect-frontchannel-1_0.html#OPLogout + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + http://tools.ietf.org/html/rfc7519#section-4 + + + + + A class which contains useful methods for processing JWT tokens. + + + + + Regex that is used to figure out if a token is in JWS format. + + + + + Regex that is used to figure out if a token is in JWE format. + + + + + Produces a signature over the 'input'. + + String to be signed + The that contain crypto specs used to sign the token. + The bse64urlendcoded signature over the bytes obtained from UTF8Encoding.GetBytes( 'input' ). + 'input' or 'signingCredentials' is null. + + + + Generates key bytes. + + + + + Gets all decryption keys. + + + + + Gets the DateTime using the number of seconds from 1970-01-01T0:0:0Z (UTC) + + Claim in the payload that should map to an integer, float, or string. + The payload that contains the desired claim value. + If the claim is not found, the function returns: DateTime.MinValue + + If the value of the claim cannot be parsed into a long. + The DateTime representation of a claim. + + + + Log messages and codes + + + + + A class which contains the result of a token validation operation. + + + + + The validated security token. + + + + diff --git a/Bin/Microsoft.IdentityModel.Logging.dll b/Bin/Microsoft.IdentityModel.Logging.dll new file mode 100644 index 0000000000000000000000000000000000000000..60646a6da4241b4aff351d1b445db26132882e18 GIT binary patch literal 32272 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 literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Logging.xml b/Bin/Microsoft.IdentityModel.Logging.xml new file mode 100644 index 000000000..2b45eddf6 --- /dev/null +++ b/Bin/Microsoft.IdentityModel.Logging.xml @@ -0,0 +1,398 @@ + + + + Microsoft.IdentityModel.Logging + + + + + Event source based logger to log different events. + + + + + Static logger that is exposed externally. An external application or framework can hook up a listener to this event source to log data in a custom way. + + + + + Flag which indicates whether or not PII is shown in logs. False by default. + + + + + String that is used in place of any arguments to log messages if the 'ShowPII' flag is set to false. + + + + + Indicates whether or the log message header (contains library version, date/time, and PII debugging information) has been written. + + + + + The log message that indicates the current library version. + + + + + The log message that indicates the date. + + + + + The log message that is shown when PII is off. + + + + + The log message that is shown when PII is off. + + + + + Writes an event log by using the provided string argument and current UTC time. + No level filtering is done on the event. + + The log message. + No level filtering. + + + + Writes an event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a verbose event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a verbose event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an information event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes an information event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a warning event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a warning event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an error event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes an error event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes a critical event log by using the provided string argument and current UTC time. + + The log message. + + + + Writes a critical event log by using the provided string argument, current UTC time and the provided arguments list. + + The log message. + An object array that contains zero or more objects to format. + + + + Writes an exception log by using the provided event identifer, exception argument, string argument and current UTC time. + + + + The log message. + + + + Writes an exception log by using the provided event identifer, exception argument, string argument, arguments list and current UTC time. + + + + The log message. + An object array that contains zero or more objects to format. + + + + Minimum log level to log events. Default is Warning. + + + + + Helper class for logging. + + + + + Logs an exception using the event source logger and returns new exception. + + argument that is null or empty. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + message to log. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + message to log. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + the inner to be added to the outer exception. + message to log. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + message to log. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + EventLevel is set to Error. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + message to log. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + message to log. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + the inner to be added to the outer exception. + message to log. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + message to log. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an argument exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger. + + The exception to log. + + + + Logs an exception using the event source logger. + + Identifies the level of an event to be logged. + The exception to log. + + + + Logs an information event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs a verbose event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs a warning event. + + The log message. + An object array that contains zero or more objects to format. + + + + Logs an exception using the event source logger and returns new typed exception. + + Identifies the level of an event to be logged. + Identifies the argument whose value generated the ArgumentException. + the inner to be added to the outer exception. + Format string of the log message. + An object array that contains zero or more objects to format. + + + + Formats the string using InvariantCulture + + Format string. + Format arguments. + Formatted string. + + + + Log messages and codes for Microsoft.IdentityModel.Logging + + + + + Event listener that writes logs to a file or a fileStream provided by user. + + + + + Name of the default log file, excluding its path. + + + + + Initializes a new instance of that writes logs to text file. + + + + + Initializes a new instance of that writes logs to text file. + + location of the file where log messages will be written. + + + + Initializes a new instance of that writes logs to text file. + + StreamWriter where logs will be written. + + + + Called whenever an event has been written by an event source for which the event listener has enabled events. + + + + + + Releases all resources used by the current instance of the class. + + + + diff --git a/Bin/Microsoft.IdentityModel.Tokens.dll b/Bin/Microsoft.IdentityModel.Tokens.dll new file mode 100644 index 0000000000000000000000000000000000000000..67cef9cb9cbe2196adb787057235eb73d25a37d2 GIT binary patch literal 156368 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 C;PvMK literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Tokens.dll.refresh b/Bin/Microsoft.IdentityModel.Tokens.dll.refresh new file mode 100644 index 0000000000000000000000000000000000000000..12542a8e9a5a6a9fcaafce3c0714996be093e883 GIT binary patch literal 270 zcmbu4OA5k35JcaJM9_e^&B}#4-33G^QA0u!%w*x^)i-km8TvC-)m`-WQ?jSx%uK_} zTv2jmp{AwxjUuyokqv4pYr`axw22Sud!8AIT-Z^_Orn9#{7|2?M>hti)8xpV$clqL n4TF7ayw!{u>E%xLU1n#0g|RW#*|p_n9b_Zh?DyaHI^X&OIuSJ0 literal 0 HcmV?d00001 diff --git a/Bin/Microsoft.IdentityModel.Tokens.xml b/Bin/Microsoft.IdentityModel.Tokens.xml new file mode 100644 index 000000000..531569363 --- /dev/null +++ b/Bin/Microsoft.IdentityModel.Tokens.xml @@ -0,0 +1,3367 @@ + + + + Microsoft.IdentityModel.Tokens + + + + + This adapter abstracts the 'RSA' differences between versions of .Net targets. + + + + + Calls and + + + + + The following code determines if RSACng is available on the .Net framework that is installed. + + + + + Base class for a Security Key that contains Asymmetric key material. + + + + + This must be overridden to get a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets the status of the private key. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Enum for the existence of private key + + + + + private key exists for sure + + + + + private key doesn't exist for sure + + + + + unable to determine the existence of private key + + + + + Provides signature and verification operations for Asymmetric Algorithms using a . + + + + + Mapping from algorithm to minimum .KeySize when creating signatures. + + + + + Mapping from algorithm to minimum .KeySize when verifying signatures. + + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + If this is required to create signatures then set this to true. + + Creating signatures requires that the has access to a private key. + Verifying signatures (the default), does not require access to the private key. + + is null. + is null or empty. + is true and there is no private key. + If and algorithm pair are not supported. + + willCreateSignatures is true and .KeySize is less than the size corresponding to the given algorithm in . + + + .KeySize is less than the size corresponding to the algorithm in . Note: this is always checked. + + If the runtime is unable to create a suitable cryptographic provider. + + + + Gets the mapping from algorithm to the minimum .KeySize for creating signatures. + + + + + Gets the mapping from algorithm to the minimum .KeySize for verifying signatures. + + + + + Creating a Signature requires the use of a . + This method returns the type of the HashAlgorithm (as a string) + that describes the to use when generating a Signature. + + The SignatureAlgorithm in use. + if is null or whitespace. + if is not supported. + + + + This method is here, just to keep the #if out of the constructor. + + + + + + + + + Produces a signature over the 'input' using the and algorithm passed to . + + The bytes to be signed. + A signature over the input. + if is null. + if .Length == 0. + If has been called. + Sign is thread safe. + + + + Validates that an asymmetric key size is of sufficient size for a SignatureAlgorithm. + + The asymmetric key to validate. + Algorithm for which this key will be used. + Whether they key will be used for creating signatures. + if is null. + if is null or empty. + if .KeySize is less than the minimum + acceptable size. + + for minimum signing sizes. + for minimum verifying sizes. + + + + + Verifies that the over using the + and specified by this + are consistent. + + The bytes to generate the signature over. + The value to verify against. + true if signature matches, false otherwise. + is null or has length == 0. + is null or has length == 0. + If has been called. + Verify is thread safe. + + + + Calls to release managed resources. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Encodes and Decodes strings as Base64Url encoding. + + + + + The following functions perform base64url encoding which differs from regular base64 encoding as follows + * padding is skipped so the pad character '=' doesn't have to be percent encoded + * the 62nd and 63rd regular base64 encoding characters ('+' and '/') are replace with ('-' and '_') + The changes make the encoding alphabet file and URL safe. + + string to encode. + Base64Url encoding of the UTF8 bytes. + + + + Converts a subset of an array of 8-bit unsigned integers to its equivalent string representation that is encoded with base-64-url digits. Parameters specify + the subset as an offset in the input array, and the number of elements in the array to convert. + + An array of 8-bit unsigned integers. + An offset in inArray. + The number of elements of inArray to convert. + The string representation in base 64 url encodingof length elements of inArray, starting at position offset. + 'inArray' is null. + offset or length is negative OR offset plus length is greater than the length of inArray. + + + + Converts a subset of an array of 8-bit unsigned integers to its equivalent string representation that is encoded with base-64-url digits. Parameters specify + the subset as an offset in the input array, and the number of elements in the array to convert. + + An array of 8-bit unsigned integers. + The string representation in base 64 url encodingof length elements of inArray, starting at position offset. + 'inArray' is null. + offset or length is negative OR offset plus length is greater than the length of inArray. + + + + Converts the specified string, which encodes binary data as base-64-url digits, to an equivalent 8-bit unsigned integer array. + base64Url encoded string. + UTF8 bytes. + + + + Decodes the string from Base64UrlEncoded to UTF8. + + string to decode. + UTF8 string. + + + + Constants for compression algorithms. + + + + + Compression provider factory for compression and decompression. + + + + + Static constructor that initializes the default . + + + + + Default constructor for . + + + + + Constructor that creates a deep copy of given object. + + to copy from. + + + + Returns the default instance. + + + + + Extensibility point for custom compression support application wide. + + + + + Answers if an algorithm is supported. + + the name of the crypto algorithm. + true if the algorithm is supported, false otherwise. + + + + Returns a for a specific algorithm. + + the decompression algorithm. + a . + + + + Definition of cache for crypto providers + + + + + Returns the cache key to use when looking up an entry into the cache for a + + the to create the key for. + the cache key to use for finding a . + + + + Returns the 'key' that will be used to find a crypto provider in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + the cache key to use for finding a crypto provider. + + + + Trys to adds a to this cache. + + to cache. + true if the was added, false if the cache already contained the + + + + Trys to find a in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + a bool to indicate if the will be used to sign. + the if found. + true if a was found, false otherwise. + + + + Trys to remove a from this cache. + + to remove. + true if the was removed, false if the was not found. + + + + Creates cryptographic operators by specifying a 's and algorithms. + + + + + Returns the default instance. + + + + + Gets or sets the default value for caching + + + + + Static constructor that initializes the default . + + + + + Default constructor for . + + + + + Constructor that creates a deep copy of given object. + + to copy from. + + + + Gets the + + + + + Extensibility point for creating custom cryptographic operators. + + By default, if set, will be called before creating cryptographic operators. + If true is returned, then will be called. The will throw if the + Cryptographic operator returned is not of the correct type. + + + + Gets or sets a bool controlling if should be cached. + + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + 'key' is not a . + 'algorithm, key' pair is not supported. + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + + When finished with the call . + + + + + Creates an instance of for a specific <SecurityKey, Algorithm>. + + the to use. + the algorithm to use. + an instance of + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + + When finished with the call . + + + + + Creates a that supports the and algorithm. + + The to use for signing. + The algorithm to use for signing. + 'key' is null. + 'algorithm' is null or empty. + ' is too small. + is too small. + is not a or a . + + AsymmetricSignatureProviders require access to a PrivateKey for Signing. + When finished with the call . + + + + + Returns a instance supports the and algorithm. + + The to use for signing. + The algorithm to use for verifying. + 'key' is null. + 'algorithm' is null or empty. + is too small. + is too small. + ' is not a or a . + When finished with the call . + + + + Returns a for a specific algorithm. + + the name of the hash algorithm to create. + A + When finished with the call . + 'algorithm' is null or empty. + 'algorithm' is not supported. + + + + Returns a for a specific algorithm. + + the keyed hash algorithm to create. + bytes to use to create the Keyed Hash + A + When finished with the call . + 'algorithm' is null or empty. + 'algorithm' is not supported. + + + + Answers if an algorithm is supported + + the name of the cryptographic algorithm + + + + + Checks if an 'algorithm, key' pair is supported. + + the algorithm to check. + the . + true if 'algorithm, key' pair is supported. + + + + When finished with a call this method for cleanup. The default behavior is to call + + to be released. + + + + When finished with a call this method for cleanup."/> + + to be released. + + + + When finished with a call this method for cleanup."/> + + to be released. + + + + When finished with a call this method for cleanup. The default behavior is to call + + to be released. + + + + Helper class for adding DateTimes and Timespans. + + + + + Add a DateTime and a TimeSpan. + The maximum time is DateTime.MaxTime. It is not an error if time + timespan > MaxTime. + Just return MaxTime. + + Initial value. + to add. + as the sum of time and timespan. + + + + Gets the Maximum value for a DateTime specifying kind. + + DateTimeKind to use. + DateTime of specified kind. + + + + Gets the Minimum value for a DateTime specifying kind. + + DateTimeKind to use. + DateTime of specified kind. + + + + Ensures that DataTime is UTC. + + to convert. + + + + + Ensures that DateTime is UTC. + + to convert. + + + + + A compression provider that supports compression and decompression using the algorithm. + + + + + Initializes a new instance of the class used to compress and decompress used the algorithm. + + + + + Initializes a new instance of the class used to compress and decompress used the algorithm. + The compression level to use when compressing. + + + + + Gets the compression algorithm. + + + + + Specifies whether compression should emphasize speed or compression size. + Set to by default. + + + + + Decompress the value using DEFLATE algorithm. + + the bytes to decompress. + the decompressed bytes. + + + + Compress the value using the DEFLATE algorithm. + + the bytes to compress. + the compressed bytes. + + + + Answers if a compression algorithm is supported. + + the name of the compression algorithm. + true if the compression algorithm is supported, false otherwise. + + + + Represents a ECDsa security key. + + + + + Returns a new instance of . + + + + + + instance used to initialize the key. + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets key size. + + + + + A class for properties that are used for token encryption. + + + + + Initializes a new instance of the class. + + . + A key wrap algorithm to use when encrypting a session key. + Data encryption algorithm to apply. + if 'certificate' is null. + if 'alg' is null or empty. + if 'enc' is null or empty. + + + + Initializes a new instance of the class. + + to use when encrypting a session key. + A key wrap algorithm to use when encrypting a session key. + Data encryption algorithm to apply. + if 'key' is null. + if 'alg' is null or empty. + if 'enc' is null or empty. + + + + Initializes a new instance of the class. + + Used in scenarios when a key represents a 'shared' symmetric key. + For example, SAML 2.0 Assertion will be encrypted using a provided symmetric key + which won't be serialized to a SAML token. + + to apply. + Data encryption algorithm to apply. + If the is not a . + if 'enc' is null or empty. + + + + Gets the key wrap algorithm used for session key encryption. + + + + + Gets the data encryption algorithm. + + + + + Users can override the default with this property. This factory will be used for creating encryption providers. + + + + + Gets the used for encryption. + + + + + Provides authenticated encryption and decryption services. + + + + + Initializes a new instance of the class used for encryption and decryption. + The that will be used for crypto operations. + The encryption algorithm to apply. + 'key' is null. + 'algorithm' is null or whitespace. + key size is not large enough. + 'algorithm' is not supported. + a symmetricSignatureProvider is not created. + + + + + Gets the encryption algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by applications for extensibility scenarios. + + + + Gets the that is being used. + + + + + Encrypts the 'plaintext' + + the data to be encrypted. + will be combined with iv and ciphertext to create an authenticationtag. + containing ciphertext, iv, authenticationtag. + plaintext is null or empty. + authenticationData is null or empty. + AES crypto operation threw. See inner exception for details. + + + + Encrypts the 'plaintext' + + the data to be encrypted. + will be combined with iv and ciphertext to create an authenticationtag. + initialization vector for encryption. + containing ciphertext, iv, authenticationtag. + is null or empty. + is null or empty. + AES crypto operation threw. See inner exception for details. + + + + Decrypts ciphertext into plaintext + + the encrypted text to decrypt. + the authenticateData that is used in verification. + the initialization vector used when creating the ciphertext. + the authenticationTag that was created during the encyption. + decrypted ciphertext + is null or empty. + is null or empty. + is null or empty. + is null or empty. + signature over authenticationTag fails to verify. + AES crypto operation threw. See inner exception. + + + + Checks if an 'key, algorithm' pair is supported + + the + the algorithm to check. + true if 'key, algorithm' pair is supported. + + + + The algorithm parameter logically defines a HMAC algorithm. + This method returns the HMAC to use. + + + + + + + Called to obtain the byte[] needed to create a + + that will be used to obtain the byte[]. + [] that is used to populated the KeyedHashAlgorithm. + if is null. + if a byte[] can not be obtained from SecurityKey. + and are supported. + For a .Key is returned + For a Base64UrlEncoder.DecodeBytes is called with if == JsonWebAlgorithmsKeyTypes.Octet + + + + + Checks that the key has sufficient length + + that contains bytes. + the algorithm to apply. + if is null. + if is null or empty. + if is not a supported algorithm. + + + + Contains the results of operation. + + + + + Initializes a new + + the used during + protected text. + the initialization vector used. + the bytes that need be passed to . + + + + Gets the . + + + + + Gets the Ciphertext. + + + + + Gets the initialization vector. + + + + + Gets the authentication tag + + + + + Provides Wrap key and Unwrap key services. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by runtimes or for extensibility scenarios. + + + + Gets the that is being used. + + + + + Calls and + + + + + Can be over written in descendants to dispose of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer + + + + Unwrap a key. + + key to unwrap. + Unwrapped key. + + + + Wrap a key. + + the key to be wrapped + wrapped key. + + + + Provides RSA Wrap key and Unwrap key services. + + + + + Initializes a new instance of used for wrapping and un-wrappping keys. + These keys are usually symmetric session keys that are wrapped using the recipients public key. + The that will be used for cryptographic operations. + The KeyWrap algorithm to apply. + Whether this is required to un-wrap keys. If true, the private key is required. + 'key' is null. + 'algorithm' is null. + The key size doesn't match the algorithm. + If and algorithm pair are not supported. + Failed to create RSA algorithm with provided key and algorithm. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This is for use by the application and not used by this SDK. + + + + Gets the that is being used. + + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Checks if an algorithm is supported. + + The that will be used for crypto operations. + The KeyWrap algorithm to apply. + true if the algorithm is supported; otherwise, false. + + + + Unwrap a key using RSA decryption. + + the bytes to unwrap. + Unwrapped key + 'keyBytes' is null or length == 0. + If has been called. + Failed to unwrap the wrappedKey. + If the internal RSA algorithm is null. + + + + Wrap a key using RSA encryption. + + the key to be wrapped + A wrapped key + 'keyBytes' is null or has length == 0. + If has been called. + Failed to wrap the 'keyBytes'. + If the internal RSA algorithm is null. + + + + Provides Wrap key and Unwrap key services. + + + + + Initializes a new instance of the class used for wrap key and unwrap key. + The that will be used for crypto operations. + The KeyWrap algorithm to apply. + 'key' is null. + 'algorithm' is null. + If and algorithm pair are not supported. + The cannot be converted to byte array + The keysize doesn't match the algorithm. + Failed to create symmetric algorithm with provided key and algorithm. + + + + + Gets the KeyWrap algorithm that is being used. + + + + + Gets or sets a user context for a . + + This is null by default. This can be used by runtimes or for extensibility scenarios. + + + + Gets the that is being used. + + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Returns the . + + + The cannot be converted to byte array + The keysize doesn't match the algorithm. + Failed to create symmetric algorithm with provided key and algorithm. + + + + Answers if an algorithm is supported + + the + the algorithm to use + true if the algorithm is supported; otherwise, false. + + + + Unwrap a key using Symmetric decryption. + + bytes to unwrap + Unwraped key + 'keyBytes' is null or length == 0. + 'keyBytes' is not a multiple of 8. + If has been called. + Failed to unwrap the wrappedKey. + + + + Wrap a key using Symmetric encryption. + + the key to be wrapped + The wrapped key result + 'keyBytes' is null or has length 0. + 'keyBytes' is not a multiple of 8. + If has been called. + Failed to wrap 'keyBytes'. + + + + Returns the absolute DateTime or the Seconds since Unix Epoch, where Epoch is UTC 1970-01-01T0:0:0Z. + + + + + DateTime as UTV for UnixEpoch + + + + + Per JWT spec: + Gets the number of seconds from 1970-01-01T0:0:0Z as measured in UTC until the desired date/time. + + The DateTime to convert to seconds. + if dateTimeUtc less than UnixEpoch, return 0 + the number of seconds since Unix Epoch. + + + + Creates a DateTime from epoch time. + + Number of seconds. + The DateTime in UTC. + + + + Thrown when JWE compression fails. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Thrown when JWE decompression fails. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Represents a security token exception when decryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Represents a security token exception when encryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + This exception is thrown when a security token contained a key identifier but the key was not found by the runtime + when decrypting a token. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Represents a security token exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Throw this exception when a received Security Token has expiration time in the past. + + + + + Gets or sets the Expires value that created the validation exception. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when 'audience' of a token was not valid. + + + + + Gets or sets the InvalidAudience that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'issuer' of a token was not valid. + + + + + Gets or sets the InvalidIssuer that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'lifetime' of a token was not valid. + + + + + Gets or sets the NotBefore value that created the validation exception. + + + + + Gets or sets the Expires value that created the validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + This exception is thrown when 'signature' of a token was not valid. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security Token has an invalid issuer signing key. + + + + + Gets or sets the SigningKey that was found invalid. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Represents a key wrap exception when encryption failed. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + This exception is thrown when a security is missing an ExpirationTime. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security token has an effective time + in the future. + + + + + Gets or sets the NotBefore value that created the validation exception. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when an add to the TokenReplayCache fails. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Throw this exception when a received Security Token has been replayed. + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + Initializes a new instance of + + + + + This exception is thrown when a security token contained a key identifier but the key was not found by the runtime. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + + + + Initializes a new instance of the class. + + Addtional information to be included in the exception and displayed to user. + A that represents the root cause of the exception. + + + + Represents a security token validation exception. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class with a specified error message + and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The that is the cause of the current exception, or a null reference if no inner exception is specified. + + + + Compression provider interface. + + + + + Gets the compression algorithm. + + + + + Called to determine if an algorithm is supported. + + the algorithm that defines the compression method. + true if supported + + + + Decompress. + + the value to decompress. + + + + Compress. + + the value to decompress. + + + + Provides extensibility for cryptographic operators. + If custom operators are needed for then can be set to + return these operators. will be before each creation. + + + + + Called to determine if a cryptographic operation is supported. + + the algorithm that defines the cryptographic operator. + the arguments required by the cryptographic operator. May be null. + true if supported + + + + returns a cryptographic operator that supports the algorithm. + + the algorithm that defines the cryptographic operator. + the arguments required by the cryptographic operator. May be null. + call when finished with the object. + + + + called to release the object returned from + + the object returned from . + + + + Defines a cache for crypto providers. + Current support is limited to only. + + + + + Returns the cache key to use when looking up an entry into the cache for a + + the to create the key for. + if signatureProvider is null. + the cache key to use for finding a . + + + + Returns the 'key' that will be used to find a crypto provider in this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + if securityKey is null. + if algorithm is null or empty string. + if typeofProvider is null or empty string. + the cache key to use for finding a crypto provider. + + + + Trys to adds a to this cache. + + to cache. + if signatureProvider is null. + true if the was added, false if the cache already contained the + if the is added will be set to 'this'. + + + + Trys to find a to this cache. + + the key that is used to by the crypto provider. + the algorithm that is used by the crypto provider. + the typeof the crypto provider obtained by calling object.GetType(). + a bool to indicate if the will be used to sign. + the if found. + if securityKey is null. + if algorithm is null or empty string. + if typeofProvider is null or empty string. + true if a was found, false otherwise. + + + + Trys to remove a from this cache. + + to remove. + if signatureProvider is null. + true if the was removed, false if the was not found. + if the is removed will be set to null. + + + + ISecurityTokenValidator + + + + + Returns true if the token can be read, false otherwise. + + + + + Returns true if a token can be validated. + + + + + Gets and sets the maximum size in bytes, that a will be processed. + + + + + Validates a token passed as a string using + + + + + Interface that defines a simple cache for tacking replaying of security tokens. + + + + + Try to add a securityToken. + + the security token to add. + the time when security token expires. + true if the security token was successfully added. + + + + Try to find securityToken + + the security token to find. + true if the security token is found. + + + + Constants for JsonWebAlgorithms "kty" Key Type (sec 6.1) + http://tools.ietf.org/html/rfc7518#section-6.1 + + + + + Represents a JSON Web Key as defined in http://tools.ietf.org/html/rfc7517. + + + + + Magic numbers identifying ECDSA blob types + + + + + Returns a new instance of . + + A string that contains JSON Web Key parameters in JSON format. + + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of . + + + + + Initializes an new instance of from a json string. + + A string that contains JSON Web Key parameters in JSON format. + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + When deserializing from JSON any properties that are not defined will be placed here. + + + + + Gets or sets the 'alg' (KeyType).. + + + + + Gets or sets the 'crv' (ECC - Curve).. + + + + + Gets or sets the 'd' (ECC - Private Key OR RSA - Private Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'dp' (RSA - First Factor CRT Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'dq' (RSA - Second Factor CRT Exponent).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'e' (RSA - Exponent).. + + + + + Gets or sets the 'k' (Symmetric - Key Value).. + + Base64urlEncoding + + + + Gets the key id of this . + + + + + Gets the 'key_ops' (Key Operations).. + + + + + Gets or sets the 'kid' (Key ID).. + + + + + Gets or sets the 'kty' (Key Type).. + + + + + Gets or sets the 'n' (RSA - Modulus).. + + Value is formated as: Base64urlEncoding + + + + Gets or sets the 'oth' (RSA - Other Primes Info).. + + + + + Gets or sets the 'p' (RSA - First Prime Factor).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'q' (RSA - Second Prime Factor).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'qi' (RSA - First CRT Coefficient).. + + Value is formated as: Base64urlUInt + + + + Gets or sets the 'use' (Public Key Use).. + + + + + Gets or sets the 'x' (ECC - X Coordinate).. + + Value is formated as: Base64urlEncoding + + + + Gets the 'x5c' collection (X.509 Certificate Chain).. + + + + + Gets or sets the 'x5t' (X.509 Certificate SHA-1 thumbprint).. + + + + + Gets or sets the 'x5t#S256' (X.509 Certificate SHA-1 thumbprint).. + + + + + Gets or sets the 'x5u' (X.509 URL).. + + + + + Gets or sets the 'y' (ECC - Y Coordinate).. + + Value is formated as: Base64urlEncoding + + + + Gets the key size of . + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets a bool that determines if the 'key_ops' (Key Operations) property should be serialized. + This is used by Json.NET in order to conditionally serialize properties. + + true if 'key_ops' (Key Operations) is not empty; otherwise, false. + + + + Gets a bool that determines if the 'x5c' collection (X.509 Certificate Chain) property should be serialized. + This is used by Json.NET in order to conditionally serialize properties. + + true if 'x5c' collection (X.509 Certificate Chain) is not empty; otherwise, false. + + + + Returns the size of key in bytes + + Represents ecdsa curve -P256, P384, P521 + Size of the key in bytes + + + + Returns the size of key in bits. + + Represents ecdsa curve -P256, P384, P512 + Size of the key in bits. + + + + Returns the magic value representing the curve corresponding to the curve id. + + Represents ecdsa curve -P256, P384, P512 + Whether the provider will create signatures or not + Uint representing the magic number + + + + Converts a into a + Supports: , and . + + + + + Converts a into a + + a to convert. + a + if is null. + if is not a supported type. + Supports: , and . + + + + Converts a into a + + a to convert. + a + if is null. + + + + Converts a into a + + a to convert. + a + if is null. + + + + Converts a into a + + a to convert. + a + if is null. + + + + Constants for JsonWebKey Elliptical Curve Types + https://tools.ietf.org/html/rfc7518#section-6.2.1.1 + + + + + Names for Json Web Key Values + + + + + Contains a collection of that can be populated from a json string. + + provides support for http://tools.ietf.org/html/rfc7517. + + + + Returns a new instance of . + + a string that contains JSON Web Key parameters in JSON format. + + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of . + + + + + Initializes an new instance of from a json string. + + a json string containing values. + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + Initializes an new instance of from a json string. + + a json string containing values. + jsonSerializerSettings + If 'json' is null or empty. + If 'json' fails to deserialize. + + + + When deserializing from JSON any properties that are not defined will be placed here. + + + + + Gets the . + + + + + Returns the JsonWebKeys as a . + + + + + Names for Json Web Key Set Values + + + + + Constants for JsonWebKeyUse (sec 4.2) + http://tools.ietf.org/html/rfc7517#section-4 + + + + + Log messages and codes + + + + + The purpose of this class is to ensure that we obtain an RsaCryptoServiceProvider that supports SHA-256 signatures. + If the original RsaCryptoServiceProvider doesn't support SHA-256, we create a new one using the same KeyContainer. + + + + + Gets the SignatureAlgorithm + + + + + Gets the KeyExchangeAlgorithm + + + + + Initializes an new instance of . + + + if is null. + + + + Decrypts data with the System.Security.Cryptography.RSA algorithm. + + The data to be decrypted. + true to perform direct System.Security.Cryptography.RSA decryption using OAEP padding + (only available on a computer running Microsoft Windows XP or later) otherwise, false to use PKCS#1 v1.5 padding. + decrypted bytes. + if is null or has Length == 0. + + + + Decrypts the input. + + the bytes to decrypt. + decrypted bytes + if is null or Length == 0. + + + + Encrypts data with the System.Security.Cryptography.RSA algorithm. + + The data to be encrypted. + true to perform direct System.Security.Cryptography.RSA encryption using OAEP padding (only available on a computer running Microsoft Windows XP or later); + otherwise, false to use PKCS#1 v1.5 padding. + encrypted bytes. + if is null or has Length == 0. + + + + Encrypts the input. + + the bytes to encrypt. + encrypted bytes. + if is null or Length == 0. + + + + Computes the hash value of the specified byte array using the specified hash algorithm, and signs the resulting hash value. + + The input byte array for which to compute the hash. + The hash algorithm to use to create the hash value. + The Signature for the specified data. + if is null or Length == 0. + if is null. + + + + Verifies that a digital signature is valid by determining the hash value in the signature using the provided public key and comparing it to the hash value of the provided data. + + The input byte array. + The hash algorithm to use to create the hash value. + The signature byte array to be verified. + true if the signature is valid; otherwise, false. + if is null or Length == 0. + if is null. + if is null or Length == 0. + + + + Exports rsa parameters as + + flag to control is private parameters are included. + + + + + Imports rsa parameters as + + to import. + + + + Calls to release managed resources. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Represents a Rsa security key. + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class. + + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets RSA key size. + + + + + used to initialize the key. + + + + + instance used to initialize the key. + + + + + Constants for Security Algorithm. + + + + + Base class for Security Key. + + + + + This must be overridden to get the size of this . + + + + + Gets the key id of this . + + + + + Gets or sets . + + + + + Contains information about the keys inside the tokens. + + + + + Base class for security token. + + + + + This must be overridden to get the Id of this . + + + + + This must be overridden to get the issuer of this . + + + + + This must be overridden to get the . + + + + + This must be overridden to get or set the that signed this instance. + + .ValidateToken(...) can this value when a is used to successfully validate a signature. + + + + This must be overridden to get the time when this was Valid. + + + + + This must be overridden to get the time when this is no longer Valid. + + + + + Contains some information which used to create a security token. + + + + + Gets or sets the value of the 'audience' claim. + + + + + Gets or sets the used to create a encrypted security token. + + + + + Gets or sets the value of the 'expiration' claim. + + + + + Gets or sets the issuer of this . + + + + + Gets or sets the time the security token was issued. + + + + + Gets or sets the notbefore time for the security token. + + + + + Gets or sets the used to create a security token. + + + + + Gets or sets the . + + + + + Defines the interface for a Security Token Handler. + + + + + Creates an instance of + + + + + Returns . + + + true if attached; otherwise, false. + + + + Returns . + + + + + + Gets a value indicating whether this handler supports validation of tokens + handled by this instance. + v + 'True' if the instance is capable of SecurityToken + validation. + + + + Gets a value indicating whether the class provides serialization functionality to serialize token handled + by this instance. + + true if the WriteToken method can serialize this token. + + + + This must be overridden to get the System.Type of the SecurityToken this instance handles. + + + + + Indicates whether the current token string can be read as a token + of the type handled by this instance. + + The token string thats needs to be read. + 'True' if the ReadToken method can parse the token string. + + + + Deserializes from string a token of the type handled by this instance. + + The string to be deserialized. + SecurityToken instance which represents the serialized token. + + + + Gets security token. + + . + SecurityToken instance which represents the serialized token. + + + + Serializes to string a token of the type handled by this instance. + + A token of type TokenType. + The serialized token. + + + + This must be overridden to serialize to XML a token of the type handled by this instance. + + The XML writer. + A token of type . + + + + This must be overridden to deserialize token with the provided . + + . + the current . + SecurityToken instance which represents the serialized token. + + + + This must be overridden to validate a token passed as a string using + + A token of type . + the current . + The token of type that was validated. + + + + Provides signature services, signing and verifying. + + + + + Initializes a new instance of the class used to create and verify signatures. + + The that will be used for signature operations. + The signature algorithm to apply. + is null. + is null or empty. + + + + Gets the signature algorithm. + + + + + Gets or sets a user context for a . + + This is null by default. This is for use by the application and not used by this SDK. + + + + Gets or sets the that is associated with this + + + + + Calls and + + + + + Can be over written in descendants to dispose of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer + + + + Gets the . + + + + + This must be overridden to produce a signature over the 'input'. + + bytes to sign. + signed bytes + + + Verifies that the over using the + and specified by this + are consistent. + the bytes that were signed. + signature to compare against. + true if the computed signature matches the signature parameter, false otherwise. + + + + Gets or sets a bool indicating if this is expected to create signatures. + + + + + Defines the , algorithm and digest for digital signatures. + + + + + Initializes a new instance of the class. + + that will be used for signing. + Algorithm will be set to . + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'key' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + that will be used for signing. + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + . + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'key' is null. + if 'algorithm' is null or empty. + + + + Initializes a new instance of the class. + + . + The signature algorithm to apply. + The digest algorithm to apply. + if 'key' is null. + if 'algorithm' is null or empty. + if 'digest' is null or empty. + + + + Gets the signature algorithm. + + if 'value' is null or empty. + + + + Gets the digest algorithm. + + + + + Users can override the default with this property. This factory will be used for creating signature providers. + + This will have precedence over + + + + Gets the used for signature creation or validation. + + + + + Gets the key id associated with . + + + + + Defines the default set of algorithms this library supports + + + + + Checks if an 'algorithm, key' pair is supported. + + the algorithm to check. + the . + true if 'algorithm, key' pair is supported. + + + + Represents a symmetric security key. + + + + + Returns a new instance of instance. + + The byte array of the key. + + + + Gets the key size. + + + + + Gets the byte array of the key. + + + + + Provides signing and verifying operations using a and specifying an algorithm. + + + + + This is the minimum .KeySize when creating and verifying signatures. + + + + + Initializes a new instance of the class that uses an to create and / or verify signatures over a array of bytes. + + The that will be used for signature operations. + The signature algorithm to use. + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + '.KeySize' is smaller than . + + + + Initializes a new instance of the class that uses an to create and / or verify signatures over a array of bytes. + + The that will be used for signature operations. + The signature algorithm to use. + indicates if this will be used to create signatures. + 'key' is null. + 'algorithm' is null or empty. + If and algorithm pair are not supported. + '.KeySize' is smaller than . + + + + Gets or sets the minimum .KeySize"/>. + + 'value' is smaller than . + + + + Called to obtain the byte[] needed to create a + + that will be used to obtain the byte[]. + [] that is used to populated the KeyedHashAlgorithm. + if key is null. + if a byte[] can not be obtained from SecurityKey. + and are supported. + For a .Key is returned + For a Base64UrlEncoder.DecodeBytes is called with if == JsonWebAlgorithmsKeyTypes.Octet + + + + + Returns the . + + The hash algorithm to use to create the hash value. + The byte array of the key. + + + + + Gets the for this . + + + + + Produces a signature over the 'input' using the and 'algorithm' passed to . + + The bytes to sign. + Signed bytes + 'input' is null. + 'input.Length' == 0. + has been called. + is null. This can occur if a derived type deletes it or does not create it. + Sign is thread safe. + + + + Verifies that a signature created over the 'input' matches the signature. Using and 'algorithm' passed to . + + The bytes to verify. + signature to compare against. + true if computed signature matches the signature parameter, false otherwise. + 'input' is null. + 'signature' is null. + 'input.Length' == 0. + 'signature.Length' == 0. + has been called. + If the internal is null. This can occur if a derived type deletes it or does not create it. + Verify is thread safe. + + + + Verifies that a signature created over the 'input' matches the signature. Using and 'algorithm' passed to . + + The bytes to verify. + signature to compare against. + number of bytes of signature to use. + true if computed signature matches the signature parameter, false otherwise. + 'input' is null. + 'signature' is null. + 'input.Length' == 0. + 'signature.Length' == 0. + 'length < 1' + has been called. + If the internal is null. This can occur if a derived type deletes it or does not create it. + + + + Disposes of internal components. + + true, if called from Dispose(), false, if invoked inside a finalizer. + + + + Defines properties shared across all security token handlers. + + + + + Default lifetime of tokens created. When creating tokens, if 'expires' and 'notbefore' are both null, + then a default will be set to: expires = DateTime.UtcNow, notbefore = DateTime.UtcNow + TimeSpan.FromMinutes(TokenLifetimeInMinutes). + + + + + Gets and sets the maximum token size in bytes that will be processed. + + 'value' less than 1. + + + + Gets or sets a bool that controls if token creation will set default 'exp', 'nbf' and 'iat' if not specified. + + See: for configuration. + + + + Gets or sets the token lifetime in minutes. + + Used during token creation to set the default expiration ('exp'). + 'value' less than 1. + + + + Definition for AudienceValidator. + + The audiences found in the . + The being validated. + required for validation. + true if the audience is considered valid. + + + + Definition for IssuerSigningKeyResolver. + + The representation of the token that is being validated. + The that is being validated. It may be null. + A key identifier. It may be null. + required for validation. + A to use when validating a signature. + + + + Definition for IssuerSigningKeyValidator. + + The that signed the . + The being validated. + required for validation. + + + + Definition for IssuerValidator. + + The issuer to validate. + The that is being validated. + required for validation. + The issuer to use when creating the "Claim"(s) in a "ClaimsIdentity". + The delegate should return a non null string that represents the 'issuer'. If null a default value will be used. + + + + Definition for LifetimeValidator. + + The 'notBefore' time found in the . + The 'expiration' time found in the . + The being validated. + required for validation. + + + + Definition for TokenReplayValidator. + + The 'expiration' time found in the . + The being validated. + required for validation. + + + + + Definition for SignatureValidator. + + A securityToken with a signature. + required for validation. + + + + Definition for TokenReader. + + A securityToken with a signature. + required for validation. + + + + Definition for TokenDecryptionKeyResolver. + + The representation of the token to be decrypted. + The to be decrypted. The runtime by default passes null. + A key identifier. It may be null. + required for validation. + A to use when decrypting the token. + + + + Contains a set of parameters that are used by a when validating a . + + + + + This is the fallback authenticationtype that a will use if nothing is set. + + + + + Default for the clock skew. + + 300 seconds (5 minutes). + + + + Default for the maximm token size. + + 2 MB (mega bytes). + + + + Copy constructor for . + + + + + Initializes a new instance of the class. + + + + + Gets or sets . + + + + + Gets or sets a delegate that will be used to validate the audience. + + + If set, this delegate will be called to validate the 'audience' instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to read the token. + + + If set, this delegate will be called to read the token instead of normal processing. + + + + + Gets or sets the AuthenticationType when creating a . + + If 'value' is null or whitespace. + + + + Gets or sets the clock skew to apply when validating a time. + + If 'value' is less than 0. + + + + Returns a new instance of with values copied from this object. + + A new object copied from this object + This is a shallow Clone. + + + + Creates a using: + + 'NameClaimType': If NameClaimTypeRetriever is set, call delegate, else call NameClaimType. If the result is a null or empty string, use . + 'RoleClaimType': If RoleClaimTypeRetriever is set, call delegate, else call RoleClaimType. If the result is a null or empty string, use . + + A with Authentication, NameClaimType and RoleClaimType set. + + + + Users can override the default with this property. This factory will be used for creating signature providers. + + + + + Gets or sets the that is to be used for decryption. + + + + + Gets or sets a delegate that will be called to retreive a used for decryption. + + + This will be used to decrypt the token. This can be helpful when the does not contain a key identifier. + + + + + Gets or sets a delegate for validating the that signed the token. + + + If set, this delegate will be called to validate the that signed the token, instead of normal processing. + + + + + Gets or sets the that is to be used for signature validation. + + + + + Gets or sets a delegate that will be called to retrieve a used for signature validation. + + + This will be used to check the signature. This can be helpful when the does not contain a key identifier. + + + + + Gets or sets an used for signature validation. + + + + + Gets or sets a delegate that will be used to validate the issuer of the token. + + + If set, this delegate will be called to validate the 'issuer' of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to validate the lifetime of the token + + + If set, this delegate will be called to validate the lifetime of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a delegate that will be used to validate the token replay of the token + + + If set, this delegate will be called to validate the token replay of the token, instead of normal processing. + If is false, this delegate will not be called. + + + + + Gets or sets a that defines the . + + + Controls the value returns. It will return the first where the equals . + + + + + Gets or sets the that defines the . + + + Controls the results of . + Each where == will be checked for a match against the 'string' passed to . + + + + + Gets or sets a delegate that will be called to obtain the NameClaimType to use when creating a ClaimsIdentity + after validating a token. + + + + + Gets or sets the that contains a collection of custom key/value pairs. This allows addition of parameters that could be used in custom token validation scenarios. + + + + + Gets or sets a value indicating whether tokens must have an 'expiration' value. + + + + + Gets or sets a value indicating whether a can be considered valid if not signed. + + + + + Gets or sets a delegate that will be called to obtain the RoleClaimType to use when creating a ClaimsIdentity + after validating a token. + + + + + Gets or sets a boolean to control if the original token should be saved after the security token is validated. + + The runtime will consult this value and save the original token that was validated. + + + + Gets or sets a delegate that will be used to validate the signature of the token. + + + If set, this delegate will be called to signature of the token, instead of normal processing. + + + + + Gets or sets the that is to be used for decrypting inbound tokens. + + + + + Gets or set the that store tokens that can be checked to help detect token replay. + + If set, then tokens must have an expiration time or the runtime will fault. + + + + Gets or sets a value indicating if an actor token is detected, whether it should be validated. + + + + + Gets or sets a boolean to control if the audience will be validated during token validation. + + Validation of the audience, mitigates forwarding attacks. For example, a site that receives a token, could not replay it to another side. + A forwarded token would contain the audience of the original site. + + + + Gets or sets a boolean to control if the issuer will be validated during token validation. + + + Validation of the issuer mitigates forwarding attacks that can occur when an + IdentityProvider represents multiple tenants and signs tokens with the same keys. + It is possible that a token issued for the same audience could be from a different tenant. For example an application could accept users from + contoso.onmicrosoft.com but not fabrikam.onmicrosoft.com, both valid tenants. A application that accepts tokens from fabrikam could forward them + to the application that accepts tokens for contoso. + + + + + Gets or sets a boolean to control if the lifetime will be validated during token validation. + + + + + Gets or sets a boolean that controls if validation of the that signed the securityToken is called. + + It is possible for tokens to contain the public key needed to check the signature. For example, X509Data can be hydrated into an X509Certificate, + which can be used to validate the signature. In these cases it is important to validate the SigningKey that was used to validate the signature. + + + + Gets or sets a boolean to control if the token replay will be validated during token validation. + + + + + Gets or sets a string that represents a valid audience that will be used to check against the token's audience. + + + + + Gets or sets the that contains valid audiences that will be used to check against the token's audience. + + + + + Gets or sets a that represents a valid issuer that will be used to check against the token's issuer. + + + + + Gets or sets the that contains valid issuers that will be used to check against the token's issuer. + + + + + Generates unique IDs. + + + + + Creates a unique ID suitable for use in an xml:id field. The value is + not hard to guess but is unique. + + The unique ID. + + + + Creates a unique ID similar to that created by CreateNonRandomId, + but instead of an underscore, the supplied prefix is used. + + The prefix to use. + The unique ID, with the given prefix. + + + + Creates a unique, random ID suitable for use in an xml:id field. The + value is hard to guess and unique. + + The unique ID. + + + + Creates a unique, random ID similar to that created by CreateRandomId, + but instead of an underscore, the supplied prefix is used. + + The prefix to use. + The random URI. + + + + Creates a unique, random ID suitable for use as a URI. The value is + hard to guess and unique. The URI is in the urn:uuid: namespace. + + The random URI. + + + + Contains some utility methods. + + + + + A string with "empty" value. + + + + + A string with "null" value. + + + + + Creates a copy of the byte array. + + The resource array. + A copy of the byte array. + + + + Serializes the list of strings into string as follows: + 'str1','str2','str3' ... + + + The strings used to build a comma delimited string. + + + The single . + + + + + Returns whether the input string is https. + + The input string. + true if the input string is https; otherwise, false. + + + + Returns whether the input uri is https. + + . + true if the input uri is https; otherwise, false. + + + + Compares two byte arrays for equality. Hash size is fixed normally it is 32 bytes. + The attempt here is to take the same time if an attacker shortens the signature OR changes some of the signed contents. + + + One set of bytes to compare. + + + The other set of bytes to compare with. + + + true if the bytes are equal, false otherwise. + + + + + Compares two byte arrays for equality. Hash size is fixed normally it is 32 bytes. + The attempt here is to take the same time if an attacker shortens the signature OR changes some of the signed contents. + + + One set of bytes to compare. + + + The other set of bytes to compare with. + + length of array to check + + true if the bytes are equal, false otherwise. + + + + + AudienceValidator + + + + + Determines if the audiences found in a are valid. + + The audiences found in the . + The being validated. + required for validation. + If 'vaidationParameters' is null. + If 'audiences' is null and is true. + If is null or whitespace and is null. + If none of the 'audiences' matched either or one of . + An EXACT match is required. + + + + Determines if an issuer found in a is valid. + + The issuer to validate + The that is being validated. + required for validation. + The issuer to use when creating the "Claim"(s) in a "ClaimsIdentity". + If 'vaidationParameters' is null. + If 'issuer' is null or whitespace and is true. + If is null or whitespace and is null. + If 'issuer' failed to matched either or one of . + An EXACT match is required. + + + + Validates the that signed a . + + The that signed the . + The being validated. + required for validation. + if 'securityKey' is null and ValidateIssuerSigningKey is true. + if 'securityToken' is null and ValidateIssuerSigningKey is true. + if 'vaidationParameters' is null. + + + + Validates the lifetime of a . + + The 'notBefore' time found in the . + The 'expiration' time found in the . + The being validated. + required for validation. + If 'vaidationParameters' is null. + If 'expires.HasValue' is false and is true. + If 'notBefore' is > 'expires'. + If 'notBefore' is > DateTime.UtcNow. + If 'expires' is < DateTime.UtcNow. + All time comparisons apply . + + + + Validates if a token has been replayed. + + When does the security token expire. + The being validated. + required for validation. + If 'securityToken' is null or whitespace. + If 'validationParameters' is null or whitespace. + If is not null and expirationTime.HasValue is false. When a TokenReplayCache is set, tokens require an expiration time. + If the 'securityToken' is found in the cache. + If the 'securityToken' could not be added to the . + + + + Validates if a token has been replayed. + + The being validated. + When does the security token expire. + required for validation. + If 'securityToken' is null or whitespace. + If 'validationParameters' is null or whitespace. + If is not null and expirationTime.HasValue is false. When a TokenReplayCache is set, tokens require an expiration time. + If the 'securityToken' is found in the cache. + If the 'securityToken' could not be added to the . + + + + An designed to construct based on a x509 certificate. + + + + + Designed to construct based on a x509 certificate. + + A + + will be used as the key wrap algorithm + will be used as the data encryption algorithm + + if 'certificate' is null. + + + + Designed to construct based on the x509 certificate, a key wrap algorithm, and data encryption algorithm. + + A + A key wrap algorithm + Data encryption algorithm + if 'certificate' is null. + if 'keyWrapAlgorithm' is null or empty. + if 'dataEncryptionAlgorithm' is null or empty. + + + + Gets the used by this instance. + + + + + Security key that allows access to cert + + + + + Instantiates a using a + + The cert to use. + + + + Gets the key size. + + + + + Gets the X5t of this . + + + + + Returns the private key from the . + + + + + Gets the public key from the . + + + + + Gets a bool indicating if a private key exists. + + true if it has a private key; otherwise, false. + + + + Gets an enum indicating if a private key exists. + + 'Exists' if private key exists for sure; 'DoesNotExist' if private key doesn't exist for sure; 'Unknown' if we cannot determine. + + + + Gets the . + + + + + Returns a bool indicating if this key is equivalent to another key. + + true if the keys are equal; otherwise, false. + + + + Returns an int hash code. + + An int hash code + + + + Defines the , algorithm and digest for digital signatures. + + + + + Initializes a new instance of the class. + + that will be used for signing. + Algorithm will be set to . + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + + + + Initializes a new instance of the class. + + A that will be used for signing. + The signature algorithm to apply. + the 'digest method' if needed may be implied from the algorithm. For example implies Sha256. + if 'certificate' is null. + if 'algorithm' is null or empty. + + + + Gets the used by this instance. + + + + diff --git a/Bin/Microsoft.Owin.xml b/Bin/Microsoft.Owin.xml new file mode 100644 index 000000000..4380dc571 --- /dev/null +++ b/Bin/Microsoft.Owin.xml @@ -0,0 +1,3316 @@ + + + + Microsoft.Owin + + + + + Extension methods for . + + + + + Inserts a middleware into the OWIN pipeline. + + The middleware type + + Any additional arguments for the middleware constructor + + + + + Inserts into the OWIN pipeline a middleware which does not have a next middleware reference. + + + An app that handles all requests + + + + Inserts a middleware into the OWIN pipeline. + + + An app that handles the request or calls the given next Func + + + + + An ordered list of known Asp.Net integrated pipeline stages. More details on the ASP.NET integrated pipeline can be found at http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx + + + + + Corresponds to the AuthenticateRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAuthenticateRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the AuthorizeRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAuthorizeRequest stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the ResolveRequestCache stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostResolveRequestCache stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the MapRequestHandler stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostMapRequestHandler stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the AcquireRequestState stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PostAcquireRequestState stage of the ASP.NET integrated pipeline. + + + + + Corresponds to the PreRequestHandlerExecute stage of the ASP.NET integrated pipeline. + + + + + Extension methods for the MapMiddleware + + + + + If the request path starts with the given pathMatch, execute the app configured via configuration parameter instead of + continuing to the next component in the pipeline. + + + The path to match + The branch to take for positive path matches + + + + + If the request path starts with the given pathMatch, execute the app configured via configuration parameter instead of + continuing to the next component in the pipeline. + + + The path to match + The branch to take for positive path matches + + + + + Extension methods for the MapWhenMiddleware + + + + + Branches the request pipeline based on the result of the given predicate. + + + Invoked with the request environment to determine if the branch should be taken + Configures a branch to take + + + + + Branches the request pipeline based on the async result of the given predicate. + + + Invoked asynchronously with the request environment to determine if the branch should be taken + Configures a branch to take + + + + + Represents a middleware for executing in-line function middleware. + + + + + Initializes a new instance of the class. + + The pointer to next middleware. + A function that handles all requests. + + + + Initializes a new instance of the class. + + The pointer to next middleware. + A function that handles the request or calls the given next function. + + + + Invokes the handler for processing the request. + + The OWIN context. + The object that represents the request operation. + + + + Extension methods used to indicate at which stage in the integrated pipeline prior middleware should run. + + + + + Call after other middleware to specify when they should run in the integrated pipeline. + + The IAppBuilder. + The name of the integrated pipeline in which to run. + The original IAppBuilder for chaining. + + + + Call after other middleware to specify when they should run in the integrated pipeline. + + The IAppBuilder. + The stage of the integrated pipeline in which to run. + The original IAppBuilder for chaining. + + + + Contains the parsed form values. + + + + + Initializes a new instance of the class. + + The store for the form. + + + + Represents a wrapper for owin.RequestHeaders and owin.ResponseHeaders. + + + + + Initializes a new instance of the class. + + The underlying data store. + + + + Gets an that contains the keys in the ;. + + An that contains the keys in the . + + + + + + + + + Gets the number of elements contained in the ;. + + The number of elements contained in the . + + + + Gets a value that indicates whether the is in read-only mode. + + true if the is in read-only mode; otherwise, false. + + + + Get or sets the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Throws KeyNotFoundException if the key is not present. + + The header name. + + + + + Returns an enumerator that iterates through a collection. + + An object that can be used to iterate through the collection. + + + + Returns an enumerator that iterates through a collection. + + An object that can be used to iterate through the collection. + + + + Get the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Get the associated values from the collection without modification. + + The header name. + the associated value from the collection without modification, or null if the key is not present. + + + + Get the associated values from the collection separated into individual values. + Quoted values will not be split, and the quotes will be removed. + + The header name. + the associated values from the collection separated into individual values, or null if the key is not present. + + + + Add a new value. Appends to the header if already present + + The header name. + The header value. + + + + Add new values. Each item remains a separate array entry. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values with any existing values. + + The header name. + The header values. + + + + Sets a specific header value. + + The header name. + The header value. + + + + Sets the specified header values without modification. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values. + + The header name. + The header values. + + + + Adds the given header and values to the collection. + + The header name. + The header values. + + + + Determines whether the contains a specific key. + + The key. + true if the contains a specific key; otherwise, false. + + + + Removes the given header from the collection. + + The header name. + true if the specified object was removed from the collection; otherwise, false. + + + + Retrieves a value from the dictionary. + + The header name. + The value. + true if the contains the key; otherwise, false. + + + + Adds a new list of items to the collection. + + The item to add. + + + + Clears the entire list of objects. + + + + + Returns a value indicating whether the specified object occurs within this collection. + + The item. + true if the specified object occurs within this collection; otherwise, false. + + + + Copies the elements to a one-dimensional Array instance at the specified index. + + The one-dimensional Array that is the destination of the specified objects copied from the . + The zero-based index in at which copying begins. + + + + Removes the given item from the the collection. + + The item. + true if the specified object was removed from the collection; otherwise, false. + + + + Represents the host portion of a Uri can be used to construct Uri's properly formatted and encoded for use in + HTTP headers. + + + + + Creates a new HostString without modification. The value should be Unicode rather than punycode, and may have a port. + IPv4 and IPv6 addresses are also allowed, and also may have ports. + + + + + + Returns the original value from the constructor. + + + + + Returns the value as normalized by ToUriComponent(). + + + + + + Returns the value properly formatted and encoded for use in a URI in a HTTP header. + Any Unicode is converted to punycode. IPv6 addresses will have brackets added if they are missing. + + + + + + Creates a new HostString from the given uri component. + Any punycode will be converted to Unicode. + + + + + + + Creates a new HostString from the host and port of the give Uri instance. + Punycode will be converted to Unicode. + + + + + + + Compares the equality of the Value property, ignoring case. + + + + + + + Compares against the given object only if it is a HostString. + + + + + + + Gets a hash code for the value. + + + + + + Compares the two instances for equality. + + + + + + + + Compares the two instances for inequality. + + + + + + + + Contains the parsed form values. + + + + + Represents a wrapper for owin.RequestHeaders and owin.ResponseHeaders. + + + + + Get or sets the associated value from the collection as a single string. + + The header name. + the associated value from the collection as a single string or null if the key is not present. + + + + Get the associated values from the collection separated into individual values. + Quoted values will not be split, and the quotes will be removed. + + The header name. + the associated values from the collection separated into individual values, or null if the key is not present. + + + + Add a new value. Appends to the header if already present + + The header name. + The header value. + + + + Add new values. Each item remains a separate array entry. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values with any existing values. + + The header name. + The header values. + + + + Sets a specific header value. + + The header name. + The header value. + + + + Sets the specified header values without modification. + + The header name. + The header values. + + + + Quotes any values containing comas, and then coma joins all of the values. + + The header name. + The header values. + + + + An implementation of ICookieManager that writes directly to IOwinContext.Response.Cookies. + + + + + Read a cookie with the given name from the request. + + + + + + + + Appends a new response cookie to the Set-Cookie header. + + + + + + + + + Deletes the cookie with the given key by appending an expired cookie. + + + + + + + + This handles cookies that are limited by per cookie length. It breaks down long cookies for responses, and reassembles them + from requests. + + + + + Creates a new instance of ChunkingCookieManager. + + + + + The maximum size of cookie to send back to the client. If a cookie exceeds this size it will be broken down into multiple + cookies. Set this value to null to disable this behavior. The default is 4090 characters, which is supported by all + common browsers. + + Note that browsers may also have limits on the total size of all cookies per domain, and on the number of cookies per domain. + + + + + Throw if not all chunks of a cookie are available on a request for re-assembly. + + + + + Get the reassembled cookie. Non chunked cookies are returned normally. + Cookies with missing chunks just have their "chunks:XX" header returned. + + + + The reassembled cookie, if any, or null. + + + + Appends a new response cookie to the Set-Cookie header. If the cookie is larger than the given size limit + then it will be broken down into multiple cookies as follows: + Set-Cookie: CookieName=chunks:3; path=/ + Set-Cookie: CookieNameC1=Segment1; path=/ + Set-Cookie: CookieNameC2=Segment2; path=/ + Set-Cookie: CookieNameC3=Segment3; path=/ + + + + + + + + + Deletes the cookie with the given key by setting an expired state. If a matching chunked cookie exists on + the request, delete each chunk. + + + + + + + + An abstraction for reading request cookies and writing response cookies. + + + + + Read a cookie with the given name from the request. + + + + + + + + Append a cookie to the response. + + + + + + + + + Append a delete cookie to the response. + + + + + + + + Abstracts the system clock to facilitate testing. + + + + + Retrieves the current system time in UTC. + + + + + Provides access to the normal system clock. + + + + + Retrieves the current system time in UTC. + + + + + Response generation utilities. + + + + + Append the given query to the uri. + + The base uri. + The query string to append, if any. + The combine result. + + + + Append the given query key and value to the uri. + + The base uri. + The name of the query key. + The query value. + The combine result. + + + + Append the given query keys and values to the uri. + + The base uri. + A collection of name value query pairs to append. + The combine result. + + + + Converts between an OwinMiddlware and an . + + + + + + + + + + + + + + + + + + Transitions between and OwinMiddleware. + + + + + + + + + + + + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + + Adds adapters between and OwinMiddleware. + + + + + Adds adapters between and OwinMiddleware. + + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets a wrapper exposing request specific properties. + + A wrapper exposing request specific properties. + + + + Gets a wrapper exposing response specific properties. + + A wrapper exposing response specific properties. + + + + Gets the Authentication middleware functionality available on the current request. + + The authentication middleware functionality available on the current request. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets or sets the host.TraceOutput environment value. + + The host.TraceOutput TextWriter. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or set the HTTP method. + + The HTTP method. + + + + Gets or set the HTTP request scheme from owin.RequestScheme. + + The HTTP request scheme from owin.RequestScheme. + + + + Returns true if the owin.RequestScheme is https. + + true if this request is using https; otherwise, false. + + + + Gets or set the Host header. May include the port. + + The Host header. + + + + Gets or set the owin.RequestPathBase. + + The owin.RequestPathBase. + + + + Gets or set the request path from owin.RequestPath. + + The request path from owin.RequestPath. + + + + Gets or set the query string from owin.RequestQueryString. + + The query string from owin.RequestQueryString. + + + + Gets the query value collection parsed from owin.RequestQueryString. + + The query value collection parsed from owin.RequestQueryString. + + + + Gets the uniform resource identifier (URI) associated with the request. + + The uniform resource identifier (URI) associated with the request. + + + + Gets or set the owin.RequestProtocol. + + The owin.RequestProtocol. + + + + Gets the request headers. + + The request headers. + + + + Gets the collection of Cookies for this request. + + The collection of Cookies for this request. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Cache-Control header. + + The Cache-Control header. + + + + Gets or sets the Media-Type header. + + The Media-Type header. + + + + Gets or set the Accept header. + + The Accept header. + + + + Gets or set the owin.RequestBody Stream. + + The owin.RequestBody Stream. + + + + Gets or sets the cancellation token for the request. + + The cancellation token for the request. + + + + Gets or set the server.LocalIpAddress. + + The server.LocalIpAddress. + + + + Gets or set the server.LocalPort. + + The server.LocalPort. + + + + Gets or set the server.RemoteIpAddress. + + The server.RemoteIpAddress. + + + + Gets or set the server.RemotePort. + + The server.RemotePort. + + + + Gets or set the server.User. + + The server.User. + + + + Asynchronously reads and parses the request body as a form. + + The parsed form data. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or sets the optional owin.ResponseStatusCode. + + The optional owin.ResponseStatusCode, or 200 if not set. + + + + Gets or sets the the optional owin.ResponseReasonPhrase. + + The the optional owin.ResponseReasonPhrase. + + + + Gets or sets the owin.ResponseProtocol. + + The owin.ResponseProtocol. + + + + Gets the response header collection. + + The response header collection. + + + + Gets a collection used to manipulate the Set-Cookie header. + + A collection used to manipulate the Set-Cookie header. + + + + Gets or sets the Content-Length header. + + The Content-Length header. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Expires header. + + The Expires header. + + + + Gets or sets the E-Tag header. + + The E-Tag header. + + + + Gets or sets the owin.ResponseBody Stream. + + The owin.ResponseBody Stream. + + + + Registers for an event that fires when the response headers are sent. + + The callback method. + The callback state. + + + + Sets a 302 response status code and the Location header. + + The location where to redirect the client. + + + + Writes the given text to the response body stream using UTF-8. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + Accessors for headers, query, forms, etc. + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated values from the collection in their original format. + Returns null if the key is not present. + + + + + + + Used to mark which class in an assembly should be used for automatic startup. + + + + + Initializes a new instance of the class + + The startup class + + + + Initializes a new instance of the class + + A non-default configuration, e.g. staging. + The startup class + + + + Initializes a new instance of the class + + The startup class + Specifies which method to call + + + + Initializes a new instance of the class + + A non-default configuration, e.g. staging. + The startup class + Specifies which method to call + + + + A non-default configuration if any. e.g. Staging. + + + + + The startup class + + + + + The name of the configuration method + + + + + Used to create path based branches in your application pipeline. + The owin.RequestPathBase is not included in the evaluation, only owin.RequestPath. + Matching paths have the matching piece removed from owin.RequestPath and added to the owin.RequestPathBase. + + + + + Initializes a new instance of the class + + The normal pipeline taken for a negative match + + + + + Process an individual request. + + + + + + + Options for the Map middleware + + + + + The path to match + + + + + The branch taken for a positive match + + + + + Determines if the request should take a specific branch of the pipeline by passing the environment + to a user defined callback. + + + + + Initializes a new instance of the class + + The normal application pipeline + + + + + Process an individual request. + + + + + + + Options for the MapWhen middleware + + + + + The user callback that determines if the branch should be taken + + + + + The async user callback that determines if the branch should be taken + + + + + The branch taken for a positive match + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Create a new wrapper. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets a wrapper exposing request specific properties. + + A wrapper exposing request specific properties. + + + + Gets a wrapper exposing response specific properties. + + A wrapper exposing response specific properties. + + + + Gets the Authentication middleware functionality available on the current request. + + The authentication middleware functionality available on the current request. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets or sets the host.TraceOutput environment value. + + The host.TraceOutput TextWriter. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + Provides correct escaping for Path and PathBase values when needed to reconstruct a request or redirect URI string + + + + + Represents the empty path. This field is read-only. + + + + + Initialize the path string with a given value. This value must be in un-escaped format. Use + PathString.FromUriComponent(value) if you have a path value which is in an escaped format. + + The unescaped path to be assigned to the Value property. + + + + The unescaped path value + + + + + True if the path is not empty + + + + + Provides the path string escaped in a way which is correct for combining into the URI representation. + + The escaped path value + + + + Provides the path string escaped in a way which is correct for combining into the URI representation. + + The escaped path value + + + + Returns an PathString given the path as it is escaped in the URI format. The string MUST NOT contain any + value that is not a path. + + The escaped path as it appears in the URI format. + The resulting PathString + + + + Returns an PathString given the path as from a Uri object. Relative Uri objects are not supported. + + The Uri object + The resulting PathString + + + + Checks if this instance starts with or exactly matches the other instance. Only full segments are matched. + + + + + + + Checks if this instance starts with or exactly matches the other instance. Only full segments are matched. + + + Any remaining segments from this instance not included in the other instance. + + + + + Adds two PathString instances into a combined PathString value. + + The combined PathString value + + + + Combines a PathString and QueryString into the joined URI formatted string value. + + The joined URI formatted string value + + + + Compares this PathString value to another value. The default comparison is StringComparison.OrdinalIgnoreCase. + + The second PathString for comparison. + True if both PathString values are equal + + + + Compares this PathString value to another value using a specific StringComparison type + + The second PathString for comparison + The StringComparison type to use + True if both PathString values are equal + + + + Compares this PathString value to another value. The default comparison is StringComparison.OrdinalIgnoreCase. + + The second PathString for comparison. + True if both PathString values are equal + + + + Returns the hash code for the PathString value. The hash code is provided by the OrdinalIgnoreCase implementation. + + The hash code + + + + Operator call through to Equals + + The left parameter + The right parameter + True if both PathString values are equal + + + + Operator call through to Equals + + The left parameter + The right parameter + True if both PathString values are not equal + + + + Operator call through to Add + + The left parameter + The right parameter + The PathString combination of both values + + + + Operator call through to Add + + The left parameter + The right parameter + The PathString combination of both values + + + + Provides correct handling for QueryString value when needed to reconstruct a request or redirect URI string + + + + + Represents the empty query string. This field is read-only. + + + + + Initialize the query string with a given value. This value must be in escaped and delimited format without + a leading '?' character. + + The query string to be assigned to the Value property. + + + + Initialize a query string with a single given parameter name and value. The value is + + The unencoded parameter name + The unencoded parameter value + + + + The escaped query string without the leading '?' character + + + + + True if the query string is not empty + + + + + Provides the query string escaped in a way which is correct for combining into the URI representation. + A leading '?' character will be prepended unless the Value is null or empty. Characters which are potentially + dangerous are escaped. + + The query string value + + + + Provides the query string escaped in a way which is correct for combining into the URI representation. + A leading '?' character will be prepended unless the Value is null or empty. Characters which are potentially + dangerous are escaped. + + The query string value + + + + Returns an QueryString given the query as it is escaped in the URI format. The string MUST NOT contain any + value that is not a query. + + The escaped query as it appears in the URI format. + The resulting QueryString + + + + Returns an QueryString given the query as from a Uri object. Relative Uri objects are not supported. + + The Uri object + The resulting QueryString + + + + Indicates whether the current instance is equal to the other instance. + + + + + + + Indicates whether the current instance is equal to the other instance. + + + + + + + Returns the hash code for this instance. + + + + + + Compares the two instances for equality. + + + + + + + + Compares the two instances for inequality. + + + + + + + + Accessors for query, forms, etc. + + + + + Create a new wrapper + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated value from the collection. Multiple values will be merged. + Returns null if the key is not present. + + + + + + + Get the associated values from the collection in their original format. + Returns null if the key is not present. + + + + + + + + + + + + + + + + + + + A wrapper for the request Cookie header + + + + + Create a new wrapper + + + + + + Returns null rather than throwing KeyNotFoundException + + + + + + + + + + + + + + + + + + + A strongly-typed resource class, for looking up localized strings, etc. + + + + + Returns the cached ResourceManager instance used by this class. + + + + + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + + + + + Looks up a localized string similar to Conversion delegate must take one parameter.. + + + + + Looks up a localized string similar to The cookie key and options are larger than ChunksSize, leaving no room for data.. + + + + + Looks up a localized string similar to The chunked cookie is incomplete. Only {0} of the expected {1} chunks were found, totaling {2} characters. A client size limit may have been exceeded.. + + + + + Looks up a localized string similar to The type '{0}' does not match any known middleware pattern.. + + + + + Looks up a localized string similar to The OWIN key 'server.OnSendingHeaders' is not available for this request.. + + + + + Looks up a localized string similar to The class '{0}' does not have a constructor taking {1} arguments.. + + + + + Looks up a localized string similar to No conversion available between {0} and {1}.. + + + + + Looks up a localized string similar to The path must not end with a '/'. + + + + + Looks up a localized string similar to The path must start with a '/' followed by one or more characters.. + + + + + Looks up a localized string similar to The path is required. + + + + + Looks up a localized string similar to The query string must start with a '?' unless null or empty.. + + + + + A standard implementation of IAppBuilder + + + + + Initializes a new instance of the the type. + + + + + + + + + + + + Contains arbitrary properties which may added, examined, and modified by + components during the startup sequence. + + Returns . + + + + Adds a middleware node to the OWIN function pipeline. The middleware are + invoked in the order they are added: the first middleware passed to Use will + be the outermost function, and the last middleware passed to Use will be the + innermost. + + + The middleware parameter determines which behavior is being chained into the + pipeline. + + If the middleware given to Use is a Delegate, then it will be invoked with the "next app" in + the chain as the first parameter. If the delegate takes more than the single argument, + then the additional values must be provided to Use in the args array. + + If the middleware given to Use is a Type, then the public constructor will be + invoked with the "next app" in the chain as the first parameter. The resulting object + must have a public Invoke method. If the object has constructors which take more than + the single "next app" argument, then additional values may be provided in the args array. + + + Any additional args passed to Use will be passed as additional values, following the "next app" + parameter, when the OWIN call pipeline is build. + + They are passed as additional parameters if the middleware parameter is a Delegate, or as additional + constructor arguments if the middle parameter is a Type. + + + The IAppBuilder itself is returned. This enables you to chain your use statements together. + + + + + The New method creates a new instance of an IAppBuilder. This is needed to create + a tree structure in your processing, rather than a linear pipeline. The new instance share the + same Properties, but will be created with a new, empty middleware list. + + To create a tangent pipeline you would first call New, followed by several calls to Use on + the new builder, ending with a call to Build on the new builder. The return value from Build + will be the entry-point to your tangent pipeline. This entry-point may now be added to the + main pipeline as an argument to a switching middleware, which will either call the tangent + pipeline or the "next app", based on something in the request. + + That said - all of that work is typically hidden by a middleware like Map, which will do that + for you. + + The new instance of the IAppBuilder implementation + + + + The Build is called at the point when all of the middleware should be chained + together. This is typically done by the hosting component which created the app builder, + and does not need to be called by the startup method if the IAppBuilder is passed in. + + + The Type argument indicates which calling convention should be returned, and + is typically typeof() for the OWIN + calling convention. + + + Returns an instance of the pipeline's entry point. This object may be safely cast to the + type which was provided + + + + + Simple object used by AppBuilder as seed OWIN callable if the + builder.Properties["builder.DefaultApp"] is not set + + + + + Extension methods for IAppBuilder. + + + + + The Build is called at the point when all of the middleware should be chained + together. May be called to build pipeline branches. + + + The request processing entry point for this section of the pipeline. + + + + The Build is called at the point when all of the middleware should be chained + together. May be called to build pipeline branches. + + The application signature. + + The request processing entry point for this section of the pipeline. + + + + Adds converters for adapting between disparate application signatures. + + + + + + + Adds converters for adapting between disparate application signatures. + + + + + + + + + A wrapper for the response Set-Cookie header + + + + + Create a new wrapper + + + + + + Add a new cookie and value + + + + + + + Add a new cookie + + + + + + + + Sets an expired cookie + + + + + + Sets an expired cookie + + + + + + + Indicates if the client should include a cookie on "same-site" or "cross-site" requests. + + + + + Indicates the client should send the cookie with every requests coming from any origin. + + + + + Indicates the client should send the cookie with "same-site" requests, and with "cross-site" top-level navigations. + + + + + Indicates the client should only send the cookie with "same-site" requests. + + + + + Acts as the return value from calls to the IAuthenticationManager's AuthenticeAsync methods. + + + + + Create an instance of the result object + + Assigned to Identity. May be null. + Assigned to Properties. Contains extra information carried along with the identity. + Assigned to Description. Contains information describing the authentication provider. + + + + Contains the claims that were authenticated by the given AuthenticationType. If the authentication + type was not successful the Identity property will be null. + + + + + Contains extra values that were provided with the original SignIn call. + + + + + Contains description properties for the middleware authentication type in general. Does not + vary per request. + + + + + Contains information describing an authentication provider. + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class + + + + + + Contains metadata about the authentication provider. + + + + + Gets or sets the name used to reference the authentication middleware instance. + + + + + Gets or sets the display name for the authentication provider. + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Exposes the security.SignOut environment value as a strong type. + + + + + + + + + + + + + + Dictionary used to store state values about the authentication session. + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class + + + + + + State values about the authentication session. + + + + + Gets or sets whether the authentication session is persisted across multiple requests. + + + + + Gets or sets the full path or absolute URI to be used as an http redirect response value. + + + + + Gets or sets the time at which the authentication ticket was issued. + + + + + Gets or sets the time at which the authentication ticket expires. + + + + + Gets or sets if refreshing the authentication session should be allowed. + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Initializes a new instance of the class + + + + + + + List of the authentication types that should send a challenge in the response. + + + + + Dictionary used to store state values about the authentication session. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Initializes a new instance of the class. + + + + + + + Initializes a new instance of the class. + + + + + + + The identity associated with the user sign in. + + + + + The security principal associated with the user sign in. + + + + + Dictionary used to store state values about the authentication session. + + + + + Exposes the security.SignOut and security.SignOutProperties environment values as a strong type. + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + + + + + + + List of the authentication types that should be revoked on sign out. + + + + + Dictionary used to store state values about the authentication session. + + + + + Used to interact with authentication middleware that have been chained in the pipeline + + + + + Returns the current user for the request + + + + + Exposes the security.Challenge environment value as a strong type. + + + + + Exposes the security.SignIn environment value as a strong type. + + + + + Exposes the security.SignOut environment value as a strong type. + + + + + Lists all of the description data provided by authentication middleware that have been chained + + The authentication descriptions + + + + Lists the description data of all of the authentication middleware which are true for a given predicate + + A function provided by the caller which returns true for descriptions that should be in the returned list + The authentication descriptions + + + + Call back through the middleware to ask for a specific form of authentication to be performed + on the current request + + Identifies which middleware should respond to the request + for authentication. This value is compared to the middleware's Options.AuthenticationType property. + Returns an object with the results of the authentication. The AuthenticationResult.Identity + may be null if authentication failed. Even if the Identity property is null, there may still be + AuthenticationResult.properties and AuthenticationResult.Description information returned. + + + + Called to perform any number of authentication mechanisms on the current request. + + Identifies one or more middleware which should attempt to respond + Returns the AuthenticationResult information from the middleware which responded. The + order is determined by the order the middleware are in the pipeline. Latest added is first in the list. + + + + Add information into the response environment that will cause the authentication middleware to challenge + the caller to authenticate. This also changes the status code of the response to 401. The nature of that + challenge varies greatly, and ranges from adding a response header or changing the 401 status code to + a 302 redirect. + + Additional arbitrary values which may be used by particular authentication types. + Identify which middleware should perform their alterations on the + response. If the authenticationTypes is null or empty, that means the + AuthenticationMode.Active middleware should perform their alterations on the response. + + + + Add information into the response environment that will cause the authentication middleware to challenge + the caller to authenticate. This also changes the status code of the response to 401. The nature of that + challenge varies greatly, and ranges from adding a response header or changing the 401 status code to + a 302 redirect. + + Identify which middleware should perform their alterations on the + response. If the authenticationTypes is null or empty, that means the + AuthenticationMode.Active middleware should perform their alterations on the response. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to grant a claims-based identity to the recipient of the response. The exact mechanism of this may vary. + Examples include setting a cookie, to adding a fragment on the redirect url, or producing an OAuth2 + access code or token response. + + Contains additional properties the middleware are expected to persist along with + the claims. These values will be returned as the AuthenticateResult.properties collection when AuthenticateAsync + is called on subsequent requests. + Determines which claims are granted to the signed in user. The + ClaimsIdentity.AuthenticationType property is compared to the middleware's Options.AuthenticationType + value to determine which claims are granted by which middleware. The recommended use is to have a single + ClaimsIdentity which has the AuthenticationType matching a specific middleware. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to grant a claims-based identity to the recipient of the response. The exact mechanism of this may vary. + Examples include setting a cookie, to adding a fragment on the redirect url, or producing an OAuth2 + access code or token response. + + Determines which claims are granted to the signed in user. The + ClaimsIdentity.AuthenticationType property is compared to the middleware's Options.AuthenticationType + value to determine which claims are granted by which middleware. The recommended use is to have a single + ClaimsIdentity which has the AuthenticationType matching a specific middleware. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to revoke any claims identity associated the the caller. The exact method varies. + + Additional arbitrary values which may be used by particular authentication types. + Identifies which middleware should perform the work to sign out. + Multiple authentication types may be provided to clear out more than one cookie at a time, or to clear + cookies and redirect to an external single-sign out url. + + + + Add information to the response environment that will cause the appropriate authentication middleware + to revoke any claims identity associated the the caller. The exact method varies. + + Identifies which middleware should perform the work to sign out. + Multiple authentication types may be provided to clear out more than one cookie at a time, or to clear + cookies and redirect to an external single-sign out url. + + + + Logging extension methods for IAppBuilder. + + + + + Sets the server.LoggerFactory in the Properties collection. + + + + + + + Retrieves the server.LoggerFactory from the Properties collection. + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Creates a new ILogger instance from the server.LoggerFactory in the Properties collection. + + + + + + + + Provides a default ILoggerFactory. + + + + + Provides a default ILoggerFactory based on System.Diagnostics.TraceSorce. + + + + + Provides an ILoggerFactory based on System.Diagnostics.TraceSource. + + + + + Initializes a new instance of the class. + + + Creates a factory named "Microsoft.Owin". + + + + + Initializes a new instance of the class. + + + + + + + Creates a new DiagnosticsLogger for the given component name. + + + + + + + A generic interface for logging. + + + + + Aggregates most logging patterns to a single method. This must be compatible with the Func representation in the OWIN environment. + + To check IsEnabled call WriteCore with only TraceEventType and check the return value, no event will be written. + + + + + + + + + + + Used to create logger instances of the given name. + + + + + Creates a new ILogger instance of the given name. + + + + + + + ILogger extension methods for common scenarios. + + + + + Checks if the given TraceEventType is enabled. + + + + + + + + Writes a verbose log message. + + + + + + + Writes an informational log message. + + + + + + + Writes a warning log message. + + + + + + + + Writes a warning log message. + + + + + + + + Writes an error log message. + + + + + + + Writes an error log message. + + + + + + + + Writes a critical log message. + + + + + + + Writes a critical log message. + + + + + + + + Contains the parts of an address. + + + + + Initializes a new instance. + + + + + + Initializes a new with the given parts. + + The scheme. + The host. + The port. + The path. + + + + Gets the internal dictionary for this collection. + + The internal dictionary for this collection. + + + + The uri scheme. + + + + + The uri host. + + + + + The uri port. + + + + + The uri path. + + + + + Creates a new + + A new + + + + Determines whether the specified object is equal to the current object. + + The other object. + true if the specified object is equal to the current object; otherwise, false. + + + + Determines whether the specified object is equal to the current object. + + The other object. + true if the specified object is equal to the current object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if left and right represent the same address; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if left and right do not represent the same address; otherwise, false. + + + + Gets a specified key and value from the underlying dictionary. + + + The key. + + + + + Sets a specified key and value in the underlying dictionary. + + The key. + The value. + + + + + Wraps the host.Addresses list. + + + + + Initializes a new instance of the class. + + The address list to set to the collection. + + + + Gets the underlying address list. + + The underlying address list. + + + + Gets the number of elements in the collection. + + The number of elements in the collection. + + + + Gets the item with the specified index from the collection. + + The index. + The item with the specified index. + + + + Adds the specified address to the collection. + + The address to add to the collection. + + + + Gets the enumerator that iterates through the collection. + + The enumerator that can be used to iterate through the collection. + + + + Gets the enumerator that iterates through the collection. + + The enumerator that can be used to iterate through the collection. + + + + Creates a new empty instance of . + + A new empty instance of . + + + + Determines whether the current collection is equal to the specified collection. + + The other collection to compare to the current collection. + true if current collection is equal to the specified collection; otherwise, false. + + + + Determines whether the current collection is equal to the specified object. + + The object to compare to the current collection. + true if current collection is equal to the specified object; otherwise, false. + + + + Gets the hash code for this instance. + + The hash code for this instance. + + + + Determines whether the first collection is equal to the second collection. + + The first collection to compare. + The second collection to compare. + true if both collections are equal; otherwise, false. + + + + Determines whether the first collection is not equal to the second collection. + + The first collection to compare. + The second collection to compare. + true if both collections are not equal; otherwise, false. + + + + A wrapper for the IDictionary. + + + + + Initializes a new instance of the class. + + + + + + Gets or sets the string value for “owin.Version”. + + The string value for “owin.Version”. + + + + Gets or sets the function delegate for “builder.DefaultApp”. + + The function delegate for “builder.DefaultApp”. + + + + Gets or sets the action delegate for “builder.AddSignatureConversion”. + + The action delegate for “builder.AddSignatureConversion”. + + + + Gets or sets the string value for “host.AppName”. + + The string value for “host.AppName”. + + + + Gets or sets the text writer for “host.TraceOutput”. + + The text writer for “host.TraceOutput”. + + + + Gets or sets the cancellation token for “host.OnAppDisposing”. + + The cancellation token for “host.OnAppDisposing”. + + + + Gets or sets the address collection for “host.Addresses”. + + The address collection for “host.Addresses”. + + + + Gets or sets the list of “server.Capabilities”. + + The list of “server.Capabilities”. + + + + Gets the underlying dictionary for this instance. + + The underlying dictionary for this instance. + + + + Determines whether the current AppProperties is equal to the specified AppProperties. + + The other AppProperties to compare with the current instance. + true if the current AppProperties is equal to the specified AppProperties; otherwise, false. + + + + Determines whether the current AppProperties is equal to the specified object. + + The object to compare with the current instance. + true if the current AppProperties is equal to the specified object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether the first AppPProperties is equal to the second AppProperties. + + The first AppPropeties to compare. + The second AppPropeties to compare. + true if both AppProperties are equal; otherwise, false. + + + + Determines whether the first AppPProperties is not equal to the second AppProperties. + + The first AppPropeties to compare. + The second AppPropeties to compare. + true if both AppProperties are not equal; otherwise, false. + + + + Gets the value from the dictionary with the specified key. + + The type of the value. + The key of the value to get. + The value with the specified key. + + + + Sets the value with the specified key. + + The key of the value to set. + The value to set. + This instance. + + + + Represents the capabilities for the builder properties. + + + + + Initializes a new instance of the class. + + + + + + The underling IDictionary + + + + + Gets or sets the string value for "sendfile.Version" + + the string value for "sendfile.Version" + + + + Gets or sets the websocket version. + + The websocket version. + + + + Initializes a new instance of the class. + + A new instance of the class. + + + + Determines whether the current Capabilities instance is equal to the specified Capabilities. + + The other Capabilities to compare with the current instance. + true if the specified object is equal to the current object; otherwise, false. + + + + Determines whether the current Capabilities is equal to the specified object. + + The object to compare with the current instance. + true if the current Capabilities is equal to the specified object; otherwise, false. + + + + Returns the hash code for this instance. + + The hash code for this instance. + + + + Determines whether two specified instances of are equal. + + The first object to compare. + The second object to compare. + true if the two specified instances of are equal; otherwise, false. + + + + Determines whether two specified instances of are not equal. + + The first object to compare. + The second object to compare. + true if the two specified instances of are not equal; otherwise, false. + + + + Gets the value from the dictionary with the specified key. + + The type of the value. + The key of the value to get. + The value with the specified key. + + + + Sets the given key and value in the underlying dictionary. + + The key of the value to set. + The value to set. + This instance. + + + + Options used to create a new cookie. + + + + + Creates a default cookie with a path of '/'. + + + + + Gets or sets the domain to associate the cookie with. + + The domain to associate the cookie with. + + + + Gets or sets the cookie path. + + The cookie path. + + + + Gets or sets the expiration date and time for the cookie. + + The expiration date and time for the cookie. + + + + Gets or sets a value that indicates whether to transmit the cookie using Secure Sockets Layer (SSL)—that is, over HTTPS only. + + true to transmit the cookie only over an SSL connection (HTTPS); otherwise, false. + + + + Gets or sets a value that indicates whether a cookie is accessible by client-side script. + + true if a cookie is accessible by client-side script; otherwise, false. + + + + Gets or sets a value that indicates on which requests client should or should not send cookie back to the server. + Set to null to do not include SameSite attribute at all. + + SameSite attribute value or null if attribute must not be set. + + + + Provides helper methods for processing requests. + + + + + Parses an HTTP form body. + + The HTTP form body to parse. + The object containing the parsed HTTP form body. + + + + An abstract base class for a standard middleware pattern. + + + + + Instantiates the middleware with an optional pointer to the next component. + + + + + + The optional next component. + + + + + Process an individual request. + + + + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Create a new environment wrapper exposing request properties. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or set the HTTP method. + + The HTTP method. + + + + Gets or set the HTTP request scheme from owin.RequestScheme. + + The HTTP request scheme from owin.RequestScheme. + + + + Returns true if the owin.RequestScheme is https. + + true if this request is using https; otherwise, false. + + + + Gets or set the Host header. May include the port. + + The Host header. + + + + Gets or set the owin.RequestPathBase. + + The owin.RequestPathBase. + + + + Gets or set the request path from owin.RequestPath. + + The request path from owin.RequestPath. + + + + Gets or set the query string from owin.RequestQueryString. + + The query string from owin.RequestQueryString. + + + + Gets the query value collection parsed from owin.RequestQueryString. + + The query value collection parsed from owin.RequestQueryString. + + + + Gets the uniform resource identifier (URI) associated with the request. + + The uniform resource identifier (URI) associated with the request. + + + + Gets or set the owin.RequestProtocol. + + The owin.RequestProtocol. + + + + Gets the request headers. + + The request headers. + + + + Gets the collection of Cookies for this request. + + The collection of Cookies for this request. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Cache-Control header. + + The Cache-Control header. + + + + Gets or sets the Media-Type header. + + The Media-Type header. + + + + Gets or set the Accept header. + + The Accept header. + + + + Gets or set the owin.RequestBody Stream. + + The owin.RequestBody Stream. + + + + Gets or sets the cancellation token for the request. + + The cancellation token for the request. + + + + Gets or set the server.LocalIpAddress. + + The server.LocalIpAddress. + + + + Gets or set the server.LocalPort. + + The server.LocalPort. + + + + Gets or set the server.RemoteIpAddress. + + The server.RemoteIpAddress. + + + + Gets or set the server.RemotePort. + + The server.RemotePort. + + + + Gets or set the server.User. + + The server.User. + + + + Asynchronously reads and parses the request body as a form. + + The parsed form data. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + + This wraps OWIN environment dictionary and provides strongly typed accessors. + + + + + Create a new context with only request and response header collections. + + + + + Creates a new environment wrapper exposing response properties. + + OWIN environment dictionary which stores state information about the request, response and relevant server state. + + + + Gets the OWIN environment. + + The OWIN environment. + + + + Gets the request context. + + The request context. + + + + Gets or sets the optional owin.ResponseStatusCode. + + The optional owin.ResponseStatusCode, or 200 if not set. + + + + Gets or sets the the optional owin.ResponseReasonPhrase. + + The the optional owin.ResponseReasonPhrase. + + + + Gets or sets the owin.ResponseProtocol. + + The owin.ResponseProtocol. + + + + Gets the response header collection. + + The response header collection. + + + + Gets a collection used to manipulate the Set-Cookie header. + + A collection used to manipulate the Set-Cookie header. + + + + Gets or sets the Content-Length header. + + The Content-Length header. + + + + Gets or sets the Content-Type header. + + The Content-Type header. + + + + Gets or sets the Expires header. + + The Expires header. + + + + Gets or sets the E-Tag header. + + The E-Tag header. + + + + Gets or sets the owin.ResponseBody Stream. + + The owin.ResponseBody Stream. + + + + Registers for an event that fires when the response headers are sent. + + The callback method. + The callback state. + + + + Sets a 302 response status code and the Location header. + + The location where to redirect the client. + + + + Writes the given text to the response body stream using UTF-8. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + + + + Writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given text to the response body stream using UTF-8. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Asynchronously writes the given bytes to the response body stream. + + The response data. + The zero-based byte offset in the parameter at which to begin copying bytes. + The number of bytes to write. + A token used to indicate cancellation. + A Task tracking the state of the write operation. + + + + Gets a value from the OWIN environment, or returns default(T) if not present. + + The type of the value. + The key of the value to get. + The value with the specified key or the default(T) if not present. + + + + Sets the given key and value in the OWIN environment. + + The type of the value. + The key of the value to set. + The value to set. + This instance. + + + From b4daee1dbae5f87fa65f59cdf1f9a27addf8b0fc Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 29 Jul 2020 14:47:42 -0700 Subject: [PATCH 24/37] secciones --- Inventarios/ResguardoMaterial.aspx | 18 +++++++------ Inventarios/ResguardoMaterial.aspx.vb | 37 +++++++++++++++++++-------- 2 files changed, 37 insertions(+), 18 deletions(-) diff --git a/Inventarios/ResguardoMaterial.aspx b/Inventarios/ResguardoMaterial.aspx index 939bb9015..d05dad8a8 100644 --- a/Inventarios/ResguardoMaterial.aspx +++ b/Inventarios/ResguardoMaterial.aspx @@ -284,11 +284,11 @@ - - + + <%-- @@ -439,7 +439,7 @@
    - +
    @@ -473,7 +473,7 @@ - + <%-- --%> @@ -490,13 +490,15 @@ - - - + + + + - xx + + diff --git a/Inventarios/ResguardoMaterial.aspx.vb b/Inventarios/ResguardoMaterial.aspx.vb index ae6976ed6..c2f7c86af 100644 --- a/Inventarios/ResguardoMaterial.aspx.vb +++ b/Inventarios/ResguardoMaterial.aspx.vb @@ -582,6 +582,18 @@ Partial Class Inventarios_ResguardoMaterial Protected Sub GvMLiberacion_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCLabel("LblCantidad").Text = e.Row.FCLabel("LblCantidad").Text.FormatoNumero(2) + + If CBool(e.Row.DBCampo("AplicaSeccion")) AndAlso DdlAlmacenDestinoLiberacion.SelectedValue.ToEntero > 0 Then + Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenDestinoLiberacion.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) + e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True + e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt + e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() + If dtt.Rows.Count = 0 Then + e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + End If + dtt.Dispose() + End If + End If End Sub @@ -661,13 +673,12 @@ Partial Class Inventarios_ResguardoMaterial End Sub Private Sub CargaGvMLiberacion() - GvM.Columns(5).Visible = False - For Each Dr As DataRow In DtMovimientosLiberacion.Rows - If Dr("Serie").ToString <> "" Then - GvM.Columns(5).Visible = True - Exit For - End If - Next + + GvMLiberacion.Columns(5).Visible = DtMovimientosLiberacion.MAX("Serie").ToString <> "" + GvMLiberacion.Columns(6).Visible = DtMovimientosLiberacion.MAX("Lote").ToString <> "" + GvMLiberacion.Columns(7).Visible = DtMovimientosLiberacion.MAX("FechaCaducidad").ToString.ToDate > MinFecha + GvMLiberacion.Columns(8).Visible = DtMovimientosLiberacion.MAX("CveSeccionAlmacen").ToString.ToEntero > 0 Or DtMovimientosLiberacion.MAX("AplicaSeccion") = "True" + GvMLiberacion.DataSource = DtMovimientosLiberacion GvMLiberacion.DataBind() @@ -863,6 +874,7 @@ Partial Class Inventarios_ResguardoMaterial 'SALIDA ORIGEN - RESGUARDO CveMovimientoSalida = ObjInventario.AddMovimiento(CveAlmacenLiberación, 3, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, SubProyecto, ActivoFijo, Observaciones:=TxtObservacionesLiberacion.Text, CvePersonal:=CvePersonalLiberacion, CveAlmacenDestino:=DdlAlmacenDestinoLiberacion.SelectedValue.ToEntero, CveProveedor:=CveProveedorLiberacion, CveCliente:=CveClienteLiberacion, MovimientoFijo:=True) FolioSalida = ObjInventario.Folio + Dim DiccionarioSecciones As New HybridDictionary If CveMovimientoSalida <= 0 Then TieneError = True @@ -873,11 +885,12 @@ Partial Class Inventarios_ResguardoMaterial Dim Cont As Integer = 0 For Each Gvr As GridViewRow In GvMLiberacion.Rows If Gvr.FCTextBox("TxtCantidad").Text.ToDouble > 0 Then - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Gvr.FCTextBox("TxtCantidad").Text.ToDouble, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.DataKey("PU").ToString.ToDecimal, -1, -1, Gvr.DataKey("Serie").ToString, Gvr.DataKey("Observaciones").ToString) Then + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, Gvr.FCTextBox("TxtCantidad").Text.ToDouble, Gvr.DataKey("CveUM").ToString.ToEntero, Gvr.DataKey("CvePS").ToString.ToEntero, Gvr.DataKey("PU").ToString.ToDecimal, -1, CveSeccionAlmacen:=Gvr.DataKey("CveSeccionAlmacen").ToEntero, Serie:=Gvr.DataKey("Serie").ToString, Observaciones:=Gvr.DataKey("Observaciones").ToString) Then MensajeError = "Ocurrió un error al guardar los detalles del movimiento de salida. Por favor vuelva a intentar." TieneError = True Exit For - + Else + DiccionarioSecciones.Add(ObjInventario.CveMovimientoDetalle, Gvr.FCDropDownList("DdlSeccionAlmacen").SelectedValue) End If End If Cont += 1 @@ -895,7 +908,8 @@ Partial Class Inventarios_ResguardoMaterial If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then Cont = 0 For Each Dr As DataRow In ObjInventario.DtResultados.Rows - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("Serie").ToString, Dr("Observaciones").ToString) Then + Dim CveSeccionAlmacen As Integer = DiccionarioSecciones(Dr("CveMovimientoDetalle").ToString.ToEntero).ToString.ToEntero + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Dr("Serie").ToString, Observaciones:=Dr("Observaciones").ToString) Then TieneError = True MensajeError = "Ocurrió un error al guardar los movimientos de entrada" Exit For @@ -1038,4 +1052,7 @@ Partial Class Inventarios_ResguardoMaterial End If End Sub + Private Sub DdlAlmacenDestinoLiberacion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlAlmacenDestinoLiberacion.SelectedIndexChanged + CargaResguardos() + End Sub End Class From b5360978861fcc289dedd25e0e2199552edb9cb8 Mon Sep 17 00:00:00 2001 From: rrene Date: Wed, 29 Jul 2020 14:48:07 -0700 Subject: [PATCH 25/37] --secciones --- Inventarios/Apartados.aspx | 6 +++--- Inventarios/EntradasSalidas.aspx | 2 +- vwd.webinfo | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Inventarios/Apartados.aspx b/Inventarios/Apartados.aspx index b146d2360..2661d78f5 100644 --- a/Inventarios/Apartados.aspx +++ b/Inventarios/Apartados.aspx @@ -401,7 +401,7 @@
    - + @@ -416,9 +416,9 @@ - + - + diff --git a/Inventarios/EntradasSalidas.aspx b/Inventarios/EntradasSalidas.aspx index 7947cd90a..147a38147 100644 --- a/Inventarios/EntradasSalidas.aspx +++ b/Inventarios/EntradasSalidas.aspx @@ -1458,7 +1458,7 @@
    - + diff --git a/vwd.webinfo b/vwd.webinfo index 6a84ef014..55467f44f 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -82,6 +82,8 @@ + + From 79f075ae1e7a6087985c76425b8b3844166899e5 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Wed, 29 Jul 2020 21:00:17 -0700 Subject: [PATCH 26/37] correcciones en reportes --- Contratos/PopUpBuscarContrato.aspx | 4 ++-- Contratos/PopUpBuscarContrato.aspx.vb | 17 +++++++++-------- Empresas/119/Formatos/Polizas.rdlc | 2 +- Empresas/72/Formatos/Traslado.rdlc | 2 +- Inventarios/EntradasSalidas.aspx.vb | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Contratos/PopUpBuscarContrato.aspx b/Contratos/PopUpBuscarContrato.aspx index 64c8c8d34..c0311468f 100644 --- a/Contratos/PopUpBuscarContrato.aspx +++ b/Contratos/PopUpBuscarContrato.aspx @@ -70,11 +70,11 @@ - Proyecto: + - SubProyecto: + diff --git a/Contratos/PopUpBuscarContrato.aspx.vb b/Contratos/PopUpBuscarContrato.aspx.vb index b4daf97d0..414ac9472 100644 --- a/Contratos/PopUpBuscarContrato.aspx.vb +++ b/Contratos/PopUpBuscarContrato.aspx.vb @@ -41,14 +41,15 @@ Partial Class Contratos_PopUpBuscarContrato Private Sub CargaProyecto() - If UsuarioActual.Empresa.GralSoloProyecto Then - CargaSubProyectoContrato(-1) - Else - DdlProyecto.DataSource = GlobalDTProyectos(UsuarioActual.Empresa.CveEmpresa) - DdlProyecto.DataBind() - End If - DdlProyecto.Items.Insert(0, New ListItem("Todos", "-1")) - DdlSubProtecto.Items.Insert(0, New ListItem("Todos", "-1")) + CargarCentrosDeCosto(DdlProyecto, DdlSubProtecto, LblProyecto, LblSubProyecto) + 'If UsuarioActual.Empresa.GralSoloProyecto Then + ' CargaSubProyectoContrato(-1) + 'Else + ' DdlProyecto.DataSource = GlobalDTProyectos(UsuarioActual.Empresa.CveEmpresa) + ' DdlProyecto.DataBind() + 'End If + 'DdlProyecto.Items.Insert(0, New ListItem("Todos", "-1")) + 'DdlSubProtecto.Items.Insert(0, New ListItem("Todos", "-1")) End Sub Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlProyecto.SelectedIndexChanged CargaSubProyectoContrato(DdlProyecto.SelectedValue.ToEntero) diff --git a/Empresas/119/Formatos/Polizas.rdlc b/Empresas/119/Formatos/Polizas.rdlc index 7e079eb13..a2c8d63c8 100644 --- a/Empresas/119/Formatos/Polizas.rdlc +++ b/Empresas/119/Formatos/Polizas.rdlc @@ -1630,7 +1630,7 @@ - ="Página: " & Code.GetGroupPageNumber(ReportItems!NewPage.Value,Globals!PageNumber) + ="Página: " & Globals!PageNumber diff --git a/Empresas/72/Formatos/Traslado.rdlc b/Empresas/72/Formatos/Traslado.rdlc index ebe920057..b36880ec9 100644 --- a/Empresas/72/Formatos/Traslado.rdlc +++ b/Empresas/72/Formatos/Traslado.rdlc @@ -489,7 +489,7 @@ - =Fields!SeccionAlmacen.Value + diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index 7cd476459..49bfaa073 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -827,7 +827,7 @@ Partial Class Inventarios_EntradasSalidas 'cargar también los movimentos detalle If Mov.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then - DtMovimientos = Mov.DtResultados.FiltraParametros("", "CveMovimientoDetalle") + DtMovimientos = Mov.DtResultados DtMovimientos.Columns("No").AutoIncrement = True DtMovimientos.Columns("No").AutoIncrementSeed = DtMovimientos.Rows.Count + 1 From 17c955467027cd617c55012dfc86852f141407db Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Thu, 30 Jul 2020 12:06:44 -0700 Subject: [PATCH 27/37] nuevo filtro que considera el producto servicio para traer los movimientos detalle --- App_Code/ClsInventarios.vb | 3 ++- Inventarios/AjustesSeccionAlmacen.aspx | 17 +++++++++++------ Inventarios/AjustesSeccionAlmacen.aspx.vb | 7 ++++--- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index 1ccb1b4c9..8e7b1dd34 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -4810,7 +4810,7 @@ Public Class ClsInventarios #Region "MOVIMIENTOS DETALLE SECCION ALMACEN" - Public Function GetMovimientosDetalleSeccionesAlmacen(CveAlmacen As Integer, CveClasificacion As Integer, CveEmpresa As Integer, Folio As String) As Boolean + Public Function GetMovimientosDetalleSeccionesAlmacen(CveAlmacen As Integer, CveClasificacion As Integer, CveEmpresa As Integer, Folio As String, CvePS As Integer) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Inv_MovimientosDetalleAjusteSeccionesGet") With SqlAdapter.SelectCommand.Parameters @@ -4818,6 +4818,7 @@ Public Class ClsInventarios .Add("@CveClasificacion", SqlDbType.Int).Value = CveClasificacion .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@Folio", SqlDbType.NVarChar).Value = Folio + .Add("@CvePS", SqlDbType.Int).Value = CvePS End With Try SqlAdapter.Fill(Data) diff --git a/Inventarios/AjustesSeccionAlmacen.aspx b/Inventarios/AjustesSeccionAlmacen.aspx index 7ec3297eb..d8d9a41ab 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx +++ b/Inventarios/AjustesSeccionAlmacen.aspx @@ -37,18 +37,23 @@
    -
    - +
    +
    -
    - +
    +
    -
    - +
    + +
    + + +
    +
    diff --git a/Inventarios/AjustesSeccionAlmacen.aspx.vb b/Inventarios/AjustesSeccionAlmacen.aspx.vb index 0b4540a78..05c620b22 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx.vb +++ b/Inventarios/AjustesSeccionAlmacen.aspx.vb @@ -24,6 +24,7 @@ Partial Class Inventarios_AjustesSeccionAlmacen DdlClasificaciones.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) DdlClasificaciones.DataBind() DdlClasificaciones.Items.Insert(0, New ListItem("Todos", "-1")) + End Sub Private Sub BtnConsultar_Click(sender As Object, e As EventArgs) Handles BtnConsultar.Click @@ -32,9 +33,9 @@ Partial Class Inventarios_AjustesSeccionAlmacen Private Sub CargaDatos() Dim ObjInv As New ClsInventarios - + Dim CvePS As String = If(DdlPS.SelectedValue = "", "-1", DdlPS.SelectedValue) Dim FolioAux As String = If(TxtFolioFiltro.Text.Length > 0, TxtFolioFiltro.Text, "-1") - If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacen.SelectedValue.ToEntero, DdlClasificaciones.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, FolioAux) Then + If ObjInv.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacen.SelectedValue.ToEntero, DdlClasificaciones.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, FolioAux, CvePS.ToEntero) Then GvD.DataSource = ObjInv.DtResultados End If @@ -298,7 +299,7 @@ Partial Class Inventarios_AjustesSeccionAlmacen Try Dim DtExistenciasSecciones As DataTable = Nothing - If ObjInventario.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacenExcel.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, "-1") Then + If ObjInventario.GetMovimientosDetalleSeccionesAlmacen(DdlAlmacenExcel.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, "-1", -1) Then DtExistenciasSecciones = ObjInventario.DtResultados.Copy() End If From b2cca5ec1553ddc160eb703643d3126319e95576 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Thu, 30 Jul 2020 13:49:07 -0700 Subject: [PATCH 28/37] --- App_Code/ClsPaginas.vb | 16 +- Bancos/IE.aspx.vb | 3 + Bin/Microsoft.Owin.Security.OAuth.dll | Bin 77488 -> 73624 bytes Bin/Microsoft.Owin.Security.dll | Bin 53416 -> 54168 bytes Bin/Microsoft.Owin.dll | Bin 101032 -> 101272 bytes Global.asax | 1045 +++++++++++++------------ RH/ActualizacionMasiva.aspx.vb | 5 +- 7 files changed, 566 insertions(+), 503 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 7a737f3b9..76509068b 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1457,14 +1457,14 @@ Public Class ClsPaginas Get Dim AppNombre As String = String.Format("GlobalDTBancosCuentas-{0}", CveEmpresa) 'sino existe, recarga los datos - If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Then - Dim ObjBancos As New ClsBancos - If ObjBancos.GetBancosCuentasUsuarios(-1, CveEmpresa) Then - Application(AppNombre) = ObjBancos.DtResultados - Else - Application(AppNombre) = Nothing - End If - ObjBancos.Dispose() + If HttpContext.Current.Application(AppNombre) Is Nothing Then + Using ObjBancos As New ClsBancos + If ObjBancos.GetBancosCuentasUsuarios(-1, CveEmpresa) Then + Application(AppNombre) = ObjBancos.DtResultados + Else + Application(AppNombre) = Nothing + End If + End Using End If Dim Str As String = String.Format("CveEmpresa = {0} ", UsuarioActual.CveEmpresa) diff --git a/Bancos/IE.aspx.vb b/Bancos/IE.aspx.vb index fce9a37a2..bd5cbd3fa 100644 --- a/Bancos/IE.aspx.vb +++ b/Bancos/IE.aspx.vb @@ -3800,6 +3800,9 @@ Partial Class Bancos_IE Else ObjIE.RollBack() Alert(MsgError, TipoMensaje.MsgAdvertencia) + If Opcion = "INGPC" Then + CveIE = -1 + End If End If If Msg.ToString <> "" Then diff --git a/Bin/Microsoft.Owin.Security.OAuth.dll b/Bin/Microsoft.Owin.Security.OAuth.dll index 8f95e30538a0f3eb90ab03b30a9adbbff7c8e979..650eb379bc7e38e8ef2d45f59b3749049d4895fb 100644 GIT binary patch literal 73624 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
    GrqZ{v@j$Qe6Je8hwgEDF>KkQ33C2I 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�q-BeLt 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
    (_L%z0ZNjUHN`EwR>l zJbxMUlm2RR?T))xE^`N##MN)DI{xZf|FM5uK3%wd|0{E~%^g=w4Dp!pO+5Q>hq2<0 zMbCBF{iO32O*9Ozu8+jGo$T`I+@Zc_UY_H%e`53O^SqUnz1rkYxf@)6`M@9cmmE6_ z(r>TrQ!dJ6YQx%5gOun6|Jfd;d`&GZT~&QenRtJ~Na1k+XOnglpTbZ6B!Sx&t&tt> zTbcACA-ZHhjDvxbK+d4L`P5^7+B40ttQrCeh$JvFkDVGcM=WOy&T<%< z|M;xiMsvsE`^190yc^n&eV?Tty2Ed5e08cobjknug3|hqC&a5Z9yR7X*gh$gZM*vI z_%(+Y)jzhtf4_Au)HKZ2YNbWdD~@CD_gOFJH&hQDHFv=Ux5Xa~it5g~EUx&zH^Dpf x%eIJpOGoD$8uqw-eDBSPpQgrLNe&P19u)sHG;dw`teDpQpTy{eWx*oi{{gN+dWir4 literal 77488 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 diff --git a/Bin/Microsoft.Owin.Security.dll b/Bin/Microsoft.Owin.Security.dll index 54901f282041bc7d2066ab6ede234ee29bcc9051..44d45c92c804c34a0e538bd2cdcd2c9a0a800706 100644 GIT binary patch literal 54168 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 JnE``{{{a=|x!nK& literal 53416 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

    C>b!+Lwv1(3|kT44-_f_cJmrQ zz5XA`vXS9@hAugS!nWd2@>2B{)F7)@Xc7XTAs2&DCkrHR{)Yr7Z4XVrONJ2$6c%-# z!d=aq-K+)c<7%uey5p?qB;|sxO+L)bi#k>$dCb{|N^%d6IE;Ce!zA*6u&|a|e`3>T z$Fz3~dDx`KiQ)wa1dAK?dfJ-!n1Qk zsV>nxeX*1iqc$q#pnpyj6DVxl-clu4@Q^cpQAplyPBfk)jaTXQm5)(EAu&qQlJ`*z zJ_(VAWnJNcS`6@3S3T2V`!|ka!yTYZ_0sRkC!JI5NgYB8pjxvf$_^p@tT-7%oqMz8 zkE=weK2nZ*WWXHOwr3Grpd$a#(vx1~O?|oXjlN_Y`=3&8bcnRt=Wu?)o sZ)jbgA)4LOp}PpM?B8)Otr6(5EYR*+rIJq?A;6H>ic2=rgP@4`A86ltApigX literal 101032 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 F{|TkB0(AfY diff --git a/Global.asax b/Global.asax index 9f62bf9f2..f7cdd4974 100644 --- a/Global.asax +++ b/Global.asax @@ -33,292 +33,314 @@ 'BANDERA PARA VALIDACION DE CFDI - Application("GlobalValidarCFDI") = True - - '---------------------------------------------------------------------------------------------------------------------- - 'C A R G A - R H - - Dim ObjRH As New ClsRH - If ObjRH.GetTipoBuzon() Then Application("GlobalDTTipoBuzon") = ObjRH.DtResultados Else Application("GlobalDTTipoBuzon") = Nothing - If ObjRH.GetDepartamentos Then Application("GlobalDTDepartamentos") = ObjRH.DtResultados Else Application("GlobalDTDepartamentos") = Nothing - If ObjRH.GetDocumentos() Then Application("GlobalDTDocumentos") = ObjRH.DtResultados Else Application("GlobalDTDocumentos") = Nothing - If ObjRH.GetEscolaridades() Then Application("GlobalDTEscolaridad") = ObjRH.DtResultados Else Application("GlobalDTEscolaridad") = Nothing - If ObjRH.GetEstadoCivil() Then Application("GlobalDTEstadoCivil") = ObjRH.DtResultados Else Application("GlobalDTEstadoCivil") = Nothing - If ObjRH.GetEstatusPersonal() Then Application("GlobalDTEstatusPersonal") = ObjRH.DtResultados Else Application("GlobalDTEstatusPersonal") = Nothing - If ObjRH.GetGeneros() Then Application("GlobalDTGenero") = ObjRH.DtResultados Else Application("GlobalDTGenero") = Nothing - If ObjRH.GetMotivoBaja() Then Application("GlobalDTMotivoBaja") = ObjRH.DtResultados Else Application("GlobalDTMotivoBaja") = Nothing - If ObjRH.GetPuestos(-1) Then Application("GlobalDTRHPuestos") = ObjRH.DtResultados Else Application("GlobalDTRHPuestos") = Nothing - If ObjRH.GetRutas() Then Application("GlobalDTRutas") = ObjRH.DtResultados Else Application("GlobalDTRutas") = Nothing - If ObjRH.GetTiposContrato() Then Application("GlobalDTTiposContrato") = ObjRH.DtResultados Else Application("GlobalDTTiposContrato") = Nothing - If ObjRH.GetTurnos() Then Application("GlobalDTTurno") = ObjRH.DtResultados Else Application("GlobalDTTurno") = Nothing - If ObjRH.GetJornadas() Then Application("GlobalDTJornadas") = ObjRH.DtResultados Else Application("GlobalDTJornadas") = Nothing - If ObjRH.GetAsistenciasInasistencias() Then Application("GlobalDTAsistenciasInasistencias") = ObjRH.DtResultados Else Application("GlobalDTAsistenciasInasistencias") = Nothing - If ObjRH.GetMotivoHorasExtras() Then Application("GlobalDTMotivosHorasExtras") = ObjRH.DtResultados Else Application("GlobalDTMotivosHorasExtras") = Nothing - If ObjRH.GetAsistenciasDetalle() Then Application("GlobalDTAsistenciaDetalle") = ObjRH.DtResultados Else Application("GlobalDTAsistenciaDetalle") = Nothing - ObjRH.Dispose() - '---------------------------------------------------------------------------------------------------------------------- - 'C A R G A - O S - - Dim ObjOS As New ClsOS - If ObjOS.GetEstatusOrdenServicio() Then Application("GlobalDTEstatusOrdenServicios") = ObjOS.DtResultados Else Application("GlobalDTEstatusOrdenServicios") = Nothing - If ObjOS.GetTipoOrdenesServicios(-1) Then Application("GlobalDTTipoOrdenServicios") = ObjOS.DtResultados Else Application("GlobalDTTipoOrdenServicios") = Nothing - ObjOS.Dispose() - '------------------------------------------------------------------------------------------------------------------------- - 'A C T I V O S - F I J O S - - Dim ObjActivosFijos As New ClsAF - If ObjActivosFijos.GetCaracteristicasClasificaciones(-1) Then Application("GlobalDTAFCaracteristicasClasificaciones") = ObjActivosFijos.DtResultados Else Application("GlobalDTAFCaracteristicasClasificaciones") = Nothing - If ObjActivosFijos.GetCaracteristicas(-1) Then Application("GlobalDTAFCaracteristicas") = ObjActivosFijos.DtResultados Else Application("GlobalDTAFCaracteristicas") = Nothing - If ObjActivosFijos.GetSubTiposActivosFijos(-1) Then Application("GlobalDTSubTipoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTSubTipoActivoFijo") = Nothing - If ObjActivosFijos.GetTiposActivosFijos(-1) Then Application("GlobalDTTipoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTTipoActivoFijo") = Nothing - If ObjActivosFijos.GetEstatusActivoFijo() Then Application("GlobalDTEstadoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTEstadoActivoFijo") = Nothing - If ObjActivosFijos.GetMarcasActivosFijos(-1) Then Application(" GlobalDTMarcaActivoFijo") = ObjActivosFijos.DtResultados Else Application(" GlobalDTMarcaActivoFijo") = Nothing - If ObjActivosFijos.GetModelosActivosFijos(-1, -1) Then Application("GlobalDTModeloActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTModeloActivoFijo") = Nothing - ObjActivosFijos.Dispose() - '------------------------------------------------------------------------------------------------------------------------- - 'C A R G A - O R D E N E S - D E - C O M P R A S - - Dim ObjOC As New ClsOC - If ObjOC.GetEstatus() Then Application("GlobalDTOCEstatus") = ObjOC.DtResultados Else Application("GlobalDTOCEstatus") = Nothing - 'If ObjOC.GetEstatusUsuarios(-1, -1, -1, -1, -1) Then Application("GlobalDTOCEstatusUsuarios") = ObjOC.DtResultados Else Application("GlobalDTOCEstatusUsuarios") = Nothing - ObjOC.Dispose() - - - '------------------------------------------------------------------------------------------------------------------------- - 'A M O R T I Z A C I O N - C O N T A B L E - - Dim ObjAC As New ClsAC - If ObjAC.GetClasificacionFuncional() Then Application("GlobalDTAC_ClasificacionFuncional") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionFuncional") = Nothing - If ObjAC.GetClasificacionGeografica() Then Application("GlobalDTAC_ClasificacionGeografica") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionGeografica") = Nothing - If ObjAC.GetFuentesFinanciamiento() Then Application("GlobalDTAC_FuentesFinanciamiento") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamiento") = Nothing - If ObjAC.GetFuenteFinanciamientoCONAC() Then Application("GlobalDTAC_FuentesFinanciamientoCONAC") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamientoCONAC") = Nothing - If ObjAC.GetProgramaCONAC() Then Application("GlobalDTAC_ProgramasCONAC") = ObjAC.DtResultados Else Application("GlobalDTAC_ProgramasCONAC") = Nothing - If ObjAC.GetUnidadesAdministrativas() Then Application("GlobalDTAC_UnidadesAdministrativas") = ObjAC.DtResultados Else Application("GlobalDTAC_UnidadesAdministrativas") = Nothing - If ObjAC.GetClasificacionAdministrativa() Then Application("GlobalDTAC_ClasificacionAdministrativa") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionAdministrativa") = Nothing - If ObjAC.GetPD_EjeRector() Then Application("GlobalDTAC_PD_EjeRector") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_EjeRector") = Nothing - If ObjAC.GetPD_Programas() Then Application("GlobalDTAC_PD_Programas") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Programas") = Nothing - If ObjAC.GetPD_Estrategias() Then Application("GlobalDTAC_PD_Estrategias") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Estrategias") = Nothing - If ObjAC.GetPD_LineasAccion() Then Application("GlobalDTAC_PD_LineasAccion") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_LineasAccion") = Nothing - If ObjAC.GetPD_Metas() Then Application("GlobalDTAC_PD_Metas") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Metas") = Nothing - If ObjAC.GetTipoGasto() Then Application("GlobalDTAC_TipoGasto") = ObjAC.DtResultados Else Application("GlobalDTAC_TipoGasto") = Nothing - If ObjAC.GetProgramaOperativo() Then Application("GlobalDTAC_ProgramaOperativo") = ObjAC.DtResultados Else Application("GlobalDTAC_ProgramaOperativo") = Nothing - If ObjAC.GetFuentesFinanciamiento() Then Application("GlobalDTAC_FuentesFinanciamiento") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamiento") = Nothing - If ObjAC.GetRubrosIngreso() Then Application("GlobalDTAC_RubrosIngreso") = ObjAC.DtResultados Else Application("GlobalDTAC_RubrosIngreso") = Nothing - If ObjAC.GetFuentesRecaudacion() Then Application("GlobalDTAC_FuentesRecaudacion") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesRecaudacion") = Nothing - If ObjAC.GetMatrizID Then Application("GlobalDTAC_MatrizIngresos") = ObjAC.DtResultados Else Application("GlobalDTAC_MatrizIngresos") = Nothing - If ObjAC.GetMatrizGD Then Application("GlobalDTAC_MatrizEgresos") = ObjAC.DtResultados Else Application("GlobalDTAC_MatrizEgresos") = Nothing - ' If ObjAC.GetAreas() Then Application("GlobalDTAC_Areas") = ObjAC.DtResultados Else Application("GlobalDTAC_Areas") = Nothing - 'If ObjAC.GetProyectosProceso() Then Application("GlobalDTAC_ProyectosProceso") = ObjAC.DtResultados Else Application("GlobalDTAC_ProyectosProceso") = Nothing - 'If ObjAC.GetFuncion() Then Application("GlobalDTAC_Funcion") = ObjAC.DtResultados Else Application("GlobalDTAC_Funcion") = Nothing - 'If ObjAC.GetSubFuncion() Then Application("GlobalDTAC_SubFuncion") = ObjAC.DtResultados Else Application("GlobalDTAC_SubFuncion") = Nothing - 'If ObjAC.GetSubProgramas() Then Application("GlobalDTAC_SubProgramas") = ObjAC.DtResultados Else Application("GlobalDTAC_SubProgramas") = Nothing - 'If ObjAC.GetUbicaciones() Then Application("GlobalDTAC_Ubicaciones") = ObjAC.DtResultados Else Application("GlobalDTAC_Ubicaciones") = Nothing - ' If ObjAC.GetOG() Then Application("GlobalDTAC_OG") = ObjAC.DtResultados Else Application("GlobalDTAC_OG") = Nothing - ' If ObjAC.GetClasificadorOG() Then Application("GlobalDTAC_ClasificadorOG") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificadorOG") = Nothing - 'If ObjAC.GetProgramas() Then Application("GlobalDTAC_Programas") = ObjAC.DtResultados Else Application("GlobalDTAC_Programas") = Nothing - ' If ObjAC.GetCuentas() Then Application("GlobalDTAC_Cuentas") = ObjAC.DtResultados Else Application("GlobalDTAC_Cuentas") = Nothing - ' If ObjAC.GetDependencias() Then Application("GlobalDTAC_Dependencias") = ObjAC.DtResultados Else Application("GlobalDTAC_Dependencias") = Nothing - 'If ObjAC.GetFinalidad() Then Application("GlobalDTAC_Finalidad") = ObjAC.DtResultados Else Application("GlobalDTAC_Finalidad") = Nothing - ObjAC.Dispose() - - - Dim Finan As New ClsFinanzas - - If Finan.GetRazonesFinancieras(-1) Then Application("GlobalDTFinan_RazonesFinancieras") = Finan.DtResultados - - Finan.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C A R G A - T I P O G A S T O S - Dim ObjCompra As New ClsCompras() - If ObjCompra.GetTipoGasto(-1, -1) Then Application("GlobalDTTiposGastos") = ObjCompra.DtResultados Else Application("GlobalDTTiposGastos") = Nothing - ObjCompra.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C A R G A - N O M - - Dim ObjNom As New ClsNominas() - If ObjNom.GetConceptos(-1) Then Application("GlobalDTNomConceptos") = ObjNom.DtResultados Else Application("GlobalDTNomConceptos") = Nothing - If ObjNom.GetConceptosFunciones() Then Application("GlobalDTNomConceptosFunciones") = ObjNom.DtResultados Else Application("GlobalDTNomConceptosFunciones") = Nothing - If ObjNom.GetTiposPeriodos() Then Application("GlobalDTTipoPeriodo") = ObjNom.DtResultados Else Application("GlobalDTTipoPeriodo") = Nothing - If ObjNom.GetPeriodos(-1, -1, -1, -1, -1) Then Application("GlobalDTNominasPeriodos") = ObjNom.DtResultados Else Application("GlobalDTNominasPeriodos") = Nothing - If ObjNom.GetBancos Then Application("GlobalDTNomSatBancos") = ObjNom.DtResultados Else Application("GlobalDTNomSatBancos") = Nothing - If ObjNom.GetConceptos Then Application("GlobalDTNomSatConceptos") = ObjNom.DtResultados Else Application("GlobalDTNomSatConceptos") = Nothing - If ObjNom.GetRegimenContratacion Then Application("GlobalDTNomSatRegimenContratacion") = ObjNom.DtResultados Else Application("GlobalDTNomSatRegimenContratacion") = Nothing - If ObjNom.GetRiesgoPuesto Then Application("GlobalDTNomSatRiesgoPuesto") = ObjNom.DtResultados Else Application("GlobalDTNomSatRiesgoPuesto") = Nothing - If ObjNom.GetTipoIncapacidad Then Application("GlobalDTNomSatTipoIncapacidad") = ObjNom.DtResultados Else Application("GlobalDTNomSatTipoIncapacidad") = Nothing - ObjNom.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P R O S P E C T O S - - Dim ObjProspectos As New ClsProspectos - If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificaciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificaciones") = Nothing - If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificacionesCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificacionesCaracteristicas") = Nothing - If ObjProspectos.GetCoordinadores(-1) Then Application("GlobalDTProspectosCoordinadores") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCoordinadores") = Nothing - If ObjProspectos.GetSupervisores(-1) Then Application("GlobalDTProspectosSupervisores") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSupervisores") = Nothing - If ObjProspectos.GetProspectosSolicitudes(-1, -1, -1, -1, -1) Then Application("GlobalDTProspectosSolicitudes") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudes") = Nothing - If ObjProspectos.GetSolicitudTipo Then Application("GlobalDTProspectosSolicitudesTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudesTipos") = Nothing - If ObjProspectos.GetApoyoTipo Then Application("GlobalDTProspectosApoyosTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosApoyosTipos") = Nothing - If ObjProspectos.GetProspectoApoyo Then Application("GlobalDTProspectosApoyos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosApoyos") = Nothing - If ObjProspectos.GetSolicitudEstatus Then Application("GlobalDTProspectosSolicitudesEstatus") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudesEstatus") = Nothing - If ObjProspectos.GetEventosTipo(-1) Then Application("GlobalDTProspectosEventosTipo") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEventosTipo") = Nothing - If ObjProspectos.GetProspectosEventos(-1, -1) Then Application("GlobalDTProspectosEvento") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEvento") = Nothing - If ObjProspectos.GetProspectosTipos() Then Application("GlobalDTProspectosTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosTipos") = Nothing - If ObjProspectos.GetProspectosEstatus() Then Application("GlobalDTProspectosEstatus") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEstatus") = Nothing - If ObjProspectos.GetCaracteristicasClasificaciones(-1) Then Application("GlobalDTProspectosCaracteristicasClasificaciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicasClasificaciones") = Nothing - If ObjProspectos.GetTiposCaracteristicas(-1) Then Application("GlobalDTProspectosTiposCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosTiposCaracteristicas") = Nothing - If ObjProspectos.GetCaracteristicas(-1) Then Application("GlobalDTProspectosCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicas") = Nothing - If ObjProspectos.GetCaracteristicasOpciones(-1, -1) Then Application("GlobalDTProspectosCaracteristicasOpciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicasOpciones") = Nothing - If ObjProspectos.GetEncuestas(-1, -1) Then Application("GlobalDTProspectosEncuestas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestas") = Nothing - If ObjProspectos.GetPreguntas(-1, -1, -1) Then Application("GlobalDTProspectosEncuestasPreguntas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestasPreguntas") = Nothing - If ObjProspectos.GetRespuestas(-1, -1) Then Application("GlobalDTProspectosEncuestasRespuestas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestasRespuestas") = Nothing - ObjProspectos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - - 'B A N C O S - - Dim ObjBancos As New ClsBancos - 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing - 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing - If ObjBancos.GetBancos_TiposTransaccion(-1) Then Application("GlobalDTTipoTransacciones") = ObjBancos.DtResultados Else Application("GlobalDTTipoTransacciones") = Nothing - If ObjBancos.GetBancos_EstatusIE() Then Application("GlobalDTBancosEstatusIE") = ObjBancos.DtResultados Else Application("GlobalDTBancosEstatusIE") = Nothing - If ObjBancos.GetBancos() Then Application("GlobalDTBancos") = ObjBancos.DtResultados Else Application("GlobalDTBancos") = Nothing - If ObjBancos.GetBancos_TiposCuenta() Then Application("GlobalDTTipoCuenta") = ObjBancos.DtResultados Else Application("GlobalDTTipoCuenta") = Nothing - ObjBancos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - - 'I N V E N T A R I O S - - Dim Objinventarios As New ClsInventarios - If Objinventarios.GetAlmacenes(-1, -1, -1, -1) Then Application("GlobalDTAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTAlmacen") = Nothing - If Objinventarios.GetSeccionesAlmacenes(-1, -1) Then Application("GlobalDTSeccionAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTSeccionAlmacen") = Nothing - If Objinventarios.GetTiposAlmacenes Then Application("GlobalDTTipoAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTTipoAlmacen") = Nothing - If Objinventarios.GetConceptos Then Application("GlobalDTInvConceptos") = Objinventarios.DtResultados Else Application("GlobalDTInvConceptos") = Nothing - Objinventarios.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C O N T A B I L I D A D - P L A N T I L L A S - - - Dim ObjContabilidad As New ClsContabilidad - If ObjContabilidad.GetConta_PlantillasPolizas(-1, -1) Then Application("GlobalDTContaPlantillasPolizas") = ObjContabilidad.DtResultados Else Application("GlobalDTContaPlantillasPolizas") = Nothing - If ObjContabilidad.GetConta_ConceptosContables() Then Application("GlobalDTContaConceptosContables") = ObjContabilidad.DtResultados Else Application("GlobalDTContaConceptosContables") = Nothing - If ObjContabilidad.GetConta_PlantillasPolizasDetalle(-1, -1) Then Application("GlobalDTContaPlantillasPolizasDetalle") = ObjContabilidad.DtResultados Else Application("GlobalDTContaPlantillasPolizasDetalle") = Nothing - ObjContabilidad.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'G E N E R A L E S - - Dim ObjGenerales As New ClsGenerales - If ObjGenerales.GetGralPaises Then Application("GlobalDTGralPaises") = ObjGenerales.DtResultados Else Application("GlobalDTGralPaises") = Nothing - If ObjGenerales.GetGralEstados Then Application("GlobalDTGralEstados") = ObjGenerales.DtResultados Else Application("GlobalDTGralEstados") = Nothing - If ObjGenerales.GetGralMunicipios Then Application("GlobalDTGralMunicipios") = ObjGenerales.DtResultados Else Application("GlobalDTGralMunicipios") = Nothing - If ObjGenerales.GetGralPoblaciones Then Application("GlobalDTGralPoblaciones") = ObjGenerales.DtResultados Else Application("GlobalDTGralPoblaciones") = Nothing - If ObjGenerales.GetEscolaridades Then Application("GlobalDTGralEscolaridades") = ObjGenerales.DtResultados Else Application("GlobalDTGralEscolaridades") = Nothing - If ObjGenerales.GetCategorias Then Application("GlobalDTGralCategorias") = ObjGenerales.DtResultados Else Application("GlobalDTGralCategorias") = Nothing - If ObjGenerales.GetCategorias(-1, 2) Then Application("GlobalDTFamilias") = ObjGenerales.DtResultados Else Application("GlobalDTFamilias") = Nothing - If ObjGenerales.GetCategorias(-1, 3) Then Application("GlobalDTCategoriasPresupuestos") = ObjGenerales.DtResultados Else Application("GlobalDTCategoriasPresupuestos") = Nothing - If ObjGenerales.GetCategorias(-1, 4) Then Application("GlobalDTCategorias2") = ObjGenerales.DtResultados Else Application("GlobalDTCategorias2") = Nothing - If ObjGenerales.GetColectivas(-1, "-1", "-1", "-1", -1) Then Application("GlobalDTObjGralColectivas") = ObjGenerales.DtResultados Else Application("GlobalDTObjGralColectivas") = Nothing - 'If ObjGenerales.GetGralPaqueterias Then Application("GlobalDTPaqueterias") = ObjGenerales.DtResultados Else Application("GlobalDTPaqueterias") = Nothing - If ObjGenerales.GetGralPaqueteriasGuiasTipo Then Application("GlobalDTPaqueteriaGuiaTipos") = ObjGenerales.DtResultados Else Application("GlobalDTPaqueteriaGuiaTipos") = Nothing - If ObjGenerales.GetClasificacionPorcentaje(-1, -1, -1, -1, 1) Then Application("GlobalDTClasificacionPorcentaje") = ObjGenerales.DtResultados Else Application("GlobalDTClasificacionPorcentaje") = Nothing - - ObjGenerales.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'E V E N T O S - - Dim ObjEventos As New ClsOIEventos - If ObjEventos.GetEstatusEventos(-1) Then Application("GlobalDTOIEstatusEventos") = ObjEventos.DtResultados Else Application("GlobalDTOIEstatusEventos") = Nothing - If ObjEventos.GetRevisionesEventos(-1) Then Application("GlobalDTOIRevision") = ObjEventos.DtResultados Else Application("GlobalDTOIRevision") = Nothing - If ObjEventos.GetAgendaTipo() Then Application("GlobalDTOIAgendaTipo") = ObjEventos.DtResultados Else Application("GlobalDTOIAgendaTipo") = Nothing - If ObjEventos.GetEventoTarea(-1, -1) Then Application("GlobalDTOIEventoTarea") = ObjEventos.DtResultados Else Application("GlobalDTOIEventoTarea") = Nothing - ObjEventos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'V E N T A S - - Dim ObjVentas As New ClsVentas - If ObjVentas.GetMesas Then Application("GlobalDTMesas") = ObjVentas.DtResultados Else Application("GlobalDTMesas") = Nothing - If ObjVentas.GetPrecioListas Then Application("GlobalDTPrecioListas") = ObjVentas.DtResultados Else Application("GlobalDTPrecioListas") = Nothing - If ObjVentas.GetCondicionesEntrega(-1) Then Application("GlobalDTVtaCondicionesEntrega") = ObjVentas.DtResultados Else Application("GlobalDTVtaCondicionesEntrega") = Nothing - If ObjVentas.GetFormaPago() Then Application("GlobalDTVtaFormaPago") = ObjVentas.DtResultados Else Application("GlobalDTVtaFormaPago") = Nothing - If ObjVentas.GetMetodoPago() Then Application("GlobalDTVtaMetodoPago") = ObjVentas.DtResultados Else Application("GlobalDTVtaMetodoPago") = Nothing - If ObjVentas.GetTiposDocumentos() Then Application("GlobalDTTiposDocumentos") = ObjVentas.DtResultados Else Application("GlobalDTTiposDocumentos") = Nothing - If ObjVentas.GetTiposRelacion() Then Application("GlobalDTVtaTiposRelacion") = ObjVentas.DtResultados Else Application("GlobalDTVtaTiposRelacion") = Nothing - If ObjVentas.GetCobranzaEstatus(-1, -1) Then Application("GlobalDTVtaCobranzaEstatus") = ObjVentas.DtResultados Else Application("GlobalDTVtaCobranzaEstatus") = Nothing - - ObjVentas.Dispose() - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'SAT - Dim ObjGrales As New ClsGenerales - If ObjGrales.GetSATProductosServicios Then Application("GlobalDTPSATPS") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTPSATPS") = Nothing - If ObjGrales.GetSATUnidadMedida Then Application("GlobalDTPSATUM") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTPSATUM") = Nothing - If ObjGrales.GetSATUsosCFDI Then Application("GlobalDTSATUsosCFDI") = ObjGrales.DtResultados Else Application("GlobalDTSATUsosCFDI") = Nothing - If ObjGrales.GetSATFraccionArancelaria Then Application("GlobalDTFraccionArancelaria") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTFraccionArancelaria") = Nothing - If ObjGrales.GetSATIncoterm Then Application("GlobalDTIncoterm") = ObjGrales.DtResultados Else Application("GlobalDTIncoterm") = Nothing - If ObjGrales.GetSATTipoOperacion Then Application("GlobalDTTipoOperacion") = ObjGrales.DtResultados Else Application("GlobalDTTipoOperacion") = Nothing - If ObjGrales.GetSATMotivoTraslado Then Application("GlobalDTSATMotivoTraslado") = ObjGrales.DtResultados Else Application("GlobalDTSATMotivoTraslado") = Nothing - If ObjGrales.GetSATUnidadesAduana Then Application("GlobalDTUnidadAduana") = ObjGrales.DtResultados Else Application("GlobalDTUnidadAduana") = Nothing - If ObjGrales.GetSATClavePedimento Then Application("GlobalDTClavePedimento") = ObjGrales.DtResultados Else Application("GlobalDTClavePedimento") = Nothing - If ObjGrales.GetSATPais Then Application("GlobalDTPais") = ObjGrales.DtResultados Else Application("GlobalDTPais") = Nothing - If ObjGrales.GetSATEstado("-1") Then Application("GlobalDTEstado") = ObjGrales.DtResultados Else Application("GlobalDTEstado") = Nothing - If ObjGrales.GetSATMunicipio("-1") Then Application("GlobalDTMunicipio") = ObjGrales.DtResultados Else Application("GlobalDTMunicipio") = Nothing - If ObjGrales.GetSATColonia("-1") Then Application("GlobalDTColonia") = ObjGrales.DtResultados Else Application("GlobalDTColonia") = Nothing - ObjGrales.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - ''MF - - 'Dim ObjMF As New ClsMF - 'If ObjMF.GetActividad(-1, -1, -1) Then Application("GlobalDTActividad") = ObjMF.DtResultados Else Application("GlobalDTActividad") = Nothing - 'If ObjMF.GetOperador(-1, -1, -1) Then Application("GlobalDTOperador") = ObjMF.DtResultados Else Application("GlobalDTOperador") = Nothing - 'If ObjMF.GetEstatus(-1, -1, -1) Then Application("GlobalDTEstatus") = ObjMF.DtResultados Else Application("GlobalDTEstatus") = Nothing - - - 'ObjMF.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C L A S I F I C A C I O N E S - - Dim ObjClasificaciones As New ClsClasificaciones() - If ObjClasificaciones.GetClasificaciones() Then - Application("GlobalDTClasificaciones") = ObjClasificaciones.DtResultados.FiltraParametros("Codigo is null OR Codigo = '' ") - Application("GlobalDTACClasificadorObjetoGasto") = ObjClasificaciones.DtResultados.FiltraParametros("Codigo <> '' ") - Else - Application("GlobalDTClasificaciones") = Nothing - Application("GlobalDTACClasificadorObjetoGasto") = Nothing - End If - - If ObjClasificaciones.GetDTClasificacionesSubProyectos() Then - Application("GlobalDTClasificacionesSubProyecto") = ObjClasificaciones.DtResultados - Else - Application("GlobalDTClasificacionesSubProyecto") = Nothing - End If - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'F A M I L I A S - If ObjClasificaciones.GetClasificaciones(Tipo:=2) Then Application("GlobalDTSubFamilias") = ObjClasificaciones.DtResultados Else Application("GlobalDTSubFamilias") = Nothing - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P R E S U P U E S T O - If ObjClasificaciones.GetClasificaciones(Tipo:=3) Then Application("GlobalDTClasificacionesPresupuestos") = ObjClasificaciones.DtResultados Else Application("GlobalDTClasificacionesPresupuestos") = Nothing - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C L A S I F I C A C I O N E S 2 - If ObjClasificaciones.GetClasificaciones(Tipo:=4) Then Application("GlobalDTClasificaciones2") = ObjClasificaciones.DtResultados Else Application("GlobalDTClasificaciones2") = Nothing - ObjClasificaciones.Dispose() - - - Dim ObjVenta As New ClsVentas - If ObjVenta.GetClasificacionDetalle(-1, CveClasificacion:=-1) Then - Application("GlobalDTClasificacionesDetalle") = ObjVenta.DtResultados - End If - ObjVenta.Dispose() + Application("GlobalValidarCFDI") = True + + '---------------------------------------------------------------------------------------------------------------------- + 'C A R G A - R H + GuardaLog(String.Format("Globalasax 1:{0}", DateTime.Now)) + Using ObjRH As New ClsRH + + If ObjRH.GetTipoBuzon() Then Application("GlobalDTTipoBuzon") = ObjRH.DtResultados Else Application("GlobalDTTipoBuzon") = Nothing + If ObjRH.GetDepartamentos Then Application("GlobalDTDepartamentos") = ObjRH.DtResultados Else Application("GlobalDTDepartamentos") = Nothing + If ObjRH.GetDocumentos() Then Application("GlobalDTDocumentos") = ObjRH.DtResultados Else Application("GlobalDTDocumentos") = Nothing + If ObjRH.GetEscolaridades() Then Application("GlobalDTEscolaridad") = ObjRH.DtResultados Else Application("GlobalDTEscolaridad") = Nothing + If ObjRH.GetEstadoCivil() Then Application("GlobalDTEstadoCivil") = ObjRH.DtResultados Else Application("GlobalDTEstadoCivil") = Nothing + If ObjRH.GetEstatusPersonal() Then Application("GlobalDTEstatusPersonal") = ObjRH.DtResultados Else Application("GlobalDTEstatusPersonal") = Nothing + If ObjRH.GetGeneros() Then Application("GlobalDTGenero") = ObjRH.DtResultados Else Application("GlobalDTGenero") = Nothing + If ObjRH.GetMotivoBaja() Then Application("GlobalDTMotivoBaja") = ObjRH.DtResultados Else Application("GlobalDTMotivoBaja") = Nothing + If ObjRH.GetPuestos(-1) Then Application("GlobalDTRHPuestos") = ObjRH.DtResultados Else Application("GlobalDTRHPuestos") = Nothing + If ObjRH.GetRutas() Then Application("GlobalDTRutas") = ObjRH.DtResultados Else Application("GlobalDTRutas") = Nothing + If ObjRH.GetTiposContrato() Then Application("GlobalDTTiposContrato") = ObjRH.DtResultados Else Application("GlobalDTTiposContrato") = Nothing + If ObjRH.GetTurnos() Then Application("GlobalDTTurno") = ObjRH.DtResultados Else Application("GlobalDTTurno") = Nothing + If ObjRH.GetJornadas() Then Application("GlobalDTJornadas") = ObjRH.DtResultados Else Application("GlobalDTJornadas") = Nothing + If ObjRH.GetAsistenciasInasistencias() Then Application("GlobalDTAsistenciasInasistencias") = ObjRH.DtResultados Else Application("GlobalDTAsistenciasInasistencias") = Nothing + If ObjRH.GetMotivoHorasExtras() Then Application("GlobalDTMotivosHorasExtras") = ObjRH.DtResultados Else Application("GlobalDTMotivosHorasExtras") = Nothing + If ObjRH.GetAsistenciasDetalle() Then Application("GlobalDTAsistenciaDetalle") = ObjRH.DtResultados Else Application("GlobalDTAsistenciaDetalle") = Nothing + End Using + '---------------------------------------------------------------------------------------------------------------------- + 'C A R G A - O S + GuardaLog(String.Format("Globalasax 2:{0}", DateTime.Now)) + + Using ObjOS As New ClsOS + If ObjOS.GetEstatusOrdenServicio() Then Application("GlobalDTEstatusOrdenServicios") = ObjOS.DtResultados Else Application("GlobalDTEstatusOrdenServicios") = Nothing + If ObjOS.GetTipoOrdenesServicios(-1) Then Application("GlobalDTTipoOrdenServicios") = ObjOS.DtResultados Else Application("GlobalDTTipoOrdenServicios") = Nothing + End Using + '------------------------------------------------------------------------------------------------------------------------- + 'A C T I V O S - F I J O S + GuardaLog(String.Format("Globalasax 3:{0}", DateTime.Now)) + + Using ObjActivosFijos As New ClsAF + If ObjActivosFijos.GetCaracteristicasClasificaciones(-1) Then Application("GlobalDTAFCaracteristicasClasificaciones") = ObjActivosFijos.DtResultados Else Application("GlobalDTAFCaracteristicasClasificaciones") = Nothing + If ObjActivosFijos.GetCaracteristicas(-1) Then Application("GlobalDTAFCaracteristicas") = ObjActivosFijos.DtResultados Else Application("GlobalDTAFCaracteristicas") = Nothing + If ObjActivosFijos.GetSubTiposActivosFijos(-1) Then Application("GlobalDTSubTipoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTSubTipoActivoFijo") = Nothing + If ObjActivosFijos.GetTiposActivosFijos(-1) Then Application("GlobalDTTipoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTTipoActivoFijo") = Nothing + If ObjActivosFijos.GetEstatusActivoFijo() Then Application("GlobalDTEstadoActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTEstadoActivoFijo") = Nothing + If ObjActivosFijos.GetMarcasActivosFijos(-1) Then Application(" GlobalDTMarcaActivoFijo") = ObjActivosFijos.DtResultados Else Application(" GlobalDTMarcaActivoFijo") = Nothing + If ObjActivosFijos.GetModelosActivosFijos(-1, -1) Then Application("GlobalDTModeloActivoFijo") = ObjActivosFijos.DtResultados Else Application("GlobalDTModeloActivoFijo") = Nothing + End Using + '------------------------------------------------------------------------------------------------------------------------- + 'C A R G A - O R D E N E S - D E - C O M P R A S + + GuardaLog(String.Format("Globalasax 4:{0}", DateTime.Now)) + Using ObjOC As New ClsOC + If ObjOC.GetEstatus() Then Application("GlobalDTOCEstatus") = ObjOC.DtResultados Else Application("GlobalDTOCEstatus") = Nothing + 'If ObjOC.GetEstatusUsuarios(-1, -1, -1, -1, -1) Then Application("GlobalDTOCEstatusUsuarios") = ObjOC.DtResultados Else Application("GlobalDTOCEstatusUsuarios") = Nothing + End Using + + + '------------------------------------------------------------------------------------------------------------------------- + 'A M O R T I Z A C I O N - C O N T A B L E + + GuardaLog(String.Format("Globalasax 5:{0}", DateTime.Now)) + Using ObjAC As New ClsAC + If ObjAC.GetClasificacionFuncional() Then Application("GlobalDTAC_ClasificacionFuncional") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionFuncional") = Nothing + If ObjAC.GetClasificacionGeografica() Then Application("GlobalDTAC_ClasificacionGeografica") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionGeografica") = Nothing + If ObjAC.GetFuentesFinanciamiento() Then Application("GlobalDTAC_FuentesFinanciamiento") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamiento") = Nothing + If ObjAC.GetFuenteFinanciamientoCONAC() Then Application("GlobalDTAC_FuentesFinanciamientoCONAC") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamientoCONAC") = Nothing + If ObjAC.GetProgramaCONAC() Then Application("GlobalDTAC_ProgramasCONAC") = ObjAC.DtResultados Else Application("GlobalDTAC_ProgramasCONAC") = Nothing + If ObjAC.GetUnidadesAdministrativas() Then Application("GlobalDTAC_UnidadesAdministrativas") = ObjAC.DtResultados Else Application("GlobalDTAC_UnidadesAdministrativas") = Nothing + If ObjAC.GetClasificacionAdministrativa() Then Application("GlobalDTAC_ClasificacionAdministrativa") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionAdministrativa") = Nothing + If ObjAC.GetPD_EjeRector() Then Application("GlobalDTAC_PD_EjeRector") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_EjeRector") = Nothing + If ObjAC.GetPD_Programas() Then Application("GlobalDTAC_PD_Programas") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Programas") = Nothing + If ObjAC.GetPD_Estrategias() Then Application("GlobalDTAC_PD_Estrategias") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Estrategias") = Nothing + If ObjAC.GetPD_LineasAccion() Then Application("GlobalDTAC_PD_LineasAccion") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_LineasAccion") = Nothing + If ObjAC.GetPD_Metas() Then Application("GlobalDTAC_PD_Metas") = ObjAC.DtResultados Else Application("GlobalDTAC_PD_Metas") = Nothing + If ObjAC.GetTipoGasto() Then Application("GlobalDTAC_TipoGasto") = ObjAC.DtResultados Else Application("GlobalDTAC_TipoGasto") = Nothing + If ObjAC.GetProgramaOperativo() Then Application("GlobalDTAC_ProgramaOperativo") = ObjAC.DtResultados Else Application("GlobalDTAC_ProgramaOperativo") = Nothing + If ObjAC.GetFuentesFinanciamiento() Then Application("GlobalDTAC_FuentesFinanciamiento") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesFinanciamiento") = Nothing + If ObjAC.GetRubrosIngreso() Then Application("GlobalDTAC_RubrosIngreso") = ObjAC.DtResultados Else Application("GlobalDTAC_RubrosIngreso") = Nothing + If ObjAC.GetFuentesRecaudacion() Then Application("GlobalDTAC_FuentesRecaudacion") = ObjAC.DtResultados Else Application("GlobalDTAC_FuentesRecaudacion") = Nothing + If ObjAC.GetMatrizID Then Application("GlobalDTAC_MatrizIngresos") = ObjAC.DtResultados Else Application("GlobalDTAC_MatrizIngresos") = Nothing + If ObjAC.GetMatrizGD Then Application("GlobalDTAC_MatrizEgresos") = ObjAC.DtResultados Else Application("GlobalDTAC_MatrizEgresos") = Nothing + ' If ObjAC.GetAreas() Then Application("GlobalDTAC_Areas") = ObjAC.DtResultados Else Application("GlobalDTAC_Areas") = Nothing + 'If ObjAC.GetProyectosProceso() Then Application("GlobalDTAC_ProyectosProceso") = ObjAC.DtResultados Else Application("GlobalDTAC_ProyectosProceso") = Nothing + 'If ObjAC.GetFuncion() Then Application("GlobalDTAC_Funcion") = ObjAC.DtResultados Else Application("GlobalDTAC_Funcion") = Nothing + 'If ObjAC.GetSubFuncion() Then Application("GlobalDTAC_SubFuncion") = ObjAC.DtResultados Else Application("GlobalDTAC_SubFuncion") = Nothing + 'If ObjAC.GetSubProgramas() Then Application("GlobalDTAC_SubProgramas") = ObjAC.DtResultados Else Application("GlobalDTAC_SubProgramas") = Nothing + 'If ObjAC.GetUbicaciones() Then Application("GlobalDTAC_Ubicaciones") = ObjAC.DtResultados Else Application("GlobalDTAC_Ubicaciones") = Nothing + ' If ObjAC.GetOG() Then Application("GlobalDTAC_OG") = ObjAC.DtResultados Else Application("GlobalDTAC_OG") = Nothing + ' If ObjAC.GetClasificadorOG() Then Application("GlobalDTAC_ClasificadorOG") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificadorOG") = Nothing + 'If ObjAC.GetProgramas() Then Application("GlobalDTAC_Programas") = ObjAC.DtResultados Else Application("GlobalDTAC_Programas") = Nothing + ' If ObjAC.GetCuentas() Then Application("GlobalDTAC_Cuentas") = ObjAC.DtResultados Else Application("GlobalDTAC_Cuentas") = Nothing + ' If ObjAC.GetDependencias() Then Application("GlobalDTAC_Dependencias") = ObjAC.DtResultados Else Application("GlobalDTAC_Dependencias") = Nothing + 'If ObjAC.GetFinalidad() Then Application("GlobalDTAC_Finalidad") = ObjAC.DtResultados Else Application("GlobalDTAC_Finalidad") = Nothing + End Using + + + GuardaLog(String.Format("Globalasax 6:{0}", DateTime.Now)) + Using Finan As New ClsFinanzas + + If Finan.GetRazonesFinancieras(-1) Then Application("GlobalDTFinan_RazonesFinancieras") = Finan.DtResultados + + End Using + + GuardaLog(String.Format("Globalasax 7:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C A R G A - T I P O G A S T O S + Using ObjCompra As New ClsCompras() + If ObjCompra.GetTipoGasto(-1, -1) Then Application("GlobalDTTiposGastos") = ObjCompra.DtResultados Else Application("GlobalDTTiposGastos") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 8:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C A R G A - N O M + + Using ObjNom As New ClsNominas() + If ObjNom.GetConceptos(-1) Then Application("GlobalDTNomConceptos") = ObjNom.DtResultados Else Application("GlobalDTNomConceptos") = Nothing + If ObjNom.GetConceptosFunciones() Then Application("GlobalDTNomConceptosFunciones") = ObjNom.DtResultados Else Application("GlobalDTNomConceptosFunciones") = Nothing + If ObjNom.GetTiposPeriodos() Then Application("GlobalDTTipoPeriodo") = ObjNom.DtResultados Else Application("GlobalDTTipoPeriodo") = Nothing + If ObjNom.GetPeriodos(-1, -1, -1, -1, -1) Then Application("GlobalDTNominasPeriodos") = ObjNom.DtResultados Else Application("GlobalDTNominasPeriodos") = Nothing + If ObjNom.GetBancos Then Application("GlobalDTNomSatBancos") = ObjNom.DtResultados Else Application("GlobalDTNomSatBancos") = Nothing + If ObjNom.GetConceptos Then Application("GlobalDTNomSatConceptos") = ObjNom.DtResultados Else Application("GlobalDTNomSatConceptos") = Nothing + If ObjNom.GetRegimenContratacion Then Application("GlobalDTNomSatRegimenContratacion") = ObjNom.DtResultados Else Application("GlobalDTNomSatRegimenContratacion") = Nothing + If ObjNom.GetRiesgoPuesto Then Application("GlobalDTNomSatRiesgoPuesto") = ObjNom.DtResultados Else Application("GlobalDTNomSatRiesgoPuesto") = Nothing + If ObjNom.GetTipoIncapacidad Then Application("GlobalDTNomSatTipoIncapacidad") = ObjNom.DtResultados Else Application("GlobalDTNomSatTipoIncapacidad") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 9:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P R O S P E C T O S + + GuardaLog(String.Format("Globalasax 10:{0}", DateTime.Now)) + Using ObjProspectos As New ClsProspectos + If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificaciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificaciones") = Nothing + If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificacionesCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificacionesCaracteristicas") = Nothing + If ObjProspectos.GetCoordinadores(-1) Then Application("GlobalDTProspectosCoordinadores") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCoordinadores") = Nothing + If ObjProspectos.GetSupervisores(-1) Then Application("GlobalDTProspectosSupervisores") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSupervisores") = Nothing + If ObjProspectos.GetProspectosSolicitudes(-1, -1, -1, -1, -1) Then Application("GlobalDTProspectosSolicitudes") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudes") = Nothing + If ObjProspectos.GetSolicitudTipo Then Application("GlobalDTProspectosSolicitudesTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudesTipos") = Nothing + If ObjProspectos.GetApoyoTipo Then Application("GlobalDTProspectosApoyosTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosApoyosTipos") = Nothing + If ObjProspectos.GetProspectoApoyo Then Application("GlobalDTProspectosApoyos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosApoyos") = Nothing + If ObjProspectos.GetSolicitudEstatus Then Application("GlobalDTProspectosSolicitudesEstatus") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosSolicitudesEstatus") = Nothing + If ObjProspectos.GetEventosTipo(-1) Then Application("GlobalDTProspectosEventosTipo") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEventosTipo") = Nothing + If ObjProspectos.GetProspectosEventos(-1, -1) Then Application("GlobalDTProspectosEvento") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEvento") = Nothing + If ObjProspectos.GetProspectosTipos() Then Application("GlobalDTProspectosTipos") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosTipos") = Nothing + If ObjProspectos.GetProspectosEstatus() Then Application("GlobalDTProspectosEstatus") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEstatus") = Nothing + If ObjProspectos.GetCaracteristicasClasificaciones(-1) Then Application("GlobalDTProspectosCaracteristicasClasificaciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicasClasificaciones") = Nothing + If ObjProspectos.GetTiposCaracteristicas(-1) Then Application("GlobalDTProspectosTiposCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosTiposCaracteristicas") = Nothing + If ObjProspectos.GetCaracteristicas(-1) Then Application("GlobalDTProspectosCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicas") = Nothing + If ObjProspectos.GetCaracteristicasOpciones(-1, -1) Then Application("GlobalDTProspectosCaracteristicasOpciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosCaracteristicasOpciones") = Nothing + If ObjProspectos.GetEncuestas(-1, -1) Then Application("GlobalDTProspectosEncuestas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestas") = Nothing + If ObjProspectos.GetPreguntas(-1, -1, -1) Then Application("GlobalDTProspectosEncuestasPreguntas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestasPreguntas") = Nothing + If ObjProspectos.GetRespuestas(-1, -1) Then Application("GlobalDTProspectosEncuestasRespuestas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestasRespuestas") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 11:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + 'B A N C O S + + GuardaLog(String.Format("Globalasax 12:{0}", DateTime.Now)) + Using ObjBancos As New ClsBancos + 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing + 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing + If ObjBancos.GetBancos_TiposTransaccion(-1) Then Application("GlobalDTTipoTransacciones") = ObjBancos.DtResultados Else Application("GlobalDTTipoTransacciones") = Nothing + If ObjBancos.GetBancos_EstatusIE() Then Application("GlobalDTBancosEstatusIE") = ObjBancos.DtResultados Else Application("GlobalDTBancosEstatusIE") = Nothing + If ObjBancos.GetBancos() Then Application("GlobalDTBancos") = ObjBancos.DtResultados Else Application("GlobalDTBancos") = Nothing + If ObjBancos.GetBancos_TiposCuenta() Then Application("GlobalDTTipoCuenta") = ObjBancos.DtResultados Else Application("GlobalDTTipoCuenta") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 13:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + + 'I N V E N T A R I O S + + Using Objinventarios As New ClsInventarios + If Objinventarios.GetAlmacenes(-1, -1, -1, -1) Then Application("GlobalDTAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTAlmacen") = Nothing + If Objinventarios.GetSeccionesAlmacenes(-1, -1) Then Application("GlobalDTSeccionAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTSeccionAlmacen") = Nothing + If Objinventarios.GetTiposAlmacenes Then Application("GlobalDTTipoAlmacen") = Objinventarios.DtResultados Else Application("GlobalDTTipoAlmacen") = Nothing + If Objinventarios.GetConceptos Then Application("GlobalDTInvConceptos") = Objinventarios.DtResultados Else Application("GlobalDTInvConceptos") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 14:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C O N T A B I L I D A D - P L A N T I L L A S + + + Using ObjContabilidad As New ClsContabilidad + If ObjContabilidad.GetConta_PlantillasPolizas(-1, -1) Then Application("GlobalDTContaPlantillasPolizas") = ObjContabilidad.DtResultados Else Application("GlobalDTContaPlantillasPolizas") = Nothing + If ObjContabilidad.GetConta_ConceptosContables() Then Application("GlobalDTContaConceptosContables") = ObjContabilidad.DtResultados Else Application("GlobalDTContaConceptosContables") = Nothing + If ObjContabilidad.GetConta_PlantillasPolizasDetalle(-1, -1) Then Application("GlobalDTContaPlantillasPolizasDetalle") = ObjContabilidad.DtResultados Else Application("GlobalDTContaPlantillasPolizasDetalle") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 15:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'G E N E R A L E S + + Using ObjGenerales As New ClsGenerales + If ObjGenerales.GetGralPaises Then Application("GlobalDTGralPaises") = ObjGenerales.DtResultados Else Application("GlobalDTGralPaises") = Nothing + If ObjGenerales.GetGralEstados Then Application("GlobalDTGralEstados") = ObjGenerales.DtResultados Else Application("GlobalDTGralEstados") = Nothing + If ObjGenerales.GetGralMunicipios Then Application("GlobalDTGralMunicipios") = ObjGenerales.DtResultados Else Application("GlobalDTGralMunicipios") = Nothing + If ObjGenerales.GetGralPoblaciones Then Application("GlobalDTGralPoblaciones") = ObjGenerales.DtResultados Else Application("GlobalDTGralPoblaciones") = Nothing + If ObjGenerales.GetEscolaridades Then Application("GlobalDTGralEscolaridades") = ObjGenerales.DtResultados Else Application("GlobalDTGralEscolaridades") = Nothing + If ObjGenerales.GetCategorias Then Application("GlobalDTGralCategorias") = ObjGenerales.DtResultados Else Application("GlobalDTGralCategorias") = Nothing + If ObjGenerales.GetCategorias(-1, 2) Then Application("GlobalDTFamilias") = ObjGenerales.DtResultados Else Application("GlobalDTFamilias") = Nothing + If ObjGenerales.GetCategorias(-1, 3) Then Application("GlobalDTCategoriasPresupuestos") = ObjGenerales.DtResultados Else Application("GlobalDTCategoriasPresupuestos") = Nothing + If ObjGenerales.GetCategorias(-1, 4) Then Application("GlobalDTCategorias2") = ObjGenerales.DtResultados Else Application("GlobalDTCategorias2") = Nothing + If ObjGenerales.GetColectivas(-1, "-1", "-1", "-1", -1) Then Application("GlobalDTObjGralColectivas") = ObjGenerales.DtResultados Else Application("GlobalDTObjGralColectivas") = Nothing + 'If ObjGenerales.GetGralPaqueterias Then Application("GlobalDTPaqueterias") = ObjGenerales.DtResultados Else Application("GlobalDTPaqueterias") = Nothing + If ObjGenerales.GetGralPaqueteriasGuiasTipo Then Application("GlobalDTPaqueteriaGuiaTipos") = ObjGenerales.DtResultados Else Application("GlobalDTPaqueteriaGuiaTipos") = Nothing + If ObjGenerales.GetClasificacionPorcentaje(-1, -1, -1, -1, 1) Then Application("GlobalDTClasificacionPorcentaje") = ObjGenerales.DtResultados Else Application("GlobalDTClasificacionPorcentaje") = Nothing + + End Using + + GuardaLog(String.Format("Globalasax 16:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'E V E N T O S + + Using ObjEventos As New ClsOIEventos + If ObjEventos.GetEstatusEventos(-1) Then Application("GlobalDTOIEstatusEventos") = ObjEventos.DtResultados Else Application("GlobalDTOIEstatusEventos") = Nothing + If ObjEventos.GetRevisionesEventos(-1) Then Application("GlobalDTOIRevision") = ObjEventos.DtResultados Else Application("GlobalDTOIRevision") = Nothing + If ObjEventos.GetAgendaTipo() Then Application("GlobalDTOIAgendaTipo") = ObjEventos.DtResultados Else Application("GlobalDTOIAgendaTipo") = Nothing + If ObjEventos.GetEventoTarea(-1, -1) Then Application("GlobalDTOIEventoTarea") = ObjEventos.DtResultados Else Application("GlobalDTOIEventoTarea") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 17:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'V E N T A S + + Using ObjVentas As New ClsVentas + If ObjVentas.GetMesas Then Application("GlobalDTMesas") = ObjVentas.DtResultados Else Application("GlobalDTMesas") = Nothing + If ObjVentas.GetPrecioListas Then Application("GlobalDTPrecioListas") = ObjVentas.DtResultados Else Application("GlobalDTPrecioListas") = Nothing + If ObjVentas.GetCondicionesEntrega(-1) Then Application("GlobalDTVtaCondicionesEntrega") = ObjVentas.DtResultados Else Application("GlobalDTVtaCondicionesEntrega") = Nothing + If ObjVentas.GetFormaPago() Then Application("GlobalDTVtaFormaPago") = ObjVentas.DtResultados Else Application("GlobalDTVtaFormaPago") = Nothing + If ObjVentas.GetMetodoPago() Then Application("GlobalDTVtaMetodoPago") = ObjVentas.DtResultados Else Application("GlobalDTVtaMetodoPago") = Nothing + If ObjVentas.GetTiposDocumentos() Then Application("GlobalDTTiposDocumentos") = ObjVentas.DtResultados Else Application("GlobalDTTiposDocumentos") = Nothing + If ObjVentas.GetTiposRelacion() Then Application("GlobalDTVtaTiposRelacion") = ObjVentas.DtResultados Else Application("GlobalDTVtaTiposRelacion") = Nothing + If ObjVentas.GetCobranzaEstatus(-1, -1) Then Application("GlobalDTVtaCobranzaEstatus") = ObjVentas.DtResultados Else Application("GlobalDTVtaCobranzaEstatus") = Nothing + + End Using + GuardaLog(String.Format("Globalasax 18:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'SAT + Using ObjGrales As New ClsGenerales + If ObjGrales.GetSATProductosServicios Then Application("GlobalDTPSATPS") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTPSATPS") = Nothing + If ObjGrales.GetSATUnidadMedida Then Application("GlobalDTPSATUM") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTPSATUM") = Nothing + If ObjGrales.GetSATUsosCFDI Then Application("GlobalDTSATUsosCFDI") = ObjGrales.DtResultados Else Application("GlobalDTSATUsosCFDI") = Nothing + If ObjGrales.GetSATFraccionArancelaria Then Application("GlobalDTFraccionArancelaria") = ObjGrales.DtResultados.AsEnumerable() Else Application("GlobalDTFraccionArancelaria") = Nothing + If ObjGrales.GetSATIncoterm Then Application("GlobalDTIncoterm") = ObjGrales.DtResultados Else Application("GlobalDTIncoterm") = Nothing + If ObjGrales.GetSATTipoOperacion Then Application("GlobalDTTipoOperacion") = ObjGrales.DtResultados Else Application("GlobalDTTipoOperacion") = Nothing + If ObjGrales.GetSATMotivoTraslado Then Application("GlobalDTSATMotivoTraslado") = ObjGrales.DtResultados Else Application("GlobalDTSATMotivoTraslado") = Nothing + If ObjGrales.GetSATUnidadesAduana Then Application("GlobalDTUnidadAduana") = ObjGrales.DtResultados Else Application("GlobalDTUnidadAduana") = Nothing + If ObjGrales.GetSATClavePedimento Then Application("GlobalDTClavePedimento") = ObjGrales.DtResultados Else Application("GlobalDTClavePedimento") = Nothing + If ObjGrales.GetSATPais Then Application("GlobalDTPais") = ObjGrales.DtResultados Else Application("GlobalDTPais") = Nothing + If ObjGrales.GetSATEstado("-1") Then Application("GlobalDTEstado") = ObjGrales.DtResultados Else Application("GlobalDTEstado") = Nothing + If ObjGrales.GetSATMunicipio("-1") Then Application("GlobalDTMunicipio") = ObjGrales.DtResultados Else Application("GlobalDTMunicipio") = Nothing + If ObjGrales.GetSATColonia("-1") Then Application("GlobalDTColonia") = ObjGrales.DtResultados Else Application("GlobalDTColonia") = Nothing + End Using + GuardaLog(String.Format("Globalasax 19:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + ''MF + + 'Dim ObjMF As New ClsMF + 'If ObjMF.GetActividad(-1, -1, -1) Then Application("GlobalDTActividad") = ObjMF.DtResultados Else Application("GlobalDTActividad") = Nothing + 'If ObjMF.GetOperador(-1, -1, -1) Then Application("GlobalDTOperador") = ObjMF.DtResultados Else Application("GlobalDTOperador") = Nothing + 'If ObjMF.GetEstatus(-1, -1, -1) Then Application("GlobalDTEstatus") = ObjMF.DtResultados Else Application("GlobalDTEstatus") = Nothing + + + 'ObjMF.Dispose() + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C L A S I F I C A C I O N E S + + Using ObjClasificaciones As New ClsClasificaciones() + If ObjClasificaciones.GetClasificaciones() Then + Application("GlobalDTClasificaciones") = ObjClasificaciones.DtResultados.FiltraParametros("Codigo is null OR Codigo = '' ") + Application("GlobalDTACClasificadorObjetoGasto") = ObjClasificaciones.DtResultados.FiltraParametros("Codigo <> '' ") + Else + Application("GlobalDTClasificaciones") = Nothing + Application("GlobalDTACClasificadorObjetoGasto") = Nothing + End If + + If ObjClasificaciones.GetDTClasificacionesSubProyectos() Then + Application("GlobalDTClasificacionesSubProyecto") = ObjClasificaciones.DtResultados + Else + Application("GlobalDTClasificacionesSubProyecto") = Nothing + End If + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'F A M I L I A S + If ObjClasificaciones.GetClasificaciones(Tipo:=2) Then Application("GlobalDTSubFamilias") = ObjClasificaciones.DtResultados Else Application("GlobalDTSubFamilias") = Nothing + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P R E S U P U E S T O + If ObjClasificaciones.GetClasificaciones(Tipo:=3) Then Application("GlobalDTClasificacionesPresupuestos") = ObjClasificaciones.DtResultados Else Application("GlobalDTClasificacionesPresupuestos") = Nothing + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C L A S I F I C A C I O N E S 2 + If ObjClasificaciones.GetClasificaciones(Tipo:=4) Then Application("GlobalDTClasificaciones2") = ObjClasificaciones.DtResultados Else Application("GlobalDTClasificaciones2") = Nothing + End Using + GuardaLog(String.Format("Globalasax 20:{0}", DateTime.Now)) + + + Using ObjVenta As New ClsVentas + If ObjVenta.GetClasificacionDetalle(-1, CveClasificacion:=-1) Then + Application("GlobalDTClasificacionesDetalle") = ObjVenta.DtResultados + End If + End Using + GuardaLog(String.Format("Globalasax 21:{0}", DateTime.Now)) + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -339,83 +361,95 @@ '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'M E T O D O S - D E - P A G O - Dim ObjMetodoPago As New ClsMetodosPagos() - If ObjMetodoPago.GetMetodosPago() Then Application("GlobalDTMetodosPago") = ObjMetodoPago.DtResultados Else Application("GlobalDTMetodosPago") = Nothing - ObjMetodoPago.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'M O N E D A S - - Dim ObjMonedas As New ClsMonedas() - If ObjMonedas.GetMonedas() Then Application("GlobalDTMonedas") = ObjMonedas.DtResultados Else Application("GlobalDTMonedas") = Nothing - If ObjMonedas.GetMonedasAlias() Then Application("GlobalDTMonedasAlias") = ObjMonedas.DtResultados Else Application("GlobalDTMonedasAlias") = Nothing - ObjMonedas.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'L E Y E N D A S - F I S C A L E S - - Dim ObjLeyendasFiscales As New ClsLeyendasFiscales() - If ObjLeyendasFiscales.GetLeyendasFiscales() Then Application("GlobalDTLeyendasFiscales") = ObjLeyendasFiscales.DtResultados Else Application("GlobalDTLeyendasFiscales") = Nothing - ObjLeyendasFiscales.Dispose() + Using ObjMetodoPago As New ClsMetodosPagos() + If ObjMetodoPago.GetMetodosPago() Then Application("GlobalDTMetodosPago") = ObjMetodoPago.DtResultados Else Application("GlobalDTMetodosPago") = Nothing + End Using + GuardaLog(String.Format("Globalasax 21:{0}", DateTime.Now)) + + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'M O N E D A S + + Using ObjMonedas As New ClsMonedas() + If ObjMonedas.GetMonedas() Then Application("GlobalDTMonedas") = ObjMonedas.DtResultados Else Application("GlobalDTMonedas") = Nothing + If ObjMonedas.GetMonedasAlias() Then Application("GlobalDTMonedasAlias") = ObjMonedas.DtResultados Else Application("GlobalDTMonedasAlias") = Nothing + + End Using + GuardaLog(String.Format("Globalasax 22:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'L E Y E N D A S - F I S C A L E S + + Using ObjLeyendasFiscales As New ClsLeyendasFiscales() + If ObjLeyendasFiscales.GetLeyendasFiscales() Then Application("GlobalDTLeyendasFiscales") = ObjLeyendasFiscales.DtResultados Else Application("GlobalDTLeyendasFiscales") = Nothing + End Using + GuardaLog(String.Format("Globalasax 23:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'F A C T U R A S - Dim ObjEstatusFactura As New ClsEstatusFactura() - If ObjEstatusFactura.GetEstatusFactura() Then Application("GlobalDTEstatusFactura") = ObjEstatusFactura.DtResultados Else Application("GlobalDTEstatusFactura") = Nothing - ObjEstatusFactura.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P R O Y E C T O S - - Dim ObjProyectos As New ClsProyectos - If ObjProyectos.GetProyectos Then Application("GlobalDTProyectos") = ObjProyectos.DtResultados Else Application("GlobalDTProyectos") = Nothing - ObjProyectos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'S U B P R O Y E C T O S - - Dim ObjSubProyectos As New ClsSubProyectos - 'If ObjSubProyectos.GetSubProyectos Then Application("GlobalDTSubProyectos") = ObjSubProyectos.DtResultados Else Application("GlobalDTSubProyectos") = Nothing - If ObjSubProyectos.GetSubProyectosUsuarios Then - Application("GlobalDTProyectosUsuarios") = ObjSubProyectos.DtResultados.FiltraParametros("", "", {"Proyecto", "CveProyecto", "CveUsuario", "CveEmpresa", "CveEstatusProyecto"}) - Application("GlobalDTSubProyectosUsuarios") = ObjSubProyectos.DtResultados - Else - Application("GlobalDTProyectosUsuarios") = Nothing - Application("GlobalDTSubProyectosUsuarios") = Nothing - End If - 'Else Application("GlobalDTProyectosUsuarios") = Nothing - ObjSubProyectos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'T I P O S - D E - E V E N T O S - Dim ObjTiposEventos As New ClsTiposEventos - If ObjTiposEventos.GetTiposEventos() Then Application("GlobalDTTiposEventos") = ObjTiposEventos.DtResultados Else Application("GlobalDTTiposEventos") = Nothing - ObjTiposEventos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P R O D U C T O S Y S E R V I C I O S - C A R A C T E R I S T I C A S - - 'Se comentan porque ya no se estan cargando con Global. - - 'Dim ObjProductosServiciosCaracteristicas As New ClsGralProductosServiciosCaracteristicas - 'If ObjProductosServiciosCaracteristicas.GetProductosServiciosCaracteristicas() Then Application("GlobalDTProductosServiciosCaracteristicas") = ObjProductosServiciosCaracteristicas.DtResultados Else Application("GlobalDTProductosServiciosCaracteristicas") = Nothing - 'If ObjProductosServiciosCaracteristicas.GetProductosServiciosCaracteristicasOpciones() Then Application("GlobalDTProductosServiciosCaracteristicasOpciones") = ObjProductosServiciosCaracteristicas.DtResultados Else Application("GlobalDTProductosServiciosCaracteristicasOpciones") = Nothing - 'ObjProductosServiciosCaracteristicas.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P R O D U C T O S S E R V I C I O S - - Dim ObjPS As New ClsProductosServicios - 'If ObjPS.GetPSAlias(-1, -1) Then Application("GlobalDTProductosServiciosAlias") = ObjPS.DtResultados Else Application("GlobalDTProductosServiciosAlias") = Nothing - 'If ObjPS.GetPSEquivalencias(-1, -1) Then Application("GlobalDTProductosServiciosEquivalencias") = ObjPS.DtResultados Else Application("GlobalDTProductosServiciosEquivalencias") = Nothing - 'If ObjPS.GetPS(-1, -1, -1) Then Application("GlobalDTProductosServicios") = ObjPS.DtResultados.AsEnumerable() Else Application("GlobalDTProductosServicios") = Nothing - If ObjPS.GetMetodosInv() Then Application("GlobalDTInvMetodosInventario") = ObjPS.DtResultados Else Application("GlobalDTInvMetodosInventario") = Nothing - 'If ObjPS.GetPSSimplificado(-1) Then Application("GlobalDTPSSimplificado") = ObjPS.DtResultados.AsEnumerable() Else Application("GlobalDTPSSimplificado") = Nothing - 'If ObjPS.GetPSAdicionales(-1, -1) Then Application("GlobalDTPSAdicionales") = ObjPS.DtResultados Else Application("GlobalDTPSAdicionales") = Nothing - ObjPS.Dispose() + Using ObjEstatusFactura As New ClsEstatusFactura() + If ObjEstatusFactura.GetEstatusFactura() Then Application("GlobalDTEstatusFactura") = ObjEstatusFactura.DtResultados Else Application("GlobalDTEstatusFactura") = Nothing + + End Using + GuardaLog(String.Format("Globalasax 24:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P R O Y E C T O S + + Using ObjProyectos As New ClsProyectos + If ObjProyectos.GetProyectos Then Application("GlobalDTProyectos") = ObjProyectos.DtResultados Else Application("GlobalDTProyectos") = Nothing + End Using + GuardaLog(String.Format("Globalasax 25:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'S U B P R O Y E C T O S + + Using ObjSubProyectos As New ClsSubProyectos + 'If ObjSubProyectos.GetSubProyectos Then Application("GlobalDTSubProyectos") = ObjSubProyectos.DtResultados Else Application("GlobalDTSubProyectos") = Nothing + If ObjSubProyectos.GetSubProyectosUsuarios Then + Application("GlobalDTProyectosUsuarios") = ObjSubProyectos.DtResultados.FiltraParametros("", "", {"Proyecto", "CveProyecto", "CveUsuario", "CveEmpresa", "CveEstatusProyecto"}) + Application("GlobalDTSubProyectosUsuarios") = ObjSubProyectos.DtResultados + Else + Application("GlobalDTProyectosUsuarios") = Nothing + Application("GlobalDTSubProyectosUsuarios") = Nothing + End If + 'Else Application("GlobalDTProyectosUsuarios") = Nothing + End Using + GuardaLog(String.Format("Globalasax 26:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'T I P O S - D E - E V E N T O S + Using ObjTiposEventos As New ClsTiposEventos + If ObjTiposEventos.GetTiposEventos() Then Application("GlobalDTTiposEventos") = ObjTiposEventos.DtResultados Else Application("GlobalDTTiposEventos") = Nothing + End Using + GuardaLog(String.Format("Globalasax 27:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P R O D U C T O S Y S E R V I C I O S - C A R A C T E R I S T I C A S + + 'Se comentan porque ya no se estan cargando con Global. + + 'Dim ObjProductosServiciosCaracteristicas As New ClsGralProductosServiciosCaracteristicas + 'If ObjProductosServiciosCaracteristicas.GetProductosServiciosCaracteristicas() Then Application("GlobalDTProductosServiciosCaracteristicas") = ObjProductosServiciosCaracteristicas.DtResultados Else Application("GlobalDTProductosServiciosCaracteristicas") = Nothing + 'If ObjProductosServiciosCaracteristicas.GetProductosServiciosCaracteristicasOpciones() Then Application("GlobalDTProductosServiciosCaracteristicasOpciones") = ObjProductosServiciosCaracteristicas.DtResultados Else Application("GlobalDTProductosServiciosCaracteristicasOpciones") = Nothing + 'ObjProductosServiciosCaracteristicas.Dispose() + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P R O D U C T O S S E R V I C I O S + + Using ObjPS As New ClsProductosServicios + 'If ObjPS.GetPSAlias(-1, -1) Then Application("GlobalDTProductosServiciosAlias") = ObjPS.DtResultados Else Application("GlobalDTProductosServiciosAlias") = Nothing + 'If ObjPS.GetPSEquivalencias(-1, -1) Then Application("GlobalDTProductosServiciosEquivalencias") = ObjPS.DtResultados Else Application("GlobalDTProductosServiciosEquivalencias") = Nothing + 'If ObjPS.GetPS(-1, -1, -1) Then Application("GlobalDTProductosServicios") = ObjPS.DtResultados.AsEnumerable() Else Application("GlobalDTProductosServicios") = Nothing + If ObjPS.GetMetodosInv() Then Application("GlobalDTInvMetodosInventario") = ObjPS.DtResultados Else Application("GlobalDTInvMetodosInventario") = Nothing + 'If ObjPS.GetPSSimplificado(-1) Then Application("GlobalDTPSSimplificado") = ObjPS.DtResultados.AsEnumerable() Else Application("GlobalDTPSSimplificado") = Nothing + 'If ObjPS.GetPSAdicionales(-1, -1) Then Application("GlobalDTPSAdicionales") = ObjPS.DtResultados Else Application("GlobalDTPSAdicionales") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 28:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O V E E D O R E S @@ -428,10 +462,12 @@ '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O V E E D O R E S C U E N T A S - Dim ObjProveedoresBancos As New ClsGenerales - If ObjProveedoresBancos.GetCuentasDepositos() Then Application("GlobalDTProveedoresCuentas") = ObjProveedoresBancos.DtResultados Else Application("GlobalDTProveedoresCuentas") = Nothing - ObjProveedoresBancos.Dispose() + Using ObjProveedoresBancos As New ClsGenerales + If ObjProveedoresBancos.GetCuentasDepositos() Then Application("GlobalDTProveedoresCuentas") = ObjProveedoresBancos.DtResultados Else Application("GlobalDTProveedoresCuentas") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 29:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C L I E N T E S @@ -442,132 +478,151 @@ '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C O N T R A T O S - Dim ObjContratos As New ClsContratos - If ObjContratos.GetContratos(-1, -1) Then Application("GlobalDTContratos") = ObjContratos.DtResultados Else Application("GlobalDTContratos") = Nothing - If ObjContratos.GetSecciones() Then Application("GlobalDTContratosSecciones") = ObjContratos.DtResultados Else Application("GlobalDTContratosSecciones") = Nothing - 'If ObjContratos.GetContratosTipos(-1) Then Application("GlobalDTContratosTipos") = ObjContratos.DtResultados Else Application("GlobalDTContratosTipos") = Nothing - ObjContratos.Dispose() + Using ObjContratos As New ClsContratos + If ObjContratos.GetContratos(-1, -1) Then Application("GlobalDTContratos") = ObjContratos.DtResultados Else Application("GlobalDTContratos") = Nothing + If ObjContratos.GetSecciones() Then Application("GlobalDTContratosSecciones") = ObjContratos.DtResultados Else Application("GlobalDTContratosSecciones") = Nothing + 'If ObjContratos.GetContratosTipos(-1) Then Application("GlobalDTContratosTipos") = ObjContratos.DtResultados Else Application("GlobalDTContratosTipos") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 30:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'V E N D E D O R E S - Dim ObjVendedores As New ClsVtaVendedores - If ObjVendedores.GetVendedores(-1) Then Application("GlobalDTVendedores") = ObjVendedores.DtResultados Else Application("GlobalDTVendedores") = Nothing - ObjVendedores.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C O R P O R A T I V O - - Dim ObjCorporativo As New ClsClientes - If ObjCorporativo.GetCorporativo(-1, -1) Then Application("GlobalDTClientesCorporativo") = ObjCorporativo.DtResultados Else Application("GlobalDTClientesCorporativo") = Nothing - ObjCorporativo.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'E S T A T U S - F A C T U R A - - Dim ObjEstatusFacturaCompra As New ClsCompEstatusFactura - If ObjEstatusFacturaCompra.GetEstatusFactura Then Application("GlobalDTCompEstatusFactura") = ObjEstatusFacturaCompra.DtResultados Else Application("GlobalDTCompEstatusFactura") = Nothing - ObjEstatusFacturaCompra.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'A C U M U L A D O R E S - - Dim ObjAcumuladores As New ClsAcumuladores() - If ObjAcumuladores.TamañoGet(-1, -1) Then Application("GlobalDTAcumTamaños") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTamaños") = Nothing - If ObjAcumuladores.TiposDefectoGet(-1, -1) Then Application("GlobalDTAcumTiposDefecto") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTiposDefecto") = Nothing - If ObjAcumuladores.TiposUsoGet(-1, -1) Then Application("GlobalDTAcumTiposUso") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTiposUso") = Nothing - 'If ObjAcumuladores.GarantiasMesesGet(-1, -1) Then Application("GlobalDTAcumGarantiasMesesTipoUso") = ObjAcumuladores.DtResultados.FiltraParametros("", DistinctColumns:={"CveMarca", "CveTipoUso", "TipoUso"}) Else Application("GlobalDTAcumGarantiasMesesTipoUso") = Nothing - ObjAcumuladores.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - '------------------------------------------------------------------------------S I S T E M A ---------------------------------------------------------------------------------- - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'P A R A M E T R O S - - Dim ObjParametros As New ClsSisParametros - If ObjParametros.GetParametros Then Application("GlobalDTParametros") = ObjParametros.DtResultados Else Application("GlobalDTParametros") = Nothing - ObjParametros.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'U S U A R I O S - - Dim ObjUsuarios As New ClsSisUsuarios - If ObjUsuarios.GetUsuariosEmpresas(-1) Then - Application("GlobalDTUsuarios") = ObjUsuarios.DtResultados - Application("GlobalDTUsuarioResponsable") = ObjUsuarios.DtResultados - Else - Application("GlobalDTUsuarios") = Nothing - End If - 'If ObjUsuarios.GetAlmacen(-1) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing - ObjUsuarios.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'R O L E S - - Dim ObjRoles As New ClsSisRoles - If ObjRoles.GetRoles(-1, -1) Then Application("GlobalDTRoles") = ObjRoles.DtResultados Else Application("GlobalDTRoles") = Nothing - ObjRoles.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'M O D U L O S - - Dim ObjModulos As New ClsModulos - If ObjModulos.GetModulos(-1, -1, "-1", "-1") Then Application("GlobalDTModulos") = ObjModulos.DtResultados Else Application("GlobalDTModulos") = Nothing - ObjModulos.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'C O M B U S T I B L E S - - Dim ObjFlotillas As New ClsFlotillas - If ObjFlotillas.GetCombustibles() Then Application("GlobalDTCombustibles") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustibles") = Nothing - If ObjFlotillas.GetCombustiblesTipos(-1) Then Application("GlobalDTCombustiblesTipos") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustiblesTipos") = Nothing - ObjFlotillas.Dispose() - - '----------------------------------------------------------------------------------7-------------------------------------------------------------------------------------------- - 'E M P R E S A S - - Dim ObjEmpresas As New ClsSisEmpresas() - If ObjEmpresas.GetEmpresas(-1, "-1", "-1", "-1", "-1") Then - Application("GlobalDTEmpresas") = ObjEmpresas.DtResultados - 'verifico si existe la carpeta de la empresa, sino la crea - For Each dr As Data.DataRow In ObjEmpresas.DtResultados.Rows - Dim Ruta As String = String.Format("{0}Empresas\{1}", ModExtensiones.DirectorioBaseEmpresas, dr("CveEmpresa")) - If Not IO.Directory.Exists(Ruta) Then IO.Directory.CreateDirectory(Ruta) - If Not System.IO.Directory.Exists(String.Format("{0}\XML\", Ruta)) Then System.IO.Directory.CreateDirectory(String.Format("{0}\XML\", Ruta)) - If Not System.IO.Directory.Exists(String.Format("{0}\PDF\", Ruta)) Then System.IO.Directory.CreateDirectory(String.Format("{0}\PDF\", Ruta)) - - Next - Else - Application("GlobalDTEmpresas") = Nothing - End If - ObjEmpresas.Dispose() - - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - 'G L O B A L E S A P L I C A C I Ó N - - - Dim ObjGral As New ClsGenerales - If ObjGral.GetTipoCambio(-1, Now) Then - If ObjGral.DtResultados.Rows.Count > 0 Then - Application("GlobalTipoCambio") = ObjGral.DtResultados.Rows(0)("TipoCambio").ToString.ToDouble - End If - End If - ObjGral.Dispose() - - BundleConfig.RegistrarBundles(BundleTable.Bundles) - BundleTable.EnableOptimizations = True - System.Web.UI.ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None - - Dim EmpresaNotificaciones As New Empresa With {.SendMail = "signotificaciones@adssistemas.mx", .SendMailPassword = "sig123987", .SendMailServer = "mail.adssistemas.mx", .SendMailPuerto = 587} + Using ObjVendedores As New ClsVtaVendedores + If ObjVendedores.GetVendedores(-1) Then Application("GlobalDTVendedores") = ObjVendedores.DtResultados Else Application("GlobalDTVendedores") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 31:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C O R P O R A T I V O + + Using ObjCorporativo As New ClsClientes + If ObjCorporativo.GetCorporativo(-1, -1) Then Application("GlobalDTClientesCorporativo") = ObjCorporativo.DtResultados Else Application("GlobalDTClientesCorporativo") = Nothing + End Using + GuardaLog(String.Format("Globalasax 32:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'E S T A T U S - F A C T U R A + + Using ObjEstatusFacturaCompra As New ClsCompEstatusFactura + If ObjEstatusFacturaCompra.GetEstatusFactura Then Application("GlobalDTCompEstatusFactura") = ObjEstatusFacturaCompra.DtResultados Else Application("GlobalDTCompEstatusFactura") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 33:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'A C U M U L A D O R E S + + Using ObjAcumuladores As New ClsAcumuladores() + If ObjAcumuladores.TamañoGet(-1, -1) Then Application("GlobalDTAcumTamaños") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTamaños") = Nothing + If ObjAcumuladores.TiposDefectoGet(-1, -1) Then Application("GlobalDTAcumTiposDefecto") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTiposDefecto") = Nothing + If ObjAcumuladores.TiposUsoGet(-1, -1) Then Application("GlobalDTAcumTiposUso") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTiposUso") = Nothing + 'If ObjAcumuladores.GarantiasMesesGet(-1, -1) Then Application("GlobalDTAcumGarantiasMesesTipoUso") = ObjAcumuladores.DtResultados.FiltraParametros("", DistinctColumns:={"CveMarca", "CveTipoUso", "TipoUso"}) Else Application("GlobalDTAcumGarantiasMesesTipoUso") = Nothing + End Using + GuardaLog(String.Format("Globalasax 34:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + '------------------------------------------------------------------------------S I S T E M A ---------------------------------------------------------------------------------- + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'P A R A M E T R O S + + Using ObjParametros As New ClsSisParametros + If ObjParametros.GetParametros Then Application("GlobalDTParametros") = ObjParametros.DtResultados Else Application("GlobalDTParametros") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 35:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'U S U A R I O S + + Using ObjUsuarios As New ClsSisUsuarios + If ObjUsuarios.GetUsuariosEmpresas(-1) Then + Application("GlobalDTUsuarios") = ObjUsuarios.DtResultados + Application("GlobalDTUsuarioResponsable") = ObjUsuarios.DtResultados + Else + Application("GlobalDTUsuarios") = Nothing + End If + 'If ObjUsuarios.GetAlmacen(-1) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing + End Using + GuardaLog(String.Format("Globalasax 36:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'R O L E S + + Using ObjRoles As New ClsSisRoles + If ObjRoles.GetRoles(-1, -1) Then Application("GlobalDTRoles") = ObjRoles.DtResultados Else Application("GlobalDTRoles") = Nothing + End Using + + GuardaLog(String.Format("Globalasax 37:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'M O D U L O S + + Using ObjModulos As New ClsModulos + If ObjModulos.GetModulos(-1, -1, "-1", "-1") Then Application("GlobalDTModulos") = ObjModulos.DtResultados Else Application("GlobalDTModulos") = Nothing + End Using + GuardaLog(String.Format("Globalasax 38:{0}", DateTime.Now)) + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'C O M B U S T I B L E S + + Using ObjFlotillas As New ClsFlotillas + If ObjFlotillas.GetCombustibles() Then Application("GlobalDTCombustibles") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustibles") = Nothing + If ObjFlotillas.GetCombustiblesTipos(-1) Then Application("GlobalDTCombustiblesTipos") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustiblesTipos") = Nothing + End Using + GuardaLog(String.Format("Globalasax 39:{0}", DateTime.Now)) + + '----------------------------------------------------------------------------------7-------------------------------------------------------------------------------------------- + 'E M P R E S A S + + Using ObjEmpresas As New ClsSisEmpresas() + If ObjEmpresas.GetEmpresas(-1, "-1", "-1", "-1", "-1") Then + Application("GlobalDTEmpresas") = ObjEmpresas.DtResultados + 'verifico si existe la carpeta de la empresa, sino la crea + For Each dr As Data.DataRow In ObjEmpresas.DtResultados.Rows + Dim Ruta As String = String.Format("{0}Empresas\{1}", ModExtensiones.DirectorioBaseEmpresas, dr("CveEmpresa")) + If Not IO.Directory.Exists(Ruta) Then IO.Directory.CreateDirectory(Ruta) + If Not System.IO.Directory.Exists(String.Format("{0}\XML\", Ruta)) Then System.IO.Directory.CreateDirectory(String.Format("{0}\XML\", Ruta)) + If Not System.IO.Directory.Exists(String.Format("{0}\PDF\", Ruta)) Then System.IO.Directory.CreateDirectory(String.Format("{0}\PDF\", Ruta)) + + Next + Else + Application("GlobalDTEmpresas") = Nothing + End If + End Using + GuardaLog(String.Format("Globalasax 40:{0}", DateTime.Now)) + + + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + 'G L O B A L E S A P L I C A C I Ó N + + + Using ObjGral As New ClsGenerales + If ObjGral.GetTipoCambio(-1, Now) Then + If ObjGral.DtResultados.Rows.Count > 0 Then + Application("GlobalTipoCambio") = ObjGral.DtResultados.Rows(0)("TipoCambio").ToString.ToDouble + End If + End If + End Using + GuardaLog(String.Format("Globalasax 41:{0}", DateTime.Now)) + + + BundleConfig.RegistrarBundles(BundleTable.Bundles) + BundleTable.EnableOptimizations = True + System.Web.UI.ValidationSettings.UnobtrusiveValidationMode = UnobtrusiveValidationMode.None + + Dim EmpresaNotificaciones As New Empresa With {.SendMail = "signotificaciones@adssistemas.mx", .SendMailPassword = "sig123987", .SendMailServer = "mail.adssistemas.mx", .SendMailPuerto = 587} ClsPaginas.EmpresaNotificaciones = EmpresaNotificaciones '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'I M P U E S T O S L O C A L E S - 'Dim ObjPSImpuestos As New ClsProductosServicios + 'Using ObjPSImpuestos As New ClsProductosServicios 'If ObjPSImpuestos.GetPSImpuestosLocales(-1, -1) Then ' If ObjPSImpuestos.DtResultados.Rows.Count > 0 Then ' Application("GlobalDTImpuestosLocales") = ObjPSImpuestos.DtResultados @@ -575,29 +630,31 @@ ' Application("GlobalDTImpuestosLocales") = Nothing ' End If 'End If - 'ObjPSImpuestos.Dispose() + 'End Using + '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ' R A S T R E O - Dim ObjGPS As New ClsGPS - If ObjGPS.DispositivosGet(-1, -1, -1, -1) Then - If ObjGPS.DtResultados.Rows.Count > 0 Then - Application("GlobalDTDispositivos") = ObjGPS.DtResultados - Else - Application("GlobalDTDispositivos") = Nothing - End If - End If - - If ObjGPS.DispositivosUsuariosGet(-1, -1, -1, -1, -1) Then - If ObjGPS.DtResultados.Rows.Count > 0 Then - Application("GlobalDTDispositivosUsuarios") = ObjGPS.DtResultados - Else - Application("GlobalDTDispositivosUsuarios") = Nothing - End If - End If - - ObjGPS.Dispose() + Using ObjGPS As New ClsGPS + If ObjGPS.DispositivosGet(-1, -1, -1, -1) Then + If ObjGPS.DtResultados.Rows.Count > 0 Then + Application("GlobalDTDispositivos") = ObjGPS.DtResultados + Else + Application("GlobalDTDispositivos") = Nothing + End If + End If + + If ObjGPS.DispositivosUsuariosGet(-1, -1, -1, -1, -1) Then + If ObjGPS.DtResultados.Rows.Count > 0 Then + Application("GlobalDTDispositivosUsuarios") = ObjGPS.DtResultados + Else + Application("GlobalDTDispositivosUsuarios") = Nothing + End If + End If + End Using + GuardaLog(String.Format("Globalasax 42:{0}", DateTime.Now)) + 'If EsProduccion = "1" Then ' RegisterNotification() diff --git a/RH/ActualizacionMasiva.aspx.vb b/RH/ActualizacionMasiva.aspx.vb index 550c0e8b5..7f79e6216 100644 --- a/RH/ActualizacionMasiva.aspx.vb +++ b/RH/ActualizacionMasiva.aspx.vb @@ -195,6 +195,7 @@ Partial Class RH_ActualizacionMasiva Dim OcurrioError As Boolean = False Using ObjPersonal As ClsRH = New ClsRH() + ObjPersonal.IniciaTransacSQL() For Each Row As GridViewRow In GvDatos.Rows If Row.DataKey("CvePersonal") <> "" Then 'If Not ObjPersonal.UpdatePersonalMasivo(Row.FCDropDownList("DdlTurno").SelectedValue.ToEntero, Row.FCDropDownList("DdlGVSubProyecto").SelectedValue.ToEntero, Row.FCDropDownList("DdlSupervisor").SelectedValue.ToEntero, @@ -217,7 +218,7 @@ Partial Class RH_ActualizacionMasiva Next If Not OcurrioError Then - 'ObjPersonal.Commit() + ObjPersonal.Commit() Alert("La información se guardó correctamente.", TipoMensaje.MsgInformacion) Else Alert("Ocurrió un error al guardar la información.", TipoMensaje.MsgError) @@ -352,6 +353,8 @@ Partial Class RH_ActualizacionMasiva Dim OcurrioError As Boolean = False Dim contador As Integer = 0 Using ObjPersonal As ClsRH = New ClsRH() + ObjPersonal.IniciaTransacSQL() + For Each Row As DataRow In DTEXcel.Rows If Row("Codigo").ToString() <> "" Then Dim drow As DataRow = DTEmpleados.FiltroPrimero(String.Format("Codigo='{0}'", Row("Codigo"))) From f4d6abbeafa89a57785e1b0f1df9df6b3b89a78f Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Thu, 30 Jul 2020 13:53:33 -0700 Subject: [PATCH 29/37] --- Global.asax | 92 +++++++++++++++++++++++++++-------------------------- 1 file changed, 47 insertions(+), 45 deletions(-) diff --git a/Global.asax b/Global.asax index f7cdd4974..53d481a72 100644 --- a/Global.asax +++ b/Global.asax @@ -17,8 +17,10 @@ Return System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() End If End Get - End Property - + End Property + Private Sub GuardaLogAsax(str As String) + 'GuardaLog(str) + End Sub Sub Application_Start(sender As Object, e As EventArgs) Stimulsoft.Base.StiLicense.Key = "6vJhGtLLLz2GNviWmUTrhSqnOItdDwjBylQzQcAOiHmhQEs54hwXWiqhb7jE6yoykR4jHwP3Mz0nuxn0JR9fNMeDKv" + "sS5s+rCYr7Ex4DRTHaUJIUDqrvGmvWyMjzUl9RAEz/XG8RenfJvoEilBZ9Wqq8Uu/n92YhChB4PbAh9FeH3abSU3PF" + "LuVa6GydYWQvZGpHhFs98Idp754TAgWZatzcF3Ksp6q4laYxnyUY0cA0hYejanRBjIT1Nu59xmlOKE7EGIb9wKlLn/" + "XnW8k8PUNuReOk7ATeHO07JSMLikmvIytkWET2bXDmBI43tAX3fLUE+KlOe7FR/hvfQ6oqqtVRlSZ22QBanel09+XE" + "X8aVC8b+WuRv1nInJeQHBD9zF8b67n4ouKRgv2/vSxopOhCZXdaqdyO4ct+FmSC8cAAcMIGeiKnc5ww8Cq44ClTqJl" + "V2qsCjoS4bb8Nzd2Gy+q/TG/D3dAEKSpPGUx2EEksora/kIkNooq6+bgyH7hqCG2bHKaSQwr2g0keNrYIUcTIwROn1" + "cnQDetzsBqX4lvu64VZWq5+cQD+dyPJwOS6M" @@ -37,7 +39,7 @@ '---------------------------------------------------------------------------------------------------------------------- 'C A R G A - R H - GuardaLog(String.Format("Globalasax 1:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 1:{0}", DateTime.Now)) Using ObjRH As New ClsRH If ObjRH.GetTipoBuzon() Then Application("GlobalDTTipoBuzon") = ObjRH.DtResultados Else Application("GlobalDTTipoBuzon") = Nothing @@ -59,7 +61,7 @@ End Using '---------------------------------------------------------------------------------------------------------------------- 'C A R G A - O S - GuardaLog(String.Format("Globalasax 2:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 2:{0}", DateTime.Now)) Using ObjOS As New ClsOS If ObjOS.GetEstatusOrdenServicio() Then Application("GlobalDTEstatusOrdenServicios") = ObjOS.DtResultados Else Application("GlobalDTEstatusOrdenServicios") = Nothing @@ -67,7 +69,7 @@ End Using '------------------------------------------------------------------------------------------------------------------------- 'A C T I V O S - F I J O S - GuardaLog(String.Format("Globalasax 3:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 3:{0}", DateTime.Now)) Using ObjActivosFijos As New ClsAF If ObjActivosFijos.GetCaracteristicasClasificaciones(-1) Then Application("GlobalDTAFCaracteristicasClasificaciones") = ObjActivosFijos.DtResultados Else Application("GlobalDTAFCaracteristicasClasificaciones") = Nothing @@ -81,7 +83,7 @@ '------------------------------------------------------------------------------------------------------------------------- 'C A R G A - O R D E N E S - D E - C O M P R A S - GuardaLog(String.Format("Globalasax 4:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 4:{0}", DateTime.Now)) Using ObjOC As New ClsOC If ObjOC.GetEstatus() Then Application("GlobalDTOCEstatus") = ObjOC.DtResultados Else Application("GlobalDTOCEstatus") = Nothing 'If ObjOC.GetEstatusUsuarios(-1, -1, -1, -1, -1) Then Application("GlobalDTOCEstatusUsuarios") = ObjOC.DtResultados Else Application("GlobalDTOCEstatusUsuarios") = Nothing @@ -91,7 +93,7 @@ '------------------------------------------------------------------------------------------------------------------------- 'A M O R T I Z A C I O N - C O N T A B L E - GuardaLog(String.Format("Globalasax 5:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 5:{0}", DateTime.Now)) Using ObjAC As New ClsAC If ObjAC.GetClasificacionFuncional() Then Application("GlobalDTAC_ClasificacionFuncional") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionFuncional") = Nothing If ObjAC.GetClasificacionGeografica() Then Application("GlobalDTAC_ClasificacionGeografica") = ObjAC.DtResultados Else Application("GlobalDTAC_ClasificacionGeografica") = Nothing @@ -127,21 +129,21 @@ End Using - GuardaLog(String.Format("Globalasax 6:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 6:{0}", DateTime.Now)) Using Finan As New ClsFinanzas If Finan.GetRazonesFinancieras(-1) Then Application("GlobalDTFinan_RazonesFinancieras") = Finan.DtResultados End Using - GuardaLog(String.Format("Globalasax 7:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 7:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C A R G A - T I P O G A S T O S Using ObjCompra As New ClsCompras() If ObjCompra.GetTipoGasto(-1, -1) Then Application("GlobalDTTiposGastos") = ObjCompra.DtResultados Else Application("GlobalDTTiposGastos") = Nothing End Using - GuardaLog(String.Format("Globalasax 8:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 8:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C A R G A - N O M @@ -157,11 +159,11 @@ If ObjNom.GetTipoIncapacidad Then Application("GlobalDTNomSatTipoIncapacidad") = ObjNom.DtResultados Else Application("GlobalDTNomSatTipoIncapacidad") = Nothing End Using - GuardaLog(String.Format("Globalasax 9:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 9:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O S P E C T O S - GuardaLog(String.Format("Globalasax 10:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 10:{0}", DateTime.Now)) Using ObjProspectos As New ClsProspectos If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificaciones") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificaciones") = Nothing If ObjProspectos.GetClasificacion Then Application("GlobalDTProspectosClasificacionesCaracteristicas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosClasificacionesCaracteristicas") = Nothing @@ -185,12 +187,12 @@ If ObjProspectos.GetRespuestas(-1, -1) Then Application("GlobalDTProspectosEncuestasRespuestas") = ObjProspectos.DtResultados Else Application("GlobalDTProspectosEncuestasRespuestas") = Nothing End Using - GuardaLog(String.Format("Globalasax 11:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 11:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'B A N C O S - GuardaLog(String.Format("Globalasax 12:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 12:{0}", DateTime.Now)) Using ObjBancos As New ClsBancos 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then Application("GlobalDTBancosCuentas") = ObjBancos.DtResultados Else Application("GlobalDTBancosCuentas") = Nothing @@ -200,7 +202,7 @@ If ObjBancos.GetBancos_TiposCuenta() Then Application("GlobalDTTipoCuenta") = ObjBancos.DtResultados Else Application("GlobalDTTipoCuenta") = Nothing End Using - GuardaLog(String.Format("Globalasax 13:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 13:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'I N V E N T A R I O S @@ -212,7 +214,7 @@ If Objinventarios.GetConceptos Then Application("GlobalDTInvConceptos") = Objinventarios.DtResultados Else Application("GlobalDTInvConceptos") = Nothing End Using - GuardaLog(String.Format("Globalasax 14:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 14:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C O N T A B I L I D A D - P L A N T I L L A S @@ -223,7 +225,7 @@ If ObjContabilidad.GetConta_PlantillasPolizasDetalle(-1, -1) Then Application("GlobalDTContaPlantillasPolizasDetalle") = ObjContabilidad.DtResultados Else Application("GlobalDTContaPlantillasPolizasDetalle") = Nothing End Using - GuardaLog(String.Format("Globalasax 15:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 15:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'G E N E R A L E S @@ -244,7 +246,7 @@ End Using - GuardaLog(String.Format("Globalasax 16:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 16:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'E V E N T O S @@ -255,7 +257,7 @@ If ObjEventos.GetEventoTarea(-1, -1) Then Application("GlobalDTOIEventoTarea") = ObjEventos.DtResultados Else Application("GlobalDTOIEventoTarea") = Nothing End Using - GuardaLog(String.Format("Globalasax 17:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 17:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'V E N T A S @@ -270,7 +272,7 @@ If ObjVentas.GetCobranzaEstatus(-1, -1) Then Application("GlobalDTVtaCobranzaEstatus") = ObjVentas.DtResultados Else Application("GlobalDTVtaCobranzaEstatus") = Nothing End Using - GuardaLog(String.Format("Globalasax 18:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 18:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'SAT Using ObjGrales As New ClsGenerales @@ -288,7 +290,7 @@ If ObjGrales.GetSATMunicipio("-1") Then Application("GlobalDTMunicipio") = ObjGrales.DtResultados Else Application("GlobalDTMunicipio") = Nothing If ObjGrales.GetSATColonia("-1") Then Application("GlobalDTColonia") = ObjGrales.DtResultados Else Application("GlobalDTColonia") = Nothing End Using - GuardaLog(String.Format("Globalasax 19:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 19:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ''MF @@ -331,7 +333,7 @@ 'C L A S I F I C A C I O N E S 2 If ObjClasificaciones.GetClasificaciones(Tipo:=4) Then Application("GlobalDTClasificaciones2") = ObjClasificaciones.DtResultados Else Application("GlobalDTClasificaciones2") = Nothing End Using - GuardaLog(String.Format("Globalasax 20:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 20:{0}", DateTime.Now)) Using ObjVenta As New ClsVentas @@ -339,7 +341,7 @@ Application("GlobalDTClasificacionesDetalle") = ObjVenta.DtResultados End If End Using - GuardaLog(String.Format("Globalasax 21:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 21:{0}", DateTime.Now)) @@ -364,7 +366,7 @@ Using ObjMetodoPago As New ClsMetodosPagos() If ObjMetodoPago.GetMetodosPago() Then Application("GlobalDTMetodosPago") = ObjMetodoPago.DtResultados Else Application("GlobalDTMetodosPago") = Nothing End Using - GuardaLog(String.Format("Globalasax 21:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 21:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -375,7 +377,7 @@ If ObjMonedas.GetMonedasAlias() Then Application("GlobalDTMonedasAlias") = ObjMonedas.DtResultados Else Application("GlobalDTMonedasAlias") = Nothing End Using - GuardaLog(String.Format("Globalasax 22:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 22:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'L E Y E N D A S - F I S C A L E S @@ -383,7 +385,7 @@ Using ObjLeyendasFiscales As New ClsLeyendasFiscales() If ObjLeyendasFiscales.GetLeyendasFiscales() Then Application("GlobalDTLeyendasFiscales") = ObjLeyendasFiscales.DtResultados Else Application("GlobalDTLeyendasFiscales") = Nothing End Using - GuardaLog(String.Format("Globalasax 23:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 23:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -394,7 +396,7 @@ If ObjEstatusFactura.GetEstatusFactura() Then Application("GlobalDTEstatusFactura") = ObjEstatusFactura.DtResultados Else Application("GlobalDTEstatusFactura") = Nothing End Using - GuardaLog(String.Format("Globalasax 24:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 24:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O Y E C T O S @@ -402,7 +404,7 @@ Using ObjProyectos As New ClsProyectos If ObjProyectos.GetProyectos Then Application("GlobalDTProyectos") = ObjProyectos.DtResultados Else Application("GlobalDTProyectos") = Nothing End Using - GuardaLog(String.Format("Globalasax 25:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 25:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'S U B P R O Y E C T O S @@ -418,14 +420,14 @@ End If 'Else Application("GlobalDTProyectosUsuarios") = Nothing End Using - GuardaLog(String.Format("Globalasax 26:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 26:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'T I P O S - D E - E V E N T O S Using ObjTiposEventos As New ClsTiposEventos If ObjTiposEventos.GetTiposEventos() Then Application("GlobalDTTiposEventos") = ObjTiposEventos.DtResultados Else Application("GlobalDTTiposEventos") = Nothing End Using - GuardaLog(String.Format("Globalasax 27:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 27:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O D U C T O S Y S E R V I C I O S - C A R A C T E R I S T I C A S @@ -449,7 +451,7 @@ 'If ObjPS.GetPSAdicionales(-1, -1) Then Application("GlobalDTPSAdicionales") = ObjPS.DtResultados Else Application("GlobalDTPSAdicionales") = Nothing End Using - GuardaLog(String.Format("Globalasax 28:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 28:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'P R O V E E D O R E S @@ -467,7 +469,7 @@ End Using - GuardaLog(String.Format("Globalasax 29:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 29:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C L I E N T E S @@ -484,7 +486,7 @@ 'If ObjContratos.GetContratosTipos(-1) Then Application("GlobalDTContratosTipos") = ObjContratos.DtResultados Else Application("GlobalDTContratosTipos") = Nothing End Using - GuardaLog(String.Format("Globalasax 30:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 30:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -494,7 +496,7 @@ If ObjVendedores.GetVendedores(-1) Then Application("GlobalDTVendedores") = ObjVendedores.DtResultados Else Application("GlobalDTVendedores") = Nothing End Using - GuardaLog(String.Format("Globalasax 31:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 31:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C O R P O R A T I V O @@ -502,7 +504,7 @@ Using ObjCorporativo As New ClsClientes If ObjCorporativo.GetCorporativo(-1, -1) Then Application("GlobalDTClientesCorporativo") = ObjCorporativo.DtResultados Else Application("GlobalDTClientesCorporativo") = Nothing End Using - GuardaLog(String.Format("Globalasax 32:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 32:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'E S T A T U S - F A C T U R A @@ -511,7 +513,7 @@ If ObjEstatusFacturaCompra.GetEstatusFactura Then Application("GlobalDTCompEstatusFactura") = ObjEstatusFacturaCompra.DtResultados Else Application("GlobalDTCompEstatusFactura") = Nothing End Using - GuardaLog(String.Format("Globalasax 33:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 33:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'A C U M U L A D O R E S @@ -522,7 +524,7 @@ If ObjAcumuladores.TiposUsoGet(-1, -1) Then Application("GlobalDTAcumTiposUso") = ObjAcumuladores.DtResultados Else Application("GlobalDTAcumTiposUso") = Nothing 'If ObjAcumuladores.GarantiasMesesGet(-1, -1) Then Application("GlobalDTAcumGarantiasMesesTipoUso") = ObjAcumuladores.DtResultados.FiltraParametros("", DistinctColumns:={"CveMarca", "CveTipoUso", "TipoUso"}) Else Application("GlobalDTAcumGarantiasMesesTipoUso") = Nothing End Using - GuardaLog(String.Format("Globalasax 34:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 34:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ '------------------------------------------------------------------------------S I S T E M A ---------------------------------------------------------------------------------- @@ -533,7 +535,7 @@ If ObjParametros.GetParametros Then Application("GlobalDTParametros") = ObjParametros.DtResultados Else Application("GlobalDTParametros") = Nothing End Using - GuardaLog(String.Format("Globalasax 35:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 35:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'U S U A R I O S @@ -547,7 +549,7 @@ End If 'If ObjUsuarios.GetAlmacen(-1) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing End Using - GuardaLog(String.Format("Globalasax 36:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 36:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'R O L E S @@ -556,7 +558,7 @@ If ObjRoles.GetRoles(-1, -1) Then Application("GlobalDTRoles") = ObjRoles.DtResultados Else Application("GlobalDTRoles") = Nothing End Using - GuardaLog(String.Format("Globalasax 37:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 37:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'M O D U L O S @@ -564,7 +566,7 @@ Using ObjModulos As New ClsModulos If ObjModulos.GetModulos(-1, -1, "-1", "-1") Then Application("GlobalDTModulos") = ObjModulos.DtResultados Else Application("GlobalDTModulos") = Nothing End Using - GuardaLog(String.Format("Globalasax 38:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 38:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 'C O M B U S T I B L E S @@ -573,7 +575,7 @@ If ObjFlotillas.GetCombustibles() Then Application("GlobalDTCombustibles") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustibles") = Nothing If ObjFlotillas.GetCombustiblesTipos(-1) Then Application("GlobalDTCombustiblesTipos") = ObjFlotillas.DtResultados Else Application("GlobalDTCombustiblesTipos") = Nothing End Using - GuardaLog(String.Format("Globalasax 39:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 39:{0}", DateTime.Now)) '----------------------------------------------------------------------------------7-------------------------------------------------------------------------------------------- 'E M P R E S A S @@ -593,7 +595,7 @@ Application("GlobalDTEmpresas") = Nothing End If End Using - GuardaLog(String.Format("Globalasax 40:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 40:{0}", DateTime.Now)) '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -608,7 +610,7 @@ End If End If End Using - GuardaLog(String.Format("Globalasax 41:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 41:{0}", DateTime.Now)) BundleConfig.RegistrarBundles(BundleTable.Bundles) @@ -653,7 +655,7 @@ End If End If End Using - GuardaLog(String.Format("Globalasax 42:{0}", DateTime.Now)) + GuardaLogAsax(String.Format("Globalasax 42:{0}", DateTime.Now)) 'If EsProduccion = "1" Then From 7a1e2154d7250ba94b9a7d4cbd85f9d401133589 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Thu, 30 Jul 2020 19:19:02 -0700 Subject: [PATCH 30/37] - --- Inventarios/AjustesSeccionAlmacen.aspx | 31 +++++++++++-------- .../CatAlmacenClasificacionSecciones.aspx.cs | 8 ++--- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Inventarios/AjustesSeccionAlmacen.aspx b/Inventarios/AjustesSeccionAlmacen.aspx index d8d9a41ab..34649f464 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx +++ b/Inventarios/AjustesSeccionAlmacen.aspx @@ -36,27 +36,32 @@

    - -
    - + +
    +
    - -
    - + +
    +
    - -
    - + +
    +
    - -
    - + +
    +
    +
    +
    + +
    +
    @@ -75,7 +80,7 @@ <%----%> - + diff --git a/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs b/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs index 8e44d3ef3..7300a3ed6 100644 --- a/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs +++ b/Inventarios/CatAlmacenClasificacionSecciones.aspx.cs @@ -127,11 +127,11 @@ public partial class Inventarios_CatAlmacenClasificacionSecciones : ClsPaginas CveSeccionClasificacion = GvRow.DataKey("CveSeccionClasificacion").ToEntero(); - DdlAlmacen.SelectedValue = CveAlmacen; + DdlAlmacen.SelectedValueExist(CveAlmacen); CargarSeccionAlmacen(CveAlmacen.ToEntero()); - DdlClasificacion.SelectedValue = CveClasificacion; - DdlTipo.SelectedValue = CveClasificacionDetalle; - DdlMarca.SelectedValue = CveMarca; + DdlClasificacion.SelectedValueExist(CveClasificacion); + DdlTipo.SelectedValueExist(CveClasificacionDetalle); + DdlMarca.SelectedValueExist(CveMarca); DdlSeccionAlmacen.SelectedValueExist(CveSeccionAlmacen); UpModalTiposD.Update(); RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); From 6debb0ca6da39694c8fcbb6295abb08c554a2b09 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 30 Jul 2020 19:22:03 -0700 Subject: [PATCH 31/37] -- secciones en producto y sus clasificaciones --- App_Code/ClsInventarios.vb | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb index 1ccb1b4c9..50c2dd0f2 100644 --- a/App_Code/ClsInventarios.vb +++ b/App_Code/ClsInventarios.vb @@ -4933,6 +4933,23 @@ Public Class ClsInventarios Return Retorno End Function + Public Function GetProductosServiciosAlmacenSeccionClasificacion(CvePS As Integer, CveAlmacen As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + DataAdapter("PA_Inv_ProductosServiciosAlmacenSeccionClasificacionGet") + With SqlAdapter.SelectCommand.Parameters + .Add("@CvePS", SqlDbType.Int).Value = CvePS + .Add("@CveAlmacen", SqlDbType.Int).Value = CveAlmacen + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el ps de la seccion de almacen..", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + Return Retorno + End Function + Public Function RemoveProductosServiciosAlmacenSeccion(CvePSAlmacenSeccion As Integer) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Inv_ProductosServiciosAlmacenSeccionRemove") From a1509486553b68edb282af8f07e824b7da5e1db0 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 30 Jul 2020 19:23:23 -0700 Subject: [PATCH 32/37] secciones --- App_Code/ClsPaginas.vb | 61 +++++++++++++++------------- App_Code/Timbrado.vb | 2 + Compras/Compras.aspx.vb | 14 +++---- Inventarios/EntradasSalidas.aspx.vb | 8 +++- Inventarios/RecepcionAlmacen.aspx.vb | 18 ++++---- 5 files changed, 57 insertions(+), 46 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 7a737f3b9..b49e39f3f 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1837,37 +1837,42 @@ Public Class ClsPaginas Property GlobalDTInvPSSeccionesAlmacen(CveEmpresa As Integer, CveAlmacen As Integer, CvePS As Integer) As DataTable Get - Dim AppNombre As String = String.Format("GlobalDTInvPSSeccionesAlmacen-{0}", CveEmpresa) - 'sino existe, recarga los datos - If Application(AppNombre) Is Nothing Then - Dim ObjInv As New ClsInventarios - If ObjInv.GetProductosServiciosAlmacenSeccion(-1, -1, -1, CveEmpresa) Then Application(AppNombre) = ObjInv.DtResultados - ObjInv.Dispose() - End If - If CveEmpresa <> -1 Then - Dim Str As New StringBuilder + Dim dtt As DataTable = Nothing + Dim ObjInv As New ClsInventarios + If ObjInv.GetProductosServiciosAlmacenSeccionClasificacion(CvePS, CveAlmacen, CveEmpresa) Then dtt = ObjInv.DtResultados + ObjInv.Dispose() + GlobalDTInvPSSeccionesAlmacen = dtt + 'Dim AppNombre As String = String.Format("GlobalDTInvPSSeccionesAlmacen-{0}", CveEmpresa) + ''sino existe, recarga los datos + 'If Application(AppNombre) Is Nothing Then + ' Dim ObjInv As New ClsInventarios + ' If ObjInv.GetProductosServiciosAlmacenSeccion(-1, -1, -1, CveEmpresa) Then Application(AppNombre) = ObjInv.DtResultados + ' ObjInv.Dispose() + 'End If + 'If CveEmpresa <> -1 Then + ' Dim Str As New StringBuilder - If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa) - If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen) - If CvePS > 0 Then Str.AppendFormat("AND CvePS = {0}", CvePS) + ' If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa) + ' If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen) + ' If CvePS > 0 Then Str.AppendFormat("AND CvePS = {0}", CvePS) - 'si el PS no tiene definido una seccion, toma las del Almacen - If DirectCast(Application(AppNombre), DataTable) IsNot Nothing Then - Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) - GlobalDTInvPSSeccionesAlmacen = Dv.ToTable - Dv.Dispose() - 'sino tiene datos registrados, toma los de almacen - If GlobalDTInvPSSeccionesAlmacen.Rows.Count = 0 Then - GlobalDTInvPSSeccionesAlmacen = GlobalDTSeccionAlmacen(CveEmpresa, CveAlmacen) - End If - Else - 'sino tiene datos registrados, toma los de almacen - GlobalDTInvPSSeccionesAlmacen = GlobalDTSeccionAlmacen(CveEmpresa, CveAlmacen) - End If + ' 'si el PS no tiene definido una seccion, toma las del Almacen + ' If DirectCast(Application(AppNombre), DataTable) IsNot Nothing Then + ' Dim Dv As New DataView(DirectCast(Application(AppNombre), DataTable), Str.ToString, "", DataViewRowState.CurrentRows) + ' GlobalDTInvPSSeccionesAlmacen = Dv.ToTable + ' Dv.Dispose() + ' 'sino tiene datos registrados, toma los de almacen + ' If GlobalDTInvPSSeccionesAlmacen.Rows.Count = 0 Then + ' GlobalDTInvPSSeccionesAlmacen = GlobalDTSeccionAlmacen(CveEmpresa, CveAlmacen) + ' End If + ' Else + ' 'sino tiene datos registrados, toma los de almacen + ' GlobalDTInvPSSeccionesAlmacen = GlobalDTSeccionAlmacen(CveEmpresa, CveAlmacen) + ' End If - Else - GlobalDTInvPSSeccionesAlmacen = DirectCast(Application(AppNombre), DataTable) - End If + 'Else + ' GlobalDTInvPSSeccionesAlmacen = DirectCast(Application(AppNombre), DataTable) + 'End If End Get Set(value As DataTable) diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 802b59115..520ae6bce 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -41,6 +41,8 @@ Public Class Timbrado Retorno = New AcuseCancelacionSAT() End If Catch ex As Exception + Dim Strr As String = String.Format("Error al verificar estatus de cancelacion:{0}", ex.Message) + Strr.GuardaLog() Return Nothing End Try diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb index 7fce911ba..cf7488197 100644 --- a/Compras/Compras.aspx.vb +++ b/Compras/Compras.aspx.vb @@ -1270,14 +1270,10 @@ Partial Class Compras_Compras ' LitHProyecto.Text = "Sucursal" ' DdlSubProyecto.Items.Clear() - ' DdlSubProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1)) - ' DdlSubProyecto.DataBind() - ' DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) + ' DdlAsignaSubProyecto.Items.Clear() - ' DdlAsignaSubProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1)) - ' DdlAsignaSubProyecto.DataBind() - ' DdlAsignaSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) + ' divproyecto.Visible = False ' divasignaproyecto.Visible = False @@ -17388,9 +17384,9 @@ Partial Class Compras_Compras Private Sub CargaSubProyecto() Dim CveProyecto = If(DdlProyecto.SelectedValue.ToEntero > 0, DdlProyecto.SelectedValue.ToEntero, -1) DdlSubProyecto.Items.Clear() - If CveProyecto > 0 Then - DdlSubProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, CveProyecto, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(CveProyecto, -1, UsuarioActual.CveEmpresa, 1)) - End If + + DdlSubProyecto.DataSource = If(Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, CveProyecto, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(CveProyecto, -1, UsuarioActual.CveEmpresa, 1)) + DdlSubProyecto.DataBind() DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index 7cd476459..37253dbe0 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -2187,12 +2187,16 @@ Partial Class Inventarios_EntradasSalidas End If If CBool(dr("AplicaSeccion")) Then divSeccionAlmacen.Visible = True - + DdlSeccionAlmacen.Items.Clear() + DdlSeccionAlmacen.ClearSelection() + DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) + DdlSeccionAlmacen.DataBind() End If If CBool(dr("AplicaCaducidad")) Then divCaducidad.Visible = True End If + End If End If @@ -4391,7 +4395,7 @@ Partial Class Inventarios_EntradasSalidas TxtnLote.Text = "" TxtnFechaCaducidad.Text = "" TxtObservacionesdetalle.Text = "" - DdlSeccionAlmacen.SelectedValue = "-1" + DdlSeccionAlmacen.ClearSelection() LkAgregarDetalle.Text = "Agregar" If DdlMonedaTC.SelectedValue.ToEntero = 2 Then VisualizaPUExtranjero(UsuarioActual.TienePermisoProceso(201)) diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index ea1db1741..b0aab111d 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -1273,6 +1273,8 @@ Partial Class Inventarios_RecepcionAlmacen If dtsec.Rows.Count = 1 Then e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedIndex = 0 e.Row.FCDropDownList("DdlSeccionAlmacen").Enabled = False + Else 'si es mayor a uno que por default seleccione el primero, que seria el predeterminado + e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedValueExist(dtsec.FiltroPrimeroValor("CveSeccionAlmacen", "Predeterminado = 1")) End If e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) @@ -3118,7 +3120,7 @@ Partial Class Inventarios_RecepcionAlmacen End If Dim CvePrePoliza As Integer = 0 Dim UsaComplementariaCostoIndirecto As Boolean = False - Dim ConceptoPrePoliza As String = LbProveedor.Text + Dim ConceptoPrePoliza As String = String.Format("{0}-{1}", LbProveedor.Text, HLFolio.Text) If UsuarioActual.CveEmpresa = 119 Then UsaComplementariaCostoIndirecto = False Dim PorcentajeCompraImportacion As Decimal = 0 ' si hay mas de una factura de importación saber lo que se está recibiendo @@ -3164,13 +3166,12 @@ Partial Class Inventarios_RecepcionAlmacen drc("SubTotal") = drt("SubTotal") drc("TipoCambio") = drt("TipoCambio") drc("CveProveedor") = drt("CveProveedor") + drc("SubTotalTC") = drt("SubTotalTC") DtTempCompras.Rows.Add(drc) Next End If - - Else ErrorMovInv = True End If @@ -3182,6 +3183,9 @@ Partial Class Inventarios_RecepcionAlmacen ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Dim TotalCosto As Decimal = ObjInventario.DtResultados.SUMD("Total").RoundSQL() Dim IdCtaContableCostoInd As Integer = 0 + 'si reciben parcialidades de producto. en base al total de la importacion y lo recibido. + Dim PorcentajeRecepcionCompras As Decimal = TotalCosto / DtTempCompras.SUMD("SubTotalTC") + Dim ConceptoPartida As String = String.Format("{0}- Inv#{1}", HLFolio.Text, InvFolio) If ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, TotalCosto, InvFolio, 68, InvFolio, FechaMovto, IdCtaContableAlmacen, -1, CveCompra:=CveCompraSurtir, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=TotalCosto, CveCuenta:=CveCuentaAlmacen) Then 'se recorren las facturas a descontar el recepción @@ -3190,7 +3194,7 @@ Partial Class Inventarios_RecepcionAlmacen For Each dr As DataRow In DtTempCompras.Rows Dim CveComp As Integer = dr("CveCompra").ToString.ToEntero 'el porcentaje solo aplica a las facturas de costo indirecto - Dim SubTotalPartida As Decimal = dr("SubTotal").ToString.ToDecimal * If(dr("TipoCompra").ToString = "CI", PorcentajeCompraImportacion, 1) + Dim SubTotalPartida As Decimal = dr("SubTotal").ToString.ToDecimal * If(dr("TipoCompra").ToString = "CI", PorcentajeCompraImportacion, 1) * PorcentajeRecepcionCompras Dim ImporteAbono As Decimal = (SubTotalPartida * dr("TipoCambio").ToString.ToDecimal).RoundSQL Dim ImporteAbonoME As Decimal = 0 Dim CveConceptoCostoIndirecto As Integer = If(CveImportacionSurtir > 0, 240, 237) @@ -3207,10 +3211,10 @@ Partial Class Inventarios_RecepcionAlmacen - If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, InvFolio, CveConceptoCostoIndirecto, InvFolio, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then + If ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, ConceptoPartida, CveConceptoCostoIndirecto, ConceptoPartida, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then ' si tiene valor es que hay complementaria If ImporteAbonoME > 0 Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, InvFolio, If(CveImportacionSurtir > 0, 242, 239), InvFolio, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteAbono, ConceptoPartida, If(CveImportacionSurtir > 0, 242, 239), ConceptoPartida, FechaMovto, IdCtaContableCostoInd, -1, CveCompra:=CveComp, CveProveedor:=dr("CveProveedor").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ImporteAbono) Then ErrorMovInv = True End If End If @@ -3228,7 +3232,7 @@ Partial Class Inventarios_RecepcionAlmacen End If End If - If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then + If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, 6) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") ErrorMovInv = True From 33b3aae1635f10a6fbd298b11571ad93f483bb26 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 30 Jul 2020 19:23:33 -0700 Subject: [PATCH 33/37] funcionalidad 102 --- Bancos/RepProgramarRecursos.aspx.vb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Bancos/RepProgramarRecursos.aspx.vb b/Bancos/RepProgramarRecursos.aspx.vb index b5f74e352..99b914bed 100644 --- a/Bancos/RepProgramarRecursos.aspx.vb +++ b/Bancos/RepProgramarRecursos.aspx.vb @@ -142,7 +142,7 @@ Partial Class Bancos_RepProgramarRecursos DdlMoneda.DataSource = GlobalDTMonedas DdlMoneda.DataBind() - DdlProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1)) + DdlProyecto.DataSource = If(Not UsuarioActual.TienePermisoProceso(110), GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1)) DdlProyecto.DataBind() DtCuentas = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa) @@ -257,8 +257,8 @@ Partial Class Bancos_RepProgramarRecursos DdlSubProyecto.Items.Clear() ListSubProyecto.Items.Clear() If DdlProyecto.SelectedValue.ToEntero > 0 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)) - ListSubProyecto.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(Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, DdlProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(DdlProyecto.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, 1)) + ListSubProyecto.DataSource = If(Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, DdlProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(DdlProyecto.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa, 1)) Else DdlSubProyecto.Items.Insert(0, New ListItem("Todos", "-1")) ListSubProyecto.Items.Insert(0, New ListItem("Todos", "-1")) From 9ff0a96723a30ff328909830fb5a2968f3fb65df Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 30 Jul 2020 19:23:46 -0700 Subject: [PATCH 34/37] cancelacion --- .../Cancelacion/Cancelacion.disco | 6 + .../{cancelacion.wsdl => Cancelacion1.wsdl} | 863 ++++++++++-------- .../Cancelacion/Reference.svcmap | 5 +- .../Cancelacion/configuration.svcinfo | 5 +- .../Cancelacion/configuration91.svcinfo | 125 ++- 5 files changed, 624 insertions(+), 380 deletions(-) create mode 100644 App_WebReferences/Cancelacion/Cancelacion.disco rename App_WebReferences/Cancelacion/{cancelacion.wsdl => Cancelacion1.wsdl} (71%) diff --git a/App_WebReferences/Cancelacion/Cancelacion.disco b/App_WebReferences/Cancelacion/Cancelacion.disco new file mode 100644 index 000000000..6a7ff22e0 --- /dev/null +++ b/App_WebReferences/Cancelacion/Cancelacion.disco @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/App_WebReferences/Cancelacion/cancelacion.wsdl b/App_WebReferences/Cancelacion/Cancelacion1.wsdl similarity index 71% rename from App_WebReferences/Cancelacion/cancelacion.wsdl rename to App_WebReferences/Cancelacion/Cancelacion1.wsdl index edb3d974d..05d511610 100644 --- a/App_WebReferences/Cancelacion/cancelacion.wsdl +++ b/App_WebReferences/Cancelacion/Cancelacion1.wsdl @@ -1,369 +1,496 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cancela un Cfdi en pruebas - - - - - Obtiene el estatus de un Cfdi en producción - - - - - Obtiene el estatus de un Cfdi en pruebas - - - - - Obtiene los Uuid pendientes de aceptar/rechazar de un Receptor (Producción) - - - - - Obtiene los Uuid pendientes de aceptar/rechazar de un Receptor (Pruebas) - - - - - Acepta/Rechaza una solicitud pendiente de cancelación (Producción) - - - - - Acepta/Rechaza una solicitud pendiente de cancelación (Pruebas) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cancela un Cfdi en pruebas + + + + + Obtiene el estatus de un Cfdi en producción + + + + + Obtiene el estatus de un Cfdi en pruebas + + + + + Obtiene los Uuid pendientes de aceptar/rechazar de un Receptor (Producción) + + + + + Obtiene los Uuid pendientes de aceptar/rechazar de un Receptor (Pruebas) + + + + + Acepta/Rechaza una solicitud pendiente de cancelación (Producción) + + + + + Acepta/Rechaza una solicitud pendiente de cancelación (Pruebas) + + + + + Obtiene el/los Cfdi(s) relacionado(s) de un UUID de un RFC (Pruebas) + + + + + Obtiene el/los Cfdi(s) relacionado(s) de un UUID de un RFC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/App_WebReferences/Cancelacion/Reference.svcmap b/App_WebReferences/Cancelacion/Reference.svcmap index 9a78e9a96..b030e1612 100644 --- a/App_WebReferences/Cancelacion/Reference.svcmap +++ b/App_WebReferences/Cancelacion/Reference.svcmap @@ -19,10 +19,11 @@ - + - + + diff --git a/App_WebReferences/Cancelacion/configuration.svcinfo b/App_WebReferences/Cancelacion/configuration.svcinfo index a17bdeb3c..85e827509 100644 --- a/App_WebReferences/Cancelacion/configuration.svcinfo +++ b/App_WebReferences/Cancelacion/configuration.svcinfo @@ -2,9 +2,10 @@ - + + - + \ No newline at end of file diff --git a/App_WebReferences/Cancelacion/configuration91.svcinfo b/App_WebReferences/Cancelacion/configuration91.svcinfo index 02af02716..2e9305310 100644 --- a/App_WebReferences/Cancelacion/configuration91.svcinfo +++ b/App_WebReferences/Cancelacion/configuration91.svcinfo @@ -1,10 +1,119 @@ - + - + - CancelacionSoap + CancelacionSoap1 + + + + + + + + + + + + + + + + + + + + + StrongWildcard + + + + + + 65536 + + + + + + + + + System.ServiceModel.Configuration.XmlDictionaryReaderQuotasElement + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + System.Text.UTF8Encoding + + + Buffered + + + + + + Text + + + System.ServiceModel.Configuration.BasicHttpSecurityElement + + + Transport + + + System.ServiceModel.Configuration.HttpTransportSecurityElement + + + None + + + None + + + System.Security.Authentication.ExtendedProtection.Configuration.ExtendedProtectionPolicyElement + + + Never + + + TransportSelected + + + (Collection) + + + + + + System.ServiceModel.Configuration.BasicHttpMessageSecurityElement + + + UserName + + + Default + + + + + + + CancelacionSoap2 @@ -94,7 +203,7 @@ TransportSelected - (Colección) + (Collection) @@ -112,10 +221,10 @@ - + - http://juancalderon-001-site6.ftempurl.com/cancelacion.asmx + https://cancel.gofac.com.mx/Cancelacion.asmx @@ -124,7 +233,7 @@ basicHttpBinding - CancelacionSoap + CancelacionSoap1 Cancelacion.CancelacionSoap @@ -187,7 +296,7 @@ False - CancelacionSoap + CancelacionSoap1 From 339d23a9e13f3423884f5a9ba01d0e8a8c905abe Mon Sep 17 00:00:00 2001 From: rrene Date: Fri, 31 Jul 2020 16:53:08 -0700 Subject: [PATCH 35/37] -- cambios en secciones, en base su clasificacion del PS --- App_Code/ClsPaginas.vb | 17 +++ Inventarios/AjustesSeccionAlmacen.aspx | 4 +- Inventarios/AjustesSeccionAlmacen.aspx.vb | 29 ++-- Inventarios/EntradasSalidas.aspx.vb | 10 +- Inventarios/EntregaAlmacen.aspx.vb | 175 ++++++++++++---------- Inventarios/RecepcionAlmacen.aspx.vb | 28 ++-- 6 files changed, 155 insertions(+), 108 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index af51e439a..a5cd1d6fb 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -15,6 +15,7 @@ Imports CrystalDecisions.ReportSource Imports Stimulsoft.Report Imports System.Xml Imports System.Web.Http.ValueProviders +Imports ADServerControl 'NOTA AD TEAM @@ -8117,5 +8118,21 @@ Public Class ClsPaginas If AplicaTodos <> "" Then DdlSubProyecto.Items.Insert(0, New ListItem(AplicaTodos, "-1")) End If End Sub + + Public Sub CargaSeccionesAlmacen(ByRef DdlSeccionAlmacen As DropDownList, CveAlmacen As Integer, CvePS As Integer, CveEmpresa As Integer, Optional IncluyeSeleccione As Boolean = False) + DdlSeccionAlmacen.Items.Clear() + DdlSeccionAlmacen.ClearSelection() + Dim dtsec As DataTable = GlobalDTInvPSSeccionesAlmacen(CveEmpresa, CveAlmacen, CvePS) + DdlSeccionAlmacen.DataSource = dtsec + DdlSeccionAlmacen.DataBind() + If dtsec.Rows.Count = 1 Then + DdlSeccionAlmacen.SelectedIndex = 0 + DdlSeccionAlmacen.Enabled = False + Else 'si es mayor a uno que por default seleccione el primero, que seria el predeterminado + DdlSeccionAlmacen.SelectedValueExist(dtsec.FiltroPrimeroValor("CveSeccionAlmacen", "Predeterminado = 1")) + If IncluyeSeleccione Then DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) + End If + dtsec.Dispose() + End Sub End Class diff --git a/Inventarios/AjustesSeccionAlmacen.aspx b/Inventarios/AjustesSeccionAlmacen.aspx index 34649f464..11a13b4b6 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx +++ b/Inventarios/AjustesSeccionAlmacen.aspx @@ -80,7 +80,7 @@ <%----%> - + @@ -91,7 +91,7 @@ - + diff --git a/Inventarios/AjustesSeccionAlmacen.aspx.vb b/Inventarios/AjustesSeccionAlmacen.aspx.vb index 05c620b22..8a46beef4 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx.vb +++ b/Inventarios/AjustesSeccionAlmacen.aspx.vb @@ -46,9 +46,10 @@ Partial Class Inventarios_AjustesSeccionAlmacen Private Sub GvD_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvD.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then + CargaSeccionesAlmacen(e.Row.FCDropDownList("DDlS"), DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero, UsuarioActual.CveEmpresa) - e.Row.FCDropDownList("DDlS").DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) - e.Row.FCDropDownList("DDlS").DataBind() + 'e.Row.FCDropDownList("DDlS").DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero) + 'e.Row.FCDropDownList("DDlS").DataBind() Dim ExistenciasAux As Decimal = e.Row.DataKey("Existencia").ToDecimal e.Row.FCRangeValidator("RVR").Enabled = ExistenciasAux > 0 @@ -132,9 +133,9 @@ Partial Class Inventarios_AjustesSeccionAlmacen 'actualizamos el PS, para que tenga el aplica seccion ObjPS.UpdateAplicaSeccionAlmacen(Row("CvePS").ToString().ToEntero(), UsuarioActual.CveEmpresa, True) - If Not ObjInventario.AddProductosServiciosAlmacenSeccion(CvePS, CveAlmacen, CveSeccionAlmacen) Then - ErrorMovInv = True - End If + 'If Not ObjInventario.AddProductosServiciosAlmacenSeccion(CvePS, CveAlmacen, CveSeccionAlmacen) Then + ' ErrorMovInv = True + 'End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Cantidad, CveUM, CvePS, PU, -1, CostoIndirecto:=CostoIndirecto, CveSeccionAlmacen:=CveSeccionAlmacen, Lote:=Lote, Serie:=Serie, FechaCaducidad:=FechaCaducidad, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True @@ -381,9 +382,9 @@ Partial Class Inventarios_AjustesSeccionAlmacen 'ACTUALIZAMOS EL PS, PARA QUE TENGA EL APLICA SECCION ErrorMovInv = Not ObjPS.UpdateAplicaSeccionAlmacen(CvePS, UsuarioActual.CveEmpresa, True) - If Not ObjInventario.AddProductosServiciosAlmacenSeccion(CvePS, CveAlmacen, CveSeccionAlmacen) Then - ErrorMovInv = True - End If + 'If Not ObjInventario.AddProductosServiciosAlmacenSeccion(CvePS, CveAlmacen, CveSeccionAlmacen) Then + ' ErrorMovInv = True + 'End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, CantidadEntrada, CveUMEntrada, CvePSEntrada, PUEntrada, -1, CostoIndirecto:=CostoIndirecto, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorMovInv = True @@ -459,11 +460,11 @@ Partial Class Inventarios_AjustesSeccionAlmacen End Sub Protected Sub Chk_Click(sender As Object, e As EventArgs) - Dim row As GridViewRow = (CType((CType(sender, CheckBox)).NamingContainer, GridViewRow)) - Dim ExistenciaBackup As Integer = row.DataKey("Existencia").ToEntero() - row.FCTextBox("TxtCantidad").Enabled = Not row.FCTextBox("TxtCantidad").Enabled - If Not row.FCTextBox("TxtCantidad").Enabled Then - row.FCTextBox("TxtCantidad").Text = ExistenciaBackup - End If + 'Dim row As GridViewRow = (CType((CType(sender, CheckBox)).NamingContainer, GridViewRow)) + 'Dim ExistenciaBackup As Integer = row.DataKey("Existencia").ToEntero() + 'row.FCTextBox("TxtCantidad").Enabled = Not row.FCTextBox("TxtCantidad").Enabled + 'If Not row.FCTextBox("TxtCantidad").Enabled Then + ' row.FCTextBox("TxtCantidad").Text = ExistenciaBackup + 'End If End Sub End Class \ No newline at end of file diff --git a/Inventarios/EntradasSalidas.aspx.vb b/Inventarios/EntradasSalidas.aspx.vb index 69d977884..1f6a9efdf 100644 --- a/Inventarios/EntradasSalidas.aspx.vb +++ b/Inventarios/EntradasSalidas.aspx.vb @@ -2187,10 +2187,12 @@ Partial Class Inventarios_EntradasSalidas End If If CBool(dr("AplicaSeccion")) Then divSeccionAlmacen.Visible = True - DdlSeccionAlmacen.Items.Clear() - DdlSeccionAlmacen.ClearSelection() - DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) - DdlSeccionAlmacen.DataBind() + 'DdlSeccionAlmacen.Items.Clear() + 'DdlSeccionAlmacen.ClearSelection() + 'DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) + 'DdlSeccionAlmacen.DataBind() + CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) + End If If CBool(dr("AplicaCaducidad")) Then divCaducidad.Visible = True diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 7f0ff714e..2adc2532c 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -7,7 +7,8 @@ Imports System.IO Imports Extensiones Imports Microsoft.Reporting.WebForms - +Imports Stimulsoft.Base.Indicator + Partial Class Inventarios_EntregaAlmacen Inherits ClsPaginas @@ -886,13 +887,14 @@ Partial Class Inventarios_EntregaAlmacen If CBool(e.Row.DBCampo("AplicaSeccion")) Then e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True If DdlAlmacen.SelectedValue.ToEntero > 0 Then - Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) - e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt - e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() - If dtt.Rows.Count > 1 Then - e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) - End If - dtt.Dispose() + CargaSeccionesAlmacen(e.Row.FCDropDownList("DdlSeccionAlmacen"), DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero, UsuarioActual.CveEmpresa, True) + 'Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() + 'If dtt.Rows.Count > 1 Then + ' e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + 'End If + 'dtt.Dispose() End If Else @@ -2009,6 +2011,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 + Dim CveSeccionAlmacen As Integer = 0 For Each Dr2 As DataRow In ObjInventario.DtResultados.FiltraParametros("CveAlmacen > 0 AND ExistenciaFinal > 0").Rows 'BUSCA SI EXISTE YA UN TRASPASO DEL ALMACEN DE APARTADO @@ -2038,8 +2041,14 @@ Partial Class Inventarios_EntregaAlmacen CantidadPendiente = 1 + If CBool(Dr("AplicaSeccion")) Then + CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, Dr2("CveAlmacen").ToString.ToEntero, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero + Dim a As String = String.Format("CveAlmacen={0}-CvePS:{1}-CveseccionAlmacen={2}", Dr2("CveAlmacen"), Dr("CvePS"), CveSeccionAlmacen) + Else + CveSeccionAlmacen = -1 + End If - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, Serie:=Dr1("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, FechaCaducidad:=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 Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalida, CantidadPendiente.ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, 0, Serie:=Dr1("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, FechaCaducidad:=If(CBool(Dr("AplicaCaducidad")), Dr("FechaCaducidad").ToString.ToDate, MinFecha), Lote:=If(CBool(Dr("AplicaLote")), Dr("Lote").ToString, "-1"), CveSeccionAlmacen:=CveSeccionAlmacen) Then ErrorMovInv = True TextoError.AppendFormat("Ocurrió un Error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") Exit For @@ -2469,7 +2478,7 @@ Partial Class Inventarios_EntregaAlmacen Dim CveMovimientoSalidaApartado = -1 Dim CveAlmacenApartado = -1 Dim CveAlmacenOrigen = If(CveAlmacenTraspasoDestino > 0, CveAlmacenTraspasoDestino, DdlAlmacen.SelectedValue.ToEntero) - + Dim CveSeccionAlmacen As Integer = 0 For Each Dr As DataRow In DtTempApartados.Rows If CveMovimientoSalidaApartado = -1 Or CveAlmacenApartado <> Dr("CveAlmacen").ToString.ToEntero Then @@ -2491,9 +2500,14 @@ Partial Class Inventarios_EntregaAlmacen ErrorMovInv = True TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") Exit For + End If + If CBool(Dr("AplicaSeccion")) Then + CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, CveAlmacenOrigen, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero + Dim a As String = String.Format("CveAlmacen={0}-CvePS:{1}-CveseccionAlmacen={2}", CveAlmacenOrigen, Dr("CvePS"), CveSeccionAlmacen) + Else + CveSeccionAlmacen = -1 End If - - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, CveSeccionAlmacen:=CveSeccionAlmacen) Then ErrorMovInv = True TextoError.AppendFormat("Ocurrió un error al guardar los movimientos de control de apartados") Exit For @@ -2520,8 +2534,15 @@ Partial Class Inventarios_EntregaAlmacen Dr1("FolioEntrada") = FolioEntrada If ObjInventario.GetMovimientosDetalle(CveMovimientoSalida, UsuarioActual.CveEmpresa) Then - For Each Dr As DataRow In ObjInventario.DtResultados.Rows - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then + For Each Dr As DataRow In ObjInventario.DtResultados.Rows + If CBool(Dr("AplicaSeccion")) Then + CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, Dr1("CveAlmacen").ToString.ToEntero, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero + Dim a As String = String.Format("CveAlmacen={0}-CvePS:{1}-CveseccionAlmacen={2}", Dr1("CveAlmacen").ToString.ToEntero, Dr("CvePS"), CveSeccionAlmacen) + Else + CveSeccionAlmacen = -1 + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaApartado, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString, CveSeccionAlmacen:=CveSeccionAlmacen) Then ErrorMovInv = True TextoError.AppendFormat("Ocurrió un error al procesar los conceptos de traspaso de apartado. Por favor vuelva a intentar.") Exit For @@ -3212,71 +3233,75 @@ Partial Class Inventarios_EntregaAlmacen tCvecliente = dr("CveCliente").ToString.ToEntero Dim drC As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa, CveCliente:=tCvecliente).FiltroPrimero("") - Destinatario += String.Format(";{0};{1}", drC("CorreoEntregaCompras"), drC("CorreoEntregaAlmacen")) + If drC IsNot Nothing Then - Dim ClienteNombre As String = dr("ClienteNombre").ToString() - Dim FolioVenta As String = dr("SerieFolio").ToString() - Dim Pedido As String = dr("PedidoContrato").ToString() - Dim OrdenCompra As String = dr("OrdenCompra").ToString() - Dim CveVenta As Integer = dr("CveVenta").ToString().ToEntero() - Dim TipoDocto As String = dr("TipoDocto").ToString() + Destinatario += String.Format(";{0};{1}", drC("CorreoEntregaCompras"), drC("CorreoEntregaAlmacen")) - Dim dtDetalle As New DataTable - If ObjVentas.GetVentaDetalle(CveVenta) Then - dtDetalle = ObjVentas.DtResultados + Dim ClienteNombre As String = dr("ClienteNombre").ToString() + Dim FolioVenta As String = dr("SerieFolio").ToString() + Dim Pedido As String = dr("PedidoContrato").ToString() + Dim OrdenCompra As String = dr("OrdenCompra").ToString() + Dim CveVenta As Integer = dr("CveVenta").ToString().ToEntero() + Dim TipoDocto As String = dr("TipoDocto").ToString() + + Dim dtDetalle As New DataTable + If ObjVentas.GetVentaDetalle(CveVenta) Then + dtDetalle = ObjVentas.DtResultados + End If + Dim DetalleTable As String = "" + For Each dRow As DataRow In dtDetalle.Rows + Dim detalle As String = String.Format("{0}{1}{2}", dRow("Codigo"), dRow("Cantidad"), dRow("PS")) + DetalleTable += detalle + Next + + strBody.Append("") + strBody.Append("") + strBody.Append("") + strBody.Append("") + strBody.Append(" ") + strBody.Append("
    ") + strBody.Append($"") + strBody.Append("
    ") + strBody.Append("

    ") + strBody.Append($" Apreciable {ClienteNombre}, le confirmamos los") + strBody.Append(" productos surtidos y entregados en mostrador conforme a la") + strBody.Append($" {TipoDocto}:") + strBody.Append("

    ") + strBody.Append($"

    {FolioVenta} - Pedido {Pedido} - Orden de Compra {OrdenCompra}

    ") + strBody.Append("
    ") + strBody.Append(" ") + strBody.Append(DetalleTable) + strBody.Append(" ") + strBody.Append("
    ") + strBody.Append("
    ") + strBody.Append("

    ") + strBody.Append(" Se entregaron los productos conforme a las especificaciones de su pedido y verificamos que no se presentara alguno de los siguientes inconvenientes:") + strBody.Append("

    ") + strBody.Append("

    ") + strBody.Append(" • Empaque violado.
    ") + strBody.Append("• Daño físico en la caja.
    ") + strBody.Append("• Producto incompleto o distinto al solicitado.
    ") + strBody.Append("• Alguna otra situación que se considere que compromete la integridad de la mercancía.
    ") + strBody.Append("") + strBody.Append("

    ") + strBody.Append("
    ") + strBody.Append("

    ") + strBody.Append($" Aceptando a entera satisfacción a las {Today.Hour}:{Today.Minute} hrs del {Today.ToString}") + strBody.Append("

    ") + strBody.Append("
    ") + strBody.Append("

    ") + strBody.Append(" Gracias por su compra
    ") + 'strBody.Append(" Compuproveedores") + strBody.Append("

    ") + strBody.Append("

    ") + strBody.Append(" Sigue disfrutando de nuestros productos y servicios
    ") + 'strBody.Append("
    www.compuproveedores.com") + strBody.Append("") + strBody.Append("

    ") + strBody.Append(" ") + strBody.Append("") End If - Dim DetalleTable As String = "" - For Each dRow As DataRow In dtDetalle.Rows - Dim detalle As String = String.Format("{0}{1}{2}", dRow("Codigo"), dRow("Cantidad"), dRow("PS")) - DetalleTable += detalle - Next - strBody.Append("") - strBody.Append("") - strBody.Append("") - strBody.Append("") - strBody.Append(" ") - strBody.Append("
    ") - strBody.Append($"") - strBody.Append("
    ") - strBody.Append("

    ") - strBody.Append($" Apreciable {ClienteNombre}, le confirmamos los") - strBody.Append(" productos surtidos y entregados en mostrador conforme a la") - strBody.Append($" {TipoDocto}:") - strBody.Append("

    ") - strBody.Append($"

    {FolioVenta} - Pedido {Pedido} - Orden de Compra {OrdenCompra}

    ") - strBody.Append("
    ") - strBody.Append(" ") - strBody.Append(DetalleTable) - strBody.Append(" ") - strBody.Append("
    ") - strBody.Append("
    ") - strBody.Append("

    ") - strBody.Append(" Se entregaron los productos conforme a las especificaciones de su pedido y verificamos que no se presentara alguno de los siguientes inconvenientes:") - strBody.Append("

    ") - strBody.Append("

    ") - strBody.Append(" • Empaque violado.
    ") - strBody.Append("• Daño físico en la caja.
    ") - strBody.Append("• Producto incompleto o distinto al solicitado.
    ") - strBody.Append("• Alguna otra situación que se considere que compromete la integridad de la mercancía.
    ") - strBody.Append("") - strBody.Append("

    ") - strBody.Append("
    ") - strBody.Append("

    ") - strBody.Append($" Aceptando a entera satisfacción a las {Today.Hour}:{Today.Minute} hrs del {Today.ToString}") - strBody.Append("

    ") - strBody.Append("
    ") - strBody.Append("

    ") - strBody.Append(" Gracias por su compra
    ") - 'strBody.Append(" Compuproveedores") - strBody.Append("

    ") - strBody.Append("

    ") - strBody.Append(" Sigue disfrutando de nuestros productos y servicios
    ") - 'strBody.Append(" www.compuproveedores.com") - strBody.Append("") - strBody.Append("

    ") - strBody.Append(" ") - strBody.Append("") End If ObjVentas.Dispose() diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index b0aab111d..4f33f8d95 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -1267,21 +1267,23 @@ Partial Class Inventarios_RecepcionAlmacen If CBool(e.Row.DBCampo("AplicaSeccion")) Then e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True If DdlAlmacen.SelectedValue.ToEntero > 0 Then - Dim dtsec As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) - e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtsec - e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() - If dtsec.Rows.Count = 1 Then - e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedIndex = 0 - e.Row.FCDropDownList("DdlSeccionAlmacen").Enabled = False - Else 'si es mayor a uno que por default seleccione el primero, que seria el predeterminado - e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedValueExist(dtsec.FiltroPrimeroValor("CveSeccionAlmacen", "Predeterminado = 1")) - End If - e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + CargaSeccionesAlmacen(e.Row.FCDropDownList("DdlSeccionAlmacen"), DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero, UsuarioActual.CveEmpresa, True) + 'Dim dtsec As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtsec + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() + 'If dtsec.Rows.Count = 1 Then + ' e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedIndex = 0 + ' e.Row.FCDropDownList("DdlSeccionAlmacen").Enabled = False + 'Else 'si es mayor a uno que por default seleccione el primero, que seria el predeterminado + ' e.Row.FCDropDownList("DdlSeccionAlmacen").SelectedValueExist(dtsec.FiltroPrimeroValor("CveSeccionAlmacen", "Predeterminado = 1")) + 'End If - dtsec.Dispose() - End If - e.Row.FCTextBox("TxtDividir").Visible = True + 'e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + + 'dtsec.Dispose() + End If + e.Row.FCTextBox("TxtDividir").Visible = True Else e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = False From b80cb31faa2a19744e76cfaff8c80cc89eb45a84 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Fri, 31 Jul 2020 16:56:53 -0700 Subject: [PATCH 36/37] documento de entradas de almacen de uniforme corregido --- Compras/PopUpVerFactura.aspx.vb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index 1c4f06b5f..8eafbde09 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -1327,9 +1327,9 @@ Partial Class PopUpVerFactura Dim CveTipoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveTipoAlmacen", $"CveAlmacen = {CveAlmacen}").ToString.ToEntero - If CveTipoAlmacen = 19 Or CveTipoAlmacen = 20 Then - CveConcepto = 24 - End If + 'If CveTipoAlmacen = 19 Or CveTipoAlmacen = 20 Then + ' CveConcepto = 24 + 'End If ObjInventarios.Dispose() If RazonSocial = "" AndAlso NombreCliente <> "" Then RazonSocial = NombreCliente From f2ccad3c223f23cc18a046b62776c51ed6b8943d Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Fri, 31 Jul 2020 17:36:07 -0700 Subject: [PATCH 37/37] - --- AF/AF.aspx.vb | 9 +++++---- Inventarios/Apartados.aspx.vb | 5 +++-- Inventarios/ResguardoMaterial.aspx.vb | 15 ++++++++------- Inventarios/TraspasoAlmacen.aspx.vb | 15 ++++++++------- RH/Personal.aspx.vb | 1 + 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/AF/AF.aspx.vb b/AF/AF.aspx.vb index 506741f34..f4cf2ee95 100644 --- a/AF/AF.aspx.vb +++ b/AF/AF.aspx.vb @@ -3652,11 +3652,12 @@ Partial Class AF_AF DivSeccion.Visible = CBool(drr("AplicaSeccion")) DdlSeccionAlmacen.Items.Clear() If CBool(drr("AplicaSeccion")) Then - Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAFInvAlmacen.SelectedValue.ToEntero, DdlAFInvPS.SelectedValue.ToEntero) - DdlSeccionAlmacen.DataSource = dtt - DdlSeccionAlmacen.DataBind() + CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAFInvAlmacen.SelectedValue.ToEntero, DdlAFInvPS.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) + 'Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAFInvAlmacen.SelectedValue.ToEntero, DdlAFInvPS.SelectedValue.ToEntero) + 'DdlSeccionAlmacen.DataSource = dtt + 'DdlSeccionAlmacen.DataBind() - dtt.Dispose() + 'dtt.Dispose() End If diff --git a/Inventarios/Apartados.aspx.vb b/Inventarios/Apartados.aspx.vb index 6853eb7ec..f25090430 100644 --- a/Inventarios/Apartados.aspx.vb +++ b/Inventarios/Apartados.aspx.vb @@ -285,8 +285,9 @@ Partial Class Inventarios_Apartados If CBool(drP("AplicaSeccion")) Then ThSeccion.Visible = True TdSeccionAlmacen.Visible = True - DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) - DdlSeccionAlmacen.DataBind() + CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) + 'DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenOrigen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) + 'DdlSeccionAlmacen.DataBind() GvDatos.Columns(7).Visible = True End If diff --git a/Inventarios/ResguardoMaterial.aspx.vb b/Inventarios/ResguardoMaterial.aspx.vb index c2f7c86af..fb4e1fd2c 100644 --- a/Inventarios/ResguardoMaterial.aspx.vb +++ b/Inventarios/ResguardoMaterial.aspx.vb @@ -352,13 +352,14 @@ Partial Class Inventarios_ResguardoMaterial TrSeccion.Visible = True If DdlAlmacen.SelectedValue.ToEntero > 0 Then DdlSeccionAlmacen.Items.Clear() - Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) - DdlSeccionAlmacen.DataSource = dtt - DdlSeccionAlmacen.DataBind() - If dtt.Rows.Count > 1 Then - DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) - End If - dtt.Dispose() + CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) + 'Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, DdlProducto2.SelectedValue.ToEntero) + 'DdlSeccionAlmacen.DataSource = dtt + 'DdlSeccionAlmacen.DataBind() + 'If dtt.Rows.Count > 1 Then + ' DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) + 'End If + 'dtt.Dispose() End If End If 'activa lote diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index 9ce5b10d3..05c5c6f2e 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -1534,13 +1534,14 @@ Partial Class Inventarios_TraspasoAlmacen e.Row.FCTextBox("TxtCantidad").Attributes.Add("onkeyup", String.Format("ValidaCantidad(this,{0});", e.Row.DBCampo("Cantidad"))) If CBool(e.Row.DBCampo("AplicaSeccion")) AndAlso DdlAlmacenRecepcion.SelectedValue.ToEntero > 0 Then - Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenRecepcion.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) - e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt - e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() - If dtt.Rows.Count > 1 Then - e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) - End If - dtt.Dispose() + CargaSeccionesAlmacen(e.Row.FCDropDownList("DdlSeccionAlmacen"), DdlAlmacenRecepcion.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero, UsuarioActual.CveEmpresa) + 'Dim dtt As DataTable = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenRecepcion.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = dtt + 'e.Row.FCDropDownList("DdlSeccionAlmacen").DataBind() + 'If dtt.Rows.Count > 1 Then + ' e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + 'End If + 'dtt.Dispose() End If End If diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 50d0a075f..4e96f2b92 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -5103,6 +5103,7 @@ Partial Class RH_Personal If row.DataKey("AplicaSeccion").ToString = "True" Then divSeccionAlmacen.Visible = True DdlSeccionAlmacen.Items.Clear() + CargaSeccionesAlmacen(DdlSeccionAlmacen, DdlAlmacenDestinoLiberarUniforme.SelectedValue.ToEntero, CvePS, UsuarioActual.CveEmpresa) DdlSeccionAlmacen.DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenDestinoLiberarUniforme.SelectedValue.ToEntero, CvePS) DdlSeccionAlmacen.DataBind() End If