Option Explicit On Option Strict On Imports Extensiones Imports System.IO Imports System.Data Imports Newtonsoft.Json Imports ClosedXML.Excel Partial Class Contratos_ContratoObraAutorizacion Inherits ClsPaginas #Region "Propiedades" Private Property DtDatos As DataTable Get If ViewState("DtDatos") Is Nothing Then Return Nothing Else Return CType(ViewState("DtDatos"), DataTable) End If End Get Set(value As DataTable) ViewState("DtDatos") = value End Set End Property Private Property CveContrato As Integer Get If ViewState("CveContrato") Is Nothing Then Return Nothing Else Return ViewState("CveContrato").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveContrato") = value End Set End Property Private Property CveContratoEstimacion As Integer Get If ViewState("CveContratoEstimacion") Is Nothing Then Return Nothing Else Return ViewState("CveContratoEstimacion").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveContratoEstimacion") = value End Set End Property 'fecha seleccionada del historico de avances Private Property fecha As String Get If ViewState("fecha") Is Nothing Then Return "" Else Return ViewState("fecha").ToString End If End Get Set(value As String) ViewState("fecha") = value End Set End Property Property CveEstimacionNueva As Integer Get If ViewState("CveEstimacionNueva") Is Nothing Then Return -1 Else Return ViewState("CveEstimacionNueva").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveEstimacionNueva") = value End Set End Property Property NuemeroEstimacionNuevo As Integer Get If ViewState("NuemeroEstimacionNuevo") Is Nothing Then Return -1 Else Return ViewState("NuemeroEstimacionNuevo").ToString.ToEntero End If End Get Set(value As Integer) ViewState("NuemeroEstimacionNuevo") = value End Set End Property Property CveEstimacionActual As Integer Get If ViewState("CveEstimacionActual") Is Nothing Then Return -1 Else Return ViewState("CveEstimacionActual").ToString.ToEntero End If End Get Set(value As Integer) ViewState("CveEstimacionActual") = value End Set End Property Property NuemeroEstimacionActual As Integer Get If ViewState("NuemeroEstimacionActual") Is Nothing Then Return -1 Else Return ViewState("NuemeroEstimacionActual").ToString.ToEntero End If End Get Set(value As Integer) ViewState("NuemeroEstimacionActual") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then CargaContrato() End If End Sub Private Sub CargaContrato() DDlContratosEstimaciones.DataSource = GlobalDTContratos.FiltraParametros(String.Format($"CveContratoTipo in (30,31) AND CveEmpresa = {UsuarioActual.CveEmpresa}")) DDlContratosEstimaciones.DataBind() End Sub Protected Sub GetAnexos(sender As Object, e As System.EventArgs) Dim GvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) LblTituloModalAnexo.Text = "Anexo " & GvRow.DataKey("PS") 'Get the button that raised the event Dim btn As LinkButton = DirectCast(sender, LinkButton) Dim gvr As GridViewRow = DirectCast(btn.NamingContainer, GridViewRow) Dim CveContratoDetalle As Integer = gvr.DataKey("CveContratoDetalle").ToString.ToEntero Dim CveContratoAvance As Integer = gvr.DataKey("CveContratoAvance").ToEntero Dim Fecha As Date = gvr.DataKey("Fecha").ToDate Dim objContrato As New ClsContratos If objContrato.GetContratosAvanceAnexos(CveContratoDetalle, UsuarioActual.CveUsuario, CveContratoAvance:=CveContratoAvance) Then GvAnexos.DataSource = objContrato.DtResultados GvAnexos.DataBind() GvAnexos.Visible = True Else GvAnexos.Visible = False End If objContrato.Dispose() UpModalAnexos.Update() RegistraScript("$('#ModalAnexos').modal('show');") End Sub Protected Sub GvAnexos_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GvAnexos.RowDataBound If e.Row.RowIndex > -1 Then Dim Archivo As String = e.Row.DBCampo("Archivo").ToString Dim start As Integer = Len(Archivo.Split("-"c)(0)) Dim LnkArchivo As LinkButton = e.Row.FCLinkButton("LnkArchivo") LnkArchivo.Text = Archivo.Substring(start + 1) ScriptManager.GetCurrent(Me).RegisterPostBackControl(LnkArchivo) End If End Sub Protected Sub LnkArchivo_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim Archivo As String = GvRow.DataKey("Archivo").ToString Response.ContentType = "application/octet-stream" Response.AppendHeader("Content-Disposition", $"attachment; filename={Archivo}") Response.TransmitFile($"{UsuarioActual.Empresa.Ruta}\Contrato\{DDlContratosEstimaciones.SelectedValue.ToEntero}\Anexos\{Archivo}") Response.End() End Sub #Region "ESTIMACION" Private Sub CargaAvancesParaEstimar() CveContratoEstimacion = -1 Dim ObjContratos As New ClsContratos() Dim DTEstimaciones As New DataTable Dim NumeroEstimacionActual As Integer = 0 If ObjContratos.GetContratosAvanceEstimacion(DDlContratosEstimaciones.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, -1) Then DTEstimaciones = ObjContratos.DtResultados CveContratoEstimacion = DDlContratosEstimaciones.SelectedValue.ToEntero If DTEstimaciones.Rows.Count > 0 Then CveEstimacionActual = DTEstimaciones.FiltroPrimeroValor("CveEstimacion", "CveEstimacion > 0").ToString.ToEntero End If End If ObjContratos.Dispose() If DTEstimaciones.Rows.Count > 0 Then GvEstimaciones.DataSource = DTEstimaciones ' BtnGuardarEstimacion.Visible = True BtnAutoriza.Visible = True Else GvEstimaciones.DataSource = Nothing BtnGuardarEstimacion.Visible = False End If GvEstimaciones.DataBind() UpEstimaciones.Update() End Sub Private Sub BtnConsultarEstimaciones_Click(sender As Object, e As EventArgs) Handles BtnConsultarEstimaciones.Click CargaAvancesParaEstimar() End Sub Private Sub GvEstimaciones_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstimaciones.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveContratoDetalle").ToString.ToEntero = 0 Then If e.Row.DBCampo("CveSubFamilias").ToString.ToEntero = 0 Then If e.Row.DBCampo("CveFamilias").ToString.ToEntero = 0 Then e.Row.CssClass = "SubTotales" Else e.Row.CssClass = "SubTotales2" End If Else e.Row.CssClass = "SubTotales3" End If End If If e.Row.DBCampo("CveContratoDetalle").ToString.ToEntero > 0 Then Dim LnkAnexo As LinkButton = e.Row.FCLinkButton("LnkAnexo") Dim LnkEliminarAvance As LinkButton = e.Row.FCLinkButton("LnkEliminarAvance") LnkAnexo.Visible = True LnkEliminarAvance.Visible = True End If End If End Sub Private Sub BtnGuardarEstimacion_Click(sender As Object, e As EventArgs) Handles BtnGuardarEstimacion.Click CveEstimacionNueva = -1 NuemeroEstimacionNuevo = -1 Dim ObjContratos As New ClsContratos() Dim ErrorProceso As Boolean = False ObjContratos.IniciaTransacSQL() If ObjContratos.AddContratosAvanceEstimacion(CveContratoEstimacion, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then CveEstimacionNueva = ObjContratos.CveEstimacionNueva NuemeroEstimacionNuevo = ObjContratos.NumeroEstimacionNueva For Each GvRow As GridViewRow In GvEstimaciones.Rows If GvRow.DataKey("CveContratoAvance").ToEntero > 0 Then If Not ObjContratos.UpdateContratosAvanceEstimacion(GvRow.DataKey("CveContratoAvance").ToEntero, ObjContratos.CveEstimacionNueva, UsuarioActual.CveEmpresa) Then ErrorProceso = True Exit For End If End If Next Else ErrorProceso = True End If 'AddContratosAvanceEstimacion 'UpdateContratosAvanceEstimacion If Not ErrorProceso Then ObjContratos.Commit() Alert($"Estimación {NuemeroEstimacionNuevo} agregada correctamente.") BtnGuardarEstimacion.Visible = False BtnDescargarGenerado.Visible = True Else ObjContratos.RollBack() End If ObjContratos.Dispose() UpEstimaciones.Update() End Sub Private Sub BtnDescargarGenerado_Click(sender As Object, e As EventArgs) Handles BtnDescargarGenerado.Click GeneraAnexo(CveEstimacionNueva, NuemeroEstimacionNuevo, Now, DDlContratosEstimaciones.SelectedItem.Text) End Sub Private Sub GeneraAnexo(CveEstimacion As Integer, NumeroEstimacion As Integer, FechaEstimacion As Date, NumeroContrato As String) Dim PlantillaAnexo As String = $"{UsuarioActual.Empresa.Ruta}\Formatos\Anexo.xlsx" If Not System.IO.File.Exists(PlantillaAnexo) Then Alert("No se encuentra la platilla de anexos.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim DtControl As New DataTable Dim ObjContratos As New ClsContratos Dim Lugar As String = "" Dim DescripcionContrato As String = "" If ObjContratos.GetContratosObraAvancesControlAcumulativo(CveContrato, CveEstimacion, UsuarioActual.CveEmpresa) Then DtControl = ObjContratos.DtResultados If DtControl.Rows.Count > 0 Then Lugar = DtControl(0)("Lugar").ToString DescripcionContrato = DtControl(0)("DescripcionContrato").ToString End If End If ObjContratos.Dispose() If DtControl.Rows.Count > 0 Then Dim WBAnexo = New ClosedXML.Excel.XLWorkbook(PlantillaAnexo) Dim WBAnexoSalvar = New ClosedXML.Excel.XLWorkbook Dim WSControl = WBAnexo.Worksheet(1) Dim WSDetalle = WBAnexo.Worksheet(2) Dim CuerrentRow As Integer = 28 WSControl.Cell(17, 2).Value = NumeroEstimacion 'Estimacion WSControl.Cell(20, 9).Value = FechaEstimacion.ToString("dd/MM/yyyy") 'Fecha estimacion WSControl.Cell(19, 8).Value = "$ " & DtControl.SUM("Importe").ToString("###,###,###.00") 'Total WSControl.Cell(19, 8).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Right) WSControl.Cell(20, 6).Value = NumeroContrato WSControl.Cell(18, 2).Value = Lugar WSControl.Cell(18, 2).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left) WSControl.Cell(18, 2).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Top) WSControl.Cell(17, 6).Value = "" 'Periodo Fecha Inicial WSControl.Cell(17, 7).Value = "" 'Periuodo Fecha Final WSControl.Cell(20, 2).Value = DescripcionContrato WSControl.Cell(20, 2).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Left) WSControl.Cell(20, 2).Style.Alignment.SetVertical(XLAlignmentVerticalValues.Top) WSControl.Cell(22, 7).Value = "" 'Presupuesto segun contrato WSControl.Cell(19, 5).Value = "" 'Contrtatista Dim RowCountControl As Integer = 1 For Each Drow As DataRow In DtControl.Rows WSControl.Cell(CuerrentRow, 1).Value = Drow("Codigo").ToString WSControl.Cell(CuerrentRow, 2).Value = Drow("PS").ToString WSControl.Cell(CuerrentRow, 3).Value = Drow("Abreviatura").ToString WSControl.Cell(CuerrentRow, 4).Value = Drow("Cantidad").ToString.ToDecimal WSControl.Cell(CuerrentRow, 5).Value = Drow("AcumuladoTotal").ToString.ToDecimal WSControl.Cell(CuerrentRow, 6).Value = Drow("AcumuladoAnterior").ToString.ToDecimal WSControl.Cell(CuerrentRow, 7).Value = Drow("CantidadActual").ToString.ToDecimal WSControl.Cell(CuerrentRow, 8).Value = Drow("PU").ToString.ToDecimal WSControl.Cell(CuerrentRow, 9).Value = Drow("Total").ToString.ToDecimal WSControl.Cell(CuerrentRow, 9).Style.NumberFormat.Format = "$ ###,###,###.00" WSControl.Cell(CuerrentRow, 1).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 2).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 3).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 4).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 5).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 6).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 7).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 8).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 9).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 1).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 2).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 3).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 4).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 5).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 6).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 7).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 8).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow, 9).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Medium 'ultimo Row If DtControl.Rows.Count = RowCountControl Then WSControl.Cell(CuerrentRow + 1, 1).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 2).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 3).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 4).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 5).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 6).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 7).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 8).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 9).Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 1).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 2).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 3).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 4).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 5).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 6).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 7).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 8).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin WSControl.Cell(CuerrentRow + 1, 9).Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Medium WSControl.Cell(CuerrentRow + 1, 8).Value = "Total:" WSControl.Cell(CuerrentRow + 1, 8).Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Right) WSControl.Cell(CuerrentRow + 1, 8).Style.Font.Bold = True WSControl.Cell(CuerrentRow + 1, 9).Value = DtControl.SUM("Total") WSControl.Cell(CuerrentRow + 1, 9).Style.Font.Bold = True WSControl.Cell(CuerrentRow + 1, 9).Style.NumberFormat.Format = "$ ###,###,###.00" Dim range = WSControl.Range($"A{CuerrentRow + 3}:D{CuerrentRow + 3}") range.Merge() range.Style.Border.TopBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range = WSControl.Range($"E{CuerrentRow + 3}:I{CuerrentRow + 3}") range.Merge() range.Style.Border.TopBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Medium range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range = WSControl.Range($"A{CuerrentRow + 4}:D{CuerrentRow + 4}") range.Merge() range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range.Value = "ING. WALTER ROBERTO VILLEGAS LARES" range = WSControl.Range($"E{CuerrentRow + 4}:I{CuerrentRow + 4}") range.Merge() range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Medium range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range.Value = "C. SALVADOR SUAREZ" range = WSControl.Range($"A{CuerrentRow + 5}:D{CuerrentRow + 5}") range.Merge() range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range.Value = "SERVICIOS ELECTRICOS Y CONTROL DE HERMOSILLO S.A. DE C.V." range.Style.Font.Bold = True range = WSControl.Range($"E{CuerrentRow + 5}:I{CuerrentRow + 5}") range.Merge() range.Style.Border.BottomBorder = ClosedXML.Excel.XLBorderStyleValues.Thin range.Style.Border.RightBorder = ClosedXML.Excel.XLBorderStyleValues.Medium range.Style.Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center) range.Value = "GASERVICIO MATAMOROS SA DE CV" range.Style.Font.Bold = True End If CuerrentRow = CuerrentRow + 1 RowCountControl = RowCountControl + 1 Next WBAnexo.Worksheet(1).CopyTo(WBAnexoSalvar, "CONTROL") For Each Drow As DataRow In DtControl.Rows If Drow("CantidadActual").ToString.ToDecimal > 0 Then WSDetalle.Cell(3, 6).Value = NumeroContrato WSDetalle.Cell(4, 9).Value = "" 'Fecha de WSDetalle.Cell(4, 10).Value = "" 'Fecha a WSDetalle.Cell(4, 11).Value = NumeroEstimacion WSDetalle.Cell(6, 6).Value = DescripcionContrato WSDetalle.Cell(14, 2).Value = Drow("Codigo").ToString WSDetalle.Cell(14, 3).Value = Drow("PS").ToString WSDetalle.Cell(14, 4).Value = Drow("Abreviatura").ToString WSDetalle.Cell(12, 3).Value = "" 'Concepto WSDetalle.Cell(14, 10).Value = Drow("CantidadActual").ToString.ToDecimal WSDetalle.Cell(14, 11).Value = Drow("CantidadActual").ToString.ToDecimal 'WSDetalle.Cell(61, 6).Value = "" 'Empresario WSDetalle.Cell(61, 9).Value = Drow("Nombre").ToString 'Cliente Dim objContrato As New ClsContratos Dim DTArchivos As New DataTable If objContrato.GetContratosAvanceAnexos(Drow("CveContratoDetalle").ToString.ToEntero, UsuarioActual.CveUsuario, CveEstimacion:=CveEstimacion) Then DTArchivos = objContrato.DtResultados End If objContrato.Dispose() Dim Imagenes As New List(Of ClosedXML.Excel.Drawings.IXLPicture) Dim CurrectRowImg As Integer = 19 'Row 19 primera imggen Dim RowH As Double = WSDetalle.Row(19).Height For Each drowArchivos As DataRow In DTArchivos.Rows Dim Archivo As String = "" Archivo = drowArchivos("Archivo").ToString Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}\Contrato\{CveContrato}\Anexos\{Archivo}" If File.Exists(RutaArchivo) Then Dim Imagen = WSDetalle.AddPicture(RutaArchivo).MoveTo(WSDetalle.Cell(CurrectRowImg, 3)) Imagen.Scale(WSDetalle.Column(3).Width / (Imagen.OriginalWidth * 0.145D)) Dim ImgWidth As Double = Imagen.Height Dim nRowmas As Integer = (ImgWidth / RowH).ToEntero CurrectRowImg = CurrectRowImg + nRowmas Imagenes.Add(Imagen) End If Next WBAnexo.Worksheet(2).CopyTo(WBAnexoSalvar, If(Drow("Codigo").ToString.Trim.Length > 0, Drow("Codigo").ToString, Drow("CvePS").ToString)) For Each img As ClosedXML.Excel.Drawings.IXLPicture In Imagenes img.Delete() Next End If Next Dim msB = New MemoryStream() WBAnexoSalvar.SaveAs(msB) Dim BB As Byte() = msB.ToArray msB.Dispose() Response.Clear() Response.Buffer = True Response.AddHeader("content-disposition", "attachment; filename=Anexo_Estimacion" & NumeroEstimacion & ".xlsx") Response.ContentType = "application/vnd.ms-excel" Response.BinaryWrite(BB) Response.End() Else Alert("No se encontraron datos des control", TipoMensaje.MsgAdvertencia) End If End Sub #End Region Protected Sub LnkEliminarAvance_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) Dim CveContratoAvance As Integer = GvRow.DataKey("CveContratoAvance").ToEntero Dim ErrorProceso As Boolean = True Dim ObjContrato As New ClsContratos If ObjContrato.RemoveContratosAvance(CveContratoAvance, UsuarioActual.CveEmpresa) Then ErrorProceso = False End If ObjContrato.Dispose() If Not ErrorProceso Then CargaAvancesParaEstimar() Alert("Avance elimiando correctamente.") End If End Sub Protected Sub BtnAutoriza_Click(sender As Object, e As EventArgs) Dim ErrorProceso As Boolean = True Dim ObjContrato As New ClsContratos If ObjContrato.UpdateContratosEstimacion(CveEstimacionActual, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 3) Then ErrorProceso = False End If ObjContrato.Dispose() If Not ErrorProceso Then CveEstimacionActual = -1 CargaAvancesParaEstimar() Alert("Avance autorizado correctamente.") End If End Sub End Class