From 09b0bda4d97fb4eb08f1068ae8da15055696a4b1 Mon Sep 17 00:00:00 2001 From: Rakcsle Supertramp Date: Sun, 25 Oct 2020 01:47:41 -0700 Subject: [PATCH] Thalamus cambio de tipode dato de celda a fecha --- Contratos/ContratoObra.aspx | 754 ++++++++++------ Contratos/ContratoObra.aspx.vb | 816 +++++++++++++++--- .../FormatosThalamus/FormatoAlmacenes.xlsx | Bin 8370 -> 10043 bytes .../FormatosThalamus/FormatoVentas.xlsx | Bin 8471 -> 10141 bytes TareasProgramadas/Tareas119.ashx | 18 +- Ventas/Ventas.aspx.vb | 9 +- 6 files changed, 1209 insertions(+), 388 deletions(-) diff --git a/Contratos/ContratoObra.aspx b/Contratos/ContratoObra.aspx index 18722fc8a..c8230178d 100644 --- a/Contratos/ContratoObra.aspx +++ b/Contratos/ContratoObra.aspx @@ -157,8 +157,30 @@ + + + +
  • + Agregar PS Venta +
  • + +
  • + Agregar PS Control +
  • +
  • + Agregar Presupuesto Venta +
  • + +
  • + Agregar Presupuesto Control +
  • + +
    +
    + + @@ -890,71 +912,10 @@ " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"> - - - - - - - - - - - - - <%-- --%> - - - - - - - - + - - - - - - - - - - - - -
    - - Cantidad - - Producto/ServicioU. M.ObservaciónPrecio UnitarioTotalPermite AvancePermite Estimación Comandos
    - - - - - - - - - - -
    - -
    - -
    -
    - - - - - - - -
    @@ -965,122 +926,134 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - <%-- - - - - - --%> - - -
    - -
    -
    - - - -
    - - - - - -
    -
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <%-- + +
    + +
    +
    + + + +
    --%> + + + + + + + + + + +
    +
    + + @@ -1117,10 +1090,10 @@ - + - + <%-- @@ -1140,7 +1113,7 @@ - <%-- --%> + @@ -1180,109 +1153,126 @@ - + --%> + +
    + " style="display: inline-block; margin-right: -20px; width: 150px;" /> + " style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"> +
    + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
    +
    - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - <%-- - - - - - --%> - - -
    - -
    -
    - - - -
    - - - - - -
    -
    + + + + + + + + + + + + + + + + + + + + + <%-- + +
    + +
    +
    + + + +
    --%> + + + + + + + + + +
    +
    Precio Unitario Total Permite AvancePermite Estimación Comandos
    @@ -2233,6 +2223,7 @@ <%--MODAL UPLOAD--%> + + + + + + + + + + + + <%--MODAL CONTROL PRESUPUESTOS AGREGAR--%> + + + + + + + + + + + + + + <%--Modal Carga Presupuesto--%> + + + + + + + + + + + + + + + + diff --git a/Contratos/ContratoObra.aspx.vb b/Contratos/ContratoObra.aspx.vb index 2bdcf71b0..063bf57b7 100644 --- a/Contratos/ContratoObra.aspx.vb +++ b/Contratos/ContratoObra.aspx.vb @@ -394,7 +394,17 @@ Partial Class Contratos_ContratoObra 'Configuración de Modalidad Update BtnGuardar.Text = "Guardar Cambios" - If Request("Opt") IsNot Nothing AndAlso IsNumeric(Request("Opt")) Then TAB.ActiveTabIndex = Request("Opt").ToEntero + If Request("Opt") IsNot Nothing AndAlso IsNumeric(Request("Opt")) Then Tab.ActiveTabIndex = Request("Opt").ToEntero + + If CveContrato > 0 Then + + LnkModalAddPSVentas.Visible = True + LnkModalAddPSControl.Visible = True + LnkModalAddPresupuestoVentas.Visible = True + LnkModalAddPresupuestoControl.Visible = True + + End If + Else 'Configuración de Modalidad Insert LblFechaCaptura.Text = Now.ToShortDateString() @@ -1001,30 +1011,30 @@ Partial Class Contratos_ContratoObra TabPVInsumos.Visible = False RowEstatus.Visible = False TabPres.HeaderText = "Partidas" - thOcCliente.Style.Add("display", "none") - tdOcCliente.Style.Add("display", "none") - thNoIdentificacionv.Style.Add("display", "none") - thLimitar.Style.Add("display", "none") - tdLimitar2.Style.Add("display", "none") - tdNoIdentificacionv.Style.Add("display", "none") + 'thOcCliente.Style.Add("display", "none") + 'tdOcCliente.Style.Add("display", "none") + 'thNoIdentificacionv.Style.Add("display", "none") + 'thLimitar.Style.Add("display", "none") + 'tdLimitar2.Style.Add("display", "none") + 'tdNoIdentificacionv.Style.Add("display", "none") 'RowFlexible.Visible = False TableDatosCabecera.Visible = False TabAvanveDocumento.Visible = False TabSistema.Visible = False 'RowPorcentajeComision.Visible = False TabContratosGastos.Visible = False - tdCveInterna.Text = "" - tdLimitar.Text = "" - tdOC.Text = "" - THAvance.Visible = False - THAvance.Style.Add("display", "none") + 'tdCveInterna.Text = "" + 'tdLimitar.Text = "" + 'tdOC.Text = "" + 'THAvance.Visible = False + 'THAvance.Style.Add("display", "none") TDAvance.Style.Add("display", "none") TxtOCInterna.Visible = False TxtNoIdentificacionv.Visible = False ChkLimitarVenta.Visible = False DvObservaciones.Visible = True - TDObservacion.Visible = True - tdObservaciones.Visible = True + 'TDObservacion.Visible = True + 'tdObservaciones.Visible = True TxtObservaciones.Text = ObjContratos.DtResultados.Rows(0)("Observaciones").ToString Gv.Columns(6).Visible = True 'DdlPeriodo.SelectedValueExist(ObjContratos.DtResultados.Rows(0)("CvePeriodo").ToString) @@ -1768,6 +1778,9 @@ Partial Class Contratos_ContratoObra DdlProductows.SelectedText = "Seleccione" DdlProductows.SelectedValue = "-1" End If + + UpModalVentasAddPS.Update() + End Sub Private Sub CargaPSInsumos() @@ -1852,53 +1865,123 @@ Partial Class Contratos_ContratoObra End Sub Protected Sub BtnAgregarDetalle_Click(sender As Object, e As EventArgs) - Dim Row As DataRow = TmpDT.NewRow() - Row("Cantidad") = TxtCantidad.Text.ToDouble.FormatoNumero - Row("CantidadContratada") = TxtCantidad.Text.ToDouble.FormatoNumero - Row("CveUM") = DdlUM.SelectedValue.ToEntero - Row("UM") = DdlUM.SelectedItem - Row("CveClasificacion") = DdlClasificacionAdd.SelectedValue - Row("Clasificacion") = DdlClasificacionAdd.SelectedItem - Row("CvePS") = DdlProductows.SelectedValue.ToEntero - Row("PS") = DdlProductows.SelectedText - Row("CodigoPS") = DdlProductows.SelectedText - Row("PU") = TxtPU.Text.ToDouble.FormatoNumero - Row("Total") = (TxtCantidad.Text.ToDouble * TxtPU.Text.ToDouble).FormatoNumero - Row("CveTipoPresupuesto") = 2 - Row("NoIdentificacion") = TxtNoIdentificacionv.Text.Trim - Row("OCInterna") = TxtOCInterna.Text.Trim - Row("LimitarCantidad") = If(ChkLimitarVenta.Checked, 1, 0) - Row("Observacion") = TxtObservacionesDetalles.Text - Dim ObjContratos As New ClsContratos - If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Convert.ToBoolean(Row("LimitarCantidad")), Row("OCInterna").ToString, Observacion:=Row("Observacion").ToString) Then - If Autorizado Then - Dim msj As String = String.Format("Se agregaron {0} {1} del producto {2} con un precio ${3}.", Row("Cantidad"), Row("UM"), Row("PS"), Row("PU")) - guardarBitacora(msj) - End If - Row("CveContratoDetalle") = ObjContratos.DtResultados.Rows(0)("CveContratoDetalle") - TmpDT.Rows.Add(Row) - TmpDT.AcceptChanges() - Dim TotalRow = Row("Total").ToString.ToDouble - CargaGVPresupuestos(TmpDT.FiltraParametros("CveTipoPresupuesto=2")) - - UpGV.Update() - TxtCantidad.Text = "" - TxtOCInterna.Text = "" - TxtNoIdentificacionv.Text = "" - TxtObservacionesDetalles.Text = "" - TxtPU.Text = "" - DdlClasificacionAdd.SelectedValue = "-1" - LbTotalGeneral.Text = (LbTotalGeneral.Text.ToDouble + TotalRow).ToString.FormatoNumero - LblImporte.Text = LbTotalGeneral.Text - TxtCantidad.Focus() - UpGral.Update() - Else - Alert("Ocurrio un error al agregar el detalle", TipoMensaje.MsgError) - End If - - ObjContratos.Dispose() + If CveContratoDetalleEditar = -1 Then + + Dim Row As DataRow = TmpDT.NewRow() + Row("Cantidad") = TxtCantidad.Text.ToDouble.FormatoNumero + Row("CantidadContratada") = TxtCantidad.Text.ToDouble.FormatoNumero + Row("CveUM") = DdlUM.SelectedValue.ToEntero + Row("UM") = DdlUM.SelectedItem + Row("CveClasificacion") = DdlClasificacionAdd.SelectedValue + Row("Clasificacion") = DdlClasificacionAdd.SelectedItem + Row("CvePS") = DdlProductows.SelectedValue.ToEntero + Row("PS") = DdlProductows.SelectedText + Row("CodigoPS") = DdlProductows.SelectedText + Row("PU") = TxtPU.Text.ToDouble.FormatoNumero + Row("Total") = (TxtCantidad.Text.ToDouble * TxtPU.Text.ToDouble).FormatoNumero + Row("CveTipoPresupuesto") = 2 + Row("NoIdentificacion") = TxtNoIdentificacionv.Text.Trim + Row("OCInterna") = TxtOCInterna.Text.Trim + Row("LimitarCantidad") = If(ChkLimitarVenta.Checked, 1, 0) + Row("Observacion") = "" 'TxtObservacionesDetalles.Text + + Dim ObjContratos As New ClsContratos + + + If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Convert.ToBoolean(Row("LimitarCantidad")), Row("OCInterna").ToString, Observacion:=Row("Observacion").ToString) Then + + If Autorizado Then + Dim msj As String = String.Format("Se agregaron {0} {1} del producto {2} con un precio ${3}.", Row("Cantidad"), Row("UM"), Row("PS"), Row("PU")) + guardarBitacora(msj) + End If + + Row("CveContratoDetalle") = ObjContratos.DtResultados.Rows(0)("CveContratoDetalle") + TmpDT.Rows.Add(Row) + TmpDT.AcceptChanges() + Dim TotalRow = Row("Total").ToString.ToDouble + + CargaGVPresupuestos(TmpDT.FiltraParametros("CveTipoPresupuesto=2")) + + UpGV.Update() + LimpiarModalVentas() + + LbTotalGeneral.Text = (LbTotalGeneral.Text.ToDouble + TotalRow).ToString.FormatoNumero + LblImporte.Text = LbTotalGeneral.Text + TxtCantidad.Focus() + UpGral.Update() + + + If Not ChkContinualAgregandoVentas.Checked Then + RegistraScript("$('#ModalVentasAddPS').modal('hide')") + End If + + Else + Alert("Ocurrio un error al agregar el detalle", TipoMensaje.MsgError) + End If + + ObjContratos.Dispose() + Else + + + Dim Cantidad, PU As Double : Dim CvePS, CveUM As Integer + Dim NoIdentificacion As String = "" + Dim OCInterna As String = "" + Dim LimitarCantidad As Boolean + Dim Observaciones As String = "" + + Cantidad = TxtCantidad.Text.ToDouble + PU = TxtPU.Text.ToDouble + CvePS = DdlProductows.SelectedValue.ToEntero + CveUM = DdlUM.SelectedValue.ToEntero + NoIdentificacion = TxtNoIdentificacionv.Text.Trim + OCInterna = TxtOCInterna.Text.Trim + LimitarCantidad = If(ChkLimitarVenta.Checked, True, False) + Observaciones = "" + + Dim row = TmpDT.Select(String.Format(" CveContratoDetalle={0}", CveContratoDetalleEditar))(0) + Dim LimitarCantidadValidator As Boolean = row("LimitarCantidad").ToString = "True" + + + Dim ObjContratos As New ClsContratos + If ObjContratos.UpdateContratosDetalle(CveContratoDetalleEditar, CveContrato, CvePS, Cantidad, PU, UsuarioActual.CveUsuario, NoIdentificacion, LimitarCantidad, OCInterna, Observaciones) Then + + If Autorizado Then + Dim msj As String = String.Format("Se realizaron los siguientes cambios, el Presupuesto Interno se modificó: {1} {0} {2:C2} a {3} {0} {4:C2}", + row("PS").ToString, row("Cantidad").ToString, row("PU").ToString, Cantidad, PU) + guardarBitacora(msj) + End If + + row("Cantidad") = Cantidad + row("CantidadContratada") = Cantidad + row("PU") = PU + row("Total") = Cantidad * PU + row("CveUM") = CveUM + row("UM") = DdlUM.SelectedItem.Text + row("NoIdentificacion") = NoIdentificacion + row("OCInterna") = OCInterna + row("LimitarCantidad") = LimitarCantidad + row("Observacion") = Observaciones + + TmpDT.AcceptChanges() + Alert("Cambios realizados correctamente.", TipoMensaje.MsgInformacion) + RegistraScript("$('#ModalVentasAddPS').modal('hide')") + Else + Alert("Error al Actualizar Detalle", TipoMensaje.MsgError) + End If + ObjContratos.Dispose() + + + + Gv.EditIndex = -1 + LbTotalGeneral.Text = TmpDT.FiltraParametros("CveTipoPresupuesto=2").SUM("Total").FormatoNumero + LblImporte.Text = LbTotalGeneral.Text + CargaGVPresupuestos(TmpDT.FiltraParametros("CveTipoPresupuesto=2")) + + End If + + End Sub Private Sub CargaDatosPresup() @@ -2069,7 +2152,8 @@ Partial Class Contratos_ContratoObra If ObjContratos.RemoveContratosDetalle(CveContratoDetalle, CveContrato) Then TmpDT.Rows.Remove(DbRow) CargaGVPresupuestos(TmpDT.FiltraParametros("CveTipoPresupuesto=2")) - LbTotalGeneral.Text = Gv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCLabel("LtTotal").Text.ToDouble).ToString.FormatoNumero + LbTotalGeneral.Text = Gv.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCLabel("LtTotal").Text.ToDouble).ToString.FormatoNumero + Alert("Detalle eliminado eliminado correctamente.") Else Alert("Ocurrió un error al eliminar el detalle (Producto/Servicio). Por favor vuelva a intentar", TipoMensaje.MsgError) End If @@ -2100,48 +2184,112 @@ Partial Class Contratos_ContratoObra UpGVInsumos.Update() End Sub - Protected Sub BtnAgregarDetalleInsumos_Click(sender As Object, e As EventArgs) - Dim Row As DataRow = TmpDT.NewRow() - Row("Cantidad") = TxtCantidadInsumos.Text.ToDouble.FormatoNumero - Row("CantidadContratada") = TxtCantidadInsumos.Text.ToDouble.FormatoNumero - Row("CveUM") = DdlUMInsumos.SelectedValue.ToEntero - Row("UM") = DdlUMInsumos.SelectedItem - Row("CveClasificacion") = DdlClasificacionAddInsumos.SelectedValue - Row("Clasificacion") = DdlClasificacionAddInsumos.SelectedItem - Row("CvePS") = DdlProductowsInsumos.SelectedValue.ToEntero - Row("PS") = DdlProductowsInsumos.SelectedText - Row("CodigoPS") = DdlProductowsInsumos.SelectedText - Row("PU") = TxtPUInsumos.Text.ToDouble.FormatoNumero - Row("Total") = (TxtCantidadInsumos.Text.ToDouble * TxtPUInsumos.Text.ToDouble).FormatoNumero - Row("CveTipoPresupuesto") = 1 - Row("NoIdentificacion") = TxtNoIdentificacionvInsumos.Text.Trim - Row("LimitarCantidad") = If(ChkLimitar.Checked, 1, 0) + Protected Sub BtnAgregarDetalleInsumos_Click(sender As Object, e As EventArgs) + + If CveContratoDetalleEditar = -1 Then + + Dim Row As DataRow = TmpDT.NewRow() + Row("Cantidad") = TxtCantidadInsumos.Text.ToDouble.FormatoNumero + Row("CantidadContratada") = TxtCantidadInsumos.Text.ToDouble.FormatoNumero + Row("CveUM") = DdlUMInsumos.SelectedValue.ToEntero + Row("UM") = DdlUMInsumos.SelectedItem + Row("CveClasificacion") = DdlClasificacionAddInsumos.SelectedValue + Row("Clasificacion") = DdlClasificacionAddInsumos.SelectedItem + Row("CvePS") = DdlProductowsInsumos.SelectedValue.ToEntero + Row("PS") = DdlProductowsInsumos.SelectedText + Row("CodigoPS") = DdlProductowsInsumos.SelectedText + Row("PU") = TxtPUInsumos.Text.ToDouble.FormatoNumero + Row("Total") = (TxtCantidadInsumos.Text.ToDouble * TxtPUInsumos.Text.ToDouble).FormatoNumero + Row("CveTipoPresupuesto") = 1 + Row("NoIdentificacion") = TxtNoIdentificacionvInsumos.Text.Trim + Row("LimitarCantidad") = If(ChkLimitarInsumos.Checked, 1, 0) + + Dim ObjContratos As New ClsContratos + If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Convert.ToBoolean(Row("LimitarCantidad")), "") Then + If Autorizado Then + Dim msj As String = String.Format("Se agregaron {0} {1} del producto {2} con un precio ${3}.", Row("Cantidad"), Row("UM"), Row("PS"), Row("PU")) + guardarBitacora(msj) + End If + Row("CveContratoDetalle") = ObjContratos.DtResultados.Rows(0)("CveContratoDetalle") + TmpDT.Rows.Add(Row) + Dim TotalRow = Row("Total").ToString.ToDouble + + CargaGVPresupuestosInsumos(TmpDT.FiltraParametros("CveTipoPresupuesto=1")) + + UpGVInsumos.Update() + LimpiarModalControl() + LbTotalGeneralInsumos.Text = (LbTotalGeneralInsumos.Text.ToDouble + TotalRow).ToString.FormatoNumero + 'LblImporte.Text = LbTotalGeneral.Text + TxtCantidadInsumos.Focus() + UpGral.Update() + + + If Not ChkContinualAgregandoControl.Checked Then + RegistraScript("$('#ModalControlAddPS').modal('hide')") + End If + + Else + Alert("Ocurrio un error al agregar el detalle", TipoMensaje.MsgError) + End If + + ObjContratos.Dispose() + + Else + + Dim Cantidad, PU As Double + Dim CvePS, CveUM As Integer + Dim NoIdentificacion As String = "" + Dim LimitarCantidad As Boolean + + Cantidad = TxtCantidadInsumos.Text.ToDouble + PU = TxtPUInsumos.Text.ToDouble + CvePS = DdlProductowsInsumos.SelectedValue.ToEntero + CveUM = DdlUMInsumos.SelectedValue.ToEntero + NoIdentificacion = TxtNoIdentificacionvInsumos.Text.Trim + LimitarCantidad = If(ChkLimitarInsumos.Checked, True, False) + + Dim row = TmpDT.Select(String.Format(" CveContratoDetalle={0}", CveContratoDetalleEditar))(0) + + + + Dim ObjContratos As New ClsContratos + If ObjContratos.UpdateContratosDetalle(CveContratoDetalleEditar, CveContrato, CvePS, Cantidad, PU, UsuarioActual.CveUsuario, NoIdentificacion, LimitarCantidad, "") Then + + If Autorizado Then + Dim msj As String = String.Format("Se realizaron los siguientes cambios, el Presupuesto Interno se modificó: {1} {0} {2:C2} a {3} {0} {4:C2}", + row("PS").ToString, row("Cantidad").ToString, row("PU").ToString, Cantidad, PU) + guardarBitacora(msj) + End If + + row("Cantidad") = Cantidad + row("CantidadContratada") = Cantidad + row("PU") = PU + row("Total") = Cantidad * PU + row("CveUM") = CveUM + row("UM") = DdlUMInsumos.SelectedItem.Text + row("NoIdentificacion") = NoIdentificacion + row("LimitarCantidad") = LimitarCantidad + TmpDT.AcceptChanges() + Alert("Cambios realizados correctamente.", TipoMensaje.MsgInformacion) + RegistraScript("$('#ModalControlAddPS').modal('hide')") + Else + Alert("Error al Actualizar Detalle", TipoMensaje.MsgError) + End If + ObjContratos.Dispose() + + + GvInsumos.EditIndex = -1 + LbTotalGeneralInsumos.Text = TmpDT.FiltraParametros("CveTipoPresupuesto=1").SUM("Total").FormatoNumero + CargaGVPresupuestosInsumos(TmpDT.FiltraParametros("CveTipoPresupuesto=1")) + + + End If + + - Dim ObjContratos As New ClsContratos - If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Convert.ToBoolean(Row("LimitarCantidad")), "") Then - If Autorizado Then - Dim msj As String = String.Format("Se agregaron {0} {1} del producto {2} con un precio ${3}.", Row("Cantidad"), Row("UM"), Row("PS"), Row("PU")) - guardarBitacora(msj) - End If - Row("CveContratoDetalle") = ObjContratos.DtResultados.Rows(0)("CveContratoDetalle") - TmpDT.Rows.Add(Row) - Dim TotalRow = Row("Total").ToString.ToDouble - CargaGVPresupuestosInsumos(TmpDT.FiltraParametros("CveTipoPresupuesto=1")) - UpGVInsumos.Update() - TxtCantidadInsumos.Text = "" - TxtPUInsumos.Text = "" - DdlClasificacionAddInsumos.SelectedValue = "-1" - LbTotalGeneralInsumos.Text = (LbTotalGeneralInsumos.Text.ToDouble + TotalRow).ToString.FormatoNumero - 'LblImporte.Text = LbTotalGeneral.Text - TxtCantidadInsumos.Focus() - UpGral.Update() - Else - Alert("Ocurrio un error al agregar el detalle", TipoMensaje.MsgError) - End If - ObjContratos.Dispose() End Sub #Region "GV PRESUPUESTOS" @@ -2251,7 +2399,8 @@ Partial Class Contratos_ContratoObra If ObjContratos.RemoveContratosDetalle(CveContratoDetalle, CveContrato) Then TmpDT.Rows.Remove(DbRow) CargaGVPresupuestosInsumos(TmpDT.FiltraParametros("CveTipoPresupuesto=1")) - LbTotalGeneralInsumos.Text = GvInsumos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCLiteral("LtTotal").Text.ToDouble).ToString.FormatoNumero + LbTotalGeneralInsumos.Text = GvInsumos.Rows.Cast(Of GridViewRow)().Sum(Function(gvr) gvr.FCLabel("LtTotal").Text.ToDouble).ToString.FormatoNumero + Alert("Detalle eliminado eliminado correctamente.") Else Alert("Ocurrió un error al eliminar el detalle (Producto/Servicio). Por favor vuelva a intentar", TipoMensaje.MsgError) End If @@ -2284,7 +2433,7 @@ Partial Class Contratos_ContratoObra Row("Total") = (TxtCantidadInt.Text.ToDouble * TxtPUInt.Text.ToDouble).FormatoNumero Row("CveTipoPresupuesto") = 1 Row("NoIdentificacion") = TxtNoIdentificacionv.Text.Trim - Row("LimitarCantidad") = ChkLimitar.Checked + Row("LimitarCantidad") = False 'ChkLimitar.Checked <-- Estaba usando un checkbox de un logar muy diferente a donde esta ese formilario, posiblemente se copio codigo y se fue por equivocacion Dim ObjContratos As New ClsContratos If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Row("LimitarCantidad").ToString.ToEntero = 1, "") Then @@ -4408,6 +4557,473 @@ Partial Class Contratos_ContratoObra + Property ModalVentasPSAdd As Boolean + Get + If ViewState("ModalVentasAdd") Is Nothing Then + Return False + Else + Return Boolean.Parse(ViewState("ModalVentasAdd").ToString) + End If + End Get + Set(value As Boolean) + ViewState("ModalVentasAdd") = value + End Set + End Property + + + Property ModalControlPSAdd As Boolean + Get + If ViewState("ModalControlPSAdd") Is Nothing Then + Return False + Else + Return Boolean.Parse(ViewState("ModalControlPSAdd").ToString) + End If + End Get + Set(value As Boolean) + ViewState("ModalControlPSAdd") = value + End Set + End Property + + Property Carga As Boolean + Get + If ViewState("ModalControlPSAdd") Is Nothing Then + Return False + Else + Return Boolean.Parse(ViewState("ModalControlPSAdd").ToString) + End If + End Get + Set(value As Boolean) + ViewState("ModalControlPSAdd") = value + End Set + End Property + + Enum EnumTipoCargaPresupuesto + Ventas + Control + End Enum + + Property TipoCargaPresupuesto As EnumTipoCargaPresupuesto + Get + If ViewState("TipoCargaPresupuesto") Is Nothing Then + Return EnumTipoCargaPresupuesto.Ventas + Else + Return DirectCast(ViewState("TipoCargaPresupuesto"), EnumTipoCargaPresupuesto) + End If + End Get + Set(value As EnumTipoCargaPresupuesto) + ViewState("TipoCargaPresupuesto") = value + End Set + End Property + + + Property CveContratoDetalleEditar As Integer + Get + + If ViewState("CveContratoDetalleEditar") Is Nothing Then + Return -1 + Else + Return ViewState("CveContratoDetalleEditar").ToString.ToEntero + End If + + End Get + Set(value As Integer) + ViewState("CveContratoDetalleEditar") = value + End Set + End Property + + Protected Sub LnkModalAddPresupuestoVentas_Click(sender As Object, e As EventArgs) + + LnlModalcargaPresupuestoTitulo.Text = "Carga Presupuesto Ventas" + UpModalCargaPresupuesto.Update() + RegistraScript("$('#ModalUploadPresupuesto').modal('show')") + TipoCargaPresupuesto = EnumTipoCargaPresupuesto.Ventas + + End Sub + + Protected Sub LnkModalAddPresupuestoControl_Click(sender As Object, e As EventArgs) + + LnlModalcargaPresupuestoTitulo.Text = "Carga Presupuesto Control" + UpModalCargaPresupuesto.Update() + RegistraScript("$('#ModalUploadPresupuesto').modal('show')") + TipoCargaPresupuesto = EnumTipoCargaPresupuesto.Control + + End Sub + + Protected Sub LnkModalAddPSVentas_Click(sender As Object, e As EventArgs) + + ModalVentasPSAdd = True + ChkContinualAgregandoVentas.Visible = True + ChkContinualAgregandoVentas.Checked = True + LimpiarModalVentas() + RegistraScript("$('#ModalVentasAddPS').modal('show')") + + End Sub + + Protected Sub LnkModalAddPSControl_Click(sender As Object, e As EventArgs) + + ModalControlPSAdd = True + ChkContinualAgregandoControl.Visible = True + ChkContinualAgregandoControl.Checked = True + LimpiarModalControl() + RegistraScript("$('#ModalControlAddPS').modal('show')") + + End Sub + + + Protected Sub LnkEditarPresupuestoVentaDetalle_Click(sender As Object, e As EventArgs) + + Dim GvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) + LimpiarModalVentas() + + 'CveContratoDetalle,CveUM,CvePS,Cantidad,PU,CveTipoPresupuesto,CveClasificacion,CodigoPS,LimitarCantidad + + CveContratoDetalleEditar = GvRow.DataKey("CveContratoDetalle").ToEntero + + + TxtOCInterna.Text = GvRow.DataKey("OCInterna") + TxtCantidad.Text = GvRow.DataKey("Cantidad").ToDouble.ToString + + ChkLimitarVenta.Checked = Boolean.Parse(GvRow.DataKey("LimitarCantidad")) + + TxtNoIdentificacionv.Text = GvRow.DataKey("NoIdentificacion").ToDouble.ToString + DdlClasificacionAdd.SelectedValueExist(GvRow.DataKey("CveClasificacion").ToEntero) + + DdlProductows.txtText.Value = GvRow.DataKey("PS").ToString + DdlProductows.txtValue.Value = GvRow.DataKey("CvePS").ToString + + DdlUM.DataSource = GlobalDTProductosServiciosEquivalencias(DdlProductows.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa) + DdlUM.DataBind() + DdlUM.SelectedValueExist(GvRow.DataKey("CveUM").ToDouble.ToString) + + TxtPU.Text = GvRow.DataKey("PU").ToDouble.ToString + + + + ModalVentasPSAdd = False + ChkContinualAgregandoVentas.Visible = False + ChkContinualAgregandoVentas.Checked = False + + + RegistraScript("$('#ModalVentasAddPS').modal('show')") + End Sub + Protected Sub LnkEditarPresupuestoControlDetalle_Click(sender As Object, e As EventArgs) + Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) + LimpiarModalControl() + + CveContratoDetalleEditar = gvRow.DataKey("CveContratoDetalle").ToEntero + + TxtCantidadInsumos.Text = gvRow.DataKey("Cantidad").ToDouble.ToString + ChkLimitarInsumos.Checked = Boolean.Parse(gvRow.DataKey("LimitarCantidad")) + TxtNoIdentificacionvInsumos.Text = gvRow.DataKey("NoIdentificacion") + + DdlClasificacionAddInsumos.SelectedValueExist(gvRow.DataKey("CveClasificacion").ToEntero) + + DdlProductowsInsumos.txtText.Value = gvRow.DataKey("PS").ToString + DdlProductowsInsumos.txtValue.Value = gvRow.DataKey("CvePS").ToString + + + DdlUMInsumos.DataSource = GlobalDTProductosServiciosEquivalencias(DdlProductowsInsumos.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa) + DdlUMInsumos.DataBind() + DdlUMInsumos.SelectedValueExist(gvRow.DataKey("CveUM").ToDouble.ToString) + + + + TxtPUInsumos.Text = gvRow.DataKey("PU").ToDouble.ToString + + + + ModalControlPSAdd = False + ChkContinualAgregandoControl.Visible = False + ChkContinualAgregandoControl.Checked = False + + RegistraScript("$('#ModalControlAddPS').modal('show')") + End Sub + + + Private Sub LimpiarModalVentas() + + TxtOCInterna.Text = "" + TxtCantidad.Text = "" + ChkLimitarVenta.Checked = False + TxtNoIdentificacionv.Text = "" + DdlClasificacionAdd.SelectedValueExist(-1) + DdlProductows.txtText.Value = "" + DdlProductows.txtValue.Value = "" + DdlUM.SelectedValueExist(-1) + TxtPU.Text = "" + + + If ModalVentasPSAdd = True Then + LtlModalVentasPSTitulo.Text = "Agregar Producto Presupuesto de Ventas" + Else + LtlModalVentasPSTitulo.Text = "Editar Producto Presupuesto de Ventas" + End If + + + UpModalVentasAddPS.Update() + + End Sub + Private Sub LimpiarModalControl() + + + + TxtCantidadInsumos.Text = "" + ChkLimitarInsumos.Checked = False + TxtNoIdentificacionvInsumos.Text = "" + + DdlClasificacionAddInsumos.SelectedValueExist(-1) + DdlProductowsInsumos.txtText.Value = "" + DdlProductowsInsumos.txtValue.Value = "" + DdlUMInsumos.SelectedValueExist(-1) + TxtPUInsumos.Text = "" + + + If ModalControlPSAdd = True Then + LtlModalControlPSTitulo.Text = "Agregar Producto Presupuesto Control" + Else + LtlModalControlPSTitulo.Text = "Editar Producto Presupuesto Control" + End If + + UpModalControlAddPS.Update() + + End Sub + + + + Protected Sub BtnCargaPresupuesto_Click(sender As Object, e As EventArgs) + + Dim DTCargaPresupuesto As New DataTable + DTCargaPresupuesto = CargaPreSupuestoExcel() + + If DTCargaPresupuesto.Rows.Count > 0 Then + ProcesaDatosCargaPresupuesto(DTCargaPresupuesto) + Else + Alert("No se encintraron partidas en el documento", TipoMensaje.MsgAdvertencia) + End If + + End Sub + + + + Private Function CargaPreSupuestoExcel() As DataTable + + Dim FileExtension As String = "-1" + Dim Filesgral As List(Of Archivo) = TxtModalCargaPresupuesto.getfiles().Archivos + Dim Filename As String = "" + Dim DTPS = New DataTable + + For Each fileItem As Archivo In Filesgral + + FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") + + + If Not FileExtension.ToUpper.Contiene("XLSX", "XSL") Then + Alert("El archivo no es una archivo de Excel", TipoMensaje.MsgAdvertencia) + Exit For + End If + + + Dim tempArray() As String + tempArray = fileItem.filename.ToString().Split("-".ToCharArray()) + SpreadsheetInfo.SetLicense(Extensiones.SerialGemBoxSpreadsheet) + Dim workbook = ExcelFile.Load(fileItem.FileUrl) + Dim worksheet = workbook.Worksheets(0) + DTPS = worksheet.CreateDataTable(New CreateDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .NumberOfColumns = 4, + .NumberOfRows = worksheet.Rows.Count, + .Resolution = ColumnTypeResolution.AutoPreferStringCurrentCulture + }) + + Next + + TxtModalCargaPresupuesto.Text = "" + + RegistraScript("$('#ModalUploadPresupuesto').modal('hide')") + + UpModalCargaPresupuesto.Update() + + Return DTPS + + End Function + + + Private Sub ProcesaDatosCargaPresupuesto(DTPresupuesto As DataTable) + + Dim DTPS = New DataTable + DTPS.Columns.Add("CveContratoDetalle", GetType(Integer)) + DTPS.Columns.Add("Cantidad", GetType(Double)) + DTPS.Columns.Add("CantidadContratada", GetType(Double)) + DTPS.Columns.Add("CveUM", GetType(Integer)) + DTPS.Columns.Add("UM", GetType(String)) + DTPS.Columns.Add("CveClasificacion", GetType(Integer)) + DTPS.Columns.Add("Clasificacion", GetType(String)) + DTPS.Columns.Add("CvePS", GetType(Integer)) + DTPS.Columns.Add("PS", GetType(String)) + DTPS.Columns.Add("CodigoPS", GetType(String)) + DTPS.Columns.Add("PU", GetType(Double)) + DTPS.Columns.Add("Total", GetType(Double)) + DTPS.Columns.Add("CveTipoPresupuesto", GetType(Integer)) + DTPS.Columns.Add("PermitirAvance", GetType(Integer)) + DTPS.Columns.Add("PermitirEstimacion", GetType(Integer)) + DTPS.Columns.Add("UsuarioAvance", GetType(Integer)) + DTPS.Columns.Add("Cantidad_Original", GetType(Double)) + DTPS.Columns.Add("PU_Original", GetType(Double)) + DTPS.Columns.Add("Total_Original", GetType(Double)) + DTPS.Columns.Add("NoIdentificacion", GetType(String)) + DTPS.Columns.Add("LimitarCantidad", GetType(Integer)) + DTPS.Columns.Add("OCInterna", GetType(String)) + DTPS.Columns.Add("Observacion", GetType(String)) + + Dim RowNoEncontrados As String = "" + + For Each DrowPS As DataRow In DTPresupuesto.Rows + + + Dim StrArray() As String = GetPS("PS", DrowPS("PS").ToString).Split("|"c) + Dim CvePS As Integer + Dim CveUM As Integer + + If StrArray.Length > 0 Then + If CBool(StrArray(0)) = True Then + CvePS = StrArray(1).ToEntero + Else + RowNoEncontrados &= StrArray(1) & "<\BR>" + End If + End If + + If CvePS > 0 And DrowPS("Cantidad").ToString.ToDouble > 0 Then + + CveUM = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimeroValor("CveUnidadMedida", "").ToString.ToEntero + + Dim Row As DataRow = DTPS.NewRow() + Row("Cantidad") = DrowPS("Cantidad").ToString.ToDouble + Row("CantidadContratada") = DrowPS("Cantidad").ToString.ToDouble + Row("CveUM") = CveUM + Row("UM") = "" + Row("CveClasificacion") = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimeroValor("CveClasificacion", "").ToString.ToEntero + Row("Clasificacion") = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = '{ Row("CveClasificacion").ToString }'").ToString + Row("CvePS") = CvePS + Row("PS") = DrowPS("PS").ToString + Row("CodigoPS") = DrowPS("PS").ToString + Row("PU") = DrowPS("PU").ToString.ToDouble + Row("Total") = DrowPS("Cantidad").ToString.ToDouble * DrowPS("PU").ToString.ToDouble + + + Select Case TipoCargaPresupuesto + Case EnumTipoCargaPresupuesto.Ventas + Row("CveTipoPresupuesto") = 2 + Exit Select + Case EnumTipoCargaPresupuesto.Control + Row("CveTipoPresupuesto") = 1 + Exit Select + Case Else + Row("CveTipoPresupuesto") = 1 + End Select + + + Row("NoIdentificacion") = "" + Row("OCInterna") = "" + Row("LimitarCantidad") = 0 + Row("Observacion") = "" + + DTPS.Rows.Add(Row) + + End If + Next + + + + + Dim ErrorProceso = False + Dim ObjContratos As New ClsContratos + Dim TotalRow As Double = 0 + ObjContratos.IniciaTransacSQL() + + For Each Row As DataRow In DTPS.Rows + + If ObjContratos.AddContratosDetalle(CveContrato, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDouble, Row("PU").ToString.ToDouble, UsuarioActual.CveUsuario, Row("CveTipoPresupuesto").ToString.ToEntero, Row("NoIdentificacion").ToString, Convert.ToBoolean(Row("LimitarCantidad")), Row("OCInterna").ToString, Observacion:=Row("Observacion").ToString) Then + + If Autorizado Then + Dim msj As String = String.Format("Se agregaron {0} {1} del producto {2} con un precio ${3}.", Row("Cantidad"), Row("UM"), Row("PS"), Row("PU")) + guardarBitacora(msj) + End If + + Dim NrowTmpDT As DataRow = TmpDT.NewRow + + + NrowTmpDT("Cantidad") = Row("Cantidad") + NrowTmpDT("CantidadContratada") = Row("CantidadContratada") + NrowTmpDT("CveUM") = Row("CveUM") + NrowTmpDT("UM") = Row("UM") + NrowTmpDT("CveClasificacion") = Row("CveClasificacion") + NrowTmpDT("Clasificacion") = Row("Clasificacion") + NrowTmpDT("CvePS") = Row("CvePS") + NrowTmpDT("PS") = Row("PS") + NrowTmpDT("CodigoPS") = Row("CodigoPS") + NrowTmpDT("PU") = Row("PU") + NrowTmpDT("Total") = Row("Total") + NrowTmpDT("CveTipoPresupuesto") = Row("CveTipoPresupuesto") + NrowTmpDT("NoIdentificacion") = Row("NoIdentificacion") + NrowTmpDT("OCInterna") = Row("OCInterna") + NrowTmpDT("LimitarCantidad") = Row("LimitarCantidad") + NrowTmpDT("Observacion") = Row("Observacion") + + + NrowTmpDT("CveContratoDetalle") = ObjContratos.DtResultados.Rows(0)("CveContratoDetalle") + + TmpDT.Rows.Add(NrowTmpDT) + TmpDT.AcceptChanges() + + TotalRow = TotalRow + NrowTmpDT("Total").ToString.ToDouble + Else + ErrorProceso = True + Exit For + End If + Next + + + If ErrorProceso Then + ObjContratos.RollBack() + Alert("Se presento un error al cargar el presupuesto.", TipoMensaje.MsgError) + Else + + ObjContratos.Commit() + Alert("Presupuesto Cargado correctamente") + + + Select Case TipoCargaPresupuesto + Case EnumTipoCargaPresupuesto.Ventas + CargaGVPresupuestos(TmpDT.FiltraParametros("CveTipoPresupuesto=2")) + UpGV.Update() + Exit Select + Case EnumTipoCargaPresupuesto.Control + CargaGVPresupuestosInsumos(TmpDT.FiltraParametros("CveTipoPresupuesto=1")) + UpGVInsumos.Update() + Exit Select + Case Else + + End Select + + LbTotalGeneral.Text = (LbTotalGeneral.Text.ToDouble + TotalRow).ToString.FormatoNumero + LblImporte.Text = LbTotalGeneral.Text + UpGral.Update() + + End If + + + + ObjContratos.Dispose() + + If RowNoEncontrados.Length > 0 Then + Alert($"Productos no encontrados
    {RowNoEncontrados} ") + End If + + + End Sub + End Class diff --git a/TareasProgramadas/FormatosThalamus/FormatoAlmacenes.xlsx b/TareasProgramadas/FormatosThalamus/FormatoAlmacenes.xlsx index a1ee0618629588e551276d9bbeb7ec7d48fe478b..735c70745fc08fc44bf44bd1867e7b2567736fc8 100644 GIT binary patch delta 4626 zcma)Abx;)Sw_cX61r%ZFr9+nP6p-$e5G17plva~7%^{T^J(hJQiCnda($t%bF?Ehds4WcVCx ziuJk{RmMX5EuA*?PKd7qz)nF&Ui^gzv|+=mkXOQpy{B!@iF~3cU4H_mTeqkV8GR~& ztHgVUW|FkKv=_;sgfS_p#Oz5x8qAIsStWBsh8IS*sp9SO{Wy;C?9CMDXHLEn%WUc% zh~XMohs2e}g>Umg=Zk;<04)IkK=JE80v-v%yu97*y}aB70z4iSnizUz2~mc;uE*M* z<%DZOZu6CmBzYnmc`fUfIgOUU+~)XM6UCaQM;$w%i25PsR+_M(v)Ka}Z02k;$ZB!* zl{!${j9%#+e*IZOYX+Lqsse!M#)-NQ z^!kwx1Sk!~^0nX%YpsP_3LQ;~7cGm4)2%f2TF)FPH{~kN)3AP_!nXi{NW8y#RM&@KKA_FUS0c!6l z3aAif1t~;HCwld^!$Uotbt%1Py0@+G4(xM7*R__wOJm=k@bT+A$N`K!PVMp%kyZUK zwH9ZO0=rmjVa;g=CJ{IdEK8~Gn$QlDk#P8!|Cl1*8-fcFV~G9XOKjQmWsEF@m55NS zpRHBQ*iF=AO|Cobi?W92fLlxY@X9w-HEP0MEiZo12#35xDf)n{JJBJA* z{%+#7W}|HdMptQ+Cl8OlO8ZL%>G{ImwVQIRUj=W*7&-MJAa#0BF(iGf{%NgvD0>X% zd-(Y0hNp~HHWBs`BTzALS-s)l9Hzoyir&`AywEWl&e_LfrXzM3gUD*KT`j-CNR#PB zEw)W$e@7(x(gSKamB)KcBlT%;w76~FvVo}PhEcN$py=-2rQJ`LPO}>q(_${&BO-Rgs(4-h&BD^3!vT;3whXUE-TFpuBlBKjI8p&+d)QWyT zl0~b@!_(6S78wj_4)wjyt>;9KnihjL?BQ!cW+XrCW^M@^+&YvPqUDWWshfTM8t8vK zpCi?18IHFNa4$@jbFWOz);wJ&=XoNad} zSrePn{ytj~#>AkjX70yl)5sQz5bVR=7Z%N<@clF%>#aA&M#`TgMsm1I3}rObCf-s6 ze|t9!8E@#smtuIIk`|3`p72n;m5PfUzlw9bQ`QiuzXcfTKb~umO&Q2nl3>&~qVW8Q zmIX7+Gi=na^F%&OFvu&y_j#ls`b-@Y+kTaL=99A=gN5_;qF1KvMQZDKmi=E1&O=E$ z;rccDX*GvVo7*C(ZE^Tlxbe(qt-~=$NA7E+-@y28WJZGvKhgldvO77wAYJqMj$V@u zT9~hP1mw4>CLWRun9^XYcP(nzASkWxu@0ZAFLZ*Y7X_$smZWq2C{Q4dwPJ|+IX-93 z5XL~GpoQj+SeNn98{r;V?23{hdEOO)P;fG5D?$5HqIaY)t6sT;k-qw#Bba&ID2ea%g|aY-qJrP@|x*tkSFr*a2R9@HSi0Ejhm4wuLt#T zR0{fjqRvj9)Nr$NZ!D}LD^T5nXBR^9cJyNl@6UnkSPwdIkYjS&w*|k|=BIi!&mLp! z?KloT4Vk&BNCHbG(9f4kiHo`J#!C~pRu0c=ykfB47_k8ed~xdYInLhB9wZ*p*9g6o zDTJ_v1f&K!*u;vlM#(?nX3=wKNXw`f??1A!K==sdZ7&uB7JS1EOZv6ov<4;l5ThjA zplSFAj(E+)r0ya!2cc3<6W_hkL&=nu0)g;%Dcwh~!@KzAz-Xj<9(gT>m@>D4htC4$ zpo%{Oo{m}%(qtf-f5J+z&x(LWi4o*LMfoDg*S}FjlZ4)?cO)F04xBq4$EZ-Mu@jCE z=q$ub;KzMvew4!-kAE8uU3570UkRzKnhh+djFiw^2p_F9Gifeol0R1^SG86C@lN>6 z@|B(Bk_HGYmDXn54P`}!Ow9Q)L@TOoyj6c&WsU{C%=G@Cc(5I~$Y~j&m~YAnf(5qN zak&$=-)nOsms9^Fb^8;7+WQJQE4#vP`|+8*OWn#x@1racz{4-_Y?2LG>&mRl#zhrs z9yhdBEA6qJl+Lc}RqU-G!OppH=j%cbQsnID`S==(jy2i%_bGaM=8!MbyLi}UoA#{g z>N-r;*+7P5iz8ApG1Xl#vm$lFPvS%ce&lm_ec7`ys*ncp6S5csPVG?@qF;OzqE5qXO-j zxO#e8u{{X$TckCSh8$Pm&XBH&ngrr9gu?QKX6#d;zO$DMn2K^YkNpRP^@4g0JN%2m z_abEEjV!J=6M|XfJPSHLYwQm{*OW%sD&%WO_o{B~huSM`z>Z(J2ZQj6Jq8C3j){NQ z4W||jBX!0D0Pe~H0Nnqs`LVaFr>~Q@v6HW_tEaP%;6JdifW52dW~#mmqbc}9$H~Ky zpO?3Z#cPWBo(f9Gm`^;9=VI%9cu-O{;rOl&Z9+}wY~$ba`LoqS=lvdSDkZ#{LnHpS zLyiDSITHhlXYiYcY{}sPyUV83N06BOnL$s>QP0VUXUH9L(V3u`i|Lc#gNx}1-f(gp zm-jt+c-lg^K8Q|tMhSyAA4qH#-jbLGc`DQKOG%{@tG7p<8+TV%(~&)!(}F8(03*mA zc>@ykqbzaun<_83`8N2w@zQZZ=N9xCn|kh>TTCHbg5a5o5*LESB?eey;Kc>s*?Y$x zDW$hBvuI)0=)Fy<(8Xz%zMxu(mnWYRu(DhqqH{ul+>Tx}T{U*eD2NER5@U=t?PzXMS`7Ba`aMG|;3)C&wdk1FZtV09+yKkG0#~}C7$c1D8!Tl_kayI0CE67{ z%9BPW9MF$gj$+lz7C$w2jA39@FSOubLg}EGw<-B4R>^o@ zUFXTAAu4ewYyO(npiu`IJhgav!=J!*n)JS4X_2?7hpK^5m9t>0c*AUDf2yueAU=Y`U!*I8jw*W)W#-T}D)#%UGUD!X|5R)g%ONFTZV5$*g2}(auyB zyv8Lc!#{ze<~D2e_Sh2X_CX61$6i52@}v;D`3RE$w?;3xNokl{Nb^7WG$!wjyYyCPh=m=8pq>gaw%b6j|zX`=BlWdA%`4j z(cP&^)xA^l?pe03Jb%wIil%UhXC)Uc)bF(yspf>t2V}!RF>HyR+t?kT&(^CJq zH*c1liYhiIYV)`y5S0hI_qB09&xH{5;&asc^Ur=eW>hL`-Id!Z^utd*O`_MzGNc{- z-RGGTtQmq#h&HOtR{ak8pP8Z-$_`k%jV0jmlG${GYxbKzWwy(lJk3B=l-1 z)tlhx)IEwuocomC5x4NT%x#--i~S+_>_)pdu8P*9xOhF7P#}}s=Q>90LtLpPto*7Z zwpfkbIZv83Jq3mQY;xmGLV+uSO=S zzS#yT+{Px>5xj$U4a^^%ARM3hx0!grFa#v|vzI_gFdO2OpkkPr8UAUPe~thDID;rO zvmDMV)HO4d@oyi34*-DwGvKfL3n}U+DLu-Lg%2kK701HG@V7Ml<-f`QOQ;ZPh(!h{ z07el*xa9uHvwtEP>HaqD{|oD)kj%IK8)^MXz)b&Ff`3rf|43m5+BiTc;LqyjcaMqw zVt(>p+Lr21#$T^~W&ps^%fZ0g>#>iZgO@kT0wM?$V@17y(1XYTWB@K)008@2FaZ7q Dk?2{Z delta 3016 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 diff --git a/TareasProgramadas/FormatosThalamus/FormatoVentas.xlsx b/TareasProgramadas/FormatosThalamus/FormatoVentas.xlsx index 9fef83a64c16a859283d6e537e72ed4cad940b32..1d0287413793291ee050f9460bed251822ad4d21 100644 GIT binary patch delta 4732 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 10 Then Return 3 'ARMA MENSAJE