diff --git a/App_Code/ClsContabilidad.vb b/App_Code/ClsContabilidad.vb index ddcd598c7..ed8ddbc71 100644 --- a/App_Code/ClsContabilidad.vb +++ b/App_Code/ClsContabilidad.vb @@ -5551,7 +5551,6 @@ Public Class ClsContabilidad .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa .Add("@TipoCambio", SqlDbType.Int).Value = TipoCambio .Add("@TCEspecifico", SqlDbType.Float).Value = TCEspecifico - .Add("@Cuenta", SqlDbType.NVarChar).Value = Cuenta End With Try SqlAdapter.Fill(Data) diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb index 18fa76558..38ccbc84f 100644 --- a/App_Code/ClsPaginas.vb +++ b/App_Code/ClsPaginas.vb @@ -1075,7 +1075,7 @@ Public Class ClsPaginas End Get Set(ByVal value As DataTable) - Dim AppNombre As String = String.Format("GlobalDTSubProyectosUsuarios-{0}", CveEmpresa) + Dim AppNombre As String = String.Format("GlobalDTProyectosUsuarios-{0}", CveEmpresa) Application(AppNombre) = value End Set End Property @@ -6713,6 +6713,17 @@ Public Class ClsPaginas params.Add(New ReportParameter("ClienteDatoExtra1", DatosCliente)) End If + 'ECONOLLANTAS - AGREGAR QR DE DESCARGA + If UsuarioActual.CveEmpresa = 141 Then + Dim QRDescarga As String = "" + + Dim cfdi As New RVCFDI33.GeneraCFDI() + Dim b As Byte() = cfdi.ConvertirQrCode($"http://econollantas.adssistemas.mx/Ashx/E141.ashx?P={Encripta($"File={Vta.SerieFolio}.pdf")}") + QRDescarga = Convert.ToBase64String(b) + + params.Add(New ReportParameter("QRDescarga", QRDescarga)) + End If + 'INE COMPLEMENTOS If UsuarioActual.CveEmpresa.Contiene(72, 1) Then Dim INETipoProceso As String = "" diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb index 0ed55e76e..7ce9cd07e 100644 --- a/App_Code/Modelos.vb +++ b/App_Code/Modelos.vb @@ -551,6 +551,8 @@ Namespace Modelos Public Property SeTimbro As Boolean Public Property SeTimbroNotaCredito As Boolean Public Property CveEstatus As Integer + Public Property CveMovimientoUsado As Integer + Public Property FolioUsado As String End Class Public Function RegenerarPrePolizas(Optional TransaccionCompartida As SqlClient.SqlTransaction = Nothing, Optional ObjACTransac As ClsContPAQi = Nothing) As Boolean @@ -707,7 +709,7 @@ Namespace Modelos Next End If - GuardarVenta(Me, ObjVentas, ObjConta, ObjInventario, ObjContr, DtDetalle, Me.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, ObjAcum:=ObjAcum) + GuardarVenta(Me, ObjVentas, ObjConta, ObjInventario, ObjContr, DtDetalle, Me.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, ObjAcum:=ObjAcum, Resp:=Retorno) 'SI ES REFACTURACION Dim ObjNC As List(Of Object) = Nothing @@ -1341,7 +1343,7 @@ Namespace Modelos End If End Sub - Public Sub GuardarVenta(ByRef factura As Modelos.Factura, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjContr As ClsContratos, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNotaCredito As Boolean = False, Optional ObjAcum As ClsAcumuladores = Nothing) + Public Sub GuardarVenta(ByRef factura As Modelos.Factura, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjContr As ClsContratos, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNotaCredito As Boolean = False, Optional ObjAcum As ClsAcumuladores = Nothing, ByRef Optional Resp As MMensajeFactura = Nothing) Dim Msgok As New StringBuilder factura.CvePrePoliza = ObjConta.AddPrePolizas("Modelos/GuardarVentaM", factura.CvePlantillaPoliza, factura.TotalTC, factura.TotalTC, factura.CveMoneda, factura.Fecha, If(factura.CveEmpresaCRM > 0, factura.EmpresaCRM, factura.Cliente.Nombre), factura.CveUsuario, factura.CveEmpresa) @@ -1375,11 +1377,6 @@ Namespace Modelos factura.Timbre.Comprobante.Serie = ObjVentas.Serie factura.Timbre.Comprobante.Folio = ObjVentas.Folio.ToString - - If Not GuardarUsados(ObjVentas.IniciaTransacSQL, ObjVentas, factura) Then - ErrorList.Add("Error al guardar usados") - End If - If factura.TipoDocto = "Egs" AndAlso NuevaFactura = 1 Then If DtVentasNC Is Nothing Then InicializaDTVentasNC() @@ -1452,6 +1449,11 @@ Namespace Modelos End If Next + 'GUARDAR USADOS + If Not GuardarUsados(ObjAcum, ObjVentas, ObjInventario, factura, Resp) Then + ErrorList.Add("Error al guardar usados") + End If + 'BONIFICACION USADOS If UsadosBonificacion IsNot Nothing AndAlso UsadosBonificacion.Count > 0 AndAlso TipoBonificacion > 0 Then For Each CveMovto In UsadosBonificacion @@ -1627,10 +1629,10 @@ Namespace Modelos If ErrorList.Count = 0 Then 'prepoliza - GuardarVentaPrePolizas(factura, ObjConta, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas, ObjEventos:=ObjEventos) + GuardarVentaPrePolizas(factura, ObjConta, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, ObjInventario:=ObjInventario) If ErrorList.Count = 0 Then 'inventarios - GuardarVentaInventarios(factura, ObjInventario, ObjConta) + GuardarVentaInventarios(factura, ObjInventario, ObjConta, ObjVentas, ObjAcum) 'GuardaRecepcionUsados(factura, ObjInventario, ObjConta) @@ -1910,7 +1912,7 @@ Namespace Modelos DtVentasNC.Rows.Add(Dr) End If End Sub - Private Function GuardarUsados(SqlTransaccion As SqlClient.SqlTransaction, ByRef ObjVentas As ClsVentas, factura As Modelos.Factura) As Boolean + Private Function GuardarUsados(ByRef ObjAcum As ClsAcumuladores, ByRef ObjVentas As ClsVentas, ByRef ObjInventario As ClsInventarios, factura As Modelos.Factura, ByRef Optional Resp As MMensajeFactura = Nothing) As Boolean Dim Resultado As Boolean = True If UsuarioActual.Empresa.Funcionalidad(533).ToEntero > 0 AndAlso factura.TipoDocto.Contiene("Ing", "Rem") Then @@ -1918,8 +1920,6 @@ Namespace Modelos If factura.TipoDocto = "Ing" AndAlso factura.Cliente.EsDistribuidor Then Dim CvePSPSA As Integer = UsuarioActual.Empresa.Funcionalidad(533).ToEntero - Dim ObjAcum As New ClsAcumuladores(SqlTransaccion) - For Each drow As DataRow In factura.DtDetalle.Rows If drow("CveTamaño").ToString.ToEntero > 0 And (CvePSPSA <> drow("CvePS").ToString.ToEntero) Then If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, drow("Cantidad").ToString.ToEntero, drow("CveTamaño").ToString.ToEntero, 2, factura.CveVenta, UsuarioActual.CveUsuario, @@ -1944,6 +1944,64 @@ Namespace Modelos End If End If + 'SI ES UNA RNC DE CARGO GENERA EL MOVIMIENTO DE ALMACEN AQUI + If factura.TipoDocto = "RNC" AndAlso factura.Num1 = 1 AndAlso factura.DtMovimientosUsados IsNot Nothing AndAlso ObjAcum IsNot Nothing Then + 'Dim Mensaje As String = "" + Dim CveMovimiento = ObjInventario.AddMovimiento(factura.CveAlmacen, factura.CveConceptoMovimiento, 1, factura.Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, factura.CveVenta, + CveSubProyecto, CveActivoFijo:=-1, Guia:="", Observaciones:=factura.ObservacionesMovimiento, CvePersonal:=-1, CveCliente:=CveCliente, CveClienteSucursal:=CveClienteSucursal, Modulo:="RU/G") + If CveMovimiento <= 0 Then + 'Mensaje = "Error al guardar los movimientos" + Resultado = False + Else + + + For Each Dr As DataRow In factura.DtMovimientosUsados.Rows + + Dim ImporteConcepto As Decimal = 0 + If factura.CveConceptoMovimiento = 42 AndAlso factura.CveMoneda = 2 Then + ImporteConcepto = Dr("PU").ToString.ToDecimal * GlobalTipoCambio(factura.Fecha).ToDecimal + Else + ImporteConcepto = Dr("PU").ToString.ToDecimal + End If + + If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, ImporteConcepto, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, Observaciones:=Dr("Observaciones").ToString, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + 'Mensaje = "Error al guardar los movimientos" + Resultado = False + Exit For + End If + + If CveVenta > 0 AndAlso Not ObjVentas.UpdateVentaUsadoRecibido(CveVenta, Dr("CvePS").ToString.ToEntero, True, CveMovimiento) Then + 'Mensaje = "Error al actualizar el recibo de los usados" + Resultado = False + Exit For + End If + + 'si es selectedvalue = 42, es entrada ,3 -salida + Dim CveConceptoUsados As Integer = If(factura.CveConceptoMovimiento = 42, 1, 2) + + If factura.Cliente.EsDistribuidor AndAlso factura.CveConceptoMovimiento = 42 AndAlso Dr("CveTamaño").ToString.ToEntero > 0 Then + + If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, Dr("Cantidad").ToString.ToEntero(), Dr("CveTamaño").ToString.ToEntero, CveConceptoUsados, CveVenta, UsuarioActual.CveUsuario, + UsuarioActual.CveEmpresa, 0, Dr("Observaciones").ToString, CveMovimiento:=CveMovimiento) Then + ' Mensaje = "Error al guardar Movimientos de distribuidor" + Resultado = False + Exit For + End If + + End If + Next + End If + + Resp.CveMovimientoUsado = CveMovimiento + + If CveMovimiento > 0 Then + If ObjInventario.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) Then + Resp.FolioUsado = ObjInventario.DtResultados.FiltroPrimeroValor("Folio") + End If + End If + + End If + Return Resultado End Function @@ -1968,7 +2026,7 @@ Namespace Modelos Return Resultado End Function - Private Sub GuardarVentaPrePolizas(ByRef factura As Modelos.Factura, ByRef ObjConta As ClsContabilidad, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing) + Private Sub GuardarVentaPrePolizas(ByRef factura As Modelos.Factura, ByRef ObjConta As ClsContabilidad, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjInventario As ClsInventarios = Nothing) Dim CveIE As Integer = -1 Dim DT As DataTable = Nothing @@ -1986,7 +2044,7 @@ Namespace Modelos 'P R E P O L I Z A S If Me.TipoDocto <> "Cot" Then If Me.CvePrePoliza > 0 Then - If ProcesoPrepolizas(factura, ObjConta, CveIE, TmpDTDetalleMovimientos, objContPaqi, 1, ObjBancos, ObjVentas, ObjEventos:=ObjEventos) Then + If ProcesoPrepolizas(factura, ObjConta, CveIE, TmpDTDetalleMovimientos, objContPaqi, 1, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, ObjInventario:=ObjInventario) Then ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If Else @@ -1997,7 +2055,7 @@ Namespace Modelos Private Function ProcesoPrepolizas(ObjFactura As Factura, ByRef ObjConta As ClsContabilidad, CveIE As Integer, TmpDTDetalle As DataTable, ByRef objContPaqi As ClsContPAQi, Optional ValorMultiplicador As Integer = 1, ByRef Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional ByRef DtRemisionesRelacionadas As DataTable = Nothing, Optional SeCancelaRemisionProceso As Boolean = False, Optional CancelarRemisiones As Boolean = False, Optional ListaRemisionesCancelar As List(Of Integer) = Nothing, - Optional CveEstatusRefacturacion As Integer = 0) As Boolean + Optional CveEstatusRefacturacion As Integer = 0, Optional ByRef ObjInventario As ClsInventarios = Nothing) As Boolean Dim ErrorPrepoliza As Boolean = False Try Dim DT As DataTable @@ -2177,12 +2235,48 @@ Namespace Modelos IdCtaContableCliente = IdCtaContable CveCuentaCliente = CveCuenta - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, Referencia, 278, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + Dim CveMovimiento As Integer = -1 + Dim CveAlmacen As Integer = -1 + + If ObjInventario IsNot Nothing AndAlso ObjInventario.GetInv_Mov(ObjFactura.CveVenta, UsuarioActual.CveEmpresa) Then + CveMovimiento = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero() + CveAlmacen = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero() + End If + + 'VERIFICA SI TIENE MOVIMIENTO DE ENTRADA DE USADO + If CveMovimiento > 0 AndAlso CveAlmacen > 0 Then + + If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + Dim Importe68 As Decimal = ObjInventario.DtResultados.SUMD("Total").RoundSQL + + Dim IdCtaContable68 = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen={CveAlmacen}").ToEntero + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, Importe68, Referencia, 68, Concepto, FechaMovimiento, IdCtaContable68, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=Importe68, Contabilizable:=False) Then + ErrorPrepoliza = True + End If + + Dim Importe318 As Decimal = importeMovimiento - Importe68 + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, Importe318, Referencia, 318, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=Importe318, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + ErrorPrepoliza = True + End If + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + ErrorPrepoliza = True + End If + + Else ErrorPrepoliza = True End If + Else - ErrorPrepoliza = True + If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, Referencia, 278, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + ErrorPrepoliza = True + End If + Else + ErrorPrepoliza = True + End If End If importeMovimiento = 0 @@ -3487,7 +3581,7 @@ Namespace Modelos Return OcurrioError End Function - Private Function GuardarVentaInventarios(ByRef factura As Modelos.Factura, ObjInventario As ClsInventarios, ObjConta As ClsContabilidad) As Boolean + Private Function GuardarVentaInventarios(ByRef factura As Modelos.Factura, ObjInventario As ClsInventarios, ObjConta As ClsContabilidad, ObjVentas As ClsVentas, ObjAcum As ClsAcumuladores) As Boolean Dim OcurrioError As Boolean = False If UsuarioActual.Empresa.UsaInventarios AndAlso factura.TipoDocto.Contiene("Ing", "Egs", "Rem") Then @@ -4311,7 +4405,7 @@ Namespace Modelos If CveEstatusFacturaAsignado <= 0 Then Try If ObjFactura.FolioFiscal <> "" Then - If ObjFactura.TipoDocto.Contiene("Ing", "Ant", "Dev", "Egs", "RNC") Then + If ObjFactura.TipoDocto.Contiene("Ing", "Ant", "Dev", "Egs") Then Dim Vigencia = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), UsuarioActual.Empresa.FacturaProduccion) @@ -4891,6 +4985,8 @@ Namespace Modelos CveEstatus = 12 Case "Com" CveEstatus = 9 + Case "Cot" + CveEstatus = 10 Case "Ped", "DPe" CveEstatus = 14 End Select @@ -5591,6 +5687,7 @@ Namespace Modelos Public Property FacturaMateriales As Integer Public Property TipoDescuento As Integer Public Property SubProyectoPorcentajeIVA As Double + Public Property PorcentajeIVA As Double Public Property CveAlmacenOrigenContrato As Integer Public Property CveDevolucion As Integer Public Property TotalOtrosConceptos As Decimal @@ -5604,6 +5701,9 @@ Namespace Modelos Public Property CveAnticipo As Integer Public Property RemisionesLista As List(Of Integer) Public Property CveAlmacen As Integer + Public Property CveConceptoMovimiento As Integer + Public Property ObservacionesMovimiento As String + Public Property DtMovimientosUsados As DataTable Public Property CveAlmacenDevolucion As Integer Public Property CveVenta As Integer Public Property CveEmpresa As Integer @@ -5982,14 +6082,16 @@ Namespace Modelos Public Property FemsaFactura As Modelos.FemsaFactura Public Sub SetSubProyecto() - If CveSubProyecto > 0 Then - SubProyecto = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1).FiltroPrimero($"CveSubProyecto = {CveSubProyecto}")) + If CveSubProyecto > 0 AndAlso UsuarioActual IsNot Nothing Then + SubProyecto = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero($"CveSubProyecto = {CveSubProyecto}")) End If End Sub Public Sub SetSubProyectoMatriz() - Dim Row As Data.DataRow = GlobalDTSubProyectos(-1, CveSubProyecto:=-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal=1") - If Not IsNothing(Row) Then - SubProyectoMatriz = New Modelos.SubProyectoModel(Row) + If UsuarioActual IsNot Nothing Then + Dim Row As Data.DataRow = GlobalDTSubProyectos(-1, CveSubProyecto:=-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal=1") + If Not IsNothing(Row) Then + SubProyectoMatriz = New Modelos.SubProyectoModel(Row) + End If End If End Sub Public Sub SetCliente() @@ -6033,7 +6135,7 @@ Namespace Modelos End Sub Public Sub SetSubProyecto(obj As ClsPaginas) If CveSubProyecto > 0 AndAlso Not IsNothing(obj) Then - SubProyecto = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1).FiltroPrimero($"CveSubProyecto = {CveSubProyecto}")) + SubProyecto = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1, CveEmpresa:=obj.UsuarioActual.CveEmpresa).FiltroPrimero($"CveSubProyecto = {CveSubProyecto}")) End If End Sub Public Sub SetSubProyectoMatriz(obj As ClsPaginas) diff --git a/Ashx/E141.ashx b/Ashx/E141.ashx new file mode 100644 index 000000000..1afdca0b9 --- /dev/null +++ b/Ashx/E141.ashx @@ -0,0 +1,135 @@ +<%@ WebHandler Language="VB" Class="E141" %> + +Imports System +Imports System.Web +Imports System.Data +Imports System.Net.Http +Imports Newtonsoft.Json +Imports Newtonsoft.Json.Linq +Imports Extensiones +Imports System.IO + +Public Class E141 : Implements IHttpHandler + + Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable + Get + Return False + End Get + End Property + + Private ReadOnly Property CveEmpresa As Integer = 141 + + Public ReadOnly Property EsProduccion As Boolean + Get + If IsNothing(System.Configuration.ConfigurationManager.AppSettings("EsProduccion")) Then + Return False + Else + Return (System.Configuration.ConfigurationManager.AppSettings("EsProduccion").ToString() = "1") + End If + End Get + End Property + + Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest + Dim retorno As String = "no se encontro la variable" + Try + Dim Params = If(context.Request("P") = Nothing, "", context.Request("P").ToString()) + + If Not String.IsNullOrEmpty(Params) Then + Dim UrlParametros As Hashtable = Parametros(Decripta(Params)) + + Dim File As String = UrlParametros("FILE").ToString() + If Not String.IsNullOrEmpty(File) Then + ImprimirbytesPDF(context, DescargarFactura(File), File) + End If + + End If + Catch ex As Exception + retorno = ex.ToString() + ex.GuardaLog(ex.ToString()) + context.Response.Write(retorno) + End Try + + End Sub + + + 'Private Function DescargarFactura(CveVenta As Integer) As Byte() + ' Dim Url = New Uri(String.Format("{0}Compras/PopUpVerFactura.aspx?P={1}", ClsPaginas.UrlSitio, Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=0", CveVenta)))) + ' Dim File As Byte() = Nothing + ' Try + ' Using httpClient = New HttpClient() + ' httpClient.Timeout = New TimeSpan(0, 15, 0) + ' Using request = New HttpRequestMessage(HttpMethod.Get, Url) + ' request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CVEUSUARIO=100", CveEmpresa, DateTime.UtcNow.Ticks))) + ' Dim response = httpClient.SendAsync(request).Result + ' If response.StatusCode = Net.HttpStatusCode.OK Then + ' File = response.Content.ReadAsByteArrayAsync().Result + ' End If + ' End Using + ' End Using + ' Catch ex As Exception + ' File = Nothing + ' OnError("Ocurrió un error al descargar la factura", ex) + ' End Try + + ' Return File + 'End Function + + Private Function DescargarFactura(FilePDF As String) As Byte() + Dim Url = New Uri(String.Format("{0}Compras/PopUpVerFactura.aspx?TipoDocto=Ing&File={1}&TipoArchivo=PDF", "http://localhost/", FilePDF)) + Dim File As Byte() = Nothing + Try + Using httpClient = New HttpClient() + httpClient.Timeout = New TimeSpan(0, 1, 0) + Using request = New HttpRequestMessage(HttpMethod.Get, Url) + request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CVEUSUARIO=100", CveEmpresa, DateTime.UtcNow.Ticks))) + Dim response = httpClient.SendAsync(request).Result + If response.StatusCode = Net.HttpStatusCode.OK Then + File = response.Content.ReadAsByteArrayAsync().Result + End If + End Using + End Using + Catch ex As Exception + File = Nothing + OnError("Ocurrió un error al descargar la factura", ex) + End Try + + Return File + End Function + + Public Sub ImprimirbytesPDF(ByVal context As HttpContext, bytes As Byte(), NombreArchivo As String) + 'limpio ReportViwer + Dim mimeType As String = Nothing + Dim extension As String = Nothing + + Try + + bytes = bytes + context.Response.Buffer = True + context.Response.Clear() + context.Response.ContentType = mimeType + context.Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", NombreArchivo)) + context.Response.BinaryWrite(bytes) ' create the file + context.Response.Flush() ' send it to the client to download + context.Response.SuppressContent = True + context.ApplicationInstance.CompleteRequest() + context.Response.End() + + Catch ex As Exception + End Try + End Sub + + Private Function Parametros(Cadena As String) As Hashtable + Dim P1() As String = Cadena.Split("&"c) + Dim Tmp As String + Dim P2() As String + + Dim URLParametros As New Hashtable + + For Each Tmp In P1 + P2 = Tmp.Replace("%26%", "&").Split("="c) + URLParametros.Add(P2(0).ToString.ToUpper, P2(1)) + Next + Return URLParametros + End Function + +End Class \ No newline at end of file diff --git a/Ashx/SIGFacturacionCiclica.ashx b/Ashx/SIGFacturacionCiclica.ashx index ca832ce20..efa477a6f 100644 --- a/Ashx/SIGFacturacionCiclica.ashx +++ b/Ashx/SIGFacturacionCiclica.ashx @@ -344,7 +344,7 @@ Public Class SIGFacturacionCiclica : Implements IHttpHandler, IRequiresSessionSt Dim DtDetalle As DataTable = Nothing Dim objContratos As New ClsContratos If objContratos.GetContratosDetalle(DR("CveContrato").ToString.ToEntero) Then - DtDetalle = objContratos.DtResultados + DtDetalle = objContratos.DtResultados.FiltraParametros("CveTipoPresupuesto=2") Else DtDetalle = Nothing End If diff --git a/Bancos/ProveedoresAbonar.aspx.vb b/Bancos/ProveedoresAbonar.aspx.vb index 74ddb3d8c..d8325a81b 100644 --- a/Bancos/ProveedoresAbonar.aspx.vb +++ b/Bancos/ProveedoresAbonar.aspx.vb @@ -1657,19 +1657,18 @@ Partial Class Bancos_ProveedoresAbonar importeMX = 0 End If Else + ImporteMovimiento = gvr.DataKey("IVAPorPagar").ToDecimal * PorcentajePago + + If CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVA").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVA").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVA").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVA").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVA").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVA").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVA").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVA").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra End If ImporteMovimiento = Math.Round(ImporteMovimiento, 2, MidpointRounding.AwayFromZero) @@ -1723,19 +1722,18 @@ Partial Class Bancos_ProveedoresAbonar importeMX = 0 End If Else + ImporteMovimiento = gvr.DataKey("IVAPorPagar").ToDecimal * PorcentajePago + If CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * If(FuncionalidadFluctuacionImpuestos, TipoCambioPago, tipoCambioCompra) ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IVAPorPagar").ToDecimal - (gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IVAPorPagar").ToDecimal, gvr.DataKey("IVADeducible").ToDecimal * PorcentajePago) + importeMX = ImporteMovimiento * If(FuncionalidadFluctuacionImpuestos, TipoCambioPago, tipoCambioCompra) End If ImporteMovimiento = Math.Round(ImporteMovimiento, 2, MidpointRounding.AwayFromZero) @@ -1760,9 +1758,9 @@ Partial Class Bancos_ProveedoresAbonar IdCtaContable = If(IdCtaIVAAcreditable > 0, IdCtaIVAAcreditable, 0) 'se registra el iva no acreditable - If gvr.DataKey("IVANoDeducible").ToDecimal > 0 Then + If gvr.DataKey("IVAPorPagarNoDeducible").ToDecimal > 0 Then - Dim ImporteNOIVA As Decimal = gvr.DataKey("IVANoDeducible").ToDecimal * PorcentajePago + Dim ImporteNOIVA As Decimal = gvr.DataKey("IVAPorPagarNoDeducible").ToDecimal * PorcentajePago If Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, ImporteNOIVA, Referencia, 280, ConceptoMovimiento, FechaMovimiento, IdCtaContableNoIVA, -1, CveIE, CveCompra:=gvr.DataKey("CveCompra").ToEntero, CveProveedor:=CveProveedor, ImporteMX:=ImporteNOIVA, ImporteME:=If(TipoCambioPago = 1, 0, ImporteMovimiento), CveCuenta:=CveCuenta, TipoCambio:=TipoCambioGeneral, PorcentajeImpuesto:=PorcentajeImpuesto) Then MsgError = "No se pudo insertar la póliza" @@ -1778,19 +1776,16 @@ Partial Class Bancos_ProveedoresAbonar End If Case 25 'IEPS X Acreditar Dim TotalImporte As Decimal = gvr.FCTextBox("TxtAbonar").Text.ToDecimal + ImporteMovimiento = gvr.DataKey("IEPSPorPagar").ToDecimal * PorcentajePago If CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra End If ImporteMovimiento = Math.Round(ImporteMovimiento, 2, MidpointRounding.AwayFromZero) @@ -1806,19 +1801,16 @@ Partial Class Bancos_ProveedoresAbonar End If Case 26 'IEPS Acreditable Dim TotalImporte As Decimal = gvr.FCTextBox("TxtAbonar").Text.ToDecimal + ImporteMovimiento = gvr.DataKey("IEPSPorPagar").ToDecimal * PorcentajePago If CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento ElseIf CveMoneda = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * If(FuncionalidadFluctuacionImpuestos, TipoCambioPago, tipoCambioCompra) ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 1 Then - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * tipoCambioCompra ElseIf CveMoneda = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero = 2 Then tipoCambioCompra = gvr.DataKey("TipoCambio").ToDecimal - ImporteMovimiento = If(TotalImporte = gvr.DataKey("Saldo").ToDecimal AndAlso Math.Abs(Math.Round(gvr.DataKey("IEPSPorPagar").ToDecimal - (gvr.DataKey("IEPS").ToDecimal * PorcentajePago), 2)) <= 0.02, gvr.DataKey("IEPSPorPagar").ToDecimal, gvr.DataKey("IEPS").ToDecimal * PorcentajePago) importeMX = ImporteMovimiento * If(FuncionalidadFluctuacionImpuestos, TipoCambioPago, tipoCambioCompra) End If ImporteMovimiento = Math.Round(ImporteMovimiento, 2, MidpointRounding.AwayFromZero) diff --git a/Bancos/RepCxCCliente.aspx.vb b/Bancos/RepCxCCliente.aspx.vb index f9e979d4c..1a02a421e 100644 --- a/Bancos/RepCxCCliente.aspx.vb +++ b/Bancos/RepCxCCliente.aspx.vb @@ -19,7 +19,8 @@ Partial Class Bancos_RepCxCCliente DdlMoneda.DataSource = GlobalDTMonedas() DdlMoneda.DataBind() - If UsuarioActual.CveEmpresa = 119 Then + Dim EsWS = If(UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1", True, False) + If EsWS Then DdlClientesWS.setEsWebService(True) Else DdlClientesWS.setEsWebService(False) diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb index b4fdc4a72..6bc7a4144 100644 --- a/Compras/PopUpVerFactura.aspx.vb +++ b/Compras/PopUpVerFactura.aspx.vb @@ -826,7 +826,7 @@ Partial Class PopUpVerFactura params.Add(New ReportParameter("Chofer", Chofer)) params.Add(New ReportParameter("Placa", Placa)) params.Add(New ReportParameter("Recibio", Recibio)) - params.Add(New ReportParameter("FechaEntrega", FechaEntrega.ToString())) + params.Add(New ReportParameter("FechaEntrega", FechaEntrega.ToDateTime().ToString("dd/MM/yyyy"))) params.Add(New ReportParameter("EspecifUnidad", EspecifUnidad)) params.Add(New ReportParameter("DireccionOrigen", SBDireccionO.ToString)) params.Add(New ReportParameter("DireccionDestino", SBDireccionD.ToString)) @@ -3241,8 +3241,8 @@ Partial Class PopUpVerFactura params.Add(New ReportParameter("Direccion", Almacen)) params.Add(New ReportParameter("FechaConFormato", FechaConFormato)) - params.Add(New ReportParameter("FechaInicial", Fecha)) - params.Add(New ReportParameter("FechaFinal", Today.ToString)) + 'params.Add(New ReportParameter("FechaInicial", Fecha)) + 'params.Add(New ReportParameter("FechaFinal", Today.ToString("dd/MM/yyyy"))) params.Add(New ReportParameter("Sucursal", "Sucursal")) params.Add(New ReportParameter("Cliente", NombreCliente)) diff --git a/Contabilidad/RepIVA.aspx b/Contabilidad/RepIVA.aspx index a86f38ed6..2418a9532 100644 --- a/Contabilidad/RepIVA.aspx +++ b/Contabilidad/RepIVA.aspx @@ -109,7 +109,7 @@
- +
diff --git a/Contabilidad/RepIVA.aspx.cs b/Contabilidad/RepIVA.aspx.cs index 49b756477..6d37128bf 100644 --- a/Contabilidad/RepIVA.aspx.cs +++ b/Contabilidad/RepIVA.aspx.cs @@ -66,6 +66,8 @@ public partial class Contabilidad_RepIVA : ClsPaginas LnkAccionesDIOT.Visible = true; + DdlCuenta.DataSource = get_GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:UsuarioActual.CveEmpresa, CveTipoCuenta:2); + DdlCuenta.DataBind(); } public void Consulta() @@ -73,27 +75,26 @@ public partial class Contabilidad_RepIVA : ClsPaginas if (TipoCambio == 3 && TxtEspecifico.Text != "") { TCEspecifico = TxtEspecifico.Text.ToDouble(); } else { TCEspecifico = -1; } int Conciliado = DdlTipoMovto.SelectedValue.ToEntero(); LblMsgAcreditable.Text = ""; // lbl de mensajes de negativos - string Cuenta = TxtCuenta.Text == "" ? "-1" : TxtCuenta.Text; ClsContabilidad ObjCont = new ClsContabilidad(); - if (ObjCont.GetRepIVA(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), 1, UsuarioActual.CveUsuario, -1, Conciliado, UsuarioActual.CveEmpresa, TipoCambio, TCEspecifico)) + if (ObjCont.GetRepIVA(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), 1, UsuarioActual.CveUsuario, DdlCuenta.SelectedValue.ToEntero(), Conciliado, UsuarioActual.CveEmpresa, TipoCambio, TCEspecifico)) { GvT.DataSource = ObjCont.DtResultados; DtIVATrasladado = ObjCont.DtResultados; - if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 1, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) + if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 1, DdlCuenta.SelectedValue.ToEntero(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) { GvIEPSA.DataSource = ObjCont.DtResultados; DtIEPSA = ObjCont.DtResultados; } - if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 2, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) + if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 2, DdlCuenta.SelectedValue.ToEntero(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) { GvIVAA.DataSource = ObjCont.DtResultados; DtIVAA = ObjCont.DtResultados; } } - if (ObjCont.GetRepIVA(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), 2, UsuarioActual.CveUsuario, -1, Conciliado, UsuarioActual.CveEmpresa, TipoCambio, TCEspecifico)) + if (ObjCont.GetRepIVA(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), 2, UsuarioActual.CveUsuario, DdlCuenta.SelectedValue.ToEntero(), Conciliado, UsuarioActual.CveEmpresa, TipoCambio, TCEspecifico)) { GvA.DataSource = ObjCont.DtResultados; DtIVAAcreditable = ObjCont.DtResultados; @@ -103,7 +104,7 @@ public partial class Contabilidad_RepIVA : ClsPaginas } - if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 3, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) + if (ObjCont.GetRepIVAAcumulado(txtFechaI.Text.ToDate(), txtFechaF.Text.ToDate(), Conciliado, 3, DdlCuenta.SelectedValue.ToEntero(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)) { GvIVA2.DataSource = ObjCont.DtResultados; } diff --git a/Contratos/Contrato.aspx.vb b/Contratos/Contrato.aspx.vb index 8753cc67a..789944859 100644 --- a/Contratos/Contrato.aspx.vb +++ b/Contratos/Contrato.aspx.vb @@ -1009,16 +1009,17 @@ Partial Class Contratos_Default ChkAplicaFacCiclica.Checked = CBool(ObjContratos.DtResultados.Rows(0)("FacturacionCicilica")) If ChkAplicaFacCiclica.Checked Then - CargaPeriodos() - ChkFacAutomatica.Checked = CBool(ObjContratos.DtResultados.Rows(0)("FacturacionCiclicaAutomatico")) - - DdlPeriodo.SelectedValueExist(ObjContratos.DtResultados.Rows(0)("CvePeriodo")) - DdlPeriodo_SelectedIndexChanged(DdlPeriodo, EventArgs.Empty) - DdlDiaFact.SelectedValueExist(ObjContratos.DtResultados.Rows(0)("DiaMesFacturacion").ToString()) TxtObservaciones.Text = ObjContratos.DtResultados.Rows(0)("Observaciones").ToString ChkAplicaFacCiclica_CheckedChanged(ChkAplicaFacCiclica, EventArgs.Empty) + + If ObjContratos.DtResultados.Rows(0)("CvePeriodo").ToString().ToEntero() > 0 Then + DdlPeriodo.SelectedValueExist(ObjContratos.DtResultados.Rows(0)("CvePeriodo").ToString().ToEntero()) + DdlPeriodo_SelectedIndexChanged(DdlPeriodo, EventArgs.Empty) + End If + UpFacCiclica.Update() + End If @@ -3558,6 +3559,8 @@ Partial Class Contratos_Default End Sub Private Sub CargaPeriodos() + DdlPeriodo.Items.Clear() + Dim ObjContratos As New ClsContratos If ObjContratos.GetPeriodos(-1, UsuarioActual.CveEmpresa) Then DtPeriodo = ObjContratos.DtResultados @@ -3568,6 +3571,8 @@ Partial Class Contratos_Default ObjContratos.Dispose() DdlPeriodo.DataBind() + DdlPeriodo.Items.Insert(0, New ListItem("Seleccione", "-1")) + UpGral.Update() End Sub Protected Sub DdlPeriodo_SelectedIndexChanged(sender As Object, e As EventArgs) @@ -4490,6 +4495,7 @@ Partial Class Contratos_Default Protected Sub ChkAplicaFacCiclica_CheckedChanged(sender As Object, e As EventArgs) DivFacCiclica.Visible = ChkAplicaFacCiclica.Checked DivCiclosComerciales.Visible = ChkAplicaFacCiclica.Checked + CargaPeriodos() UpFacCiclica.Update() End Sub diff --git a/Contratos/FacturacionMasiva.aspx.vb b/Contratos/FacturacionMasiva.aspx.vb index 2cc589153..b9f676193 100644 --- a/Contratos/FacturacionMasiva.aspx.vb +++ b/Contratos/FacturacionMasiva.aspx.vb @@ -542,7 +542,7 @@ Partial Class Contratos_FacturacionMasiva Dim objContratos As New ClsContratos If objContratos.GetContratosDetalle(DR("CveContrato").ToString.ToEntero) Then - DTDetalle = objContratos.DtResultados + DTDetalle = objContratos.DtResultados.FiltraParametros("CveTipoPresupuesto=2") Else DTDetalle = Nothing End If diff --git a/Empresas/141/Formatos/Factura.rdlc b/Empresas/141/Formatos/Factura.rdlc index cd8da5b44..76daa0c7d 100644 --- a/Empresas/141/Formatos/Factura.rdlc +++ b/Empresas/141/Formatos/Factura.rdlc @@ -361,7 +361,7 @@ Sello Digital del CFDI: @@ -373,7 +373,7 @@ =Parameters!SelloCFDI.Value @@ -386,7 +386,7 @@ Sello Digital del SAT: @@ -399,7 +399,7 @@ =Parameters!SelloSAT.Value @@ -412,7 +412,7 @@ Cadena Original del complemento de certificación digital del SAT: @@ -425,7 +425,7 @@ =Parameters!CadenaOriginal.Value @@ -438,7 +438,7 @@ RFC del Proveedor de Certificación: @@ -451,7 +451,7 @@ Este documento es una representación impresa de un CFDI @@ -479,7 +479,7 @@ true 6.06618in 0.06752in - 1.60919in + 1.42169in 8.23953in @@ -2289,10 +2289,10 @@ Textbox60 - 11.08689cm - 15.67443cm - 0.50299cm - 5.42547cm + 19.12502cm + 0.28014cm + 0.6882cm + 20.71217cm 18 - - Embedded - ECONO_Marcas - FitProportional - 11.08689cm - 0.22108cm - 1.5cm - 15.34658cm - 34 - - - - true true @@ -3018,7 +3003,7 @@ - < ** Toda corrección de los datos del comprobante debera efectuarse a más tardar tres dias despues de su expedición. ** > + < ** Toda corrección de los datos del comprobante debera efectuarse a más tardar tres dias despues de su expedición. ** > @@ -3048,14 +3033,341 @@ 2pt + + Database + =System.Convert.FromBase64String(Parameters!QRDescarga.Value) + image/png + FitProportional + 8.0685in + 6.67743in + 0.6035in + 0.78275in + 35 + + + + + + true + true + + + + + Puedes encontrarla en Appstore o Google play + + + + + + + + + como Econollantas: + + + + + + + Textbox60 + 19.5698cm + 0.28014cm + 1.49135cm + 5.37042cm + 36 + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + + + + Black + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + + + + Black + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + Con tu aplicación el beneficio más + + + + + + + + + importante es poder escanear el código QR de tu póliza y siempre traerla contigo para + + + + + + + + + atenderte + + + + + + + + + MÁS RÁPIDO Y MEJOR. + + + + + + + Textbox60 + 19.5698cm + 7.45145cm + 2.45709cm + 6.56105cm + 39 + + + 2pt + 2pt + 2pt + 2pt + + + + true + true + + + + + Una vez descargada la App utiliza la podrás agregar tu póliza escaneando el código QR + + + + + + + Textbox60 + 19.56002cm + 14.67145cm + 1.46939cm + 6.32076cm + 40 + + + 2pt + 2pt + 2pt + 2pt + + + + Embedded + rockblade + FitProportional + 11.19428cm + 5.58835cm + 0.86918cm + 4.08628cm + 41 + + + + + + Embedded + yokohama2 + FitProportional + 11.33186cm + 0.58737cm + 0.65751cm + 4.35272cm + 42 + + + + + + Embedded + mastercraft + FitProportional + 11.30011cm + 17.06617cm + 0.93972cm + 3.99634cm + 43 + + + + + + Embedded + coopertires + FitProportional + 11.33186cm + 10.33489cm + 0.65751cm + 6.09184cm + 44 + + + + - 19.49544cm + 22.57045cm - =Today + =Now.ToString("dd/MM/yyyy hh:mm tt") @@ -3759,6 +4071,12 @@ true ReportParameter1 + + String + true + true + ReportParameter1 + @@ -3872,6 +4190,72 @@ jx8/Xllp+wqaoKBgJydH+fUZ6ISePXtu3Gj7Vqjhw4efO3dO3rG+vr4QXZcuXZKv6414Dw+PvLx8RLi4 +7dSgtwMLvuAAQPgxNu8RAW03gZ5IRBa8IMjIiL27NljjWf+sbOzS0srUDfluuuug0SxeRWMFGoVmAUHB2u12kuXLun1emsbEHBw0KWlXWCbVrp27VZdXQWkbVqCn5+/zdUVMGLEyNzcnKKiIrlKgepoulMQY2VlZfIrNuxSjM0NeABNSk9PkzYagMiBzrx48aLVEkUNHTrs22/XQyhCe8gXsgNt7BkcAoVCGRPTEaJOfnBbR96G0FDs7DG2yeFw/m20ddTgcDgcDqcpx48fDwsLgw8Kz5UBL7ON1NTUZmSkV1dXowQUJeVvtQTJgnrJPXv2jIs7iwCESlRUVBtLAJKRKKLZI0eOdHFxuXDBVkug8LYrHLB161Z//wA7Ozup6Db3A+RNx44dy8sr2NM4LC8Cjo6OTV9EA+LiznTo0MEqSADsHRzspQ0ZubmWNc3khwZlNvucUteuXY1Go2REay8pKY2O7piTk4OwFEuv0UH80ByNgOzx9PTEvkjbVGmw+/SgkdAnvr6+UhG0cLrfVwCWkCjQOfHx8UqlUoptDlrhZVgtiO/du3dV1eU7Gzkczr8NLnI4HA6H8+uBG3306NHg4OCIiAhnZ2eNRgMXU0prGfjo8NTZ21cuXbpkb+8wYsSIoKAgeOEqlaqlEhCP8nU6HfL279+/rq4eGgnxR44cKSsrR4y/vz9980yju9RsQCFqtdrBwQHKasKECWvXrk1OTrG5GwoGZ8+29qLJZjl8+FCnTp369evn6uqKEtrSD7AZMGDAl19+OWrUSDQb+86AMhk4cGBLj8vLn8kBMLZZAI1hMll0i7zY2NjY9HRLj8lBA86ePYsGS0YqFcK+vj7PPPN0fX29FEXp27fv9u2N1sGzkpGRgb2WNqiMMRolhXbq1ClXV7fRo0dD6kDRscjWQbNxgKB++/btc8W1p6XGUVA+TqHAwMAxY8Zs2bLF+qYdDofzL8TyxxIpyOFwOBzOryU2trMomquqquka ZbZ/X7cBU4+7u0dOTra0TUEJ8KrLy8vp+zSlSDlms2W1MTc318rKqmYFgLe3j4eHR0FBfnV1TbMlAEx6Hh7uOp0jXPlz5yxKBp4xdAJLZUAYeHh4ZmZeXlrtqoiJ6YS9KC4uvmI/YI/s7e3Lykqx73RZZ8ke/QNaWh0OjadXci5P39B+8idqGJ6eXpYrHQ0dgQLr6uoqKmzNUJqTEwq8XBqyQDV17dolKUm+wJ3lLaXyhdpsgJKhC8dJoHtt1qQODAyCBL14MVPabhkcIzQJGhjiOT+/oJVupJZODftoWX0O/YnOSU5OojEcDuffCxc5HA6Hw+FwOBwOp13Bb1fjcDgcDofD4XA47QoucjgcDofD4XA4HE67goscDofD4XA4HA6H067gIofD4XA4HA6Hw+G0K7jI4XA4HA6Hw+FwOO0KLnI4HA6Hw+FwOBxOu4KLHA6Hw+FwOBwOh9Ou4CKHw+FwOBwOh8PhtCu4yOFwOBwOh8PhcDjtCi5yOBwOh8PhcDgcTruCixwOh8PhcDgcDofTruAih8PhcDgcDofD4bQruMjhcDgcDofD4XA47QoucjgcDofD4XA4HE67goscDofD4XA4HA6H067gIofD4XA4HA6Hw+G0K7jI4XA4HA6Hw+FwOO0KLnI4HA6Hw+FwOBxOu4KLHA6Hw+FwOBwOh9Ou4CKHw+FwOBwOh8PhtCu4yOFwOBwOh8PhcDjtCi5yOBwOh8PhcDgcTruCixwOh8PhcDgcDofTruAih8PhcDgcDofD4bQruMjhcDgcDofD4XA47QoucjgcDofD4XA4HE67goscDofD4XA4HA6H067gIofD4XA4HA6Hw+G0IwTh/wkiAUDA4LaQAAAAAElFTkSuQmCC + + image/png + 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 + + + image/png + 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 + + + image/png + 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 + + + image/png + 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 + es-MX true diff --git a/Inventarios/RecepcionAlmacen.aspx.vb b/Inventarios/RecepcionAlmacen.aspx.vb index 1365777f6..99ce829eb 100644 --- a/Inventarios/RecepcionAlmacen.aspx.vb +++ b/Inventarios/RecepcionAlmacen.aspx.vb @@ -394,6 +394,14 @@ Partial Class Inventarios_RecepcionAlmacen ViewState("RealizarMovimientoVirtual") = Value End Set End Property + Private Property SumarImporteUsados As Boolean + Get + Return If(IsNothing(ViewState("SumarImporteUsados")), False, CBool(ViewState("SumarImporteUsados"))) + End Get + Set + ViewState("SumarImporteUsados") = Value + End Set + End Property #End Region @@ -847,6 +855,7 @@ Partial Class Inventarios_RecepcionAlmacen CveAlmacenDevolucionProveedor = -1 RealizarTraspasoAlmacenDevolucion = False RealizarMovimientoVirtual = False + SumarImporteUsados = False BtnGuardar.Enabled = True CargaAlmacenes(-1) @@ -900,6 +909,7 @@ Partial Class Inventarios_RecepcionAlmacen RealizarTraspasoAlmacenDevolucion = False RealizarMovimientoVirtual = False + SumarImporteUsados = False CveAlmacenDevolucionProveedor = -1 Dim ObjCompras As New ClsCompras @@ -956,9 +966,11 @@ Partial Class Inventarios_RecepcionAlmacen 'SI LA COMPRA TIENE PRODUCTOS Y USADOS SOLO MOSTRAR LOS PRODUCTOS If NumProductos > 0 AndAlso NumUsados > 0 Then DtRecepcion = ObjInventario.DtResultados.FiltraParametros("EsUsado = False") + SumarImporteUsados = True 'SI LA COMPRA TIENE PUROS USADOS, MOSTRAR LOS USADOS Y CARGAR LOS ALMACENES ElseIf NumProductos = 0 AndAlso NumUsados > 0 Then CargaSoloUsados = True + SumarImporteUsados = True DtRecepcion = ObjInventario.DtResultados.Copy() If UsuarioActual.CveRol = 1 Then CargaAlmacenes(-1, "22,24", CveTipoCompra) @@ -966,6 +978,7 @@ Partial Class Inventarios_RecepcionAlmacen CargaAlmacenes(DtRecepcion.Rows(0)("CveSubProyecto").ToString.ToEntero, "22", CveTipoCompra) End If Else + SumarImporteUsados = False DtRecepcion = ObjInventario.DtResultados.Copy() End If @@ -2704,8 +2717,11 @@ Partial Class Inventarios_RecepcionAlmacen Exit For End If Next - If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then - ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal") + + If SumarImporteUsados Then + If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) Then + ImporteIngresoAdicional = ObjInventario.DtResultados.SUMD("TotalOriginal") + End If End If Else diff --git a/Inventarios/RecepcionUsados.aspx.vb b/Inventarios/RecepcionUsados.aspx.vb index 4cf3c681a..d2b995433 100644 --- a/Inventarios/RecepcionUsados.aspx.vb +++ b/Inventarios/RecepcionUsados.aspx.vb @@ -1052,10 +1052,11 @@ Partial Class Inventarios_RecepcionUsados Protected Sub Guardar(Optional GenerarRNC As Boolean = False) If GvM.Rows.Count > 0 Then Dim Msg As New StringBuilder() - + Dim Resp As Modelos.Factura.MMensajeFactura = Nothing Dim ObjInventario As New ClsInventarios Dim ObjAcum As New ClsAcumuladores(ObjInventario.IniciaTransacSQL()) Dim ObjVentas As New ClsVentas(ObjInventario.IniciaTransacSQL()) + Dim ObjConta As New ClsContabilidad(ObjInventario.IniciaTransacSQL()) Dim ErrorMovInv As Boolean = False Dim ErrorAC As Boolean = False @@ -1089,93 +1090,116 @@ Partial Class Inventarios_RecepcionUsados CveVenta = -1 End If + If Not ErrorMovInv AndAlso GenerarRNC AndAlso ObjRemisionNC IsNot Nothing Then CargaDTDetalleRNC() - Dim Resp = ObjRemisionNC.EmitirFactura(False, ObjInventario.IniciaTransacSQL) - For Each mensaje2 As String In Resp.Mensajes - Msg.AppendFormat("
{0}", mensaje2) - Next + Resp = ObjRemisionNC.EmitirFactura(False, ObjInventario.IniciaTransacSQL) + 'For Each mensaje2 As String In Resp.Mensajes + ' Msg.AppendFormat("
{0}", mensaje2) + 'Next If Resp.TieneError Then ErrorMovInv = True - Alert(Msg.ToString, If(Resp.CveVenta > 0, TipoMensaje.MsgInformacion, TipoMensaje.MsgAdvertencia)) + 'Alert(Msg.ToString, If(Resp.CveVenta > 0, TipoMensaje.MsgInformacion, TipoMensaje.MsgAdvertencia)) CveVenta = Resp.CveVenta + End If - CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, CveConcepto, 1, Fecha, tFolio, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, + Dim Mensaje As String = "" + Dim FolioInv As String = "" + + If GenerarRNC Then + CveMovimiento = Resp.CveMovimientoUsado + FolioInv = Resp.FolioUsado + Else + + CveMovimiento = ObjInventario.AddMovimiento(DdlAlmacen.SelectedValue.ToEntero, CveConcepto, 1, Fecha, tFolio, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, CveSubProyecto, ActivoFijo, Guia:=TxtGuia.Text, Observaciones:=TxtObservaciones.Text, CvePersonal:=DdlPersonal.SelectedValue.ToEntero, Recibio:=TxtResponsable.Text.Trim, CveCliente:=CveCliente, CveClienteSucursal:=CveClienteSucursal, DepartamentoEntrega:=TxtDepartamentoEntrega.Text, PedidoContrato:=TxtPedidoContrato.Text, CveProveedor:=tCveProveedor, Modulo:="RU/G") - If CveMovimiento <= 0 Then - Alert("No se pudo almacenar el movimiento correctamente", TipoMensaje.MsgError) - RegistraScript("playsonidito('142608__autistic-lucario__error.wav')") - ObjInventario.RollBack() 'deshace lo insertado - Else - Dim Mensaje As String = "" + If CveMovimiento <= 0 Then + Mensaje = "Error al guardar los movimientos" + ErrorMovInv = True + Else + FolioInv = ObjInventario.Folio.ToString() + For Each Dr As DataRow In DtMovimientos.Rows + If CveConcepto = 42 AndAlso DdlMoneda.SelectedValue.ToEntero = 2 Then + ImporteConcepto = Dr("PU").ToString.ToDecimal * GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal + Else + ImporteConcepto = Dr("PU").ToString.ToDecimal + End If - For Each Dr As DataRow In DtMovimientos.Rows - - If CveConcepto = 42 AndAlso DdlMoneda.SelectedValue.ToEntero = 2 Then - ImporteConcepto = Dr("PU").ToString.ToDecimal * GlobalTipoCambio(TxtFecha.Text.ToDate).ToDecimal - Else - ImporteConcepto = Dr("PU").ToString.ToDecimal - End If - - If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, ImporteConcepto, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, Observaciones:=Dr("Observaciones").ToString, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then - Mensaje = "Error al guardar los movimientos" - ErrorMovInv = True - Exit For - End If - - If CveVenta > 0 AndAlso Not ObjVentas.UpdateVentaUsadoRecibido(CveVenta, Dr("CvePS").ToString.ToEntero, True, CveMovimiento) Then - Mensaje = "Error al actualizar el recibo de los usados" - ErrorMovInv = True - Exit For - End If - 'si es selectedvalue = 42, es entrada ,3 -salida - Dim CveConceptoUsados As Integer = If(RBLOpcion.SelectedValue.ToEntero = 42, 1, 2) - - If EsDistribuidor AndAlso RBLOpcion.SelectedValue.ToEntero = 42 AndAlso Dr("CveTamaño").ToString.ToEntero > 0 Then - - If Not ObjAcum.DistribuidorMovtosAdd(DdlClientes.SelectedValue.ToEntero, Dr("Cantidad").ToString.ToEntero(), Dr("CveTamaño").ToString.ToEntero, CveConceptoUsados, CveVenta, UsuarioActual.CveUsuario, - UsuarioActual.CveEmpresa, 0, Dr("Observaciones").ToString, CveMovimiento:=CveMovimiento) Then - Mensaje = "Error al guardar Movimientos de distribuidor" + If Not ObjInventario.AddMovimientoDetalle(CveMovimiento, Dr("Cantidad").ToString.ToDouble, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, ImporteConcepto, CveAF:=Dr("CveAF").ToString.ToEntero, Serie:=Dr("Serie").ToString, Lote:=Dr("Lote").ToString, FechaCaducidad:=Dr("FechaCaducidad").ToString.ToDate, Observaciones:=Dr("Observaciones").ToString, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then + Mensaje = "Error al guardar los movimientos" ErrorMovInv = True Exit For End If - End If - Next + If CveVenta > 0 AndAlso Not ObjVentas.UpdateVentaUsadoRecibido(CveVenta, Dr("CvePS").ToString.ToEntero, True, CveMovimiento) Then + Mensaje = "Error al actualizar el recibo de los usados" + ErrorMovInv = True + Exit For + End If - If Not ErrorMovInv Then + 'si es selectedvalue = 42, es entrada ,3 -salida + Dim CveConceptoUsados As Integer = If(RBLOpcion.SelectedValue.ToEntero = 42, 1, 2) + If EsDistribuidor AndAlso RBLOpcion.SelectedValue.ToEntero = 42 AndAlso Dr("CveTamaño").ToString.ToEntero > 0 Then - Msg.AppendFormat("
El Movimiento se registro con el Folio: {0}", ObjInventario.Folio, CveMovimiento) - Msg.AppendFormat("

Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) + If Not ObjAcum.DistribuidorMovtosAdd(DdlClientes.SelectedValue.ToEntero, Dr("Cantidad").ToString.ToEntero(), Dr("CveTamaño").ToString.ToEntero, CveConceptoUsados, CveVenta, UsuarioActual.CveUsuario, + UsuarioActual.CveEmpresa, 0, Dr("Observaciones").ToString, CveMovimiento:=CveMovimiento) Then + Mensaje = "Error al guardar Movimientos de distribuidor" + ErrorMovInv = True + Exit For + End If - If IDPoliza > 0 Then Msg = Msg.AppendFormat("

Ver Póliza", IDPoliza) + End If + Next - ObjInventario.Commit() ' aplica los movimientos insertados + 'GENERA LA PREPOLIZA DE ALMACEN VS EL CONCEPTO DE RNC + 'If Not ErrorMovInv Then + ' ErrorMovInv = Not GeneraPrePoliza(CveMovimiento, ObjInventario, ObjConta, True) + 'End If - 'Limpia Valores cuando inserta de campos especiales - If UsuarioActual.CveEmpresa = 66 Then - DdlSubProyecto.SelectedValueExist("-1") - End If - - ' EnvioCorreo() - - CargaPendientesRecibir() - UPDatos.Update() - - Else - ObjInventario.RollBack() 'deshace lo insertado - CveMovimiento = 0 - Alert("ocurrió un Error al registrar los movimientos", TipoMensaje.MsgError) End If End If + + + If Not ErrorMovInv Then + If Resp IsNot Nothing Then + For Each mensaje2 As String In Resp.Mensajes + Msg.AppendFormat("
{0}", mensaje2) + Next + End If + End If + + If Not ErrorMovInv Then + + Msg.AppendFormat("
El Movimiento se registro con el Folio: {0}", FolioInv, CveMovimiento) + Msg.AppendFormat("

Imprimir Movimiento ", Encripta(String.Format("OP=Alm&CveMovimiento={0}", CveMovimiento))) + + If IDPoliza > 0 Then Msg = Msg.AppendFormat("

Ver Póliza", IDPoliza) + + ObjInventario.Commit() ' aplica los movimientos insertados + + 'Limpia Valores cuando inserta de campos especiales + If UsuarioActual.CveEmpresa = 66 Then + DdlSubProyecto.SelectedValueExist("-1") + End If + + ' EnvioCorreo() + + CargaPendientesRecibir() + UPDatos.Update() + + Else + ObjInventario.RollBack() 'deshace lo insertado + CveMovimiento = 0 + Alert("ocurrió un Error al registrar los movimientos", TipoMensaje.MsgError) + End If End If Catch ex As Exception ObjInventario.RollBack() 'deshace lo insertado @@ -1202,6 +1226,94 @@ Partial Class Inventarios_RecepcionUsados End Sub + Private Function GeneraPrePoliza(CveMovimiento As Integer, ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, EsContabilizable As Boolean) As Boolean + Dim Correcto As Boolean = True + Try + Dim DtCostos As DataTable = Nothing + Dim ValorInventario As Decimal = 0 + Dim ValorInventarioME As Decimal = 0 + + + ObjInventario.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) + Dim CveVenta As Integer = ObjInventario.CveVenta + Dim CveAlmacen As Integer = ObjInventario.CveAlmacen + Dim SerieFolio As String = ObjInventario.DtResultados.Rows(0)("SerieFolioVenta").ToString + Dim MovAlmacen As Boolean = True + Dim CveConcepto As Integer = ObjInventario.DtResultados.Rows(0)("CveConcepto").ToString().ToEntero() + Dim OrigenMov As Integer = GlobalDTInvConceptos.FiltroPrimeroValor("Origen", "CveConcepto = " & CveConcepto).ToEntero + If OrigenMov = 1 Then MovAlmacen = False Else MovAlmacen = True + + If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then + DtCostos = ObjInventario.DtResultados + Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"}) + Dim IdCtaContable As Integer = 0 + Dim ConceptoPoliza As String = String.Format("{0}-{1}", "Salida de Almacen", SerieFolio) + + If tmpCostos.Rows.Count > 0 Then + Dim Concepto As String = ConceptoPoliza + Dim CvePrePoliza = ObjConta.AddPrePolizas("Inv_EntradaSalida", 74, DtCostos.SUM("Total"), DtCostos.SUM("Total"), 1, TxtFecha.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) + Dim tCveSubProyecto = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveSubProyecto", $"CveAlmacen={CveAlmacen}").ToEntero + Dim tCveConcepto As Integer = 278 + + For Each RowInv As DataRow In tmpCostos.Rows + ValorInventario = DtCostos.SUM("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").ToString.ToDecimal.RoundSQL + If tCveConcepto = 69 Then + IdCtaContable = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero + End If + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, Not MovAlmacen, ValorInventario, Concepto, tCveConcepto, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=ValorInventario, CveSubProyecto:=tCveSubProyecto, Contabilizable:=EsContabilizable) Then + Correcto = False + Exit For + End If + Next + + IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", $"CveAlmacen={CveAlmacen}").ToEntero + + If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, MovAlmacen, DtCostos.SUMD("Total").RoundSQL, Concepto, 68, Concepto, TxtFecha.Text.ToDate, IdCtaContable, -1, CveVenta:=CveVenta, CveMovimientoAlmacen:=CveMovimiento, ImporteMX:=DtCostos.SUMD("Total").RoundSQL, Contabilizable:=EsContabilizable) Then + Correcto = False + End If + + + If ObjConta.ValidacionPrePolizaCuadre(CvePrePoliza, -1) Then + If ObjConta.ValorPolizaDescuadre > 0 Then + GuardaLogAD($"Inventarios/RecepcionAlmacen-PPCompOC | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") + Correcto = False + End If + End If + + 'CONTABILIZAR - SIMPLIFICAR + If Correcto Then + If UsuarioActual.Empresa.Funcionalidad(220) <> "" Then + If Not ObjConta.PrePolizaSimplificacion(CvePrePoliza, UsuarioActual.CveEmpresa) Then + Correcto = False + End If + End If + + 'If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then + ' If ObjContaContPAQ Is Nothing Then + ' ObjContaContPAQ = New ClsContPAQi(UsuarioActual.Empresa) + ' ObjContaContPAQ.IniciaTransacSQL() + ' End If + + ' If Not ObjConta.ContabilizarPrePoliza(CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.Empresa, ObjConta:=ObjContaContPAQ) Then + ' Retorno = False + ' End If + 'End If + + End If + Else + Correcto = False + End If + Else + Correcto = False + End If + Catch ex As Exception + OnError("Ocurrió un error al guadar la prepoliza", ex) + Correcto = False + End Try + + Return Correcto + End Function #End Region #Region " ADD INVENTARIO INICIAL " @@ -2451,6 +2563,12 @@ Partial Class Inventarios_RecepcionUsados ObjRemisionNC.IEPS = ImporteIEPS ObjRemisionNC.Total = Total ObjRemisionNC.TotalOtrosConceptos = 0 + + + ObjRemisionNC.DtMovimientosUsados = DtMovimientos + ObjRemisionNC.CveAlmacen = DdlAlmacen.SelectedValue.ToEntero() + ObjRemisionNC.ObservacionesMovimiento = TxtObservaciones.Text + ObjRemisionNC.CveConceptoMovimiento = CveConcepto End Sub Protected Sub CargaTamaños() diff --git a/Sistemas/UsuarioDetalle.aspx.vb b/Sistemas/UsuarioDetalle.aspx.vb index 2a596754f..64e54fe8e 100644 --- a/Sistemas/UsuarioDetalle.aspx.vb +++ b/Sistemas/UsuarioDetalle.aspx.vb @@ -794,485 +794,490 @@ Partial Class Sistemas_UsuarioDetalle Dim TieneError = False Dim EsNuevoUsuario As Boolean = False - - '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 - - - '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) - EsNuevoUsuario = True - If CveUsuario = -1 Then - TieneError = True - End If - - For Each Row As DataRow In DtAsignacionesMultiEmpresa.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) Then - TieneError = True - End If - - For Each Row As DataRow In DtAsignacionesMultiEmpresa.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 - - + 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 + + + '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) + 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) 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 + + If Not TieneError Then If EsNuevoUsuario Then EnviaCorreo() @@ -1286,7 +1291,12 @@ Partial Class Sistemas_UsuarioDetalle End If - ObjUsuarios.Dispose() + ObjUsuarios.Dispose() + ObjSubProyectos.Dispose() + ObjOC.Dispose() + ObjOS.Dispose() + Indicador.Dispose() + ObjBancos.Dispose() End Sub Private Sub RecargaGlobales(TieneError As Boolean, ObjSubProyectos As ClsSubProyectos, ObjBancos As ClsBancos, ObjOC As ClsOC, ObjUsuarios As ClsSisUsuarios) diff --git a/Ventas/PV.aspx b/Ventas/PV.aspx index af87d4902..2cb3354f2 100644 --- a/Ventas/PV.aspx +++ b/Ventas/PV.aspx @@ -2707,7 +2707,7 @@
+ DataKeyNames="CvePSCargo,CveUM,Cargo,CveTamaño,CodigoPS"> diff --git a/Ventas/PV.aspx.vb b/Ventas/PV.aspx.vb index d16917935..b628ad122 100644 --- a/Ventas/PV.aspx.vb +++ b/Ventas/PV.aspx.vb @@ -4657,7 +4657,28 @@ Partial Class PV DdlPSIndexChange(DdlPS.SelectedValue.ToEntero, DdlPS) DdlUnidadMedida.SelectedValueExist(GvRow.DataKey("CveUM")) TxtCantidad.Text = GvRow.DataKey("Cantidad") - TxtObsPS.Text = GvRow.DataKey("Obs") + + 'Dim TotalCargos As Decimal = 0 + 'Dim StrTamanios As New StringBuilder() + 'StrTamanios.Append("Se recibierón los siguientes usados:") + + 'For Each Gvr As GridViewRow In GvRecepcionUsados.Rows + ' If Gvr.RowType = DataControlRowType.DataRow Then + ' If Gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal > 0 Then + ' TotalCargos += Gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal * Gvr.DataKey("Cargo").ToDecimal + ' StrTamanios.AppendFormat("{0},", Gvr.DataKey("CodigoPS")) + ' End If + ' End If + 'Next + + 'If TotalCargos > 0 Then + ' StrTamanios.Remove(StrTamanios.Length - 1, 1) + 'Else + ' StrTamanios.Clear() + 'End If + + TxtObsPS.Text = GvRow.DataKey("Obs") '.Replace(StrTamanios.ToString(), "") + TxtPrecio.Text = GvRow.DataKey("PU") TxtDescuento.Text = GvRow.DataKey("Descuento") LblTotalPS.Text = GvRow.DataKey("Total") @@ -6681,12 +6702,16 @@ Partial Class PV Dim TotalCargos As Decimal = 0 Dim TotalCantidad As Decimal = 0 + Dim StrTamanios As New StringBuilder() + StrTamanios.Append("Se recibierón los siguientes usados:") + For Each Gvr As GridViewRow In Gv.Rows If Gvr.RowType = DataControlRowType.DataRow Then If Gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal > 0 Then TotalCargos += Gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal * Gvr.DataKey("Cargo").ToDecimal TotalCantidad += Gvr.FCTextBox("TxtCantidad").Text.ToString.ToDecimal + StrTamanios.AppendFormat("{0},", Gvr.DataKey("CodigoPS")) Dim Row As DataRow = TmpDTRecepcionUsados.NewRow() Row("CvePS") = Gvr.DataKey("CvePSCargo").ToEntero @@ -6703,9 +6728,15 @@ Partial Class PV End If Next + If TotalCargos > 0 Then + StrTamanios.Remove(StrTamanios.Length - 1, 1) + Else + StrTamanios.Clear() + End If + Dim StrCargos As New StringBuilder For Each CvePSCargo As Integer In ListaPSCargo - StrCargos.AppendFormat("{0},", CvePSCargo) + StrCargos.AppendFormat(" {0},", CvePSCargo) Next StrCargos.Remove(StrCargos.Length - 1, 1) @@ -6720,28 +6751,38 @@ Partial Class PV For Each Dr As DataRow In TmpDT.FiltraParametros($"EsCargo = True AND EliminarDB = False AND CvePS IN ({StrCargos})").Rows Dim TotalAnterior As Decimal = Dr("Cantidad").ToString.ToDecimal * Dr("PU").ToString.ToDecimal - Dim PUActual As Decimal = (TotalAnterior - TotalCargos) / Dr("Cantidad").ToString.ToDecimal - Dim Descuento As Decimal = Dr("Descuento").ToString.ToDecimal - Dim TotalCalculableImpuestos As Decimal = (Dr("Cantidad").ToString.ToDecimal * (PUActual)) - Descuento - TotalCargos -= TotalAnterior - - If PUActual <= 0 Then - Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) - TmpDT.Rows.Remove(drt(0)) - Else - Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) - Dim drr As DataRow = drt(0) - drr("PU") = PUActual - drr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteIEPS") = Math.Round(Dr("PorcentajeIEPS").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - drr("IEPS") = Dr("ImporteIEPS") - drr("Total") = (Dr("Cantidad").ToString.ToDecimal * PUActual) - drr("TotalImporte") = Math.Round(Dr("Cantidad").ToString.ToDecimal * PUActual, NumeroDecimales) + 'Dim PUActual As Decimal = (TotalAnterior - TotalCargos) / Dr("Cantidad").ToString.ToDecimal + Dim DescuentoCargo As Decimal = (TotalCargos / Dr("Cantidad").ToString.ToDecimal) + If DescuentoCargo > (TotalAnterior - Dr("Descuento").ToString.ToDecimal()) Then + DescuentoCargo = (TotalAnterior - Dr("Descuento").ToString.ToDecimal()) End If + Dim Descuento As Decimal = Dr("Descuento").ToString.ToDecimal + DescuentoCargo + Dim TotalCalculableImpuestos As Decimal = (Dr("Cantidad").ToString.ToDecimal * (Dr("PU").ToString.ToDecimal)) - Descuento + TotalCargos -= DescuentoCargo + + 'If PUActual <= 0 Then + ' Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) + ' TmpDT.Rows.Remove(drt(0)) + 'Else + + + 'End If + + Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) + Dim drr As DataRow = drt(0) + 'drr("PU") = PUActual + drr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteIEPS") = Math.Round(Dr("PorcentajeIEPS").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + drr("IEPS") = Dr("ImporteIEPS") + drr("Descuento") = Descuento + drr("Obs") = StrTamanios.ToString() + Dr("Obs").ToString() + 'drr("Total") = (Dr("Cantidad").ToString.ToDecimal * PUActual) + 'drr("TotalImporte") = Math.Round(Dr("Cantidad").ToString.ToDecimal * PUActual, NumeroDecimales) + If TotalCargos <= 0 Then Exit For End If @@ -6752,27 +6793,47 @@ Partial Class PV For Each Dr As DataRow In TmpDT.FiltraParametros($"EsCargo = False AND EliminarDB = False AND CvePS={CvePS}").Rows Dim PUAnterior As Decimal = Dr("Cantidad").ToString.ToDecimal * Dr("PU").ToString.ToDecimal - Dim PUActual As Decimal = PUAnterior - (TotalCargos / Dr("Cantidad").ToString.ToDecimal) - Dim Descuento As Decimal = Dr("Descuento").ToString.ToDecimal - Dim TotalCalculableImpuestos As Decimal = (Dr("Cantidad").ToString.ToDecimal * (PUActual)) - Descuento - TotalCargos += -(TotalCargos / Dr("Cantidad").ToString.ToDecimal) + Dim DescuentoCargo As Decimal = (TotalCargos / Dr("Cantidad").ToString.ToDecimal) - If PUActual <= 0 Then - Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) - TmpDT.Rows.Remove(drt(0)) - Else - Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) - Dim drr As DataRow = drt(0) - drr("PU") = PUActual - drr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) - drr("ImporteIEPS") = Math.Round(Dr("PorcentajeIEPS").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - drr("IEPS") = Dr("ImporteIEPS") - drr("Total") = (Dr("Cantidad").ToString.ToDecimal * PUActual) - drr("TotalImporte") = Math.Round(Dr("Cantidad").ToString.ToDecimal * PUActual, NumeroDecimales) + If DescuentoCargo > (PUAnterior - Dr("Descuento").ToString.ToDecimal()) Then + DescuentoCargo = (PUAnterior - Dr("Descuento").ToString.ToDecimal()) End If + 'Dim PUActual As Decimal = PUAnterior - DescuentoCargo + Dim Descuento As Decimal = Dr("Descuento").ToString.ToDecimal + DescuentoCargo + + Dim TotalCalculableImpuestos As Decimal = (Dr("Cantidad").ToString.ToDecimal * (PUAnterior)) - Descuento + TotalCargos += -DescuentoCargo + + Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) + Dim drr As DataRow = drt(0) + + drr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) + drr("ImporteIEPS") = Math.Round(Dr("PorcentajeIEPS").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + drr("IEPS") = Dr("ImporteIEPS") + drr("Descuento") = Descuento + 'drr("Obs") = StrTamanios.ToString() + Dr("Obs").ToString() + 'drr("Total") = (Dr("Cantidad").ToString.ToDecimal * PUActual) + 'drr("TotalImporte") = Math.Round(Dr("Cantidad").ToString.ToDecimal * PUActual, NumeroDecimales) + + 'If PUActual <= 0 Then + ' Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) + ' TmpDT.Rows.Remove(drt(0)) + 'Else + ' Dim drt As DataRow() = TmpDT.Select("Consec = " & Dr("Consec").ToString) + ' Dim drr As DataRow = drt(0) + ' 'drr("PU") = PUActual + ' drr("ImporteIVA") = Math.Round(Dr("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + ' drr("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) + ' drr("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) + ' drr("ImporteIEPS") = Math.Round(Dr("PorcentajeIEPS").ToString.ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + ' drr("IEPS") = Dr("ImporteIEPS") + ' 'drr("Total") = (Dr("Cantidad").ToString.ToDecimal * PUActual) + ' 'drr("TotalImporte") = Math.Round(Dr("Cantidad").ToString.ToDecimal * PUActual, NumeroDecimales) + 'End If + If TotalCargos <= 0 Then Exit For End If diff --git a/Ventas/Ventas.aspx b/Ventas/Ventas.aspx index 32824988f..9b0f018b9 100644 --- a/Ventas/Ventas.aspx +++ b/Ventas/Ventas.aspx @@ -245,7 +245,7 @@ Genera O. S.
  • - Autorizar Cotización + Autorizar Cotización
  • @@ -7099,8 +7099,13 @@ TxtImporte.value = FormatoNumero(Saldo, 2); } } else { - TxtImporte.value = ""; - Chk.checked = false; + if (SaldoMaximoUtilizable > 0) { + TxtImporte.value = ""; + Chk.checked = false; + } else { + TxtImporte.value = FormatoNumero(Saldo, 2); + } + } } else { diff --git a/Ventas/Ventas.aspx.vb b/Ventas/Ventas.aspx.vb index 5ecec89aa..71ec1f5d1 100644 --- a/Ventas/Ventas.aspx.vb +++ b/Ventas/Ventas.aspx.vb @@ -2167,7 +2167,7 @@ Partial Class Ventas DdlSubProyectoDatos.Enabled = False BtnEmitirImprimir.Visible = False BtnCrearApartirDe.Visible = True - If UsuarioActual.TienePermisoProceso(302) AndAlso DdlTipoComprobante.SelectedValue <> "Cot" Then BtnEditar.Visible = True + If UsuarioActual.TienePermisoProceso(302) AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then BtnEditar.Visible = True 'DdlEstatus.Enabled = True DivFechaAnticipoCliente.Visible = True @@ -2222,7 +2222,13 @@ Partial Class Ventas End If If UsuarioActual.TienePermisoProceso(269) AndAlso Not DevolucionAlmacen = 2 Then - DivDevAlm.Visible = True + Dim ObjInventario As New ClsInventarios + If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then + If ObjInventario.DtResultados.Rows.Count > 0 Then + DivDevAlm.Visible = True + End If + End If + ObjInventario.Dispose() End If @@ -3791,6 +3797,17 @@ Partial Class Ventas End If End If + Dim TipoEstatus As Integer = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {CveEstatus}").ToEntero() + + If UsuarioActual.Empresa.Funcionalidad(135) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso TipoEstatus = 5 Then + If UsuarioActual.TienePermisoProceso(159) Then + Dim TienePermiso As String = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, -1).FiltroPrimeroValor("CveSubProyecto", String.Format("CveSubProyecto = {0}", DbRowVenta("CveSubProyecto"))) + If TienePermiso <> "" Then + LbCancelarDocumento.Visible = True + End If + End If + End If + 'CargaDetalle If ObjVentas.GetVentaDetalle(CveVenta) Then TmpDT = ObjVentas.DtResultados @@ -3885,17 +3902,26 @@ Partial Class Ventas End If - 'Verifico si tiene la funcionalidad (135) + If UsuarioActual.Empresa.Funcionalidad(135) = "1" Then 'Reviso cuales son los supervisores Dim Objeto As New ClsVtaVendedores If Objeto.GetVendedores(UsuarioActual.CveEmpresa) Then Dim DTVendedores As New DataTable - DTVendedores = Objeto.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", DbRowVenta("CveVendedor").ToString())).FiltraParametros(String.Format("CveSupervisor = {0}", UsuarioActual.CveVendedor)) + If DbRowVenta("CveVendedor").ToString().ToEntero() > 0 AndAlso UsuarioActual.CveVendedor > 0 Then + DTVendedores = Objeto.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", DbRowVenta("CveVendedor").ToString())).FiltraParametros(String.Format("CveSupervisor = {0}", UsuarioActual.CveVendedor)) + End If + 'Verifico si es su supervisor asignado If DTVendedores.Rows.Count > 0 Then LkCotizacionAutorizar.Visible = True + + If TipoEstatus = 2 Then + LkCotizacionAutorizar.Visible = False + ElseIf TipoEstatus = 2 Then + LkCotizacionAutorizar.Visible = False + End If End If DTVendedores.Dispose() End If @@ -4651,6 +4677,41 @@ Partial Class Ventas End If GvOCRelacionadas.DataBind() + + 'Verifico si tiene la funcionalidad (135) + If DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(135) = "1" Then + 'Reviso cuales son los supervisores + Dim ObjVendedores As New ClsVtaVendedores + + If ObjVendedores.GetVendedores(UsuarioActual.CveEmpresa) Then + Dim DTVendedores As New DataTable + If DbRowVenta("CveVendedor").ToString().ToEntero() > 0 AndAlso UsuarioActual.CveVendedor > 0 Then + DTVendedores = ObjVendedores.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", DbRowVenta("CveVendedor").ToString())).FiltraParametros(String.Format("CveSupervisor = {0}", UsuarioActual.CveVendedor)) + End If + + 'Verifico si es su supervisor asignado + If DTVendedores.Rows.Count > 0 Then + If GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() = 2 Then + BtnsFacturar.Visible = True + BtnGenerarRemision.Visible = True + Else + BtnsFacturar.Visible = False + BtnGenerarRemision.Visible = False + End If + End If + + DTVendedores.Dispose() + End If + ObjVendedores.Dispose() + End If + + If DdlTipoComprobante.SelectedValue = "Cot" Then + If GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() = 5 Then + BtnsFacturar.Visible = False + BtnGenerarRemision.Visible = False + End If + End If + UpPS.Update() UpContado.Update() UpEstatus.Update() @@ -10413,7 +10474,7 @@ Partial Class Ventas If ErrorList.Count = 0 Then 'prepoliza - GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento) + GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario) If ErrorList.Count = 0 Then 'INVENTARIOS @@ -10448,7 +10509,7 @@ Partial Class Ventas Private Sub GuardarVentaPrePolizas(ByRef ObjConta As ClsContabilidad, factura As Modelos.Factura, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, - Optional ValorMultiplicador As Integer = 1, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing) + Optional ValorMultiplicador As Integer = 1, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional ObjInventario As ClsInventarios = Nothing) Dim CveIE As Integer = -1 Dim DT As DataTable = Nothing @@ -10467,7 +10528,7 @@ Partial Class Ventas If DdlTipoComprobante.SelectedValue <> "Cot" Then If factura.CvePrePoliza > 0 Then - If ProcesoPrepolizas(ObjConta, factura, CveIE, TmpDTDetalleMovimientos, objContPaqi, ValorMultiplicador, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento) Then + If ProcesoPrepolizas(ObjConta, factura, CveIE, TmpDTDetalleMovimientos, objContPaqi, ValorMultiplicador, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario) Then ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If @@ -10478,7 +10539,8 @@ Partial Class Ventas End Sub Private Function ProcesoPrepolizas(ByRef ObjConta As ClsContabilidad, ObjFactura As Modelos.Factura, CveIE As Integer, TmpDTDetalle As DataTable, ByRef objContPaqi As ClsContPAQi, Optional ValorMultiplicador As Integer = 1, ByRef Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing, - ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing) As Boolean + ByRef Optional ObjEventos As ClsOIEventos = Nothing, Optional EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, + Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional ObjInventario As ClsInventarios = Nothing) As Boolean Try Dim DT As DataTable Dim CvePlantilaPoliza As Integer @@ -11313,12 +11375,43 @@ Partial Class Ventas IdCtaContableCliente = IdCtaContable CveCuentaCliente = CveCuenta - If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then - If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, Referencia, 278, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + Dim CveMovimiento As Integer = -1 + Dim CveAlmacen As Integer = -1 + + If ObjInventario IsNot Nothing AndAlso ObjInventario.GetInv_Mov(ObjRNC.CveVenta, UsuarioActual.CveEmpresa) Then + CveMovimiento = ObjInventario.DtResultados.FiltroPrimeroValor("CveMovimiento", "CvePS IS NULL AND CveConcepto = 42").ToEntero() + CveAlmacen = ObjInventario.DtResultados.FiltroPrimeroValor("CveAlmacen", "CvePS IS NULL AND CveConcepto = 42").ToEntero() + End If + + 'VERIFICA SI TIENE MOVIMIENTO DE ENTRADA DE USADO + If CveMovimiento > 0 AndAlso CveAlmacen > 0 Then + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If + + Dim SubTotalCalculado As Decimal = (importeMovimiento / (1D + ObjRNC.PorcentajeIVA)).ToDecimal + + Dim Importe318 As Decimal = (SubTotalCalculado * ObjRNC.PorcentajeIVA).RoundSQL(2).ToDecimal() + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, Importe318, Referencia, 318, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=Importe318, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + ErrorPrepoliza = True + End If + + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, SubTotalCalculado, Referencia, 150, Concepto, ObjFactura.Fecha, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=ObjRNC.DtDetalle.MAX("CveClasificacion").ToEntero(), CveSubProyecto:=ObjRNC.CveSubProyecto, ImporteMX:=SubTotalCalculado, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveCuenta:=CveCuenta, Contabilizable:=False) Then + ErrorPrepoliza = True + Else + ViewState("SeGuardoPrePoliza") = True + End If + Else - ErrorPrepoliza = True + If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, 277, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, Referencia, 278, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCuenta:=CveCuenta, Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then + ErrorPrepoliza = True + End If + Else + ErrorPrepoliza = True + End If End If importeMovimiento = 0 @@ -12717,15 +12810,15 @@ Partial Class Ventas 'TIMBRADO NUEVO Try + If CveVenta > 0 Then + ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False) + End If + pdf = PdfFactura(ObjFactura) Catch ex As Exception Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgError) End Try - If CveVenta > 0 Then - ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False) - End If - LocalSerieFolio = ObjFactura.SerieFolio LocalTipoDocto = ObjFactura.TipoDocto @@ -15773,305 +15866,309 @@ Partial Class Ventas Optional RegeneraIEPS As Boolean = True, Optional CveVentaDetallePedido2 As Integer = 0, Optional SeActualiza As Boolean = False, Optional CvePromocionDetalle As Integer = -1, Optional EsCargo As Boolean = False) As Boolean Dim Retorno As Boolean = False - If Not CvePS > 0 Then - Alert("Ocurrió un error al cargar la información del producto a agregar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError) - Return False - End If - - If (Obs.Length + PS.Length > 1000) AndAlso DdlTipoComprobante.SelectedValue <> "Cot" Then - Alert(String.Format("El Nombre y observación del producto tiene longitud de {0} caracteres y excede los 1000 caracteres permitidos.", Obs.Length + PS.Length), TipoMensaje.MsgAdvertencia) - Return False - End If - - 'VALIDA CONCEPTOS EN CERO - YA SE VALIDA ANTES CON FUNCIONALIDAD - A MIRAS DE ELIMINAR - IPP 28 AGOSTO 2017 - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant") Then - If UsuarioActual.CveEmpresa.Contiene(72, 80) AndAlso CveOrdenCompraDetalle = 0 Then ' si viene de una oc, se permiten valores en cero - If Cantidad * PU <= 0 Then - If Not DdlTipoComprobante.SelectedValue = "DPe" Then - Alert("El importe del concepto debe ser mayor a cero. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) - Return False - End If - End If - End If - End If - - Dim Row As DataRow = Nothing - Dim TotalCalculableImpuestos As Decimal = 0 - Dim TotalCalculableImpuestosIVA As Decimal = 0 - PU = PU.RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos - - Row = TmpDT.NewRow() - Row("CveProyecto") = CveProyecto - Row("Proyecto") = Proyecto - Row("CveSubProyecto") = CveSubProyecto - Row("SubProyecto") = SubProyecto - Row("Serie") = Serie - Row("TiempoEntrega") = TiempoEntrega - Row("Orden") = TmpDT.Rows.Count + 1 - Row("Cantidad") = Cantidad - Row("CveUM") = CveUM - Row("UM") = UM - Row("CveClasificacion") = CveClasificacion - Row("Clasificacion") = Clasificacion - Row("CvePS") = CvePS - Row("Obs") = Obs - - - - Dim DrPS As DataRow = Nothing - - DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") ' Estado = -1 - - If DrPS Is Nothing Then - Alert("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.", TipoMensaje.MsgError) - Return False - End If - - If (DrPS("SATClaveUnidadMedida").ToString() = "" Or DrPS("SATClavePS").ToString() = "") Then - 'VALIDA CLAVESAT - If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then 'DOCUMENTOS DONDE NO SE VALIDA - If DrPS("SATClavePS").ToString() = "" Then - MensajeCveSAT.AppendFormat("{0}-{1}: Sin producto SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - ElseIf DrPS("SATClaveUnidadMedida").ToString() = "" Then - MensajeCveSAT.AppendFormat("{0}-{1}: Sin Unidad Medida SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - End If - - If UsuarioActual.CveEmpresa = 72 AndAlso DrPS("SATClavePS").ToString() = "01010101" Then - MensajeCveSAT.AppendFormat("{0}-{1}: El producto/servicio no existe en el catálogo del SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) - Return False - End If - End If - End If - - 'verifica si tiene ventaminima - If Cantidad > 0 AndAlso DrPS("VentaMinima").ToString().ToDecimal > 0 Then - 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15... - If Cantidad Mod DrPS("VentaMinima").ToString().ToDecimal <> 0 Then - Alert(String.Format("El producto se vende solo en cantidades de {0}", DrPS("VentaMinima").ToString())) + Try + If Not CvePS > 0 Then + Alert("Ocurrió un error al cargar la información del producto a agregar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError) Return False End If - End If - 'VERIFICA SI EN LA FACTURA PADRE SE DESGLOSO EL IEPS - Dim FacturaDesglosoIEPS As Boolean = ((CveDevolucion > 0 AndAlso NuevaFactura = 1) AndAlso (Me.ObjFacturaNC IsNot Nothing AndAlso Not Me.ObjFacturaNC.VentaDesglosaIEPS)) - - If Not ClienteDesglosaIEPS Then - If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then - PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - VentaDesglosaIEPS = True + If (Obs.Length + PS.Length > 1000) AndAlso DdlTipoComprobante.SelectedValue <> "Cot" Then + Alert(String.Format("El Nombre y observación del producto tiene longitud de {0} caracteres y excede los 1000 caracteres permitidos.", Obs.Length + PS.Length), TipoMensaje.MsgAdvertencia) + Return False End If - DrPS("IEPSPorcentaje") = 0 - End If - 'SI YA SE DESGLOSO EL IEPS SE GUARDA LA BANDERA EN ESTA FACTURA - If FacturaDesglosoIEPS Then - VentaDesglosaIEPS = True - End If - - TotalCalculableImpuestos = (Cantidad * (PU)) - Descuento - TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) - - Row("PU") = PU - Row("Codigo") = DrPS("Codigo") - Row("NoIdentificacion") = DrPS("Codigo") - Row("ClaveSATFraccionArancelaria") = DrPS("ClaveSATFraccionArancelaria") - Row("ClaveSATUnidadAduana") = DrPS("ClaveSATUnidadAduana") - Row("ClaveSATFraccionArancelariaDescripcion") = DrPS("ClaveSATFraccionArancelariaDescripcion") - Row("ClaveSATUnidadAduanaDescripcion") = DrPS("ClaveSATUnidadAduanaDescripcion") - If Modalidad = "U" Then - Row("Consec") = Index - Else - Row("Consec") = TmpDT.Rows.Count + 1 - End If - - Row("PS") = DrPS("PS") - Row("CodigoPS") = DrPS("PSCodigo").ToString() - Row("CveTipoPS") = DrPS("CveTipoPS") - Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario") - Row("CveTamaño") = DrPS("CveTamaño") - - If CveClasificacion <= 0 Then Row("CveClasificacion") = DrPS("CveClasificacion") - If Clasificacion = "" Then Row("Clasificacion") = DrPS("Clasificacion") - - If DrPS("IVA").ToString().Contiene("-1", "") Then - Row("PorcentajeIVA") = PorcentajeIVA - Else - Row("PorcentajeIVA") = DrPS("IVA") - End If - - Dim ClienteRetIVA = Me.ClienteRetIVA - - If ClienteRetIVA <= 0 Then - If CBool(DrPS("EsOutSourcing").ToString()) Then - ClienteRetIVA = 0.06D - DdlTipoRetencion.SelectedValueExist("4") - ElseIf DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then - ClienteRetIVA = 0.106667D - ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then - ClienteRetIVA = 0.04D + 'VALIDA CONCEPTOS EN CERO - YA SE VALIDA ANTES CON FUNCIONALIDAD - A MIRAS DE ELIMINAR - IPP 28 AGOSTO 2017 + If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant") Then + If UsuarioActual.CveEmpresa.Contiene(72, 80) AndAlso CveOrdenCompraDetalle = 0 Then ' si viene de una oc, se permiten valores en cero + If Cantidad * PU <= 0 Then + If Not DdlTipoComprobante.SelectedValue = "DPe" Then + Alert("El importe del concepto debe ser mayor a cero. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) + Return False + End If + End If + End If End If - End If - LblRetIVA.Text = (ClienteRetIVA * 100).FormatoNumero - TrRetIVA.Style.Add("display", "") - DdlTipoRetencion.Visible = True + Dim Row As DataRow = Nothing + Dim TotalCalculableImpuestos As Decimal = 0 + Dim TotalCalculableImpuestosIVA As Decimal = 0 + PU = PU.RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos + + Row = TmpDT.NewRow() + Row("CveProyecto") = CveProyecto + Row("Proyecto") = Proyecto + Row("CveSubProyecto") = CveSubProyecto + Row("SubProyecto") = SubProyecto + Row("Serie") = Serie + Row("TiempoEntrega") = TiempoEntrega + Row("Orden") = TmpDT.Rows.Count + 1 + Row("Cantidad") = Cantidad + Row("CveUM") = CveUM + Row("UM") = UM + Row("CveClasificacion") = CveClasificacion + Row("Clasificacion") = Clasificacion + Row("CvePS") = CvePS + Row("Obs") = Obs - Row("IVA") = Row("PorcentajeIVA") - Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) - Row("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - Row("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - Row("PorcentajeRetIVA") = ClienteRetIVA - Row("PorcentajeRetISR") = ClienteRetISR - Row("PorcentajeIEPS") = DrPS("IEPSPorcentaje") - Row("ImporteIEPS") = (DrPS("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) - Row("IEPS") = Row("ImporteIEPS") - Row("Descuento") = (Descuento).RoundSQL(NumeroDecimales) - Row("TipoDescuento") = HdnTipoDescuento.Value - Row("CvePromocionDetalle") = CvePromocionDetalle - Row("Total") = (Cantidad * PU) - Row("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) + Dim DrPS As DataRow = Nothing - 'Row("AsientoContableVentas") = DrPS("AsientoContableVentas") - ' Row("IdCtaContVentas") = IdCtaContable - ' Row("AplicaParaConcepto") = AplicaParaConcepto + DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") ' Estado = -1 - Row("SATClaveProdServ") = DrPS("SATClavePS") - Row("SATClaveUM") = DrPS("SATClaveUnidadMedida") + If DrPS Is Nothing Then + Alert("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.", TipoMensaje.MsgError) + Return False + End If - If UsuarioActual.Empresa.UsaAC Then - Row("CvePresupuestoIngreso") = Me.DdlFuenteRecaudacion.SelectedValue - End If + If (DrPS("SATClaveUnidadMedida").ToString() = "" Or DrPS("SATClavePS").ToString() = "") Then + 'VALIDA CLAVESAT + If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then 'DOCUMENTOS DONDE NO SE VALIDA + If DrPS("SATClavePS").ToString() = "" Then + MensajeCveSAT.AppendFormat("{0}-{1}: Sin producto SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) + Return False + ElseIf DrPS("SATClaveUnidadMedida").ToString() = "" Then + MensajeCveSAT.AppendFormat("{0}-{1}: Sin Unidad Medida SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) + Return False + End If - Row("EntregaDirecta") = EntregaDirecta - 'Contratos - Row("CveContratoDetalle") = CveContratoDetalle - Row("CveVentaDetalle") = CveVentaDetalle - Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido - Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle - Row("CveVentaDetalleRemision") = CveVentaDetalleRemision - Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion - Row("CveVentaDetallePedido2") = CveVentaDetallePedido2 - Row("CuentaPredial") = CuentaPredial - Row("EsOutSourcing") = DrPS("EsOutSourcing") - Row("EsCargo") = EsCargo - - If UsuarioActual.CveEmpresa = 119 Then - If Not RemisionesLista.Count > 0 Then 'SI VIENE DE REMISION NO SE CONSIDERA - - 'MONEDA DIFERENTE DEL PS AL PRIMER PS AGREGADO - If DdlMoneda.Enabled = False And CveVenta < 0 And TmpDT.Rows.Count > 0 Then - If DdlMoneda.SelectedValue <> DrPS("CveMoneda").ToString() Then - Alert($"La moneda base del producto: {DrPS("PSCodigo").ToString()} es diferente a la moneda del documento.", TipoMensaje.MsgAdvertencia) + If UsuarioActual.CveEmpresa = 72 AndAlso DrPS("SATClavePS").ToString() = "01010101" Then + MensajeCveSAT.AppendFormat("{0}-{1}: El producto/servicio no existe en el catálogo del SAT
    ", DrPS("Codigo").ToString(), DrPS("PS").ToString()) Return False End If End If + End If - 'ACTIVA PRODUCTOS DE LA MISMA MONEDA - If TmpDT.Rows.Count = 0 And CveVenta < 0 Then - DdlMoneda.SelectedValueExist(DrPS("CveMoneda").ToString()) - CambiaMoneda() - DdlMoneda.Enabled = False + 'verifica si tiene ventaminima + If Cantidad > 0 AndAlso DrPS("VentaMinima").ToString().ToDecimal > 0 Then + 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15... + If Cantidad Mod DrPS("VentaMinima").ToString().ToDecimal <> 0 Then + Alert(String.Format("El producto se vende solo en cantidades de {0}", DrPS("VentaMinima").ToString())) + Return False End If End If - End If + + 'VERIFICA SI EN LA FACTURA PADRE SE DESGLOSO EL IEPS + Dim FacturaDesglosoIEPS As Boolean = ((CveDevolucion > 0 AndAlso NuevaFactura = 1) AndAlso (Me.ObjFacturaNC IsNot Nothing AndAlso Not Me.ObjFacturaNC.VentaDesglosaIEPS)) + + If Not ClienteDesglosaIEPS Then + If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then + PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) + VentaDesglosaIEPS = True + End If + DrPS("IEPSPorcentaje") = 0 + End If + 'SI YA SE DESGLOSO EL IEPS SE GUARDA LA BANDERA EN ESTA FACTURA + If FacturaDesglosoIEPS Then + VentaDesglosaIEPS = True + End If - 'RECARGAR GV - TmpDT.Rows.Add(Row) + TotalCalculableImpuestos = (Cantidad * (PU)) - Descuento + TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) + + Row("PU") = PU + Row("Codigo") = DrPS("Codigo") + Row("NoIdentificacion") = DrPS("Codigo") + Row("ClaveSATFraccionArancelaria") = DrPS("ClaveSATFraccionArancelaria") + Row("ClaveSATUnidadAduana") = DrPS("ClaveSATUnidadAduana") + Row("ClaveSATFraccionArancelariaDescripcion") = DrPS("ClaveSATFraccionArancelariaDescripcion") + Row("ClaveSATUnidadAduanaDescripcion") = DrPS("ClaveSATUnidadAduanaDescripcion") + If Modalidad = "U" Then + Row("Consec") = Index + Else + Row("Consec") = TmpDT.Rows.Count + 1 + End If + + Row("PS") = DrPS("PS") + Row("CodigoPS") = DrPS("PSCodigo").ToString() + Row("CveTipoPS") = DrPS("CveTipoPS") + Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario") + Row("CveTamaño") = DrPS("CveTamaño") + + If CveClasificacion <= 0 Then Row("CveClasificacion") = DrPS("CveClasificacion") + If Clasificacion = "" Then Row("Clasificacion") = DrPS("Clasificacion") + + If DrPS("IVA").ToString().Contiene("-1", "") Then + Row("PorcentajeIVA") = PorcentajeIVA + Else + Row("PorcentajeIVA") = DrPS("IVA") + End If + + Dim ClienteRetIVA = Me.ClienteRetIVA + + If ClienteRetIVA <= 0 Then + If CBool(DrPS("EsOutSourcing").ToString()) Then + ClienteRetIVA = 0.06D + DdlTipoRetencion.SelectedValueExist("4") + ElseIf DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then + ClienteRetIVA = 0.106667D + ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then + ClienteRetIVA = 0.04D + End If + End If + + LblRetIVA.Text = (ClienteRetIVA * 100).FormatoNumero + TrRetIVA.Style.Add("display", "") + DdlTipoRetencion.Visible = True - 'AGREGA PS ADICIONAL - If UsuarioActual.Empresa.Funcionalidad(561).ToString() = "1" AndAlso Not UsuarioActual.TienePermisoProceso(285) AndAlso GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows.Count > 0 AndAlso Not SeActualiza Then + Row("IVA") = Row("PorcentajeIVA") + Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) + Row("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) + Row("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) + Row("PorcentajeRetIVA") = ClienteRetIVA + Row("PorcentajeRetISR") = ClienteRetISR + Row("PorcentajeIEPS") = DrPS("IEPSPorcentaje") + Row("ImporteIEPS") = (DrPS("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) + Row("IEPS") = Row("ImporteIEPS") + Row("Descuento") = (Descuento).RoundSQL(NumeroDecimales) + Row("TipoDescuento") = HdnTipoDescuento.Value + Row("CvePromocionDetalle") = CvePromocionDetalle + Row("Total") = (Cantidad * PU) + Row("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) - For Each Dr As DataRow In GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows - Dim CvePSAdicional As Integer = Dr("CvePSAdicional").ToString().ToEntero() - Dim DrPoliza As DataRow = TmpDT.NewRow() - DrPoliza.ItemArray = Row.ItemArray - Dim DrPSAdicional = GlobalDTPS(UsuarioActual.CveEmpresa, CvePSAdicional).Rows(0) - If DrPSAdicional IsNot Nothing Then - DrPoliza("CvePS") = CvePSAdicional - DrPoliza("PS") = DrPSAdicional("PS").ToString() - DrPoliza("CveUM") = DrPSAdicional("CveUM").ToString().ToEntero() - DrPoliza("UM") = DrPSAdicional("UnidadMedida").ToString() - DrPoliza("CveClasificacion") = DrPSAdicional("CveClasificacion").ToString().ToEntero() - DrPoliza("Clasificacion") = DrPSAdicional("Clasificacion").ToString() - DrPoliza("CodigoPS") = DrPSAdicional("PSCodigo").ToString() - DrPoliza("CveTipoPS") = DrPSAdicional("CveTipoPS") - DrPoliza("CveTipoInvPS") = DrPSAdicional("Inv_CveMetodoInventario") - DrPoliza("NoIdentificacion") = DrPSAdicional("Codigo") - If Modalidad = "U" Then - DrPoliza("Consec") = Index - Else - DrPoliza("Consec") = TmpDT.Rows.Count + 1 - End If - Row("Orden") = TmpDT.Rows.Count + 1 - DrPoliza("Cantidad") = If(Dr("Cantidad").ToString().ToDecimal > 0, Dr("Cantidad").ToString().ToDecimal, Cantidad) - PU = 0 + 'Row("AsientoContableVentas") = DrPS("AsientoContableVentas") + ' Row("IdCtaContVentas") = IdCtaContable + ' Row("AplicaParaConcepto") = AplicaParaConcepto - Dim PrecioSugerido As Decimal = 0 - 'Dim CvePrecioListaPS = GlobalDTCliente(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CvePrecioLista", $"CveCliente = {CveCliente}").ToEntero() - If CvePrecioLista > 0 Then - Dim ObjPS As New ClsProductosServicios - If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioLista, CvePS:=CvePSAdicional) Then + Row("SATClaveProdServ") = DrPS("SATClavePS") + Row("SATClaveUM") = DrPS("SATClaveUnidadMedida") - PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal - If PrecioSugerido = 0 Then - Dim ObjInventarios As New ClsInventarios - Dim CostoPS = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", TxtFecha.Text.ToDate, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) + If UsuarioActual.Empresa.UsaAC Then + Row("CvePresupuestoIngreso") = Me.DdlFuenteRecaudacion.SelectedValue + End If - 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal - If CostoPS = 0 Then CostoPS = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) + Row("EntregaDirecta") = EntregaDirecta + 'Contratos + Row("CveContratoDetalle") = CveContratoDetalle + Row("CveVentaDetalle") = CveVentaDetalle + Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido + Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle + Row("CveVentaDetalleRemision") = CveVentaDetalleRemision + Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion + Row("CveVentaDetallePedido2") = CveVentaDetallePedido2 + Row("CuentaPredial") = CuentaPredial + Row("EsOutSourcing") = DrPS("EsOutSourcing") + Row("EsCargo") = EsCargo - ObjInventarios.Dispose() - Dim PorcentajePrecio = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal - If CostoPS > 0 And PorcentajePrecio > 0 Then - PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS - End If - End If - ObjPS.Dispose() + If UsuarioActual.CveEmpresa = 119 Then + If Not RemisionesLista.Count > 0 Then 'SI VIENE DE REMISION NO SE CONSIDERA + + 'MONEDA DIFERENTE DEL PS AL PRIMER PS AGREGADO + If DdlMoneda.Enabled = False And CveVenta < 0 And TmpDT.Rows.Count > 0 Then + If DdlMoneda.SelectedValue <> DrPS("CveMoneda").ToString() Then + Alert($"La moneda base del producto: {DrPS("PSCodigo").ToString()} es diferente a la moneda del documento.", TipoMensaje.MsgAdvertencia) + Return False End If End If - - If PrecioSugerido > 0 Then - PU = PrecioSugerido + 'ACTIVA PRODUCTOS DE LA MISMA MONEDA + If TmpDT.Rows.Count = 0 And CveVenta < 0 Then + DdlMoneda.SelectedValueExist(DrPS("CveMoneda").ToString()) + CambiaMoneda() + DdlMoneda.Enabled = False End If - PU = Math.Round(PU, 6) - DrPoliza("PU") = PU - TotalCalculableImpuestos = (DrPoliza("Cantidad").ToString().ToDecimal * (PU)) - - If DrPSAdicional("IVA").ToString().Contiene("-1", "") Then - DrPoliza("PorcentajeIVA") = PorcentajeIVA - Else - DrPoliza("PorcentajeIVA") = DrPSAdicional("IVA") - End If - DrPoliza("IVA") = DrPoliza("PorcentajeIVA") - DrPoliza("ImporteIVA") = Math.Round(DrPoliza("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - DrPoliza("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) - DrPoliza("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) - DrPoliza("PorcentajeRetIVA") = ClienteRetIVA - DrPoliza("PorcentajeRetISR") = ClienteRetISR - DrPoliza("PorcentajeIEPS") = DrPSAdicional("IEPSPorcentaje") - DrPoliza("ImporteIEPS") = Math.Round(DrPSAdicional("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) - DrPoliza("IEPS") = DrPoliza("ImporteIEPS") - DrPoliza("Descuento") = 0 ' Descuento - DrPoliza("TipoDescuento") = HdnTipoDescuento.Value - DrPoliza("Total") = (DrPoliza("Cantidad").ToString().ToDecimal * PU) - DrPoliza("TotalImporte") = Math.Round(DrPoliza("Cantidad").ToString().ToDecimal * PU, NumeroDecimales) - DrPoliza("SATClaveProdServ") = DrPSAdicional("SATClavePS") - DrPoliza("SATClaveUM") = DrPSAdicional("SATClaveUnidadMedida") - - TmpDT.Rows.Add(DrPoliza) End If - Next + End If + + 'RECARGAR GV + TmpDT.Rows.Add(Row) - End If + 'AGREGA PS ADICIONAL + If UsuarioActual.Empresa.Funcionalidad(561).ToString() = "1" AndAlso Not UsuarioActual.TienePermisoProceso(285) AndAlso GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows.Count > 0 AndAlso Not SeActualiza Then + + For Each Dr As DataRow In GlobalDTPSAdicionales(CvePS, UsuarioActual.CveEmpresa).Rows + Dim CvePSAdicional As Integer = Dr("CvePSAdicional").ToString().ToEntero() + Dim DrPoliza As DataRow = TmpDT.NewRow() + DrPoliza.ItemArray = Row.ItemArray + Dim DrPSAdicional = GlobalDTPS(UsuarioActual.CveEmpresa, CvePSAdicional).Rows(0) + If DrPSAdicional IsNot Nothing Then + DrPoliza("CvePS") = CvePSAdicional + DrPoliza("PS") = DrPSAdicional("PS").ToString() + DrPoliza("CveUM") = DrPSAdicional("CveUM").ToString().ToEntero() + DrPoliza("UM") = DrPSAdicional("UnidadMedida").ToString() + DrPoliza("CveClasificacion") = DrPSAdicional("CveClasificacion").ToString().ToEntero() + DrPoliza("Clasificacion") = DrPSAdicional("Clasificacion").ToString() + DrPoliza("CodigoPS") = DrPSAdicional("PSCodigo").ToString() + DrPoliza("CveTipoPS") = DrPSAdicional("CveTipoPS") + DrPoliza("CveTipoInvPS") = DrPSAdicional("Inv_CveMetodoInventario") + DrPoliza("NoIdentificacion") = DrPSAdicional("Codigo") + If Modalidad = "U" Then + DrPoliza("Consec") = Index + Else + DrPoliza("Consec") = TmpDT.Rows.Count + 1 + End If + Row("Orden") = TmpDT.Rows.Count + 1 + DrPoliza("Cantidad") = If(Dr("Cantidad").ToString().ToDecimal > 0, Dr("Cantidad").ToString().ToDecimal, Cantidad) + PU = 0 + + Dim PrecioSugerido As Decimal = 0 + 'Dim CvePrecioListaPS = GlobalDTCliente(UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("CvePrecioLista", $"CveCliente = {CveCliente}").ToEntero() + If CvePrecioLista > 0 Then + Dim ObjPS As New ClsProductosServicios + If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioLista, CvePS:=CvePSAdicional) Then + + PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal + If PrecioSugerido = 0 Then + Dim ObjInventarios As New ClsInventarios + Dim CostoPS = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", TxtFecha.Text.ToDate, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) + + 'si el costo es cero, puede ser que no halla movimientos del producto, en esa sucursal. y se volverá a sacar sin especificar sucursal + If CostoPS = 0 Then CostoPS = ObjInventarios.GetCostoPS(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) + + ObjInventarios.Dispose() + Dim PorcentajePrecio = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal + If CostoPS > 0 And PorcentajePrecio > 0 Then + PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS + End If + End If + ObjPS.Dispose() + End If + End If + + + If PrecioSugerido > 0 Then + PU = PrecioSugerido + End If + PU = Math.Round(PU, 6) + DrPoliza("PU") = PU + TotalCalculableImpuestos = (DrPoliza("Cantidad").ToString().ToDecimal * (PU)) + + If DrPSAdicional("IVA").ToString().Contiene("-1", "") Then + DrPoliza("PorcentajeIVA") = PorcentajeIVA + Else + DrPoliza("PorcentajeIVA") = DrPSAdicional("IVA") + End If + DrPoliza("IVA") = DrPoliza("PorcentajeIVA") + DrPoliza("ImporteIVA") = Math.Round(DrPoliza("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + DrPoliza("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) + DrPoliza("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) + DrPoliza("PorcentajeRetIVA") = ClienteRetIVA + DrPoliza("PorcentajeRetISR") = ClienteRetISR + DrPoliza("PorcentajeIEPS") = DrPSAdicional("IEPSPorcentaje") + DrPoliza("ImporteIEPS") = Math.Round(DrPSAdicional("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) + DrPoliza("IEPS") = DrPoliza("ImporteIEPS") + DrPoliza("Descuento") = 0 ' Descuento + DrPoliza("TipoDescuento") = HdnTipoDescuento.Value + DrPoliza("Total") = (DrPoliza("Cantidad").ToString().ToDecimal * PU) + DrPoliza("TotalImporte") = Math.Round(DrPoliza("Cantidad").ToString().ToDecimal * PU, NumeroDecimales) + DrPoliza("SATClaveProdServ") = DrPSAdicional("SATClavePS") + DrPoliza("SATClaveUM") = DrPSAdicional("SATClaveUnidadMedida") + + TmpDT.Rows.Add(DrPoliza) + End If + Next + + End If + + Retorno = True + Catch ex As Exception + Retorno = False + OnError("Ocurrió un error al agregar el producto/servicio", ex) + End Try + - Retorno = True Return Retorno End Function @@ -19542,8 +19639,19 @@ Partial Class Ventas LBDevolucionAlmacen.ToolTip = "¿Está seguro de Solicitar la Devolución de Almacén?" End If + If VentaSaldoAlmacen < 0 Then + If DevolucionAlmacen = 0 Then + LBAplicaDevolucion.Visible = True + ElseIf DevolucionAlmacen.Contiene(1, 2) Then + LBAplicaDevolucion.Visible = False + End If + ElseIf VentaSaldoAlmacen >= 0 Then + LBAplicaDevolucion.Visible = False + End If + End If + UpnTools.Update() 'UpInvDev.Update() End Sub Protected Sub LBDevolucionAlmacen_Click(sender As Object, e As EventArgs) @@ -19571,8 +19679,9 @@ Partial Class Ventas ObjVentas.Dispose() Me.DevolucionAlmacen = EstatusDevolucion + InicializaDevolucionAlmacen() - UpnTools.Update() + 'UpnTools.Update() End Sub @@ -20243,8 +20352,21 @@ Partial Class Ventas End Sub Private Sub LkCotizacionAutorizar_Click(sender As Object, e As EventArgs) Handles LkCotizacionAutorizar.Click EsSupervisor = True - GeneraPDFCotizacion(True) - Alert("La cotización ha sido enviada al correo de nuestro cliente:" & Mail) + Dim ActualizoEstatus As Boolean = False + + Dim ObjVentas As New ClsVentas + If ObjVentas.UpdateEstatusFactura(8, FolioFiscal, "", Now, CveVenta) Then + ActualizoEstatus = True + End If + ObjVentas.Dispose() + + If ActualizoEstatus Then + 'GeneraPDFCotizacion(True) + Alert("La cotización ha sido enviada al correo de nuestro cliente:" & Mail) + Else + Alert("No se pudo autorizar la cotización", TipoMensaje.MsgError) + End If + End Sub #End Region