From 93fed87fb852d9387963e1cc6d11a6596f3e62a2 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 8 Dec 2021 15:17:33 -0700 Subject: [PATCH 1/9] Quitar carga de variable CveDevolucion al cargar documento tipo devolucion --- Ventas/Ventas.aspx.vb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 5e8d6547b..6e4e7d7d9 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -4388,7 +4388,7 @@ Partial Class Ventas DdlTipoComprobante.Items.Insert(0, New ListItem("Devolucion", "Dev")) HplDownXML.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) HdnFolioFiscalNC.Value = DbRowVenta("FolioFiscalPadre").ToString() - ViewState("CveDevolucion") = DbRowVenta("CveVentaPadre").ToString().ToEntero() + 'ViewState("CveDevolucion") = DbRowVenta("CveVentaPadre").ToString().ToEntero() Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) From eb8de2783725dbc2e7d240a8be5b988fde67d4cd Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Wed, 8 Dec 2021 16:12:40 -0700 Subject: [PATCH 2/9] Presupuesto Excel --- Contratos/Contrato.aspx | 5 ++++- Contratos/Contrato.aspx.vb | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Contratos/Contrato.aspx b/Contratos/Contrato.aspx index 7fb92b014..52992ef0a 100644 --- a/Contratos/Contrato.aspx +++ b/Contratos/Contrato.aspx @@ -130,7 +130,9 @@
  • Presupuesto PDF
  • - +
  • + Presupuesto Excel +
  • Activos Fijos PDF
  • @@ -170,6 +172,7 @@ + diff --git a/Contratos/Contrato.aspx.vb b/Contratos/Contrato.aspx.vb index 02127071e..50bb6f76a 100644 --- a/Contratos/Contrato.aspx.vb +++ b/Contratos/Contrato.aspx.vb @@ -2754,7 +2754,7 @@ Partial Class Contratos_Default Private Sub CargaGVGastos() Dim objContrato As New ClsContratos - If objContrato.GetContratoGastos(CveContrato) Then + If objContrato.GetContratoGastos(CveContrato, UsuarioActual.CveEmpresa) Then DtGastos = objContrato.DtResultados GvContratosGastos.DataSource = DtGastos SumaGasto = objContrato.DtResultados.SUM("Importe", "CveContratoGasto IS NULL") @@ -3835,6 +3835,9 @@ Partial Class Contratos_Default #Region "I M P R E S I O N D E P R E S U P U E S T O " Private Sub lLbImprimirPresupuesto_Click(sender As Object, e As EventArgs) Handles LbImprimirPresupuesto.Click GenerarPDFPPresupuesto() + End Sub + Private Sub lLbImprimirPresupuestoEXCEL_Click(sender As Object, e As EventArgs) Handles LbImprimirPresupuestoExcel.Click + GenerarPDFPPresupuesto(Formato:="EXCEL") End Sub Private Sub GenerarPDFPPresupuesto(Optional Formato As String = "PDF") Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta)) From 9e8aebc774ebde3bf02dde523a3c99945d8bc406 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Thu, 9 Dec 2021 15:46:47 -0700 Subject: [PATCH 3/9] Correcion de asignacion de permisos --- Sistemas/UsuarioDetalle.aspx.vb | 1521 +++++++++++++++---------------- 1 file changed, 760 insertions(+), 761 deletions(-) diff --git a/Sistemas/UsuarioDetalle.aspx.vb b/Sistemas/UsuarioDetalle.aspx.vb index b17cec2e5..a70806496 100644 --- a/Sistemas/UsuarioDetalle.aspx.vb +++ b/Sistemas/UsuarioDetalle.aspx.vb @@ -6,8 +6,8 @@ Imports System.Data Imports System.Threading Partial Class Sistemas_UsuarioDetalle - Inherits ClsPaginas - + Inherits ClsPaginas + #Region "P R O P I E D A D E S" Private Property DTEstatusSubProyectos As DataTable Get @@ -84,7 +84,7 @@ Partial Class Sistemas_UsuarioDetalle Get Return ViewState("Password").ToString End Get - End Property + End Property Private ReadOnly Property CodigoAcceso As String Get Return ViewState("CodigoAcceso").ToString @@ -395,10 +395,10 @@ Partial Class Sistemas_UsuarioDetalle Set(value As Integer) ViewState("CveEmpresaAnterior") = value End Set - End Property + End Property #End Region - - + + Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then @@ -450,30 +450,30 @@ Partial Class Sistemas_UsuarioDetalle TrLimiteAutorizacion.Visible = True End If - If UsuarioActual.Empresa.Funcionalidad(599) = "1" Then - TrCodigoAcceso.Visible = True + If UsuarioActual.Empresa.Funcionalidad(599) = "1" Then + TrCodigoAcceso.Visible = True End If - CargaDatos() - InicializaClonarUsuario() - InicializaRestricciones() - CargaGvBitacora() - CargaEmpresasAsignaciones() - CreaDtAsignacionesMultiEmpresa() - CveEmpresaAnterior = DdlEmpresaAsignaciones.SelectedValue.ToEntero - + CargaDatos() + InicializaClonarUsuario() + InicializaRestricciones() + CargaGvBitacora() + CargaEmpresasAsignaciones() + CreaDtAsignacionesMultiEmpresa() + CveEmpresaAnterior = DdlEmpresaAsignaciones.SelectedValue.ToEntero + End If - End Sub - - 'DOCUMENTACION - 'LOS CAMPOS DE DATATABLE "ACCION" SE REFIERE AL ESTATUS DE LOS CAMBIOS QUE OCURRIERON ANTES DE DARLE GUARDAR - ' 0/NULL/VACIO = ORIGINAL (SIN CAMBIO) - ' 1 = AGREGADO - ' 2 = ELIMINADO - ' 3 = NADA (AGREGADO Y ELIMINADO): CUANDO AGREGA UN REGISTRO Y LO ELIMINA, ES DECIR, NO SE GUARDA NADA - ' 4 = UPDATE - - + End Sub + + 'DOCUMENTACION + 'LOS CAMPOS DE DATATABLE "ACCION" SE REFIERE AL ESTATUS DE LOS CAMBIOS QUE OCURRIERON ANTES DE DARLE GUARDAR + ' 0/NULL/VACIO = ORIGINAL (SIN CAMBIO) + ' 1 = AGREGADO + ' 2 = ELIMINADO + ' 3 = NADA (AGREGADO Y ELIMINADO): CUANDO AGREGA UN REGISTRO Y LO ELIMINA, ES DECIR, NO SE GUARDA NADA + ' 4 = UPDATE + + #Region " C A R G A R - D A T O S " Private Sub CargaDatos() @@ -527,10 +527,10 @@ Partial Class Sistemas_UsuarioDetalle CargarRol() CargaAsignaciones() - CargaUsuarioResponsable() - - ' ValidaAccesoEstatusOC() - + CargaUsuarioResponsable() + + ' ValidaAccesoEstatusOC() + End Sub Public Sub CargaUsuarioResponsable() @@ -587,7 +587,7 @@ Partial Class Sistemas_UsuarioDetalle LblFechaCaptura.Text = ObjUsuario.Fecha.ToShortDateString LblUsuarioCapturo.Text = ObjUsuario.UsuarioCreo - TxtDescuentoAutorizado.Text = ObjUsuario.DescuentoAutorizado.FormatoNumero + TxtDescuentoAutorizado.Text = ObjUsuario.DescuentoAutorizado.FormatoNumero TxtLimiteAutorizado.Text = ObjUsuario.DtResultados.Rows(0)("LimiteCreditoAutorizado").ToString() Else Alert("El Usuario Solicitado no existe, Revise su búsqueda.", TipoMensaje.MsgAdvertencia) @@ -759,23 +759,23 @@ Partial Class Sistemas_UsuarioDetalle If CveTipoDocumentoAsignado <> "-1" Then DdlTipoDocumento.SelectedValueExist(CveTipoDocumentoAsignado) UpFiltrosAsignarPermiso.Update() - End Sub + End Sub #End Region - - 'Private Sub CargaSucursal() - ' DtSubProyectos2 = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("CveSubProyecto =" & DdlSubProyectos.SelectedValue.ToEntero) - ' If DtSubProyectos2.Rows.Count > 0 Then - ' Dim dr As DataRow - ' dr = DtSubProyectos2(0) - ' CveSucursal = dr("CveSucursal").ToString.ToEntero - ' Else - ' CveSucursal = -1 - ' End If - - 'End Sub - + + 'Private Sub CargaSucursal() + ' DtSubProyectos2 = GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros("CveSubProyecto =" & DdlSubProyectos.SelectedValue.ToEntero) + ' If DtSubProyectos2.Rows.Count > 0 Then + ' Dim dr As DataRow + ' dr = DtSubProyectos2(0) + ' CveSucursal = dr("CveSucursal").ToString.ToEntero + ' Else + ' CveSucursal = -1 + ' End If + + 'End Sub + #Region " G U A R D A R - U P D A T E " - + Private Function ValidaUsername(Username As String, Correo As String) As Boolean Dim Retorno As Boolean = True 'If CveUsuario = -1 Then @@ -804,491 +804,490 @@ Partial Class Sistemas_UsuarioDetalle Dim TieneError = False Dim EsNuevoUsuario As Boolean = False - Try - 'Cargo la ultima empresa consultada en asignaciones - Dim DtValida = DtAsignacionesMultiEmpresa.FiltraParametros(String.Format("CveEmpresa = {0}", CveEmpresaAnterior)) - If DtValida.Rows.Count > 0 Then - Dim dr = DtAsignacionesMultiEmpresa.Select(String.Format("CveEmpresa = {0}", CveEmpresaAnterior)) - dr(0)("CveEmpresa") = CveEmpresaAnterior - dr(0)("CvePersonal") = DdlPersonal.SelectedValue.ToEntero - dr(0)("CveVendedor") = DdlVendedor.SelectedValue.ToEntero - dr(0)("CveSucursal") = DdlSubProyectos.SelectedValue.ToEntero - dr(0)("CveAlmacen") = DdlAlmacenGeneral.SelectedValue.ToEntero - dr(0)("CveTipoDocumento") = DdlTipoDocumento.SelectedValue - dr(0).AcceptChanges() - Else - Dim Row As DataRow = Nothing - Row = DtAsignacionesMultiEmpresa.NewRow() - Row("CveEmpresa") = CveEmpresaAnterior - Row("CvePersonal") = DdlPersonal.SelectedValue.ToEntero - Row("CveVendedor") = DdlVendedor.SelectedValue.ToEntero - Row("CveSucursal") = DdlSubProyectos.SelectedValue.ToEntero - Row("CveAlmacen") = DdlAlmacenGeneral.SelectedValue.ToEntero - Row("CveTipoDocumento") = DdlTipoDocumento.SelectedValue - DtAsignacionesMultiEmpresa.Rows.Add(Row) - End If - - Dim CodigoAcceso As String = If(String.IsNullOrEmpty(TxtCodigoAcceso.Text.Trim), "-1", TxtCodigoAcceso.Text.Trim) - - 'REGISTRA O ACTUALIZA LOS DATOS GENERALES DEL USUARIO - If CveUsuario = -1 Then - CveUsuario = ObjUsuarios.AddUsuario(TxtUsuario.Text.Trim, Encripta(ContraseñaPredeterminada), TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, UsuarioActual.CveUsuario, DdlEmpresa.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, CveAlmacenAsignado:=DdlAlmacenGeneral.SelectedValue.ToEntero, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal()) - EsNuevoUsuario = True - If CveUsuario = -1 Then - TieneError = True - End If - - For Each Row As DataRow In DtAsignacionesMultiEmpresa.FiltraParametros("CveEmpresa > 0").Rows - If Not ObjUsuarios.AddUsuarioAsignar(Row("CvePersonal").ToString.ToEntero, Row("CveVendedor").ToString.ToEntero, Row("CveAlmacen").ToString.ToEntero, Row("CveSucursal").ToString.ToEntero, Row("CveTipoDocumento").ToString, Row("CveEmpresa").ToString.ToEntero, CveUsuario) Then - TieneError = True - End If - Next - Else - If Not ObjUsuarios.UpdateUsuario(TxtUsuario.Text.Trim, TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, ChkEstatus.Checked, DdlEmpresa.SelectedValue.ToEntero, CveUsuario, DdlAlmacenGeneral.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveUsuario, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal()) Then - TieneError = True - End If - - For Each Row As DataRow In DtAsignacionesMultiEmpresa.FiltraParametros("CveEmpresa > 0").Rows - If Not ObjUsuarios.UpdateUsuarioAsignar(Row("CvePersonal").ToString.ToEntero, Row("CveVendedor").ToString.ToEntero, Row("CveAlmacen").ToString.ToEntero, Row("CveSucursal").ToString.ToEntero, Row("CveEmpresa").ToString.ToEntero, Row("CveTipoDocumento").ToString, CveUsuario, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then - TieneError = True - End If - Next - End If - - 'GUARDA ACCESO MODULOS - If Not TieneError Then - For Each Row As GridViewRow In GvModulosAcceso.Rows - 'Nota, permitir, tiene 3 valores, ''(Vacio), no se ha estipulado, '0' que se denego, '1' permitido(aplicado solo cuando no viene del rol - If Row.DataKey("CveModuloAcceso") <> "" Then - If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkDenegar").Checked OrElse Row.DataKey("Permitir") = "0" AndAlso Row.FCCheckBox("ChkDenegar").Checked = False Then - If Not ObjUsuarios.UpdateUsuariosModulos(CveUsuario, Row.DataKey("CveModulo").ToEntero, Not Row.FCCheckBox("ChkDenegar").Checked, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - Else - If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkPermitir").Checked OrElse Row.DataKey("Permitir") = "1" AndAlso Row.FCCheckBox("ChkPermitir").Checked = False Then - If Not ObjUsuarios.UpdateUsuariosModulos(CveUsuario, Row.DataKey("CveModulo").ToEntero, Row.FCCheckBox("ChkPermitir").Checked, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - - Next - End If - - 'GUARDA PERMISO MODULOS - If Not TieneError Then - For Each Row As GridViewRow In GvModulosPermiso.Rows - - If Row.DataKey("CveProcesoAcceso") <> "" Then - 'checo si el permiso que tiene es del rol, de ser así, nada más actualizo los denegados - If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkD").Checked OrElse Row.DataKey("Permitir") = "0" AndAlso Row.FCCheckBox("ChkD").Checked = False Then - If Not ObjUsuarios.UpdateUsuariosProcesos(CveUsuario, Row.DataKey("CveProceso").ToEntero, Not Row.FCCheckBox("ChkD").Checked, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - Else - 'permisos que el rol, no le está otorgando, y serán únicos para el usuario - If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkP").Checked OrElse Row.DataKey("Permitir") = "1" AndAlso Row.FCCheckBox("ChkP").Checked = False Then - If Not ObjUsuarios.UpdateUsuariosProcesos(CveUsuario, Row.DataKey("CveProceso").ToEntero, Row.FCCheckBox("ChkP").Checked, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - - ''checo si el permiso que tiene es del rol, de ser así, nada más actualizo los denegados - 'If Row.DataKey("CveProcesoAcceso") <> "" Then - ' If Not ClsUsuarios.UpdateUsuariosProcesos(Row.DataKey("CveUsuario").ToEntero, Row.DataKey("CveProceso").ToEntero, Not Row.FCCheckBox("ChkD").Checked) Then - ' TieneError = True - ' Exit For - ' End If - 'Else - ' 'permisos que el rol, no le está otorgando, y serán únicos para el usuario - ' If Not ClsUsuarios.UpdateUsuariosProcesos(Row.DataKey("CveUsuario").ToEntero, Row.DataKey("CveProceso").ToEntero, Row.FCCheckBox("ChkP").Checked) Then - ' TieneError = True - ' Exit For - ' End If - 'End If - - Next - End If - - - 'Agregar Indicadores - If Not TieneError Then - For Each Row As GridViewRow In GvIndicadores.Rows - - If Row.DataKey("CveIndicador") <> "" AndAlso Row.DataKey("CveUsuario") <> "" And Row.FCCheckBox("chkIndicador").Checked = False Then - If Not Indicador.RemoveIndicadoresUsuarios(Row.DataKey("CveIndicador").ToEntero, CveUsuario, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - - If Row.DataKey("CveIndicador") <> "" AndAlso Row.DataKey("CveUsuario") = "" Then - If Row.FCCheckBox("chkIndicador").Checked Then - If Not Indicador.AddIndicadoresUsuarios(Row.DataKey("CveIndicador").ToEntero, CveUsuario, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - - - 'GUARDA ACCESO EMPRESAS - If Not TieneError Then - For Each dr As DataRow In DtEmpresasUsuario.FiltraParametros("Accion IN (1,2)").Rows - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddUsuariosEmpresas(CveUsuario, dr("CveEmpresa").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveEmpresasAcceso(CveUsuario, dr("CveEmpresa").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - Next - End If - - 'GUARDA SUBPROYECTOS - If Not TieneError Then - For Each dr As DataRow In DtSubProyectos.FiltraParametros("Accion IN (1,2,4)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "4" Then - If Not ObjUsuarios.UpdateSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, dr("ViejoCveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - 'GUARDA ESTATUS DE OC - If Not TieneError Then - If DTEstatusOC IsNot Nothing AndAlso DTEstatusOC.Rows.Count > 0 Then - For Each dr As DataRow In DTEstatusOC.FiltraParametros("Accion IN (1,2,4)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "4" Then - If Not ObjUsuarios.UpdateEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero, dr("ViejoCveEstatus").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - End If - 'GUARDA CLASIFICACIONES - If Not TieneError Then - If DtClasificaciones IsNot Nothing AndAlso DtClasificaciones.Rows.Count > 0 Then - For Each dr As DataRow In DtClasificaciones.FiltraParametros("Accion IN (1,2,4)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddUsuariosClasificaciones(CveUsuario, dr("CveClasificacion").ToString.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveUsuariosClasificaciones(CveUsuario, dr("CveClasificacion").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - End If - - - - - 'GUARDA ALMACENES - If Not TieneError Then - For Each dr As DataRow In DtAlmacenes.FiltraParametros("Accion IN (1,2,4)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "4" Then - If Not ObjUsuarios.UpdateAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, dr("ViejoCveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - Next - - End If - - - 'Guarda Estatus de Ordenes de Compra - If Not TieneError Then - GuardaEstatusProyectosREQ(ObjOC, TieneError) - GuardaEstatusProyectoOC(ObjOC, TieneError) - End If - - ''Guarda Estatus de Ordenes de Servicio - 'If Not TieneError Then - ' GuardaEstatusOS(ObjOS, TieneError) - 'End If - - - 'GUARDA CUENTAS BANCARIAS - If Not TieneError Then - For Each dr As DataRow In DtCuentasBancarias.FiltraParametros("Accion IN (1,2)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjBancos.AddBancosCuentasUsuarios(dr("CveCuenta").ToString.ToEntero, CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjBancos.RemoveBancosCuentasUsuarios(dr("CveCuenta").ToString.ToEntero, CveUsuario) Then - TieneError = True - Exit For - End If - End If - End If - Next - - End If - - - 'GUARDAMOS RESTRICCIONES DE ACCESO - If Not TieneError Then - For Each dr As DataRow In DtRestricciones.FiltraParametros("Accion IN (1,2,4)").Rows - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.UsuariosRestriccionesAccesoAdd(CveUsuario, dr("IP").ToString, dr("MAC").ToString, dr("HI1").ToString, dr("HF1").ToString, dr("HI2").ToString, dr("HF2").ToString, dr("HI3").ToString, dr("HF3").ToString, dr("HI4").ToString, dr("HF4").ToString, dr("HI5").ToString, dr("HF5").ToString, dr("HI6").ToString, dr("HF6").ToString, dr("HI7").ToString, dr("HF7").ToString, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.UsuariosRestriccionesAccesoRemove(dr("CveUsuarioRestriccionAcceso").ToString.ToEntero, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "4" Then - If Not ObjUsuarios.UsuariosRestriccionesAccesoUpdate(dr("CveUsuarioRestriccionAcceso").ToString.ToEntero, dr("IP").ToString, dr("MAC").ToString, dr("HI1").ToString, dr("HF1").ToString, dr("HI2").ToString, dr("HF2").ToString, dr("HI3").ToString, dr("HF3").ToString, dr("HI4").ToString, dr("HF4").ToString, dr("HI5").ToString, dr("HF5").ToString, dr("HI6").ToString, dr("HF6").ToString, dr("HI7").ToString, dr("HF7").ToString, UsuarioActual.CveUsuario) Then - TieneError = True - Exit For - End If - End If - Next - End If - ObjUsuarios.UsuariosRestriccioneXMacUpdate(CveUsuario) - 'CLONAR USUARIO - If Not TieneError Then - If EsNuevoUsuario Then - If Not ClonarUsuario(DdlUsuarioClonar.SelectedValue.ToEntero, ObjUsuarios) Then - TieneError = True - End If - End If - End If - - - - ''''''''''''''''''''''''GUARDA ASIGNAR'''''''''''''''''''''''' - - 'GUARDA ROLES - If Not TieneError Then - For Each dr As DataRow In DTRolesAsignar.FiltraParametros("Accion IN (1,2)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddRolesAsignar(CveUsuario, dr("CveRol").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveRolesAsignar(CveUsuario, dr("CveRol").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - 'GUARDA ALMACENES - If Not TieneError Then - For Each dr As DataRow In DtAlmacenesAsignar.FiltraParametros("Accion IN (1,2)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddAlmacenAsignar(CveUsuario, dr("CveAlmacen").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveAlmacenAsignar(CveUsuario, dr("CveAlmacen").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - 'GUARDA SUBPROYECTOS - If Not TieneError Then - For Each dr As DataRow In DtSubProyectosAsignar.FiltraParametros("Accion IN (1,2,4)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddSubProyectosAsignar(CveUsuario, dr("CveSubProyecto").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveSubProyectosAsignar(CveUsuario, dr("CveSubProyecto").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - 'GUARDA CUENTAS BANCARIAS - If Not TieneError Then - For Each dr As DataRow In DtCuentasBancariasAsignar.FiltraParametros("Accion IN (1,2)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If dr("Accion").ToString = "1" Then - If Not ObjUsuarios.AddCuentasBancariasAsignar(CveUsuario, dr("CveCuenta").ToString.ToEntero) Then - TieneError = True - Exit For - End If - ElseIf dr("Accion").ToString = "2" Then - If Not ObjUsuarios.RemoveCuentasBancariasAsignar(CveUsuario, dr("CveCuenta").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - End If - Next - End If - - 'GUARDA MODULOS - If Not TieneError Then - For Each Row As GridViewRow In GvModulosAsignar.Rows - If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then - If Not ObjUsuarios.RemoveModulosAsignar(CveUsuario, Row.DataKey("CveModulo").ToEntero) Then - TieneError = True - Exit For - End If - ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then - If Not ObjUsuarios.AddModulosAsignar(CveUsuario, Row.DataKey("CveModulo").ToEntero) Then - TieneError = True - Exit For - End If - End If - Next - End If - - 'GUARDA PERMISOS - If Not TieneError Then - For Each Row As GridViewRow In GvPermisosAsignar.Rows - If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then - If Not ObjUsuarios.RemovePermisosAsignar(CveUsuario, Row.DataKey("CvePermiso").ToEntero) Then - TieneError = True - Exit For - End If - ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then - If Not ObjUsuarios.AddPermisosAsignar(CveUsuario, Row.DataKey("CvePermiso").ToEntero) Then - TieneError = True - Exit For - End If - End If - Next - End If - - 'GUARDA INDICADORES - If Not TieneError Then - For Each Row As GridViewRow In GvIndicadoresAsignar.Rows - If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then - If Not ObjUsuarios.RemoveIndicadoresAsignar(CveUsuario, Row.DataKey("CveIndicador").ToEntero) Then - TieneError = True - Exit For - End If - ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then - If Not ObjUsuarios.AddIndicadoresAsignar(CveUsuario, Row.DataKey("CveIndicador").ToEntero) Then - TieneError = True - Exit For - End If - End If - Next - End If - - 'GUARDA EMPRESAS - If Not TieneError Then - For Each Row As GridViewRow In GvEmpresasAsignar.Rows - If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then - If Not ObjUsuarios.RemoveEmpresasAsignar(CveUsuario, Row.DataKey("CveEmpresa").ToEntero) Then - TieneError = True - Exit For - End If - ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then - If Not ObjUsuarios.AddEmpresasAsignar(CveUsuario, Row.DataKey("CveEmpresa").ToEntero) Then - TieneError = True - Exit For - End If - End If - Next - End If - - 'ELIMINA YA AGREGADOS EMPRESAS - If Not TieneError Then - For Each dr As DataRow In DTEmpresasAsignar.FiltraParametros("TienePermiso IN (-2)").Rows - If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then - If Not ObjUsuarios.RemoveEmpresasAsignar(CveUsuario, dr("CveEmpresa").ToString.ToEntero) Then - TieneError = True - Exit For - End If - End If - Next - End If - - Catch ex As Exception - TieneError = True - OnError("Ocurrió un error al guardar el usuario", ex) - End Try - - + Try + 'Cargo la ultima empresa consultada en asignaciones + Dim DtValida = DtAsignacionesMultiEmpresa.FiltraParametros(String.Format("CveEmpresa = {0}", CveEmpresaAnterior)) + If DtValida.Rows.Count > 0 Then + Dim dr = DtAsignacionesMultiEmpresa.Select(String.Format("CveEmpresa = {0}", CveEmpresaAnterior)) + dr(0)("CveEmpresa") = CveEmpresaAnterior + dr(0)("CvePersonal") = DdlPersonal.SelectedValue.ToEntero + dr(0)("CveVendedor") = DdlVendedor.SelectedValue.ToEntero + dr(0)("CveSucursal") = DdlSubProyectos.SelectedValue.ToEntero + dr(0)("CveAlmacen") = DdlAlmacenGeneral.SelectedValue.ToEntero + dr(0)("CveTipoDocumento") = DdlTipoDocumento.SelectedValue + dr(0).AcceptChanges() + Else + Dim Row As DataRow = Nothing + Row = DtAsignacionesMultiEmpresa.NewRow() + Row("CveEmpresa") = CveEmpresaAnterior + Row("CvePersonal") = DdlPersonal.SelectedValue.ToEntero + Row("CveVendedor") = DdlVendedor.SelectedValue.ToEntero + Row("CveSucursal") = DdlSubProyectos.SelectedValue.ToEntero + Row("CveAlmacen") = DdlAlmacenGeneral.SelectedValue.ToEntero + Row("CveTipoDocumento") = DdlTipoDocumento.SelectedValue + DtAsignacionesMultiEmpresa.Rows.Add(Row) + End If + + Dim CodigoAcceso As String = If(String.IsNullOrEmpty(TxtCodigoAcceso.Text.Trim), "-1", TxtCodigoAcceso.Text.Trim) + + 'REGISTRA O ACTUALIZA LOS DATOS GENERALES DEL USUARIO + If CveUsuario = -1 Then + CveUsuario = ObjUsuarios.AddUsuario(TxtUsuario.Text.Trim, Encripta(ContraseñaPredeterminada), TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, UsuarioActual.CveUsuario, DdlEmpresa.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, CveAlmacenAsignado:=DdlAlmacenGeneral.SelectedValue.ToEntero, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal()) + EsNuevoUsuario = True + If CveUsuario = -1 Then + TieneError = True + End If + + For Each Row As DataRow In DtAsignacionesMultiEmpresa.FiltraParametros("CveEmpresa > 0").Rows + If Not ObjUsuarios.AddUsuarioAsignar(Row("CvePersonal").ToString.ToEntero, Row("CveVendedor").ToString.ToEntero, Row("CveAlmacen").ToString.ToEntero, Row("CveSucursal").ToString.ToEntero, Row("CveTipoDocumento").ToString, Row("CveEmpresa").ToString.ToEntero, CveUsuario) Then + TieneError = True + End If + Next + Else + If Not ObjUsuarios.UpdateUsuario(TxtUsuario.Text.Trim, TxtNombre.Text.Trim, DdlRol.SelectedValue.ToEntero, TxtCorreo.Text.Trim, DdlPersonal.SelectedValue.ToEntero, DdlVendedor.SelectedValue.ToEntero, ChkCambiarContraseña.Checked, ChkEstatus.Checked, DdlEmpresa.SelectedValue.ToEntero, CveUsuario, DdlAlmacenGeneral.SelectedValue.ToEntero, DdlSubProyectos.SelectedValue.ToEntero, UsuarioActual.CveUsuario, AsignarSubProyecto:=ChkAsignarSubProyecto.Checked, AsignarOC:=ChkAsignarOC.Checked, DescuentoAutorizado:=TxtDescuentoAutorizado.Text.ToDouble, CodigoAcceso:=CodigoAcceso, LimiteCreditoAutorizado:=TxtLimiteAutorizado.Text.ToDecimal()) Then + TieneError = True + End If + + For Each Row As DataRow In DtAsignacionesMultiEmpresa.FiltraParametros("CveEmpresa > 0").Rows + If Not ObjUsuarios.UpdateUsuarioAsignar(Row("CvePersonal").ToString.ToEntero, Row("CveVendedor").ToString.ToEntero, Row("CveAlmacen").ToString.ToEntero, Row("CveSucursal").ToString.ToEntero, Row("CveEmpresa").ToString.ToEntero, Row("CveTipoDocumento").ToString, CveUsuario, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + TieneError = True + End If + Next + End If + + 'GUARDA ACCESO MODULOS + If Not TieneError Then + For Each Row As GridViewRow In GvModulosAcceso.Rows + 'Nota, permitir, tiene 3 valores, ''(Vacio), no se ha estipulado, '0' que se denego, '1' permitido(aplicado solo cuando no viene del rol + If Row.DataKey("CveModuloAcceso") <> "" Then + If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkDenegar").Checked OrElse Row.DataKey("Permitir") = "0" AndAlso Row.FCCheckBox("ChkDenegar").Checked = False Then + If Not ObjUsuarios.UpdateUsuariosModulos(CveUsuario, Row.DataKey("CveModulo").ToEntero, Not Row.FCCheckBox("ChkDenegar").Checked, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + Else + If Row.DataKey("Permitir").Contiene("", "0") AndAlso Row.FCCheckBox("ChkPermitir").Checked OrElse Row.DataKey("Permitir") = "1" AndAlso Row.FCCheckBox("ChkPermitir").Checked = False Then + If Not ObjUsuarios.UpdateUsuariosModulos(CveUsuario, Row.DataKey("CveModulo").ToEntero, Row.FCCheckBox("ChkPermitir").Checked, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA PERMISO MODULOS + If Not TieneError Then + For Each Row As GridViewRow In GvModulosPermiso.Rows + + If Row.DataKey("CveProcesoAcceso") <> "" Then + 'checo si el permiso que tiene es del rol, de ser así, nada más actualizo los denegados + If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkD").Checked OrElse Row.DataKey("Permitir") = "0" AndAlso Row.FCCheckBox("ChkD").Checked = False Then + If Not ObjUsuarios.UpdateUsuariosProcesos(CveUsuario, Row.DataKey("CveProceso").ToEntero, Not Row.FCCheckBox("ChkD").Checked, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + Else + 'permisos que el rol, no le está otorgando, y serán únicos para el usuario + If Row.DataKey("Permitir") = "" AndAlso Row.FCCheckBox("ChkP").Checked OrElse Row.DataKey("Permitir") = "1" AndAlso Row.FCCheckBox("ChkP").Checked = False Then + If Not ObjUsuarios.UpdateUsuariosProcesos(CveUsuario, Row.DataKey("CveProceso").ToEntero, Row.FCCheckBox("ChkP").Checked, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + + ''checo si el permiso que tiene es del rol, de ser así, nada más actualizo los denegados + 'If Row.DataKey("CveProcesoAcceso") <> "" Then + ' If Not ClsUsuarios.UpdateUsuariosProcesos(Row.DataKey("CveUsuario").ToEntero, Row.DataKey("CveProceso").ToEntero, Not Row.FCCheckBox("ChkD").Checked) Then + ' TieneError = True + ' Exit For + ' End If + 'Else + ' 'permisos que el rol, no le está otorgando, y serán únicos para el usuario + ' If Not ClsUsuarios.UpdateUsuariosProcesos(Row.DataKey("CveUsuario").ToEntero, Row.DataKey("CveProceso").ToEntero, Row.FCCheckBox("ChkP").Checked) Then + ' TieneError = True + ' Exit For + ' End If + 'End If + + Next + End If + + + 'Agregar Indicadores + If Not TieneError Then + For Each Row As GridViewRow In GvIndicadores.Rows + + If Row.DataKey("CveIndicador") <> "" AndAlso Row.DataKey("CveUsuario") <> "" And Row.FCCheckBox("chkIndicador").Checked = False Then + If Not Indicador.RemoveIndicadoresUsuarios(Row.DataKey("CveIndicador").ToEntero, CveUsuario, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + + If Row.DataKey("CveIndicador") <> "" AndAlso Row.DataKey("CveUsuario") = "" Then + If Row.FCCheckBox("chkIndicador").Checked Then + If Not Indicador.AddIndicadoresUsuarios(Row.DataKey("CveIndicador").ToEntero, CveUsuario, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + + + 'GUARDA ACCESO EMPRESAS + If Not TieneError Then + For Each dr As DataRow In DtEmpresasUsuario.FiltraParametros("Accion IN (1,2)").Rows + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddUsuariosEmpresas(CveUsuario, dr("CveEmpresa").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveEmpresasAcceso(CveUsuario, dr("CveEmpresa").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + Next + End If + + 'GUARDA SUBPROYECTOS + If Not TieneError Then + For Each dr As DataRow In DtSubProyectos.FiltraParametros("Accion IN (1,2,4)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "4" Then + If Not ObjUsuarios.UpdateSubProyectos(CveUsuario, dr("CveSubProyecto").ToString.ToEntero, dr("ViejoCveSubProyecto").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA ESTATUS DE OC + If Not TieneError Then + If DTEstatusOC IsNot Nothing AndAlso DTEstatusOC.Rows.Count > 0 Then + For Each dr As DataRow In DTEstatusOC.FiltraParametros("Accion IN (1,2,4)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "4" Then + If Not ObjUsuarios.UpdateEstatusOC(CveUsuario, dr("CveEstatus").ToString.ToEntero, dr("ViejoCveEstatus").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + End If + 'GUARDA CLASIFICACIONES + If Not TieneError Then + If DtClasificaciones IsNot Nothing AndAlso DtClasificaciones.Rows.Count > 0 Then + For Each dr As DataRow In DtClasificaciones.FiltraParametros("Accion IN (1,2,4)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddUsuariosClasificaciones(CveUsuario, dr("CveClasificacion").ToString.ToEntero, UsuarioActual.CveUsuario, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveUsuariosClasificaciones(CveUsuario, dr("CveClasificacion").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + End If + + + + + 'GUARDA ALMACENES + If Not TieneError Then + For Each dr As DataRow In DtAlmacenes.FiltraParametros("Accion IN (1,2,4)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "4" Then + If Not ObjUsuarios.UpdateAlmacen(CveUsuario, dr("CveAlmacen").ToString.ToEntero, dr("ViejoCveAlmacen").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + + End If + + + 'Guarda Estatus de Ordenes de Compra + If Not TieneError Then + GuardaEstatusProyectosREQ(ObjOC, TieneError) + GuardaEstatusProyectoOC(ObjOC, TieneError) + End If + + ''Guarda Estatus de Ordenes de Servicio + 'If Not TieneError Then + ' GuardaEstatusOS(ObjOS, TieneError) + 'End If + + + 'GUARDA CUENTAS BANCARIAS + If Not TieneError Then + For Each dr As DataRow In DtCuentasBancarias.FiltraParametros("Accion IN (1,2)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjBancos.AddBancosCuentasUsuarios(dr("CveCuenta").ToString.ToEntero, CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjBancos.RemoveBancosCuentasUsuarios(dr("CveCuenta").ToString.ToEntero, CveUsuario) Then + TieneError = True + Exit For + End If + End If + End If + Next + + End If + + + 'GUARDAMOS RESTRICCIONES DE ACCESO + If Not TieneError Then + For Each dr As DataRow In DtRestricciones.FiltraParametros("Accion IN (1,2,4)").Rows + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.UsuariosRestriccionesAccesoAdd(CveUsuario, dr("IP").ToString, dr("MAC").ToString, dr("HI1").ToString, dr("HF1").ToString, dr("HI2").ToString, dr("HF2").ToString, dr("HI3").ToString, dr("HF3").ToString, dr("HI4").ToString, dr("HF4").ToString, dr("HI5").ToString, dr("HF5").ToString, dr("HI6").ToString, dr("HF6").ToString, dr("HI7").ToString, dr("HF7").ToString, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.UsuariosRestriccionesAccesoRemove(dr("CveUsuarioRestriccionAcceso").ToString.ToEntero, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "4" Then + If Not ObjUsuarios.UsuariosRestriccionesAccesoUpdate(dr("CveUsuarioRestriccionAcceso").ToString.ToEntero, dr("IP").ToString, dr("MAC").ToString, dr("HI1").ToString, dr("HF1").ToString, dr("HI2").ToString, dr("HF2").ToString, dr("HI3").ToString, dr("HF3").ToString, dr("HI4").ToString, dr("HF4").ToString, dr("HI5").ToString, dr("HF5").ToString, dr("HI6").ToString, dr("HF6").ToString, dr("HI7").ToString, dr("HF7").ToString, UsuarioActual.CveUsuario) Then + TieneError = True + Exit For + End If + End If + Next + End If + ObjUsuarios.UsuariosRestriccioneXMacUpdate(CveUsuario) + 'CLONAR USUARIO + If Not TieneError Then + If EsNuevoUsuario Then + If Not ClonarUsuario(DdlUsuarioClonar.SelectedValue.ToEntero, ObjUsuarios) Then + TieneError = True + End If + End If + End If + + + + ''''''''''''''''''''''''GUARDA ASIGNAR'''''''''''''''''''''''' + + 'GUARDA ROLES + If Not TieneError Then + For Each dr As DataRow In DTRolesAsignar.FiltraParametros("Accion IN (1,2)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddRolesAsignar(CveUsuario, dr("CveRol").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveRolesAsignar(CveUsuario, dr("CveRol").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA ALMACENES + If Not TieneError Then + For Each dr As DataRow In DtAlmacenesAsignar.FiltraParametros("Accion IN (1,2)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddAlmacenAsignar(CveUsuario, dr("CveAlmacen").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveAlmacenAsignar(CveUsuario, dr("CveAlmacen").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA SUBPROYECTOS + If Not TieneError Then + For Each dr As DataRow In DtSubProyectosAsignar.FiltraParametros("Accion IN (1,2,4)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddSubProyectosAsignar(CveUsuario, dr("CveSubProyecto").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveSubProyectosAsignar(CveUsuario, dr("CveSubProyecto").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA CUENTAS BANCARIAS + If Not TieneError Then + For Each dr As DataRow In DtCuentasBancariasAsignar.FiltraParametros("Accion IN (1,2)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If dr("Accion").ToString = "1" Then + If Not ObjUsuarios.AddCuentasBancariasAsignar(CveUsuario, dr("CveCuenta").ToString.ToEntero) Then + TieneError = True + Exit For + End If + ElseIf dr("Accion").ToString = "2" Then + If Not ObjUsuarios.RemoveCuentasBancariasAsignar(CveUsuario, dr("CveCuenta").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + End If + Next + End If + + 'GUARDA MODULOS + If Not TieneError Then + For Each Row As GridViewRow In GvModulosAsignar.Rows + If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then + If Not ObjUsuarios.RemoveModulosAsignar(CveUsuario, Row.DataKey("CveModulo").ToEntero) Then + TieneError = True + Exit For + End If + ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then + If Not ObjUsuarios.AddModulosAsignar(CveUsuario, Row.DataKey("CveModulo").ToEntero) Then + TieneError = True + Exit For + End If + End If + Next + End If + + 'GUARDA PERMISOS + If Not TieneError Then + For Each Row As GridViewRow In GvPermisosAsignar.Rows + If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then + If Not ObjUsuarios.RemovePermisosAsignar(CveUsuario, Row.DataKey("CvePermiso").ToEntero) Then + TieneError = True + Exit For + End If + ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then + If Not ObjUsuarios.AddPermisosAsignar(CveUsuario, Row.DataKey("CvePermiso").ToEntero) Then + TieneError = True + Exit For + End If + End If + Next + End If + + 'GUARDA INDICADORES + If Not TieneError Then + For Each Row As GridViewRow In GvIndicadoresAsignar.Rows + If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then + If Not ObjUsuarios.RemoveIndicadoresAsignar(CveUsuario, Row.DataKey("CveIndicador").ToEntero) Then + TieneError = True + Exit For + End If + ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then + If Not ObjUsuarios.AddIndicadoresAsignar(CveUsuario, Row.DataKey("CveIndicador").ToEntero) Then + TieneError = True + Exit For + End If + End If + Next + End If + + 'GUARDA EMPRESAS + If Not TieneError Then + For Each Row As GridViewRow In GvEmpresasAsignar.Rows + If Row.DataKey("TienePermiso").ToEntero > 0 AndAlso Not Row.FCCheckBox("ChkP").Checked Then + If Not ObjUsuarios.RemoveEmpresasAsignar(CveUsuario, Row.DataKey("CveEmpresa").ToEntero) Then + TieneError = True + Exit For + End If + ElseIf Row.FCCheckBox("ChkP").Checked AndAlso Not Row.DataKey("TienePermiso").ToEntero > 0 Then + If Not ObjUsuarios.AddEmpresasAsignar(CveUsuario, Row.DataKey("CveEmpresa").ToEntero) Then + TieneError = True + Exit For + End If + End If + Next + End If + + 'ELIMINA YA AGREGADOS EMPRESAS + If Not TieneError Then + For Each dr As DataRow In DTEmpresasAsignar.FiltraParametros("TienePermiso IN (-2)").Rows + If DtEmpresasUsuario.FiltraParametros(String.Format("CveEmpresa = {0}", dr("CveEmpresa").ToString.ToEntero)).Rows.Count > 0 Then + If Not ObjUsuarios.RemoveEmpresasAsignar(CveUsuario, dr("CveEmpresa").ToString.ToEntero) Then + TieneError = True + Exit For + End If + End If + Next + End If + + Catch ex As Exception + TieneError = True + OnError("Ocurrió un error al guardar el usuario", ex) + End Try + + If Not TieneError Then If EsNuevoUsuario Then EnviaCorreo() @@ -1302,11 +1301,11 @@ Partial Class Sistemas_UsuarioDetalle End If - ObjUsuarios.Dispose() - ObjSubProyectos.Dispose() - ObjOC.Dispose() - ObjOS.Dispose() - Indicador.Dispose() + ObjUsuarios.Dispose() + ObjSubProyectos.Dispose() + ObjOC.Dispose() + ObjOS.Dispose() + Indicador.Dispose() ObjBancos.Dispose() End Sub @@ -1331,26 +1330,26 @@ Partial Class Sistemas_UsuarioDetalle ' Application("GlobalDTProyectosUsuarios") = Nothing ' TieneError = True 'End If - End If - - 'RECARGA GLOBAL BANCOS - 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then - GlobalDTBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa) = Nothing 'ObjBancos.DtResultados - ' End If - - 'RECARGA GLOBAL ESTATUS + End If + + 'RECARGA GLOBAL BANCOS + 'If ObjBancos.GetBancosCuentasUsuarios(-1) Then + GlobalDTBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa) = Nothing 'ObjBancos.DtResultados + ' End If + + 'RECARGA GLOBAL ESTATUS If ObjOC.GetEstatus() Then Application("GlobalDTOCEstatus") = ObjOC.DtResultados Else Application("GlobalDTOCEstatus") = Nothing - GlobalDTOCEstatusUsuarios(UsuarioActual.CveEmpresa) = Nothing - - 'If ObjOC.GetEstatusUsuarios(-1, -1, -1, -1, -1) Then Application("GlobalDTOCEstatusUsuarios") = ObjOC.DtResultados Else Application("GlobalDTOCEstatusUsuarios") = Nothing - - - 'RECARGA GLOBAL ALMACEN - 'If ObjUsuarios.GetAlmacen(-1, UsuarioActual.CveEmpresa) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing - GlobalDTAlmacenUsuarios(-1, UsuarioActual.CveEmpresa) = Nothing - - 'RECARGA GLOBAL EMPRESAS USUARIOS + GlobalDTOCEstatusUsuarios(UsuarioActual.CveEmpresa) = Nothing + + 'If ObjOC.GetEstatusUsuarios(-1, -1, -1, -1, -1) Then Application("GlobalDTOCEstatusUsuarios") = ObjOC.DtResultados Else Application("GlobalDTOCEstatusUsuarios") = Nothing + + + 'RECARGA GLOBAL ALMACEN + 'If ObjUsuarios.GetAlmacen(-1, UsuarioActual.CveEmpresa) Then Application("GlobalDTAlmacenUsuarios") = ObjUsuarios.DtResultados Else Application("GlobalDTAlmacenUsuarios") = Nothing + GlobalDTAlmacenUsuarios(-1, UsuarioActual.CveEmpresa) = Nothing + + 'RECARGA GLOBAL EMPRESAS USUARIOS If ObjUsuarios.GetUsuariosEmpresas(-1) Then Application("GlobalDTUsuarios") = ObjUsuarios.DtResultados Application("GlobalDTUsuarioResponsable") = ObjUsuarios.DtResultados.FiltraParametros("ProveedoresResponsables > 0") @@ -1409,10 +1408,10 @@ Partial Class Sistemas_UsuarioDetalle Catch ex As Exception OnError("Ocurrió error al mandar MAIL", ex) End Try - End Sub + End Sub #End Region - - + + #Region " E L I M I N A R - U S U A R I O " Protected Sub BtnEliminar_Click(sender As Object, e As System.EventArgs) Handles BtnEliminar.Click ''DENTRO DEL PROCEDIMIENTO ELIMINA TODO LO RELACIONADO CON EL USUARIO (ALMACENES, SUBPROYECTOS, ACCESO A EMPRESAS...) @@ -1424,10 +1423,10 @@ Partial Class Sistemas_UsuarioDetalle Alert("Ocurrió un error al eliminar el usuario. Por favor vuelva a intentar", TipoMensaje.MsgError) End If ObjUsuario.Dispose() - End Sub + End Sub #End Region - - + + #Region " CONTRASEÑA " Protected Sub LnkRestablecer_Click(sender As Object, e As EventArgs) Handles LnkRestablecer.Click Dim Usuario As New ClsSisUsuarios @@ -1441,15 +1440,15 @@ Partial Class Sistemas_UsuarioDetalle Protected Sub LnkVerPass_Click(sender As Object, e As EventArgs) Handles LnkVerPass.Click Alert(Extensiones.Decripta(Password)) - End Sub + End Sub Protected Sub LnkVerCodigoAcceso_Click(sender As Object, e As EventArgs) Handles LnkVerCodigoAcceso.Click Alert(CodigoAcceso) - End Sub - - + End Sub + + #End Region - - + + #Region "TAB - ASIGNACIONES" Protected Sub DdlEmpresaAsignaciones_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlEmpresaAsignaciones.SelectedIndexChanged @@ -1511,8 +1510,8 @@ Partial Class Sistemas_UsuarioDetalle DtAsignacionesMultiEmpresa.Columns.Add("CveSucursal", GetType(Integer)) DtAsignacionesMultiEmpresa.Columns.Add("CveAlmacen", GetType(Integer)) DtAsignacionesMultiEmpresa.Columns.Add("CveTipoDocumento", GetType(String)) - End Sub - + End Sub + #Region " PROYECTOS-SUBPROYECTOS " Private Sub CargaProyectos() DdlProyecto.Items.Clear() @@ -1585,11 +1584,11 @@ Partial Class Sistemas_UsuarioDetalle Protected Sub CboProyecto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlProyecto.SelectedIndexChanged CargaSubProyectos(DdlProyecto.SelectedValue.ToEntero, DdlEmpresaAsignaciones.SelectedValue.ToEntero()) End Sub - Private Sub CargaSubProyectos(Optional CveProyectoFiltrado As Integer = -1, Optional CveEmpresaFiltro As Integer = -1) - + Private Sub CargaSubProyectos(Optional CveProyectoFiltrado As Integer = -1, Optional CveEmpresaFiltro As Integer = -1) + Dim CveEmpresaRef As Integer = UsuarioActual.CveEmpresa - If CveEmpresaFiltro > 0 Then - CveEmpresaRef = CveEmpresaFiltro + If CveEmpresaFiltro > 0 Then + CveEmpresaRef = CveEmpresaFiltro End If DdlSubProyecto.Items.Clear() @@ -1900,8 +1899,8 @@ Partial Class Sistemas_UsuarioDetalle End If End If ChkAsignarAllProyectos.Checked = False - End Sub - + End Sub + #Region "GV SUBPROYECTOS" Protected Sub GvSubProyectos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvSubProyectos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then @@ -2003,14 +2002,14 @@ Partial Class Sistemas_UsuarioDetalle GvSubProyectos.EditIndex = -1 CargaGvSubProyectos() - End Sub - + End Sub + #End Region - + #End Region - + #Region " ALMACENES " - + Private Function GetAlmacenesSinGV() As String Dim SB As New StringBuilder Dim prefix As String = "" @@ -2119,8 +2118,8 @@ Partial Class Sistemas_UsuarioDetalle Private Sub CargaGVAlmacen() GvAlmacenes.DataSource = DtAlmacenes.FiltraParametros(String.Format("CveEmpresa = {0} And (isnull(Accion,0) < 2 Or Accion = 4)", DdlEmpresaAsignaciones.SelectedValue.ToEntero)) GvAlmacenes.DataBind() - End Sub - + End Sub + #Region "GV ALMACENES" Protected Sub GvAlmacenes_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvAlmacenes.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then @@ -2207,11 +2206,11 @@ Partial Class Sistemas_UsuarioDetalle GvAlmacenes.EditIndex = -1 CargaGVAlmacen() - End Sub + End Sub #End Region - + #End Region - + #Region " CUENTAS BANCARIAS " Private Sub CargaCuentasBancarias() DdlCuentasBancarias.Items.Clear() @@ -2274,9 +2273,9 @@ Partial Class Sistemas_UsuarioDetalle DtCuentasBancarias.AcceptChanges() CargaGvCuentasBancarias() - End Sub + End Sub #End Region - + #Region " ESTATUS DE ÓRDENES DE COMPRA" Private Sub CargaEstatusOrdenesCompra() ' Exit Sub @@ -2470,20 +2469,20 @@ Partial Class Sistemas_UsuarioDetalle Else CargaGridEstatusUsuarioOC("OC") End If - End Sub + End Sub #Region "GRIDVIEW" - - Protected Sub GvEstatusUsuariosREQ_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstatusUsuariosREQ.RowDataBound - If e.Row.RowType = DataControlRowType.Header Then - For i As Integer = 2 To GvEstatusUsuariosREQ.Columns.Count - 1 + + Protected Sub GvEstatusUsuariosREQ_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstatusUsuariosREQ.RowDataBound + If e.Row.RowType = DataControlRowType.Header Then + For i As Integer = 2 To GvEstatusUsuariosREQ.Columns.Count - 1 Dim CveEstatus As Integer = GvEstatusUsuariosREQ.Columns(i).FooterText.ToEntero Dim idIndex As Integer = i - 1 - If CveEstatus > -1 Then - e.Row.FCLabel($"LblTituloEstatusREQ{idIndex}").Text = GvEstatusUsuariosREQ.Columns(i).HeaderText - End If - Next - End If - + If CveEstatus > -1 Then + e.Row.FCLabel($"LblTituloEstatusREQ{idIndex}").Text = GvEstatusUsuariosREQ.Columns(i).HeaderText + End If + Next + End If + If e.Row.RowType = DataControlRowType.DataRow Then Dim tmpT As DataTable = DTEstatusSubProyectos.FiltraParametros(String.Format("CveSubProyecto = {0}", e.Row.DBCampo("CveSubProyecto").ToString)) @@ -2610,18 +2609,18 @@ Partial Class Sistemas_UsuarioDetalle Next End If End Sub - Protected Sub GvEstatusUsuariosOC_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstatusUsuariosOC.RowDataBound - - If e.Row.RowType = DataControlRowType.Header Then - For i As Integer = 2 To GvEstatusUsuariosOC.Columns.Count - 1 + Protected Sub GvEstatusUsuariosOC_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstatusUsuariosOC.RowDataBound + + If e.Row.RowType = DataControlRowType.Header Then + For i As Integer = 2 To GvEstatusUsuariosOC.Columns.Count - 1 Dim CveEstatus As Integer = GvEstatusUsuariosOC.Columns(i).FooterText.ToEntero Dim idIndex As Integer = i - 1 - If CveEstatus > -1 Then - e.Row.FCLabel($"LblTituloEstatus{idIndex}").Text = GvEstatusUsuariosOC.Columns(i).HeaderText - End If - Next - End If - + If CveEstatus > -1 Then + e.Row.FCLabel($"LblTituloEstatus{idIndex}").Text = GvEstatusUsuariosOC.Columns(i).HeaderText + End If + Next + End If + If e.Row.RowType = DataControlRowType.DataRow Then Dim tmpT As DataTable = DTEstatusSubProyectos.FiltraParametros(String.Format("CveSubProyecto = {0}", e.Row.DBCampo("CveSubProyecto").ToString)) @@ -2634,7 +2633,7 @@ Partial Class Sistemas_UsuarioDetalle Dim ImgClasificaciones As LinkButton = e.Row.FCLinkButton($"ImgClasificaciones{idIndex}") Dim hdnCveEstatusUsuarios As HiddenField = e.Row.FCHiddenField($"hdnCveEstatusUsuarios{idIndex}") Dim lblSuperior As Label = e.Row.FCLabel($"lblSuperior{idIndex}") - Dim lblLimites As Label = e.Row.FCLabel($"lblLimites{idIndex}") + Dim lblLimites As Label = e.Row.FCLabel($"lblLimites{idIndex}") chkEstatus.CssClass = $"chkEstatus{idIndex}" Dim dtTemp As New DataTable @@ -2749,13 +2748,13 @@ Partial Class Sistemas_UsuarioDetalle End If Next End If - End Sub - - + End Sub + + #End Region - + #End Region - + #Region "ESTATUS DE ORDENES DE SERVICIO" Private Sub CargaEstatusOS() CreaGridEstatusOS() @@ -2908,9 +2907,9 @@ Partial Class Sistemas_UsuarioDetalle End If Next Next - End Sub + End Sub #End Region - + #Region " ESTATUS ORDENES DE COMPRA - CLASIFICACIONES USUARIO OC " Private Sub InicializaEstasClasificacionesOC() @@ -2972,15 +2971,15 @@ Partial Class Sistemas_UsuarioDetalle ObjOC.Dispose() CargaGVOCClasificaciones() - End Sub - - - + End Sub + + + #End Region - + #End Region - - + + #Region "TAB - ACCESO MODULOS" Public Sub CargaModulosAcceso() Dim ObjPermisos As New ClsSisUsuarios @@ -3066,10 +3065,10 @@ Partial Class Sistemas_UsuarioDetalle Alert("Los Permisos se eliminaron correctamente.", TipoMensaje.MsgInformacion, "window.location.href=""/Sistemas/Usuarios.aspx""") End If ObjUsuario.Dispose() - End Sub + End Sub #End Region - - + + #Region "TAB - PERMISO MODULOS" Public Sub CargaModulosPermisos() Dim ObjProcesos As New ClsSisUsuarios @@ -3169,10 +3168,10 @@ Partial Class Sistemas_UsuarioDetalle Alert("Los Procesos se eliminaron correctamente.", TipoMensaje.MsgInformacion, "window.location.href=""/Sistemas/Usuarios.aspx""") End If ObjUsuario.Dispose() - End Sub + End Sub #End Region - - + + #Region "TAB - ACCESO EMPRESAS" Private Sub CargaEmpresas() Dim ClsUsuarios As New ClsSisUsuarios @@ -3362,10 +3361,10 @@ Partial Class Sistemas_UsuarioDetalle Private Sub LnkRenviaCorreo_Click(sender As Object, e As EventArgs) Handles LnkRenviaCorreo.Click EnviaCorreo() Alert("Correo enviado con exito.", TipoMensaje.MsgInformacion) - End Sub + End Sub #End Region - - + + #Region "TAB - RESTRICCIONES ACCESO " Private Sub InicializaRestricciones() CargaDtRestricciones() @@ -3578,8 +3577,8 @@ Partial Class Sistemas_UsuarioDetalle CargaGvRestricciones() RegistraScript("$('#DivAgregarRestricción').modal('hide')") - End Sub - + End Sub + #Region " GV " Private Sub GvRestricciones_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvRestricciones.RowCommand @@ -3669,13 +3668,13 @@ Partial Class Sistemas_UsuarioDetalle End If CargaGvRestricciones() - End Sub + End Sub #End Region - - + + #End Region - - + + #Region "TAB - INDICADORES" Public Sub CargaGridIndicadores() Dim Objeto As New ClsIndicadores @@ -3692,11 +3691,11 @@ Partial Class Sistemas_UsuarioDetalle e.Row.FCCheckBox("chkIndicador").Checked = True End If End If - End Sub - + End Sub + #End Region - - + + #Region " CLONAR USUARIO " Private Sub InicializaClonarUsuario() DdlUsuarioClonar.DataSource = GlobalDTUsuarios(-1, UsuarioActual.CveEmpresa) @@ -3744,16 +3743,16 @@ Partial Class Sistemas_UsuarioDetalle End If - ObjUsuarios.Dispose() - - LblClonarMensaje.Text = $"En el usuario {TxtUsuario.Text} se reemplazará la información del usuario {DdlUsuarioClonar.SelectedItem.Text} con las siguientes secciones que seleccione." + ObjUsuarios.Dispose() + + LblClonarMensaje.Text = $"En el usuario {TxtUsuario.Text} se reemplazará la información del usuario {DdlUsuarioClonar.SelectedItem.Text} con las siguientes secciones que seleccione." Else LblClonarMensaje.Text = "" - End If - - - - + End If + + + + UpClonarUsuario.Update() End Sub Protected Sub BtnClonar_Click(sender As Object, e As EventArgs) @@ -3782,12 +3781,12 @@ Partial Class Sistemas_UsuarioDetalle 'CargaDatos() Return Retorno - End Function - - + End Function + + #End Region - - + + #Region " MANDA CORREO " Private Sub MandaCorreo(Asunto As String, Para As String, Body As String) Dim a As String = String.Format("{0} -- {1} ---- -->", Asunto, Para) @@ -3795,13 +3794,13 @@ Partial Class Sistemas_UsuarioDetalle Dim Mail As New ClsSisMail() 'Mail.MandaCorreo(ClsPaginas.EmpresaNotificaciones, Para, Asunto, "", "", Nothing, Body) Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body) - End Sub - - - + End Sub + + + #End Region - - + + #Region " ASIGNACIONES DE PERMISOS " Protected Sub DdlEmpresaAsignarPermiso_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlEmpresaAsignarPermiso.SelectedIndexChanged CargaAsignaciones() @@ -3825,8 +3824,8 @@ Partial Class Sistemas_UsuarioDetalle CargaDtEstatusOC() CargaGvEstatusOC() - End Sub - + End Sub + #Region " EMPRESAS " Public Sub CargaDTEmpresasAsignar() Dim ObjPermisos As New ClsSisUsuarios @@ -3885,10 +3884,10 @@ Partial Class Sistemas_UsuarioDetalle CargaAsignaciones() - End Sub - + End Sub + #End Region - + #Region " ROLES " Private Sub CargaDtRolesAsignar() Dim ClsUsuarios As New ClsSisUsuarios @@ -3977,9 +3976,9 @@ Partial Class Sistemas_UsuarioDetalle DTRolesAsignar.AcceptChanges() CargaGVRolesAsignar() - End Sub + End Sub #End Region - + #Region " ALMACENES " Private Sub CargaDtAlmacenAsignar() Dim ClsUsuarios As New ClsSisUsuarios @@ -4070,11 +4069,11 @@ Partial Class Sistemas_UsuarioDetalle DtAlmacenesAsignar.AcceptChanges() CargaGVAlmacenAsignar() - End Sub - - + End Sub + + #End Region - + #Region " PROYECTOS-SUBPROYECTOS " Private Sub CargaDtSubProyectosAsignar() Dim ClsUsuarios As New ClsSisUsuarios @@ -4185,10 +4184,10 @@ Partial Class Sistemas_UsuarioDetalle DtSubProyectosAsignar.AcceptChanges() CargarGvSubProyectosAsignar() - End Sub - + End Sub + #End Region - + #Region " CUENTAS BANCARIAS " Private Sub CargaCuentasBancariasAsignar() DdlCuentasBancariasAsignar.Items.Clear() @@ -4273,9 +4272,9 @@ Partial Class Sistemas_UsuarioDetalle DtCuentasBancariasAsignar.AcceptChanges() CargaGvCuentasBancariasAsignar() - End Sub + End Sub #End Region - + #Region " MODULOS " Public Sub CargaDTModulosAsignar() Dim ObjPermisos As New ClsSisUsuarios @@ -4310,10 +4309,10 @@ Partial Class Sistemas_UsuarioDetalle End If End If - End Sub - + End Sub + #End Region - + #Region " PERMISOS " Public Sub CargaDTPermisosAsignar() Dim ObjPermisos As New ClsSisUsuarios @@ -4348,9 +4347,9 @@ Partial Class Sistemas_UsuarioDetalle End If End If - End Sub + End Sub #End Region - + #Region " INDICADORES " Public Sub CargaDTIndicadoresAsignar() Dim ObjIndicadores As New ClsSisUsuarios @@ -4378,13 +4377,13 @@ Partial Class Sistemas_UsuarioDetalle End If End If - End Sub + End Sub #End Region - - + + #End Region - - + + #Region " USUARIO CONTROLADO " Private Sub InicializaUsuarioControlado() Dim ClsUsuarios As New ClsSisUsuarios @@ -4434,12 +4433,12 @@ Partial Class Sistemas_UsuarioDetalle End If ClsUsuarios.Dispose() - End Sub + End Sub #End Region - - + + #Region "C O N T O L E S DE U S U A R I O S" - + #Region "ESTATUS DE ÓRDENES DE COMPRA" Private Sub CargaDtEstatusOCPermisos() Dim ClsUsuarios As New ClsSisUsuarios @@ -4560,10 +4559,10 @@ Partial Class Sistemas_UsuarioDetalle DTEstatusOC = dt DTEstatusOCAsignar = dt - End Sub + End Sub #End Region - - + + #Region "GV ESTATUS DE OC" Protected Sub GvEstatusOC_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEstatusOC.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then @@ -4674,11 +4673,11 @@ Partial Class Sistemas_UsuarioDetalle GvEstatusUsuariosOC.Columns(i).Visible = (dtValida IsNot Nothing AndAlso dtValida.Rows.Count = 1) End If Next - End Sub - + End Sub + #End Region #End Region - + Protected Sub LnkAgregarClasificacion_Click(sender As Object, e As EventArgs) If DtClasificaciones IsNot Nothing Then Dim CveClasificacion As Integer = DdlClasificacion.SelectedValue.ToEntero @@ -4805,10 +4804,10 @@ Partial Class Sistemas_UsuarioDetalle - End Sub - + End Sub + #Region "USUARIO RESPONSABLE" - + Protected Sub BtnUpdateUsuarioResponsable_Click(sender As Object, e As EventArgs) Dim ObjUsuarios As New ClsSisUsuarios If ObjUsuarios.UpdateUsuarioResponsableMasivo(CveUsuario, DdlUsuarioResponsable.SelectedValue.ToEntero) Then @@ -4816,10 +4815,10 @@ Partial Class Sistemas_UsuarioDetalle RegistraScript("$('#DivUpdateUsuarioResponsable').modal('hide')") End If ObjUsuarios.Dispose() - End Sub - + End Sub + #End Region - + Protected Sub LnkAutorizarEquipo_Click(sender As Object, e As EventArgs) 'CveUsuario Dim AdsCodex As String = Encripta(String.Format("{0}_{1}_{2}", CveUsuario, DateTime.Now.Ticks, UsuarioActual.CveUsuario)) @@ -4833,63 +4832,63 @@ Partial Class Sistemas_UsuarioDetalle Protected Sub BtnCerrarSession_Click(sender As Object, e As EventArgs) 'ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CerrarSession, CveUsuario:=CveUsuario) - Dim objlist As List(Of ADSSession.ADSSessionObj) = DirectCast(ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.getListasession, CveUsuario:=CveUsuario), List(Of ADSSession.ADSSessionObj)) - - For Each user As ADSSession.ADSSessionObj In objlist - If CveUsuario = user.CveUsuario Then 'AndAlso (CveEmpresa = -1 OrElse CveEmpresa = user.CveEmpresa) Then - Dim taspsig As String = user.ASPSIG '"94C6AC57E8599390A4B7B8AB41FEABEF466D9B31120BE06D78110E66265F1ACC5616297BF3B88EDCEE71EBCFE35484308F62C8017EAC29FB3F0FB45CEC09E8F03DFBB4A4DD890D45755B7A30185C6D01F20AEFA74BE3A25FD12D536B20DCB8D9940A3D95" - Dim tsessionID As String = user.SessionID - Dim url = System.Configuration.ConfigurationManager.AppSettings("urlcerrarSession").ToString() - Dim cookie As String = String.Format("ASP.NET_SessionId={0};.ASPXSIG={1}", tsessionID, taspsig) - sendURL(url, cookie) - End If + Dim objlist As List(Of ADSSession.ADSSessionObj) = DirectCast(ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.getListasession, CveUsuario:=CveUsuario), List(Of ADSSession.ADSSessionObj)) + + For Each user As ADSSession.ADSSessionObj In objlist + If CveUsuario = user.CveUsuario Then 'AndAlso (CveEmpresa = -1 OrElse CveEmpresa = user.CveEmpresa) Then + Dim taspsig As String = user.ASPSIG '"94C6AC57E8599390A4B7B8AB41FEABEF466D9B31120BE06D78110E66265F1ACC5616297BF3B88EDCEE71EBCFE35484308F62C8017EAC29FB3F0FB45CEC09E8F03DFBB4A4DD890D45755B7A30185C6D01F20AEFA74BE3A25FD12D536B20DCB8D9940A3D95" + Dim tsessionID As String = user.SessionID + Dim url = System.Configuration.ConfigurationManager.AppSettings("urlcerrarSession").ToString() + Dim cookie As String = String.Format("ASP.NET_SessionId={0};.ASPXSIG={1}", tsessionID, taspsig) + sendURL(url, cookie) + End If Next Alert("Sessión Cerrada") - End Sub - - Private Shared Function sendURL(ByVal URL As String, ByVal Optional Cookie As String = "", ByVal Optional maxTimeMilliseconds As Integer = 120000) As String - Dim resultado As String = "" - - Try - - Dim request As Net.HttpWebRequest = CType(Net.HttpWebRequest.Create(URL), Net.HttpWebRequest) - request.Timeout = maxTimeMilliseconds - request.Method = "POST" - request.ContentType = "text/xml; charset=utf-8" - - If Not String.IsNullOrEmpty(Cookie) Then - request.Headers.Add("Cookie", Cookie) - End If - - Using stream As IO.Stream = request.GetRequestStream() - - Using stmw As IO.StreamWriter = New IO.StreamWriter(stream) - stmw.Write("") - End Using - End Using - - Using response As Net.WebResponse = CType(request.GetResponse(), Net.WebResponse) - Using sr As IO.StreamReader = New IO.StreamReader(response.GetResponseStream()) - - resultado = sr.ReadToEnd() - sr.Close() - End Using - - End Using - request = Nothing - Catch ex As Exception - 'Extenciones.ApplicationParameter.GuardaLogEx(ex, $"SOAPAction : {SOAPAction} XML : {xml}") - End Try - - Return resultado - End Function - - Protected Sub LnkClonarUsuario_Click(sender As Object, e As EventArgs) - - RegistraScript("$('#DivClonar').modal('show');") - LblClonarMensaje.Text = "" - UpClonarUsuario.Update() - - End Sub - + End Sub + + Private Shared Function sendURL(ByVal URL As String, ByVal Optional Cookie As String = "", ByVal Optional maxTimeMilliseconds As Integer = 120000) As String + Dim resultado As String = "" + + Try + + Dim request As Net.HttpWebRequest = CType(Net.HttpWebRequest.Create(URL), Net.HttpWebRequest) + request.Timeout = maxTimeMilliseconds + request.Method = "POST" + request.ContentType = "text/xml; charset=utf-8" + + If Not String.IsNullOrEmpty(Cookie) Then + request.Headers.Add("Cookie", Cookie) + End If + + Using stream As IO.Stream = request.GetRequestStream() + + Using stmw As IO.StreamWriter = New IO.StreamWriter(stream) + stmw.Write("") + End Using + End Using + + Using response As Net.WebResponse = CType(request.GetResponse(), Net.WebResponse) + Using sr As IO.StreamReader = New IO.StreamReader(response.GetResponseStream()) + + resultado = sr.ReadToEnd() + sr.Close() + End Using + + End Using + request = Nothing + Catch ex As Exception + 'Extenciones.ApplicationParameter.GuardaLogEx(ex, $"SOAPAction : {SOAPAction} XML : {xml}") + End Try + + Return resultado + End Function + + Protected Sub LnkClonarUsuario_Click(sender As Object, e As EventArgs) + + RegistraScript("$('#DivClonar').modal('show');") + LblClonarMensaje.Text = "" + UpClonarUsuario.Update() + + End Sub + End Class From 345dedb7822f93c27450d5781931466b2c3b685c Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 21 Dec 2021 19:14:16 -0700 Subject: [PATCH 4/9] =?UTF-8?q?BDH,=20Liga=20para=20cancelacion=20de=20rem?= =?UTF-8?q?isi=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App_Code/Modelos.vb | 385 ++++++++++++++++++++++++-------------------- Ashx/SIGWeb.ashx | 48 +++++- 2 files changed, 257 insertions(+), 176 deletions(-) diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index a23c7af68..436328d6c 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -5080,202 +5080,203 @@ Namespace Modelos If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen Then 'REALIZA DEVOLUCION A LAS SALIDAS PENDIENTES - For Each RowMovimiento As DataRow In DtSalidas.Rows - Dim CveConceptoMovimiento As Integer = -1 - Dim CveAlmacenMovimiento As Integer = -1 + If ObjFactura.TipoDocto <> "Rem" Then + For Each RowMovimiento As DataRow In DtSalidas.Rows + Dim CveConceptoMovimiento As Integer = -1 + Dim CveAlmacenMovimiento As Integer = -1 - Dim CveMovimientoDevolucion As Integer = 0 - Dim Folio As Integer = 0 + Dim CveMovimientoDevolucion As Integer = 0 + Dim Folio As Integer = 0 - Select Case RowMovimiento("CveConcepto").ToString().ToEntero() - Case 3 - CveConceptoMovimiento = 18 'DEVOLUCION DEL CLIENTE - CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() - Case 40 - CveConceptoMovimiento = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA - CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() - Case 18 - CveConceptoMovimiento = 3 'DEVOLUCIÓN DEL CLIENTE DIRECTA - CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() - ''SI TIENE REMISIONES RELACIONADAS - 'If DtRemisionesFacturadas.Rows.Count > 0 Then - ' Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}") + Select Case RowMovimiento("CveConcepto").ToString().ToEntero() + Case 3 + CveConceptoMovimiento = 18 'DEVOLUCION DEL CLIENTE + CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() + Case 40 + CveConceptoMovimiento = 41 'DEVOLUCIÓN DEL CLIENTE DIRECTA + CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() + Case 18 + CveConceptoMovimiento = 3 'DEVOLUCIÓN DEL CLIENTE DIRECTA + CveAlmacenMovimiento = RowMovimiento("CveAlmacen").ToString().ToEntero() + ''SI TIENE REMISIONES RELACIONADAS + 'If DtRemisionesFacturadas.Rows.Count > 0 Then + ' Dim RowRemision As DataRow = DtExistencias.FiltroPrimero($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}") - ' Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero() + ' Dim CveRemision As Integer = RowRemision("CveRemision").ToString().ToEntero() - ' Dim CancelarRemision As Boolean = (ListaRemisionesCancelar IsNot Nothing) AndAlso (ListaRemisionesCancelar.Any(Function(CveRemisionCancelar) CveRemisionCancelar = CveRemision)) + ' Dim CancelarRemision As Boolean = (ListaRemisionesCancelar IsNot Nothing) AndAlso (ListaRemisionesCancelar.Any(Function(CveRemisionCancelar) CveRemisionCancelar = CveRemision)) - ' 'SI LA REMISION SE VA A CANCELAR DEBE REGRESAR AL ALMACEN GENERAL - ' If CancelarRemision Then - ' CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero() - ' Else - ' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero() - ' End If + ' 'SI LA REMISION SE VA A CANCELAR DEBE REGRESAR AL ALMACEN GENERAL + ' If CancelarRemision Then + ' CveAlmacenDevolucion = RowRemision("CveAlmacenDevolucion").ToString().ToEntero() + ' Else + ' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero() + ' End If - 'Else - ' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero() - 'End If - End Select + 'Else + ' CveAlmacenDevolucion = RowMovimiento("CveAlmacen").ToString().ToEntero() + 'End If + End Select - 'SI TIENE SALDO PENDIENTE POR DEVOLVER GENERA UN MOVIMIENTO DE DEVOLUCION - If ObjFactura.SaldoAlmacen <> 0 Then - 'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN) - CveMovimientoDevolucion = ObjInventario.AddMovimiento(CveAlmacenMovimiento, CveConceptoMovimiento, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1, Modulo:="Mod/CV1") - Folio = ObjInventario.Folio + 'SI TIENE SALDO PENDIENTE POR DEVOLVER GENERA UN MOVIMIENTO DE DEVOLUCION + If ObjFactura.SaldoAlmacen <> 0 Then + 'SALIDA DE ALMACEN - SALIDA POR TRASPASO CUANDO ES REMISION - DEVOLUCION (SI ES TRASPASO Y TIENE CONTRATO NO HACE DEVOLUCIóN) + CveMovimientoDevolucion = ObjInventario.AddMovimiento(CveAlmacenMovimiento, CveConceptoMovimiento, 1, Now, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, Observaciones:="", Guia:="", CveContrato:=CveContrato, CveAlmacenDestino:=-1, Modulo:="Mod/CV1") + Folio = ObjInventario.Folio - If CveMovimientoDevolucion > 0 Then - For Each Dr As DataRow In DtExistencias.FiltraParametros($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}").Rows + If CveMovimientoDevolucion > 0 Then + For Each Dr As DataRow In DtExistencias.FiltraParametros($"CveMovimiento = {RowMovimiento("CveMovimiento").ToString()}").Rows - Dim FechaCaducidad As Date = MinFecha - If Not String.IsNullOrEmpty(Dr("FechaCaducidad").ToString()) Then - If IsDate(Dr("FechaCaducidad")) Then - FechaCaducidad = Dr("FechaCaducidad").ToString().ToDate() + Dim FechaCaducidad As Date = MinFecha + If Not String.IsNullOrEmpty(Dr("FechaCaducidad").ToString()) Then + If IsDate(Dr("FechaCaducidad")) Then + FechaCaducidad = Dr("FechaCaducidad").ToString().ToDate() + End If + End If + + Dim CveVentaDetalleRemision As Integer = -1 + If CveConceptoMovimiento = 41 Then + CveVentaDetalleRemision = Dr("CveVentaDetalleRemision").ToString.ToEntero() + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar." + Exit For + End If + Next + Else + MensajeError = "Ocurrió un error al agregar el movimiento" + ErrorCancelar = True + End If + + 'GENERA PREPOLIZA DEL MOVIMIENTO DE DEVOLUCION + If Not ErrorCancelar Then + Dim DtCostos As DataTable = Nothing + Dim ValorInventario As Decimal = 0 + If ObjInventario.GetMovimientosDetalle(CveMovimientoDevolucion, UsuarioActual.CveEmpresa) Then + DtCostos = ObjInventario.DtResultados + + Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) + Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {CveAlmacenMovimiento}").ToEntero + Dim IdCtaContable As Integer = 0 + If tmpCostos.Rows.Count > 0 Then + + Dim Multiplicador As Decimal = -1D + If ObjFactura.TipoDocto = "Dev" Then + Multiplicador = 1D + End If + + If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa) Then + Dim Fecha As Date = Now + Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero + Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString + Dim SerieFolio As String = ObjVentas.DtResultados(0)("SerieFolio").ToString + Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundAD() + Dim TotalCostoAcumulado As Decimal = 0 + Dim cont As Integer = 1 + + Dim CvePrePolizaDev As Integer = ObjConta.AddPrePolizas("Modelos/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + 'SE AGREGA MOVIMIENTO SEPARADO POR LA CUENTA DE VENTAS (ER) + For Each RowInv As DataRow In tmpCostos.Rows + ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundAD() + TotalCostoAcumulado += ValorInventario + + 'CUANDO ES EL ÚLTIMO MOVIMIENTO Y HAY DIFERENCIAS EN LOS IMPORTES + If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then + ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) + End If + + IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero + + If Not ErrorCancelar Then + If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, False, Multiplicador * ValorInventario, SerieFolio, 69, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, ImporteMX:=Multiplicador * ValorInventario, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then + ErrorCancelar = True + End If + End If + + cont += 1 + Next + + If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, True, Multiplicador * TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, ImporteMX:=Multiplicador * TotalCosto) Then + ErrorCancelar = True + End If + + 'AUTOCONTA - EL MOVIMIENTO 1 ES EL DE VENTA + + Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" + + If UsuarioActual.CveEmpresa = 119 AndAlso ObjFactura.TipoDocto.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then + AutoConta = False + End If + + If AutoConta And Not ErrorCancelar Then + + If IdCtaContable > 0 Then + If Not ObjConta.ContabilizarPrePoliza(CvePrePolizaDev, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjAC) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al contabilizar la prepoliza." + End If + Else + Alert(String.Format("No se puede contabilizar ya que falta asignación de las cuentas contables"), TipoMensaje.MsgAdvertencia) + End If + + End If + + Else + ErrorCancelar = True + MensajeError = "Ocurrió un Error al ingresar las prepolizas" + End If End If End If + End If - Dim CveVentaDetalleRemision As Integer = -1 - If CveConceptoMovimiento = 41 Then - CveVentaDetalleRemision = Dr("CveVentaDetalleRemision").ToString.ToEntero() - End If - - If Not ObjInventario.AddMovimientoDetalle(CveMovimientoDevolucion, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, -1, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString.ToEntero, FechaCaducidad:=FechaCaducidad, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then + 'AGREGA BITACORA A VENTA + If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen AndAlso CveMovimientoDevolucion > 0 Then + Dim MensajeBitacora = "Devuelta" + If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimientoDevolucion, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then + MensajeError = "Ocurrió un error al agregar la bitacora." ErrorCancelar = True - MensajeError = "Ocurrió un error al procesar los conceptos de salida. Por favor vuelva a intentar." - Exit For + End If + End If + + Else + 'SI EXISTE UNA DEVOLUCION PREVIAMENTE HECHA UTILIZAR COMO REFERENCIA + If DtDevPrevias IsNot Nothing AndAlso DtDevPrevias.Rows.Count > 0 Then + CveMovimientoDevolucion = DtDevPrevias.FiltroPrimeroValor("CveMovimiento", $"CveConcepto = {CveConceptoMovimiento}").ToEntero() + End If + + End If + + + 'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION + 'SI ES DEVOLUCION DEL CLIENTE DEBE REGRESAR A ENTREGA POR ADELANTADO + If Not ErrorCancelar AndAlso CveConceptoMovimiento = 18 AndAlso RevivirRemisiones Then + If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión" + End If + End If + + If DtVirtuales IsNot Nothing Then + For Each RowVirtual As DataRow In DtVirtuales.Rows + 'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL + If Not ErrorCancelar AndAlso Not GeneraMovimientosVirtuales(CveVenta, CveMovimientoDevolucion, RowVirtual("CveMovimiento").ToString().ToEntero(), ObjInventario) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar." End If Next - Else - MensajeError = "Ocurrió un error al agregar el movimiento" - ErrorCancelar = True End If - 'GENERA PREPOLIZA DEL MOVIMIENTO DE DEVOLUCION - If Not ErrorCancelar Then - Dim DtCostos As DataTable = Nothing - Dim ValorInventario As Decimal = 0 - If ObjInventario.GetMovimientosDetalle(CveMovimientoDevolucion, UsuarioActual.CveEmpresa) Then - DtCostos = ObjInventario.DtResultados - - Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) - Dim IdCtaContableAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen = {CveAlmacenMovimiento}").ToEntero - Dim IdCtaContable As Integer = 0 - If tmpCostos.Rows.Count > 0 Then - - Dim Multiplicador As Decimal = -1D - If ObjFactura.TipoDocto = "Dev" Then - Multiplicador = 1D - End If - - If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa) Then - Dim Fecha As Date = Now - Dim CveCliente As Integer = ObjVentas.DtResultados(0)("CveCliente").ToString.ToEntero - Dim ClienteNombre As String = ObjVentas.DtResultados(0)("ClienteNombre").ToString - Dim SerieFolio As String = ObjVentas.DtResultados(0)("SerieFolio").ToString - Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundAD() - Dim TotalCostoAcumulado As Decimal = 0 - Dim cont As Integer = 1 - - Dim CvePrePolizaDev As Integer = ObjConta.AddPrePolizas("Modelos/RecepcionEntrega", 4, TotalCosto, TotalCosto, 1, Fecha, ClienteNombre, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) - 'SE AGREGA MOVIMIENTO SEPARADO POR LA CUENTA DE VENTAS (ER) - For Each RowInv As DataRow In tmpCostos.Rows - ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundAD() - TotalCostoAcumulado += ValorInventario - - 'CUANDO ES EL ÚLTIMO MOVIMIENTO Y HAY DIFERENCIAS EN LOS IMPORTES - If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then - ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) - End If - - IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero - - If Not ErrorCancelar Then - If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, False, Multiplicador * ValorInventario, SerieFolio, 69, SerieFolio, Fecha, IdCtaContable, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, ImporteMX:=Multiplicador * ValorInventario, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero) Then - ErrorCancelar = True - End If - End If - - cont += 1 - Next - - If Not ObjConta.AddPrePolizasDetalle(CvePrePolizaDev, True, Multiplicador * TotalCosto, SerieFolio, 68, SerieFolio, Fecha, IdCtaContableAlmacen, -1, CveVenta:=CveVenta, CveCliente:=CveCliente, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveSubProyecto:=ObjFactura.CveSubProyecto, ImporteMX:=Multiplicador * TotalCosto) Then - ErrorCancelar = True - End If - - 'AUTOCONTA - EL MOVIMIENTO 1 ES EL DE VENTA - - Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" - - If UsuarioActual.CveEmpresa = 119 AndAlso ObjFactura.TipoDocto.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "Pd2", "PA", "Egs", "Dev") Then - AutoConta = False - End If - - If AutoConta And Not ErrorCancelar Then - - If IdCtaContable > 0 Then - If Not ObjConta.ContabilizarPrePoliza(CvePrePolizaDev, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjAC) Then - ErrorCancelar = True - MensajeError = "Ocurrió un error al contabilizar la prepoliza." - End If - Else - Alert(String.Format("No se puede contabilizar ya que falta asignación de las cuentas contables"), TipoMensaje.MsgAdvertencia) - End If - - End If - - Else - ErrorCancelar = True - MensajeError = "Ocurrió un Error al ingresar las prepolizas" - End If - End If - End If + If ErrorCancelar Then + Exit For End If - 'AGREGA BITACORA A VENTA - If Not ErrorCancelar AndAlso RealizarDevolucionAlmacen AndAlso CveMovimientoDevolucion > 0 Then - Dim MensajeBitacora = "Devuelta" - If Not ObjEventos.AddEventoBitacora(String.Format("Venta {2} en Folio: {1}", CveMovimientoDevolucion, Folio, MensajeBitacora), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then - MensajeError = "Ocurrió un error al agregar la bitacora." - ErrorCancelar = True - End If - End If - - Else - 'SI EXISTE UNA DEVOLUCION PREVIAMENTE HECHA UTILIZAR COMO REFERENCIA - If DtDevPrevias IsNot Nothing AndAlso DtDevPrevias.Rows.Count > 0 Then - CveMovimientoDevolucion = DtDevPrevias.FiltroPrimeroValor("CveMovimiento", $"CveConcepto = {CveConceptoMovimiento}").ToEntero() - End If - - End If - - - 'DEVOLUCION REMISION - REGRESA LAS EXISTENCIAS A ENTREGA POR ADELANTADO SI LA FACTURA VIENE DE REMISION - 'SI ES DEVOLUCION DEL CLIENTE DEBE REGRESAR A ENTREGA POR ADELANTADO - If Not ErrorCancelar AndAlso CveConceptoMovimiento = 18 AndAlso RevivirRemisiones Then - If Not GeneraMovimientosEntregaPorAdelantadoRemision(CveMovimientoDevolucion, ObjVentas, ObjInventario, DtDevRem, ListaRemisionesCancelar) Then - ErrorCancelar = True - MensajeError = "Ocurrió un error al generar los movimientos de devolución a remisión" - End If - End If - - If DtVirtuales IsNot Nothing Then - For Each RowVirtual As DataRow In DtVirtuales.Rows - 'REALIZA LA DEVOLUCION AL ALMACEN VIRTUAL - If Not ErrorCancelar AndAlso Not GeneraMovimientosVirtuales(CveVenta, CveMovimientoDevolucion, RowVirtual("CveMovimiento").ToString().ToEntero(), ObjInventario) Then - ErrorCancelar = True - MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar." - End If - Next - End If - - If ErrorCancelar Then - Exit For - End If - - Next - + Next + End If 'SI EXISTEN HAY EXISTENCIA EN (ENTREGA POR ADELANTADO) SE TIENE QUE REGRESAR AL ALMACEN ORGINAL (GENERAL,SIN COSTO) - If Not ErrorCancelar AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then + If Not ErrorCancelar AndAlso ObjFactura.TipoDocto <> "Rem" AndAlso ListaRemisionesCancelar IsNot Nothing AndAlso ListaRemisionesCancelar.Count > 0 Then 'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO) If Not ErrorCancelar Then @@ -5314,6 +5315,40 @@ Namespace Modelos End If + 'CANCELACION DE MOVIMIENTOS DE REMISION + If Not ErrorCancelar AndAlso ObjFactura.TipoDocto = "Rem" AndAlso RealizarDevolucionAlmacen Then + Dim CveAlmacenGeneral As Integer = 0 + Dim DtMovRemision As DataTable = Nothing + 'VERIFICA LOS MOVIMIENTOS DE DEVOLUCION YA GENERADOS QUE TENGAN EXISTENCIA EN (ENTREGA POR ADELANTADO) + If Not ErrorCancelar Then + If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then + DtMovRemision = ObjInventario.DtResultados.FiltraParametros("CveTipoAlmacen = 10") + CveAlmacenGeneral = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveTipoAlmacen = 1").ToString().ToEntero() + Else + ErrorCancelar = True + MensajeError = "Ocurrió un error al cargar los datos de devolución. Por favor vuelva a intentar." + End If + End If + + 'DEBE REGRESAR LA EXISTENCIA DE (ENTREGA POR ADELANTADO) AL ALMACEN ORGINAL (GENERAL,SIN COSTO) + If Not ErrorCancelar AndAlso DtMovRemision IsNot Nothing AndAlso DtMovRemision.Rows.Count > 0 Then + + Dim DtDevMovs = DtMovRemision.FiltraParametros("", DistinctColumns:={"CveMovimiento", "CveAlmacen"}) + + For Each RowDevolucion As DataRow In DtDevMovs.Rows + CveAlmacen = RowDevolucion("CveAlmacen").ToString().ToEntero() + + If Not CancelarMovimientosRemision(CveVenta, CveAlmacen, CveAlmacenGeneral, DtMovRemision.FiltraParametros($"CveMovimiento={RowDevolucion("CveMovimiento")} AND CvePS > 0"), ObjVentas, ObjInventario) Then + ErrorCancelar = True + MensajeError = "Ocurrió un error al cancelar los movimientos de la remisión." + Exit For + End If + Next + + End If + + End If + 'VERIFICAR MOVIMIENTOS DE APARTADOS If Not ErrorCancelar Then If Not GeneraMovimientosApartados(ObjInventario) Then diff --git a/Ashx/SIGWeb.ashx b/Ashx/SIGWeb.ashx index 4c8ad31ac..abe9f9840 100644 --- a/Ashx/SIGWeb.ashx +++ b/Ashx/SIGWeb.ashx @@ -116,7 +116,10 @@ Public Class SIGWeb : Implements IHttpHandler, IRequiresSessionState Case "sendMailLPM" context.Response.Write(sendMailLPM(context)) Case "getSATColomias" - getSatColonias(context) + getSATColonias(context) + + Case "cancelarRemision" + cancelarRemision(context) End Select Catch ex As Exception ex.GuardaLog(ex.Message) @@ -1422,4 +1425,47 @@ Public Class SIGWeb : Implements IHttpHandler, IRequiresSessionState Return retorno End Function #End Region + +#Region "Get SAT Colonmias" + Private Function cancelarRemision(ByVal context As HttpContext) As String + Dim retorno As String = "" + + Dim CveVenta As Integer = IfNull(context.Request("CveVenta"), "-1").ToString().ToEntero() + + If CveVenta > 0 Then + Dim usuario As Usuario = UsuarioActual(context) + If usuario IsNot Nothing AndAlso usuario.CveEmpresa > 0 Then + Dim CveAlmacenDevolucion As Integer = 0 + + Using ObjInv As New ClsInventarios + If ObjInv.GetInv_Mov(CveVenta, usuario.CveEmpresa) Then + If ObjInv.DtResultados.Rows.Count > 0 Then + CveAlmacenDevolucion = ObjInv.DtResultados.FiltroPrimeroValor("CveAlmacen", "CveConcepto IN (3,40)").ToEntero() + End If + End If + End Using + + Dim ObjFacturaCancelacion As New Modelos.Factura(usuario, CveVenta, usuario.CveEmpresa, EsCancelacion:=True) + ObjFacturaCancelacion.CveAlmacenDevolucion = CveAlmacenDevolucion + + If ObjFacturaCancelacion.TipoDocto = "Rem" Then + Dim respuesta = ObjFacturaCancelacion.CancelarFactura(True, New List(Of Integer)) + If respuesta IsNot Nothing Then + retorno = JsonConvert.SerializeObject(respuesta) + End If + End If + + End If + + End If + + If Not String.IsNullOrEmpty(retorno) Then + context.Response.Write(retorno) + Else + context.Response.Write("[]") + End If + + Return retorno + End Function +#End Region End Class \ No newline at end of file From 26752b51e37b5ed8bc69c97e71e16a132ec7fe38 Mon Sep 17 00:00:00 2001 From: Jonathan Alexis Perez Morales Date: Tue, 21 Dec 2021 19:16:12 -0700 Subject: [PATCH 5/9] E119. Fluctuacion cambiaria mensual --- App_Code/ClsContabilidad.vb | 41 + App_Code/ClsGenerales.vb | 22 +- App_Code/ClsMovimientos.vb | 5 +- App_Code/ClsPaginas.vb | 41 + Bancos/FluctuacionCambiaria.aspx | 1137 ++++++++++++++------------- Bancos/FluctuacionCambiaria.aspx.vb | 154 ++-- Bancos/PopIECompras.aspx.vb | 63 +- Bancos/PopIEVentas.aspx.vb | 30 +- Bancos/ProveedoresAbonar.aspx.vb | 29 +- Compras/RepCxP.aspx | 12 +- Compras/RepCxP.aspx.vb | 2 +- CxC/RepCxC.aspx | 13 +- CxC/RepCxC.aspx.vb | 2 +- Ventas/ClientesAbonar.aspx.vb | 62 +- Ventas/Ventas.aspx.vb | 96 ++- 15 files changed, 996 insertions(+), 713 deletions(-) diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index ab161ebc8..9f6902b8d 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -6543,6 +6543,47 @@ Public Class ClsContabilidad Return Retorno End Function +#Region "F L U C T U A C I O N - C A M B I A R I A" + Public Function UpdateVentaTCValuacion(CveVenta As Integer, TCValuacion As Decimal) As Boolean + Dim Retorno = False + + DataAdapter("PA_Conta_VentasTCValuacionUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveVenta", SqlDbType.Int).Value = CveVenta + .Add("@TCValuacion", SqlDbType.Decimal).Value = TCValuacion + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + Me.OnError("Ocurrió un error al actualizar el tipo de cambio", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function + + Public Function UpdateCompraTCValuacion(CveCompra As Integer, TCValuacion As Decimal) As Boolean + Dim Retorno = False + + DataAdapter("PA_Conta_ComprasTCValuacionUpdate") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveCompra", SqlDbType.Int).Value = CveCompra + .Add("@TCValuacion", SqlDbType.Decimal).Value = TCValuacion + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + Me.OnError("Ocurrió un error al actualizar el tipo de cambio", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function +#End Region #Region "IDisposable Support" ' IDisposable diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb index fea44cef7..005780993 100644 --- a/App_Code/ClsGenerales.vb +++ b/App_Code/ClsGenerales.vb @@ -1734,7 +1734,7 @@ Public Class ClsGenerales Return Retorno - End Function + End Function Public Function GetTipoCambio(CveTipoCambio As Integer, Fecha As Date) As Boolean Dim Retorno = False @@ -1754,6 +1754,26 @@ Public Class ClsGenerales Return Retorno End Function + Public Function GetTipoCambioUltimaFluctuacion(CveTipoCambio As Integer, Fecha As Date, Optional Top As Integer = 1000) As Boolean + Dim Retorno = False + + DataAdapter("PA_Gral_TipoCambioUltimaFluctuacionGet") + + With SqlAdapter.SelectCommand.Parameters + .Add("@CveTipoCambio", SqlDbType.Int).Value = CveTipoCambio + .Add("@Fecha", SqlDbType.Date).Value = Fecha + .Add("@Top", SqlDbType.Int).Value = Top + End With + + Try + SqlAdapter.Fill(Data) + Retorno = True + Catch ex As Exception + OnError("Ocurrió un error al obtener el Tipo de Cambio", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo()) + End Try + + Return Retorno + End Function Public Function GetTiposCambio(FechaInicio As Date, FechaFin As Date) As Boolean Dim Retorno = False diff --git a/App_Code/ClsMovimientos.vb b/App_Code/ClsMovimientos.vb index c0ab586d4..50259e4c7 100644 --- a/App_Code/ClsMovimientos.vb +++ b/App_Code/ClsMovimientos.vb @@ -241,7 +241,7 @@ Public Class ClsMovimientos Gpo As Integer, CveResponsable As Integer, TipoCambio As Integer, Optional TCEspecifico As Double = -1, Optional TipoDocto As String = "-1", Optional FechaVI As String = "-1", Optional FechaVF As String = "-1", Optional FechaCorte As Date = Nothing, Optional EstatusCliente As Integer = -1, Optional CveUsuarioConsulta As Integer = -1, - Optional CveCobranzaEstatus As Integer = -1, Optional CveClienteClasificacion As Integer = -1, Optional TipoCliente As Integer = -1, Optional AplicaAnticiposPagados As Integer = 1) As Boolean + Optional CveCobranzaEstatus As Integer = -1, Optional CveClienteClasificacion As Integer = -1, Optional TipoCliente As Integer = -1, Optional AplicaAnticiposPagados As Integer = 1, Optional CveMoneda As Integer = -1) As Boolean Dim Retorno As Boolean = False 'Data = New DataTable @@ -274,7 +274,8 @@ Public Class ClsMovimientos .Add("@CveCobranzaEstatus", SqlDbType.Int).Value = CveCobranzaEstatus .Add("@CveClienteClasificacion", SqlDbType.Int).Value = CveClienteClasificacion .Add("@TipoCliente", SqlDbType.Int).Value = TipoCliente - .Add("@AplicaAnticiposPagados", SqlDbType.Int).Value = AplicaAnticiposPagados + .Add("@AplicaAnticiposPagados", SqlDbType.Int).Value = AplicaAnticiposPagados + .Add("@CveMoneda", SqlDbType.Int).Value = CveMoneda End With Try diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 7ff070146..48f1a2e9f 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -127,6 +127,47 @@ Public Class ClsPaginas End Set End Property + Public ReadOnly Property GlobalTipoCambioUltimaFluctuacion(Optional Fecha As Date = MinFecha) As MTipoCambioFluctuacion + Get + + If Application("GlobalTipoCambioUltimaFluctuacion") Is Nothing Then + Dim ObjGral As New ClsGenerales + If ObjGral.GetTipoCambioUltimaFluctuacion(-1, Now) AndAlso ObjGral.DtResultados.Rows.Count > 0 Then + Application("GlobalTipoCambioUltimaFluctuacion") = ObjGral.DtResultados.Copy() + Else + Application("GlobalTipoCambioUltimaFluctuacion") = Nothing + End If + ObjGral.Dispose() + End If + + Dim fluctuacion = New MTipoCambioFluctuacion() With { + .TCFluctuacion = 0, + .FechaFluctuacion = MinFecha + } + + 'sino tiene dato lo recargo por si ya esta insertado + If Fecha = MinFecha Then Fecha = Now + + If Application("GlobalTipoCambioUltimaFluctuacion") IsNot Nothing Then + + Dim dr = DirectCast(Application("GlobalTipoCambioUltimaFluctuacion"), DataTable).FiltroPrimero(String.Format("Fecha = '{0}'", Fecha)) + If dr IsNot Nothing Then + fluctuacion.TCFluctuacion = dr("TCFluctuacion").ToString().ToDecimal() + fluctuacion.FechaFluctuacion = dr("FechaFluctuacion").ToString().ToDateTime() + End If + + Return fluctuacion + Else + Return fluctuacion + End If + + End Get + End Property + + Public Class MTipoCambioFluctuacion + Public Property TCFluctuacion As Decimal + Public Property FechaFluctuacion As DateTime + End Class Public Property GlobalTipoCambioEuro(Optional Fecha As Date = MinFecha) As Double Get If GlobalTipoCambioEuro <= 0 Then diff --git a/Bancos/FluctuacionCambiaria.aspx b/Bancos/FluctuacionCambiaria.aspx index 93673c3d1..19dc04717 100644 --- a/Bancos/FluctuacionCambiaria.aspx +++ b/Bancos/FluctuacionCambiaria.aspx @@ -1,593 +1,600 @@ -<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="FluctuacionCambiaria.aspx.vb" Inherits="Bancos_FluctuacionCambiaria" %> - - - - - - - - - - Fluctuación Cambiaria - - - - - - -
    -
    -
    - - -
    -
    - -
    -
    - - - - -
    - - - - - - -
    -
    -
    TC:
    -
    -
    - -
    - -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - -
    -
    -
    -

    PÉRDIDA

    -
    - -
    - MXN - - - -
    -
    -
    -
    -
    -
    -

    GANANCIA

    -
    - -
    -
    -
    - MXN - - - -
    -
    -
    -
    -
    -
    -
    -
    -

    -
    - -
    -
    -
    - MXN - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - - +<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="FluctuacionCambiaria.aspx.vb" Inherits="Bancos_FluctuacionCambiaria" %> + + + + + + + + + + Fluctuación Cambiaria + + + + + + +
    +
    +
    + + +
    +
    + +
    + + +
    + +
    + + +
    +
    +
    TC:
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    + + + + + + + +
    +
    +
    +

    PÉRDIDA

    +
    + +
    + MXN + + + +
    +
    +
    +
    +
    +
    +

    GANANCIA

    +
    + +
    +
    +
    + MXN + + + +
    +
    +
    +
    +
    +
    +
    +
    +

    +

    +
    + +
    +
    +
    + MXN + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    - +
    - - - - -
    - -
    - - - - - -
    - -
    - + + + +
    -
    - - - - -
    - - - - - - - - - - - <%----%> -
    -
    - - - - -
    -
    -
    -

    PÉRDIDA

    -
    - -
    - MXN - - - -
    -
    -
    -
    -
    -
    -

    GANANCIA

    -
    - -
    -
    -
    - MXN - - - -
    -
    -
    -
    -
    -
    -
    -
    -

    -
    - -
    -
    -
    - MXN - - - -
    -
    -
    -
    -
    -
    -
    -
    -
    - - -
    +
    + + + + + +
    + +
    + +
    + + + + + + +
    + + + + + + + + + + + <%----%> +
    +
    + + + + +
    +
    +
    +

    PÉRDIDA

    +
    + +
    + MXN + + + +
    +
    +
    +
    +
    +
    +

    GANANCIA

    +
    + +
    +
    +
    + MXN + + + +
    +
    +
    +
    +
    +
    +
    +
    +

    +

    +
    + +
    +
    +
    + MXN + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    -
    - - - - -
    - -
    - - - - - -
    - - - -
    - +
    + + + +
    -
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    +
    + + + + + +
    + + + +
    + +
    + +
    + +
    + + + + + + + + + + + + + + + + +
    +
    + + + +
    -
    - - - - -
    - -
    - - - - - -
    - - - -
    - +
    + + + +
    -
    - - - -
    - + + + + + +
    + + + +
    + +
    + + + + + +
    + - - - - - - - - - - - - - - -
    -
    - - - - - - - -
    + Banco,NumCuenta,CveCuentaComplementaria,Saldo" + EmptyDataText="No se Encontraron Cuentas Bancarias." ToolTip="Listado de Cuentas Bancarias" + CssClass="table table-hover table-striped ScrollAD mysmallbtn" GridLines="None"> + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    -
    - - - - -
    +
    + + + + +
    -
    - +
    + - - - -
    + + + +
    -
    - +
    +
    - -
    - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - -
    +
    -
    - + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + + +
    + +
    + - - - -
    - - - -
    - -
    -
    -
    - - - - - - - - - - - - - -
    -
    - - - -
    -
    - -
    - - - - -
    - -
    - - - - - -
    + + + +
    -
    - -
    -
    - -
    - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - + +
    + +
    +
    +
    + + + + + + + + + + + + + +
    +
    + + + +
    +
    + +
    + + + + +
    + +
    + + + + + +
    + + +
    + +
    +
    + +
    + + +
    +
    + + + + + + + + + + + + + +
    +
    + + + + + + diff --git a/Bancos/FluctuacionCambiaria.aspx.vb b/Bancos/FluctuacionCambiaria.aspx.vb index bbc74193e..720450601 100644 --- a/Bancos/FluctuacionCambiaria.aspx.vb +++ b/Bancos/FluctuacionCambiaria.aspx.vb @@ -2,10 +2,18 @@ Option Strict On Imports System.Data +Imports System.Globalization Imports Extensiones Partial Class Bancos_FluctuacionCambiaria Inherits ClsPaginas + + Public ReadOnly Property FechaUltimoDiaMes() As DateTime + Get + Return New DateTime(DdlAnio.SelectedValue.ToEntero(), DdlMes.SelectedValue.ToEntero(), 1).AddMonths(1).AddDays(-1) + End Get + End Property + #Region "PROPIEDADES" Private Property LblTotal() As String Get @@ -19,7 +27,7 @@ Partial Class Bancos_FluctuacionCambiaria Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not Page.IsPostBack Then - + CargaFechas() CargarCentrosDeCosto(Nothing, DdlSubproyectoBancos, Nothing, LblSubProyectoBancos, "") CargarCentrosDeCosto(Nothing, DdlsubProyectoVentas, Nothing, LblSubProyectoVentas, "") CargarCentrosDeCosto(Nothing, DdlSubProyectoCompras, Nothing, LblSubProyectoCompras, "") @@ -32,6 +40,27 @@ Partial Class Bancos_FluctuacionCambiaria End Sub #Region "CARGAS" + Private Sub CargaFechas() + 'Año actual + DdlAnio.Items.Add(New ListItem(Now.Year.ToString(), Now.Year.ToString())) + 'Año Anterior + DdlAnio.Items.Add(New ListItem(Now.AddYears(-1).Year.ToString(), Now.AddYears(1).Year.ToString())) + + For i = 1 To 12 + Dim fecha = New DateTime(DdlAnio.SelectedValue.ToEntero(), i, 1) + Dim mes = fecha.ToString("MMMM", CultureInfo.GetCultureInfo("es-MX")) + Dim mesStr = Char.ToUpper(mes(0)) + mes.Substring(1) + + DdlMes.Items.Add(New ListItem(mesStr, i.ToString())) + Next + + Dim UltimaFluctuacion = GlobalTipoCambioUltimaFluctuacion(Now) + If UltimaFluctuacion IsNot Nothing Then + DdlMes.SelectedValueExist(UltimaFluctuacion.FechaFluctuacion.Month) + DdlMes.SelectedValueExist(UltimaFluctuacion.FechaFluctuacion.Year) + End If + + End Sub Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) Handles BtnConsultar.Click CargaTipoCambio() @@ -47,36 +76,52 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaTipoCambio() Dim ObjGenerales As New ClsGenerales - ObjGenerales.GetTipoCambio(-1, TxtFecha.Text.ToDate) + ObjGenerales.GetTipoCambio(-1, FechaUltimoDiaMes) If ObjGenerales.DtResultados.Rows.Count > 0 Then LtTipoCambioActual.Text = ObjGenerales.DtResultados.Rows(0)("TipoCambio").ToString - TxtConceptoFluctuacion.Text = "Fluctuación a " & TxtFecha.Text + TxtConceptoFluctuacion.Text = "Fluctuación a " & FechaUltimoDiaMes.ToShortDateString() End If ObjGenerales.Dispose() End Sub Private Sub CargaUltimaFluctuacion() - Dim Obj As New ClsBancos - If Obj.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - Dim dt As DataTable = Obj.DtResultados.FiltraParametros("TipoFluctuacion = 1", "Fecha DESC") - If dt.Rows.Count > 0 Then - LtlUltimaFluctuacion.Text = String.Format("Ultima Fluctuación : {0}", dt.Rows(0)("Fecha").ToString.ToDate.ToShortDateString) - 'si la ultima fluctuacion es mayor o igual al fin de mes anterior, entonces pon la fecha actual - If dt.Rows(0)("Fecha").ToString.ToDate >= Now.AddMonths(-1).LastDayOfMonth Then - TxtFecha.Text = Now.ToShortDateString - Else - TxtFecha.Text = Now.AddMonths(-1).LastDayOfMonth.ToShortDateString() - End If - End If + 'Dim Obj As New ClsBancos + 'If Obj.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' Dim dt As DataTable = Obj.DtResultados.FiltraParametros("TipoFluctuacion = 1", "Fecha DESC") + ' If dt.Rows.Count > 0 Then + ' LtlUltimaFluctuacion.Text = String.Format("Ultima Fluctuación : {0}", dt.Rows(0)("Fecha").ToString.ToDate.ToShortDateString) + ' 'si la ultima fluctuacion es mayor o igual al fin de mes anterior, entonces pon la fecha actual + ' If dt.Rows(0)("Fecha").ToString.ToDate >= Now.AddMonths(-1).LastDayOfMonth Then + ' TxtFecha.Text = Now.ToShortDateString + ' Else + ' TxtFecha.Text = Now.AddMonths(-1).LastDayOfMonth.ToShortDateString() + ' End If + ' End If + 'End If + 'Obj.Dispose() + + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(Now) + + If UltimaFluctuacion IsNot Nothing Then + LtlUltimaFluctuacion.Text = String.Format("Ultima Fluctuación : {0}", UltimaFluctuacion.FechaFluctuacion.ToShortDateString) + 'si la ultima fluctuacion es mayor o igual al fin de mes anterior, entonces pon la fecha actual + If UltimaFluctuacion.FechaFluctuacion >= Now.AddMonths(-1).LastDayOfMonth Then + DdlMes.SelectedValueExist(Now.Month) + DdlAnio.SelectedValueExist(Now.Year) + Else + DdlMes.SelectedValueExist(Now.AddMonths(-1).Month) + DdlAnio.SelectedValueExist(Now.AddMonths(-1).Year) + 'TxtFecha.Text = Now.AddMonths(-1).LastDayOfMonth.ToShortDateString() + End If End If - Obj.Dispose() + CargaTipoCambio() End Sub Private Sub CargaDatosCompra() Dim ObjBancos As New ClsBancos 'LblTotalCompras.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 1, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 1, UsuarioActual.CveEmpresa) Then GvCompras.DataSource = ObjBancos.DtResultados 'LblTotalCompras.Text = ObjBancos.DtResultados.SUM("Fluctuacion").FormatoNumero Dim Perdida As DataTable = ObjBancos.DtResultados.FiltraParametros("Fluctuacion < 0 ") @@ -110,7 +155,7 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaDatosVentas() Dim ObjBancos As New ClsBancos LblTotalVentas.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 2, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 2, UsuarioActual.CveEmpresa) Then GvVentas.DataSource = ObjBancos.DtResultados Dim Perdida As DataTable = ObjBancos.DtResultados.FiltraParametros("Fluctuacion < 0") @@ -142,7 +187,7 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaDatosCuentas() Dim ObjBancos As New ClsBancos LblTotalBancos.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 4, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 4, UsuarioActual.CveEmpresa) Then Dim DtTemp As DataTable = ObjBancos.DtResultados.Copy Dim TCCierreFluctuacion As Decimal = LtTipoCambioActual.Text.ToDecimal Dim TotAcumulado As Decimal = 0 @@ -151,7 +196,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim Total As Decimal = 0 Dim CveCuentaExtranjera As Integer = Dr("CveCuentaExtranjera").ToString.ToEntero If CveCuentaExtranjera > 0 Then - If Conta.GetMovimientosAuxiliaresCatalogo(CveCuentaExtranjera, MinFecha, TxtFecha.Text.ToDate, 2, "-1", UsuarioActual.CveEmpresa, "1") Then + If Conta.GetMovimientosAuxiliaresCatalogo(CveCuentaExtranjera, MinFecha, FechaUltimoDiaMes, 2, "-1", UsuarioActual.CveEmpresa, "1") Then If Conta.DtResultados.Rows.Count > 1 Then Total = Conta.DtResultados.Rows(1)("SaldoActual").ToString.ToDecimal End If @@ -162,7 +207,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim SaldoActualContabilidad As Decimal = 0 Dim CveCuentaComplementaria As Integer = Dr("CveCuentaComplementaria").ToString.ToEntero If CveCuentaComplementaria > 0 Then - If Conta.GetMovimientosAuxiliaresCatalogo(CveCuentaComplementaria, MinFecha, TxtFecha.Text.ToDate, 2, "-1", UsuarioActual.CveEmpresa, "1") Then + If Conta.GetMovimientosAuxiliaresCatalogo(CveCuentaComplementaria, MinFecha, FechaUltimoDiaMes, 2, "-1", UsuarioActual.CveEmpresa, "1") Then If Conta.DtResultados.Rows.Count > 1 Then SaldoActualContabilidad = Conta.DtResultados.Rows(1)("SaldoActual").ToString.ToDecimal End If @@ -189,7 +234,7 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaDatosDeudores() Dim ObjBancos As New ClsBancos LblTotalDeudores.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 5, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 5, UsuarioActual.CveEmpresa) Then GvDeudores.DataSource = ObjBancos.DtResultados LblTotalDeudores.Text = ObjBancos.DtResultados.SUM("Fluctuacion").FormatoNumero Else @@ -203,7 +248,7 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaDatosAcreedores() Dim ObjBancos As New ClsBancos LblTotalAcreedores.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 6, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 6, UsuarioActual.CveEmpresa) Then GvAcreedores.DataSource = ObjBancos.DtResultados LblTotalAcreedores.Text = ObjBancos.DtResultados.SUM("Fluctuacion").FormatoNumero Else @@ -217,7 +262,7 @@ Partial Class Bancos_FluctuacionCambiaria Private Sub CargaDatosFiliales() Dim ObjBancos As New ClsBancos LblTotalAcreedores.Text = "0.00" - If ObjBancos.GetFluctuaciones(TxtFecha.Text.ToDate, 7, UsuarioActual.CveEmpresa) Then + If ObjBancos.GetFluctuaciones(FechaUltimoDiaMes, 7, UsuarioActual.CveEmpresa) Then GvFiliales.DataSource = ObjBancos.DtResultados.FiltraParametros("Saldo > 0") LblTotalAcreedores.Text = ObjBancos.DtResultados.SUM("Fluctuacion").FormatoNumero Else @@ -237,15 +282,17 @@ Partial Class Bancos_FluctuacionCambiaria Dim Total As Decimal = 0 Dim Conta As New ClsContabilidad Conta.IniciaTransacSQL() - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaC", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoCompras.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaC", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoCompras.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim idCta As Integer = 0 - Dim CveCuenta As Integer = 0 + Dim CveCuentaPerdida, CveCuentaGanancia As Integer Dim idCtaPerdida, IdCtaGanancia As Integer + Dim TipoMovto As Boolean = False Dim CveConceptoContable As Integer = 0 - Dim CveCuentaComplementaria As Integer = 55175 - Dim IdCtaComplementaria As Integer = 1248 + Dim IdCtaComplementaria As Integer = 0 + Dim ErrorRegistrar As Boolean = False CveCuentaPerdida = 0 '55379 @@ -257,19 +304,17 @@ Partial Class Bancos_FluctuacionCambiaria Total = LblTotal.ToDecimal If Total > 0 Then CveConceptoContable = 64 - CveCuenta = CveCuentaGanancia idCta = IdCtaGanancia TipoMovto = True Else CveConceptoContable = 65 - CveCuenta = CveCuentaPerdida idCta = idCtaPerdida TipoMovto = False End If + Dim TCUltimaFluctuacion As Decimal = GlobalTipoCambio(FechaUltimoDiaMes).ToDecimal() - - If Not Conta.AddPrePolizasDetalle(CvePrePoliza, TipoMovto, Math.Abs(Total), "Fluctuación Compras", CveConceptoContable, "Fluctuación Compras", Now, idCta, 0, ImporteMX:=Math.Abs(Total), CveCuenta:=CveCuenta, CveSubProyecto:=DdlSubProyectoCompras.SelectedValue.ToEntero) Then + If Not Conta.AddPrePolizasDetalle(CvePrePoliza, TipoMovto, Math.Abs(Total), "Fluctuación Compras", CveConceptoContable, "Fluctuación Compras", Now, idCta, 0, ImporteMX:=Math.Abs(Total), CveSubProyecto:=DdlSubProyectoCompras.SelectedValue.ToEntero) Then ErrorRegistrar = True End If @@ -279,12 +324,18 @@ Partial Class Bancos_FluctuacionCambiaria Total = gvr.DataKey("Fluctuacion").ToDecimal 'si es pérdida o ganancia - + IdCtaComplementaria = gvr.DataKey("IdCtaContComplementaria").ToString().ToEntero() 'movimiento de complementaria - If Not Conta.AddPrePolizasDetalle(CvePrePoliza, False, Total, gvr.DataKey("SerieFolio"), 201, gvr.DataKey("SerieFolio"), Now, IdCtaComplementaria, 0, CveCompra:=gvr.DataKey("CveCompra").ToEntero, TipoCambio:=TC, ImporteMX:=Total, ImporteME:=Total, CveCuenta:=CveCuentaComplementaria) Then + If Not Conta.AddPrePolizasDetalle(CvePrePoliza, False, Total, gvr.DataKey("SerieFolio"), 201, gvr.DataKey("SerieFolio"), Now, IdCtaComplementaria, 0, CveCompra:=gvr.DataKey("CveCompra").ToEntero, TipoCambio:=TC, ImporteMX:=Total, ImporteME:=Total) Then ErrorRegistrar = True Exit For + End If + + If Not Conta.UpdateCompraTCValuacion(gvr.DataKey("CveCompra").ToEntero, TCValuacion:=TCUltimaFluctuacion) Then + ErrorRegistrar = True + Exit For End If + Next If Not ErrorRegistrar Then @@ -311,16 +362,18 @@ Partial Class Bancos_FluctuacionCambiaria Dim idCtaPerdida, IdCtaGanancia As Integer Dim TipoMovto As Boolean = False Dim CveConceptoContable As Integer = 0 - Dim CveCuentaComplementaria As Integer = 54141 - Dim IdCtaComplementaria As Integer = 70 + Dim IdCtaComplementaria As Integer = 0 Dim ErrorRegistrar As Boolean = False CveCuentaPerdida = 0 '55379 CveCuentaGanancia = 0 ' 55382 idCtaPerdida = UsuarioActual.Empresa.IdCuentaPerdidaCambiaria '1227 IdCtaGanancia = UsuarioActual.Empresa.IdCuentaGananciaCambiaria '1230 - Dim TC As Decimal = 2 ' se pone 2, para que cumpla con el check constrains de complementarias - + Dim TC As Decimal = 2 ' se pone 2, para que cumpla con el check constrains de complementarias + + Dim TCUltimaFluctuacion As Decimal = GlobalTipoCambio(FechaUltimoDiaMes).ToDecimal() + '' + Total = LblTotalVentas.Text.ToDecimal If Total > 0 Then CveConceptoContable = 64 @@ -341,7 +394,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim Conta As New ClsContabilidad Conta.IniciaTransacSQL() - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaV", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoVentas.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaV", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoVentas.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If Not Conta.AddPrePolizasDetalle(CvePrePoliza, TipoMovto, Math.Abs(Total), "Fluctuación Ventas", CveConceptoContable, "Fluctuación Ventas", Now, idCta, 0, ImporteMX:=Math.Abs(Total), CveCuenta:=CveCuenta, CveSubProyecto:=DdlsubProyectoVentas.SelectedValue.ToEntero) Then ErrorRegistrar = True @@ -353,14 +406,21 @@ Partial Class Bancos_FluctuacionCambiaria For Each gvr As GridViewRow In GvVentas.Rows Total = -gvr.DataKey("Fluctuacion").ToDecimal + IdCtaComplementaria = gvr.DataKey("IdCtaContComplementaria").ToString().ToEntero() + If gvr.DataKey("CveIE").ToEntero > 0 AndAlso gvr.DataKey("CveVenta").ToEntero < 0 Then CveConconceptoCliente = 226 Else CveConconceptoCliente = 203 End If + If Not Conta.UpdateVentaTCValuacion(gvr.DataKey("CveVenta").ToEntero, TCValuacion:=TCUltimaFluctuacion) Then + ErrorRegistrar = True + Exit For + End If + 'movimiento de complementaria - If Not Conta.AddPrePolizasDetalle(CvePrePoliza, True, Total, gvr.DataKey("SerieFolio"), CveConconceptoCliente, gvr.DataKey("SerieFolio"), Now, IdCtaComplementaria, 0, CveVenta:=gvr.DataKey("CveVenta").ToEntero, TipoCambio:=TC, ImporteMX:=Total, ImporteME:=Total, CveCuenta:=CveCuentaComplementaria, CveIE:=gvr.DataKey("CveIE").ToEntero) Then + If Not Conta.AddPrePolizasDetalle(CvePrePoliza, True, Total, gvr.DataKey("SerieFolio"), CveConconceptoCliente, gvr.DataKey("SerieFolio"), Now, IdCtaComplementaria, 0, CveVenta:=gvr.DataKey("CveVenta").ToEntero, TipoCambio:=TC, ImporteMX:=Total, ImporteME:=Total, CveIE:=gvr.DataKey("CveIE").ToEntero) Then ErrorRegistrar = True Exit For End If @@ -395,9 +455,9 @@ Partial Class Bancos_FluctuacionCambiaria Dim CveConceptoContable As Integer = 0 Dim ErrorRegistrar As Boolean = False Dim TCCierreFluctuacion As Decimal = LtTipoCambioActual.Text.ToDecimal - Dim MesTCtexto As String = String.Format("{0} TC:{1}", TxtFecha.Text.ToDate.ToString("MMMM-yyyy"), TCCierreFluctuacion) + Dim MesTCtexto As String = String.Format("{0} TC:{1}", FechaUltimoDiaMes.ToString("MMMM-yyyy"), TCCierreFluctuacion) - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaB", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoBancos.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaB", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoBancos.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) CveCuentaPerdida = 0 ' 55379 @@ -477,7 +537,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim Total As Decimal = 0 Dim Conta As New ClsContabilidad Dim Banco As New ClsBancos(Conta.IniciaTransacSQL()) - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaDD", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoDeudores.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaDD", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoDeudores.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Dim idCta As Integer = 0 Dim CveCuenta As Integer = 0 Dim CveCuentaPerdida, CveCuentaGanancia As Integer @@ -494,7 +554,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim TCCierreFluctuacion As Decimal = LtTipoCambioActual.Text.ToDecimal Total = LblTotalAcreedores.Text.ToDecimal - Dim ConceptoFluctuacion As String = String.Format("Fluctuación Filiales {0} ", TxtFecha.Text) + Dim ConceptoFluctuacion As String = String.Format("Fluctuación Filiales {0} ", FechaUltimoDiaMes) Dim CveConconceptoDeudores As Integer = 256 @@ -553,7 +613,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim Banco As New ClsBancos(Conta.IniciaTransacSQL()) Dim ObjContPaq As New ClsContPAQi(UsuarioActual.Empresa) ObjContPaq.IniciaTransacSQL() - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaFilial", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoFiliales.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaFilial", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoFiliales.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Dim idCta As Integer = 0 Dim CveCuenta As Integer = 0 Dim CveCuentaPerdida, CveCuentaGanancia As Integer @@ -572,7 +632,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim TCCierreFluctuacion As Decimal = LtTipoCambioActual.Text.ToDecimal Total = LblTotalAcreedores.Text.ToDecimal - Dim ConceptoFluctuacion As String = String.Format("Fluctuación Filiales {0} ", TxtFecha.Text) + Dim ConceptoFluctuacion As String = String.Format("Fluctuación Filiales {0} ", FechaUltimoDiaMes) 'saco las cuentas de pérdida y ganancia For Each gvr As GridViewRow In GvFiliales.Rows @@ -646,7 +706,7 @@ Partial Class Bancos_FluctuacionCambiaria Dim Total As Decimal = 0 Dim Conta As New ClsContabilidad Conta.IniciaTransacSQL() - Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaA", 1, 0, 0, 1, TxtFecha.Text.ToDate, TxtConceptoAcreedores.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim CvePrePoliza As Integer = Conta.AddPrePolizas("Banc/FluctuaA", 1, 0, 0, 1, FechaUltimoDiaMes, TxtConceptoAcreedores.Text, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Dim idCta As Integer = 0 Dim CveCuenta As Integer = 0 Dim CveCuentaPerdida, CveCuentaGanancia As Integer diff --git a/Bancos/PopIECompras.aspx.vb b/Bancos/PopIECompras.aspx.vb index 719648f77..2babcb0ea 100644 --- a/Bancos/PopIECompras.aspx.vb +++ b/Bancos/PopIECompras.aspx.vb @@ -637,7 +637,7 @@ Partial Class Bancos_PopIECompras CveMonedaCompra = dr("CveMoneda").ToString.ToEntero CveMonedaFiltros = dr("CveMoneda").ToString.ToEntero SerieFolio = dr("SerieFolio").ToString - TipoCambioOriginal = dr("TipoCambio").ToString.ToDecimal + TipoCambioOriginal = dr("TipoCambioOriginal").ToString.ToDecimal NombreProveedor = GlobalDTCompProveedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("RazonSocial", String.Format("CveProveedor = {0}", CveProveedor)) CveSubProyecto = dr("CveSubProyecto").ToString.ToEntero @@ -1474,6 +1474,14 @@ Partial Class Bancos_PopIECompras Dim CveCuentaContabilizacion As Long = 1 Dim CuentasContablesInvalidasSIG As New StringBuilder + Dim FechaPago As Date = TxtFechaDocumento.Text.ToDate() + 'VERIFICA SI SE ESTA PAGANDO EN EL MISMO MES DE LA FACTURA + Dim PagoMismoMes As Boolean = True + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso (FechaDocumento < FechaPago) AndAlso ((FechaDocumento.Month < FechaPago.Month AndAlso FechaDocumento.Year = FechaPago.Year) OrElse (FechaDocumento.Year < FechaPago.Year)) Then + PagoMismoMes = False + End If + Dim TCUltimaFluctuacion As Decimal = 1 + 'Tipos de cambio segun metodo de pago If CveMoneda = 1 AndAlso CveMonedaCompra = 1 Then 'Si la venta viene en Pesos y se va a pagar en Pesos tipoCambioPago = 1 @@ -1491,6 +1499,13 @@ Partial Class Bancos_PopIECompras tipoCambioPago = TxtTipoCambio.Text.ToDecimal tipoCambioCompra = 1 PorcentajePago = ImportePagado.ToString.ToDecimal / MovimientoPagar.Total + End If + + Dim UltimaFluctuacion = GlobalTipoCambioUltimaFluctuacion(TxtFechaDocumento.Text.ToDate) + If UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < TxtFechaDocumento.Text.ToDate Then + TCUltimaFluctuacion = UltimaFluctuacion.TCFluctuacion + End If End If Select Case RBLContado.SelectedValue @@ -1569,17 +1584,17 @@ Partial Class Bancos_PopIECompras ImporteMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal / tipoCambioPago - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 1 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal * tipoCambioPago ImporteMX = ImporteMovimiento ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If ImporteMovimiento = ImporteMovimiento.RoundSQL ImporteMX = ImporteMX.RoundSQL - TimpocambioGeneral = tipoCambioCompra + TimpocambioGeneral = If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) CveIE = rw.DataKey("CveIE").ToString.ToEntero If CveMonedaCompra <> 1 Then @@ -1617,17 +1632,17 @@ Partial Class Bancos_PopIECompras ImporteMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal / tipoCambioPago - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 1 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal * tipoCambioPago ImporteMX = ImporteMovimiento ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If ImporteMovimiento = ImporteMovimiento.RoundSQL ImporteMX = ImporteMX.RoundSQL - TimpocambioGeneral = tipoCambioCompra + TimpocambioGeneral = If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) CveIE = rw.DataKey("CveIE").ToString.ToEntero If CveMonedaCompra <> 1 Then @@ -1640,14 +1655,14 @@ Partial Class Bancos_PopIECompras IdCtaContable = CtaProveedor End If - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, ConceptoContable, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, ConceptoContable, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If If CveMonedaCompra <> 1 AndAlso (IdCtaContComplementaria > 0 Or UsuarioActual.CveEmpresa = 119) Then IdCtaContable = IdCtaContComplementaria If ImporteMovimiento <> 0 AndAlso (IdCtaContable > 0 Or UsuarioActual.CveEmpresa = 119) Then - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * tipoCambioCompra - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If End If @@ -1664,13 +1679,13 @@ Partial Class Bancos_PopIECompras ImporteMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal / tipoCambioPago - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 1 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal * tipoCambioPago ImporteMX = ImporteMovimiento ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If ImporteMovimiento = ImporteMovimiento.RoundSQL ImporteMX = ImporteMX.RoundSQL @@ -1686,14 +1701,14 @@ Partial Class Bancos_PopIECompras IdCtaContable = CtaProveedor End If - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, ConceptoContable, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, ConceptoContable, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If If CveMonedaCompra <> 1 AndAlso (IdCtaContComplementaria > 0 Or UsuarioActual.CveEmpresa = 119) Then IdCtaContable = IdCtaContComplementaria If ImporteMovimiento <> 0 AndAlso (IdCtaContable > 0 Or UsuarioActual.CveEmpresa = 119) Then - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * tipoCambioCompra - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If End If @@ -1710,13 +1725,13 @@ Partial Class Bancos_PopIECompras ImporteMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal / tipoCambioPago - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 1 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal * tipoCambioPago ImporteMX = ImporteMovimiento ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = rw.FCTextBox("TxtSaldoDeudor").Text.ToDecimal - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If ImporteMovimiento = ImporteMovimiento.RoundSQL ImporteMX = ImporteMX.RoundSQL @@ -1731,14 +1746,14 @@ Partial Class Bancos_PopIECompras IdCtaContable = CtaProveedor End If - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, 275, ConceptoMovimiento, Fecha, IdCtaContable, -1, -1, rw.DataKey("CveVenta").ToEntero, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteMovimiento, TxtObservaciones.Text, 275, ConceptoMovimiento, Fecha, IdCtaContable, -1, -1, rw.DataKey("CveVenta").ToEntero, CveCompra, -1, -1, CveProveedor:=CveProveedor2, ImporteMX:=ImporteMX, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If If CveMonedaCompra = 2 Then IdCtaContable = IdCtaContComplementaria If ImporteMovimiento <> 0 AndAlso (IdCtaContable > 0 Or UsuarioActual.CveEmpresa = 119) Then - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, rw.DataKey("CveVenta").ToEntero, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * tipoCambioCompra - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, rw.DataKey("CveVenta").ToEntero, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If End If @@ -1755,17 +1770,17 @@ Partial Class Bancos_PopIECompras ImporteMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = ImportePagado.ToString.ToDecimal / tipoCambioPago - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 1 Then ImporteMovimiento = ImportePagado.ToString.ToDecimal * tipoCambioPago ImporteMX = ImporteMovimiento ElseIf CveMoneda = 2 AndAlso CveMonedaCompra = 2 Then ImporteMovimiento = ImportePagado.ToString.ToDecimal - ImporteMX = ImporteMovimiento * tipoCambioCompra + ImporteMX = ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If ImporteMovimiento = ImporteMovimiento.RoundSQL ImporteMX = ImporteMX.RoundSQL - TimpocambioGeneral = tipoCambioCompra + TimpocambioGeneral = If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) End If If CveMonedaCompra = 1 Then @@ -1773,7 +1788,7 @@ Partial Class Bancos_PopIECompras Else IdCtaContable = IdCtaContComplementaria If ImporteMovimiento <> 0 AndAlso (IdCtaContable > 0 Or UsuarioActual.CveEmpresa = 119) Then - If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * tipoCambioCompra - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=tipoCambioCompra) Then + If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, 0, TxtObservaciones.Text, CveConceptoContableComplementaria, ConceptoMovimiento, Fecha, IdCtaContable, -1, CveIE, -1, CveCompra:=CveCompra, CveProveedor:=CveProveedor2, CvePersonal:=CvePersonal, ImporteMX:=ImporteMovimiento * If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) - ImporteMovimiento, ImporteME:=ImporteMovimiento, TipoCambio:=If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion)) Then MsgError = "No se pudo insertar la póliza" End If ImporteMX = ImporteMovimiento @@ -2557,9 +2572,10 @@ Partial Class Bancos_PopIECompras IdCtaContable = UsuarioActual.Empresa.IdCuentaGananciaCambiaria Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, tipoCambioPago, tipoCambioCompra) TimpocambioGeneral = TCImpuestos + Dim tipoCambioCompraValuacion As Decimal = If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) '' si tiene funcionalidad de flucturación con ivas, tomar tipocambioCompra If tipoCambioPago < tipoCambioCompra AndAlso CveMonedaCompra = 2 Then - ImporteMovimiento = ((MovimientoPagar.Total * PorcentajePago) * tipoCambioPago) - ((MovimientoPagar.Total * PorcentajePago) * tipoCambioCompra) 'Añadimos la diferencia de ganancia en la venta + ImporteMovimiento = ((MovimientoPagar.Total * PorcentajePago) * tipoCambioPago) - ((MovimientoPagar.Total * PorcentajePago) * tipoCambioCompraValuacion) 'Añadimos la diferencia de ganancia en la venta ImporteMovimiento -= ((MovimientoPagar.IVA * PorcentajePago) * TCImpuestos) - ((MovimientoPagar.IVA * PorcentajePago) * tipoCambioCompra) 'Añadimos la diferencia de ganancia en el IVA ImporteMovimiento += ((MovimientoPagar.RetIVA * PorcentajePago) * TCImpuestos) - ((MovimientoPagar.RetIVA * PorcentajePago) * tipoCambioCompra) 'Añadimos la diferencia de ganancia en el RetIVA ImporteMovimiento += ((MovimientoPagar.RetISR * PorcentajePago) * TCImpuestos) - ((MovimientoPagar.RetISR * PorcentajePago) * tipoCambioCompra) 'Añadimos la diferencia de ganancia en el RetISR @@ -2581,9 +2597,10 @@ Partial Class Bancos_PopIECompras If CveMoneda <> 1 OrElse CveMonedaCompra <> 1 Then IdCtaContable = UsuarioActual.Empresa.IdCuentaPerdidaCambiaria Dim TCImpuestos As Decimal = If(FuncionalidadFluctuacionImpuestos, tipoCambioPago, tipoCambioCompra) + Dim tipoCambioCompraValuacion As Decimal = If(PagoMismoMes, tipoCambioCompra, TCUltimaFluctuacion) '' si tiene funcionalidad de flucturación con ivas, tomar tipocambioCompra If tipoCambioPago > tipoCambioCompra AndAlso CveMonedaCompra = 2 Then - ImporteMovimiento = ((MovimientoPagar.Total * PorcentajePago) * tipoCambioCompra) - ((MovimientoPagar.Total * PorcentajePago) * tipoCambioPago) 'Añadimos la diferencia de perdida en la venta + ImporteMovimiento = ((MovimientoPagar.Total * PorcentajePago) * tipoCambioCompraValuacion) - ((MovimientoPagar.Total * PorcentajePago) * tipoCambioPago) 'Añadimos la diferencia de perdida en la venta ImporteMovimiento -= ((MovimientoPagar.IVA * PorcentajePago) * tipoCambioCompra) - ((MovimientoPagar.IVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el IVA ImporteMovimiento += ((MovimientoPagar.RetIVA * PorcentajePago) * tipoCambioCompra) - ((MovimientoPagar.RetIVA * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetIVA ImporteMovimiento += ((MovimientoPagar.RetISR * PorcentajePago) * tipoCambioCompra) - ((MovimientoPagar.RetISR * PorcentajePago) * TCImpuestos) 'Añadimos la diferencia de ganancia en el RetISR diff --git a/Bancos/PopIEVentas.aspx.vb b/Bancos/PopIEVentas.aspx.vb index 87c387537..d3cd9ce9f 100644 --- a/Bancos/PopIEVentas.aspx.vb +++ b/Bancos/PopIEVentas.aspx.vb @@ -1496,20 +1496,30 @@ Partial Class Bancos_PopIEVentas Dim CuentasContablesInvalidasSIG As New StringBuilder Dim TipoCambioFluctuacion As Decimal = 1 Dim FechaUltimaFluctuacion As Date = MinFecha - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFechaDocumento.Text.ToDate - Dim strFecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & strFecha & "#", "Fecha DESC") - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal - End If - End If + Dim tFecha As Date = TxtFechaDocumento.Text.ToDate + + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion + End If End If + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + + ' Dim strFecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & strFecha & "#", "Fecha DESC") + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal + ' End If + ' End If + 'End If If CveMoneda = 1 AndAlso CveMonedaVenta = 1 Then 'Si la venta viene en Pesos y se va a pagar en Pesos tipoCambioPago = 1 diff --git a/Bancos/ProveedoresAbonar.aspx.vb b/Bancos/ProveedoresAbonar.aspx.vb index 468b3e084..3f30f6b29 100644 --- a/Bancos/ProveedoresAbonar.aspx.vb +++ b/Bancos/ProveedoresAbonar.aspx.vb @@ -924,20 +924,31 @@ Partial Class Bancos_ProveedoresAbonar Dim TipoCambioFluctuacion As Decimal = 1 Dim FechaUltimaFluctuacion As Date = MinFecha - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFechaDocumento.Text.ToDate - Dim FechaC As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & FechaC & "#", "Fecha DESC") - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal - End If + Dim tFecha As Date = TxtFechaDocumento.Text.ToDate + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = TxtFechaDocumento.Text.ToDate + ' Dim FechaC As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & FechaC & "#", "Fecha DESC") + + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal + ' End If + + ' End If + 'End If + Dim DttPlantilla As DataTable = Nothing If ObjMov.GetPlantillaConceptos(UsuarioActual.CveEmpresa, CvePlantillaPoliza) Then diff --git a/Compras/RepCxP.aspx b/Compras/RepCxP.aspx index 07bd70a8c..666f8cd15 100644 --- a/Compras/RepCxP.aspx +++ b/Compras/RepCxP.aspx @@ -269,7 +269,17 @@
    - +
    + Moneda: +
    + +
    + + + + + +
    diff --git a/Compras/RepCxP.aspx.vb b/Compras/RepCxP.aspx.vb index f22fe1d7f..8ebbfe1d9 100644 --- a/Compras/RepCxP.aspx.vb +++ b/Compras/RepCxP.aspx.vb @@ -180,7 +180,7 @@ Partial Class Compras_RepCxP If txtFechaVF.Text = "" Then FechaVF = "-1" Dim TipoAgrupacion As Integer = IIf(chkAgruparMes.Checked, 1, -1) Dim TipoDocto As String = If(DdlTipoDocto.GetSelectedValuesM = "", "-1", DdlTipoDocto.GetSelectedValuesM) - If Mov.GetCxP(FechaI, FechaF, DdlProveedor.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, DdlProveedoresClasificaciones.SelectedValue.ToEntero, -1, DdlUsuarioResponsable.SelectedValue.ToEntero, DdlUsuarioRegistro.SelectedValue.ToEntero, DdlEstatusCompra.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, DdlGrupo.SelectedValue.ToEntero, + If Mov.GetCxP(FechaI, FechaF, DdlProveedor.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, DdlProveedoresClasificaciones.SelectedValue.ToEntero, DdlMoneda.SelectedValue.ToEntero(), DdlUsuarioResponsable.SelectedValue.ToEntero, DdlUsuarioRegistro.SelectedValue.ToEntero, DdlEstatusCompra.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, DdlGrupo.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, RblTipoCambio.SelectedValue.ToEntero, TCEspecifico, FechaVI, FechaVF, FechaCorte:=txtCorteA.Text.ToDate, CveUsuarioConsulta:=UsuarioActual.CveUsuario, CveTipoProveedor:=IIf(DdlTipoProveedor.SelectedValue.ToEntero = 3, -1, DdlTipoProveedor.SelectedValue.ToEntero), Comprobaciones:=DdlComprobacion.SelectedValue.ToEntero, TipoDocto:=TipoDocto, TipoAgrupacion:=TipoAgrupacion) Then GvCxP.DataSource = Mov.DtResultados diff --git a/CxC/RepCxC.aspx b/CxC/RepCxC.aspx index 374b50382..5baadfd42 100644 --- a/CxC/RepCxC.aspx +++ b/CxC/RepCxC.aspx @@ -335,9 +335,20 @@ +
    + Moneda: +
    + +
    + + + + + +
    -
    + diff --git a/CxC/RepCxC.aspx.vb b/CxC/RepCxC.aspx.vb index e625f98bc..d7bda4f73 100644 --- a/CxC/RepCxC.aspx.vb +++ b/CxC/RepCxC.aspx.vb @@ -203,7 +203,7 @@ Partial Class RepCxC "-1", UsuarioActual.CveEmpresa, DdlGrupo.SelectedValue.ToEntero, DdlResponsable.SelectedValue.ToEntero, RblTipoCambio.SelectedValue.ToEntero, TCEspecifico, If(DdlTipoDocto.GetSelectedValuesM = "", "-1", DdlTipoDocto.GetSelectedValuesM), FechaVI, FechaVF, FechaCorte:=txtCorteA.Text.ToDate, EstatusCliente:=DdlEstatusCliente.SelectedValue.ToEntero, CveUsuarioConsulta:=UsuarioActual.CveUsuario, CveCobranzaEstatus:=CveCobranzaEstatus, CveClienteClasificacion:=DdlClienteClasificacion.SelectedValue.ToEntero, - TipoCliente:=DdlTipoCliente.SelectedValue.ToEntero, AplicaAnticiposPagados:=AplicaAnticipos) Then + TipoCliente:=DdlTipoCliente.SelectedValue.ToEntero, AplicaAnticiposPagados:=AplicaAnticipos, CveMoneda:=DdlMoneda.SelectedValue.ToEntero()) Then GvDatos.DataSource = ObjMovtos.DtResultados DtDatos = ObjMovtos.DtResultados diff --git a/Ventas/ClientesAbonar.aspx.vb b/Ventas/ClientesAbonar.aspx.vb index 95fe80359..6c53d676e 100644 --- a/Ventas/ClientesAbonar.aspx.vb +++ b/Ventas/ClientesAbonar.aspx.vb @@ -800,20 +800,31 @@ Partial Class Ventas_ClientesAbonar Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) Dim TipoCambioFluctuacion As Decimal = 1 Dim FechaUltimaFluctuacion As Date = MinFecha - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFechaDocumento.Text.ToDate - Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal - End If + Dim tFecha As Date = TxtFechaDocumento.Text.ToDate + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = TxtFechaDocumento.Text.ToDate + ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") + + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal + ' End If + + ' End If + 'End If + If ObjMov.GetPlantillaConceptos(UsuarioActual.CveEmpresa, CvePlantillaPoliza) Then dtConceptos = ObjMov.DtResultados End If @@ -2554,24 +2565,35 @@ Partial Class Ventas_ClientesAbonar Dim CvePrePoliza As Integer = 0 Dim MsgError As String = "" - Dim ObjIE As New ClsBancos + 'Dim ObjIE As New ClsBancos Dim FechaUltimaFluctuacion As Date = MinFecha Dim TipoCambioFluctuacion As Decimal = 1 - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFechaIncobrable.Text.ToDate - Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal - End If + Dim tFecha As Date = TxtFechaIncobrable.Text.ToDate + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If - ObjIE.Dispose() + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = TxtFechaIncobrable.Text.ToDate + ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") + + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString.ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString.ToDecimal + ' End If + + ' End If + 'End If + + 'ObjIE.Dispose() CvePrePoliza = ObjConta.AddPrePolizas("Bancos/ClientesAbonar/SaldarI", 47, 0, 0, 1, TxtFechaIncobrable.Text.ToDate, TxtObsSaldarIncobrable.Text.Trim, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 6e4e7d7d9..1600c6e4d 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -6285,7 +6285,7 @@ Partial Class Ventas Dim ValorAutorizacion As String = UsuarioActual.Empresa.Funcionalidad(595) 'OBLIGAR PAGO DE CONTADO SI EL CLIENTE NO PERMITE CREDITO - If UsuarioActual.Empresa.Funcionalidad(570) = "1" AndAlso Me.PermiteCredito = False AndAlso ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem") AndAlso CveVenta < 1) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot") AndAlso EsCreaApartirDe) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) Then + If UsuarioActual.Empresa.Funcionalidad(570) = "1" AndAlso Me.PermiteCredito = False AndAlso ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem") AndAlso CveVenta < 1) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso EsCreaApartirDe) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) Then RBLPago.SelectedValue = "2" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) @@ -14611,20 +14611,31 @@ Partial Class Ventas Dim FechaUltimaFluctuacion As Date = MinFecha Dim TipoCambioFluctuacion As Decimal = 1 - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = Now 'gvr.DataKey("Fecha").ToDate - Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") + Dim tFecha As Date = Now - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal - End If + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = Now 'gvr.DataKey("Fecha").ToDate + ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") + + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal + ' End If + + ' End If + 'End If + If DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then 'SI LA VENTA VIENE EN PESOS Y SE VA A PAGAR EN PESOS tipoCambioPago = 1 tipoCambioVenta = 1 @@ -23935,6 +23946,7 @@ Partial Class Ventas For Each Dr2 As DataRow In DtContratosSerieDetalle.FiltraParametros($"ConsecId = {Dr("CveContratoDetalle")}").Rows Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, factura.CveEmpresa, CveAlmacenExistenciasContrato, Serie:=Dr2("Serie").ToString(), FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1) If Existencia < 1 Then + GuardaLogAD($"El producto no tiene existencia: CvePS:{CveProducto},CveUnidad:{CveUnidad},Cantidad: {Cantidad},Existencia: {Existencia},CveAlmacen:{CveAlmacenExistenciasContrato},Serie:{Dr2("Serie").ToString()}") Return False End If @@ -23947,6 +23959,7 @@ Partial Class Ventas Else Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, factura.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1) If Existencia < Cantidad Then + GuardaLogAD($"El producto no tiene existencia: CvePS:{CveProducto},CveUnidad:{CveUnidad},Cantidad: {Cantidad},Existencia: {Existencia},CveAlmacen:{CveAlmacenExistenciasContrato}") Return False End If @@ -24719,24 +24732,34 @@ Partial Class Ventas Dim CvePrePoliza As Integer = 0 Dim MsgError As String = "" - Dim ObjIE As New ClsBancos + 'Dim ObjIE As New ClsBancos Dim FechaUltimaFluctuacion As Date = MinFecha Dim TipoCambioFluctuacion As Decimal = 1 - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFechaSaldarVenta.Text.ToDate - Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") - If drr IsNot Nothing Then - FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate - TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal - End If + Dim tFecha As Date = TxtFechaSaldarVenta.Text.ToDate + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion < tFecha Then + FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion + TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = TxtFechaSaldarVenta.Text.ToDate + ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") - ObjIE.Dispose() + ' If drr IsNot Nothing Then + ' FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate + ' TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal + ' End If + + ' End If + 'End If + + ' ObjIE.Dispose() Dim IdCtaContable As Integer = IdCtaContClientes @@ -27719,20 +27742,29 @@ Partial Class Ventas TipoCambioFactura = TxtTipoCambio.Text.ToDecimal If DdlMoneda.SelectedValue.ToEntero() > 1 Then - Dim ObjIE As New ClsBancos - If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then - If ObjIE.DtResultados.Rows.Count > 0 Then - Dim tFecha As Date = TxtFecha.Text.ToDate - Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) - Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha > #" & Fecha & "#", "Fecha DESC") - - If drr IsNot Nothing Then - TipoCambioFactura = drr("TipoCambio").ToString().ToDecimal - End If + Dim tFecha As Date = TxtFecha.Text.ToDate + Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) + If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then + If UltimaFluctuacion.FechaFluctuacion > tFecha Then + TipoCambioFactura = UltimaFluctuacion.TCFluctuacion End If End If - ObjIE.Dispose() + + 'Dim ObjIE As New ClsBancos + 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then + ' If ObjIE.DtResultados.Rows.Count > 0 Then + ' Dim tFecha As Date = TxtFecha.Text.ToDate + ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) + ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha > #" & Fecha & "#", "Fecha DESC") + + ' If drr IsNot Nothing Then + ' TipoCambioFactura = drr("TipoCambio").ToString().ToDecimal + ' End If + + ' End If + 'End If + 'ObjIE.Dispose() Else TipoCambioFactura = 1 End If From 192647aabe69943aba02747416e83bd289316eaa Mon Sep 17 00:00:00 2001 From: rakcsle Date: Tue, 21 Dec 2021 20:42:42 -0700 Subject: [PATCH 6/9] Carta Porte Manual --- App_Code/ClsClientes.vb | 3 +- App_Code/ClsGenerales.vb | 15 +- App_Code/ClsPaginas.vb | 1 + App_Code/Timbres.vb | 33 +- Bin/GoCfdi.dll | Bin 392192 -> 430592 bytes .../Grales/Formatos/CartaPorteTimbrado.rdlc | 273 +++- Inventarios/CartaPorteManual.aspx | 886 +++++++++++ Inventarios/CartaPorteManual.aspx.vb | 1341 +++++++++++++++++ Inventarios/TraspasoAlmacen.aspx.vb | 2 +- 9 files changed, 2489 insertions(+), 65 deletions(-) create mode 100644 Inventarios/CartaPorteManual.aspx create mode 100644 Inventarios/CartaPorteManual.aspx.vb diff --git a/App_Code/ClsClientes.vb b/App_Code/ClsClientes.vb index 23ef846b9..9845e2643 100644 --- a/App_Code/ClsClientes.vb +++ b/App_Code/ClsClientes.vb @@ -1463,7 +1463,7 @@ Public Class ClsClientes #Region "D I R E C C I O N D E E N V I O " Public Function DireccionEnvioAdd(CveCliente As Integer, EnvioDireccion As String, EnvioNoExt As String, EnvioNoInt As String, EnvioColonia As String, EnvioCiudad As String, EnvioEstado As String, EnvioCP As Integer, EnvioContacto As String, CveUsuario As Integer, Estatus As Integer, Optional CveClienteSucursal As Integer = -1, Optional EnvioDepartamento As String = "-1", Optional EnvioTel As String = "-1", - Optional CvePais As Integer = -1, Optional CveEstado As Integer = -1, Optional CveMunicipio As Integer = -1, Optional CveLocalidad As Integer = -1, Optional CveColonia As Integer = -1) As Integer + Optional CvePais As Integer = -1, Optional CveEstado As Integer = -1, Optional CveMunicipio As Integer = -1, Optional CveLocalidad As Integer = -1, Optional CveColonia As Integer = -1, Optional CveEmpresa As Integer = -1) As Integer Dim Retorno As Integer = -1 DataAdapter("PA_Vta_ClientesDireccionesEnvioAdd") @@ -1488,6 +1488,7 @@ Public Class ClsClientes .Add("@CveMunicipio", SqlDbType.Int).Value = CveMunicipio .Add("@CveLocalidad", SqlDbType.Int).Value = CveLocalidad .Add("@CveColonia", SqlDbType.Int).Value = CveColonia + .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@CveDireccionEnvio", SqlDbType.Int).Direction = ParameterDirection.Output End With diff --git a/App_Code/ClsGenerales.vb b/App_Code/ClsGenerales.vb index 3f019b83f..f9f6cf177 100644 --- a/App_Code/ClsGenerales.vb +++ b/App_Code/ClsGenerales.vb @@ -3617,8 +3617,7 @@ Public Class ClsGenerales Public Function AddGralTimbre(TipoDocto As String, CveSubProyecto As Integer, Fecha As DateTime, CveUsuario As Integer, CveEmpresa As Integer, Optional Serie As String = "-1", Optional Folio As Integer = -1, Optional Estatus As Integer = 0, - Optional CveEntregaAlmacen As Integer = -1, - Optional AplicaCP As Boolean = False) As Integer + Optional CveEntregaAlmacen As Integer = -1, Optional AplicaCP As Boolean = False) As Integer Dim Retorno As Integer = -1 DataAdapter("PA_Gral_TimbreAdd") @@ -3663,7 +3662,7 @@ Public Class ClsGenerales With SqlAdapter.SelectCommand.Parameters .Add("@CveTimbre", SqlDbType.Int).Value = CveTimbre .Add("@TipoDocto", SqlDbType.VarChar).Value = TipoDocto - .Add("@FechaI", SqlDbType.Date).Value = FechaI + .Add("@FechaI", SqlDbType.Date).Value = FechaI .Add("@FechaF", SqlDbType.Date).Value = FechaF .Add("@Estatus", SqlDbType.Int).Value = Estatus .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa @@ -3785,13 +3784,17 @@ Public Class ClsGenerales .Add("@CveCamion", SqlDbType.Int).Value = CveCamion .Add("@FechaEntrega", SqlDbType.DateTime).Value = FechaEntrega .Add("@FechaLlegada", SqlDbType.DateTime).Value = FechaLlegada + .Add("@Tipo", SqlDbType.VarChar).Value = Tipo + .Add("@Orden", SqlDbType.Int).Value = Orden .Add("@FolioReferencia", SqlDbType.VarChar).Value = FolioReferencia .Add("@Referencia", SqlDbType.VarChar).Value = Referencia - .Add("@FechaLimite", SqlDbType.DateTime).Value = FechaLimite - .Add("@Orden", SqlDbType.Int).Value = Orden - .Add("@Tipo", SqlDbType.VarChar).Value = Tipo .Add("@Estatus", SqlDbType.VarChar).Value = Estatus .Add("@Distancia", SqlDbType.Int).Value = Distancia + + .Add("@FechaLimite", SqlDbType.DateTime).Value = FechaLimite + + + .Add("@CveEntregaAlmacen", SqlDbType.Int).Direction = ParameterDirection.Output End With diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 4bb7de6c7..fe926d470 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4944,6 +4944,7 @@ Public Class ClsPaginas PaginaDict.Add("/Inventarios/CatUnidades.aspx".ToUpper(), 2056) PaginaDict.Add("/Inventarios/EntregaAlmacenRuta.aspx".ToUpper(), 1320) PaginaDict.Add("/Inventarios/RepEntregaAlmacenRuta.aspx".ToUpper(), 1319) + PaginaDict.Add("/Inventarios/CartaPorteManual.aspx".ToUpper(), 1321) diff --git a/App_Code/Timbres.vb b/App_Code/Timbres.vb index a8263dfde..4183d3016 100644 --- a/App_Code/Timbres.vb +++ b/App_Code/Timbres.vb @@ -119,7 +119,8 @@ Public Class Timbres Dim Distancia As Integer = 1 Dim ObjGrales As New ClsGenerales - If ObjGrales.GetGralTimbre(CveTimbre, "-1", FI, FF, 0, UsuarioActual.CveEmpresa, -1) Then + + If ObjGrales.GetGralTimbre(CveTimbre, Obj.TipoDocto, FI, FF, 0, UsuarioActual.CveEmpresa, -1) Then If ObjGrales.DtResultados.Rows.Count = 1 Then Dim DtMovimientos As DataTable = Nothing @@ -144,20 +145,20 @@ Public Class Timbres End If If ObjGrales.GetGralMovimientosDetalleTimbre(CveTimbre, UsuarioActual.CveEmpresa) Then - DtMovimientos = ObjGrales.DtResultados - Else - TieneError = True - _MsgError.AppendLine("Error al obtener Movimientos") - End If + DtMovimientos = ObjGrales.DtResultados + Else + TieneError = True + _MsgError.AppendLine("Error al obtener Movimientos") + End If - ObjFactura.DtDetalle = DtMovimientos + ObjFactura.DtDetalle = DtMovimientos - AplicaCP = Boolean.Parse(drT("AplicaCP").ToString) + AplicaCP = Boolean.Parse(drT("AplicaCP").ToString) - ObjFactura.CveSubProyecto = drT("CveSubProyecto").ToString.ToEntero + ObjFactura.CveSubProyecto = drT("CveSubProyecto").ToString.ToEntero - ObjFactura.SetSubProyecto() - ObjFactura.SetSubProyectoMatriz() + ObjFactura.SetSubProyecto() + ObjFactura.SetSubProyectoMatriz() If AplicaCP Then @@ -331,15 +332,17 @@ Public Class Timbres _MsgError.AppendLine("timbrado son detalle de productos") End If - End If + End If - Else - TieneError = True + Else + TieneError = True _MsgError.AppendLine("Consultar datos de timbrado") End If ObjGrales.Dispose() - + Else + Timbre = Nothing + _MsgError.AppendLine("Consultar datos de timbrado") End If Return Timbre End Function diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll index 9ccff8cbe33fba3848dd91e71a5e7b23dd4aa750..72be2e8c0fc63b18ce9ce4e644e5367574595441 100644 GIT binary patch literal 430592 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ª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%0DptT^u;yamkTnp zkt;QH@LdVUqXEAkcfXIh-%q&TPwMxx`uDD8SwF?C%l>DXlPsuu4kr0T&Cy+gaiJG^ z29LT^Jq&;#K&~XRzfXjJ5rKBliou|JGa`!nTkG~eko1iAN1~+NDs7u_Ti=C^t^R?G zYt{Jf69O(fp>L#ZJ^l~sDB01FmkK*Tih>MnLoV?Eb6i&Nj^(P#A{nlSBIe2jfd~FK zUlE%fQd9nB>O(pr$KBV@=px@ky7M~wEjMLv&Rb4cd|u4wZ_lRxcS7hM3my=4KdPUH z^z*Q8?tVlA0@|na{Rx%&yy!e50(_(CJWfK{E~)G}f{@ZPWmag~T&}|t>&gR_KBI8s zhJse|KJDlf14Qd@qxU!2NBj|YBC^V26^758Bo3BHWkF924Yn6x(bAj-ds{#Gr@@4d zA9z=;;gecr@b{EH@%OxPb~_niUqodG@;4)C#Xfc#~E{AGYj zuXST7?V{BC6(P$q-E!DB-+svwTR+xm9-UKzCZ3rgA8c!LG#r7F6T!&ym_$tek}A+` z3K;6qc3U?iFL{J5su_HI5Win99pVDYmf~*AsHZ_)mi_dFu_K%Hy{?ig62{2ru1n9Q;60*<_@C zT*5C(JBpAs?_ggZt9v4LNwyOxx8VuL>aQl+7x@ zqUd}U1fd;St<^s6iT%slYyl;Ca^#0lRVX$iNy!v z#1Z9*O=NG7B=7{1Q(}L-6<~|}VoKI{Gn2GPj1DrT~d{$GMEqWqHuW4%ZFiwp4WO|M|=vUkwhca`jVJM7RN|jkJ z73G%xkY^S@o}+K&pe}15>ET8Q%PO55QdGA0@NKK;{h}!7PC-P?*b0>Su*BferZ3FZ zc|-zJW+C`?=u5=Wc34kJioPYT<9JB1!JfFg!`=nQ2JuORbzbUhXHb`kwS-gT{lNj) z47Y~?H0@+b)h%D!?u+*I1xc2Uu0V;XRgz3;!t*CESpPy%s)-oqqJZ@7Q#cg=g~=Dz z8+bJ$sS|gicM3~0fXxw`ZfRcanDZ7EjJK1;Olj8hr^cdKbq`@aZ6g=UPVz)yZ{{c_ zD#@TkN+IZ@^l>(E_#onO?Z;Ine;P`+8#bL2aPKL{CCU0h>t{}=Bak_0%7|n`gGU1x zX!uq!-jk=+nT7@ZAVOg6WM8GbvXQ|J&C!v8IGTcq8MoX((n@2uezGWa+V(O{r)5^Q zp6tdXp4zfJ5Y7s{&jz1INkQ=ppC0#lO&6cd`)9nRk29e=CTT7&o>s5MC#nY=jRMNlQ$l+{; zvg$R6X(z9{O<7yH9XOks+zwJW&?_h;DDDaLwmu9^_IivP!r`-p#-)_9OV{#(1Cu)* zVrlNm!k)mvfW$WUE@tK_=>zN*DD#a+RdvmjCEO#cN0D&eQD%dl_Fkn$Vt7)&dSJ#xU46r%0Qi zxT9`P)PXg{l?fID5iP>AIWie313-2*jhM@-0}rZ;PZ1)|@ zuF1Fl@E;dP=4Jy>xGo}$xHyl4_Qj$`{@|clMl(;T*#NPX_{+uRpP$wwgD^F{?;!BF zGR(&r%z~9VW#AvF-CW7{VMwBvowK|kaqH*an)fD2#O8j;BGtQc=ANubEyQeQ@bXS8Ux zQ1IM*YX`DW|7h6w`-*ds!x-M>nuWmNE;f}q_jC+Ja967}S+}z$jxe=l|3;e+ac7*LT#o0w# z{fgo&XxQwohwfBEq4`@Pw4Kl`qY(s|ZM6Qu@H5SRW>(|bv&}q3@dL~HmNZeitv?IL z^F&za4eYQdIDcq!F*=CWDSY#8Z+s2M3t8k+Isq~C%Mp3=7~IE&$GGD0CSo=*9kzU; z{m%F74#(b)+5EG~=p|)tU&Rj?M~!Ep!WjFacG)(bhla>+sL}| zk0Lk_^_Ekj_{o;2X$G9#d^R1N6)_gIP6}^L4hF85s;mI28XjBHYx>)n7Q^IjI>W?Y z9bSla$LatAto75w^GQB1!*B|hMrMhR(u;%0zI@oUeLws>WP=z9*Nvy~4bXu71MMl@ z=s4ScD17=YV!HkT8s37~0MBMW;10lokM@sc) ziSO;lO9f94vhfXrg)LsrYjM!s`KV3y;lEl8oXyyAj{uvFp%T=#chYx7Wq2M)1rv#d zU!HRmi$Yfvi^^X2G!J2Y)pWqk?>Jy%e! z-@FL!F*jGzjpqE#y3qBiV2Ymtn|1d3IrXl)zIACF`uYX6ZM!k{-1gB3D#A#yXQ)c= zhYE7reZi^J;6AHq->P9qG$&}n5Z=V77TWj@cKg$P9wUJZ>y4FA$gwR>>s~F%w zx~y$va3sNQhYeakS9J2M=_rvZQ-hx~x?Q^XWJQyaCJY-`GbkNMPG2W91d4*FID{VE z64Lkj&&Uo|R(9mY@$Ey&wmVCp%!3pJouz_%d>dJa8Y7UqoxvaQ2NE_-U65mnkcn)8Iwkt8$Avb`m` zXOO8&-ro#4_ugI}9^j<^qF;c&cB24}LS0GL6`vgtmgR-&<`aMaMu8ojq8Sv#!f|a$ z?DVGHDEzLIHoM{QCvF@Lqti!&V)3uvC?KPgYFQvgaTP8Hi8!iS*&$wr`cbBgRU&|dt{~gI~xQ1W~@B(0VkDoT))Mqw7n`l zup}nN0LKtdTN=)qjFsqA?XHBf3$S{nx0e$=qEUm}S*O~u>|h7v$$6w;f_@Pl?kMP8 zhy{Wf5h>U}z@xf}=d9gqFCiE^tBApu)ixO??5uJyn?G7kxRJ4iHi5>kvm98a5u0#Ukpk|=Y?jzSrYKhJd?W3If(-9>}?v0vfCd?%YwXi zf>VPsaBfR)_S36$3>GU#7#)DSjH3grQBawzX@G80r}ohPT;NfL2ACzpd05K3Nq zee=396nRob4j_w2n<^==>#Ba^nIqY)zVD4>ie8xN|ib74>H~=!hwH_;0~} zHl{obb7~p)4b16AxdSU5CJrhlS+DDjNk*26C&GSsVh)^l^cS~Gpf3SyC*N|$;b7L z434h^FY5C}eY5S)uZYAF?0?$EnWSZUmXX8;?=(kI)g z1NhKr9PTwf;T$rY+|XYlDX}Y7^@&76FX`LcE&{?fh$5@WuS2W{f~U-yGWBY52A-vL z@5YHXmX*Gu^{pETK5l=M2zj;!LrCud(jrD7?Hcl;oG8vGyz2)f4UX&Quzo%-@f-i{ zp6p3JanJUqpSh=Zbv|{^@5y@Z-aH$}v#oqtl6#xTh#*?IA!32L90Z^0wkoy}|3{4* zrGdD&(pJ~ZWDCs2qQXeNBJ4wGRk@N$EN0pND`G}e7AJ&EwNN71JEt0K!1$;UZVU^a zM8xxiUQiFSG0V=B5Xa~(8<(BCR4t|NqpisPJfV7uO4>W47Jv+2KXDPRk4Lkfo>Q-s zB&rF;748x$cCfRBs6?;>F@$Ii?)9HCHkS@uRGITCmAifPP_*aTB|_lfb5hZfiD39h zjoQpa>PVR zLxgGz63>)?ZL&KqHRm1Tk z{z>pZ1*NS!^?gD=uLQxfXmnVNR8XF+%`RIGUKK7`p~9{_V>N5{gMC&zI##n&M7%1K z=$JHp@DL@;>ScKc?tIJMwo|DGdX-X{-LHtvqU@l0viB9Y2^tB820iL&T43nu^PNv$ z70dRsMpx~pvuh`J%hF3;)oWumf{|X6^*Wcms(BwhM$2BO8Vq>pfFZK< zk}}IBD@bK!LJc&u8fE=Py~Fx>Q@^RXq`ylN$HDVS|3POROa+vEX6*-F7hD(?OKNo~ z_=sj5*;CV;`hJ34)~hec_cfI^m}EM9mNei`t30bqGx2~gtyImVwDmLii9#&RIP%#q zsfQDdRq$aQo}%60!<`a2s%7dJI%s?1?&KLof$vur1%y6b+Y2K$(nCUnjlZI%1#UNri)OhI*HJf z*_@<#U_mybC#L1DN#>b*OSKhCHj~}so8rU6st1)#%hAI%0!Q`flk#1hmR|xh+4>Fk zbVjQM6L_JReHYlc$E40>d3H{TKg#gMv-j(-(GGIL%bRGgfSm}F7Rg)#!JF|}>`jM8 z+swfg^gm(8 zO_WE8O^+$3ZwOU!fsQ&YC06CeuIV+HA^GF#X;w9W)Csnx$Bf~Hx{)|BrZ9|nC1(sW ztuX=x*a44>H0zn+0G9f&u1O)0|7mSnMc##A>*s^u)zhj^V!PxL#t0@~7<#hJ3IW0~ zJ+Fk1Zh`YTYd;e9KwEWrPd&M9SYJyQQlmf!$Jer8zMF`*7^S$`Wy?HI1JQkE+OwXX z>Dju+gfp97jI*rK2{XtXM(VFSyiNtJ8GSM~sQ8-bAX4~OWJsDRwGr5j;w6HIPOG0t zF-GZkpq@{OP8290LTBgoo zVs4UH2d=X7*ui&XmVZLO`^CUn2M^v>)DSd>!DY(`Hh8-CF2h)}?dt-u)kyoF`i3WA z5@)Nuq%i}{8sz!CJ6ZhUL)tK~e=lf(@S>FTS=BU}B`o)Xp1dsjy`;Ce(@$vo!q+&Y z1y%Iy+BR5#xDd6^0?NM@fBM`ZMPG^*u$>`~+Cs7A7%9%DNe)r)%SQRk(o zPP{Mb&k8f25=Ox!cCqJN?`{jFRmIGwIemy+irT zD-`nyVSpC1-UY{!Ef{4pkG^)s7*ciOTwpGtj5;$o)asI1ezkW+^5ujeW6rTN=JY1+ z{`LpHutgY0a9=zosXDv}HRp!1Z_y_3X0X?p-{n2|c zhE&0JMqa>m-QK2pinRpPV4>m0B%ByLlGUvlz-n|0dP`Lvj4W)66(Y z-H^8g7BPBUq0yEH7tk4fpntGkg9ox&A%H8AHo+d|1K4o`8_fp~S&$cQkZ5$apABa- z(@0P_791v^cqF^ejM-2xolkj23(z%G65M;rt&XzF2GbEXv)*^KbubIIXoSq2n?IMH zJepJH5ZrK;1N2S5z*dQ2$Jd<^=5fP=V++SZJ4Cc=5|#}JWImy^$P4t6o6%>pAxv(7 zHAC8=ra>e;NxyoSF6zBMnFoC!C%hhx>IAVAg4jbyb}T8Q=J;DMWd10$vcte#SWA?& zq^wp;m^qpSzlW?T`OK~6-s$Y-R~85EO{`A%m9>v3TXqaj!Myt}ezVc>1PBOR;~i8I zJet)j5TZM1)x#$|?ag|QRKgOYFZ>NbCKYGa+<#hgXAbs^1G<@foa{?5W%6mV6nF7J zg~snDBZK|V=}C5oq~ad#OU6gc2v^|DLMZiq{byLd5sYy`YLgJxVO?PGds>J?=3?WD?@U)R0?JcbG1I{m=WQ)4zWXizY` ziP)TPmxTn#kk64iN}CUl=&k)@L3&!XxF^{^dszEpS!4J}Y7`$yjf3y;k$fa)EdF`c zXg-n}&qop?iucetreIGe+`&W~YQ9Cdw{ITeV6TTO9vKkamP=p=5h1r!i!O7p2Q(mx4Q@05G-o@wfrzM>A*uy49PO@vME3 z)<0)shB$umSo%$t)9M%j2VB;vBmnfBn?o{SUw2 z_#aMv`Jev6XU4yL;kn?pa;Y@FRl984^kMgIzE1LMi~By~epj}Yx0EI)w^L&M$L!Bf zZXI(4w@m88mfOa*Y}s;KP}(v%K6cyWmi^nNYTJ}%ciW_XPwwBQ_VsDYrwOMu-m_3^2- zskgUGeSYeV{oD3$8y{EQv7j{d#?<<^fMn{8o#m~3eOqnZRu1-W+ZF@@S?@H)o$BxI z{o8c$d;*nQ)PPpz}U{I*82W!yIWt-|C7Ko?y$Rm+xDQuBQ>KxJ2XHmBXm!W zGb!UcLE7G_^*=66js>>?=cLBYA3fh8tdDOI`p0h@D^1}e5{QLOU%KTkVAiN zsOx{aYiy^Wn`-^gBDj;{scN zwcej<{iG1l`ikHYS*RQ{yKg&GG*!E2?2gH))>o%mKfPtk{@tywjq7K3>*v**8X6Ze z9fSvHb@zJ@*`G)3&!O!ih4Jxm_pS9E2kKY(qW1JhU9WE!g{VQjQkzWayIoiD<_31IKOGObHKaLqi|mx?SYPKw7^_H(Pd#TwCkz|6dmpe#jByRO{ER>mPEQ zCMprvl_vL%k8Pc5{g&W#h~E9)nK6x?-p9taO^TRcZb1k=jZcUZMJD=x|JL!Xu!(+^ zN?Y$4+cDMpJtpHDaJqV$T7QiHYvO{b_byMmv3`oOJNel9hWq`^?RS<+AC&mmSyJJB zW1`L0H$j4MAq4K6`ncdwhkB+l?{wU}Z=c{}=;PbQG~tsIf^w?$t*O?x^?UMmeWL;( zsEgh2)pl!IlK*L3?!hi2zV^!z-h8+Y;?b`f2UZJBywQrO($ zUW_gNWf&g)7O!3Ep6p{6Lb-7<;KPiZgAm!DAO2Z^~ibh2mw@tPF@>J^w^>h+8`>&>2 zUy?vl8PSg;4O)_ncfve;Aan`xsoGQx^1ln&;wf=W~*a=74 zXK6rbgDv~Ub|E7XoWi1}WWU;HFyB=px0eOdcXz+HuCcf=d_jnqTCYtaY}adi((EEM zCnr=S1aIp$G4%dP$PInNn=RibHeOeqZBy$zcCSz9|EcxeFrf+K-S7PnGGcu9dtXGW ztwZ1{jEb9j?{D29Y^t6<>3;{ukGmJ|yBF{M_|$t6*xz(ayX6j%kHZ`q)9JSNHMyuG zuze?UrNY0%SN;?F+`FmT!LhqcOd@OaUgaDf!r$6s@e_8kBC_8i~l_{X<7zMbYD-%j)G694#iiEp3b zAKyO1w*~(3ZGmr#{Nvjq-&Xm@w^hEq%Rj!oD^a$8-_#ND(f)mt`}avwl=j`dvwWL) zao^PXjI0+?=KAH^q+0js*HlenkcWEv7`(G@(!M-we;!1oN`>Dxwf-rQqtGXDxcj|t zY#%F$?4;6#&f1oJ;O7Xx9^==;{CeuBi4*|;yC-+LCwEV+^S^s?cL?2Y zhkt+9LHXP6_wVkIo|{_#5&b_Nh`_(K`@L^F_71Jv_rBwX{6&!k_W2jxH|BQVq$~f& zQ}6w;jB@1rmeSqWCkS%)-yNvr^`D8n=|83 zwOgE8mLisZ+!JVRv1P~j_|LubnV0W*;`e`O{2zVz)xWs=w{{*MKl0Uc|L1@IcmKO@ ze}A-f9^Z!VH#FgRRGppSL82O-h^oeW?jE9WB&y{5>t5lhs6w)r?%@fKN7bT!x>xyF zR3+XM)dvk|I2kqNdoR*VDY$J*px|oBZv9-|zTMXD+sC(T-*Vgbsr85T^lp97vU9sE z4nDoFM`hm4=))8Gc}_ob`Z=wiOZxeYeirnzsGn8+yt{2XVo2+geboP9e*GxFzRa(m z;@8je>lgU-YyA3se*FQz{*YgPqF?I)zsC7>C%*t{{YUuqMSeZVuOs~WngCt@48K0f zufO1w#KXoD4^NeMVeHA$k*VYCAQ^rVyZUcuS?&(|Z=$?YA9+2Ya^vM~G9C31wzJ<_ zZ&qZIMb*;SpV(8rlVXN3aG@_|IJ=hl>Y5b3q{K0($0K}B>?m&!JGs3) z?mmsH;NJ37_|$htyQ3W?=V?fvk*ojm@DO5mG+hNCA)wG8-5t5ZdOE?(cr|3sj?krD;bo?v*1rd6# zXAWT!>Tcu{;yZ^v`ABR|w}dEjD;!asYr~_FFKCOYJN83OGSJWsYSPi+`w*D(iHO|Z zm(_*KL4RdP>c)Nb`5(|MD-iqTnO%G0bEw{xWpTGbm9_LGoos?DqQ! z_xU;Zd(Qnn?S5Z!zdz%CFSy@}?)R$u{jPpb9dSx+Ql^m16VH?T#>Ep4Gf0n(eLKqA z>`8?EeRq_{!)GcPqk1hk%Uh=&)I%IK&JZd&g9yCrn|kIBIBrcJrqlm6K!eFG9m6#fhT#b1aDzviF4 z7Cl?>&sKZ`4_X6n`4?~TLi3|WTdj$3WUZDp!EF7oP1=uYl_6VBNC^x7wRYjZMqx)e zKN!CIo9%ahGivC|*3eJcpP#iqzi>xcf|@n3I7PB_y9m#Hyj@~7{0NR^(U~08+-`&F zL-*vDJUD;9-R0kJgY%^joPX4Q_mBL$^)H0){&D-=KjvNd^q;n${?ljxzXlwwU-3Qu zi*}iR;ahF}ijC^`?av?BpFgxef8zeE2lfZn(5UXTKX>0z9@DDbjmwxk{HWowoY%M8 zLDcWs<48vCn-CGVD|*oWO&hd-(+2Ig!=e4V_Pc)<8}R?#e)@m6Yy56l<3F|E{imqL z`fdK{y12n3ZvBq-Q>|p%Pe0Ip`hnO}!ETJSuEmQeC68A^P;kbn8Tdl~oh{fytHZ+G*k zwXUyQ^hw&%eSe=<9t1v z&1OmE#!8gCy%cPJu|9isft%CZle2WE z4xc@7>13m_RDHAF_}pVJR~t=1^8EED4j&PWlOJfmnyWQe7AtR`RmnT4Q*OU0KXDtt zeV`QVnps+V^z>?VX=SZZJ6vyEn|`sndZ{-5 zx$5d|>g3J~)i>6v%~jfNu2kl$dopTVn%sRsZ|lp=YWH%NTmQwyx0~wh@F%KQ4qvP` zuGi+P&BJrm=6s{(@O&5$U#KlF)RwPZZdM;FXOw@e>`@_1@b9tm?Aqe$TBG{>a&>LB zQCWPfe17f9Vr~AV>f4v~5?i>q%hZW>IJ$!-8|{mZ4`z6^xVR+i_hi??R!CYhzbBVNsz zB{9-mWwm;XjYiH!Ig;*@1e-+ov17NUXyj9r&qFBLTN5<$3CiIi2{|U{;>lZ6H1a9> z$x=|x)|OcQuEdf-NZ9A zGr!in#Y3ZCy#9D8xI2r7>KAVL7H$IHLXO4FqUhEH-NeqH7pu$FMx}9nLEgh#dT8W& z=+>p<=xl)~9t>0p* zku%kQT?+2Wn5&OBX6p;LOuNzZ($`ACk&O8{HLE=!ZN*e(PtKhRw|A!fvs-L6a<hgT;mald6it49IN&wRtggbmiu`(I66|SYuR}~ggUB0!Nx*41kUo8a>_cK+uIP0e1temaE8N%Bt7pn8G zRo=O!u12q}as*&vnr?B_&A?HL1hxMZ{i%=oO2A$a>?{S_SV=t*1b3E#+h?nd)!NnC zd}To?q;{8rJ5DcFu2;`DYS$|Z6{SZiDf>}pMC8sV4nK4Fi6hS_zEO$GbW3WE-LZw-o|ESEcFtYR2EJs1FLA;uV^lYeqn)9z!mnzM}3kq+TuP@7& zH^1s4Ssy=gP4)tx|DZPb^qExvu}?Um|+fBC{%ZE>O67(e=ykN5plDR}8jZC*ae z`qkCLFV~uDmBovzYYT$*#6oSg-cTrNb#+x?u}y``)~;y}p#9*Yo-S5T))uR_H=xqA z>|%+7V4vY_oahgLxZ_HtS$*mWO+}^g_LO@WpE+WjjkcdJ1M}zS2a0n zjY@Sny`&N$rE^jxc7IlS~%+gB9xA02L9pAUkMl!6a+gXO6tEb}fv)=ggsPOrf{ zd03&E1VLvG=IK)KxE~A-{mSCuE30b^8>rV-h5AOV(u_WZy#~R5IKCzLU;o*^{~tl= z7xlB)K_;FiE>tVR?_=eq=6t=eSi4dr%=zi3D^Jcp`P9*8k3CU6^31ajbauA3ta;M5 zgb}Go3bAFPD+tcd%<=!q?7#eHEB|)l4-V)R|4j<`ecckDQs}{M1$<`I@sH}n_h0^N zrRP5U*3x46dKl4uzbN(ovX;zs!oHus|MI1ihn~6r!{0x#^SQU0i^rQpT{mB=R#&4M zk5fZ!EH{s<$n$;&=FK5ER9__9}*bILwB{nkol^|eD+*OuowAkg$R<|SwnbzaxYueMNMuB_%&b1&N^Yu9VdN;9{tz4oPRODl_Y@pxWw|K68htiG-F zSfzQg)|}6)6E9QI9QwK|(ujF=c<0Nlu2l1iUD9!d=4$19rCE7hQb~ByH1o;VU9K-l z!X14)uL1wwmv7iUQ2naLlaGaDDPMP`a;>h-KDLi)xezA``I;3$yjWYV=1)^p!q>SD zDi^8?^tars2kjQ_3CT2`L)IRT2rzJbSC|1=ghwCu^_?}a zB#Tz+)4y$Y6NNG!mS{3j+_!dZzWQ1o>@QZDtM%qbYYPoYw#Jn;SyxBfdZSj&uXt+t zT0<%_uc{hbt+;I3o>H4SZ6-0LE*$6%8)quZ)z?K{4XVoAuQ$sL&ZjkM3;O8F?QkQ+lv|WRS6G}KJAvOwu+Z|Sf?v}#$5|#Ca#`UhNEb+g1DAj`Xd?EzOnz44?tjP+9HzqD`I`j7V z`yccTyI!ZkeWG!odCood-RTL>nEH&t)>jZ@i2p8wJr@@0G1fLBYF9-fO-*eG?Vwl~ z5DnpgJMa)buU+kml(VwqMCI>zBJgAap zXLLF2zk0}>hJ08WL?-LQ4>lip#PLPvblPOn;-H+eP+j`^`)P*3%yHJNxC3r;Ttn+( zHtjkoGR&Tb+$P6Eby>_+*RfQYLr@NH#4Yo6u}F1EOsy|w^ysBpGB#>UpqV$;zW!D5 zaZNgVNkt`%RwPcV&B_uIsqWen(z+tidXi&X{(zx!@NCV2)Z zFI86OCD5nu59zS7vap#cPr{Xx&Jg&wusIDubr7LSpho&f_$547FI44WM(P3D& zLpYg0Y9sOR^hd(8w4qd2y-YFHZZWI(xWsXNo0{pPbNOCsOk9Yi8`oJ$;FfbG+I@weUl4f-+*ygGuM8(CmE0?qwTO17* z=5**D8+}xSa7OrF7!ea(s;$&#D@#{KCIE(>_aQit!Mnwj*J#7g-w<$|c*}WGVZ>n| zC@u%i$c3;_AE5v^y>_kA5E`l`jz)t8NyDo(>4bjg;eajsw2!rFAhO5T(^rn0vg-BHEEKCm&p=xDLr9gxss&a!WZ z5OU}7-oxJV|D|x6=*e5a9WH|54g53JraX^B*w{l1f9C5y-P^wCpr@YH#P(pEwR;m& zhcNI6mpBt~#um3d7G`l;$^&C_NC~~|2i@;v25{6BnmpMSRrc3YHUhl$>;SZAtumYT=SRox|W^ zqvXj(%*hb2TyEB}A$nlKDLg0dypvoitEU!huPi)oJ3ZrD@NV{Sec%@%aa|a$@N9>n zy})DZKnYM3h=!v&X5st(e0QNJ$+bYjg^w3wVeySwka*-Iw$L(QjcJI`BjC29>WhU zXx86OOuLQbxZhAa$5I}+|Jdigq)@9xx$)Q=^&+*Y?O)Se$J-vU%U%mVv%sviF_p!E9fP6$Qs+POD*(?A&8rqXK3Lx-sXss3Zp%w(AlYK(O^)VNh z6w`NZc1=5T!y;oCC^R7n8PW|AMlRmc3XMZm=)zmd@Wf(3K^p3Y;EhUoZJE$9=f3xB zmC0c3s?}mF7OQVe)_!n{%UsY}XoQCp+oz#80DW&5mu0BP0l?TWHX90zA^9v8s%Mc< ziRDqG&J-Z!0%GAX1wkpU*zJv#oraU93zt-tvH~gB%GWqYL(zq*LcDF+-sie%#sY6I zg?*%0s=)FpQ%@&XfzdDpazblY7Ibh(F=>ot!-pE%AessL+0fzo1+exsm*Rn^eq&R& z4rskoIp5I!t;#4;Y`)TT(^h?p6>=jrW$i%AaC@i)SA-RW}ZS08^b z_>GH?e#6|x#X(4~L`~i&lum|gC&O~g(1b}2&Jbc|@MhE;jc|*}?tx^sht?5&#xO@D ztJ^kIc+jf%n7lu>*&b1Qt>Db~#FD%1K+AOIwVOKLF4wQ;E>__NyXrj9ZM(p$$TUC1 zf>{%<^6j%wP50pmPIF{87>rvz$@%39lQu|nVc8uF@PltU{BsN~$-h|xEiQL*x@==U zTMoHR%iFwZ4{p$%nl4*2JHk25Ld;O!!9Mn7i~!BwvRPnwoVDkq8zpWQ5Vv+` z!c*Nc)kZEELS~Tmzk#wL)@hp(^Q414_dzw1hxQ=K<@5ce_y4!C@5wws$O21EM08bN zeh9srK6bzJ1BQhM%?A|q(@##ISm{3V0!1}yedh*>>cn&Z4x$e@ELMk;-Yx%RKlUW`l(_d!lw_4w>E5Uq6jle800(1gDEdR zQPfC*97R#(UU`aQC41&7ipnN45# z6g4q$jv%+VxBX;o!);*JAIpWZ0ZD%xa78ki6wLV(+g$f1bGExiZu#y*MAoTw8r$-~@?}7b+KB4!AQ4|LM6z>*6RV z4#xRPt$9w#rmD*dMAj*h-p7A81&o(#l>|aYgAC_dn^P>1&KdOs0sge4zt9C9wF5Wg zfCv+Iy;gg@PGk#N|ElwfL(;)6?^O;F>V1*1u$BZLU%sN`%Y=aHba?2m3~LtJ!R)hF zC{toEz0m!tHvF#bp8Am@c|jV*h5D(v4FO;X4SV6_ z?1k!*lFm!Vnqm<_E49XG@L?fiHxob`bgs5IiQF{ji%%#S?Xc(1ilf0OW5h5h8T2)W z18F>EQy+>+hTvJ3wF%iRz02!yb8zXV5djvpS zs9voq1C3TsqnwR1YvjvXi5Xu7QIVlr)Dq@vAB>7LS3-AxL}U~o;OiJE0J;smcCCKC zE>uLh5xZf+WQbqZIVH0R%P#Z(^u6ZlbP04@bS3m#RJE;E9Q|Zzg$!!zm)6efE{GQz zO3gjWysZ|X3n*=x%U21xSm;y;gCOCoj`oid2U3o%`)J-rgA4h<;kyQB#rs`sbUKH6 zd1bOmJxS@Fm-D=QZA`^XIV5aRAK#Fpm=P0c*z%U+hZ}4t$+|bkc(lR_$8tvQ2wkmK zA8bsW^>4Ou&B)>?JSbQBW*gDTYNJuVUc-G?G)F;W-#Y?lZ!*oA{8A58G(PmfLh$BivAmDo-xmI!e zYmRfGP1~>YtDYNb0G`o>TDs+Q@qBf$c8!Z_hhc-_c$mFjy-6TBv80^zx_)vrcnGDz zMgTDcOR^q0vHa4t(cr)x+lv&}XxL(e7nz*YbziJMW@LuW>#hT_=V&H^4BxZSowfY{ zG2}|3eQ-W?0HW7|D5~e}oY3bqq7~7LYl?+PX3k8SQN0F~(ZJ0yGH)!j*Ep5I2G&{s z<`~zUyEC=g7CVEDDqVXc#LusqR*)}94 zIwe+eG(EzzG8naQ+-BCjY0+$ZSiqbVZ2hQ(yy%r7W<9i&ZW?&7nF;{230&SOV*94Z z&Z;*pIeJh>M1H5{Y(r#Z-CMxa=$31t(CNNlXW9DRaK^Z?6`{uG_?KqF+ z#oZ?M#gf&Norf#C4R%E9PPe6tvzK~edUJYbrnyDCS??2uPOEjbM>Kc>zex-3WjkqG zX@t`ojU2Olk3z2zg_UlO5hxP5zW9c&gdA*E+SN8<6q_Jd za;T&n#1%V$Q^`^<8!ex|NlW9xl@un9Dm z6b8MW9w|9+)6vvS6X{k_c>c<)@_s~NVurhfYV<+Jo3I2wUtg@fvoTN;bGLD;kvaNjDeU89Q<8_2x# z4HmN;JQTwiaGQwNfzj&6bJL0Oi)&Zx{@q6y2^slwG zGgSIi30;5~V!HxHC#pjS<@=2-&YOxMpiqoWqc*>`IFxBHME|yjbnZ;A+fiL2(!B8( zCk56a8#D>Ufe25NI$9WpBZip zmS(Gs)l-*-3PUYUlqZ_HVRI;{P`q#H>`|>%W)+}7~?`NJPN8J#U`7X~3x0zD7t}p9cPn!Vq8PXv)Ya%*%px=22)#{(|6|d+) zvp`7PXlCK`+O8y?MND>twgdups&hocq57}ZygAAqG3Kzc8^P>Sl^q`v%Pc2+( z)UNbz+-$s%NGG)#B`k4Y0NIdx&Ww?-Kk{kHa!8x2O`X-)0ocBs?3uN_L0CXbcEYeZ zx)OV7u6nWBxURG(qY@7WgittaLa#qlx~h}jR|koGn$y|$`Pb_5Ii1(d&h2%EQ|{gh z%}czHtn0}~L-7;qS_%0@uH3F0V;;=bijvYH=T&-G}xrDLvTID|o99PbFw z=&z^5-yHGxQf*NO`@}b|iwl&&ueSu;gsF~Gu0yuhYr2|!b^f*I@1G~nxJxSX_z_Z+ zH|p_;?Q8uN?_+aN=~mtjwq8-Xo6~=L(PIc24G@_5qwN2Z&g;sRTWKm-ywdC&k|9+| z#{(V? zJhTs@_63c>>8+Q|@}Z?OuJ^5+(-l3<_q{$yHxOBEojfy;F$g6#t@Wr))|?)fd6rIq(RIH94RfbsF7!+qY-7NE`D7l^8#;dTWsDdFZ4c8Z;YfR!27{%S+*r&|esCzFmjgNu2yqyYq zKuaj9=jBZ%ECU%r?KayYy^l7#tpr2Co+Yq4aZ90pk1O=DyKy`J*4gZ<=8ww< z%N6u<)ma@ETGJ(?S9GU+KRP+H;->22>(vGsd+#rgW~*gYey(#X3L1Ckh(-j&vJ39g zZ0VL##WW2AMdu2-Uyol?=O^pjk}^#9Ll|Yc^`Lj>a6%vMhaPDLlLVdXVV<7PXRrC{ z%4)soan<2(p4eH0XTwH)l7Rv?XBNOn1J`mN%$?;f%WCuJ(eAB!SrfW%a#5Tzy?yt> zfWx2LF!KA@{$VFt2J&b1gAKcW-htkU!5g3GK@kM}&M-U(7xj87?ZK!-dMisQO=aC#r7( zL|oOm>e1UG*DE@^sFS32ckqZvv$o{olzNfG&0!5F2PP*qmL*6-gCJjbu^Ha4UP-jO z(KbP>@uW56Rd9T(K1cDz+8AEndlBrh2nthlU?@zt5ia`knr zq4GktY~~m$vYcBv$v9d2nL}77FOPOzO#H{l*Tv@c^wTyf!X&X!KWo#jX*PzSguXhz zv8vFx%CDpfErZid#2B$$KE?I9m8E*KTwN^pikwKc)F-!QsJTAd@miqx(iTD)%tSEI zv}4sI!$QK7R|r|YrKAMQ#fdMz5kv2AmBd_}Luz_YkG)7BQ~wV*`#0TsKFZ|E$+r<% z5hq8vp1&}<^}M@v53(Dj7rA|h!-ysylOb+e4Fg7TH?}1~8WjUr*ycuIVF;t)_bW^^W`HM(P#e4}7U&FB?)w*_z#qWizUz4I6vIvc#c(X5Pg!OOkmqh0X! zNtc-m-k8yp-f0Gy!ehc!fA)I0#w}oZt?a#_Ve4Tw}QHrQ%S?Abdd=&(;OOiMLjV;)UWs7zV1# z+G(qf2!!}-yigr3+-E36sPn3Jy=%&pJ)C$f4u#2vg`ov>aR|tcI?C=Vqa6Ij>f&O( zpV8-9Bda|!q^y|vHCLZkV3#uYUC?QIJOlFGC9SM{+eCE}^}M+-oY&DA8~L4jo4oB{ z9HzGpM_(_iC~L^!6ktnjutj=mp*=mlL}CvhinE~-Ce?Zh_;Zr&_E1>2BjxhP^2ybX=pf#BSQw8PQ^$qF7^|PvuQLb33RctxKN*2?rAG+ zCJdSk$?B0&rpLmmaZXXmP4?TbJ#QE+|lDxz>)7ar>o%huv)y zG@(z-?Wgr{RmVszHCmw?o>|Up;GjC!N)!&w=MO-nrjUrSE)|->$I{ z2FAefMnmooT3>#6V24Am??0DihENEeU3xM7W`!H5f0qcM2Tv5B&h+ekFJcd);$%g( z`^ffSzZV?axVLw>E%t=RIu?|*pw-ms@i~5LC0}XUx!N6$q|z~9>9TO|4r_j(K$CPk zVV~A%&*jMub%`wQBb9|e6NUaztxO#mwziSoF4yC?MmX(t1ABL80Y(YHV)gCn@`9z5 z&K-A#it9nBx>B@RX&#@mzg_7xS+p>jCY$+QqtewxWMWqq$($^BFfAc!ODl_YvC?s` ze4Fl&v7MO|Eol37AW4yK=6h`poL#?AZ5xlFt((g=8!sY52)s#QHgk{uJFMXLw8sXL znE3wT?pwBtG}MLbP)ngu$mYuUO#lGLv-u18q5X-FU|Va7+IF7Y_y?%Veey3F>z^FGC+}XTvVlxS+OSMR540bA^OOriGtSGui zv~G0K&o5VBb9dp|tt&k&u`IeSI_T)y?E;+^WM*ZjJ%4f_f+nFsccHhsQayfYt--BE zx=KS=2{h`87!eWksT=Wjtr(H-AS$oiwavKt*vOe25&1gD!$MW2)N->HUT#%@l#0?X z>)Ap2&egutOxl93=V~UKONrKAbeL$Ni?Z$Pt)N>Co5gjCs`sF87LDmH((ZiQzp37@ zHxHNasf8QetDT)3LBAI1V%x}Fy)zq+=@UyUjcT*vXehqKG!96Js!g%6xQrvU zc+&JkmTyY=DP+Is5VJxF^&t}IdCMg$w`mL%KbL$1#Uxx5V!-W8-N3F>;nX*}XH(pZ z1c=z4;Ee`A=5%E=-AjngX>-TIF~VcU1x8=c%5y$O-NLHmS>c9$QOX+zfVt|z+WZLn zKeyVbGXp-kNgn>)Ru$feZ zdrFX*Q%(haEq#qEPE(uSS&V=-y{}Wt^OY4@Aj&7@H*bpLF+)jPW9jXqOuEG7l&7Lo z6?*CFg5qO#t+7&AV-)ODSB7W>+faP9eo1ZI@cysPTi53rwQK&I!GI!bwMTe&G<%l0 z?Bdzklkq9^TNbetN?BEg6)KtJIivtSkseW|yDWb+&d=IS0pz7Q426EeMh_jHMHkja z0TSVBjb?GnsUROHx|#TW*Z28GeZ?O(=|YN`^VxMpkW^272^?P~POlq@^ijwhS&0{` z*W@~r)W29KhWSQI9k)Vob~Dc z2v9y(UEwBMw;fw}+y$rmd@N@{ftfDY>xEjisgu;h^<8wPwKA#I#b8L+p?nYp2k(y0 z-spL@Ozd<`bm@)mT}NOzp87(isr}2<8Tk`O1c96{f`g01w43S=#1x?WqO@mum6lge zR>Sk#d41CY~2A6RSs^{cY1>QGVJ5k;^doU+!vI@&L4Vlt*Y~Rqw&RF zMDsfaJ+-`0U0RmKhhwz+BuHeih}vj8d~EGX%}#ZnuWH}8zO0bWTB8R+bb+NPMY>6O zu~E4`3i<3hKk*i4+`CW0u<|*g?l^6C6U|YLVWqN#Z6uuhRR+pyi!^mGqC z49MA4**&?=s%&LewP%(&_$08=hw#xl2y6_#7=vKHhChKZ_~@JM-;2nIipa`{$c+3` z-J`0Zr>m+n;zhi8|Ki1q_llV4ZHeOo{15_pTpUS0JBybqMDVEeYZJ@mcCFYR1iR_) zt}U9sfRip~A$D~Kzi!cL*e0`Zb1seKRT;H)q*l4jT6S5FaR>C`vlOC7IE3GZeRGmU zFfhl-Gu-FB3bVXO)&jb#zLUA3glMT-F6)};>MZE`>D#xI6v{EUNG2yKL(1Tgm8I~F z8}Zfpg(Bc_GmeS(L9+(4wGIIrny#tYX;c|{P=$Pzh1F(Le7*<|UcZVj*!2zvzWdpZ zZY1w9%Barav!hP#DfFJYH=!@C5b>Fgk!Wp|gs5`5tq~m8A44AuXV_HLVK_t6{u$19 z&3Ra!lA+0i)O}&&*lYaFKc_h|x7`r44^D39$ugd&+zEFC$CJ!#Iv^4b-xa2_23Ksv z$klSgDy{ldIEbkWa|M<+9k$VWurk<@WG-&AJFL65PCz+d6|=U@rfk548P|Nq`!m`N z4bd$k7JJ&R$-&hT((>U3Vp+CP(N$&n_zFWZttAj|3iO5k+v!?zpt;hvu!=c7I=3y0 zQg0L_ppu+mrK)g9@%(LMP%*YT{3)Joz@DOsimI-;Q^0Ugjd@G3W6oL$yNdm`9nEcd z3&-+#JR^4$i@d7MW94?OcnxOera!B;%XNZ88ZcVfsV&R%nvb7`H)*EwfK6PO+P9ig zPx`%#_Bvvu+@^szDK}M7+ND?#a3BtEENKExpsg1|d7dW7k32l^ldr>ZwmeSf7g@9|=x5P%Ycn6?zMnna zOE1EKqkTV~yKr6-^zO`5Arep}@ghPNiJ1#AHL1i5Q z--ES%c0P8k9p8OxB39o!IU;k6&hJMGj>&73Pr{5+K9I5jj@!_T(p@3pD0%NT(HMb=n}Kur&~ylFnc{kW@?&%k69* z%X9N6Hfb`ChbMSn&(i{x6EouA6_S1axqPW*UeO#>@zFDLDHmBqF;c{&)tii;+ti9{#}- z`m%hiR?h3e_RcP+LxV(am}?76#n|g|Y2lx9?aM9b_0%Si=H(16HpyxkfUiD@wVD&$ zAkxtKgzyb!YHTYlpeW#7&97G%Njyz+5_&zganMAPt7;^l&j>MP%p;o+8IYlRhYO@`kzP(@8-9ZN_o1z!h^|uf1RtpMi{L zKVQWtF^sb`HkeMxTf?!Pz6)RXzy>?6~`YAt--AL*OG^J(P3g}6iqzgwL^**M|syeaq)I+cH zX>=K7(E_RE{7KB$ayeQpaMOSi2zt-j7xV#YQOM#}RW?&`>PNasGp1Vl(@w%zYViR@ z2=n5dq?ojGY9NMUpP;)I^rO{y4LzQo7NZcPtov}anI!Z^kjHB z51uW!WO&#IJmWAjyhTVJ8sD_gu%1TTc$QDIn5Fo4Odm!~M`XL+-!+%~>$bOzc+=}F zMFL*2!Hm^=ORyl-d&aFygv;5l%r$Tz%I%BtlEnmy>e4%z!Wma;sbeg+LH|_1+&CaSu z){&agP|%!gwdS{saCa)EoyENsi`P@H*HJMYam)sLHs_j+F3g#TK*<#fkmXqfYK7A4+LJ>@>X&~cO^leX`CTR}#~&e$FxW+5q0 z$j65-eCO)B%fMv;H-h2oWamy_CgB`~3-b|`)e+h(8$oL!qd&CP#fV)erDs)#r}^|u z7x#w?n8S0H>}fn(A*V}Lu$Mt49Z{)prV}CN`9)S@4`@!=PgwL*U*}W}!cX%gBVKmA zfZe^;;Vd#V#k9I^;mH_m86C2=L?j|SpU#BJ^|$jP8!yP1s=w|PzY!FUi=YTaVznx0 zGYJ+4?VISVvYATwnm%Y5<0edup;N;n)&uomzQj$1@oMQzi34o4DFk7b6y+ro(fh@S zN{f$`tGqLA>_x71Y4k4R($ryJR4`#-%f2+=$$d)H^5BqV(DJ~LMa=TRVAmnb0|Qnf zmVF`nnjq_d<)I-L@ybJk<=6jfQVYkvlEhl9Pq8Fv&U|hnZU(Vk@bQh2!SaGLDYsyZ%dMIH z0vcbIdSoJoalE=opGWh;jWbIzfN?@&F_~5_5mYQ^ng049nG%dUPBX@}epDtMMmciD z)`ZhcQ1nItqGJbzGZVebJrXa!2I$MSayaP?G}} z#de07p249XB;RertcAXT!7#pw^E6(#&)mA+PO=lfHin_^yjxm^zF^-$(@-8_?@gmj zBxYp!dF!8Un_BkgWXp0KRX7Zu?wtu++w6kJksGbfcBHpc^%-u%7vT;v5)@;?cL?2- zE8+4duluM9p5X@UhM`)0KyM!qS2CN}aGlayd+m#!cV4*xEQFm`uCATys~vYiWAgCHzGRy)5wE3=s76os+L{?_gF~%lnQqX6>7X>dKr!|( zTSj~G9qvWMSF31-%OEvkG%B0*wbt8=%=igz%6Kof=gyv$pP{3?R=|D5?HM9=5`L#6 zQ*E%O{MByqTOET;LuYq=nq`aU+$jm2FG%0zX5vh}!87y#P=qF&;&$0Lzecba&ffN; zXOK?mNgRFcI-{vA@21n}@#DQoiV7VFMw1zErP4FSSC?DdRte`xZ#Z*|Z_+d9f`qcB z4!!au;?~I~eW82K9dQFUh`Pf8WX$q@de7b${@N|_3^y-_*D|o6CbwV=sF`!{`Z~=h zZ*PV?e3x;El=wrh28!OMbi;LMxX?7S7;e@!ZYNIye0D)s2UwskEWUxck63>a&M)Hh z{Q3Uiz^PD@6E1A$;@+`V#81!T5G4_l9{K21{1vN8n}i6soT3I4?)7N*uFSD@Ts!fr zS`ruJ@)ALnN(d)^_9RQMgu`d15Z|+P~9CXhcaTddrA2?_tQBpYA2$$Hf<1@ zVXqujnl_ERgALN-mFQtaEY-9ExQ!Vuv-o0#ynG|N1J5ilr7=U59Cnv+Ay8}xvpJld z0lXb+me3+!bNV#OsT38cv8W90TDFGhm#nCeYdzeHmTts*QfXtn8^zV5j%amL5;Y-K zwRKO7-56z6eB!%YysVa$K7|Hk`y-w&1nlgn*lW~UYuVFEXEo#)MLj4yW6|lp)02SO zDZPf%DAZ*hzzS$zlxp?gHrsS~(+beBCZP zX$KcbJw@qn-ThHk?#7pyyak9_?Zytgp$sia?#^!o9jAw~JSodkWFLL!e&wg|uoB#H zhJ8|$p!lQ9v)cI(CUm}p!=+m1Se-*ZUu+Nd3(9YU0kHjW%jx^F4jaRMij}YF>M`4J zNKsOh9*Ob;6kDINqPxYBp|2aFA-}>hw+y0l_H7qO7OK#tieXKhO|R>#MuQ<=G{JoB|&Eji3}9&&h7s&?DHR!$TCuf`oeJhpXl3i)Z$Fb(Tqc>h|n%dJw{Sfpk}kn$)L$yt$Jn5F3!WPlS(goEG$5{^66wXaa| zNN285rHq1xzeVJb?f$%jbiRq7_GOS z{}F}IEJF$%C=JbwTHp2DlEDOJ>Pxwv>YJNrE}#%CP1bN!7OFhU2v)A1NHs?RJdy+_ zC0e@RVHE{Uh^a_vD9@<-7yDI%6T((iipKeg!808u6wCUE+Ae1c_PEXvzl!YVYh)L7 zJ;dlV?WHJj@%KG00FWMo`l&VU^|I(~)%^ymGR$o;vznS;uMjGh78W1pYk>#F5?I4K zjg}NzlP;pX;>%itw;-K1e^&5_vtfbK3UKjNJJ=h7n+G16^t(iZO{dERmQV9BGRdwf z$(Cus<6;>#%xVDo(ZYa>s9{HegocWsQpu;duovTVWc z>|ZKe|M{JdT=c%o_@CGg}6nsWy=|ExS(i1}tOEh6OxLlXQWgl3}4HDNxFe z`i6y@MVAqh)FZ~*cf!6q)%l8w`CTJ=-*d*kfMKW84Z(q-UWai$G|Z_QWoDi4hT#3^ zcj<(V_M){a6>g#O;`DMB(>2)Zq7WjGyXA6=8zb`5D0iX8qNh;jF)>z3>|BGfY_UUg z9#5<>^h8na&3&Y0MzF6yJx-O&x4xM6q$nKt&seq22$$`*F?mFpozWf4f#*$OgXC2n zT#p^WV>R9eQ|hS#bHV5){JZGA?Rnx(E%X5iQAgYF6=-UhTqKp|(_e@99RZLMVhE38K7fB~lb)htwWpIP=iPbnMKR-X* zFUDCJPO%o1Vx+VL6gTX~4g)_dd1eKYTo2BrJ8JstdD_L$$r^_1McDigQl zDfbQcz}bnoF(C+n=wyBIVBtZf-E%Wy5FPa9LcD9_;At;zWG?WeMo;kCRd`R(zKn35 zr=&QnEZ`#zrHXfQfqYV7gThKGl{%+7=d+kHtWahRrRKQkLgND=%$4Kx!ZzT>hpKOk zHj#!G(W6a080~_>@r*#9*SO6t1*v#Oa5n+m4Mru&F8AHaP z_I07meL1Ckn{;4q5mz}ive4#dpSCZTGMw|9oW7tvG2RZS?|hY8j=uBt1+Cp#9U3?` zIqtv?v(@Lh#`T;-%uFU5WgVTBuP$Up6g|3F1c*=&qmW2B-5z55zCF2_+Y=AEBB7XY zl+E}qSGLtZs)AkP&9)nfpHR6)E^&+-3G?EV39|P7Ma+5&plPf36e&v6%pZ7(C~Hsq z48b_hCM!5ghlj26p>eUf+EdH|7mvt*v=R7xG!19rXtiLGzGT}7_NZhO*);ND6{R(2 z7Wu`FTV$=Ow(_A1Zt<29U9gKc@DBM!H}cIIhTRH?GR8dMz&TxSDK-b;2#F|HqpJ+A zPf|d$=sH^P%yhMO2r@dV90bQ@SL4lslnP>7gQ(?sxQM>O_%a%xxF}i*#flaX5jmSe z^qTfPnKpbSq?vCW*tLO1;mj57REwI0GB+4KPS*>ss}Nzanb zppE@3Bi2|wk<*sKU`gy;EbhCnZCxy-?M7Xc-&sG0=X^VHb9lnmt;K5Jp|mhva+m zxq4e-x9SWD9a;#xoi!oMhn+Qny^x?Zvl{WXqVD7gN_%r% z(eA3;y9?F?vWq`Z{O+IYI|F56ZOxW|z4HI~O-OHk2S4Atho67EAAIlc?+2&P_n-gg zpM3K8`~UV|&;D-u{r$zsFaH&P4kmjq&rxVDe;LhRPj9~dvma%vm-{GRc9Fh*i2$lM z5f0Y#mtV#gS%kFo`OBZC6NE&IU+KkHFZZL1)m8Du!|T}vLBCtCzxvgEIpDA9{YZY) z-XzL%LGZIln(ZgaQ5Y|Rc|J|ED0(2x+_@9sNeefas_Wrl| z=l8zFyZz)N`NX|@9|VE?^ub3OT)z+Zg72c?9|XbQ>h13ZwCzyFbi~s%${vmiD zzlko@*FHYnL$6_wp`SQNf(U&sg3BOfkNpvAb%wu&_%_Gi!(fT$QhegCe|kSbr}r?X zC7z1${Z&OzU$AFB!MypuPlF4>LGXuYc`ultzd8OzXuSj!{(7MN?V7=VgV~1cx#E%F zN5Qx7loqurNibH!TFOs|7CY=l?AEA$2#u<_j}_!S6v6#Oa1 z@HqG}p7|KPsQvI2nW5h~`ptsBmRJjdCv2?G3K+B^G**El`b3xx0@IiuGMt{EeTtc^ zfX}5eQ@tI!2|i`G)SoY7w2aRmvo>RlI%jjZzzE-9#;$e*@7BKl0ep+W{qoOm?Fe@R I>k$M04~1!y?*IS* literal 392192 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%0Andzhuq0EjU}AVi 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∨E~orb%DC^6 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 I`iO!5A9A_>m;e9( diff --git a/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc index 54b24800a..3de89a586 100644 --- a/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc +++ b/Empresas/Grales/Formatos/CartaPorteTimbrado.rdlc @@ -52,7 +52,13 @@ 3.00921cm - 10.82134cm + 6.3532cm + + + 2.5cm + + + 1.90464cm 2.35479cm @@ -150,6 +156,86 @@ + + + + true + true + + + + + =Fields!CodigoMaterialPeligroso.Value + + + + + + + CodigoMaterialPeligroso + + 5pt + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + + + + + true + true + + + + + =Fields!Embalaje.Value + + + + + + + Embalaje + + 5pt + + + + 1pt + + 2pt + 2pt + 2pt + 2pt + + + + @@ -280,6 +366,86 @@ + + + 0.52062cm + + + true + true + + + + + Cod. Material Peligroso + + + + + + + Textbox37 + + + #4f81bd + 2pt + 2pt + 2pt + 2pt + + + + + + + + 0.52062cm + + + true + true + + + + + Embalaje + + + + + + + Textbox40 + + + #4f81bd + 2pt + 2pt + 2pt + 2pt + + + + + 0.52062cm @@ -385,7 +551,7 @@ 6.39415cm 0.38395cm 1.12062cm - 19.11271cm + 19.04921cm + + + + Placa: + + + + =Parameters!PlacaVM.Value + + + + + + + + + Año: + + + + =Parameters!AnioVM.Value + + + + + + + + + Textbox2 1.13111in @@ -1925,52 +2145,13 @@ - Placa: + - - =Parameters!PlacaVM.Value - - - - - - - - - Año: - - - - =Parameters!AnioVM.Value - - - - - - +
    + + + + Carta Porte Manual + + + + + +
  • + +
  • +
    +
    + + + + +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #CantidadUnidadProducto + Sección AlmacenSerieLoteFecha CaducidadComandos
    + + + + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    +
    + <%-- --%> + + + + + Destino: + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    + + <%----%> +
    +
    +
    +
    + +
    +
    + + + + +
    + <%--
    + + + + +
    + +
    + + +
    + +
    + +
    +
    +
    + +
    + +
    +
    + +
    + +
    +
    +
    + +
    +
    + + +
    + +
    + + +
    + +
    +
    +
    + + + + + +
    --%> + + + + +
    +
    +
    +
    + + EMISIÓN DE TRASLADO +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + + + + + +
    + +
    + + +
    +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    +
    + +
    + +
    + +
    + + + + + +
    + + +
    +
    +
    +
    + +
    + + + +
    +
    +
    + +
    + + + +
    +
    +
    + <%-- +
    +
    + + + + + + + + +
    +
    --%> +
    +
    + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + + + + +
    +
    +
    + + Direcciones +
    +
    +
    +
    +
    + +
    + +
    +
    +
    + +
    +
    + + + + + + + + + + + Tipo + + +
    + +
    +
    +
    + + + + + Dirección + + +
    + +
    +
    +
    + + + + Estado + + +
    + +
    +
    +
    + + + + Municipio + + +
    + +
    +
    +
    + + + + Localidad + + +
    + +
    +
    +
    + + + + + Colonia + + +
    + +
    +
    +
    + + + + C.P. + + +
    + +
    +
    +
    + + + + + + + +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    + +
    + + + +
    +
    + + + +
    + +
    + + +
    + + <%-- --%> + + + + + + + + + + + + + + + +
    + + + + + diff --git a/Inventarios/CartaPorteManual.aspx.vb b/Inventarios/CartaPorteManual.aspx.vb new file mode 100644 index 000000000..c8b85b178 --- /dev/null +++ b/Inventarios/CartaPorteManual.aspx.vb @@ -0,0 +1,1341 @@ +Option Explicit On +Option Strict On + +Imports System.Data +Imports System.IO +Imports Extensiones +Imports GemBox.Spreadsheet + +Partial Class Inventarios_CartaPorteManual + Inherits ClsPaginas + +#Region "PROPIEDADES" + Public Property DtMovimientos() As DataTable + Get + Return CType(ViewState("DtMovimientos"), DataTable) + End Get + Set(value As DataTable) + ViewState("DtMovimientos") = value + End Set + End Property + + 'Private Property DtTraslado As DataTable + ' Get + ' Return CType(ViewState("DtTraslado"), DataTable) + ' End Get + ' Set(value As DataTable) + ' ViewState("DtTraslado") = value + ' End Set + 'End Property + + + 'Private Property CveAlmacenTransitorio As Integer + ' Get + ' Return CType(ViewState("CveAlmacenTransitorio"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveAlmacenTransitorio") = value + ' End Set + 'End Property + 'Private Property CveAlmacenDestino As Integer + ' Get + ' Return CType(ViewState("CveAlmacenDestino"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveAlmacenDestino") = value + ' End Set + 'End Property + 'Private Property CveUsuarioResponsable As Integer + ' Get + ' Return CType(ViewState("CveUsuarioResponsable"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveUsuarioResponsable") = value + ' End Set + 'End Property + 'Private Property CvePSSerie As Integer + ' Get + ' Return CType(ViewState("CvePSSerie"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CvePSSerie") = value + ' End Set + 'End Property + 'Private Property CveUMSerie As Integer + ' Get + ' Return CType(ViewState("CveUMSerie"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveUMSerie") = value + ' End Set + 'End Property + 'Private Property CargadoDeMov As Boolean + ' Get + ' Return CType(ViewState("CargadoDeMov"), Boolean) + ' End Get + ' Set(value As Boolean) + ' ViewState("CargadoDeMov") = value + ' End Set + 'End Property + 'Private Property CveMovimientoSalida As Integer + ' Get + ' Return CType(ViewState("CveMovimientoSalida"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveMovimientoSalida") = value + ' End Set + 'End Property + 'Private Property CveMov As Integer + ' Get + ' Return CType(ViewState("CveMov"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveMov") = value + ' End Set + 'End Property + Private Property ObjFactura As Modelos.Factura + Get + Return CType(ViewState("ObjFactura"), Modelos.Factura) + End Get + Set(value As Modelos.Factura) + ViewState("ObjFactura") = value + End Set + End Property + Private Property Folio As Integer + Get + Return CType(ViewState("Folio"), Integer) + End Get + Set(value As Integer) + ViewState("Folio") = value + End Set + End Property + Private Property MensajeAlert As StringBuilder + Get + Return CType(ViewState("MensajeAlert"), StringBuilder) + End Get + Set(value As StringBuilder) + ViewState("MensajeAlert") = value + End Set + End Property + + 'Private Property CveMovimientoTimbrado As Integer + ' Get + ' Return CType(ViewState("CveMovimientoTimbrado"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CveMovimientoTimbrado") = value + ' End Set + 'End Property + + 'Private Property CantidadTotal As Decimal + ' Get + ' Return CType(ViewState("CantidadTotal"), Decimal) + ' End Get + ' Set(value As Decimal) + ' ViewState("CantidadTotal") = value + ' End Set + 'End Property + 'Private Property CvePS As Integer + ' Get + ' Return CType(ViewState("CvePS"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("CvePS") = value + ' End Set + 'End Property + 'Private Property TipoSeccionAlmacen As Integer + ' Get + ' Return CType(ViewState("TipoSeccionAlmacen"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("TipoSeccionAlmacen") = value + ' End Set + 'End Property + + 'Private Property FolioBusqueda As Integer + ' Get + ' Return CType(ViewState("FolioBusqueda"), Integer) + ' End Get + ' Set(value As Integer) + ' ViewState("FolioBusqueda") = value + ' End Set + 'End Property + + + Private Property FechaSalida As Date + Get + If ViewState("FechaEntrega") Is Nothing Then + ViewState("FechaEntrega") = Now + End If + Return ViewState("FechaEntrega").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaEntrega") = value + End Set + End Property + + Private Property FechaLlegada As Date + Get + If ViewState("FechaLlegada") Is Nothing Then + ViewState("FechaLlegada") = Now + End If + Return ViewState("FechaLlegada").ToString.ToDate + End Get + Set(value As Date) + ViewState("FechaLlegada") = 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 + + TxtFecha.Text = Now.ToShortDateString + CEFecha.EndDate = Now.AddDays(-1) + RVFecha.MaximumValue = Now.ToShortDateString + + Folio = 0 + + CargaCombos() + CreaDT() + + 'If UsuarioActual.Empresa.Funcionalidad(132) = "1" Then + ' DivCodigoSeriePS.Visible = True + 'Else + ' DivCodigoSeriePS.Visible = False + 'End If + + 'If UsuarioActual.CveEmpresa.Contiene(141, 152, 158, 159, 160, 161, 162, 163) Then + ' ChkEmitirTimbrado.Visible = False + ' divEmitir.Visible = False + 'End If + + If UsuarioActual.CveEmpresa.Contiene(1, 119, 140, 2) Then + + If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + ChkEmitirTimbrado.Checked = True + End If + + ChkEmitirCartaPorte.Visible = True + + End If + + + 'If UsuarioActual.Empresa.Funcionalidad(281).ToEntero = 1 Then + + ' TxtFecha.Enabled = False + ' ImgFecha.Visible = False + 'End If + + End If + End Sub + +#Region "CARGA DATOS" + + Protected Sub CreaDT() + Dim dt As New DataTable + + Dim column As DataColumn = New DataColumn("No") + column.DataType = Type.GetType("System.Int32") + With column + .AutoIncrement = True + .AutoIncrementSeed = 1 + .AutoIncrementStep = 1 + End With + + dt.Columns.Add(column) + + + + dt.Columns.Add("Cantidad", Type.GetType("System.Double")) + dt.Columns.Add("CveUM", Type.GetType("System.Int32")) + dt.Columns.Add("UnidadMedida") + dt.Columns.Add("UM") + dt.Columns.Add("CvePS", Type.GetType("System.Int32")) + dt.Columns.Add("CveAF", Type.GetType("System.Int32")) + dt.Columns.Add("PS") + dt.Columns.Add("Observaciones") + dt.Columns.Add("CveSeccionAlmacen", Type.GetType("System.Int32")) + dt.Columns.Add("SeccionAlmacen") + dt.Columns.Add("CveSeccionAlmacenDestino", Type.GetType("System.Int32")) + dt.Columns.Add("SeccionAlmacenDestino") + dt.Columns.Add("Serie") + dt.Columns.Add("Lote") + dt.Columns.Add("FechaCaducidad", Type.GetType("System.DateTime")) + + + + dt.Columns.Add("CveClasificacion", Type.GetType("System.Int32")) + dt.Columns.Add("EstatusExistencia") + + dt.Columns.Add("TotalImporte", Type.GetType("System.Double")) + dt.Columns.Add("PU", Type.GetType("System.Double")) + dt.Columns.Add("Descuento", Type.GetType("System.Double")) + dt.Columns.Add("SATClaveUM") + dt.Columns.Add("SATClaveProdServ") + dt.Columns.Add("Noidentificacion") + dt.Columns.Add("CuentaPredial") + dt.Columns.Add("Obs") + dt.Columns.Add("ImporteIVA", Type.GetType("System.Double")) + dt.Columns.Add("PorcentajeIVA", Type.GetType("System.Double")) + dt.Columns.Add("ClaveMaterialPeligroso") + dt.Columns.Add("ClaveEmbalaje") + dt.Columns.Add("Embalaje") + dt.Columns.Add("PesoKg", Type.GetType("System.Decimal")) + + + DtMovimientos = dt + + CargaGvDatos() + + End Sub + + + Private Sub CargaCombos() + CargarCentrosDeCosto(Nothing, DdlSubProyecto, Nothing, LblSubProyecto, AplicaTodos:="") + + DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) + + DdlChofer.DataSource = GlobalDTChoferes(UsuarioActual.CveEmpresa) + DdlChofer.DataBind() + + DdlChofer.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) + ' TxtFechaEntrega.Text = Now.ToShortDateString + TxtFechaLlegada.Text = Now.ToShortDateString + + + + CargaPS() + + + CargarCamiones() + End Sub + + Private Sub CargaPS() + + + Dim EsWS = If(UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1", True, False) + DdlProducto2.setEsWebService(EsWS) + + If DdlProducto2.UsaWebService Then + + If UsuarioActual.Empresa.Funcionalidad(141) = "1" Then + DdlProducto2.ddlWS.Attributes.Add("data-pagina", "inv/traspaso") + DdlProducto2.ddlWS.Attributes.Add("Data-onresult", "CargaExistenciaAlmacenes") + + End If + + End If + + End Sub + + +#End Region + +#Region " AGREGAR " + Protected Sub btnAgregar_Click(sender As Object, e As EventArgs) Handles LbAgregar.Click + BtnAgregarPS(txtCantidad.Text.ToDecimal) + End Sub + Protected Sub BtnSerieAddNew_Click(sender As Object, e As EventArgs) + BtnAgregarPS(1) + End Sub + Private Sub BtnAgregarPS(Cantidad As Decimal) + Dim CveProducto As Integer = DdlProducto2.SelectedValue.ToEntero + Dim FuncionalidadSinSerie = True + + If CveProducto > 0 Then + + If TxtnSerie.Visible Then + Cantidad = 1 + If TxtnSerie.Text = "" Then + Alert("Serie es necesario", TipoMensaje.MsgAdvertencia) + RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") + Exit Sub + End If + If txtCantidad.Text.ToDouble > 1 Then + FuncionalidadSinSerie = False + End If + End If + Dim DrPS As DataRow = Nothing + + DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CveProducto).FiltroPrimero("") ' Estado = -1 + + If DrPS IsNot Nothing Then + + 'codigo temporal + Dim tLote As String + Dim tCaducidad As Date + + tLote = If(TxtnLote.Visible, TxtnLote.Text, "-1") + tCaducidad = If(TxtnFechaCaducidad.Visible, TxtnFechaCaducidad.Text.ToDate, MinFecha) + + + AgregarPS(Cantidad, CveProducto, DdlUnidad.SelectedValue.ToEntero, "", CveSeccionAlmacen:=DdlSeccionAlmacen.SelectedValue.ToEntero, SeccionAlmacen:=DdlSeccionAlmacen.SelectedItem.Text, Serie:=If(TxtnSerie.Visible, TxtnSerie.Text, ""), Lote:=If(tLote = "-1", "", tLote), FechaCaducidad:=tCaducidad, CveSeccionAlmacenDestino:=DdlSeccionAlmacenDestino.SelectedValue.ToEntero, Limpia:=FuncionalidadSinSerie) + + + End If + + End If + End Sub + + + + Private Sub AgregarPS(Cantidad As Double, CvePS As Integer, CveUnidadMedida As Integer, Optional Observaciones As String = "", Optional CveSeccionAlmacen As Integer = -1, Optional SeccionAlmacen As String = "", Optional Serie As String = "", Optional Lote As String = "", Optional FechaCaducidad As Date = MinFecha, Optional Limpia As Boolean = True, Optional CveSeccionAlmacenDestino As Integer = -1) + If Cantidad <= 0 Then + Alert("La cantidad debe ser mayor a cero (0). Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) + RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") + End If + + Dim CveClasificacion As Integer + + Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") + If DrPS IsNot Nothing Then + CveClasificacion = DrPS("CveClasificacion").ToString.ToEntero + Dim DrUM = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa).FiltroPrimero($"CveUnidadMedida = {CveUnidadMedida}") + + Dim registro As DataRow = DtMovimientos.NewRow + registro.Item("Cantidad") = Cantidad + registro.Item("CveUM") = CveUnidadMedida + registro.Item("UM") = DrUM("UnidadMedida") + registro.Item("UnidadMedida") = DrUM("UnidadMedida") + registro.Item("CvePS") = CvePS + registro.Item("PS") = DrPS("PSCodigo") + registro.Item("Observaciones") = Observaciones + registro.Item("Serie") = Serie + registro.Item("Lote") = Lote + If FechaCaducidad > MinFecha Then registro.Item("FechaCaducidad") = FechaCaducidad + registro.Item("CveClasificacion") = CveClasificacion + registro.Item("CveAF") = -1 + registro.Item("EstatusExistencia") = "1" + registro.Item("CveSeccionAlmacen") = CveSeccionAlmacen + registro.Item("SeccionAlmacen") = SeccionAlmacen + registro.Item("CveSeccionAlmacenDestino") = CveSeccionAlmacenDestino + + registro.Item("TotalImporte") = 0 + registro.Item("PU") = 0 + registro.Item("Descuento") = 0 + registro.Item("SATClaveUM") = DrPS("SATClaveUnidadMedida") + registro.Item("SATClaveProdServ") = DrPS("SATClavePS") + registro.Item("Noidentificacion") = DrPS("Codigo") + registro.Item("CuentaPredial") = "" + registro.Item("Obs") = "" + + registro.Item("ImporteIVA") = 0 + registro.Item("PorcentajeIVA") = 0 + registro("ClaveMaterialPeligroso") = DrPS("ClaveMaterialPeligroso") + registro("ClaveEmbalaje") = DrPS("ClaveEmbalaje") + registro("PesoKg") = DrPS("PesoKg") + + DtMovimientos.Rows.Add(registro) + RegistraScript("playsonidito('beep-07.wav')") + + End If + + + CargaGvDatos() + + If Limpia Then + LimpiaAgregar() + Else + txtCantidad.Text = (txtCantidad.Text.ToDouble - 1.0).ToString + TxtnSerie.Text = "" + TxtnSerie.Focus() + End If + End Sub + + Private Sub LimpiaAgregar() + 'DdlClasificacion.SelectedValue = "-1" + 'DdlClasificacion_SelectedIndexChanged(DdlClasificacion, EventArgs.Empty) + txtCantidad.Text = "" + 'TxtnObservaciones.Text = "" + TxtnSerie.Text = "" + TxtnSerie.Visible = False + TxtnLote.Text = "" + TxtnFechaCaducidad.Text = "" + + txtCantidad.Focus() + 'If TxtCodigoPS.Visible Then + ' TxtCodigoPS.Focus() + 'End If + End Sub + + +#End Region + +#Region " GUARDAR " + Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs) Handles BtnGuardar.Click + + + Dim CountPs As Integer = 0 + Dim CounDirecciones As Integer = 0 + + + + MensajeAlert = New StringBuilder + + For Each GvRowPS As GridViewRow In GvDatos.Rows + CountPs = CountPs + 1 + Next + + If CountPs = 0 Then + Alert("No hay productos agregados", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + For Each GvRow As GridViewRow In GvDireccionesEnvio.Rows + CounDirecciones = CounDirecciones + 1 + Next + + + If CounDirecciones <> 2 Then + Alert("Debe de agregar dos direcciones", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + + If DdlChofer.SelectedValue.ToEntero <= 0 Then + Alert("Debe de seleccionar un chofer", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + If DdlUnidadCamion.SelectedValue.ToEntero <= 0 Then + Alert("Debe de seleccionar una unidad", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + If DdlChofer.SelectedValue.ToEntero <= 0 Then + Alert("Debe seleccionar un Chofer", TipoMensaje.MsgAdvertencia) + RegistraScript("playsonidito(''142608__autistic-lucario__error.wav'')") + + Exit Sub + End If + + + + Dim CveTimbre As Integer = -1 + Dim ErrorProceso As Boolean = False + + Dim CveDireccionOrigen As Integer = -1 + Dim CveDireccionDestino As Integer = -1 + + + Dim ObjGral As New ClsGenerales() + Dim ObjClientes As New ClsClientes(ObjGral.IniciaTransacSQL()) + + + + For Each GvRow As GridViewRow In GvDireccionesEnvio.Rows + Dim Tipo As Integer = GvRow.DataKey("Tipo").ToEntero + + Dim EnvioDireccion As String = GvRow.DataKey("EnvioDireccion") + Dim EnvioNoExt As String = GvRow.DataKey("EnvioNoExt") + Dim EnvioNoInt As String = GvRow.DataKey("EnvioNoInt") + Dim EnvioCP As Integer = GvRow.DataKey("EnvioCP").ToEntero + + Dim CvePais As Integer = GvRow.DataKey("CvePais").ToEntero + Dim CveEstado As Integer = GvRow.DataKey("CveEstado").ToEntero + Dim CveMunicipio As Integer = GvRow.DataKey("CveMunicipio").ToEntero + Dim CveLocalidad As Integer = GvRow.DataKey("CveLocalidad").ToEntero + Dim CveColonia As Integer = GvRow.DataKey("CveColonia").ToEntero + + + If Tipo = 1 Then + + CveDireccionOrigen = ObjClientes.DireccionEnvioAdd(-1, EnvioDireccion, EnvioNoExt, EnvioNoInt, "", "", "", EnvioCP, "", UsuarioActual.CveUsuario, 1, -1, "", + CvePais:=CvePais, CveEstado:=CveEstado, CveMunicipio:=CveMunicipio, CveLocalidad:=CveLocalidad, CveColonia:=CveColonia) + + Else + CveDireccionDestino = ObjClientes.DireccionEnvioAdd(-1, EnvioDireccion, EnvioNoExt, EnvioNoInt, "", "", "", EnvioCP, "", UsuarioActual.CveUsuario, 1, -1, "", + CvePais:=CvePais, CveEstado:=CveEstado, CveMunicipio:=CveMunicipio, CveLocalidad:=CveLocalidad, CveColonia:=CveColonia) + End If + + Next + + + If Not (CveDireccionOrigen > 0 And CveDireccionDestino > 0) Then + ErrorProceso = True + End If + + + Dim FechallegadaMM As DateTime = (FechaLlegada.ToString("dd/MM/yyyy") & " 23:59:59").ToDateTime + + Dim CveEntregaAlmacen As Integer = ObjGral.AddInvEntregaAlmacenRuta(DdlSubProyecto.SelectedValue.ToEntero, CveDireccionOrigen, CveDireccionDestino, -1, DdlChofer.SelectedValue.ToEntero, DdlUnidadCamion.SelectedValue.ToEntero, FechaSalida, FechallegadaMM, "T", "-1", "-1", FechaLlegada, 1, 1, TxtDistancia.Text.ToEntero) + + If CveEntregaAlmacen > 0 Then + + For Each GvRowPS As GridViewRow In GvDatos.Rows + If Not ObjGral.AddEntregaAlmacenRutaDetalle(CveEntregaAlmacen, GvRowPS.DataKey("CvePS").ToEntero, GvRowPS.DataKey("Cantidad").ToEntero, GvRowPS.DataKey("CveUM").ToEntero, UsuarioActual.CveUsuario) Then + ErrorProceso = True + Exit For + End If + Next + + CveTimbre = ObjGral.AddGralTimbre("Man", DdlSubProyecto.SelectedValue.ToEntero, TxtFecha.Text.ToDate, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveEntregaAlmacen:=CveEntregaAlmacen, AplicaCP:=ChkEmitirCartaPorte.Checked) + + If Not CveTimbre > 0 Then + + ErrorProceso = True + End If + Else + ErrorProceso = True + End If + + 'End If + + + + + If Not ErrorProceso Then + ObjGral.Commit() + Else + ObjGral.RollBack() + End If + + + ObjGral.Dispose() + + + If ChkEmitirTimbrado.Checked And Not ErrorProceso Then + 'CveMovimientoTimbrado = CveMovimientoSalida + EmitirTimbrado(CveTimbre) + End If + + Alert(MensajeAlert.ToString, TipoMensaje.MsgInformacion, "") + + + End Sub + + + +#End Region + +#Region " NUEVO - LIMPIA " + +#End Region + +#Region "DDL CLASIFICACION" + + Protected Sub DdlProducto_ValueChanged(sender As Object, e As EventArgs) Handles DdlProducto2.selectedindexchange + ElProductoChange() + End Sub + Private Sub ElProductoChange() + TxtnSerie.Visible = False + TxtnLote.Visible = False + TxtnFechaCaducidad.Visible = False + + If DdlProducto2.SelectedValue.ToEntero > 0 Then + Dim drP As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlProducto2.SelectedValue.ToEntero).FiltroPrimero("", "PS") + If drP IsNot Nothing Then + + ThSeccionAlmacen.Visible = CBool(drP("AplicaSeccion")) + TdSeccionAlmacen.Visible = CBool(drP("AplicaSeccion")) + DdlSeccionAlmacen.Visible = CBool(drP("AplicaSeccion")) + 'GvDatos.Columns(5).Visible = CBool(drP("AplicaSeccion")) + + + ThSerie.Visible = CBool(drP("AplicaSerie")) + TdSerie.Visible = CBool(drP("AplicaSerie")) + TxtnSerie.Visible = CBool(drP("AplicaSerie")) + 'GvDatos.Columns(6).Visible = CBool(drP("AplicaSerie")) + + + TxtnLote.Visible = CBool(drP("AplicaLote")) + ThLote.Visible = CBool(drP("AplicaLote")) + TdLote.Visible = CBool(drP("AplicaLote")) + 'GvDatos.Columns(7).Visible = CBool(drP("AplicaLote")) + + + TxtnFechaCaducidad.Visible = CBool(drP("AplicaCaducidad")) + ThFechaCaducidad.Visible = CBool(drP("AplicaCaducidad")) + If Not String.IsNullOrWhiteSpace(UsuarioActual.Empresa.Funcionalidad(147)) Then ThFechaCaducidad.InnerText = UsuarioActual.Empresa.Funcionalidad(147) + 'ThFechaCaducidad.InnerText = If(UsuarioActual.Empresa.Funcionalidad(147) = "Fecha Elaboración", "Fecha Elaboración", "Fecha Caducidad") + TdFechaCaducidad.Visible = CBool(drP("AplicaCaducidad")) + 'GvDatos.Columns(8).Visible = CBool(drP("AplicaCaducidad")) + + End If + + End If + + DdlUnidad.Items.Clear() + DdlUnidad.DataSource = GlobalDTProductosServiciosEquivalencias(DdlProducto2.SelectedValue.ToEntero, -1, UsuarioActual.CveEmpresa) + DdlUnidad.DataBind() + UpDatos.Update() + End Sub + Private Function isWhitFamily() As Boolean + Return (UsuarioActual.CveEmpresa = 66) + End Function + Protected Sub DdlClasificacion_GV(sender As Object, e As System.EventArgs) + Dim pDdlClasificacion As DropDownList = CType(sender, DropDownList) + Dim pDdlProducto As DropDownList = CType(pDdlClasificacion.NamingContainer.FindControl("DdlProducto"), DropDownList) + + If pDdlClasificacion.SelectedValue = "-1" Then + pDdlProducto.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) + pDdlProducto.DataBind() + Else + pDdlProducto.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=pDdlClasificacion.SelectedValue.ToEntero) + pDdlProducto.DataBind() + End If + + + pDdlProducto.DataBind() + pDdlProducto.Items.Insert(0, New ListItem("----", "-1")) + + End Sub +#End Region + +#Region "GV DATOS" + Private Sub CargaGvDatos() + EscondeColumnasGVM(DtMovimientos) + + GvDatos.DataSource = DtMovimientos + GvDatos.DataBind() + UpDatos.Update() + End Sub + + Private Sub EscondeColumnasGVM(DtTemp As DataTable) + + GvDatos.Columns(5).Visible = DtTemp.MAX("Serie").ToString <> "" + GvDatos.Columns(6).Visible = DtTemp.MAX("Lote").ToString <> "" + GvDatos.Columns(7).HeaderText = If(UsuarioActual.Empresa.Funcionalidad(147) = "Fecha Elaboración", "Fecha Elaboración", "Fecha Caducidad") + GvDatos.Columns(7).Visible = DtTemp.MAX("FechaCaducidad").ToString.ToDate > MinFecha + GvDatos.Columns(8).Visible = DtTemp.MAX("CveSeccionAlmacen").ToString.ToEntero > 0 + + + End Sub + + Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDatos.RowDataBound + If e.Row.RowType = DataControlRowType.DataRow Then + + If e.Row.DBCampo("EstatusExistencia").ToEntero < 0 Then + e.Row.Cells(0).BackColor = Drawing.Color.Red + End If + + End If + End Sub + Protected Sub GvPS_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvDatos.RowDeleting + Dim DbRow As DataRow = Nothing + DbRow = DtMovimientos.Rows(e.RowIndex) + + DtMovimientos.Rows.Remove(DbRow) + CargaGvDatos() + End Sub + + + + Protected Sub ChkSugiereFechaCaducidad_CheckedChanged(sender As Object, e As EventArgs) + + TxtnFechaCaducidad.Visible = Not ChkSugiereFechaCaducidad.Checked + TxtnLote.Visible = Not ChkSugiereFechaCaducidad.Checked + + End Sub + + +#End Region + +#Region " TRANSITORIO - RECEPCION " + + + Private Sub CargarUM(CvePS As Integer) + Dim ObjUM As New ClsProductosServicios() + If ObjUM.GetPSEquivalencias(CvePS, UsuarioActual.CveEmpresa) Then + DdlUnidad.Items.Clear() + DdlUnidad.DataSource = ObjUM.DtResultados + End If + ObjUM.Dispose() + DdlUnidad.DataBind() + End Sub + + + +#End Region + + + +#Region "TIMBRADO" + + + Private Sub EmitirTimbrado(CveTimbre As Integer) + + Dim ObjTimbres As New Timbres("Man", CveTimbre, UsuarioActual) + + If MensajeAlert Is Nothing Then + MensajeAlert = New StringBuilder + End If + + + MensajeAlert.Append("

    ") + + + If ObjTimbres.ObjFactura.Timbre Is Nothing Then + Alert(ObjTimbres.MsgError.ToString, TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + If ObjTimbres.Timbrar() Then + + Try + PdfFactura(ObjTimbres.ObjFactura) + Catch ex As Exception + + End Try + + MensajeAlert.Append($"{ObjTimbres.ObjFactura.SerieFolio} Emitido con éxito.") + 'XML + Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjTimbres.ObjFactura.TipoDocto, ObjTimbres.ObjFactura.SerieFolio) + If File.Exists(ArchivoXML) Then + MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesXmlTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", -1, "XML", ObjTimbres.ObjFactura.SerieFolio, ObjTimbres.ObjFactura.TipoDocto))) + End If + 'PDF + 'Dim ArchivoPDF = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjTimbres.ObjFactura.TipoDocto, ObjTimbres.ObjFactura.SerieFolio) + 'If File.Exists(ArchivoPDF) Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesPdfTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "PDF", ObjTimbres.ObjFactura.SerieFolio, ObjTimbres.ObjFactura.TipoDocto))) + 'End If + + ' If ChkEmitirCartaPorte.Checked Then + MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPOTIMBRE&CVETIMBRE={0}", CveTimbre))) + 'Else + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPO&CVEMOV={0}", CveMovimientoTimbrado))) + ' End If + + LimpiarDatos() + + Else + MensajeAlert.AppendFormat("
    • {0}
    ", ObjTimbres.MsgError.ToString) + End If + + + + + + + + End Sub + + Public Sub LimpiarDatos() + + + DT_Direcciones.Clear() + DtMovimientos.Clear() + + GvDatos.DataSource = Nothing + GvDireccionesEnvio.DataSource = Nothing + + GvDatos.DataBind() + GvDireccionesEnvio.DataBind() + + txtCantidad.Text = "" + DdlSubProyecto.SelectedValueExist(-1) + DdlChofer.SelectedValueExist(-1) + DdlUnidadCamion.SelectedValueExist(-1) + + LnkAgregarDireccion.Visible = True + + UpDatos.Update() + UpGvDireccionesEnvio.Update() + + + + + + + + End Sub + + + 'Private Sub Timbrar() + + ' CreaObjetosVenta() + ' Dim ObjTimbrado As New Timbrado + ' Dim FM As New Modelos.FemsaFactura + ' Dim TmpDT7Eleven As New DataTable + ' Dim TmpDTComplementosTimbrado As New DataTable + ' PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) + ' MensajeAlert.Append("

    ") + + + ' If ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) Then + ' MensajeAlert.Append("Emitido con exito.") + ' 'XML + ' Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + ' If File.Exists(ArchivoXML) Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesXmlTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + ' End If + ' 'PDF + ' 'GeneraPDFFactura() + ' Dim ArchivoPDF = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) + ' If File.Exists(ArchivoPDF) Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=DesPdfTra&CVEMOVIMIENTO={0}&EXT={1}&FOLIO={2}&TIPODOCTO={3}", CveMovimientoTimbrado, "PDF", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) + ' End If + + ' If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPOTIMBRE&CVEMOV={0}", CveMovimientoTimbrado))) + ' Else + ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=CARPO&CVEMOV={0}", CveMovimientoTimbrado))) + ' End If + + ' Else + ' MensajeAlert.AppendFormat("
    • {0}
    ", ObjTimbrado.MensajeErrorCFDI) + ' End If + + 'End Sub + + Private Sub GeneraPDFFactura() + Try + PdfFactura(ObjFactura) + Catch ex As Exception + Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgError) + End Try + End Sub + +#End Region + + Protected Sub DldChofer_SelectedIndexChanged(sender As Object, e As EventArgs) + ' Dim ObjAcar As New ClsAcarreos() + + ' If ObjAcar.GetChofer(DdlChofer.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, 1, -1) Then + ' Dim dr As DataRow = ObjAcar.DtResultados.Rows(0) + ' If dr IsNot Nothing Then + ' TxtResponsableRecibio.Text = dr("Chofer").ToString + ' TxtIdentificacion.Text = dr("Identificacion").ToString + ' TxtDomicilio.Text = dr("Domicilio").ToString + ' TxtTelefono.Text = dr("Telefono").ToString + ' TxtCiudad.Text = dr("Ciudad").ToString + ' TxtLicencia.Text = dr("Licencia").ToString + ' End If + ' End If + ' ObjAcar.Dispose() + End Sub + + Protected Sub BtnDescargarFormatoExcelConceptos_Click(sender As Object, e As EventArgs) + Dim DtExcel As New DataTable + DtExcel.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) + DtExcel.Columns.Add(New DataColumn("Codigo", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Producto", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Serie", GetType(String))) + DtExcel.Columns.Add(New DataColumn("Lote", GetType(String))) + DtExcel.Columns.Add(New DataColumn("FechaCaducidad", GetType(Date))) + DtExcel.Columns.Add(New DataColumn("Observaciones", GetType(String))) + + DtExcel.TableName = "Traspaso" + + SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet) + + Dim FileExcel As New ExcelFile() + + Dim worksheet = FileExcel.Worksheets.Add(DtExcel.TableName) + worksheet.InsertDataTable(DtExcel, New InsertDataTableOptions() With + { + .ColumnHeaders = True, + .StartRow = 0, + .StartColumn = 0 + }) + worksheet.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255)) + worksheet.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255) + + Dim columnCount = worksheet.CalculateMaxUsedColumns() + For i = 0 To columnCount + worksheet.Columns(i).AutoFit(1, worksheet.Rows(0), worksheet.Rows(worksheet.Rows.Count - 1)) + Next + + FileExcel.Save(Response, "Traspaso.xlsx", SaveOptions.XlsxDefault) + + End Sub + + + + Public Sub CargarCamiones() + DdlUnidadCamion.Items.Clear() + + DdlUnidadCamion.DataSource = GlobalDTInvCamiones(UsuarioActual.CveEmpresa) + DdlUnidadCamion.DataBind() + + + DdlUnidadCamion.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) + + + End Sub + + + + + Protected Sub ChkEmitirTimbrado_CheckedChanged(sender As Object, e As EventArgs) + + If ChkEmitirTimbrado.Checked Then + ChkEmitirCartaPorte.Checked = False + ChkEmitirCartaPorte.Visible = True + Else + ChkEmitirCartaPorte.Visible = False + ChkEmitirCartaPorte.Checked = False + End If + + + + End Sub + + + + Private Sub ResetModalDirecciones() + + End Sub + + +#Region "D I R E C C I O N E N V I O " + + Private Sub CargaCombosDirecionesClientesSAT() + CargaDirClientePais() + CargaDirClienteEstado() + CargaDirClienteMunicipio() + CargaDirClienteLocalidad() + CargaDirClienteColonia() + End Sub + + + + Private Sub CargaDirClientePais() + + DdlDirClientePais.DataSource = GlobalDTGralPaises() + DdlDirClientePais.DataBind() + DdlDirClientePais.SelectedValueExist("151") + End Sub + + Private Sub CargaDirClienteEstado() + DdlDirClienteEstado.Items.Clear() + If DdlDirClientePais.SelectedValue.ToEntero > 0 Then + DdlDirClienteEstado.DataSource = GlobalDTGralEstados("-1", DdlDirClientePais.SelectedValue.ToEntero) + End If + DdlDirClienteEstado.Items.Insert(0, New ListItem("Seleccione", "-1")) + DdlDirClienteEstado.DataBind() + End Sub + + Private Sub CargaDirClienteMunicipio() + DdlDirClienteMunicipio.Items.Clear() + If DdlDirClienteEstado.SelectedValue.ToEntero > 0 Then + DdlDirClienteMunicipio.DataSource = GlobalDTGralMunicipios("-1", DdlDirClienteEstado.SelectedValue.ToEntero) + End If + DdlDirClienteMunicipio.Items.Insert(0, New ListItem("Seleccione", "-1")) + DdlDirClienteMunicipio.DataBind() + End Sub + + Private Sub CargaDirClienteColonia() + DdlDirClienteColonia.Items.Clear() + If DdlDirClienteMunicipio.SelectedValue.ToEntero > 0 Then + DdlDirClienteColonia.DataSource = GlobalDTGralColonias("-1", "-1", "-1", DdlDirClienteMunicipio.SelectedValue.ToEntero, CodigoPostal:=If(TxtEnvioCP.Text.Trim.Length > 0, TxtEnvioCP.Text.ToEntero, -1)) + End If + DdlDirClienteColonia.Items.Insert(0, New ListItem("Seleccione", "-1")) + DdlDirClienteColonia.DataBind() + End Sub + + + Protected Sub CargaDirClienteLocalidad() + + DdlDirClienteLocalidad.Items.Clear() + If DdlDirClienteEstado.SelectedValue.ToEntero > 0 Then + DdlDirClienteLocalidad.DataSource = GlobalDTLocalidad(DdlDirClienteEstado.SelectedValue.ToEntero, DdlDirClienteMunicipio.SelectedValue.ToEntero) + DdlDirClienteLocalidad.DataBind() + End If + + DdlDirClienteLocalidad.Items.Insert(0, New ListItem("Seleccione una", "-1")) + + End Sub + + + Protected Sub DdlDirClientePais_SelectedIndexChanged(sender As Object, e As EventArgs) + CargaDirClienteEstado() + CargaDirClienteMunicipio() + CargaDirClienteColonia() + CargaDirClienteLocalidad() + End Sub + Protected Sub DdlDirClienteEstado_SelectedIndexChanged(sender As Object, e As EventArgs) + CargaDirClienteMunicipio() + CargaDirClienteColonia() + CargaDirClienteLocalidad() + End Sub + + Protected Sub DdlDirClienteMunicipio_SelectedIndexChanged(sender As Object, e As EventArgs) + CargaDirClienteColonia() + CargaDirClienteLocalidad() + End Sub + + + Protected Sub BtnDirClienteValidar_Click(sender As Object, e As EventArgs) + DirClientevalidaCodigoPostal() + End Sub + + + Protected Sub DdlDirClienteColonia_SelectedIndexChanged(sender As Object, e As EventArgs) + DirClientevalidaCodigoPostal() + End Sub + + Private Sub DirClientevalidaCodigoPostal() + + Dim CPTxt As Integer = TxtEnvioCP.Text.ToEntero() + + Dim CveColonia As Integer = DdlDirClienteColonia.SelectedValue.ToEntero + + If CPTxt > 0 And CveColonia > 0 Then + Dim CP As Integer = GlobalDTGralColonias("-1", "-1", "-1", CveColonia:=CveColonia).FiltroPrimeroValor("CP", "").ToEntero + If CPTxt <> CP Then + Alert("El código postal selecionado es diferente del codigo postal de la Colonia.", TipoMensaje.MsgAdvertencia) + End If + End If + + End Sub + + + Public Sub Edit_Click(sender As Object, e As EventArgs) + + Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) + + + 'CveDireccionEnvio = GvRow.DataKey("CveDireccionEnvio").ToEntero() + TxtEnvioDireccion.Text = GvRow.DataKey("EnvioDireccion") + TxtEnvioNoExt.Text = GvRow.DataKey("EnvioNoExt") + TxtEnvioNoInt.Text = GvRow.DataKey("EnvioNoInt") + 'TxtEnvioColonia.Text = GvRow.DataKey("EnvioColonia") + 'TxtEnvioCiudad.Text = GvRow.DataKey("EnvioCiudad") + 'TxtEnvioEstado.Text = GvRow.DataKey("EnvioEstado") + 'TxtEnvioContacto.Text = GvRow.DataKey("EnvioContacto") + 'TxtDepartamento.Text = GvRow.DataKey("EnvioDepartamento") + TxtEnvioCP.Text = GvRow.DataKey("EnvioCP") + ' TxtEnvioTel.Text = GvRow.DataKey("EnvioTel") + + DdlDirClientePais.SelectedValueExist(GvRow.DataKey("CvePais")) + CargaDirClienteEstado() + DdlDirClienteEstado.SelectedValueExist(GvRow.DataKey("CveEstado")) + CargaDirClienteMunicipio() + DdlDirClienteMunicipio.SelectedValueExist(GvRow.DataKey("CveMunicipio")) + CargaDirClienteColonia() + DdlDirClienteLocalidad.SelectedValueExist(GvRow.DataKey("CveLocalidad")) + CargaDirClienteLocalidad() + + DdlDirClienteColonia.SelectedValueExist(GvRow.DataKey("CveColonia")) + + 'ChkEstatus.Checked = If(GvRow.DataKey("Estatus").ToString() = "True", True, False) + 'If GvRow.DataKey("CveClienteSucursal").ToEntero() > 0 Then DdlClienteSucursalEnvio.SelectedValueExist(GvRow.DataKey("CveClienteSucursal")) Else DdlClienteSucursalEnvio.SelectedValueExist("-1") + + + CargaTiposDirecciones() + + + UpModalDVDireccionEnvio.Update() + RegistraScript("$('#divAddDireccionEnvio').modal('show');") + End Sub + + Private Sub CargaTiposDirecciones() + + DdlTipoDireccion.Items.Clear() + + + If DT_Direcciones.FiltraParametros(" Tipo = 1 ").Rows.Count = 0 Then + DdlTipoDireccion.Items.Add(New ListItem("Origen", "1")) + End If + + + If DT_Direcciones.FiltraParametros(" Tipo = 2 ").Rows.Count = 0 Then + DdlTipoDireccion.Items.Add(New ListItem("Destino", "2")) + End If + + DdlTipoDireccion.Items.Insert(0, New ListItem("Seleccione", "-1")) + End Sub + + + Private Sub BtnAgregarDireccion_Click(sender As Object, e As EventArgs) Handles BtnAgregarDireccion.Click + + + If DdlTipoDireccion.SelectedValue.ToEntero > 0 Then + + If DdlTipoDireccion.SelectedValue.ToEntero = 1 Then + FechaSalida = TxtFechaLlegada.Text.ToDate + Else + FechaLlegada = TxtFechaLlegada.Text.ToDate + End If + + Else + Alert("Debe seleccionar un tipo de dirección.", TipoMensaje.MsgAdvertencia) + Exit Sub + End If + + + + DT_DireccionesAddRow(-1, TxtEnvioDireccion.Text, TxtEnvioCP.Text.ToEntero, UsuarioActual.CveUsuario, TxtEnvioNoExt.Text, TxtEnvioNoInt.Text, DdlDirClienteEstado.SelectedItem.Text, DdlDirClienteMunicipio.SelectedItem.Text, DdlDirClienteLocalidad.SelectedItem.Text, + DdlDirClienteColonia.SelectedItem.Text, DdlDirClientePais.SelectedValue.ToEntero, DdlDirClienteEstado.SelectedValue.ToEntero, DdlDirClienteMunicipio.SelectedValue.ToEntero, DdlDirClienteLocalidad.SelectedValue.ToEntero, DdlDirClienteColonia.SelectedValue.ToEntero, DdlTipoDireccion.SelectedValue.ToEntero, DdlTipoDireccion.SelectedItem.Text) + + + RegistraScript("$('#divAddDireccionEnvio').modal('hide');") + + + CargaDireccionesEnvio() + + End Sub + + Private Sub LnkAgregarDireccion_Click(sender As Object, e As EventArgs) Handles LnkAgregarDireccion.Click + + TxtEnvioDireccion.Text = "" + TxtEnvioNoExt.Text = "" + TxtEnvioNoInt.Text = "" + TxtEnvioCP.Text = "" + + CargaCombosDirecionesClientesSAT() + TxtFechaLlegada.Text = "" + + CargaTiposDirecciones() + + UpModalDVDireccionEnvio.Update() + RegistraScript("$('#divAddDireccionEnvio').modal('show');") + End Sub + Private Sub GvDireccionesEnvio_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles GvDireccionesEnvio.RowDeleting + Dim ObjClientes As New ClsClientes + Dim TieneError = False + + Dim CveDireccionEnvio As Integer = GvDireccionesEnvio.Rows(e.RowIndex).DataKey("CveDireccionEnvio").ToEntero() + + If Not ObjClientes.DireccionEnvioRemove(CveDireccionEnvio) Then + TieneError = True + End If + + If Not TieneError Then + 'GvDireccionesEnvio.EditIndex = -1 + DT_Direcciones_Remove(e.RowIndex) + Alert("Se eliminó correctamente la dirección de envío.", TipoMensaje.MsgInformacion) + Else + Alert("Ocurrió un error al eliminar la dirección de envío.", TipoMensaje.MsgAdvertencia) + End If + + CargaDireccionesEnvio() + End Sub + + + Public Sub CargaDireccionesEnvio() + + GvDireccionesEnvio.DataSource = DT_Direcciones + GvDireccionesEnvio.DataBind() + UpGvDireccionesEnvio.Update() + + + If DT_Direcciones.Rows.Count = 2 Then + LnkAgregarDireccion.Visible = False + Else + LnkAgregarDireccion.Visible = True + End If + + End Sub + + + + Property DT_Direcciones As DataTable + Get + + If ViewState("DT_Direcciones") Is Nothing Then + ViewState("DT_Direcciones") = Inicializa_DT_Direcciones() + End If + + Return DirectCast(ViewState("DT_Direcciones"), DataTable) + + End Get + Set(value As DataTable) + + End Set + End Property + + + Private Function Inicializa_DT_Direcciones() As DataTable + + Dim DT_Resultado As New DataTable + + DT_Resultado.Columns.Add("CveDireccionEnvio", GetType(Integer)) + DT_Resultado.Columns.Add("EnvioDireccion", GetType(String)) + + + DT_Resultado.Columns.Add("EnvioCP", GetType(Integer)) + DT_Resultado.Columns.Add("CveUsuario", GetType(Integer)) + DT_Resultado.Columns.Add("Estatus", GetType(Integer)) + DT_Resultado.Columns.Add("EnvioNoExt", GetType(String)) + DT_Resultado.Columns.Add("EnvioNoInt", GetType(String)) + + + DT_Resultado.Columns.Add("EnvioEstado", GetType(String)) + DT_Resultado.Columns.Add("EnvioMunicipio", GetType(String)) + DT_Resultado.Columns.Add("EnvioLocalidad", GetType(String)) + DT_Resultado.Columns.Add("EnvioColonia", GetType(String)) + + + DT_Resultado.Columns.Add("CvePais", GetType(Integer)) + DT_Resultado.Columns.Add("CveEstado", GetType(Integer)) + DT_Resultado.Columns.Add("CveMunicipio", GetType(Integer)) + DT_Resultado.Columns.Add("CveLocalidad", GetType(Integer)) + DT_Resultado.Columns.Add("CveColonia", GetType(Integer)) + DT_Resultado.Columns.Add("Tipo", GetType(Integer)) + DT_Resultado.Columns.Add("EnvioTipo", GetType(String)) + + + + Return DT_Resultado + + End Function + + + + Private Function DT_DireccionesAddRow(CveDireccionEnvio As Integer, EnvioDireccion As String, EnvioCP As Integer, CveUsuario As Integer, EnvioNoExt As String, EnvioNoInt As String, EnvioEstado As String, EnvioMunicipio As String, + EnvioLocalidad As String, EnvioColonia As String, CvePais As Integer, CveEstado As Integer, CveMunicipio As Integer, CveLocalidad As Integer, CveColonia As Integer, Tipo As Integer, EnvioTipo As String) As Boolean + + + + Dim Nrow As DataRow = DT_Direcciones.NewRow + + Nrow("CveDireccionEnvio") = CveDireccionEnvio + Nrow("EnvioDireccion") = EnvioDireccion + Nrow("EnvioCP") = EnvioCP + Nrow("CveUsuario") = CveUsuario + Nrow("EnvioNoExt") = EnvioNoExt + Nrow("EnvioNoInt") = EnvioNoInt + Nrow("EnvioEstado") = EnvioEstado + Nrow("EnvioMunicipio") = EnvioMunicipio + Nrow("EnvioLocalidad") = EnvioLocalidad + Nrow("EnvioColonia") = EnvioColonia + Nrow("CvePais") = CvePais + Nrow("CveEstado") = CveEstado + Nrow("CveMunicipio") = CveMunicipio + Nrow("CveLocalidad") = CveLocalidad + Nrow("CveColonia") = CveColonia + Nrow("Tipo") = Tipo + Nrow("EnvioTipo") = EnvioTipo + + DT_Direcciones.Rows.Add(Nrow) + + DT_Direcciones.AcceptChanges() + + Return True + + End Function + + + Private Sub DT_Direcciones_Remove(Index_Remove As Integer) + + DT_Direcciones.Rows(Index_Remove).Delete() + DT_Direcciones.AcceptChanges() + + End Sub + + +#End Region + + Protected Sub DdlTipoDireccion_SelectedIndexChanged(sender As Object, e As EventArgs) + + + If DdlTipoDireccion.SelectedValue.ToEntero = 2 Then + DvDistancia.Visible = True + Else + DvDistancia.Visible = False + End If + + UpBodyDireccion.Update() + UpModalDVDireccionEnvio.Update() + + End Sub +End Class + + + + diff --git a/Inventarios/TraspasoAlmacen.aspx.vb b/Inventarios/TraspasoAlmacen.aspx.vb index 3f7215698..5b16d58fe 100644 --- a/Inventarios/TraspasoAlmacen.aspx.vb +++ b/Inventarios/TraspasoAlmacen.aspx.vb @@ -1156,7 +1156,7 @@ Partial Class Inventarios_TraspasoAlmacen Dim CveSubProyectoTimbre As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltraParametros($"CveAlmacen = {DdlAlmacenOrigen.SelectedValue}").Rows(0)("CveSubProyecto").ToString.ToEntero Dim Fechallegada As DateTime = (TxtFechaLlegada.Text & " 23:59:59").ToDateTime - Dim CveEntregaAlmacen As Integer = ObjGral.AddInvEntregaAlmacenRuta(CveSubProyectoTimbre, -1, -1, CveMovimientoSalida, DdlChofer.SelectedValue.ToEntero, DdlUnidadCamion.SelectedValue.ToEntero, TxtFechaEntrega.Text.ToDate, Fechallegada, "T", 1, 1, 1) + Dim CveEntregaAlmacen As Integer = ObjGral.AddInvEntregaAlmacenRuta(CveSubProyectoTimbre, -1, -1, CveMovimientoSalida, DdlChofer.SelectedValue.ToEntero, DdlUnidadCamion.SelectedValue.ToEntero, TxtFechaEntrega.Text.ToDate, Fechallegada, "T", "-1", "-1", Now, 1, 1, 1) If CveEntregaAlmacen > 0 Then CveTimbre = ObjGral.AddGralTimbre("Tra", CveSubProyectoTimbre, TxtFechaEntrega.Text.ToDate, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveEntregaAlmacen:=CveEntregaAlmacen, AplicaCP:=ChkEmitirCartaPorte.Checked) From 443360a9f3954545336cdabeca5e55da51814041 Mon Sep 17 00:00:00 2001 From: JORGE LUIS CAUDILLO ESPARZA Date: Wed, 22 Dec 2021 17:09:23 -0700 Subject: [PATCH 7/9] --- App_Code/ClsEdocumentacion.vb | 77 +- App_Code/ClsNominas.vb | 8 + App_Code/ClsPaginas.vb | 5 +- Compras/PopUpVerFactura.aspx.vb | 51 + Documentacion/TableroMaterialidad.aspx | 643 +- Documentacion/TableroMaterialidad.aspx.cs | 583 +- GPS/EmbarqueManifiesto.rdlc | 7579 +++++++++++++++++++++ Nomina/Aguinaldo.aspx | 3 +- Nomina/Aguinaldo.aspx.cs | 20 +- Nomina/CalculoISRAnual.aspx | 95 + Nomina/CalculoISRAnual.aspx.cs | 34 + Nomina/ChecadorAsistencia.aspx.cs | 12 + RH/CalculoSBC.aspx | 66 +- RH/CalculoSBC.aspx.cs | 76 +- RH/Personal.aspx.vb | 2 +- 15 files changed, 9040 insertions(+), 214 deletions(-) create mode 100644 GPS/EmbarqueManifiesto.rdlc create mode 100644 Nomina/CalculoISRAnual.aspx create mode 100644 Nomina/CalculoISRAnual.aspx.cs diff --git a/App_Code/ClsEdocumentacion.vb b/App_Code/ClsEdocumentacion.vb index 08b2a0361..a7c6401b3 100644 --- a/App_Code/ClsEdocumentacion.vb +++ b/App_Code/ClsEdocumentacion.vb @@ -246,14 +246,14 @@ Public Class ClsEdocumentacion End Try Return Retorno - End Function + End Function #End Region - - + + #Region "D O C U M E N T A C I O N - E L E C T R O N I C A" - - - Public Function DocumentacionElectronicaGet(CvePersonal As Integer, CveCliente As Integer, CveProveedor As Integer, CveEmpresa As Integer, CveDocumentacionTipo As Integer, Optional CveVenta As Integer = -1, Optional Modulo As Integer = 1) As Boolean + + + Public Function DocumentacionElectronicaGet(CvePersonal As Integer, CveCliente As Integer, CveProveedor As Integer, CveEmpresa As Integer, CveDocumentacionTipo As Integer, Optional CveVenta As Integer = -1, Optional Modulo As Integer = 1, Optional Periodo As Integer = -1) As Boolean Dim Retorno As Boolean = False DataAdapter("PA_Edoc_DocumentacionElectronicaGet") @@ -265,6 +265,7 @@ Public Class ClsEdocumentacion .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@CveDocumentacionTipo", SqlDbType.Int).Value = CveDocumentacionTipo .Add("@CveVenta", SqlDbType.Int).Value = CveVenta + .Add("@Periodo", SqlDbType.Int).Value = Periodo .Add("@Modulo", SqlDbType.Int).Value = Modulo End With @@ -279,7 +280,7 @@ Public Class ClsEdocumentacion End Function Public Function DocumentacionElectronicaAdd(CveDocumentacion As Integer, CvePersonal As Integer, CveCliente As Integer, CveProveedor As Integer, Estatus As Integer, Observacion As String, Adjunto As String, - CveUsuario As Integer, FechaLimite As Date, Optional FechaVigencia As Date = Nothing, Optional CveVenta As Integer = -1, Optional Observacion2 As String = "-1") As Integer + CveUsuario As Integer, FechaLimite As Date, Optional FechaVigencia As Date = Nothing, Optional CveVenta As Integer = -1, Optional Observacion2 As String = "-1", Optional Periodo As Integer = 190001) As Integer Dim Retorno As Integer = 0 @@ -298,6 +299,7 @@ Public Class ClsEdocumentacion .Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario .Add("@FechaLimite", SqlDbType.Date).Value = FechaLimite .Add("@FechaVigencia", SqlDbType.Date).Value = FechaVigencia + .Add("@Periodo", SqlDbType.Int).Value = Periodo .Add("@CveDocumentacionElectronica", SqlDbType.Int).Direction = ParameterDirection.Output 'FechaVigencia End With @@ -534,6 +536,9 @@ Public Class ClsEdocumentacion Dim retorno As Boolean = False Try SqlAdapter.Fill(DSet) + If DSet.Tables.Count > 0 Then + Data = DSet.Tables(0) + End If retorno = True Catch ex As Exception retorno = False @@ -543,8 +548,64 @@ Public Class ClsEdocumentacion End Function +#Region "CRUD_Edoc_MaterialidadEnvios" + Public Function Edoc_MaterialidadEnviosGet(cveMaterialidadEnvios As Int32, cveCliente As Int32, cveUsuario As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_Edoc_MaterialidadEnviosGet", CommandType.StoredProcedure) + addParameters("@CveMaterialidadEnvios", SqlDbType.Int, cveMaterialidadEnvios) + addParameters("@CveCliente", SqlDbType.Int, cveCliente) + addParameters("@CveUsuario", SqlDbType.Int, cveUsuario) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + retorno = RunQuery("Ocurrió un error al obtener el Edoc_MaterialidadEnvios.") + Return retorno + End Function + Public Function Edoc_MaterialidadEnviosAdd(cveCliente As Int32, periodo As Int32, noarchivos As Int32, observacion As String, Correos As String, cveUsuario As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_Edoc_MaterialidadEnviosAdd", CommandType.StoredProcedure) + addParameters("@CveCliente", SqlDbType.Int, cveCliente) + addParameters("@Periodo", SqlDbType.Int, periodo) + addParameters("@Noarchivos", SqlDbType.Int, noarchivos) + addParameters("@Observacion", SqlDbType.VarChar, observacion) + addParameters("@Correos", SqlDbType.VarChar, Correos) + addParameters("@CveUsuario", SqlDbType.Int, cveUsuario) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + retorno = RunQuery("Ocurrió un error al agregar el Edoc_MaterialidadEnvios.") + Return retorno + End Function + Public Function Edoc_MaterialidadEnviosUp(cveMaterialidadEnvios As Int32, cveCliente As Int32, periodo As Int32, noarchivos As Int32, observacion As String, cveUsuario As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_Edoc_MaterialidadEnviosUp", CommandType.StoredProcedure) + addParameters("@CveMaterialidadEnvios", SqlDbType.Int, cveMaterialidadEnvios) + addParameters("@CveCliente", SqlDbType.Int, cveCliente) + addParameters("@Periodo", SqlDbType.Int, periodo) + addParameters("@Noarchivos", SqlDbType.Int, noarchivos) + addParameters("@Observacion", SqlDbType.VarChar, observacion) + addParameters("@CveUsuario", SqlDbType.Int, cveUsuario) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + retorno = RunQuery("Ocurrió un error al actualizar el Edoc_MaterialidadEnvios.") + Return retorno + End Function + Public Function Edoc_MaterialidadEnviosRemove(cveMaterialidadEnvios As Int32, cveEmpresa As Int32) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_Edoc_MaterialidadEnviosRemove", CommandType.StoredProcedure) + addParameters("@CveMaterialidadEnvios", SqlDbType.Int, cveMaterialidadEnvios) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + retorno = RunQuery("Ocurrió un error al eliminar el Edoc_MaterialidadEnvios.") + Return retorno + End Function +#End Region #Region "CRUD_Edoc_Materialidad" - + Public Function materialidadDoctos(strxml As String, cveUsuario As Integer, cveEmpresa As Integer, periodo As Integer, Optional guardar As Boolean = False) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_MaterialidadAddXmlDoctos", CommandType.StoredProcedure) + addParameters("@strxml", SqlDbType.Xml, If(String.IsNullOrEmpty(strxml.Trim()), DBNull.Value, DirectCast(strxml, Object))) + addParameters("@CveUsuario", SqlDbType.Int, cveUsuario) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + addParameters("@Periodo", SqlDbType.Int, periodo) + addParameters("@Guardar", SqlDbType.Bit, guardar) + retorno = RunQueryds("Ocurrió un error al analizar archivos.") + Return retorno + End Function Public Function TableroMaterialidadGET(cveEmpresa As Integer, anio As Integer, mes As Integer) As Boolean Dim retorno As Boolean = False DataAdapter("PA_Edoc_TableroMaterialidad", CommandType.StoredProcedure) diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb index 92cd449be..ed48b6e96 100644 --- a/App_Code/ClsNominas.vb +++ b/App_Code/ClsNominas.vb @@ -2356,6 +2356,14 @@ Public Class ClsNominas Return retorno End Function + Public Function CalculoISRAnual(ejercicio As Integer, cveEmpresa As Integer) As Boolean + Dim retorno As Boolean = False + DataAdapter("PA_Nom_CalculoISRAnual", CommandType.StoredProcedure) + addParameters("@Ejercicio", SqlDbType.Int, ejercicio) + addParameters("@CveEmpresa", SqlDbType.Int, cveEmpresa) + retorno = RunQuery("Ocurrió un error al obtener el PA_Nom_CalculoISRAnual.") + Return retorno + End Function Public Function GetNominaAcumulado(Ejercicio As Integer, CveProyecto As Integer, CveSubProyecto As Integer, CveTurno As Integer, CvePeriodoI As Integer, CvePeriodoF As Integer, CveEmpresa As Integer, Optional RegimenContratacion As Integer = 1, Optional CvePersonal As Integer = -1) As Boolean Dim retorno As Boolean = False diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 4bb7de6c7..cbbd3d9bf 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -4109,6 +4109,9 @@ Public Class ClsPaginas PaginaDict.Add("/Nomina/NomTimbrados.aspx".ToUpper(), 920) PaginaDict.Add("/Nomina/Aguinaldo.aspx".ToUpper(), -1) PaginaDict.Add("/Nomina/RepInversiondeNomina.aspx".ToUpper(), 906) + PaginaDict.Add("/Nomina/CalculoISRAnual.aspx".ToUpper(), 983) + PaginaDict.Add("/Documentacion/TableroMaterialidad.aspx".ToUpper(), 965) + PaginaDict.Add("/Documentacion/TableroMaterialidadDetalle.aspx".ToUpper(), 965) PaginaDict.Add("/RH/DiasFestivos.aspx".ToUpper(), -1) PaginaDict.Add("/Nomina/FiniquitoB.aspx".ToUpper(), -1) ''CONFIGURACIONES GENERALES @@ -5181,8 +5184,6 @@ Public Class ClsPaginas PaginaDict.Add("/RH/RepVacaciones.aspx".ToUpper(), 422) PaginaDict.Add("/RH/CatChecadorTipo.aspx".ToUpper(), 427) PaginaDict.Add("/RH/CatChecadorHorarios.aspx".ToUpper(), 428) - PaginaDict.Add("/Documentacion/TableroMaterialidad.aspx".ToUpper(), -1) - PaginaDict.Add("/Documentacion/TableroMaterialidadDetalle.aspx".ToUpper(), -1) PaginaDict.Add("/RH/RepChecadorPreAsistencia.aspx".ToUpper(), 628) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index eb9ccbd04..9d667c877 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -202,11 +202,62 @@ Partial Class PopUpVerFactura If Request("onlyPrint").ToString() = "PalletCaja" Then imprimirpallet(Request("CvePallet").ToString.ToEntero()) End If + If Request("onlyPrint").ToString() = "manifiesto" Then + imprimirManifiesto(Request("cveEmbarqueManifiesto").ToString.ToEntero()) + End If End If End If End Sub + Private Sub imprimirManifiesto(cveEmbarqueManifiesto As Integer) + Dim NoEmbarque As String = "" + Dim Fecha As String = "" + Dim SubProyecto As String = "" + Dim AgenciaAduanalUSA As String = "" + Dim AgenciaAduanalMEX As String = "" + Dim tablaReporte As New DataTable + + 'Envase = "1 1/9" + 'Tamano = "Small" + 'Cultivo = "Tomate" + 'noPallet = "000001" + 'Variedad = "Golden" + Using objnom As New ClsNominas + If objnom.PA_AGRO_Embarque_ManifiestoGet(-1, -1, -1, cveEmbarqueManifiesto) And objnom.DtResultados.Rows.Count > 0 Then + Dim row As DataRow = objnom.DtResultados.Rows(0) + NoEmbarque = row("NoEmbarque").ToString() + Fecha = row("Fecha").ToString() + SubProyecto = row("SubProyecto").ToString() + AgenciaAduanalUSA = row("AgenciaAduanalUSA").ToString() + AgenciaAduanalMEX = row("AgenciaAduanalMEX").ToString() + + End If + + End Using + Dim params As New List(Of ReportParameter) + params.Add(New ReportParameter("NoEmbarque", NoEmbarque)) + params.Add(New ReportParameter("Fecha", Fecha)) + params.Add(New ReportParameter("SubProyecto", SubProyecto)) + params.Add(New ReportParameter("AgenciaAduanalUSA", AgenciaAduanalUSA)) + params.Add(New ReportParameter("AgenciaAduanalMEX", AgenciaAduanalMEX)) + params.Add(New ReportParameter("Temperatura", "45")) + + + + + + + + + + Dim lrds As New List(Of ReportDataSource) + Dim rds As New ReportDataSource With {.Name = "DataSet1", .Value = tablaReporte} + lrds.Add(rds) + '"Empresas/Grales/Formatos/EquiposGPS.rdlc" + '"D:\\ADSistemas\\Proyectos\\SIG\\SIGIT\\GPS\\PalletEtiqueta.rdlc" + ImprimirPDF("GPS/EmbarqueManifiesto.rdlc", lrds, params, "Equipo GPS") + End Sub Private Sub imprimirpallet2(cvePallet As Integer) Dim Envase As String = "" Dim Tamano As String = "" diff --git a/Documentacion/TableroMaterialidad.aspx b/Documentacion/TableroMaterialidad.aspx index c7a5d2ecc..d165a0b51 100644 --- a/Documentacion/TableroMaterialidad.aspx +++ b/Documentacion/TableroMaterialidad.aspx @@ -11,6 +11,9 @@ #C_Tab_Tlablero tr td:nth-child(n+2) { text-align: center } + .spanfoliofiscal{ + white-space:nowrap; + } @@ -36,7 +39,7 @@ - +
    @@ -111,7 +114,14 @@ XML Timbrados PDF Timbrados - + + Enviar + + + + + + @@ -149,7 +159,8 @@ <%# string.Format("{1}/{0}",DataBinder.Eval(Container.DataItem, "Personal"),DataBinder.Eval(Container.DataItem, "PersonalPDF"),DataBinder.Eval(Container.DataItem, "CveCliente"),anio,mes) %> - <%# string.Format("Enviar",DataBinder.Eval(Container.DataItem, "CveCliente"),anio,mes) %> + + <%-- <%# string.Format("Enviar",DataBinder.Eval(Container.DataItem, "CveCliente"),anio,mes) %>--%> @@ -159,163 +170,519 @@ - -