From 67aba388f54267718e2743d38733fdc56d4a31f4 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Fri, 17 Jul 2020 13:42:46 -0700 Subject: [PATCH 01/88] avance --- App_Code/ClsOIEventos.vb | 283 ++++++++++++++++++++++++++++ App_Code/ClsPaginas.vb | 2 + OI/CatDocumentoCategoria.aspx | 76 ++++++++ OI/CatDocumentoCategoria.aspx.cs | 104 ++++++++++ OI/CatDocumentoSubCategoria.aspx | 76 ++++++++ OI/CatDocumentoSubCategoria.aspx.cs | 114 +++++++++++ OI/Documentos.aspx | 49 +++++ OI/Documentos.aspx.cs | 30 +++ 8 files changed, 734 insertions(+) create mode 100644 OI/CatDocumentoCategoria.aspx create mode 100644 OI/CatDocumentoCategoria.aspx.cs create mode 100644 OI/CatDocumentoSubCategoria.aspx create mode 100644 OI/CatDocumentoSubCategoria.aspx.cs create mode 100644 OI/Documentos.aspx create mode 100644 OI/Documentos.aspx.cs diff --git a/App_Code/ClsOIEventos.vb b/App_Code/ClsOIEventos.vb index 551593b30..8a65a1f30 100644 --- a/App_Code/ClsOIEventos.vb +++ b/App_Code/ClsOIEventos.vb @@ -2743,8 +2743,291 @@ Public Class ClsOIEventos Return Retorno End Function + + #End Region +#Region "OI_Documentos" + +#Region "OI_DocumentosCategorias" + Public Function GetDocumentoCategoria(Optional CveCategoria As Integer = -1, Optional Categoria As String = "-1") As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosCategoriasGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveCategoria", SqlDbType.Int).Value = CveCategoria + .Add("@Categoria", SqlDbType.NVarChar).Value = Categoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener la categoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function AddDocumentoCategoria(Categoria As String, Estado As Boolean) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosCategoriasAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@Categoria", SqlDbType.NVarChar).Value = Categoria + .Add("@Estado", SqlDbType.Bit).Value = Estado + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar la categoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function UpdateDocumentoCategoria(CveCategoria As Integer, Categoria As String, Estado As Boolean) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosCategoriasUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveCategoria", SqlDbType.Int).Value = CveCategoria + .Add("@Categoria", SqlDbType.NVarChar).Value = Categoria + .Add("@Estado", SqlDbType.Bit).Value = Estado + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar la categoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function RemoveDocumentoCategoria(CveCategoria As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosCategoriasRemove") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveCategoria", SqlDbType.NVarChar).Value = CveCategoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar la categoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function +#End Region + +#Region "OI_DocumentosSubCategoria" + Public Function GetDocumentoSubCategoria(Optional CveSubCategoria As Integer = -1, Optional SubCategoria As String = "-1") As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosSubCategoriasGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSubCategoria", SqlDbType.Int).Value = CveSubCategoria + .Add("@SubCategoria", SqlDbType.NVarChar).Value = SubCategoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener la subcategoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function AddDocumentoSubCategoria(SubCategoria As String, CveCategoria As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosSubCategoriasAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@SubCategoria", SqlDbType.NVarChar).Value = SubCategoria + .Add("@CveCategoria", SqlDbType.Int).Value = CveCategoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar la subcategoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function UpdateDocumentoSubCategoria(CveSubCategoria As Integer, SubCategoria As String, CveCategoria As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosSubCategoriasUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSubCategoria", SqlDbType.Int).Value = CveSubCategoria + .Add("@SubCategoria", SqlDbType.NVarChar).Value = SubCategoria + .Add("@CveCategoria", SqlDbType.Int).Value = CveCategoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar la subcategoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function RemoveDocumentoSubCategoria(CveSubCategoria As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosSubCategoriasRemove") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSubCategoria", SqlDbType.NVarChar).Value = CveSubCategoria + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar la subcategoria", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function +#End Region + +#Region "Documentos" + Public Function GetDocumento(CveDocumento As Integer, CveEmpresa As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveDocumento", SqlDbType.Int).Value = CveDocumento + .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 documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function AddDocumento(CveSubCategoria As Integer, Descripcion As String, Observacion As String, Version As String, CveEstatus As Integer, ArchivoFisico As String, + Responsable As String, FechaAprobacion As Date, CveDocumentoPadre As Integer, CveUsuario As Integer, CveEmpresa As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveSubCategoria", SqlDbType.Int).Value = CveSubCategoria + .Add("@Descripcion", SqlDbType.NVarChar).Value = Descripcion + .Add("@Observacion", SqlDbType.NVarChar).Value = Observacion + .Add("@Version", SqlDbType.NVarChar).Value = Version + .Add("@CveEstatus", SqlDbType.Int).Value = CveEstatus + .Add("@ArchivoFisico", SqlDbType.NVarChar).Value = ArchivoFisico + .Add("@Responsable", SqlDbType.NVarChar).Value = Responsable + .Add("@FechaAprobacion", SqlDbType.Date).Value = FechaAprobacion + .Add("@CveDocumentoPadre", SqlDbType.Int).Value = CveDocumentoPadre + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar el Documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function UpdateDocumento(CveDocumento As Integer, CveSubCategoria As Integer, Descripcion As String, Observacion As String, Version As String, CveEstatus As Integer, ArchivoFisico As String, + Responsable As String, FechaAprobacion As Date, CveDocumentoPadre As Integer, CveUsuario As Integer, CveEmpresa As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveDocumento", SqlDbType.Int).Value = CveDocumento + .Add("@CveSubCategoria", SqlDbType.Int).Value = CveSubCategoria + .Add("@Descripcion", SqlDbType.NVarChar).Value = Descripcion + .Add("@Observacion", SqlDbType.NVarChar).Value = Observacion + .Add("@Version", SqlDbType.NVarChar).Value = Version + .Add("@CveEstatus", SqlDbType.Int).Value = CveEstatus + .Add("@ArchivoFisico", SqlDbType.NVarChar).Value = ArchivoFisico + .Add("@Responsable", SqlDbType.NVarChar).Value = Responsable + .Add("@FechaAprobacion", SqlDbType.Date).Value = FechaAprobacion + .Add("@CveDocumentoPadre", SqlDbType.Int).Value = CveDocumentoPadre + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualizar el Documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function RemoveDocumento(CveDocumento As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosRemove") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveDocumento", SqlDbType.Int).Value = CveDocumento + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar el documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function +#End Region + +#End Region ' IDisposable Protected Overridable Sub Dispose(ByVal disposing As Boolean) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 9a4c0c915..5e207a0c5 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4552,6 +4552,8 @@ Public Class ClsPaginas PaginaDict.Add("/OI/RepDesarrollo.aspx".ToUpper(), 475) PaginaDict.Add("/OI/DesarrolloWizard.aspx".ToUpper(), 474) PaginaDict.Add("/OI/SubidasADS.aspx".ToUpper(), 476) + PaginaDict.Add("/OI/CatDocumentoCategoria.aspx".ToUpper(), 760) + PaginaDict.Add("/OI/CatDocumentoSubCategoria.aspx".ToUpper(), 761) #End Region #Region "Planeacion" 'PLANEACIÓN diff --git a/OI/CatDocumentoCategoria.aspx b/OI/CatDocumentoCategoria.aspx new file mode 100644 index 000000000..e935eec64 --- /dev/null +++ b/OI/CatDocumentoCategoria.aspx @@ -0,0 +1,76 @@ +<%@ Page Title="OI - Catálogo de Categorías de Documentos" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CatDocumentoCategoria.aspx.cs" Inherits="OI_CatDocumentoCategoria" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Catálogo de Categorías de Documentos + + + + +
  • + +
  • + +
    +
    +
    + + + + + + + + + + + <%----%> + + + + + + + + + + + diff --git a/OI/CatDocumentoCategoria.aspx.cs b/OI/CatDocumentoCategoria.aspx.cs new file mode 100644 index 000000000..8efdf08c4 --- /dev/null +++ b/OI/CatDocumentoCategoria.aspx.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using Extensiones; +using System.Data; + +public partial class OI_CatDocumentoCategoria : ClsPaginas +{ + + private int CveCategoria + { + get + { + return ViewState["CveCategoria"].ToString().ToEntero(); + } + + set + { + ViewState["CveCategoria"] = value; + } + } + + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + CargaDatos(); + } + } + + private void CargaDatos() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumentoCategoria()) + { + GvDatos.DataSource = ObjOI.DtResultados; + GvDatos.DataBind(); + } + ObjOI.Dispose(); + } + + protected void BtnAgregarCategoria_Click(object sender, EventArgs e) + { + BtnAgregarCategoriaDoc.Text = "Agregar"; + TxtCategoria.Text = ""; + ChkEstatus.Checked = true; + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void LnkEditar_Click(object sender, EventArgs e) + { + BtnAgregarCategoriaDoc.Text = "Actualizar"; + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + CveCategoria = GvRow.DataKey("CveCategoria").ToEntero(); + TxtCategoria.Text = GvRow.DataKey("Categoria"); + ChkEstatus.Checked = GvRow.DataKey("Estado").ToString() == "True"; + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void LnkEliminar_Click(object sender, EventArgs e) + { + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + CveCategoria = GvRow.DataKey("CveCategoria").ToEntero(); + ClsCompras ObjCompras = new ClsCompras(); + if (ObjCompras.RemoveTipoGasto(CveCategoria)) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se eliminó la Categoría de Documento correctamente"); + } + ObjCompras.Dispose(); + } + + protected void BtnAgregarCategoriaDoc_Click(object sender, EventArgs e) + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (BtnAgregarCategoriaDoc.Text == "Agregar") + { + if (ObjOI.AddDocumentoCategoria(TxtCategoria.Text,ChkEstatus.Checked)) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se agregó la Categoría de Documento correctamente"); + } + }else + { + if (ObjOI.UpdateDocumentoCategoria(CveCategoria,TxtCategoria.Text,ChkEstatus.Checked)) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se actualizó la Categoría de Documento correctamente"); + } + } + ObjOI.Dispose(); + } +} \ No newline at end of file diff --git a/OI/CatDocumentoSubCategoria.aspx b/OI/CatDocumentoSubCategoria.aspx new file mode 100644 index 000000000..a7986a1bd --- /dev/null +++ b/OI/CatDocumentoSubCategoria.aspx @@ -0,0 +1,76 @@ +<%@ Page Title="OI - Catálogo de Subcategorías de Documentos" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="CatDocumentoSubCategoria.aspx.cs" Inherits="OI_CatDocumentoSubCategoria" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Catálogo de Subcategorías de Documentos + + + + +
  • + +
  • + +
    +
    +
    + + + + + + + + + + + <%----%> + + + + + + + + + + + diff --git a/OI/CatDocumentoSubCategoria.aspx.cs b/OI/CatDocumentoSubCategoria.aspx.cs new file mode 100644 index 000000000..709f6e89a --- /dev/null +++ b/OI/CatDocumentoSubCategoria.aspx.cs @@ -0,0 +1,114 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using Extensiones; +using System.Data; + +public partial class OI_CatDocumentoSubCategoria : ClsPaginas +{ + private int CveSubCategoria + { + get + { + return ViewState["CveSubCategoria"].ToString().ToEntero(); + } + + set + { + ViewState["CveSubCategoria"] = value; + } + } + + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + CargaDatos(); + CargaCategoria(); + } + } + + private void CargaDatos() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumentoSubCategoria()) + { + GvDatos.DataSource = ObjOI.DtResultados; + GvDatos.DataBind(); + } + ObjOI.Dispose(); + } + + private void CargaCategoria() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumentoCategoria()) + { + DdlCategorias.DataSource = ObjOI.DtResultados.FiltraParametros("Estado = 1"); + DdlCategorias.DataBind(); + } + ObjOI.Dispose(); + } + + protected void BtnAgregarSubCategoria_Click(object sender, EventArgs e) + { + BtnAgregarSubCategoriaDoc.Text = "Agregar"; + TxtSubCategoria.Text = ""; + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void LnkEditar_Click(object sender, EventArgs e) + { + BtnAgregarSubCategoriaDoc.Text = "Actualizar"; + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + CveSubCategoria = GvRow.DataKey("CveSubCategoria").ToEntero(); + TxtSubCategoria.Text = GvRow.DataKey("SubCategoria"); + UpModalTiposD.Update(); + RegistraScript(String.Format("$('#{0}').modal();", "DivAgregarTiposD")); + } + + protected void LnkEliminar_Click(object sender, EventArgs e) + { + GridViewRow GvRow = (GridViewRow)(((LinkButton)sender).NamingContainer); + CveSubCategoria = GvRow.DataKey("CveSubCategoria").ToEntero(); + ClsCompras ObjCompras = new ClsCompras(); + if (ObjCompras.RemoveTipoGasto(CveSubCategoria)) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se eliminó la Categoría de Documento correctamente"); + } + ObjCompras.Dispose(); + } + + protected void BtnAgregarSubCategoriaDoc_Click(object sender, EventArgs e) + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (BtnAgregarSubCategoriaDoc.Text == "Agregar") + { + if (ObjOI.AddDocumentoSubCategoria(TxtSubCategoria.Text, DdlCategorias.SelectedValue.ToEntero())) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se agregó la Categoría de Documento correctamente"); + } + } + else + { + if (ObjOI.UpdateDocumentoSubCategoria(CveSubCategoria, TxtSubCategoria.Text, DdlCategorias.SelectedValue.ToEntero())) + { + CargaDatos(); + UpDatos.Update(); + RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAgregarTiposD")); + Alert("Se actualizó la Categoría de Documento correctamente"); + } + } + ObjOI.Dispose(); + } +} \ No newline at end of file diff --git a/OI/Documentos.aspx b/OI/Documentos.aspx new file mode 100644 index 000000000..31ddb86a4 --- /dev/null +++ b/OI/Documentos.aspx @@ -0,0 +1,49 @@ +<%@ Page Title="OI - Documentos" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Documentos.aspx.cs" Inherits="OI_Documentos" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Documentos + + + + +
  • + +
  • + +
    +
    +
    + + + + + + + + + + + + + + <%-- + --%> + + + + + + + + + + diff --git a/OI/Documentos.aspx.cs b/OI/Documentos.aspx.cs new file mode 100644 index 000000000..e087c71c9 --- /dev/null +++ b/OI/Documentos.aspx.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using Extensiones; +using System.Data; + +public partial class OI_Documentos : ClsPaginas +{ + protected void Page_Load(object sender, EventArgs e) + { + if (!IsPostBack) + { + CargaDatos(); + } + } + + private void CargaDatos() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumento(-1,UsuarioActual.CveEmpresa)) + { + GvDatos.DataSource = ObjOI.DtResultados; + GvDatos.DataBind(); + } + ObjOI.Dispose(); + } +} \ No newline at end of file From aaed1507dffb78e3974da8722f684e469ade8968 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Fri, 17 Jul 2020 15:31:07 -0700 Subject: [PATCH 02/88] - --- App_Code/ClsPaginas.vb | 2 ++ OI/DocumentoDetalle.aspx | 33 +++++++++++++++++++++++++++++++++ OI/DocumentoDetalle.aspx.cs | 16 ++++++++++++++++ OI/Documentos.aspx | 11 ++++++++--- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 OI/DocumentoDetalle.aspx create mode 100644 OI/DocumentoDetalle.aspx.cs diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 5e207a0c5..724b8b4e4 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4554,6 +4554,8 @@ Public Class ClsPaginas PaginaDict.Add("/OI/SubidasADS.aspx".ToUpper(), 476) PaginaDict.Add("/OI/CatDocumentoCategoria.aspx".ToUpper(), 760) PaginaDict.Add("/OI/CatDocumentoSubCategoria.aspx".ToUpper(), 761) + PaginaDict.Add("/OI/Documentos.aspx".ToUpper(), 762) + PaginaDict.Add("/OI/DocumentoDetalle.aspx".ToUpper(), 763) #End Region #Region "Planeacion" 'PLANEACIÓN diff --git a/OI/DocumentoDetalle.aspx b/OI/DocumentoDetalle.aspx new file mode 100644 index 000000000..c68c94b1e --- /dev/null +++ b/OI/DocumentoDetalle.aspx @@ -0,0 +1,33 @@ +<%@ Page Title="OI - Documentos detalle" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="DocumentoDetalle.aspx.cs" Inherits="OI_DocumentoDetalle" %> + +<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> + + + + + + + + Documentos detalle + + + + + <%--
  • + +
  • +
  • + Imprimir PDF +
  • +
  • + Imprimir Excel +
  • --%> +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs new file mode 100644 index 000000000..bc578cd90 --- /dev/null +++ b/OI/DocumentoDetalle.aspx.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Web; +using System.Web.UI; +using System.Web.UI.WebControls; +using Extensiones; +using System.Data; + +public partial class OI_DocumentoDetalle : ClsPaginas +{ + protected void Page_Load(object sender, EventArgs e) + { + + } +} \ No newline at end of file diff --git a/OI/Documentos.aspx b/OI/Documentos.aspx index 31ddb86a4..724ec70d8 100644 --- a/OI/Documentos.aspx +++ b/OI/Documentos.aspx @@ -16,15 +16,20 @@
  • - +
  • + Imprimir PDF +
  • +
  • + Imprimir Excel +
  • - From 2b35950c0e91d54a86a67c9a02708b0006b8c638 Mon Sep 17 00:00:00 2001 From: Rakcsle Supertramp Date: Sat, 18 Jul 2020 13:49:51 -0700 Subject: [PATCH 03/88] Entradas salidas --- App_Code/ClsPaginas.vb | 8 +++++++- Inventarios/EntradasSalidas.aspx | 17 ++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 826659d4d..31e46852b 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1460,7 +1460,13 @@ Public Class ClsPaginas If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Then Dim ObjBancos As New ClsBancos If ObjBancos.GetBancosCuentasUsuarios(-1) Then - Application(AppNombre) = ObjBancos.DtResultados + + If CveEmpresa > 0 Then + Application(AppNombre) = ObjBancos.DtResultados.FiltraParametros($"CveEmpresa = { CveEmpresa }") + Else + Application(AppNombre) = ObjBancos.DtResultados + End If + Else Application(AppNombre) = Nothing End If diff --git a/Inventarios/EntradasSalidas.aspx b/Inventarios/EntradasSalidas.aspx index 6114ccac7..317886ea8 100644 --- a/Inventarios/EntradasSalidas.aspx +++ b/Inventarios/EntradasSalidas.aspx @@ -1049,7 +1049,9 @@
    - <%----%> + + +
    @@ -1062,6 +1064,19 @@ + + + + + + + + + + + + + From a9cf1de47015fbed5245e0d8c79b230e8622d9e8 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 18 Jul 2020 18:44:15 -0700 Subject: [PATCH 04/88] -- ajustes de serie/lote/caducidad --- Inventarios/InventarioFisicoDetalle.aspx | 18 ++-- Inventarios/InventarioFisicoDetalle.aspx.vb | 95 ++++++++++++++------- Inventarios/RepAnomalias.aspx | 4 +- Inventarios/RepAnomalias.aspx.vb | 2 +- 4 files changed, 78 insertions(+), 41 deletions(-) diff --git a/Inventarios/InventarioFisicoDetalle.aspx b/Inventarios/InventarioFisicoDetalle.aspx index c702804ee..48a1e6086 100644 --- a/Inventarios/InventarioFisicoDetalle.aspx +++ b/Inventarios/InventarioFisicoDetalle.aspx @@ -240,23 +240,23 @@ - -
    - -
    - -
    -
    +
    + + +
    + + +
    @@ -325,7 +325,7 @@ - + @@ -349,7 +349,7 @@ - + diff --git a/Inventarios/InventarioFisicoDetalle.aspx.vb b/Inventarios/InventarioFisicoDetalle.aspx.vb index 208728062..3bfb676f9 100644 --- a/Inventarios/InventarioFisicoDetalle.aspx.vb +++ b/Inventarios/InventarioFisicoDetalle.aspx.vb @@ -88,10 +88,8 @@ Partial Class Inventarios_InventarioFisicoDetalle #Region " CARGA DATOS " Private Sub CargaDatos(CveInventarioFisico As Integer, CveEmpresa As Integer, Optional CveUsuario As Integer = -1) - Dim ObjInventario As New ClsInventarios - DdlSeccionAlmacen.DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, -1) - DdlSeccionAlmacen.DataBind() - DdlSeccionAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1")) + Dim ObjInventario As New ClsInventarios + If ObjInventario.GetInventarioFisico(CveInventarioFisico, CveEmpresa, -1, -1) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim CveEstatus = ObjInventario.DtResultados.FiltroPrimeroValor("CveEstatus") Select Case CveEstatus @@ -230,9 +228,9 @@ Partial Class Inventarios_InventarioFisicoDetalle Dim Inventario As New ClsInventarios If Inventario.GetInventarioFisicoDetalle(CveInventarioFisico, ddlUsuario.SelectedValue.ToString.ToEntero) Then If Inventario.DtResultados.Rows.Count > 0 Then - GvIFD.Columns(4).Visible = Inventario.DtResultados.MAX("CveSeccionAlmacen") > 0 + GvIFD.Columns(4).Visible = Inventario.DtResultados.MAX("CveSeccionAlmacen", "CveSeccionAlmacen IS NOT NULL").ToEntero > 0 GvIFD.Columns(6).Visible = Inventario.DtResultados.MAX("Lote") <> "" - GvIFD.Columns(7).Visible = Inventario.DtResultados.MAX("FechaCaducidad").ToDate > MinFecha + GvIFD.Columns(7).Visible = Inventario.DtResultados.MAX("FechaCaducidad", "FechaCaducidad IS NOT NULL").ToDate > MinFecha GvIFD.DataSource = Inventario.DtResultados '.AsEnumerable.OrderByDescending(Function(k) k!CveInventarioFisicoDetalle).Take(500).CopyToDataTable Else GvIFD.DataSource = Nothing @@ -259,48 +257,83 @@ Partial Class Inventarios_InventarioFisicoDetalle Dim CveUnidadMedida As Integer Dim Codigo As String = If(TxtCodigo.Text.Trim <> "", TxtCodigo.Text.Trim, "-1").Replace("'", "''") ' scanner cambian los guiones por apostrofes Dim CodigoBarras As String = If(TxtCodigoBarras.Text.Trim <> "", TxtCodigoBarras.Text.Trim, "-1").Replace("'", "''") ' scanner cambian los guiones por apostrofes - Dim SeccionAlmacen As String = If(DdlSeccionAlmacen.SelectedValue.ToEntero > -1, DdlSeccionAlmacen.SelectedItem.Text, "") - Dim CveSeccionAlmacen As Integer = If(DdlSeccionAlmacen.SelectedValue.ToEntero > 0, DdlSeccionAlmacen.SelectedValue.ToEntero, -1) - Dim SerieLote As String = TxtCodigoSerie.Text.Trim + Dim Serie As String = TxtCodigoSerie.Text.Trim Dim Lote As String = If(TxtLote.Text.Length > 0, TxtLote.Text, "-1") - Dim FechaCaducidad As String = If(TxtFechaCaducidad.Text.Length > 0, TxtFechaCaducidad.Text, MinFecha.ToString) - Dim CveMetodoInv As Integer = -1 + Dim FechaCaducidad As String=MinFecha.ToString + Dim CveSeccionAlmacen As Integer = -1 + Dim Cantidad = TxtCantidadProducto.Text.ToDouble Dim dr As DataRow - dr = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{CodigoBarras}' OR Codigo = '{Codigo}' ") - - If dr IsNot Nothing Then - CveMetodoInv = dr("Inv_CveMetodoInventario").ToString.ToEntero + 'dr = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{CodigoBarras}' OR Codigo = '{Codigo}' ") + dr = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{CodigoBarras}' OR Codigo = '{Codigo}'") + + + + If dr IsNot Nothing Then + CveProducto = dr("CvePS").ToString.ToEntero - CveUnidadMedida = dr("CveUnidadMedida").ToString.ToEntero + CveUnidadMedida = dr("CveUnidadMedida").ToString.ToEntero + 'Dim AplicaSeccion As Boolean = dr("AplicaSeccion") = "1" + Dim AplicaCaducidad As Boolean = dr("AplicaCaducidad") = "1" + Dim AplicaLote As Boolean = dr("AplicaLote") = "1" + Dim AplicaSerie As Boolean = dr("AplicaSerie") = "1" + + 'divSeccionAlmacen.Visible = AplicaSeccion + divLote.Visible = AplicaLote + divFechaCaducidad.Visible = AplicaCaducidad + divSerie.Visible = AplicaSerie + UPAgregarPro.Update() - If CveMetodoInv = 5 And SerieLote = "" Then + If AplicaSerie And Serie = "" Then RFVSerie.Enabled = True RFVSerie.Visible = True RFVSerie.SetFocusOnError = True RFVSerie.Validate() RFVSerie.ValidationGroup = " " Exit Sub + End If + If AplicaLote And Lote = "" Then + RFVLote.Enabled = True + RFVLote.Visible = True + RFVLote.SetFocusOnError = True + RFVLote.Validate() + RFVLote.ValidationGroup = " " + Exit Sub End If + If AplicaCaducidad Then + If TxtFechaCaducidad.Text.Trim = "" Then + RFVCaducidad.Enabled = True + RFVCaducidad.Visible = True + RFVCaducidad.SetFocusOnError = True + RFVCaducidad.Validate() + RFVCaducidad.ValidationGroup = " " + Exit Sub + End If + FechaCaducidad = If(TxtFechaCaducidad.Text.Length > 0, TxtFechaCaducidad.Text, MinFecha.ToString) + End If RFVSerie.ValidationGroup = "GrpIngresar" RFVSerie.Enabled = False - - '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) + RFVLote.ValidationGroup = "GrpIngresar" + RFVLote.Enabled = False + RFVCaducidad.ValidationGroup = "GrpIngresar" + RFVCaducidad.Enabled = False + + 'VALIDA QUE LA SERIE NO SEA IGUAL AL CODIGO O CODIGOBARRAS + If Serie <> "" And (Serie.ToUpper = dr("Codigo").ToString.ToUpper Or Serie.ToUpper = dr("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 Dim Consulto As Boolean = False Using Inventarios As New ClsInventarios - If Inventarios.AddInventarioFisicoDetalle(CveInventarioFisico, CveProducto, CveUnidadMedida, If(CveMetodoInv = 5, 1, Cantidad), SerieLote, UsuarioActual.CveUsuario, - CveSeccionAlmacen:=CveSeccionAlmacen, Lote:=Lote, FechaCaducidad:=FechaCaducidad.ToDate) Then + If Inventarios.AddInventarioFisicoDetalle(CveInventarioFisico, CveProducto, CveUnidadMedida, If(AplicaSerie, 1, Cantidad), Serie, UsuarioActual.CveUsuario, + CveSeccionAlmacen:=-1, Lote:=Lote, FechaCaducidad:=FechaCaducidad.ToDate) Then GvIFDUltimoRegistrado.Columns(4).Visible = CveSeccionAlmacen > 0 - GvIFDUltimoRegistrado.Columns(5).Visible = SerieLote <> "-1" + GvIFDUltimoRegistrado.Columns(5).Visible = Serie <> "-1" GvIFDUltimoRegistrado.Columns(6).Visible = Lote <> "-1" GvIFDUltimoRegistrado.Columns(7).Visible = FechaCaducidad <> "01/01/1900" @@ -310,7 +343,7 @@ Partial Class Inventarios_InventarioFisicoDetalle GvIFDUltimoRegistrado.Rows(0).Cells(1).Text = dr("CodigoBarras").ToString GvIFDUltimoRegistrado.Rows(0).Cells(2).Text = dr("Codigo").ToString GvIFDUltimoRegistrado.Rows(0).Cells(3).Text = dr("PS").ToString - GvIFDUltimoRegistrado.Rows(0).Cells(4).Text = SeccionAlmacen + GvIFDUltimoRegistrado.Rows(0).Cells(4).Text = "" GvIFDUltimoRegistrado.Rows(0).Cells(5).Text = TxtCodigoSerie.Text.Trim GvIFDUltimoRegistrado.Rows(0).Cells(6).Text = Lote GvIFDUltimoRegistrado.Rows(0).Cells(7).Text = FechaCaducidad @@ -332,9 +365,11 @@ Partial Class Inventarios_InventarioFisicoDetalle TxtCodigoSerie.Text = "" TxtCodigo.Text = "" TxtCantidadProducto.Text = "1" - DdlSeccionAlmacen.SelectedValue = "-1" TxtLote.Text = "" TxtFechaCaducidad.Text = "" + divLote.Visible = False + divFechaCaducidad.Visible = False + divSerie.Visible = False RegistraScript("playsonidito('beep-07.wav')") Else TxtCodigoSerie.Text = "" @@ -346,8 +381,10 @@ Partial Class Inventarios_InventarioFisicoDetalle Else TxtCodigoBarras.Text = "" TxtCodigoSerie.Text = "" - TxtCodigo.Text = "" - DdlSeccionAlmacen.SelectedValue = "-1" + TxtCodigo.Text = "" + divLote.Visible = False + divFechaCaducidad.Visible = False + divSerie.Visible = False TxtLote.Text = "" TxtFechaCaducidad.Text = "" Alert("No se encontró el producto, favor de escribirlo correctamente.", TipoMensaje.MsgError) @@ -530,7 +567,7 @@ Partial Class Inventarios_InventarioFisicoDetalle Dim AplicaLote As Boolean = Producto("AplicaLote") = "1" Dim AplicaSerie As Boolean = Producto("AplicaSerie") = "1" - divSeccionAlmacen.Visible = AplicaSeccion + 'divSeccionAlmacen.Visible = AplicaSeccion divLote.Visible = AplicaLote divFechaCaducidad.Visible = AplicaCaducidad divSerie.Visible = AplicaSerie diff --git a/Inventarios/RepAnomalias.aspx b/Inventarios/RepAnomalias.aspx index 8d3185711..3751b969e 100644 --- a/Inventarios/RepAnomalias.aspx +++ b/Inventarios/RepAnomalias.aspx @@ -200,7 +200,7 @@ - + @@ -234,7 +234,7 @@ - + diff --git a/Inventarios/RepAnomalias.aspx.vb b/Inventarios/RepAnomalias.aspx.vb index a239ccbab..a71900ab2 100644 --- a/Inventarios/RepAnomalias.aspx.vb +++ b/Inventarios/RepAnomalias.aspx.vb @@ -275,7 +275,7 @@ Partial Class Inventarios_RepAnomalias Private Sub BanderaSerieLoteCad(Gv As GridView, resultado As DataTable) Gv.Columns(4).Visible = resultado.MAX("Serie") <> "" Gv.Columns(5).Visible = resultado.MAX("Lote") <> "" - Gv.Columns(6).Visible = resultado.MAX("FechaCaducidad") <> "" + Gv.Columns(6).Visible = resultado.MAX("FechaCaducidad").ToDate > MinFecha End Sub End Class From c69ef11e8b07546b26d0b66ff0ca585d5fb1e380 Mon Sep 17 00:00:00 2001 From: rrene Date: Sat, 18 Jul 2020 18:45:18 -0700 Subject: [PATCH 05/88] cargas de subproyectos --- App_Code/ClsPaginas.vb | 10 +++++----- Ventas/Ventas.aspx.vb | 8 ++++---- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 826659d4d..8f6a1371d 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -8073,7 +8073,7 @@ Public Class ClsPaginas End Sub #End Region - Public Sub CargarCentrosDeCosto(DdlProyecto As DropDownList, DdlSubProyecto As DropDownList, LthProyectoP As Label, LblSubProyecto As Label) + Public Sub CargarCentrosDeCosto(DdlProyecto As DropDownList, DdlSubProyecto As DropDownList, LthProyectoP As Label, LblSubProyecto As Label, Optional AplicaTodos As String = "Todos") Select Case UsuarioActual.Empresa.Tipo_CentroCosto Case 1 If DdlProyecto IsNot Nothing Then DdlProyecto.Visible = False @@ -8096,15 +8096,15 @@ Public Class ClsPaginas End Select If DdlProyecto IsNot Nothing Then - DdlProyecto.DataSource = If(UsuarioActual.Empresa.Funcionalidad(102) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(110), GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1).FiltraParametros("", "", {"CveProyecto", "Proyecto"}), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1).FiltraParametros("", "", {"CveProyecto", "Proyecto"})) + DdlProyecto.DataSource = If(Not UsuarioActual.TienePermisoProceso(110), GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1).FiltraParametros("", "", {"CveProyecto", "Proyecto"}), GlobalDTProyectos(UsuarioActual.CveEmpresa, -1).FiltraParametros("", "", {"CveProyecto", "Proyecto"})) DdlProyecto.DataBind() - DdlProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) + If AplicaTodos <> "" Then DdlProyecto.Items.Insert(0, New ListItem(AplicaTodos, "-1")) End If If DdlSubProyecto IsNot Nothing Then - 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.DataSource = If(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")) + If AplicaTodos <> "" Then DdlSubProyecto.Items.Insert(0, New ListItem(AplicaTodos, "-1")) End If End Sub End Class diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index bfca81a44..c2c4b072e 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -2451,8 +2451,8 @@ Partial Class Ventas CargaFletes() - CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyectoHeader, LblSubProyecto) - CargarCentrosDeCosto(DdlProyectoPyME, DdlSubProyectoPyME, LblProyectoPyME, LblSubProyectoPyME) + CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyectoHeader, LblSubProyecto, AplicaTodos:="") + CargarCentrosDeCosto(DdlProyectoPyME, DdlSubProyectoPyME, LblProyectoPyME, LblSubProyectoPyME, AplicaTodos:="") BrSubProyecto.Visible = DdlProyecto.Visible divProyectoPyME.Visible = DdlProyecto.Visible @@ -14418,8 +14418,8 @@ Partial Class Ventas DdlSubProyecto.Items.Clear() DdlSubProyecto.DataSource = DTSucursal - DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) - DdlSubProyecto.SelectedValue = "-1" + 'DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) + 'DdlSubProyecto.SelectedValue = "-1" DdlSubProyecto.DataBind() DdlSubProyecto.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) CambiaSucursal() From 101d25850db9c262543230b259733def86872954 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Mon, 20 Jul 2020 10:27:54 -0700 Subject: [PATCH 06/88] --- .gitignore | 1 + App_Code/WsSigfox.vb | 18 +++++++++++------- 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 RH/Personal.aspx | 10 +++++----- Site.master.vb | 2 +- packages.config | 11 +++++++++-- vwd.webinfo | 2 ++ 9 files changed, 29 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index 7462e83a5..609c288bd 100644 --- a/.gitignore +++ b/.gitignore @@ -273,3 +273,4 @@ __pycache__/ /Default.aspx.cs /App_WebReferences/WSRDLC /wwwSIGGIT.rar +/Front diff --git a/App_Code/WsSigfox.vb b/App_Code/WsSigfox.vb index 767dcf9e4..225d6c984 100644 --- a/App_Code/WsSigfox.vb +++ b/App_Code/WsSigfox.vb @@ -27,8 +27,8 @@ Namespace Sigfox 'respuesta.Datos = Datos Dim DevID As String = params.device - Dim Lat As Double = params.lat.ToDouble() - Dim Lng As Double = params.lng.ToDouble() + Dim Lat As Double = 90 'params.lat.ToDouble() + Dim Lng As Double = 90 'params.lng.ToDouble() Dim Fecha As DateTime = params.time.ToDouble().ConvertFromUnixTimestamp() Dim Velocidad As Double = 0 Dim MessageType As Integer = 0 @@ -68,12 +68,16 @@ Namespace Sigfox End Try Dim response As HttpResponseMessage - If datos.Length > 0 Then - Dim jsonString As String = $"{{""{params.device}"":{{""downlinkData"":""{datos}""}}}}" - response = Me.Request.CreateResponse(HttpStatusCode.OK) - response.Content = New StringContent(jsonString, Encoding.UTF8, "application/json") + If respuesta.Correcto Then + If datos.Length > 0 Then + response = Me.Request.CreateResponse(HttpStatusCode.OK) + response.Content = New StringContent($"{{""{params.device}"":{{""downlinkData"":""{datos}""}}}}", Encoding.UTF8, "application/json") + Else + response = Request.CreateResponse(HttpStatusCode.NoContent, "") + End If Else - response = Request.CreateResponse(HttpStatusCode.NoContent, "") + response = Me.Request.CreateResponse(HttpStatusCode.OK) + response.Content = New StringContent($"{{""Fail"":{{""Msg"":""Ocurrió un error al agregar la trama""}}}}", Encoding.UTF8, "application/json") End If Return response End Function 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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�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/RH/Personal.aspx b/RH/Personal.aspx index b9c257e6c..ca03ca3c4 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -1313,30 +1313,30 @@

    - + - + <%----%>
    - + <%----%>
    - + <%----%> diff --git a/Site.master.vb b/Site.master.vb index c8b8f0dfd..42789c4a8 100644 --- a/Site.master.vb +++ b/Site.master.vb @@ -455,7 +455,7 @@ Partial Class Site If objgen.DtResultados.Rows.Count > 0 Then For Each dtrow As DataRow In objgen.DtResultados.Rows If dtrow("Contador").ToString().ToEntero() > 0 Then - Notificaciones.Append(ItemNotificaciones(String.Format("Se registro una solicitud de descarga del sat con {0} XML del SAT", dtrow("Contador")), Ico:="fa fa-tags", Tipo:="info", Link:=String.Format("javascript:$('#{0}').val({1});$('#{2}').click();", TxtCveNotisat.ClientID, dtrow("CveSolicitudSat").ToString().ToEntero(), btnoknotisat.ClientID), tonewpage:=False)) ' + Notificaciones.Append(ItemNotificaciones(String.Format("Se registro una solicitud de descarga del SAT con {0} XML", dtrow("Contador")), Ico:="fa fa-tags", Tipo:="info", Link:=String.Format("javascript:$('#{0}').val({1});$('#{2}').click();", TxtCveNotisat.ClientID, dtrow("CveSolicitudSat").ToString().ToEntero(), btnoknotisat.ClientID), tonewpage:=False)) ' countNotificaciones = countNotificaciones + 1 End If diff --git a/packages.config b/packages.config index 40443914d..1853710ba 100644 --- a/packages.config +++ b/packages.config @@ -17,9 +17,14 @@ - + + + + - + + + @@ -28,8 +33,10 @@ + + \ No newline at end of file diff --git a/vwd.webinfo b/vwd.webinfo index 65b4102ee..6a84ef014 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -80,6 +80,8 @@ + + From 1bf14135c2c22c294cff6239f9663fc8e6af31c1 Mon Sep 17 00:00:00 2001 From: Rakcsle Supertramp Date: Mon, 20 Jul 2020 11:54:24 -0700 Subject: [PATCH 07/88] =?UTF-8?q?RepAnexoCatalogo,=20RepBalanzeComprobacio?= =?UTF-8?q?n,=20RepmovimientosAuxiliares=20=20=20validaci=C3=B3n=20formato?= =?UTF-8?q?s=20de=20fecha=20y=20cuenta=20requerida.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Contabilidad2/RepAnexoCatalogo.aspx | 20 +++++++++++++++++-- Contabilidad2/RepBalanzaComprobacion.aspx | 18 ++++++++++++++--- .../RepMovimientosAuxiliaresCatalogo.aspx | 14 ++++++++----- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/Contabilidad2/RepAnexoCatalogo.aspx b/Contabilidad2/RepAnexoCatalogo.aspx index 25b3cdce0..492905e64 100644 --- a/Contabilidad2/RepAnexoCatalogo.aspx +++ b/Contabilidad2/RepAnexoCatalogo.aspx @@ -31,7 +31,7 @@ - +
    - + + + + +
    diff --git a/Contabilidad2/RepMovimientosAuxiliaresCatalogo.aspx b/Contabilidad2/RepMovimientosAuxiliaresCatalogo.aspx index b650f8c53..036079ba9 100644 --- a/Contabilidad2/RepMovimientosAuxiliaresCatalogo.aspx +++ b/Contabilidad2/RepMovimientosAuxiliaresCatalogo.aspx @@ -35,7 +35,7 @@
    - +
    @@ -50,8 +50,8 @@ - - + +
    @@ -65,8 +65,8 @@ - - + +
    @@ -82,6 +82,10 @@ + + + + From 1868bffe8c21ca98ed41a9082471a6e4d2de51fa Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Mon, 20 Jul 2020 18:22:26 -0700 Subject: [PATCH 08/88] avance de insert y update --- App_Code/ClsOIEventos.vb | 52 +++++++- OI/DocumentoDetalle.aspx | 93 ++++++++++++- OI/DocumentoDetalle.aspx.cs | 253 +++++++++++++++++++++++++++++++++++- 3 files changed, 391 insertions(+), 7 deletions(-) diff --git a/App_Code/ClsOIEventos.vb b/App_Code/ClsOIEventos.vb index 8a65a1f30..4e36ab9e0 100644 --- a/App_Code/ClsOIEventos.vb +++ b/App_Code/ClsOIEventos.vb @@ -2944,9 +2944,9 @@ Public Class ClsOIEventos End Function Public Function AddDocumento(CveSubCategoria As Integer, Descripcion As String, Observacion As String, Version As String, CveEstatus As Integer, ArchivoFisico As String, - Responsable As String, FechaAprobacion As Date, CveDocumentoPadre As Integer, CveUsuario As Integer, CveEmpresa As Integer) As Boolean + Responsable As String, CveDocumentoPadre As Integer, CveUsuario As Integer, CveEmpresa As Integer) As Integer - Dim Retorno As Boolean = False + Dim Retorno As Integer = -1 DataAdapter("PA_OI_DocumentosAdd") @@ -2958,15 +2958,15 @@ Public Class ClsOIEventos .Add("@CveEstatus", SqlDbType.Int).Value = CveEstatus .Add("@ArchivoFisico", SqlDbType.NVarChar).Value = ArchivoFisico .Add("@Responsable", SqlDbType.NVarChar).Value = Responsable - .Add("@FechaAprobacion", SqlDbType.Date).Value = FechaAprobacion .Add("@CveDocumentoPadre", SqlDbType.Int).Value = CveDocumentoPadre .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveDocumento", SqlDbType.Int).Direction = ParameterDirection.Output End With Try SqlAdapter.Fill(Data) - Retorno = True + Retorno = SqlAdapter.SelectCommand.Parameters("@CveDocumento").Value.ToString().ToEntero() Catch ex As Exception OnError("Ocurrió un error al agregar el Documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End Try @@ -3027,6 +3027,50 @@ Public Class ClsOIEventos End Function #End Region +#Region "OI_DocumentosAutorizacion" + Public Function AddDocumentoAutorizacion(CveDocumento As Integer, CveUsuario As Integer, Adjunto As String) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("OI_DocumentosAutorizacionesAdd") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveDocumento", SqlDbType.Int).Value = CveDocumento + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario + .Add("@Adjunto", SqlDbType.NVarChar).Value = Adjunto + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar el usuario para autorizar el documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function GetDocumentoAutorizacion(CveDocumento As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_DocumentosAutorizacionesGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveDocumento", SqlDbType.Int).Value = CveDocumento + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el usuario o usuarios para autorizar el documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function +#End Region + #End Region ' IDisposable diff --git a/OI/DocumentoDetalle.aspx b/OI/DocumentoDetalle.aspx index c68c94b1e..f84a72807 100644 --- a/OI/DocumentoDetalle.aspx +++ b/OI/DocumentoDetalle.aspx @@ -26,8 +26,97 @@
    - + "><%--class="expand"--%>
    @@ -40,6 +40,7 @@
    • F. I.
    • +
      @@ -47,7 +48,12 @@ + + + +
      +
    • F. F.
    • @@ -58,15 +64,25 @@ + + + + +
    -
  • Cuentas: +
  • Cuenta:
  • + + + + +
  • diff --git a/Contabilidad2/RepBalanzaComprobacion.aspx b/Contabilidad2/RepBalanzaComprobacion.aspx index c860c8b3d..41b29877a 100644 --- a/Contabilidad2/RepBalanzaComprobacion.aspx +++ b/Contabilidad2/RepBalanzaComprobacion.aspx @@ -23,7 +23,7 @@
    - +
    @@ -36,6 +36,10 @@ + + + +
    @@ -46,17 +50,25 @@ + + + +
    - + + +
    +
    + + +
    +
    + + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + + + + +
    +
    +
    + + + +
    +
    +
    + + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    + + +
    +
    +

    +
    + " style="display: inline-block; margin-right: -20px; width: 150px; height: 25px; border-color: #89C4F4; border:1px solid #e5e5e5" /> + " class="btn btn-circle btn-sm label-info"> +
    + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    - \ No newline at end of file + diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs index bc578cd90..315d1512b 100644 --- a/OI/DocumentoDetalle.aspx.cs +++ b/OI/DocumentoDetalle.aspx.cs @@ -6,11 +6,262 @@ using System.Web.UI; using System.Web.UI.WebControls; using Extensiones; using System.Data; +using System.IO; public partial class OI_DocumentoDetalle : ClsPaginas { + private int CveDocumento + { + get + { + return ViewState["CveDocumento"].ToString().ToEntero(); + } + + set + { + ViewState["CveDocumento"] = value; + } + } + + private string ErrorMensaje + { + get + { + return ViewState["ErrorMensaje"].ToString(); + } + + set + { + ViewState["ErrorMensaje"] = value; + } + } + protected void Page_Load(object sender, EventArgs e) { - + if (!IsPostBack) + { + //CargarUsuarios(); + //CargarSubCategoria(); + //CargarResponsable(); + //CargarCveDocumento(); + //if (this.CveDocumento > 0) + //{ + // CargarDocumentoYaExistente(); + // CargarUsuariosAutorizo(); + // ConfiguracionActualizar(); + //} + Cargar(); + } } + #region "CARGAS" + private void CargarCveDocumento() + { + string CveDocumentoAux = Page.Request["CveDocumento"]; + if (CveDocumentoAux != null) + { + this.CveDocumento = CveDocumentoAux.ToEntero(); + } + else + { + this.CveDocumento = -1; + } + } + + private void CargarUsuarios() + { + GvUsuarios.DataSource = get_GlobalDTUsuarios(CveEmpresa: UsuarioActual.CveEmpresa); + GvUsuarios.DataBind(); + } + + private void CargarSubCategoria() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumentoSubCategoria()) + { + DdlSubCategoria.DataSource = ObjOI.DtResultados; + DdlSubCategoria.DataBind(); + } + ObjOI.Dispose(); + } + + private void CargarResponsable() + { + TxtResponsable.Text = UsuarioActual.Nombre; + } + + private void CargarDocumentoYaExistente() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumento(this.CveDocumento, UsuarioActual.CveEmpresa)) + { + if (ObjOI.DtResultados.Rows.Count > 0) + { + DataRow Documento = ObjOI.DtResultados.Rows[0]; + + TxtDescripcion.Text = Documento["Descripcion"].ToString(); + DdlSubCategoria.SelectedValue = Documento["CveSubCategoria"].ToString(); + DdlEstatus.SelectedValue = Documento["CveEstatus"].ToString(); + TxtVersion.Text = Documento["Version"].ToString(); + TxtResponsable.Text = Documento["Responsable"].ToString(); + TxtObs.InnerText = Documento["Observacion"].ToString(); + + } + } + ObjOI.Dispose(); + } + + private void CargarUsuariosAutorizo() + { + ClsOIEventos ObjOI = new ClsOIEventos(); + if (ObjOI.GetDocumentoAutorizacion(this.CveDocumento)) + { + DataTable UsuariosAutorizo = ObjOI.DtResultados; + GridViewRowCollection UsuariosRowCollection = GvUsuarios.Rows; + foreach (GridViewRow UsuarioRow in UsuariosRowCollection) + { + int CveUsuarioRow = UsuarioRow.DataKey("CveUsuario").ToEntero(); + UsuarioRow.FCCheckBox("ChkUnir").Checked = UsuariosAutorizo.COUNT("CveUsuario", string.Format("CveUsuario = {0}", CveUsuarioRow)) > 0; + } + } + ObjOI.Dispose(); + } + + private void ConfiguracionActualizar() + { + LkbGuardar.Text = "Actualizar"; + } + + private void Cargar() + { + CargarUsuarios(); + CargarSubCategoria(); + CargarResponsable(); + CargarCveDocumento(); + if (this.CveDocumento > 0) + { + CargarDocumentoYaExistente(); + CargarUsuariosAutorizo(); + ConfiguracionActualizar(); + } + } + #endregion + + #region "GENERAR DOCUMENTO" + private string GuardarArchivo(int CveDocumento) + { + string RutaArchivo = "-1"; + List Filesgral = TxtDocumentoFile.getfiles().Archivos; + + foreach (Archivo fileItem in Filesgral) + { + try + { + string Version = TxtVersion.Text; + string NombreArchivo = fileItem.filenameO; + //Preparamos la ruta donde moveremos el archivo cargado + string NombreArchivoGuardado = string.Format("{0}_{1}_{2}", CveDocumento, Version, NombreArchivo); + string RutaDestino = UsuarioActual.Empresa.Ruta + @"DocumentosRepo\" + NombreArchivoGuardado; + + //Si no existe la carpeta donde se guardan se crea + if (!Directory.Exists(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo")) + { + Directory.CreateDirectory(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo"); + } + //Movemos el archivo de la carpeta temporal hacia la carpeta de la empresa + System.IO.File.Move(fileItem.FileUrl, RutaDestino); + RutaArchivo = RutaDestino; + } + catch (Exception e) + { + Alert(e.Message); + } + } + return RutaArchivo; + } + + protected void LblGuardar_Click(object sender, EventArgs e) + { + ClsOIEventos ObjOI = new ClsOIEventos(); + ObjOI.IniciaTransacSQL(); + bool TieneError = false; + + //Esta variable es requerida más adelante + int CveDocumento = 0; + string RutaArchivo = "-1"; + + CveDocumento = GuardarDocumento(ref ObjOI, ref TieneError);//Se crea el Documento + if (!TieneError) { RutaArchivo = AsignarArchivoAlDocumento(CveDocumento, ref ObjOI, ref TieneError); }//Se guarda el archivo fisico y se asigna al Documento generado + if (!TieneError) { GuardarUsuariosQueAutorizan(CveDocumento, RutaArchivo, ref ObjOI, ref TieneError); }//asignamos a los usuarios que participaran en aprovar este documento + + + //Gestión de errores y resultados + if (!TieneError) + { + ObjOI.Commit(); + Alert("Documento guardado correctamente"); + } + else + { + ObjOI.RollBack(); + Alert(this.ErrorMensaje, ModExtensiones.TipoMensaje.MsgError); + this.CveDocumento = CveDocumento; + Cargar(); + UpCliente.Update(); + } + ObjOI.Dispose(); + } + + private int GuardarDocumento(ref ClsOIEventos ObjOI, ref bool TieneError) + { + int CveDocumentoPadre = this.CveDocumento > 0 ? this.CveDocumento : -1; //Asociamos el nuevo insert con un CveDocumento ya generado en caso de ser una nueva versión del documento + + int CveDocumento = ObjOI.AddDocumento(DdlSubCategoria.SelectedValue.ToEntero(), TxtDescripcion.Text, TxtObs.InnerText, TxtVersion.Text, DdlEstatus.SelectedValue.ToEntero(), + "", TxtResponsable.Text, CveDocumentoPadre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa); + if (!(CveDocumento > 0)) + { + TieneError = true; + this.ErrorMensaje = "Hubo un error al guardr el Documento"; + } + return CveDocumento; + } + + private string AsignarArchivoAlDocumento(int CveDocumento, ref ClsOIEventos ObjOI, ref bool TieneError) + { + string RutaArchivo = GuardarArchivo(CveDocumento); + if (RutaArchivo != "-1") + { + if (!ObjOI.UpdateDocumento(CveDocumento, -1, "-1", "-1", "-1", -1, RutaArchivo, "-1", ModExtensiones.MinFecha, -1, -1, -1)) + { + TieneError = true; + this.ErrorMensaje = "Hubo un error al asignar el archivo"; + } + } + else + { + TieneError = true; + this.ErrorMensaje = "Hubo un error al guardar el archivo"; + } + return RutaArchivo; + } + + private void GuardarUsuariosQueAutorizan(int CveDocumento, string RutaArchivo, ref ClsOIEventos ObjOI, ref bool TieneError) + { + GridViewRowCollection GridUsuarios = GvUsuarios.Rows; + foreach (GridViewRow GvRow in GridUsuarios) + { + if (GvRow.FCCheckBox("ChkUnir").Checked && !TieneError) + { + int CveUsuario = GvRow.DataKey("CveUsuario").ToEntero(); + if (!ObjOI.AddDocumentoAutorizacion(CveDocumento, CveUsuario, RutaArchivo)) + { + TieneError = true; + this.ErrorMensaje = "Hubo un error al asignar los usuarios a este documento"; + break; + } + } + } + } + #endregion + + } \ No newline at end of file From 4dbd71a5e071ddf9d5b7c280a37d84c7e52f063d Mon Sep 17 00:00:00 2001 From: Rakcsle Supertramp Date: Mon, 20 Jul 2020 18:45:06 -0700 Subject: [PATCH 09/88] Mensaje folio duplicado ClsBancos --- App_Code/ClsBancos.vb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/App_Code/ClsBancos.vb b/App_Code/ClsBancos.vb index 49c81b77f..b4ce6e00d 100644 --- a/App_Code/ClsBancos.vb +++ b/App_Code/ClsBancos.vb @@ -1453,9 +1453,11 @@ Public Class ClsBancos _Folio = SqlAdapter.SelectCommand.Parameters("@FolioRegistro").Value.ToString Catch Ex1 As SqlException - If Ex1.Message.Contains("Número: 2627;") Or Ex1.Message.Contains("Número: 2601;") Then + If Ex1.Message.Contains("Número: 2627;") Then Me.OnError("Ocurrió un error al Guardar el Movimiento.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + ElseIf Ex1.Message.Contains("Número: 2601;") Then Alert("Ya existe un movimiento bancario con el mismo Folio: " & Folio & ".", TipoMensaje.MsgAdvertencia) + Me.OnError("Ocurrió un error al Guardar el Movimiento. Ya existe un movimiento bancario con el mismo Folio: " & Folio & ".", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) Else Me.OnError("Ocurrió un error al Guardar el Movimiento.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End If From 1096d1907d9591787055ca95e22e4b5aac62c5ae Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 21 Jul 2020 09:03:00 -0700 Subject: [PATCH 10/88] avance aun falta probar cosas --- OI/DocumentoDetalle.aspx | 11 ++++- OI/DocumentoDetalle.aspx.cs | 99 ++++++++++++++++++++++++++----------- 2 files changed, 78 insertions(+), 32 deletions(-) diff --git a/OI/DocumentoDetalle.aspx b/OI/DocumentoDetalle.aspx index f84a72807..fd387dcc1 100644 --- a/OI/DocumentoDetalle.aspx +++ b/OI/DocumentoDetalle.aspx @@ -72,8 +72,15 @@
    - - +
    + + + +
    +
    + + +
    diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs index 315d1512b..d8a3f2ac5 100644 --- a/OI/DocumentoDetalle.aspx.cs +++ b/OI/DocumentoDetalle.aspx.cs @@ -36,20 +36,23 @@ public partial class OI_DocumentoDetalle : ClsPaginas } } + private string ArchivoAdjuntoNombre + { + get + { + return ViewState["ArchivoAdjuntoNombre"].ToString(); + } + + set + { + ViewState["ArchivoAdjuntoNombre"] = value; + } + } + protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { - //CargarUsuarios(); - //CargarSubCategoria(); - //CargarResponsable(); - //CargarCveDocumento(); - //if (this.CveDocumento > 0) - //{ - // CargarDocumentoYaExistente(); - // CargarUsuariosAutorizo(); - // ConfiguracionActualizar(); - //} Cargar(); } } @@ -105,6 +108,10 @@ public partial class OI_DocumentoDetalle : ClsPaginas TxtResponsable.Text = Documento["Responsable"].ToString(); TxtObs.InnerText = Documento["Observacion"].ToString(); + ArchivoAdjuntoNombre = Documento["ArchivoFisico"].ToString(); + string[] ArchivoAux = Documento["ArchivoFisico"].ToString().Split('_'); + string ArchivoAdjunto = ArchivoAux[2]; + LkbDescargarArchivo.Text = string.Format("Descargar Archivo: {0}",ArchivoAdjunto); } } ObjOI.Dispose(); @@ -151,29 +158,31 @@ public partial class OI_DocumentoDetalle : ClsPaginas { string RutaArchivo = "-1"; List Filesgral = TxtDocumentoFile.getfiles().Archivos; - - foreach (Archivo fileItem in Filesgral) + if (TxtDocumentoFile.Text != "") { - try + foreach (Archivo fileItem in Filesgral) { - string Version = TxtVersion.Text; - string NombreArchivo = fileItem.filenameO; - //Preparamos la ruta donde moveremos el archivo cargado - string NombreArchivoGuardado = string.Format("{0}_{1}_{2}", CveDocumento, Version, NombreArchivo); - string RutaDestino = UsuarioActual.Empresa.Ruta + @"DocumentosRepo\" + NombreArchivoGuardado; - - //Si no existe la carpeta donde se guardan se crea - if (!Directory.Exists(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo")) + try { - Directory.CreateDirectory(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo"); + string Version = TxtVersion.Text; + string NombreArchivo = fileItem.filenameO; + //Preparamos la ruta donde moveremos el archivo cargado + string NombreArchivoGuardado = string.Format("{0}_{1}_{2}", CveDocumento, Version, NombreArchivo); + string RutaDestino = UsuarioActual.Empresa.Ruta + @"DocumentosRepo\" + NombreArchivoGuardado; + + //Si no existe la carpeta donde se guardan se crea + if (!Directory.Exists(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo")) + { + Directory.CreateDirectory(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo"); + } + //Movemos el archivo de la carpeta temporal hacia la carpeta de la empresa + System.IO.File.Move(fileItem.FileUrl, RutaDestino); + RutaArchivo = NombreArchivoGuardado; + } + catch (Exception e) + { + Alert(e.Message); } - //Movemos el archivo de la carpeta temporal hacia la carpeta de la empresa - System.IO.File.Move(fileItem.FileUrl, RutaDestino); - RutaArchivo = RutaDestino; - } - catch (Exception e) - { - Alert(e.Message); } } return RutaArchivo; @@ -220,7 +229,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas if (!(CveDocumento > 0)) { TieneError = true; - this.ErrorMensaje = "Hubo un error al guardr el Documento"; + this.ErrorMensaje = "Hubo un error al guardar el Documento"; } return CveDocumento; } @@ -263,5 +272,35 @@ public partial class OI_DocumentoDetalle : ClsPaginas } #endregion + #region "DESCARGAR ARCHIVO" + protected void LkbSubirNuevoArchivo_Click(object sender,EventArgs e) + { + DivDescargarArchivo.Visible = false; + DivSubirArchivo.Visible = true; + UpDerecha.Update(); + } + + protected void LkbDescargarNuevoArchivo_Click(object sender,EventArgs e) + { + DivDescargarArchivo.Visible = true; + DivSubirArchivo.Visible = false; + UpDerecha.Update(); + } + + protected void LkbDescargarArchivo_Click(object sender,EventArgs e) + { + string Ruta = string.Format("{0}Empresas/{1}/Temp/RH/{2}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, ArchivoAdjuntoNombre); + byte[] archivoBytes = File.ReadAllBytes(Ruta); + + HttpContext.Current.Response.Clear(); + HttpContext.Current.Response.ClearContent(); + HttpContext.Current.Response.ContentType = "application/octet-stream"; + HttpContext.Current.Response.AddHeader("Content-Disposition", String.Format("attachment;filename={0}", ArchivoAdjuntoNombre)); + HttpContext.Current.Response.AddHeader("Content-Length", archivoBytes.Length.ToString()); + HttpContext.Current.Response.OutputStream.Write(archivoBytes, 0, archivoBytes.Length); + HttpContext.Current.Response.End(); + } + #endregion + } \ No newline at end of file From befd26c7732063693dcf37c50f9671b2fcbc9a78 Mon Sep 17 00:00:00 2001 From: rrene Date: Tue, 21 Jul 2020 10:14:33 -0700 Subject: [PATCH 11/88] -ajustes de seccion --- Inventarios/AjustesSeccionAlmacen.aspx | 3 ++- Inventarios/AjustesSeccionAlmacen.aspx.vb | 5 ++++- Inventarios/Apartados.aspx | 2 +- Inventarios/EntradasSalidas.aspx | 2 +- Inventarios/EntradasSalidas.aspx.vb | 2 +- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Inventarios/AjustesSeccionAlmacen.aspx b/Inventarios/AjustesSeccionAlmacen.aspx index dde09a6a1..4fc1c050d 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx +++ b/Inventarios/AjustesSeccionAlmacen.aspx @@ -56,7 +56,8 @@ - + + diff --git a/Inventarios/AjustesSeccionAlmacen.aspx.vb b/Inventarios/AjustesSeccionAlmacen.aspx.vb index 7dc1c3c02..726db4464 100644 --- a/Inventarios/AjustesSeccionAlmacen.aspx.vb +++ b/Inventarios/AjustesSeccionAlmacen.aspx.vb @@ -84,8 +84,11 @@ Partial Class Inventarios_AjustesSeccionAlmacen If gvr.DataKey("CveSeccionAlmacen").ToEntero > 0 Then ObjPS.UpdateAplicaSeccionAlmacen(gvr.DataKey("CvePS").ToEntero, UsuarioActual.CveEmpresa, True) + Else + ObjPS.UpdateAplicaSeccionAlmacen(gvr.DataKey("CvePS").ToEntero, UsuarioActual.CveEmpresa, False) End If - Lista.Add(gvr.DataKey("CvePS").ToEntero, gvr.FCDropDownList("DDlS").SelectedValue.ToEntero) 'guardo que dato le corresponde + 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 ErrorMovInv = True TextoError = "Ocurrió un error al guardar los movimientos de salida" diff --git a/Inventarios/Apartados.aspx b/Inventarios/Apartados.aspx index 27be34de9..b146d2360 100644 --- a/Inventarios/Apartados.aspx +++ b/Inventarios/Apartados.aspx @@ -227,7 +227,7 @@ - + diff --git a/Inventarios/EntradasSalidas.aspx b/Inventarios/EntradasSalidas.aspx index 317886ea8..c1fabff01 100644 --- a/Inventarios/EntradasSalidas.aspx +++ b/Inventarios/EntradasSalidas.aspx @@ -1439,7 +1439,7 @@
    - +

    -
    +
    -
    -
    +
    + -
    + + + diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs index d8a3f2ac5..23c3b49e7 100644 --- a/OI/DocumentoDetalle.aspx.cs +++ b/OI/DocumentoDetalle.aspx.cs @@ -110,8 +110,9 @@ public partial class OI_DocumentoDetalle : ClsPaginas ArchivoAdjuntoNombre = Documento["ArchivoFisico"].ToString(); string[] ArchivoAux = Documento["ArchivoFisico"].ToString().Split('_'); - string ArchivoAdjunto = ArchivoAux[2]; - LkbDescargarArchivo.Text = string.Format("Descargar Archivo: {0}",ArchivoAdjunto); + string ArchivoAdjunto = ArchivoAux[1]; + LkbDescargarArchivo.Text = ArchivoAdjunto; + DivDescargarArchivo.Visible = true; } } ObjOI.Dispose(); @@ -154,39 +155,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas #endregion #region "GENERAR DOCUMENTO" - private string GuardarArchivo(int CveDocumento) - { - string RutaArchivo = "-1"; - List Filesgral = TxtDocumentoFile.getfiles().Archivos; - if (TxtDocumentoFile.Text != "") - { - foreach (Archivo fileItem in Filesgral) - { - try - { - string Version = TxtVersion.Text; - string NombreArchivo = fileItem.filenameO; - //Preparamos la ruta donde moveremos el archivo cargado - string NombreArchivoGuardado = string.Format("{0}_{1}_{2}", CveDocumento, Version, NombreArchivo); - string RutaDestino = UsuarioActual.Empresa.Ruta + @"DocumentosRepo\" + NombreArchivoGuardado; - - //Si no existe la carpeta donde se guardan se crea - if (!Directory.Exists(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo")) - { - Directory.CreateDirectory(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo"); - } - //Movemos el archivo de la carpeta temporal hacia la carpeta de la empresa - System.IO.File.Move(fileItem.FileUrl, RutaDestino); - RutaArchivo = NombreArchivoGuardado; - } - catch (Exception e) - { - Alert(e.Message); - } - } - } - return RutaArchivo; - } + protected void LblGuardar_Click(object sender, EventArgs e) { @@ -208,13 +177,13 @@ public partial class OI_DocumentoDetalle : ClsPaginas { ObjOI.Commit(); Alert("Documento guardado correctamente"); + //this.CveDocumento = CveDocumento; + Response.Redirect(string.Format("/OI/DocumentoDetalle.aspx?CveDocumento={0}",CveDocumento)); } else { ObjOI.RollBack(); Alert(this.ErrorMensaje, ModExtensiones.TipoMensaje.MsgError); - this.CveDocumento = CveDocumento; - Cargar(); UpCliente.Update(); } ObjOI.Dispose(); @@ -236,6 +205,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas private string AsignarArchivoAlDocumento(int CveDocumento, ref ClsOIEventos ObjOI, ref bool TieneError) { + string RutaArchivo = GuardarArchivo(CveDocumento); if (RutaArchivo != "-1") { @@ -245,7 +215,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas this.ErrorMensaje = "Hubo un error al asignar el archivo"; } } - else + else if(RutaArchivo == "Error") { TieneError = true; this.ErrorMensaje = "Hubo un error al guardar el archivo"; @@ -272,24 +242,47 @@ public partial class OI_DocumentoDetalle : ClsPaginas } #endregion - #region "DESCARGAR ARCHIVO" - protected void LkbSubirNuevoArchivo_Click(object sender,EventArgs e) + #region "ARCHIVO ADJUNTO" + private string GuardarArchivo(int CveDocumento) { - DivDescargarArchivo.Visible = false; - DivSubirArchivo.Visible = true; - UpDerecha.Update(); + string RutaArchivo = "-1"; + List Filesgral = TxtDocumentoFile.getfiles().Archivos; + if (TxtDocumentoFile.Text != "[]") + { + foreach (Archivo fileItem in Filesgral) + { + try + { + string Version = TxtVersion.Text; + string NombreArchivo = fileItem.filenameO; + //Preparamos la ruta donde moveremos el archivo cargado + string NombreArchivoGuardado = string.Format("{0}_{1}", CveDocumento, NombreArchivo); + string RutaDestino = UsuarioActual.Empresa.Ruta + @"DocumentosRepo\" + NombreArchivoGuardado; + + //Si no existe la carpeta donde se guardan se crea + if (!Directory.Exists(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo")) + { + Directory.CreateDirectory(UsuarioActual.Empresa.Ruta + @"\DocumentosRepo"); + } + //Movemos el archivo de la carpeta temporal hacia la carpeta de la empresa + System.IO.File.Move(fileItem.FileUrl, RutaDestino); + RutaArchivo = NombreArchivoGuardado; + } + catch (Exception e) + { + Alert(e.Message); + RutaArchivo = "Error"; + } + } + } + return RutaArchivo; } - protected void LkbDescargarNuevoArchivo_Click(object sender,EventArgs e) - { - DivDescargarArchivo.Visible = true; - DivSubirArchivo.Visible = false; - UpDerecha.Update(); - } + protected void LkbDescargarArchivo_Click(object sender,EventArgs e) { - string Ruta = string.Format("{0}Empresas/{1}/Temp/RH/{2}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, ArchivoAdjuntoNombre); + string Ruta = string.Format("{0}Empresas/{1}/DocumentosRepo/{2}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, ArchivoAdjuntoNombre); byte[] archivoBytes = File.ReadAllBytes(Ruta); HttpContext.Current.Response.Clear(); From d8dc66900b852286b9e69cc95d34867f1d5fdbba Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 21 Jul 2020 19:27:50 -0700 Subject: [PATCH 16/88] integrando el endpoint para descargar las firmas --- TareasProgramadas/Tareas72.ashx | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/TareasProgramadas/Tareas72.ashx b/TareasProgramadas/Tareas72.ashx index 1edc5d88a..f3d4ba7aa 100644 --- a/TareasProgramadas/Tareas72.ashx +++ b/TareasProgramadas/Tareas72.ashx @@ -66,13 +66,31 @@ public class Tareas72 : IHttpHandler string JsonStringFormat = JsonString.Replace("Resultado(", "{\"Resultado\":").Replace(")", "}"); DataSet dataSet = JsonConvert.DeserializeObject(JsonStringFormat); DataTable dataTable = dataSet.Tables["Resultado"]; - if (dataTable.Rows[0]["eventoId"].ToString() == "Hdc") + string eventoId = dataTable.Rows[0]["eventoId"].ToString(); + if (eventoId == "Hdc" | eventoId == "HDC") { int EstatusEntregado = 3; //MANDAMOS A ACTUALIZAR CON ESTATUS DE ENTREGADO if (ObjGenerales.UpdatePaqueteriasGuias(CvePaqueteriaGuia, -1, -1, -1, EstatusEntregado, "-1", "", "", -1, -1, "-1", "-1", "")) { + #region 'DESCARGAR IMAGEN' + string rastreo = Guia["Rastreo"].ToString(); + string uriConsultaFirma = string.Format("https://cc.paquetexpress.com.mx/ptxws/rest/api/v1/entrega/firma/{0}/@1@2@3@4@5", rastreo); + + HttpClient ClientFirma = new HttpClient(); + HttpResponseMessage ResponseMessageFirma = ClientFirma.GetAsync(uriConsultaFirma).Result; + string JsonStringFirma = ResponseMessageFirma.Content.ReadAsStringAsync().Result; + string JsonStringFormatFirma = JsonStringFirma.Replace("callback(", "{\"callback\":").Replace(")", "}"); + DataSet dataSetFirma = JsonConvert.DeserializeObject(JsonStringFormatFirma); + DataTable dataTableFirma = dataSetFirma.Tables["callback"]; + + string ImagenBase64 = dataTableFirma.Rows[0]["imagen"].ToString(); + byte[] ImagenByteArray = Convert.FromBase64String(ImagenBase64); + string rutaDestino = ModExtensiones.DirectorioEmpresas + "72\\" + "Documentos\\Guias\\" + CvePaqueteriaGuia + ".jpg"; + File.WriteAllBytes(rutaDestino,ImagenByteArray); + #endregion + #region 'MANDAR CORREOS' int CveCliente = Guia["CveCliente"].ToString().ToEntero(); int CveVenta = Guia["CveAgrupador"].ToString().ToEntero(); @@ -123,7 +141,7 @@ public class Tareas72 : IHttpHandler ObjVentas.Dispose(); ObjVendedores.Dispose(); ObjEmpresa.Dispose(); - return false; + return retorno; } public bool IsReusable From d9f3fb126104f5c2f80aa8df72ae08db70a9dedc Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 21 Jul 2020 19:44:12 -0700 Subject: [PATCH 17/88] =?UTF-8?q?correcci=C3=B3n=20de=20ortograf=C3=ADa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- RH/Personal.aspx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RH/Personal.aspx b/RH/Personal.aspx index b9c257e6c..fdad5f44e 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -4614,7 +4614,7 @@ - +
    @@ -3538,7 +3538,7 @@ diff --git a/RH/Personal.aspx.vb b/RH/Personal.aspx.vb index 390c3f3f6..f7f4d4d35 100644 --- a/RH/Personal.aspx.vb +++ b/RH/Personal.aspx.vb @@ -4671,12 +4671,17 @@ Partial Class RH_Personal Dim Fecha As String = DateTime.Now.ToString("dd/MM/yyyy") Dim Solicitante As String = UsuarioActual.Nombre Dim anio As Integer = GvRow.DataKey("FechaInicio").ToDate().Year + Dim FechaPeriodo As String = GvRow.DataKey("Periodo") + + + + If Periodoingreso > PeriodoInicio Then anio = anio - 1 - End If - - - Dim FechaPeriodo As String = String.Format("{0:dd/MM}/{1}", fechaIngreso, anio) + End If + + + If File.Exists(RutaFormato) Then Dim objGemDocument As New clsGemBoxDocument(RutaFormato) @@ -6123,10 +6128,36 @@ Partial Class RH_Personal End If If TxtFIPrimaVacacional.Text = "0" Or TxtFIPrimaVacacional.Text = "" Or TxtFIAguinaldo.Text = "-1" Then TxtFIPrimaVacacional.Text = "25" - End If + End If + + + TxtFISalariodiarioImss.Text = TxtSalarioCotizado.Text TxtFactordeIntegracion.Text = "" - TxtFISalarioDiarioIntegrado.Text = "" + TxtFISalarioDiarioIntegrado.Text = "" + + + + Dim objRH As New ClsRH + + If objRH.VacacionesResumenGet(CvePersonal, UsuarioActual.Empresa.CveEmpresa) Then + If objRH.DtResultados.Rows.Count > 0 Then + + If objRH.DtResultados.Rows.Count > 0 Then + TxtFIDiasVacaciones.Text = objRH.DtResultados(0)("Dias").ToString + Else + TxtFIDiasVacaciones.Text = "6" + End If + Else + + End If + End If + + objRH.Dispose() + + + + RegistraScript("$('#DmodalFactordeIntegraccion').modal()") UpFactordeintegracion.Update() End Sub diff --git a/RH/RepPersonalInconsistencias.aspx.vb b/RH/RepPersonalInconsistencias.aspx.vb index bf9d0b4e9..763ea5656 100644 --- a/RH/RepPersonalInconsistencias.aspx.vb +++ b/RH/RepPersonalInconsistencias.aspx.vb @@ -181,7 +181,7 @@ Partial Class RH_RepPersonalInconsistencias Dim ObjAF As New ClsAF() If ObjAF.GetLicenciasVencidas(-1, -1, UsuarioActual.CveEmpresa, Estatus:=1) Then - GvLicencias.DataSource = ObjAF.DtResultados + GvLicencias.DataSource = ObjAF.DtResultados.FiltraParametros("CveEstatusPersonal = 1") Else GvLicencias.DataSource = Nothing diff --git a/vwd.webinfo b/vwd.webinfo index 6a84ef014..4edae1c8c 100644 --- a/vwd.webinfo +++ b/vwd.webinfo @@ -80,6 +80,10 @@ + + + + From 4c74ec5d46f99c2b7ae873a3e1b05af6d3f1ece4 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Wed, 22 Jul 2020 19:47:27 -0700 Subject: [PATCH 23/88] =?UTF-8?q?notificac=C3=B3n=20por=20correo=20agregad?= =?UTF-8?q?a?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/ClsOIEventos.vb | 20 +++++++++ OI/DocumentoDetalle.aspx | 2 +- OI/DocumentoDetalle.aspx.cs | 84 ++++++++++++++++++++++++++++++++----- OI/Documentos.aspx | 19 ++++----- OI/Documentos.aspx.cs | 2 +- 5 files changed, 103 insertions(+), 24 deletions(-) diff --git a/App_Code/ClsOIEventos.vb b/App_Code/ClsOIEventos.vb index 4e36ab9e0..6abe367d1 100644 --- a/App_Code/ClsOIEventos.vb +++ b/App_Code/ClsOIEventos.vb @@ -2922,6 +2922,26 @@ Public Class ClsOIEventos #End Region #Region "Documentos" + Public Function ListadoDocumentos(CveEmpresa As Integer) As Boolean + + Dim Retorno As Boolean = False + + DataAdapter("PA_OI_ListarDocumentos") + + With SqlAdapter.SelectCommand.Parameters + .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 listado de documento", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + Public Function GetDocumento(CveDocumento As Integer, CveEmpresa As Integer) As Boolean Dim Retorno As Boolean = False diff --git a/OI/DocumentoDetalle.aspx b/OI/DocumentoDetalle.aspx index ad0062d3e..d5af82e6c 100644 --- a/OI/DocumentoDetalle.aspx +++ b/OI/DocumentoDetalle.aspx @@ -97,7 +97,7 @@ - diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs index 23c3b49e7..6955095d9 100644 --- a/OI/DocumentoDetalle.aspx.cs +++ b/OI/DocumentoDetalle.aspx.cs @@ -7,6 +7,7 @@ using System.Web.UI.WebControls; using Extensiones; using System.Data; using System.IO; +using System.Text; public partial class OI_DocumentoDetalle : ClsPaginas { @@ -155,7 +156,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas #endregion #region "GENERAR DOCUMENTO" - + protected void LblGuardar_Click(object sender, EventArgs e) { @@ -166,19 +167,24 @@ public partial class OI_DocumentoDetalle : ClsPaginas //Esta variable es requerida más adelante int CveDocumento = 0; string RutaArchivo = "-1"; + string CorreosNotificacion = ""; + byte[] ArchivoNotifiacion = null; CveDocumento = GuardarDocumento(ref ObjOI, ref TieneError);//Se crea el Documento if (!TieneError) { RutaArchivo = AsignarArchivoAlDocumento(CveDocumento, ref ObjOI, ref TieneError); }//Se guarda el archivo fisico y se asigna al Documento generado - if (!TieneError) { GuardarUsuariosQueAutorizan(CveDocumento, RutaArchivo, ref ObjOI, ref TieneError); }//asignamos a los usuarios que participaran en aprovar este documento - + if (!TieneError) { CorreosNotificacion = GuardarUsuariosQueAutorizan(CveDocumento, RutaArchivo, ref ObjOI, ref TieneError); }//asignamos a los usuarios que participaran en aprovar este documento + if (!TieneError) + { + ArchivoNotifiacion = GenerarArchivoByte(RutaArchivo); + NotificarPorCorreo(CorreosNotificacion, RutaArchivo, ArchivoNotifiacion); + } //Gestión de errores y resultados if (!TieneError) { ObjOI.Commit(); Alert("Documento guardado correctamente"); - //this.CveDocumento = CveDocumento; - Response.Redirect(string.Format("/OI/DocumentoDetalle.aspx?CveDocumento={0}",CveDocumento)); + Response.Redirect(string.Format("/OI/DocumentoDetalle.aspx?CveDocumento={0}", CveDocumento)); } else { @@ -215,7 +221,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas this.ErrorMensaje = "Hubo un error al asignar el archivo"; } } - else if(RutaArchivo == "Error") + else if (RutaArchivo == "Error") { TieneError = true; this.ErrorMensaje = "Hubo un error al guardar el archivo"; @@ -223,8 +229,9 @@ public partial class OI_DocumentoDetalle : ClsPaginas return RutaArchivo; } - private void GuardarUsuariosQueAutorizan(int CveDocumento, string RutaArchivo, ref ClsOIEventos ObjOI, ref bool TieneError) + private string GuardarUsuariosQueAutorizan(int CveDocumento, string RutaArchivo, ref ClsOIEventos ObjOI, ref bool TieneError) { + StringBuilder CorreosReturn = new StringBuilder(""); GridViewRowCollection GridUsuarios = GvUsuarios.Rows; foreach (GridViewRow GvRow in GridUsuarios) { @@ -237,12 +244,19 @@ public partial class OI_DocumentoDetalle : ClsPaginas this.ErrorMensaje = "Hubo un error al asignar los usuarios a este documento"; break; } + else + { + CorreosReturn.AppendFormat("{0},", GvRow.DataKey("Correo")); + } } } + + return CorreosReturn.ToString(); } #endregion #region "ARCHIVO ADJUNTO" + private string GuardarArchivo(int CveDocumento) { string RutaArchivo = "-1"; @@ -278,9 +292,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas return RutaArchivo; } - - - protected void LkbDescargarArchivo_Click(object sender,EventArgs e) + protected void LkbDescargarArchivo_Click(object sender, EventArgs e) { string Ruta = string.Format("{0}Empresas/{1}/DocumentosRepo/{2}", ModExtensiones.DirectorioBaseEmpresas, UsuarioActual.CveEmpresa, ArchivoAdjuntoNombre); byte[] archivoBytes = File.ReadAllBytes(Ruta); @@ -295,5 +307,57 @@ public partial class OI_DocumentoDetalle : ClsPaginas } #endregion + #region "NOTIFICACIONES CORREO" + private void NotificarPorCorreo(string Para, string NombreArchivo, byte[] Adjunto) + { + string Descripcion = TxtDescripcion.Text; + string Asunto = "Se le ha agregado como participante en el desarrollo de un Documento"; + string a = string.Format("{0} -- {1} --- {2}", Descripcion, Para, ""); + a.GuardaLog(); + + ClsSisMail Mail = new ClsSisMail(); + + if (Adjunto != null) + { + List LSRutasMail = new List(); + ClsSisMail.ArchivoMail itemMail = new ClsSisMail.ArchivoMail(); + + { + var withBlock = itemMail; + itemMail.ArchivoBinario = Adjunto; + itemMail.NombreArchivo = NombreArchivo; + } + + LSRutasMail.Add(itemMail); + + + Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Descripcion, "", LSRutasMail); + Mail = null/* TODO Change to default(_) if this is not a reference type */; + } + else + { + Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Descripcion, ""); + Mail = null/* TODO Change to default(_) if this is not a reference type */; + } + } + + private byte[] GenerarArchivoByte(string NombreArchivo) + { + string ArchivoEnviar = string.Format(@"{0}DocumentosRepo\{1}", UsuarioActual.Empresa.Ruta, NombreArchivo); + if (File.Exists(ArchivoEnviar)) + { + System.IO.FileStream fs = System.IO.File.Open(ArchivoEnviar, System.IO.FileMode.Open, System.IO.FileAccess.Read); + byte[] buff = new byte[fs.Length + 1]; + if (fs.Length > 0) + { + fs.Read(buff, 0, (fs.Length.ToString().ToEntero() - 1)); + fs.Close(); + } + return buff; + } + + return new byte[] { }; + } + #endregion } \ No newline at end of file diff --git a/OI/Documentos.aspx b/OI/Documentos.aspx index 724ec70d8..5a202ebaa 100644 --- a/OI/Documentos.aspx +++ b/OI/Documentos.aspx @@ -32,18 +32,13 @@ EmptyDataText="No se encontraron Documentos Registrados" ToolTip="Listado de Documentos" CssClass="table table-striped table-advance table-hover" Style="margin-top: -10px; text-align: center; width: 100%" GridLines="None"> - - - - - - - - - <%-- - --%> - - + + + + + + <%----%> + diff --git a/OI/Documentos.aspx.cs b/OI/Documentos.aspx.cs index e087c71c9..2f162df73 100644 --- a/OI/Documentos.aspx.cs +++ b/OI/Documentos.aspx.cs @@ -20,7 +20,7 @@ public partial class OI_Documentos : ClsPaginas private void CargaDatos() { ClsOIEventos ObjOI = new ClsOIEventos(); - if (ObjOI.GetDocumento(-1,UsuarioActual.CveEmpresa)) + if (ObjOI.ListadoDocumentos(UsuarioActual.CveEmpresa)) { GvDatos.DataSource = ObjOI.DtResultados; GvDatos.DataBind(); From 782891be9269fe58339e61c3e3f37b19275730de Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Thu, 23 Jul 2020 09:12:39 -0700 Subject: [PATCH 24/88] correcciones y agregados --- OI/DocumentoDetalle.aspx.cs | 17 +++++++++++++++-- OI/Documentos.aspx | 2 +- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/OI/DocumentoDetalle.aspx.cs b/OI/DocumentoDetalle.aspx.cs index 6955095d9..0c35f9eb6 100644 --- a/OI/DocumentoDetalle.aspx.cs +++ b/OI/DocumentoDetalle.aspx.cs @@ -71,6 +71,18 @@ public partial class OI_DocumentoDetalle : ClsPaginas } } + private void CargarMensajeNuevoEditado() + { + string MensajeNuevoEditado = Page.Request["Mensaje"]; + if (MensajeNuevoEditado == "Nuevo") + { + Alert("El Documento ha sido creado correctamente"); + }else if(MensajeNuevoEditado == "Editado") + { + Alert("Los cambios en el Documento han sido guardado correctamente"); + } + } + private void CargarUsuarios() { GvUsuarios.DataSource = get_GlobalDTUsuarios(CveEmpresa: UsuarioActual.CveEmpresa); @@ -151,6 +163,7 @@ public partial class OI_DocumentoDetalle : ClsPaginas CargarDocumentoYaExistente(); CargarUsuariosAutorizo(); ConfiguracionActualizar(); + CargarMensajeNuevoEditado(); } } #endregion @@ -183,8 +196,8 @@ public partial class OI_DocumentoDetalle : ClsPaginas if (!TieneError) { ObjOI.Commit(); - Alert("Documento guardado correctamente"); - Response.Redirect(string.Format("/OI/DocumentoDetalle.aspx?CveDocumento={0}", CveDocumento)); + string ParamMensaje = LkbGuardar.Text == "Guardar" ? "Nuevo" : "Editado";//Esto indica la acción de usuario la cual se mostrará como alert al cargar la página + Response.Redirect(string.Format("/OI/DocumentoDetalle.aspx?CveDocumento={0}&Mensaje={1}", CveDocumento, ParamMensaje)); } else { diff --git a/OI/Documentos.aspx b/OI/Documentos.aspx index 5a202ebaa..818d0df70 100644 --- a/OI/Documentos.aspx +++ b/OI/Documentos.aspx @@ -14,7 +14,7 @@
  • - +
  • Imprimir PDF From afd17ba911a81d6e52794c0ea05766c1cd2ecaed Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 23 Jul 2020 09:31:20 -0700 Subject: [PATCH 25/88] - visualziacion serie/lote --- Inventarios/InventarioFisicoDetalle.aspx | 2 +- Inventarios/InventarioFisicoDetalle.aspx.vb | 34 ++++++++++++--------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Inventarios/InventarioFisicoDetalle.aspx b/Inventarios/InventarioFisicoDetalle.aspx index 48a1e6086..6a15e7ad1 100644 --- a/Inventarios/InventarioFisicoDetalle.aspx +++ b/Inventarios/InventarioFisicoDetalle.aspx @@ -229,7 +229,7 @@
    - +
    diff --git a/Inventarios/InventarioFisicoDetalle.aspx.vb b/Inventarios/InventarioFisicoDetalle.aspx.vb index 3bfb676f9..4cc513ac3 100644 --- a/Inventarios/InventarioFisicoDetalle.aspx.vb +++ b/Inventarios/InventarioFisicoDetalle.aspx.vb @@ -229,6 +229,7 @@ Partial Class Inventarios_InventarioFisicoDetalle If Inventario.GetInventarioFisicoDetalle(CveInventarioFisico, ddlUsuario.SelectedValue.ToString.ToEntero) Then If Inventario.DtResultados.Rows.Count > 0 Then GvIFD.Columns(4).Visible = Inventario.DtResultados.MAX("CveSeccionAlmacen", "CveSeccionAlmacen IS NOT NULL").ToEntero > 0 + GvIFD.Columns(5).Visible = Inventario.DtResultados.MAX("SerieLote") <> "" GvIFD.Columns(6).Visible = Inventario.DtResultados.MAX("Lote") <> "" GvIFD.Columns(7).Visible = Inventario.DtResultados.MAX("FechaCaducidad", "FechaCaducidad IS NOT NULL").ToDate > MinFecha GvIFD.DataSource = Inventario.DtResultados '.AsEnumerable.OrderByDescending(Function(k) k!CveInventarioFisicoDetalle).Take(500).CopyToDataTable @@ -333,16 +334,16 @@ Partial Class Inventarios_InventarioFisicoDetalle CveSeccionAlmacen:=-1, Lote:=Lote, FechaCaducidad:=FechaCaducidad.ToDate) Then GvIFDUltimoRegistrado.Columns(4).Visible = CveSeccionAlmacen > 0 - GvIFDUltimoRegistrado.Columns(5).Visible = Serie <> "-1" + GvIFDUltimoRegistrado.Columns(5).Visible = Serie <> "" GvIFDUltimoRegistrado.Columns(6).Visible = Lote <> "-1" - GvIFDUltimoRegistrado.Columns(7).Visible = FechaCaducidad <> "01/01/1900" + GvIFDUltimoRegistrado.Columns(7).Visible = FechaCaducidad.ToDate > MinFecha If GvIFDUltimoRegistrado.Rows.Count > 0 Then GvIFDUltimoRegistrado.Rows(0).Cells(0).Text = Now GvIFDUltimoRegistrado.Rows(0).Cells(1).Text = dr("CodigoBarras").ToString GvIFDUltimoRegistrado.Rows(0).Cells(2).Text = dr("Codigo").ToString - GvIFDUltimoRegistrado.Rows(0).Cells(3).Text = dr("PS").ToString + GvIFDUltimoRegistrado.Rows(0).Cells(3).Text = dr("PSCodigo").ToString GvIFDUltimoRegistrado.Rows(0).Cells(4).Text = "" GvIFDUltimoRegistrado.Rows(0).Cells(5).Text = TxtCodigoSerie.Text.Trim GvIFDUltimoRegistrado.Rows(0).Cells(6).Text = Lote @@ -559,18 +560,21 @@ Partial Class Inventarios_InventarioFisicoDetalle ' End Sub - Protected Sub TxtCodigoBarras_Change(sender As Object, e As EventArgs) - Dim Producto As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{TxtCodigoBarras.Text}'") + 'Protected Sub TxtCodigoBarras_Change(sender As Object, e As EventArgs) + ' Dim Producto As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{TxtCodigoBarras.Text}'") - Dim AplicaSeccion As Boolean = Producto("AplicaSeccion") = "1" - Dim AplicaCaducidad As Boolean = Producto("AplicaCaducidad") = "1" - Dim AplicaLote As Boolean = Producto("AplicaLote") = "1" - Dim AplicaSerie As Boolean = Producto("AplicaSerie") = "1" + ' If Producto IsNot Nothing Then + ' Dim AplicaSeccion As Boolean = Producto("AplicaSeccion") = "1" + ' Dim AplicaCaducidad As Boolean = Producto("AplicaCaducidad") = "1" + ' Dim AplicaLote As Boolean = Producto("AplicaLote") = "1" + ' Dim AplicaSerie As Boolean = Producto("AplicaSerie") = "1" - 'divSeccionAlmacen.Visible = AplicaSeccion - divLote.Visible = AplicaLote - divFechaCaducidad.Visible = AplicaCaducidad - divSerie.Visible = AplicaSerie - UPAgregarPro.Update() - End Sub + ' 'divSeccionAlmacen.Visible = AplicaSeccion + ' divLote.Visible = AplicaLote + ' divFechaCaducidad.Visible = AplicaCaducidad + ' divSerie.Visible = AplicaSerie + ' End If + + ' UPAgregarPro.Update() + 'End Sub End Class From cefe0093f967278f2075802684cddc7e9acbe6fd Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 23 Jul 2020 09:32:14 -0700 Subject: [PATCH 26/88] -- secciones recomendadas --- Inventarios/EntregaAlmacen.aspx.vb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 7ef8db2d1..1fda0e0ee 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -886,9 +886,13 @@ Partial Class Inventarios_EntregaAlmacen If CBool(e.Row.DBCampo("AplicaSeccion")) Then e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True If DdlAlmacen.SelectedValue.ToEntero > 0 Then - e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, DdlAlmacen.SelectedValue.ToEntero, e.Row.DBCampo("CvePS").ToEntero) + 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() - e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + If dtt.Rows.Count > 1 Then + e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + End If + dtt.Dispose() End If Else From 15129caaa050946819a05e8b637aec88d7fa50df Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 23 Jul 2020 09:32:54 -0700 Subject: [PATCH 27/88] numeropedimento --- App_Code/Timbrado.vb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb index 88e4f9c15..5bdb7d46f 100644 --- a/App_Code/Timbrado.vb +++ b/App_Code/Timbrado.vb @@ -1164,6 +1164,7 @@ Public Class Timbrado End If Next If concep.CuentaPredial <> "" Then cfdi.agregarCuentaPredial(concep.CuentaPredial) + If concep.NumeroPedimento <> "" Then cfdi.agregarInformacionAduanera(concep.NumeroPedimento) Next End If @@ -1749,6 +1750,7 @@ Public Class Timbrado End If Next If concep.CuentaPredial <> "" Then cfdi.CuentaPredial(concep.CuentaPredial) + If concep.NumeroPedimento <> "" Then cfdi.InformacionAduanera(concep.NumeroPedimento) Next End If @@ -2365,6 +2367,11 @@ Public Class Timbrado End If If concep.Noidentificacion <> "" Then comprobante.Conceptos(i).NoIdentificacion = concep.Noidentificacion + If concep.CuentaPredial <> "" Then comprobante.Conceptos(i).CuentaPredial = New Profact.TimbraCFDI33.ComprobanteConceptoCuentaPredial() With {.Numero = concep.CuentaPredial} + If concep.NumeroPedimento <> "" Then + comprobante.Conceptos(i).InformacionAduanera = New Profact.TimbraCFDI33.ComprobanteConceptoInformacionAduanera(1) {} 'solo un codigo por el momento + comprobante.Conceptos(i).InformacionAduanera(0) = New Profact.TimbraCFDI33.ComprobanteConceptoInformacionAduanera() With {.NumeroPedimento = concep.NumeroPedimento} + End If j = 0 k = 0 From 9a1fc3543034dabd233ef00a5e9a17cdb0355e1b Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 23 Jul 2020 11:14:21 -0700 Subject: [PATCH 28/88] filtro de usuarios, solo los activos --- Inventarios/InventarioFisicoDetalle.aspx.vb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Inventarios/InventarioFisicoDetalle.aspx.vb b/Inventarios/InventarioFisicoDetalle.aspx.vb index 4cc513ac3..a1678237c 100644 --- a/Inventarios/InventarioFisicoDetalle.aspx.vb +++ b/Inventarios/InventarioFisicoDetalle.aspx.vb @@ -57,7 +57,7 @@ Partial Class Inventarios_InventarioFisicoDetalle #Region " USUARIOS " Private Sub CargaUsuarios() - ddlUsuario.DataSource = GlobalDTUsuarios(-1, UsuarioActual.CveEmpresa) + ddlUsuario.DataSource = GlobalDTUsuarios(-1, UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 1", "Nombre") ddlUsuario.DataBind() UPPInventario.Update() ddlUsuario.SelectedValue = UsuarioActual.CveUsuario.ToString @@ -206,7 +206,7 @@ Partial Class Inventarios_InventarioFisicoDetalle lbFechaI.Text = ObjInventario.FechaI lbFechaF.Text = ObjInventario.FechaF - Alert("Ocurrió un error al obterner el inventario fisico") + Alert("Ocurrió un error al obterner el inventario fisico", TipoMensaje.MsgError) End If ObjInventario.Dispose() From 080af0b7cb170f9f1bda4f691b1bb70762eff8f9 Mon Sep 17 00:00:00 2001 From: rrene Date: Thu, 23 Jul 2020 11:14:31 -0700 Subject: [PATCH 29/88] secciones de almacen --- Inventarios/TraspasoAlmacen.aspx | 2 +- Inventarios/TraspasoAlmacen.aspx.vb | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Inventarios/TraspasoAlmacen.aspx b/Inventarios/TraspasoAlmacen.aspx index 785ef1ff6..3c6546336 100644 --- a/Inventarios/TraspasoAlmacen.aspx +++ b/Inventarios/TraspasoAlmacen.aspx @@ -665,7 +665,7 @@ - + diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index 09ed1a802..9ce5b10d3 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -1482,8 +1482,8 @@ Partial Class Inventarios_TraspasoAlmacen GvDatosRecepcion.Columns(6).Visible = Dtt.MAX("Serie") <> "" GvDatosRecepcion.Columns(7).Visible = Dtt.MAX("Lote") <> "" - GvDatosRecepcion.Columns(8).Visible = Dtt.MAX("FechaCaducidad") <> "" - GvDatosRecepcion.Columns(9).Visible = Dtt.MAX("Serie") <> "" + GvDatosRecepcion.Columns(8).Visible = Dtt.MAX("FechaCaducidad").ToDate > MinFecha + GvDatosRecepcion.Columns(9).Visible = Dtt.MAX("CveSeccionAlmacen").ToEntero > 0 'Dt.Dispose() End If @@ -1533,10 +1533,15 @@ Partial Class Inventarios_TraspasoAlmacen Else 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 - e.Row.FCDropDownList("DdlSeccionAlmacen").Visible = True - e.Row.FCDropDownList("DdlSeccionAlmacen").DataSource = GlobalDTSeccionAlmacen(UsuarioActual.CveEmpresa, DdlAlmacenRecepcion.SelectedValue.ToEntero) + + 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() - e.Row.FCDropDownList("DdlSeccionAlmacen").Items.Insert(0, New ListItem("Seleccione", "-1")) + 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 From 328e017241ed1f4109cbaab07e2fd04ce58557aa Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Thu, 23 Jul 2020 12:53:13 -0700 Subject: [PATCH 30/88] =?UTF-8?q?se=20ajust=C3=B3=20el=20tama=C3=B1o=20de?= =?UTF-8?q?=20los=20correos=20de=20las=20paqueter=C3=ADas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- General/PopUpPaqueteriasGuias.aspx.cs | 4 ++-- General/RepPaqueteriasGuias.aspx.cs | 4 ++-- Inventarios/EntregaAlmacen.aspx.vb | 4 ++-- Inventarios/EntregasPorRealizar.aspx.cs | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/General/PopUpPaqueteriasGuias.aspx.cs b/General/PopUpPaqueteriasGuias.aspx.cs index 3c8e94472..12badb3fb 100644 --- a/General/PopUpPaqueteriasGuias.aspx.cs +++ b/General/PopUpPaqueteriasGuias.aspx.cs @@ -761,7 +761,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas strBody.Append(""); strBody.Append(""); strBody.Append(""); - strBody.Append(" "); + strBody.Append(" "); strBody.Append("
    "); strBody.Append($""); strBody.Append("
    "); @@ -770,7 +770,7 @@ public partial class General_PopUpPaqueteriasGuias : ClsPaginas strBody.Append("

    "); strBody.Append($"

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

    "); strBody.Append("
    "); - strBody.Append(" "); + strBody.Append("
    "); strBody.Append(DetalleTable); strBody.Append("
    "); strBody.Append("
    "); diff --git a/General/RepPaqueteriasGuias.aspx.cs b/General/RepPaqueteriasGuias.aspx.cs index af2e3a827..bddef6c59 100644 --- a/General/RepPaqueteriasGuias.aspx.cs +++ b/General/RepPaqueteriasGuias.aspx.cs @@ -1110,7 +1110,7 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas strBody.Append(""); strBody.Append(""); strBody.Append(""); - strBody.Append(" "); + strBody.Append(" "); strBody.Append("
    "); strBody.Append($""); strBody.Append("
    "); @@ -1120,7 +1120,7 @@ public partial class General_RepPaqueteriasGuias : ClsPaginas strBody.Append($"

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

    "); strBody.Append("

    Su Pedido:

    "); strBody.Append("
    "); - strBody.Append(" "); + strBody.Append("
    "); strBody.Append(DetalleTable); strBody.Append("
    "); strBody.Append("
    "); diff --git a/Inventarios/EntregaAlmacen.aspx.vb b/Inventarios/EntregaAlmacen.aspx.vb index 1fda0e0ee..85cdf7b62 100644 --- a/Inventarios/EntregaAlmacen.aspx.vb +++ b/Inventarios/EntregaAlmacen.aspx.vb @@ -3228,7 +3228,7 @@ Partial Class Inventarios_EntregaAlmacen strBody.Append("") strBody.Append("") strBody.Append("") - strBody.Append(" ") + strBody.Append(" ") strBody.Append("
    ") strBody.Append($"") strBody.Append("
    ") @@ -3239,7 +3239,7 @@ Partial Class Inventarios_EntregaAlmacen strBody.Append("

    ") strBody.Append($"

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

    ") strBody.Append("
    ") - strBody.Append(" ") + strBody.Append("
    ") strBody.Append(DetalleTable) strBody.Append(" ") strBody.Append("
    ") diff --git a/Inventarios/EntregasPorRealizar.aspx.cs b/Inventarios/EntregasPorRealizar.aspx.cs index 689c7d368..d3a5ba81e 100644 --- a/Inventarios/EntregasPorRealizar.aspx.cs +++ b/Inventarios/EntregasPorRealizar.aspx.cs @@ -151,7 +151,7 @@ public partial class Inventarios_EntregasPorRealizar : ClsPaginas strBody.Append(""); strBody.Append(""); strBody.Append(""); - strBody.Append(" "); + strBody.Append(" "); strBody.Append("
    "); strBody.Append($""); strBody.Append("
    "); @@ -161,7 +161,7 @@ public partial class Inventarios_EntregasPorRealizar : ClsPaginas strBody.Append("

    "); strBody.Append($"

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

    "); strBody.Append("
    "); - strBody.Append(" "); + strBody.Append("
    "); strBody.Append(DetalleTable); strBody.Append("
    "); strBody.Append("
    "); From 5935719e493605e724b799818e23a913c3bcae41 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Thu, 23 Jul 2020 18:48:41 -0700 Subject: [PATCH 31/88] --- Nomina/Nomina2.aspx.cs | 174 ++++++++++----------- RH/ActualizacionMasiva.aspx | 140 ++++++++++++----- RH/ActualizacionMasiva.aspx.vb | 273 +++++++++++++++++++++++++-------- packages.config | 2 +- 4 files changed, 396 insertions(+), 193 deletions(-) diff --git a/Nomina/Nomina2.aspx.cs b/Nomina/Nomina2.aspx.cs index e60bfcbcf..753099b93 100644 --- a/Nomina/Nomina2.aspx.cs +++ b/Nomina/Nomina2.aspx.cs @@ -1425,6 +1425,93 @@ public partial class Nomina_Nomina2 : ClsPaginas } + private class NConcepto + { + public string NoConceptoP { get; set; } + public string ConceptoP { get; set; } + public string LabelValorP { get; set; } + public int CveConceptoP { get; set; } + public double ImporteP { get; set; } + public double ValorP { get; set; } + public int EstatusP { get; set; } + public bool isEditedP { get; set; } + public int isOnlyBisibleP { get; set; } + + + public string NoConceptoD { get; set; } + public string ConceptoD { get; set; } + public string LabelValorD { get; set; } + public int CveConceptoD { get; set; } + public double ImporteD { get; set; } + public double ValorD { get; set; } + public int EstatusD { get; set; } + public bool isEditedD { get; set; } + public int isOnlyBisibleD { get; set; } + } + + protected void GvConceptos_RowDataBound(object sender, GridViewRowEventArgs e) + { + + if (e.Row.RowType == DataControlRowType.DataRow) + { + // Datakeys + // Concepto,CveConcepto,Importe,Estatus,ConceptoD,CveConceptoD,ImporteD,EstatusD + int CveConcepto = e.Row.DataKey("CveConceptoP").ToEntero(); + int CveConceptoD = e.Row.DataKey("CveConceptoD").ToEntero(); + // Dim Importe As Decimal = e.Row.DataKey("Importe").ToDecimal() + // Dim ImporteD As Decimal = e.Row.DataKey("ImporteD").ToDecimal() + int Estatus = e.Row.DataKey("EstatusP").ToEntero(); + int EstatusD = e.Row.DataKey("EstatusD").ToEntero(); + int isOnlyBisibleP = e.Row.DataKey("isOnlyBisibleP").ToEntero(); + int isOnlyBisibleD = e.Row.DataKey("isOnlyBisibleD").ToEntero(); + + // Controles + Label LtlConcepto = e.Row.FCLabel("LtlConcepto"); + LinkButton LnkConcepto = e.Row.FCLinkButton("LnkConcepto"); + Label LtlConceptoD = e.Row.FCLabel("LtlConceptoD"); + LinkButton LnkConceptoD = e.Row.FCLinkButton("LnkConceptod"); + Label LtlImporte = e.Row.FCLabel("LtlImporte"); + LinkButton LnkImporte = e.Row.FCLinkButton("LnkImporte"); + Label LtlImporteD = e.Row.FCLabel("LtlImporteD"); + LinkButton LnkImporteD = e.Row.FCLinkButton("LnkImporteD"); + //isEditedD + if (isOnlyBisibleP == 1) + { + e.Row.CssClass = string.Format("{0} isOnlyBisibleP", e.Row.CssClass); + } + if (isOnlyBisibleD == 1) + { + e.Row.CssClass = string.Format("{0} isOnlyBisibleD", e.Row.CssClass); + } + + + if (Estatus < -1 | EstatusD < -1) + e.Row.CssClass = "ConceptosTotales"; + if (CveConcepto == 0 && (Estatus == 0 || Estatus == -1 || Estatus == -3)) + LtlImporte.Text = ""; + + if (CveConceptoD == 0 && (EstatusD == 0 || EstatusD == -1)) + LtlImporteD.Text = ""; + + if (Estatus == -1) + LtlConcepto.Visible = false; + else if (Estatus > 0) + LtlImporte.Visible = false; + + if (EstatusD == -1) + LtlConceptoD.Visible = false; + else if (EstatusD > 0) + LtlImporteD.Visible = false; + + + LnkConcepto.Visible = !LtlConcepto.Visible; + LnkConceptoD.Visible = !LtlConceptoD.Visible; + LnkImporte.Visible = !LtlImporte.Visible; + LnkImporteD.Visible = !LtlImporteD.Visible; + } + } + #endregion + protected void LnkFormatoTabular_Click(object sender, EventArgs e) { try @@ -1641,93 +1728,6 @@ public partial class Nomina_Nomina2 : ClsPaginas Alert("Ocurrio un error al generar el Formato de nominas" + ex.ToString()); } } - private class NConcepto - { - public string NoConceptoP { get; set; } - public string ConceptoP { get; set; } - public string LabelValorP { get; set; } - public int CveConceptoP { get; set; } - public double ImporteP { get; set; } - public double ValorP { get; set; } - public int EstatusP { get; set; } - public bool isEditedP { get; set; } - public int isOnlyBisibleP { get; set; } - - - public string NoConceptoD { get; set; } - public string ConceptoD { get; set; } - public string LabelValorD { get; set; } - public int CveConceptoD { get; set; } - public double ImporteD { get; set; } - public double ValorD { get; set; } - public int EstatusD { get; set; } - public bool isEditedD { get; set; } - public int isOnlyBisibleD { get; set; } - } - - protected void GvConceptos_RowDataBound(object sender, GridViewRowEventArgs e) - { - - if (e.Row.RowType == DataControlRowType.DataRow) - { - // Datakeys - // Concepto,CveConcepto,Importe,Estatus,ConceptoD,CveConceptoD,ImporteD,EstatusD - int CveConcepto = e.Row.DataKey("CveConceptoP").ToEntero(); - int CveConceptoD = e.Row.DataKey("CveConceptoD").ToEntero(); - // Dim Importe As Decimal = e.Row.DataKey("Importe").ToDecimal() - // Dim ImporteD As Decimal = e.Row.DataKey("ImporteD").ToDecimal() - int Estatus = e.Row.DataKey("EstatusP").ToEntero(); - int EstatusD = e.Row.DataKey("EstatusD").ToEntero(); - int isOnlyBisibleP = e.Row.DataKey("isOnlyBisibleP").ToEntero(); - int isOnlyBisibleD = e.Row.DataKey("isOnlyBisibleD").ToEntero(); - - // Controles - Label LtlConcepto = e.Row.FCLabel("LtlConcepto"); - LinkButton LnkConcepto = e.Row.FCLinkButton("LnkConcepto"); - Label LtlConceptoD = e.Row.FCLabel("LtlConceptoD"); - LinkButton LnkConceptoD = e.Row.FCLinkButton("LnkConceptod"); - Label LtlImporte = e.Row.FCLabel("LtlImporte"); - LinkButton LnkImporte = e.Row.FCLinkButton("LnkImporte"); - Label LtlImporteD = e.Row.FCLabel("LtlImporteD"); - LinkButton LnkImporteD = e.Row.FCLinkButton("LnkImporteD"); - //isEditedD - if (isOnlyBisibleP == 1) - { - e.Row.CssClass = string.Format("{0} isOnlyBisibleP", e.Row.CssClass); - } - if (isOnlyBisibleD == 1) - { - e.Row.CssClass = string.Format("{0} isOnlyBisibleD", e.Row.CssClass); - } - - - if (Estatus < -1 | EstatusD < -1) - e.Row.CssClass = "ConceptosTotales"; - if (CveConcepto == 0 && (Estatus == 0 || Estatus == -1 || Estatus == -3)) - LtlImporte.Text = ""; - - if (CveConceptoD == 0 && (EstatusD == 0 || EstatusD == -1)) - LtlImporteD.Text = ""; - - if (Estatus == -1) - LtlConcepto.Visible = false; - else if (Estatus > 0) - LtlImporte.Visible = false; - - if (EstatusD == -1) - LtlConceptoD.Visible = false; - else if (EstatusD > 0) - LtlImporteD.Visible = false; - - - LnkConcepto.Visible = !LtlConcepto.Visible; - LnkConceptoD.Visible = !LtlConceptoD.Visible; - LnkImporte.Visible = !LtlImporte.Visible; - LnkImporteD.Visible = !LtlImporteD.Visible; - } - } - #endregion - protected void LnkConcepto_Click(object sender, EventArgs e) { diff --git a/RH/ActualizacionMasiva.aspx b/RH/ActualizacionMasiva.aspx index e5223da2a..799f148ba 100644 --- a/RH/ActualizacionMasiva.aspx +++ b/RH/ActualizacionMasiva.aspx @@ -10,20 +10,26 @@ Cargas Masivas +
  • Carga Masiva
  • -
    +
    + + + +
    +
      -
    • Cliente: + <%--
    • Cliente:
    • + --%>
    • Proyecto: @@ -34,26 +40,21 @@
    • -
    -
    -
    - - - -
    -
    - +
    +
    @@ -61,55 +62,56 @@

    - - - - - - - - -
    + +
    -
    - +
    +
    + + Nombre - + Proyecto - + + <%----%> Sub Proyecto - + + <%----%> Turno - - + + <%----%> - + <%-- Supervisor + - - + --%> + SDD @@ -117,7 +119,7 @@ - + SDI @@ -125,9 +127,9 @@ - + - + SD IMSS @@ -140,11 +142,69 @@ -
    + + +
    <%----%> diff --git a/RH/Organigrama.aspx.vb b/RH/Organigrama.aspx.vb index 84175ea43..190813a3a 100644 --- a/RH/Organigrama.aspx.vb +++ b/RH/Organigrama.aspx.vb @@ -86,14 +86,8 @@ Partial Class RH_Organigrama CveEmpresaFiltro = UsuarioActual.CveEmpresa NivelOrg = If(rgx.IsMatch(txtNivel.Text), txtNivel.Text.ToEntero, NivelOrg) txtNivel.Text = "" - DdlSupervisorOrganigrama.SelectedIndex = 0 - ScriptManager.RegisterClientScriptBlock(Me, [GetType], "mykey", "drawChart()", True) 'ejecutamos la funcion de js para que haga la consulta de los registros - End Sub + 'DdlSupervisorOrganigrama.SelectedIndex = 0 -#End Region - - - Public Shared Function FetchData() As List(Of Object) Dim ObjRH As New ClsRH Dim DtTemporal As New DataTable Dim chartData As New List(Of Object)() @@ -110,8 +104,33 @@ Partial Class RH_Organigrama chartData.Add(New Object() {headerEmpleado, If(nombreEmpleado = nombreSuperior, "", nombreSuperior), puesto}) Next End If + Dim str As String = (New Script.Serialization.JavaScriptSerializer()).Serialize(chartData) + LblJson.Text = str + 'ScriptManager.RegisterClientScriptBlock(Me, [GetType], "mykey", "drawChart()", True) 'ejecutamos la funcion de js para que haga la consulta de los registros + End Sub - Return chartData +#End Region + + + Public Shared Function FetchData() As String + Dim ObjRH As New ClsRH + Dim DtTemporal As New DataTable + Dim chartData As New List(Of Object)() + + If ObjRH.GetOrganigrama(CveEmpresaFiltro, CveCabecera, NivelOrg) Then + DtTemporal = ObjRH.DtResultados.Copy + + For Each renglon As DataRow In DtTemporal.Rows + Dim nombreEmpleado As String = renglon("nombreEmpleado").ToString + Dim nombreSuperior As String = renglon("nombreSuperior").ToString + Dim puesto As String = renglon("puesto").ToString + Dim headerEmpleado As String = String.Format("{{{2}v{2}:{2}{0}{2},{2}f{2}:{2}{0}
    {1}
    {2}}}", nombreEmpleado, puesto, ControlChars.Quote) 'este es el JSON que da formato a los subtitulos se hace en String y la funcion lo hace JSON + + chartData.Add(New Object() {headerEmpleado, If(nombreEmpleado = nombreSuperior, "", nombreSuperior), puesto}) + Next + End If + Dim str As String = (New Script.Serialization.JavaScriptSerializer()).Serialize(chartData) + Return str End Function End Class diff --git a/RH/Personal.aspx b/RH/Personal.aspx index 9dce78f67..9dabad475 100644 --- a/RH/Personal.aspx +++ b/RH/Personal.aspx @@ -715,7 +715,7 @@ - +
    @@ -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 60/88] =?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 61/88] --- 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 62/88] --- 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 63/88] 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 64/88] --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 65/88] 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 66/88] 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 67/88] --- 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 68/88] --- 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 69/88] - --- 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 70/88] -- 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 71/88] 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 72/88] 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 73/88] 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 74/88] -- 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 75/88] 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 76/88] - --- 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 From 6039aba2530e3bb315f3bee076ecffa8386fbb14 Mon Sep 17 00:00:00 2001 From: Rakcsle Supertramp Date: Fri, 31 Jul 2020 19:44:55 -0700 Subject: [PATCH 77/88] Documetos parametros, Alamacenes, RepEstado resultados(General) --- App_Code/ClsBancos.vb | 2 +- App_Code/ClsClientes.vb | 14 +- App_Code/ClsContabilidad.vb | 32 +- App_Code/ClsEdocumentacion.vb | 103 ++- App_Code/ClsPaginas.vb | 4 + Contabilidad2/RepAnexoCatalogoMensual.aspx | 101 +-- Contabilidad2/RepAnexoCatalogoMensual.aspx.vb | 10 +- .../RepAnexoCatalogoMensualHorizontal.aspx | 335 +++++++++ .../RepAnexoCatalogoMensualHorizontal.aspx.vb | 328 +++++++++ .../RepEstadoResultadosHorizontal.aspx | 153 ++--- .../RepEstadoResultadosHorizontal.aspx.vb | 634 +++++++++++++++--- Inventarios/CatAlmacenes.aspx | 14 +- Inventarios/CatAlmacenes.aspx.vb | 11 +- RH/CatDocumentos.aspx | 236 +++++-- RH/CatDocumentos.aspx.vb | 308 ++++++++- RH/Personal.aspx | 65 ++ RH/Personal.aspx.vb | 106 ++- Ventas/ClientesAbonar.aspx | 2 +- Ventas/ClientesAbonar.aspx.vb | 13 +- vwd.webinfo | 8 + 20 files changed, 2151 insertions(+), 328 deletions(-) create mode 100644 Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx create mode 100644 Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx.vb diff --git a/App_Code/ClsBancos.vb b/App_Code/ClsBancos.vb index b4ce6e00d..b912c9d6e 100644 --- a/App_Code/ClsBancos.vb +++ b/App_Code/ClsBancos.vb @@ -4722,7 +4722,7 @@ Public Class ClsBancos strBody.AppendFormat(" ") - For Each dr As DataRow In DtResultados.FiltraParametros("CveConceptoContable IN (17) AND CveCompra > 0").Rows + For Each dr As DataRow In DtResultados.FiltraParametros("CveConceptoContable IN (17,312) AND CveCompra > 0").Rows strBody.AppendFormat(" ") strBody.AppendFormat(" {0}", dr("Fecha").ToString.ToDate.ToShortDateString()) strBody.AppendFormat(" {0}", dr("SerieFolio").ToString) diff --git a/App_Code/ClsClientes.vb b/App_Code/ClsClientes.vb index 9435c83d1..9d76674c8 100644 --- a/App_Code/ClsClientes.vb +++ b/App_Code/ClsClientes.vb @@ -930,9 +930,17 @@ Public Class ClsClientes Retorno = True Catch Ex1 As SqlException If Ex1.Message.Contains("Número: 2627;") Then - Alert("El Cliente no se guardo debido a que actualmente se encuentra registrado.", TipoMensaje.MsgAdvertencia) - ElseIf Ex1.Message.Contains("'UN_ClientesRFCEmpresa'") Then - Alert($"El Cliente no se guardo debido a que el RFC {RFC} se encuentra asignado a otro cliente.", TipoMensaje.MsgAdvertencia) + Alert("El Cliente no se guardo debido a que actualmente se encuentra registrado.", TipoMensaje.MsgAdvertencia) + ElseIf Ex1.Message.Contains("Número: 2601;") Then + + If Ex1.Message.Contains("UN_ClientesRFCEmpresa") Then + Alert($"El Cliente no se guardo debido a que el RFC {RFC} se encuentra asignado a otro cliente.", TipoMensaje.MsgAdvertencia) + End If + + If Ex1.Message.Contains("IND_Clientes_Codigo") Then + Alert("Ya existe un cliente registrado con el mismo Código.", TipoMensaje.MsgAdvertencia) + End If + Else Me.OnError("Ocurrió un error al intentar Actualizar los datos del Cliente.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) End If diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index 202c993ec..b63588707 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -4096,7 +4096,7 @@ Public Class ClsContabilidad Return Retorno End Function - Public Function GetAnexoCatalogoMensual(CveCuenta As Integer, Ejercicio As Integer, CveSubproyecto As Integer, CveEmpresa As Integer) As Boolean + Public Function GetAnexoCatalogoMensual(CveCuenta As Integer, Ejercicio As Integer, CveSubproyecto As Integer, CveEmpresa As Integer, Divisor As Integer, CveUsuario As Integer) As Boolean Dim Retorno = False DataAdapter("PA_Conta_AnexoCatalogoMensualGet") @@ -4106,6 +4106,8 @@ Public Class ClsContabilidad .Add("@Ejercicio", SqlDbType.Int).Value = Ejercicio .Add("@CveSubproyecto", SqlDbType.Int).Value = CveSubproyecto .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@Divisor", SqlDbType.Int).Value = Divisor + .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario End With Try @@ -6176,6 +6178,34 @@ Public Class ClsContabilidad End Function + + Public Function GetAnexoCatalogoMensualHorizontal(IdCuenta As Integer, FechaI As Date, FechaF As Date, OpcionCuentas As Integer, CveSubProyecto As String, CveEmpresa As Integer, Optional TipoMovtos As Integer = -1, Optional SAT As Integer = 0) As Boolean + Dim Retorno = False + + DataAdapter("PA_Conta2_AnexoCatalogoMensualHorizontalGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@FechaI", SqlDbType.Date).Value = FechaI + .Add("@FechaF", SqlDbType.Date).Value = FechaF + .Add("@IdCuentaPadre", SqlDbType.Int).Value = IdCuenta + .Add("@Tipo", SqlDbType.Int).Value = TipoMovtos + .Add("@OpcionCuentas", SqlDbType.Int).Value = OpcionCuentas + .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@SAT", SqlDbType.Int).Value = SAT + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + Me.OnError("Ocurrió un error al obtener el Anexo del Catalogo", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function GetEstadosAnualHorizontal(FechaI As Date, FechaF As Date, CveSubProyecto As Integer, Divisor As Integer, CveEmpresa As Integer, CveUsuario As Integer, Optional Tipo As Integer = 1) As Boolean Dim Retorno = False diff --git a/App_Code/ClsEdocumentacion.vb b/App_Code/ClsEdocumentacion.vb index 8ca3b451f..878dbc95b 100644 --- a/App_Code/ClsEdocumentacion.vb +++ b/App_Code/ClsEdocumentacion.vb @@ -505,9 +505,110 @@ Public Class ClsEdocumentacion ' Return Retorno ' End Function -#End Region +#End Region +#Region " P A R A M E T R O S " + + Public Function AddDocumentacionParametros(CveDocumentacion As Integer, Parametro As String, Descripcion As String, CveEmpresa As Integer, CveUsaurio As Integer) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Edoc_DocumentacionParametrosAdd") + + With SqlAdapter.SelectCommand.Parameters + + .Add("@CveDocumentacion", SqlDbType.Int).Value = CveDocumentacion + .Add("@Parametro", SqlDbType.VarChar).Value = Parametro + .Add("@Descripcion", SqlDbType.VarChar).Value = Descripcion + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + .Add("@CveUsaurio", SqlDbType.Int).Value = CveUsaurio + + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al agregar el pa.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + + Public Function UpdateDocumentacionParametros(CveDocumentacionParametro As Integer, CveDocumentacion As Integer, Parametro As String, Descripcion As String, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Edoc_DocumentacionParametrosUpdate") + + With SqlAdapter.SelectCommand.Parameters + + .Add("@CveDocumentacionParametro", SqlDbType.Int).Value = CveDocumentacionParametro + .Add("@CveDocumentacion", SqlDbType.Int).Value = CveDocumentacion + .Add("@Parametro", SqlDbType.VarChar).Value = Parametro + .Add("@Descripcion", SqlDbType.VarChar).Value = Descripcion + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al actualiar el parametro.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + Public Function GetDocumentacionParametros(CveDocumentacionParametro As Integer, CveDocumentacion As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Edoc_DocumentacionParametrosGet") + + With SqlAdapter.SelectCommand.Parameters + + .Add("@CveDocumentacionParametro", SqlDbType.Int).Value = CveDocumentacionParametro + .Add("@CveDocumentacion", SqlDbType.Int).Value = CveDocumentacion + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al consultar los parametros.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + + Public Function RemoveDocumentacionParametros(CveDocumentacionParametro As Integer, CveEmpresa As Integer) As Boolean + Dim Retorno As Boolean = False + + DataAdapter("PA_Edoc_DocumentacionParametrosRemove") + + With SqlAdapter.SelectCommand.Parameters + + .Add("@CveDocumentacionParametro", SqlDbType.Int).Value = CveDocumentacionParametro + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa + + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al eliminar el parametros.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) + End Try + + Return Retorno + End Function + + +#End Region #Region " IDisposable Support " ' IDisposable diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 26260d8a2..aa4ae7b67 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4240,6 +4240,10 @@ Public Class ClsPaginas PaginaDict.Add("/Contabilidad2/PolizasImpresion.aspx".ToUpper(), 726) PaginaDict.Add("/Contabilidad2/RepEstadoResultadosHorizontal.aspx".ToUpper(), 420) + PaginaDict.Add("/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx".ToUpper(), -1) + + + #End Region 'CONTRATOS #Region "Contratos" diff --git a/Contabilidad2/RepAnexoCatalogoMensual.aspx b/Contabilidad2/RepAnexoCatalogoMensual.aspx index cc4b98959..224507d7a 100644 --- a/Contabilidad2/RepAnexoCatalogoMensual.aspx +++ b/Contabilidad2/RepAnexoCatalogoMensual.aspx @@ -3,6 +3,11 @@ + Anexo del Catálogo - Mensual @@ -48,50 +53,58 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + +
    diff --git a/Contabilidad2/RepAnexoCatalogoMensual.aspx.vb b/Contabilidad2/RepAnexoCatalogoMensual.aspx.vb index b485b7178..9e698be19 100644 --- a/Contabilidad2/RepAnexoCatalogoMensual.aspx.vb +++ b/Contabilidad2/RepAnexoCatalogoMensual.aspx.vb @@ -22,10 +22,10 @@ Partial Class Contabilidad2_RepAnexoCatalogoMensual If Not IsPostBack Then Dim EjercicioParametro, SubProyectoParametro, DivisorParametro As Integer - CveCuenta = IfNull(Request("C"), "-1").ToString.ToEntero - EjercicioParametro = IfNull(Request("E"), "-1").ToString.ToEntero - SubProyectoParametro = IfNull(Request("S"), "-1").ToString.ToEntero - DivisorParametro = IfNull(Request("D"), "-1").ToString.ToEntero + CveCuenta = IfNull(Request("CveCuenta"), "-1").ToString.ToEntero + EjercicioParametro = IfNull(Request("Ejercicio"), "-1").ToString.ToEntero + SubProyectoParametro = IfNull(Request("CveSubProyecto"), "-1").ToString.ToEntero + DivisorParametro = IfNull(Request("Divisor"), "-1").ToString.ToEntero InicializaValores() @@ -72,7 +72,7 @@ Partial Class Contabilidad2_RepAnexoCatalogoMensual Private Sub CargaDatos() Dim Conta As New ClsContabilidad - If Conta.GetAnexoCatalogoMensual(CveCuenta, DdlEjercicio.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then + If Conta.GetAnexoCatalogoMensual(CveCuenta, DdlEjercicio.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, DdlDivisor.SelectedValue.ToEntero, UsuarioActual.CveUsuario) Then GvMensual2.DataSource = Conta.DtResultados Else GvMensual2.DataSource = Nothing diff --git a/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx b/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx new file mode 100644 index 000000000..950df1886 --- /dev/null +++ b/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx @@ -0,0 +1,335 @@ +<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="RepAnexoCatalogoMensualHorizontal.aspx.vb" Inherits="Contabilidad_RepAnexoCatalogoMensualHorizontal" EnableEventValidation="false" %> + + + + + + + + + + + + + + <%--
  • + Excel +
  • +
  • + PDF +
  • --%> + +
    + + + + +
    +
    +
    + + "><%--class="expand"--%> + +
    +
    + <%--
    --%> +
      +
    • F. I.
    • +
    • + +
      + + + + + + + + + + +
      + +
    • +
    • F. F.
    • +
    • +
      + + + + + + + + + + + +
      +
    • + +
    • Cuenta: +
    • +
    • + + + + + + + + +
    • + + +
    +
    +
    +
    > + +
      +
    • + Tipo Movto: +
    • +
    • + + + + + + + + + +
    • +
    • + +
      + + + +
      +
    • +
    • Tipo: +
    • + +
    • + + + + + +
    • +
    • Tipo de Cuentas: +
    • +
    • + + +
    • + +
    + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Saldos Iniciales
    DeudorAcreedor
    +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    Saldos Actuales
    DeudorAcreedor
    +
    + + + <%----%> + + + +
    + + + + + + + + + + + + + + + +
    + +
    + +
    +
    + + + + + + + diff --git a/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx.vb b/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx.vb new file mode 100644 index 000000000..e2ab70cc6 --- /dev/null +++ b/Contabilidad2/RepAnexoCatalogoMensualHorizontal.aspx.vb @@ -0,0 +1,328 @@ +Option Explicit On +Option Strict On + +Imports System.Data +Imports Extensiones +Imports Microsoft.Reporting.WebForms + +Partial Class Contabilidad_RepAnexoCatalogoMensualHorizontal + Inherits ClsPaginas + + +#Region "PROPIEDADES" + Private Property DtDatos As DataTable + Get + DtDatos = DirectCast(ViewState("DtDatos"), DataTable) + End Get + + Set(ByVal value As DataTable) + ViewState("DtDatos") = value + End Set + End Property + Private Property FechaInicio As Date + Get + FechaInicio = ViewState("FechaInicio").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaInicio") = value + End Set + End Property + + Private Property FechaFin As Date + Get + FechaFin = ViewState("FechaFin").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaFin") = value + End Set + End Property + Private Property IdCuenta As Integer + Get + IdCuenta = ViewState("CveCuenta").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("CveCuenta") = value + End Set + End Property + 'Private Property DTCuentas As DataTable + ' Get + ' Return CType(ViewState("DTCuentas"), DataTable) + ' End Get + ' Set(value As DataTable) + ' ViewState("DTCuentas") = value + ' End Set + 'End Property + Private Property CveSubProyecto As String + Get + CveSubProyecto = ViewState("CveSubProyecto").ToString + End Get + Set(value As String) + ViewState("CveSubProyecto") = value + End Set + End Property + + Private Property TipoReporte As Integer + Get + TipoReporte = ViewState("TP").ToString.ToEntero + End Get + Set(value As Integer) + ViewState("TP") = value + End Set + End Property +#End Region + + Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load + If Not Page.IsPostBack Then + Dim ErrorParametros = True + DtDatos = Nothing + CargaTipoCuentas() + + FechaInicio = Now.FirstDayOfMonth + FechaFin = Date.Now + + 'If UsuarioActual.Empresa.UsaAC Then + ' TipoReporte = -1 + 'Else + ' TipoReporte = 1 + ' tdTipoReporte.Visible = True + ' tdTipoReporte2.Visible = True + 'End If + + + If Request("CveCuenta") IsNot Nothing AndAlso IsNumeric(Request("CveCuenta")) AndAlso Request("CveCuenta").ToEntero > 0 Then + 'If Request("FI") IsNot Nothing AndAlso Request("FI").ToString.Length = 10 AndAlso Request("FI").ToDate > "01/01/1000".ToDate Then + If Request("FF") IsNot Nothing AndAlso Request("FF").ToString.Length = 10 AndAlso Request("FF").ToDate > "01/01/1000".ToDate Then + IdCuenta = Request("CveCuenta").ToEntero + 'FechaInicio = Request("FI").ToDate + FechaFin = Request("FF").ToDate + DdlCuentas.SelectedValueExist(IdCuenta) + If DdlCuentas.SelectedValue.ToEntero <> -1 Then + 'RegistraScript("Enable();") + DdlTipoCuentas.SelectedValueExist(-2) + End If + + If Request("FI") IsNot Nothing AndAlso Request("FI").ToString.Length = 10 AndAlso Request("FI").ToDate > "01/01/1000".ToDate Then + FechaInicio = Request("FI").ToDate + Else + If Request("ER") IsNot Nothing AndAlso Request("ER").ToString = "1" Then + FechaInicio = DateSerial(Year(FechaFin), Month(FechaFin), 1) + Else + FechaInicio = ("1900/01/01").ToDate + End If + End If + + + If Request("CM") IsNot Nothing AndAlso IsNumeric(Request("CM")) AndAlso Request("CM").ToEntero > 0 Then + DdlCuenta.SelectedValueExist(Request("CM").ToString) + End If + + If Request("CveSubProyecto") IsNot Nothing AndAlso IsNumeric(Request("CveSubProyecto")) Then + CveSubProyecto = Request("CveSubProyecto").ToString + End If + + + ErrorParametros = False + + + If Request("TP") IsNot Nothing AndAlso IsNumeric(Request("TP")) AndAlso Request("TP").ToEntero > 0 Then + TipoReporte = Request("TP").ToEntero + + DdlTipoReporte.SelectedValue = TipoReporte.ToString + End If + End If + 'End If + End If + + + TxtFechaDel.Text = FechaInicio.ToShortDateString + TxtFechaAl.Text = FechaFin.ToShortDateString + + If Not ErrorParametros Then + CargaDatos() + End If + + End If + End Sub + +#Region "CARGA DATOS Y GRID" + 'Public Function WSCuentas() As String + ' Dim Str As New StringBuilder + ' Dim i As Integer = 0 + ' Dim dt As DataTable = DTCuentas '.FiltraParametros("Afectable = 1") + + ' If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then + + ' For Each dr As DataRow In dt.Rows + ' i += 1 + ' Str.AppendFormat("{{value:""{0}"",label:""{1}{3}""}}{2}", dr("CveCuenta"), dr("CtaCodigo").ToString.Replace("""", ""), If(i < dt.Rows.Count, ",", ""), If(dr("Afectable").ToString = "1", " *", "")) + ' Next + + ' End If + + + ' Return Str.ToString + 'End Function + Private Sub CargaTipoCuentas() + 'Dim ObjTipoCuenta As New ClsContPAQi(UsuarioActual.Empresa) + Dim ObjTipoCuenta As New ClsContabilidad + Dim strGlobal As String = "" + + If ObjTipoCuenta.GetCuentas(-1, "-1", -1, UsuarioActual.CveEmpresa) Then + Dim dr As DataRow = ObjTipoCuenta.DtResultados.FiltroPrimero("Codigo IN ('_GLOBAL')") + If dr IsNot Nothing Then strGlobal = dr.Item(0).ToString + 'DTCuentas = ObjTipoCuenta.DtResultados '.FiltraParametros("Afectable = 1") + DdlTipoCuentas.DataSource = ObjTipoCuenta.DtResultados.FiltraParametros("Codigo IN ('_ACTIVO', '_BPASIVO', '_CAPITAL', '_CUADRE', '_ESTADISTICAS', '_ORDEN', '_RACREEDOR', '_RDEUDOR', '_UTILIDAD')") + DdlCuentas.DataSource = ObjTipoCuenta.DtResultados + End If + ObjTipoCuenta.Dispose() + DdlTipoCuentas.DataBind() + 'If strGlobal.Length > 0 Then DdlTipoCuentas.Items.Insert(0, New ListItem("Todas", strGlobal)) + DdlTipoCuentas.Items.Insert(0, New ListItem("Todas las Cuentas", "-1")) + DdlTipoCuentas.Items.Add(New ListItem("Algun específico", "-2")) + DdlTipoCuentas.SelectedValue = "-2" + + DdlCuentas.DataBind() + + DdlSubproyecto.DataSource = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, -1) + DdlSubproyecto.DataBind() + End Sub + Private Sub CargaDatos() + 'Dim ObjConta As New ClsContPAQi(UsuarioActual.Empresa) + Dim ObjConta As New ClsContabilidad + + If Request("TipoReporte") IsNot Nothing Then + TipoReporte = If(TipoReporte = -1, -1, DdlTipoReporte.SelectedValue.ToEntero) + Else + TipoReporte = DdlTipoReporte.SelectedValue.ToEntero + End If + 'Dim CveSubProyecto As String + If Request("CveSubProyecto") IsNot Nothing Then + CveSubProyecto = Request("CveSubProyecto").ToString + Else + CveSubProyecto = DdlSubproyecto.SelectedValue.ToEntero.ToString + End If + + If ObjConta.GetAnexoCatalogoMensualHorizontal(IdCuenta, FechaInicio, FechaFin, DdlCuenta.SelectedValue.ToEntero, CveSubProyecto, UsuarioActual.CveEmpresa, TipoReporte) Then + + If Request("CveCuenta") IsNot Nothing AndAlso IsNumeric(Request("CveCuenta")) AndAlso Request("CveCuenta").ToEntero > 0 Then + DtDatos = ObjConta.DtResultados.FiltraParametros(" SaldoInicial <> 0 OR Cargos <> 0 OR Abonos <> 0") + Else + DtDatos = ObjConta.DtResultados + End If + + CargaGrid() + Else + DtDatos = Nothing + Alert("Ocurrio un error al cargar los datos del Anexo del Catálogo.", TipoMensaje.MsgError) + End If + + ObjConta.Dispose() + End Sub + Private Sub CargaGrid() + GvDatos.DataSource = DtDatos + 'GvDatos.Dispose() + GvDatos.DataBind() + UpDatos.Update() + If DtDatos.Rows.Count > 0 Then + RegistraScript("Scroll();") + End If + + End Sub +#End Region + + Protected Sub GvIngresos_RowDataBound(sender As Object, e As GridViewRowEventArgs) + If e.Row.RowType = DataControlRowType.DataRow Then + + If e.Row.DBCampo("CveCuenta").ToEntero = IdCuenta Then + e.Row.ControlStyle.Font.Bold = True + 'e.Row.ControlStyle.Font.Size = 9 + 'e.Row.ControlStyle.Height = 30 + Else + e.Row.ControlStyle.Font.Bold = False + End If + + 'If e.Row.DBCampo("CtaMayor") = "4" Or e.Row.DBCampo("CtaMayor") = "1" Then + ' e.Row.ControlStyle.Font.Bold = True + 'End If + + 'Acomoda Deudor y Acreedor + If e.Row.DBCampo("Tipo") <> "D" Then + 'e.Row.FCLabel("LbSaldoInicial").Text = String.Format("{0}{1}", e.Row.DBCampo("SaldoInicial").FormatoNumero, "          ") + e.Row.FCLabel("LbSaldoInicial2").Visible = True + e.Row.FCLabel("LbSaldoActual").Visible = True + End If + + 'Colorea NEGATIVOS + If e.Row.DBCampo("SaldoInicial").ToString.ToDouble < 0 Then + e.Row.FCLabel("LbSaldoInicial").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("Cargos").ToString.ToDouble < 0 Then + e.Row.FCLabel("LbCargos").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("Abonos").ToString.ToDouble < 0 Then + e.Row.FCLabel("LbAbonos").ForeColor = Drawing.Color.Red + End If + If e.Row.DBCampo("SaldoActual").ToString.ToDouble < 0 Then + e.Row.FCHyperLink("HLSaldoActual").ForeColor = Drawing.Color.Red + End If + + e.Row.FCHyperLink("HLSaldoActual").NavigateUrl = String.Format("/Contabilidad2/RepMovimientosAuxiliaresCatalogo.aspx?CveCuenta={0}&FI={1}&FF={2}&CveSubProyecto={3}&TP={4}", e.Row.DBCampo("CveCuenta"), FechaInicio.ToShortDateString, FechaFin.ToShortDateString, CveSubProyecto, TipoReporte) + End If + End Sub + + Protected Sub LnkImprimir_Click(sender As Object, e As EventArgs) Handles LnkImprimir.Click + If Not IsNothing(DtDatos) Then + ImprimirReporte() + End If + End Sub + + Protected Sub LnkExcel_Click(sender As Object, e As EventArgs) Handles LnkExcel.Click + If Not IsNothing(DtDatos) Then + ImprimirReporte("Excel") + 'GvDatos.ExportToExcelG("AnexoCatalogo" & Now.ToShortDateString & ".xlsx") + 'GvDatos.ExportToExcelG("ExistenciasHorizontal.xlsx", "Anexo Catalogo", UsuarioActual, "".ToString, 100, 200) + End If + End Sub + Private Sub ImprimirReporte(Optional Formato As String = "PDF") + 'ubicacion del rdlc + Dim reportpath As String = "Contabilidad/Reportes/RepAnexoCatalogo.rdlc" + 'nombre del reporte + Dim fileName As String = "AnexoCatalogo" + 'parametros a enviar al reporte + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("IdCuenta", IdCuenta.ToString)) + params.Add(New ReportParameter("pEmp", UsuarioActual.Empresa.Empresa)) + params.Add(New ReportParameter("usuarioImprimio", UsuarioActual.Nombre)) + params.Add(New ReportParameter("pImg", New Uri(Server.MapPath(String.Format("~/Empresas/{0}/Logo.png", UsuarioActual.CveEmpresa))).AbsoluteUri)) + params.Add(New ReportParameter("pFechaFin", FechaFin.ToString("dd/MM/yyyy"))) + params.Add(New ReportParameter("pFechaInicio", FechaInicio.ToString("dd/MM/yyyy"))) + + ImprimirPDF(reportpath, DtDatos, params, fileName, Formato) + End Sub + Public Sub BtnConsultar_Click(sender As Object, e As EventArgs) Handles BtnConsultar.Click + + If DdlTipoCuentas.SelectedValue.ToEntero = -2 AndAlso DdlCuentas.SelectedValue.ToEntero = -1 Then + Alert("El campo Cuenta es obligatorio.", TipoMensaje.MsgError) + Else + FechaInicio = If(TxtFechaDel.Text = "" Or TxtFechaDel.Text = "__/__/____", Date.Now, TxtFechaDel.Text.ToDate) + FechaFin = If(TxtFechaAl.Text = "" Or TxtFechaAl.Text = "__/__/____", Date.Now, TxtFechaAl.Text.ToDate) + IdCuenta = If(DdlTipoCuentas.SelectedValue.ToEntero = -2, DdlCuentas.SelectedValue.ToEntero, DdlTipoCuentas.SelectedValue.ToEntero) + + CargaDatos() + End If + 'RegistraScript("Enable();") + End Sub + Protected Sub DdlTipoCuentas_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlTipoCuentas.SelectedIndexChanged + If DdlTipoCuentas.SelectedValue.ToEntero = -2 Then + DdlCuentas.Enabled = True + Else + DdlCuentas.Enabled = False + DdlCuentas.SelectedValueExist(-1) + End If + End Sub + + Public Overrides Sub VerifyRenderingInServerForm(control As Control) + + End Sub + +End Class diff --git a/Contabilidad2/RepEstadoResultadosHorizontal.aspx b/Contabilidad2/RepEstadoResultadosHorizontal.aspx index ce71fff6b..ce70e7ad1 100644 --- a/Contabilidad2/RepEstadoResultadosHorizontal.aspx +++ b/Contabilidad2/RepEstadoResultadosHorizontal.aspx @@ -10,8 +10,10 @@ - - + +
  • + Generar Excel +
  • @@ -27,15 +29,15 @@
      - +
      - +
      - +
      - +
      @@ -92,7 +94,7 @@ - + @@ -106,16 +108,16 @@ - - <%----%> + + <%-- --%> - - <%----%> + + <%-- --%> @@ -124,7 +126,7 @@

      - + @@ -161,7 +163,7 @@ - +
      + @@ -192,11 +195,13 @@ - + + - + <%----%> + @@ -298,12 +303,13 @@

      - + - + <%----%> + @@ -405,7 +411,7 @@

      - + @@ -492,14 +498,7 @@ - <%-- - - - - - --%> - - <%-- --%> + @@ -558,13 +557,13 @@ - + - + @@ -593,41 +592,7 @@ - <%-- - - - - - - - - - - - - - - - - - - - - - - - - --%> - - - <%-- - - - - - --%> - - <%----%> + @@ -644,13 +609,13 @@ - + - + @@ -700,47 +665,47 @@

      - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + <%-- @@ -756,7 +721,7 @@ - + diff --git a/Contabilidad2/RepEstadoResultadosHorizontal.aspx.vb b/Contabilidad2/RepEstadoResultadosHorizontal.aspx.vb index c051bc71c..4664d9633 100644 --- a/Contabilidad2/RepEstadoResultadosHorizontal.aspx.vb +++ b/Contabilidad2/RepEstadoResultadosHorizontal.aspx.vb @@ -3,7 +3,9 @@ Option Strict On Imports System.Data Imports System.Drawing +Imports System.IO Imports Extensiones +Imports GemBox.Spreadsheet Imports Microsoft.Reporting.WebForms Partial Class Contabilidad_RepEstadoResultadosHorizontal @@ -21,6 +23,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal ViewState("DtDatosMes") = value End Set End Property + Private Property DtIngresosMes As DataTable Get DtIngresosMes = DirectCast(ViewState("DtIngresosMes"), DataTable) @@ -291,6 +294,8 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End If If Tab.ActiveTabIndex = 2 Then + ValidaEjercicios() + LiSubProyectoDdl.Visible = True LiSubProyectoLbl.Visible = True @@ -326,6 +331,39 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal LiDivisorLbl.Visible = True End If + UpFiltros.Update() + End Sub + + + Protected Sub DdlEjercicio_SelectedIndexChanged(sender As Object, e As EventArgs) + ValidaEjercicios() + End Sub + + Protected Sub DdlEjercicio2_SelectedIndexChanged(sender As Object, e As EventArgs) + ValidaEjercicios() + End Sub + + Private Sub ValidaEjercicios() + + + Dim EInicio As Integer = DdlEjercicio.SelectedValue.ToEntero + + + If EInicio > DdlEjercicio2.SelectedValue.ToEntero Then + + If DdlEjercicio2.Items.Count > 0 Then + DdlEjercicio2.SelectedIndex = DdlEjercicio2.Items.Count - 1 + End If + + Dim Fejerciosio As Integer = DdlEjercicio2.SelectedValue.ToEntero + + If Not EInicio + 1 > Fejerciosio Then + DdlEjercicio2.SelectedValueExist(EInicio + 1) + End If + + End If + + UpFiltros.Update() End Sub @@ -366,6 +404,11 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal 'AÑO HORIZONTAL If Tab.ActiveTabIndex = 2 Then + + If DdlEjercicio.SelectedValue.ToEntero > DdlEjercicio2.SelectedValue.ToEntero Then + Alert("El ejercicio inicio no debe ser mayor al ejercicio fin.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If CargaDatosAnualH() End If @@ -478,12 +521,20 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal - Private Sub SumaTotales() - 'Llena Lb´s Totales - LbTotalActual.Text = TotalActualMes.ToString.FormatoNumero - - LbTotalAnterior.Text = TotalAnteriorMes.ToString.FormatoNumero - + Private Sub SumaTotales() + 'Llena Lb´s Totales + + + If DdlDivisor.SelectedValue.ToEntero > 1 Then + LbTotalActual.Text = TotalActualMes.ToString("###,###,##0") + LbTotalAnterior.Text = TotalAnteriorMes.ToString("###,###,##0") + Else + LbTotalActual.Text = TotalActualMes.ToString("###,###,##0.00") + LbTotalAnterior.Text = TotalAnteriorMes.ToString("###,###,##0.00") + End If + + + LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) @@ -493,8 +544,10 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal #Region "GV´S ROW DATA BOUND" - Protected Sub GvIngresos_RowDataBound(sender As Object, e As GridViewRowEventArgs) - If e.Row.RowType = DataControlRowType.DataRow Then + Protected Sub GvIngresos_RowDataBound(sender As Object, e As GridViewRowEventArgs) + + If e.Row.RowType = DataControlRowType.DataRow Then + If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then TotalActualMes += e.Row.DBCampo("ImporteActual").ToString.ToDouble TotalAnteriorMes += e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble @@ -507,10 +560,20 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End If If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then - e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - End If + e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) + e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) + + + If DdlDivisor.SelectedValue.ToEntero > 1 Then + e.Row.FCHyperLink("HLActual").Text = e.Row.DataKey("ImporteActual").ToEntero.ToString("###,###,##0") + e.Row.FCHyperLink("HLAnterior").Text = e.Row.DataKey("ImporteAcumulado").ToEntero.ToString("###,###,##0").ToString + Else + e.Row.FCHyperLink("HLActual").Text = e.Row.DataKey("ImporteActual").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAnterior").Text = e.Row.DataKey("ImporteAcumulado").ToDecimal.ToString("###,###,##0.00").ToString + End If + + End If If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then @@ -540,6 +603,14 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) End If + If DdlDivisor.SelectedValue.ToEntero > 1 Then + e.Row.FCHyperLink("HLActual").Text = e.Row.DataKey("ImporteActual").ToEntero.ToString("###,###,##0") + e.Row.FCHyperLink("HLAnterior").Text = e.Row.DataKey("ImporteAcumulado").ToEntero.ToString("###,###,##0").ToString + Else + e.Row.FCHyperLink("HLActual").Text = e.Row.DataKey("ImporteActual").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAnterior").Text = e.Row.DataKey("ImporteAcumulado").ToDecimal.ToString("###,###,##0.00").ToString + End If + If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red End If @@ -579,8 +650,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal ObjConta.Dispose() If DtDatosMesH IsNot Nothing Then - CargaGridsMesH() - SumaTotalesMesH() + CargaGridsMesH() Else End If @@ -616,7 +686,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row.Item("Noviembre") = DtIngresosMesH.SUM("Noviembre", "NOT CtaMayor in (3,4)") Row.Item("Diciembre") = DtIngresosMesH.SUM("Diciembre", "NOT CtaMayor in (3,4)") - Row.Item("Nombre") = "TOTAL INGRESOS " + Row.Item("Nombre") = "TOTAL INGRESOS" Row.Item("ImporteActual") = TotalActual.ToString Row.Item("PorcentajeActual") = "100.00" Row.Item("ImporteAcumulado") = TotalAnterior.ToString @@ -714,34 +784,25 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal End Sub - Private Sub SumaTotalesMesH() - ''Llena Lb´s Totales - ''********************************************************************************* - 'LbTotalActual.Text = TotalActualMes.ToString.FormatoNumero - 'LbTotalAnterior.Text = TotalAnteriorMes.ToString.FormatoNumero - - 'LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) - 'LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) - - - End Sub Protected Sub GvIngresosMesH_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then TotalActualMes += e.Row.DBCampo("ImporteActual").ToString.ToDouble - TotalAnteriorMes += e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble - 'e.Row.ControlStyle.BackColor = Drawing.Color.LightGray - 'e.Row.ControlStyle.ForeColor = Drawing.Color.White + TotalAnteriorMes += e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble e.Row.ControlStyle.Font.Bold = True - ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then - 'e.Row.CssClass = "SubTotales3" + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then e.Row.ControlStyle.Font.Bold = True End If If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then + + 'e.Row.FCHyperLink("HLNombre").NavigateUrl = $"./RepAnexoCatalogoMensualHorizontal.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&FF=31/12/{DdlEjercicio.SelectedValue}&FI=01/01/{DdlEjercicio.SelectedValue}&ER=1" + + e.Row.FCHyperLink("HLNombre").NavigateUrl = $"./RepAnexoCatalogoMensual.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&Ejercicio={DdlEjercicio.SelectedValue}&Divisor={DdlDivisor.SelectedValue}&CveSubProyecto=-1" + e.Row.FCHyperLink("HLEnero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/01/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/01/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) e.Row.FCHyperLink("HLFebrero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/02/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/02/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) e.Row.FCHyperLink("HLMarzo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/03/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/03/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) @@ -759,14 +820,59 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) End If - 'If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then - ' e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red - 'End If + If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Or e.Row.DBCampo("Nombre") = "TOTAL INGRESOS" Then + + If DdlDivisor.SelectedValue.ToEntero > 1 Then + + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0") + Else + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0.00") + End If + + End If + + + e.Row.FCHyperLink("HLEnero").ForeColor = If(e.Row.DataKey("Enero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLEnero").ForeColor) + e.Row.FCHyperLink("HLFebrero").ForeColor = If(e.Row.DataKey("Febrero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLFebrero").ForeColor) + e.Row.FCHyperLink("HLMarzo").ForeColor = If(e.Row.DataKey("Marzo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMarzo").ForeColor) + e.Row.FCHyperLink("HLAbril").ForeColor = If(e.Row.DataKey("Abril").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLMayo").ForeColor = If(e.Row.DataKey("Mayo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLJunio").ForeColor = If(e.Row.DataKey("Junio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMayo").ForeColor) + e.Row.FCHyperLink("HLJulio").ForeColor = If(e.Row.DataKey("Julio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLJulio").ForeColor) + e.Row.FCHyperLink("HLAgosto").ForeColor = If(e.Row.DataKey("Agosto").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAgosto").ForeColor) + e.Row.FCHyperLink("HLSeptiembre").ForeColor = If(e.Row.DataKey("Septiembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLSeptiembre").ForeColor) + e.Row.FCHyperLink("HLOctubre").ForeColor = If(e.Row.DataKey("Octubre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLOctubre").ForeColor) + e.Row.FCHyperLink("HLNoviembre").ForeColor = If(e.Row.DataKey("Noviembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLNoviembre").ForeColor) + e.Row.FCHyperLink("HLDiciembre").ForeColor = If(e.Row.DataKey("Diciembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLDiciembre").ForeColor) If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then - e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red - End If - End If + e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red + End If + + End If + End Sub Protected Sub GvGastosMesH_RowDataBound(sender As Object, e As GridViewRowEventArgs) @@ -786,6 +892,9 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Dim CveCuenta As Integer = e.Row.DataKey("CveCuenta").ToEntero + 'e.Row.FCHyperLink("HLNombre").NavigateUrl = $"./RepAnexoCatalogoMensualHorizontal.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&FF=31/12/{DdlEjercicio.SelectedValue}&FI=01/01/{DdlEjercicio.SelectedValue}&ER=1" + e.Row.FCHyperLink("HLNombre").NavigateUrl = $"./RepAnexoCatalogoMensual.aspx?CveCuenta={e.Row.DBCampo("CveCuenta").ToString}&Ejercicio={DdlEjercicio.SelectedValue}&Divisor={DdlDivisor.SelectedValue}&CveSubProyecto=-1" + e.Row.FCHyperLink("HLEnero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/01/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/01/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) e.Row.FCHyperLink("HLFebrero").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/02/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/02/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) e.Row.FCHyperLink("HLMarzo").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), $"01/03/{DdlEjercicio.SelectedValue}".ToDate.LastDayOfMonth.ToShortDateString, $"01/03/{DdlEjercicio.SelectedValue}".ToDate.ToShortDateString) @@ -801,8 +910,59 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - End If - + End If + + + + If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Or e.Row.DBCampo("Nombre") = "TOTAL GASTOS" Then + + If DdlDivisor.SelectedValue.ToEntero > 1 Then + + 'Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre,PorcentajeAcumulado + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0") + + Else + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0.00") + End If + End If + + e.Row.FCHyperLink("HLEnero").ForeColor = If(e.Row.DataKey("Enero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLEnero").ForeColor) + e.Row.FCHyperLink("HLFebrero").ForeColor = If(e.Row.DataKey("Febrero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLFebrero").ForeColor) + e.Row.FCHyperLink("HLMarzo").ForeColor = If(e.Row.DataKey("Marzo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMarzo").ForeColor) + e.Row.FCHyperLink("HLAbril").ForeColor = If(e.Row.DataKey("Abril").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLMayo").ForeColor = If(e.Row.DataKey("Mayo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLJunio").ForeColor = If(e.Row.DataKey("Junio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMayo").ForeColor) + e.Row.FCHyperLink("HLJulio").ForeColor = If(e.Row.DataKey("Julio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLJulio").ForeColor) + e.Row.FCHyperLink("HLAgosto").ForeColor = If(e.Row.DataKey("Agosto").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAgosto").ForeColor) + e.Row.FCHyperLink("HLSeptiembre").ForeColor = If(e.Row.DataKey("Septiembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLSeptiembre").ForeColor) + e.Row.FCHyperLink("HLOctubre").ForeColor = If(e.Row.DataKey("Octubre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLOctubre").ForeColor) + e.Row.FCHyperLink("HLNoviembre").ForeColor = If(e.Row.DataKey("Noviembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLNoviembre").ForeColor) + e.Row.FCHyperLink("HLDiciembre").ForeColor = If(e.Row.DataKey("Diciembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLDiciembre").ForeColor) + + + If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red End If @@ -818,6 +978,52 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Attributes.Add("style", "Font-weight: bold") + + + If DdlDivisor.SelectedValue.ToEntero > 0 Then + + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0") + + Else + e.Row.FCHyperLink("HLEnero").Text = e.Row.DataKey("Enero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLFebrero").Text = e.Row.DataKey("Febrero").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMarzo").Text = e.Row.DataKey("Marzo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAbril").Text = e.Row.DataKey("Abril").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLMayo").Text = e.Row.DataKey("Mayo").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJunio").Text = e.Row.DataKey("Junio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLJulio").Text = e.Row.DataKey("Julio").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLAgosto").Text = e.Row.DataKey("Agosto").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLSeptiembre").Text = e.Row.DataKey("Septiembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLOctubre").Text = e.Row.DataKey("Octubre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLNoviembre").Text = e.Row.DataKey("Noviembre").ToDecimal.ToString("###,###,##0.00") + e.Row.FCHyperLink("HLDiciembre").Text = e.Row.DataKey("Diciembre").ToDecimal.ToString("###,###,##0.00") + End If + + e.Row.FCHyperLink("HLEnero").ForeColor = If(e.Row.DataKey("Enero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLEnero").ForeColor) + e.Row.FCHyperLink("HLFebrero").ForeColor = If(e.Row.DataKey("Febrero").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLFebrero").ForeColor) + e.Row.FCHyperLink("HLMarzo").ForeColor = If(e.Row.DataKey("Marzo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMarzo").ForeColor) + e.Row.FCHyperLink("HLAbril").ForeColor = If(e.Row.DataKey("Abril").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLMayo").ForeColor = If(e.Row.DataKey("Mayo").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAbril").ForeColor) + e.Row.FCHyperLink("HLJunio").ForeColor = If(e.Row.DataKey("Junio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLMayo").ForeColor) + e.Row.FCHyperLink("HLJulio").ForeColor = If(e.Row.DataKey("Julio").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLJulio").ForeColor) + e.Row.FCHyperLink("HLAgosto").ForeColor = If(e.Row.DataKey("Agosto").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLAgosto").ForeColor) + e.Row.FCHyperLink("HLSeptiembre").ForeColor = If(e.Row.DataKey("Septiembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLSeptiembre").ForeColor) + e.Row.FCHyperLink("HLOctubre").ForeColor = If(e.Row.DataKey("Octubre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLOctubre").ForeColor) + e.Row.FCHyperLink("HLNoviembre").ForeColor = If(e.Row.DataKey("Noviembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLNoviembre").ForeColor) + e.Row.FCHyperLink("HLDiciembre").ForeColor = If(e.Row.DataKey("Diciembre").ToDecimal < 0, Drawing.Color.Red, e.Row.FCHyperLink("HLDiciembre").ForeColor) + + End If End Sub @@ -928,6 +1134,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row.Item("ImporteAcumulado") = DtIngresosAnualH.SUM("ImporteAcumulado", "NOT CtaMayor in (3,4)") 'TotalAnterior.ToString Row.Item("PorcentajeAcumulado") = "100.00" Row.Item("CtaMayor") = -1 + Row.Item("CountDinamico") = DtGastosAnualH.MAX("CountDinamico") DtIngresosAnualH.Rows.Add(Row) Else Row.Item("Nombre") = "TOTAL INGRESOS " @@ -989,7 +1196,9 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal IndexData = 13 For IndexData = 13 To IndexMax + Row.Item(IndexData) = DtGastosAnualH.SUM($"[{DtIngresosAnualH.Columns(IndexData).ColumnName}]", "Not CtaMayor In (3,4)") + Next Row.Item("Nombre") = "TOTAL GASTOS" @@ -998,6 +1207,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row.Item("ImporteAcumulado") = TotalAnterior.ToString Row.Item("PorcentajeAcumulado") = If(T2 > 0, (TotalAnterior * 100 / T2).ToString, "0").FormatoNumero Row.Item("CtaMayor") = -1 + Row.Item("CountDinamico") = DtGastosAnualH.MAX("CountDinamico") DtGastosAnualH.Rows.Add(Row) Else Row.Item("Nombre") = "TOTAL GASTOS" @@ -1018,11 +1228,8 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Next Row.Item("Nombre") = "Resultados del Ejercicio" - 'Row.Item("ImporteActual") = TotalActual.ToString - 'Row.Item("PorcentajeActual") = "100.00" Row.Item("ImporteAcumulado") = DtIngresosAnualH.SUM($"ImporteAcumulado", "Not CtaMayor in (-1,3,4)") - DtGastosAnualH.SUM($"ImporteAcumulado", "Not CtaMayor in (-1,3,4)") - 'Row.Item("PorcentajeAcumulado") = "100.00" - 'Row.Item("CtaMayor") = -1 + DTTotalesAnualH.Rows.Add(Row) @@ -1062,19 +1269,37 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Dim CveCuenta As Integer = e.Row.DataKey("CveCuenta").ToEntero Dim CveSubProyecto As Integer = e.Row.DataKey("CveSubProyecto").ToEntero + If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero Dim IndiceInicio As Integer = 1 Dim IndiceMax As Integer = 1 + CountDinamico + For IndiceInicio = 1 To IndiceMax Dim Anio As String = CType(GvGastosAnualH.Columns(IndiceInicio), BoundField).DataField - Dim Importe As String = e.Row.Cells(IndiceInicio).Text - e.Row.Cells(IndiceInicio).Text = $"{Importe}" + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"{ If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }" + 'e.Row.Cells(IndiceInicio).ForeColor = If(Importe < 0, Drawing.Color.Red, e.Row.Cells(IndiceInicio).ForeColor) Next IndiceInicio e.Row.FCHyperLink("HLAnterior").NavigateUrl = $"./RepAnexoCatalogo.aspx?CveCuenta={CveCuenta}&FF=31/12/{DdlEjercicio2.SelectedValue}&FI=01/01/{DdlEjercicio.SelectedValue}&ER=1&CveSubProyecto={CveSubProyecto}" + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -1 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax + + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"{ If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }" + + Next IndiceInicio + + End If @@ -1108,11 +1333,26 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Dim IndiceMax As Integer = 1 + CountDinamico For IndiceInicio = 1 To IndiceMax Dim Anio As String = CType(GvGastosAnualH.Columns(IndiceInicio), BoundField).DataField - Dim Importe As String = e.Row.Cells(IndiceInicio).Text - e.Row.Cells(IndiceInicio).Text = $"{Importe}" + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"{If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00"))}" + 'e.Row.Cells(IndiceInicio).ForeColor = If(Importe < 0, Drawing.Color.Red, e.Row.Cells(IndiceInicio).ForeColor) Next IndiceInicio e.Row.FCHyperLink("HLAnterior").NavigateUrl = $"./RepAnexoCatalogo.aspx?CveCuenta={CveCuenta}&FF=31/12/{DdlEjercicio2.SelectedValue}&FI=01/01/{DdlEjercicio.SelectedValue}&ER=1&CveSubProyecto={CveSubProyecto}" + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -1 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax + + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"{ If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }" + + Next IndiceInicio + End If If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then @@ -1161,7 +1401,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal If DtDatosSubProyectoH IsNot Nothing And DTSubProyectosCabecerasH IsNot Nothing Then CargaGridsSubProyectoH() - SumaTotalesSubProyectoH() End If End Sub @@ -1186,9 +1425,6 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal If DtIngresosSubProyectoH.Rows.Count > 0 Then - - - For Each dCoumn As DataColumn In DtIngresosSubProyectoH.Columns If IndexData >= 13 Then @@ -1237,6 +1473,7 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row.Item("ImporteAcumulado") = DtIngresosSubProyectoH.SUM("ImporteAcumulado", "NOT CtaMayor in (3,4)") 'TotalAnterior.ToString Row.Item("PorcentajeAcumulado") = "100.00" Row.Item("CtaMayor") = -1 + Row.Item("CountDinamico") = DtIngresosSubProyectoH.MAX("CountDinamico") DtIngresosSubProyectoH.Rows.Add(Row) Else Row.Item("Nombre") = "TOTAL INGRESOS " @@ -1297,6 +1534,8 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row.Item("ImporteAcumulado") = TotalAnterior.ToString Row.Item("PorcentajeAcumulado") = If(T2 > 0, (TotalAnterior * 100 / T2).ToString, "0").FormatoNumero Row.Item("CtaMayor") = -1 + Row.Item("CountDinamico") = DtGastosSubProyectoH.MAX("CountDinamico") + DtGastosSubProyectoH.Rows.Add(Row) Else Row.Item("Nombre") = "TOTAL GASTOS" @@ -1310,19 +1549,15 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal Row = DTTotalesSubProyectoH.NewRow - - IndexData = 13 For IndexData = 13 To IndexTotatles Row.Item(IndexData) = DtIngresosSubProyectoH.SUM($"[{DtIngresosSubProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (-1,3,4)") - DtGastosSubProyectoH.SUM($"[{DtGastosSubProyectoH.Columns(IndexData).ColumnName}]", "NOT CtaMayor in (-1,3,4)") Next - Row.Item("Nombre") = "Totales:" - 'Row.Item("ImporteActual") = TotalActual.ToString - 'Row.Item("PorcentajeActual") = "100.00" + Row.Item("Nombre") = "Resultado del ejercicio" Row.Item("ImporteAcumulado") = DtIngresosSubProyectoH.SUM($"ImporteAcumulado", "NOT CtaMayor in (-1,3,4)") - DtGastosSubProyectoH.SUM($"ImporteAcumulado", "NOT CtaMayor in (-1,3,4)") - 'Row.Item("PorcentajeAcumulado") = "100.00" Row.Item("CtaMayor") = -2 + Row.Item("CountDinamico") = DtIngresosSubProyectoH.MAX("CountDinamico") DTTotalesSubProyectoH.Rows.Add(Row) @@ -1335,27 +1570,23 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal GvIngresosSubProyectoH.DataSource = DtIngresosSubProyectoH GvIngresosSubProyectoH.DataBind() - 'GvGastosSubProyectoH.DataSource = DtGastosSubProyectoH - 'GvGastosSubProyectoH.DataBind() - 'GvTotalesSubProyectoH.DataSource = DTTotalesSubProyectoH - 'GvTotalesSubProyectoH.DataBind() UpDatosSubProyectoH.Update() End Sub - Private Sub SumaTotalesSubProyectoH() - ''Llena Lb´s Totales - ''********************************************************************************* - 'LbTotalActual.Text = TotalActualMes.ToString.FormatoNumero - 'LbTotalAnterior.Text = TotalAnteriorMes.ToString.FormatoNumero + 'Private Sub SumaTotalesSubProyectoH() + ' ''Llena Lb´s Totales + ' ''********************************************************************************* + ' 'LbTotalActual.Text = TotalActualMes.ToString.FormatoNumero + ' 'LbTotalAnterior.Text = TotalAnteriorMes.ToString.FormatoNumero - 'LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) - 'LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) + ' 'LbTotalActual.ForeColor = If(TotalActualMes < 0, Drawing.Color.Red, Color.Black) + ' 'LbTotalAnterior.ForeColor = If(TotalAnteriorMes < 0, Drawing.Color.Red, Color.Black) - End Sub + 'End Sub Protected Sub GvIngresosSubProyectoH_RowDataBound(sender As Object, e As GridViewRowEventArgs) @@ -1391,17 +1622,47 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal For IndiceInicio = 1 To IndiceMax Dim CveSubProyectoIntermo As String = CType(GvGastosSubProyectoH.Columns(IndiceInicio), BoundField).DataField - Dim Importe As String = e.Row.Cells(IndiceInicio).Text + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + + e.Row.Cells(IndiceInicio).Text = $"{ If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }" - - e.Row.Cells(IndiceInicio).Text = $"{Importe}" Next IndiceInicio e.Row.FCHyperLink("HLAnterior").NavigateUrl = $"./RepAnexoCatalogo.aspx?CveCuenta={CveCuenta}&FF={FEchaMesFinal.ToString("dd/MM/yyyy")}&FI=01/01/{DdlEjercicio.SelectedValue}&ER=1&CveSubProyecto={-1}" + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -1 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax + + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"
      { If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }
      " + Next IndiceInicio + + + + ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = -2 Then + + Dim CountDinamico As Integer = e.Row.DataKey("CountDinamico").ToEntero + Dim IndiceInicio As Integer = 1 + Dim IndiceMax As Integer = 1 + CountDinamico + + For IndiceInicio = 1 To IndiceMax + + Dim Importe As Decimal = e.Row.Cells(IndiceInicio).Text.ToDecimal + e.Row.Cells(IndiceInicio).Text = $"
      { If(DdlDivisor.SelectedValue.ToEntero > 1, Importe.ToString("###,###,##0"), Importe.ToString("###,###,###.00")) }
      " + + Next IndiceInicio + + End If + e.Row.FCHyperLink("HLAnterior").Text = If(DdlDivisor.SelectedValue.ToEntero > 1, e.Row.DBCampo("ImporteAcumulado").ToString.ToDecimal.ToString("###,###,##0"), e.Row.DBCampo("ImporteAcumulado").ToString.ToDecimal.ToString("###,###,##0.00")) + If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red End If @@ -1414,22 +1675,13 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal If e.Row.DBCampo("CtaMayor").ToString.ToEntero < 0 Then TotalActualMes -= e.Row.DBCampo("ImporteActual").ToString.ToDouble TotalAnteriorMes -= e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble - 'e.Row.ControlStyle.BackColor = Drawing.Color.LightGray - 'e.Row.ControlStyle.ForeColor = Drawing.Color.White e.Row.ControlStyle.Font.Bold = True ElseIf e.Row.DBCampo("CtaMayor").ToString.ToEntero = 3 Then 'e.Row.CssClass = "SubTotales" e.Row.ControlStyle.Font.Bold = True End If - 'If e.Row.DBCampo("CtaMayor").ToString.ToEntero > 0 Then - ' e.Row.FCHyperLink("HLActual").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - ' e.Row.FCHyperLink("HLAnterior").NavigateUrl = String.Format("/Contabilidad2/RepAnexoCatalogo.aspx?CveCuenta={0}&FF={1}&FI={2}&ER=1", e.Row.DBCampo("CveCuenta"), e.Row.DBCampo("FechaFActual").ToDate.ToShortDateString, e.Row.DBCampo("FechaInicial").ToDate.ToShortDateString) - 'End If - 'If e.Row.DBCampo("ImporteActual").ToString.ToDouble < 0 Then - ' e.Row.FCHyperLink("HLActual").ForeColor = Drawing.Color.Red - 'End If If e.Row.DBCampo("ImporteAcumulado").ToString.ToDouble < 0 Then e.Row.FCHyperLink("HLAnterior").ForeColor = Drawing.Color.Red @@ -1453,4 +1705,226 @@ Partial Class Contabilidad_RepEstadoResultadosHorizontal #End Region + + + +#Region "DESCARGA EXCEL" + + Private Sub LnkExportar_Click(sender As Object, e As EventArgs) Handles LnkExportar.Click + + Imprimir("Excel") + + End Sub + Private Sub Imprimir(Optional reporte As String = "PDF") + + + + If Tab.ActiveTabIndex = 0 Then + ExportToExcelG(GvIngresosMes, GvGastosMes, TMesT1, "Reporte_Mensual", UsuarioActual, "Mensual") + ElseIf Tab.ActiveTabIndex = 1 Then + ExportToExcelG(GvIngresosMesH, GvGastosMesH, TMesT1, "Reporte_Mensual_Horizontal", UsuarioActual, "Mensual Horizontal", Gv3:=GvTotalesMesH) + ElseIf Tab.ActiveTabIndex = 2 Then + ExportToExcelG(GvIngresosAnualH, GvGastosAnualH, TMesT1, "Reporte_Anual_Horizontal", UsuarioActual, "Anual Horizontal", Gv3:=GvTotalesAnualH) + + ElseIf Tab.ActiveTabIndex = 3 Then + ExportToExcelG(GvIngresosSubProyectoH, GvGastosSubProyectoH, TMesT1, "Reporte_Proyecto_Horizontal", UsuarioActual, "Proyecto Horizontal", Gv3:=GvTotalesSubProyectoH, EsPorSubProtyecto:=True) + + End If + + + + + End Sub + + 'Public Sub ExportToExcelG(Gv1 As GridView, Gv2 As GridView, NombreArchivoXLSx As String, Optional Titulo As String = "Reporte", Optional Usuario As Usuario = Nothing, Optional Filtros As String = "", Optional AlturaImagen As Double = 100, Optional AnchoImagen As Double = 100) + Public Sub ExportToExcelG(Gv1 As GridView, Gv2 As GridView, TablaResultados As HtmlTable, NombreArchivoXLSx As String, Usuario As Usuario, Titulo As String, Optional AlturaImagen As Double = 100, Optional AnchoImagen As Double = 100, Optional Gv3 As GridView = Nothing, Optional EsPorSubProtyecto As Boolean = False) + + Dim sw1 As New StringWriter() + Dim htw1 As New HtmlTextWriter(sw1) + Gv1.RenderControl(htw1) + + Dim sw2 As New StringWriter() + Dim htw2 As New HtmlTextWriter(sw2) + Gv2.RenderControl(htw2) + + + TablaResultados.Width = Gv2.Width.ToString + + Dim sw3 As New StringWriter() + Dim htw3 As New HtmlTextWriter(sw3) + TablaResultados.RenderControl(htw3) + + Dim options = GemBox.Spreadsheet.LoadOptions.HtmlDefault + + Dim htmlStream1 = New MemoryStream(options.Encoding.GetBytes(sw1.ToString())) + Dim htmlStream2 = New MemoryStream(options.Encoding.GetBytes(sw2.ToString())) + Dim htmlStream3 = New MemoryStream(options.Encoding.GetBytes(sw3.ToString())) + + htmlStream1.Position = 0 + Dim sr1 As New StreamReader(htmlStream1) + + htmlStream2.Position = 0 + Dim sr2 As New StreamReader(htmlStream2) + + htmlStream3.Position = 0 + Dim sr3 As New StreamReader(htmlStream3) + + + Dim myStr1 = sr1.ReadToEnd() + Dim myStr2 = sr2.ReadToEnd() + Dim myStr3 = sr3.ReadToEnd() + + sr1.Dispose() + sr2.Dispose() + sr3.Dispose() + + htmlStream1.Dispose() + htmlStream2.Dispose() + htmlStream3.Dispose() + + sw1.Dispose() + sw2.Dispose() + sw3.Dispose() + + If Gv3 IsNot Nothing Then + + Gv3.ShowHeader = False + + Dim sw4 As New StringWriter() + Dim htw4 As New HtmlTextWriter(sw4) + Gv3.RenderControl(htw4) + Dim htmlStream4 = New MemoryStream(options.Encoding.GetBytes(sw4.ToString())) + htmlStream4.Position = 0 + Dim sr4 As New StreamReader(htmlStream4) + myStr3 = sr4.ReadToEnd() + + sr4.Dispose() + htmlStream2.Dispose() + sw4.Dispose() + + End If + + + Dim HtmlCompleto As String = myStr1 & "
      " & myStr2 & "
      " & myStr3 + + Dim asd As String = "" + + + Dim htmlStream5 = New MemoryStream(options.Encoding.GetBytes(HtmlCompleto)) + + + + + GemBox.Spreadsheet.SpreadsheetInfo.SetLicense("ESWN-4QFD-26JF-1SZ8") + + Dim excel As GemBox.Spreadsheet.ExcelFile + 'Dim options = GemBox.Spreadsheet.LoadOptions.HtmlDefault + + 'Using htmlStream = New MemoryStream(options.Encoding.GetBytes(sw.ToString())) + ' excel = GemBox.Spreadsheet.ExcelFile.Load(htmlStream, options) + + excel = GemBox.Spreadsheet.ExcelFile.Load(htmlStream5, options) + + If Usuario IsNot Nothing Then + Dim TotalRowHeader As Integer = 8 + Dim TotalRowFooter As Integer = 2 + + Dim worksheet = excel.Worksheets(0) + worksheet.Rows.InsertEmpty(0, TotalRowHeader) + Dim celdasConTexto = worksheet.GetUsedCellRange(True) + celdasConTexto.Style.Font.Name = "Calibri Light" + + Dim RangoNombreEmpresa = worksheet.Cells.GetSubrangeAbsolute(1, celdasConTexto.FirstColumnIndex, 1, celdasConTexto.LastColumnIndex) + RangoNombreEmpresa.Merged = True + RangoNombreEmpresa.Value = Usuario.Empresa.Empresa + RangoNombreEmpresa.Style.Font.Size = 18 * 20 + RangoNombreEmpresa.Style.Font.Name = "Calibri Light" + RangoNombreEmpresa.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center + RangoNombreEmpresa.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center + + + 'Dim RangoFiltros = worksheet.Cells.GetSubrangeAbsolute(6, celdasConTexto.FirstColumnIndex, 6, celdasConTexto.LastColumnIndex) + 'RangoFiltros.Merged = True + 'RangoFiltros.Value = "Filtros" + 'RangoFiltros.Style.Font.Size = 15 * 20 + 'RangoFiltros.Style.Font.Name = "Calibri Light" + 'RangoFiltros.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Left + 'RangoFiltros.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center + + + Dim RangoTitulo = worksheet.Cells.GetSubrangeAbsolute(3, celdasConTexto.FirstColumnIndex, 3, celdasConTexto.LastColumnIndex) + RangoTitulo.Merged = True + RangoTitulo.Value = Titulo + RangoTitulo.Style.Font.Size = 20 * 20 + RangoTitulo.Style.Font.Name = "Calibri Light" + RangoTitulo.Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center + RangoTitulo.Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center + + For i = celdasConTexto.FirstColumnIndex To celdasConTexto.LastColumnIndex + worksheet.Rows(8).Cells(i).Style.Font.Size = 12 * 20 + worksheet.Rows(8).Cells(i).Style.HorizontalAlignment = GemBox.Spreadsheet.HorizontalAlignmentStyle.Center + worksheet.Rows(8).Cells(i).Style.VerticalAlignment = GemBox.Spreadsheet.VerticalAlignmentStyle.Center + + worksheet.Rows(8).Cells(i).Style.FillPattern.SetPattern(GemBox.Spreadsheet.FillPatternStyle.Solid, GemBox.Spreadsheet.SpreadsheetColor.FromArgb(75, 119, 190), GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255)) + worksheet.Rows(8).Cells(i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) + + + + If Not EsPorSubProtyecto Then + worksheet.Rows(8 + Gv1.Rows.Count + 2).Cells(i).Style.FillPattern.SetPattern(GemBox.Spreadsheet.FillPatternStyle.Solid, GemBox.Spreadsheet.SpreadsheetColor.FromArgb(75, 119, 190), GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255)) + worksheet.Rows(8 + Gv1.Rows.Count + 2).Cells(i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) + Else + worksheet.Rows(18).Cells(i).Style.FillPattern.SetPattern(GemBox.Spreadsheet.FillPatternStyle.Solid, GemBox.Spreadsheet.SpreadsheetColor.FromArgb(75, 119, 190), GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255)) + worksheet.Rows(18).Cells(i).Style.Font.Color = GemBox.Spreadsheet.SpreadsheetColor.FromArgb(255, 255, 255) + End If + + + + If i > 0 Then + Try + worksheet.Columns(i).AutoFit(1) + Catch ex As Exception + End Try + End If + Next + + Dim IndexEndTable As Integer = Gv1.Rows.Count + Gv2.Rows.Count + 4 + TotalRowHeader + TotalRowFooter + + worksheet.Rows(IndexEndTable).Cells(0).Value = "Usuario Imprimió" + worksheet.Rows(IndexEndTable + 1).Cells(0).Value = Usuario.Nombre + + worksheet.Rows(IndexEndTable).Cells(2).Value = "Fecha Impresión" + worksheet.Rows(IndexEndTable + 1).Cells(2).Value = DateTime.Now.ToString("dd/MM/yyyy") + + Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", Usuario.Empresa.Ruta)) + + If Imagen.Exists Then + Dim Ruta As String = String.Format("{0}/Logo.png", Usuario.Empresa.Ruta) + Using sr As New StreamReader(Ruta) + Dim ms As New MemoryStream() + sr.BaseStream.CopyTo(ms) + worksheet.Pictures.Add(ms, ExcelPictureFormat.Png, "A1", AnchoImagen, AlturaImagen, LengthUnit.Pixel) + End Using + End If + + End If + + 'End Using + 'htw.Dispose() + + excel.Save(HttpContext.Current.Response, $"{NombreArchivoXLSx}.xlsx") + + + End Sub + + Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) + End Sub + +#End Region + + + + + End Class + diff --git a/Inventarios/CatAlmacenes.aspx b/Inventarios/CatAlmacenes.aspx index 7d8dbc3fe..011c6115b 100644 --- a/Inventarios/CatAlmacenes.aspx +++ b/Inventarios/CatAlmacenes.aspx @@ -225,15 +225,15 @@ - +

      Resultados del Ejercicio:

      @@ -169,6 +171,7 @@