Option Explicit On Option Strict On Option Infer On Imports System.Data Imports System.Diagnostics Imports System.IO Imports System.Net.Http Imports System.Security.Cryptography.X509Certificates Imports ADSNetLibrary.SIGAPI.Models.CRM.Request Imports ADSNetLibrary.SIGAPI.Services.CRM Imports ADSTimbrado Imports Extensiones Imports Microsoft.Reporting.WebForms Imports Modelos Imports Newtonsoft.Json.Linq Partial Class Ventas Inherits ClsPaginas #Region "Propiedades" Private Const NumeroDecimales As Integer = 2 Dim ColumnaDescuento As Integer = 11 Dim ColumnaPredial As Integer = 12 Dim ColumnaSubProyecto As Integer = 8 Dim ColumnaIVA As Integer = 13 Dim ColumnaIEPS As Integer = 14 Dim ColumnaRetIVA As Integer = 15 Dim ColumnaRetISR As Integer = 16 Dim ColumnaEditar As Integer = 18 Dim ColumnaEliminar As Integer = 19 'Factura de ventas Dim DTConceptos As DataTable Private Property Version As String Private Property Fecha As String Private Property SerieXML As String Private Property FolioXML As String Private Property SubTotal As Decimal Private Property Total As Decimal = 0 ' Private Property Descuentos As Decimal = 0 Private Property EmisorRFC As String Private Property ReceptorRFC As String Private Property TrasladoIVA As Decimal = 0 Private Property RetencionIVA As Decimal = 0 Private Property RetencionISR As Decimal = 0 Private Property TrasladoIEPS As Decimal = 0 Private Property TFDUUID As String = "" Private Property Moneda As String = "" Private Property TipoComprobante As String = "" Private Property OtrosImpuestos As Decimal = 0 Private Property TotalRetenciones As Decimal = 0 Private Property SumaTotalRetenciones As Decimal = 0 Private Property TotalTraslados As Decimal = 0 Private Property SumaTotalTraslados As Decimal = 0 Private Property SubTotalConceptos As Decimal = 0 Private Property Redondeo As Decimal = 0 Private Property NumRow As Integer Private Property EsSupervisor As Boolean = False Private Property MandarCorreoSupervisor As Boolean = False Private ReadOnly Property ExFolioFactura As Boolean Get Return CBool(ViewState("ExFolioFactura")) End Get End Property 'Local Private Property DtPorcentajeMarcas As DataTable Get Return If(IsNothing(ViewState("DtPorcentajeMarcas")), Nothing, CType(ViewState("DtPorcentajeMarcas"), DataTable)) End Get Set(value As DataTable) ViewState("DtPorcentajeMarcas") = value End Set End Property Private Property TmpDT As DataTable Get Return If(IsNothing(ViewState("TmpDT")), Nothing, CType(ViewState("TmpDT"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDT") = value End Set End Property Private Property TmpDTDescNC As DataTable Get Return If(IsNothing(ViewState("TmpDTDescNC")), Nothing, CType(ViewState("TmpDTDescNC"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTDescNC") = value End Set End Property Private Property TmpDTDescNCBonificacion As DataTable Get Return If(IsNothing(ViewState("TmpDTDescNCBonificacion")), Nothing, CType(ViewState("TmpDTDescNCBonificacion"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTDescNCBonificacion") = value End Set End Property Private Property TmpDTBonificacion As DataTable Get Return If(IsNothing(ViewState("TmpDTBonificacion")), Nothing, CType(ViewState("TmpDTBonificacion"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTBonificacion") = value End Set End Property Private Property TmpDTRNCBonificacionesCliente As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCBonificacionesCliente")), Nothing, CType(ViewState("TmpDTRNCBonificacionesCliente"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCBonificacionesCliente") = value End Set End Property Private Property TmpDTRNCBonificacionesSeleccionadas As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCBonificacionesSeleccionadas")), Nothing, CType(ViewState("TmpDTRNCBonificacionesSeleccionadas"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCBonificacionesSeleccionadas") = value End Set End Property Private Property TmpDTRNCDetalle As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCDetalle")), Nothing, CType(ViewState("TmpDTRNCDetalle"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCDetalle") = value End Set End Property Private Property TmpDTRNCDetalleSelecciondas As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCDetalleSelecciondas")), Nothing, CType(ViewState("TmpDTRNCDetalleSelecciondas"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCDetalleSelecciondas") = value End Set End Property Private Property TmpDTRNCBonificacionDetalle As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCBonificacionDetalle")), Nothing, CType(ViewState("TmpDTRNCBonificacionDetalle"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCBonificacionDetalle") = value End Set End Property Private Property TmpDTRNCBonificacionDetalleSeleccionadas As DataTable Get Return If(IsNothing(ViewState("TmpDTRNCBonificacionDetalleSeleccionadas")), Nothing, CType(ViewState("TmpDTRNCBonificacionDetalleSeleccionadas"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTRNCBonificacionDetalleSeleccionadas") = value End Set End Property Private Property TmpDTAnticiposNCIxCCliente As DataTable Get Return If(IsNothing(ViewState("TmpDTAnticiposNCIxCCliente")), Nothing, CType(ViewState("TmpDTAnticiposNCIxCCliente"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTAnticiposNCIxCCliente") = value End Set End Property Private Property TmpDTError As DataTable Get Return If(IsNothing(ViewState("TmpDTError")), Nothing, CType(ViewState("TmpDTError"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTError") = value End Set End Property Private Property TmpDTImpuestos As DataTable Get Return If(IsNothing(ViewState("TmpDTImpuestos")), Nothing, CType(ViewState("TmpDTImpuestos"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTImpuestos") = value End Set End Property Private Property TmpDTImpuestosIVAIEPS As DataTable Get Return If(IsNothing(ViewState("TmpDTImpuestosIVAIEPS")), Nothing, CType(ViewState("TmpDTImpuestosIVAIEPS"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTImpuestosIVAIEPS") = value End Set End Property Private Property TmpDTDocumentosRelacionados As DataTable Get Return If(IsNothing(ViewState("TmpDTDocumentosRelacionados")), Nothing, CType(ViewState("TmpDTDocumentosRelacionados"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTDocumentosRelacionados") = value End Set End Property Private Property TmpDTNCVinculadas As DataTable Get Return If(IsNothing(ViewState("TmpDTNCVinculadas")), Nothing, CType(ViewState("TmpDTNCVinculadas"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTNCVinculadas") = value End Set End Property Private Property TmpDTEnvioDireccion As DataTable Get Return If(IsNothing(ViewState("TmpDTEnvioDireccion")), Nothing, CType(ViewState("TmpDTEnvioDireccion"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTEnvioDireccion") = value End Set End Property Private Property TmpDTDireccionCP As DataTable Get Return If(IsNothing(ViewState("TmpDTDireccionCP")), Nothing, CType(ViewState("TmpDTDireccionCP"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTDireccionCP") = value End Set End Property Private Property IdPoliza As Integer Get Return ViewState("IdPoliza").ToString().ToEntero() End Get Set(value As Integer) ViewState("IdPoliza") = value End Set End Property Private Property CveAlmacenDevolucion As Integer Get Return ViewState("CveAlmacenDevolucion").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAlmacenDevolucion") = value End Set End Property Private Property EraCotizacion As Integer Get Return ViewState("EraCotizacion").ToString().ToEntero() End Get Set(value As Integer) ViewState("EraCotizacion") = value End Set End Property Private Property FacturaMateriales As Integer Get Return ViewState("FacturaMateriales").ToString().ToEntero() End Get Set(value As Integer) ViewState("FacturaMateriales") = value End Set End Property Private Property TmpDTDeducciones As DataTable Get Return If(IsNothing(ViewState("TmpDTDeducciones")), Nothing, CType(ViewState("TmpDTDeducciones"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTDeducciones") = value End Set End Property Private Property TmpDTComplementos As DataTable Get Return If(IsNothing(ViewState("TmpDTComplementos")), Nothing, CType(ViewState("TmpDTComplementos"), DataTable)) End Get Set(value As DataTable) ViewState("TmpDTComplementos") = value End Set End Property Private Property DTmpC As DataTable Get Return If(IsNothing(ViewState("DTmpC")), Nothing, CType(ViewState("DTmpC"), DataTable)) End Get Set(value As DataTable) ViewState("DTmpC") = value End Set End Property Private Property DTmpF As DataTable Get Return If(IsNothing(ViewState("DTmpF")), Nothing, CType(ViewState("DTmpF"), DataTable)) End Get Set(value As DataTable) ViewState("DTmpF") = value End Set End Property Private Property DTSucursal As DataTable Get Return If(IsNothing(ViewState("DTSucursal")), Nothing, CType(ViewState("DTSucursal"), DataTable)) End Get Set(value As DataTable) ViewState("DTSucursal") = value End Set End Property Private Property DTOrdenesCompra As DataTable Get Return If(IsNothing(ViewState("DTOrdenesCompra")), Nothing, CType(ViewState("DTOrdenesCompra"), DataTable)) End Get Set(value As DataTable) ViewState("DTOrdenesCompra") = value End Set End Property Private Property DTOrdenesCompraPS As DataTable Get Return If(IsNothing(ViewState("DTOrdenesCompraPS")), Nothing, CType(ViewState("DTOrdenesCompraPS"), DataTable)) End Get Set(value As DataTable) ViewState("DTOrdenesCompraPS") = value End Set End Property Private Property DtOCTmpDT As DataTable Get Return If(IsNothing(ViewState("DtOCTmpDT")), Nothing, CType(ViewState("DtOCTmpDT"), DataTable)) End Get Set(value As DataTable) ViewState("DtOCTmpDT") = value End Set End Property Private Property DTRemisiones As DataTable Get Return If(IsNothing(ViewState("DTRemisiones")), Nothing, CType(ViewState("DTRemisiones"), DataTable)) End Get Set(value As DataTable) ViewState("DTRemisiones") = value End Set End Property Private Property ListaDescuentos As List(Of Modelos.VentaDescuentos) Get Return If(IsNothing(ViewState("ListaDescuentos")), Nothing, CType(ViewState("ListaDescuentos"), List(Of Modelos.VentaDescuentos))) End Get Set(value As List(Of Modelos.VentaDescuentos)) ViewState("ListaDescuentos") = value End Set End Property Private Property RemisionesLista As List(Of Integer) Get Return If(IsNothing(ViewState("RemisionesLista")), Nothing, CType(ViewState("RemisionesLista"), List(Of Integer))) End Get Set(value As List(Of Integer)) ViewState("RemisionesLista") = value End Set End Property Private Property ListaRemisionesNC As List(Of Modelos.Factura) Get Return If(IsNothing(ViewState("ListaRemisionesNC")), Nothing, CType(ViewState("ListaRemisionesNC"), List(Of Modelos.Factura))) End Get Set(value As List(Of Modelos.Factura)) ViewState("ListaRemisionesNC") = value End Set End Property Private Property ListaNCDesc As List(Of Modelos.Factura) Get Return If(IsNothing(ViewState("ListaNCDesc")), Nothing, CType(ViewState("ListaNCDesc"), List(Of Modelos.Factura))) End Get Set(value As List(Of Modelos.Factura)) ViewState("ListaNCDesc") = value End Set End Property Private Property ListaNCBonificacion As List(Of Modelos.Factura) Get Return If(IsNothing(ViewState("ListaNCBonificacion")), Nothing, CType(ViewState("ListaNCBonificacion"), List(Of Modelos.Factura))) End Get Set(value As List(Of Modelos.Factura)) ViewState("ListaNCBonificacion") = value End Set End Property Private Property Pedidos2Lista As List(Of Integer) Get Return If(IsNothing(ViewState("Pedidos2Lista")), Nothing, CType(ViewState("Pedidos2Lista"), List(Of Integer))) End Get Set(value As List(Of Integer)) ViewState("Pedidos2Lista") = value End Set End Property Private Property DtRemisionesPS As DataTable Get Return If(IsNothing(ViewState("DtRemisionesPS")), Nothing, CType(ViewState("DtRemisionesPS"), DataTable)) End Get Set(value As DataTable) ViewState("DtRemisionesPS") = value End Set End Property Private Property DtCotizaciones As DataTable Get Return If(IsNothing(ViewState("DtCotizaciones")), Nothing, CType(ViewState("DtCotizaciones"), DataTable)) End Get Set(value As DataTable) ViewState("DtCotizaciones") = value End Set End Property Private Property CotizacionesLista As List(Of Integer) Get Return If(IsNothing(ViewState("CotizacionesLista")), Nothing, CType(ViewState("CotizacionesLista"), List(Of Integer))) End Get Set(value As List(Of Integer)) ViewState("CotizacionesLista") = value End Set End Property Private Property DtCotizacionesPS As DataTable Get Return If(IsNothing(ViewState("DtCotizacionesPS")), Nothing, CType(ViewState("DtCotizacionesPS"), DataTable)) End Get Set(value As DataTable) ViewState("DtCotizacionesPS") = value End Set End Property Private Property DtCotizacionTmpDT As DataTable Get Return If(IsNothing(ViewState("DtCotizacionTmpDT")), Nothing, CType(ViewState("DtCotizacionTmpDT"), DataTable)) End Get Set(value As DataTable) ViewState("DtCotizacionTmpDT") = value End Set End Property Private Property DtRemisionesTmpDT As DataTable Get Return If(IsNothing(ViewState("DtRemisionesTmpDT")), Nothing, CType(ViewState("DtRemisionesTmpDT"), DataTable)) End Get Set(value As DataTable) ViewState("DtRemisionesTmpDT") = value End Set End Property Private Property DtPedidosTmpDT As DataTable Get Return If(IsNothing(ViewState("DtPedidosTmpDT")), Nothing, CType(ViewState("DtPedidosTmpDT"), DataTable)) End Get Set(value As DataTable) ViewState("DtPedidosTmpDT") = value End Set End Property Private Property DtRemConceptosSurtidos As DataTable Get Return If(IsNothing(ViewState("DtRemConceptosSurtidos")), Nothing, CType(ViewState("DtRemConceptosSurtidos"), DataTable)) End Get Set(value As DataTable) ViewState("DtRemConceptosSurtidos") = value End Set End Property Private Property DtPedidosConceptosSurtidos As DataTable Get Return If(IsNothing(ViewState("DtPedidosConceptosSurtidos")), Nothing, CType(ViewState("DtPedidosConceptosSurtidos"), DataTable)) End Get Set(value As DataTable) ViewState("DtPedidosConceptosSurtidos") = value End Set End Property Private Property HuboCambioRemi As Boolean Get Return If(IsNothing(ViewState("HuboCambioRemi")), False, CType(ViewState("HuboCambioRemi"), Boolean)) End Get Set(value As Boolean) ViewState("HuboCambioRemi") = value End Set End Property Private Property AplicaGastoContrato As Boolean Get Return If(IsNothing(ViewState("AplicaGastoContrato")), False, CType(ViewState("AplicaGastoContrato"), Boolean)) End Get Set(value As Boolean) ViewState("AplicaGastoContrato") = value End Set End Property Private Property EsCreaApartirDe As Boolean Get Return If(IsNothing(ViewState("EsCreaApartirDe")), False, CType(ViewState("EsCreaApartirDe"), Boolean)) End Get Set(value As Boolean) ViewState("EsCreaApartirDe") = value End Set End Property Private Property RequiereAlmacenDestino As Boolean Get Return If(IsNothing(ViewState("RequiereAlmacenDestino")), False, CType(ViewState("RequiereAlmacenDestino"), Boolean)) End Get Set(value As Boolean) ViewState("RequiereAlmacenDestino") = value End Set End Property Private Property RequiereAlmacenOrigen As Boolean Get Return If(IsNothing(ViewState("RequiereAlmacenOrigen")), False, CType(ViewState("RequiereAlmacenOrigen"), Boolean)) End Get Set(value As Boolean) ViewState("RequiereAlmacenOrigen") = value End Set End Property Private Property AplicoNCFacturaActual As Boolean Get Return If(IsNothing(ViewState("AplicoNCFacturaActual")), False, CType(ViewState("AplicoNCFacturaActual"), Boolean)) End Get Set(value As Boolean) ViewState("AplicoNCFacturaActual") = value End Set End Property Private Property EmpresaActual As Empresa Get Return CType(ViewState("EmpresaActual"), Empresa) End Get Set(value As Empresa) ViewState("EmpresaActual") = value End Set End Property Property CargaDocumentoOC As Boolean Get If ViewState("CargaDocumentoOC") Is Nothing Then Return False Else Return DirectCast(ViewState("CargaDocumentoOC"), Boolean) End If End Get Set(value As Boolean) ViewState("CargaDocumentoOC") = value End Set End Property Private Property DTFacNC As DataTable Get Return If(IsNothing(ViewState("DTFacNC")), Nothing, CType(ViewState("DTFacNC"), DataTable)) End Get Set(value As DataTable) ViewState("DTFacNC") = value End Set End Property Private Property DtPromociones As DataTable Get Return If(IsNothing(ViewState("DtPromociones")), Nothing, CType(ViewState("DtPromociones"), DataTable)) End Get Set(value As DataTable) ViewState("DtPromociones") = value End Set End Property Private ReadOnly Property CveCliente As Integer Get Return ViewState("CveCliente").ToString().ToEntero() End Get End Property Private ReadOnly Property CveClienteAnterior As Integer Get Return ViewState("CveClienteAnterior").ToString().ToEntero() End Get End Property Private Property CveClienteOS As Integer Get If ViewState("CveClienteOS") Is Nothing Then ViewState("CveClienteOS") = -1 End If Return ViewState("CveClienteOS").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveClienteOS") = value End Set End Property Private Property CveClienteSucursalOS As Integer Get If ViewState("CveClienteSucursalOS") Is Nothing Then ViewState("CveClienteSucursalOS") = -1 End If Return ViewState("CveClienteSucursalOS").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveClienteSucursalOS") = value End Set End Property Private Property CveClienteSucursal As Integer Get If ViewState("CveClienteSucursal") Is Nothing Then Return -1 Else Return ViewState("CveClienteSucursal").ToString().ToEntero() End If End Get Set(value As Integer) ViewState("CveClienteSucursal") = value End Set End Property Private Property CveAnticipo As Integer Get If ViewState("CveAnticipo") Is Nothing Then Return -1 Else Return ViewState("CveAnticipo").ToString().ToEntero() End If End Get Set(value As Integer) ViewState("CveAnticipo") = value End Set End Property Private Property CveUsuarioActual As Integer Get Return ViewState("CveUsuarioActual").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveUsuarioActual") = value End Set End Property Private ReadOnly Property Mail As String Get Return IfNull(ViewState("Mail"), "").ToString() End Get End Property Private ReadOnly Property MailCC As String Get Return IfNull(ViewState("MailCC"), "").ToString() End Get End Property Public ReadOnly Property CveVenta As Integer Get Return ViewState("CveVenta").ToString().ToEntero() End Get End Property Private ReadOnly Property CveSubProyectoVenta As Integer Get Return If(IsNothing(ViewState("CveSubProyectoVenta")), -1, ViewState("CveSubProyectoVenta").ToString().ToEntero()) End Get End Property Private Property CveVentaPadre As Integer Get Return If(IsNothing(ViewState("CveVentaPadre")), -1, ViewState("CveVentaPadre").ToString().ToEntero()) End Get Set(value As Integer) ViewState("CveVentaPadre") = value End Set End Property Private Property CveEstatusFacturaPadre As Integer Get Return If(IsNothing(ViewState("CveEstatusFacturaPadre")), -1, ViewState("CveEstatusFacturaPadre").ToString().ToEntero()) End Get Set(value As Integer) ViewState("CveEstatusFacturaPadre") = value End Set End Property Private ReadOnly Property CveDevolucion As Integer Get Return ViewState("CveDevolucion").ToString().ToEntero() End Get End Property Private Property CveVentaRelacion As Integer Get Return If(IsNothing(ViewState("CveVentaRelacion")), -1, ViewState("CveVentaRelacion").ToString().ToEntero()) End Get Set(value As Integer) ViewState("CveVentaRelacion") = value End Set End Property Private Property ImporteRelacion As Double Get Return If(IsNothing(ViewState("ImporteRelacion")), 0, ViewState("ImporteRelacion").ToString().ToDouble) End Get Set(value As Double) ViewState("ImporteRelacion") = value End Set End Property Private Property IsTotalxConcepto As Boolean Get Return If(IsNothing(ViewState("IsTotalxConcepto")), False, CBool(ViewState("IsTotalxConcepto").ToString())) End Get Set(value As Boolean) ViewState("IsTotalxConcepto") = value End Set End Property Private ReadOnly Property CveAlmacenTransitorio As Integer Get Return ViewState("CveAlmacenTransitorio").ToString().ToEntero() End Get End Property Private ReadOnly Property NuevaFactura As Integer Get Return ViewState("NuevaFactura").ToString().ToEntero() End Get End Property Private ReadOnly Property VentaFolio As String Get Return ViewState("VentaFolio").ToString() End Get End Property Private ReadOnly Property EstablecioFolio As Boolean Get Return CBool(ViewState("EstablecioFolio")) End Get End Property Private ReadOnly Property FolioFiscal As String Get Return ViewState("FolioFiscal").ToString() End Get End Property Private ReadOnly Property Ruta As String Get Return UsuarioActual.Empresa.Ruta End Get End Property Private ReadOnly Property RutaPruebas As String Get Return String.Format("{0}Empresas/1/", ModExtensiones.DirectorioBaseEmpresas) End Get End Property Private ReadOnly Property TipoCambio As Decimal Get Return ViewState("TipoCambio").ToString().ToDecimal End Get End Property Private ReadOnly Property ProcesoCorrecto As Boolean Get Return CBool(ViewState("ProcesoCorrecto")) End Get End Property 'FUENTES RECAUDACIÓN Private Property DTPresupuestoIngresos As DataTable Get Return CType(ViewState("DTPresupuestoIngresos"), DataTable) End Get Set(value As DataTable) ViewState("DTPresupuestoIngresos") = value End Set End Property 'Folios Private ReadOnly Property CveFolio As Integer Get Return ViewState("CveFolio").ToString().ToEntero() End Get End Property Private ReadOnly Property NumAprobacion As Long Get Return CLng(ViewState("NumAprobacion").ToString()) End Get End Property Private ReadOnly Property FechaAprobacion As Date Get Return ViewState("FechaAprobacion").ToString().ToDate End Get End Property Private ReadOnly Property FolioActual As String Get Return ViewState("FolioActual").ToString() End Get End Property 'Sucursal Private ReadOnly Property Serie As String Get Return ViewState("Serie").ToString() End Get End Property Private ReadOnly Property Folio As Integer Get Return ViewState("Folio").ToString().ToEntero() End Get End Property Private ReadOnly Property FormatoFactura As String Get Return ViewState("FormatoFactura").ToString() End Get End Property Private ReadOnly Property TipoFormato As String Get Return ViewState("TipoFormato").ToString() End Get End Property Private ReadOnly Property IVA As Decimal Get Return ViewState("IVA").ToString().ToDecimal End Get End Property 'Private ReadOnly Property SubProyectoPorcentajeIVA As Decimal ' Get ' Return ViewState("SubProyectoPorcentajeIVA").ToString().ToDecimal ' End Get 'End Property Private ReadOnly Property ClienteRetIVA As Decimal Get Return ViewState("ClienteRetIVA").ToString().ToDecimal End Get End Property Private ReadOnly Property ClienteRetISR As Decimal Get Return ViewState("ClienteRetISR").ToString().ToDecimal End Get End Property Private ReadOnly Property ClienteDesglosaIEPS As Boolean Get Return CType(ViewState("ClienteDesglosaIEPS").ToString(), Boolean) End Get End Property Private ReadOnly Property ClienteNODesglosaIVA As Boolean Get Return CType(ViewState("ClienteNODesglosaIVA").ToString(), Boolean) End Get End Property Private ReadOnly Property ClienteUsaProductoAlterno As Boolean Get Return CType(IfNull(ViewState("ClienteUsaProductoAlterno"), "false").ToString(), Boolean) End Get End Property 'Cliente Private ReadOnly Property NombreCliente As String Get Return ViewState("NombreCliente").ToString() End Get End Property Private ReadOnly Property Vendedor As String Get Return ViewState("Vendedor").ToString() End Get End Property Private ReadOnly Property CodCliente As String Get Return ViewState("CodCliente").ToString() End Get End Property Private ReadOnly Property CliNoExt As String Get Return ViewState("CliNoExt").ToString() End Get End Property Private ReadOnly Property CliNoInt As String Get Return ViewState("CliNoInt").ToString() End Get End Property Private ReadOnly Property CliLocalidad As String Get Return ViewState("CliLocalidad").ToString() End Get End Property Private ReadOnly Property CliPais As String Get Return ViewState("CliPais").ToString() End Get End Property Private ReadOnly Property SucCalle As String Get Return ViewState("SucCalle").ToString() End Get End Property Private ReadOnly Property CliCorreoCot As String Get If ViewState("CliCorreoCot") Is Nothing Then Return "" Else Return ViewState("CliCorreoCot").ToString() End If End Get End Property Private ReadOnly Property SucNoExt As String Get Return ViewState("SucNoExt").ToString() End Get End Property Private ReadOnly Property SucNoInt As String Get Return ViewState("SucNoInt").ToString() End Get End Property Private ReadOnly Property SucColonia As String Get Return ViewState("SucColonia").ToString() End Get End Property Private ReadOnly Property SucLocalidad As String Get Return ViewState("SucLocalidad").ToString() End Get End Property Private ReadOnly Property SucMunicipio As String Get Return ViewState("SucMunicipio").ToString() End Get End Property Private ReadOnly Property SucEstado As String Get Return ViewState("SucEstado").ToString() End Get End Property Private ReadOnly Property SucPais As String Get Return ViewState("SucPais").ToString() End Get End Property Private ReadOnly Property SucCP As String Get Return ViewState("SucCP").ToString() End Get End Property Private ReadOnly Property MatCalle As String Get Return ViewState("MatCalle").ToString() End Get End Property Private ReadOnly Property MatNoExt As String Get Return ViewState("MatNoExt").ToString() End Get End Property Private ReadOnly Property MatNoInt As String Get Return ViewState("MatNoInt").ToString() End Get End Property Private ReadOnly Property MatColonia As String Get Return ViewState("MatColonia").ToString() End Get End Property Private ReadOnly Property MatLocalidad As String Get Return ViewState("MatLocalidad").ToString() End Get End Property Private ReadOnly Property MatMunicipio As String Get Return ViewState("MatMunicipio").ToString() End Get End Property Private ReadOnly Property MatEstado As String Get Return ViewState("MatEstado").ToString() End Get End Property Private ReadOnly Property MatPais As String Get Return ViewState("MatPais").ToString() End Get End Property Private ReadOnly Property MatCP As String Get Return ViewState("MatCP").ToString() End Get End Property Private Property ImprimeNombreSucursal As Boolean Get Return CBool(ViewState("ImprimeNombreSucursal")) End Get Set(value As Boolean) ViewState("ImprimeNombreSucursal") = value End Set End Property Private ReadOnly Property AplicaFEMSA As Boolean Get Return CBool(ViewState("AplicaFEMSA")) End Get End Property Private ReadOnly Property AplicaComercioExterior As Boolean Get Return CBool(ViewState("AplicaComercioExterior")) End Get End Property Private ReadOnly Property CveTipoOperacion As Integer Get Return CInt(ViewState("CveTipoOperacion")) End Get End Property Private ReadOnly Property CvePedimento As Integer Get Return CInt(ViewState("CvePedimento")) End Get End Property Private ReadOnly Property CveIncoterm As Integer Get Return CInt(ViewState("CveIncoterm")) End Get End Property Private ReadOnly Property AplicaDetallista As Boolean Get Return CBool(ViewState("AplicaDetallista")) End Get End Property Private ReadOnly Property AplicaFord As Boolean Get Return CBool(ViewState("AplicaFord")) End Get End Property Private ReadOnly Property CveOS As Integer Get Return ViewState("CveOS").ToString().ToEntero() End Get End Property Private Property CveOSVentaMedica As Integer Get Return IfNull(ViewState("CveOSVentaMedica"), "-1").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveOSVentaMedica") = value End Set End Property Private Property FolioOSVentaMedica As Integer Get Return IfNull(ViewState("FolioOSVentaMedica"), "0").ToString().ToEntero() End Get Set(value As Integer) ViewState("FolioOSVentaMedica") = value End Set End Property Private ReadOnly Property SaldoVenta As Decimal Get Return If(IsNothing(ViewState("SaldoVenta")), 0, ViewState("SaldoVenta").ToString().ToDecimal) End Get End Property Private Property CvePSAmortizacion As Integer Get Return ViewState("CvePSAmortizacion").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePSAmortizacion") = value End Set End Property 'Inventarios Private Property DtInv As DataTable Get Return CType(ViewState("DtInv"), DataTable) End Get Set(value As DataTable) ViewState("DtInv") = value End Set End Property Private Property CvePrePoliza As Integer Get Return ViewState("CvePrePoliza").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePrePoliza") = value End Set End Property Private ReadOnly Property SeGuardoPrePoliza As Boolean Get Return CBool(ViewState("SeGuardoPrePoliza")) End Get End Property Private Property CveVentaFacturada As Integer Get Return ViewState("CveVentaFacturada").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveVentaFacturada") = value End Set End Property Private ReadOnly Property AplicarVentaFacturada As Boolean Get Return CBool(ViewState("AplicarVentaFacturada")) End Get End Property 'Estimaciones Private Property CveContrato As Integer Get Return ViewState("CveContrato").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveContrato") = value End Set End Property Private Property CvePedido As Integer Get Return ViewState("CvePedido").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePedido") = value End Set End Property Private Property TipoContrato As Integer Get Return ViewState("TipoContrato").ToString().ToEntero() End Get Set(value As Integer) ViewState("TipoContrato") = value End Set End Property Private Property Opcion As String Get Return ViewState("Opcion").ToString() End Get Set(value As String) ViewState("Opcion") = value End Set End Property Private Property CorreoNotificacionPedDev As String Get Return If(IsNothing(ViewState("CorreoNotificacionDevPed")), "", ViewState("CorreoNotificacionDevPed").ToString()) End Get Set(value As String) ViewState("CorreoNotificacionDevPed") = value End Set End Property 'Presupuesto Private Property CvePresupuesto As Integer Get Return ViewState("CvePresupuesto").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePresupuesto") = value End Set End Property Private Property TotalOtrosConceptos As Decimal Get Return ViewState("TotalOtrosConceptos").ToString().ToDecimal End Get Set(value As Decimal) ViewState("TotalOtrosConceptos") = value End Set End Property Private Property TipoCambioFactura As Decimal Get Return ViewState("TipoCambioFactura").ToString().ToDecimal End Get Set(value As Decimal) ViewState("TipoCambioFactura") = value End Set End Property Private Property DtPagos As DataTable Get Return CType(ViewState("DtPagos"), DataTable) End Get Set(value As DataTable) ViewState("DtPagos") = value End Set End Property Private Property DevolucionAlmacen As Integer Get Return ViewState("DevolucionAlmacen").ToString().ToEntero() End Get Set(value As Integer) ViewState("DevolucionAlmacen") = value End Set End Property Private Property DevolucionAlmacenNC As Integer Get Return IfNull(ViewState("DevolucionAlmacenNC"), 2, ViewState("DevolucionAlmacenNC").ToString().ToString()).ToString().ToEntero() End Get Set(value As Integer) ViewState("DevolucionAlmacenNC") = value End Set End Property Private ReadOnly Property TipoDoctoDevolucion As String Get Return ViewState("TipoDoctoDevolucion").ToString() End Get End Property Private Property PlazoCobranza As Integer Get Return ViewState("PlazoCobranza").ToString().ToEntero() End Get Set(value As Integer) ViewState("PlazoCobranza") = value End Set End Property Private Property PlazoCobranzaRemision As Integer Get Return ViewState("PlazoCobranzaRemision").ToString().ToEntero() End Get Set(value As Integer) ViewState("PlazoCobranzaRemision") = value End Set End Property 'CvePAC Private Property CvePAC As Integer Get Return ViewState("CvePAC").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePAC") = value End Set End Property Private Property AplicaDevolucion As Boolean Get Return If(IsNothing(ViewState("AplicaDevolucion")), False, CType(ViewState("AplicaDevolucion"), Boolean)) End Get Set(value As Boolean) ViewState("AplicaDevolucion") = value End Set End Property Private Property CveVentaDevolucion As Integer Get Return If(IsNothing(ViewState("CveVentaDevolucion")), 0, CType(ViewState("CveVentaDevolucion"), Integer)) End Get Set(value As Integer) ViewState("CveVentaDevolucion") = value End Set End Property Private Property SaldoVentaDevolucion As Decimal Get Return ViewState("SaldoVentaDevolucion").ToString().ToDecimal End Get Set(value As Decimal) ViewState("SaldoVentaDevolucion") = value End Set End Property Private Property ContratoOC As Boolean Get Return If(IsNothing(ViewState("ContratoOC")), False, CType(ViewState("ContratoOC"), Boolean)) End Get Set(value As Boolean) ViewState("ContratoOC") = value End Set End Property Private Property TieneAlmacen As Boolean Get Return If(IsNothing(ViewState("TieneAlmacen")), False, CType(ViewState("TieneAlmacen"), Boolean)) End Get Set(value As Boolean) ViewState("TieneAlmacen") = value End Set End Property Private Property PorcentajeIVA As Decimal Get Return ViewState("PorcentajeIVA").ToString().ToDecimal End Get Set(value As Decimal) ViewState("PorcentajeIVA") = value End Set End Property Private Property CveEstatusRefacturacion As Integer Get Return If(IsNothing(ViewState("CveEstatusRefacturacion")), 0, CType(ViewState("CveEstatusRefacturacion"), Integer)) End Get Set(value As Integer) ViewState("CveEstatusRefacturacion") = value End Set End Property Private Property RefacturarCancelada As Boolean Get Return If(IsNothing(ViewState("RefacturarCancelada")), False, CBool(ViewState("RefacturarCancelada"))) End Get Set(value As Boolean) ViewState("RefacturarCancelada") = value End Set End Property Private Property CveEstadoCancelacion As Integer Get Return If(IsNothing(ViewState("CveEstadoCancelacion")), 0, CType(ViewState("CveEstadoCancelacion"), Integer)) End Get Set(value As Integer) ViewState("CveEstadoCancelacion") = value End Set End Property Private Property PermiteCredito As Boolean Get Return If(IsNothing(ViewState("PermiteCredito")), False, CBool(ViewState("PermiteCredito"))) End Get Set(value As Boolean) ViewState("PermiteCredito") = value End Set End Property Private Property DtAnticipoAmortizacion As DataTable Get Return CType(ViewState("DtAnticipoAmortizacion"), DataTable) End Get Set(value As DataTable) ViewState("DtAnticipoAmortizacion") = value End Set End Property Private Property SaldoAnticipo As Decimal Get Return If(IsNothing(ViewState("SaldoAnticipo")), 0, ViewState("SaldoAnticipo").ToString().ToDecimal()) End Get Set(value As Decimal) ViewState("SaldoAnticipo") = value End Set End Property Private Property CorreoEntregaAlmacen As String Get Return If(IsNothing(ViewState("CorreoEntregaAlmacen")), "", ViewState("CorreoEntregaAlmacen").ToString()) End Get Set(value As String) ViewState("CorreoEntregaAlmacen") = value End Set End Property Private Property CveVentaUsadoDevolucionEfectivo As Integer Get Return If(IsNothing(ViewState("CveVentaUsadoDevolucionEfectivo")), 0, CType(ViewState("CveVentaUsadoDevolucionEfectivo"), Integer)) End Get Set(value As Integer) ViewState("CveVentaUsadoDevolucionEfectivo") = value End Set End Property Private Property RFCReceptorVenta As String Get Return If(IsNothing(ViewState("RFCReceptorVenta")), "", ViewState("RFCReceptorVenta").ToString()) End Get Set(value As String) ViewState("RFCReceptorVenta") = value End Set End Property Private Property RegimenFiscalCliente As String Get Return IfNull(ViewState("RegimenFiscalCliente"), "").ToString() End Get Set(value As String) ViewState("RegimenFiscalCliente") = value End Set End Property Private Property RegimenSociedad As String Get Return IfNull(ViewState("RegimenSociedad"), "").ToString() End Get Set(value As String) ViewState("RegimenSociedad") = value End Set End Property Private Property TipoPersona As Boolean Get Return CBool(IfNull(ViewState("TipoPersona"), False)) End Get Set(value As Boolean) ViewState("TipoPersona") = value End Set End Property Private Property Adjunto As String Get Return If(IsNothing(ViewState("Adjunto")), "", ViewState("Adjunto").ToString()) End Get Set(value As String) ViewState("Adjunto") = value End Set End Property Private Property VentaActual As Venta Get Return DirectCast(ViewState("VentaActual"), Venta) End Get Set(value As Venta) ViewState("VentaActual") = value End Set End Property Private Property ListaAnticiposAplicados As List(Of Modelos.MAnticipoRelacionado) Get Return If(IsNothing(ViewState("ListaAnticiposAplicados")), Nothing, CType(ViewState("ListaAnticiposAplicados"), List(Of Modelos.MAnticipoRelacionado))) End Get Set(value As List(Of Modelos.MAnticipoRelacionado)) ViewState("ListaAnticiposAplicados") = value End Set End Property Private Property ListaDevolucionesAplicadas As List(Of Modelos.MAnticipoRelacionado) Get Return If(IsNothing(ViewState("ListaDevolucionesAplicadas")), Nothing, CType(ViewState("ListaDevolucionesAplicadas"), List(Of Modelos.MAnticipoRelacionado))) End Get Set(value As List(Of Modelos.MAnticipoRelacionado)) ViewState("ListaDevolucionesAplicadas") = value End Set End Property Private Property CveTimbreCartaPorteVenta As Integer Get Return If(IsNothing(ViewState("CveTimbreCartaPorteVenta")), -1, ViewState("CveTimbreCartaPorteVenta").ToString().ToEntero()) End Get Set(value As Integer) ViewState("CveTimbreCartaPorteVenta") = value End Set End Property #End Region Private Property ObjDescuentoGral As Modelos.VentaDescuentos Get Return If(IsNothing(ViewState("ObjDescuentoGral")), Nothing, CType(ViewState("ObjDescuentoGral"), Modelos.VentaDescuentos)) End Get Set(value As Modelos.VentaDescuentos) ViewState("ObjDescuentoGral") = value End Set End Property #Region "Propiedades PuntoVenta" Private Property CveCorte As Integer Get Return ViewState("CveCorte").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveCorte") = value End Set End Property Private Property Entrega As String Get Return ViewState("Entrega").ToString() End Get Set(value As String) ViewState("Entrega") = value End Set End Property Private Property Vigencia As String Get Return ViewState("Vigencia").ToString() End Get Set(value As String) ViewState("Vigencia") = value End Set End Property Private Property DineroCaja As Double Get Return ViewState("DineroCaja").ToString().ToDouble End Get Set(value As Double) ViewState("DineroCaja") = value End Set End Property Private ReadOnly Property CveCicloComercial As Integer Get Return ViewState("CveCicloComercial").ToString().ToEntero() End Get End Property #End Region #Region "Propiedades Contratos" Private Property DtContratos As DataTable Get Return If(IsNothing(ViewState("DtContratos")), Nothing, CType(ViewState("DtContratos"), DataTable)) End Get Set(value As DataTable) ViewState("DtContratos") = value End Set End Property Private Property NumeroContrato As String Get Return ViewState("NumeroContrato").ToString() End Get Set(value As String) ViewState("NumeroContrato") = value End Set End Property Private Property DescripcionContrato As String Get Return ViewState("DescripcionContrato").ToString() End Get Set(value As String) ViewState("DescripcionContrato") = value End Set End Property Private Property NumeroLicitacion As String Get Return ViewState("NumeroLicitacion").ToString() End Get Set(value As String) ViewState("NumeroLicitacion") = value End Set End Property Private Property CveAlmacenExistenciasContrato As Integer Get Return ViewState("CveAlmacenExistenciasContrato").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAlmacenExistenciasContrato") = value End Set End Property Private Property CveAlmacenOrigenContrato As Integer Get Return ViewState("CveAlmacenOrigenContrato").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAlmacenOrigenContrato") = value End Set End Property Private Property DtContratosSerieDetalle As DataTable Get Return If(IsNothing(ViewState("DtContratosSerieDetalle")), Nothing, CType(ViewState("DtContratosSerieDetalle"), DataTable)) End Get Set(value As DataTable) ViewState("DtContratosSerieDetalle") = value End Set End Property Private Property CvePSSerie As Integer Get Return CType(ViewState("CvePSSerie"), Integer) End Get Set(value As Integer) ViewState("CvePSSerie") = value End Set End Property Private Property CveUMSerie As Integer Get Return CType(ViewState("CveUMSerie"), Integer) End Get Set(value As Integer) ViewState("CveUMSerie") = value End Set End Property Private Property CveConsecSerie As Integer Get Return CType(ViewState("CveConsecSerie"), Integer) End Get Set(value As Integer) ViewState("CveConsecSerie") = value End Set End Property Private Property LimitaCantidadSerie As Integer Get Return CType(ViewState("LimitaCantidadSerie"), Integer) End Get Set(value As Integer) ViewState("LimitaCantidadSerie") = value End Set End Property Private Property PorAmortizacionAnticipo As Integer Get If ViewState("PorAmortizacionAnticipo") Is Nothing Then Return 0 Else Return CType(ViewState("PorAmortizacionAnticipo"), Integer) End If End Get Set(value As Integer) ViewState("PorAmortizacionAnticipo") = value End Set End Property Private Property AmortizacionSujeridaContrato As Decimal Get If ViewState("AmortizacionSujeridaContrato") Is Nothing Then Return 0 Else Return ViewState("AmortizacionSujeridaContrato").ToString.ToDecimal End If End Get Set(value As Decimal) ViewState("AmortizacionSujeridaContrato") = value End Set End Property Private Property EscontratoObra As Boolean Get If ViewState("EscontratoObra") Is Nothing Then Return False Else Return Boolean.Parse(ViewState("EscontratoObra").ToString) End If End Get Set(value As Boolean) ViewState("EscontratoObra") = value End Set End Property #End Region #Region " PROPIEDADES NUEVAS | GUARDAR - IMPRESION " Private Property ErrorList As List(Of String) Get Return CType(ViewState("ErrorList"), List(Of String)) End Get Set(value As List(Of String)) ViewState("ErrorList") = value End Set End Property Private Property MensajeAlert As StringBuilder Get Return CType(ViewState("MensajeAlert"), StringBuilder) End Get Set(value As StringBuilder) ViewState("MensajeAlert") = value End Set End Property Private Property ObjFactura As Modelos.Factura Get Return CType(ViewState("ObjFactura"), Modelos.Factura) End Get Set(value As Modelos.Factura) ViewState("ObjFactura") = value End Set End Property Private Property ObjFacturaDevolucion As Modelos.Factura Get Return CType(ViewState("ObjFacturaDevolucion"), Modelos.Factura) End Get Set(value As Modelos.Factura) ViewState("ObjFacturaDevolucion") = value End Set End Property Private Property ObjFacturaBonificacion As Modelos.Factura Get Return CType(ViewState("ObjFacturaBonificacion"), Modelos.Factura) End Get Set(value As Modelos.Factura) ViewState("ObjFacturaBonificacion") = value End Set End Property Private Property ObjFacturaNC As Modelos.Factura Get Return CType(ViewState("ObjFacturaNC"), Modelos.Factura) End Get Set(value As Modelos.Factura) ViewState("ObjFacturaNC") = value End Set End Property #End Region #Region " PROPIEDADES NUEVAS " Private Property CveOC As Integer Get Return ViewState("CveOC").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveOC") = value End Set End Property Private Property RegistroxOC As Boolean Get Return CBool(IfNull(ViewState("RegistroxOC"), False)) End Get Set(value As Boolean) ViewState("RegistroxOC") = value End Set End Property Private Property EnviarCorreoCliente As Boolean Get Return CBool(IfNull(ViewState("EnviarCorreoCliente"), False)) End Get Set(value As Boolean) ViewState("EnviarCorreoCliente") = value End Set End Property Private Property EstatusCliente As Boolean Get Return CBool(ViewState("EstatusCliente").ToString()) End Get Set(value As Boolean) ViewState("EstatusCliente") = value End Set End Property Private Property Modalidad As String Get Return ViewState("Modalidad").ToString() End Get Set(value As String) ViewState("Modalidad") = value End Set End Property Private Property Index As Integer Get Return ViewState("Index").ToString().ToEntero() End Get Set(value As Integer) ViewState("Index") = value End Set End Property Private Property TotAnt As Decimal Get Return ViewState("TotAnt").ToString().ToDecimal End Get Set(value As Decimal) ViewState("TotAnt") = value End Set End Property Private Property TotalOriginal As Double Get Return ViewState("TotalOriginal").ToString().ToDouble End Get Set(value As Double) ViewState("TotalOriginal") = value End Set End Property Private Property AplicaCancelarRemision As Boolean Get Return CBool(ViewState("AplicaCancelarRemision").ToString()) End Get Set(value As Boolean) ViewState("AplicaCancelarRemision") = value End Set End Property Private Property TipoVentaSucursal As Integer Get Return ViewState("TipoVentaSucursal").ToString().ToEntero() End Get Set(value As Integer) ViewState("TipoVentaSucursal") = value End Set End Property Private Property MensajeCveSAT As StringBuilder Get If ViewState("MensajeCveSAT") Is Nothing Then ViewState("MensajeCveSAT") = New StringBuilder Return CType(ViewState("MensajeCveSAT"), StringBuilder) End Get Set(value As StringBuilder) ViewState("TipoVentaSucursal") = value End Set End Property Private Property EditoRemision As Boolean Get Return CBool(ViewState("EditoRemision").ToString()) End Get Set(value As Boolean) ViewState("EditoRemision") = value End Set End Property Private Property AplicaNC As Boolean Get Return CBool(ViewState("AplicaNC").ToString()) End Get Set(value As Boolean) ViewState("AplicaNC") = value End Set End Property Private Property DtVentasNC As DataTable Get Return CType(ViewState("DtVentasNC"), DataTable) End Get Set(value As DataTable) ViewState("DtVentasNC") = value End Set End Property Private Property AplicaNCMasiva As Boolean Get Return CBool(ViewState("AplicaNCMasiva").ToString()) End Get Set(value As Boolean) ViewState("AplicaNCMasiva") = value End Set End Property Private Property RefacturacionGeneroNC As Boolean Get Return CBool(ViewState("RefacturacionGeneroNC").ToString()) End Get Set(value As Boolean) ViewState("RefacturacionGeneroNC") = value End Set End Property Private Property ModalidadEdicion As Boolean Get Return CBool(ViewState("ModalidadEdicion").ToString()) End Get Set(value As Boolean) ViewState("ModalidadEdicion") = value End Set End Property Private Property ConversionRemision As String Get Return ViewState("ConversionRemision").ToString() End Get Set(value As String) ViewState("ConversionRemision") = value End Set End Property Private Property TipoCambioRemision As Decimal Get Return ViewState("TipoCambioRemision").ToString().ToDecimal End Get Set(value As Decimal) ViewState("TipoCambioRemision") = value End Set End Property Private Property TieneContrato As Boolean Get Return CBool(ViewState("TieneContrato").ToString()) End Get Set(value As Boolean) ViewState("TieneContrato") = value End Set End Property Private Property CveOrdenCompraContrato As Integer Get Return ViewState("CveOrdenCompraContrato").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveOrdenCompraContrato") = value End Set End Property Private Property ContratosConOC As StringBuilder Get If ViewState("ContratosConOC") Is Nothing Then ViewState("ContratosConOC") = New StringBuilder Return CType(ViewState("ContratosConOC"), StringBuilder) End Get Set(value As StringBuilder) ViewState("ContratosConOC") = value End Set End Property Private Property RequiereOC As Boolean Get Return CBool(ViewState("RequiereOC").ToString()) End Get Set(value As Boolean) ViewState("RequiereOC") = value End Set End Property Private Property PorcentajeCredito As Decimal Get Return ViewState("PorcentajeCredito").ToString().ToDecimal End Get Set(value As Decimal) ViewState("PorcentajeCredito") = value End Set End Property Private Property CvePedidoA As Integer Get Return ViewState("CvePedidoA").ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePedidoA") = value End Set End Property Private Property CveAcercamiento As Integer Get If ViewState("CveAcercamiento") Is Nothing Then ViewState("CveAcercamiento") = -1 End If Return ViewState("CveAcercamiento").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAcercamiento") = value End Set End Property Private Property CveEmpresaCRM As Integer Get Return ViewState("CveEmpresaCRM").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveEmpresaCRM") = value End Set End Property Private Property CveAcercamientoCRM As Integer Get Return ViewState("CveAcercamientoCRM").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAcercamientoCRM") = value End Set End Property Private Property CorreoContactoCRM As String Get If ViewState("CorreoContactoCRM") Is Nothing Then ViewState("CorreoContactoCRM") = "" End If Return ViewState("CorreoContactoCRM").ToString() End Get Set(value As String) ViewState("CorreoContactoCRM") = value End Set End Property Private Property DtPedidos2 As DataTable Get Return CType(ViewState("DtPedidos2"), DataTable) End Get Set(value As DataTable) ViewState("DtPedidos2") = value End Set End Property Private Property DtPedidosPS As DataTable Get Return CType(ViewState("DtPedidosPS"), DataTable) End Get Set(value As DataTable) ViewState("DtPedidosPS") = value End Set End Property Private Property CveEstatus As Integer Get Return ViewState("CveEstatus").ToString().ToEntero() End Get Set(value As Integer) ViewState("CveEstatus") = value End Set End Property Private Property CveEstatusCotizacion As Integer Get Return (IfNull(ViewState("CveEstatusCotizacion"), "-1", ViewState("CveEstatusCotizacion"))).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveEstatusCotizacion") = value End Set End Property Private Property CveMetodoPago33Venta As Integer Get Return (IfNull(ViewState("CveMetodoPago33Venta"), "-1", ViewState("CveMetodoPago33Venta"))).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveMetodoPago33Venta") = value End Set End Property Private Property CveFormaPago33Venta As Integer Get Return (IfNull(ViewState("CveFormaPago33Venta"), "-1", ViewState("CveFormaPago33Venta"))).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveFormaPago33Venta") = value End Set End Property Private Property CveMetodoPago33Cliente As Integer Get Return If(IsNothing(ViewState("CveMetodoPago33Cliente")), -1, ViewState("CveMetodoPago33Cliente")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveMetodoPago33Cliente") = value End Set End Property Private Property CveFormaPago33Cliente As Integer Get Return If(IsNothing(ViewState("CveFormaPago33Cliente")), -1, ViewState("CveFormaPago33Cliente")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveFormaPago33Cliente") = value End Set End Property Private Property CveVendedorVenta As Integer Get Return (IfNull(ViewState("CveVendedorVenta"), "-1", ViewState("CveVendedorVenta"))).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveVendedorVenta") = value End Set End Property Private Property CveVendedorCliente As Integer Get Return If(IsNothing(ViewState("CveVendedorCliente")), -1, ViewState("CveVendedorCliente")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveVendedorCliente") = value End Set End Property Private Property CveVendedorClienteSucursal As Integer Get Return If(IsNothing(ViewState("CveVendedorClienteSucursal")), -1, ViewState("CveVendedorClienteSucursal")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveVendedorClienteSucursal") = value End Set End Property Private Property CveVendedorContrato As Integer Get Return If(IsNothing(ViewState("CveVendedorContrato")), -1, ViewState("CveVendedorContrato")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveVendedorContrato") = value End Set End Property Private Property CveVendedorEmpresaCRM As Integer Get Return If(IsNothing(ViewState("CveVendedorEmpresaCRM")), -1, ViewState("CveVendedorEmpresaCRM")).ToString().ToEntero End Get Set(value As Integer) ViewState("CveVendedorEmpresaCRM") = value End Set End Property Private Property DiasCredito As Integer Get Return ViewState("DiasCredito").ToString().ToEntero() End Get Set(value As Integer) ViewState("DiasCredito") = value End Set End Property Private Property EsDiasCreditoFijo As Boolean Get Return CBool(ViewState("EsDiasCreditoFijo").ToString()) End Get Set(value As Boolean) ViewState("EsDiasCreditoFijo") = value End Set End Property Private Property TieneDiasVencidos As Boolean Get Return CBool(IfNull(ViewState("TieneDiasVencidos"), "False", ViewState("TieneDiasVencidos"))) End Get Set(value As Boolean) ViewState("TieneDiasVencidos") = value End Set End Property Private Property DiasVencidosCliente As Integer Get Return IfNull(ViewState("DiasVencidosCliente"), "0", ViewState("DiasVencidosCliente")).ToString().ToEntero() End Get Set(value As Integer) ViewState("DiasVencidosCliente") = value End Set End Property Private Property SeCancelaRemisionProceso As Boolean Get Return CBool(ViewState("SeCancelaRemisionProceso").ToString()) End Get Set(value As Boolean) ViewState("SeCancelaRemisionProceso") = value End Set End Property Private Property CvePrecioLista As Integer Get Return IfNull(ViewState("CvePrecioLista"), 0, ViewState("CvePrecioLista").ToString().ToEntero()).ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePrecioLista") = value End Set End Property Private Property CvePrecioListaCliente As Integer Get Return IfNull(ViewState("CvePrecioListaCliente"), 0, ViewState("CvePrecioListaCliente").ToString().ToEntero()).ToString().ToEntero() End Get Set(value As Integer) ViewState("CvePrecioListaCliente") = value End Set End Property Private Property FacturarSucursal As Boolean Get Return CBool(IfNull(ViewState("FacturarSucursal"), "False", ViewState("FacturarSucursal"))) End Get Set(value As Boolean) ViewState("FacturarSucursal") = value End Set End Property Private Property ClienteSucursal As Modelos.SucursalModel Get Return CType(ViewState("ClienteSucursal"), Modelos.SucursalModel) End Get Set(value As Modelos.SucursalModel) ViewState("ClienteSucursal") = value End Set End Property Private Property EsFilial As Boolean Get Return CBool(IfNull(ViewState("EsFilial"), False)) End Get Set(value As Boolean) ViewState("EsFilial") = value End Set End Property Private Property CobranzaCorreo As String Get If ViewState("CobranzaCorreo") Is Nothing Then ViewState("CobranzaCorreo") = "" End If Return ViewState("CobranzaCorreo").ToString End Get Set(value As String) ViewState("CobranzaCorreo") = value End Set End Property Private Property VentaDesglosaIEPS As Boolean Get Return CBool(IfNull(ViewState("VentaDesglosaIEPS"), "False", ViewState("VentaDesglosaIEPS"))) End Get Set(value As Boolean) ViewState("VentaDesglosaIEPS") = value End Set End Property Private Property VentaNODesglosaIVA As Boolean Get Return CBool(IfNull(ViewState("VentaNODesglosaIVA"), "False", ViewState("VentaNODesglosaIVA"))) End Get Set(value As Boolean) ViewState("VentaNODesglosaIVA") = value End Set End Property Private Property SerieVenta As String Get Return IfNull(ViewState("SerieVenta"), "", ViewState("SerieVenta")).ToString() End Get Set(value As String) ViewState("SerieVenta") = value End Set End Property Private Property AplicaDocumentoNuevoNC As Boolean Get Return CBool(IfNull(ViewState("AplicaDocumentoNuevoNC"), "False", ViewState("AplicaDocumentoNuevoNC"))) End Get Set(value As Boolean) ViewState("AplicaDocumentoNuevoNC") = value End Set End Property Private Property AplicaRNCXDetalle As Boolean Get Return CBool(IfNull(ViewState("AplicaRNCXDetalle"), "False", ViewState("AplicaRNCXDetalle"))) End Get Set(value As Boolean) ViewState("AplicaRNCXDetalle") = value End Set End Property Private Property AplicaRNCBonificacionXDetalle As Boolean Get Return CBool(IfNull(ViewState("AplicaRNCBonificacionXDetalle"), "False", ViewState("AplicaRNCBonificacionXDetalle"))) End Get Set(value As Boolean) ViewState("AplicaRNCBonificacionXDetalle") = value End Set End Property Private Property AplicaRelacionManual As Boolean Get Return CBool(IfNull(ViewState("AplicaRelacionManual"), "False", ViewState("AplicaRelacionManual"))) End Get Set(value As Boolean) ViewState("AplicaRelacionManual") = value End Set End Property Private Property TmpDTFacturasRelacionadas As DataTable Get If ViewState("TmpDTFacturasRelacionadas") IsNot Nothing Then Return CType(ViewState("TmpDTFacturasRelacionadas"), DataTable) Else Return Nothing End If End Get Set(value As DataTable) ViewState("TmpDTFacturasRelacionadas") = value End Set End Property Private Property CveAutorizacion As Integer Get Return (IfNull(ViewState("CveAutorizacion"), "-1", ViewState("CveAutorizacion"))).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveAutorizacion") = value End Set End Property Private Property EsGarantia As Boolean Get Return CBool(IfNull(ViewState("EsGarantia"), False, ViewState("EsGarantia"))) End Get Set(value As Boolean) ViewState("EsGarantia") = value End Set End Property Private Property Bloqueada As Boolean Get Return CBool(IfNull(ViewState("Bloqueada"), False, ViewState("Bloqueada"))) End Get Set(value As Boolean) ViewState("Bloqueada") = value End Set End Property Private Property TipoCambioOriginal As Decimal Get Return (IfNull(ViewState("TipoCambioOriginal"), 0, ViewState("TipoCambioOriginal"))).ToString().ToDecimal() End Get Set(value As Decimal) ViewState("TipoCambioOriginal") = value End Set End Property Private Property DtMercancias As DataTable Get Return If(IsNothing(ViewState("DtMercancias")), Nothing, CType(ViewState("DtMercancias"), DataTable)) End Get Set(value As DataTable) ViewState("DtMercancias") = value End Set End Property Private Property ClienteCodigoRegimenFiscal As String Get If ViewState("ClienteCodigoRegimenFiscal") Is Nothing Then ViewState("ClienteCodigoRegimenFiscal") = "" End If Return ViewState("ClienteCodigoRegimenFiscal").ToString End Get Set(value As String) ViewState("ClienteCodigoRegimenFiscal") = value End Set End Property Private Property ClienteRegimenFiscal As String Get If ViewState("ClienteRegimenFiscal") Is Nothing Then ViewState("ClienteRegimenFiscal") = "" End If Return ViewState("ClienteRegimenFiscal").ToString End Get Set(value As String) ViewState("ClienteRegimenFiscal") = value End Set End Property Private Property CveLineaAdicionalVenta As Integer Get Return IfNull(ViewState("CveLineaAdicionalVenta"), "-1", ViewState("CveLineaAdicionalVenta")).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveLineaAdicionalVenta") = value End Set End Property Private Property SaldoLineaAdicional As Decimal Get Return (IfNull(ViewState("SaldoLineaAdicional"), "0", ViewState("SaldoLineaAdicional"))).ToString().ToDecimal() End Get Set(value As Decimal) ViewState("SaldoLineaAdicional") = value End Set End Property Private Property SaldoIngresosLineaAdicional As Decimal Get Return (IfNull(ViewState("SaldoIngresosLineaAdicional"), "0", ViewState("SaldoIngresosLineaAdicional"))).ToString().ToDecimal() End Get Set(value As Decimal) ViewState("SaldoIngresosLineaAdicional") = value End Set End Property Private Property CveCategoriaLineaAdicional As Integer Get Return IfNull(ViewState("CveCategoriaLineaAdicional"), "-1", ViewState("CveCategoriaLineaAdicional")).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveCategoriaLineaAdicional") = value End Set End Property Private Property CveMonedaLineaAdicional As Integer Get Return IfNull(ViewState("CveMonedaLineaAdicional"), "-1", ViewState("CveMonedaLineaAdicional")).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveMonedaLineaAdicional") = value End Set End Property Private Property HabilitoFacturacionIngresoLineaAdicional As Boolean Get Return If(IsNothing(ViewState("HabilitoFacturacionIngresoLineaAdicional")), False, CType(ViewState("HabilitoFacturacionIngresoLineaAdicional"), Boolean)) End Get Set(value As Boolean) ViewState("HabilitoFacturacionIngresoLineaAdicional") = value End Set End Property Private Property CveContratoTipo As Integer Get Return IfNull(ViewState("CveContratoTipo"), "-1", ViewState("CveContratoTipo")).ToString().ToEntero() End Get Set(value As Integer) ViewState("CveContratoTipo") = value End Set End Property Private Property HabilitaRemisionPublicoGeneral As Integer Get Return IfNull(ViewState("HabilitaRemisionPublicoGeneral"), "0", ViewState("HabilitaRemisionPublicoGeneral")).ToString().ToEntero() End Get Set(value As Integer) ViewState("HabilitaRemisionPublicoGeneral") = value End Set End Property Private Property TieneBloqueoPorAutorizacion As Integer Get Return IfNull(ViewState("TieneBloqueoPorAutorizacion"), "0", ViewState("TieneBloqueoPorAutorizacion")).ToString().ToEntero() End Get Set(value As Integer) ViewState("TieneBloqueoPorAutorizacion") = value End Set End Property Private Property TieneBloqueoPorCreditoVencimiento As Integer Get Return IfNull(ViewState("TieneBloqueoPorCreditoVencimiento"), "0", ViewState("TieneBloqueoPorCreditoVencimiento")).ToString().ToEntero() End Get Set(value As Integer) ViewState("TieneBloqueoPorCreditoVencimiento") = value End Set End Property Private Property EsNCDevolucionEfectivo As Boolean Get Return If(IsNothing(ViewState("EsNCDevolucionEfectivo")), False, CType(ViewState("EsNCDevolucionEfectivo"), Boolean)) End Get Set(value As Boolean) ViewState("EsNCDevolucionEfectivo") = value End Set End Property #End Region #Region " A C U M U L A D O R E S" Private Property ClienteEsDistribuidor As Boolean Get If ViewState("ClienteEsDistribuidor") Is Nothing Then Return False Else Return Boolean.Parse(ViewState("ClienteEsDistribuidor").ToString()) End If End Get Set(value As Boolean) ViewState("ClienteEsDistribuidor") = value End Set End Property #End Region Public Property CveAlmacenAsignado As Integer Get If ViewState("CveAlmacenAsignado") Is Nothing Then ViewState("CveAlmacenAsignado") = -1 End If Return ViewState("CveAlmacenAsignado").ToString.ToEntero End Get Set(value As Integer) ViewState("CveAlmacenAsignado") = value End Set End Property Public Property CveAlmacenFiltroDdl As Integer Get If ViewState("CveAlmacenFiltroDdl") Is Nothing Then ViewState("CveAlmacenFiltroDdl") = -1 End If Return ViewState("CveAlmacenFiltroDdl").ToString.ToEntero End Get Set(value As Integer) ViewState("CveAlmacenFiltroDdl") = value End Set End Property #Region "VENTA MEDICA" Property EsVentaMedica As Boolean Get If ViewState("EsVentaMedica") Is Nothing Then ViewState("EsVentaMedica") = False End If Return Boolean.Parse(ViewState("EsVentaMedica").ToString) End Get Set(value As Boolean) ViewState("EsVentaMedica") = value End Set End Property Property SeEstaFActurandoVentaMedica As Boolean Get If ViewState("SeEstaFActurandoVentaMedica") Is Nothing Then ViewState("SeEstaFActurandoVentaMedica") = False End If Return Boolean.Parse(ViewState("SeEstaFActurandoVentaMedica").ToString) End Get Set(value As Boolean) ViewState("SeEstaFActurandoVentaMedica") = value End Set End Property Public Property CveTipoVenta As Integer Get If ViewState("CveTipoVenta") Is Nothing Then ViewState("CveTipoVenta") = -1 End If Return ViewState("CveTipoVenta").ToString.ToEntero End Get Set(value As Integer) ViewState("CveTipoVenta") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load If Not IsPostBack Then If IfNull(Request("Opcionx"), "").ToString = "Saldar" And UsuarioActual.CveUsuario = 100 Then TxtFechaSaldarVenta.Text = "2021/12/31" SaldarVenta() Exit Sub End If Modalidad = "" Opcion = "" Index = 0 TotAnt = 0 Bloqueada = False 'CargoComercioExterior = False DdlBPPS.setEsWebService(True) DdlBPPS.ddlWS.Attributes.Add("data-clear", "1") ViewState("ProcesoCorrecto") = True ViewState("CargoUsado") = True ViewState("NuevaFactura") = -1 ViewState("CveDevolucion") = -1 ViewState("CvePedido") = -1 ViewState("TipoContrato") = -1 ViewState("CveVenta") = -1 ViewState("CveCliente") = -1 ViewState("CveClienteAnterior") = -1 ViewState("CveOS") = -1 ViewState("CveOC") = -1 ViewState("CveAnticipo") = -1 ViewState("CveFactura") = -1 ViewState("CveCicloComercial") = -1 ViewState("Entrega") = "" ViewState("Vigencia") = "" ViewState("AplicarVentaFacturada") = False ViewState("SeGuardoPrePoliza") = False ViewState("TipoDoctoDevolucion") = "" ViewState("EditoRemision") = False ViewState("RequiereOC") = False ViewState("ClienteDesglosaIEPS") = False ViewState("ClienteNODesglosaIVA") = False ViewState("ClienteRetIVA") = 0 ViewState("ClienteRetISR") = 0 ViewState("CvePrecioLista") = 0 ViewState("CvePrecioListaCliente") = 0 HdnCargarInventario.Value = "True" Me.CveVendedorVenta = -1 Me.CveVendedorCliente = -1 Me.CveVendedorClienteSucursal = -1 Me.CveVendedorContrato = -1 Me.CveVendedorEmpresaCRM = -1 Me.EsGarantia = False Me.TieneBloqueoPorCreditoVencimiento = 0 Me.ClienteEsDistribuidor = False CveEmpresaCRM = 0 CveAcercamientoCRM = 0 EstatusCliente = False RemisionesLista = New List(Of Integer) Pedidos2Lista = New List(Of Integer) CotizacionesLista = New List(Of Integer) ListaDescuentos = New List(Of Modelos.VentaDescuentos) CvePrePoliza = 0 TotalOtrosConceptos = 0 CveUsuarioActual = UsuarioActual.CveUsuario EmpresaActual = UsuarioActual.Empresa IdPoliza = 0 CveCorte = -1 CveContrato = -1 DevolucionAlmacen = 0 CvePSAmortizacion = 0 EraCotizacion = 0 FacturaMateriales = 0 CvePedidoA = 0 EsCreaApartirDe = False RequiereAlmacenDestino = False RequiereAlmacenOrigen = False TmpDTComplementos = New DataTable DtRemConceptosSurtidos = Nothing TipoVentaSucursal = 0 PlazoCobranza = 0 PlazoCobranzaRemision = 0 TipoCambioFactura = 1 NumeroContrato = "" DescripcionContrato = "" NumeroLicitacion = "" ImprimeNombreSucursal = False RegistraScript("SetDisabledTxtTotal(true);") TrVistaPrevia.Visible = False 'CveMetodoPagoCliente = 1 CveAlmacenExistenciasContrato = -1 UpFacturar.Update() 'CargaTiposDocumentos() TrEmitir.Visible = False If UsuarioActual.Empresa.Funcionalidad(161) = "1" Then DivCartaPorte.Visible = True End If ViewState("EstablecioFolio") = False 'ViewState("SubProyectoPorcentajeIVA") = 0 RefacturacionGeneroNC = False ModalidadEdicion = False ConversionRemision = "" TipoCambioRemision = 1 CveOrdenCompraContrato = -1 TieneContrato = False AplicaNC = False TieneAlmacen = False CveEstatus = -1 PorcentajeIVA = 0 EsDiasCreditoFijo = False DiasCredito = 0 AplicaCancelarRemision = False SeCancelaRemisionProceso = False TotalOriginal = 0 CveAlmacenDevolucion = 0 Me.CveEstadoCancelacion = 0 txtFechaICot.Text = NowADS().AddMonths(-3).ToShortDateString TxtFechaIRem.Text = NowADS().AddMonths(-3).ToShortDateString TxtFechaIPed.Text = NowADS().AddMonths(-3).ToShortDateString TxtFechaIOC.Text = NowADS().AddMonths(-3).ToShortDateString txtFechaFCot.Text = NowADS().ToShortDateString TxtFechaFRem.Text = NowADS().ToShortDateString TxtFechaFPedido.Text = NowADS().ToShortDateString TxtFechaFOC.Text = NowADS().ToShortDateString ValidaUsuarioAcceso() TrSinExistencia.Visible = UsuarioActual.TienePermisoProceso(276) If UsuarioActual.Empresa.Funcionalidad(595) = "1" Then ImgDescPU.Visible = False ImgDescConcepto.Visible = False DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Autorización", "PA")) End If If Not (UsuarioActual.Empresa.Funcionalidad(558) = "1") Then ' LnkAgregarCliente.Visible = False End If DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) If UsuarioActual.Empresa.Funcionalidad(344).ToString() = "1" Then DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("NC de Remisión", "RNC")) DivBtnRemNC.Visible = True DivTxtRemNC.Visible = True LtlTitleImportesRem.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(528) = "1" Then 'FUNCIONALIDAD. DE REGISTRO DE CUENTA PREDIAL. GvPS.Columns(ColumnaPredial).Visible = True thPredial1.Visible = True thPredial2.Visible = True End If If UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then ' PARA BUSCAR FOLIO DE OC, YA FACTURADA EN EL CAMPO ORDEN DE COMPRA TxtOrdenCompra.Attributes.Add("onblur", "BuscarOCRegistrada();") trCorreoNotif1.Visible = True trCorreoNotif2.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(561).ToString() = "1" Then thPoliza.Visible = True thPoliza2.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso UsuarioActual.CveUsuario = 100 Then DivPenalizacion.Visible = True If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then CargaGestionCobranza() End If DdlSATPS.setEsWebService(True) : DdlSATPS.Attributes.Add("data-metodo", "getpssat") DivPSSAT.Visible = True SetValues() CvePresupuesto = 0 'MODALIDADES If Request("Op") IsNot Nothing AndAlso Request("Op").ToString() <> "" Then Opcion = Request("Op").ToString() LblTitulo.Text = "Registro de Cotizaciones" TrTipo.Visible = False TabAlmacen.Visible = False TabDetalleVentas.Visible = False TabVentaAF.Visible = False TabE.Visible = False TabComplementos.Visible = False divcondicionespago.Visible = UsuarioActual.Empresa.CvePlataforma = 1 'SI ES PLATAFORMA ERP SIEMPRE VSIBLE ESTE PORLET ImgAntiPend.Visible = False TrObsAlmacen.Visible = False TrTxtObsAlmacen.Visible = False TrPedido.Visible = False TrOC.Visible = False DdlTipoComprobante.SelectedValue = "Op" Else Opcion = "Ing" DdlTipoComprobante.SelectedValue = "Ing" End If 'DdlTipoComprobante.Attributes.Add("onChange", "ActivaReferencia(this)") TxtFecha.Text = NowADS().ToShortDateString() TxtFechaEjecucion.Text = NowADS().ToShortDateString LblUsuario.Text = UsuarioActual.Usuario LblFechaRegistro.Text = NowADS().ToShortDateString() ImgDescPU.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '0'; $get('LblPrecio1').style.display = ''; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = 'none'; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = ''; $get('BtnAplicarDescG').style.display = 'none'; $get('TrMotivoDescuento').style.display = '';") ImgDescConcepto.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '1'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = ''; $get('LblSubTotal1').style.display = 'none'; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = ''; $get('BtnAplicarDescG').style.display = 'none'; $get('TrMotivoDescuento').style.display = '';") ImgDescTotal.Visible = False ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '2'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = ''; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = 'none'; $get('BtnAplicarDescG').style.display = ''; $get('TrMotivoDescuento').style.display = '';") 'ImgAntiPend.Attributes.Add("onclick", "$get('HdnTipoDescuento').value = '3'; MuestraAnticipos();") ImgOtrosConceptos.Attributes.Add("onclick", "javascript:$('#ModalOtrosConceptos').modal();") 'LkbAgregarComplementos.Attributes.Add("onclick", "javascript:$('#ModalComplementos').modal();") 'ImgCerrar.Attributes.Add("OnClick", "$('#DivAnticipos').hide();") 'LkbEstadodeCaja.Attributes.Add("OnClick", "MuestraEstadoCaja();") 'LkbIngreso.Attributes.Add("OnClick", "MuestraIngresoEgreso(1);") 'LkbRetiro.Attributes.Add("OnClick", "MuestraIngresoEgreso(0);") TxtImporteEfectivo.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtImporteCredito.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtImporteDebito.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtImporteCheque.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtImporteTransferencia.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtImporteOtrosContado.Attributes.Add("onKeyUp", "CalculaTotalPagoContado();") TxtEfectivoEnCaja.Attributes.Add("onKeyUp", "CalculaDiferencia();") TxtEfectivoCajaBloqueo.Attributes.Add("onKeyUp", "CalculaDiferenciaBloqueo();") 'ImgCerrarTerminoCorte.Attributes.Add("OnClick", "$('#DivTerminarCorte').hide();") 'ImgCerrarIE.Attributes.Add("OnClick", "$('#DivIngresoEgreso').hide();")DdlTipoComprobante 'ImgCerrarEstadoCaja.Attributes.Add("OnClick", "$('#DivEstadoCaja').hide();") TabAlmacen.Enabled = UsuarioActual.Empresa.UsaInventarios TxtPorDescP.Attributes.Add("onKeyUp", "CalculaDescuento();") TxtDescP.Attributes.Add("onKeyUp", "CalculaDescuento();") TxtPorPS.Attributes.Add("onKeyUp", "CalculaDescPS();") CreaDTmpC() CreaDTmpF() CreaDTDocumentosRelacionados() CargaDdlSubProyectos() 'CargaProyecto() CargaSucursales() CargaClasificaciones() CargaPS(-1, DdlPS) CargaPS(-1, DdlPSMercancia) CargaPS(-1, DdlPSFlete) 'CargaPSRemision(-1, DdlPSRemision) CreaDTVentas() CargaMetodosPago() 'CargaFormaPago(-1) CargaUsoCFDI() CargaMotivosCancelacion() CargaTiposRelacion() CargaMonedas() CargaVendedores() CargarAlmacenes() If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then CargaFormaEntrega() 'DdlClasificacion.Visible = False 'ltlbr.Visible = False End If CargaCuentasTerminal() 'CargaDdlNCPS() 'CargarCamiones() If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then CargaMedicos() CargaProcedimientos() CargaDdlClientesSucursal() End If 'SI USUARIO USA AMORTIZACIÓN CONTABLE, se carga las tablas para usarlas mas adelante If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) DdlTipoComprobante.Items.Add(New ListItem("Compromisos", "Com")) DdlTipoComprobante.Items.Add(New ListItem("Orden Pago", "OP")) Dim AC As New ClsAC If AC.GetPresupuestoIngresos(-1, NowADS().Year, True, UsuarioActual.CveEmpresa) Then DdlFuenteRecaudacion.DataSource = AC.DtResultados() DTPresupuestoIngresos = AC.DtResultados() ViewState("DTFuenteRecaudacion") = AC.DtResultados() 'GenerarPolizasAC() End If AC.Dispose() 'columna de Fuente de recaudacion GvPS.Columns(22).Visible = True nomostrar.Visible = True nomostrar2.Visible = True 'GvPS.Width = 1250 DdlFuenteRecaudacion.DataBind() Else TFuenteRecaudacion.Visible = False End If 'Carga cliente If Request("CveCliente") IsNot Nothing AndAlso IsNumeric(Request("CveCliente")) AndAlso Request("CveCliente").ToEntero() > 0 AndAlso Request("CveFactura") Is Nothing Then ViewState("CveCliente") = Request("CveCliente") HdnCveCliente.Value = Request("CveCliente") CargaCliente(CveCliente) VerificarContrato(True) Else ViewState("CveCliente") = -1 HdnCveCliente.Value = "-1" 'SI TIENE UN CLIENTE POR DEFECTO DEBE CARGARLO AL INICIAR If UsuarioActual.Empresa.Funcionalidad(714).ToEntero() > 0 AndAlso (Request("CveVenta") IsNot Nothing AndAlso Request("CveVenta").ToString().ToEntero() <= 0) Then ViewState("CveCliente") = UsuarioActual.Empresa.Funcionalidad(714).ToEntero() HdnCveCliente.Value = UsuarioActual.Empresa.Funcionalidad(714) RBLPago.SelectedValue = "2" RBLPago_SelectedIndexChanged(RBLPago, EventArgs.Empty) CargaCliente(CveCliente) End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then 'SI ES COTIZACION CARGAR CLIENTE PUBLICO GENERAL If Opcion = "Cot" Then Dim CveClientePG As Integer = -1 If UsuarioActual.CveEmpresa = 186 Then CveClientePG = 1151377 ViewState("CveCliente") = CveClientePG HdnCveCliente.Value = CveClientePG.ToString() CargaCliente(CveCliente) TrVentasMedicas2.Visible = False TrVentasMedicas3.Visible = False End If End If End If End If 'Carga empresa CRM If Request("CveEmpresaCRM") IsNot Nothing AndAlso IsNumeric(Request("CveEmpresaCRM")) AndAlso Request("CveEmpresaCRM").ToEntero() > 0 Then ViewState("CveEmpresaCRM") = Request("CveEmpresaCRM") CargaEmpresaCRM(CveEmpresaCRM) Else ViewState("CveEmpresaCRM") = -1 End If If Request("CveAcercamientoCRM") IsNot Nothing AndAlso IsNumeric(Request("CveAcercamientoCRM")) AndAlso Request("CveAcercamientoCRM").ToEntero() > 0 Then ViewState("CveAcercamientoCRM") = Request("CveAcercamientoCRM") Dim cRMService As ICRMService = New CRMService(System.Configuration.ConfigurationManager.ConnectionStrings("Conexion").ConnectionString) Dim AcercamientoModel As New RequestAcercamiento(UsuarioActual.CveEmpresa, CveAcercamientoCRM) Dim objAcercamiento = cRMService.GetAceracamientoCRM(AcercamientoModel) If objAcercamiento.Result.Count > 0 Then CorreoContactoCRM = objAcercamiento.Result(0).CorreoContacto End If Else ViewState("CveAcercamientoCRM") = -1 End If 'mensaje de confirmación al guardar BtnEmitirImprimir.OnClientClick = $"ValidaGuardar({ If(ImprimeNombreSucursal = True, 1, 0)},{If(HdnTieneAnticipos.Value = "1", 1, 0)});" BtnEmitirImprimir.Attributes.Add("data-toggle", "confirmation") BtnEmitirImprimir.Attributes.Add("data-popout", "true") BtnEmitirImprimir.Attributes.Add("data-original-title", "confirmar") BtnEmitirImprimir.Attributes.Add("data-btn-ok-label", "Guardar") BtnEmitirImprimir.Attributes.Add("data-html", "true") If UsuarioActual.CveEmpresa.Contiene(126) Then ' cuando la empresa se relaciona a ua orden de producción, Citrus Game TrOP.Visible = True CargaOrdenProduccion() End If 'MUESTRA EL MODAL PARA PODER RELACIONAR FACTURAS If UsuarioActual.TienePermisoProceso(321) Then LnkFacturasRelacionadas.Visible = True End If If Request("CveOrdenProduccion") IsNot Nothing AndAlso IsNumeric(Request("CveOrdenProduccion")) AndAlso Request("CveOrdenProduccion").ToEntero() > 0 Then DdlSubProyectoDatos.SelectedValueExist(11954) Using ObjVentas As New ClsNominas If ObjVentas.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, "", -Request("CveOrdenProduccion").ToEntero()) Then TmpDT = ObjVentas.DtResultados TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) TmpDT.Columns.Add("TieneProntoPago", GetType(String)) TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) TmpDT.Columns.Add("CveMarca", GetType(Integer)) TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) TmpDT.Columns.Add("PrecioLista", GetType(String)) TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) TmpDT.Columns("NumTurnos").DefaultValue = 0D TmpDT.Columns.Add("NumeroPedimento", GetType(String)) TmpDT.Columns.Add("CodigoAlterno", GetType(String)) TmpDT.Columns.Add("PSAlterno", GetType(String)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D GvPS.DataSource = ObjVentas.DtResultados GvPS.DataBind() End If End Using End If If Request("CveManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveManifiesto")) AndAlso Request("CveManifiesto").ToEntero() > 0 Then Using ObjCGame As New ClsCGame() If ObjCGame.ManifiestoGet(Request("CveManifiesto").ToEntero(), -1, -1, -1, -1, -1, -1, -1, -1, UsuarioActual.CveEmpresa, "-1", "-1") AndAlso ObjCGame.DtResultados.Rows.Count > 0 Then DdlSubProyectoDatos.SelectedValueExist(ObjCGame.DtResultados.Rows(0)("CveSubProyecto").ToString()) End If If ObjCGame.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, Request("CveManifiesto").ToEntero()) Then GvPS.DataSource = ObjCGame.DtResultados TmpDT = ObjCGame.DtResultados TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D If Not TmpDT.Columns.Contains("NumeroParte") Then TmpDT.Columns.Add("NumeroParte", GetType(String)) GvPS.DataBind() End If End Using If TmpDT IsNot Nothing Then DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") TabAlmacen.Visible = True DivAlmacen.Visible = True CargaGVInv(DtInv) End If If AplicaComercioExterior Then CargaGvComercioExterior() End If End If If Request("CveEmbarqueManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveEmbarqueManifiesto")) AndAlso Request("CveEmbarqueManifiesto").ToEntero() > 0 Then DdlMoneda.SelectedValueExist(2) CambiaMoneda() Using ObjVentas As New ClsNominas If ObjVentas.EmbarqueManifiestoGet(-1, -1, -1, Request("CveEmbarqueManifiesto").ToString().ToEntero()) And ObjVentas.DtResultados.Rows.Count > 0 Then DdlSubProyectoDatos.SelectedValueExist(ObjVentas.DtResultados.Rows(0)("CveSubProyecto").ToString()) End If If ObjVentas.ManifiestoForVtaGet(UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, "", Request("CveEmbarqueManifiesto").ToEntero()) Then TmpDT = ObjVentas.DtResultados TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) TmpDT.Columns.Add("TieneProntoPago", GetType(String)) TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) TmpDT.Columns.Add("CveMarca", GetType(Integer)) TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) TmpDT.Columns.Add("PrecioLista", GetType(String)) TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) TmpDT.Columns("NumTurnos").DefaultValue = 0D TmpDT.Columns.Add("NumeroPedimento", GetType(String)) TmpDT.Columns.Add("CodigoAlterno", GetType(String)) TmpDT.Columns.Add("PSAlterno", GetType(String)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D GvPS.DataSource = ObjVentas.DtResultados GvPS.DataBind() End If End Using End If 'Carga Venta If Request("CveVenta") IsNot Nothing AndAlso IsNumeric(Request("CveVenta")) AndAlso Request("CveVenta").ToEntero() > 0 Then ViewState("CveVenta") = Request("CveVenta") If CargaVenta() Then If UsuarioActual.TienePermisoProceso(321) Then CargaRelacionadasPendientes() End If DdlSubProyectoDatos.Enabled = False BtnEmitirImprimir.Visible = False BtnCrearApartirDe.Visible = True If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then BtnCrearApartirDe.Visible = False If DdlTipoComprobante.SelectedValue = "Ped" Then BtnPermisoEditarRemision.Text = "Editar Pedido" BtnEditarRemision.Text = "Actualizar Pedido" End If DivFechaAnticipoCliente.Visible = True TxtFechaAnticipoCliente.Text = NowADS().ToShortDateString ImgAddObs.Visible = True CargaEventoBitacora() ConfiguraTipoDocto() TrFolioFiscal.Visible = True 'PERMISO PARA CANCELAR PEDIDO 'If GvInv.Rows.Count = 0 Then ' If DdlTipoComprobante.SelectedValue.Contiene("Ped") And Not CveEstatus = 14 Then ' If UsuarioActual.TienePermisoProceso(186) Then ' LBCancelarPedido.Visible = True ' End If ' End If 'End If 'CARGA GV DE COMERCIO EXTERIOR SI NO ESTA TIMBRADA If LblSeTimbro.Text = "No" Then CargaGvComercioExterior() End If 'HABILITA IMPRESION DE FORMATO CICOVISA If UsuarioActual.CveEmpresa = 72 And CveCliente = 70381 And DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then LnkImprimirFormatoCicovisa.Visible = True End If 'HABILITA IMPRESION DE FORMATO TELCEL If UsuarioActual.CveEmpresa = 72 And CveCliente = 70869 And DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then LnkImprimirFormatoTelcel.Visible = True End If If DdlTipoComprobante.SelectedValue = "Ing" Then CargaVentaCortePorte(Me.CveVenta) End If HlEvento.Visible = True HlEvento.NavigateUrl = "/OI/PopUpAgenda.aspx?CveTipoEvento=2&CveVenta=" & CveVenta & "&TB_iframe=true&height=370&width=600;" ''SOLO SISTEMA DEBE VER ESTA OPCION If UsuarioActual.CveUsuario = 100 Then LnkCancelarSoloCFDI.Visible = True End If End If LnkEnvioDeCorreoFactura.Visible = True Else TxtFechaOS.Text = NowADS().ToDateTime.ToString("yyyy-MM-dd HH:mm").Replace(" ", "T") If Request("CveOS") IsNot Nothing AndAlso IsNumeric(Request("CveOS")) AndAlso Request("CveOS").ToEntero() > 0 Then ViewState("CveOS") = Request("CveOS") CargaOS(CveOS) Else 'SI ES VENTA NUEVA, NO RECARGAR TAB DE ALMACEN If CveVenta <= 0 Then 'REMOVER EVENTO PARA RECARGAR ALMACEN HdnCargarInventario.Value = "False" 'spanAlmacen.Attributes.Remove("onclick") UpParametros.Update() End If 'Modalidad Devoluciones y Refacturacion If Request("CveDevolucion") IsNot Nothing AndAlso IsNumeric(Request("CveDevolucion")) AndAlso Request("CveDevolucion").ToEntero() > 0 Then ViewState("CveDevolucion") = Request("CveDevolucion") ViewState("CveVenta") = Request("CveDevolucion") ViewState("NuevaFactura") = Request("NuevaFactura") trNCFactura.Visible = True DdlNCFactura.DataSource = Nothing DdlNCFactura.DataBind() CargaNC(IfNull(Request("CveDevolucion"), "-1").ToString().ToEntero()) DdlNCFactura.SelectedValueExist(CveDevolucion) If NuevaFactura = 0 Then LbAgregar.Visible = False If DdlTipoComprobante.SelectedValue = "Ing" Then DdlTipoComprobante.Items.Insert(0, New ListItem("Devolucion", "Dev")) DdlTipoComprobante.SelectedValue = "Dev" ElseIf DdlTipoComprobante.SelectedValue = "Ant" Then DdlTipoComprobante.SelectedValueExist("Egs") End If DdlTipoComprobante.Enabled = False CargaFolios() DdlUsoCFDI.Enabled = True DdlUsoCFDI.SelectedValueExist("2") DdlMetodoPago33.Enabled = True DdlMetodoPago33.SelectedValueExist("1") DdlFormaPago33.Enabled = True DdlFormaPago33.SelectedValueExist("20") End If If NuevaFactura = 1 Then TrTipoRelacion.Visible = True DdlTiposRelacion.SelectedValueExist("4") Dim ObjInv As New ClsInventarios If ObjInv.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then If ObjInv.DtResultados.Rows.Count > 0 Then TieneAlmacen = True End If End If ObjInv.Dispose() End If 'regenrea el tipo de cambio CargaNuevaFactura(Nothing) CambiaMoneda() 'NOTA DE CREDITO If NuevaFactura = 2 Then DdlTipoComprobante.Items.Insert(0, New ListItem("Nota de Crédito", "Egs")) DdlTipoComprobante.SelectedValue = "Egs" DdlTipoComprobante.Enabled = False CargaFolios() DdlUsoCFDI.Enabled = True DdlUsoCFDI.SelectedValueExist("2") DdlMetodoPago33.Enabled = True DdlMetodoPago33.SelectedValueExist("1") DdlFormaPago33.Enabled = True DdlFormaPago33.SelectedValueExist("20") TrTipoRelacion.Visible = True DdlTiposRelacion.SelectedValueExist("1") End If End If 'ENTREGA POR ADELANTADO If DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ped", "PeC") Then If UsuarioActual.Empresa.Funcionalidad(145) = "1" Then RequiereAlmacenDestino = True If DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then TrAlmacenAsignado.Visible = True TrAlmacenOrigen.Visible = True End If Dim CveAlmacenDestino As Integer = DtContratos.FiltroPrimeroValor("CveAlmacenDestino", $"CveContrato = {If(DdlContratosModal.Items.Count > 0, DdlContratosModal.SelectedValue, "0")}").ToEntero() If CveAlmacenDestino > 0 Then DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} And CveTipoAlmacen In (4,10)") DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.Items.Insert(0, New ListItem(DtContratos.FiltroPrimeroValor("Almacen", $"CveContrato = {DdlContratosModal.SelectedValue}"), CveAlmacenDestino.ToString())) DdlAlmacenAsignado.SelectedValue = CveAlmacenDestino.ToString() Else DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} AND CveTipoAlmacen IN (10)") DdlAlmacenAsignado.DataBind() End If UpParametros.Update() Else RequiereAlmacenDestino = False TrAlmacenAsignado.Visible = False TrAlmacenOrigen.Visible = False End If 'ENVIO DE FACTURA ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True End If 'Modalidad Contrato If Request("CveContrato") IsNot Nothing AndAlso IsNumeric(Request("CveContrato")) AndAlso Request("CveContrato").ToEntero() > 0 AndAlso Request("Tipo") IsNot Nothing AndAlso IsNumeric(Request("Tipo")) AndAlso Request("Tipo").Contiene("0", "1") Then If DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then TrAlmacenAsignado.Visible = True TrAlmacenOrigen.Visible = True End If UPCondicionesPago.Visible = False RequiereAlmacenDestino = True CveContrato = Request("CveContrato").ToEntero() TipoContrato = Request("Tipo").ToEntero() 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True CargarContratoUrl() UpParametros.Update() End If 'Modalidad CveCicloComercial If Request("CveCicloComercial") IsNot Nothing AndAlso IsNumeric(Request("CveCicloComercial")) AndAlso Request("CveCicloComercial").ToEntero() > 0 Then ViewState("CveCicloComercial") = Request("CveCicloComercial").ToEntero() CargaCicloComercialURL() UpParametros.Update() End If 'MODALIDAD DEVOLUCION PEDIDO NUEVO If Request("DevPed") IsNot Nothing AndAlso IsNumeric(Request("DevPed")) AndAlso Request("DevPed").ToEntero() > 0 AndAlso Request("MovInv") IsNot Nothing AndAlso IsNumeric(Request("MovInv")) AndAlso Request("MovInv").ToEntero() > 0 Then ViewState("CveVenta") = Request("DevPed") ViewState("MovInv") = Request("MovInv") ViewState("CveMovimientoDetalle") = IfNull(Request("CveMovimientoDetalle"), "-1").ToString().ToEntero() DdlTipoComprobante.Items.Insert(5, New ListItem("Devolución de perdido", "DPe")) DdlTipoComprobante.SelectedValue = "DPe" DdlTipoComprobante.Enabled = False CargaFacturaDevolucionPedido() CargaFolios() If CveContrato > 0 Then CargaNotificacionContrato() End If End If 'Modalidad Cotizacion If Opcion = "Cot" Then DdlTipoComprobante.SelectedValueExist(Opcion) DdlTipoComprobante.Enabled = False DdlTipoComprobante_SelectedIndexChanged(sender, Nothing) 'Carga CvePresupuesto If Request("CvePresupuesto") IsNot Nothing AndAlso IsNumeric(Request("CvePresupuesto")) AndAlso Request("CvePresupuesto").ToEntero() > 0 Then CvePresupuesto = Request("CvePresupuesto").ToEntero() 'DdlEstatus.Enabled = False End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then LnkAgregarCliente.Visible = True ChkEnviarFactura.Checked = False ChkEnviarFactura.Enabled = False End If End If CargaEstatusFactura(Opcion) If Opcion = "Ing" Then ObtenerFechaVencimientoCER() 'DdlEstatus.Enabled = False If UsuarioActual.Empresa.TipoFacturacion = "CBB" Then 'DdlEstatus.SelectedValue = "3" CveEstatus = 3 ElseIf UsuarioActual.Empresa.TipoFacturacion = "CFDi" Then 'DdlEstatus.SelectedValue = "2" CveEstatus = 2 End If End If BtnAdjuntar.Visible = True End If End If 'CARGA PARA FACTURAR ViewState("CveRemision") = IfNull(Request("CveRemision").ToEntero(), 0) ViewState("CveCotizacion") = IfNull(Request("CveCotizacion").ToEntero(), 0) 'If ViewState("CveCotizacion").ToString().ToEntero() > 0 Then ' EsCreaApartirDe = True 'End If If ViewState("CveRemision").ToString().ToEntero() > 0 Or ViewState("CveCotizacion").ToString().ToEntero() > 0 Then 'ViewState("CveRemision") = Request("CveRemision") 'Dim CveRemision As Integer = ViewState("CveRemision").ToString().ToEntero() CargaVenta() 'DdlSucursal.Enabled = False BtnCrearApartirDe.Visible = True If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then BtnCrearApartirDe.Visible = False End If 'DdlEstatus.Enabled = True ImgAddObs.Visible = True CargaEventoBitacora() DdlTipoComprobante.Enabled = False DdlTipoComprobante.SelectedValue = "Ing" CargaEstatusFactura() 'DdlEstatus.SelectedValueExist("2") ConfiguraTipoDocto() BtnEmitirImprimir.Text = "Facturar" BtnEmitirImprimir.Visible = True UpnTools.Update() TxtFecha.Text = NowADS().ToShortDateString '' Si esta cancelado el compromiso no se puede editar el estatus 'If DdlEstatus.SelectedValue = "9" Then ' DdlEstatus.Enabled = False 'End If 'CargaDetalle de Almacen 'InventarioMov() If ViewState("CveCotizacion").ToString().ToEntero() > 0 Then CargaCotizaciones() If DtCotizaciones IsNot Nothing Then For Each Row As DataRow In DtCotizaciones.Select($"CveVenta={ViewState("CveCotizacion").ToString().ToEntero()}") Row("Aplicado") = True Next End If CargarCotizacionesAFacturar() End If End If If Not ExFolioFactura Then SetPermisos() If CveVenta < 1 Then CargaFolios() If CveVenta <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(360) = "1" Then CargaListasPrecios() End If If CveVenta <= 0 AndAlso UsuarioActual.CveEmpresa.Contiene(7, 122) Then TxtCantidad.Width = New Unit("100%") DivNumTurnos.Visible = True End If If CveVenta <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(716) = "1" Then UpImagen.Visible = True UpImagen.Update() End If 'SELECCIONA VENDEDOR DEL USUARIO CUANDO SEA VENTA NUEVA Y SIN CLIENTE 'If UsuarioActual.CveVendedor > 0 Then ' If CveVenta = -1 AndAlso Not DdlVendedor.SelectedValue.ToEntero() > 0 Then DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor.ToString()) ' If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then ' DdlVendedor.Enabled = False ' End If ' 'multiples vendedores visible ' If UsuarioActual.TienePermisoProceso(153) Then ' DdlVendedor.Enabled = True ' End If 'End If If UsuarioActual.Empresa.Funcionalidad(301) = "1" Then TxtFecha.Enabled = True ImgFecha.Visible = True Else TxtFecha.Enabled = False ImgFecha.Visible = False CEFecha.Enabled = False End If CargarCodigo() InicializaImprimirNew() 'RegistraScript("FnSuma()") TxtSubTotal.Attributes.Add("onKeyUp", "FnSuma()") TxtIVA.Attributes.Add("onKeyUp", "FnSuma()") TxtIEPS.Attributes.Add("onKeyUp", "FnSuma()") TxtRetIVA.Attributes.Add("onKeyUp", "FnSuma()") TxtRetISR.Attributes.Add("onKeyUp", "FnSuma()") 'Cortes de Caja If UsuarioActual.TienePermisoProceso(160) Then CargaCorteCaja() End If '********************************** 'Complementos de Timbrado 'Dim ObjVenta As New ClsVentas 'If ObjVenta.GetVentaComplementos() Then ' RblComplementos.DataSource = ObjVenta.DtResultados ' RblComplementos.DataBind() ' UpComplementos.Update() 'End If 'ObjVenta.Dispose() RblComplementos.DataSource = GlobalDTVtaComplementoCFDI RblComplementos.DataBind() CargaFormatoSucursal() 'InicializaDevolucionAlmacen() 'CargaOtrosConceptos() CargaFacturaOC() 'SELECCIONA SUCURSAL DEL USUARIO CUANDO SEA VENTA NUEVA Y SIN CLIENTE If Not (CveCliente > 0 Or CveVenta > 0) Then DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) DdlSubProyectoEjecucion.SelectedValueExist(UsuarioActual.CveSubProyecto) DdlSubProyectoCobranza.SelectedValueExist(UsuarioActual.CveSubProyecto) If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectoDatos.Enabled = False End If CambiaSucursal() UpParametros.Update() UpDetalle.Update() End If 'CUANDO SEA COTIZACION Y SEA COMPUPROVEEDORES (EMPRESA 72) NO DEBE ENVIAR CORREO AL CLIENTE EnviarCorreoCliente = True If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then EnviarCorreoCliente = False ChkEnviarFactura.Enabled = False End If If UsuarioActual.CveEmpresa = 72 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = False LblEnviarMail.Visible = False Else If DdlTipoComprobante.SelectedValue.Contiene("Rem", "PeC", "PA", "Ped") Then 'ENVIO DE FACTURA ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True If CveVenta > 0 AndAlso EnviarCorreoCliente Then ChkEnviarFactura.Checked = EnviarCorreoCliente Else ChkEnviarFactura.Checked = EnviarCorreoCliente ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True End If End If CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyectoHeader, LblSubProyecto, AplicaTodos:="") DdlSubProyecto.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) BrSubProyecto.Visible = DdlProyecto.Visible If UsuarioActual.CveEmpresa.Contiene(172, 173) Then LnkAddVenta.Visible = True End If 'MOSTRAR LA OPCION DE AGREGAR PS EN BDH If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveVenta <= 0 Then ImgOtrosConceptos.Visible = False TrFormaEntrega.Visible = False TabDetalleVentas.Visible = False 'TabE.Visible = False LnkOCs.Visible = False GvPS.Columns(ColumnaSubProyecto).Visible = False DdlSubProyecto.Visible = False TrEdit.Visible = True ThProyecto.Visible = False For Each Gvr As GridViewRow In GvPS.Rows Gvr.FCLinkButton("imgE").Visible = False Next LnkAddVenta.Visible = True End If If UsuarioActual.Empresa.CvePlataforma = 2 Then ImgOtrosConceptos.Visible = False TrFormaEntrega.Visible = False TabDetalleVentas.Visible = False TabE.Visible = False LnkOCs.Visible = False GvPS.Columns(8).Visible = False DdlSubProyecto.Visible = False TrEdit.Visible = False ThProyecto.Visible = False For Each Gvr As GridViewRow In GvPS.Rows Gvr.FCLinkButton("imgE").Visible = False Next LnkAddVenta.Visible = True End If TabVentaAF.Visible = (UsuarioActual.CveRol = 1) DivAgregarAF.Visible = (CveVenta <= 0 AndAlso UsuarioActual.CveRol = 1) If DivAgregarAF.Visible Then CargaDatosAF() End If 'CARGA VALORES INICIALES PARA AGREGAR PS DESDE MODAL 'CargaMetodosPSModal() 'CARGA VALORES DE ORDEN DE PRODUCCION Dim CveOrdenProduccion As Integer = IfNull(Request("CveOrdenProduccion"), "-1").ToString().ToEntero() If CveOrdenProduccion > 0 And Not CveVenta > 0 Then DdlOrdenProduccion.SelectedValueExist(CveOrdenProduccion) If DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then DdlTipoComprobante.SelectedValue = "Rem" DdlMoneda.SelectedValue = "2" Dim ObjCGame As New ClsCGame If ObjCGame.GetAvance(DdlOrdenProduccion.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then For Each dt As DataRow In ObjCGame.DtResultados.Rows If dt("Avance").ToString().ToEntero() > 0 Then AgregarProductoServicio(dt("Avance").ToString().ToDecimal, 29472, "No Aplica", 19588, "Ingresos por comercializadora", 308366, "Ventas", dt("Datos").ToString(), dt("PU").ToString().ToDecimal, 0, DdlProyecto.SelectedValue.ToEntero(), DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text) 'AddPS(dt("Avance").ToString().ToDouble, 29472, "No Aplica", 19588, "Ingresos por comercializadora", 308366, "Ventas", dt("Datos").ToString(), dt("PU").ToString().ToDouble, 0, 0, 0, 1, 0, True, ' "", DdlProyecto.SelectedValue.ToEntero(), DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text, 2, HdnTipoInv.Value.ToEntero()) End If Next GvPS.DataSource = TmpDT End If If ObjCGame.GetFlete(UsuarioActual.CveEmpresa) Then TxtObsFact.Text = String.Format("Chofer: {0}; Remolque: {1}; Scat: {2};", ObjCGame.DtResultados.FiltraParametros(String.Format("CveOrdenProduccion = {0}", CveOrdenProduccion))(0)("Chofer"), ObjCGame.DtResultados.FiltraParametros(String.Format("CveOrdenProduccion = {0}", CveOrdenProduccion))(0)("CodigoDescripcionRemolque"), ObjCGame.DtResultados.FiltraParametros(String.Format("CveOrdenProduccion = {0}", CveOrdenProduccion))(0)("Scat")) End If ObjCGame.Dispose() GvPS.DataBind() UPObservaciones.Update() UpPS.Update() CargaFolios() End If End If If Request("CveVenta") IsNot Nothing AndAlso IsNumeric(Request("CveVenta")) AndAlso Request("CveVenta").ToEntero() = -1 AndAlso UsuarioActual.CveTipoDocumento.Length = 3 Then CargaDdlSubProyectos() UpParametros.Update() DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) CambiaTipoDocto() LimpiaEscondeContado() End If InicializaAplicarNC() 'If CveCliente > 0 Then ' CargaRestriccionesCreditoCliente(CveVenta:=Me.CveVenta) 'End If If Not CveVenta > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(403).ToString() = "1" Then If (DdlTipoComprobante.Items.FindByValue("Ing") IsNot Nothing) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) End If End If 'rmf.2020.09.30, codigo de prueba If UsuarioActual.CveEmpresa = 1 Then DivMesesSinIntereses.Visible = True DivDdlCuentaTarjetaCredito.Attributes.Add("class", "col-md-4") DivContadoOtros.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 Then DivMesesSinIntereses.Visible = True DivDdlCuentaTarjetaCredito.Attributes.Add("class", "col-md-4") DivContadoOtros.Visible = True TrKilometraje.Visible = True TrPedido.Visible = False ' TrKilometrajeTxt.Visible = True End If LtlTareaNueva.Text = String.Format(" Tarea", CveVenta) 'SI ESTA CARGANDO UNA REFACTURACION. VALIDAR QUE LA FACTURA ANTERIOR ESTE CANCELADA If Me.ObjFacturaNC IsNot Nothing Then If Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1 Then Dim TipoEstatus As Integer = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.ObjFacturaNC.CveEstatusFactura}").ToEntero() If TipoEstatus <> 5 Then 'ESTATUS DE CANCELACION PENDIENTE If Not Me.ObjFacturaNC.CveEstatusFactura = 23 Then Alert($"El documento de tipo '{Me.ObjFacturaNC.TipodeComprobante}' a refacturar no ha sido marcado como 'Cancelación pendiente'. Favor de verificar el documento", TipoMensaje.MsgAdvertencia) BtnEmitirImprimir.Visible = False UpFacturar.Update() End If End If End If End If 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO If Not CveVenta > 0 AndAlso Not BtnEmitirImprimir.Visible AndAlso Request("Op") IsNot Nothing AndAlso Request("Op").ToString() <> "" Then If DdlTipoComprobante.SelectedValue.Contiene("Cot") Then BtnEmitirImprimir.Visible = True TrVistaPrevia.Visible = True End If End If If Request("CveCotizacion") IsNot Nothing AndAlso IfNull(Request("CveCotizacion"), 0).ToString().ToEntero() > 0 Then If UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") Then 'VERIFICA SI NO ESTA AUTORIZADA If CveEstatusCotizacion <> 8 Then BtnEmitirImprimir.Enabled = False BtnEmitirImprimir.Visible = False Alert("La cotización no esta autorizada", TipoMensaje.MsgAdvertencia) End If End If End If 'QUITAR ESTAS OPCIONES SI LA FACTURA VA SER CANCELADA O ESTA CANCELADA If CveEstatus.Contiene(4, 5, 12, 13, 20, 23) Then LBNotaCredito.Visible = False LnkAplicarRNCDevolucion.Visible = False HLPagar.Visible = False HLSaldarVenta.Visible = False LnkFacturasRelacionadas.Visible = False End If ''EN REALIDAD SE OCUPAN ESTAS COSAS DENTRO DEL POSTABCK ??? If Not CveVenta > 0 Then 'LbDescargarExcel.Visible = True If DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" Then HLCargaCotizaciones.Visible = True HlAgregarExcel.Visible = False Else HLCargaCotizaciones.Visible = False HlAgregarExcel.Visible = True End If End If If DdlTipoComprobante.SelectedValue.Contiene("Rem") AndAlso UsuarioActual.Empresa.Funcionalidad(109) <> "1" Then ' IPP 15 Julio 2017 - ERA FALSE ImgAntiPend.Visible = False UpPS.Update() End If If UsuarioActual.Empresa.Funcionalidad(517) <> "" Then TxtFolio.Enabled = False TxtFecha.Enabled = False If LblSeTimbro.Text = "No" And DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Dev", "Ant") Then TxtFecha.Text = NowADS().ToShortDateString End If ImgFecha.Visible = False End If BloqueaCondicionesPago() BloqueaClasificaciones() 'NO PERMITIR AGREGAR PS DESDE VENTAS EN ECONOLLANTAS If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then BtnModalAddPS.Enabled = False End If MostrarOpcionesPaqueteria() 'If ViewState("CveCotizacion").ToString().ToEntero() > 0 Then 'If Not AjustarTotalCotizacionFacturada(ViewState("CveCotizacion").ToString().ToEntero(), TxtTotal.Text.ToDecimal) Then ' BtnEmitirImprimir.Visible = True ' Alert("Ocurrió un error al ajustar el importe", TipoMensaje.MsgError) 'End If 'End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then trRotacion.Visible = True trRotacionlbl.Visible = True trAlineacion.Visible = True trAlineacionlbl.Visible = True Dim FechaRotaAlinea As Date = TxtFecha.Text.ToDate LblRotacion.Text = FechaRotaAlinea.AddMonths(6).ToShortDateString LblAlineacion.Text = FechaRotaAlinea.AddMonths(6).ToShortDateString If Me.CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then HplDownPDF.Visible = False End If DdlPS.Attributes.Remove("data-cvesubproyecto") DdlPS.Attributes.Add("data-cvesubproyecto", DdlSubProyectoDatos.SelectedValue) UpPS.Update() UPObservaciones.Update() End If If UsuarioActual.Empresa.Funcionalidad(163) = "1" Then TrDescripcionVenta.Visible = True If CveVenta <= 0 Then TxtDescripcionVenta.Enabled = True End If End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If CveVenta <= 0 Then EsVentaMedica = True CargaTiposVenta() If CveCliente > 0 Then SeleccionarClienteSucursal(CveCliente:=CveCliente) End If End If If CveVenta >= 0 Then HLFAgregarOS.Visible = True HLFAgregarOS.NavigateUrl = $"/OS/OrdenesServicios.aspx?CveVenta={CveVenta}" End If TxtPrecio.Enabled = False If UsuarioActual.CveUsuario = 3986 Then TxtPrecio.Enabled = True End If 'ocultar la columna de subproyecto GvPS.Columns(ColumnaSubProyecto).Visible = False ThProyecto.Visible = False ThProyecto2.Visible = False TxtCantidad.Text = "1" TxtCantidad.Focus() End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then LnkAgregarCliente.Visible = True 'ocultar la columna de subproyecto GvPS.Columns(ColumnaSubProyecto).Visible = False ThProyecto.Visible = False ThProyecto2.Visible = False TrDescripcionVenta.Visible = False If CveVenta <= 0 Then TxtCantidad.Text = "1" TxtCantidad.Focus() RegistraScript("abrirDdlPS();", "A1") End If UpPS.Update() End If If UsuarioActual.Empresa.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) End If InicializaDevolucionAlmacen() End If End Sub #Region "Bloqueo Pantalla" Private Sub ValidaUsuarioAcceso() 'VERIFICAR SI LA SESION SE ENCUENTRA BLOQUEADA If UsuarioActual.Empresa.Funcionalidad(599) = "1" Then Dim DrUsuario As DataRow = GlobalDTUsuarios(CveUsuario:=UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("") If DrUsuario IsNot Nothing AndAlso DrUsuario("CodigoAcceso").ToString() <> "" Then If UsuarioActual.SesionBloqueada Then DivBloqueoAcceso.Visible = False Dim strScript As New StringBuilder strScript.Append("window.onload = function MuestraBloqueo() { document.getElementById(""C_BtnShowBloqueoAcceso"").click(); setTimeout(function(){ $('#C_TxtCodigoAcceso').focus(); ") If UsuarioActual.ErrorDesbloqueo Then LtlMensajeBloqueo.Text = UsuarioActual.MsgErrorDesbloqueo 'strScript.AppendFormat("alert('{0}');", UsuarioActual.MsgErrorDesbloqueo) End If strScript.Append("}, 500); }") RegistraScript(strScript.ToString()) UsuarioActual.SesionBloqueada = True UsuarioActual.ErrorDesbloqueo = False UsuarioActual.MsgErrorDesbloqueo = "" BtnEmitirImprimir.Visible = False Exit Sub Else DivBloqueoAcceso.Visible = True End If Else DivBloqueoAcceso.Visible = False End If Else DivBloqueoAcceso.Visible = False End If End Sub Protected Sub BtnCambiar_Click(sender As Object, e As EventArgs) UsuarioActual.ErrorDesbloqueo = False UsuarioActual.MsgErrorDesbloqueo = "" If String.IsNullOrEmpty(TxtCodigoAcceso.Text.Trim) Then UsuarioActual.SesionBloqueada = True UsuarioActual.ErrorDesbloqueo = True UsuarioActual.MsgErrorDesbloqueo = "Es necesario un código de acceso" Response.Redirect($"~/Ventas/Ventas.aspx") Exit Sub End If Dim CveUsuarioNuevo As Integer = -1 Using ObjUsuarios As New ClsSisUsuarios CveUsuarioNuevo = ObjUsuarios.ValidaUsuarioCodigoAcceso(TxtCodigoAcceso.Text.Trim, UsuarioActual.CveEmpresa) End Using Dim DrUsuario As DataRow = Nothing If CveUsuarioNuevo > 0 Then DrUsuario = GlobalDTUsuarios(CveUsuarioNuevo, UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 1", "", {"CveUsuario", "Usuario", "Nombre", "Contraseña", "CveEmpresa", "Rol"}).Rows(0) End If If DrUsuario IsNot Nothing Then Dim tUsuario, tContraseña As String Dim tCveEmpresa As Integer tUsuario = DrUsuario("Usuario").ToString tContraseña = DrUsuario("Contraseña").ToString tCveEmpresa = DrUsuario("CveEmpresa").ToString.ToEntero Dim NombreCadena As String = ClsPaginas.GlobalNombreCadenaConexionDominio(Request.Url.Host.ToUpper()) Dim ObjUsuario As New ClsSisUsuarioAutenticacion(NombreCadena:=NombreCadena) Dim Usuario As Usuario Usuario = ObjUsuario.ValidaUsuario(tUsuario, tContraseña, CveEmpresa:=tCveEmpresa) ObjUsuario.Dispose() If Usuario IsNot Nothing Then Dim dt As Data.DataTable = GlobalDTUsuarios(Usuario.CveUsuario, Usuario.CveEmpresa) ADSSession.ADSSessionConfig.sessionUser = Usuario ADSSession.ADSSessionConfig.sessionUser.CvePlataforma = 1 ADSSession.ADSSessionConfig.sessionDpage = False ADSSession.ADSSessionConfig.sessionUser.ModoSimulacion = False If dt IsNot Nothing Then If dt.Rows.Count >= 1 Then If dt.Rows.Count > 1 Then ADSSession.ADSSessionConfig.sessionUser.MultipleEmpresa = True End If End If dt.Dispose() 'Dim ObjEmpresa As New ClsSisEmpresas() 'If ObjEmpresa.GetEmpresas(tCveEmpresa, "-1", "-1", "-1", "-1") Then ' If ObjEmpresa.GetEmpresasFuncionalidades(tCveEmpresa) Then ' Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados ' Dim EmpresasFuncionalidades As New HybridDictionary ' For Each Row As Data.DataRow In dttmp.Rows ' EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString) ' Next ' ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades) ' End If ' Usuario.Empresa = ObjEmpresa.Empresa ' ADSSession.ADSSessionConfig.sessionUser.CveEmpresa = ObjEmpresa.Empresa.CveEmpresa ' ADSSession.ADSSessionConfig.SessionManager(ADSSession.OpcionSession.CambiarEmpresa, Nothing, ObjEmpresa.Empresa.CveEmpresa) 'End If 'ObjEmpresa.Dispose() End If Response.Redirect($"~/Ventas/Ventas.aspx") Else UsuarioActual.SesionBloqueada = True UsuarioActual.ErrorDesbloqueo = True UsuarioActual.MsgErrorDesbloqueo = "El código de acceso no es correcto" Response.Redirect($"~/Ventas/Ventas.aspx") End If End Sub Protected Sub BtnBloquearAcceso_Click(sender As Object, e As EventArgs) UsuarioActual.SesionBloqueada = True Response.Redirect($"~/Ventas/Ventas.aspx") End Sub #End Region Private Sub CargaListasPrecios() DivPrecioLista.Visible = True DdlPrecioLista.DataSource = GlobalDTPrecioListas(UsuarioActual.CveEmpresa) DdlPrecioLista.SelectedValue = GlobalDTPrecioListas(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePrecioLista", "Predeterminada = 'True'") DdlPrecioLista.DataBind() 'DdlPrecioLista.Items.Insert(0, New ListItem("Seleccione", "-1")) UpPS.Update() End Sub Private Sub CargaListasPreciosSubProyectos(CvePS As Integer) If UsuarioActual.CveEmpresa = 189 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot", "Ped") Then DivPrecioLista.Visible = True Using ObjVta As New ClsVentas If ObjVta.GetPreciosListaSPPermitidos(DdlSubProyectoDatos.SelectedValue.ToEntero(), CvePS, UsuarioActual.CveEmpresa) Then Dim Dt As DataTable = Nothing If UsuarioActual.TienePermisoProceso(384) Then Dt = ObjVta.DtResultados.Copy() Else Dt = ObjVta.DtResultados '.FiltraParametros("Restringuida = 'False'") End If DdlPrecioLista.DataSource = Dt If Dt IsNot Nothing Then DdlPrecioLista.SelectedValueExist(Dt.FiltroPrimeroValor("CvePrecioLista", "Predeterminada = 'True'")) End If End If End Using DdlPrecioLista.DataBind() Else DivPrecioLista.Visible = False End If UpPS.Update() End If End Sub Private Sub BloqueaClasificaciones() If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then DdlClasificacion.Enabled = False DdlUnidadMedida.Enabled = False End If End Sub Private Sub BloqueaCondicionesPago() If UsuarioActual.TienePermisoProceso(289) Then DdlFormaEntrega.Enabled = False DdlUsoCFDI.Enabled = False DdlMetodoPago33.Enabled = False DdlFormaPago33.Enabled = False DdlTiposRelacion.Enabled = False TxtFechaPago.ReadOnly = True TxtFechaPago.Enabled = False RBLPago.Enabled = False imgCalendario.Visible = False End If UPCondicionesPago.Update() End Sub Private Sub ConfiguraEmpresa() Select Case UsuarioActual.CveEmpresa Case 119 TxtObsPS.Attributes.Add("onkeypress", "setFocus(event,'TxtPrecio');") End Select End Sub #Region "Punto Venta" Private Sub CargaCorteCaja() Dim DebeCerrarCorte As Boolean = False 'Checar si hay un Turno Abierto Dim ObjPVenta As New ClsPuntoVenta If ObjPVenta.GetVtaCortesActivos(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then If ObjPVenta.DtResultados.Rows.Count > 0 Then CveCorte = ObjPVenta.CveCorte Dim FechaICorte As Date = ObjPVenta.FechaInicial.Date '.AddDays(-5) If (UsuarioActual.Empresa.Funcionalidad(180) = "1") AndAlso FechaICorte < NowADS().Date Then DebeCerrarCorte = True LblMotivoBloqueo.Text = $"Existe un corte del día {FechaICorte.ToString("dd/MM/yyyy")}. Favor de cerrarlo para iniciar un nuevo corte." Else LblEstatusCaja.Text = ObjPVenta.FechaInicial.ToShortDateString LblTurno.Text = ObjPVenta.FechaInicial.ToShortDateString TrEstatusCaja.Visible = True BtnIniciarTurno.Visible = False LkbEstadodeCaja.Visible = True LkbIngreso.Visible = True LkbRetiro.Visible = True UpTurno.Visible = True End If Else UpTurno.Visible = False 'Ingresar un nuevo Turno RegistraScript("window.onload = function MuestraCorteCaja() { document.getElementById(""C_btnShow"").click(); }") End If End If ObjPVenta.Dispose() If DebeCerrarCorte Then CargaDatosCorte() BtnEmitirImprimir.Visible = False HlCliente.Visible = False DdlPS.Visible = False RegistraScript("window.onload = function MuestraPantallaBloqueo() { document.getElementById(""C_btnShowBloqueo"").click(); }") End If End Sub Private Sub BtnIniciarTurno_Click(sender As Object, e As EventArgs) Handles BtnIniciarTurno.Click If DdlSucursalCorte.SelectedValue.ToEntero() <= 0 Then Alert("Debe seleccionar una sucursal.", TipoMensaje.ToastAdventencia) RegistraScript("window.onload = function MuestraCorteCaja() { document.getElementById(""C_btnShow"").click(); }") Exit Sub End If Dim ObjPVenta As New ClsPuntoVenta ObjPVenta.AddVtaCortes(NowADS(), TxtDineroCaja.Text.ToDecimal, UsuarioActual.CveUsuario, TxtDescripcionCaja.Text, DdlSucursalCorte.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) CveCorte = ObjPVenta.CveCorte LblEstatusCaja.Text = NowADS().ToShortDateString TrEstatusCaja.Visible = True LkbEstadodeCaja.Visible = True LkbIngreso.Visible = True LkbRetiro.Visible = True BtnIniciarTurno.Visible = False ObjPVenta.Dispose() RegistraScript("$('#DivCorteDeCaja').hide();") End Sub Private Sub LkbEstadodeCaja_Click(sender As Object, e As EventArgs) Handles LkbEstadodeCaja.Click CargaDatosCorte() CargaVentasPago() CargaEntradasSalidas() RegistraScript("$('#DivEstadoCaja').modal()") End Sub Private Sub CargaDatosCorte() Dim ObjPVenta As New ClsPuntoVenta Dim Total As Double If ObjPVenta.GetVta_Cortes("-1", "-1", UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, 0) Then If ObjPVenta.DtResultados.Rows.Count > 0 Then Total = ObjPVenta.DtResultados(0)("ImporteInicial").ToString().ToDouble + ObjPVenta.DtResultados(0)("VentasEfectivo").ToString().ToDouble + ObjPVenta.DtResultados(0)("Ingresado").ToString().ToDouble - ObjPVenta.DtResultados(0)("Retirado").ToString().ToDouble - ObjPVenta.DtResultados(0)("Devoluciones").ToString().ToDouble DineroCaja = Total LblEfectivoEsperado.Text = Total.FormatoNumero(2) LblEfectivoBloqueo.Text = Total.FormatoNumero(2) Dim Dt As New DataTable Dt.Columns.Add("Descripcion", GetType(String)) Dt.Columns.Add("Importe", GetType(Decimal)) Dim Dr1 As DataRow = Dt.NewRow Dr1("Descripcion") = "Fondo de Caja" Dr1("Importe") = ObjPVenta.DtResultados(0)("ImporteInicial").ToString().ToDouble Dt.Rows.Add(Dr1) Dim Dr2 As DataRow = Dt.NewRow Dr2("Descripcion") = "Ventas en Efectivo" Dr2("Importe") = ObjPVenta.DtResultados(0)("VentasEfectivo").ToString().ToDouble Dt.Rows.Add(Dr2) Dim Dr21 As DataRow = Dt.NewRow Dr21("Descripcion") = "Devoluciones" Dr21("Importe") = ObjPVenta.DtResultados(0)("Devoluciones").ToString().ToDouble Dt.Rows.Add(Dr21) 'Dim Dr3 = Dt.NewRow 'Dr3("Descripcion") = "Propinas" 'Dr3("Importe") = ObjPVenta.DtResultados(0)("Propina").ToString().ToDouble 'Dt.Rows.Add(Dr3) Dim Dr4 As DataRow = Dt.NewRow Dr4("Descripcion") = "Entradas" Dr4("Importe") = ObjPVenta.DtResultados(0)("Ingresado").ToString().ToDouble Dt.Rows.Add(Dr4) Dim Dr5 As DataRow = Dt.NewRow Dr5("Descripcion") = "Salidas" Dr5("Importe") = ObjPVenta.DtResultados(0)("Retirado").ToString().ToDouble Dt.Rows.Add(Dr5) Dim Dr6 As DataRow = Dt.NewRow Dr6("Descripcion") = "Total" Dr6("Importe") = Total Dt.Rows.Add(Dr6) GvDineroCaja.DataSource = Dt GvDineroCaja.DataBind() UpDineroCaja.Update() UpTerminarCorte.Update() End If End If ObjPVenta.Dispose() End Sub Private Sub CargaVentasPago() Dim ObjPVenta As New ClsPuntoVenta If ObjPVenta.GetVta_MetodosPago(CveCorte) Then If ObjPVenta.DtResultados.Rows.Count > 0 Then GvMetodosPago.DataSource = ObjPVenta.DtResultados GvMetodosPago.DataBind() UpMetodosPago.Update() End If End If ObjPVenta.Dispose() End Sub Private Sub CargaEntradasSalidas() Dim ObjPVenta As New ClsVentas 'Salida If ObjPVenta.GetVta_MovimientosCajas(CveCorte, 0) Then If ObjPVenta.DtResultados.Rows.Count > 0 Then GvEgresos.DataSource = ObjPVenta.DtResultados GvEgresos.DataBind() UpEgresos.Update() End If End If 'Entrada If ObjPVenta.GetVta_MovimientosCajas(CveCorte, 1) Then If ObjPVenta.DtResultados.Rows.Count > 0 Then GvIngresos.DataSource = ObjPVenta.DtResultados GvIngresos.DataBind() UpIngresos.Update() End If End If ObjPVenta.Dispose() End Sub Private Sub BtnAceptarIE_Click(sender As Object, e As EventArgs) Handles BtnAceptarIE.Click Dim ObjPVenta As New ClsPuntoVenta If TxtCantidadIE.Text.ToEntero() > 0 Then If ObjPVenta.AddVta_MovimientosCajas(CveCorte, UsuarioActual.CveUsuario, TxtCantidadIE.Text.ToDouble, TxtDescripcionIE.Text, HdnTipoMovimiento.Value.ToEntero(), NowADS()) Then TxtCantidadIE.Text = "" TxtDescripcionIE.Text = "" RegistraScript("$('#DivIngresoEgreso').modal('hide')", "divingresoegreso") Alert("El movimiento se realizó correctamente") UpIngresoEgreso.Update() End If End If ObjPVenta.Dispose() End Sub Private Sub BtnCerrarTurno_Click(sender As Object, e As EventArgs) Handles BtnCerrarTurno.Click Dim ObjPVenta As New ClsPuntoVenta If TxtEfectivoEnCaja.Text.Trim <> "" Then If ObjPVenta.UpdateFinalizadoVtaCortes(CveCorte, TxtEfectivoEnCaja.Text.ToDouble, LblDiferenciaCaja.Text.ToDouble, NowADS(), UsuarioActual.CveEmpresa) Then RegistraScript($"window.location.href = '/Compras/PopUpVerFactura.aspx?P={Encripta(String.Format("OP=CORT&CVECORTE={0}&FORMATO={1}", CveCorte, "PDF"))}'", "Imprimir") Dim Liga As String = "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";" Alert("Se ha cerrado el turno correctamente.", TipoMensaje.MsgInformacion, Liga) End If End If ObjPVenta.Dispose() End Sub Private Sub BtnCerrarBloqueo_Click(sender As Object, e As EventArgs) Handles BtnCerrarBloqueo.Click Dim ObjPVenta As New ClsPuntoVenta If TxtEfectivoCajaBloqueo.Text.Trim <> "" Then If ObjPVenta.UpdateFinalizadoVtaCortes(CveCorte, TxtEfectivoCajaBloqueo.Text.ToDouble, LblDiferenciaCajaBloqueo.Text.ToDouble, NowADS(), UsuarioActual.CveEmpresa) Then RegistraScript($"window.location.href = '/Compras/PopUpVerFactura.aspx?P={Encripta(String.Format("OP=CORT&CVECORTE={0}&FORMATO={1}", CveCorte, "PDF"))}'", "Imprimir") Dim Liga As String = "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";" Alert("Se ha cerrado el turno correctamente.", TipoMensaje.MsgInformacion, Liga) End If Else Alert("Debe especificar el efectivo en caja", TipoMensaje.ToastAdventencia) RegistraScript("window.onload = function MuestraPantallaBloqueo() { document.getElementById(""C_btnShowBloqueo"").click(); }") End If ObjPVenta.Dispose() End Sub Private Sub BtnCancelar_Click(sender As Object, e As EventArgs) Handles BtnCancelar.Click Response.Redirect("~/Inicio.aspx") End Sub Protected Sub BtnCerrarCaja_Click(sender As Object, e As EventArgs) RegistraScript("$('#DivEstadoCaja').modal('hide')") RegistraScript("$('#DivTerminarCorte').modal()", "divterminarcorte") End Sub Protected Sub LkbIngreso_Click(sender As Object, e As EventArgs) CargaIngresoEgreso(1) End Sub Public Sub CargaIngresoEgreso(Opcion As Integer) RegistraScript("$('#DivIngresoEgreso').modal()") If Opcion = 1 Then LblTituloIE.Text = "Ingreso de Efectivo: " HdnTipoMovimiento.Value = "1" ElseIf Opcion = 0 Then LblTituloIE.Text = "Retiro de Efectivo: " HdnTipoMovimiento.Value = "0" End If UpIngresoEgreso.Update() End Sub Protected Sub LkbRetiro_Click(sender As Object, e As EventArgs) CargaIngresoEgreso(0) End Sub #End Region #Region "Contratos" Private Sub PresionarBotonModal(Boton As String) Try Dim script As String = $"document.getElementById(""{Boton}"").click();" Dim Pag As Page = DirectCast(System.Web.HttpContext.Current.Handler, Page) ScriptManager.RegisterStartupScript(Pag, Pag.GetType(), Boton, script, True) Pag = Nothing Catch ex As Exception End Try End Sub Private Sub VerificarContrato(Optional AfterPageLoad As Boolean = False) Dim ObjContratos As New ClsContratos If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, CveCliente, -1, 1) Then If ObjContratos.DtResultados.FiltraParametros("Estatus = True").Rows.Count > 0 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ped") Or DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev")) Then If UsuarioActual.CveEmpresa.Contiene(72, 80) Then DtContratos = ObjContratos.DtResultados.FiltraParametros($"Estatus = True AND FechaFinal >= '{NowADS().ToShortDateString}' AND FechaInicial <= '{NowADS().ToShortDateString}'") Else DtContratos = ObjContratos.DtResultados.FiltraParametros($"Estatus = True ") End If If AfterPageLoad Then RegistraScript("window.onload = function MuestraContratos() { document.getElementById(""C_BtnMostrarContrato"").click(); }") Else PresionarBotonModal("C_BtnMostrarContrato") End If End If End If ObjContratos.Dispose() End Sub Private Sub BtnIniciarContrato_Click(sender As Object, e As EventArgs) Handles BtnIniciarContrato.Click DdlContratosModal.Items.Clear() If RblOpcionContrato.SelectedValue = "2" Then ContratoDetalles.Visible = True DivEstimaciones.Visible = False DdlContratosModal.DataSource = DtContratos DdlContratosModal.DataBind() DdlContratosModal.Items.Insert(0, New ListItem("Seleccione", "0")) DdlContratosOC.Items.Clear() DdlContratosOC.DataSource = DtContratos DdlContratosOC.DataBind() 'DdlContratosOC.Items.Insert(0, New ListItem("Seleccione", "0")) UPEstimaciones.Update() Tab.ActiveTab = TabE TabGenerales.Enabled = False Updatetabs.Update() 'ESCONDE ACCIONES LnkRemisiones.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False HlAgregarExcel.Visible = False 'VINCULARA LAS OC QUE TENGAN CONTRATO SOLAMENTE TieneContrato = True LnkOCs.Visible = True UpnTools.Update() Else BtnEstimacion.Visible = True GvEst.Visible = True DdlContratosOC.Items.Clear() DdlContratosOC.DataSource = DtContratos DdlContratosOC.DataBind() DdlContratosOC.Items.Insert(0, New ListItem("Seleccione", "0")) GvContratoDetalles.DataSource = Nothing GvContratoDetalles.DataBind() UpContratos.Update() DivEstimaciones.Visible = True ContratoDetalles.Visible = False UPEstimaciones.Update() Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() TieneContrato = False End If If UsuarioActual.CveEmpresa = 13 Then DivEstimaciones.Visible = True GvEst.Visible = False ContratoDetalles.Visible = False GvContratoDetalles.Visible = True BtnEstimacion.Visible = False End If PresionarBotonModal("C_BtnCerrarContrato") End Sub Private Sub BtnCancelarContratoDetalles_Click(sender As Object, e As EventArgs) Handles BtnCancelarContratoDetalles.Click DtContratos = Nothing PresionarBotonModal("C_BtnCerrarContrato") End Sub Private Sub DdlContratosModal_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlContratosModal.SelectedIndexChanged DdlContratoModalSelectIndex() End Sub Protected Sub RBLTipoContrato_SelectedIndexChanged(sender As Object, e As EventArgs) CargaContratos() End Sub Private Sub CargaContratos() Dim DrContrato As DataRow = DtContratos.FiltroPrimero($"CveContrato = {DdlContratosModal.SelectedValue}") If DrContrato Is Nothing Then Alert("Ocurrió un error al cargar la configuración del contrato. Por favor vuelva a intentar", TipoMensaje.MsgError) Exit Sub End If If DrContrato("CveContratoTipo").ToString.ToEntero.Contiene(30, 31) Then PorAmortizacionAnticipo = DrContrato("PorAmortizacionAnticipo").ToString.ToEntero EscontratoObra = True Else PorAmortizacionAnticipo = 0 EscontratoObra = False End If LbContratoImporteTotal.Text = DrContrato("ImporteTotal").ToString().FormatoNumero LbContratoImporteMinimo.Text = DrContrato("ImporteMin").ToString().FormatoNumero LbContratoImporteMaximo.Text = DrContrato("ImporteMax").ToString().FormatoNumero LtContratoImporteSaldo.Text = DrContrato("ImporteSaldo").ToString().FormatoNumero Dim ObjContrato As New ClsContratos Dim NoId As Integer = 0 If ObjContrato.GetContratosDetalle(DdlContratosModal.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then 'SI ES CONTRATO DE CONSIGNACION DE VENTA AGARRA LAS EXISTENCIAS DEL ALMACEN CreaConsignacionSerieDetalle() CveAlmacenExistenciasContrato = -1 CveAlmacenOrigenContrato = -1 GvContratoDetalles.Columns(8).Visible = False If DrContrato("CveContratoTipo").ToString().Contiene("27") Then CveAlmacenExistenciasContrato = If(DrContrato("CveAlmacenDestino").ToString().ToEntero() > 0, DrContrato("CveAlmacenDestino").ToString().ToEntero(), -1) CveAlmacenOrigenContrato = If(DrContrato("CveAlmacenOrigen").ToString().ToEntero() > 0, DrContrato("CveAlmacenOrigen").ToString().ToEntero(), -1) End If NoId = ObjContrato.DtResultados.FiltraParametros("NoIdentificacion <> ''").Rows.Count 'PARA SABER SI ALGUN DETALLE TIENE ESTE CAMPO Y HACER VISIBLE LA COLUMNA Dim DtDetalle As DataTable = ObjContrato.DtResultados.FiltraParametros($"CveTipoPresupuesto = {RBLTipoContrato.SelectedValue}") GvContratoDetalles.DataSource = DtDetalle 'ObjContrato.DtResultados.FiltraParametros($"CveTipoPresupuesto = {RBLTipoContrato.SelectedValue}") GvContratoDetalles.DataBind() UpContratos.Update() NumeroContrato = DrContrato("NumeroContrato").ToString() DescripcionContrato = DrContrato("DescripcionContrato").ToString() NumeroLicitacion = DrContrato("NumeroLicitacion").ToString().Trim Me.CveVendedorContrato = DrContrato("CveVendedor").ToString().ToEntero() DdlVendedor.SelectedValueExist(DrContrato("CveVendedor")) If DrContrato("CveSucursalCliente").ToString().ToEntero() > 0 Then DdlSucursalCliente.SelectedValueExist(DrContrato("CveSucursalCliente")) DdlSucursalCliente_SelectedIndexChanged(DdlSucursalCliente, EventArgs.Empty) DdlSucursalCliente.Enabled = False DdlSucursalCliente.Attributes.Add("disabled", "") End If Dim CveAlmacenDestino As Integer = DrContrato("CveAlmacenDestino").ToString().ToEntero() If CveAlmacenDestino > 0 Then DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} And CveTipoAlmacen IN (4, 10)") DdlAlmacenAsignado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenAsignado.Items.Insert(1, New ListItem(DrContrato("Almacen").ToString(), CveAlmacenDestino.ToString())) DdlAlmacenAsignado.SelectedValueExist(CveAlmacenDestino.ToString()) DdlAlmacenAsignado.DataBind() Else DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} And CveTipoAlmacen In (4,10)") DdlAlmacenAsignado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenAsignado.SelectedValueExist(CveAlmacenDestino.ToString()) DdlAlmacenAsignado.DataBind() End If Dim CveAlmacenOrigen As Integer = DrContrato("CveAlmacenOrigen").ToString().ToEntero() If CveAlmacenOrigen > 0 Then 'TrAlmacenOrigen.Visible = True DdlAlmacenOrigen.Items.Clear() DdlAlmacenOrigen.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1, CveAlmacen:=CveAlmacenOrigen) '.FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") DdlAlmacenOrigen.DataBind() DdlAlmacenOrigen.SelectedValueExist(CveAlmacenOrigen.ToString()) End If If DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") DdlAlmacenAsignado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenAsignado.SelectedValueExist(CveAlmacenDestino.ToString()) DdlAlmacenAsignado.DataBind() DdlAlmacenOrigen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") DdlAlmacenOrigen.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlAlmacenOrigen.SelectedValueExist(CveAlmacenOrigen.ToString()) DdlAlmacenOrigen.DataBind() End If UpParametros.Update() End If If NoId > 0 Then 'PARA SABER SI ALGUN DETALLE TIENE ESTE CAMPO Y HACER VISIBLE LA COLUMNA GvContratoDetalles.Columns(3).Visible = True 'NoIdentificacion End If ObjContrato.Dispose() If CveOC > 0 Then BtnCargarContratoDetalles.Enabled = True For Each gvr As GridViewRow In GvContratoDetalles.Rows gvr.FCTextBox("TxtCant").Enabled = False Next Dim EsValido As Boolean = True For Each Dr As DataRow In TmpDT.Rows Dim CantidadActual As Decimal = Dr("Cantidad").ToString().ToDecimal Dim CantidadDispo As Decimal = 0 Dim CantidadAsignada As Decimal = 0 For Each gvr As GridViewRow In GvContratoDetalles.Rows If gvr.DataKey("CvePS").ToEntero() = Dr("CvePS").ToString().ToEntero() Then CantidadDispo = gvr.DataKey("Cantidad").ToString().ToDecimal - gvr.FCTextBox("TxtCant").Text.ToDecimal If CantidadDispo = 0 Then Continue For CantidadAsignada = If(CantidadDispo > CantidadActual, CantidadActual, CantidadDispo) gvr.FCTextBox("TxtCant").Text = (gvr.FCTextBox("TxtCant").Text.ToDouble + CantidadAsignada).ToString() CantidadActual = CantidadActual - CantidadAsignada If CantidadActual = 0 Then Exit For End If End If Next If CantidadActual > 0 Then EsValido = False Alert("No se cumple con la totalidad de la Orden de Compra. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) BtnCargarContratoDetalles.Enabled = False Exit For End If Next If EsValido Then BtnCargarContratoDetalles_Click(BtnCargarContratoDetalles, EventArgs.Empty) End If End If 'LIMPIA TIPOS DOCTO If (DdlTipoComprobante.Items.FindByValue("Ped") IsNot Nothing) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ped")) End If If (DdlTipoComprobante.Items.FindByValue("PeC") IsNot Nothing) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("PeC")) End If If (DdlTipoComprobante.Items.FindByValue("Cot") IsNot Nothing) Then 'NO PUEDEN HACER COTIZACIÓN DE UN CONTRATO DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) End If DVEstimacionesObra.Visible = False Select Case RBLTipoContrato.SelectedValue.ToEntero() Case 1 DdlTipoComprobante.Items.Insert(0, New ListItem("Pedido", "Ped")) DdlTipoComprobante.SelectedValue = "Ped" DdlTipoComprobante.Enabled = False Case 2 DdlTipoComprobante.Enabled = True DdlTipoComprobante.SelectedValueExist("Ing") Case 3 DdlTipoComprobante.Items.Insert(0, New ListItem("Pedido de Consignación", "PeC")) DdlTipoComprobante.SelectedValue = "PeC" DdlTipoComprobante.Enabled = False Case 4 TabGenerales.Enabled = True DVEstimacionesObra.Visible = True DdlEstimacionesObra.Items.Clear() Dim Con As New ClsContratos If Con.GetContratosAvanceEstimacionVentas(DdlContratosModal.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then DdlEstimacionesObra.DataSource = Con.DtResultados Else DdlEstimacionesObra.DataSource = Nothing End If Con.Dispose() DdlEstimacionesObra.DataBind() DdlEstimacionesObra.Items.Insert(0, New ListItem("Todos", "-1")) BtnCargarContratoDetalles.Visible = False BtnCancelarContratoDetalles.Visible = False BtnCalcularTotalesContrato.Visible = False BtnEstimacion.Visible = False GvEst.Visible = False GvContratoDetalles.Visible = False End Select UPEstimaciones.Update() Updatetabs.Update() ChkPSOC.Checked = False CambiaTipoDocto() UpParametros.Update() UPEstimaciones.Update() UPOCFactura.Update() End Sub Private Sub BtnCargarContratoDetalles_Click(sender As Object, e As EventArgs) Handles BtnCargarContratoDetalles.Click ''SI LA VENTA ES TIPO VENTA DE CONTRATO Y EL CONTRATO TIENE LICITACION EL CLIENTE DEBE TENER IMPUESTOS LOCALES 'If RBLTipoContrato.SelectedValue = "2" Then ' Dim ObjClientes As New ClsClientes ' If NumeroLicitacion <> "" Then ' If ObjClientes.GetClienteImpuestosLocales(CveCliente) Then ' If Not ObjClientes.DtResultados.FiltraParametros("Seleccionado = 1").Rows.Count > 0 Then ' Alert("El contrato con licitación al que se hace referencia requiere impuestos locales.", TipoMensaje.MsgAdvertencia) ' ObjClientes.Dispose() ' Exit Sub ' End If ' End If ' End If ' ObjClientes.Dispose() 'End If Dim CveContratoSeleccionado As Integer = -1 If DdlContratosModal.SelectedValue.ToEntero() > 0 Then CveContratoSeleccionado = DdlContratosModal.SelectedValue.ToEntero() End If If Me.CveContratoTipo = 33 AndAlso DdlContrato.SelectedValue.ToEntero() > 0 Then CveContratoSeleccionado = DdlContrato.SelectedValue.ToEntero() End If Dim DrContrato As DataRow = DtContratos.FiltroPrimero($"CveContrato = {CveContratoSeleccionado}") CveContrato = DdlContratosModal.SelectedValue.ToEntero() AplicaGastoContrato = If(DrContrato("CveContratoTipo").ToString().Contiene("9", "10", "13"), True, False) 'Arrendamiento, Servicios De Impresion, Financiamiento 'VALIDA IMPORTE DEL CONTRATO Dim SeleccionadoContrato As Decimal = 0 '(From row As GridViewRow In GvContratoDetalles.Rows.Cast(Of GridViewRow)() Select row.FCLabel("LtlTotal").Text.ToDecimal).Sum TmpDT.Clear() TxtSubTotal.Text = "0" LblDescuentos.Text = "0" TxtIVA.Text = "0" TxtRetIVA.Text = "0" Dim ps As New ClsInventarios For Each Row As GridViewRow In GvContratoDetalles.Rows If Row.FCTextBox("TxtCant").Text.ToEntero() > 0 Then 'VALIDA EXISTENCIAS DE ALMACÉN 'Dim DrPS = GlobalDTProductosServicios(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") Dim DrPS As DataRow = GlobalDTPSSimplificado(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=Row.DataKey("CvePS").ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then Dim CveTipoPS As Integer = DrPS("CveTipoPS").ToString().ToEntero() Dim CveTipoInv As Integer = DrPS("Inv_CveMetodoInventario").ToString().ToEntero() Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Dim existencia As Decimal = ps.GetExistenciasPS(Row.DataKey("CvePS").ToEntero(), Row.DataKey("CveUM").ToEntero(), UsuarioActual.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) If (existencia < Row.FCTextBox("TxtCant").Text.ToEntero() AndAlso CveTipoPS <> 1) AndAlso UsuarioActual.CveEmpresa.Contiene(72, 80) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "Ped") Then ' And DdlContratosModal.SelectedValue.ToEntero() <> 196 Then Alert("No cuenta con la cantidad suficiente en inventario para el producto:
" + Row.FCLiteral("LtlPS").Text + ".", TipoMensaje.MsgAdvertencia) TmpDT.Clear() GvPS.DataSource = Nothing GvPS.DataBind() UpPS.Update() Exit Sub Else Dim ObsPlantilla As String = PlantillaContrato(Row.DataKey("Observaciones")) SeleccionadoContrato += Row.FCTextBox("TxtCant").Text.ToEntero() * Row.FCLiteral("LtlPU").Text.ToDecimal AgregarProductoServicio(Row.FCTextBox("TxtCant").Text.ToEntero(), Row.DataKey("CveUM").ToEntero(), Row.FCLiteral("LtlUM").Text, Row.DataKey("CveClasificacion").ToEntero(), Row.DataKey("Clasificacion"), Row.DataKey("CvePS").ToEntero(), Row.FCLiteral("LtlPS").Text, If(CveCicloComercial > 0, ObsPlantilla, $"/ {Row.FCLiteral("LtCveInterna").Text}"), Row.FCLiteral("LtlPU").Text.ToDecimal, 0, DrContrato("CveProyecto").ToString().ToEntero(), DrContrato("ProyectoContrato").ToString(), DrContrato("CveSubProyecto").ToString().ToEntero(), DrContrato("SubProyectoContrato").ToString(), CveContratoDetalle:=Row.DataKey("CveContratoDetalle").ToEntero()) 'AddPS(Row.FCTextBox("TxtCant").Text.ToEntero(), Row.DataKey("CveUM").ToEntero(), Row.FCLiteral("LtlUM").Text, Row.DataKey("CveClasificacion").ToEntero(), Row.DataKey("Clasificacion"), ' Row.DataKey("CvePS").ToEntero(), Row.FCLiteral("LtlPS").Text, If(CveCicloComercial > 0, Row.DataKey("Observaciones"), $"/ {Row.FCLiteral("LtCveInterna").Text}"), Row.FCLiteral("LtlPU").Text.ToDouble, If(Row.DataKey("IVA").ToDouble = -1, ViewState("IVA").ToString().ToDouble, Row.DataKey("IVA").ToDouble), 0, 0, 1, 0, True, "", ' DrContrato("CveProyecto").ToString().ToEntero(), DrContrato("ProyectoContrato").ToString(), DrContrato("CveSubProyecto").ToString().ToEntero(), DrContrato("SubProyectoContrato").ToString(), CveTipoPS, CveTipoInv, CveContratoDetalle:=Row.DataKey("CveContratoDetalle").ToEntero(), CodigoPS:=Row.FCLiteral("LtlPS").Text) End If Else Alert("El producto presenta una inconsistencia en su información", TipoMensaje.MsgError) TmpDT.Clear() GvPS.DataSource = Nothing GvPS.DataBind() UpPS.Update() Exit Sub End If End If Next ps.Dispose() 'SI EL CONTRATO TIENE IMPUESTOS LOCALES SE CARGAN LOS DEL CONTRATO AHUEVO If RBLTipoContrato.SelectedValue = "2" Then Dim ObjContratos As New ClsContratos If ObjContratos.GetContratoImpuestosLocales(CveContrato, UsuarioActual.CveEmpresa) Then If ObjContratos.DtResultados.FiltraParametros("Seleccionado = 1").Rows.Count > 0 Then Dim DtContratoImpuesto As DataTable = ObjContratos.DtResultados.FiltraParametros("Seleccionado = 1", "Orden") If DtContratoImpuesto IsNot Nothing AndAlso DtContratoImpuesto.Rows.Count > 0 Then ' If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Else TmpDTImpuestos.Rows.Clear() TmpDTImpuestos = DtContratoImpuesto GvImpuestosLocales2.DataSource = TmpDTImpuestos GvImpuestosLocales2.DataBind() If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then TrOtros.Visible = True GvImpuestosLocales2.Visible = True TrOtros.Style.Add("display", "") Else TrOtros.Visible = False GvImpuestosLocales2.Visible = False End If DtContratoImpuesto.Dispose() End If UpImpuestos.Update() End If End If ObjContratos.Dispose() End If If Not CveCicloComercial > 0 Then 'SI EL IMPORTE MAX O EL IMPORTE FIJO DEL CONTRATO FLEXIBLE ES CERO, NO HAY LIMITE If Not (DrContrato("Importe").ToString().ToDouble = 0 And DrContrato("ImporteMax").ToString().ToDouble = 0) Then If DdlTipoComprobante.SelectedValue = "Ing" And (DrContrato("ModalidadDetalle").ToString() = "1" Or DrContrato("ImporteMax").ToString().ToDouble > 0) AndAlso (DrContrato("ImporteTotal").ToString().ToDouble - DrContrato("Avance").ToString().ToDouble) < (SeleccionadoContrato) Then Alert("Se excede el importe límite del contrato. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) TmpDT.Clear() GvPS.DataSource = Nothing GvPS.DataBind() UpPS.Update() Exit Sub End If End If End If CalculaUsados() CalculaTotalesVenta() If Me.CveContratoTipo <> 33 Then LbAgregar.Visible = False Else Me.CveContrato = DdlContrato.SelectedValue.ToEntero() LbAgregar.Visible = True End If UpPS.Update() 'restricciones para evitar cambios una vez seleccionado el contrato If BtnEmitirImprimir.Visible = False Then BtnEmitirImprimir.Visible = True : TrVistaPrevia.Visible = True 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() PresionarBotonModal("C_BtnCerrarContrato") UpFacturar.Update() End Sub Private Sub CargarContratoUrl() Dim ObjContratos As New ClsContratos If ObjContratos.GetContratos(CveContrato, UsuarioActual.CveEmpresa, -1, -1, 1) Then If ObjContratos.DtResultados.Rows.Count > 0 Then Dim CveContratoTipo As Integer = ObjContratos.DtResultados.Rows(0)("CveContratoTipo").ToString.ToEntero 'Cargamos los datos del Cliente DtContratos = ObjContratos.DtResultados ViewState("CveCliente") = ObjContratos.DtResultados(0)("CveCliente").ToString().ToEntero() CorreoNotificacionPedDev = ObjContratos.DtResultados(0)("CorreoNotificacionPedDev").ToString() HdnCveCliente.Value = ObjContratos.DtResultados(0)("CveCliente").ToString() CargaCliente(CveCliente) DdlTipoComprobante.Items.Insert(0, New ListItem("Pedido", "Ped")) DdlTipoComprobante.SelectedValue = "Ped" DdlTipoComprobante.Enabled = False DdlAlmacenAsignado.Enabled = False DdlSubProyectoDatos.SelectedValueExist(ObjContratos.DtResultados(0)("CveSubProyecto")) AplicaGastoContrato = If(ObjContratos.DtResultados(0)("CveContratoTipo").ToString().Contiene("9", "10", "13"), True, False) 'Arrendamiento, Servicios De Impresion, Financiamiento If TipoContrato = 1 Then 'Cargamos los datos del Contrato RblOpcionContrato.SelectedValue = "2" BtnIniciarContrato_Click(Nothing, Nothing) DdlContratosModal.SelectedValue = CveContrato.ToString() DdlContratosModal_SelectedIndexChanged(Nothing, Nothing) DdlAlmacenAsignado.Enabled = False DdlAlmacenOrigen.Enabled = False ElseIf TipoContrato = 0 Then 'Mostramos los almacenes DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} {If(DdlTipoComprobante.SelectedValue = "Ped", "", "AND CveTipoAlmacen IN (4,10)")}") DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.Enabled = True TrAlmacenAsignado.Visible = True TrAlmacenOrigen.Visible = True TrTipoPedido.Visible = True TrObs.InnerText = "No. Serie" SpObs.InnerText = "Contrato" TrObsGenerales.InnerText = "Número de Contrato " UpParametros.Update() End If If ObjContratos.CveAlmacen > 0 Then If (DdlAlmacenAsignado.Items.FindByValue(ObjContratos.CveAlmacen.ToString()) Is Nothing) Then Dim dr As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveAlmacen = {0}", ObjContratos.CveAlmacen.ToString())) If dr IsNot Nothing Then DdlAlmacenAsignado.Items.Insert(0, New ListItem(dr("Almacen").ToString(), dr("CveAlmacen").ToString())) End If End If DdlAlmacenAsignado.SelectedValueExist(ObjContratos.CveAlmacen.ToString()) Else If (DdlAlmacenAsignado.Items.FindByValue("89") Is Nothing) Then Dim dr As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveAlmacen = {0}", "89")) If dr IsNot Nothing Then DdlAlmacenAsignado.Items.Insert(0, New ListItem(dr("Almacen").ToString(), dr("CveAlmacen").ToString())) ' lo genera Obj.SelectedValue = Valor.ToString() DdlAlmacenAsignado.Enabled = False End If End If DdlAlmacenAsignado.SelectedValueExist("89") End If If ObjContratos.CveAlmacenOrigen > 0 AndAlso TipoContrato = 0 Then DdlAlmacenOrigen.Visible = True RequiereAlmacenOrigen = True If CveContratoTipo.Contiene(7, 9, 13, 21, 27) Then Dim CveTipoAlmacenOrigen As String = "12,15" If CveContratoTipo.Contiene(27) Then CveTipoAlmacenOrigen = "1" End If DdlAlmacenOrigen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} {If(DdlTipoComprobante.SelectedValue = "Ped", "", $"AND CveTipoAlmacen IN ({CveTipoAlmacenOrigen})")}") DdlAlmacenOrigen.DataBind() End If If (DdlAlmacenOrigen.Items.FindByValue(ObjContratos.CveAlmacenOrigen.ToString()) Is Nothing) Then Dim dr As DataRow = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveAlmacen = {0}", ObjContratos.CveAlmacenOrigen.ToString())) If dr IsNot Nothing Then DdlAlmacenOrigen.Items.Insert(0, New ListItem(dr("Almacen").ToString(), dr("CveAlmacen").ToString())) End If End If DdlAlmacenOrigen.SelectedValueExist(ObjContratos.CveAlmacenOrigen.ToString()) DdlAlmacenOrigen.Enabled = True End If Else Alert("Ocurrió un error al carga la información del Contrato. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If Else Alert("Ocurrió un error al carga la información del Contrato. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjContratos.Dispose() End Sub Private Sub CargarPedidoUrl() CargaVenta() CargaFolios() TrAlmacenOrigen.Visible = True TrAlmacenAsignado.Visible = True RequiereAlmacenDestino = True BtnEmitirImprimir.Text = "Devolver Pedido" BtnEmitirImprimir.Visible = True DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.Items.Insert(0, New ListItem("Productos Financieros Como Dato", "89")) DdlAlmacenAsignado.Enabled = False UpParametros.Update() UpFacturar.Update() End Sub Private Sub GuardarContratoAvanceEstimaciones(ObjContrato As ClsContratos, factura As Modelos.Factura, ErrorList As List(Of String), Multiplicador As Integer, Optional CrearAvance As Boolean = False) If (factura.CveContrato > 0 AndAlso ((DdlContratosModal.Items.Count > 0 AndAlso factura.CveContrato = DdlContratosModal.SelectedValue.ToEntero()) OrElse DdlFiltroContrato.SelectedValue.ToEntero() > 0 OrElse CrearAvance)) Or ContratoOC Then Dim CveEstimacion As Integer = -1 If ObjContrato.AddEstimaciones(factura.CveContrato, factura.Fecha, -1, factura.CveVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then CveEstimacion = ObjContrato.DtResultados(0)("CveEstimacion").ToString().ToEntero() For Each row As DataRow In TmpDT.Rows If row("CveContratoDetalle").ToString().ToEntero() > 0 Then If Not ObjContrato.AddContratosAvance(row("CveContratoDetalle").ToString().ToEntero(), row("Cantidad").ToString().ToEntero() * Multiplicador, factura.Fecha, UsuarioActual.CveUsuario, CveEstimacion:=CveEstimacion) Then ErrorList.Add("Ocurrió un error al agregar los avances") End If End If Next Else ErrorList.Add("Ocurrió un error al agregar las estimaciones") End If End If End Sub Private Sub GvContratoDetalles_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvContratoDetalles.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim CantidadDisponible As String = If(e.Row.DBCampo("Cantidad").ToDouble < 0, "0", e.Row.DBCampo("Cantidad")) e.Row.FCLiteral("LtlCantDisp").Text = CantidadDisponible If CveCicloComercial > 0 Then 'Si es un Ciclo Comercial quitamos el límite de CantidadDisponible e.Row.Cells(1).Style.Add("display", "none") CantidadDisponible = "10000000" e.Row.FCTextBox("TxtCant").Text = e.Row.DBCampo("CantidadContratada") End If 'Si es contrato flexible le damos una cantidad alta de lo contrario lo maximo es lo estipulado en el contrato If e.Row.DataKey("LimitarCantidad").ToString() = "True" Or DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") Or e.Row.DataKey("ModalidadDetalle").ToString() = "1" Then e.Row.FCRangeValidator("RVCant").MaximumValue = CantidadDisponible LimitaCantidadSerie = 1 Else e.Row.FCRangeValidator("RVCant").MaximumValue = "10000000" LimitaCantidadSerie = 0 End If 'CONSIGNACION DE VENTA If CveAlmacenExistenciasContrato > 0 And e.Row.DBCampo("Inv_CveMetodoInventario").ToString().ToEntero() = 5 Then GvContratoDetalles.Columns(8).Visible = True e.Row.FCButton("BtnSerieConsignacion").Visible = True e.Row.FCButton("BtnSerieConsignacion").CommandArgument = $"{e.Row.DBCampo("CveContratoDetalle")}°{e.Row.DBCampo("CvePS")}°{e.Row.DBCampo("CveUM")}°{e.Row.DBCampo("CodigoPS")}°{e.Row.DBCampo("Cantidad")}°{LimitaCantidadSerie}" e.Row.FCTextBox("TxtCant").Enabled = False End If If Me.CveContratoTipo = 33 Then e.Row.FCTextBox("TxtCant").Enabled = False e.Row.FCTextBox("TxtCant").Text = e.Row.DBCampo("Cantidad") End If ''Si viene de una OC Sin Facturar y tiene contrato 'If TieneContrato AndAlso ContratosConOC IsNot Nothing AndAlso ContratosConOC.ToString().Length > 0 Then ' e.Row.FCTextBox("TxtCant").Text = e.Row.DBCampo("CantidadOC").ToString() 'End If End If End Sub Private Sub BtnCalcularTotalesContrato_Click(sender As Object, e As EventArgs) Handles BtnCalcularTotalesContrato.Click For Each row As GridViewRow In GvContratoDetalles.Rows row.FCLiteral("LtlTotal").Text = (row.FCLiteral("LtlCantDisp").Text.ToEntero() * row.FCTextBox("TxtCant").Text.ToDouble).FormatoNumero(2) Next UpContratos.Update() End Sub Private Sub DdlContratoModalSelectIndex() If Not DdlContratosModal.SelectedValue.ToEntero() > 0 Then GvContratoDetalles.DataBind() UpContratos.Update() Exit Sub End If Dim DrContrato As DataRow = DtContratos.FiltroPrimero($"CveContrato = {DdlContratosModal.SelectedValue}") If DrContrato Is Nothing Then Alert("Ocurrió un error al cargar la configuración del contrato. Por favor vuelva a intentar", TipoMensaje.MsgError) Exit Sub End If CargaContratos() DdlContratosOC.SelectedValue = DdlContratosModal.SelectedValue UPOCFactura.Update() End Sub #End Region #Region "C A R G A S" Private Sub ClasificacionModal() DdlClasificacionModal.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltraParametros("", Orderby:="Clasificacion") DdlClasificacionModal.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlClasificacionModal.DataBind() UpModal.Update() End Sub Private Sub CargaOrdenProduccion(Optional Opcion As Integer = 1, Optional CveVenta As Integer = -1) DdlOrdenProduccion.Items.Clear() Dim CveOrdenProduccion As String = "-1" Dim ObjCGame As New ClsCGame If ObjCGame.GetOrdenProduccion(-1, UsuarioActual.CveEmpresa, -1, "-1", MinFecha, MaxFecha, -1) Then If Opcion = 1 Then DdlOrdenProduccion.DataSource = ObjCGame.DtResultados.FiltraParametros(String.Format("CveVenta IS NULL ")) ElseIf Opcion = 2 Then LnkActualizarOrdenProduccion.Visible = True DdlOrdenProduccion.DataSource = ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta} OR CveVenta IS NULL") If ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta}").Rows.Count > 0 Then CveOrdenProduccion = ObjCGame.DtResultados.FiltraParametros($"CveVenta = {CveVenta}").Rows(0)("CveOrdenProduccion").ToString() End If End If DdlOrdenProduccion.Items.Insert(0, New ListItem("Seleccione", "-1")) End If ObjCGame.Dispose() DdlOrdenProduccion.DataBind() DdlOrdenProduccion.SelectedValueExist(CveOrdenProduccion) End Sub Private Sub CargaEstatusFactura(Optional TipoDocto As String = "Ing") Dim FiltroCompromiso As String = If(TipoDocto = "Com", "And CveEstatusFactura In (2, 9)", "And CveEstatusFactura Not In (9)") If TipoDocto.ToUpper.Contiene("EGS", "COM", "ANT") Then TipoDocto = "Ing" 'DdlEstatus.Items.Clear() 'DdlEstatus.Items.Insert(0, New ListItem("Seleccione", "-1")) 'DdlEstatus.SelectedValue = "-1" 'DdlEstatus.DataSource = GlobalDTEstatusFactura.FiltraParametros(String.Format("TipoDocto = '{0}' {1}", TipoDocto, FiltroCompromiso)) 'DdlEstatus.DataBind() ''If DdlEstatus.Items.Count > 1 Then '' DdlEstatus.SelectedIndex = 1 ''End If ''permiso para poder cambiar estatus 'If CveVenta > 0 Then DdlEstatus.Enabled = UsuarioActual.TienePermisoProceso(116) End Sub Private Sub CargaOS(CveOS As Integer) Dim OS As New ClsOS Dim DtDetalle As DataTable = Nothing Dim DtDetalleMateriales As DataTable = Nothing If OS.GetOrdenesServicios(CveOS, -1, -1, -1, -1, UsuarioActual.CveEmpresa) Then HdnCveCliente.Value = OS.CveCliente.ToString() ViewState("CveCliente") = OS.CveCliente CargaCliente(CveCliente) If OS.GetOrdenesServiciosDetalleAFacturar(CveOS) Then Dim Cons As Integer = 1 For Each dr As DataRow In OS.DtResultados.FiltraParametros("SeFacturara = 1 ").Rows AgregarProductoServicio(dr("Cantidad").ToString().ToDecimal, dr("CveUM").ToString().ToEntero(), dr("UM").ToString(), -1, "", dr("CvePS").ToString().ToEntero(), "", dr("Obs").ToString(), dr("PU").ToString().ToDecimal, 0, -1, "", dr("CveSubProyecto").ToString().ToEntero(), dr("SubProyecto").ToString()) 'Dim drt As DataRow = TmpDT.NewRow 'drt("Consec") = Cons 'drt("CvePS") = dr("CvePS") 'drt("CveClasificacion") = dr("CveClasificacion") 'drt("Clasificacion") = dr("Clasificacion") 'drt("PS") = dr("PS") 'drt("CveOSDetalle") = dr("CveOSDetalle") 'drt("CodigoPS") = dr("CodigoPS") 'drt("Cantidad") = dr("Cantidad") 'drt("CveSubProyecto") = dr("CveSubProyecto") 'drt("SubProyecto") = dr("SubProyecto") 'drt("Obs") = dr("Obs") 'TmpDT.Rows.Add(drt) 'Cons = Cons + 1 Next TmpDT.AcceptChanges() DtDetalle = OS.DtResultados.FiltraParametros("SeFacturara = 1 ") End If For Each Row As DataRow In DtDetalle.Rows If OS.GetDetalleMateriales(Row("CveOSDetalle").ToString().ToEntero(), CveOS) Then If OS.DtResultados.FiltraParametros("SeFacturara = 1").Rows.Count > 0 Then Alert("Hay materiales en la Orden de Servicio, ¿Desea facturar los materiales?", TipoMensaje.MsgConfirmacion, "BtnMateriales()") End If End If Next OS.Dispose() If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then CalculaUsados() End If CalculaTotalesVenta(False) GvPS.DataSource = TmpDT DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") GvPS.DataBind() 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") UpContado.Update() UpPS.Update() End If End Sub Private Sub CargaEstados(Optional ClaveSATPais As String = "MEX") DdlEstadoSAT.Items.Clear() DdlEstadoSAT.DataSource = GlobalDTGralEstados(ClaveSATPais) DdlEstadoSAT.DataBind() DdlEstadoSAT.Items.Insert(0, New ListItem("Seleccione", "-1")) If UsuarioActual.CveEmpresa = 140 AndAlso ClaveSATPais = "MEX" Then DdlEstadoSAT.SelectedValueExist("26") End If End Sub Protected Sub DdlSATPais_SelectedIndexChanged(sender As Object, e As EventArgs) CargaEstados(DdlSATPais.SelectedValue) End Sub Private Function CargaVenta() As Boolean Dim Retorno As Boolean = False 'CARGA PARA FACTURACION Dim CveRemision As Integer = IfNull(ViewState("CveRemision"), 0).ToString().ToEntero() Dim CveCotizacion As Integer = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() Dim CveVenta As Integer = Me.CveVenta CveVenta = If(CveRemision > 0, CveRemision, CveVenta) CveVenta = If(CveCotizacion > 0, CveCotizacion, CveVenta) CveVenta = If(CvePedido > 0, CvePedido, CveVenta) Dim DtAntRelacionados As DataTable = Nothing Dim SerieFolioPadre As String Dim DbRowVenta As DataRow = Nothing Dim DtVentasRelacionadas As DataTable = Nothing 'CARGA DTs DE VENTAS If CveVenta > 0 Then Using ObjVentas As New ClsVentas() If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados IsNot Nothing AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then DbRowVenta = ObjVentas.DtResultados.Copy().Rows(0) Else ViewState("CveVenta") = -1 Alert("El documento solicitado no existe, favor de revisar su búsqueda.", TipoMensaje.MsgAdvertencia) End If End If If DbRowVenta IsNot Nothing Then If ObjVentas.GetVentasRelacionadas(CveVenta, UsuarioActual.CveEmpresa, TipoRelacion:=1) Then DtAntRelacionados = ObjVentas.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Ant','Egs','Dev')") End If If DbRowVenta("TipoDocto").ToString() = "Egs" Then If ObjVentas.GetVentasRelacionadas(CveVenta, UsuarioActual.CveEmpresa, TipoRelacion:=2) Then DtVentasRelacionadas = ObjVentas.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Ant','Egs','Dev')") End If End If 'CargaDetalle If ObjVentas.GetVentaDetalle(CveVenta) Then TmpDT = ObjVentas.DtResultados.Copy() TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) TmpDT.Columns.Add("TieneProntoPago", GetType(String)) TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D End If CargaAFVenta() 'CargaFirmas If ObjVentas.GetVentasFirmas(CveVenta) Then If ObjVentas.DtResultados.Rows.Count > 0 Then DTmpF = ObjVentas.DtResultados.Copy() End If End If 'CARGA IMPUESTOS LOCALES If ObjVentas.GetVentaImpuestosLocales(CveVenta) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TmpDTImpuestos = ObjVentas.DtResultados.Copy() End If End If 'CARGA ANTICIPOS If Not (CveRemision > 0 Or CveCotizacion > 0) Then If DbRowVenta("TipoDocto").ToString().Contiene("Ing", "Ant") Then 'carga as notas de credito vinculadas If ObjVentas.GetVentasAntNC(CveVenta, -1) Then TmpDTDocumentosRelacionados = ObjVentas.DtResultados.Copy() GvAntNC.DataSource = TmpDTDocumentosRelacionados GvAntNC.Caption = "
(Anticipos/NC/IxC) Vinculados
" GvAntNC.DataBind() End If End If If DbRowVenta("TipoDocto").ToString().Contiene("Egs", "Dev", "Ant") Then Dim AplicaAmortizacion As Boolean = False If DbRowVenta("TipoDocto").ToString().Contiene("Ant") Then AplicaAmortizacion = True If ObjVentas.GetVentasAntNC(-1, CveVenta, AplicaAmortizacion) Then TmpDTNCVinculadas = ObjVentas.DtResultados.Copy() GvNC.DataSource = TmpDTNCVinculadas GvNC.Caption = "
Ventas Aplicadas
" GvNC.DataBind() InicializaDTVentasNC() For Each Dr As DataRow In TmpDTNCVinculadas.Rows If Dr("CveConceptoContable").ToString().ToEntero() = 91 Then CargaNCDT(Dr("CveVenta").ToString().ToEntero(), DbRowVenta("TipoDocto").ToString(), Dr("Importe").ToString().ToDecimal, Dr("FolioFiscal").ToString(), TC:=Dr("TipoCambio").ToString().ToDecimal) End If Next If GvNC.Rows.Count > 0 Then ImgAntiPend.Visible = False End If End If End If End If 'CARGA REMISIONES If ObjVentas.GetRemisionesRelacionadas(CveVenta, DbRowVenta("TipoDocto").ToString()) Then GvRemisiones.Caption = "
Remisiones/Facturas
" GvRemisiones.DataSource = ObjVentas.DtResultados.Copy() GvCancelarRemisiones.DataSource = ObjVentas.DtResultados.Copy() GvRemisiones.DataBind() GvCancelarRemisiones.DataBind() '[IPP] SI ES REMISION PARA CANCELARLA NO DEBE TENER NINGUNA FACTURADA RELACIONADA - 24Abril2018 If DbRowVenta("TipoDocto").ToString().Contiene("Rem") And GvRemisiones.Rows.Count > 0 Then LbCancelarDocumento.Visible = False End If 'SI TIENE REMISIONES Y VA A CANCELAR ES NECESARIO EL MOVIMIENTO DE DEVOLUCION If DbRowVenta("TipoDocto").ToString().Contiene("Ing", "Ant") AndAlso GvRemisiones.Rows.Count > 0 Then ChkDevAlm.Checked = True ChkDevAlm.Enabled = False 'LiDevolucionAlmacen.Visible = False End If End If 'SI ES COTIZACION PUEDE GENERAR UNA OC PARA MODIFICAR LOS IMPORTES If DbRowVenta("TipoDocto").ToString() = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(583) = "1" Then Dim DtOCGeneradas As DataTable = Nothing If ObjVentas.GetVentasCotizacionesOC(Me.CveVenta, -1, UsuarioActual.CveEmpresa) Then DtOCGeneradas = ObjVentas.DtResultados.Copy() End If If DtOCGeneradas IsNot Nothing AndAlso DtOCGeneradas.Rows.Count > 0 Then LtGenerarOC.Visible = False Else LtGenerarOC.Visible = True End If End If 'CARGA GV DE OC RELACIONADAS If ObjVentas.GetOCRelacionadas(CveVenta) Then If ObjVentas.DtResultados.Rows.Count > 0 Then DivOCRelacionadas.Visible = True GvOCRelacionadas.DataSource = ObjVentas.DtResultados GvOCRelacionadas.DataBind() End If End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then TxtAlfa1.Text = DbRowVenta("Alfa1").ToString End If 'CARGAR PS GvPS.DataSource = TmpDT GvPS.DataBind() Dim CveCliente As Integer = DbRowVenta("CveCliente").ToString().ToEntero() HdnCveVenta.Value = CveVenta.ToString() Me.EsGarantia = CBool(DbRowVenta("EsGarantia")) Me.TipoCambioOriginal = DbRowVenta("TipoCambioOriginal").ToString().ToDecimal() RFCReceptorVenta = DbRowVenta("RFCReceptor").ToString() 'Adjuntar archivo Adjunto = DbRowVenta("Adjunto").ToString() If Adjunto <> "" Then BtnArchivoAdjunto.Text = Adjunto BtnArchivoAdjunto.Visible = True BtnEliminarAdjunto.Visible = True BtnAdjuntar.Visible = False If Request("CveVenta") IsNot Nothing Then BtnReemplazarAdjunto.Visible = True End If Else If Request("CveVenta") IsNot Nothing Then BtnReemplazarAdjunto.Visible = True End If End If ViewState("CveSubProyectoVenta") = DbRowVenta("CveSubProyecto").ToString().ToEntero() If DbRowVenta("CveCondicionEntrega").ToString().ToEntero() > 0 Then DdlFormaEntrega.SelectedValueExist(DbRowVenta("CveCondicionEntrega").ToString()) DdlFormaEntrega.Enabled = False End If Me.CveEstatusFacturaPadre = DbRowVenta("CveEstatusFacturaPadre").ToString().ToEntero() If UsuarioActual.Empresa.Funcionalidad(705) = "1" Then Me.CveLineaAdicionalVenta = DbRowVenta("CveLineaAdicional").ToString().ToEntero() End If TxtDescripcionVenta.Text = DbRowVenta("DescripcionVenta").ToString() If DbRowVenta("CveCobranzaEstatusTurno").ToString() <> "" Then DdlGestionCobranza.SelectedValueExist(DbRowVenta("CveCobranzaEstatusTurno").ToString()) End If 'CargaEncabezado If Not (CveRemision > 0 Or CveCotizacion > 0) Then DdlTipoComprobante.SelectedValue = DbRowVenta("TipoDocto").ToString() If UsuarioActual.TienePermisoProceso(274) Then TrAntEspecial.Visible = DdlTipoComprobante.SelectedValue = "Ant" End If If TrAntEspecial.Visible Then ChkAntEspecial.Enabled = False ChkAntEspecial.Checked = If(DbRowVenta("AnticipoEspecial").ToString() = "True", True, False) End If CargaEstatusFactura(DdlTipoComprobante.SelectedValue) CveEstatus = DbRowVenta("CveEstatusFactura").ToString().ToEntero() LbEstatus.Text = DbRowVenta("EstatusFactura").ToString() ViewState("SaldoVenta") = DbRowVenta("Saldo").ToString() AplicaCancelarRemision = CBool(DbRowVenta("AplicaCancelarRemision").ToString()) If AplicaCancelarRemision AndAlso CveEstatus.Contiene(2, 3) AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then DivCanRem.Visible = True If CveEstatus.Contiene(5, 14) Then LbCancelarDocumento.Enabled = False If (Not CveEstatus.Contiene(4, 5, 12, 13, 20, 23) OrElse (CveEstatus = 5 AndAlso DbRowVenta("CveEstatusRefacturacion").ToString().ToEntero() = 4)) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Ant") AndAlso 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 If Not (UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1") Then LkRefacturacion.Visible = True End If If (CveEstatus = 5 AndAlso DbRowVenta("CveEstatusRefacturacion").ToString().ToEntero() = 4) Then RefacturarCancelada = True End If End If End If If CveEstatus = 5 Then TrMotivoCancelacion.Visible = True LblMotivoCancelacion.Text = DbRowVenta("MotivoCancelacion").ToString() End If If DbRowVenta("CveVentaRelacionada").ToString().ToEntero() > 0 Then TrRefacturadaa.Visible = True HplRefacturadaEn.NavigateUrl = String.Format("/Ventas/Ventas.aspx?CveVenta={0}", DbRowVenta("CveVentaRelacionada")) HplRefacturadaEn.Text = DbRowVenta("SerieFolioRelacionada").ToString() LblAlertRefacInv.Visible = True End If If DdlTipoComprobante.SelectedValue.Contiene("Egs", "Ing", "Ant", "Dev", "Rem", "DPe", "RNC", "Ped", "Cot") AndAlso Not CveEstatus.Contiene(4, 5, 10, 12, 13, 20, 23) 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 'If UsuarioActual.CveEmpresa = 119 And Not UsuarioActual.CveUsuario.Contiene(100, 1703) Then '[IPP] AD y Jesus de JAM ' 'si es del mes anterior no permita cancelar ' If Not DdlTipoComprobante.SelectedValue.Contiene("Rem") Then ' If DbRowVenta("Fecha").ToString().ToDate <= NowADS().AddMonths(-1).LastDayOfMonth Then ' LbCancelarDocumento.Visible = False ' End If ' End If 'End If 'si utiliza cortes, y cajas, no permitir cancelar de días anteriores If (UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1") Then LkRefacturacion.Visible = False If DbRowVenta("Fecha").ToString.ToDate.ToShortDateString.ToDate < Now.ToShortDateString.ToDate Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Ant") AndAlso UsuarioActual.TienePermisoProceso(159) Then LkRefacturacion.Visible = True LbCancelarDocumento.Visible = UsuarioActual.TienePermisoProceso(378) Else LbCancelarDocumento.Visible = UsuarioActual.TienePermisoProceso(378) End If End If End If End If End If End If Dim TipoEstatus As Integer = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {CveEstatus}").ToEntero() If UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") AndAlso DdlTipoComprobante.SelectedValue.Contiene("Cot") Then If UsuarioActual.TienePermisoProceso(116) Then LbCancelarDocumento.Visible = True If TipoEstatus = 2 Then LbCancelarDocumento.Visible = False ElseIf TipoEstatus = 5 Then LbCancelarDocumento.Visible = False End If End If End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CBool(DbRowVenta("ServicioDomicilio")) Then TrServicioDomicilio.Visible = True End If If UsuarioActual.TienePermisoProceso(318) Then If DdlTipoComprobante.SelectedValue.Contiene("Egs", "Ing", "Ant", "Dev") AndAlso String.IsNullOrEmpty(DbRowVenta("FolioFiscal").ToString.Trim) Then HplFolioFiscalModal.Visible = True End If Select Case DbRowVenta("TipoDocto").ToString() Case "Ing" Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) If SaldoVenta > 0 And UsuarioActual.TienePermisoProceso(100) Then HLPagar.Visible = True HLPagar.NavigateUrl = $"/Bancos/PopIEVentas.aspx?CveVenta={CveVenta}&TB_iframe=true&height=500&width=675" HlCuentaTerminal.Visible = True End If TabAuxiliarConta.Visible = UsuarioActual.TienePermisoProceso(306) Dim TienePermiso As String = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, -1).FiltroPrimeroValor("CveSubProyecto", String.Format("CveSubProyecto = {0}", DbRowVenta("CveSubProyecto"))) If TienePermiso <> "" Then ' si tiene acceso en el subproyecto 'LkNotaCredito.Visible = UsuarioActual.TienePermisoProceso(175) If UsuarioActual.TienePermisoProceso(264) Then InicializaAplicaDevolucion(TmpDT, DbRowVenta("Fecha").ToStringn ()) End If End If If UsuarioActual.Empresa.Funcionalidad(163) = "1" Then TrDescripcionVenta.Visible = True End If HplDownXML.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) Case "Egs" HplDownXML.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) HdnFolioFiscalNC.Value = DbRowVenta("FolioFiscalPadre").ToString() Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) 'SI NO TIENE INGRESOS RELACIONADOS, SE TOMARA COMO DEVOLUCION DE EFECTIVO If DtVentasRelacionadas IsNot Nothing AndAlso DtVentasRelacionadas.Rows.Count = 0 Then EsNCDevolucionEfectivo = True End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If Not String.IsNullOrEmpty(DbRowVenta("TipoVenta").ToString()) Then TrTipoVentaEgs.Visible = True LblTipoVentaEGS.Text = DbRowVenta("TipoVenta").ToString() End If End If Case "Rem" Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) If SaldoVenta > 0 And UsuarioActual.TienePermisoProceso(100) Then HLPagar.Visible = True HLPagar.NavigateUrl = $"/Bancos/PopIEVentas.aspx?CveVenta={CveVenta}&TB_iframe=true&height=500&width=675" HlCuentaTerminal.Visible = True End If If UsuarioActual.CveEmpresa = 80 Then LtlImprimir.Text = String.Format("
  • Imprimir
  • ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=0", CveVenta))) End If DiasCredito = DbRowVenta("DiasCredito").ToString().ToEntero() EsDiasCreditoFijo = CBool(DbRowVenta("EsDiasCreditoFijo").ToString()) If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If DbRowVenta("Num2").ToString = "2000" Then ChkRemEspecial.Checked = True ChkRemEspecial.Enabled = False TxtFech2.Text = DbRowVenta("Fech2").ToString() End If If UsuarioActual.TienePermisoProceso(390) Then TrRemEspecial.Visible = True ChkRemEspecial.Enabled = True End If End If Case "RNC" Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) If DdlTipoComprobante.Items.FindByValue("RNC") Is Nothing Then DdlTipoComprobante.Items.Add(New ListItem("Remisión de nota de crédito", "RNC")) End If DdlTipoComprobante.SelectedValueExist("RNC") Case "OP" TdOrdenPago.Visible = True DdlOrdenPago.SelectedValue = DbRowVenta("Num3").ToString() DdlOrdenPago.Enabled = False Case "Cot" TxtAtencionA.Text = DbRowVenta("AtencionA").ToString() TxtFechaVencimientoCotizacion.Text = DbRowVenta("Vigencia").ToString() PnlImprimir.Visible = True HLOrdendeCompra.Visible = True HLOrdendeCompra.NavigateUrl = String.Format("/OC/OC.aspx?Tipo=Req&CveCotizacion={0}", CveVenta) Dim ObjOS As New ClsOS() If ObjOS.GetCotizacionOS(CveVenta) Then If ObjOS.DtResultados.Rows.Count > 0 Then Dim DbRowOS As DataRow = ObjOS.DtResultados.Rows(0) ViewState("CveOS") = DbRowOS("CveOS").ToString().ToEntero() CargaOS(CveOS) End If Else HLOrdenServicio.Visible = True HLOrdenServicio.NavigateUrl = String.Format("/OS/OrdenesServicios.aspx?CveCotizacion={0}", CveVenta) End If ObjOS.Dispose() If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 145) Then PnlImprimir.Visible = True : LnkImprimir.OnClientClick = "javascript:ImprimirCotizacion();return false;" 'Deshabilitar impresión cuando no esté supervisada If DbRowVenta("TipoEstatus").ToString().ToEntero() = 2 Or UsuarioActual.Empresa.Funcionalidad(113) = "1" Then PnlImprimir.Visible = True Else HplDownPDF.Visible = False PnlImprimir.Visible = False End If 'SI LA AUTORIZACION ES POR SUPERVISOR, BUSCA EL SUPERVISOR QUE TIENE EL VENDEDOR 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 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 = 5 Then LkCotizacionAutorizar.Visible = False End If End If DTVendedores.Dispose() End If Objeto.Dispose() End If 'SI LA AUTORIZACION ES POR PERMISO, BUSCA QUE EL USUARIO TENGA EL PERMISO PARA AUTORIZAR If UsuarioActual.Empresa.Funcionalidad(135) = "2" Then 'Reviso cuales son los supervisores If UsuarioActual.TienePermisoProceso(116) Then LkCotizacionAutorizar.Visible = True If TipoEstatus = 2 Then LkCotizacionAutorizar.Visible = False ElseIf TipoEstatus = 5 Then LkCotizacionAutorizar.Visible = False End If End If End If Case "Ant" Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) 'LkNotaCredito.Visible = True HplDownXML.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) 'visualizo el saldo de anticipos, para cuando se aplique una Nota de crédito, decida si afecta anticipos o a DSV LblNCSaldoAnticipo.Visible = True ChkAplicaNCAnticipo.Visible = True ChkAplicaNCAnticipo.Checked = True If SaldoVenta > 0 And UsuarioActual.TienePermisoProceso(100) Then HLPagar.Visible = True HLPagar.NavigateUrl = $"/Bancos/PopIEVentas.aspx?CveVenta={CveVenta}&TB_iframe=true&height=500&width=675" HlCuentaTerminal.Visible = True End If Me.SaldoAnticipo = DbRowVenta("SaldoAnticipo").ToString().ToDecimal If SaldoAnticipo > 0 Then InicializaDTAnticiposAmortizacion() ChkAplicaNCAnticipo.Enabled = False Else ChkAplicaNCAnticipo.Enabled = False ChkAplicaNCAnticipo.Checked = False End If 'If DbRowVenta("SaldoAnticipo").ToString().ToDouble <= 0 Then ChkAplicaNCAnticipo.Checked = False : ChkAplicaNCAnticipo.Enabled = False LblNCSaldoAnticipo.Text = String.Format("Saldo Anticipo: $ {0}", DbRowVenta("SaldoAnticipo").ToString().ToDouble.FormatoNumero) Case "Dev" DdlTipoComprobante.Items.Insert(0, New ListItem("Devolucion", "Dev")) HplDownXML.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", DbRowVenta("SerieFolio"), DbRowVenta("TipoDocto")))) HdnFolioFiscalNC.Value = DbRowVenta("FolioFiscalPadre").ToString() 'ViewState("CveDevolucion") = DbRowVenta("CveVentaPadre").ToString().ToEntero() Trsaldo.Visible = True HplSaldoAuxiliar.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) HplPagado.NavigateUrl = String.Format("/Contabilidad/PopUpAuxiliar.aspx?Tipo=CxCClientes&CveCliente={0}&CveVenta={1}&TB_iframe=true&height=550&width=920", DbRowVenta("CveCliente"), DbRowVenta("CveVenta")) If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then TrMotivoDev.Visible = True lblMotivoDev.Text = DbRowVenta("MotivoDevolucion").ToString() End If Case "Ped" DdlTipoComprobante.Items.Insert(0, New ListItem("Pedido", "Ped")) CvePedido = CveVenta If UsuarioActual.Empresa.Funcionalidad(595) = "1" Then If DdlTipoComprobante.Items.FindByValue("PA") Is Nothing Then BtnGeneraAutorizacion.Visible = If(CveEstatus <> 21, True, False) End If End If 'If UsuarioActual.TienePermisoProceso(199) Then ' BtnGenerarRemision.Visible = If(CveEstatus <> 21, True, False) 'Else ' BtnGenerarRemision.Visible = False 'End If Case "DPe" DdlTipoComprobante.Items.Insert(5, New ListItem("Devolución de perdido", "DPe")) Case "PeC" DdlTipoComprobante.Items.Insert(5, New ListItem("Pedido de Consignación", "PeC")) Case "PA" If UsuarioActual.TienePermisoProceso(199) Then BtnGenerarRemision.Visible = If(CveEstatus = 16, True, False) Else BtnGenerarRemision.Visible = False End If CvePedidoA = CveVenta DiasCredito = DbRowVenta("DiasCredito").ToString().ToEntero() EsDiasCreditoFijo = CBool(DbRowVenta("EsDiasCreditoFijo").ToString()) End Select DdlTipoComprobante.SelectedValue = DbRowVenta("TipoDocto").ToString() End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then TxtAtencionA.Text = DbRowVenta("AtencionA").ToString() End If DdlTipoRelacionARelacionar.SelectedValueExist(DbRowVenta("CveTipoRelacion").ToString()) 'contado 0, credito 1, terminal 2 If DbRowVenta("CondicionesPago").ToString().ToEntero() = 1 Then RBLPago.SelectedValue = "1" RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() ElseIf DbRowVenta("CondicionesPago").ToString().ToEntero() = 0 Then RBLPago.SelectedValue = "2" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() Else DdlCuentasTerminal.SelectedValue = DbRowVenta("CveCuentaTerminal").ToString() RBLPago.SelectedValue = "3" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DbRowVenta("TipoDocto").ToString().Contiene("Cot", "Rem") Then LbVerificarExistencia.Visible = True End If 'ESCONDE ACCIONES LnkRemisiones.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False UpnTools.Update() UpEstatus.Visible = True HdnCveCliente.Value = CveCliente.ToString() ViewState("CveCliente") = CveCliente ViewState("CveEmpresaCRM") = DbRowVenta("CveEmpresaCRM").ToString().ToEntero() ViewState("CveAcercamientoCRM") = DbRowVenta("CveAcercamientoCRM").ToString().ToEntero() Entrega = DbRowVenta("Entrega").ToString() Vigencia = DbRowVenta("Vigencia").ToString().ToDate.ToShortDateString HplSaldoAuxiliar.Text = DbRowVenta("Saldo").ToString().FormatoNumero(2) If Not HplSaldoAuxiliar.Text.ToDouble > 0 Then HplSaldoAuxiliar.Visible = False HplPagado.Visible = True Dim EsCancelado As Boolean = GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {CveEstatus}").ToEntero() = 5 If EsCancelado Then HplPagado.Text = "CANCELADO" End If If ViewState("CveCotizacion") IsNot Nothing AndAlso ViewState("CveCotizacion").ToString().ToEntero() > 0 AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) Else ImgAntiPend.Visible = True End If Else ImgAntiPend.Visible = False End If End If HdnPagado.Value = DbRowVenta("Pagado").ToString() TxtTotal.Text = DbRowVenta("Total").ToString().FormatoNumero(2) HdnVentaSaldo.Value = (SaldoVenta).ToString() CvePrePoliza = DbRowVenta("CvePrePoliza").ToString().ToEntero() CveVentaFacturada = DbRowVenta("CveVentaFacturada").ToString().ToEntero() CveVentaRelacion = DbRowVenta("CveVentaRelacion").ToString().ToEntero() ImporteRelacion = DbRowVenta("ImporteRelacion").ToString().ToDouble DdlMoneda.SelectedValue = DbRowVenta("CveMoneda").ToString() CambiaMoneda() If DbRowVenta("TipoDocto").ToString() = "Ped" Then 'CANTIDAD FACTURADA If TmpDT.SUM("CantidadFacturadaPed2") > 0 Then GvPS.Columns(7).Visible = True ThCantidadFacturada.Visible = True ThCantidadFacturada2.Visible = True Else GvPS.Columns(7).Visible = False ThCantidadFacturada.Visible = False ThCantidadFacturada2.Visible = False End If ''ACTIVA EDITAR ''SOLO LA PUEDE EDITAR USUATIOACTUAL-VENDEDOR | NO DEBE ESTAR FACTURADA 'If (UsuarioActual.CveUsuario = DbRowVenta("CveUsuario").ToString().ToEntero() Or UsuarioActual.CveVendedor = DdlVendedor.SelectedValue.ToEntero()) And TmpDT.SUM("CantidadFacturadaCot") = 0 Then 'And TmpDT.SUM("CantidadFacturadaCot") < TmpDT.SUM("Cantidad") ' BtnPermisoEditarCotizacion.Visible = True 'End If 'ACTIVA BOTONERA | DEBE TENER CONCEPTOS PENDIENTES DE FACTURAR 'If TmpDT.SUM("CantidadFacturadaPed2") < TmpDT.SUM("Cantidad") Then ' BtnGenerarRemision.Visible = If(CveEstatus = 10, False, True) ' BtnsFacturar.Visible = True 'End If ElseIf DbRowVenta("TipoDocto").ToString() = "Cot" AndAlso CveCotizacion > 0 Then CveEstatusCotizacion = DbRowVenta("CveEstatusFactura").ToString().ToEntero() End If If CveEmpresaCRM > 0 And Not CveCliente > 0 Then CargaEmpresaCRM(CveEmpresaCRM) Else CveEmpresaCRM = IIf(CveEmpresaCRM > 0, CveEmpresaCRM, 0).ToString().ToEntero() CargaCliente(CveCliente, -1) 'Estatus activo, se requiere para cargar una factura en la que el cliente a sido eliminado End If ViewState("CveAlmacenTransitorio") = DbRowVenta("CveAlmacenTraspasoDestino").ToString().ToEntero() DevolucionAlmacen = DbRowVenta("EsDevolucionVenta").ToString().ToEntero() 'sino esta cargada la información del metodo de pago que le corresponde, la recarga para que se le pueda asignar If DdlMetodoPago33.SelectedValue <> DbRowVenta("CveMetodoPago33").ToString() Then CargaFormaPago(DbRowVenta("CveMetodoPago33").ToString().ToEntero()) End If DdlMetodoPago33.SelectedValueExist(DbRowVenta("CveMetodoPago33").ToString()) DdlFormaPago33.SelectedValueExist(DbRowVenta("CveFormaPago33").ToString().ToEntero()) Me.CveMetodoPago33Venta = DbRowVenta("CveMetodoPago33").ToString().ToEntero() Me.CveFormaPago33Venta = DbRowVenta("CveFormaPago33").ToString().ToEntero() Me.CveVendedorVenta = DbRowVenta("CveVendedor").ToString().ToEntero() 'SI YA TIENE UN VALOR ASIGNADO SELECCIONA EL GUARDADO 'If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Me.CveVenta > 0 AndAlso Me.CveVendedorVenta > 0 Then ' Dim Vendedor = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=1).FiltroPrimeroValor("Vendedor", String.Format("CveVendedor = {0}", Me.CveVendedorVenta)) ' 'SI NO ENCUENTRA BUSCA EN LOS VENDEDORES DEL PV ' If String.IsNullOrEmpty(Vendedor) Then ' Vendedor = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=4).FiltroPrimeroValor("Vendedor", String.Format("CveVendedor = {0}", Me.CveVendedorVenta)) ' End If ' DdlVendedor.SelectedValueExistInsert(Me.CveVendedorVenta, Vendedor) 'End If If DdlFormaPago33.SelectedValue <> DbRowVenta("CveFormaPago33").ToString() And DbRowVenta("CveFormaPago33").ToString() <> "" Then 'sino está seleccionada la asginada la debe de cargar Dim Nombre As String = GlobalDTVtaFormaPago().FiltroPrimeroValor("FormaPagoSAT", String.Format("CveFormaPago={0}", DbRowVenta("CveFormaPago33"))) DdlFormaPago33.Items.Add(New ListItem(Nombre, DbRowVenta("CveFormaPago33").ToString())) DdlFormaPago33.SelectedValueExist(DbRowVenta("CveFormaPago33").ToString().ToEntero()) End If If DbRowVenta("CveUsoCFDI").ToString().ToEntero() > 0 Then Dim UsoCFDI As String = GlobalDTSATUsosCFDI().FiltroPrimeroValor("UsoCFDIDescripcion", $"CveUsoCFDI={DbRowVenta("CveUsoCFDI").ToString()}") DdlUsoCFDI.SelectedValueExistInsert(DbRowVenta("CveUsoCFDI").ToString(), UsoCFDI) End If If UsuarioActual.CveEmpresa = 126 Then CargaOrdenProduccion(2, CveVenta) If DbRowVenta("CveTipoRelacion").ToString().ToEntero() > 0 Then TrTipoRelacion.Visible = True DdlTiposRelacion.SelectedValueExist(DbRowVenta("CveTipoRelacion").ToString().ToEntero()) 'RELACIONAR ANTICIPOS APLICADOS If DbRowVenta("CveTipoRelacion").ToString().ToEntero() = 7 AndAlso DtAntRelacionados IsNot Nothing AndAlso DtAntRelacionados.Rows.Count > 0 Then DdlTipoRelacionAnticipo.SelectedValueExist(7) ListaAnticiposAplicados = New List(Of Modelos.MAnticipoRelacionado)() For Each RowAnt As DataRow In DtAntRelacionados.Rows ListaAnticiposAplicados.Add(New Modelos.MAnticipoRelacionado() With {.CveVenta = RowAnt("CveVentaRelacionada").ToString().ToEntero(), .FolioFiscal = RowAnt("FolioFiscal").ToString()}) Next Else HdnFolioFiscalNC.Value = DbRowVenta("FolioFiscalPadre").ToString() End If End If If DbRowVenta("Saldo").ToString().ToDouble < 0.01 Then If ViewState("CveCotizacion") IsNot Nothing AndAlso ViewState("CveCotizacion").ToString().ToEntero() > 0 AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) Else ImgAntiPend.Visible = True End If Else ImgAntiPend.Visible = False End If ElseIf Opcion <> "Op" Then ImgAntiPend.Visible = True End If If UsuarioActual.CveRol.Contiene(1, 1155) Then LiLnkGuias.Visible = True LiComplementoPago.Visible = True ViewState("FolioFiscal") = DbRowVenta("FolioFiscal").ToString() SerieVenta = DbRowVenta("Serie").ToString() LblSerie.Text = SerieVenta ViewState("Serie") = DbRowVenta("Serie").ToString() ViewState("Folio") = DbRowVenta("Folio").ToString().ToEntero() TxtFolio.Text = DbRowVenta("Folio").ToString() 'TxtDocto.Text = DbRowVenta("Ref").ToString() 'TxtNumCtaPago.Text = DbRowVenta("NumeroCuenta").ToString() LblFolioFiscal.Text = DbRowVenta("FolioFiscal").ToString() TxtFecha.Text = DbRowVenta("Fecha").ToString() TxtSubTotal.Text = DbRowVenta("SubTotal").ToString().FormatoNumero(2) LblDescuentos.Text = DbRowVenta("Descuento").ToString().FormatoNumero(2) LblAmortizacion.Text = DbRowVenta("Amortizacion").ToString().FormatoNumero(2) TxtSubTotal2.Text = (TxtSubTotal.Text.Replace(",", "").Trim.Trim.ToDouble - LblDescuentos.Text.Replace(",", "").Trim.Trim.ToDouble - LblAmortizacion.Text.Replace(",", "").Trim.Trim.ToDouble).FormatoNumero(2) TxtIVA.Text = DbRowVenta("IVA").ToString().FormatoNumero(2) TxtRetIVA.Text = DbRowVenta("RetIVA").ToString().FormatoNumero(2) TxtCorreoNotificaciones.Text = DbRowVenta("CorreoNotificacion").ToString() If TxtRetIVA.Text.ToDecimal() > 0 Then TrRetIVA.Style.Add("display", "") UsuarioActual.Empresa.MostrarRetIVA = True If DdlTipoRetencion.SelectedValue.ToEntero() > 0 Then DdlTipoRetencion.Visible = True End If If TmpDT IsNot Nothing Then Dim PorcentajeRetIVA As Decimal = (TmpDT.MAX("PorcentajeRetIVA").ToDecimal() * 100) LblRetIVA.Text = PorcentajeRetIVA.FormatoNumero(2) End If End If TxtRetISR.Text = DbRowVenta("RetISR").ToString().FormatoNumero(2) TxtIEPS.Text = DbRowVenta("IEPS").ToString().FormatoNumero(2) TrIEPS.Visible = TxtIEPS.Text.ToDouble > 0 TxtTotal.Text = DbRowVenta("Total").ToString().FormatoNumero(2) HdnTotalVenta.Value = DbRowVenta("Total").ToString().FormatoNumero(2) TxtMotivoDescuento.Text = DbRowVenta("MotivoDescuento").ToString() TxtObsFact.Text = DbRowVenta("Observaciones").ToString() LblUsuario.Text = DbRowVenta("Nombre").ToString().SubStringADS(30) LblFechaRegistro.Text = DbRowVenta("FechaIng").ToString().ToDate.ToShortDateString LblSeTimbro.Text = DbRowVenta("SeTimbro").ToString() LblMail.Text = DbRowVenta("EnvioMail").ToString() TxtFechaPago.Text = DbRowVenta("FechaVencimiento").ToString() TxtFechaVencimientoCotizacion.Text = Vigencia TxtDet_OrdenCompra.Text = DbRowVenta("Det_OrdenCompra").ToString() TxtDet_FechaOrdenCompra.Text = DbRowVenta("Det_FechaOrdenCompra").ToString() HdnIVAOriginal.Value = TxtIVA.Text TxtPedidoContrato.Text = DbRowVenta("PedidoContrato").ToString() TxtPedidoContrato.Enabled = False TxtKilometraje.Text = DbRowVenta("Kilometraje").ToString().PadLeft(6, "0"c) VentaActual = New Venta(UsuarioActual) VentaActual.CveVenta = CveVenta VentaActual.Fecha = DbRowVenta("Fecha").ToString.ToDate VentaActual.CveCliente = DbRowVenta("CveCliente").ToString.ToEntero VentaActual.CveMoneda = DbRowVenta("CveMoneda").ToString.ToEntero VentaActual.SerieFolio = DbRowVenta("SerieFolio").ToString VentaActual.ClienteNombre = DbRowVenta("ClienteNombre").ToString VentaActual.TC = DbRowVenta("TipoCambio").ToString.ToDecimal VentaActual.Total = DbRowVenta("Total").ToString.ToDecimal VentaActual.IVA = DbRowVenta("IVA").ToString.ToDecimal VentaActual.IEPS = DbRowVenta("IEPS").ToString.ToDecimal VentaActual.RetIVA = DbRowVenta("RetIVA").ToString.ToDecimal VentaActual.RetISR = DbRowVenta("RetISR").ToString.ToDecimal VentaActual.PorcentajeIVA = DbRowVenta("PorcentajeIVA").ToString.ToDecimal VentaActual.UsuarioActual = UsuarioActual VentaActual.CveSubProyecto = DbRowVenta("CveSubProyecto").ToString.ToEntero VentaActual.CveUsoCFDI = DbRowVenta("CveUsoCFDI").ToString.ToEntero HdnAmortizacion.Value = LblAmort.Text.ToDouble.ToString() HdnSubTotalDescuestos.Value = (TxtSubTotal.Text.Replace(",", "").ToDouble - LblDescuentos.Text.Replace(",", "").ToDouble - LblAmortizacion.Text.Trim.Replace(",", "").ToDouble - TxtRetISR.Text.Replace(",", "").ToDouble).FormatoNumero(2) 'DdlAmortizacionConceptos.SelectedValue = DbRowVenta("AnticipoPosicion").ToString() 'ChkAnticipoEnSubTotal.Checked = DbRowVenta("AnticipoEnSubTotal").ToString() = "True" DdlTipoAmortizacionAnticipo.SelectedValueExist(DbRowVenta("CveTipoAmortizacionAnticipo")) DdlTiposRelacion.SelectedValueExist(DbRowVenta("CveTipoRelacion")) 'Si es AMORTIZACIÓN ANTICIPO SOBRE FACTURA EN CERO no debe timbrar If DbRowVenta("CveTipoAmortizacionAnticipo").ToString().ToEntero() = 3 Then BtnEmitir.Visible = False End If If DbRowVenta("CveTipoRelacion").ToString().ToEntero() > 0 Then TrTipoRelacion2.Visible = True LblTipoRelacion.Text = DbRowVenta("TipoRelacion").ToString() HdnFolioFiscalNC.Value = DbRowVenta("FolioFiscalPadre").ToString() End If TxtOrdenCompra.Text = DbRowVenta("OrdenCompra").ToString() TxtOrdenCompra.Enabled = False TxtObsAlmacen.Text = DbRowVenta("ObservacionesAlmacen").ToString() CvePAC = DbRowVenta("CvePAC").ToString().ToEntero() If DbRowVenta("Saldo").ToString().ToDecimal > 0 AndAlso UsuarioActual.TienePermisoProceso(204) AndAlso Not UsuarioActual.CveEmpresa.Contiene(119) Then TxtFechaSaldarVenta.Text = TxtFecha.Text CEFechaSaldarVenta.StartDate = TxtFecha.Text.ToDate HLSaldarVenta.Visible = True End If If (UsuarioActual.TienePermisoProceso(166) Or UsuarioActual.CveRol = 1) AndAlso (LblFolioFiscal.Text = "" Or LblFolioFiscal.Text = "test") Then LkEliminarFactura.Visible = True End If If (UsuarioActual.CveRol = 1) AndAlso (LblFolioFiscal.Text <> "") Then LnkUUIDRelacionados.Visible = True End If 'Envio Direccion If DbRowVenta("CveDireccionEnvio").ToString().ToEntero() > 0 AndAlso DbRowVenta("CveDireccionEnvio").ToString() IsNot Nothing Then ChkDireccionEnvio.Checked = True DdlDireccionEnvio.SelectedValueExist(DbRowVenta("CveDireccionEnvio").ToString().ToEntero()) 'DdlDireccionEnvio_SelectedIndexChanged(DdlDireccionEnvio, EventArgs.Empty) DdlDireccionEnvio.Enabled = False ChkDireccionEnvio.Enabled = False DdlDireccionEnvio.Visible = True trDireccionEnvio.Visible = True End If If UsuarioActual.TienePermisoProceso(333) Then LnkEditarDir.Visible = True 'ESTATUS FACTURA If Not (CveRemision > 0 Or CveCotizacion > 0) Then CveEstatus = DbRowVenta("CveEstatusFactura").ToString().ToEntero() End If TxtTipoCambio.Text = DbRowVenta("TipoCambio").ToString() If DbRowVenta("UltimasFluctuaciones").ToString() <> "" Then LblTCValuacion.Text = String.Format("Ult. Val:{0}", DbRowVenta("UltimasFluctuaciones").ToString()) LblTCValuacion.Visible = True End If ViewState("SelloCancelacion") = DbRowVenta("SelloCancelacion").ToString() ViewState("FechaCancelacion") = DbRowVenta("FechaCancelacion").ToString().ToDateTime TxtAtencionA.Text = DbRowVenta("AtencionA").ToString() TxtTelefonoGenerico.Text = DbRowVenta("TelefonoGenerico").ToString() CveVentaPadre = DbRowVenta("CveVentaPadre").ToString().ToEntero() SerieFolioPadre = DbRowVenta("SerieFolioPadre").ToString() If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If 'PERMITIR EDITAR EL VENDEDOR ANTES DE FACTURAR If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso TmpDT IsNot Nothing AndAlso TmpDT.SUM("CantidadFacturadaCot") = 0) Then DdlVendedor.Enabled = True End If If CveVentaPadre > 0 Then If IsNothing(Request("CveDevolucion")) AndAlso IsNumeric(Request("CveDevolucion")) Then DdlNCFactura.Visible = True Else DdlNCFactura.Visible = False End If trNCFactura.Visible = True LblSerieFolioPadre.Visible = True LblSerieFolioPadre.Text = String.Format("{1}", CveVentaPadre, SerieFolioPadre) End If If DbRowVenta("CveMedico").ToString.ToEntero > 0 AndAlso DbRowVenta("CveProcedimiento").ToString.ToEntero > 0 Then TxtFechaEjecucion.Text = DbRowVenta("FechaEjecucion").ToString().ToDateTime.ToString("dd/MM/yyyy HH:mm") DVMEEFechaEje.Visible = False Else TxtFechaEjecucion.Text = DbRowVenta("FechaEjecucion").ToString().ToDateTime.ToString("dd/MM/yyyy") End If 'DdlSucursalEjecucion.SelectedValueExist(DbRowVenta("CveSucursalEjecucion").ToString()) 'DdlSucursalCobranza.SelectedValueExist(DbRowVenta("CveSucursalCobranza").ToString()) DdlSucursalCliente.SelectedValueExist(DbRowVenta("CveClienteSucursal").ToString()) 'DdlSucursal.SelectedValueExist(DbRowVenta("CveSucursal").ToString()) 'DdlSubProyectoDatos.SelectedValueExist(DbRowVenta("CveSubProyecto").ToString()) If DdlSubProyectoDatos.Items.Count = 0 Then DdlSubProyectoDatos.Items.Insert(0, New ListItem("Seleccione", "-1")) End If DdlSubProyectoDatos.SelectedValueExistInsert(DbRowVenta("CveSubProyecto").ToString(), DbRowVenta("SubProyecto").ToString()) DdlSubProyecto.SelectedValueExist(DbRowVenta("CveSubProyecto").ToString()) CargarAlmacenes() If DdlSubProyectoCobranza.Items.Count = 0 Then DdlSubProyectoCobranza.Items.Insert(0, New ListItem("Seleccione", "-1")) End If DdlSubProyectoCobranza.SelectedValueExistInsert(DbRowVenta("CveSubProyectoCobranza").ToString(), GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DbRowVenta("CveSubProyectoCobranza").ToString().ToEntero()).FiltroPrimeroValor("SubProyecto").ToString()) If DdlSubProyectoEjecucion.Items.Count = 0 Then DdlSubProyectoEjecucion.Items.Insert(0, New ListItem("Seleccione", "-1")) End If DdlSubProyectoEjecucion.SelectedValueExistInsert(DbRowVenta("CveSubProyectoEjecucion").ToString(), GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DbRowVenta("CveSubProyectoEjecucion").ToString().ToEntero()).FiltroPrimeroValor("SubProyecto").ToString()) CargaClienteSucursal(DbRowVenta("CveClienteSucursal").ToString().ToEntero()) If DbRowVenta("CveContrato").ToString().ToEntero() > 0 Then CveContrato = DbRowVenta("CveContrato").ToString().ToEntero() NumeroContrato = DbRowVenta("NumeroContrato").ToString() DescripcionContrato = DbRowVenta("DescripcionContrato").ToString() DdlContrato.Visible = False HLContrato.Text = $"{DbRowVenta("NumeroContrato")} - {DbRowVenta("DescripcionContrato")}" HLContrato.NavigateUrl = $"/Contratos/Contrato.aspx?CveContrato={CveContrato}" 'trPresupuesto.Visible = True 'HplPresupuesto.NavigateUrl = String.Format(" / Presupuestos / Presupuesto.aspx?CvePresupuesto={0}", DbRowVenta("CveContrato").ToString()) Else NumeroContrato = "" DescripcionContrato = "" End If 'DdlEstatus.Items.Remove(DdlEstatus.Items.FindByText("Cotización")) If DbRowVenta("SeTimbro").ToString() <> "No" Then HplDownXML.Visible = True 'If HLImprimir.Visible = False Then HplDownPDF.Visible = True 'End If ElseIf UsuarioActual.Empresa.TipoFacturacion = "CBB" OrElse DdlTipoComprobante.SelectedValue = "Cot" Then 'If drv("TipoEstatus").ToString().ToEntero() = 2 AndAlso drv("TipoDocto").ToString() = "Cot" Then ' ImgDownPDF.Visible = True 'Else HplDownPDF.Visible = False 'End If ElseIf UsuarioActual.Empresa.TipoFacturacion = "CFDi" AndAlso DbRowVenta("SeTimbro").ToString() = "No" AndAlso DbRowVenta("CveEstatusFactura").ToString() = "2" AndAlso DbRowVenta("TipoDocto").ToString().Contiene("Ing", "Egs", "Dev", "Ant") Then TrEmitir.Visible = True If TxtFecha.Text.ToDate < NowADS().AddDays(-3) Then TxtFecha.Enabled = True End If End If 'NO DEBE IMPRIMIR PDF DE COTIZACION If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DbRowVenta("TipoDocto").ToString() = "Cot" Then HplDownPDF.Visible = False End If If DbRowVenta("SeTimbro").ToString() = "Si" Then TrEmitir.Visible = False End If 'CargaAcuseCancelacion If DbRowVenta("CveEstatusFactura").ToString().Contiene("5", "20") Then ImgDownCancelacion.Visible = True ImgDownCancelacion.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=CAN&CVEVTA={0}", CveVenta))) End If IdPoliza = DbRowVenta("IdPoliza").ToString().ToEntero() If DbRowVenta("CveEstatusFactura").ToString().Contiene("4", "5") Then HplDownPDF.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1®ENERAR=1", CveVenta))) End If If UsuarioActual.Empresa.UsaOS AndAlso DbRowVenta("CveOS").ToString().ToEntero() = 0 Then BtnGenerarOS.Visible = True BtnGenerarOS.OnClientClick = String.Format("javascriptwindow.location.href = '/OS/OrdenesServicios.aspx?CveVenta={0}'; return false;", CveVenta) ' BtnGenerarOS.OnClientClick = String.Format("/OS/OrdenesServicios.aspx?CveVenta={0}", CveVenta) End If 'Ocultamos los botones Clonar y Ordenar GvPS.Columns(20).Visible = False GvPS.Columns(21).Visible = False thOrden.Visible = False GvFirmas.DataSource = DTmpF GvFirmas.DataBind() If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then TrOtros.Visible = True GvImpuestosLocales2.DataSource = TmpDTImpuestos GvImpuestosLocales2.DataBind() GvImpuestosLocales2.Enabled = False GvImpuestosLocales2.Visible = True End If DdlVendedor.SelectedValue = If(DbRowVenta("CveVendedor").ToString = "", "0", DbRowVenta("CveVendedor").ToString) 'si viene dbnull, que ponga cero. DdlTipoComprobante.Enabled = False 'TxtDocto.Enabled = False 'PORLET CLIENTE 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True ChkEnviarFactura.Enabled = False ChkDireccionEnvio.Enabled = False TxtAtencionA.Enabled = False TxtFechaVencimientoCotizacion.Enabled = False TxtCantidad.Enabled = False DdlClasificacion.Enabled = False DdlPS.Enabled = False TxtObsPS.Enabled = False DdlProyecto.Enabled = False DdlSubProyecto.Enabled = False TxtPrecio.Enabled = False ImgDescPU.Attributes.Clear() ImgDescTotal.Attributes.Clear() ImgDescConcepto.Attributes.Clear() LbAgregar.Enabled = False DdlCuentasTerminal.Enabled = False For Each Row As GridViewRow In GvPS.Rows Row.FCLiteral("LtlConsecutivo").Text = (Row.RowIndex + 1).ToString() Next GvPS.Columns(ColumnaEditar).HeaderText = "" GvPS.Columns(ColumnaEliminar).HeaderText = "" 'GvPS.Columns(ColumnaEliminar).Visible = False TxtObsFact.Enabled = False TxtObsAlmacen.Enabled = False TxtMotivoDescuento.Enabled = False 'GvLeyendasFiscales.Enabled = False TxtSubTotal.ReadOnly = True TxtIVA.ReadOnly = True TxtRetIVA.ReadOnly = True TxtRetISR.ReadOnly = True TxtIEPS.ReadOnly = True TxtTotal.ReadOnly = True 'Sección Detalle DdlMoneda.Enabled = False DdlTipoRetencion.Enabled = False TxtFechaEjecucion.ReadOnly = True ImgCalendarFechaEje.Enabled = False 'DdlSucursalEjecucion.Enabled = False 'DdlSucursalCobranza.Enabled = False DdlVendedor.Enabled = False 'PERMITIR EDITAR EL VENDEDOR ANTES DE FACTURAR If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso TmpDT IsNot Nothing AndAlso TmpDT.SUM("CantidadFacturadaCot") = 0) Then DdlVendedor.Enabled = True End If DdlSucursalCliente.Enabled = False TxtTiempoEntrega.Enabled = False TxtAlfa1.ReadOnly = True TxtAlfa2.ReadOnly = True TxtAlfa3.ReadOnly = True TxtNum1.ReadOnly = True TxtNum2.ReadOnly = True TxtNum3.ReadOnly = True TxtFech1.ReadOnly = True : ImgFech1.Enabled = False TxtFech2.ReadOnly = True : ImgFech2.Enabled = False TxtFech3.ReadOnly = True : ImgFech3.Enabled = False ChkConvertirDoctoPesos.Enabled = False ChkConvertirDolares.Enabled = False TxtTipoCambio.Enabled = UsuarioActual.CveEmpresa.Contiene(13, 83) TxtTipoCambioDlls.Enabled = UsuarioActual.CveEmpresa.Contiene(13, 83) TxtTipoCambio.ReadOnly = Not UsuarioActual.CveEmpresa.Contiene(13, 83) TxtTipoCambioDlls.ReadOnly = Not UsuarioActual.CveEmpresa.Contiene(13, 83) 'Condiciones de Pago RBLPago.Enabled = False DdlFormaPago33.Enabled = False DdlUsoCFDI.Enabled = False DdlMetodoPago33.Enabled = False 'TxtNumCtaPago.Enabled = False If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot") Then TxtFechaPago.ReadOnly = Not UsuarioActual.TienePermisoProceso(260) LnkUpdateFechaVencimiento.Visible = UsuarioActual.TienePermisoProceso(260) Else TxtFechaPago.ReadOnly = False End If imgCalendario.Enabled = False DdlFuenteRecaudacion.Enabled = False TrVistaPrevia.Visible = False BtnEmitirImprimir.Visible = False 'CargaLeyendasFiscales ViewState("VentaFolio") = If(LblSerie.Text.Trim.Length = 0, TxtFolio.Text.Trim, LblSerie.Text.Trim & "-" & TxtFolio.Text.Trim) CalculaTotalesVenta(False) 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") tdFechaVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") If DbRowVenta("TipoDocto").ToString() = "Rem" Then 'CANTIDAD FACTURADA If TmpDT.SUM("CantidadFacturadaRem") > 0 Then GvPS.Columns(6).Visible = True ThCantidadFacturadaRem.Visible = True ThCantidadFacturadaRem2.Visible = True Else GvPS.Columns(6).Visible = False ThCantidadFacturadaRem.Visible = False ThCantidadFacturadaRem2.Visible = False End If 'ACTIVA EDITAR 'SOLO LA PUEDE EDITAR CON PROCESO | DEBE TENER CONCEPTOS PENDIENTES DE FACTURAR If (UsuarioActual.TienePermisoProceso(202) OrElse UsuarioActual.TienePermisoProceso(302)) And TmpDT.SUM("CantidadFacturadaRem") < TmpDT.SUM("Cantidad") Then BtnPermisoEditarRemision.Visible = True End If 'si es de FNC contado. bloquear edición si está pagada o en proceso de cobro If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (DbRowVenta("CveCobranzaEstatus").ToString = "1" OrElse DbRowVenta("Saldo").ToString.ToDecimal = 0) Then BtnPermisoEditarRemision.Visible = False End If 'ACTIVA BOTONERA | DEBE TENER CONCEPTOS PENDIENTES DE FACTURAR If (TmpDT.SUM("CantidadFacturadaRem") < TmpDT.SUM("Cantidad")) AndAlso TieneBloqueoPorCreditoVencimiento = 0 Then BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) 'E119, bloquear la facturación de remisiones que no estén surtidas If UsuarioActual.CveEmpresa = 119 Then If TmpDT.SUM("Cantidad") <> TmpDT.SUM("CantidadInventario") Then 'que ya esté surtida totalmente BtnsFacturar.Visible = False End If End If LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) 'ACTIVA CONVERSION DE MONEDA If DdlMoneda.SelectedValue.ToEntero() = 1 Then TrConversionDolares.Visible = True ChkConvertirDolares.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambioDlls.Enabled = True Else TrConversionTipoCambio.Visible = True ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambio.Enabled = True End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then TrVistaPrevia.Visible = True End If End If 'Si es Empresa de Acumuladores If CveVenta > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DbRowVenta("TipoDocto").ToString() = "Rem" AndAlso (GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() <> 5) Then If TieneBloqueoPorCreditoVencimiento = 0 Then BtnsFacturar.Visible = False Dim DtUsadosPendientes As DataTable = Nothing Dim DtGarantiasPendientes As DataTable = Nothing Dim ObjUsados As New ClsVentas If ObjUsados.GetVentasUsados(CveVenta, -1, DbRowVenta("Fecha").ToString().ToDateTime, UsuarioActual.CveEmpresa, ServicioDomicilio:=CBool(DbRowVenta("ServicioDomicilio"))) Then DtUsadosPendientes = ObjUsados.DtResultados.Copy() End If If ObjUsados.GetVentasGarantiaPendiente(CveVenta, NowADS(), UsuarioActual.CveEmpresa) Then DtGarantiasPendientes = ObjUsados.DtResultados.Copy() End If 'If ObjUsados.GetVentasGarantiaPendiente(CveVenta, -1, NowADS(), UsuarioActual.CveEmpresa) Then ' DtGarantiasPendientes = ObjUsados.DtResultados.Copy() 'End If ObjUsados.Dispose() BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) 'VERIFICA SI YA SE FACTURO COMPLETAMENTE If TmpDT.SUM("CantidadFacturadaRem") = TmpDT.SUM("Cantidad") Then BtnsFacturar.Visible = False End If 'VERIFICA SI TIENE USADOS O GARANTIAS PENDIENTES If BtnsFacturar.Visible Then If (Not EsGarantia AndAlso (DtUsadosPendientes IsNot Nothing AndAlso DtUsadosPendientes.Rows.Count > 0)) Then BtnsFacturar.Visible = False Alert("Tiene usados pendiente de recibir", TipoMensaje.MsgAdvertencia) End If If (EsGarantia AndAlso (DtGarantiasPendientes IsNot Nothing AndAlso DtGarantiasPendientes.Rows.Count > 0)) Then Alert("Tiene garantías pendientes de recibir", TipoMensaje.MsgAdvertencia) BtnsFacturar.Visible = False End If End If LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) End If End If 'SI ES COMPLEMENTARIA, NO DEBE PERMITIR FACTURAR If UsuarioActual.Empresa.Funcionalidad(706) = "1" AndAlso DbRowVenta("TipoContable").ToString() <> "-1" Then If DbRowVenta("TipoContable").ToString() = "0" Then BtnsFacturar.Visible = False End If TrTipoContable.Visible = True DdlTipoContable.SelectedValueExist(DbRowVenta("TipoContable").ToString()) DdlTipoContable.Enabled = False End If End If If DbRowVenta("TipoDocto").ToString().Contiene("Cot") Then 'CANTIDAD FACTURADA If TmpDT.SUM("CantidadFacturadaCot") > 0 Then GvPS.Columns(7).Visible = True ThCantidadFacturada.Visible = True ThCantidadFacturada2.Visible = True Else GvPS.Columns(7).Visible = False ThCantidadFacturada.Visible = False ThCantidadFacturada2.Visible = False End If 'SI ES FACTURACION DIRECTA DESDE URL NO CARGAR LOS BOTONES If Request("CveCotizacion") Is Nothing Then 'ACTIVA EDITAR 'SOLO LA PUEDE EDITAR USUATIOACTUAL-VENDEDOR | NO DEBE ESTAR FACTURADA If (UsuarioActual.CveUsuario = DbRowVenta("CveUsuario").ToString().ToEntero() Or UsuarioActual.CveVendedor = DdlVendedor.SelectedValue.ToEntero()) And TmpDT.SUM("CantidadFacturadaCot") = 0 Then 'And TmpDT.SUM("CantidadFacturadaCot") < TmpDT.SUM("Cantidad") BtnPermisoEditarCotizacion.Visible = True End If 'SOLO LA PUEDE EDITAR USUATIOACTUAL-VENDEDOR | NO DEBE ESTAR FACTURADA If UsuarioActual.TienePermisoProceso(281) And TmpDT.SUM("CantidadFacturadaCot") = 0 Then 'And TmpDT.SUM("CantidadFacturadaCot") < TmpDT.SUM("Cantidad") BtnPermisoEditarCotizacion.Visible = True End If 'ACTIVA BOTONERA | DEBE TENER CONCEPTOS PENDIENTES DE FACTURAR VerificarBtnFacturarCotizacion(DbRowVenta("CveVendedor").ToString().ToEntero()) End If End If If DbRowVenta("TipoDocto").ToString().Contiene("Ped") Then 'ACTIVA BOTONERA | DEBE TENER CONCEPTOS PENDIENTES DE FACTURAR If TmpDT.SUM("CantidadFacturadaPed2") < TmpDT.SUM("Cantidad") Then BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) 'bloquear la facturación de remisiones que no estén surtidas If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If TmpDT.SUM("Cantidad") <> TmpDT.SUM("CantidadInventario") Then 'que ya esté surtida totalmente BtnsFacturar.Visible = False End If End If LBFacturarAnticipo.Visible = False 'ACTIVA CONVERSION DE MONEDA If DdlMoneda.SelectedValue.ToEntero() = 1 Then TrConversionDolares.Visible = True ChkConvertirDolares.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambioDlls.Enabled = True Else TrConversionTipoCambio.Visible = True ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambio.Enabled = True End If End If End If If UsuarioActual.TienePermisoProceso(302) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ped") Then BtnPermisoEditarRemision.Visible = True If UsuarioActual.TienePermisoProceso(302) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Egs") Then BtnEditar.Visible = True 'OCULTAR BOTON DE EDICION SI SE FACTURA COTIZACION DESDE URL If UsuarioActual.Empresa.Funcionalidad(558) <> "1" AndAlso Request("CveCotizacion") IsNot Nothing Then BtnEditar.Visible = False End If If UsuarioActual.Empresa.Funcionalidad(280) = "1" Then RblPaqueteria.SelectedValue = If(DbRowVenta("FormaPaqueteria").ToString = "", "1", DbRowVenta("FormaPaqueteria").ToString) RblPaqueteria.Enabled = False End If If UsuarioActual.CveEmpresa = 48 Then TxtFecha.AutoPostBack = True End If CargaCodigoUnico() DdlTipoRetencion.SelectedValueExist(DbRowVenta("CveTipoRetencion").ToString()) Me.FacturarSucursal = CBool(DbRowVenta("FacturarSucursal").ToString()) If Me.FacturarSucursal Then HabilitarFacturacionSucursal() End If CargaPS(-1, DdlPS) 'Verifico si tiene la funcionalidad (135) If DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") AndAlso TieneBloqueoPorCreditoVencimiento = 0 Then Select Case UsuarioActual.Empresa.Funcionalidad(135) Case "1" ' POR SUPERVISOR 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 = UsuarioActual.TienePermisoProceso(60) BtnGenerarRemision.Visible = True Else BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False End If End If DTVendedores.Dispose() End If ObjVendedores.Dispose() Case "2" ' POR PERMISO If GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() = 2 Then BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) If UsuarioActual.TienePermisoProceso(199) Then BtnGenerarRemision.Visible = If(CveEstatus = 10, False, True) Else BtnGenerarRemision.Visible = False End If Else BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False End If End Select 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 If DdlTipoComprobante.SelectedValue = "Rem" Then If GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() = 5 Then BtnsFacturar.Visible = False BtnEmitirImprimir.Visible = False BtnPermisoEditarRemision.Visible = False End If End If If UsuarioActual.Empresa.Funcionalidad(705) = "1" AndAlso Me.CveLineaAdicionalVenta > 0 Then CalculaLineasAdicionales() End If UpPS.Update() UpContado.Update() UpEstatus.Update() Retorno = True If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then CveTipoVenta = If(DbRowVenta("CveTipoVenta").ToString.ToEntero > 0, DbRowVenta("CveTipoVenta").ToString.ToEntero, -1) RBLTipoVenta.Items.Add(New ListItem("-", DbRowVenta("CveTipoVenta").ToString)) RBLTipoVenta.SelectedValuesIfExist(CveTipoVenta.ToString) TrVentasMedicas3.Visible = True If DbRowVenta("CveMedico").ToString.ToEntero > 0 AndAlso CveTipoVenta.Contiene(1, 2, 3, 5, 6) Then TrVentasMedicas1.Visible = True DdlMedico.SelectedValueExist(DbRowVenta("CveMedico").ToString) DdlProcedimiento.SelectedValueExist(DbRowVenta("CveProcedimiento").ToString) TxtPaciente.Text = DbRowVenta("Paciente").ToString TxtEpisodio.Text = DbRowVenta("Episodio").ToString DdlMedico.Enabled = False DdlProcedimiento.Enabled = False TxtPaciente.Enabled = False TxtEpisodio.Enabled = False TrVentasMedicas4.Visible = True TxtFolioRemision.Text = DbRowVenta("Alfa1").ToString LblTipoVenta.Text = DbRowVenta("TipoVenta").ToString If DbRowVenta("FechaParaSurtir").ToString().ToDate() > DateTime.MinValue Then TrVentasMedicas2.Visible = True ChkRequiereTecnico.Enabled = False TxtFechaOS.Enabled = False TxtFechaOS.Text = DbRowVenta("FechaParaSurtir").ToString().ToDateTime().ToString("yyyy-MM-dd HH:mm").Replace(" ", "T") End If End If End If Dim Addenda = DbRowVenta("Addenda").ToString() If Not String.IsNullOrEmpty(Addenda) Then Try Dim ObjAddenda As New Modelos.M_REM Addenda = Addenda.Replace("", "") Addenda = Addenda.Replace("", "") Dim strAddenda As New StringBuilder() strAddenda.Append("") strAddenda.Append(Addenda) Dim serializer As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(ObjAddenda.GetType()) Dim string_reader As TextReader = New System.IO.StringReader(strAddenda.ToString()) ObjAddenda = DirectCast(serializer.Deserialize(string_reader), Modelos.M_REM) If ObjAddenda IsNot Nothing Then TxtNOS.Text = ObjAddenda.NOS TxtOR.Text = ObjAddenda._OR TxtCLUES.Text = ObjAddenda.CLUES TxtContrato.Text = ObjAddenda.CONTRATO TxtFEEX.Text = ObjAddenda.FEEX TxtFERE.Text = ObjAddenda.FERE TxtFEEN.Text = ObjAddenda.FEEN End If Catch ex As Exception OnError("Ocurrió un error al cargar los datos de la addenda", ex) End Try End If Dim HabilitarExistencias As Boolean = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DbRowVenta("TipoDocto").ToString().Contiene("Rem", "Cot") Then HabilitarExistencias = True GvPS.Columns(20).Visible = True End If If HabilitarExistencias Then For Each GvRow As GridViewRow In GvPS.Rows If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCLinkButton("LnkExistencias").Visible = True GvRow.FCLinkButton("imgClone").Visible = False GvRow.FCLinkButton("LnkDescuentos").Visible = False End If Next End If End If End Using End If Return Retorno End Function Private Sub VerificarBtnFacturarCotizacion(CveVendedor As Integer, Optional MostrarGenerarRemision As Boolean = True) If TmpDT.SUM("CantidadFacturadaCot") < TmpDT.SUM("Cantidad") AndAlso DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso TieneBloqueoPorCreditoVencimiento = 0 Then If UsuarioActual.TienePermisoProceso(199) Then BtnGenerarRemision.Visible = If(CveEstatus = 10, False, True) Else BtnGenerarRemision.Visible = False End If If UsuarioActual.TienePermisoProceso(60) Then BtnsFacturar.Visible = True 'puede facturar If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso UsuarioActual.TienePermisoProceso(60) Then Select Case UsuarioActual.Empresa.Funcionalidad(135) Case "1" ' POR SUPERVISOR Dim ObjVendedores As New ClsVtaVendedores If ObjVendedores.GetVendedores(UsuarioActual.CveEmpresa) Then Dim DTVendedores As New DataTable If CveVendedor > 0 AndAlso UsuarioActual.CveVendedor > 0 Then DTVendedores = ObjVendedores.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", CveVendedor)).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 = UsuarioActual.TienePermisoProceso(60) If UsuarioActual.TienePermisoProceso(199) Then BtnGenerarRemision.Visible = If(CveEstatus = 10, False, True) Else BtnGenerarRemision.Visible = False End If Else BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False End If End If DTVendedores.Dispose() End If ObjVendedores.Dispose() Case "2" ' POR PERMISO If GlobalDTEstatusFactura().FiltroPrimeroValor("TipoEstatus", $"CveEstatusFactura = {Me.CveEstatus}").ToEntero() = 2 Then BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) If UsuarioActual.TienePermisoProceso(199) Then BtnGenerarRemision.Visible = If(CveEstatus = 10, False, True) Else BtnGenerarRemision.Visible = False End If Else BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False End If End Select End If If BtnGenerarRemision.Visible AndAlso Not MostrarGenerarRemision Then BtnGenerarRemision.Visible = False End If LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) End If End Sub Private Sub CargaTiposDocumentos() DdlTipoComprobante.DataSource = GlobalDTTiposDocumentos() DdlTipoComprobante.DataBind() End Sub Private Sub CargaNuevaFactura(OVenta As ClsVentas) Dim ObjVentas As ClsVentas If OVenta IsNot Nothing Then ObjVentas = OVenta Else ObjVentas = New ClsVentas() End If If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados IsNot Nothing AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then Dim drv As DataRow = ObjVentas.DtResultados.Rows(0) 'CargaCliente Dim CveCliente As Integer = drv("CveCliente").ToString().ToEntero() HdnCveCliente.Value = CveCliente.ToString() ViewState("CveCliente") = CveCliente CargaCliente(CveCliente) 'Carga Detalle Sucursal TxtFechaEjecucion.Text = drv("FechaEjecucion").ToString().ToDateTime.ToString("dd/MM/yyyy") TxtFechaPago.Text = drv("FechaVencimiento").ToString().ToDateTime.ToString("dd/MM/yyyy") 'DdlSucursalEjecucion.SelectedValueExist(drv("CveSucursalEjecucion").ToString()) 'DdlSucursalCobranza.SelectedValueExist(drv("CveSucursalCobranza").ToString()) DdlSucursalCliente.SelectedValueExist(drv("CveClienteSucursal").ToString()) 'DdlSucursal.SelectedValueExist(drv("CveSucursal").ToString()) DdlSubProyectoDatos.SelectedValueExist(drv("CveSubProyecto").ToString()) DdlSubProyectoEjecucion.SelectedValueExist(drv("CveSubProyectoEjecucion").ToString()) DdlSubProyectoCobranza.SelectedValueExist(drv("CveSubProyectoCobranza").ToString()) If CveDevolucion > 0 Then CambiaSucursalGeneral() End If CargaClienteSucursal(drv("CveClienteSucursal").ToString().ToEntero()) 'CargaDetalle If ObjVentas.GetVentaDetalle(CveVenta) Then For Each dr As DataRow In ObjVentas.DtResultados.Rows AgregarProductoServicio(dr("Cantidad").ToString().ToDecimal, dr("CveUM").ToString().ToEntero(), dr("UM").ToString(), dr("CveClasificacion").ToString().ToEntero(), dr("Clasificacion").ToString(), dr("CvePS").ToString().ToEntero(), dr("PS").ToString(), dr("Obs").ToString(), dr("PU").ToString().ToDecimal, dr("Descuento").ToString().ToDecimal, dr("CveProyecto").ToString().ToEntero(), dr("Proyecto").ToString(), dr("CveSubProyecto").ToString().ToEntero(), dr("SubProyecto").ToString(), CveContratoDetalle:=dr("CveContratoDetalle").ToString().ToEntero(), CveVentaDetalleCotizacion:=dr("CveVentaDetalleCotizacion").ToString().ToEntero(), CveVentaDetalle:=dr("CveVentaDetalle").ToString().ToEntero(), RegeneraIEPS:=False, SeActualiza:=True) Next 'TmpDT = ObjVentas.DtResultados 'TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) 'TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) ''TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) ObjVentas.DtResultados.Columns.Add("TieneProntoPago", GetType(String)) ObjVentas.DtResultados.Columns.Add("ImporteProntoPago", GetType(Decimal)) ObjVentas.DtResultados.Columns("TieneProntoPago").DefaultValue = "No" ObjVentas.DtResultados.Columns("ImporteProntoPago").DefaultValue = 0 GvPS.DataSource = ObjVentas.DtResultados GvPS.DataBind() End If 'CARGA IMPUESTOS LOCALES If ObjVentas.GetVentaImpuestosLocales(CveVenta) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrOtros.Visible = True TmpDTImpuestos = ObjVentas.DtResultados GvImpuestosLocales2.DataSource = ObjVentas.DtResultados GvImpuestosLocales2.DataBind() If (NuevaFactura = 1) Then GvImpuestosLocales2.Enabled = True Else GvImpuestosLocales2.Enabled = False End If GvImpuestosLocales2.Visible = True End If End If 'Carga Totales ViewState("TipoDoctoDevolucion") = drv("TipoDocto").ToString() TxtSubTotal.Text = drv("SubTotal").ToString().FormatoNumero(2) LblDescuentos.Text = drv("Descuento").ToString().FormatoNumero(2) LblAmortizacion.Text = drv("Amortizacion").ToString().FormatoNumero(2) TxtSubTotal2.Text = (TxtSubTotal.Text.Replace(",", "").Trim.Trim.ToDouble - LblDescuentos.Text.Replace(",", "").Trim.Trim.ToDouble - LblAmortizacion.Text.Replace(",", "").Trim.Trim.ToDouble).FormatoNumero(2) TxtIVA.Text = drv("IVA").ToString().FormatoNumero(2) TxtRetIVA.Text = drv("RetIVA").ToString().FormatoNumero(2) If TxtRetIVA.Text.ToDecimal() > 0 Then TrRetIVA.Style.Add("display", "") UsuarioActual.Empresa.MostrarRetIVA = True End If TxtRetISR.Text = drv("RetISR").ToString().FormatoNumero(2) TxtTotal.Text = drv("Total").ToString().FormatoNumero(2) TotalOriginal = Math.Round(drv("Total").ToString().ToDouble, 2) HdnVentaSaldo.Value = drv("Total").ToString() TxtMotivoDescuento.Text = drv("MotivoDescuento").ToString() TxtObsFact.Text = drv("Observaciones").ToString() TxtOrdenCompra.Text = drv("OrdenCompra").ToString() DdlMoneda.SelectedValue = drv("CveMoneda").ToString() CambiaMoneda() TxtTipoCambio.Text = drv("TipoCambio").ToString() DdlVendedor.SelectedValue = drv("CveVendedor").ToString() CvePAC = drv("CvePAC").ToString().ToEntero() DdlUsoCFDI.SelectedValueExist(drv("CveUsoCFDI").ToString()) DdlMetodoPago33.SelectedValueExist(drv("CveMetodoPago33").ToString()) CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.SelectedValueExist(drv("CveFormaPago33").ToString()) DdlTipoComprobante.SelectedValueExist(drv("TipoDocto").ToString()) DdlTipoComprobante.Enabled = False HdnIVAOriginal.Value = TxtIVA.Text HdnAmortizacion.Value = LblAmort.Text.ToDouble.ToString() HdnSubTotalDescuestos.Value = (TxtSubTotal.Text.Replace(",", "").ToDouble - LblDescuentos.Text.Replace(",", "").ToDouble - LblAmortizacion.Text.Trim.Replace(",", "").ToDouble - TxtRetISR.Text.Replace(",", "").ToDouble).FormatoNumero(2) 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If CveContrato = drv("CveContrato").ToString().ToEntero() TabAlmacen.Enabled = False TabDetalleVentas.Enabled = False TabComplementos.Enabled = False 'HplDownPDF.Visible = True 'HplDownPDF.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}", CveVenta))) Updatetabs.Update() UpPS.Update() UpContado.Update() If CveDevolucion > 0 Then HdnFolioFiscalNC.Value = drv("FolioFiscal").ToString() 'CALCULA IMPUESTOS LOCALES CON LOS DATOS DEL CLIENTE AL MOMENTO DE LA NUEVA FACTURA NO LA VIEJA 'CalculaTotalesImpuestosLocales() 'CalculaTotales(CBool(ViewState("RetIVAFletes"))) CalculaTotalesVenta() ' al hacer una refacturación que regenere los importes, sino vienen correctos ''CARGA IMPUESTOS LOCALES DE LA VENTA ANTERIOR 'If ObjVentas.GetVentaImpuestosLocales(CveVenta) Then ' If ObjVentas.DtResultados.Rows.Count > 0 Then ' GvImpuestosLocales2.DataSource = ObjVentas.DtResultados ' GvImpuestosLocales2.DataBind() ' GvImpuestosLocales2.Enabled = False ' GvImpuestosLocales2.Visible = True ' End If 'End If 'cuando es refacturacion, la fecha de pago debe de ser la misma If UsuarioActual.Empresa.Funcionalidad(526) = "1" Then ' Dim ObjVenta As New ClsVentas If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TxtFechaPago.Text = ObjVentas.DtResultados(0)("FechaVencimiento").ToString().ToDate.ToShortDateString End If End If 'ObjVenta.Dispose() Else TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString End If CreaObjetosVentaDevolucion() End If TabComplementos.Enabled = True End If End If If OVenta Is Nothing Then ObjVentas.Dispose() End If End Sub Private Sub CargaSucursales() If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectoDatos.Enabled = False : DdlSubProyectoEjecucion.Enabled = False : DdlSubProyectoCobranza.Enabled = False End Sub Private Sub CargaMetodosPago() 'FACTURACION 3.3 DdlMetodoPago33.DataSource = GlobalDTVtaMetodoPago DdlMetodoPago33.DataBind() DdlMetodoPago33.SelectedValueExist("3") CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) 'End If End Sub Private Sub CargaFormaPago(CveMetodoPago As Integer) Dim dtt As DataTable = Nothing If CveMetodoPago > 0 Then 'si es PPD, siempre tiene que ser "99", pero si es PUE, si puede seleccionar hasta el "99" dtt = GlobalDTVtaFormaPago.FiltraParametros(If(CveMetodoPago = 1, "", "CveFormaPago = 20")) Else dtt = GlobalDTVtaFormaPago End If DdlFormaPago33.Items.Clear() DdlFormaPago33.DataSource = dtt DdlFormaPago33.SelectedValue = dtt.FiltroPrimeroValor("CveFormaPago", "") DdlFormaPago33.DataBind() DdlMetodoCliente.DataSource = GlobalDTVtaMetodoPago DdlMetodoCliente.DataBind() DdlMetodoCliente.Items.Insert(0, New ListItem("Seleccione", "-1")) If UsuarioActual.CveRol = 1 AndAlso CveMetodoPago = 1 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso TbDescuentosAdicionales.Visible Then If TmpDT.SUMD("Descuento") > 0 Then Dim TotalDescuento As Decimal = TmpDT.SUMD("Total", "Descuento > 0") * 0.05D Dim RowDescuentos As DataRow() = TmpDT.Select("Descuento > 0") If RowDescuentos IsNot Nothing Then LblDescuentoAdicional.Text = TotalDescuento.FormatoNumero(2) CalculaTotalesVenta() End If Else LblDescuentoAdicional.Text = "0.00" End If UpPS.Update() End If 'End If End Sub Private Sub CargaUsoCFDI() DdlUsoCFDI.Items.Clear() DdlSucursalUsoCFDI.Items.Clear() DdlUsoCFDI.ClearSelection() Dim EsPersonaMoral As Boolean = (TipoPersona = True) DdlUsoCFDI.DataSource = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente) DdlSucursalUsoCFDI.DataSource = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente) DdlUsoCFDI.DataBind() DdlSucursalUsoCFDI.DataBind() If Not UsuarioActual.CveEmpresa.Contiene(76, 15) Then If DdlUsoCFDI.DataSource IsNot Nothing Then If DdlUsoCFDI.Items.FindByValue("25") IsNot Nothing Then DdlUsoCFDI.Items.Remove(DdlUsoCFDI.Items.FindByValue("25")) End If End If End If DdlUsoCFDI.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlSucursalUsoCFDI.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Private Sub CargaMotivosCancelacion() DdlMotivoRefacturacion.DataSource = GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa, CveSATMotivoCancelacion:=1) DdlMotivoRefacturacion.DataBind() DdlMotivoCancelacion.DataSource = GlobalDTMotivosCancelacionEmpresa(UsuarioActual.CveEmpresa).FiltraParametros("CveSATMotivoCancelacion IN (2,3)") DdlMotivoCancelacion.DataBind() DdlMotivoRefacturacion.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlMotivoCancelacion.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Private Sub CargaTiposRelacion() DdlTiposRelacion.DataSource = GlobalDTVtaTiposRelacion DdlTipoRelacionARelacionar.DataSource = GlobalDTVtaTiposRelacion DdlTiposRelacion.DataBind() DdlTipoRelacionARelacionar.DataBind() DdlTiposRelacion.Items.Insert(0, New ListItem("-", "-1")) DdlTipoRelacionARelacionar.Items.Insert(0, New ListItem("-", "-1")) End Sub Private Sub CargaFormaEntrega() If GlobalDTVtaCondicionesEntrega(UsuarioActual.CveEmpresa).Rows.Count > 0 Then TrFormaEntrega.Visible = True DdlFormaEntrega.DataSource = GlobalDTVtaCondicionesEntrega(UsuarioActual.CveEmpresa) DdlFormaEntrega.DataBind() DdlFormaEntrega.Items.Insert(0, New ListItem("Seleccione", "-1")) Else TrFormaEntrega.Visible = False End If End Sub Private Sub CargaGestionCobranza() TrGestionCobranza.Visible = True DdlGestionCobranza.DataSource = GlobalDTVtaCobranzaTurnos(UsuarioActual.CveEmpresa) DdlGestionCobranza.DataBind() DdlGestionCobranza.Items.Insert(0, New ListItem("-", "-1")) End Sub Private Sub CargaMonedas() DdlMoneda.DataSource = GlobalDTMonedas DdlMoneda.DataBind() End Sub Private Sub CargaProyecto() Dim CveSubProyecto As Integer = 0 Dim dtt As DataTable = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) DdlProyecto.DataSource = dtt DdlProyecto.DataBind() CveSubProyecto = GetSubProyectoSucursal() CargaSubProyecto(CveSubProyecto) End Sub Private Function GetSubProyectoSucursal() As Integer Dim Retorno As Integer = 0 Dim dr As DataRow = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1).FiltroPrimero($"CveSubProyecto = {If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue)}") 'Dim dr As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimero($"CveSubProyecto = {If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue)}") 'si hay un proyecto relacionado con el subproyecto If dr IsNot Nothing AndAlso dr("CveSubProyecto").ToString().ToEntero() > 0 Then DdlProyecto.SelectedValueExist(dr("CveProyecto")) Retorno = dr("CveSubProyecto").ToString().ToEntero() End If Return Retorno End Function Private Sub CargarAlmacenes() If UsuarioActual.Empresa.UsaInventarios Then If (CveVenta > 0 And DdlTipoComprobante.SelectedValue <> "Cot") AndAlso Not (UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso EsCreaApartirDe) Then DivAlmacen.Visible = False Else Dim DTAlmacen As DataTable ddlAlmacen.Items.Clear() DTAlmacen = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") If UsuarioActual.CveEmpresa = 199 Then DTAlmacen.Merge(GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto <> {DdlSubProyectoDatos.SelectedValue.ToEntero()}")) End If ddlAlmacen.DataSource = DTAlmacen ddlAlmacen.Items.Insert(0, New ListItem("Seleccione ", "-1")) ddlAlmacen.SelectedValueExist("-1") ddlAlmacen.DataBind() If GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").Rows.Count > 0 Then 'SI ES DEL MISMO SUB PROYECTO SUGIERE EL ALMACEN ASIGNADO AL USUARIO If UsuarioActual.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() Then ddlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) Else Dim CveAlmacen As Integer = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").ToEntero() ddlAlmacen.SelectedValueExist(CveAlmacen) End If End If End If 'SI TIENE CONTRATO NO SE MUEVE If Not CveContrato > 0 Then DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} AND CveTipoAlmacen IN (4,10)") DdlAlmacenAsignado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenAsignado.SelectedValue = "-1" DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.SelectedValueExist(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").ToString().ToEntero()) End If If CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") DdlAlmacenAsignado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenAsignado.SelectedValue = "-1" DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.SelectedValueExist(GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero()) End If Else ddlAlmacen.DataSource = Nothing ddlAlmacen.DataBind() End If UpINV.Update() End Sub Private Sub CargaSubProyecto(Optional CveSubProyecto As Integer = -1, Optional FiltraPorProyecto As Boolean = False) 'DdlSubProyecto.Items.Clear() 'DdlSubProyecto.SelectedValue = Nothing 'If DdlProyecto.SelectedValue.ToEntero() > 0 Then ' DdlSubProyecto.DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1) ' 'DdlSubProyecto.DataSource = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltraParametros("", "", {"CveSubProyecto", "SubProyecto"}) 'End If 'DdlSubProyecto.DataBind() 'DdlSubProyecto.Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) If FiltraPorProyecto Then DdlSubProyecto.Items.Clear() Using ObjSubP As New ClsSubProyectos If ObjSubP.GetSubProyectos(UsuarioActual.CveEmpresa) Then DdlSubProyecto.DataSource = ObjSubP.DtResultados.FiltraParametros(String.Format("CveProyecto = {0}", DdlProyecto.SelectedValue)) End If End Using DdlSubProyecto.DataBind() DdlSubProyecto.Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) End If If CveSubProyecto > 0 Then DdlSubProyecto.SelectedValueExist(CveSubProyecto) End Sub Private Sub CargaEmpresaCRM(CveEmpresaCRM As Integer) Dim ObjCRM As New ClsCRM If ObjCRM.GetEmpresasCRM(UsuarioActual.CveEmpresa, CveEmpresaCRM) Then If ObjCRM.DtResultados.Rows.Count > 0 Then ViewState("CveCliente") = IIf(ObjCRM.DtResultados.Rows(0)("CveCliente").ToString().ToEntero() > 0, ObjCRM.DtResultados.Rows(0)("CveCliente"), -1) HdnCveCliente.Value = CveCliente.ToString() If (CveCliente > 0) Then CargaCliente(CveCliente) VerificarContrato(True) 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True UpCliente.Visible = True 'UpEmpresaCRM.Visible = False Else LblEmpresaCRM.Text = ObjCRM.DtResultados.Rows(0)("Empresa").ToString() LblRFCCRM.Text = ObjCRM.DtResultados.Rows(0)("RFC").ToString() LblMedioCaptacionCRM.Text = ObjCRM.DtResultados.Rows(0)("MedioCaptacion").ToString() ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = False LblEnviarMail.Visible = False UPCondicionesPago.Visible = True 'UpCliente.Visible = False 'UpEmpresaCRM.Visible = True trNombreCliente.Visible = False trsucursalcliente.Visible = False TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False TrOP.Visible = False trDireccionEnvio.Visible = False TrAtencionA.Visible = True trCRM1.Visible = True trCRM2.Visible = True trCRM3.Visible = True LblTituloPorletCliente.Text = "EMPRESA CRM" tdTelefonoGen.Visible = False tdTxtTelefonoGen.Visible = False End If Me.CveVendedorEmpresaCRM = ObjCRM.DtResultados.Rows(0)("CveVendedorAsignado").ToString().ToEntero() DdlVendedor.SelectedValueExist(ObjCRM.DtResultados.Rows(0)("CveVendedorAsignado").ToString()) DdlVendedor.Enabled = False LbAgregar.Enabled = True 'TrAtencionA.Visible = True TrOC.Visible = True End If ThTiempoEntrega.Visible = True ThTiempoEntrega2.Visible = True GvPS.Columns(5).Visible = True End If ObjCRM.Dispose() End Sub Private Sub CargaCliente(CveCliente As Integer, Optional Estatus As Integer = -1) If CveCliente <= 0 Then Exit Sub RBLPago.Items(0).Enabled = True Dim CveUsoCFDICliente As Integer = -1 Dim ObjCliente As New ClsClientes() If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, Estatus, TipoCliente:=-1) Then If ObjCliente.DtResultados.Rows.Count > 0 Then TxtCodigo.Text = ObjCliente.Codigo DdlFormaEntrega.SelectedValueExist(ObjCliente.DtResultados(0)("CveCondicionEntrega").ToString()) LblCliente.Text = String.Format("{1}", CveCliente, ObjCliente.NombreComercial) ViewState("NombreCliente") = ObjCliente.Nombre LtlCliente.Text = ObjCliente.Nombre ViewState("RequiereOC") = ObjCliente.RequiereOC EnviarCorreoCliente = ObjCliente.EnviarFactura EstatusCliente = ObjCliente.Estatus EsFilial = ObjCliente.EsFilial CobranzaCorreo = ObjCliente.CobranzaCorreo Me.PermiteCredito = ObjCliente.PermiteCredito LnkAgregarCliente.Visible = False 'SI EL CLIENTE ES DIFERENTE DEL PREDETERMINADO Y PERMITE CREDITO, REGRESAR EL METODO DE PAGO A CREDITO If (CveVenta <= 0 AndAlso Not EsCreaApartirDe) AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso UsuarioActual.Empresa.Funcionalidad(714).ToEntero() > 0 AndAlso CveCliente <> UsuarioActual.Empresa.Funcionalidad(714).ToEntero() AndAlso RBLPago.SelectedValue = "2" AndAlso Me.PermiteCredito AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then RBLPago.SelectedValue = "1" End If If UsuarioActual.Empresa.Funcionalidad(714) <> "" Then 'cuando inicia cargado con el cliente. publico general LnkAgregarCliente.Visible = True End If ClienteEsDistribuidor = Boolean.Parse(ObjCliente.DtResultados.Rows(0)("EsDistribuidor").ToString()) TieneDiasVencidos = Boolean.Parse(ObjCliente.DtResultados.Rows(0)("TieneDiasVencidos").ToString()) DiasVencidosCliente = ObjCliente.DtResultados.Rows(0)("DiasVencidosCliente").ToString().ToEntero() ClienteCodigoRegimenFiscal = ObjCliente.DtResultados.Rows(0)("CodigoRegimenFiscal").ToString() ClienteRegimenFiscal = ObjCliente.DtResultados.Rows(0)("RegimenFiscal").ToString() If EstatusCliente = False And Not DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") And (CveVenta <= 0 Or EsCreaApartirDe) Then Alert("El Cliente seleccionado no esta activo", TipoMensaje.MsgAdvertencia) BtnEmitirImprimir.Visible = EstatusCliente TrVistaPrevia.Visible = EstatusCliente End If If ViewState("CveDevolucion") IsNot Nothing AndAlso ViewState("NuevaFactura") IsNot Nothing Then If (CveDevolucion > 0 AndAlso NuevaFactura = 1) Then BtnEmitirImprimir.Visible = EstatusCliente TrVistaPrevia.Visible = EstatusCliente End If End If 'CUANDO SEA COTIZACION Y SEA COMPUPROVEEDORES (EMPRESA 72) NO DEBE ENVIAR CORREO AL CLIENTE If UsuarioActual.CveEmpresa = 72 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = False LblEnviarMail.Visible = False Else If DdlTipoComprobante.SelectedValue.Contiene("Rem", "PeC", "PA", "Ped") Then 'ENVIO DE FACTURA ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True If CveVenta > 0 AndAlso EnviarCorreoCliente Then ChkEnviarFactura.Checked = EnviarCorreoCliente Else ChkEnviarFactura.Checked = EnviarCorreoCliente ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True End If End If ViewState("Mail") = If(DdlTipoComprobante.SelectedValue = "Cot", ObjCliente.MailCotizacion, ObjCliente.Mail) ViewState("MailCC") = ObjCliente.NotificarA CorreoEntregaAlmacen = ObjCliente.DtResultados(0)("CorreoEntregaAlmacen").ToString LblDireccion.Text = ObjCliente.Direccion LblColonia.Text = ObjCliente.Colonia LblCiudad.Text = ObjCliente.Ciudad LblEstado.Text = ObjCliente.Estado LblCP.Text = ObjCliente.CP LblRFC.Text = ObjCliente.RFC LblTelefono.Text = ObjCliente.Telefono LblRetIVA.Text = ObjCliente.RetIVA.ToString().FormatoNumero(5) LblRetISR.Text = ObjCliente.RetISR.ToString().FormatoNumero(5) If UsuarioActual.Empresa.MostrarRetISR AndAlso ObjCliente.RetISR > 0 Then ' TrRetISR.Style.Add("display", "none") TrRetISR.Visible = True Else TrRetISR.Visible = False End If ViewState("ClienteRetIVA") = ObjCliente.RetIVA / 100 ViewState("ClienteRetISR") = ObjCliente.RetISR / 100 If CveVenta <= 0 OrElse EsCreaApartirDe Then DdlTipoRetencion.SelectedValueExist(ObjCliente.DtResultados(0)("CveTipoRetencion").ToString()) DdlTipoRetencion_SelectedIndexChanged(DdlTipoRetencion, EventArgs.Empty) ViewState("RetIVAFletes") = ObjCliente.RetieneIVAFletes If ObjCliente.RetieneIVAFletes Then TrRetIVA.Style.Add("display", "") UsuarioActual.Empresa.MostrarRetIVA = True End If End If ViewState("Vendedor") = ObjCliente.Vendedor ViewState("CodCliente") = ObjCliente.Codigo ViewState("CvePrecioLista") = ObjCliente.CvePrecioLista ViewState("CvePrecioListaCliente") = ObjCliente.CvePrecioLista ViewState("CliNoExt") = ObjCliente.NoExt ViewState("CliNoInt") = ObjCliente.NoInt ViewState("CliLocalidad") = If(ObjCliente.Localidad.Trim.Length = 0, ObjCliente.Ciudad.Trim, ObjCliente.Localidad.Trim) ViewState("CliPais") = ObjCliente.Pais ImprimeNombreSucursal = ObjCliente.ImprimeNombreSucursal RegimenFiscalCliente = If(ObjCliente.CveRegimenFiscal > 0, ObjCliente.DtResultados(0)("CodigoRegimenFiscal").ToString(), "") RegimenSociedad = ObjCliente.DtResultados(0)("RegimenSociedad").ToString() TipoPersona = CBool(ObjCliente.DtResultados(0)("TipoPersona")) CargaUsoCFDI() 'ViewState("NumCtaPago") = ObjCliente.NumCtaPago ViewState("ClienteDesglosaIEPS") = ObjCliente.DesglosaIEPS If Not ClienteDesglosaIEPS Then DivClienteMsg.Visible = True LtlClienteMsg.Text = "Cálculo sin desglose de IEPS" End If ViewState("ClienteNODesglosaIVA") = ObjCliente.NoDesglosaIVA If ClienteNODesglosaIVA Then LtlClienteMsg.Text += "
    Cálculo sin desglose de IVA" End If ViewState("CargoUsado") = ObjCliente.CargoUsados ViewState("ClienteUsaProductoAlterno") = ObjCliente.UsaProductoAlterno Dim dr As DataRow = Nothing dr = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal = 1 And Estatus = 'Activo' ") If dr IsNot Nothing Then ViewState("MatCalle") = dr("Calle") ViewState("MatNoExt") = dr("NoExt") ViewState("MatNoInt") = dr("NoInt") ViewState("MatColonia") = dr("Colonia") ViewState("MatLocalidad") = dr("Localidad") ViewState("MatMunicipio") = dr("Municipio") ViewState("MatEstado") = dr("Estado") ViewState("MatPais") = dr("Pais") ViewState("MatCP") = dr("CP") End If 'HABILITA LA OPCION DE DIRECCION DE ENVIO If UsuarioActual.CveEmpresa.Contiene(1, 72, 119, 140, 172, 173, 174) OrElse UsuarioActual.Empresa.Funcionalidad(161) = "1" Then ' si tiene FNC:161, habilita carta porte trDireccionEnvio.Visible = True CargaDireccionesEnvio() End If If CveCliente = 239903 AndAlso UsuarioActual.CveEmpresa = 119 Then DdlMetodoPago33.Enabled = False 'ObjCliente.CveMetodoPago = 1 ' PUE, y que no se pueda modificar Else DdlMetodoPago33.Enabled = True End If Me.CveMetodoPago33Cliente = ObjCliente.CveMetodoPago Me.CveFormaPago33Cliente = ObjCliente.CveFormaPago CveUsoCFDICliente = ObjCliente.CveUsoCFDI PlazoCobranza = ObjCliente.PlazoCobranza PlazoCobranzaRemision = ObjCliente.PlazoCobranzaRemision If UsuarioActual.CveEmpresa.Contiene(72, 80) Then TxtFechaPago.ReadOnly = True Calendario.Enabled = False imgCalendario.Visible = False End If 'funcionalidad EnviarSMSTimbrado 'If CveVenta <= 0 And UsuarioActual.Empresa.Funcionalidad(152) <> "" And DdlTipoComprobante.SelectedValue = "Ing" Then ' If ObjCliente.CobranzaTelefono <> "" Then ' LblMensaje.Text = $"Se enviará mensaje SMS a {ObjCliente.CobranzaTelefono}" ' Else ' LblMensaje.Text = $"El Cliente no tiene teléfono para envío SMS " ' End If ' LblMensaje.Visible = True 'End If 'If Not ObjCliente.RFC = "XAXX010101000" Then ' TxtNumCtaPago.Text = ObjCliente.NumCtaPago 'End If 'Complementos 'COMERCIO EXTERIOR ViewState("AplicaComercioExterior") = ObjCliente.AplicaComercioExterior ViewState("CveTipoOperacion") = ObjCliente.CveTipoOperacion ViewState("CvePedimento") = ObjCliente.CvePedimento ViewState("CveIncoterm") = ObjCliente.CveIncoterm LblTipoOperacion.Text = ObjCliente.ClaveSATTipoOperacionDescripcion LblClavePedimento.Text = ObjCliente.ClaveSATPedimentoDescripcion If ObjCliente.AplicaComercioExterior Then ChkEmitirComercioExterior.Checked = True ChkEmitirComercioExterior_CheckedChanged(ChkEmitirComercioExterior, EventArgs.Empty) 'DdlSATMotivoTraslado.DataSource = GlobalDTSATMotivoTraslado 'DdlSATMotivoTraslado.DataBind() 'DdlSATMotivoTraslado.SelectedValueExist(ObjCliente.CveMotivoTraslado) DdlIncoterm.Items.Clear() DdlIncoterm.DataSource = GlobalDTIncoterm() DdlIncoterm.DataBind() DdlIncoterm.SelectedValueExist(ObjCliente.CveIncoterm) CargaPais() DdlComExtPais.SelectedValueExist(ObjCliente.CvePais) CargaEstado() DdlComExtEstado.SelectedValueExist(ObjCliente.CveEstado) If ObjCliente.ClaveSATPais = "MEX" Then CargaMunicipio() CargaColonia() Else If ObjCliente.ClaveSATPais.Contiene("USA", "CAN") Then DdlComExtEstado.Visible = True Else TxtComExtEstado.Visible = True : DdlComExtEstado.Visible = False End If TxtComExtEstado.Text = ObjCliente.ComExtEstado TxtComExtMunicipio.Text = ObjCliente.ComExtMunicipio TxtComExtColonia.Text = ObjCliente.ComExtColonia TxtComExtMunicipio.Visible = True : TxtComExtColonia.Visible = True End If TxtNumRegIdTrib.Text = ObjCliente.NumRegIdTrib TxtDestinatarioNombre.Text = ObjCliente.Nombre TxtComExtCalle.Text = ObjCliente.DtResultados.Rows(0)("ComExtCalle").ToString() TxtComExtNumero.Text = ObjCliente.DtResultados.Rows(0)("ComExtNumExt").ToString() TxtComExtCP.Text = ObjCliente.DtResultados.Rows(0)("ComExtCP").ToString() 'en comercio exterior como regla de timbrado se utiliza el TC del día anterior TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate.AddDays(-1)).ToString() End If 'FEMSA ViewState("AplicaFEMSA") = ObjCliente.AplicaFEMSA TxtFEMSA_NumSociedad.Text = ObjCliente.FEMSA_NumSociedad TxtFEMSA_NumProveedor.Text = ObjCliente.FEMSA_NumProveedor TxtFEMSA_Mail.Text = ObjCliente.FEMSA_Mail 'DETALLISTA ViewState("AplicaDetallista") = ObjCliente.AplicaDetallista TxtDet_GLNComprador.Text = ObjCliente.Detallista_GLNComprador TxtDet_Departamento.Text = ObjCliente.Detallista_Departamento TxtDet_GLNVendedor.Text = ObjCliente.Detallista_GLNVendedor TxtDet_NumProv.Text = ObjCliente.Detallista_NumProveedor Txt7ElevenNumProveedor.Text = ObjCliente.SevenEleven_NumProveedor.Trim ViewState("AplicaFord") = ObjCliente.AplicaFord TxtFordGSDB.Text = ObjCliente.Ford_GSDB If ObjCliente.DtResultados(0)("CveVendedor").ToString().ToEntero() > 0 Then CveVendedorCliente = ObjCliente.DtResultados(0)("CveVendedor").ToString().ToEntero() End If 'SI EL CLIENTE NO TIENE VENDEDOR SELECCIONAMOS EL DEL USUARIO 'If Not DdlVendedor.SelectedValue.ToEntero() > 0 Then ' DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor.ToString()) 'End If 'If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then ' DdlVendedor.Enabled = False 'End If CargaVendedores() UpFacturar.Update() 'SI LA VENTA YA ESTA REGISTRADA NO DEBE HABILITAR ACCIONES If CveVenta <= 0 Then Dim EsModuloCotizacion As Boolean = False If Request("Op") IsNot Nothing AndAlso Request("Op").ToString() = "Cot" Then EsModuloCotizacion = True End If If Not EsModuloCotizacion Then LnkRemisiones.Visible = If(UsuarioActual.TienePermisoProceso(199), True, False) : LnkOCs.Visible = True : LnkCotizaciones.Visible = True : LnkPedido2SinFacturar.Visible = True : InicializaAplicarNCMasiva() If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(60) Then LnkCotizaciones.Visible = False LnkPedido2SinFacturar.Visible = False LnkRemisiones.Visible = False LnkOCs.Visible = False End If End If End If If UsuarioActual.Empresa.CvePlataforma = 2 Then LnkOCs.Visible = False 'If UsuarioActual.Empresa.UsaInventarios Then ' RblTipo.Items.Remove(RblTipo.Items.FindByValue("1")) ' RblTipo.Items.Remove(RblTipo.Items.FindByValue("2")) 'End If UpnTools.Update() 'UpRemisionesFacturas.Update() If Not CveVenta > 0 Then If ObjCliente.DtResultados.Rows.Count > 0 Then If UsuarioActual.TienePermisoProceso(152) Then DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) DdlSubProyectoDatos.Enabled = False Else DdlSubProyectoDatos.SelectedValueExist(UsuarioActual.CveSubProyecto) ' DdlSubProyectoDatos.SelectedValueExist(ObjCliente.CveSubProyecto) End If 'RECARGA LOS VALORES DE LA SUCURSAL CambiaSucursal() UpParametros.Update() End If End If DdlSucursalCliente.Items.Clear() Dim dtts As DataTable = GlobalDTClientesSucursales(UsuarioActual.CveEmpresa, CveCliente).FiltraParametros("CveClienteSucursal > 0") If dtts IsNot Nothing AndAlso dtts.Rows.Count > 0 Then DdlSucursalCliente.DataSource = dtts DdlSucursalCliente.Items.Insert(0, New ListItem("Matriz", "-1")) trsucursalcliente.Visible = True DdlSucursalCliente.DataBind() Else trsucursalcliente.Visible = False DdlSucursalCliente.DataSource = Nothing End If 'SI UTILIZA EL RFC GENERICO PERMITE FACTURAR SUCURSAL 'If (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") AndAlso (CveVenta <= 0 OrElse NuevaFactura = 1) AndAlso LblRFC.Text.Trim() = "XAXX010101000" Then ' HabilitarFacturacionSucursal() 'End If 'CargaFolios() If UsuarioActual.CveEmpresa = 13 Then CargaContratosCliente(CveCliente) Else CargaDatosEstimaciones(CveCliente) End If If ObjCliente.GetClienteImpuestosLocales(CveCliente) AndAlso CveVenta <= 0 Then 'se cargan impuestos locales Dim DtClienteImpuesto As DataTable = ObjCliente.DtResultados.FiltraParametros("Seleccionado = 1", "Orden") If DtClienteImpuesto IsNot Nothing AndAlso DtClienteImpuesto.Rows.Count > 0 Then ' If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Else TmpDTImpuestos.Rows.Clear() TmpDTImpuestos = DtClienteImpuesto GvImpuestosLocales2.DataSource = TmpDTImpuestos GvImpuestosLocales2.DataBind() If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then TrOtros.Visible = True GvImpuestosLocales2.Visible = True TrOtros.Style.Add("display", "") Else TrOtros.Visible = False GvImpuestosLocales2.Visible = False End If DtClienteImpuesto.Dispose() End If UpImpuestos.Update() End If If DdlTipoComprobante.SelectedValue.Contiene("Cot") Then TrAtencionA.Visible = True TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False tdTelefonoGen.Visible = False tdTxtTelefonoGen.Visible = False ElseIf ObjCliente.RFC = "XAXX010101000" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ret") Then TrAtencionA.Visible = True TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False tdTelefonoGen.Visible = True tdTxtTelefonoGen.Visible = True Else 'TrAtencionA.Visible = False TrDireccion.Visible = True TrCiudad.Visible = True TrRFC.Visible = True tdTelefonoGen.Visible = False tdTxtTelefonoGen.Visible = False TxtAtencionA.Text = "" TxtTelefonoGenerico.Text = "" End If TrAtencionA.Visible = True tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") tdFechaVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") LbAgregar.Enabled = True CargarAlmacenes() 'RMF. 2024.12.07, verificar cuando se debe de cargar. 'CargaDocumentacionCliente() If UsuarioActual.CveEmpresa.Contiene(72, 80, 1, 119) Then BtnEmitirImprimir.OnClientClick = $"ValidaGuardar({ If(ImprimeNombreSucursal = True, 1, 0)});" BtnEmitirImprimir.Attributes.Add("data-toggle", "confirmation") BtnEmitirImprimir.Attributes.Add("data-popout", "true") BtnEmitirImprimir.Attributes.Add("data-original-title", "confirmar") BtnEmitirImprimir.Attributes.Add("data-btn-ok-label", "Guardar") BtnEmitirImprimir.Attributes.Add("data-html", "true") End If 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO If DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") Or TipoContrato >= 0 Then 'SI VIENE DE PEDIDO DE AF DESDE CONTRATO NO BLOQUEA CUANDO EL CLIENTE ESTA INACTIVO BtnEmitirImprimir.Visible = True TrVistaPrevia.Visible = True 'Else ' BtnEmitirImprimir.Visible = EstatusCliente ' TrVistaPrevia.Visible = EstatusCliente End If TrVistaPrevia.Visible = True TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString ' si es empresa acumuladores If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then CargaPorcentajeMarcas() End If 'CargaFacturasARelacionar() UpFacturar.Update() UpEstatus.Update() UpPS.Update() UpParametros.Update() UPCondicionesPago.Update() UpDetalle.Update() UpComplementos.Update() UpCliente.Update() UpAplicarNC.Update() UpINV.Update() UPPVentas.Update() UPComplementosSAT.Update() UpnTools.Update() Else Alert("Ocurrió un error al cargar los datos del cliente. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If CveAlmacenAsignado = ObjCliente.CveAlmacenAsignado End If ObjCliente.Dispose() If CveCliente > 0 Then CargaAnticipos(CveCliente) If UsuarioActual.Empresa.Funcionalidad(185) = "1" Then LnkRecargaAnticipos.Visible = True End If UpAnticipos.Update() End If If CveCliente > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveVenta <= 0 Then DivVentasUsados.Visible = True Dim ObjClientes As New ClsClientes If ObjClientes.GetHistorialVentas(CveCliente, UsuarioActual.CveEmpresa, CveClienteSucursal:=-1, TipoDocto:="Ing", CveEstatusFactura:=-1) Then DdlVentaUsado.DataSource = ObjClientes.DtResultados.FiltraParametros("UsadoMarcado = 0") End If ObjClientes.Dispose() DdlVentaUsado.DataBind() DdlVentaUsado.Items.Insert(0, New ListItem("No Aplica", "-1")) UpModalRemisionesNC.Update() End If If RequiereOC Then Dim Documentacion As String = "" 'RegistraScript("$('#DivDocsCliente').modal({ backdrop: 'static', keyboard: false });", "ModalArchivos") Dim Count As Integer = 0 For Each GvRow As GridViewRow In GvDocumentosCliente.Rows If GvRow.DataKey("Orden").ToEntero() = 1 Then IndexDocumentoCliente = Count Documentacion = GvRow.DataKey("Documentacion").ToString() AdjuntoDocumentacion = GvRow.DataKey("Adjunto").ToString() Exit For End If Count = +1 Next LtlModalTitleUploadDocumentoCliente.Text = "Subir " & Documentacion BtnModalClienteDocumentoCancelar.Visible = False If CveVenta <= 0 Then LnkUploadDocumentacionCliente.Visible = UsuarioActual.Empresa.Funcionalidad(382) <> "1" End If UpModalTitleUploadDocumentoCliente.Update() UpModalButtonUploadDocumentoCliente.Update() UPObservaciones.Update() End If BloqueaCondicionesPago() DeshabilitarAplicarNotaDeCredito(LblRFC.Text) Dim CveVentaRef As Integer = -1 If Me.CveVenta > 0 AndAlso Not EsCreaApartirDe Then CveVentaRef = Me.CveVenta End If CargaRestriccionesCreditoCliente(True, CveVentaRef) Dim CveCotizacion As Integer = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() If (CveVenta <= 0 AndAlso CveCotizacion <= 0) Or EsCreaApartirDe Or NuevaFactura = 1 OrElse ModalidadEdicion Then 'CveMetodoPagoCliente = ObjCliente.CveMetodoPago If UsuarioActual.Empresa.Funcionalidad(589) = "1" Then VerificaFormaPago() Else DdlMetodoPago33.SelectedValueExist(Me.CveMetodoPago33Cliente) CambiaMetodoPago33() DdlFormaPago33.SelectedValueExist(Me.CveFormaPago33Cliente) End If DdlUsoCFDI.SelectedValueExist(CveUsoCFDICliente) 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then 'S01 Sin efectos fiscales. DdlUsoCFDI.SelectedValueExist("23") DdlUsoCFDI.Enabled = False RegimenFiscalCliente = "616" ClienteCodigoRegimenFiscal = "616" Else If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then DdlUsoCFDI.Enabled = True End If If NuevaFactura = 1 Then DdlUsoCFDI.Enabled = True End If End If End If If CveVenta <= 0 Then CalculaLineasAdicionales() HabilitaRemisionPublicoGeneral = 0 HabilitarRemisionesPublicoGeneral() If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then If Opcion = "Cot" Then DdlTipoComprobante.SelectedValueExist("Cot") Else 'SI ES REFACTURACION NO DEBE CAMBIAR EL TIPÖ DOCTO If Not (Request("NuevaFactura") IsNot Nothing AndAlso Request("NuevaFactura").ToString() = "1") Then If Not String.IsNullOrEmpty(UsuarioActual.CveTipoDocumento) Then DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) DdlTipoComprobante_SelectedIndexChanged(DdlTipoComprobante, Nothing) End If End If End If End If End If If UsuarioActual.CveEmpresa.Contiene(186, 189) Then TxtCantidad.Focus() End If 'SI ES REFACTURACION HABILITAR LOS CAMPOS If NuevaFactura = 1 Then DdlMetodoPago33.Enabled = True DdlFormaPago33.Enabled = True End If Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() 'If UsuarioActual.Empresa.Funcionalidad(705) = "1" Then ' Using ObjVentas As New ClsVentas ' If ObjVentas.GetLineasAdicionales(-1, CveCliente, -1, -1, DdlMoneda.SelectedValue.ToEntero(), MinFecha, MaxFecha, 0, UsuarioActual.CveEmpresa) Then ' If ObjVentas.DtResultados.Rows.Count > 0 Then ' TrLineaAdicional.Visible = True ' End If ' End If ' End Using 'End If End Sub Private Sub VerificaFormaPago() If UsuarioActual.Empresa.Funcionalidad(589) = "1" Then 'SI EL METODO DEL CLIENTE ES PUE, PERMITE CREDITO Y LO TIENE HABILITADO, EL METODO SE CAMBIARA A PPD If Me.CveMetodoPago33Cliente = 1 AndAlso Me.PermiteCredito AndAlso RBLPago.Items(0).Enabled AndAlso TieneBloqueoPorCreditoVencimiento = 0 Then Me.CveMetodoPago33Cliente = 3 End If 'SI EL METODO DE PAGO ES PUE, SELECCIONA CONTADO If Me.CveMetodoPago33Cliente = 1 Then RBLPago.SelectedValue = "2" ElseIf Me.CveMetodoPago33Cliente = 3 Then RBLPago.SelectedValue = "1" 'SI ESTA BLOQUEADO EL CREDITO, DEJAR CONTADO If Not RBLPago.Items(0).Enabled Then RBLPago.SelectedValue = "2" End If End If RBLPago_SelectedIndexChanged(RBLPago, Nothing) UPCondicionesPago.Update() End If End Sub Private Sub HabilitarRemisionesPublicoGeneral() If UsuarioActual.Empresa.Funcionalidad(381).Trim() <> "" Then 'SI ESTA BLOQUEADO POR AUTORIZACION, HABILITAR LA OPCION DE REMISION PARA PUBLICO EN GENERAL If UsuarioActual.Empresa.Funcionalidad(381).Trim() = CveCliente.ToString() Then Dim DeshabilitarAutorizacion As Boolean = CBool(GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimeroValor("DeshabilitaAutorizacion")) 'SI ESTA BLOQUEADO POR AUTORZACION O QUE TENGA LA OPCION DE AUTORIZACIONES Y NO SEA DEL MODULO DE COTIZACIONES If (DdlTipoComprobante.SelectedValue.Contiene("PA") OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso DdlTipoComprobante.Items.FindByValue("PA") IsNot Nothing AndAlso Not IfNull(Request("Op"), "").ToString() = "Cot")) AndAlso DeshabilitarAutorizacion Then If DdlTipoComprobante.Items.FindByValue("Rem") Is Nothing Then DdlTipoComprobante.Items.Insert(0, New ListItem("Remisión", "Rem")) End If DdlTipoComprobante.SelectedValueExist("Rem") HabilitaRemisionPublicoGeneral = 1 End If 'SI TUVO HABILITADO EL BLOQUEO POR AUTORIZACION PERO DESPUES SE CAMBIO MANUAL A REMISION If DdlTipoComprobante.SelectedValue.Contiene("Rem") AndAlso TieneBloqueoPorAutorizacion = 1 Then HabilitaRemisionPublicoGeneral = 1 End If 'SI TIENE LA HABILITACION DE REMISION ACTIVA Y LA SUCURSAL NO LO PERMITE If Not DeshabilitarAutorizacion AndAlso HabilitaRemisionPublicoGeneral = 1 Then HabilitaRemisionPublicoGeneral = 0 DdlTipoComprobante.SelectedValueExist("PA") If DdlTipoComprobante.Items.FindByValue("Rem") IsNot Nothing Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) End If End If UpParametros.Update() End If Else HabilitaRemisionPublicoGeneral = 0 End If End Sub Private Function ValidaImportePublicoGeneral() As Boolean Dim retorno As Boolean = False If DdlTipoComprobante.SelectedValue = "Rem" AndAlso HabilitaRemisionPublicoGeneral = 1 AndAlso UsuarioActual.Empresa.Funcionalidad(381).Trim() = CveCliente.ToString() Then Dim Total As Decimal = TxtTotal.Text.ToDecimal() If DdlMoneda.SelectedValue = "1" Then If Total <= 5000D Then retorno = True Else Alert("No puede generar una remisión con un valor mayor a 5,000 MXN. Debe cambiar el tipo de documento a 'Autorización'", TipoMensaje.MsgAdvertencia) End If End If If DdlMoneda.SelectedValue = "2" Then If TxtTipoCambio.Text.ToDecimal() > 0 Then Dim TotalPesos As Decimal = (Total * TxtTipoCambio.Text.ToDecimal()) If TotalPesos <= 5000D Then retorno = True Else Alert($"No puede generar una remisión con un valor mayor a {(5000 / TxtTipoCambio.Text.ToDecimal()).RoundSQL(2)} USD. Debe cambiar el tipo de documento a 'Autorización'", TipoMensaje.MsgAdvertencia) End If Else Alert("No se ha especificado un tipo de cambio", TipoMensaje.MsgAdvertencia) End If End If Else retorno = True End If Return retorno End Function Private Sub CargaRelacionadasPendientes() If CveVenta > 0 AndAlso UsuarioActual.TienePermisoProceso(321) Then Me.TmpDTFacturasRelacionadas = New DataTable() Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("CveVenta", GetType(Integer))) Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("SerieFolio", GetType(String))) Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("FolioFiscal", GetType(String))) Using ObjVentas As New ClsVentas If ObjVentas.GetVentasRelacionadas(CveVenta, UsuarioActual.CveEmpresa) AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then 'SI LA FACTURA NO SE TIMBRO QUE VUELVA A INTENTAR FACTURAR 'If LblSeTimbro.Text = "No" Then ' Me.AplicaRelacionManual = True 'End If For Each RowRelacionada As DataRow In ObjVentas.DtResultados.Rows Dim Row As DataRow = TmpDTFacturasRelacionadas.NewRow() Row("CveVenta") = RowRelacionada("CveVentaRelacionada").ToString().ToEntero() Row("SerieFolio") = RowRelacionada("SerieFolio").ToString() Row("FolioFiscal") = RowRelacionada("FolioFiscal").ToString() Me.TmpDTFacturasRelacionadas.Rows.Add(Row) Next End If End Using DivDdlFacturaRela.Visible = False BtnAgregarFacturasRelaciondas.Visible = False DdlTipoRelacionARelacionar.Enabled = False GvFacturasRelacionadas.Columns(2).Visible = False GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas GvFacturasRelacionadas.DataBind() UpFacturasRelacionadas.Update() End If End Sub Private Sub CargaFacturasARelacionar() Using ObjClientes As New ClsClientes Dim dtt As New DataTable If ObjClientes.GetHistorialVentas(Me.CveCliente, UsuarioActual.CveEmpresa, TipoDocto:="Ing") Then dtt = ObjClientes.DtResultados End If If ObjClientes.GetHistorialVentas(Me.CveCliente, UsuarioActual.CveEmpresa, TipoDocto:="Ant") Then dtt.Merge(ObjClientes.DtResultados) End If DdlFacturaARelacionar.DataSource = dtt End Using DdlFacturaARelacionar.DataBind() If Not DdlFacturaARelacionar.Items.Contains(New ListItem("Seleccione", "-1")) Then DdlFacturaARelacionar.Items.Insert(0, New ListItem("Seleccione", "-1")) End If UpFacturasRelacionadas.Update() End Sub Protected Sub CreaTmpFacturasRelacionadas() Dim AplicaRelacionManual As Boolean = CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual OrElse Me.NuevaFactura = 1 If AplicaRelacionManual Then Me.TmpDTFacturasRelacionadas = New DataTable() Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("CveVenta", GetType(Integer))) Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("SerieFolio", GetType(String))) Me.TmpDTFacturasRelacionadas.Columns.Add(New DataColumn("FolioFiscal", GetType(String))) End If End Sub Protected Sub LnkAgregarFacturaRelacionada_Click(sender As Object, e As EventArgs) Dim AplicaRelacionManual As Boolean = CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual OrElse Me.NuevaFactura = 1 If AplicaRelacionManual Then If Me.TmpDTFacturasRelacionadas Is Nothing Then CreaTmpFacturasRelacionadas() End If If TmpDTFacturasRelacionadas.COUNT("CveVenta", $"CveVenta ={DdlFacturaARelacionar.SelectedValue.ToEntero()}") > 0 Then Alert("La factura ya fue agregada", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim Row As DataRow = TmpDTFacturasRelacionadas.NewRow() Row("CveVenta") = DdlFacturaARelacionar.SelectedValue.ToEntero() Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(DdlFacturaARelacionar.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa, VerificaAlmacen:=False) AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then Row("SerieFolio") = ObjVentas.DtResultados(0)("SerieFolio").ToString() Row("FolioFiscal") = ObjVentas.DtResultados(0)("FolioFiscal").ToString() End If End Using Me.TmpDTFacturasRelacionadas.Rows.Add(Row) GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas GvFacturasRelacionadas.DataBind() UpFacturasRelacionadas.Update() End If End Sub Protected Sub LnkAgregarFolioFiscalRelacionada_Click(sender As Object, e As EventArgs) Dim AplicaRelacionManual As Boolean = CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual OrElse Me.NuevaFactura = 1 If AplicaRelacionManual Then If Me.TmpDTFacturasRelacionadas Is Nothing Then CreaTmpFacturasRelacionadas() End If 'If TmpDTFacturasRelacionadas.COUNT("CveVenta", $"CveVenta ={DdlFacturaARelacionar.SelectedValue.ToEntero()}") > 0 Then ' Alert("La factura ya fue agregada", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If Dim idx As Integer = TmpDTFacturasRelacionadas.MIN("CveVenta", $"CveVenta <= 0").ToEntero() If idx = 0 Then idx = -1 End If Dim Row As DataRow = TmpDTFacturasRelacionadas.NewRow() Row("CveVenta") = idx - 1 Row("SerieFolio") = "SIN ASIGNAR" Row("FolioFiscal") = TxtFolioFiscalRelacionar.Text Me.TmpDTFacturasRelacionadas.Rows.Add(Row) GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas GvFacturasRelacionadas.DataBind() UpFacturasRelacionadas.Update() End If End Sub Protected Sub BtnAgregarFacturasRelaciondas_Click(sender As Object, e As EventArgs) Dim AplicaRelacionManual As Boolean = CveVenta <= 0 OrElse EsCreaApartirDe OrElse Me.AplicoNCFacturaActual OrElse Me.NuevaFactura = 1 If AplicaRelacionManual Then If Me.TmpDTFacturasRelacionadas Is Nothing OrElse Me.TmpDTFacturasRelacionadas.Rows.Count = 0 Then Me.AplicaRelacionManual = False Alert("No hay facturas para relacionar", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlTipoRelacionARelacionar.SelectedValue.ToEntero() <= 0 Then Me.AplicaRelacionManual = False Alert("Debe seleccionar un tipo de relación", TipoMensaje.MsgAdvertencia) Exit Sub End If Me.AplicaRelacionManual = True RegistraScript("$('#DivFacturasRelacionadas').modal('hide');", "R1") Alert("Las facturas seleccionadas se relacionaran con la factura nueva") End If UpFacturasRelacionadas.Update() End Sub Protected Sub LnkEliminarFacturaRelacionada_Click(sender As Object, e As EventArgs) Dim lnkRemove As LinkButton = DirectCast(sender, LinkButton) If Me.TmpDTFacturasRelacionadas.Rows.Count > 0 And lnkRemove.CommandArgument.ToString.Length > 0 Then Dim CveVenta As Integer = lnkRemove.CommandArgument.ToString.ToEntero Dim Drs As DataRow() = Me.TmpDTFacturasRelacionadas.Select(String.Format("CveVenta = {0}", CveVenta)) If Drs.Count > 0 Then Drs(0).Delete() End If Me.TmpDTFacturasRelacionadas.AcceptChanges() End If GvFacturasRelacionadas.EditIndex = -1 GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas GvFacturasRelacionadas.DataBind() UpFacturasRelacionadas.Update() End Sub Private Sub CargaRestriccionesCreditoCliente(Optional Alertas As Boolean = False, Optional CveVenta As Integer = -1) Dim ValorAutorizacion As String = UsuarioActual.Empresa.Funcionalidad(595) 'solo para bdh, que se generen NC If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then DdlSolCreditoTipoDocto.Items.Add(New ListItem("Nota de crédito", "Egs")) Me.Bloqueada = False 'OBLIGAR PAGO DE CONTADO SI EL CLIENTE NO PERMITE CREDITO If Not EsFilial AndAlso (Not UsuarioActual.Empresa.Funcionalidad(702).Contiene("1")) AndAlso Me.PermiteCredito = False AndAlso ((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot") AndAlso CveVenta < 1) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso EsCreaApartirDe) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) Then RBLPago.SelectedValue = "2" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) 'GENERAR UNA AUTORIZACIÓN SI EL CLIENTE NO PERMITE CREDITO If ValorAutorizacion = "1" AndAlso Not UsuarioActual.TienePermisoProceso(268) Then 'SI LLEGÓ POR LA OPCIÓN DE COTIZACIÓN NO DEBE DE RESTRINGUIR If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValue = "Cot" BtnGenerarRemision.Visible = False Else DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") DdlTipoComprobante.SelectedValue = "PA" TieneBloqueoPorAutorizacion = 1 End If TxtFechaPago.Text = NowADS().AddDays(PlazoCobranza).ToShortDateString DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) If Not UsuarioActual.TienePermisoProceso(325) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) End If DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False BtnsFacturar.Visible = False End If UPCondicionesPago.Update() 'CARGAR CREDITO DISPONIBLE AL GENERAR UNA FACTURA End If ''SI NO PERMITE CREDITO, SUGIERE CONTADO 'If (UsuarioActual.Empresa.Funcionalidad(702).Contiene("1")) AndAlso Not PermiteCredito AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem") AndAlso (CveVenta <= 0 OrElse EsCreaApartirDe)) Then ' RBLPago.SelectedValue = "2" 'End If If Me.PermiteCredito Then If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then Dim CreditoDispo As Decimal = GetSaldoCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) If CreditoDispo > 0 Then TrCreditoDisponible.Visible = True LblCreditoDisponible.Text = String.Format("{0:C}", CreditoDispo) LblPorcentajeCredito.Text = $"({PorcentajeCredito.FormatoNumero}%)" End If End If End If Dim tTipoDocto As String = "" If ValorAutorizacion = "3" Then tTipoDocto = "Rem" If Not EsFilial AndAlso (((DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot", "PA") AndAlso CveVenta <= 0) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot", tTipoDocto) AndAlso CveVenta > 0)) AndAlso RBLPago.SelectedValue = "1" AndAlso PermiteCredito) Then 'FUNCIONALIDAD 702 - NO VERIFICAR LIMITE DE CRÉDITO Y CANDADOS DE VENTA If Not UsuarioActual.Empresa.Funcionalidad(702) = "1" Then RBLPago.SelectedValue = "1" RBLPago_SelectedIndexChanged(RBLPago, Nothing) UPCondicionesPago.Update() Dim CreditoDispo As Decimal = GetSaldoCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) If CreditoDispo > 0 Then TrCreditoDisponible.Visible = True LblCreditoDisponible.Text = String.Format("{0:C}", CreditoDispo) If PorcentajeCredito > 80 Then LblPorcentajeCredito.Text = $"({PorcentajeCredito.FormatoNumero}%)" If Not UsuarioActual.TienePermisoProceso(268) AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "PA") OrElse (DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveVenta > 0)) AndAlso (Not UsuarioActual.Empresa.Funcionalidad(702).Contiene("2")) Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then 'si la cotización no debe de existir este canddado If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) 'RBLPago.SelectedValue = "2" 'RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() If Not EsCreaApartirDe AndAlso (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValueExist("Cot") Else If ValorAutorizacion = "1" Then DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") DdlTipoComprobante.SelectedValue = "PA" TieneBloqueoPorAutorizacion = 1 End If End If TxtFechaPago.Text = NowADS().AddDays(PlazoCobranza).ToShortDateString 'si llegó por la opción de cotización no debe de restringuir If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValue = "Cot" 'quito remisión y factura If ValorAutorizacion = "1" Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) If Not UsuarioActual.TienePermisoProceso(325) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) End If DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) If (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then BtnsFacturar.Visible = False End If End If Dim Bloqueo As Boolean = False Bloqueada = Bloqueo If Not DdlTipoComprobante.SelectedValue.Contiene("PA") AndAlso UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then Bloqueo = True End If 'SI EL CLIENTE ES DISTRIBUIDOR Y TIENE FACTURAS VENCIDAS, DEBE BLOQUEAR If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ClienteEsDistribuidor AndAlso Opcion.Contiene(2, 3) Then Bloqueo = True End If If Bloqueo AndAlso ValorAutorizacion = "2" Then Dim Autorizacion As Integer = 0 Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") Else RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() End If End If ObjVentas.Dispose() 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO If Autorizacion > 0 Then Bloqueo = False TieneBloqueoPorCreditoVencimiento = 0 Alert("El cliente tiene una autorización aprobada", TipoMensaje.ToastInformacion) End If LnkSolicitarCredito.Visible = True DdlTipoAutorizacion.SelectedValueExist("1") End If If Bloqueo AndAlso ValorAutorizacion = "3" Then ' autorización con vinculación a una venta registrada TrCredito1.Visible = True ChkSolicitudAutorizacionCredito.Checked = True LnkSolicitarCredito.Visible = True divModalidad2.Visible = False divModalidad3.Visible = True Me.Bloqueada = True End If 'SI ES AUTORIZACION DEBE PERMITIR GENERARLA If Bloqueo Then If DdlTipoComprobante.SelectedValue <> "Cot" Then BtnEmitirImprimir.Visible = False End If BtnsFacturar.Visible = False LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) BtnGenerarRemision.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then TieneBloqueoPorCreditoVencimiento = 1 End If End If Else ' el cliente tiene crédito disponible, no tiene bloqueo DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("PA")) Dim EsCotizacion As Boolean = False If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then EsCotizacion = True End If 'NO MODIFIQUE EL TipoComprobante If CveVenta <= 0 OrElse EsCreaApartirDe Then If UsuarioActual.TienePermisoProceso(199) Then DdlTipoComprobante.SelectedValueExistInsert("Rem", "Remisión") ' puede remisionar If UsuarioActual.TienePermisoProceso(60) Then DdlTipoComprobante.SelectedValueExistInsert("Ing", "Ingresos") 'puede facturar DdlTipoComprobante.SelectedValueExist(UsuarioActual.CveTipoDocumento) End If If EsCotizacion Then DdlTipoComprobante.SelectedValueExistInsert("Cot", "Cotización") End If TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString If EsCotizacion AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim Autorizacion As Integer = 0 Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") Else RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() End If End If ObjVentas.Dispose() 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO If Autorizacion > 0 Then BtnsFacturar.Visible = UsuarioActual.TienePermisoProceso(60) TieneBloqueoPorCreditoVencimiento = 0 End If End If 'SOLO HABILITAR PARA GENERAR NOTAS DE CREDITO If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then LnkSolicitarCredito.Visible = True If DdlSolCreditoTipoDocto.Items.FindByValue("Ing") IsNot Nothing Then DdlSolCreditoTipoDocto.Items.Remove(DdlSolCreditoTipoDocto.Items.FindByValue("Ing")) End If End If End If End If Else 'GENERAR AUTORIZACION SI TIENE EXCEDIO EL LIMITE DE CREDITO Select Case ValorAutorizacion Case "1" 'CREAR DOCUMENTO DE AUTORIZACION PA If Not UsuarioActual.TienePermisoProceso(268) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "Ant", "PA") AndAlso Not (UsuarioActual.Empresa.Funcionalidad(702).Contiene("2")) AndAlso UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then 'VERIFICAR CANDADOS DE VENTA, REMISIONES SIN FACTURAR, FACTURAS QUE NO TENGAN VENCIDAS Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then 'If Opcion = 1 Then ' BtnEmitirImprimir.Visible = False ' BtnsFacturar.Visible = False 'End If If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) Else If Alertas Then Alert("El cliente tiene su límite de crédito agotado.", TipoMensaje.MsgAdvertencia) End If 'RBLPago.SelectedValue = "2" 'RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() DdlTipoComprobante.SelectedValueExistInsert("PA", "Autorización") DdlTipoComprobante.SelectedValue = "PA" TieneBloqueoPorAutorizacion = 1 TxtFechaPago.Text = NowADS().AddDays(PlazoCobranza).ToShortDateString 'si llegó por la opción de cotización no debe de restringuir If IfNull(Request("Op"), "").ToString() = "Cot" OrElse (DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0) Then DdlTipoComprobante.SelectedValue = "Cot" DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) If Not UsuarioActual.TienePermisoProceso(325) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) End If DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) BtnsFacturar.Visible = False LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) BtnGenerarRemision.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False Else 'VERIFICAR LIMITE DE CREDITO If DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0 AndAlso RBLPago.SelectedValue = "1" Then If CreditoDispo < 0 Then BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False Alert("El límite de crédito se ha excedido", TipoMensaje.MsgAdvertencia) End If End If If DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0 Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ClienteEsDistribuidor AndAlso Opcion.Contiene(2, 3) Then TieneBloqueoPorCreditoVencimiento = 1 End If End If End If End If Case "2" 'Autorizacion desde una solicitud del catalogo de autorizaciones Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) Else If Alertas Then Alert("El cliente tiene su límite de crédito agotado.", TipoMensaje.MsgAdvertencia) End If LnkSolicitarCredito.Visible = True DdlTipoAutorizacion.SelectedValueExist("1") If Not UsuarioActual.TienePermisoProceso(268) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "PA") Then Dim Autorizacion As Integer = 0 Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") Else RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() End If End If ObjVentas.Dispose() 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO If Autorizacion <= 0 Then BtnEmitirImprimir.Visible = False TieneBloqueoPorCreditoVencimiento = 1 End If End If Case "3" ' autorización con vinculación a una venta registrada Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then If Alertas Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) Else If Alertas Then Alert("El cliente tiene su límite de crédito agotado.", TipoMensaje.MsgAdvertencia) End If TrCredito1.Visible = True ChkSolicitudAutorizacionCredito.Checked = True LnkSolicitarCredito.Visible = True divModalidad2.Visible = False divModalidad3.Visible = True Me.Bloqueada = True Case Else 'SI NO TIENE NINGUN TIPO DE AUTORIZACION CONFIGURADO 'VERIFICAR CANDADOS DE VENTA If DdlTipoComprobante.SelectedValue = "Cot" AndAlso CveVenta > 0 Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ClienteEsDistribuidor AndAlso Opcion.Contiene(2, 3) Then TieneBloqueoPorCreditoVencimiento = 1 End If End If End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then RBLPago.SelectedValue = "2" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) UPCondicionesPago.Update() Else 'este codigo no es temporal If Alertas Then Alert("El cliente tiene su límite de crédito agotado.", TipoMensaje.MsgAdvertencia) End If End Select End If End If Else 'VERIFICAR RESTRICCIONES DEL CLIENTE If Not EsFilial AndAlso UsuarioActual.Empresa.Funcionalidad(702).ToEntero() > 0 Then Dim ValidaRemision As Boolean = False If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then ValidaRemision = True End If Dim ValidaCondicionesCredito As Boolean = False 'SI ES UNA VENTA EXISTENTE If CveVenta > 0 Then If (DdlTipoComprobante.SelectedValue = "Cot") AndAlso RBLPago.SelectedValue = "2" Then ValidaCondicionesCredito = True End If If (ValidaRemision AndAlso DdlTipoComprobante.SelectedValue = "Rem") AndAlso RBLPago.SelectedValue = "1" Then ValidaCondicionesCredito = True End If Else 'SI ES VENTA NUEVA VALIDA AUNQUE NO PERMITA CREDITO If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Cot") Then ValidaCondicionesCredito = True End If End If End If If ValidaCondicionesCredito Then Dim ValidaCliente As Boolean = True If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (Me.CveCliente = UsuarioActual.Empresa.Funcionalidad(714).ToEntero() OrElse Me.PermiteCredito) Then ValidaCliente = False End If If ValidaCliente Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim BloquearCliente As Boolean = False 'CREDITO NO SUFICIENTE If Opcion = 3 Then 'Dim CreditoDispo As Decimal = GetSaldoCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) 'If CreditoDispo < 0 AndAlso RBLPago.SelectedValue = "1" Then ' BloquearCliente = True 'End If BloquearCliente = True 'FACTURAS CON VENCIMIENTO ElseIf Opcion = 2 Then BloquearCliente = True End If If BloquearCliente Then Dim Autorizacion As Integer = 0 Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero, "Ing", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") Else RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Ing'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then Autorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() End If End If ObjVentas.Dispose() 'SI NO TIENE AUTORIZACION, MANTIENE EL BLOQUEO POR CONDICIONES DE CREDITO If Opcion > 0 AndAlso Autorizacion <= 0 Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False If DdlTipoComprobante.SelectedValue <> "Cot" Then BtnEmitirImprimir.Visible = False End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ClienteEsDistribuidor AndAlso Opcion.Contiene(2, 3) Then TieneBloqueoPorCreditoVencimiento = 1 End If End If End If Else If Opcion > 0 Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ClienteEsDistribuidor AndAlso Opcion.Contiene(2, 3) Then TieneBloqueoPorCreditoVencimiento = 1 End If End If End If End If End If End If End If UPPCreditoDisponible.Update() 'SOLO VERIFICA VENCIMIENTOS If Not EsFilial AndAlso UsuarioActual.Empresa.Funcionalidad(702).Contiene("2") Then Dim ValidaCliente As Boolean = False If (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") AndAlso (Me.CveVenta <= 0 OrElse EsCreaApartirDe)) OrElse ((DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso (Me.CveVenta > 0 AndAlso Not EsCreaApartirDe))) Then ValidaCliente = True End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (Me.CveCliente = UsuarioActual.Empresa.Funcionalidad(714).ToEntero()) Then ValidaCliente = False End If 'SI ES FACTURA, REMISION o FACTURACION DE COTIZACIONES If ValidaCliente Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa, TipoVerificacion:=2) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion = 2 Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) RBLPago.SelectedValue = "2" RBLPago.Items(0).Enabled = False RBLPago_SelectedIndexChanged(Nothing, Nothing) 'BtnEmitirImprimir.Visible = False 'BtnsFacturar.Visible = False 'BtnGenerarRemision.Visible = False 'TieneBloqueoPorCreditoVencimiento = 1 End If End If End If If EsFilial AndAlso Alertas Then Dim Vta As New ClsVentas Dim Opcion As Integer = Vta.ObtenerClienteLimitesVenta(CveCliente, UsuarioActual.CveEmpresa) Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", Vta.SerieVenta) Vta.Dispose() If Opcion > 0 Then Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) End If End If 'Puede hacer pedido If CveVenta <= 0 Then If Not UsuarioActual.TienePermisoProceso(177) And Not EsVentaMedica Then If DdlTipoComprobante.Items.FindByValue("Ped") IsNot Nothing Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ped")) End If End If End If 'SOLO HABILITAR PARA GENERAR NOTAS DE CREDITO If UsuarioActual.Empresa.Funcionalidad(595) = "2" AndAlso Not LnkSolicitarCredito.Visible Then LnkSolicitarCredito.Visible = True If DdlSolCreditoTipoDocto.Items.FindByValue("Ing") IsNot Nothing Then DdlSolCreditoTipoDocto.Items.Remove(DdlSolCreditoTipoDocto.Items.FindByValue("Ing")) End If End If If DdlTipoComprobante.SelectedValue.Contiene("Rem", "PeC", "PA", "Ped") Then 'ENVIO DE FACTURA ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True If CveVenta > 0 AndAlso EnviarCorreoCliente Then ChkEnviarFactura.Checked = EnviarCorreoCliente Else ChkEnviarFactura.Checked = EnviarCorreoCliente ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjClie As New ClsClientes If ObjClie.GetClienteInformacionCompleta(CveCliente, UsuarioActual.CveEmpresa) Then If Not CBool(ObjClie.DtResultados.FiltroPrimeroValor("InformacionCompleta")) Then Dim OpcionMsg As String = String.Format("El Cliente se encuentra bloqueado por la siguiente razón:

    {0}", "Información incompleta") Alert(OpcionMsg, TipoMensaje.MsgAdvertencia) BtnEmitirImprimir.Visible = False BtnsFacturar.Visible = False BtnGenerarRemision.Visible = False TieneBloqueoPorCreditoVencimiento = 1 End If End If ObjClie.Dispose() End If End Sub Private Sub CargaClienteSucursal(CveClienteSuc As Integer, Optional ByRef ObjVentas As ClsVentas = Nothing) Me.ClienteSucursal = Nothing Me.FacturarSucursal = False LtlTitleRFCSucursal.Text = "" LtlRFCSucursal.Text = "" Dim ObjCliente As New ClsClientes If CveClienteSuc > 0 Then If ObjCliente.GetSucursales(CveCliente, CveClienteSuc) Then If ObjCliente.DtResultados.Rows.Count > 0 Then Dim Correo As String = ObjCliente.DtResultados.Rows(0)("Correo").ToString() If Correo.Trim.Length > 0 Then ViewState("Mail") = Correo End If LblDireccion.Text = ObjCliente.DtResultados.Rows(0)("Direccion").ToString() LblColonia.Text = ObjCliente.DtResultados.Rows(0)("Colonia").ToString() LblCiudad.Text = ObjCliente.DtResultados.Rows(0)("Ciudad").ToString() LblEstado.Text = ObjCliente.DtResultados.Rows(0)("Estado").ToString() 'TxtNumCtaPago.Text = ObjCliente.DtResultados.Rows(0)("NumCtaPago").ToString() LblTelefono.Text = ObjCliente.DtResultados.Rows(0)("Telefono").ToString() ViewState("CliLocalidad") = ObjCliente.DtResultados.Rows(0)("Localidad").ToString() ViewState("CliPais") = ObjCliente.DtResultados.Rows(0)("Pais").ToString() ViewState("CliNoExt") = ObjCliente.DtResultados.Rows(0)("NoExt").ToString() ViewState("CliNoInt") = ObjCliente.DtResultados.Rows(0)("NoInt").ToString() Me.CveVendedorClienteSucursal = ObjCliente.DtResultados.Rows(0)("CveVendedor").ToString().ToEntero() ViewState("CveClienteSucursal") = ObjCliente.DtResultados(0)("CveClienteSucursal").ToString() ViewState("CliCorreoCot") = ObjCliente.DtResultados.Rows(0)("CorreoCotizacion").ToString() If ObjCliente.DtResultados.Rows(0)("Estatus").ToString() <> "Activo" Then RBLPago.Items(0).Enabled = False Alert("La Sucursal/Departamento del cliente se encuentra inactivo", TipoMensaje.MsgAdvertencia) Else RBLPago.Items(0).Enabled = True Dim CreditoDispo As Decimal = GetSaldoCreditoDisponible(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero(), ObjVentas) TrCreditoDisponible.Visible = True LblCreditoDisponible.Text = String.Format("{0:C}", CreditoDispo) UPPCreditoDisponible.Update() UpParametros.Update() End If 'SI EL CLIENTE TIENE RFC GENERICO Y LA SUCURSAL TIENE RFC DEBE FACTURAR LA SUCURSAL If (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") AndAlso LblRFC.Text.Trim() = "XAXX010101000" AndAlso Not String.IsNullOrEmpty(ObjCliente.DtResultados.Rows(0)("RFC").ToString()) Then Me.FacturarSucursal = True LtlTitleRFCSucursal.Text = "RFC:" LtlRFCSucursal.Text = ObjCliente.DtResultados.Rows(0)("RFC").ToString() Me.ClienteSucursal = New Modelos.SucursalModel Me.ClienteSucursal.Nombre = ObjCliente.DtResultados.Rows(0)("SucursalCliente").ToString() Me.ClienteSucursal.RFC = ObjCliente.DtResultados.Rows(0)("RFC").ToString() Me.ClienteSucursal.NoExt = CliNoExt Me.ClienteSucursal.NoInt = CliNoInt Me.ClienteSucursal.Localidad = CliLocalidad Me.ClienteSucursal.Direccion = LblDireccion.Text Me.ClienteSucursal.Colonia = LblColonia.Text Me.ClienteSucursal.Municipio = LblCiudad.Text Me.ClienteSucursal.Estado = LblEstado.Text Me.ClienteSucursal.CP = LblCP.Text Me.ClienteSucursal.Pais = CliPais Me.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() Me.ClienteSucursal.TelefonoSucursal = LblTelefono.Text Me.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") Me.ClienteSucursal.ImprimeNombreSucursal = ImprimeNombreSucursal.ToString() End If If CveVenta <= 0 Then 'CveMetodoPagoCliente = ObjCliente.DtResultados.Rows(0)("CveMetodoPago").ToString().ToEntero() DdlMetodoPago33.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveMetodoPago33").ToString()) DdlMetodoPago33_SelectedIndexChanged(DdlMetodoPago33, EventArgs.Empty) DdlFormaPago33.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveFormaPago33").ToString()) DdlUsoCFDI.SelectedValueExist(ObjCliente.DtResultados.Rows(0)("CveUsoCFDI").ToString()) 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then 'S01 Sin efectos fiscales. DdlUsoCFDI.SelectedValueExist("23") DdlUsoCFDI.Enabled = False RegimenFiscalCliente = "616" ClienteCodigoRegimenFiscal = "616" Else If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then DdlUsoCFDI.Enabled = True End If End If End If If CveVenta < 0 Then TxtAtencionA.Text = ObjCliente.DtResultados.Rows(0)("Contacto").ToString() End If Else Alert("No se pudieron cargar los datos de la sucursal", TipoMensaje.MsgAdvertencia) End If Else If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, TipoCliente:=-1) Then If ObjCliente.DtResultados.Rows.Count > 0 Then ViewState("Mail") = If(DdlTipoComprobante.SelectedValue = "Cot", ObjCliente.MailCotizacion, ObjCliente.Mail) LblDireccion.Text = ObjCliente.Direccion LblColonia.Text = ObjCliente.Colonia LblCiudad.Text = ObjCliente.Ciudad LblEstado.Text = ObjCliente.Estado LblCP.Text = ObjCliente.CP LblTelefono.Text = ObjCliente.Telefono Me.CveVendedorClienteSucursal = -1 Me.CveVendedorCliente = ObjCliente.DtResultados.Rows(0)("CveVendedor").ToString().ToEntero() ViewState("CliNoExt") = ObjCliente.NoExt ViewState("CliNoInt") = ObjCliente.NoInt PlazoCobranza = ObjCliente.PlazoCobranza Dim CveCotizacion As Integer = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() If CveVenta <= 0 AndAlso CveCotizacion <= 0 Then 'CveMetodoPagoCliente = ObjCliente.CveMetodoPago DdlMetodoPago33.SelectedValueExist(ObjCliente.CveMetodoPago) DdlMetodoPago33_SelectedIndexChanged(DdlMetodoPago33, EventArgs.Empty) DdlFormaPago33.SelectedValueExist(ObjCliente.CveFormaPago) DdlUsoCFDI.SelectedValueExist(ObjCliente.CveUsoCFDI) 'SI ES RFC GENERICO NO TIENE OBLIGACIONES FISCALES If LblRFC.Text.Contiene("XAXX010101000", "XEXX010101000") Then 'S01 Sin efectos fiscales. DdlUsoCFDI.SelectedValueExist("23") DdlUsoCFDI.Enabled = False RegimenFiscalCliente = "616" ClienteCodigoRegimenFiscal = "616" Else If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then DdlUsoCFDI.Enabled = True End If End If End If End If End If End If ''SI LA SUCURSAL DEL CLIENTE NO TIENE VENDEDOR SELECCIONAMOS EL DEL USUARIO 'If Not DdlVendedor.SelectedValue.ToEntero() > 0 Then ' DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor.ToString()) 'End If CargaVendedores() 'SI LA VENTA YA ESTA REGISTRADA NO DEBE HABILITAR ACCIONES If CveVenta <= 0 Then Dim EsModuloCotizacion As Boolean = False If Request("Op") IsNot Nothing AndAlso Request("Op").ToString() = "Cot" Then EsModuloCotizacion = True End If If Not EsModuloCotizacion Then LnkRemisiones.Visible = If(UsuarioActual.TienePermisoProceso(199), True, False) : LnkOCs.Visible = True : LnkCotizaciones.Visible = True : LnkPedido2SinFacturar.Visible = True : InicializaAplicarNCMasiva() If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(60) Then LnkCotizaciones.Visible = False LnkPedido2SinFacturar.Visible = False LnkRemisiones.Visible = False LnkOCs.Visible = False End If End If End If ObjCliente.Dispose() UPPVentas.Update() UpEstatus.Update() UPCondicionesPago.Update() UpCliente.Update() UpEmitirTransitorio.Update() End Sub Private Function GetSaldoCreditoDisponible(tCveCliente As Integer, tCveSucursalCliente As Integer, Optional ByRef ObjVentas As ClsVentas = Nothing) As Decimal Dim Retorno As Decimal = 0 Dim ObjVentasAplciar As ClsVentas = Nothing If ObjVentas IsNot Nothing Then ObjVentasAplciar = ObjVentas Else ObjVentasAplciar = New ClsVentas End If If ObjVentasAplciar.ObtenerCreditoRestante(tCveCliente, tCveSucursalCliente) Then If ObjVentasAplciar.DtResultados.Rows.Count > 0 Then If tCveSucursalCliente > 0 Then Dim LimiteRestanteSucursal As Decimal = ObjVentasAplciar.DtResultados(0)("LimiteRestanteSucursal").ToString().ToDecimal Dim PorcentajeSaldoSucursal As Decimal = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoSucursal").ToString().ToDecimal Dim LimiteRestanteCliente As Decimal = ObjVentasAplciar.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal Dim PorcentajeSaldoCliente As Decimal = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoCliente").ToString().ToDecimal 'SI EL LIMITE DE LA SUCURSAL ES MAYOR AL DEL CLIENTE DEBE LIMITAR AL DEL CLIENTE If LimiteRestanteSucursal > LimiteRestanteCliente Then Retorno = LimiteRestanteCliente PorcentajeCredito = PorcentajeSaldoCliente ElseIf LimiteRestanteSucursal < LimiteRestanteCliente Then Retorno = LimiteRestanteSucursal PorcentajeCredito = PorcentajeSaldoSucursal ElseIf LimiteRestanteSucursal = LimiteRestanteCliente Then Retorno = LimiteRestanteSucursal PorcentajeCredito = PorcentajeSaldoSucursal End If Else Retorno = ObjVentasAplciar.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal PorcentajeCredito = ObjVentasAplciar.DtResultados(0)("PorcentajeSaldoCliente").ToString().ToDecimal End If End If End If If ObjVentas Is Nothing Then ObjVentasAplciar.Dispose() End If Return Retorno End Function Private Sub CargaDdlSubProyectos() Dim dtt As New DataTable dtt = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1, 1) DdlSubProyectoDatos.DataSource = dtt.FiltraParametros("EsSucursal = True ") DdlSubProyectoDatos.DataBind() DdlSubProyectoCobranza.DataSource = dtt.FiltraParametros("EsSucursal = True ") DdlSubProyectoCobranza.DataBind() DdlSubProyectoEjecucion.DataSource = dtt.FiltraParametros("EsSucursal = True ") DdlSubProyectoEjecucion.DataBind() DdlSubProyectoFiltroAF.DataSource = dtt DdlSubProyectoFiltroAF.DataBind() DdlSubProyectoFiltroAF.Items.Insert(0, New ListItem("Todos", "-1")) DdlSucursalCorte.DataSource = dtt.FiltraParametros("EsSucursal = True ") DdlSucursalCorte.DataBind() DdlSucursalCorte.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlSucursalCorte.SelectedValueExist(UsuarioActual.CveSubProyecto) dtt.Dispose() End Sub Private Sub CargaClasificaciones() If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby:="Clasificacion") Else DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltraParametros("UsoClasificacion IN (1,3) and Estado = 1", Orderby:="Clasificacion") End If 'DdlClasificacion.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa) DdlClasificacion.DataBind() End Sub Private Sub CargaPS(CveClasificacion As Integer, Objeto As ADServerControl.Dropdownlost, Optional AplicaParaVenta As Boolean = True) Objeto.setEsWebService(UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1") If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then Objeto.ddl.Items.Clear() 'Objeto.ddl.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, AplicaParaVenta:=1, Estatus:=1) Objeto.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, Estatus:=1, AplicaParaVenta:=If(AplicaParaVenta, 1, -1)) Objeto.ddl.DataBind() Objeto.ddl.Items.Insert(0, New ListItem("*** Actualizar listado de Productos o Servicios ***", "-2")) Objeto.ddl.Items.Insert(0, New ListItem("Seleccione el Producto", "-1")) Else If Me.CveVenta > 0 Then DdlSubProyectoDatos.SelectedValueExist(CveSubProyectoVenta) End If Dim cvesubproyecto As String = DdlSubProyectoDatos.SelectedValue 'If UsuarioActual.Empresa.Funcionalidad(558) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(531) = "1" Then ' 'cuando es empresa llantera (558) o cuando es empresa acumuladores ' cvesubproyecto = "-1" 'End If Objeto.Attributes.Add("data-cvesubproyecto", cvesubproyecto) Objeto.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString()) Objeto.ddlWS.Attributes.Add("data-Estatus", "1") If AplicaParaVenta Then Objeto.ddlWS.Attributes.Add("data-pagina", "ventas/ventas") Objeto.ddlWS.Attributes.Add("data-AplicaparaVenta", "1") End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then Objeto.Attributes.Add("data-CveAlmacen", $"{CveAlmacenFiltroDdl}") Objeto.ddlWS.Attributes.Add("data-CveAlmacen", $"{CveAlmacenFiltroDdl}") End If End If End Sub Private Sub CargaPSRemision(CveClasificacion As Integer, Objeto As ADServerControl.Dropdownlost) Objeto.setEsWebService(UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1") If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then Objeto.ddl.Items.Clear() 'Objeto.ddl.DataSource = GlobalDTProductosServicios(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, AplicaParaVenta:=1, Estatus:=1) Objeto.ddl.DataSource = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion, Estatus:=1, AplicaParaVenta:=1) Objeto.ddl.DataBind() Objeto.ddl.Items.Insert(0, New ListItem("*** Actualizar listado de Productos o Servicios ***", "-2")) Objeto.ddl.Items.Insert(0, New ListItem("Seleccione el Producto", "-1")) Else Dim cvesubproyecto As String = "-1" Objeto.Attributes.Add("data-cvesubproyecto", cvesubproyecto) Objeto.ddlWS.Attributes.Add("data-cveclasificacion", CveClasificacion.ToString()) Objeto.ddlWS.Attributes.Add("data-pagina", "ventas/ventas") Objeto.ddlWS.Attributes.Add("data-Estatus", "1") Objeto.ddlWS.Attributes.Add("data-AplicaparaVenta", "1") End If End Sub Private Sub CargaNC(pCveVenta As Integer) If pCveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") Or DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") Then If IsNothing(Request("CveDevolucion")) AndAlso IsNumeric(Request("CveDevolucion")) Then trNCFactura.Visible = True End If If DdlNCFactura.Items.Count = 0 Then Dim ObjClientes As New ClsVentas() If ObjClientes.GetVenta(pCveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) AndAlso ObjClientes.DtResultados.Rows.Count > 0 Then DTFacNC = ObjClientes.DtResultados Dim drvv As DataRow = DTFacNC.FiltroPrimero("") DTFacNC.Columns.Add("Factura", GetType(String), " Folio + ' - ' +' $' + Total + ' - ' + Fecha ") HdnFolioFiscalNC.Value = drvv("FolioFiscal").ToString() If DTFacNC IsNot Nothing AndAlso DTFacNC.Rows.Count > 0 Then Me.CveEstatusRefacturacion = DTFacNC.Rows(0)("CveEstatusRefacturacion").ToString().ToEntero() Me.DevolucionAlmacenNC = DTFacNC.Rows(0)("EsDevolucionVenta").ToString().ToEntero() HdnRFCVenta.Value = DTFacNC.Rows(0)("ClienteRFC").ToString() End If Else DTFacNC = Nothing End If ObjClientes.Dispose() Me.ObjFacturaNC = Nothing Me.ObjFacturaNC = New Modelos.Factura(UsuarioActual, pCveVenta, UsuarioActual.CveEmpresa, DirectorioServidor:=ModExtensiones.DirectorioBaseEmpresas, EsCancelacion:=False, VerificaAlmacen:=False) DdlNCFactura.DataSource = DTFacNC DdlNCFactura.DataBind() DdlNCFactura.SelectedValueExist(pCveVenta) DdlNCFactura.Enabled = False If ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.CveLineaAdicional > 0 Then DdlLineaAdicional.SelectedValueExist(ObjFacturaNC.CveLineaAdicional) End If End If Else trNCFactura.Visible = False End If End Sub Private Sub CargaCuentasTerminal() DdlCuentasTerminal.Items.Clear() DdlCuentaTerminalModal.Items.Clear() DdlCuentasTerminal.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros($"CveEmpresa = {UsuarioActual.CveEmpresa} AND CveTipoCuenta = 1", "", {"CveCuenta", "NumCuentaMoneda"}) DdlCuentaTerminalModal.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros($"CveEmpresa = {UsuarioActual.CveEmpresa} AND CveTipoCuenta = 1", "", {"CveCuenta", "NumCuentaMoneda"}) DdlCuentasTerminal.DataBind() DdlCuentaTerminalModal.DataBind() DdlCuentasTerminal.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlCuentaTerminalModal.Items.Insert(0, New ListItem("Seleccione", "-1")) UPTarjetaTermminal.Update() UpCuentaTerminal.Update() End Sub Public Sub CargaDdlNCPS() Dim CveSATNC As String = "84111506" Dim dtt As New DataTable dtt = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CodigoSATPS:=CveSATNC, AplicaParaVenta:=1) ', SATClavePS:=CveSATNC If dtt IsNot Nothing Then DdlNCPS.DataSource = dtt DdlNCPS.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlNCPS.DataBind() DdlNCPSAnt.DataSource = dtt DdlNCPSAnt.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlNCPSAnt.DataBind() dtt.Dispose() End If End Sub #End Region #Region "G R I D V I E W S" #Region "GvPS" Protected Sub GvPS_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvPS.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Attributes("id") = e.Row.RowIndex.ToString() If e.Row.RowIndex = 0 Then End If If e.Row.RowState = DataControlRowState.Edit OrElse e.Row.RowState = 5 Then 'MODO EDICION If UsuarioActual.Empresa.UsaInventarios Then e.Row.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTProductosServiciosEquivalencias(e.Row.DBCampo("CvePS").ToEntero(), -1, UsuarioActual.CveEmpresa) Else e.Row.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) End If e.Row.FCDropDownList("DdlUnidadMedida").DataBind() e.Row.FCDropDownList("DdlUnidadMedida").SelectedValueExist(e.Row.DBCampo("CveUM")) e.Row.FCDropDownList("DdlClasificacion").DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1) e.Row.FCDropDownList("DdlClasificacion").DataBind() e.Row.FCDropDownList("DdlClasificacion").SelectedValue = e.Row.DBCampo("CveClasificacion") CargaPS(e.Row.FCDropDownList("DdlClasificacion").SelectedValue.ToEntero(), e.Row.FCDropDownLost("DdlPS")) e.Row.FCDropDownLost("DdlPS").SelectedText = e.Row.DBCampo("CodigoPS") e.Row.FCDropDownLost("DdlPS").SelectedValue = e.Row.DBCampo("CvePS") If e.Row.DBCampo("CveSubProyecto") = "-1" Then 'cargo todos las opciones para e.Row.FCDropDownList("DdlProyecto").DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) e.Row.FCDropDownList("DdlProyecto").DataBind() e.Row.FCDropDownList("DdlProyecto").Items.Insert(0, New ListItem("Sin Proyecto Asignado", "-1")) e.Row.FCDropDownList("DdlSubProyecto").DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, DdlProyecto.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa, -1, 1) 'e.Row.FCDropDownList("DdlSubProyecto").DataSource = GlobalDTSubProyectos.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa & " AND CveProyecto = '" & DdlProyecto.SelectedValue & "'") e.Row.FCDropDownList("DdlSubProyecto").DataBind() 'e.Row.FCDropDownList("DdlSubProyectoEdit").SelectedValue = e.Row.DBCampo("CveSubProyecto") e.Row.FCDropDownList("DdlSubProyecto").Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) Else Dim dr As DataRow = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, e.Row.DBCampo("CveSubProyecto").ToEntero(), 1).FiltroPrimero("") If dr IsNot Nothing Then e.Row.FCDropDownList("DdlProyecto").DataSource = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa, -1) e.Row.FCDropDownList("DdlProyecto").DataBind() e.Row.FCDropDownList("DdlProyecto").SelectedValue = dr("CveProyecto").ToString() e.Row.FCDropDownList("DdlSubProyecto").DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, dr("CveProyecto").ToString().ToEntero(), UsuarioActual.CveEmpresa, -1, 1) e.Row.FCDropDownList("DdlSubProyecto").DataBind() e.Row.FCDropDownList("DdlSubProyecto").SelectedValueExist(e.Row.DBCampo("CveSubProyecto")) End If End If If UsuarioActual.TienePermisoProceso(68) OrElse UsuarioActual.Empresa.Funcionalidad(109) = "1" Then e.Row.FCTextBox("TxtPrecio").Enabled = False e.Row.FCTextBox("TxtDescuento").Enabled = False End If If Not EsCreaApartirDe Then 'Si es una devolucion If NuevaFactura = 0 Then e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False e.Row.FCDropDownList("DdlClasificacion").Enabled = False e.Row.FCDropDownLost("DdlPS").Enabled = False e.Row.FCDropDownList("DdlProyecto").Enabled = False e.Row.FCDropDownList("DdlSubProyecto").Enabled = False e.Row.FCTextBox("TxtPrecio").Enabled = False ElseIf NuevaFactura = 1 Or CveContrato > 0 Then e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False e.Row.FCDropDownList("DdlClasificacion").Enabled = False e.Row.FCDropDownLost("DdlPS").Enabled = False e.Row.FCTextBox("TxtCantidad").Enabled = False e.Row.FCTextBox("TxtPrecio").Enabled = False e.Row.FCTextBox("TxtDescuento").Enabled = False If TieneAlmacen Then e.Row.FCLinkButton("imgD").Visible = False If UsuarioActual.TienePermisoProceso(222) Then e.Row.FCDropDownList("DdlUnidadMedida").Enabled = True e.Row.FCDropDownList("DdlClasificacion").Enabled = True e.Row.FCDropDownLost("DdlPS").Enabled = True e.Row.FCTextBox("TxtCantidad").Enabled = True e.Row.FCTextBox("TxtPrecio").Enabled = True e.Row.FCTextBox("TxtDescuento").Enabled = True End If End If End If If UsuarioActual.Empresa.Funcionalidad(360) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(109) = "1" Then e.Row.FCHtmlGenericControl("DivPrecioLista").Visible = True e.Row.FCDropDownList("DdlPrecioListaEdit").DataSource = GlobalDTPrecioListas(UsuarioActual.CveEmpresa) If UsuarioActual.CveEmpresa = 189 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot", "Ped") Then Using ObjVta As New ClsVentas If ObjVta.GetPreciosListaSPPermitidos(DdlSubProyectoDatos.SelectedValue.ToEntero(), e.Row.DBCampo("CvePS").ToEntero(), UsuarioActual.CveEmpresa) Then Dim Dt As DataTable = Nothing If UsuarioActual.TienePermisoProceso(384) Then Dt = ObjVta.DtResultados.Copy() Else Dt = ObjVta.DtResultados.FiltraParametros("Restringuida = 'False'") End If e.Row.FCDropDownList("DdlPrecioListaEdit").DataSource = Dt End If End Using ElseIf DdlTipoComprobante.SelectedValue = "Ant" Then e.Row.FCHtmlGenericControl("DivPrecioLista").Visible = False End If End If If e.Row.FCHtmlGenericControl("DivPrecioLista").Visible Then e.Row.FCDropDownList("DdlPrecioListaEdit").DataBind() e.Row.FCDropDownList("DdlPrecioListaEdit").SelectedValueExist(e.Row.DBCampo("CvePrecioLista")) End If End If 'Si es facturacion de OC o Contrato If CveContrato > 0 AndAlso Not CveVenta > 0 AndAlso Not CveCicloComercial > 0 Then e.Row.FCLinkButton("imgClone").Visible = False e.Row.FCTextBox("TxtOrden").Visible = True e.Row.FCTextBox("TxtCantidad").Enabled = False e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False e.Row.FCDropDownList("DdlClasificacion").Enabled = False e.Row.FCDropDownLost("DdlPS").Enabled = False e.Row.FCDropDownList("DdlProyecto").Enabled = False e.Row.FCDropDownList("DdlSubProyecto").Enabled = False e.Row.FCTextBox("TxtPrecio").Enabled = False End If If CveContrato > 0 AndAlso CveContratoTipo = 33 Then e.Row.FCTextBox("TxtCantidad").Enabled = True e.Row.FCTextBox("TxtPrecio").Enabled = True End If If DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 Then e.Row.FCLinkButton("imgClone").Visible = False e.Row.FCTextBox("TxtOrden").Visible = True e.Row.FCTextBox("TxtCantidad").Enabled = False e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False e.Row.FCDropDownList("DdlClasificacion").Enabled = False e.Row.FCDropDownList("DdlProyecto").Enabled = False e.Row.FCDropDownList("DdlSubProyecto").Enabled = False e.Row.FCLiteral("LtlPSEdit").Visible = True e.Row.FCDropDownLost("DdlPS").Visible = False e.Row.FCDropDownLost("DdlPS").Enabled = False e.Row.FCTextBox("TxtPrecio").Enabled = True End If If CveCicloComercial > 0 Then e.Row.FCTextBox("TxtPrecio").Enabled = True End If 'CUANDO SE QUIERE FACTURAR UNA REMISIÓN NO PERMITE EDITAR SU PRECIO If DtRemisionesPS IsNot Nothing AndAlso DtRemisionesPS.Rows.Count > 0 AndAlso (e.Row.DBCampo("CveVentaDetalle").ToEntero() > 0 Or e.Row.DBCampo("CveVentaDetalleRemision").ToEntero() > 0) Then e.Row.FCTextBox("TxtPrecio").Enabled = False End If 'PERMISO EDITAR REM If e.Row.DBCampo("TipoDocto") = "Rem" And ModalidadEdicion Then 'LO PERMITIDO MODIFICAR e.Row.FCTextBox("TxtPrecio").Enabled = True e.Row.FCTextBox("TxtObsPS").Enabled = True e.Row.FCTextBox("TxtCantidad").Attributes.Add("onblur", $"ValidarCantidadMenor(this,{e.Row.DBCampo("CantidadInventario").ToDouble})") 'LO NO PERMITIDO MODIFICAR e.Row.FCDropDownList("DdlUnidadMedida").Enabled = False If UsuarioActual.CveEmpresa = 119 Then e.Row.FCTextBox("TxtCantidad").Enabled = False End If 'cuando ya tiene una salida, no se puede cambiar el producto If e.Row.DBCampo("CantidadInventario").ToDouble > 0 Then e.Row.FCDropDownList("DdlClasificacion").Enabled = False e.Row.FCDropDownLost("DdlPS").Enabled = False e.Row.FCDropDownLost("DdlPS").ddlWS.Attributes.Add("disabled", "disabled") End If e.Row.FCTextBox("TxtTiempoEntrega").Enabled = False e.Row.FCDropDownList("DdlProyecto").Enabled = False e.Row.FCDropDownList("DdlSubProyecto").Enabled = False e.Row.FCLinkButton("imgD").Visible = False End If If UsuarioActual.CveEmpresa.Contiene(7, 122) Then e.Row.FCTextBox("TxtCantidad").Width = New Unit("100%") e.Row.FCLabel("LblTurnoEditar").Visible = True e.Row.FCTextBox("TxtNumTurnosEditar").Visible = True End If 'LA COLUMNA DE ELIMINACION NO DEBE ESTAR VISIBLE EN EL MODO EDICION If GvPS.Columns(19).Visible Then e.Row.FCLinkButton("imgD").Visible = False End If Else 'MODO NORMAL If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then e.Row.FCDropDownList("DdlFR").DataSource = DTPresupuestoIngresos e.Row.FCDropDownList("DdlFR").DataBind() e.Row.FCDropDownList("DdlFR").SelectedValue = e.Row.DBCampo("CvePresupuestoIngreso") 'e.Row.FCDropDownList("DdlFR").Enabled = False End If If e.Row.DataKey("IEPS").ToDouble > 0 Then : TrIEPS.Visible = True : End If If NuevaFactura = 1 Then If Not UsuarioActual.TienePermisoProceso(222) Then e.Row.FCLinkButton("imgD").Visible = False e.Row.FCLinkButton("imgE").Visible = False End If If TieneAlmacen Then e.Row.FCLinkButton("imgD").Visible = False End If End If If (CveContrato > 0 AndAlso Not CveVenta > 0) Then e.Row.FCLinkButton("imgD").Visible = False End If If DdlContratosModal.DataSource IsNot Nothing AndAlso CveCicloComercial <= 0 Then e.Row.FCLinkButton("imgE").Visible = False End If 'Si es Cotizacíon If e.Row.DBCampo("TipoDocto") = "Cot" Or CveEmpresaCRM > 0 Then ThTiempoEntrega.Visible = True ThTiempoEntrega2.Visible = True GvPS.Columns(5).Visible = True End If 'Si es facturacion de OC If DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 Then e.Row.FCLinkButton("imgClone").Visible = False e.Row.FCTextBox("TxtOrden").Visible = True End If If UsuarioActual.Empresa.CvePlataforma = 2 Then e.Row.FCLinkButton("imgE").Visible = False e.Row.FCLinkButton("imgEPyME").Visible = True End If If UsuarioActual.Empresa.Tipo_CentroCosto = 2 Or UsuarioActual.Empresa.Tipo_CentroCosto = 1 Then e.Row.FCLabel("LblProyecto").Visible = False End If If CveVenta > 0 Then 'And e.Row.DBCampo("TipoDocto") = "Rem" If ModalidadEdicion Then Select Case e.Row.DBCampo("TipoDocto") Case "Cot" e.Row.FCLinkButton("imgE").Visible = Not e.Row.DBCampo("CantidadFacturadaCot").ToDouble > 0 e.Row.FCLinkButton("imgD").Visible = Not e.Row.DBCampo("CantidadFacturadaCot").ToDouble > 0 Case "Ped" e.Row.FCLinkButton("imgE").Visible = Not e.Row.DBCampo("CantidadFacturadaPed2").ToDouble > 0 e.Row.FCLinkButton("imgD").Visible = Not e.Row.DBCampo("CantidadFacturadaPed2").ToDouble > 0 Case Else e.Row.FCLinkButton("imgE").Visible = Not e.Row.DBCampo("CantidadFacturadaRem").ToDouble > 0 e.Row.FCLinkButton("imgD").Visible = Not e.Row.DBCampo("CantidadInventario").ToDouble > 0 AndAlso Not e.Row.DBCampo("CantidadFacturadaRem").ToDouble > 0 End Select ElseIf Not CveDevolucion > 0 Then e.Row.FCLinkButton("imgE").Visible = False e.Row.FCLinkButton("imgD").Visible = False End If 'EN BDH NO DEBE PODER EDITAR LOS PS If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If ModalidadEdicion Then e.Row.FCLinkButton("imgE").Visible = True e.Row.FCLinkButton("imgD").Visible = False Else e.Row.FCLinkButton("imgE").Visible = False e.Row.FCLinkButton("imgD").Visible = False End If End If End If If (UsuarioActual.Empresa.Funcionalidad(360) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(109) = "1") AndAlso e.Row.DBCampo("CvePrecioLista").ToEntero() > 0 Then e.Row.FCLiteral("LtlPrecioLista").Visible = True End If If UsuarioActual.CveEmpresa.Contiene(7, 122) AndAlso e.Row.DBCampo("NumTurnos").ToDecimal() > 0 Then e.Row.FCLiteral("LtlNumTurnos").Visible = True End If 'CANTIDAD FACTURADA Select Case e.Row.DBCampo("TipoDocto") Case "Cot" e.Row.FCLiteral("LtCantidadFacturada").Text = e.Row.DBCampo("CantidadFacturadaCot").ToDecimal.ToString("#,##0.##") Case "Ped" e.Row.FCLiteral("LtCantidadFacturada").Text = e.Row.DBCampo("CantidadFacturadaPed2").ToDecimal.ToString("#,##0.##") End Select If EsCreaApartirDe Then e.Row.FCLinkButton("imgD").Visible = True e.Row.FCLinkButton("imgE").Visible = True End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso Not UsuarioActual.Empresa.Funcionalidad(382) = "1" Then e.Row.FCLinkButton("LnkDescuentos").Visible = True If e.Row.DBCampo("TipoDocto").Contiene("Cot") AndAlso (CveVenta > 0 AndAlso Not EsCreaApartirDe) Then e.Row.FCLinkButton("imgClone").Visible = False End If End If If UsuarioActual.CveEmpresa = 189 Then e.Row.FCLinkButton("LnkExistencias").Visible = True If e.Row.DBCampo("TipoDocto").Contiene("Cot", "Rem") AndAlso (CveVenta > 0 AndAlso Not EsCreaApartirDe) Then e.Row.FCLinkButton("imgClone").Visible = False End If If e.Row.DBCampo("CvePromocionDetalle").ToEntero() > 0 Then If DtPromociones IsNot Nothing Then Dim NombrePromo As String = DtPromociones.FiltroPrimeroValor("NombrePromocion", $"CvePromocionDetalle={e.Row.DBCampo("CvePromocionDetalle")}") e.Row.FCHtmlGenericControl("TagPromocion").Attributes.Add("title", NombrePromo) End If End If If DdlTipoComprobante.SelectedValue.Contiene("Cot") Then e.Row.FCHyperLink("HLPS").Visible = True e.Row.FCLabel("LblPS").Visible = False e.Row.FCHyperLink("HLPS").NavigateUrl = String.Format("/Inventarios/Kardex.aspx?CvePS={0}&CveSubProyecto={1}", e.Row.DBCampo("CvePS"), DdlSubProyectoDatos.SelectedValue.ToEntero()) Else e.Row.FCHyperLink("HLPS").Visible = False e.Row.FCLabel("LblPS").Visible = True End If End If If CveVenta <= 0 Then Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso PuedeVerCosto Then If e.Row.DBCampo("PU").ToDecimal() > 0 Then e.Row.FCLabel("LblCosto").Text = String.Format("{0:N2}", e.Row.DBCampo("Costo").ToDecimal()) e.Row.FCLabel("LblCostoPorcentaje").Text = String.Format("{0:N2} %", ((e.Row.DBCampo("PU").ToDecimal() - e.Row.DBCampo("Costo").ToDecimal()) / e.Row.DBCampo("PU").ToDecimal()) * 100D) Else e.Row.FCLabel("LblCosto").Text = "" e.Row.FCLabel("LblCostoPorcentaje").Text = "" End If End If End If 'If GvInv.Rows.Count > 0 AndAlso ModalidadEdicion AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso e.Row.DataKey("CveVentaDetalle").ToString().ToEntero() > 0 Then ' e.Row.FCLinkButton("imgE").Enabled = False ' e.Row.FCLinkButton("imgE").ToolTip = "No se puede editar debido a que ya hay un movimiento de almacen." 'End If End If End If End Sub Protected Sub GvPS_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GvPS.RowEditing GvPS.EditIndex = e.NewEditIndex GvPS.DataSource = TmpDT GvPS.DataBind() Dim gvr As GridViewRow = GvPS.Rows(e.NewEditIndex) If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then gvr.FCDropDownList("DdlUnidadMedida").Enabled = False gvr.FCDropDownList("DdlClasificacion").Enabled = False End If 'SI ES LLANTERA NO DEBE BLOQUEAR EL TEXTBOX If gvr.DataKey("CvePromocionDetalle").ToString().ToEntero() > 0 AndAlso (Not UsuarioActual.Empresa.Funcionalidad(558) = "1") Then gvr.FCTextBox("TxtDescuento").Enabled = False gvr.FCTextBox("TxtDescuento").ToolTip = "No se puede editar el descuento porque viene de una promoción" End If If Me.CveVenta > 0 AndAlso UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot") Then gvr.FCTextBox("TxtDescuento").Enabled = False End If If CveVenta > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then gvr.FCTextBox("TxtCantidad").Enabled = False gvr.FCDropDownList("DdlUnidadMedida").Enabled = False gvr.FCDropDownLost("DdlPS").Enabled = False gvr.FCDropDownLost("DdlPS").ddlWS.Attributes.Add("disabled", "disabled") gvr.FCDropDownList("DdlUnidadMedida").Enabled = False gvr.FCDropDownList("DdlClasificacion").Enabled = False gvr.FCDropDownList("DdlProyecto").Enabled = False gvr.FCDropDownList("DdlSubProyecto").Enabled = False gvr.FCTextBox("TxtObsPS").Enabled = True gvr.FCTextBox("TxtPrecio").Enabled = False gvr.FCTextBox("TxtDescuento").Enabled = False End If If (CveVenta <= 0 OrElse EsCreaApartirDe) AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Try If gvr.DataKey("CvePrecioLista").ToString().ToEntero() > 0 Then gvr.FCTextBox("TxtPrecio").Enabled = False End If Catch ex As Exception End Try gvr.FCTextBox("TxtDescuento").Enabled = False End If If EsVentaMedica Then gvr.FCTextBox("TxtPrecio").Enabled = False If DdlTipoComprobante.SelectedValue = "Cot" Or RBLTipoVenta.SelectedValue.ToEntero = 2 Then gvr.FCTextBox("TxtPrecio").Enabled = True End If End If If CveCicloComercial > 0 Then For Each gvrcd As GridViewRow In GvContratoDetalles.Rows If gvrcd.RowType = DataControlRowType.DataRow Then If gvrcd.DataKey("Cantidad").ToString().ToDecimal() = gvr.DataKey("Cantidad").ToDecimal() AndAlso gvrcd.DataKey("CvePS").ToEntero() = gvr.DataKey("CvePS").ToEntero() Then If gvrcd.DataKey("LimitarCantidad").ToString() = "False" Then gvr.FCTextBox("TxtCantidad").Enabled = True Exit For End If End If End If Next End If If UsuarioActual.CveEmpresa = 189 Then Dim DrPS = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=gvr.DataKey("CvePS").ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then gvr.FCTextBox("TxtPrecio").Enabled = CBool(DrPS("PrecioLibre")) End If End If If UsuarioActual.TienePermisoProceso(253) Then gvr.FCTextBox("TxtPrecio").Enabled = True UpPS.Update() End Sub Protected Sub GvPS_RowCancelingEdit(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles GvPS.RowCancelingEdit GvPS.EditIndex = -1 OrdenarPS() If GvPS.Columns(21).Visible Then For Each GvRow As GridViewRow In GvPS.Rows If GvRow.RowType = DataControlRowType.Header Then GvRow.FCLinkButton("LnkOrdenarGvPS").Visible = True End If If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCTextBox("TxtOrden").Visible = True End If Next End If DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") CargaGVInv(DtInv) UpPS.Update() End Sub Protected Sub GvPS_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GvPS.RowUpdating Dim CvePSNuevo As Integer = GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue.ToEntero() Dim CvePSAnterior As Integer = GvPS.Rows(e.RowIndex).DataKey("CvePS").ToEntero Dim Cantidad, PU As Decimal Dim ObjDescuento As New Modelos.VentaDescuentos Dim CuentaPredial As String Cantidad = GvPS.Rows(e.RowIndex).FCTextBox("TxtCantidad").Text.ToDecimal PU = (GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Text.ToDecimal).RoundSQL(6) Dim CantidadOriginal As Decimal = GvPS.Rows(e.RowIndex).DataKey("Cantidad").ToDecimal() Dim TotalOriginal As Decimal = GvPS.Rows(e.RowIndex).DataKey("Total").ToDecimal() If Cantidad <= 0 Then Alert("La cantidad debe ser mayor a cero", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim DescuentoManual As Decimal = (GvPS.Rows(e.RowIndex).FCTextBox("TxtDescuento").Text.ToDecimal).RoundSQL(NumeroDecimales) ObjDescuento.ImporteDescuento = DescuentoManual CuentaPredial = GvPS.Rows(e.RowIndex).FCTextBox("TxtPredial").Text.Trim If PU <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" Then Alert("El precio debe ser mayor a 0", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim DdlUM As DropDownList = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida") Dim DdlCla As DropDownList = GvPS.Rows(e.RowIndex).FCDropDownList("DdlClasificacion") Dim DdlSP As DropDownList = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto") Dim DrProducto = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSNuevo).FiltroPrimero("") Dim CveUMPS As Integer = DrProducto("CveUnidadMedida").ToString().ToEntero() Dim CveClasificacion As Integer = DrProducto("CveClasificacion").ToString().ToEntero() DdlUM.SelectedValueExist(CveUMPS) Dim RecalcularPromociones As Boolean = False Dim RegeneraPrecio As Boolean = False If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then RecalcularPromociones = True End If If DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then RecalcularPromociones = True End If If Not GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Enabled Then If CvePSAnterior <> CvePSNuevo Then RegeneraPrecio = True End If If Cantidad <> CantidadOriginal Then RegeneraPrecio = True End If If RegeneraPrecio Then Dim CvePrecioLista As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(360) = "1" Then CvePrecioLista = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedValue.ToEntero() Else CvePrecioLista = GvPS.Rows(e.RowIndex).DataKey("CvePrecioLista").ToEntero() End If Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePSNuevo, CveClasificacion, CvePrecioListaSugerido:=CvePrecioLista) If ObjPrecioSugerido IsNot Nothing AndAlso ObjPrecioSugerido.PrecioSugerido > 0 Then PU = ObjPrecioSugerido.PrecioSugerido End If End If End If If RecalcularPromociones Then ObjDescuento = CalcularDescuentos(CvePSNuevo, Cantidad, PU) If ObjDescuento.EsPUModificado Then 'SI ES IMPORTE ASIGNADO ES MAYOR, RESPETAR EL ORIGINAL If GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Enabled AndAlso (GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Text.ToDecimal() > ObjDescuento.PU) Then PU = GvPS.Rows(e.RowIndex).FCTextBox("TxtPrecio").Text.ToDecimal() Else PU = ObjDescuento.PU End If End If End If 'SI ESTA HABILITADO LA OPCION DE DESCUENTO, SE AGREGO UN DESCUENTO MANUAL Y NO TIENE PROMOCION If GvPS.Rows(e.RowIndex).FCTextBox("TxtDescuento").Enabled AndAlso CvePSAnterior = CvePSNuevo AndAlso Not (ObjDescuento.NombrePromo = "CONDICIONES COMERCIALES") Then ObjDescuento.ImporteDescuento = DescuentoManual End If 'VERIFICA SI EL DESCUENTO SUPERA EL SUBTOTAL If ObjDescuento.ImporteDescuento.RoundSQL(2) > (Cantidad * PU).RoundSQL(2) Then Alert("El descuento no puede ser mayor al subtotal", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not ValidaAgregarPS(Cantidad, CvePSNuevo, DdlUM.SelectedValue.ToEntero(), PU, DrProducto("CveTipoPS").ToString().ToEntero(), DdlCla.SelectedValue.ToEntero(), DdlSubProyectoDatos.SelectedValue.ToEntero(), ObjDescuento, CantidadOriginal:=CantidadOriginal, EsEdicion:=True) Then Exit Sub End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then Dim ConsecEliminar As Integer = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() If ConsecEliminar > 0 Then Dim descEliminar As Modelos.VentaDescuentos = ListaDescuentos.FirstOrDefault(Function(x) x.Consec = ConsecEliminar) If descEliminar IsNot Nothing Then ListaDescuentos.Remove(descEliminar) End If End If End If If TmpDT.Rows(e.RowIndex)("CvePS").ToString() <> GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue Then 'eliminar y cargar el ps *** Dim ConsecutivoActual As Integer = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() Dim OrdenOriginal As Integer = TmpDT.Rows(e.RowIndex)("Orden").ToString().ToEntero() 'If DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then ' ObjDescuento = CalcularDescuentos(CvePSNuevo, Cantidad, PU) 'End If Dim NumTurnos As Decimal = 0 If UsuarioActual.CveEmpresa.Contiene(7, 122) Then NumTurnos = GvPS.Rows(e.RowIndex).FCTextBox("TxtNumTurnosEditar").Text.ToDecimal() End If TmpDT.Rows.Remove(TmpDT.Rows(e.RowIndex)) CalculaUsados() Dim CvePrecioLista As Integer = -1 Dim PrecioLista As String = "" If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(360) = "1" Then CvePrecioLista = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedValue.ToEntero() If UsuarioActual.CveEmpresa = 189 Then If GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem IsNot Nothing Then Dim listaPL = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem.Text.Split("-"c) If listaPL.Count() > 0 Then PrecioLista = listaPL(0) End If End If Else If GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem IsNot Nothing Then PrecioLista = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem.Text End If End If End If Dim SubProyecto As String = "" Dim CveSubProyecto As Integer = -1 Dim Proyecto As String = "" Dim CveProyecto As Integer = -1 'VER SI ESTA VISIBLE EL PROYECTO If GvPS.Columns(8).Visible Then If GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedItem IsNot Nothing Then Proyecto = GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedItem.Text CveProyecto = GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedValue.ToEntero() End If If GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedItem IsNot Nothing Then SubProyecto = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedItem.Text CveSubProyecto = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedValue.ToEntero() Else SubProyecto = DdlSubProyectoDatos.SelectedItem.Text CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() End If Else SubProyecto = DdlSubProyectoDatos.SelectedItem.Text CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() End If AgregarProductoServicio(Cantidad, DdlUM.SelectedValue.ToEntero(), DdlUM.SelectedItem.Text, DdlCla.SelectedValue.ToEntero(), DdlCla.SelectedItem.Text, GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedValue.ToEntero(), GvPS.Rows(e.RowIndex).FCDropDownLost("DdlPS").SelectedText, GvPS.Rows(e.RowIndex).FCTextBox("TxtObsPS").Text.Trim, PU, ObjDescuento.ImporteDescuento, CveProyecto, Proyecto, CveSubProyecto, SubProyecto, CuentaPredial:=CuentaPredial, CveVentaDetalle:=GvPS.Rows(e.RowIndex).DataKey("CveVentaDetalle").ToString().ToEntero(), SeActualiza:=True, CvePromocionDetalle:=ObjDescuento.CvePromocionDetalle, ObjDescuento:=ObjDescuento, NumTurnos:=NumTurnos, CvePrecioLista:=CvePrecioLista, PrecioLista:=PrecioLista, ConsecutivoManual:=ConsecutivoActual, OrdenManual:=OrdenOriginal) ' TmpDT.Rows(e.RowIndex)("CveUM") = Ddl.SelectedValue ' TmpDT.Rows(e.RowIndex)("UM") = Ddl.SelectedItem.Text GvPS.EditIndex = -1 OrdenarPS(False) DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") CargaGVInv(DtInv) If UsuarioActual.Empresa.Funcionalidad(533).ToEntero() > 0 Then CalculaUsados() End If Else Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=TmpDT.Rows(e.RowIndex)("CvePS").ToString().ToEntero()).FiltroPrimero("") If Not ClienteDesglosaIEPS Then PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) TmpDT.Rows(e.RowIndex)("PorcentajeIEPS") = 0 End If Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (ObjDescuento.ImporteDescuento)) Dim TotalCalculableImpuestosIVA As Decimal = 0 TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + TmpDT.Rows(e.RowIndex)("PorcentajeIEPS").ToString().ToDecimal) Dim ClienteRetIVA As Decimal = Me.ClienteRetIVA If ClienteRetIVA <= 0 Then If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then ClienteRetIVA = 0.106667D ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then ClienteRetIVA = 0.04D End If End If If DrPS("IVA").ToString().Contiene("-1", "") Then TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = PorcentajeIVA Else TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = DrPS("IVA") End If If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso LblRFC.Text = "XEXX010101000" Then TmpDT.Rows(e.RowIndex)("PorcentajeIVA") = 0 TmpDT.Rows(e.RowIndex)("ImporteIVA") = 0 End If TmpDT.Rows(e.RowIndex)("CveUM") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida").SelectedValue.ToEntero() TmpDT.Rows(e.RowIndex)("UM") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlUnidadMedida").SelectedItem.Text TmpDT.Rows(e.RowIndex)("Cantidad") = Cantidad TmpDT.Rows(e.RowIndex)("Obs") = GvPS.Rows(e.RowIndex).FCTextBox("TxtObsPS").Text.TrimEnd TmpDT.Rows(e.RowIndex)("TiempoEntrega") = GvPS.Rows(e.RowIndex).FCTextBox("TxtTiempoEntrega").Text.Trim TmpDT.Rows(e.RowIndex)("PU") = PU TmpDT.Rows(e.RowIndex)("Descuento") = ObjDescuento.ImporteDescuento TmpDT.Rows(e.RowIndex)("Total") = (Cantidad * PU) TmpDT.Rows(e.RowIndex)("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("ImporteIVA") = (TmpDT.Rows(e.RowIndex)("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("ImporteIEPS") = (TmpDT.Rows(e.RowIndex)("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("RetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) TmpDT.Rows(e.RowIndex)("PorcentajeRetIVA") = ClienteRetIVA TmpDT.Rows(e.RowIndex)("PorcentajeRetISR") = ClienteRetISR TmpDT.Rows(e.RowIndex)("CuentaPredial") = CuentaPredial TmpDT.Rows(e.RowIndex)("TotalConImpuestos") = (TmpDT.Rows(e.RowIndex)("Total").ToString().ToDecimal() - TmpDT.Rows(e.RowIndex)("Descuento").ToString().ToDecimal() + TmpDT.Rows(e.RowIndex)("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Dim NumTurnos As Decimal = 0 If UsuarioActual.CveEmpresa.Contiene(7, 122) Then NumTurnos = GvPS.Rows(e.RowIndex).FCTextBox("TxtNumTurnosEditar").Text.ToDecimal() End If TmpDT.Rows(e.RowIndex)("NumTurnos") = NumTurnos If ObjDescuento IsNot Nothing Then TmpDT.Rows(e.RowIndex)("CvePromocionDetalle") = ObjDescuento.CvePromocionDetalle End If If GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").Items.Count = 0 Then TmpDT.Rows(e.RowIndex)("Proyecto") = "Sin Proyecto Asignado" TmpDT.Rows(e.RowIndex)("CveSubProyecto") = -1 Else TmpDT.Rows(e.RowIndex)("Proyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlProyecto").SelectedItem.Text End If Dim CvePrecioLista As Integer = -1 Dim PrecioLista As String = "" If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(360) = "1" Then CvePrecioLista = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedValue.ToEntero() If GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem IsNot Nothing Then PrecioLista = GvPS.Rows(e.RowIndex).FCDropDownList("DdlPrecioListaEdit").SelectedItem.Text End If TmpDT.Rows(e.RowIndex)("CvePrecioLista") = CvePrecioLista TmpDT.Rows(e.RowIndex)("PrecioLista") = PrecioLista End If 'VER SI ESTA VISIBLE EL PROYECTO If GvPS.Columns(8).Visible Then If GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").Items.Count = 0 Then TmpDT.Rows(e.RowIndex)("SubProyecto") = "Sin SubProyecto Asignado" Else 'si está visible en el encabezado, si no esta visible que no actualice, porque generar error, selecciona el primer item If DdlSubProyecto.Visible Then TmpDT.Rows(e.RowIndex)("SubProyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedItem.Text TmpDT.Rows(e.RowIndex)("CveSubProyecto") = GvPS.Rows(e.RowIndex).FCDropDownList("DdlSubProyecto").SelectedValue End If End If Else TmpDT.Rows(e.RowIndex)("SubProyecto") = DdlSubProyectoDatos.SelectedItem.Text TmpDT.Rows(e.RowIndex)("CveSubProyecto") = DdlSubProyectoDatos.SelectedValue.ToEntero() End If 'RELACIONAL PS CON EL DESCUENTO If ObjDescuento IsNot Nothing Then ObjDescuento.Consec = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() End If 'RECALCULA LA CANTIDAD DE CONVERSION If CantidadOriginal <> Cantidad Then Dim CantidadConversion As Decimal = TmpDT.Rows(e.RowIndex)("CantidadConversion").ToString().ToDecimal() If AplicaComercioExterior Then 'SI NO VIENE DE MANIFIESTO UTILIZA EL PESO DEL PRODUCTO If Request("CveManifiesto") Is Nothing Then If DrPS("PesoKg").ToString().ToDecimal() > 0 Then CantidadConversion = Cantidad * DrPS("PesoKg").ToString().ToDecimal() Else CantidadConversion = Cantidad End If Else Dim TotalNuevo As Decimal = TmpDT.Rows(e.RowIndex)("Total").ToString().ToDecimal() Dim PorcentajeConversion As Decimal = CantidadConversion / TotalOriginal CantidadConversion = TotalNuevo * PorcentajeConversion End If Else CantidadConversion = Cantidad End If TmpDT.Rows(e.RowIndex)("CantidadConversion") = CantidadConversion End If CalculaPSPromocionFiltrosLubricantes(TmpDT.Rows(e.RowIndex)) DrPS = Nothing GvPS.EditIndex = -1 OrdenarPS(False) DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") CargaGVInv(DtInv) CalculaUsados() End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then ListaDescuentos.Add(ObjDescuento) End If CalculaTotalesVenta() 'SI EL PORLET DE COMERCIO EXTERIOR EXTERIOR ESTA VISIBLE SE ACTUALIZAN LOS PRODUCTOS DEL GRIDVIEW If AplicaComercioExterior Then CargaGvComercioExterior() End If 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") If GvPS.Columns(21).Visible Then For Each GvRow As GridViewRow In GvPS.Rows If GvRow.RowType = DataControlRowType.Header Then GvRow.FCLinkButton("LnkOrdenarGvPS").Visible = True End If If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCTextBox("TxtOrden").Visible = True End If Next End If UpPS.Update() UpContado.Update() End Sub Protected Sub GvPS_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvPS.RowDeleting If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing Then Dim ConsecEliminar As Integer = TmpDT.Rows(e.RowIndex)("Consec").ToString().ToEntero() If ConsecEliminar > 0 Then Dim descEliminar As Modelos.VentaDescuentos = ListaDescuentos.FirstOrDefault(Function(x) x.Consec = ConsecEliminar) If descEliminar IsNot Nothing Then ListaDescuentos.Remove(descEliminar) End If End If End If 'SI SE ELIMINA EL LUBRICANTE, ELIMINAR LOS FILTROS CON PROMOCION If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not ClienteEsDistribuidor Then If TmpDT.Rows(e.RowIndex)("CveClasificacion").ToString().ToString().Contiene("20516") Then Dim RowsFiltros = TmpDT.Select("CveClasificacion IN(20515) AND Descuento > 0") For Each Row As DataRow In RowsFiltros TmpDT.Rows.Remove(Row) Next End If End If Dim DbRow As DataRow = Nothing DbRow = TmpDT.Rows(e.RowIndex) TmpDT.Rows.Remove(DbRow) CalculaUsados() GvPS.DataSource = TmpDT DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") GvPS.DataBind() CargaGVInv(DtInv) CalculaTotalesVenta() Alert("Eliminado Correctamente.", TipoMensaje.MsgInformacion) 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = TxtTotal.Text.Replace(",", "") UpContado.Update() End Sub #End Region #Region "GvINV" Private Sub GvInv_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvInv.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If UsuarioActual.Empresa.Funcionalidad(567) = "1" OrElse (UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Dev") Then e.Row.FCCheckBox("cbInv").Checked = True End If 'SERIE ALMACEN If CveVenta > 0 AndAlso e.Row.DBCampo("Serie") <> "" Then e.Row.FCLiteral("LtlSerie").Visible = True End If If CveVenta <= 0 Then If e.Row.DBCampo("AplicaSerie").ToEntero() = 1 Then GvInv.Columns(4).Visible = True e.Row.FCTextBox("TxtSerie").Visible = True e.Row.FCTextBox("TxtSerie").Attributes.Remove("onkeypress") e.Row.FCTextBox("TxtSerie").Attributes.Add("onkeypress", String.Format("SeriePS(event,{0},this,{1});", e.Row.FCButton("BtnSerie").ClientID, e.Row.FCHiddenField("HdnSerie").ClientID)) e.Row.FCTextBox("TxtSerie").Attributes.Remove("onblur") e.Row.FCTextBox("TxtSerie").Attributes.Add("onblur", String.Format("SeriePSBlur({0},this,{1});", e.Row.FCButton("BtnSerie").ClientID, e.Row.FCHiddenField("HdnSerie").ClientID)) End If If e.Row.DBCampo("AplicaLote").ToEntero() = 1 Then CargarCaducidadProducto(e.Row.DBCampo("CvePS").ToEntero, e.Row.FCDropDownList("DdlCaducidadProducto"), "", Nothing) End If End If If e.Row.DBCampo("CvePS") = "" Then e.Row.FCLiteral("LtlPS").Text = String.Format("Folio: {1} Fecha: {2} -- {3} -- {4}", e.Row.DBCampo("CveMovimiento"), e.Row.DBCampo("Folio"), e.Row.DBCampo("Fecha").ToString().ToDate.ToShortDateString, e.Row.DBCampo("Almacen").ToString(), e.Row.DBCampo("Concepto").ToString()) e.Row.FCCheckBox("cbInv").Visible = False e.Row.FCCheckBox("cbInv").Enabled = False If e.Row.DataKey("Origen").ToEntero() > 0 Then e.Row.BackColor = Drawing.Color.FromArgb(224, 130, 131) e.Row.ForeColor = Drawing.Color.White e.Row.Font.Bold = True Else e.Row.CssClass = "SubTotales" End If Else Dim tFecha As Date = If(e.Row.DBCampo("Fecha") <> "", e.Row.DBCampo("Fecha").ToDate, NowADS()) e.Row.FCLiteral("LtlPS").Text = String.Format(" {4}", e.Row.DBCampo("CvePS"), e.Row.DBCampo("CveAlmacen"), tFecha.AddDays(-7).ToShortDateString, tFecha.AddDays(7).ToShortDateString, e.Row.DBCampo("PS")) e.Row.Cells(3).HorizontalAlign = HorizontalAlign.Left e.Row.FCCheckBox("cbInv").Visible = True e.Row.FCCheckBox("cbInv").Enabled = True 'SI ES REMISION O VENTA DEBE SALIR DE ALMACEN If UsuarioActual.TienePermisoProceso(157) AndAlso e.Row.DBCampo("CvePS").ToEntero() > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing") AndAlso UsuarioActual.CveEmpresa <> 72 Then e.Row.FCCheckBox("cbInv").Checked = True e.Row.FCCheckBox("cbInv").Enabled = False End If 'SI DEBE HACER SALIDA DIRECTA DE ALMACEN DEBE ESTAR SELECCIONADO SIEMPRE If UsuarioActual.Empresa.Funcionalidad(567) = "1" Then e.Row.FCCheckBox("cbInv").Checked = True If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then e.Row.FCCheckBox("cbInv").Enabled = False End If End If End If If (CveVenta > 0 And DdlTipoComprobante.SelectedValue <> "Cot") AndAlso Not AplicaDevolucion Then If e.Row.DBCampo("CveConcepto").ToEntero().Contiene(3, 40) Then CveAlmacenDevolucion = e.Row.DBCampo("CveAlmacen").ToEntero() e.Row.FCCheckBox("cbInv").Visible = False End If If (CveVenta > 0 AndAlso EsCreaApartirDe AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1") Then e.Row.FCCheckBox("cbInv").Visible = True End If End If End Sub Private Sub CargarCaducidadProducto(CvePS As Integer, ByRef DdlLoteFechaCaducidad As DropDownList, ValorAsignado As String, DtDatosDevolucion As DataTable) DdlLoteFechaCaducidad.Items.Clear() DdlLoteFechaCaducidad.Items.Add(New ListItem("-", "|")) Dim almacenes As String = ddlAlmacen.SelectedValue If almacenes = "" Then almacenes = "-1" End If GvInv.Columns(7).Visible = True If DtDatosDevolucion IsNot Nothing Then DdlLoteFechaCaducidad.Visible = True For Each dr As DataRow In DtDatosDevolucion.FiltraParametros($"CvePS = {CvePS}", DistinctColumns:={"Lote", "FechaCaducidad"}).Rows DdlLoteFechaCaducidad.Items.Add(New ListItem($"Lote: {dr("Lote").ToString} - Cad: {dr("FechaCaducidad").ToString.ToDate.ToString("dd/MM/yyyy")}", $"{dr("Lote").ToString}|{dr("FechaCaducidad").ToString.ToDate.ToString("dd/MM/yyyy")}")) Next Else Dim ObjInventarios As New ClsInventarios If ObjInventarios.GetExistenciasCaducidad(CvePS, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, almacenes) Then DdlLoteFechaCaducidad.Visible = True For Each dr As DataRow In ObjInventarios.DtResultados.FiltraParametros("", DistinctColumns:={"Lote", "FechaCaducidad"}).Rows DdlLoteFechaCaducidad.Items.Add(New ListItem($"Lote: {dr("Lote").ToString} - Cad: {dr("FechaCaducidad").ToString.ToDate.ToString("dd/MM/yyyy")}", $"{dr("Lote").ToString}|{dr("FechaCaducidad").ToString.ToDate.ToString("dd/MM/yyyy")}")) Next End If ObjInventarios.Dispose() End If If Not String.IsNullOrEmpty(ValorAsignado) Then DdlLoteFechaCaducidad.SelectedValueExist(ValorAsignado) End If End Sub Protected Sub GVINV_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles GvInv.RowEditing GvInv.EditIndex = e.NewEditIndex CargaGVInv(DtInv.FiltraParametros("CveTipoPS=2")) End Sub Protected Sub GVINV_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs) Handles GvInv.RowCancelingEdit GvInv.EditIndex = -1 CargaGVInv(DtInv.FiltraParametros("CveTipoPS=2")) End Sub Protected Sub GVINV_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GvInv.RowUpdating Dim Cantidad As Double = DirectCast(GvInv.Rows(e.RowIndex).FindControl("txtECantidad"), TextBox).Text.ToDouble DtInv.Rows.Item(e.RowIndex)("Cantidad") = Cantidad GvInv.DataSource = DtInv.FiltraParametros("CveTipoPS=2") End Sub #End Region #Region "GvInvNC" Protected Sub GvInvNCCheckClick(sender As Object, e As EventArgs) Dim chk As CheckBox = DirectCast(sender, CheckBox) Dim gvr As GridViewRow = DirectCast(chk.NamingContainer, GridViewRow) gvr.FCTextBox("Txtcantidad").Visible = chk.Checked UpINVNC.Update() End Sub 'Private Function SubTotalFacturaVinNC() As Decimal *** ESTABA TRONANDO EN COMPU 11/01/17 *** ' Dim retorno As Decimal = 0 ' If GvInvNC.Rows.Count = 0 Then ' Try ' If Not IsNothing(DTFacNC) AndAlso DTFacNC.FiltraParametros(String.Format("CveVenta={0}", DdlNCFactura.SelectedValue)).Rows.Count > 0 Then ' retorno = DTFacNC.FiltroPrimero(String.Format("CveVenta={0}", DdlNCFactura.SelectedValue))("SubTotal").ToString().ToDecimal ' End If ' Catch ex As Exception ' End Try ' Else ' For Each gvrow As GridViewRow In GvInvNC.Rows ' Dim txt As TextBox = gvrow.FCTextBox("Txtcantidad") ' If txt.Visible Then ' retorno += txt.Text.ToDecimal * gvrow.DataKey("PU").ToString().ToDecimal ' End If ' Next ' End If ' Return retorno 'End Function #End Region #Region "GvConceptos" Protected Sub GvConceptos_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles GvConceptos.RowDeleting DTmpC.Rows.RemoveAt(e.RowIndex) GvConceptos.DataSource = DTmpC GvConceptos.DataBind() UPCD.Update() UPCD.Update() End Sub Protected Sub GvConceptos_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles GvConceptos.RowEditing GvConceptos.DataSource = DTmpC GvConceptos.EditIndex = e.NewEditIndex GvConceptos.DataBind() End Sub Protected Sub GvConceptos_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs) Handles GvConceptos.RowCancelingEdit GvConceptos.EditIndex = -1 GvConceptos.DataSource = DTmpC GvConceptos.DataBind() End Sub Protected Sub GvConceptos_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GvConceptos.RowUpdating DTmpC.Rows(e.RowIndex)("Descripcion") = GvConceptos.Rows(e.RowIndex).FCTextBox("tbDescCE").Text GvConceptos.EditIndex = -1 GvConceptos.DataSource = DTmpC GvConceptos.DataBind() End Sub #End Region #Region "GvFirma" Protected Sub GvFirmas_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvFirmas.RowDataBound If e.Row.RowType = DataControlRowType.DataRow And Not e.Row.RowState = DataControlRowState.Edit Then If e.Row.DBCampo("Lado") = "0" Then e.Row.FCLabel("lbPosF").Text = "Der." ElseIf e.Row.DBCampo("Lado") = "1" Then e.Row.FCLabel("lbPosF").Text = "Izq." End If End If End Sub Protected Sub GvFirmas_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles GvFirmas.RowDeleting DTmpF.Rows.RemoveAt(e.RowIndex) GvFirmas.DataSource = DTmpF GvFirmas.DataBind() UPCD.Update() UPFirmas.Update() End Sub Protected Sub GvFirmas_RowEditing(sender As Object, e As GridViewEditEventArgs) Handles GvFirmas.RowEditing GvFirmas.DataSource = DTmpF GvFirmas.EditIndex = e.NewEditIndex GvFirmas.DataBind() End Sub Protected Sub GvFirmas_RowCancelingEdit(sender As Object, e As GridViewCancelEditEventArgs) Handles GvFirmas.RowCancelingEdit GvFirmas.EditIndex = -1 GvFirmas.DataSource = DTmpF GvFirmas.DataBind() End Sub Protected Sub GvFirmas_RowUpdating(sender As Object, e As GridViewUpdateEventArgs) Handles GvFirmas.RowUpdating DTmpF.Rows(e.RowIndex)("Titulo") = GvFirmas.Rows(e.RowIndex).FCTextBox("tbTituloFE").Text DTmpF.Rows(e.RowIndex)("Nombre") = GvFirmas.Rows(e.RowIndex).FCTextBox("tbNmbFE").Text DTmpF.Rows(e.RowIndex)("Puesto") = GvFirmas.Rows(e.RowIndex).FCTextBox("tbPuestFE").Text DTmpF.Rows(e.RowIndex)("Lado") = GvFirmas.Rows(e.RowIndex).FCDropDownList("ddlPosE").SelectedValue GvFirmas.EditIndex = -1 GvFirmas.DataSource = DTmpF GvFirmas.DataBind() End Sub #End Region #Region "GvIEPS" 'Protected Sub GvIEPS_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvIEPS.RowDataBound ' If e.Row.RowType = DataControlRowType.DataRow Then ' e.Row.FCLiteral("LtlIEPS").Text = String.Format("IEPS ({0}):", If(e.Row.DBCampo("PorcentajeIEPS").ToDecimal = 0.03, "3%", If(e.Row.DBCampo("PorcentajeIEPS").ToDecimal = 0.06, "6%", If(e.Row.DBCampo("PorcentajeIEPS").ToDecimal = 0.07, "7%", "9%")))) ' End If 'End Sub #End Region #End Region #Region " EMITIR IMPRIMIR - GUARDAR " Protected Sub BtnEmitirImprimir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnEmitirImprimir.Click Try EmitirImprimir() Catch ex As Exception OnError(ex.ToString(), ex) End Try End Sub Private Sub EmitirImprimir(Optional TipoDoctoViejo As String = "") DtRemisionesTmpDT = TmpDT.Copy DtPedidosTmpDT = TmpDT.Copy DtCotizacionTmpDT = TmpDT.Copy DtOCTmpDT = TmpDT.Copy TmpDTError = TmpDT.Copy If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem", "Egs", "Dev") Then If RegimenFiscalCliente.Contiene("-1", "") Then Alert("El cliente no tiene asignado un régimen fiscal.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlUsoCFDI.SelectedValue.ToEntero() <= 0 Then Alert("No se ha seleccionado el Uso CFDI o el cliente no tiene asignado el correcto.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If ChkEmitirComercioExterior.Checked AndAlso DdlMoneda.SelectedValue.ToEntero() <> 2 Then Alert("La moneda de la factura debe ser dolares cuando aplica comercio exterior.", TipoMensaje.MsgAdvertencia) Exit Sub End If If ChkEmitirComercioExterior.Checked AndAlso ChkAplicaDestinatario.Checked AndAlso DdlDirecionDestinatario.SelectedValue.ToEntero() <= 0 Then Alert("Debe seleccionar un destino para comercio exterior.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Egs", "Dev") Then If LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso RegimenFiscalCliente <> "616" Then Alert("El Regimen fiscal del cliente debe ser '616 - Sin obligaciones fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) Exit Sub End If If LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlUsoCFDI.SelectedValue <> "23" Then Alert("El uso cfdi del cliente debe ser 'S01 - Sin efectos fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'hay RFC con regimen 616, con evidencia de constancia 'If Not LblRFC.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso RegimenFiscalCliente = "616" Then ' Alert("El Regimen fiscal del cliente no puede ser '616 - Sin obligaciones fiscales' si no se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If Dim EsPersonaMoral As Boolean = Me.TipoPersona Dim DtUsosCFDI As DataTable = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente).FiltraParametros($"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") If DtUsosCFDI.Rows.Count = 0 Then Alert("El Uso CFDI no corresponde con el tipo de persona (fisca, moral) y el régimen fiscal.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso TxtAtencionA.Text.Trim.Length = 0 Then Alert("El campo 'Atención A' es requerido. Favor de llenarlo", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim RequiereVendedor As Boolean = UsuarioActual.Empresa.Funcionalidad(578) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1" If RequiereVendedor AndAlso DdlVendedor.SelectedValue.ToEntero <= 0 Then ' SMS. vendedor requerido Alert("El Vendedor es requerido. Favor de seleccionarlo", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not ValidaImportePublicoGeneral() Then Exit Sub End If If (Me.FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) Then Alert("La sucursal no tiene asignada un RFC.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'CUANDO ES PEDIDO SE DEBE ESPECIFICAR EL NUMERO DE CONTRATO If TrTipoPedido.Visible AndAlso DdlTipoPedido.SelectedIndex = 2 Then If String.IsNullOrEmpty(TxtObsFact.Text.Trim()) Then Alert("Se debe especificar el Número de contrato.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 AndAlso TrKilometraje.Visible Then If TxtKilometraje.Text.Length < 6 Then Alert("El kilometraje debe tener 6 digitos.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If ChkEmitirCartaPorte.Checked Then If DdlDireccionOrigen.SelectedValue.ToEntero() <= 0 Then Alert("La carta porte no tiene un origen definido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlDireccionDestino.SelectedValue.ToEntero() <= 0 Then Alert("La carta porte no tiene un destino definido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlChofer.SelectedValue.ToEntero() <= 0 Then Alert("La carta porte no tiene un chofer definido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlUnidadCamion.SelectedValue.ToEntero() <= 0 Then Alert("La carta porte no tiene un chofer definido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If String.IsNullOrEmpty(TxtDistancia.Text.Trim) Then Alert("La carta porte no tiene la distancia definida.", TipoMensaje.MsgAdvertencia) Exit Sub End If If String.IsNullOrEmpty(TxtFechaEntregaCP.Text.Trim) Then Alert("La carta porte no tiene la F.Salida definida.", TipoMensaje.MsgAdvertencia) Exit Sub End If If String.IsNullOrEmpty(TxtFechaLlegadaCP.Text.Trim) Then Alert("La carta porte no tiene la F.Llegada definida.", TipoMensaje.MsgAdvertencia) Exit Sub End If If TxtFechaLlegadaCP.Text.ToDateTime() < TxtFechaEntregaCP.Text.ToDateTime() Then Alert("La fecha de llegada no puede ser menor al fecha de salida.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DtMercancias Is Nothing OrElse DtMercancias.Rows.Count = 0 Then Alert("La carta porte no tiene mercancía definida.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DvConfiguracionVeiculo.Visible Then If DdlConfigAuto.SelectedValue.ToEntero() <= 0 Then Alert("La carta porte no tiene la configuración definida.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If 'CUANDO ES COTIZACION Y SE VA A FACTURAR SE HACE INGRESO If DdlTipoComprobante.SelectedValue = "Cot" AndAlso BtnEmitirImprimir.Text = "Facturar" Then DdlTipoComprobante.SelectedValue = "Ing" EraCotizacion = 1 TxtFecha.Text = NowADS().ToString() TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranza), NowADS().AddDays(PlazoCobranza)).ToShortDateString TxtFechaEjecucion.Text = NowADS().ToString() 'debo de regenerar los folios, para facturar CargaFolios() End If 'VALIDACIONES If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If TmpDT Is Nothing OrElse TmpDT.Rows.Count = 0 Then Alert("Es necesario tener al menos un concepto registrado.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'Subproyecto Obligatorio If UsuarioActual.Empresa.Funcionalidad(120) = "1" AndAlso TmpDT.FiltraParametros("ISNULL(CveSubProyecto,0) <= 0").Rows.Count > 0 Then Alert("El Subproyecto de los conceptos es obligatorio, Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'VENDEDOR OBLIGATORIO If DdlVendedor.SelectedValue.ToEntero() <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then Alert("Debe seleccionar un vendedor.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlLineaAdicional.SelectedValue.ToEntero() > 0 AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Egs", "Dev") Then Alert("No se puede seleccionar una linea adicional de crédito si no se genera una remisón.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'SI TIENE ANTICIPOS Y ESTA AMORTIZADO AL 100% EL DOCUMENTO (SALDO = 0) | NO VALIDA PU DEL CONCEPTO If Not (LblAmortizacion.Text.ToDouble > 0 And TxtTotal.Text.ToDouble <= 0) Then If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant", "DPe") Then If UsuarioActual.CveEmpresa.Contiene(72, 80) Then If TmpDT.FiltraParametros($"TotalImporte = 0").Rows.Count > 0 Then Alert("El importe de cada concepto debe ser mayor a cero. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If End If Dim CveContratoTipo As Integer = 0 If CveContrato > 0 Then Dim ObjContrato As New ClsContratos If ObjContrato.GetContratos(CveContrato, UsuarioActual.CveEmpresa) Then If ObjContrato.DtResultados.Rows.Count > 0 Then CveContratoTipo = ObjContrato.DtResultados.Rows(0)("CveContratoTipo").ToString().ToEntero() End If End If ObjContrato.Dispose() End If Me.CveAutorizacion = -1 Dim PermiteAutorizacion As Boolean = False If DdlTipoComprobante.SelectedValue.Contiene("Ing") Then PermiteAutorizacion = True End If If DdlTipoComprobante.SelectedValue.Contiene("Rem") AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" Then PermiteAutorizacion = True End If 'SI ES A CREDITO DEBE VERIFICAR SI TIENE AUTORIZACIONES If UsuarioActual.Empresa.Funcionalidad(595) = "2" AndAlso CveCliente > 0 AndAlso PermiteAutorizacion AndAlso RBLPago.SelectedValue = "1" Then Dim TipoDocumentoAutorizacion As String = "" Dim ImporteAutorizacion As Decimal = 0 Dim TipoAutorizacion As Integer = 0 Dim DiasVencidosAutorizacion As Integer = 0 Dim CveVendedor As Integer = DdlVendedor.SelectedValue.ToEntero() Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, CveVendedor, "Ing", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO If TieneDiasVencidos Then RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion IN(1,2) AND CveVenta IS NULL AND CveTipoDocumento='{"Ing"}'", Orderby:="Importe DESC") Else RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='{"Ing"}'", Orderby:="Importe DESC") End If If RowAutorizacion IsNot Nothing Then TipoDocumentoAutorizacion = RowAutorizacion("CveTipoDocumento").ToString() ImporteAutorizacion = RowAutorizacion("Importe").ToString().ToDecimal() CveAutorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() TipoAutorizacion = RowAutorizacion("TipoAutorizacion").ToString().ToEntero() DiasVencidosAutorizacion = RowAutorizacion("DiasVencidos").ToString().ToEntero() End If End If ObjVentas.Dispose() If TipoDocumentoAutorizacion = "Ing" Then If TipoAutorizacion = 1 Then If ImporteAutorizacion < TxtTotal.Text.ToDecimal() Then Dim BloquearCredito As Boolean = True CveAutorizacion = -1 'VERIFICA SI TIENE CREDITO DISPONIBLE DENTRO DEL CLIENTE Dim ObjCred As New ClsVentas If ObjCred.ObtenerCreditoRestante(CveCliente, DdlSucursalCliente.SelectedValue.ToEntero()) AndAlso ObjCred.DtResultados.Rows.Count > 0 Then 'SI TIENE CREDITO DISPONIBLE NO BLOQUEAR AUNQUE LA AUTORIZACION NO TENGA EL IMPORTE DEL DOCUMENTO If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then If (ObjCred.DtResultados(0)("LimiteRestanteSucursal").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal)) > 0 Then BloquearCredito = False End If Else If (ObjCred.DtResultados(0)("LimiteRestanteCliente").ToString().ToDecimal - If(TxtTipoCambio.Visible, TxtTotal.Text.ToDecimal * TxtTipoCambio.Text.ToDecimal, TxtTotal.Text.ToDecimal)) > 0 Then BloquearCredito = False End If End If End If ObjCred.Dispose() If BloquearCredito Then Alert($"El crédito autorizado es insuficiente. Crédito Disponible:{ImporteAutorizacion:N2}", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If 'SI NO SE ENCONTRO NINGUA AUTORIZACION If TipoAutorizacion = 0 Then If TieneDiasVencidos Then CveAutorizacion = -1 Alert($"El crédito no esta autorizado. El cliente tiene días vencidos", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If End If 'VALIDACION DE AUTORIZACION PARA NC, POR AHORA SOLO BDH If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveCliente > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Egs") Then PermiteAutorizacion = False 'SI NO ES GENERADA CON REMISIONES DE NC, UTILIZAR LA AUTORIZACION If (ListaRemisionesNC Is Nothing OrElse ListaRemisionesNC.Count = 0) Then PermiteAutorizacion = True End If If PermiteAutorizacion Then VerificaAutorizacionEgs(VerificarImportes:=True) If Me.CveAutorizacion <= 0 Then Exit Sub End If End If End If 'VALIDAR LINEAS ADICIONALES If UsuarioActual.Empresa.Funcionalidad(705) = "1" AndAlso DdlLineaAdicional.SelectedValue.ToEntero() > 0 Then 'VERIFICA QUE LA CATEGORIA DE LOS PRODUCTOS DEBE SER LA MISMA DE LA LINEA ADICIONAL If TmpDT IsNot Nothing AndAlso Me.CveCategoriaLineaAdicional > 0 Then For Each Row As DataRow In TmpDT.FiltraParametros("", DistinctColumns:={"CveClasificacion"}).Rows Dim RowClasificacion As DataRow = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=Row("CveClasificacion").ToString().ToEntero()).FiltroPrimero("") If RowClasificacion IsNot Nothing Then Dim CveCategoria As Integer = RowClasificacion("CveCategoria").ToString().ToEntero() Dim Categoria As String = RowClasificacion("Categoria").ToString() If Me.CveCategoriaLineaAdicional <> CveCategoria Then Alert($"La categoría '{Categoria}' no pertenece a la linea adicional.", TipoMensaje.MsgAdvertencia) Exit Sub End If Else Alert($"No se encontro la clasificación.", TipoMensaje.MsgAdvertencia) Exit Sub End If Next End If 'SI NO ES A CREDITO NO SELECCIONAR LINEA ADICIONAL If RBLPago.SelectedValue <> "1" Then Alert($"La linea adicional debe ser utilizada en una venta a crédito.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Me.SaldoLineaAdicional <= 0 Then Alert("El saldo de la linea adicional debe ser mayor a cero", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'VALIDA PRECIO AL AGREGAR A ALMACEN If Not UsuarioActual.TienePermisoProceso(169) Then If (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") AndAlso NuevaFactura <> 1) Or (DdlTipoComprobante.SelectedValue = "Cot" AndAlso BtnEmitirImprimir.Text = "Facturar") Or (DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119)) Then Dim MensajeCosto As New StringBuilder Dim CostoMenor As Decimal = 0.0D Dim CostoMayor As Decimal = 0.0D Dim Costo As Decimal = 0.0D Dim EsValido As Boolean = False 'BANDERA Dim EsValidoMayor As Boolean = False Dim EsValidoPU As Boolean = True 'SOLO SE VALIDA CUANDO EL TXTPU = 0 Y LO INVALIDA ALGUNA PROMOCION 'VALIDA PROMOCIONES Y EXISTENCIAS Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() Dim ObjInventarios As New ClsInventarios Dim PU As Decimal = 0.0D Dim Cantidad As Double Dim CveUnidad As Integer Dim CveProducto As Integer Dim Existencia As Double Dim CveAlmacen As Integer = ddlAlmacen.SelectedValue.ToEntero() Dim tCveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() If UsuarioActual.CveEmpresa = 199 Then tCveSubProyecto = -1 For Each dr As DataRow In TmpDT.FiltraParametros("CveTipoPS = 2").Rows If DdlTipoComprobante.SelectedValue <> "Cot" And ChkSinExistencia.Checked = False Then 'VALIDA EXISTENCIA CveProducto = dr("CvePS").ToString().ToEntero() CveUnidad = dr("CveUM").ToString().ToEntero() Cantidad = TmpDT.SUM("Cantidad", $"CvePS = {CveProducto} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") 'VALIDA CONTRA LA SUMA DEL MISMO PS If UsuarioActual.Empresa.UsaInventarios AndAlso RemisionesLista.Count < 1 AndAlso dr("EntregaDirecta").ToString().ToEntero() < 1 Then Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Existencia = ObjInventarios.GetExistenciasPS(CveProducto, CveUnidad, UsuarioActual.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=tCveSubProyecto, CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) If Existencia < Cantidad Then MensajeCosto.AppendFormat("
    El Producto {0}. No cuenta con la cantidad suficiente en inventario. Cuenta con {1}.", dr("CodigoPS").ToString(), Existencia.FormatoNumero(2)) Continue For End If End If End If EsValido = False EsValidoMayor = False EsValidoPU = True PU = dr("PU").ToString().ToDecimal * If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDecimal) If UsuarioActual.Empresa.Funcionalidad(602) = "UC" Then 'validación sobre el último costo If ObjInventarios.GetUltimoCosto(UsuarioActual.CveEmpresa, dr("CvePS").ToString().ToEntero()) Then Dim drps As DataRow = ObjInventarios.DtResultados.FiltroPrimero("") If drps IsNot Nothing Then Costo = drps("UltimoCosto").ToString.ToDecimal End If End If Else Costo = ObjInventarios.GetCostoPS(dr("CvePS").ToString().ToEntero(), dr("Cantidad").ToString().ToDecimal, -1, "-1", TxtFecha.Text.ToDate, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveTipoAlmacen:=1) End If Dim PrecioMinimo As Decimal = 0 'RMF. condicion temporal, para reubicación, precio mínimo If UsuarioActual.CveEmpresa = 119 Then 'Dim CvePrecioLista As Integer = 38 Dim objPS As New ClsProductosServicios If objPS.GetPSSucursalesALL(dr("CvePS").ToString().ToEntero(), UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) Then PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal 'If PrecioMinimo > 0 Then ' Costo = PrecioMinimo 'End If End If objPS.Dispose() End If Dim PorcentajeMinimoCostoEmpresa = UsuarioActual.Empresa.Funcionalidad(129).ToDecimal If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then Dim DrPSCosto As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=dr("CvePS").ToString().ToEntero()).Rows(0) If DrPSCosto IsNot Nothing Then If DrPSCosto("PorcentajeMinimoUtilidad").ToString <> "" AndAlso DrPSCosto("PorcentajeMinimoUtilidad").ToString().ToDecimal() <> 0 Then PorcentajeMinimoCostoEmpresa = DrPSCosto("PorcentajeMinimoUtilidad").ToString().ToDecimal() End If End If End If 'PRECIO MINIMO If PorcentajeMinimoCostoEmpresa <> 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo If PrecioMinimo > 0 Then 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC EsValido = True End If Else CostoMenor = Costo + ((PorcentajeMinimoCostoEmpresa / 100) * Costo) 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA If PU * If(DdlMoneda.SelectedValue = "1", 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then EsValido = True End If End If Else EsValido = True End If If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA If PU <= CostoMayor Then EsValidoMayor = True End If Else EsValidoMayor = True End If 'VALIDA PROMOCION: SI TIENE PROMOCION Y EL PRECIO ES MENOR AL PRECIO DE PROMOCION, NO PASA | SI YA CUMPLE NO VUELVE A VALIDAR If Not EsValido Or PU = 0 Then If DtPromociones.FiltraParametros($"CvePS = {dr("CvePS").ToString().ToEntero()}").Rows.Count > 0 Then If PU * If(DdlMoneda.SelectedValue = "1", 1, TxtTipoCambio.Text.ToDecimal) >= DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {dr("CvePS").ToString().ToEntero()}").ToDecimal Then EsValido = True Else EsValidoPU = False ' SI NO ENTRA DENTRO DE LA PROMOCION NO SE PUEDE VENDER A 0 End If Else EsValidoPU = False ' SI NO TIENE PROMOCION NO SE PUEDE VENDER A 0 End If End If If dr("CvePromocionDetalle").ToString.ToEntero > 0 Then EsValido = True 'NO DEJA REGISTRAR CON VALIDACION DE COSTO ALMACEN O PROMOCION Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) If Not EsValido Then MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio menor de su Costo ni a un precio mayor de su rango aceptado
    ", dr("CodigoPS").ToString()) If TienePermisoImportes Then MensajeCosto.AppendFormat("El costo del producto es: {0:#,###.00}$
    ", Costo) MensajeCosto.AppendFormat("El rango menor aceptado es: {0} {1:#,###.00}$
    ", PorcentajeMinimoCostoEmpresa, CostoMenor) MensajeCosto.AppendFormat("El precio indicado es: {0:#,###.00}$ ({1}% de ganancia)
    ", PU.FormatoNumero, If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)) End If End If If Not EsValidoMayor Then MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", dr("PS").ToString()) If TienePermisoImportes Then MensajeCosto.AppendFormat("El costo del producto es: {0:#,###.00}$
    ", Costo) MensajeCosto.AppendFormat("El rango mayor aceptado es: {0} {1:#,###.00}$
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) MensajeCosto.AppendFormat("El precio indicado es: {0:#,###.00}$ ({1}% de ganancia)
    ", PU.FormatoNumero, If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)) End If End If ' SOLO SI TIENE LA FUNCIONALIDAD DE RESTRICCION VALIDA EL IMPORTE CERO If UsuarioActual.Empresa.Funcionalidad(139).ToString().ToEntero() > 0 Then If Not EsValidoPU Then MensajeCosto.AppendFormat($"El producto {dr("PS").ToString()}. No se puede vender a un importe de cero ($0)", TipoMensaje.MsgAdvertencia) End If End If Next ObjInventarios.Dispose() If MensajeCosto.ToString().Length > 1 Then Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) MensajeCosto.Clear() Exit Sub End If End If End If 'Valida si en caso de que el detalle tenga llantas o polizas se agreguén kilometraje/serie en la parte de observaciones(solo para el caso de empresas llanteras) If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then If TxtKilometraje.Text.ToEntero() = 0 Then 'cuando es la clasificacion de llantas Dim FaltaObservacion As Integer = TmpDT.MAX("CveClasificacion", "Clasificacion like '%Llanta%'").ToEntero '.FiltroPrimeroValor("CveClasificacion", "CveClasificacion = 20342").ToEntero() If FaltaObservacion > 0 Then 'sino se ha especificado km cuando tiene al clasif llanta Alert("No se ha especificado el kilometraje.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If TxtObsFact.Text = "" Then Dim FaltaObservacion As Integer = -1 'For Each PS As GridViewRow In GvPS.Rows ' Dim PsRenglon As GridViewRow = PS ' Dim CveClasificacion As Integer = PsRenglon.DataKey("CveClasificacion").ToEntero() ' If CveClasificacion = 20345 Or CveClasificacion = 20342 Then ' FaltaObservacion = CveClasificacion ' Exit For ' End If ' FaltaObservacion = TmpDT.FiltroPrimeroValor("CveClasificacion", "CveClasificacion = 20345").ToEntero() 'cuando es la clasificacion de polizas If FaltaObservacion = 20345 Then Alert("No se ha especificado la serie para la poliza en la sección de Observaciones", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If If UsuarioActual.Empresa.Funcionalidad(135) = "1" And DdlTipoComprobante.SelectedValue = "Cot" Then Alert("Se mando autorización al supervisor.", TipoMensaje.MsgInformacion) MandarCorreoSupervisor = True Dim CorreoSupervisor As String = "" Dim Objeto As New ClsVtaVendedores Dim DTSupervisores As New DataTable If Objeto.GetVendedores(UsuarioActual.CveEmpresa) Then DTSupervisores = Objeto.DtResultados.FiltraParametros(String.Format("CveVendedor = {0}", DdlVendedor.SelectedValue.ToEntero())) 'Verifico si el supervisor tiene correo para proceder If DTSupervisores.Rows.Count > 0 Then CorreoSupervisor = DTSupervisores.Rows(0)("CorreoSupervisor").ToString() End If End If DTSupervisores.Dispose() Objeto.Dispose() If MandarCorreoSupervisor = True And CorreoSupervisor <> "" Then ViewState("Mail") = CorreoSupervisor End If MandarCorreoSupervisor = False End If If RequiereOC AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Ing") AndAlso Not CveDevolucion > 0 Then If Not CargaDocumentoOC AndAlso UsuarioActual.Empresa.Funcionalidad(382) <> "1" Then Alert("Tiene que cargar un archivo de orden de compra", TipoMensaje.MsgAdvertencia) Exit Sub End If If TxtOrdenCompra.Text.Trim = "" Then Alert("Tiene que especificar un folio de orden de compra", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If DivAlmacen.Visible AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Dev") AndAlso GvInv.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("cbInv").Checked) > 0 AndAlso ddlAlmacen.SelectedValue.ToEntero() <= 0 Then Alert("Seleccione el almacén del cual saldrán los productos.", TipoMensaje.MsgAdvertencia) Exit Sub End If EmitirImprimirNew(TipoDoctoViejo) End Sub Private Sub VerificaAutorizacionEgs(Optional VerificarImportes As Boolean = True, Optional MostrarAlertas As Boolean = True) Dim ImporteAutorizacion As Decimal = 0 Dim TipoAutorizacion As Integer = 0 Dim CveVendedor As Integer = DdlVendedor.SelectedValue.ToEntero() Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, CveVendedor, "Egs", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = Nothing 'SI TIENE DIAS VENCIDOS BUSCAR POR TIPO VENCIMIENTO RowAutorizacion = ObjVentas.DtResultados.FiltroPrimero($"TipoAutorizacion = 1 AND CveVenta IS NULL AND CveTipoDocumento='Egs'", Orderby:="Importe DESC") If RowAutorizacion IsNot Nothing Then ImporteAutorizacion = RowAutorizacion("Importe").ToString().ToDecimal() CveAutorizacion = RowAutorizacion("CveAutorizacion").ToString().ToEntero() TipoAutorizacion = RowAutorizacion("TipoAutorizacion").ToString().ToEntero() End If End If ObjVentas.Dispose() If TipoAutorizacion = 1 Then If VerificarImportes Then If ImporteAutorizacion < TxtTotal.Text.ToDecimal() Then Dim BloquearCredito As Boolean = True CveAutorizacion = -1 If BloquearCredito Then If MostrarAlertas Then Alert($"El importe autorizado es insuficiente. Importe autorizado:{ImporteAutorizacion:N2}", TipoMensaje.MsgAdvertencia) End If Exit Sub End If End If End If Else CveAutorizacion = -1 If MostrarAlertas Then Alert($"No se encontro una autorización de crédito.", TipoMensaje.MsgAdvertencia) End If Exit Sub End If End Sub #End Region #Region " NNNNEEEEEEEWWWWWW " Private Sub InicializaImprimirNew() Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta)) Dim Archivo2 As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoSti As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.mrt", UsuarioActual.Empresa.Ruta)) Dim ArchivoSti2 As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.mrt", UsuarioActual.Empresa.Ruta)) Dim ArchivoSti3 As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) LnkImprimir.Visible = False 'If (UsuarioActual.CveEmpresa.Contiene(1, 4, 5, 7, 11, 12, 72, 80, 81, 83) And UsuarioActual.CveUsuario = 100) Or UsuarioActual.CveEmpresa.Contiene(80, 83) Or UsuarioActual.CveUsuario = 100 Then If (Archivo.Exists Or Archivo2.Exists Or ArchivoSti.Exists Or ArchivoSti2.Exists Or ArchivoSti3.Exists) And IfNull(CveVenta, 0).ToString().ToEntero() > 0 Then If Not UsuarioActual.TienePermisoProceso(380) Then HplDownPDF.Visible = True HplDownPDF.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) If UsuarioActual.TienePermisoProceso(359) Then HplRenerarPDF.Visible = True HplRenerarPDF.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1®ENERAR=1", CveVenta))) End If If UsuarioActual.CveRol = 1 Then LnkDescargaDirecta.Visible = True HplImprimirPDFStimulsoft.Visible = True HplImprimirPDFStimulsoft.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=0&STIMULSOFT=1", CveVenta))) HplImprimirTicket.Visible = True HplImprimirTicket.NavigateUrl = String.Format("/Compras/PopUpVerFactura.aspx?P={0}", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1&TICKET=1®ENERAR=1", CveVenta))) End If End If End If 'NO DEBE IMPRIMIR PDF DE COTIZACION If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then HplDownPDF.Visible = False End If UpnTools.Update() End Sub Protected Sub EmitirImprimirNew(Optional TipoDoctoViejo As String = "") OrdenarPS(Reeordenar:=False, RecargarGV:=False) If Not ValidaVentaContratoObra() Then Exit Sub End If If Not ValidaPorcentajeIVA() Then Exit Sub End If If ValidaPagosContado(TipoDoctoViejo:=TipoDoctoViejo) Then Exit Sub End If 'VALIDAR CONDICONES COMERCIALES If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot") AndAlso ClienteEsDistribuidor Then CargaPorcentajeMarcas() Dim ValidoDescuentos As Boolean = True If DtPorcentajeMarcas IsNot Nothing AndAlso DtPorcentajeMarcas.Rows.Count > 0 Then For Each Row As DataRow In TmpDT.Rows Dim CvePS As Integer = Row("CvePS").ToString().ToEntero() Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim PU As Decimal = Row("PU").ToString().ToDecimal() Dim Descuento As Decimal = Row("Descuento").ToString().ToDecimal() Dim EsGarantia As Boolean = Me.EsGarantia OrElse Row("Obs").ToString().Contains("Descuento por garantía") If Not EsGarantia Then If Not ValidaPorcentajeMarcas(CvePS, Cantidad, PU, Descuento) Then ValidoDescuentos = False Exit For End If End If Next End If If Not ValidoDescuentos Then Exit Sub End If End If 'validaciones, si es Anticipo solo permitir "servicios de facturación" y si es ingreso todos menos serv. factu If UsuarioActual.Empresa.Funcionalidad(601) <> "" Then If UsuarioActual.Empresa.Funcionalidad(601) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Ant" Then 'valida anticipo que tenga conceptos válidos Dim tCont As Integer = TmpDT.FiltraParametros("SATClaveProdServ<>'84111506'").Rows.Count If tCont > 0 Then Alert("Al facturar 'Anticipos' solo son permitidos código SAT '84111506'.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If UsuarioActual.Empresa.Funcionalidad(601) = "2" AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then Dim tCont As Integer = TmpDT.FiltraParametros("SATClaveProdServ='84111506'").Rows.Count If tCont > 0 Then Alert("Existen productos con código SAT '84111506' no permitido al facturar ingresos.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If 'CREA UNA COPIA DE SEGURIDAD PARA LOS DATOS DEL TMPDT If TmpDTError Is Nothing OrElse TmpDTError.Rows.Count = 0 Then TmpDTError = TmpDT.Copy() End If If UsuarioActual.CveRol = 1 AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso TbDescuentosAdicionales.Visible Then If LblDescuentoAdicional.Text.ToDecimal() > 0 Then Dim TotalDescuento As Decimal = LblDescuentoAdicional.Text.ToDecimal() / (1D + TmpDT.MAX("PorcentajeIVA").ToString().ToDecimal()) Dim RowDescuentos As DataRow() = TmpDT.Select("Descuento > 0") If RowDescuentos IsNot Nothing Then Dim Row As DataRow = RowDescuentos(0) Row("Descuento") = Row("Descuento").ToString().ToDecimal() + TotalDescuento Dim TotalCalculableImpuestos As Decimal = (Row("Cantidad").ToString().ToDecimal() * Row("PU").ToString().ToDecimal()) - Row("Descuento").ToString().ToDecimal() Row("ImporteIVA") = (TotalCalculableImpuestos * Row("PorcentajeIVA").ToString().ToDecimal()).RoundSQL(2) CalculaTotalesVenta(RecalcularTotalOriginal:=False) 'UpPS.Update() 'VALIDA EL CALCULO DE LOS DESCUENTOS If (LblTotalOriginal.Text.ToDecimal() - LblDescuentoAdicional.Text.ToDecimal()) <> TxtTotal.Text.ToDecimal() Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("Ocurrió un error al procesar los datos de la Venta. Los descuentos no coinciden con el importe final", TipoMensaje.MsgError) Exit Sub End If End If End If End If 'REASIGNAR LAS VARIABLES CUANDO HUBO EDICION POR JS O EN LA INTERFAZ If GvImpuestosLocales2.Rows.Count > 0 Then Dim ImpuestosLocales As Decimal = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then ImpuestosLocales += gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal End If Next If ImpuestosLocales > 0 Then CalculaTotalesVenta(RecalculaImpuestosLocales:=False, RecalcularTotalOriginal:=False) End If End If CreaObjetosVenta(TipoDoctoViejo:=TipoDoctoViejo) If ObjFactura Is Nothing OrElse (ObjFactura.Cliente Is Nothing And Not CveEmpresaCRM > 0) Then Alert("Ocurrió un error al procesar los datos de la Venta.", TipoMensaje.MsgError) ObjFactura = Nothing Exit Sub End If If UsuarioActual.Empresa.Funcionalidad(705) = "1" AndAlso DdlLineaAdicional.SelectedValue.ToEntero() > 0 Then 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE If ObjFactura.TipoDocto = "Ing" Then If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES If Me.CveMonedaLineaAdicional = 1 AndAlso ObjFactura.CveMoneda = 2 Then Dim SaldoUSD As Decimal = SaldoIngresosLineaAdicional / TxtTipoCambio.Text.ToDecimal() If SaldoUSD < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS If Me.CveMonedaLineaAdicional = 2 AndAlso ObjFactura.CveMoneda = 1 Then Dim SaldoMXN As Decimal = SaldoIngresosLineaAdicional * TxtTipoCambio.Text.ToDecimal() If SaldoMXN < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Else 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA If Me.SaldoIngresosLineaAdicional < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If If ObjFactura.TipoDocto = "Rem" Then If Me.CveMonedaLineaAdicional <> ObjFactura.CveMoneda Then 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES If Me.CveMonedaLineaAdicional = 1 AndAlso ObjFactura.CveMoneda = 2 Then Dim SaldoUSD As Decimal = SaldoLineaAdicional / TxtTipoCambio.Text.ToDecimal() If SaldoUSD < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS If Me.CveMonedaLineaAdicional = 2 AndAlso ObjFactura.CveMoneda = 1 Then Dim SaldoMXN As Decimal = SaldoLineaAdicional * TxtTipoCambio.Text.ToDecimal() If SaldoMXN < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Else 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA If Me.SaldoLineaAdicional < ObjFactura.Total Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE 'If ObjFactura.TipoDocto = "Rem" AndAlso Me.SaldoLineaAdicional < ObjFactura.Total Then ' TmpDT = TmpDTError.Copy() ' CalculaTotalesVenta(RecalcularTotalOriginal:=False) ' Alert("El saldo de la linea adicional debe ser mayor o igual al de la remisión", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If If UsuarioActual.CveEmpresa <> 158 AndAlso ObjFactura.TipoDocto = "Ing" AndAlso (DtRemisionesPS Is Nothing OrElse DtRemisionesPS.Rows.Count = 0) Then TmpDT = TmpDTError.Copy() CalculaTotalesVenta(RecalcularTotalOriginal:=False) Alert("No se puede generar un ingreso con una linea adicional de credito si este no viene de una remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'VALIDA TOTAL DE LA NOTA DE CREDITO Y LA FACTURA VINCULADA *** ESTABA TRONANDO EN COMPU 11/01/17 *** 'If ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then ' If SubTotalFacturaVinNC() > 0 Then 'pendiente ' If GvInvNC.Rows.Count > 0 Then 'pendiente ' If Not (SubTotalFacturaVinNC() = TxtSubTotal.Text.ToDouble(ObjFactura.TipoCambio)) Then ' Alert(String.Format("El sub-total debe ser igual a '{0}'", SubTotalFacturaVinNC().FormatoNumero)) ' Exit Sub ' End If ' Else ' If SubTotalFacturaVinNC() < TxtSubTotal.Text.ToDouble(ObjFactura.TipoCambio) Then 'pendiente ' Alert(String.Format("El sub-total no puede exceder a : {0}", SubTotalFacturaVinNC().FormatoNumero)) ' Exit Sub ' End If ' End If ' End If 'End If If Not DdlTipoComprobante.SelectedValue.Contiene("Ped", "Ant", "DPe") Then If UsuarioActual.CveEmpresa.Contiene(72, 80) Then If ObjFactura.SubTotal <= 0 Then Alert("Es necesario especificar el importe en los conceptos. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If 'cuando es contado debe de tener especificado la forma de pago 'If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant") AndAlso ObjFactura.Total > 0 AndAlso RBLPago.SelectedValue = "2" AndAlso ObjFactura.Total - If(DtPagos Is Nothing, 0, DtPagos.SUM("Importe")) > 0 Then ' AndAlso ObjFactura.CveCorte > 0 ' Alert("No se han especificado las formas de pago. Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If If ObjFactura.CveCliente > 0 Or CveEmpresaCRM > 0 Then If TmpDT.Rows.Count > 0 Then BtnEmitirImprimir.Enabled = False Dim ObjVentas As New ClsVentas() Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) Dim ObjInventario As New ClsInventarios(ObjVentas.IniciaTransacSQL()) Dim ObjContr As New ClsContratos(ObjVentas.IniciaTransacSQL()) Dim ObjOS As New ClsOS(ObjVentas.IniciaTransacSQL()) Dim ObjBancos As New ClsBancos(ObjVentas.IniciaTransacSQL()) Dim ObjClientes As New ClsClientes(ObjVentas.IniciaTransacSQL()) Dim ObjEventos As New ClsOIEventos(ObjVentas.IniciaTransacSQL()) Dim ObjCGame As New ClsCGame(ObjVentas.IniciaTransacSQL()) Dim ObjDocCliente As New ClsEdocumentacion(ObjVentas.IniciaTransacSQL()) Dim ObjGeneral As New ClsGenerales(ObjVentas.IniciaTransacSQL()) Dim ObjAcum As New ClsAcumuladores(ObjVentas.IniciaTransacSQL()) 'Dim ObjFolios As New ClsGralFolios(ObjVentas.IniciaTransacSQL()) ErrorList = New List(Of String) MensajeAlert = New StringBuilder 'GUARDA VENTA Dim TieneAnticipo As Boolean = False Dim CveAnticipoPadre As Integer = 0 ' vinculación con anticipo Dim FolioFiscalRelacionado As String = "" If GVAnticipos.Rows.Count > 0 Then Dim actualindex As Integer = 0 For Each row2 As GridViewRow In GVAnticipos.Rows If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then TieneAnticipo = True CveAnticipoPadre = row2.DataKey("CveVenta").ToEntero() CveAnticipo = CveAnticipoPadre 'CUANDO ES REFACTURACION DEBE RELACIONAR CON LA FACTURA REFACTURADA If NuevaFactura <> 1 Then ObjFactura.CveVentaRelacion = CveAnticipoPadre 'relaciona al anticipo ObjFactura.ImporteRelacion = row2.FCTextBox($"TxtAnticipo{actualindex}").Text.ToDecimal FolioFiscalRelacionado = row2.DataKey("FolioFiscal") ObjFactura.CveVentaPadre = row2.DataKey("CveVenta").ToEntero() Else ObjFactura.CveVentaRelacion = CveDevolucion End If End If actualindex = actualindex + 1 Next End If Dim EsNCAmortizacion As Boolean = False If ObjFactura.TipoDocto = "Egs" AndAlso ChkAplicaNCAnticipo.Checked Then EsNCAmortizacion = True End If Dim CveVentaAnterior As Integer = Me.CveVenta Dim CveTimbreCartaPorte As Integer = -1 GuardarVenta(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, ObjFactura, TmpDT, ObjFactura.CveNCaVincular, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, EsNCAmortizacion:=EsNCAmortizacion, CveAnticipoPadre:=CveAnticipoPadre) If ErrorList.Count = 0 AndAlso ChkEmitirCartaPorte.Checked AndAlso ObjFactura.TipoDocto = "Ing" Then CveTimbreCartaPorte = GuardarCartaPorte(ObjFactura, ObjGeneral, ObjClientes) If CveTimbreCartaPorte <= 0 Then ErrorList.Add("Ocurrió un error al registrar la carta porte") End If End If 'Agregamos las OCs a la tabla If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso DTOrdenesCompraPS IsNot Nothing AndAlso DTOrdenesCompraPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then Dim CveVentaDetalle As Integer = 0 Dim CveOrdenCompraDetalle As Integer = 0 Dim Cantidad As Decimal = 0 For Each row As DataRow In TmpDT.Rows Cantidad = row("Cantidad").ToString().ToDecimal CveVentaDetalle = row("CveVentaDetalle").ToString().ToEntero() CveOrdenCompraDetalle = row("CveOrdenCompraDetalle").ToString().ToEntero() If Not ObjVentas.AgregarVentaOCDetalle(CveVentaDetalle, CveOrdenCompraDetalle, Cantidad) Then ErrorList.Add("Ocurrió un Error al agregar el detalle de la Remision") Exit For End If Next 'REGISTRAR UNA ENTREGA DIRECTA If TmpDT.COUNT("EntregaDirecta", "EntregaDirecta = 1") > 0 Then If Not RegistrarPaqueteriaGuia(ObjGeneral, ObjFactura.CveVenta) Then ErrorList.Add("Ocurrió un error al registrar la guia") End If End If End If If Not String.IsNullOrEmpty(TipoDoctoViejo) Then 'SI VIENE DE UNA AUTORIZACION If TipoDoctoViejo = "PA" Then If Not ObjEventos.AddEventoBitacora(String.Format("Se generó una remisión en Folio: {1}", ObjFactura.CveVenta, ObjFactura.SerieFolio), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaAnterior) Then ErrorList.Add("Ocurrió un error al agregar la bitacora de Póliza Virtual.") End If End If End If 'SI ES REFACTURACION Dim ObjNC As List(Of Object) = Nothing If ErrorList.Count = 0 Then If NuevaFactura = 1 Then 'SI YA ESTA MARCADA LA VENTA ANTERIOR If DevolucionAlmacenNC = 2 Then If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") End If 'MARCAR VENTA ANTERIOR If Not ObjInventario.ActualizarEsDevolucionVenta(CveDevolucion, 2) Then ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") End If Else 'MARCA LO PENDIENTE A NIVEL DETALLE Dim DtMovDetalles As DataTable = Nothing If ObjInventario.GetSaldoVentaDetalle(CveDevolucion, UsuarioActual.CveEmpresa) Then DtMovDetalles = ObjInventario.DtResultados.Copy() Else ErrorList.Add("No se pudo verificar los movimientos de almacen de la factura") End If 'MARCAR VENTA ANTERIOR If Not ObjInventario.ActualizarEsDevolucionVenta(CveDevolucion, 2) Then ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") End If If DtMovDetalles IsNot Nothing Then Dim CantidadTotal As Decimal = 0 Dim TotalSalida As Decimal = 0 For Each Row As DataRow In DtMovDetalles.Rows Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim SaldoAlmacen As Decimal = Row("SaldoAlmacen").ToString().ToDecimal() CantidadTotal += Cantidad If SaldoAlmacen < 0 AndAlso Cantidad = Math.Abs(SaldoAlmacen) Then TotalSalida += Math.Abs(SaldoAlmacen) If Not ObjInventario.UpdateEstatusAlmacen(Row("CveVentaDetalleNueva").ToString().ToEntero(), 1) Then ErrorList.Add("No se pudo actualizar el movimiento de almacen de la factura") End If End If Next 'SI SE VERIFICA QUE TODO ESTA SURTIDO, SE MARCA TODA LA FACTURA If CantidadTotal = TotalSalida Then If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") End If End If End If DtMovDetalles.Dispose() End If End If End If 'SI NO VIENE DE REMISION, MARCAR COMO SURTIDA If ErrorList.Count = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(199, 201) AndAlso ObjFactura.TipoDocto = "Ing" AndAlso (RemisionesLista Is Nothing OrElse (RemisionesLista IsNot Nothing AndAlso RemisionesLista.Count = 0)) Then 'MARCAR VENTA ANTERIOR If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then ErrorList.Add("No se pudo Cancelar el movimiento de almacen de la Factura") End If End If 'SI ES AMORTIZACION 3.3 Dim ListaNotasCreditoGeneradas As New List(Of Modelos.Factura) Dim NCDescuento As Boolean = ((ListaNCDesc IsNot Nothing AndAlso ListaNCDesc.Count > 0) OrElse (ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0)) If ErrorList.Count = 0 Then ' cambiar la condicion para saber si hay seleccionado If (TieneAnticipo AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "2") OrElse NCDescuento Then Try Dim CveVentaRelacionada As Integer = -1 If NuevaFactura = 1 Then CveVentaRelacionada = ObjFactura.CveVenta Else CveVentaRelacionada = CveAnticipoPadre End If Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" If UsuarioActual.CveEmpresa = 119 Then AutoConta = False If UsuarioActual.CveEmpresa = 140 Then AutoConta = True If (TieneAnticipo AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "2") OrElse (ListaNCDesc IsNot Nothing AndAlso ListaNCDesc.Count > 0) Then CreaObjetosVentaAmortizacion(ObjVentas, FolioFiscalRelacionado, CveVentaRelacionada, NCDescuento:=NCDescuento) If RegistrarNCAmortizacion(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, ObjFacturaDevolucion, ObjBancos, Nothing, Nothing, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDesc, IndexNC:=(If(DtVentasNC IsNot Nothing, DtVentasNC.Rows.Count - 1, 0))) Then ListaNotasCreditoGeneradas.Add(ObjFacturaDevolucion) If ObjFacturaDevolucion.CvePrePoliza > 0 Then If ObjConta.ValidacionesPrePoliza(ObjFacturaDevolucion.CvePrePoliza, UsuarioActual, Opcion:=5, CveVenta:=ObjFacturaDevolucion.CveVenta, AutoConta:=AutoConta) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Ventas/Ventas-NCGeneradas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") End If End If End If End If End If If ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then 'SI HAY UNA NOTA DE CREDITO REGISTRADA ANTERIORMENTE LIMPIA EL REGISTRO If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then DtVentasNC.Rows.RemoveAt(DtVentasNC.Rows.Count - 1) End If CreaObjetosVentaBonificacion(ObjVentas, FolioFiscalRelacionado, CveVentaRelacionada, NCDescuento:=NCDescuento) If RegistrarNCAmortizacion(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, ObjFacturaBonificacion, ObjBancos, Nothing, Nothing, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCBonificacion, IndexNC:=(DtVentasNC.Rows.Count - 1)) Then ListaNotasCreditoGeneradas.Add(ObjFacturaBonificacion) If ObjFacturaBonificacion.CvePrePoliza > 0 Then If ObjConta.ValidacionesPrePoliza(ObjFacturaBonificacion.CvePrePoliza, UsuarioActual, Opcion:=5, CveVenta:=ObjFacturaBonificacion.CveVenta, AutoConta:=AutoConta) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Ventas/Ventas-NCGeneradas2 | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") End If End If End If End If End If Catch ex As Exception OnError("Ocurrió un error al generar nota de crédito de amortización", ex) ErrorList.Add("No se pudo generar la nota de crédito de amortización") End Try If ListaNotasCreditoGeneradas Is Nothing AndAlso ListaNotasCreditoGeneradas.Count = 0 Then ErrorList.Add("No se pudo generar la nota de crédito de amortización") End If End If End If Dim SerieFolioNCProntoPago As String = "" Dim CveVentaNCProntoPago As Integer = -1 'SOLO GENERAR NC POR DESCUENTO PRONTO PAGO SI EL PAGO ES DE CONTADO If ErrorList.Count = 0 AndAlso RBLPago.SelectedValue = "2" AndAlso ObjFactura.DescuentoProntoPago > 0 Then Dim ImportePagado As Decimal = DtPagos.SUMD("Importe") Dim ImporteRNC As Decimal = LblDescuentosRNC.Text.ToDecimal() If (ImportePagado + ImporteRNC + ObjFactura.DescuentoProntoPago) >= ObjFactura.Total Then Dim RespFacturaProntoPago As Modelos.MensajeProntoPago = GenerarNCProntoPago(ObjVentas.IniciaTransacSQL(), ObjClientes, ObjFactura) If RespFacturaProntoPago.ObjFacturaProntoPago Is Nothing OrElse RespFacturaProntoPago Is Nothing Then ErrorList.Add("No se pudo generar la nota de crédito de pronto pago") Else If RespFacturaProntoPago.Mensaje.CveVenta <= 0 OrElse RespFacturaProntoPago.Mensaje.TieneError Then ErrorList.Add("No se pudo generar la nota de crédito de pronto pago") Else CveVentaNCProntoPago = RespFacturaProntoPago.Mensaje.CveVenta SerieFolioNCProntoPago = RespFacturaProntoPago.Mensaje.SerieFolio ListaNotasCreditoGeneradas.Add(RespFacturaProntoPago.ObjFacturaProntoPago) End If End If Else ErrorList.Add("No se pudo generar la nota de crédito de pronto pago, no coiciden los pagos con el total a pagar de la factura") End If End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ErrorList.Count = 0 AndAlso ObjFactura.TipoDocto = "Ing" Then Dim RowVenta As DataRow = Nothing If ObjVentas.GetVenta(ObjFactura.CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then RowVenta = ObjVentas.DtResultados.Rows(0) Else ErrorList.Add("No se pudieron validar los datos de la venta") End If If RowVenta IsNot Nothing Then 'SI FUE VENTA DE CONTADO VALIDA QUE SE HAYA PAGADO EN SU TOTALIDAD If RowVenta("CondicionesPago").ToString().ToEntero() = 0 AndAlso RowVenta("Saldo").ToString().ToDecimal() > 0.01D Then ErrorList.Add("La venta no fue pagada en su totalidad") End If Else ErrorList.Add("No se pudieron validar los datos de la venta") End If End If 'MARCA PARA NO SURTIR VENTA DE COTNRATO DE CONSIGNACION DE VENTA | [IPP] : PARCHE If ErrorList.Count = 0 Then If ObjFactura.CveVenta > 0 And CveAlmacenExistenciasContrato > 0 And DdlTipoComprobante.SelectedValue = "Ing" Then If Not ObjInventario.ActualizarEsDevolucionVenta(ObjFactura.CveVenta, 2) Then ErrorList.Add("No se pudo cancelar el movimiento de almacen de la Factura de consignación") End If End If End If If ErrorList.Count = 0 Then If ObjFactura.CveVenta > 0 And CveAlmacenExistenciasContrato > 0 And DdlTipoComprobante.SelectedValue = "Ing" Then If Not RegistraAlmacenConsignacionVenta(ObjInventario, ObjConta, ObjFactura) Then ErrorList.Add("Ocurrió un error al registrar los movimientos de almacén del contrato de consignación") End If End If End If If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 Then 'ACTUALIZA VENTA COTIZACIÓN If EraCotizacion = 1 And BtnEmitirImprimir.Text = "Facturar" Then If Not ObjVentas.UpdateVentaCotizacion(ObjFactura.CveVenta, Request("CveVenta").ToEntero()) Then ErrorList.Add("Ocurrió un error al actualizar la cotización") End If End If 'ACTUALIZA VENTAPADRE PEDIDO If Request("DevPed").ToEntero() > 0 AndAlso ErrorList.Count = 0 Then If Not ObjVentas.UpdateVentaCotizacion(Request("DevPed").ToEntero(), ObjFactura.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar la devolución de pedido") End If End If 'ACTUALIZA LA COLUMNA CveVentaFacturada If (Request("CveRemision") IsNot Nothing AndAlso ViewState("CveRemision").ToString().ToEntero() > 0) AndAlso (Request("Op") IsNot Nothing AndAlso Request("Op") = "Rem") AndAlso ErrorList.Count = 0 Then If Not ObjVentas.UpdateVentaRemision(ViewState("CveRemision").ToString().ToEntero(), ObjFactura.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar la remision") End If End If 'Agregamos las Cotizaciones a la tabla If DtCotizacionesPS IsNot Nothing AndAlso DtCotizacionesPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then Dim CveVentaDetalle As Integer = 0 Dim CveVentaDetallePadre As Integer = 0 Dim Cantidad As Decimal = 0 Dim CvePS As Integer = 0 Dim PU As Decimal = 0 For Each row As DataRow In DtCotizacionesPS.Rows Cantidad = DtCotizacionTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToDecimal CvePS = DtCotizacionTmpDT.FiltroPrimeroValor("CvePS", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToEntero() PU = DtCotizacionTmpDT.FiltroPrimeroValor("PU", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToDecimal CveVentaDetalle = TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetalleCotizacion={row("CveVentaDetalle")}").ToEntero() CveVentaDetallePadre = row("CveVentaDetalle").ToString().ToEntero() If Not ObjVentas.AgregaCotizacionDetalle(CveVentaDetalle, CveVentaDetallePadre, Cantidad) Then ErrorList.Add("Ocurrió un Error al agregar el detalle de la Cotización.") End If Next End If 'Marcamos las ventas anteriores a febrero como surtidas - Ajuste Compu If ErrorList.Count = 0 Then If Not ObjVentas.MarcarRemisionesSinSurtir(ObjVentas.CveVenta) Then ErrorList.Add("Ocurrió un Error al marcar la factura") End If End If If CveOS > 0 And FacturaMateriales = 1 AndAlso ErrorList.Count = 0 Then If SalidaAlmacenMateriales(ObjInventario, CveOS, ObjConta, True, 3) Then ErrorList.Add("Ocurrió un Error al dar salida de materiales de almacen") End If End If 'If CveFactura > 0 AndAlso ErrorList.Count = 0 Then ' If Not ObjVentas.UpdateVentaFacturas(CveFactura, ObjVentas.CveVenta, UsuarioActual.CveEmpresa) Then ' ErrorList.Add("No se pudo actualizar la Factura") ' End If 'End If If CveCicloComercial > 0 AndAlso ErrorList.Count = 0 Then If Not ObjContr.CicloComercialUpdate(CveCicloComercial, True, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then ErrorList.Add("No se pudo actualizar ") End If End If If ErrorList.Count = 0 AndAlso ObjFactura.CveVenta > 0 AndAlso DtDocumentacionCliente IsNot Nothing Then ' si se cargó algun documento If DtDocumentacionCliente.FiltraParametros("RutaArchivo <> ''").Rows.Count > 0 Then GuardaVentaDocumentosCliente(ObjFactura.CveVenta, ObjDocCliente) End If End If 'MARCAR LA FACTURA ANTERIOR If (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then If Me.ObjFacturaNC IsNot Nothing Then If Me.ObjFacturaNC.CveEstatusRefacturacion = 4 AndAlso Not ObjVentas.UpdateEstatusVenta(ObjFacturaNC.CveVenta, ObjFacturaNC.CveEstatusFactura, UsuarioActual.CveEmpresa, CveEstatusRefacturacion:=5) Then ErrorList.Add("No se actualizó el estatus de la factura anterior.") End If End If End If If ErrorList.Count = 0 AndAlso ObjFactura.CveVenta > 0 AndAlso ChkSolicitudAutorizacionCredito.Checked Then ' crea la solicitud de autorización de crédito Dim tCveTipoAutorizacion As Integer = 1 If ObjVentas.AddAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero(), TxtTotal.Text.ToDecimal(), 0, UsuarioActual.CveUsuario, tCveTipoAutorizacion, TipoDocumento:=DdlTipoComprobante.SelectedValue, DiasVencidos:=25, CveVenta:=ObjFactura.CveVenta) Then Alert("La autorización se agregó correctamente.", TipoMensaje.MsgInformacion) Dim Arr As New ArrayList Arr.Add(NombreCliente) Arr.Add($" $ {TxtTotal.Text.ToDecimal}") Arr.Add(DdlSubProyectoDatos.SelectedItem.Text) Dim dtt As DataTable = Nothing Dim ObjProceso As New ClsSisProcesos If ObjProceso.GetUsuariosconProceso(379, UsuarioActual.CveEmpresa) Then 'proceso para autorizar dtt = ObjProceso.DtResultados.FiltraParametros("", DistinctColumns:={"CveUsuario", "Celular"}) End If If dtt IsNot Nothing AndAlso dtt.Rows.Count > 0 Then For Each dr As DataRow In dtt.Rows Dim NumeroTelefono = "526621143532" If EsProduccion Then NumeroTelefono = String.Format("52{0}", dr("Celular").ToString()) End If EnviarNotificacionWhatsAppPlantilla(NumeroTelefono, "solicitud_autorizacion_credito2", Arr) 'ClsSisNotificaciones.EnviarAlerta("Solicitud de Autorización de crédito", $"Solicitud de autorización de crédito Folio: {Folio}
    Ir Activar", dr("CveUsuario").ToString, Tipo:=TipoNotificacion.ToastInformacionB) Next End If ObjProceso.Dispose() End If End If 'Paso CRM actualizar importe de acercamiento y guardar en bitacora If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then If Not (CRMActualizaImporteBitacora(CveAcercamientoCRM, ObjFactura.SubTotal, ObjFactura.SerieFolio, ObjVentas.IniciaTransacSQL)) Then ErrorList.Add("Error al actualizar datos Acercamiento/Oportunidad CRM.") End If End If Try ViewState("CveVenta") = ObjFactura.CveVenta If Request("CveEmbarqueManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveEmbarqueManifiesto")) AndAlso Request("CveEmbarqueManifiesto").ToEntero() > 0 Then If Not ObjVentas.Embarque_ManifiestoUpvta(ObjFactura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Request("CveEmbarqueManifiesto").ToEntero()) Then ErrorList.Add("Error al actualizar el manifiesto.") End If End If If Request("CveManifiesto") IsNot Nothing AndAlso IsNumeric(Request("CveManifiesto")) AndAlso Request("CveManifiesto").ToEntero() > 0 Then If Not ObjVentas.CGame_ManifiestoUpvta(ObjFactura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Request("CveManifiesto").ToEntero()) Then ErrorList.Add("Error al actualizar el manifiesto.") End If End If Catch ex As Exception OnError("Ocurrió un error al actualizar el embarque", ex) ErrorList.Add("Ocurrió un error al actualizar el embarque") End Try Try ViewState("CveVenta") = ObjFactura.CveVenta If Request("CveOrdenProduccion") IsNot Nothing AndAlso IsNumeric(Request("CveOrdenProduccion")) AndAlso Request("CveOrdenProduccion").ToEntero() > 0 Then If Not ObjVentas.AgroOrdenProduccionUpvta(ObjFactura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Request("CveOrdenProduccion").ToEntero()) Then ErrorList.Add("Error al actualizar el manifiesto.") End If End If Catch ex As Exception OnError("Ocurrió un error al actualizar la orden de producción", ex) ErrorList.Add("Ocurrió un error al actualizar la orden de producción") End Try 'ContPAQ El movimiento 1 es el de Venta Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" If UsuarioActual.Empresa.TipoContabilidad = 1 Then AutoConta = True AutoConta = AutocontaMatriz(AutoConta) If DdlTipoComprobante.SelectedValue.Contiene("Rem", "RNC", "Cot", "Ped", "PA") Then AutoConta = False End If If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "PA", "Egs", "Dev") Then AutoConta = False End If If ErrorList.Count = 0 AndAlso ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=5, AutoConta:=AutoConta) Then If ObjConta.ValorPolizaDescuadre > 0 Then ErrorList.Add("Ocurrió un error al validar la prepóliza") GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") End If End If If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso (SeGuardoPrePoliza Or ObjFactura.TipoDocto.Contiene("Ped", "Cot", "DPe", "PeC", "PA")) Then ObjVentas.Commit() BtnEmitirImprimir.Visible = False Try 'MENSAJE PRINCIPAL MensajeAlert.AppendFormat(String.Format("
    La {0}: {1} se generó correctamente.

    ", ObjFactura.TipoDocumento, ObjFactura.SerieFolio)) ObjFactura.DtDetalle = TmpDT 'actualiza por cambios de pedimentos. ObjFactura.Timbre = PreParaTimbre(ObjFactura) 'Throw New Exception("Prueba error") 'LIMPIA LOS ANTICIPOS RELACIONADOS QUE YA SE APLICARON If ListaAnticiposAplicados IsNot Nothing Then ListaAnticiposAplicados.Clear() End If If ListaDevolucionesAplicadas IsNot Nothing Then ListaDevolucionesAplicadas.Clear() End If 'ENVIAR POLIZA VIRTUAL If ErrorList.Count = 0 Then If UsuarioActual.Empresa.Funcionalidad(576) = "1" AndAlso EsProduccion Then GeneraPolizaVentaWS(ObjFactura) End If End If 'Try ' 'RMF, cuando es pedido, se manda autorización. ' If ObjFactura.TipoDocto.Contiene("PA") Then ' Dim Titulo As String = "Solicitud de autorización" 'usuarios de crédito y cobranza ' Dim Msg As String = String.Format("{0} - Folio {1} ", DdlSubProyectoDatos.SelectedItem.Text, TxtFolio.Text) ' 'If UsuarioActual.CveEmpresa = 119 Then ' ' ClsSisNotificaciones.SendNotificacionERP(1715, Titulo, Msg, 1) ' ' ClsSisNotificaciones.SendNotificacionERP(1815, Titulo, Msg, 1) ' ' ClsSisNotificaciones.SendNotificacionERP(1830, Titulo, Msg, 1) ' 'End If ' End If 'Catch ex As Exception ' OnError("Ocurrió un error al mandar las notificaciones de autorización", ex) 'End Try Try Dim DirectoriArchivoXML As String = String.Format("{0}{1}", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto) ' System.IO.Path.Combine() If Not Directory.Exists(DirectoriArchivoXML) Then Directory.CreateDirectory(DirectoriArchivoXML) End If Catch ex As Exception OnError("Ocurrió un error al generar el directorio de xml", ex) End Try Dim SeTimbro As Boolean = False Dim SeTimbroNC As Boolean = False Dim EstatusSMS As Integer = 0 Dim MsgErrorTimbrado As String = "" Dim MsgCancelacionRefacturacion As Modelos.Factura.MCancelacionVentaMensaje = Nothing 'TIMBRADO Y CASO ESPECIAL NOTA DE CREDITO If (TipoDoctoDevolucion = "" OrElse Not TipoDoctoDevolucion.Contiene("Rem", "RNC", "Cot", "Ped", "DPe", "PA", "Ped")) Then Dim DebeTimbrar As Boolean = True If UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then 'si tiene anticipos seleccionados y el total es cero, que no se timbre(previo empresa72) If LblAmortizacion.Text.ToDouble > 0 And TxtTotal.Text.ToDouble <= 0 Then DebeTimbrar = False End If End If 'Si es AMORTIZACIÓN ANTICIPO SOBRE FACTURA EN CERO no debe timbrar If DdlTipoAmortizacionAnticipo.SelectedValue = "3" Then DebeTimbrar = False End If If UsuarioActual.TienePermisoProceso(335) Then DebeTimbrar = False End If If DebeTimbrar AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Egs", "Ant", "Dev") Then If UsuarioActual.Empresa.TipoFacturacion = "CFDi" AndAlso (UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1) Then 'FACTURA INGRESO/EGRESO Dim FM As New Modelos.FemsaFactura Dim TmpDT7Eleven As New DataTable Dim TmpDTComplementosTimbrado As New DataTable Dim ObjTimbrado As New Timbrado Try If AplicaFEMSA Then PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) End If If ChkEmitirCartaPorte.Checked AndAlso CveTimbreCartaPorte > 0 Then Dim RespCartaPorte As Timbres.MMensajeCartaPorte = Timbres.PreParaCartaPorteFactura(CveTimbreCartaPorte, UsuarioActual) If Not RespCartaPorte.TieneError Then ObjFactura.Timbre.Complementos.CartaPorte = RespCartaPorte.CartaPorte Else DebeTimbrar = False Alert(RespCartaPorte.Mensaje, TipoMensaje.MsgAdvertencia) End If End If If DebeTimbrar Then SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) End If Catch ex As Exception OnError("Ocurrió un error al generar el timbrado", ex) End Try Dim FolioFiscalFactura As String = ObjTimbrado.UUID MsgErrorTimbrado = ObjTimbrado.MensajeErrorCFDI ObjTimbrado = Nothing 'NOTA DE CREDITO - REFACTURADA - CASO ESPECIAL, TIMBRADO E IMPRESION If DebeTimbrar AndAlso SeTimbro AndAlso ListaNotasCreditoGeneradas IsNot Nothing AndAlso ListaNotasCreditoGeneradas.Count > 0 Then Try For Each NCGenerada As Modelos.Factura In ListaNotasCreditoGeneradas If NCGenerada.Timbre IsNot Nothing Then NCGenerada.Timbre.CFDIRelacionados.UUID.Clear() NCGenerada.Timbre.CFDIRelacionados.UUID.Add(FolioFiscalFactura) Dim ObjTimbradoNC As New Timbrado Dim TimbroNC As Boolean = ObjTimbradoNC.TimbrarFactura(UsuarioActual, NCGenerada) If Not TimbroNC Then Alert(ObjTimbradoNC.MensajeErrorCFDI, TipoMensaje.MsgError) End If ObjTimbradoNC = Nothing End If Next Catch ex As Exception OnError("Ocurrió un error al timbrar la NC.", ex) End Try End If 'If SeTimbro AndAlso ObjFactura.TipoDocto.Contiene("Ing") Then ' EstatusSMS = EnviarSMSTimbrado(ObjEventos) ' End If 'If Not SeTimbro Then ' Alert(MsgErrorTimbrado, TipoMensaje.MsgError) 'End If 'CANCELAR FACTURA ANTERIOR Try If SeTimbro AndAlso (Me.CveDevolucion > 0 AndAlso Me.NuevaFactura = 1) Then If Me.ObjFacturaNC IsNot Nothing AndAlso Me.ObjFacturaNC.CveEstatusFactura <> 5 Then Me.ObjFacturaNC.CveEstatusRefacturacion = 2 'MARCAR COMO REFACTURADA MsgCancelacionRefacturacion = Me.ObjFacturaNC.CancelarPorRefacturacion(Me.ObjFacturaNC.CveMotivoCancelacion, Me.ObjFacturaNC.MotivoCancelacion, FolioFiscalFactura) End If End If Catch ex As Exception OnError("Ocurrió un error al cancelar la factura anterior.", ex) End Try End If End If End If 'VERIFICAR 100% AVANCE A IMPORTE Y CANTIDAD Try If ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso CveContrato > 0 Then If ObjContr.GetContratos(CveContrato, UsuarioActual.CveEmpresa) Then If ObjContr.DtResultados.Rows.Count > 0 Then 'SI ES FLEXIBLE QUE NOTIFIQUE EL MONTO MAXIMO, SI NO LO ES QUE NOTIFIQUE EL PORCENTAJE ALCANZADO... FLEXIBLE = 2, NO FLEXIBLE = 1 If ObjContr.DtResultados.Rows(0)("ModalidadDetalle").ToString() = "1" Then Dim PorcentajeAvance As Double = ObjContr.DtResultados.Rows(0)("ContratoAvance").ToString().ToDouble If PorcentajeAvance >= 100 Then EnviarNotificacionAvance(ObjContr.DtResultados.Rows(0)("NumeroContrato").ToString(), ObjContr.DtResultados.Rows(0)("DescripcionContrato").ToString(), ObjContr.DtResultados.Rows(0)("ContratoTipo").ToString(), ObjContr.DtResultados.Rows(0)("NombreComercial").ToString(), ObjContr.DtResultados.Rows(0)("CorreoVendedor").ToString()) End If Else Dim MontoMaximo As Double = ObjContr.DtResultados.Rows(0)("ImporteMax").ToString().ToDouble Dim Avance As Double = ObjContr.DtResultados.Rows(0)("Avance").ToString().ToDouble Dim PorcentajeAvance As Double = (Avance / MontoMaximo) * 100 If PorcentajeAvance >= 100 And MontoMaximo > 0 Then EnviarNotificacionAvance(ObjContr.DtResultados.Rows(0)("NumeroContrato").ToString(), ObjContr.DtResultados.Rows(0)("DescripcionContrato").ToString(), ObjContr.DtResultados.Rows(0)("ContratoTipo").ToString(), ObjContr.DtResultados.Rows(0)("NombreComercial").ToString(), ObjContr.DtResultados.Rows(0)("CorreoVendedor").ToString(), MontoMaximo) End If End If End If End If End If Catch ex As Exception OnError("Ocurrió un error al notificar el avance.", ex) End Try ' DESCARGA XML - SI SE TIMBRA MANDA CORREO CON FACTURA If SeTimbro Then If Not UsuarioActual.TienePermisoProceso(380) Then Dim ArchivoXML As String = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) If File.Exists(ArchivoXML) Then MensajeAlert.AppendFormat("", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) End If End If 'MANDA CORREO Try Dim Factura As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) 'SE SE VA UTILIZAR LA DESCARGA AUTOMATICA, NO GENERAR PDF A TRAVEZ DE UN THREAD If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then GeneraPDFFactura(ChkEnviarFactura.Checked, Factura, UsuarioActual, "", UsarDescargaDesdePopUpVerFactura:=False) Else Dim capturedContext = HttpContext.Current Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) Dim Hilo As New System.Threading.Thread(Sub() GeneraPDFFactura(ChkEnviarFactura.Checked, Factura, UsuarioActual, strURLHOST, UsarDescargaDesdePopUpVerFactura:=True)) Hilo.Start() End If Catch ex As Exception OnError("Ocurrió un error al enviar el PDF", ex) End Try Else 'ERROR DE NO TIMBRADO If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Egs", "Dev") Then Dim StrEr As String = $"
    Comprobante no emitido : {MsgErrorTimbrado}
    Por favor inténtelo de nuevo a través del botón Emitir.
    " MensajeAlert.Append(StrEr) End If 'PARA PRUEBAS, GENERAR PDF AUNQUE NO ESTE TIMBRADA If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then Try Dim Factura As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) GeneraPDFFactura(ChkEnviarFactura.Checked, Factura, UsuarioActual, "", UsarDescargaDesdePopUpVerFactura:=False) Catch ex As Exception OnError("Ocurrió un error al enviar el PDF", ex) End Try End If End If 'DESCARGA PDF If Not UsuarioActual.TienePermisoProceso(380) Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant", "Egs", "Dev", "Ped") Then 'If Not ImprimeAlert Then Dim ArchivoIngPyMe As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.mrt", UsuarioActual.Empresa.Ruta)) Dim ArchivoIng As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoRem As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoEgs As New System.IO.FileInfo(String.Format("{0}Formatos/NotaCredito.rdlc", UsuarioActual.Empresa.Ruta)) If ArchivoIng.Exists Or ArchivoRem.Exists Or ArchivoIngPyMe.Exists Or ArchivoEgs.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If End If End If 'CRM If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then Dim ArchivoCotRdlc As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoCotMrt As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) If ArchivoCotRdlc.Exists Or ArchivoCotMrt.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) If ChkEnviarFacturaCRM.Checked AndAlso CorreoContactoCRM.Trim.Length > 0 Then Try Dim pdfCRM As Byte() = Nothing 'If CveVenta > 0 Then ' ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False) 'End If pdfCRM = PdfFactura(ObjFactura) If pdfCRM IsNot Nothing Then Dim SerieFolioCRM As String = ObjFactura.SerieFolio Dim TipoDoctoCRM As String = ObjFactura.TipoDocto GeneraPDFCotizacion(True, CorreoContactoCRM:=CorreoContactoCRM, pdfCRM:=pdfCRM, SerieFolioCRM:=SerieFolioCRM, TipoDoctoCRM:=TipoDoctoCRM) End If Catch ex As Exception OnError("Ocurrió un error al enviar el PDF", ex) End Try End If Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If End If If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then Dim ArchivoCotRdlc As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoCotMrt As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) If ArchivoCotRdlc.Exists Or ArchivoCotMrt.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))) Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If End If 'ERROR DE NO TIMBRADO NC If Not IsNothing(ObjNC) AndAlso ObjNC.Count > 0 AndAlso Not SeTimbroNC Then MensajeAlert.AppendFormat("
    La NC #{0} no se pudo timbrar.
    Por favor intentelo de nuevo a traves del boton Emitir.", CType(ObjNC(0), Modelos.Factura).SerieFolio) End If 'NOTIFICACION DE SMS Select Case EstatusSMS Case 1 MensajeAlert.AppendFormat("
    Notificación SMS: enviado con éxito al cliente al celular: {0}", ObjFactura.Cliente.CobranzaTelefono) Case 2 MensajeAlert.AppendFormat("
    Notificación SMS: sin enviar. Ocurrió un error en el envío, por favor verifique la información del cliente.") Case 3 MensajeAlert.AppendFormat("
    Notificación SMS: sin enviar. No se pudo cargar el celular del cliente, por favor verifique la información del cliente.") End Select If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then RegistraScript($"window.location.href = '/Compras/PopUpVerFactura.aspx?P={Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", CveVenta))}'", "Imprimir") End If 'DESCARGAR PDF DE CICOVISA 'If UsuarioActual.CveEmpresa = 72 And CveCliente = 70381 Then ' If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then ' MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=CIC&CVEVENTA={0}", CveVenta))) ' End If 'End If If Not UsuarioActual.TienePermisoProceso(380) Then If DdlTipoComprobante.SelectedValue = "Cot" Then If Not CveEmpresaCRM > 0 Then 'EN EMPRESA DE ACUMULADORES NO DESCARGAR EL PDF If UsuarioActual.Empresa.Funcionalidad(531) <> "1" Then If CveVenta > 0 Then MensajeAlert = New StringBuilder Dim ArchivoCotizacion As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoCotizacionMrt As New System.IO.FileInfo(String.Format("{0}Formatos/Cotizacion.mrt", UsuarioActual.Empresa.Ruta)) If Opcion = "Cot" And UsuarioActual.Empresa.Funcionalidad(558) = "1" Then MensajeAlert.AppendFormat("Facturar

    ", CveVenta) End If If ArchivoCotizacion.Exists Or ArchivoCotizacionMrt.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=0&GUARDAR=1", CveVenta))) Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If End If GeneraPDFCotizacion(ChkEnviarFactura.Checked) ' MANDA CORREO End If End If End If 'ENVIAR NOTIFICACION DE SMS If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If DdlTipoComprobante.SelectedValue.Contiene("Ped") Then Dim CorreoDestino As String CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("Almacén") If RBLTipoVenta.SelectedValue.Contiene("1", "2") Then Dim ListMateriales As New List(Of GenericaCantidadProducto) Dim DetalleTable As String = "" For Each dRow As DataRow In TmpDT.Rows ListMateriales.Add(New GenericaCantidadProducto With {.Cantidad = dRow("Cantidad").ToString.ToEntero, .Producto = dRow("PS").ToString}) Next EnviaNotificacionSMS(3, UsuarioActual.Empresa, CveVenta, TxtFolio.Text, TxtFechaOS.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), RBLTipoVenta.SelectedItem.Text.Trim, DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, LblTipoVenta.Text, DdlVendedor.SelectedItem.Text, "", ListMateriales, CorreoDestino) Else EnviaNotificacionSMS(4, UsuarioActual.Empresa, CveVenta, TxtFolio.Text, TxtFechaOS.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), RBLTipoVenta.SelectedItem.Text.Trim, DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, LblTipoVenta.Text, DdlVendedor.SelectedItem.Text, "", Nothing, CorreoDestino) End If 'cirugía en el mismo día o si es despues de las 9 y requiere técnico, 'jefe de técnicos If TxtFechaOS.Text.ToDate.ToShortDateString = NowADS.ToShortDateString OrElse (NowADS.Hour > 21 And NowADS.AddDays(1).ToShortDateString = TxtFechaOS.Text.ToDate.ToShortDateString AndAlso ChkRequiereTecnicoModal.Checked) Then CorreoDestino = UsuarioActual.Empresa.Funcionalidad(199).ListaBusquedaValor("JefeTécnicos") EnviaNotificacionSMS(5, UsuarioActual.Empresa, CveVenta, TxtFolio.Text, TxtFechaOS.Text.ToDateTime, If(DdlSucursalCliente.Visible, DdlSucursalCliente.SelectedItem.Text, LblCliente.Text), RBLTipoVenta.SelectedItem.Text.Trim, DdlMedico.SelectedItem.Text, DdlProcedimiento.SelectedItem.Text, LblTipoVenta.Text, DdlVendedor.SelectedItem.Text, "", Nothing, CorreoDestino) End If End If End If 'MOVIMIENTO DE ALMACEN If ObjFactura.Inv_CveMovimiento > 0 Then MensajeAlert.AppendFormat("

    Movimiento de Almacén
    ", ObjFactura.Inv_CveMovimiento) End If If TieneAnticipo AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then MensajeAlert.AppendFormat("

    Se generó una Nota de crédito Folio: {0} amortizando el anticipo
    ", ObjFacturaDevolucion.Folio) End If If RBLPago.SelectedValue.ToEntero() = 2 And TxtCambio.Text.ToDecimal > 0 Then MensajeAlert.AppendFormat("

    Su cambio es de ${0}
    ", TxtCambio.Text.ToDecimal.FormatoNumero(2)) End If If CveVentaNCProntoPago > 0 Then MensajeAlert.AppendFormat(String.Format("
    La nota de crédito {0} por descuento pronto pago se generó correctamente.

    ", SerieFolioNCProntoPago)) End If If MsgCancelacionRefacturacion IsNot Nothing Then If Not MsgCancelacionRefacturacion.HuboError Then If MsgCancelacionRefacturacion.CveEstatus = 5 Then MensajeAlert.AppendFormat("
    El folio {0} fue cancelado. Descargar Acuse", Me.ObjFacturaNC.SerieFolio, Encripta(String.Format("OP=CAN&CVEVTA={0}", Me.ObjFacturaNC.CveVenta))) MensajeAlert.AppendFormat(" Enviar Acuse.

    ", Me.ObjFacturaNC.CveVenta) ElseIf MsgCancelacionRefacturacion.CveEstatus = 20 Then MensajeAlert.AppendFormat("
    El folio {0} esta en proceso de cancelación. Descargar Acuse", Me.ObjFacturaNC.SerieFolio, Encripta(String.Format("OP=CAN&CVEVTA={0}", Me.ObjFacturaNC.CveVenta))) MensajeAlert.AppendFormat(" Enviar Acuse.

    ", Me.ObjFacturaNC.CveVenta) Else MensajeAlert.AppendFormat("
    El folio {0} no fue cancelado. Intente mas tarde cancelar el documento Ver en el reporte", Me.ObjFacturaNC.SerieFolio, Me.ObjFacturaNC.CveVenta) End If Else MensajeAlert.AppendFormat("
    El folio {0} no fue cancelado. Intente mas tarde cancelar el documento Ver en el reporte", Me.ObjFacturaNC.SerieFolio, Me.ObjFacturaNC.CveVenta) End If End If 'MUESTA ALERT OK ' si es elrol 1165-Ventas,EMp:80, o la empresa 119, recarga ventas, para seguir registrando-. 'Dim Liga = If(UsuarioActual.CveRol = 1165 Or UsuarioActual.CveEmpresa = 119, "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";", If(CveEmpresaCRM > 0, $"document.location.href=""/CRM/EmpresaCRM.aspx?CveEmpresaCRM={CveEmpresaCRM}"";", $"document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";")) 'Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga) Dim Liga As String = "" Dim Liga2 As String = "" If Request("CveCliente") IsNot Nothing AndAlso Request("CveCliente").ToEntero > 0 Then Liga = $"document.location.href=""/Ventas/Ventas.aspx?CveCliente={Request("CveCliente")}"";" Else Liga = "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";" End If If CveEmpresaCRM > 0 Then Liga2 = $"document.location.href=""/CRM/EmpresaCRM.aspx?CveEmpresaCRM={CveEmpresaCRM}"";" Else Liga2 = $"document.location.href=""/Ventas/Clientes.aspx?CveCliente={CveCliente}"";" End If If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso CveEmpresaCRM > 0 AndAlso CveAcercamientoCRM > 0 Then Liga = $"document.location.href=""/CRM/Acercamiento.aspx?CveAcercamiento={CveAcercamientoCRM}&OPTAB=COT"";" Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga, TextoConfirmacion:="Aceptar", TextoSegundoBoton:=Nothing, JSBtn2:=Nothing, ShowCloseButton:=False) Else 'SI TIENE MODULO DE COBRANZA, NO MARDAR AL CLIENTE, DEBE SEGUIR REGISTRANDO If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Cot") Then Liga2 = $"document.location.href=""/Ventas/Ventas.aspx?CveVenta={ObjFactura.CveVenta}"";" Alert(MensajeAlert.ToString(), TipoMensaje.MsgDosBotones, Liga, TextoConfirmacion:="Seguir Registrando", TextoSegundoBoton:="Ver cotización", JSBtn2:=Liga2, ShowCloseButton:=False) Else Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga, TextoConfirmacion:="Seguir Registrando", ShowCloseButton:=False) End If Else Alert(MensajeAlert.ToString(), TipoMensaje.MsgDosBotones, Liga, TextoConfirmacion:="Seguir Registrando", TextoSegundoBoton:="Ir al Cliente", JSBtn2:=Liga2, ShowCloseButton:=False) End If End If MensajeAlert.Clear() Try If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then If ObjFactura.TipoDocto.Contiene("Ing", "Cot") AndAlso ObjFactura.CondicionesPago = 1 Then ImpresionDirectaPDF() End If End If 'LIMPIA CONDICIONES DE PAGO - CONTADO RBLPago.SelectedValue = "1" LimpiaEscondeContado() BtnEmitirImprimir.Visible = False ObjFactura = Nothing Catch ex As Exception OnError("Ocurrió un error al limpiar los datos", ex) End Try Catch ex As Exception Dim Liga = "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";" Alert(MensajeAlert.ToString() + "
    Ocurrió un error posterior a la generación de la venta", TipoMensaje.MsgError, Liga, TextoConfirmacion:="Aceptar", ShowCloseButton:=False) BtnEmitirImprimir.Visible = False GuardaLog(ex.ToString()) End Try Else ObjVentas.RollBack() BtnEmitirImprimir.Enabled = True For Each ErrorItem As String In ErrorList Alert(ErrorItem, TipoMensaje.MsgAdvertencia) Next 'MUESTA ALERT ERROR Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) GuardaLog("1.0 - Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar. SeGuardoPrePoliza: " + If(SeGuardoPrePoliza, "Si", "No") + " TipoDocto: " + ObjFactura.TipoDocto) End If ObjVentas.Dispose() ObjConta.Dispose() ObjInventario.Dispose() ObjCGame.Dispose() ObjContr.Dispose() ObjDocCliente.Dispose() ObjAcum.Dispose() 'ObjFolios.Dispose() ErrorList.Clear() ErrorList = Nothing MensajeAlert = Nothing TmpDT = TmpDTError.Copy CalculaTotalesVenta(RecalcularTotalOriginal:=False) UpFacturar.Update() Else ObjVentas.RollBack() BtnEmitirImprimir.Enabled = True For Each ErrorItem As String In ErrorList Alert(ErrorItem, TipoMensaje.MsgAdvertencia) Next 'MUESTA ALERT ERROR Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) ObjVentas.Dispose() ObjConta.Dispose() ObjInventario.Dispose() ObjCGame.Dispose() ObjContr.Dispose() ObjDocCliente.Dispose() 'ObjFolios.Dispose() ErrorList.Clear() ErrorList = Nothing MensajeAlert = Nothing TmpDT = TmpDTError.Copy CalculaTotalesVenta(RecalcularTotalOriginal:=False) GuardaLog("2.0- Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar. SeGuardoPrePoliza: " + If(SeGuardoPrePoliza, "Si", "No") + " TipoDocto: " + ObjFactura.TipoDocto) UpFacturar.Update() End If ObjFactura = Nothing ListaNotasCreditoGeneradas = Nothing End If End If End Sub Private Function CRMActualizaImporteBitacora(CveAcercamientoCRMActualizar As Integer, ImporteCRM As Decimal, SerieFolioVenta As String, ByRef ObjTransaccion As SqlClient.SqlTransaction) As Boolean Dim cRMService As ICRMService = New CRMService(System.Configuration.ConfigurationManager.ConnectionStrings("Conexion").ConnectionString) Dim AcercamientoModel As RequestAcercamiento = New RequestAcercamiento(UsuarioActual.CveEmpresa, CveAcercamientoCRMActualizar) Dim objAcercamiento = cRMService.GetAceracamientoCRM(AcercamientoModel) Dim ImporteAcercamiento As Decimal = objAcercamiento.Result(0).Importe.ToDecimal Dim CveEtapaProcesoCRM As Integer = objAcercamiento.Result(0).CveEtapaProcesoActual.ToEntero Dim CveTipoProcesoCRM As Integer = objAcercamiento.Result(0).CveTipoProceso.ToEntero Dim Respuesta As Boolean = False Dim ObjCRM As New ClsCRM(ObjTransaccion) Dim ObjEventoBitacora As New ClsOIEventos(ObjTransaccion) If objAcercamiento.Result.Count > 0 Then If ObjCRM.UpdateAcercamientoCotizacion(CveAcercamientoCRMActualizar, ImporteCRM, UsuarioActual.CveEmpresa) Then If ObjEventoBitacora.AddEventoBitacora($"Se actualiza Importe de {ImporteAcercamiento.ToString("###,###,###.00") } a {ImporteCRM.ToString("###,###,###.00")} por cotización {SerieFolioVenta}", "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveAcercamientoCRM:=CveAcercamientoCRMActualizar, CveEtapaProcesoCRM:=CveEtapaProcesoCRM, CveTipoProcesoCRM:=CveTipoProcesoCRM) Then Respuesta = True End If End If End If Return Respuesta End Function Private Sub CreaObjetosVentaAmortizacion(ObjVentas As ClsVentas, FolioFiscalRelacionado As String, CveAnticipoPadre As Integer, Optional CveVentasPadre As Integer = -1, Optional NCDescuento As Boolean = False) ObjFacturaDevolucion = New Modelos.Factura ObjFacturaDevolucion.CveUsuario = UsuarioActual.CveUsuario ObjFacturaDevolucion.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() If CveVentasPadre > 0 Then ObjFacturaDevolucion.CveVentaPadre = CveVentasPadre ObjFacturaDevolucion.CveVentaRelacion = CveVentasPadre Else ObjFacturaDevolucion.CveVentaPadre = ObjVentas.CveVenta ObjFacturaDevolucion.CveVentaRelacion = ObjVentas.CveVenta End If ObjFacturaDevolucion.CveEmpresa = UsuarioActual.CveEmpresa ObjFacturaDevolucion.TipoCambio = If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) ObjFacturaDevolucion.ConvertirPesos = ChkConvertirDoctoPesos.Checked ObjFacturaDevolucion.CveMoneda = DdlMoneda.SelectedValue.ToEntero() ObjFacturaDevolucion.Moneda = DdlMoneda.SelectedItem.Text ObjFacturaDevolucion.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DdlMoneda.SelectedValue}") 'ObjFacturaDevolucion.RefDocto = TxtDocto.Text.Trim 'ObjFacturaDevolucion.Folio = If(ExFolioFactura, FolioXML.ToEntero(), -1) ObjFacturaDevolucion.Serie = LblSerie.Text ObjFacturaDevolucion.Fecha = New Date(TxtFecha.Text.Trim.ToDate.Year, TxtFecha.Text.Trim.ToDate.Month, TxtFecha.Text.Trim.ToDate.Day, NowADS().Hour, NowADS().Minute, NowADS().Second) ObjFacturaDevolucion.CvePrePoliza = -1 ObjFacturaDevolucion.CveMetodoPago = 0 'DdlMetodoPago.SelectedValue.ToEntero() ObjFacturaDevolucion.MetodoPago = "" ObjFacturaDevolucion.UsuarioCreo = LblUsuario.Text.Trim ' ObjFacturaDevolucion.CveCondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedValue.ToEntero(), -1) ' ObjFacturaDevolucion.CondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedItem.Text, "") 'ObjFacturaDevolucion.NumeroCuenta = TxtNumCtaPago.Text.Trim 'ObjFacturaDevolucion.Cliente.NumCtaPago = TxtNumCtaPago.Text.Trim ObjFacturaDevolucion.CondicionesPago = If(RBLPago.SelectedValue = "2", 0, 1) ' 0 - Contado, 1 - Credito ObjFacturaDevolucion.TipoDocto = "Egs" If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjFolios As New ClsGralFolios() Dim TipoDoctoConsulta As String = If(ObjFacturaDevolucion.TipoDocto = "Ant", "Ing", If(ObjFacturaDevolucion.TipoDocto = "PA", "Rem", ObjFacturaDevolucion.TipoDocto)) If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) If DT.Rows.Count > 0 Then ObjFacturaDevolucion.Serie = DT.Rows(0)("Serie").ToString() End If DT.Dispose() End If ObjFolios.Dispose() End If ObjFacturaDevolucion.Fecha = NowADS() ObjFacturaDevolucion.Version = "4.0" If ObjFacturaDevolucion.Cliente Is Nothing Then ObjFacturaDevolucion.Cliente = New Modelos.ClienteModel ObjFacturaDevolucion.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal ObjFacturaDevolucion.Cliente.RegimenFiscal = ClienteRegimenFiscal ObjFacturaDevolucion.CveMetodoPago = 1 ObjFacturaDevolucion.MetodoPago = "Pago en una sola exhibición" ObjFacturaDevolucion.ClaveMetodoPagoSAT = "PUE" ObjFacturaDevolucion.CveFormaPago = 21 ObjFacturaDevolucion.FormaPago = "Aplicación de anticipos" ObjFacturaDevolucion.ClaveFormaPagoSAT = "30" ObjFacturaDevolucion.CveUsoCFDI = DdlUsoCFDI.SelectedValue.ToEntero() ObjFacturaDevolucion.UsoCFDI = DdlUsoCFDI.SelectedItem.Text ObjFacturaDevolucion.ClaveUsoCFDISAT = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") ObjFacturaDevolucion.CveTipoRelacion = DdlTipoRelacionAnticipo.SelectedValue.ToEntero() ObjFacturaDevolucion.TipoRelacion = "07" If NCDescuento Then ObjFacturaDevolucion.CveTipoRelacion = 1 ObjFacturaDevolucion.TipoRelacion = "01" End If Dim Fol As New List(Of String) Fol.Add(FolioFiscalRelacionado) ObjFacturaDevolucion.UUIDRelacionados = Fol Select Case ObjFacturaDevolucion.TipoDocto Case "Ing" ObjFacturaDevolucion.TipoDocumento = "Factura" Case "REM" ObjFacturaDevolucion.TipoDocumento = "Remision" Case "Cot" ObjFacturaDevolucion.TipoDocumento = "Cotizacion" Case "Egs" ObjFacturaDevolucion.TipoDocumento = "Nota de Crédito" Case "Dev" ObjFacturaDevolucion.TipoDocumento = "Nota de Devolución" Case Else ObjFacturaDevolucion.TipoDocumento = "" End Select If ObjFacturaDevolucion.TipoDocto IsNot Nothing Then ViewState("TipoDoctoDevolucion") = ObjFacturaDevolucion.TipoDocto End If ObjFacturaDevolucion.Fech1 = TxtFech1.Text.Trim.ToDate ObjFacturaDevolucion.Fech2 = TxtFech2.Text.Trim.ToDate ObjFacturaDevolucion.Fech3 = TxtFech3.Text.Trim.ToDate ObjFacturaDevolucion.Alfa2 = TxtAlfa2.Text.Trim ObjFacturaDevolucion.Alfa3 = TxtAlfa3.Text.Trim ObjFacturaDevolucion.Num1 = TxtNum1.Text.Trim.ToDecimal ObjFacturaDevolucion.Num2 = TxtNum2.Text.Trim.ToDecimal ObjFacturaDevolucion.Num3 = If(ObjFacturaDevolucion.TipoDocto = "OP", DdlOrdenPago.SelectedValue.ToDecimal, TxtNum3.Text.Trim.ToDecimal) ObjFacturaDevolucion.FechaPago = TxtFechaPago.Text.ToDate ObjFacturaDevolucion.CveCorte = CveCorte 'ObjFacturaDevolucion.CveMesa = -1 ObjFacturaDevolucion.NumeroPersonas = 0 ObjFacturaDevolucion.CveContrato = If(CveContrato > 0, CveContrato, CvePresupuesto) ObjFacturaDevolucion.DescripcionContrato = If(DdlContratosModal.SelectedItem IsNot Nothing, DdlContratosModal.SelectedItem.Text, "") ObjFacturaDevolucion.CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() ObjFacturaDevolucion.Entrega = Entrega ObjFacturaDevolucion.Vigencia = TxtFechaVencimientoCotizacion.Text.ToDate ObjFacturaDevolucion.CveVentaPadre = CveAnticipoPadre ObjFacturaDevolucion.CveVendedor = DdlVendedor.SelectedValue.ToEntero() If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If ObjFacturaDevolucion.FechaEjecucion = TxtFechaEjecucion.Text.Trim.ToDate ObjFacturaDevolucion.CveSucursalEjecucion = DdlSucursalEjecucion.SelectedValue.ToEntero() ObjFacturaDevolucion.CveSucursalCobranza = DdlSucursalCobranza.SelectedValue.ToEntero() If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DvModalRequiereOSFecha.Visible Then ObjFacturaDevolucion.FechaEjecucion = TxtFechaOS.Text.Trim.ToDateTime Else ObjFacturaDevolucion.Alfa1 = TxtAlfa1.Text.Trim End If ObjFacturaDevolucion.AtencionA = "" ObjFacturaDevolucion.MotivoDescuento = TxtMotivoDescuento.Text.Trim ObjFacturaDevolucion.Observaciones = TxtObsFact.Text.Trim ObjFacturaDevolucion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaDevolucion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaDevolucion.MonedaAbreviatura = "" If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Else TmpDTImpuestos.Clear() End If Dim DR As DataRow = TmpDTImpuestos.NewRow() If TxtSubTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "SubTotal" : DR("Importe") = TxtSubTotal.Text.ToDecimal : DR("Orden") = 10 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If LblDescuentos.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Descuentos" : DR("Importe") = LblDescuentos.Text.Trim.ToDecimal : DR("Orden") = 20 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If LblAmortizacion.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Amort.Ant" : DR("Importe") = LblAmortizacion.Text.Trim.ToDecimal : DR("Orden") = 30 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtSubTotal2.Text.ToDecimal <> TxtSubTotal.Text.ToDecimal Then DR("ImpuestoLocal") = "SubTotal 2" : DR("Importe") = TxtSubTotal2.Text.ToDecimal : DR("Orden") = 40 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IVA" : DR("Importe") = TxtIVA.Text.ToDecimal : DR("Orden") = 50 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtRetIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.IVA" : DR("Importe") = TxtRetIVA.Text.ToDecimal : DR("Orden") = 60 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtRetISR.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.ISR" : DR("Importe") = TxtRetISR.Text.ToDecimal : DR("Orden") = 70 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() 'If DdlFormatoImpresion.SelectedValue.ToEntero() = 3 Or DdlFormatoImpresion.SelectedValue.ToEntero() = 4 Then ' DR("ImpuestoLocal") = "Subtotal2" : DR("Importe") = (TxtSubTotal.Text.ToDecimal + TxtIVA.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal) : DR("Orden") = 55 : TmpDTImpuestos.Rows.Add(DR) ' DR = TmpDTImpuestos.NewRow() 'End If For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then Dim Orden As Integer = 80 If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal > 0 Then DR("ImpuestoLocal") = gvr.DataKey("ImpuestoLocal").ToString() : DR("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal.RoundSQL(2) : DR("Orden") = Orden : DR("Porcentaje") = gvr.DataKey("Porcentaje").ToString() : DR("TipoImpuesto") = gvr.DataKey("TipoImpuesto").ToString() : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() Orden = Orden + 1 End If End If Next If TxtTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Total" : DR("Importe") = TxtTotal.Text.ToDecimal : DR("Orden") = 100 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) ObjFacturaDevolucion.DtDeduccion = TmpDTImpuestos.FiltraParametros("", Orderby:="Orden ASC") 'DETALLES If NCDescuento Then PreparaNCDescuento(ObjFacturaDevolucion) Else ObjFacturaDevolucion.DtDetalle = TmpDT ObjFacturaDevolucion.SubTotal = TxtSubTotal.Text.ToDecimal ObjFacturaDevolucion.Descuento = LblDescuentos.Text.Trim.ToDecimal ObjFacturaDevolucion.Amortizacion = LblAmortizacion.Text.Trim.ToDecimal ObjFacturaDevolucion.IVA = TxtIVA.Text.ToDecimal ObjFacturaDevolucion.RetIVA = TxtRetIVA.Text.ToDecimal ObjFacturaDevolucion.RetISR = TxtRetISR.Text.ToDecimal ObjFacturaDevolucion.IEPS = TxtIEPS.Text.ToDecimal ObjFacturaDevolucion.TotalImpuestoLocal = ObjFacturaDevolucion.DtDeduccion.SUMD("Importe", "TipoImpuesto = 1") ObjFacturaDevolucion.Total = TxtTotal.Text.ToDecimal End If 'Totales, Y se llena TmpDTImpuestos 'otros ObjFacturaDevolucion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaDevolucion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaDevolucion.CveNCaVincular = DdlNCFactura.SelectedValue.ToEntero() If ObjFacturaDevolucion.CveMoneda <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then ObjFacturaDevolucion.TipoCambio = 1 ObjFacturaDevolucion.CveMoneda = 1 End If ObjFacturaDevolucion.DtFirmas = DTmpF 'CLIENTE ObjFacturaDevolucion.CveCliente = CveCliente ObjFacturaDevolucion.SetCliente() ''SUCURSAL 'ObjFacturaDevolucion.CveSucursal = DdlSucursal.SelectedValue.ToEntero() 'ObjFacturaDevolucion.SetSucursalMatriz(Me) 'ObjFacturaDevolucion.SetSucursal(Me) ObjFacturaDevolucion.ClienteSucursal = New Modelos.SucursalModel If Me.ClienteSucursal IsNot Nothing Then ObjFacturaDevolucion.ClienteSucursal.RFC = Me.ClienteSucursal.RFC ObjFacturaDevolucion.ClienteSucursal.Nombre = Me.ClienteSucursal.Nombre End If ObjFacturaDevolucion.ClienteSucursal.NoExt = CliNoExt ObjFacturaDevolucion.ClienteSucursal.NoInt = CliNoInt ObjFacturaDevolucion.ClienteSucursal.Localidad = CliLocalidad ObjFacturaDevolucion.ClienteSucursal.Direccion = LblDireccion.Text ObjFacturaDevolucion.ClienteSucursal.Colonia = LblColonia.Text ObjFacturaDevolucion.ClienteSucursal.Municipio = LblCiudad.Text ObjFacturaDevolucion.ClienteSucursal.Estado = LblEstado.Text ObjFacturaDevolucion.ClienteSucursal.CP = LblCP.Text ObjFacturaDevolucion.ClienteSucursal.Pais = CliPais ObjFacturaDevolucion.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() ObjFacturaDevolucion.ClienteSucursal.TelefonoSucursal = LblTelefono.Text ObjFacturaDevolucion.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") ObjFacturaDevolucion.SetSubProyectoMatriz(Me) ObjFacturaDevolucion.SetSubProyecto(Me) 'ENVIO DIRECCION ObjFacturaDevolucion.EnviarA = New Modelos.EnviarAModel If ChkDireccionEnvio.Checked Then If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then For Each Row As DataRow In TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows ObjFacturaDevolucion.EnviarA.CveDireccionEnvio = Row("CveDireccionEnvio").ToString().ToEntero() ObjFacturaDevolucion.EnviarA.EnvioDireccion = Row("EnvioDireccion").ToString() ObjFacturaDevolucion.EnviarA.EnvioColonia = Row("EnvioColonia").ToString() ObjFacturaDevolucion.EnviarA.EnvioCiudad = Row("EnvioCiudad").ToString() ObjFacturaDevolucion.EnviarA.EnvioEstado = Row("EnvioEstado").ToString() ObjFacturaDevolucion.EnviarA.EnvioCP = Row("EnvioCP").ToString() Next End If End If 'SI NO ES REFACTURACION If NuevaFactura <> 1 Then If DtVentasNC Is Nothing Then InicializaDTVentasNC() Dim Drt As DataRow = DtVentasNC.NewRow Drt("CveVenta") = ObjFactura.CveVenta Drt("Importe") = 0 Drt("FolioFiscal") = ObjFactura.FolioFiscal Drt("Folio") = ObjFactura.SerieFolio DtVentasNC.Rows.Add(Drt) DtVentasNC.AcceptChanges() End If End Sub Private Sub CreaObjetosVentaBonificacion(ObjVentas As ClsVentas, FolioFiscalRelacionado As String, CveAnticipoPadre As Integer, Optional CveVentasPadre As Integer = -1, Optional NCDescuento As Boolean = False) ObjFacturaBonificacion = New Modelos.Factura ObjFacturaBonificacion.CveUsuario = UsuarioActual.CveUsuario ObjFacturaBonificacion.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() If CveVentasPadre > 0 Then ObjFacturaBonificacion.CveVentaPadre = CveVentasPadre ObjFacturaBonificacion.CveVentaRelacion = CveVentasPadre Else ObjFacturaBonificacion.CveVentaPadre = ObjVentas.CveVenta ObjFacturaBonificacion.CveVentaRelacion = ObjVentas.CveVenta End If ObjFacturaBonificacion.CveEmpresa = UsuarioActual.CveEmpresa ObjFacturaBonificacion.TipoCambio = If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) ObjFacturaBonificacion.ConvertirPesos = ChkConvertirDoctoPesos.Checked ObjFacturaBonificacion.CveMoneda = DdlMoneda.SelectedValue.ToEntero() ObjFacturaBonificacion.Moneda = DdlMoneda.SelectedItem.Text ObjFacturaBonificacion.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DdlMoneda.SelectedValue}") 'ObjFacturaDevolucion.RefDocto = TxtDocto.Text.Trim 'ObjFacturaDevolucion.Folio = If(ExFolioFactura, FolioXML.ToEntero(), -1) ObjFacturaBonificacion.Serie = LblSerie.Text ObjFacturaBonificacion.Fecha = New Date(TxtFecha.Text.Trim.ToDate.Year, TxtFecha.Text.Trim.ToDate.Month, TxtFecha.Text.Trim.ToDate.Day, NowADS().Hour, NowADS().Minute, NowADS().Second) ObjFacturaBonificacion.CvePrePoliza = -1 ObjFacturaBonificacion.CveMetodoPago = 0 'DdlMetodoPago.SelectedValue.ToEntero() ObjFacturaBonificacion.MetodoPago = "" ObjFacturaBonificacion.UsuarioCreo = LblUsuario.Text.Trim ' ObjFacturaDevolucion.CveCondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedValue.ToEntero(), -1) ' ObjFacturaDevolucion.CondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedItem.Text, "") 'ObjFacturaDevolucion.NumeroCuenta = TxtNumCtaPago.Text.Trim 'ObjFacturaDevolucion.Cliente.NumCtaPago = TxtNumCtaPago.Text.Trim ObjFacturaBonificacion.CondicionesPago = If(RBLPago.SelectedValue = "2", 0, 1) ' 0 - Contado, 1 - Credito ObjFacturaBonificacion.TipoDocto = "Egs" If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjFolios As New ClsGralFolios() Dim TipoDoctoConsulta As String = If(ObjFacturaBonificacion.TipoDocto = "Ant", "Ing", If(ObjFacturaBonificacion.TipoDocto = "PA", "Rem", ObjFacturaBonificacion.TipoDocto)) If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) If DT.Rows.Count > 0 Then ObjFacturaBonificacion.Serie = DT.Rows(0)("Serie").ToString() End If DT.Dispose() End If ObjFolios.Dispose() End If ObjFacturaBonificacion.Fecha = NowADS() ObjFacturaBonificacion.Version = "4.0" If ObjFacturaBonificacion.Cliente Is Nothing Then ObjFacturaBonificacion.Cliente = New Modelos.ClienteModel End If ObjFacturaBonificacion.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal ObjFacturaBonificacion.Cliente.RegimenFiscal = ClienteRegimenFiscal 'CLIENTE ObjFacturaBonificacion.CveCliente = CveCliente ObjFacturaBonificacion.SetCliente() ObjFacturaBonificacion.CveMetodoPago = 1 ObjFacturaBonificacion.MetodoPago = "Pago en una sola exhibición" ObjFacturaBonificacion.ClaveMetodoPagoSAT = "PUE" ObjFacturaBonificacion.CveFormaPago = 21 ObjFacturaBonificacion.FormaPago = "Aplicación de anticipos" ObjFacturaBonificacion.ClaveFormaPagoSAT = "30" ObjFacturaBonificacion.CveUsoCFDI = DdlUsoCFDI.SelectedValue.ToEntero() ObjFacturaBonificacion.UsoCFDI = DdlUsoCFDI.SelectedItem.Text ObjFacturaBonificacion.ClaveUsoCFDISAT = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") ObjFacturaBonificacion.CveTipoRelacion = 1 ObjFacturaBonificacion.TipoRelacion = "01" Dim Fol As New List(Of String) Fol.Add(FolioFiscalRelacionado) ObjFacturaBonificacion.UUIDRelacionados = Fol Select Case ObjFacturaBonificacion.TipoDocto Case "Ing" ObjFacturaBonificacion.TipoDocumento = "Factura" Case "REM" ObjFacturaBonificacion.TipoDocumento = "Remision" Case "Cot" ObjFacturaBonificacion.TipoDocumento = "Cotizacion" Case "Egs" ObjFacturaBonificacion.TipoDocumento = "Nota de Crédito" Case "Dev" ObjFacturaBonificacion.TipoDocumento = "Nota de Devolución" Case Else ObjFacturaBonificacion.TipoDocumento = "" End Select If ObjFacturaBonificacion.TipoDocto IsNot Nothing Then ViewState("TipoDoctoDevolucion") = ObjFacturaBonificacion.TipoDocto End If ObjFacturaBonificacion.Fech1 = TxtFech1.Text.Trim.ToDate ObjFacturaBonificacion.Fech2 = TxtFech2.Text.Trim.ToDate ObjFacturaBonificacion.Fech3 = TxtFech3.Text.Trim.ToDate ObjFacturaBonificacion.Alfa2 = TxtAlfa2.Text.Trim ObjFacturaBonificacion.Alfa3 = TxtAlfa3.Text.Trim ObjFacturaBonificacion.Num1 = TxtNum1.Text.Trim.ToDecimal ObjFacturaBonificacion.Num2 = TxtNum2.Text.Trim.ToDecimal ObjFacturaBonificacion.Num3 = If(ObjFacturaBonificacion.TipoDocto = "OP", DdlOrdenPago.SelectedValue.ToDecimal, TxtNum3.Text.Trim.ToDecimal) ObjFacturaBonificacion.FechaPago = TxtFechaPago.Text.ToDate ObjFacturaBonificacion.CveCorte = CveCorte 'ObjFacturaBonificacion.CveMesa = -1 ObjFacturaBonificacion.NumeroPersonas = 0 ObjFacturaBonificacion.CveContrato = If(CveContrato > 0, CveContrato, CvePresupuesto) ObjFacturaBonificacion.DescripcionContrato = If(DdlContratosModal.SelectedItem IsNot Nothing, DdlContratosModal.SelectedItem.Text, "") ObjFacturaBonificacion.CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() ObjFacturaBonificacion.Entrega = Entrega ObjFacturaBonificacion.Vigencia = TxtFechaVencimientoCotizacion.Text.ToDate ObjFacturaBonificacion.CveVentaPadre = CveAnticipoPadre ObjFacturaBonificacion.CveVendedor = DdlVendedor.SelectedValue.ToEntero() If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If ObjFacturaBonificacion.FechaEjecucion = TxtFechaEjecucion.Text.Trim.ToDate ObjFacturaBonificacion.CveSucursalEjecucion = DdlSucursalEjecucion.SelectedValue.ToEntero() ObjFacturaBonificacion.CveSucursalCobranza = DdlSucursalCobranza.SelectedValue.ToEntero() If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DvModalRequiereOSFecha.Visible Then ObjFacturaBonificacion.Alfa1 = TxtFechaOS.Text.Trim ObjFacturaBonificacion.FechaEjecucion = TxtFechaOS.Text.Trim.ToDateTime Else ObjFacturaBonificacion.Alfa1 = TxtAlfa1.Text.Trim End If ObjFacturaBonificacion.AtencionA = "" ObjFacturaBonificacion.MotivoDescuento = TxtMotivoDescuento.Text.Trim ObjFacturaBonificacion.Observaciones = TxtObsFact.Text.Trim ObjFacturaBonificacion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaBonificacion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaBonificacion.MonedaAbreviatura = "" If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Else TmpDTImpuestos.Clear() End If Dim DR As DataRow = TmpDTImpuestos.NewRow() If TxtSubTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "SubTotal" : DR("Importe") = TxtSubTotal.Text.ToDecimal : DR("Orden") = 10 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If LblDescuentos.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Descuentos" : DR("Importe") = LblDescuentos.Text.Trim.ToDecimal : DR("Orden") = 20 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If LblAmortizacion.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Amort.Ant" : DR("Importe") = LblAmortizacion.Text.Trim.ToDecimal : DR("Orden") = 30 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtSubTotal2.Text.ToDecimal <> TxtSubTotal.Text.ToDecimal Then DR("ImpuestoLocal") = "SubTotal 2" : DR("Importe") = TxtSubTotal2.Text.ToDecimal : DR("Orden") = 40 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IVA" : DR("Importe") = TxtIVA.Text.ToDecimal : DR("Orden") = 50 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtRetIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.IVA" : DR("Importe") = TxtRetIVA.Text.ToDecimal : DR("Orden") = 60 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() If TxtRetISR.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.ISR" : DR("Importe") = TxtRetISR.Text.ToDecimal : DR("Orden") = 70 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() 'If DdlFormatoImpresion.SelectedValue.ToEntero() = 3 Or DdlFormatoImpresion.SelectedValue.ToEntero() = 4 Then ' DR("ImpuestoLocal") = "Subtotal2" : DR("Importe") = (TxtSubTotal.Text.ToDecimal + TxtIVA.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal) : DR("Orden") = 55 : TmpDTImpuestos.Rows.Add(DR) ' DR = TmpDTImpuestos.NewRow() 'End If For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then Dim Orden As Integer = 80 If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal > 0 Then DR("ImpuestoLocal") = gvr.DataKey("ImpuestoLocal").ToString() : DR("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal.RoundSQL(2) : DR("Orden") = Orden : DR("Porcentaje") = gvr.DataKey("Porcentaje").ToString() : DR("TipoImpuesto") = gvr.DataKey("TipoImpuesto").ToString() : TmpDTImpuestos.Rows.Add(DR) DR = TmpDTImpuestos.NewRow() Orden = Orden + 1 End If End If Next If TxtTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Total" : DR("Importe") = TxtTotal.Text.ToDecimal : DR("Orden") = 100 : DR("TipoImpuesto") = "0" : TmpDTImpuestos.Rows.Add(DR) ObjFacturaBonificacion.DtDeduccion = TmpDTImpuestos.FiltraParametros("", Orderby:="Orden ASC") 'DETALLES PreparaNCBonificacion(ObjFacturaBonificacion) 'otros ObjFacturaBonificacion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaBonificacion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaBonificacion.CveNCaVincular = DdlNCFactura.SelectedValue.ToEntero() If ObjFacturaBonificacion.CveMoneda <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then ObjFacturaBonificacion.TipoCambio = 1 ObjFacturaBonificacion.CveMoneda = 1 End If ObjFacturaBonificacion.DtFirmas = DTmpF ''SUCURSAL 'ObjFacturaBonificacion.CveSucursal = DdlSucursal.SelectedValue.ToEntero() 'ObjFacturaBonificacion.SetSucursalMatriz(Me) 'ObjFacturaBonificacion.SetSucursal(Me) ObjFacturaBonificacion.ClienteSucursal = New Modelos.SucursalModel If Me.ClienteSucursal IsNot Nothing Then ObjFacturaBonificacion.ClienteSucursal.Nombre = Me.ClienteSucursal.Nombre ObjFacturaBonificacion.ClienteSucursal.RFC = Me.ClienteSucursal.RFC End If ObjFacturaBonificacion.ClienteSucursal.NoExt = CliNoExt ObjFacturaBonificacion.ClienteSucursal.NoInt = CliNoInt ObjFacturaBonificacion.ClienteSucursal.Localidad = CliLocalidad ObjFacturaBonificacion.ClienteSucursal.Direccion = LblDireccion.Text ObjFacturaBonificacion.ClienteSucursal.Colonia = LblColonia.Text ObjFacturaBonificacion.ClienteSucursal.Municipio = LblCiudad.Text ObjFacturaBonificacion.ClienteSucursal.Estado = LblEstado.Text ObjFacturaBonificacion.ClienteSucursal.CP = LblCP.Text ObjFacturaBonificacion.ClienteSucursal.Pais = CliPais ObjFacturaBonificacion.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() ObjFacturaBonificacion.ClienteSucursal.TelefonoSucursal = LblTelefono.Text ObjFacturaBonificacion.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") ObjFacturaBonificacion.SetSubProyectoMatriz(Me) ObjFacturaBonificacion.SetSubProyecto(Me) 'ENVIO DIRECCION ObjFacturaBonificacion.EnviarA = New Modelos.EnviarAModel If ChkDireccionEnvio.Checked Then If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then For Each Row As DataRow In TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows ObjFacturaBonificacion.EnviarA.CveDireccionEnvio = Row("CveDireccionEnvio").ToString().ToEntero() ObjFacturaBonificacion.EnviarA.EnvioDireccion = Row("EnvioDireccion").ToString() ObjFacturaBonificacion.EnviarA.EnvioColonia = Row("EnvioColonia").ToString() ObjFacturaBonificacion.EnviarA.EnvioCiudad = Row("EnvioCiudad").ToString() ObjFacturaBonificacion.EnviarA.EnvioEstado = Row("EnvioEstado").ToString() ObjFacturaBonificacion.EnviarA.EnvioCP = Row("EnvioCP").ToString() Next End If End If 'SI NO ES REFACTURACION If NuevaFactura <> 1 AndAlso Not AplicaDocumentoNuevoNC Then If DtVentasNC Is Nothing Then InicializaDTVentasNC() Dim Drt As DataRow = DtVentasNC.NewRow Drt("CveVenta") = ObjFactura.CveVenta Drt("Importe") = 0 Drt("FolioFiscal") = ObjFactura.FolioFiscal Drt("Folio") = ObjFactura.SerieFolio DtVentasNC.Rows.Add(Drt) DtVentasNC.AcceptChanges() End If 'ASIGNAR RFC RECEPTOR If ObjFacturaBonificacion.Timbre IsNot Nothing Then If ObjFacturaBonificacion.Timbre.Receptor IsNot Nothing Then ObjFacturaBonificacion.RFCReceptor = ObjFacturaBonificacion.Timbre.Receptor.RFC End If End If ObjFacturaBonificacion.CveTipoVenta = 7 'BONIFICACION End Sub Private Function RegistrarNCAmortizacion(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, ObjInventario As ClsInventarios, ObjAcum As ClsAcumuladores, ObjContr As ClsContratos, ByVal factura As Modelos.Factura, ObjBancos As ClsBancos, TmpDTconceptos As DataTable, ByRef ObjEventos As ClsOIEventos, Optional NCDescuento As Boolean = False, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional IndexNC As Integer = 0) As Boolean Dim ProcesoCorrecto As Boolean = True 'GENERAMOS EL NUEVO FOLIO 'Dim ObjFolios As New ClsGralFolios(ObjVentas.IniciaTransacSQL()) 'If ObjFolios.GetFolios(factura.TipoDocto, UsuarioActual.CveEmpresa) Then ' Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue.ToEntero())) ' If DT.Rows.Count > 0 Then ' factura.Serie = DT.Rows(0)("Serie").ToString() ' factura.Folio = DT.Rows(0)("FActual").ToString().ToEntero() ' Else ' ProcesoCorrecto = False ' End If ' DT.Dispose() 'End If factura.Serie = "-1" factura.Folio = -1 If NCDescuento Then factura.Num3 = 1000 ' MARCADA PARA AUMENTAR EL FOLIO If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then DtVentasNC.Rows(IndexNC)("Importe") = factura.Total DtVentasNC.Rows(IndexNC)("TC") = factura.TipoCambio DtVentasNC.Rows(IndexNC)("TCCambioValuacion") = factura.TipoCambio End If factura.Timbre = PreParaTimbre(factura) factura.CveVentaPadre = Me.CveVenta 'Registramos la venta GuardarVenta(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, factura, factura.DtDetalle, -1, ObjBancos, EsNCAmortizacion:=False, NCDescuento:=True, ListaNCDescuento:=ListaNCDescuento) Else 'GENERO LOS DATOS DE LA NC Dim tmpcon As DataTable = TmpDT.Clone tmpcon.Clear() Dim DtImpuestos As New DataTable DtImpuestos.Columns.Add("ImportePU", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteTotal", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("CveSubProyecto", GetType(Integer)) DtImpuestos.AcceptChanges() Dim drpss As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlNCPSAnt.SelectedValue.ToEntero()).FiltroPrimero("") If drpss IsNot Nothing Then Dim ii As Integer = 1 Dim CveVentaP As Integer = 0 For Each gvrt As GridViewRow In GVAnticipos.Rows If gvrt.FCCheckBox(String.Format("Chk{0}", gvrt.RowIndex)).Checked Then 'SI SE VA HACER UNA NC EN DOLARES CON UN ANTICIPO EN PESOS If gvrt.DataKey("CveMoneda").ToEntero() = 1 AndAlso gvrt.FCTextBox(String.Format("TxtTC{0}", gvrt.RowIndex)).Text.ToDecimal() > 0 AndAlso factura.CveMoneda = 2 Then factura.TipoCambio = gvrt.FCTextBox(String.Format("TxtTC{0}", gvrt.RowIndex)).Text.ToDecimal() End If Dim CveSub As Integer = TmpDT.FiltroPrimeroValor("CveSubProyecto").ToEntero() Dim dr As DataRow = tmpcon.NewRow Dim Cantidad As Decimal = 1 Dim tTipoAmortizacion As Integer = If(DdlTipoAmortizacionAnticipo.SelectedValue = "2", 1, 2) Dim ForzarAjuste As Boolean = False 'EL IMPORTE DE NC NO PUEDE SER MAYOR AL DE LA FACTURA If (tTipoAmortizacion = 1) Then ForzarAjuste = True End If 'SI LA APLICACION DE ANTICIPO SE HACE A NIVEL TOTAL, FORZAR EL AJUSTE POR REDONDEO DtImpuestos = CargaDtImpuestosNC(gvrt.DataKey("CveVenta").ToString().ToEntero(), gvrt.FCTextBox(String.Format("TxtAnticipo{0}", gvrt.RowIndex)).Text.ToDecimal, AplicaImpuestosLocales:=True, NCDescuento:=False, NivelTotal:=tTipoAmortizacion, ForzarAjuste:=ForzarAjuste, AplicaDescuentos:=True, ReasignarTmpDT:=False) Dim query = From ddr In DtImpuestos Group By PorcentajeIVA = ddr("PorcentajeIVA").ToString().ToDecimal, PorcentajeRetIVA = ddr("PorcentajeRetIVA").ToString().ToDecimal, PorcentajeRetISR = ddr("PorcentajeRetISR").ToString().ToDecimal, PorcentajeIEPS = ddr("PorcentajeIEPS").ToString().ToDecimal Into x = Group Select ImportePU = x.Sum(Function(s) s("ImportePU").ToString().ToDecimal), ImporteTotal = x.Sum(Function(s) s("ImporteTotal").ToString().ToDecimal), ImporteIVA = x.Sum(Function(s) (s("ImporteIVA").ToString().ToDecimal)).RoundSQL(2), ' Math.Round(s("ImporteIVA").ToString().ToDecimal, 2)) * (1 + PorcentajeIEPS) * PorcentajeIVA, ImporteRetIVA = x.Sum(Function(s) s("ImporteRetIVA").ToString().ToDecimal()).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetIVA, ImporteRetISR = x.Sum(Function(s) s("ImporteRetISR").ToString().ToDecimal()).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetISR, ImporteIEPS = x.Sum(Function(s) s("ImporteIEPS").ToString().ToDecimal()).RoundSQL(2), 'Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeIEPS, Descuento = x.Sum(Function(s) s("Descuento").ToString().ToDecimal()).RoundSQL(2), PorcentajeIVA = PorcentajeIVA, PorcentajeRetIVA = PorcentajeRetIVA, PorcentajeRetISR = PorcentajeRetISR, PorcentajeIEPS = PorcentajeIEPS DtImpuestos = query.QueryToDataTable(False) For Each Drr As DataRow In DtImpuestos.Rows dr("CvePS") = drpss("CvePS") dr("PS") = drpss("PS") dr("OBS") = drpss("PS") dr("PU") = Drr("ImportePU").ToString().ToDecimal dr("Cantidad") = Cantidad dr("CveUM") = drpss("CveUnidadMedida") dr("SATClaveProdServ") = "84111506" dr("SATClaveUM") = "ACT" dr("CodigoObjetoImpuesto") = drpss("CodigoObjetoImpuesto") dr("Consec") = ii dr("PorcentajeIVA") = Drr("PorcentajeIVA").ToString().ToDecimal dr("IVA") = Drr("PorcentajeIVA") dr("ImporteIVA") = Drr("ImporteIVA").ToString().ToDecimal dr("ImporteRetIVA") = Drr("ImporteRetIVA").ToString().ToDecimal dr("ImporteRetISR") = Drr("ImporteRetISR").ToString().ToDecimal dr("PorcentajeRetIVA") = Drr("PorcentajeRetIVA").ToString().ToDecimal dr("PorcentajeRetISR") = Drr("PorcentajeRetISR").ToString().ToDecimal dr("PorcentajeIEPS") = Drr("PorcentajeIEPS").ToString().ToDecimal dr("ImporteIEPS") = Drr("ImporteIEPS").ToString().ToDecimal dr("IEPS") = Drr("ImporteIEPS").ToString().ToDecimal dr("Descuento") = Drr("Descuento").ToString().ToDecimal dr("TipoDescuento") = HdnTipoDescuento.Value dr("Total") = Drr("ImporteTotal").ToString().ToDecimal dr("CveClasificacion") = drpss("CveClasificacion") dr("CveSubProyecto") = CveSub dr("TotalImporte") = Drr("ImporteTotal").ToString().ToDecimal CveVentaP = gvrt.DataKey("CveVenta").ToEntero() tmpcon.Rows.Add(dr) ii += 1 Next End If Next '**** IMPUESTOS LOCALES factura.DtDetalle = tmpcon Dim TotalSubTotal As Decimal = tmpcon.SUMD("TotalImporte").RoundSQL(2) Dim TotalDescuentos As Decimal = tmpcon.SUMD("Descuento") Dim TotalIVA As Decimal = tmpcon.SUMD("ImporteIVA") Dim TotalIEPS As Decimal = tmpcon.SUMD("ImporteIEPS") Dim TotalRetIVA As Decimal = tmpcon.SUMD("ImporteRetIVA") Dim TotalRetISR As Decimal = tmpcon.SUMD("ImporteRetISR") Dim Total As Decimal = 0 Dim TotalImpuestosLocales As Decimal = factura.TotalImpuestoLocal.ToString().ToDecimal Total = (TotalSubTotal - TotalDescuentos + TotalIVA + TotalIEPS - TotalRetIVA - TotalRetISR - TotalImpuestosLocales) factura.SubTotal = TotalSubTotal factura.Descuento = TotalDescuentos factura.IVA = TotalIVA factura.IEPS = TotalIEPS factura.RetIVA = TotalRetIVA factura.RetISR = TotalRetISR factura.Total = Total 'SI ES REFACTURACION DEBE RELACIONAR CON LA VENTA NUEVA If NuevaFactura = 1 Then factura.CveVentaPadre = ObjFactura.CveVenta Else factura.CveVentaPadre = CveVentaP End If If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then DtVentasNC.Rows(0)("Importe") = Total DtVentasNC.Rows(0)("TC") = factura.TipoCambio DtVentasNC.Rows(0)("TCCambioValuacion") = factura.TipoCambio End If factura.Timbre = PreParaTimbre(factura) 'Registramos la venta GuardarVenta(ObjVentas, ObjConta, ObjInventario, ObjAcum, ObjContr, factura, tmpcon, -1, ObjBancos, EsNCAmortizacion:=True) Else ErrorList.Add("No se encontró un producto para generar la nota de crédito") If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then DtVentasNC.Rows.Clear() End If End If End If Return ProcesoCorrecto End Function Private Sub CreaObjetosVenta(Optional VistaPrevia As Boolean = False, Optional EsCancelacion As Boolean = False, Optional TipoDoctoViejo As String = "", Optional TipoDoctoVistaPrevia As String = "") If Me.CveVenta > 0 AndAlso NuevaFactura <> 1 Then ObjFactura = New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=EsCancelacion) Else ObjFactura = New Modelos.Factura End If ObjFactura.Version = "4.0" If ObjFactura.Cliente Is Nothing Then ObjFactura.Cliente = New Modelos.ClienteModel ObjFactura.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal ObjFactura.Cliente.RegimenFiscal = ClienteRegimenFiscal ObjFactura.CveUsuario = UsuarioActual.CveUsuario ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa ObjFactura.TipoCambio = If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) ObjFactura.TipoCambioDolares = TxtTipoCambioDlls.Text.Trim.ToDecimal ObjFactura.ConvertirPesos = ChkConvertirDoctoPesos.Checked ObjFactura.ConvertirDolares = ChkConvertirDolares.Checked ObjFactura.CveMoneda = DdlMoneda.SelectedValue.ToEntero() ObjFactura.Moneda = DdlMoneda.SelectedItem.Text ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DdlMoneda.SelectedValue}") ObjFactura.TipoDocto = If(IfNull(ViewState("CveRemision"), 0).ToString().ToEntero() > 0, "Ing", DdlTipoComprobante.SelectedValue) If VistaPrevia AndAlso Not String.IsNullOrEmpty(TipoDoctoVistaPrevia) Then ObjFactura.TipoDocto = TipoDoctoVistaPrevia End If ObjFactura.FacturarSucursal = (Me.FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso Not String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) ObjFactura.VentaDesglosaIEPS = Me.VentaDesglosaIEPS If EsCreaApartirDe Then ViewState("EstablecioFolio") = False End If 'si es cancelacion, debe de conservar el folio actual If Not EsCancelacion Then ObjFactura.Folio = If(EstablecioFolio Or VistaPrevia Or (CveVenta > 0 And (NuevaFactura.Contiene(0, 2))), TxtFolio.Text.Trim.ToEntero(), -1) 'SI NO ESTABLECIO UN FOLIO FIJO Y SI ES FACTURACION DE REMISION O COTIZACION NO TOMAR EL FOLIO QUE SE MUESTRA If Not EstablecioFolio AndAlso (Not EsCancelacion AndAlso ObjFactura.Folio > 0 AndAlso TipoDoctoViejo.Contiene("Rem", "Cot")) Then ObjFactura.Folio = -1 End If 'ObjFactura.Folio = If(ExFolioFactura, FolioXML.ToEntero(), -1) ObjFactura.Serie = If(VistaPrevia, "VistaPrevia", LblSerie.Text) If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjFolios As New ClsGralFolios() Dim TipoDoctoConsulta As String = If(ObjFactura.TipoDocto = "Ant", "Ing", If(ObjFactura.TipoDocto = "PA", "Rem", ObjFactura.TipoDocto)) If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) If DT.Rows.Count > 0 Then ObjFactura.Serie = DT.Rows(0)("Serie").ToString() End If DT.Dispose() End If ObjFolios.Dispose() End If ObjFactura.Fecha = New Date(TxtFecha.Text.Trim.ToDate.Year, TxtFecha.Text.Trim.ToDate.Month, TxtFecha.Text.Trim.ToDate.Day, NowADS().Hour, NowADS().Minute, NowADS().Second) ObjFactura.CvePrePoliza = -1 ObjFactura.FechaVencimiento = TxtFechaPago.Text.ToDate 'CLIENTE ObjFactura.CveCliente = CveCliente ObjFactura.SetCliente() ObjFactura.CveEmpresaCRM = CveEmpresaCRM If CveCliente = -1 And CveEmpresaCRM > 0 Then ObjFactura.Cliente.Nombre = LblEmpresaCRM.Text ObjFactura.Cliente.RFC = LblRFCCRM.Text End If ObjFactura.CveMetodoPago = DdlMetodoPago33.SelectedValue.ToEntero() ObjFactura.MetodoPago = If(DdlMetodoPago33.SelectedValue.ToEntero() > 0, DdlMetodoPago33.SelectedItem.Text, "") 'ObjFactura.ClaveMetodoPagoSAT = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {DdlMetodoPago33.SelectedValue}") ObjFactura.CveFormaPago = DdlFormaPago33.SelectedValue.ToEntero() ObjFactura.FormaPago = If(DdlFormaPago33.SelectedValue.ToEntero() > 0, DdlFormaPago33.SelectedItem.Text, "") 'ObjFactura.FormaPagoSAT33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {DdlFormaPago33.SelectedValue}") ObjFactura.CveUsoCFDI = DdlUsoCFDI.SelectedValue.ToEntero() ObjFactura.UsoCFDI = If(DdlUsoCFDI.SelectedValue.ToEntero() > 0, DdlUsoCFDI.SelectedItem.Text, "") 'ObjFactura.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") ' End If ObjFactura.UsuarioCreo = LblUsuario.Text.Trim ObjFactura.CveCondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedValue.ToEntero(), -1) ObjFactura.CondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedItem.Text, "") ObjFactura.CondicionesPago = If(RBLPago.SelectedValue = "2", 0, If(RBLPago.SelectedValue = "1", 1, 2)) ' 0 - Contado, 1 - Credito, 2 - termianl ObjFactura.AtencionA = TxtAtencionA.Text ObjFactura.FordGSDB = "" ObjFactura.NumeroContrato = NumeroContrato ObjFactura.DescripcionContrato = DescripcionContrato ObjFactura.NumeroDescripcionContrato = If($"{NumeroContrato} - {NumeroLicitacion}" = " - ", "", $"{NumeroContrato} {If(NumeroLicitacion = "", "", $" - Licitación: {NumeroLicitacion}")}") ObjFactura.PedidoContrato = If(TxtPedidoContrato.Text.Trim = "", ObjFactura.NumeroDescripcionContrato, $"{TxtPedidoContrato.Text.Trim} {If(ObjFactura.NumeroDescripcionContrato = "", "", $" / {ObjFactura.NumeroDescripcionContrato}") }") ObjFactura.OrdenCompra = TxtOrdenCompra.Text.Trim Select Case ObjFactura.TipoDocto Case "Ing" ObjFactura.TipoDocumento = "Factura" Case "Rem" ObjFactura.TipoDocumento = "Remision" Case "Cot" ObjFactura.TipoDocumento = "Cotizacion" Case "Egs" ObjFactura.TipoDocumento = "Nota de Crédito" Case "Dev" ObjFactura.TipoDocumento = "Nota de Devolución" Case "DPe" ObjFactura.TipoDocumento = "Devolución de pedido" Case "PeC" ObjFactura.TipoDocumento = "Consignación de Pedido" Case Else ObjFactura.TipoDocumento = "" End Select ObjFactura.Fech1 = TxtFech1.Text.Trim.ToDate ObjFactura.Fech2 = TxtFech2.Text.Trim.ToDate ObjFactura.Fech3 = TxtFech3.Text.Trim.ToDate ObjFactura.Alfa2 = TxtAlfa2.Text.Trim ObjFactura.Alfa3 = TxtAlfa3.Text.Trim ObjFactura.Num1 = TxtNum1.Text.Trim.ToDecimal ObjFactura.Num2 = TxtNum2.Text.Trim.ToDecimal ObjFactura.Num3 = If(ObjFactura.TipoDocto = "OP", DdlOrdenPago.SelectedValue.ToDecimal, TxtNum3.Text.Trim.ToDecimal) 'VALOR DE MARCA PARA IMPRESION DE TICKES EN FACTURAS PAGADAS If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then If DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then ObjFactura.Num2 = 800 End If End If 'VALOR PARA REMISIONES ESPECIALES If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If ObjFactura.TipoDocto = "Rem" AndAlso ChkRemEspecial.Checked Then ObjFactura.Num2 = 2000 'FECHA DE VIGENCIA PARA REMISION ESPECIAL ObjFactura.Fech2 = DateTime.Now.AddDays(1).Date End If End If If divcondicionespago.Visible Then ObjFactura.FechaPago = TxtFechaPago.Text.ToDate Else ObjFactura.FechaPago = NowADS() End If ObjFactura.DiasCredito = DiasCredito ObjFactura.EsDiasCreditoFijo = EsDiasCreditoFijo ObjFactura.CveCorte = CveCorte ObjFactura.NumeroPersonas = 0 If ObjFactura.TipoDocto = "Ant" And DdlContratosModal.SelectedValue.ToEntero > 0 Or ObjFactura.TipoDocto = "Ing" And DdlContratosModal.SelectedValue.ToEntero > 0 Or ObjFactura.TipoDocto = "Egs" And DdlContratosModal.SelectedValue.ToEntero > 0 Then CveContrato = DdlContratosModal.SelectedValue.ToEntero End If ObjFactura.CveContrato = If(CveContrato > 0, CveContrato, CvePresupuesto) ObjFactura.CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() ObjFactura.Entrega = Entrega ObjFactura.Vigencia = TxtFechaVencimientoCotizacion.Text.ToDate ObjFactura.CveVentaPadre = If(CveDevolucion > 0, CveDevolucion, If(CvePedido > 0, CvePedido, CvePedido)) If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then ObjFactura.CveVentaPadre = DtVentasNC.Rows(0)("CveVenta").ToString().ToEntero() ObjFactura.SerieFolioPadre = DtVentasNC.Rows(0)("FolioFiscal").ToString() End If If DdlTipoComprobante.SelectedValue = "Dev" AndAlso ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0 Then Dim ObjRNC As Modelos.Factura = ListaRemisionesNC.FirstOrDefault If ObjRNC IsNot Nothing Then ObjFactura.CveVentaPadre = ObjRNC.CveVentaPadre ObjFactura.SerieFolioPadre = ObjRNC.SerieFolioPadre End If End If ObjFactura.CveVendedor = DdlVendedor.SelectedValue.ToEntero() If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If ObjFactura.FechaEjecucion = TxtFechaEjecucion.Text.Trim.ToDate ObjFactura.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() ObjFactura.CveSubProyectoCobranza = DdlSubProyectoCobranza.SelectedValue.ToEntero() ObjFactura.CveSubProyectoEjecucion = DdlSubProyectoEjecucion.SelectedValue.ToEntero() ObjFactura.AtencionA = TxtAtencionA.Text ObjFactura.MotivoDescuento = TxtMotivoDescuento.Text.Trim ObjFactura.Observaciones = TxtObsFact.Text.Trim ObjFactura.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFactura.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFactura.Det_ContraRecibo = TxtDet_ContraRecibo.Text.Trim ObjFactura.MonedaAbreviatura = GlobalDTMonedas().FiltroPrimeroValor("Moneda", $"CveMoneda = {DdlMoneda.SelectedValue.ToEntero}") ObjFactura.Alfa1 = TxtAlfa1.Text.Trim If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then ObjFactura.Medico = DdlMedico.SelectedItem.Text ObjFactura.Procedimiento = DdlProcedimiento.SelectedItem.Text Dim FechaParaSurtir As DateTime = MinFecha If TxtFechaOS.Text.Replace(",", "").ToDateTime() > MinFecha Then FechaParaSurtir = TxtFechaOS.Text.Replace(",", "").ToDateTime() End If ObjFactura.FechaParaSurtir = FechaParaSurtir End If 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS If (ObjFactura.CveMoneda = 2 AndAlso ObjFactura.ConvertirPesos = True AndAlso ObjFactura.TipodeComprobante = "Ingresos" AndAlso RemisionesLista.Count > 0) Then Dim TotalCalculableImpuestos, TotalCalculableImpuestosIVA As Decimal For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * ObjFactura.TipoCambio, 6) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble * ObjFactura.TipoCambio, NumeroDecimales) TotalCalculableImpuestos = (Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal) - Row("Descuento").ToString().ToDecimal TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) Row("IVA") = Row("PorcentajeIVA") Row("ImporteIVA") = Math.Round(Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) Row("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) Row("IEPS") = Row("ImporteIEPS") Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio).FormatoNumero If gvr.DataKey("TipoImpuesto").ToString() = "5" Then ImpuestosLocales -= Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) Else ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) End If End If Next ObjFactura.SubTotal = TmpDT.SUMD("Total") ObjFactura.Descuento = TmpDT.SUMD("Descuento") ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * ObjFactura.TipoCambio, NumeroDecimales) ObjFactura.IVA = TmpDT.SUMD("ImporteIVA") ObjFactura.RetIVA = TmpDT.SUMD("ImporteRetIVA") ObjFactura.RetISR = TmpDT.SUMD("ImporteRetISR") ObjFactura.IEPS = TmpDT.SUMD("ImporteIEPS") ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal TipoCambioRemision = ObjFactura.TipoCambio ObjFactura.TipoCambio = 1 ObjFactura.ConvertirPesos = False ConversionRemision = "/" 'CONVERTIR REMISION - TIPO MONEDA -PESOS A DOLARES ElseIf (ObjFactura.CveMoneda = 1 AndAlso ObjFactura.ConvertirDolares = True AndAlso ObjFactura.TipodeComprobante = "Ingresos" AndAlso RemisionesLista.Count > 0) Then For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDouble / ObjFactura.TipoCambioDolares, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Next Dim ImpuestosLocales As Decimal = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) End If Next ObjFactura.SubTotal = TmpDT.SUMD("Total") ObjFactura.Descuento = TmpDT.SUMD("Descuento") ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) ObjFactura.IVA = TmpDT.SUMD("ImporteIVA") ObjFactura.RetIVA = TmpDT.SUMD("ImporteRetIVA") ObjFactura.RetISR = TmpDT.SUMD("ImporteRetISR") ObjFactura.IEPS = TmpDT.SUMD("ImporteIEPS") ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales) TipoCambioRemision = ObjFactura.TipoCambioDolares ObjFactura.TipoCambioDolares = 1 ObjFactura.ConvertirDolares = False ConversionRemision = "*" 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS REGISTRO DIRECTO SIN VENTA ElseIf (EditoRemision = False AndAlso ObjFactura.CveMoneda = 2 AndAlso ObjFactura.ConvertirPesos = True) Then Dim TotalCalculableImpuestos, TotalCalculableImpuestosIVA As Decimal For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * ObjFactura.TipoCambio, 6) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble * ObjFactura.TipoCambio, NumeroDecimales) TotalCalculableImpuestos = (Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal) - Row("Descuento").ToString().ToDecimal TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) Row("IVA") = Row("PorcentajeIVA") Row("ImporteIVA") = Math.Round(Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, NumeroDecimales) Row("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos, NumeroDecimales) Row("IEPS") = Row("ImporteIEPS") Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal * ObjFactura.TipoCambio).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * ObjFactura.TipoCambio, NumeroDecimales) End If Next ObjFactura.SubTotal = TmpDT.SUM("Total") ObjFactura.Descuento = TmpDT.SUM("Descuento") ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * ObjFactura.TipoCambio, NumeroDecimales) ObjFactura.IVA = TmpDT.SUM("ImporteIVA") ObjFactura.RetIVA = TmpDT.SUM("ImporteRetIVA") ObjFactura.RetISR = TmpDT.SUM("ImporteRetISR") ObjFactura.IEPS = TmpDT.SUM("ImporteIEPS") ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal TipoCambioRemision = ObjFactura.TipoCambio ObjFactura.TipoCambio = 1 ObjFactura.ConvertirPesos = False ConversionRemision = "/" 'CONVERTIR REMISION - TIPO MONEDA -PESOS A DOLARES REGISTRO DIRECTO SIN VENTA ElseIf (EditoRemision = False AndAlso ObjFactura.CveMoneda = 1 AndAlso ObjFactura.ConvertirDolares = True) Then For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDouble / ObjFactura.TipoCambioDolares, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDouble * Row("PU").ToString().ToDouble, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / ObjFactura.TipoCambioDolares, NumeroDecimales) End If Next ObjFactura.SubTotal = TmpDT.SUM("Total") ObjFactura.Descuento = TmpDT.SUM("Descuento") ObjFactura.Amortizacion = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / ObjFactura.TipoCambioDolares, NumeroDecimales) ObjFactura.IVA = TmpDT.SUM("ImporteIVA") ObjFactura.RetIVA = TmpDT.SUM("ImporteRetIVA") ObjFactura.RetISR = TmpDT.SUM("ImporteRetISR") ObjFactura.IEPS = TmpDT.SUM("ImporteIEPS") ObjFactura.Total = (ObjFactura.SubTotal - ObjFactura.Descuento - ObjFactura.Amortizacion + ObjFactura.IVA + ObjFactura.IEPS - ObjFactura.RetIVA - ObjFactura.RetISR - ImpuestosLocales).ToDecimal TipoCambioRemision = ObjFactura.TipoCambioDolares ObjFactura.TipoCambioDolares = 1 ObjFactura.ConvertirDolares = False ConversionRemision = "*" Else 'Totales, Y se llena TmpDTImpuestos ObjFactura.SubTotal = TxtSubTotal.Text.ToDecimal ObjFactura.Descuento = LblDescuentos.Text.Trim.ToDecimal ObjFactura.Amortizacion = LblAmortizacion.Text.Trim.ToDecimal ObjFactura.IVA = TxtIVA.Text.ToDecimal ObjFactura.RetIVA = TxtRetIVA.Text.ToDecimal ObjFactura.RetISR = TxtRetISR.Text.ToDecimal ObjFactura.IEPS = TxtIEPS.Text.ToDecimal ObjFactura.Total = TxtTotal.Text.ToDecimal End If Dim TmpSubtotal As Decimal = TxtSubTotal.Text.ToDecimal - ObjFactura.Descuento Dim TmpAmortizacion As Decimal = LblAmortizacion.Text.ToDecimal ObjFactura.DtDetalle = TmpDT If AplicaFord Then ObjFactura.FordGSDB = TxtFordGSDB.Text Dim SB As New StringBuilder For Each li As ListItem In LstFordASN.Items SB.AppendFormat("{0}, ", li.Text) Next ObjFactura.FordASN = SB.ToString() End If If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() Dim TmpDTImpuestosVista As DataTable = TmpDTImpuestos.Clone() Dim DR As DataRow = TmpDTImpuestosVista.NewRow() If TxtSubTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "SubTotal" : DR("Importe") = ObjFactura.SubTotal : DR("Orden") = 10 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If LblDescuentos.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Descuentos" : DR("Importe") = ObjFactura.Descuento : DR("Orden") = 20 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If LblAmortizacion.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Amort.Ant" : DR("Importe") = ObjFactura.Amortizacion : DR("Orden") = 30 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtSubTotal2.Text.ToDecimal <> TxtSubTotal.Text.ToDecimal Then DR("ImpuestoLocal") = "SubTotal 2" : DR("Importe") = TxtSubTotal2.Text.ToDecimal : DR("Orden") = 40 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() 'If TxtIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IVA" : DR("Importe") = ObjFactura.IVA : DR("Orden") = 50 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtRetIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.IVA" : DR("Importe") = ObjFactura.RetIVA : DR("Orden") = 60 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtRetISR.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.ISR" : DR("Importe") = ObjFactura.RetISR : DR("Orden") = 70 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtIEPS.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IEPS" : DR("Importe") = ObjFactura.IEPS : DR("Orden") = 80 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then Dim Orden As Integer = 80 If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble > 0 Then DR("ImpuestoLocal") = gvr.DataKey("ImpuestoLocal").ToString() : DR("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble : DR("Orden") = Orden : DR("Porcentaje") = gvr.DataKey("Porcentaje").ToString() : DR("TipoImpuesto") = gvr.DataKey("TipoImpuesto").ToString() : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() Orden = Orden + 1 End If End If Next If TxtTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Total" : DR("Importe") = ObjFactura.Total : DR("Orden") = 100 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) ObjFactura.DtDeduccion = TmpDTImpuestosVista.FiltraParametros("", Orderby:="Orden ASC") 'TmpDT DESGLOSE DE IMPUESTOS 3.3 If UsuarioActual.CveEmpresa.Contiene(119) Then If TmpDTDocumentosRelacionados IsNot Nothing Then ObjFactura.DtDocumentosRelacionados = TmpDTDocumentosRelacionados End If If TmpDTNCVinculadas IsNot Nothing Then ObjFactura.DtNCVinculadas = TmpDTNCVinculadas End If End If CreaDTImpuestosIVAIEPS() For Each DrImpuestos33 As DataRow In TmpDT.Rows Dim DrIVA As DataRow = Nothing Dim DrIEPS As DataRow = Nothing Try DrIVA = TmpDTImpuestosIVAIEPS.Select("Impuesto = 'IVA'")(0) Catch ex As Exception DrIVA = Nothing End Try If DrIVA IsNot Nothing Then DrIVA("Importe") = DrIVA("Importe").ToString().ToDouble + DrImpuestos33("ImporteIVA").ToString().ToDouble TmpDTImpuestosIVAIEPS.AcceptChanges() Else Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() If DrImpuestos33("PorcentajeIVA").ToString().ToDecimal > 0 Then DR2("Impuesto") = "IVA" : DR2("tasa") = DdlIVA.SelectedItem.ToString() : DR2("Importe") = DrImpuestos33("ImporteIVA").ToString().ToDecimal : DR2("Orden") = "1" TmpDTImpuestosIVAIEPS.Rows.Add(DR2) TmpDTImpuestosIVAIEPS.AcceptChanges() End If End If Try DrIEPS = TmpDTImpuestosIVAIEPS.Select($"Impuesto = 'IEPS' AND tasa = '{DrImpuestos33("PorcentajeIEPS").ToString().ToDecimal * 100} %'")(0) Catch ex As Exception DrIEPS = Nothing End Try If DrIEPS IsNot Nothing Then DrIEPS("Importe") = DrIEPS("Importe").ToString().ToDouble + DrImpuestos33("ImporteIEPS").ToString().ToDouble TmpDTImpuestosIVAIEPS.AcceptChanges() Else Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() If DrImpuestos33("PorcentajeIEPS").ToString().ToDouble > 0 Then DR2("Impuesto") = "IEPS" : DR2("tasa") = String.Format("{0} {1}", DrImpuestos33("PorcentajeIEPS").ToString().ToDouble * 100, "%") : DR2("Importe") = DrImpuestos33("ImporteIEPS").ToString().ToDouble : DR2("Orden") = If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.03", "2", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.06", "3", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.07", "4", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.09", "5", "0")))) TmpDTImpuestosIVAIEPS.Rows.Add(DR2) TmpDTImpuestosIVAIEPS.AcceptChanges() End If End If Next ObjFactura.DtDesgloseImpuestos = TmpDTImpuestosIVAIEPS.FiltraParametros("", Orderby:="Orden ASC") 'otros ObjFactura.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFactura.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFactura.Det_ContraRecibo = TxtDet_ContraRecibo.Text.Trim ObjFactura.CveNCaVincular = DdlNCFactura.SelectedValue.ToEntero() If ObjFactura.CveMoneda <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then ObjFactura.TipoCambio = 1 ObjFactura.CveMoneda = 1 ObjFactura.Moneda = "Pesos" ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {ObjFactura.CveMoneda}") End If If ObjFactura.CveMoneda <> 2 AndAlso ChkConvertirDolares.Checked Then ObjFactura.TipoCambio = TxtTipoCambioDlls.Text.Trim.ToDecimal ObjFactura.CveMoneda = 2 ObjFactura.Moneda = "Dólares" ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {ObjFactura.CveMoneda}") End If 'Se agrega CveVenta -1 For Each Row As DataRow In TmpDT.Rows Row("CveVenta") = ObjFactura.CveVenta Next 'DETALLES ObjFactura.DtDetalle = TmpDT.Copy ObjFactura.DtFirmas = DTmpF.Copy 'SUCURSAL 'ObjFactura.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() ObjFactura.SetSubProyectoMatriz(Me) ObjFactura.SetSubProyecto(Me) ObjFactura.ClienteSucursal = New Modelos.SucursalModel() If CveCliente > 0 Then If Me.ClienteSucursal IsNot Nothing Then ObjFactura.ClienteSucursal.RFC = Me.ClienteSucursal.RFC ObjFactura.ClienteSucursal.Nombre = Me.ClienteSucursal.Nombre End If ObjFactura.ClienteSucursal.NoExt = CliNoExt ObjFactura.ClienteSucursal.NoInt = CliNoInt ObjFactura.ClienteSucursal.Localidad = CliLocalidad ObjFactura.ClienteSucursal.Direccion = LblDireccion.Text ObjFactura.ClienteSucursal.Colonia = LblColonia.Text ObjFactura.ClienteSucursal.Municipio = LblCiudad.Text ObjFactura.ClienteSucursal.Estado = LblEstado.Text ObjFactura.ClienteSucursal.CP = LblCP.Text ObjFactura.ClienteSucursal.Pais = CliPais ObjFactura.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() ObjFactura.ClienteSucursal.TelefonoSucursal = LblTelefono.Text ObjFactura.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") ObjFactura.ClienteSucursal.ImprimeNombreSucursal = ImprimeNombreSucursal.ToString() End If 'ENVIO DIRECCION ObjFactura.EnviarA = New Modelos.EnviarAModel If ChkDireccionEnvio.Checked Then If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then For Each Row As DataRow In TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows ObjFactura.EnviarA.CveDireccionEnvio = Row("CveDireccionEnvio").ToString().ToEntero() ObjFactura.EnviarA.EnvioDireccion = Row("EnvioDireccion").ToString() ObjFactura.EnviarA.EnvioNoExt = Row("EnvioNoExt").ToString() ObjFactura.EnviarA.EnvioNoInt = Row("EnvioNoInt").ToString() ObjFactura.EnviarA.EnvioColonia = Row("EnvioColonia").ToString() ObjFactura.EnviarA.EnvioCiudad = Row("EnvioCiudad").ToString() ObjFactura.EnviarA.EnvioEstado = Row("EnvioEstado").ToString() ObjFactura.EnviarA.EnvioCP = Row("EnvioCP").ToString() ObjFactura.EnviarA.EnvioTel = Row("EnvioTel").ToString() ObjFactura.EnviarA.EnvioContacto = Row("EnvioContacto").ToString() ObjFactura.EnviarA.EnvioDepartamento = Row("EnvioDepartamento").ToString() 'ObjFactura.EnviarA.EnvioPedidoContrato = Row("EnvioPedidoContrato").ToString() Next End If End If 'Amortizacion ObjFactura.CveTipoRelacion = DdlTipoRelacionAnticipo.SelectedValue.ToEntero() If Me.AplicaRelacionManual Then If DdlTipoRelacionARelacionar.SelectedValue.ToEntero() > 0 AndAlso Me.TmpDTFacturasRelacionadas IsNot Nothing AndAlso Me.TmpDTFacturasRelacionadas.Rows.Count > 0 Then ObjFactura.CveTipoRelacion = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() End If End If ObjFactura.AplicaDevolucion = Me.AplicaDevolucion ObjFactura.CveTipoAmortizacionAnticipo = DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() If ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso NuevaFactura = 1 Then ' refacturación ObjFactura.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() End If If ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso DdlTipoRelacionAnticipo.SelectedValue.ToEntero() > 0 Then ' refacturación ObjFactura.CveTipoRelacion = DdlTipoRelacionAnticipo.SelectedValue.ToEntero() If GVAnticipos.Rows.Count > 0 Then For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox(String.Format("Chk{0}", gvr.RowIndex)).Checked AndAlso gvr.DataKey("CveConceptoContable") = "12" Then ' solo notas de crédito If DtVentasNC Is Nothing Then InicializaDTVentasNC() Dim Drt As DataRow = DtVentasNC.NewRow Drt("CveVenta") = gvr.DataKey("CveVenta") Drt("Importe") = gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text Drt("FolioFiscal") = gvr.DataKey("FolioFiscal") Drt("Folio") = gvr.DataKey("Folio") DtVentasNC.Rows.Add(Drt) End If Next End If End If ' If CveCliente > 0 Then ObjFactura.Timbre = PreParaTimbre(ObjFactura) 'SI SE ESTA EDITANDO ACTUALIZA LOS IMPORTES DEL DT If GvImpuestosLocales2.Visible AndAlso GvImpuestosLocales2.Enabled Then For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then Dim DrsImpuestos As DataRow() = TmpDTImpuestos.Select($"CveImpuestoLocal={gvr.DataKey("CveImpuestoLocal")}") If DrsImpuestos IsNot Nothing AndAlso DrsImpuestos.Length = 1 Then DrsImpuestos(0)("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble End If End If Next End If 'INE COMPLEMENTO If RblComplementos.SelectedValue.ToEntero() > 0 Then ObjFactura.CveComplementoTimbrado = RblComplementos.SelectedValue.ToEntero() Dim INE As New Modelos.ComplementoINE Select Case RblComplementos.SelectedValue.ToEntero() Case 5 INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() INE.INETipoProceso = "Ordinario" INE.INETipoComite = "Directivo Estatal" INE.INEEntidad = DdlINEEntidad.SelectedValue Case 6 INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() INE.INETipoProceso = "Ordinario" INE.INETipoComite = "Ejecutivo Estatal" INE.INEEntidad = DdlINEEntidad.SelectedValue Case 7 INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() INE.INETipoProceso = "Ordinario" INE.INETipoComite = "Ejecutivo Nacional" Case 8 INE.INEIdContabilidad = TxtIdConta.Text.ToEntero() INE.INETipoProceso = DdlTipoCampaña.SelectedValue INE.INETipoComite = DdlAmbitoComplemento.SelectedValue INE.INEEntidad = DdlINEEntidad.SelectedValue Case Else INE.INEIdContabilidad = 0 INE.INETipoProceso = "" INE.INETipoComite = "" INE.INEEntidad = "" End Select ObjFactura.ComplementoINE = INE End If ObjFactura.CveTipoRetencion = DdlTipoRetencion.SelectedValue.ToEntero() ObjFactura.DescuentoProntoPago = HdnProntoPago.Value.ToDecimal() ObjFactura.NuevaFactura = Me.NuevaFactura ObjFactura.EsGarantia = Me.EsGarantia ObjFactura.Bloqueada = Me.Bloqueada If UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 AndAlso TrKilometraje.Visible Then ObjFactura.Kilometraje = TxtKilometraje.Text.Trim.ToDecimal() End If 'ASIGNAR RFC RECEPTOR If ObjFactura.Timbre IsNot Nothing Then If ObjFactura.Timbre.Receptor IsNot Nothing Then ObjFactura.RFCReceptor = ObjFactura.Timbre.Receptor.RFC End If End If ObjFactura.DtMercancias = DtMercancias ObjFactura.DtImpuestosLocales = TmpDTImpuestos 'TRASPASAR PAGOS DE REMISIONES A LA FACTURA NUEVA If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso ObjFactura.TipoDocto = "Ing" Then Dim DtRemisionesPagos As DataTable = Nothing If Me.CveVenta > 0 AndAlso TipoDoctoViejo = "Rem" Then Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasRemisionesPagos(CveCliente, Me.CveVenta.ToString(), UsuarioActual.CveEmpresa) Then DtRemisionesPagos = ObjClientes.DtResultados.Copy() End If ObjClientes.Dispose() ElseIf Me.RemisionesLista IsNot Nothing AndAlso Me.RemisionesLista.Count > 0 Then Dim sb As New StringBuilder For Each CveRemision As Integer In RemisionesLista sb.Append($"{CveRemision},") Next sb.Remove(sb.Length - 1, 1) Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasRemisionesPagos(CveCliente, sb.ToString(), UsuarioActual.CveEmpresa) Then DtRemisionesPagos = ObjClientes.DtResultados.Copy() End If ObjClientes.Dispose() End If If DtRemisionesPagos IsNot Nothing Then ObjFactura.DtPagosFacturaGlobal = DtRemisionesPagos End If End If 'AGREGA LA ADDENDA DESDE AQUI PARA QUE SE GUARDE LA INFORMACION DEL CAMPO If ObjFactura.TipoDocto = "Ing" AndAlso Not String.IsNullOrEmpty(TxtNOS.Text.Trim()) Then Dim Obj_REM As New Modelos.M_REM Obj_REM.NOS = TxtNOS.Text Obj_REM._OR = TxtOR.Text Obj_REM.CLUES = TxtCLUES.Text Obj_REM.CONTRATO = TxtContrato.Text Obj_REM.FEEX = TxtFEEX.Text Obj_REM.FEEN = TxtFEEN.Text Obj_REM.FERE = TxtFERE.Text Dim xmlRem As String = "" Try Dim serializer As System.Xml.Serialization.XmlSerializer = New System.Xml.Serialization.XmlSerializer(Obj_REM.GetType) Dim string_writer As New System.IO.StringWriter serializer.Serialize(string_writer, Obj_REM) xmlRem = string_writer.ToString() 'QUITAR NAMESPACES Y ETIQUETAS NO NECESARIAS If xmlRem <> "" Then xmlRem = xmlRem.Replace("", "") xmlRem = xmlRem.Replace("xmlns:xsd=""http://www.w3.org/2001/XMLSchema""", "") xmlRem = xmlRem.Replace("xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""", "") End If Catch ex As Exception xmlRem = "" OnError("Ocurrió un error al guardar los datos de la addenda", ex) End Try If Not String.IsNullOrEmpty(xmlRem) Then Dim SB As New StringBuilder SB.Append("") SB.AppendFormat("{0}", xmlRem) SB.Append("") ObjFactura.Addenda = SB.ToString() End If End If End Sub Private Sub CreaObjetosVentaDevolucion() ObjFacturaDevolucion = New Modelos.Factura ObjFacturaDevolucion.CveUsuario = UsuarioActual.CveUsuario ObjFacturaDevolucion.CveEmpresa = UsuarioActual.CveEmpresa ObjFacturaDevolucion.TipoCambio = If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.Trim.ToDecimal) ObjFacturaDevolucion.ConvertirPesos = ChkConvertirDoctoPesos.Checked ObjFacturaDevolucion.CveMoneda = DdlMoneda.SelectedValue.ToEntero() ObjFacturaDevolucion.Moneda = DdlMoneda.SelectedItem.Text ObjFacturaDevolucion.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DdlMoneda.SelectedValue}") 'ObjFacturaDevolucion.RefDocto = TxtDocto.Text.Trim 'ObjFacturaDevolucion.Folio = If(ExFolioFactura, FolioXML.ToEntero(), -1) ObjFacturaDevolucion.Serie = LblSerie.Text ObjFacturaDevolucion.Fecha = New Date(TxtFecha.Text.Trim.ToDate.Year, TxtFecha.Text.Trim.ToDate.Month, TxtFecha.Text.Trim.ToDate.Day, NowADS().Hour, NowADS().Minute, NowADS().Second) ObjFacturaDevolucion.CvePrePoliza = -1 ObjFacturaDevolucion.CveMetodoPago = 0 'DdlMetodoPago.SelectedValue.ToEntero() ObjFacturaDevolucion.MetodoPago = "" 'DdlMetodoPago.SelectedItem.Text ObjFacturaDevolucion.UsuarioCreo = LblUsuario.Text.Trim ObjFacturaDevolucion.CveCondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedValue.ToEntero(), -1) ObjFacturaDevolucion.CondicionEntrega = If(DdlFormaEntrega.SelectedItem IsNot Nothing, DdlFormaEntrega.SelectedItem.Text, "") ObjFacturaDevolucion.CondicionesPago = If(RBLPago.SelectedValue = "2", 0, 1) ' 0 - Contado, 1 - Credito ObjFacturaDevolucion.TipoDocto = "Egs" If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjFolios As New ClsGralFolios() Dim TipoDoctoConsulta As String = If(ObjFacturaDevolucion.TipoDocto = "Ant", "Ing", If(ObjFacturaDevolucion.TipoDocto = "PA", "Rem", ObjFacturaDevolucion.TipoDocto)) If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) If DT.Rows.Count > 0 Then ObjFacturaDevolucion.Serie = DT.Rows(0)("Serie").ToString() End If DT.Dispose() End If ObjFolios.Dispose() End If ObjFacturaDevolucion.Fecha = NowADS() 'VALORES DEFAULT DE NC-DEV Dim CveUsoCFDIOld As String = DdlUsoCFDI.SelectedValue Dim MetodoPago33Old As String = DdlMetodoPago33.SelectedValue Dim FormaPago33Old As String = DdlFormaPago33.SelectedValue DdlUsoCFDI.SelectedValueExist("2") DdlMetodoPago33.SelectedValueExist("1") DdlFormaPago33.SelectedValueExist("20") ObjFacturaDevolucion.SerieFolioPadre = HdnFolioFiscalNC.Value.ToString() If ObjFacturaDevolucion.Cliente Is Nothing Then ObjFacturaDevolucion.Cliente = New Modelos.ClienteModel End If ObjFacturaDevolucion.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal ObjFacturaDevolucion.Cliente.RegimenFiscal = ClienteRegimenFiscal 'CLIENTE ObjFacturaDevolucion.CveCliente = CveCliente ObjFacturaDevolucion.SetCliente() ObjFacturaDevolucion.CveMetodoPago = DdlMetodoPago33.SelectedValue.ToEntero() ObjFacturaDevolucion.MetodoPago = If(DdlMetodoPago33.SelectedValue.ToEntero() > 0, DdlMetodoPago33.SelectedItem.Text, "") ObjFacturaDevolucion.CveFormaPago = DdlFormaPago33.SelectedValue.ToEntero() ObjFacturaDevolucion.FormaPago = If(DdlFormaPago33.SelectedValue.ToEntero() > 0, DdlFormaPago33.SelectedItem.Text, "") ObjFacturaDevolucion.CveUsoCFDI = DdlUsoCFDI.SelectedValue.ToEntero() ObjFacturaDevolucion.UsoCFDI = If(DdlUsoCFDI.SelectedValue.ToEntero() > 0, DdlUsoCFDI.SelectedItem.Text, "") ObjFacturaDevolucion.ClaveUsoCFDISAT = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {DdlUsoCFDI.SelectedValue}") DdlUsoCFDI.SelectedValueExist(CveUsoCFDIOld) DdlMetodoPago33.SelectedValueExist(MetodoPago33Old) DdlFormaPago33.SelectedValueExist(FormaPago33Old) Select Case ObjFacturaDevolucion.TipoDocto Case "Ing" ObjFacturaDevolucion.TipoDocumento = "Factura" Case "Rem" ObjFacturaDevolucion.TipoDocumento = "Remision" Case "Cot" ObjFacturaDevolucion.TipoDocumento = "Cotizacion" Case "Egs" ObjFacturaDevolucion.TipoDocumento = "Nota de Crédito" Case "Dev" ObjFacturaDevolucion.TipoDocumento = "Nota de Devolución" Case Else ObjFacturaDevolucion.TipoDocumento = "" End Select If ObjFacturaDevolucion.TipoDocto IsNot Nothing Then ViewState("TipoDoctoDevolucion") = ObjFacturaDevolucion.TipoDocto End If ObjFacturaDevolucion.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() ObjFacturaDevolucion.Fech1 = TxtFech1.Text.Trim.ToDate ObjFacturaDevolucion.Fech2 = TxtFech2.Text.Trim.ToDate ObjFacturaDevolucion.Fech3 = TxtFech3.Text.Trim.ToDate ObjFacturaDevolucion.Alfa2 = TxtAlfa2.Text.Trim ObjFacturaDevolucion.Alfa3 = TxtAlfa3.Text.Trim ObjFacturaDevolucion.Num1 = TxtNum1.Text.Trim.ToDecimal ObjFacturaDevolucion.Num2 = TxtNum2.Text.Trim.ToDecimal ObjFacturaDevolucion.Num3 = If(ObjFacturaDevolucion.TipoDocto = "OP", DdlOrdenPago.SelectedValue.ToDecimal, TxtNum3.Text.Trim.ToDecimal) ObjFacturaDevolucion.FechaPago = TxtFechaPago.Text.ToDate ObjFacturaDevolucion.CveCorte = CveCorte 'ObjFacturaDevolucion.CveMesa = -1 ObjFacturaDevolucion.NumeroPersonas = 0 ObjFacturaDevolucion.CveContrato = If(CveContrato > 0, CveContrato, CvePresupuesto) ObjFacturaDevolucion.DescripcionContrato = If(DdlContratosModal.SelectedItem IsNot Nothing, DdlContratosModal.SelectedItem.Text, "") ObjFacturaDevolucion.CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() ObjFacturaDevolucion.Entrega = Entrega ObjFacturaDevolucion.Vigencia = TxtFechaVencimientoCotizacion.Text.ToDate ObjFacturaDevolucion.CveVentaPadre = If(CveDevolucion > 0, CveDevolucion, CvePedido) ObjFacturaDevolucion.CveVendedor = DdlVendedor.SelectedValue.ToEntero() If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If ObjFacturaDevolucion.FechaEjecucion = TxtFechaEjecucion.Text.Trim.ToDate 'ObjFacturaDevolucion.CveSucursalEjecucion = DdlSucursalEjecucion.SelectedValue.ToEntero() 'ObjFacturaDevolucion.CveSucursalCobranza = DdlSucursalCobranza.SelectedValue.ToEntero() ObjFacturaDevolucion.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() ObjFacturaDevolucion.CveSubProyectoCobranza = DdlSubProyectoCobranza.SelectedValue.ToEntero() ObjFacturaDevolucion.CveSubProyectoEjecucion = DdlSubProyectoEjecucion.SelectedValue.ToEntero() ObjFacturaDevolucion.AtencionA = If(ObjFacturaDevolucion.TipoDocto = "Cot" Or (ObjFacturaDevolucion.TipoDocto.Contiene("Ing", "Rem") AndAlso LblRFC.Text = "XAXX010101000"), TxtAtencionA.Text, "-1") ObjFacturaDevolucion.MotivoDescuento = TxtMotivoDescuento.Text.Trim ObjFacturaDevolucion.Observaciones = TxtObsFact.Text.Trim ObjFacturaDevolucion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaDevolucion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaDevolucion.MonedaAbreviatura = "" If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DvModalRequiereOSFecha.Visible Then ObjFacturaDevolucion.FechaEjecucion = TxtFechaOS.Text.Trim.ToDateTime Else ObjFacturaDevolucion.Alfa1 = TxtAlfa1.Text.Trim End If 'Totales, Y se llena TmpDTImpuestos ObjFacturaDevolucion.SubTotal = TxtSubTotal.Text.ToDecimal ObjFacturaDevolucion.Descuento = LblDescuentos.Text.Trim.ToDecimal ObjFacturaDevolucion.Amortizacion = LblAmortizacion.Text.Trim.ToDecimal ObjFacturaDevolucion.IVA = TxtIVA.Text.ToDecimal ObjFacturaDevolucion.RetIVA = TxtRetIVA.Text.ToDecimal ObjFacturaDevolucion.RetISR = TxtRetISR.Text.ToDecimal ObjFacturaDevolucion.IEPS = TxtIEPS.Text.ToDecimal ObjFacturaDevolucion.Total = TxtTotal.Text.ToDecimal If TmpDTImpuestos Is Nothing Then CreaDTImpuestos() End If Dim TmpDTImpuestosVista As DataTable = TmpDTImpuestos.Clone() Dim DR As DataRow = TmpDTImpuestosVista.NewRow() If TxtSubTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "SubTotal" : DR("Importe") = TxtSubTotal.Text.ToDecimal : DR("Orden") = 10 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If LblDescuentos.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Descuentos" : DR("Importe") = LblDescuentos.Text.Trim.ToDecimal : DR("Orden") = 20 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If LblAmortizacion.Text.Trim.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Amort.Ant" : DR("Importe") = LblAmortizacion.Text.Trim.ToDecimal : DR("Orden") = 30 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtSubTotal2.Text.ToDecimal <> TxtSubTotal.Text.ToDecimal Then DR("ImpuestoLocal") = "SubTotal 2" : DR("Importe") = TxtSubTotal2.Text.ToDecimal : DR("Orden") = 40 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "IVA" : DR("Importe") = TxtIVA.Text.ToDecimal : DR("Orden") = 50 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtRetIVA.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.IVA" : DR("Importe") = TxtRetIVA.Text.ToDecimal : DR("Orden") = 60 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() If TxtRetISR.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Ret.ISR" : DR("Importe") = TxtRetISR.Text.ToDecimal : DR("Orden") = 70 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then Dim Orden As Integer = 80 If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble > 0 Then DR("ImpuestoLocal") = gvr.DataKey("ImpuestoLocal").ToString() : DR("Importe") = gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble : DR("Orden") = Orden : DR("Porcentaje") = gvr.DataKey("Porcentaje").ToString() : DR("TipoImpuesto") = gvr.DataKey("TipoImpuesto").ToString() : TmpDTImpuestosVista.Rows.Add(DR) DR = TmpDTImpuestosVista.NewRow() Orden = Orden + 1 End If End If Next If TxtTotal.Text.ToDecimal <> 0 Then DR("ImpuestoLocal") = "Total" : DR("Importe") = TxtTotal.Text.ToDecimal : DR("Orden") = 100 : DR("TipoImpuesto") = "0" : TmpDTImpuestosVista.Rows.Add(DR) ObjFacturaDevolucion.DtDeduccion = TmpDTImpuestosVista.FiltraParametros("", Orderby:="Orden ASC") CreaDTImpuestosIVAIEPS() For Each DrImpuestos33 As DataRow In TmpDT.Rows Dim DrIVA As DataRow = Nothing Dim DrIEPS As DataRow = Nothing Try DrIVA = TmpDTImpuestosIVAIEPS.Select("Impuesto = 'IVA'")(0) Catch ex As Exception DrIVA = Nothing End Try If DrIVA IsNot Nothing Then DrIVA("Importe") = DrIVA("Importe").ToString().ToDouble + DrImpuestos33("ImporteIVA").ToString().ToDouble TmpDTImpuestosIVAIEPS.AcceptChanges() Else Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() If DrImpuestos33("PorcentajeIVA").ToString().ToDouble >= 0 Then DR2("Impuesto") = "IVA" : DR2("tasa") = "16 %" : DR2("Importe") = DrImpuestos33("ImporteIVA").ToString().ToDouble : DR2("Orden") = "1" TmpDTImpuestosIVAIEPS.Rows.Add(DR2) TmpDTImpuestosIVAIEPS.AcceptChanges() End If End If Try DrIEPS = TmpDTImpuestosIVAIEPS.Select($"Impuesto = 'IEPS' AND tasa = '{DrImpuestos33("PorcentajeIEPS").ToString().ToDouble * 100} %'")(0) Catch ex As Exception DrIEPS = Nothing End Try If DrIEPS IsNot Nothing Then DrIEPS("Importe") = DrIEPS("Importe").ToString().ToDouble + DrImpuestos33("ImporteIEPS").ToString().ToDouble TmpDTImpuestosIVAIEPS.AcceptChanges() Else Dim DR2 As DataRow = TmpDTImpuestosIVAIEPS.NewRow() If DrImpuestos33("PorcentajeIEPS").ToString().ToDouble > 0 Then DR2("Impuesto") = "IEPS" : DR2("tasa") = String.Format("{0} {1}", DrImpuestos33("PorcentajeIEPS").ToString().ToDouble * 100, "%") : DR2("Importe") = DrImpuestos33("ImporteIEPS").ToString().ToDouble : DR2("Orden") = If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.03", "2", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.06", "3", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.07", "4", If(DrImpuestos33("PorcentajeIEPS").ToString() = "0.09", "5", "")))) TmpDTImpuestosIVAIEPS.Rows.Add(DR2) TmpDTImpuestosIVAIEPS.AcceptChanges() End If End If Next ObjFacturaDevolucion.DtDesgloseImpuestos = TmpDTImpuestosIVAIEPS.FiltraParametros("", Orderby:="Orden ASC") 'otros ObjFacturaDevolucion.Det_FechaOrdenCompra = TxtDet_FechaOrdenCompra.Text.Trim ObjFacturaDevolucion.Det_OrdenCompra = TxtDet_OrdenCompra.Text.Trim ObjFacturaDevolucion.CveNCaVincular = DdlNCFactura.SelectedValue.ToEntero() If ObjFacturaDevolucion.CveMoneda <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then ObjFacturaDevolucion.TipoCambio = 1 ObjFacturaDevolucion.CveMoneda = 1 End If 'DETALLES ObjFacturaDevolucion.DtDetalle = TmpDT ObjFacturaDevolucion.DtFirmas = DTmpF 'SUCURSAL ObjFacturaDevolucion.CveSubProyecto = DdlSubProyectoDatos.SelectedValue.ToEntero() ObjFacturaDevolucion.SetSubProyectoMatriz(Me) ObjFacturaDevolucion.SetSubProyecto(Me) ObjFacturaDevolucion.ClienteSucursal = New Modelos.SucursalModel If Me.ClienteSucursal IsNot Nothing Then ObjFacturaDevolucion.ClienteSucursal.RFC = Me.ClienteSucursal.RFC ObjFacturaDevolucion.ClienteSucursal.Nombre = Me.ClienteSucursal.Nombre End If ObjFacturaDevolucion.ClienteSucursal.NoExt = CliNoExt ObjFacturaDevolucion.ClienteSucursal.NoInt = CliNoInt ObjFacturaDevolucion.ClienteSucursal.Localidad = CliLocalidad ObjFacturaDevolucion.ClienteSucursal.Direccion = LblDireccion.Text ObjFacturaDevolucion.ClienteSucursal.Colonia = LblColonia.Text ObjFacturaDevolucion.ClienteSucursal.Municipio = LblCiudad.Text ObjFacturaDevolucion.ClienteSucursal.Estado = LblEstado.Text ObjFacturaDevolucion.ClienteSucursal.CP = LblCP.Text ObjFacturaDevolucion.ClienteSucursal.Pais = CliPais ObjFacturaDevolucion.ClienteSucursal.CorreoSucursal = CliCorreoCot.ToString() ObjFacturaDevolucion.ClienteSucursal.TelefonoSucursal = LblTelefono.Text ObjFacturaDevolucion.ClienteSucursal.Sucursal = If(DdlSucursalCliente.SelectedValue.ToEntero() > 0, DdlSucursalCliente.SelectedItem.Text, "") ObjFacturaDevolucion.ClienteSucursal.ImprimeNombreSucursal = ImprimeNombreSucursal.ToString() 'ENVIO DIRECCION ObjFacturaDevolucion.EnviarA = New Modelos.EnviarAModel If ChkDireccionEnvio.Checked Then If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then For Each Row As DataRow In TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows ObjFacturaDevolucion.EnviarA.CveDireccionEnvio = Row("CveDireccionEnvio").ToString().ToEntero() ObjFacturaDevolucion.EnviarA.EnvioDireccion = Row("EnvioDireccion").ToString() ObjFacturaDevolucion.EnviarA.EnvioColonia = Row("EnvioColonia").ToString() ObjFacturaDevolucion.EnviarA.EnvioCiudad = Row("EnvioCiudad").ToString() ObjFacturaDevolucion.EnviarA.EnvioEstado = Row("EnvioEstado").ToString() ObjFacturaDevolucion.EnviarA.EnvioCP = Row("EnvioCP").ToString() Next End If End If ObjFacturaDevolucion.Timbre = PreParaTimbre(ObjFacturaDevolucion) 'ASIGNAR RFC RECEPTOR If ObjFacturaDevolucion.Timbre IsNot Nothing Then If ObjFacturaDevolucion.Timbre.Receptor IsNot Nothing Then ObjFacturaDevolucion.RFCReceptor = ObjFacturaDevolucion.Timbre.Receptor.RFC End If End If End Sub Private Function PreParaTimbre(Obj As Modelos.Factura) As CFDITimbre Dim Timbre As New CFDITimbre Timbre.Comprobante.Version = "4.0" Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", "")) Timbre.Comprobante.Folio = Obj.Folio.ToString() Timbre.Comprobante.Serie = Obj.Serie Timbre.Comprobante.Fecha = Obj.FechaCP Timbre.Comprobante.CondicionesdePago = If(UsuarioActual.CveEmpresa.Contiene(15, 76, 198), "No Aplica", Obj.FormaPago) Timbre.Comprobante.MetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {Obj.CveMetodoPago}") ' Obj.ClaveMetodoPagoSAT Timbre.Comprobante.FormadePago = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {Obj.CveFormaPago}") 'Obj.ClaveFormaPagoSAT Timbre.Receptor.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {Obj.CveUsoCFDI}") Timbre.Comprobante.SubTotal = Obj.SubTotal Timbre.Comprobante.Descuentos = Obj.Descuento Timbre.Comprobante.Moneda = Obj.MonedaSAT Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString()) Timbre.Comprobante.Total = Obj.Total Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP If Timbre.Comprobante.LugarExpedicion = "" Then Dim aa As String = "no se guardo lugar de expedicion" aa.GuardaLog() End If Timbre.Comprobante.Confirmacion = "" If Obj.FacturarSucursal Then Timbre.Receptor.RFC = Obj.ClienteSucursal.RFC Timbre.Receptor.Nombre = Obj.ClienteSucursal.Nombre Timbre.Receptor.DomicilioFiscalReceptor = Obj.ClienteSucursal.CP Else Timbre.Receptor.RFC = Obj.Cliente.RFC Timbre.Receptor.Nombre = Obj.Cliente.Nombre Timbre.Receptor.DomicilioFiscalReceptor = Obj.Cliente.CP End If Timbre.Receptor.RegimenFiscalReceptor = Obj.Cliente.CodigoRegimenFiscal Timbre.Receptor.ResidenciaFiscal = "" Timbre.Receptor.NumeroRegistroTributario = "" Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", "")) If Timbre.Comprobante.TipoComprobante = "E" Then If Not EsNCDevolucionEfectivo OrElse HdnFolioFiscalNC.Value.ToString() <> "" Then If Obj.TipoDocto = "Egs" Then Timbre.CFDIRelacionados.TipoRelacion = "01" Timbre.CFDIRelacionados.TipoRelacionTexto = "Nota de Crédito aplicada a Ingreso" End If End If If Obj.TipoDocto = "Dev" Then Timbre.CFDIRelacionados.TipoRelacion = "03" Timbre.CFDIRelacionados.TipoRelacionTexto = "Devolución aplicada a Ingreso" End If Obj.CveTipoRelacion = DdlTiposRelacion.SelectedValue.ToEntero() If HdnFolioFiscalNC.Value <> "0" And HdnFolioFiscalNC.Value <> "" Then Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) 'SI LA NOTA DE CREDITO ES POR AMORTIZACION DE ANTICIPO , TAMBIEN DEBE TENER EL TIPO RELACION 07 If DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 2 AndAlso DdlTipoRelacionAnticipo.SelectedValue.ToEntero() = 7 Then Obj.CveTipoRelacion = 7 Timbre.CFDIRelacionados.TipoRelacion = "07" Timbre.CFDIRelacionados.TipoRelacionTexto = "CFDI por aplicación de anticipo" End If End If ' cuando es refacturacoin es cfdirelacionado, con relacion 04 If Timbre.Comprobante.TipoComprobante = "I" AndAlso NuevaFactura = 1 Then Timbre.CFDIRelacionados.TipoRelacion = "04" Timbre.CFDIRelacionados.TipoRelacionTexto = "Refacturación de Ingreso" Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) End If If HdnTipoDescuento.Value = "3" And DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() > 0 Then Timbre.CFDIRelacionados.TipoRelacion = "07" Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" Else 'SI LA FACTURA VIENE DE SER CANCELADA SISTEMA CUANDO SE REFACTURO NO HAY QUE RELACIONAR If (CveEstatusFacturaPadre > 0 AndAlso CveEstatusFacturaPadre <> 4) OrElse (DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0) OrElse HdnFolioFiscalNC.Value.ToString() <> "" Then If Obj.CveTipoRelacion > 0 Then Select Case Obj.CveTipoRelacion Case 1 Timbre.CFDIRelacionados.TipoRelacion = "01" Timbre.CFDIRelacionados.TipoRelacionTexto = "01-Nota de Crédito aplicada a Ingreso" Case 2 Timbre.CFDIRelacionados.TipoRelacion = "02" Timbre.CFDIRelacionados.TipoRelacionTexto = "02-Nota de débito de los documentos relacionados" Case 3 Timbre.CFDIRelacionados.TipoRelacion = "03" Timbre.CFDIRelacionados.TipoRelacionTexto = "03-Devolución aplicada a Ingreso" Case 4 Timbre.CFDIRelacionados.TipoRelacion = "04" Timbre.CFDIRelacionados.TipoRelacionTexto = "04-Sustitución de los CFDI Previos" Case 7 Timbre.CFDIRelacionados.TipoRelacion = "07" Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" Case 8 Timbre.CFDIRelacionados.TipoRelacion = "08" Timbre.CFDIRelacionados.TipoRelacionTexto = "08-Factura generada por pagos en parcialidades " Case 9 Timbre.CFDIRelacionados.TipoRelacion = "09" Timbre.CFDIRelacionados.TipoRelacionTexto = "09-Factura generada por pagos diferidos" End Select 'SI ES NOTA DE CREDITO O REFACTURACION If Obj.TipoDocto.Contiene("Egs", "Dev") OrElse (NuevaFactura = 1) Then If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then Timbre.CFDIRelacionados.UUID.Clear() For Each Dr As DataRow In DtVentasNC.Rows Timbre.CFDIRelacionados.UUID.Add(Dr("FolioFiscal").ToString()) Next Else If Not String.IsNullOrEmpty(HdnFolioFiscalNC.Value.Trim()) AndAlso HdnFolioFiscalNC.Value <> "0" Then Timbre.CFDIRelacionados.UUID.Clear() Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) End If End If 'ANTICIPO APLICADO A UNA FACTURA ElseIf Obj.TipoDocto = "Ing" AndAlso ListaAnticiposAplicados IsNot Nothing AndAlso ListaAnticiposAplicados.Count > 0 Then Timbre.CFDIRelacionados.UUID.Clear() For Each Ant As Modelos.MAnticipoRelacionado In ListaAnticiposAplicados Timbre.CFDIRelacionados.UUID.Add(Ant.FolioFiscal) Next Else If Not String.IsNullOrEmpty(HdnFolioFiscalNC.Value.Trim()) AndAlso HdnFolioFiscalNC.Value <> "0" Then Timbre.CFDIRelacionados.UUID.Clear() Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value) End If End If End If End If End If 'SI ES DEVOLUCION DIRECTA, SIN RELACION A UNA FACTURA If UsuarioActual.CveEmpresa.Contiene(1, 190) AndAlso DdlTipoComprobante.SelectedValue = "Dev" AndAlso CveVentaDevolucion <= 0 AndAlso Timbre.CFDIRelacionados.UUID.Count = 0 Then Timbre.CFDIRelacionados.TipoRelacion = "" Timbre.CFDIRelacionados.TipoRelacionTexto = "" End If 'DEVOLUCIONES DE OTRA VENTA, APLICADAS EN UNA NUEVA If UsuarioActual.CveEmpresa.Contiene(1, 189) AndAlso Obj.TipoDocto = "Ing" AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then If ListaDevolucionesAplicadas IsNot Nothing AndAlso ListaDevolucionesAplicadas.Count > 0 Then Timbre.CFDIRelacionados.UUID.Clear() For Each Dev As Modelos.MAnticipoRelacionado In ListaDevolucionesAplicadas Timbre.CFDIRelacionados.UUID.Add(Dev.FolioFiscal) Next 'TEMPORAL- DEBE SER TIPO RELACION "01 - Nota de crédito de los documentos relacionados" Dim CveTipoRelacion As Integer = 1 Obj.CveTipoRelacion = CveTipoRelacion Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {CveTipoRelacion}") Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString() Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString() End If End If 'SI LAS FACTURAS SE RELACIONARAN MANUALMENTE SE AGREGAN If Me.AplicaRelacionManual AndAlso DdlTipoRelacionARelacionar.SelectedValue.ToEntero() > 0 Then Dim CveTipoRelacion As Integer = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() Obj.CveTipoRelacion = DdlTipoRelacionARelacionar.SelectedValue.ToEntero() Dim RowTipoRelacion As DataRow = GlobalDTVtaTiposRelacion().FiltroPrimero($"CveTipoRelacion = {CveTipoRelacion}") Timbre.CFDIRelacionados.TipoRelacion = RowTipoRelacion("SATClaveTipoRelacion").ToString() Timbre.CFDIRelacionados.TipoRelacionTexto = RowTipoRelacion("SATTipoRelacion").ToString() Timbre.CFDIRelacionados.UUID.Clear() For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows If GvRow.RowType = DataControlRowType.DataRow Then Timbre.CFDIRelacionados.UUID.Add(GvRow.DataKey("FolioFiscal").Replace("test", "")) End If Next End If Dim totSubTotal As Decimal = Obj.SubTotal Dim totIVA As Decimal = Obj.IVA Dim totRetIVA As Decimal = Obj.RetIVA Dim totRetISR As Decimal = Obj.RetISR Dim i As Integer = 1 Dim tPS, tCodigo As String 'detalles For Each drr As DataRow In Obj.DtDetalle.Rows If drr("PS").ToString.Length = 1 Then tPS = drr("Obs").ToString() Else If drr("PS").ToString.Length = 0 Then tPS = "" Else tPS = String.Format("{0} {1}", drr("PS"), drr("Obs")) End If End If tPS = tPS.Replace("|", " ") tCodigo = drr("Noidentificacion").ToString() If ClienteUsaProductoAlterno AndAlso drr("CodigoAlterno").ToString <> "" Then tPS = drr("PSAlterno").ToString() tCodigo = drr("CodigoAlterno").ToString() End If If tPS.Length >= 1000 Then Dim tPSRecortado As String = tPS.Remove(999, tPS.Length - 999) tPS = tPSRecortado End If 'condicionante, especial If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" ' les comentan que no debe de ir la etiqueta de "unidad" en el producto Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString().ToDecimal, .Descripcion = tPS, .ValorUnitario = drr("PU").ToString().ToDecimal, .Importe = drr("TotalImporte").ToString().ToDecimal, .Descuento = drr("Descuento").ToString().ToDecimal.RoundSQL(2), .Unidad = drr("UM").ToString(), .ClaveUnidad = drr("SATClaveUM").ToString(), .ClaveProdServ = drr("SATClaveProdServ").ToString(), .Noidentificacion = tCodigo, .CuentaPredial = drr("CuentaPredial").ToString(), .ImporteGravaIVAAdicional = drr("ImporteIEPS").ToString().ToDecimal, .ObjetoImpuesto = drr("CodigoObjetoImpuesto").ToString(), .NumeroPedimento = drr("NumeroPedimento").ToString} 'verifica suma subtotales If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal.RoundSQL(2) <> concepto.Importe.RoundSQL(2) AndAlso Math.Abs(totSubTotal.RoundSQL(2) - concepto.Importe.RoundSQL(2)) <= 0.01 Then 'proceso de ajusta de decimales concepto.Importe = totSubTotal 'concepto.ValorUnitario = totSubTotal / concepto.Cantidad End If totSubTotal = totSubTotal - concepto.Importe 'siempre estaremos agregando el iva, auqnue sea en importe cero o tasa cero, para que se emita la factura ' If drr("ImporteIVA").ToString().ToDouble > 0 Then 'si es ingreso amortizado por la totalidad, y arroja el valor total de cero, no debe de impuestos, y si la BASE de calculo es mayor a cero ' si es objimp = 01, significa que no lleva desglose de impuesto, está exento If concepto.ObjetoImpuesto <> "01" AndAlso Timbre.Comprobante.Total > 0 AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional > 0) Then concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(6), .TasaOCuota = drr("PorcentajeIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString().ToDecimal}) End If If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteIEPS").ToString().ToDouble > 0 Then concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeIEPS").ToString().ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString().ToDecimal}) End If If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetIVA").ToString().ToDouble > 0 Then 'si hay retenciones concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString().ToDecimal}) End If If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetISR").ToString().ToDouble > 0 Then 'retención de ISR concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetISR").ToString().ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString().ToDecimal}) End If 'si el codigo objeto impuesto es 02 y no tiene desglose de impuestos por el descuento, debe asignar el valor 04 - Si objeto de impuesto y no causa impuesto If concepto.Impuestos.Count = 0 AndAlso concepto.ObjetoImpuesto = "02" AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(2) = 0.00D Then concepto.ObjetoImpuesto = "04" 'se ajusta a un centavo, para que se pueda emitir con un centavo. If UsuarioActual.CveEmpresa = 140 Then concepto.ObjetoImpuesto = "02" concepto.Descuento = concepto.Descuento - 0.01D Obj.SubTotal = Obj.SubTotal + 0.01D Obj.Total = Obj.Total + 0.01D End If End If Timbre.Conceptos.Add(concepto) i += 1 Next 'RMF. faltan impuestos locales If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.FiltraParametros("TipoImpuesto IN (1,3) ").Rows.Count > 0 Then For Each DrImpuestosLocales As DataRow In TmpDTImpuestos.FiltraParametros("TipoImpuesto IN (1,3) ").Rows If DrImpuestosLocales("Importe").ToString().ToDecimal > 0 Then Dim ret As New CFDIRetencionesLocales With { .TasaRetencion = DrImpuestosLocales("Porcentaje").ToString().ToDecimal, .ImpuestoLocalRetenido = DrImpuestosLocales("ImpuestoLocal").ToString(), .Importe = DrImpuestosLocales("Importe").ToString().ToDecimal(If(Obj.ConvertirPesos, Obj.TipoCambio, 1)).RoundSQL(2) } Timbre.RetencionesLocales.Add(ret) End If Next End If If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.FiltraParametros("TipoImpuesto = 5").Rows.Count > 0 Then For Each DrImpuestosLocales As DataRow In TmpDTImpuestos.FiltraParametros("TipoImpuesto = 5").Rows If DrImpuestosLocales("Importe").ToString().ToDecimal > 0 Then Dim ret As New CFDITrasladosLocales With {.TasaTraslado = DrImpuestosLocales("Porcentaje").ToString().ToDecimal, .ImpuestoLocalTraslado = DrImpuestosLocales("ImpuestoLocal").ToString(), .Importe = DrImpuestosLocales("Importe").ToString().ToDecimal(If(Obj.ConvertirPesos, Obj.TipoCambio, 1))} Timbre.TrasladosLocales.Add(ret) End If Next End If Dim AplicaComercioExteriorSubProyecto As Boolean = True If ChkEmitirComercioExterior.Checked Then Timbre.Complementos.ComercioExterior.AplicaComercioExteriorSubProyecto = AplicaComercioExteriorSubProyecto 'DATOS GENERALES Timbre.Comprobante.Exportacion = "02" Timbre.Complementos.ComercioExterior.TipoOperacion = GlobalDTTipoOperacion().FiltraParametros($"CveTipoOperacion={CveTipoOperacion}")(0)("ClaveSATTipoOperacion").ToString() Timbre.Complementos.ComercioExterior.ClavedePedimento = GlobalDTClavePedimento().FiltraParametros($"CvePedimento={CvePedimento}")(0)("ClaveSATPedimento").ToString() Timbre.Complementos.ComercioExterior.CertificadoOrigen = "0" Timbre.Complementos.ComercioExterior.Incoterm = GlobalDTIncoterm.FiltroPrimeroValor("ClaveSATIncoterm", $"CveIncoterm={DdlIncoterm.SelectedValue}") Timbre.Complementos.ComercioExterior.Subdivision = "0" Timbre.Complementos.ComercioExterior.TipoCambioUSD = If(Obj.CveMoneda = 1, 1, Obj.TipoCambio) Timbre.Complementos.ComercioExterior.MotivoTraslado = "" 'If Timbre.Comprobante.TipoComprobante = "T" Then ' Timbre.Complementos.ComercioExterior.MotivoTraslado = GlobalDTSATMotivoTraslado.FiltroPrimeroValor("ClaveSATMotivoTraslado", $"CveMotivoTraslado={DdlSATMotivoTraslado.SelectedValue}") 'Else ' Timbre.Complementos.ComercioExterior.MotivoTraslado = "" 'End If 'EMISOR Dim Dr As DataRow Dr = Nothing If GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero()).Rows.Count > 0 Then Dr = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero())(0) End If Timbre.Complementos.ComercioExterior.Emisor.CURP = UsuarioActual.Empresa.CURP Timbre.Complementos.ComercioExterior.Emisor.Calle = Dr("Calle").ToString() Timbre.Complementos.ComercioExterior.Emisor.NumeroExterior = Dr("NoExt").ToString() Timbre.Complementos.ComercioExterior.Emisor.NumeroInterior = Dr("NoInt").ToString() Timbre.Complementos.ComercioExterior.Emisor.Colonia = Dr("ClaveSATColonia").ToString() Timbre.Complementos.ComercioExterior.Emisor.Localidad = "" Timbre.Complementos.ComercioExterior.Emisor.Municipio = Dr("ClaveSATMunicipio").ToString() Timbre.Complementos.ComercioExterior.Emisor.Estado = Dr("ClaveSATEstado").ToString() Timbre.Complementos.ComercioExterior.Emisor.Pais = Dr("ClaveSATPais").ToString() Timbre.Complementos.ComercioExterior.Emisor.CP = Dr("ClaveSATCP").ToString() Dim ComExtPais, ComExtEstado, ComExtMunicipio, ComExtColonia, ComExtCalle, ComExtNumero, ComExtCP As String ComExtColonia = "" : ComExtMunicipio = "" ComExtPais = GlobalDTGralPaises.FiltroPrimeroValor("ClaveSATPais", $"CvePais={DdlComExtPais.SelectedValue}") ComExtCalle = TxtComExtCalle.Text.Trim ComExtNumero = TxtComExtNumero.Text.Trim ComExtCP = TxtComExtCP.Text.Trim If ComExtPais = "MEX" Then ComExtEstado = GlobalDTGralEstados(ComExtPais).FiltroPrimeroValor("ClaveSATEstado", $"CveEstado={DdlComExtEstado.SelectedValue}") ComExtMunicipio = GlobalDTGralMunicipios(ComExtEstado).FiltroPrimeroValor("ClaveSATMunicipio", $"CveMunicipio={DdlComExtMunicipio.SelectedValue}") ComExtColonia = GlobalDTGralColonias("-1", "-1", "-1", CveColonia:=DdlComExtColonia.SelectedValue.ToEntero).FiltroPrimeroValor("ClaveSATColonia", "") Else If ComExtPais.Contiene("USA", "CAN") Then ComExtEstado = GlobalDTGralEstados(ComExtPais).FiltroPrimeroValor("ClaveSATEstado", $"CveEstado={DdlComExtEstado.SelectedValue}") Else ComExtEstado = TxtComExtEstado.Text.Trim End If ComExtMunicipio = TxtComExtMunicipio.Text.Trim ComExtColonia = TxtComExtColonia.Text.Trim End If 'RECEPTOR Timbre.Complementos.ComercioExterior.Receptor.NumRegIdTrib = If(Timbre.Comprobante.Version = "4.0", Obj.Cliente.NumRegIdTrib, "") ' EN LA VERSION 3.3 NO DEBE DE REGISTRARSE ESTE VALOR Timbre.Complementos.ComercioExterior.Receptor.Calle = ComExtCalle Timbre.Complementos.ComercioExterior.Receptor.NumeroExterior = ComExtNumero Timbre.Complementos.ComercioExterior.Receptor.NumeroInterior = "" Timbre.Complementos.ComercioExterior.Receptor.Colonia = ComExtColonia Timbre.Complementos.ComercioExterior.Receptor.Localidad = "" Timbre.Complementos.ComercioExterior.Receptor.Referencia = Obj.Cliente.ReferenciaFiscal Timbre.Complementos.ComercioExterior.Receptor.Municipio = ComExtMunicipio Timbre.Complementos.ComercioExterior.Receptor.CP = ComExtCP Timbre.Complementos.ComercioExterior.Receptor.Estado = ComExtEstado Timbre.Complementos.ComercioExterior.Receptor.Pais = ComExtPais Timbre.Receptor.ResidenciaFiscal = Obj.Cliente.ClaveSATPais Timbre.Receptor.NumeroRegistroTributario = Obj.Cliente.NumRegIdTrib 'DESTINATARIO If ChkAplicaDestinatario.Checked AndAlso DdlDirecionDestinatario.SelectedValue.ToEntero() > 0 Then Dim RowDireccion As DataRow = Nothing Dim ObjClientes As New ClsClientes If ObjClientes.DireccionEnvioGet(DdlDirecionDestinatario.SelectedValue.ToEntero(), CveCliente, -1) Then RowDireccion = ObjClientes.DtResultados.Rows(0) End If ObjClientes.Dispose() If RowDireccion IsNot Nothing Then Timbre.Complementos.ComercioExterior.Destinatario.Nombre = RowDireccion("EnvioContacto").ToString() Timbre.Complementos.ComercioExterior.Destinatario.Calle = RowDireccion("EnvioDireccion").ToString() Timbre.Complementos.ComercioExterior.Destinatario.NumeroExterior = RowDireccion("EnvioNoExt").ToString() Timbre.Complementos.ComercioExterior.Destinatario.NumeroInterior = "" Timbre.Complementos.ComercioExterior.Destinatario.Colonia = "" Timbre.Complementos.ComercioExterior.Destinatario.Localidad = RowDireccion("NombreLocalidad").ToString() Timbre.Complementos.ComercioExterior.Destinatario.Referencia = "" Timbre.Complementos.ComercioExterior.Destinatario.Municipio = RowDireccion("NombreMunicipio").ToString() Timbre.Complementos.ComercioExterior.Destinatario.CP = RowDireccion("EnvioCP").ToString() Timbre.Complementos.ComercioExterior.Destinatario.Estado = RowDireccion("NombreEstado").ToString() Timbre.Complementos.ComercioExterior.Destinatario.Pais = RowDireccion("ClaveSATPais").ToString() Timbre.Complementos.ComercioExterior.Destinatario.NumRegIdTrib = RowDireccion("COM_NumRegIdTrib").ToString() End If Else Timbre.Complementos.ComercioExterior.Destinatario = Nothing End If 'MERCANCIAS For Each Gvr As GridViewRow In GvComercioExterior.Rows Dim mercancia As New CFDIComercioExterior11Mercancias With {.CantidadAduana = Gvr.FCTextBox("TxtCantidad").Text.ToDecimal, .FraccionArancelaria = Gvr.DataKey("ClaveSATFraccionArancelaria").ToString(), .UnidadAduana = Gvr.DataKey("ClaveSATUnidadAduana").ToString(), .ValorDolares = Math.Round(Gvr.FCTextBox("TxtCantidad").Text.ToDecimal * Gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal, 2), .ValorUnitarioAduana = Gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal, .NoIdentificacion = Gvr.DataKey("Codigo")} If Gvr.FCTextBox("TxtMarca").Text <> "" Then mercancia.DescripcionesEspecificas.Marca = Gvr.FCTextBox("TxtMarca").Text End If Timbre.Complementos.ComercioExterior.Mercancias.Add(mercancia) i += 1 Next Else Timbre.Complementos.ComercioExterior.AplicaComercioExteriorSubProyecto = False End If If Obj IsNot Nothing Then If Obj.CveVenta > 0 AndAlso Obj.EsFacturaGlobal Then Dim SATMes As String = ClsPaginas.GlobalDTGralSATMeses().FiltroPrimeroValor("Mes", $"CveSATMes = {Obj.CveSATMes}") Dim SATPerioricidad = ClsPaginas.GlobalDTGralSATPeriodicidad().FiltroPrimeroValor("Periodicidad", $"CveSATPeriodicidad = {Obj.CveSATPeriodicidad}") Timbre.InformacionGlobal = New CFDIInformacionGlobal() With { .Año = Obj.SATAnio.ToString(), .Meses = SATMes, .Perioricidad = SATPerioricidad } End If End If Return Timbre End Function Private Sub PrepararTimbrado(ByRef FM As Modelos.FemsaFactura, ByRef TmpDT7Eleven As DataTable, ByRef TmpDTComplementosTimbrado As DataTable) FM.AplicaFEMSA = AplicaFEMSA FM.FEMSA_NumSociedad = TxtFEMSA_NumSociedad.Text.Trim FM.FEMSA_NumProveedor = TxtFEMSA_NumProveedor.Text.Trim FM.FEMSA_Mail = TxtFEMSA_Mail.Text.Trim FM.FEMSA_Version = TxtFEMSA_Version.Text.ToEntero() FM.FEMSA_NumPedido = TxtFEMSA_NumPedido.Text.Trim.ToLong FM.FEMSA_NumEntrada = TxtFEMSA_NumEntrada.Text.Trim FM.FEMSA_NumRemision = TxtFEMSA_NumRemision.Text.Trim FM.FEMSA_NumSocio = TxtFEMSA_NumSocio.Text.Trim FM.FEMSA_CentroCosto = TxtFEMSA_CentroCosto.Text.Trim FM.FEMSA_IPeriodoLiquidacion = TxtFEMSA_IPeriodoLiquidacion.Text.Trim FM.FEMSA_FPeriodoLiquidacion = TxtFEMSA_FPeriodoLiquidacion.Text.Trim FM.FEMSA_CodRetencion1 = TxtFEMSA_CodRetencion1.Text.Trim FM.FEMSA_CodRetencion2 = TxtFEMSA_CodRetencion2.Text.Trim TmpDT7Eleven.Columns.Add("sevenElevenNumProveedor") TmpDT7Eleven.Columns.Add("sevenElevenFolio") TmpDT7Eleven.Columns.Add("sevenElevenTienda") TmpDT7Eleven.Columns.Add("sevenElevenFecha") Dim Row As DataRow = TmpDT7Eleven.NewRow Row("sevenElevenNumProveedor") = Txt7ElevenNumProveedor.Text.Trim() Row("sevenElevenFolio") = Txt7ElevenFolio.Text.Trim() Row("sevenElevenTienda") = Txt7ElevenTienda.Text.Trim() Row("sevenElevenFecha") = Txt7ElevenFecha.Text.Trim() TmpDT7Eleven.Rows.Add(Row) TmpDTComplementosTimbrado.Columns.Add("CveComplemento") TmpDTComplementosTimbrado.Columns.Add("IdContabilidad") TmpDTComplementosTimbrado.Columns.Add("TipoProceso") TmpDTComplementosTimbrado.Columns.Add("TipoAmbito") TmpDTComplementosTimbrado.Columns.Add("Entidad") Dim Row2 As DataRow = TmpDTComplementosTimbrado.NewRow If RblComplementos.SelectedValue.ToEntero() > 0 Then Select Case RblComplementos.SelectedValue.ToEntero() Case 5 Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() Row2("TipoProceso") = "Ordinario" Row2("TipoAmbito") = "Directivo Estatal" Row2("Entidad") = DdlINEEntidad.SelectedValue Case 6 Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() Row2("TipoProceso") = "Ordinario" Row2("TipoAmbito") = "Ejecutivo Estatal" Row2("Entidad") = DdlINEEntidad.SelectedValue Case 7 Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() Row2("TipoProceso") = "Ordinario" Row2("TipoAmbito") = "Ejecutivo Nacional" Row2("Entidad") = "" Case 8 Row2("CveComplemento") = RblComplementos.SelectedValue.ToEntero() Row2("IdContabilidad") = TxtIdConta.Text.ToEntero() Row2("TipoProceso") = DdlTipoCampaña.SelectedValue Row2("TipoAmbito") = DdlAmbitoComplemento.SelectedValue Row2("Entidad") = DdlINEEntidad.SelectedValue End Select Else Row2("CveComplemento") = "" Row2("IdContabilidad") = "" Row2("TipoProceso") = "" Row2("TipoAmbito") = "" Row2("Entidad") = "" End If TmpDTComplementosTimbrado.Rows.Add(Row2) End Sub #End Region #Region "Ordenes de Compra Sin Facurar" Private Sub CargaOCs() Dim ObjVentas As New ClsVentas If ObjVentas.GetOCSinFacturar(TxtFechaIOC.Text, TxtFechaFOC.Text, CveCliente, 1) Then If DdlContratosOC.SelectedValue.ToEntero() > 0 Then DTOrdenesCompra = ObjVentas.DtResultados.FiltraParametros($"CveContratoVinculado = '{DdlContratosOC.SelectedValue}'") Else DTOrdenesCompra = ObjVentas.DtResultados End If GVOC.DataSource = DTOrdenesCompra End If If DTOrdenesCompra IsNot Nothing AndAlso Not DTOrdenesCompra.Columns.Contains("Aplicado") Then DTOrdenesCompra.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If ObjVentas.Dispose() GVOC.DataBind() UPOCFactura.Update() End Sub Private Sub CargaOCsxProducto() Dim ObjVentas As New ClsVentas If ObjVentas.GetOCSinFacturar(TxtFechaIOC.Text, TxtFechaFOC.Text, CveCliente, 2) Then If DdlContratosOC.SelectedValue.ToEntero() > 0 Then DTOrdenesCompra = ObjVentas.DtResultados.FiltraParametros($"Cantidad > 0 AND CveContratoVinculado = '{DdlContratosOC.SelectedValue}'") Else DTOrdenesCompra = ObjVentas.DtResultados.FiltraParametros($"Cantidad > 0") End If GvOCPS.DataSource = DTOrdenesCompra End If If Not DTOrdenesCompra.Columns.Contains("Aplicado") Then DTOrdenesCompra.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If ObjVentas.Dispose() GvOCPS.DataBind() UPOCFactura.Update() End Sub Private Sub ChkOCProductos_CheckedChanged(sender As Object, e As EventArgs) Handles ChkPSOC.CheckedChanged CargaOCSinFacturar() End Sub Private Sub VerificaOrdenesCompra(ByRef dt As DataTable) If ChkPSOC.Checked Then For Each Gvr As GridViewRow In GvOCPS.Rows If Gvr.RowType = DataControlRowType.DataRow Then If Gvr.FCCheckBox("Chk").Checked Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveOrdenCompraDetalle As Integer = Gvr.DataKey("CveOrdenCompraDetalle").ToEntero() Dim Drs As DataRow() = dt.Select($"CveOrdenCompraDetalle = {CveOrdenCompraDetalle}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If End If Next Else For Each Gvr As GridViewRow In GVOC.Rows If Gvr.RowType = DataControlRowType.DataRow Then If Gvr.FCCheckBox("Chk").Checked Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveOrdenCompra As Integer = Gvr.DataKey("CveOrdenCompra").ToEntero() Dim Drs As DataRow() = dt.Select($"CveOrdenCompra = {CveOrdenCompra}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If End If Next End If End Sub Protected Sub BtnCargarOC_Click(sender As Object, e As EventArgs) Handles BtnCargarOC.Click If GVOC.Rows.Count > 0 Or GvOCPS.Rows.Count > 0 Then 'Checa las facturas selecionadas VerificaOrdenesCompra(DTOrdenesCompra) RegistroxOC = False Dim dtSeleccionadas As DataTable = DTOrdenesCompra.FiltraParametros("Aplicado = True") If GvPS.Rows.Count > 0 Then TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text End If If dtSeleccionadas.Rows.Count > 0 Then If TieneContrato Then ContratoDetalles.Visible = True DivEstimaciones.Visible = False DdlContratosModal.DataSource = DtContratos DdlContratosModal.DataBind() DdlContratosModal.Items.Insert(0, New ListItem("Seleccione", "0")) DdlContratosModal.SelectedValue = DdlContratosOC.SelectedValue DdlContrato.SelectedValue = DdlContratosOC.SelectedValue UPEstimaciones.Update() End If IsTotalxConcepto = True Dim ObjClientes As New ClsClientes Dim sb As New StringBuilder If ChkPSOC.Checked Then For Each row As DataRow In dtSeleccionadas.Rows sb.Append($"{row("CveOrdenCompraDetalle").ToString()},") Next Else For Each row As DataRow In dtSeleccionadas.Rows sb.Append($"{row("CveOrdenCompra").ToString()},") Next End If sb.Remove(sb.Length - 1, 1) If ObjClientes.GetVentasOCTotales(CveCliente, sb.ToString(), If(ChkPSOC.Checked, 2, 1)) Then DTOrdenesCompraPS = ObjClientes.DtResultados RegistroxOC = True Dim tCantidad As Decimal = 0 For Each Dr As DataRow In DTOrdenesCompraPS.Select() tCantidad = If(ChkPSOC.Checked, GvOCPS.Rows(IndiceGVDataKey(GvOCPS, "CveOrdenCompraDetalle", $"{Dr("CveOrdenCompraDetalle")}")).FCTextBox("TxtCantidadOC").Text, Dr("Cantidad")).ToString().ToDecimal AgregarProductoServicio(tCantidad, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), Dr("CvePS").ToString().ToEntero(), Dr("PS").ToString(), Dr("Obs").ToString(), Dr("PUCon").ToString().ToDecimal, 0, Dr("CveProyecto").ToString().ToEntero(), Dr("Proyecto").ToString(), Dr("CveSubProyecto").ToString().ToEntero(), Dr("SubProyecto").ToString(), CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero(), CveOrdenCompraDetalle:=Dr("CveOrdenCompraDetalle").ToString().ToEntero(), EntregaDirecta:=1) Next CveContrato = DTOrdenesCompraPS.FiltroPrimeroValor("CveContrato").ToString().ToEntero() If CveContrato > 0 Then ContratoOC = True CalculaTotalesVenta() GvPS.DataSource = TmpDT GvPS.DataBind() End If ObjClientes.Dispose() BtnEmitirImprimir.Text = "Facturar" 'REGISTRAR UNA ENTREGA DIRECTA If TmpDT.COUNT("EntregaDirecta", "EntregaDirecta = 1") > 0 Then trPaqueteriaOpciones.Visible = False trPaqueteriOpcionesLabel.Visible = False trPaqueteriaDirectaLabel.Visible = True DdlTipoComprobante.Items.Clear() DdlTipoComprobante.Items.Insert(0, New ListItem("Ingresos", "Ing")) DdlTipoComprobante.Items.Insert(1, New ListItem("Remisión", "Rem")) DdlTipoComprobante.Enabled = True Else DdlTipoComprobante.SelectedValue = "Ing" DdlTipoComprobante.Enabled = False End If Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() UPObservaciones.Update() 'Else ' If TieneContrato Then ' GvContratoDetalles.DataSource = Nothing ' GvContratoDetalles.DataBind() ' UPEstimaciones.Update() ' End If End If End If ChkPSOC.Checked = False UPOCFactura.Update() UpFacturar.Update() UpPS.Update() UpParametros.Update() RegistraScript("$('#DivOrdenesCompra').modal('hide');") End Sub Private Sub DdlContratosOC_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlContratosOC.SelectedIndexChanged CargaOCSinFacturar() End Sub Private Sub CargaOCSinFacturar() If ChkPSOC.Checked Then GvOCPS.Visible = True GVOC.Visible = False DivFiltroOCPS.Visible = True GVOC.DataSource = Nothing GVOC.DataBind() CargaOCsxProducto() Else GvOCPS.Visible = False GVOC.Visible = True DivFiltroOCPS.Visible = False GvOCPS.DataSource = Nothing GvOCPS.DataBind() CargaOCs() End If End Sub Private Sub LnkOCs_Click(sender As Object, e As EventArgs) Handles LnkOCs.Click Dim ObjContratos As New ClsContratos If Not TieneContrato Then If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, CveCliente, -1, 1) Then If ObjContratos.DtResultados.FiltraParametros("Estatus = True").Rows.Count > 0 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ped") Or DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev")) Then DtContratos = ObjContratos.DtResultados.FiltraParametros($"Estatus = True AND FechaFinal >= '{NowADS().ToShortDateString}' AND FechaInicial <= '{NowADS().ToShortDateString}'") DdlContratosOC.DataSource = DtContratos DdlContratosOC.DataBind() If Not TieneContrato Then DdlContratosOC.Items.Insert(0, New ListItem("Seleccione", "0")) End If End If End If GvContratoDetalles.DataSource = Nothing GvContratoDetalles.DataBind() UpContratos.Update() DivEstimaciones.Visible = True ContratoDetalles.Visible = False UPEstimaciones.Update() Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() End If ObjContratos.Dispose() ChkPSOC.Checked = False UPOCFactura.Update() CargaOCSinFacturar() RegistraScript("$('#DivOrdenesCompra').modal('show');") End Sub Private Sub BtnConsultarOC_Click(sender As Object, e As EventArgs) Handles BtnConsultarOC.Click CargaOCSinFacturar() End Sub #End Region #Region " GUARDAR - VENTA, PREPOLIZAS, INV, ESTIMACIONES, AC, NOTA DE CRÉDITO " Private Sub GuardarVenta(ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjAcum As ClsAcumuladores, ByRef ObjContr As ClsContratos, factura As Modelos.Factura, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, 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 EsNCAmortizacion As Boolean = False, Optional NCDescuento As Boolean = False, Optional ListaNCDescuento As List(Of Modelos.Factura) = Nothing, Optional CveAnticipoPadre As Integer = -1) Dim Msgok As New StringBuilder Dim CveAlmacenTraspasoOrigen As Integer = -1 Dim CveAlmacenTraspasoDestino As Integer = -1 Dim EsDevolucionVenta As Integer = -1 Dim EsInterno As Integer = -1 If DdlAlmacenAsignado.Visible Or RequiereAlmacenDestino Then CveAlmacenTraspasoDestino = DdlAlmacenAsignado.SelectedValue.ToEntero() End If If DdlAlmacenOrigen.Visible Or RequiereAlmacenOrigen Then CveAlmacenTraspasoOrigen = DdlAlmacenOrigen.SelectedValue.ToEntero() End If If TrTipoPedido.Visible Then EsInterno = DdlTipoPedido.SelectedValue.ToEntero() End If 'Si es devolucion revertimos los almacenes If CvePedido > 0 And TipoContrato = 2 Then EsDevolucionVenta = 1 CveAlmacenTraspasoOrigen = DdlAlmacenAsignado.SelectedValue.ToEntero() CveAlmacenTraspasoDestino = DdlAlmacenOrigen.SelectedValue.ToEntero() End If 'VALIDA ENTREGA POR ADELANTADO 'INCRUSTAMOS ALMACEN ENTREGA POR ADELANTADO CUANDO SEA REMISION Y NO TRAIGA ASIGNADO POR EL USUARIO If CveAlmacenTraspasoDestino <= 0 And factura.TipoDocto = "Rem" Then CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() End If 'SI LA SUCURSAL NO TIENE ENTREGA POR ADELANTADO If CveAlmacenTraspasoDestino <= 0 And factura.TipoDocto = "Rem" Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado de la sucursal.") End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then If factura.TipoDocto = "RNC" And CveVentaDevolucion > 0 Then CveAlmacenTraspasoOrigen = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 1 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() End If End If 'ASIGNA EL VALOR DEL ALMACEN AL PEDIDO If factura.TipoDocto = "Ped" And EsVentaMedica = False Then If CveAlmacenTraspasoDestino <= 0 Then CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() End If 'SI LA SUCURSAL NO TIENE ENTREGA POR ADELANTADO If CveAlmacenTraspasoDestino <= 0 Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado de la sucursal.") End If End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso EsVentaMedica AndAlso (factura.TipoDocto.Contiene("Ped", "Rem") OrElse (factura.TipoDocto.Contiene("Ing") AndAlso RBLTipoVenta.SelectedValue = "4")) Then Dim CveClientesucursatTemp As Integer = DdlClienteSucursalSucursal() If CveClientesucursatTemp > 0 Then Dim drr As DataRow = GlobalDTClientesSucursales(UsuarioActual.CveEmpresa, CveCliente).FiltroPrimero($" CveClienteSucursal = {DdlSucursalCliente.SelectedValue.ToEntero}") If drr IsNot Nothing Then If RBLTipoVenta.SelectedValue.Contiene("3") Then 'cuando es A-vista CveAlmacenTraspasoDestino = drr("CveAlmacenAlterno").ToString.ToEntero ElseIf RBLTipoVenta.SelectedValue.Contiene("4") Then 'cuando es Consignación CveAlmacenTraspasoDestino = drr("CveAlmacenConsignacion").ToString.ToEntero Else CveAlmacenTraspasoDestino = drr("CveAlmacenAsignado").ToString.ToEntero '' cuando Fuera de Línea End If End If Else Dim drr As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa, CveCliente:=CveCliente).FiltroPrimero("") If drr IsNot Nothing Then If RBLTipoVenta.SelectedValue.Contiene("3") Then 'cuando es A-vista CveAlmacenTraspasoDestino = drr("CveAlmacenAlterno").ToString.ToEntero ElseIf RBLTipoVenta.SelectedValue.Contiene("4") Then 'cuando es Consignación CveAlmacenTraspasoDestino = drr("CveAlmacenConsignacion").ToString.ToEntero Else CveAlmacenTraspasoDestino = drr("CveAlmacenAsignado").ToString.ToEntero '' cuando Fuera de Línea End If End If End If If Not CveAlmacenTraspasoDestino > 0 Then ' para consignación es salida directa CveAlmacenTraspasoDestino = CveAlmacenAsignado End If If RBLTipoVenta.SelectedValue = "2" Then If DdlTipoComprobante.SelectedValue = "Rem" Then 'Not ChkRequiereTecnico.Checked, antes CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 10 AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() ElseIf DdlTipoComprobante.SelectedValue = "Ped" Then CveAlmacenTraspasoDestino = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveAlmacen", $"CveTipoAlmacen = 4 AND Almacen like '%Pago%' AND CveSubProyecto = {DdlSubProyectoDatos.SelectedValue}").ToString().ToEntero() End If If CveAlmacenTraspasoDestino <= 0 Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de entrega por adelantado.") End If Else If CveAlmacenTraspasoDestino <= 0 Then ErrorList.Add("Ocurrió un error al seleccionar el almacen de resguardo del cliente.") End If End If End If Dim TotalImpuestoLocal As Decimal = 0 If GvImpuestosLocales2.Rows.Count > 0 Then For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal <> 0 Then If gvr.DataKey("TipoImpuesto") = "5" Then ' cuando es traslado local TotalImpuestoLocal -= gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal Else ' cuando es retención TotalImpuestoLocal += gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal End If End If End If Next End If 'SI LA FACTURA ESTA PAGADA DEBE MARCAR LA DEVOLUCION POR SI SE QUIERE AMORTIZAR If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso factura.TipoDocto = "Dev" Then factura.Alfa3 = "DEV" factura.DevolucionImportePagado = ObjFacturaNC.Total / ObjFacturaNC.PagadoBancos 'falta tomar el dato End If Dim tCveTipoPoliza As Integer = -1 If UsuarioActual.CveEmpresa = 140 Then tCveTipoPoliza = 1 ' que sea siempre ingreso. End If Dim TipoContable As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(706) = "1" AndAlso factura.TipoDocto = "Rem" Then '1-Contable, 0-Complementaria TipoContable = DdlTipoContable.SelectedValue.ToEntero() End If factura.CvePrePoliza = ObjConta.AddPrePolizas("Ventas/GuardarVenta", factura.CvePlantillaPoliza, factura.Total, factura.Total, factura.CveMoneda, factura.Fecha, If(CveEmpresaCRM > 0, LblEmpresaCRM.Text, factura.Cliente.Nombre), factura.CveUsuario, factura.CveEmpresa, CveTipoPoliza:=tCveTipoPoliza, TipoContable:=TipoContable) Dim RFCReceptor As String = "" If factura.Timbre IsNot Nothing AndAlso factura.Timbre.Receptor IsNot Nothing Then If Not String.IsNullOrEmpty(factura.Timbre.Receptor.RFC) Then RFCReceptor = factura.Timbre.Receptor.RFC.Trim End If End If 'SI NO SE VA TIMBRAR TOMA EL DEL CLIENTE If String.IsNullOrEmpty(RFCReceptor) Then If Not String.IsNullOrEmpty(LblRFC.Text) Then RFCReceptor = LblRFC.Text.Trim End If If factura.FacturarSucursal Then If factura.ClienteSucursal IsNot Nothing Then RFCReceptor = factura.ClienteSucursal.RFC End If End If End If Dim DescripcionVenta As String = "" If TxtDescripcionVenta.Text <> "" Then DescripcionVenta = TxtDescripcionVenta.Text Dim CveMedico As Integer = -1 Dim CveProcedimiento As Integer = -1 Dim CveTipoVentaGuardar As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then CveMedico = DdlMedico.SelectedValue.ToEntero CveProcedimiento = DdlProcedimiento.SelectedValue.ToEntero CveTipoVentaGuardar = If(SeEstaFActurandoVentaMedica, CveTipoVenta, RBLTipoVenta.SelectedValue.ToEntero) 'CveAlmacenTraspasoDestino End If Dim CveMotivoDevolucion As Integer = -1 If DdlMotivoDevolucion.SelectedValue.ToEntero() > 0 Then CveMotivoDevolucion = DdlMotivoDevolucion.SelectedValue.ToEntero() End If 'FIX. ESTA VARIABLE NO DEBE TENER DATOS CUANDO ES FACTURA DE INGRESO, AFECTA LOS MOVIMIENTOS DE ALMACEN If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso factura.TipoDocto = "Ing" And CveAlmacenTraspasoDestino > 0 Then CveAlmacenTraspasoDestino = -1 End If Dim CveLAdicional = DdlLineaAdicional.SelectedValue.ToEntero() If ObjFacturaNC IsNot Nothing Then If NuevaFactura = 1 AndAlso ObjFacturaNC.CveLineaAdicional > 0 Then CveLAdicional = ObjFacturaNC.CveLineaAdicional End If End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then CveTipoVentaGuardar = -1 If factura.TipoDocto = "Egs" AndAlso Not factura.EsGarantia Then If NCDescuento Then If ListaNCDescuento IsNot Nothing AndAlso ListaNCDescuento.Count > 0 Then 'VERIFICA SI BONIFICACION If ListaNCDescuento.Any(Function(RNC) (RNC.Num1 = 2)) Then CveTipoVentaGuardar = 7 ' BU - BONIFICACION DE USADO ElseIf ListaNCDescuento.Any(Function(RNC) (RNC.Num1 = 1)) Then CveTipoVentaGuardar = 9 ' CU - CANCELACION DE USADO End If End If Else If ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0 Then 'VERIFICA SI BONIFICACION If ListaRemisionesNC.Any(Function(RNC) (RNC.Num1 = 2)) Then CveTipoVentaGuardar = 7 ' BU - BONIFICACION DE USADO ElseIf ListaRemisionesNC.Any(Function(RNC) (RNC.Num1 = 1)) Then CveTipoVentaGuardar = 9 ' CU - CANCELACION DE USADO End If End If End If End If 'GA - GARANTIAS Y AJUSTES If factura.TipoDocto = "Egs" AndAlso factura.EsGarantia Then CveTipoVentaGuardar = 11 'DM - DEVOLUCION DE MERCANCIA If factura.TipoDocto = "Dev" Then CveTipoVentaGuardar = 10 'SI TIENE TIPO VENTA LA AUTORIZACION TOMAR DE AHI If factura.TipoDocto = "Egs" AndAlso Me.CveAutorizacion > 0 Then If ObjVentas.GetAutorizacion(Me.CveAutorizacion, UsuarioActual.CveEmpresa) Then If ObjVentas.DtResultados.FiltroPrimeroValor("CveTipoVenta").ToEntero() > 0 Then CveTipoVentaGuardar = ObjVentas.DtResultados.FiltroPrimeroValor("CveTipoVenta").ToEntero() End If End If End If If Not ObjVentas.AddVenta(factura.TipoDocto, factura.Folio, factura.CveCliente, factura.CveClienteSucursal, factura.SubTotalTC, factura.DescuentoTC, factura.AmortizacionTC, factura.IVATC, factura.RetIVATC, factura.RetISRTC, factura.TotalTC, factura.CveMoneda, factura.TipoCambio, factura.CveMetodoPago, factura.CondicionesPago, 0, factura.FechaPago, factura.Fecha, factura.MotivoDescuento, factura.Observaciones, factura.FechaEjecucion, factura.CveVendedor, factura.Alfa1, factura.Alfa2, factura.Alfa3, factura.Num1, factura.Num2, factura.Num3, factura.Fech1, factura.Fech2, factura.Fech3, factura.CveCorte, factura.NumeroPersonas, factura.CvePrePoliza, factura.CveUsuario, factura.CveEmpresa, AtencionA:=factura.AtencionA, TelefonoGenerico:=TxtTelefonoGenerico.Text.Trim, CveContrato:=factura.CveContrato, CveVentaPadre:=If(AplicaDevolucion, CveVentaDevolucion, factura.CveVentaPadre), Det_FechaOrdenCompra:=factura.Det_FechaOrdenCompra, Det_OrdenCompra:=factura.Det_OrdenCompra, otros:=factura.Otros, Entrega:=TxtEntrega.Text, Vigencia:=If(DdlTipoComprobante.SelectedValue = "Cot", TxtFechaVencimientoCotizacion.Text.ToDate, MinFecha), CveAlmacenTraspasoDestino:=CveAlmacenTraspasoDestino, CveAlmacenTraspasoOrigen:=CveAlmacenTraspasoOrigen, CveDireccionEnvio:=If(DdlDireccionEnvio.Visible, DdlDireccionEnvio.SelectedValue.ToEntero(), -1), CveOC:=CveOC, IEPS:=factura.IEPSTC, Serie:=factura.Serie, CveCondicionEntrega:=DdlFormaEntrega.SelectedValue.ToEntero(), PedidoContrato:=TxtPedidoContrato.Text, ObservacionesAlmacen:=TxtObsAlmacen.Text, CveSubProyecto:=factura.CveSubProyecto, CveSubProyectoCobranza:=factura.CveSubProyectoCobranza, CveSubProyectoEjecucion:=factura.CveSubProyectoEjecucion, CveFormaPago33:=factura.CveFormaPago, CveMetodoPago33:=factura.CveMetodoPago, CveUsoCFDI:=factura.CveUsoCFDI, OrdenCompra:=TxtOrdenCompra.Text, CveCuentaTerminal:=DdlCuentasTerminal.SelectedValue.ToEntero(), CveTipoRelacion:=factura.CveTipoRelacion, ImpuestoLocal:=TotalImpuestoLocal, CveVentaRelacion:=(If(factura.CveVentaRelacion.ToEntero() > 0, factura.CveVentaRelacion, -1)), ImporteRelacion:=(If(factura.ImporteRelacion <> Nothing, factura.ImporteRelacion, -1)), CveTipoAmortizacionAnticipo:=factura.CveTipoAmortizacionAnticipo, CveEmpresaCRM:=CveEmpresaCRM, EsInterno:=EsInterno, CveAcercamientoCRM:=CveAcercamientoCRM, DiasCredito:=factura.DiasCredito, EsDiasCreditoFijo:=factura.EsDiasCreditoFijo, AnticipoEspecial:=If(TrAntEspecial.Visible, ChkAntEspecial.Checked, False), Kilometraje:=TxtKilometraje.Text.ToDecimal, EsAmortizacion:=EsNCAmortizacion, CveTipoRetencion:=factura.CveTipoRetencion, CorreoNotificacion:=TxtCorreoNotificaciones.Text, FormaPaqueteria:=RblPaqueteria.SelectedValue.ToEntero, FacturarSucursal:=factura.FacturarSucursal, VentaDesglosaIEPS:=factura.VentaDesglosaIEPS, RFCReceptor:=RFCReceptor, Adjunto:=Adjunto, DevolucionImportePagado:=factura.DevolucionImportePagado, EsGarantia:=factura.EsGarantia, ServicioDomicilio:=TrServicioDomicilio.Visible, CveLineaAdicional:=CveLAdicional, DescripcionVenta:=DescripcionVenta, CveMedico:=CveMedico, CveProcedimiento:=CveProcedimiento, CveTipoVenta:=CveTipoVentaGuardar, RequiereOS:=ChkRequiereTecnico.Checked, FechaParaSurtir:=factura.FechaParaSurtir, Paciente:=TxtPaciente.Text, Episodio:=TxtEpisodio.Text, CveMotivoDevolucion:=CveMotivoDevolucion, CveCobranzaEstatusTurno:=DdlGestionCobranza.SelectedValue.ToEntero, Addenda:=factura.Addenda, Bloqueada:=factura.Bloqueada) Then ErrorList.Add("Ocurrió un error al Generar la Venta.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Else If factura.TipoDocto.Contiene("Dev", "Egs") OrElse DtVentasNC IsNot Nothing OrElse CveEstatusRefacturacion > 0 OrElse CveAnticipoPadre > 0 Then If DtVentasNC IsNot Nothing Then For Each row As DataRow In DtVentasNC.Rows If Not row("CveVenta").ToString().ToEntero() = -1 Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, row("CveVenta").ToString().ToEntero()) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If End If Next Else 'SI ES REFACTURACION DEBE AGREGAR LA VENTA ANTERIOR COMO RELACIONADA TAMBIEN If Not CveVenta = -1 Then If Not Me.AplicaRelacionManual Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveVenta) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If End If Else If CveEstatusRefacturacion > 0 AndAlso CveDevolucion > 0 Then 'SI TIENE RELACION MANUAL, TOMAR DE AHI If Not Me.AplicaRelacionManual Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveDevolucion) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If End If End If End If 'SI TIENE UN ANTICIPO TAMBIEN DEBE RELACIONARLO If CveAnticipoPadre > 0 Then If ListaAnticiposAplicados IsNot Nothing Then For Each Ant As Modelos.MAnticipoRelacionado In ListaAnticiposAplicados If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, Ant.CveVenta) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If Next End If 'If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveAnticipoPadre) Then ' ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") 'End If End If End If End If If Me.AplicaRelacionManual Then For Each GvRow As GridViewRow In GvFacturasRelacionadas.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.DataKey("CveVenta").ToEntero() > 0 Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, GvRow.DataKey("CveVenta").ToEntero()) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If Else Dim FolioFiscalRelacionado As String = GvRow.DataKey("FolioFiscal") If Not String.IsNullOrEmpty(FolioFiscalRelacionado) Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, -1, FolioFiscal:=FolioFiscalRelacionado) Then ErrorList.Add("Ocurrió un error al relacionar las ventas entre si comuníquese a Soporte Técnico") End If End If End If End If Next End If 'SI SE SELECCIONO UNA FACTURA PARA DEVOLUCION DE EFECTIVO DEBE ASOCIARLA A LA NOTA DE CREDITO If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso factura.TipoDocto = "Egs" AndAlso Me.CveVentaUsadoDevolucionEfectivo > 0 Then If Not ObjVentas.AddVentasRelacionadas(ObjVentas.CveVenta, CveVentaUsadoDevolucionEfectivo) Then ErrorList.Add("Ocurrió un error al relacionar la venta de devolución de efectivo entre si.") End If End If If UsuarioActual.Empresa.Funcionalidad(280) = "1" And RblPaqueteria.SelectedValue = "1" And Not factura.TipoDocto.Contiene("Rem", "Ped") Then NotificarPaqueteria() End If End If If ErrorList.Count = 0 AndAlso ObjVentas.CveVenta > 0 Then factura.CveVenta = ObjVentas.CveVenta factura.Serie = ObjVentas.Serie factura.Folio = ObjVentas.Folio ViewState("VentaFolio") = ObjVentas.SerieFolio factura.Timbre.Comprobante.Serie = ObjVentas.Serie factura.Timbre.Comprobante.Folio = ObjVentas.Folio.ToString() If UsuarioActual.Empresa.Funcionalidad(595) = "2" AndAlso Me.CveAutorizacion > 0 Then If Not ObjVentas.UpdateAutorizacionLimite(Me.CveAutorizacion, factura.CveCliente, factura.CveVenta) Then ErrorList.Add("Error al guardar los limites de la autorizacion") End If End If 'SI ES REFACTURACION, NO DEBE AFECTAR LOS USADOS If Not NuevaFactura.Contiene(1) Then If ObjFactura.TipoDocto = "Ing" Then If Not GuardarUsados(2, ObjVentas.IniciaTransacSQL, factura, ObjAcum) Then ErrorList.Add("Error al guardar usados") End If ElseIf ObjFactura.TipoDocto = "Dev" Then If Not GuardarUsados(1, ObjVentas.IniciaTransacSQL, factura, ObjAcum) Then ErrorList.Add("Error al guardar usados") End If End If End If 'ACTUALIZA EL CAMPO CANTIDAD CONVERSION CON BASE A LO ESTABLECIDO EN LA TABLA If AplicaComercioExterior Then For Each gvr As GridViewRow In GvComercioExterior.Rows For Each Row As DataRow In TmpDTDetalle.Rows If gvr.DataKey("Consec") = Row("Consec").ToString() AndAlso gvr.DataKey("CvePS") = Row("CvePS").ToString() Then Row("CantidadConversion") = gvr.FCTextBox("TxtCantidad").Text.ToDecimal() End If Next Next End If If factura.TipoDocto = "Egs" AndAlso NuevaFactura = 1 Then If DtVentasNC Is Nothing Then InicializaDTVentasNC() End If CargaNCDT(factura.CveVentaPadre, DdlTipoComprobante.SelectedValue, factura.Total, NuevaFactura:=NuevaFactura, ObjVentas:=ObjVentas) End If Dim EsatusAlmacen As Integer = If(RBLTipoVenta.SelectedValue.Contiene("5", "6") AndAlso EsVentaMedica AndAlso DdlTipoComprobante.SelectedValue = "Ped", 1, 0) ', EstatusAlmacen:=EsatusAlmacen If TmpDTDetalle Is Nothing OrElse TmpDTDetalle.Rows.Count = 0 Then ErrorList.Add("Ocurrió un error al registrar la factura. No se encontraron productos y/o servicios.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If 'Se agregan los PS For Each Row As DataRow In TmpDTDetalle.Rows If Not ObjVentas.AddVentaDetalle(ObjVentas.CveVenta, Row("CvePS").ToString().ToEntero(), Row("Cantidad").ToString().ToDecimal, Row("CveUM").ToString().ToEntero(), Row("PU").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("ImporteIVA").ToString().ToDecimal, Math.Round((Row("Total").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("PorcentajeIVA").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)))), 6), Row("Obs").ToString(), Row("Descuento").ToString().ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Row("TipoDescuento").ToString().ToEntero(), Row("CveSubProyecto").ToString().ToEntero(), Row("CvePresupuestoIngreso").ToString().ToEntero(), TiempoEntrega:=Row("TiempoEntrega").ToString(), CveVentaDetallePadre:=Row("CveVentaDetalle").ToString().ToEntero(), CveContratoDetalle:=Row("CveContratoDetalle").ToString().ToEntero(), CvePromocionDetalle:=Row("CvePromocionDetalle").ToString().ToEntero(), IEPS:=Row("ImporteIEPS").ToString().ToDecimal, CveMovimientoDetallePedido:=Row("CveMovimientoDetallePedido").ToString().ToEntero(), ImporteRetIVA:=Row("ImporteRetIVA").ToString().ToDecimal, ImporteRetISR:=Row("ImporteRetISR").ToString().ToDecimal, PorcentajeIVA:=Row("PorcentajeIVA").ToString().ToDecimal, PorcentajeIEPS:=Row("PorcentajeIEPS").ToString().ToDecimal, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString().ToDecimal, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString().ToDecimal, CuentaPredial:=Row("CuentaPredial").ToString(), CvePrecioLista:=Row("CvePrecioLista").ToString().ToEntero(), CveActivoFijo:=Row("CveActivoFijo").ToString().ToEntero(), NumTurnos:=Row("NumTurnos").ToString().ToDecimal(), EstatusAlmacen:=EsatusAlmacen, CantidadConversion:=Row("CantidadConversion").ToString().ToDecimal()) Then ErrorList.Add("Ocurrió un error al agregar un Producto o Servicio a la Factura.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Exit For Else 'VERIFICAR QUE EL DESCUENTO NO PASE EL 40% 'If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Row("CveClasificacion").ToString().ToEntero() <> 20519 AndAlso (Not Row("Obs").ToString().Contains("Descuento por garantía")) Then ' Dim TotalDetalle = Math.Round((Row("Total").ToString().ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("PorcentajeIVA").ToString().ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1)))), 6) ' Dim DescuentoDetalle = Row("Descuento").ToString().ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1)) ' Dim PorcentajeDescuento As Double = (DescuentoDetalle / TotalDetalle) * 100D ' If PorcentajeDescuento > 40 Then ' ErrorList.Add(String.Format("El descuento del producto/servicio {0} no puede ser mayor al 40%. Porcentaje Actual: {1}%", Row("CodigoPS"), PorcentajeDescuento.RoundSQL(2))) ' Exit For ' End If 'End If 'Agregamos el gasto de contrato If CveContrato > 0 AndAlso factura.TipoDocto = "Rem" AndAlso AplicaGastoContrato Then If Not ObjContr.AddContratoGasto(CveContrato, Row("PS").ToString(), Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, factura.Fecha, UsuarioActual.CveUsuario, CveVenta:=ObjVentas.CveVenta) Then ErrorList.Add("Ocurrió un error al agregar el gasto de la Factura.") Exit For End If End If 'Si es devolucion se agregan a la tabla de Vta_VentasDetalleDevolucion If factura.AplicaDevolucion Then Try Dim EsCargo As Integer = If(Row("EsCargo").ToString() = "True", 1, 0) If EsCargo = 1 Then If Me.ObjFacturaNC IsNot Nothing Then Dim CveVentaDetalleUsado As Integer = -1 For Each RowIng As DataRow In Me.ObjFacturaNC.DtDetalle.Rows If RowIng("Cantidad").ToString().ToDecimal() = Row("Cantidad").ToString().ToDecimal() AndAlso RowIng("CvePS").ToString().ToEntero() = Row("CvePS").ToString().ToEntero() Then CveVentaDetalleUsado = RowIng("CveVentaDetalle").ToString().ToEntero() Exit For End If Next If CveVentaDetalleUsado > 0 Then If Not ObjVentas.AddVentaDetalleDevolucion(CveVentaDetalleUsado, ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDouble) Then ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") End If End If End If Else If Not ObjVentas.AddVentaDetalleDevolucion(Row("CveVentaDetalle").ToString().ToEntero(), ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDouble) Then ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") End If End If Catch ex As Exception ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") End Try If ErrorList.Count = 0 Then If Not ObjEventos.AddEventoBitacora(String.Format("Se aplicó una devolución en Folio: {1}", factura.CveVenta, factura.SerieFolio), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVentaDevolucion) Then ErrorList.Add("Ocurrió un error al agregar la bitacora de devolución.") End If End If End If 'SI NO VIENE DE REMISION, MARCAR COMO SURTIDA If ErrorList.Count = 0 AndAlso UsuarioActual.CveEmpresa.Contiene(199, 201) AndAlso factura.TipoDocto = "Ing" AndAlso (RemisionesLista Is Nothing OrElse (RemisionesLista IsNot Nothing AndAlso RemisionesLista.Count = 0)) Then If Not ObjInventario.UpdateEstatusAlmacen(ObjVentas.CveVentaDetalle, 1) Then ErrorList.Add("No se pudo actualizar el movimiento de almacen de la factura") End If End If Dim TmpDr As DataRow = TmpDTDetalle.Select($"Consec = {Row("Consec").ToString()}")(0) TmpDr("CveVentaDetalle") = ObjVentas.CveVentaDetalle Try If DtInv IsNot Nothing AndAlso DtInv.Rows.Count > 0 Then Dim InvDr As DataRow = DtInv.Select($"Consec = {Row("Consec").ToString()}")(0) InvDr("CveVentaDetalle") = ObjVentas.CveVentaDetalle End If Catch ex As Exception End Try 'SI SE FACTURA UNA RNC SE MUESTRA If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso factura.TipoDocto = "Egs" Then If Row("CveVentaDetalleRNC").ToString().ToEntero() > 0 Then If Not ObjVentas.AddVentaDetalleRNCFacturada(Row("CveVentaDetalleRNC").ToString().ToEntero(), ObjVentas.CveVentaDetalle, Row("Cantidad").ToString().ToDecimal()) Then ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") End If Dim EsCargo As Boolean = False Dim ListaRNC As List(Of Modelos.Factura) = Nothing If NCDescuento Then ListaRNC = ListaNCDescuento Else EsCargo = RblRNCTipo.SelectedValue = "1" ListaRNC = ListaRemisionesNC End If 'SI SE FACTURAN RNC DE CARGO, SE AGREGA EL CONCEPTO DE ACREDITAMIENTO If ListaRNC IsNot Nothing AndAlso ClienteEsDistribuidor AndAlso Not factura.EsGarantia Then Dim CvePSCargo As Integer = -1 Dim CveVentaRNC As Integer = -1 For Each RNC As Modelos.Factura In ListaRNC If NCDescuento Then EsCargo = (Not RNC.Num1 = 2) End If CvePSCargo = RNC.DtDetalle.FiltroPrimeroValor("CvePS", $"CveVentaDetalle={Row("CveVentaDetalleRNC").ToString()}").ToEntero() CveVentaRNC = RNC.DtDetalle.FiltroPrimeroValor("CveVenta", $"CveVentaDetalle={Row("CveVentaDetalleRNC").ToString()}").ToEntero() If EsCargo Then If Not ObjAcum.DistribuidorMovtosGet(Me.CveCliente, UsuarioActual.CveEmpresa, CveVentaRNCCargo:=CveVentaRNC) AndAlso ObjAcum.DtResultados.Rows.Count > 0 Then ErrorList.Add("Ocurrió un error al obtener los movimientos del distribuidor.") Exit For End If Dim RowMovto As DataRow = ObjAcum.DtResultados.FiltroPrimero($"CvePSCargo={CvePSCargo}") If RowMovto IsNot Nothing Then 'OBTIENE LOS IMPORTES ORIGINALES EN BASE A LO QUE HABIA EN EL MOVIMIENTO Dim ImporteCargoOriginal As Decimal = (RowMovto("ImporteCargo").ToString().ToDecimal() / RowMovto("Cantidad").ToString().ToDecimal()).RoundSQL(2) 'Dim ImporteBonificacionOriginal = (RowMovto("ImporteBonificacion").ToString().ToDecimal() / RowMovto("Cantidad").ToString().ToDecimal()).RoundSQL(2) Dim PuntosOriginales As Decimal = (RowMovto("Puntos").ToString().ToDecimal() / RowMovto("Cantidad").ToString().ToDecimal()).RoundSQL(2) Dim CveTamanio As Integer = RowMovto("CveTamaño").ToString().ToEntero() Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim Puntos As Decimal = Cantidad * PuntosOriginales Dim Cargo As Decimal = Cantidad * ImporteCargoOriginal Dim Bonificacion As Decimal = 0 If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, Cantidad, CveTamanio, Puntos, Cargo, Bonificacion, 6, factura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0D, "", NowADS()) Then ErrorList.Add("Ocurrió un error al agregar el movimiento de distribuidor.") Exit For End If End If Else Dim DrTamanio As DataRow = ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($"CvePSCargo={CvePSCargo}") If DrTamanio IsNot Nothing Then 'OBTIENE LOS IMPORTES ORIGINALES EN BASE A LO QUE HABIA EN EL MOVIMIENTO Dim ImporteBonificacion As Decimal = Row("Total").ToString().ToDecimal().RoundSQL(2) Dim CveTamanio As Integer = DrTamanio("CveTamaño").ToString().ToEntero() Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim Puntos As Decimal = 0 Dim Cargo As Decimal = 0 If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, Cantidad, CveTamanio, Puntos, Cargo, ImporteBonificacion, 6, factura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0D, "", NowADS()) Then ErrorList.Add("Ocurrió un error al agregar el movimiento de distribuidor.") Exit For End If End If End If Next 'Dim RowTamanio As DataRow = GlobalDTAcumTamaños().FiltroPrimero($"CvePSCargo={CvePSCargo}") 'If RowTamanio IsNot Nothing Then ' Dim CveTamanio As Integer = RowTamanio("CveTamaño").ToString().ToEntero() ' Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() ' Dim Puntos As Decimal = Cantidad * RowTamanio("Puntos").ToString().ToDecimal() ' Dim Cargo As Decimal = Cantidad * RowTamanio("Cargo").ToString().ToDecimal() ' Dim Bonificacion As Decimal = Cantidad * RowTamanio("Bonificacion").ToString().ToDecimal() ' If EsCargo Then ' Bonificacion = 0 ' Else ' Puntos = 0 ' Cargo = 0 ' End If ' If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, Cantidad, CveTamanio, Puntos, Cargo, Bonificacion, 6, factura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0D, "", NowADS()) Then ' ErrorList.Add("Ocurrió un error al agregar la venta detalle devolución.") ' Exit For ' End If 'End If End If End If End If End If Next 'Orden Produccion' If UsuarioActual.CveEmpresa.Contiene(126) Then If ObjVentas.CveVenta > 0 And DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then If Not ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), ObjVentas.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar la orden de producción") End If End If End If 'PedidoA' If ObjVentas.CveVenta > 0 And CvePedidoA > 0 And DdlTipoComprobante.SelectedValue.Contiene("Rem") Then If Not ObjCliente.UpdateEstatusPedido(CvePedidoA, 18, -1, UsuarioActual.CveUsuario, CveRemision:=factura.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar el estatus del pedidoA") Else 'Remision If Not ObjEventos.AddEventoBitacora($"Remisionado de autorización en: {ObjFactura.SerieFolio}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CvePedidoA) Then ErrorList.Add("Ocurrió un error al agregar bitácora de Autorización") End If End If End If 'Actualiar el estatus de la venta refacturada 'If ObjVentas.CveVenta > 0 AndAlso NuevaFactura = 1 AndAlso CveDevolucion > 0 Then ' 'If CveEstatusRefacturacion = 1 Then CveEstatusRefacturacion = 2 'cuando viene del proceso de refacturación con aceptació ' If Not ObjVentas.UpdateEstatusRefacturacion(CveDevolucion, 2) Then ' se marca como refacturada ' ErrorList.Add("Ocurrió un error al actualizar el estatus de la refacturacion") ' End If 'End If 'Pedido2' If ObjVentas.CveVenta > 0 And CvePedido > 0 And DdlTipoComprobante.SelectedValue.Contiene("Rem", "PA") Then If Not ObjCliente.UpdateEstatusPedido(CvePedido, 21, -1, UsuarioActual.CveUsuario) Then ErrorList.Add("Ocurrió un error al actualizar el estatus del pedido2") End If End If Dim GenerarOS As Boolean = ChkRequiereTecnico.Checked 'si es pago directo, genera siempre OS If RBLTipoVenta.SelectedValue = "2" Then GenerarOS = True If EsVentaMedica AndAlso ErrorList.Count = 0 AndAlso GenerarOS Then GeneraOS(ObjVentas.IniciaTransacSQL, ErrorList, CveVentaOS:=factura.CveVenta, SerieFolioOS:=factura.SerieFolio) If Not ObjVentas.SincronizacionProcedimientoProducto(DdlProcedimiento.SelectedValue.ToEntero, factura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then ErrorList.Add("Ocurrió un error al guardar los productos al procedimiento") End If End If 'Si viene de OS, Se guarda CveVenta en OS If CveOS > 0 Then If Not ObjOS.UpdateVentaOS(factura.CveVenta, CveOS, UsuarioActual.CveEmpresa) Then ErrorList.Add("Ocurrió un error al guardar la venta en Ordenes de Servicio") End If End If If EsVentaMedica AndAlso ErrorList.Count = 0 AndAlso ObjEventos IsNot Nothing Then Dim CveOSAgenda As Integer = -1 Dim FolioOSAgenda As Integer = 0 If Me.CveOSVentaMedica > 0 Then CveOSAgenda = Me.CveOSVentaMedica FolioOSAgenda = Me.FolioOSVentaMedica End If If Not AgendarCirugia(ObjEventos, CveOSAgenda, FolioOSAgenda) Then ErrorList.Add("Ocurrió un error al guardar la agenda") End If End If 'Contratos If factura.CveContrato > 0 AndAlso Me.CveContratoTipo <> 33 Then If factura.CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing") Then GuardarContratoAvanceEstimaciones(ObjContr, factura, ErrorList, 1) 'CUANDO ES NOTA DE CRÉDITO, NO DEBE DE CONSIDERAR AVANCE, CUANDO ES NOTA DE CRÉDITO POR AMORTIZACIÓN ElseIf factura.CveContrato > 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Egs", "Dev") AndAlso Not EsNCAmortizacion Then GuardarContratoAvanceEstimaciones(ObjContr, factura, ErrorList, -1) End If End If 'Impuestos Locales For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble <> 0 Then If Not ObjVentas.AddVentaImpuestoLocales(factura.CveVenta, gvr.DataKey("CveImpuestoLocal").ToString().ToEntero(), gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1))) Then ErrorList.Add("Ocurrió un error al Guardar Impuestos Locales") End If End If End If Next If DTmpF.Rows.Count > 0 Then For Each Row As DataRow In DTmpF.Rows If Not ObjVentas.AddVentasFirmas(factura.CveVenta, Row("Titulo").ToString(), Row("Nombre").ToString(), Row("Puesto").ToString(), Row("Lado").ToString().ToEntero()) Then ErrorList.Add("Ocurrio un error al Guardar Firmas") End If Next End If 'registro los metodos de pago, cuando hay corte. If factura.CveCorte > 0 Then 'cuando es contado If RBLPago.SelectedValue = "2" AndAlso DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 Then For Each DrPago As DataRow In DtPagos.Rows If Not ObjVentas.AddVta_VentaPago(factura.CveVenta, DrPago("CveMetodoPago").ToString().ToEntero(), DrPago("Importe").ToString().ToDouble) Then ErrorList.Add("Ocurrio un error al guardar los metodos de pago") End If Next Else 'cuando es crédito o terminal If Not ObjVentas.AddVta_VentaPago(factura.CveVenta, 7, TxtTotal.Text.ToDouble) Then ErrorList.Add("Ocurrio un error al guardar los metodos de pago") End If End If End If 'cuando es contado 'If factura.CveCorte > 0 Then ' If RBLPago.SelectedValue = "2" AndAlso DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 Then ' For Each DrPago As DataRow In DtPagos.Rows ' If ObjBancos.AddBancos_IE(DrPago("CveCuenta").ToString().ToEntero(), DrPago("CveTipoMovimiento").ToString().ToEntero(), TxtFechaPago.Text.ToDate, DrPago("Folio").ToString(), "", DrPago("Importe").ToString().ToDouble, DdlMoneda.SelectedValue.ToEntero(), If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDouble), "", "", True, False, -1, factura.CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=CveCorte) = -1 Then ' ErrorList.Add("Ocurrio un error al guardar los metodos de pago") ' End If ' Next ' 'Else ' ' 'cuando es crédito o terminal ' ' If ObjBancos.AddBancos_IE(, 7, TxtFechaPago.Text.ToDate, TxtFolio.Text.ToString(), "", TxtTotal.Text.ToDouble, DdlMoneda.SelectedValue.ToEntero(), If(DdlMoneda.SelectedValue.ToEntero() = 1, 1, TxtTipoCambio.Text.ToDouble), "", "", True, False, -1, factura.CvePrePoliza, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=CveCorte) = -1 Then ' ' ErrorList.Add("Ocurrio un error al guardar los metodos de pago") ' ' End If ' End If 'End If 'INE COMPLEMENTOS If ObjFactura.ComplementoINE IsNot Nothing Then If Not ObjVentas.UpdateVentasComplementos(ObjFactura.CveVenta, ObjFactura.ComplementoINE.INETipoProceso, ObjFactura.ComplementoINE.INETipoComite, ObjFactura.ComplementoINE.INEIdContabilidad.ToString()) Then ErrorList.Add("Ocurrio un error al guardar los complementos") End If End If If ErrorList.Count = 0 AndAlso factura.TipoDocto.Contiene("Ing", "Ant") Then 'Agregamos las remisiones a la tabla If DtRemisionesPS IsNot Nothing AndAlso DtRemisionesPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then Dim CveVentaDetalle As Integer = 0 Dim CveVentaDetallePadre As Integer = 0 Dim Cantidad As Decimal = 0 Dim CvePS As Integer = 0 Dim PU As Decimal = 0 For Each row As DataRow In DtRemisionesPS.Rows Cantidad = DtRemisionesTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetalleRemision={row("CveVentaDetalle")}").ToDecimal CvePS = DtRemisionesTmpDT.FiltroPrimeroValor("CvePS", $"CveVentaDetalleRemision={row("CveVentaDetalle")}").ToEntero() PU = DtRemisionesTmpDT.FiltroPrimeroValor("PU", $"CveVentaDetalleRemision={row("CveVentaDetalle")}").ToDecimal CveVentaDetalle = TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetalleRemision={row("CveVentaDetalle")}").ToEntero() CveVentaDetallePadre = row("CveVentaDetalle").ToString().ToEntero() If Not ObjVentas.AgregarRemisionDetalle(CveVentaDetalle, CveVentaDetallePadre, Cantidad) Then ErrorList.Add("Ocurrió un error al agregar el detalle de la Remision") End If Next End If 'If DTRemisiones IsNot Nothing AndAlso DTRemisiones.Rows.Count > 0 AndAlso ErrorList.Count = 0 AndAlso factura.TipoDocto.Contiene("Ing", "Ant") Then ' Dim dt As DataTable = DTRemisiones.FiltraParametros("Aplicado = True") ' If dt.Rows.Count > 0 Then ' For Each row As DataRow In dt.Rows ' If Not ObjVentas.UpdateVentaRemision(row("CveVenta").ToString().ToEntero(), ObjFactura.CveVenta) Then ' ErrorList.Add("Ocurrió un error al actualizar la remisión") ' End If ' Next ' End If 'End If If RemisionesLista IsNot Nothing AndAlso RemisionesLista.Count > 0 AndAlso ErrorList.Count = 0 AndAlso factura.TipoDocto.Contiene("Ing", "Ant") Then For Each CveRemision As Integer In RemisionesLista If Not ObjVentas.UpdateVentaRemision(CveRemision, ObjFactura.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar la remisión") End If Next End If End If If ErrorList.Count = 0 Then 'Agregamos los pedidos2 a la tabla If DtPedidosPS IsNot Nothing AndAlso DtPedidosPS.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then Dim CveVentaDetalle As Integer = 0 Dim CveVentaDetallePadre As Integer = 0 Dim Cantidad As Decimal = 0 Dim CvePS As Integer = 0 Dim PU As Decimal = 0 For Each row As DataRow In DtPedidosPS.Rows Cantidad = DtPedidosTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetallePedido2={row("CveVentaDetalle")}").ToDecimal CvePS = DtPedidosTmpDT.FiltroPrimeroValor("CvePS", $"CveVentaDetallePedido2={row("CveVentaDetalle")}").ToEntero() PU = DtPedidosTmpDT.FiltroPrimeroValor("PU", $"CveVentaDetallePedido2={row("CveVentaDetalle")}").ToDecimal CveVentaDetalle = TmpDTDetalle.FiltroPrimeroValor("CveVentaDetalle", $"CveVentaDetallePedido2={row("CveVentaDetalle")}").ToEntero() CveVentaDetallePadre = row("CveVentaDetalle").ToString().ToEntero() If Not ObjVentas.AddVentaDetallePedido2(CveVentaDetalle, CveVentaDetallePadre, Cantidad) Then ErrorList.Add("Ocurrió un error al agregar el detalle del Pedido2") End If Next End If If DtPedidos2 IsNot Nothing AndAlso DtPedidos2.Rows.Count > 0 AndAlso ErrorList.Count = 0 Then Dim dt As DataTable = DtPedidos2.FiltraParametros("Aplicado = True") If dt.Rows.Count > 0 Then For Each row As DataRow In dt.Rows If Not ObjVentas.UpdateVentaPedido2(row("CveVenta").ToString().ToEntero(), ObjFactura.CveVenta) Then ErrorList.Add("Ocurrió un error al actualizar el Pedido2") End If Next End If End If End If If ErrorList.Count = 0 AndAlso RBLTipoContrato.SelectedValue = "4" And DdlEstimacionesObra.SelectedValue.ToEntero > 0 Then If Not ObjContr.UpdateContratosAvanceEstimacionVentas(DdlEstimacionesObra.SelectedValue.ToEntero, ObjFactura.CveVenta, UsuarioActual.CveEmpresa) Then ErrorList.Add("Ocurrió un error al actualizar la estimación") End If End If If ErrorList.Count = 0 Then 'prepoliza GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario, TipoContable:=TipoContable) If ErrorList.Count = 0 Then 'INVENTARIOS If ErrorList.Count = 0 Then If Not EsNCAmortizacion AndAlso Not NCDescuento Then If GuardarVentaInventarios(ObjInventario, ObjVentas, ObjConta, factura, TmpDTDetalle) Then ErrorList.Add("Ocurrio un error al Guardar Inventario") End If End If End If If ErrorList.Count = 0 Then 'estimaciones If Me.CveContratoTipo <> 33 Then GuardarVentaEstimaciones(ObjContr, factura) End If End If End If End If End If End Sub Private Sub GuardarVentaPrePolizas(ByRef ObjConta As ClsContabilidad, factura As Modelos.Factura, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, 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 ObjInventario As ClsInventarios = Nothing, Optional TipoContable As Integer = -1) Dim CveIE As Integer = -1 Dim DT As DataTable = Nothing Dim CveConceptoAfectacion As Integer = 1 'Cliente Dim CveConceptoAntCli As Integer = 3 'Anticipo Cliente Dim CveConceptoVenta As Integer = 4 'Venta Dim CveConceptoCanAnt As Integer = 11 'Cancelacion Anticipos Dim CveConceptoDSV As Integer = 12 ' DSV Dim CveConceptoIVA As Integer = 13 'IVA Trasladado Dim CveConceptoRetIVA As Integer = 8 'Ret IVA Dim CveConceptoRetISR As Integer = 9 'Ret ISR 'P R E P O L I Z A S If DdlTipoComprobante.SelectedValue <> "Cot" Then If factura.CvePrePoliza > 0 Then If ProcesoPrepolizas(ObjConta, factura, CveIE, TmpDTDetalleMovimientos, ValorMultiplicador, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario, TipoContable:=TipoContable) 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 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 End If End Sub Private Function ProcesoPrepolizas(ByRef ObjConta As ClsContabilidad, ObjFactura As Modelos.Factura, CveIE As Integer, TmpDTDetalle As DataTable, 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, Optional ObjInventario As ClsInventarios = Nothing, Optional TipoContable As Integer = -1) As Boolean Try Dim DT As DataTable Dim CvePlantilaPoliza As Integer Dim ErrorPrepoliza As Boolean = False Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:

    " Dim CveCuentaContabilizacion As Integer = 1 Dim tipoCambio As Decimal Dim TCPago As Decimal = 1 Dim CuentasContablesInvalidasSIG As New StringBuilder If ObjFactura.TipoDocto = "Ing" Or ObjFactura.TipoDocto = "Ant" Or ObjFactura.TipoDocto = "Com" Then CvePlantilaPoliza = 4 ElseIf ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then CvePlantilaPoliza = 7 ElseIf ObjFactura.TipoDocto.Contiene("Rem", "RNC") Then CvePlantilaPoliza = 4 End If If ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio > 0 Then tipoCambio = ObjFactura.TipoCambio TCPago = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal ElseIf ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio <= 1 Then If UsuarioActual.CveEmpresa.Contiene(13, 83) Then tipoCambio = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal Else If ChkEmitirComercioExterior.Checked Then tipoCambio = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToString().ToDecimal Else tipoCambio = GlobalTipoCambio(ObjFactura.Fecha).ToString().ToDecimal End If End If Else tipoCambio = 1 End If Dim ConceptoContable As Integer Dim TipoMovimiento As Boolean Dim importeMovimiento As Decimal Dim FechaMovimiento As Date = ObjFactura.Fecha Dim Concepto As String = ObjFactura.SerieFolio Dim Referencia As String = ObjFactura.SerieFolio Dim Fecha As Date = TxtFecha.Text.Trim.ToDate Dim importeMX As Decimal Dim Multiplicador As Integer Dim CveIEPago As Integer Dim FolioIE As Long Dim CveIEAnticipo As Integer Dim CveSubProyectoVenta As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim CveSubProyectoContabilizar As Integer Dim SeContabiliza As Boolean = True If (UsuarioActual.Empresa.Funcionalidad(343) = "1" AndAlso ObjFactura.TipoDocto = "Ant") Or (ChkAntEspecial.Checked AndAlso ObjFactura.TipoDocto = "Ant") Then SeContabiliza = False End If Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "PA", "Egs", "Dev") Then AutoConta = False End If 'VERIFICA SI EL OBJETO FACTURA TIENE EL OBJETO USUARIO, REQUERIDO PARA FUNCIONES DE PAGOS If ObjFactura.UsuarioActual Is Nothing Then ObjFactura.UsuarioActual = UsuarioActual Else If ObjFactura.UsuarioActual.Empresa Is Nothing Then ObjFactura.UsuarioActual.Empresa = UsuarioActual.Empresa End If End If Dim UsaComplementariaClientes As Boolean = True If ObjConta.GetPlantillaConceptos(ObjFactura.CveEmpresa, CvePlantilaPoliza) Then Dim dtt As DataTable = ObjConta.DtResultados If ValorMultiplicador = -1 Then dtt = ObjConta.DtResultados.FiltraParametros("", "Orden DESC") ' se ordena contrario al registro para llevar los saldos correctos For Each Row As DataRow In dtt.Rows ConceptoContable = Row("CveConcepto").ToString().ToEntero() TipoMovimiento = If(Row("TipoMovto").ToString() = "True", True, False) importeMovimiento = 0 CveSubProyectoContabilizar = 0 Multiplicador = (Row("Multiplicador").ToString().ToEntero()) Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, ConceptoContable, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", "") Dim PorcentajeImpuesto As Decimal = 0 Select Case ConceptoContable Case 1 'Cliente If Not ObjFactura.TipoDocto.Contiene("Egs", "Rem", "RNC") Then If ObjFactura.CveMoneda > 1 Then ConceptoContable = 291 importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" If tipoCambio > 1 Then If importeMovimiento <> 0 AndAlso (UsaComplementariaClientes) Then importeMX = importeMovimiento If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, (importeMovimiento * tipoCambio - importeMovimiento).RoundSQL, 203, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True End If End If End If Dim DtAF As DataTable = TmpDT.FiltraParametros("CveActivoFijo > 0") If DtAF.Rows.Count > 0 Then For Each RowAF As DataRow In DtAF.FiltraParametros("", "", {"CveActivoFijo", "Obs"}).Rows Dim ImporteDepreciado As Decimal = DtAF.SUMD("AFDepreciacion", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, ImporteDepreciado, (ImporteDepreciado).RoundSQL, 271, Referencia, $"Depreciación {RowAF("Obs")}", CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True End If 'MARCAR EL ACTIVO FIJO COMO VENDEDIDO If Not ErrorPrepoliza AndAlso RowAF("CveActivoFijo").ToString().ToEntero() > 0 Then If Not ObjVentas.UpdateEstatusAFVendido(RowAF("CveActivoFijo").ToString().ToEntero(), UsuarioActual.CveEmpresa, 5) Then ErrorPrepoliza = True End If End If Next End If End If Case 3 'Cliente If ObjFactura.TipoDocto = "Ant" Then ConceptoContable = If(UsuarioActual.CveEmpresa.Contiene(119), 95, ConceptoContable) importeMovimiento = ObjFactura.SubTotal * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" End If Case 190 'Remisión del cliente If ObjFactura.TipoDocto = "Rem" Then importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" Dim ContabilizableRem As Boolean = False If TipoContable <> -1 Then ContabilizableRem = True End If If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 190, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=ContabilizableRem, CveSubProyecto:=CveSubProyectoContabilizar) Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 193, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=ContabilizableRem, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Else ErrorPrepoliza = True End If importeMovimiento = 0 ViewState("SeGuardoPrePoliza") = True End If Case 277 'Remisión de NC If ObjFactura.TipoDocto = "RNC" Then importeMovimiento = (ObjFactura.Total - TotalOtrosConceptos) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 277, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 278, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Else ErrorPrepoliza = True End If importeMovimiento = 0 ViewState("SeGuardoPrePoliza") = True End If Case 12 'Nota de Credito If ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then Dim ConPreP As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(6, ObjFactura.CveMoneda, False, 2) importeMovimiento = ObjFactura.Total * ValorMultiplicador importeMX = (importeMovimiento * tipoCambio * Multiplicador).RoundSQL(2) FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = ObjFactura.CveSubProyecto If ObjFactura.CveMoneda = 2 Then importeMX = importeMovimiento Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConPreP.CveConcepto, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If If UsaComplementariaClientes AndAlso ObjFactura.CveMoneda = 2 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, (importeMovimiento * tipoCambio - importeMovimiento).RoundSQL(2), ConPreP.CveConceptoComplementario, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If End If Dim TipoCambioNC As Decimal = 1 If ObjFactura.CveMoneda = 2 Then If tipoCambio > 1 Then TipoCambioNC = tipoCambio Else If UsuarioActual.CveEmpresa.Contiene(13, 83) Then TipoCambioNC = GlobalTipoCambio(ObjFactura.Fecha.AddDays(-1)).ToDecimal Else TipoCambioNC = GlobalTipoCambio(ObjFactura.Fecha).ToDecimal End If End If End If importeMovimiento = 0 importeMX = 0 'APLICA NC SALDOS DIRECTOS If Not ErrorPrepoliza AndAlso DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then For Each Dr As DataRow In DtVentasNC.Rows Dim ObjFacturaRef As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDTDetalle:=False, VerificaAlmacen:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim ventaRef As New Venta(ObjFacturaRef, UsuarioActual) ObjFacturaRef.Dispose() Dim Pago As New VentaPago Pago.Fecha = ObjFactura.Fecha Pago.FechaDocumentoRelacionado = ObjFactura.Fecha Pago.ImportePagoVenta = Dr("Importe").ToString().ToDecimal() Pago.ImportePago = Dr("Importe").ToString().ToDecimal() Pago.CveMonedaPago = ObjFactura.CveMoneda Pago.TCPago = TipoCambioNC Pago.TipoPago = "NC" Pago.CveVentaAmortizacion = ObjFactura.CveVenta 'Dr("CveVenta").ToString().ToEntero() Pago.AplicaTraslado = False Pago.Referencia = Concepto 'Pago.CveConceptoPago = 251 ErrorPrepoliza = AplicaPrePolizaPagoVenta(ventaRef, Pago, ObjFactura.CvePrePoliza, ObjConta) If ErrorPrepoliza Then Exit For End If If Not ErrorPrepoliza AndAlso EsNCAmortizacion AndAlso Not AplicoNCFacturaActual AndAlso DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 2 AndAlso ObjFactura.TipoDocto.Contiene("Egs") Then For Each row2 As GridViewRow In GVAnticipos.Rows If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 3 Then If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then CveIEAnticipo = row2.DataKey("CveIE").ToString().ToEntero() importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal '- ((row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / row2.DataKey("TotalAnticipo").ToDecimal) * row2.DataKey("IVAAnticipo").ToDecimal) Dim ImporteAnticipo As Decimal = importeMovimiento Dim CveMonedaAnticipo As Integer = row2.DataKey("CveMoneda").ToString().ToEntero() If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" If DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then Dim DescuentosAnticipos As Decimal = row2.DataKey("Descuentos").ToDecimal ImporteAnticipo = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / (row2.DataKey("TotalAnticipo").ToDecimal - DescuentosAnticipos) * row2.DataKey("SubTotalAnticipo").ToDecimal ImporteAnticipo = ImporteAnticipo.RoundSQL(2) End If Dim Importe11MX As Decimal = ImporteAnticipo CveSubProyectoContabilizar = CveSubProyectoVenta If importeMovimiento <> 0 Then 'SI LA NC ES EN DOLARES Y PERO VIENE DE UN ANTICIPO EN PESOS If (Not UsuarioActual.CveEmpresa.Contiene(72, 80, 146)) AndAlso ObjFactura.CveMoneda = 2 Then Dim tipoCambioAnticipo As Decimal = 1D If CveMonedaAnticipo = 2 Then If UsuarioActual.CveEmpresa.Contiene(13, 83) Then tipoCambioAnticipo = GlobalTipoCambio(row2.DataKey("Fecha").ToString().ToDate.AddDays(-1)).ToDecimal Else tipoCambioAnticipo = GlobalTipoCambio(row2.DataKey("Fecha").ToString().ToDate).ToDecimal End If End If If ObjFactura.CveMoneda = 2 AndAlso CveMonedaAnticipo = 1 Then Importe11MX = Importe11MX * tipoCambio End If Dim ConPrePAnt As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(12, CveMonedaAnticipo, True, 1) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, Importe11MX, Importe11MX, ConPrePAnt.CveConcepto, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambioAnticipo = 1, 0, importeMovimiento), CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza, TipoCambio:=tipoCambioAnticipo) Then ErrorPrepoliza = True Exit For End If If row2.DataKey("CveMoneda").ToString.ToEntero = 2 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, ImporteAnticipo * tipoCambioAnticipo - ImporteAnticipo, ImporteAnticipo * tipoCambioAnticipo - ImporteAnticipo, ConPrePAnt.CveConceptoComplementario, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambioAnticipo = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza, TipoCambio:=tipoCambioAnticipo) Then ErrorPrepoliza = True Exit For End If If tipoCambio <> tipoCambioAnticipo Then Dim difFluctuacion As Decimal = tipoCambioAnticipo - tipoCambio Dim CveConceptoFluctua As Integer = 64 '64.ganacia, 65.perdida Dim TipoMovtoFluctua As Boolean = True If difFluctuacion < 0 Then CveConceptoFluctua = 65 TipoMovtoFluctua = False Else CveConceptoFluctua = 64 TipoMovtoFluctua = True End If Dim ImporteFluctuacion As Decimal = Math.Abs((ImporteAnticipo * difFluctuacion).RoundSQL) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovtoFluctua, ImporteFluctuacion, ImporteFluctuacion, CveConceptoFluctua, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=ImporteFluctuacion, CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, TipoCambioPago:=TipoCambioFactura) Then ErrorPrepoliza = True Exit For End If End If End If Else If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, Importe11MX, Importe11MX, 11, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Exit For Else 'se hace acreditamiento de impuestos 'IVA X TRASLADAR Dim EsAnticipoEspecial As Boolean = False If UsuarioActual.CveEmpresa.Contiene(1, 119) Then EsAnticipoEspecial = True If EsAnticipoEspecial Then Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeIVA").ToDecimal '' si se esta aplicando NC por amortizaion, se trasladan impuestos If EsNCAmortizacion Then Dim IngresoIVA As Decimal = TxtIVA.Text.ToDecimal Dim IngresoIEPS As Decimal = TxtIEPS.Text.ToDecimal Dim IngresoTotal As Decimal = TxtTotal.Text.ToDecimal If IngresoIVA > 0 Then Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 13, NombreCliente, Dr("Folio").ToString, FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, (importeMovimiento * IngresoIVA) / IngresoTotal, ((importeMovimiento * IngresoIVA) / IngresoTotal) * tipoCambio * Multiplicador, 13, Referencia, Concepto, CveVenta:=Dr("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If 'IVA PAGADO Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 61, NombreCliente, Dr("Folio").ToString, FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, (importeMovimiento * IngresoIVA) / IngresoTotal, ((importeMovimiento * IngresoIVA) / IngresoTotal) * tipoCambio * Multiplicador, 61, Referencia, Concepto, CveVenta:=Dr("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If End If If IngresoIEPS > 0 Then 'IEPS X TRASLADAR Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 38, NombreCliente, Dr("Folio").ToString, FolioIE.ToString()) If IngresoIEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, (importeMovimiento * IngresoIEPS) / IngresoTotal, ((importeMovimiento * IngresoIEPS) / IngresoTotal) * tipoCambio * Multiplicador, 38, Referencia, Concepto, CveVenta:=Dr("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If 'IEPS PAGADO Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 39, NombreCliente, Dr("Folio").ToString, FolioIE.ToString()) If IngresoIEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, (importeMovimiento * IngresoIEPS) / IngresoTotal, ((importeMovimiento * IngresoIEPS) / IngresoTotal) * tipoCambio * Multiplicador, 39, Referencia, Concepto, CveVenta:=Dr("CveVenta").ToString().ToEntero(), CveCliente:=CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If End If End If End If End If End If End If End If End If Next End If Next 'If Not ErrorPrepoliza AndAlso ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=5, AutoConta:=AutoConta) Then ' If ObjConta.ValorPolizaDescuadre > 0 Then ' 'ErrorPrepoliza = True ' GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") ' End If 'End If If ErrorPrepoliza Then Exit For End If End If 'APLICA DEVOLUCION SALDOS DIRECTOS If AplicaDevolucion Then Dim importeMovimientoDev As Decimal = TxtTotal.Text.ToDecimal importeMovimientoDev = If(SaldoVentaDevolucion < importeMovimientoDev, SaldoVentaDevolucion, importeMovimientoDev) If importeMovimientoDev > 0 Then Dim importeMXDev As Decimal = importeMovimientoDev * tipoCambio * Multiplicador If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimientoDev.FormatoNumero(2)}" If UsaComplementariaClientes AndAlso tipoCambio > 1 Then importeMXDev = importeMovimientoDev Dim ImporteComplementaria As Decimal = ((importeMovimientoDev * tipoCambio) - importeMovimientoDev).RoundSQL If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, importeMovimientoDev, ImporteComplementaria, 203, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, TipoCambioPago:=TipoCambioFactura) Then ErrorPrepoliza = True Exit For End If End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, importeMovimientoDev, importeMXDev, 91, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If If UsaComplementariaClientes AndAlso TipoCambioFactura > 1 Then importeMXDev = importeMovimientoDev Dim ImporteComplementaria As Decimal = ((importeMovimientoDev * TipoCambioFactura) - importeMovimientoDev).RoundSQL If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, importeMovimientoDev, ImporteComplementaria, 207, Referencia, Concepto, CveVenta:=CveVentaDevolucion, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(TipoCambioFactura = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar, CveVentaAmortizacion:=ObjFactura.CveVenta, TipoCambio:=TipoCambioFactura) Then ErrorPrepoliza = True Exit For End If End If Dim CveConceptoPagoNC As Integer = 251 If ObjFactura.CveMoneda > 1 Then CveConceptoPagoNC = 301 End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, importeMovimientoDev, importeMXDev, CveConceptoPagoNC, Referencia, Concepto, CveVenta:=CveVentaDevolucion, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=ObjFactura.CveVenta, ImporteME:=If(tipoCambio = 1, 0, importeMovimientoDev), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If If tipoCambio <> TipoCambioFactura Then Dim difFluctuacion As Decimal = tipoCambio - TipoCambioFactura Dim CveConceptoFluctua As Integer = 64 '64.ganacia, 65.perdida Dim TipoMovtoFluctua As Boolean = True If difFluctuacion < 0 Then CveConceptoFluctua = 65 TipoMovtoFluctua = False Else CveConceptoFluctua = 64 TipoMovtoFluctua = True End If Dim ImporteFluctuacion As Decimal = Math.Abs((importeMovimientoDev * difFluctuacion).RoundSQL) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovtoFluctua, ImporteFluctuacion, ImporteFluctuacion, CveConceptoFluctua, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveVentaAmortizacion:=CveVentaDevolucion, ImporteME:=ImporteFluctuacion, CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, TipoCambioPago:=TipoCambioFactura) Then ErrorPrepoliza = True Exit For End If End If 'If ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=2, AutoConta:=AutoConta) Then ' If ObjConta.ValorPolizaDescuadre > 0 Then ' GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") ' End If 'End If End If End If End If importeMovimiento = 0 Case 136 'Otros Conceptos Dinamicos For Each row2 As GridViewRow In GVOtrosConceptos.Rows If row2.FCTextBox("TxtCantidadConcepto").Text.ToDecimal > 0 Then importeMovimiento = row2.FCTextBox("TxtCantidadConcepto").Text.ToDecimal * ValorMultiplicador CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, If(row2.DataKey("TipoMovto").ToString() = "True", True, False), importeMovimiento, importeMovimiento * tipoCambio, row2.DataKey("CveConceptoContable").ToEntero(), Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If End If End If Next importeMovimiento = 0 Case 11 'Anticipo '[IPP] SI ES REFACTURACION LOS ANTICIPOS NO LOS DEBE APLICAR EN EL INGRESO REFACTURADO (VIEJO) If NuevaFactura = 1 And ObjFactura.CveVenta = CveDevolucion Then Exit Select End If If ObjFactura.TipoDocto = "Ing" AndAlso ValorMultiplicador = -1 Then For Each row2 As GridViewRow In GvAntNC.Rows If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 11 Then importeMovimiento = row2.DataKey("Importe").ToString().ToDecimal * ValorMultiplicador '- ((row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / row2.DataKey("TotalAnticipo").ToDecimal) * row2.DataKey("IVAAnticipo").ToDecimal) If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" CveSubProyectoContabilizar = CveSubProyectoVenta If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Exit For Else ViewState("SeGuardoPrePoliza") = True End If End If End If Next End If 'CUANDO APLICAN UNA NOTA DE CREDITO SOBRE UN ANTICIPO If ObjFactura.TipoDocto = "Egs" AndAlso EsNCAmortizacion Then If DtAnticipoAmortizacion IsNot Nothing AndAlso DtAnticipoAmortizacion.Rows.Count > 0 Then For Each RowAnticipo As DataRow In DtAnticipoAmortizacion.Rows Dim CveVentaAnticipo As Integer = RowAnticipo("CveVenta").ToString().ToEntero() importeMovimiento = RowAnticipo("SaldoAnticipo").ToString().ToDecimal If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" CveSubProyectoContabilizar = CveSubProyectoVenta If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento, ConceptoContable, Referencia, Concepto, CveVenta:=CveVentaAnticipo, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Exit For Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If End If 'cuando es anticipo ' cuando es amortización de nota de crédito, y es la nc ' cuando es amortización por descuento, y es el ingreso ' cuando es amortización en cero 'DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 2 AndAlso ObjFactura.TipoDocto.Contiene("Egs") OrElse If DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 1 AndAlso ObjFactura.TipoDocto.Contiene("Ing") OrElse DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero() = 3 Then For Each row2 As GridViewRow In GVAnticipos.Rows If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 3 Then If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then CveIEAnticipo = row2.DataKey("CveIE").ToString().ToEntero() importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal '- ((row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / row2.DataKey("TotalAnticipo").ToDecimal) * row2.DataKey("IVAAnticipo").ToDecimal) If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" CveSubProyectoContabilizar = CveSubProyectoVenta If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=row2.DataKey("CveVenta").ToEntero(), CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEAnticipo, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Exit For Else ViewState("SeGuardoPrePoliza") = True End If End If End If End If Next End If 'Cuando la funcionalidad de amortizacion en PS esta activa If Not ErrorPrepoliza Then DT = TmpDTDetalle.FiltraParametros($"CvePS = {CvePSAmortizacion}") If DT.Rows.Count > 0 Then For Each Row2 As DataRow In DT.Rows importeMovimiento = Math.Abs(Row2("PU").ToString().ToDecimal) CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento * tipoCambio, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If End If importeMovimiento = 0 Case 91 'Amortizacion Nota de Credito Dim Contabilizable As Boolean = If(UsuarioActual.CveEmpresa = 119, False, True) If Not ErrorPrepoliza AndAlso ValorMultiplicador = 1 Then Dim VentaRef As New ClsPaginas.Venta(ObjFactura, UsuarioActual) importeMovimiento = 0 For Each row2 As GridViewRow In GVAnticipos.Rows If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 12 Then If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal Dim Pago As New ClsPaginas.VentaPago Pago.Fecha = Now Pago.FechaDocumentoRelacionado = row2.DataKey("Fecha").ToString().ToDateTime() Pago.ImportePagoVenta = importeMovimiento Pago.ImportePago = importeMovimiento Pago.CveIE = row2.DataKey("CveIE").ToString().ToEntero() Pago.CveMonedaPago = row2.DataKey("CveMoneda").ToString().ToEntero() Pago.TCPago = row2.DataKey("TipoCambioPago").ToString().ToDecimal() Pago.AplicaTraslado = False Pago.Referencia = row2.DataKey("Folio").ToString() Pago.CveVentaAmortizacion = row2.DataKey("CveVenta").ToString().ToEntero() Pago.TipoPago = "NC" Pago.CveClientePago = row2.DataKey("CveCliente").ToString().ToEntero() Pago.Referencia = Referencia ErrorPrepoliza = ClsPaginas.AplicaPrePolizaPagoVenta(VentaRef, Pago, ObjFactura.CvePrePoliza, ObjConta, AplicarConceptoAplicacion:=True) End If End If Next If UsuarioActual.Empresa.Funcionalidad(344) = "1" AndAlso ObjFactura.TipoDocto = "Egs" Then Dim ListaNC As List(Of Modelos.Factura) = Nothing If NCDescuento Then ListaNC = ListaNCDescuento Else ListaNC = ListaRemisionesNC End If If ListaNC IsNot Nothing Then For Each ObjRNC As Modelos.Factura In ListaNC If ObjRNC.TipoDocto = "RNC" Then importeMovimiento = ObjRNC.TotalRemNCAplicado * -1 importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'ACTUALIZA SI LA VENTA FUE MARCADA CON OTRA PARA EL FILTRO DE USADOS If ObjRNC.Num3 > 0 Then If Not ObjVentas.UpdateVentaRNCUsado(ObjRNC.CveVenta, ObjRNC.Num3.ToEntero()) Then ErrorPrepoliza = True End If End If 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, importeMX, 277, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), 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, Importe318, 318, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, SubTotalCalculado, SubTotalCalculado, 150, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=ObjRNC.DtDetalle.MAX("CveClasificacion").ToEntero(), CveSubProyecto:=ObjRNC.CveSubProyecto, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, Contabilizable:=False) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If Else If ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 277, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 278, Referencia, Concepto, CveVenta:=ObjRNC.CveVenta, CveVentaAmortizacion:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), Contabilizable:=False, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Else ErrorPrepoliza = True End If End If importeMovimiento = 0 End If Next End If End If End If importeMovimiento = 0 Case 4 'Venta Clasificacion If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC", "Ant", "Egs", "Dev") Then Dim ConceptoContableAplicar As Integer = 4 Dim CveVentaAplicar As Integer = ObjFactura.CveVenta Dim CveVentaAmortizacionAplicar As Integer = -1 If ObjFactura.TipoDocto.Contiene("Egs") And DdlTipoComprobante.SelectedValue = "Ant" And CveDevolucion > 0 And NuevaFactura = 1 Then ConceptoContableAplicar = 11 CveVentaAplicar = CveDevolucion CveVentaAmortizacionAplicar = ObjFactura.CveVenta End If 'verifico que el AF, tenga valores iguales cuando esté vacío o "-1" Dim drs As DataRow() = TmpDTDetalle.Select(" CveActivoFijo IS NULL") For Each dr As DataRow In drs dr("CveActivoFijo") = "-1" Next TmpDTDetalle.AcceptChanges() DT = TmpDTDetalle.FiltraParametros($"CvePS <> {CvePSAmortizacion}", "", {"CveClasificacion", "CveSubProyecto", "PorcentajeIVA", "CveActivoFijo"}) If DT.Rows.Count > 0 Then 'Se agrega movimiento separado por la cuenta de ventas (ER) For Each Row2 As DataRow In DT.Rows importeMovimiento = (TmpDTDetalle.SUM("TotalImporte", String.Format("CveClasificacion = {0} And CveSubProyecto = {1} AND PorcentajeIVA = {2} AND ISNULL(CveActivoFijo,-1) = {3}", Row2("CveClasificacion"), Row2("CveSubProyecto"), Row2("PorcentajeIVA"), If(Row2("CveActivoFijo").ToString().ToEntero() > 0, Row2("CveActivoFijo").ToString().ToEntero(), -1))).ToString().ToDecimal()) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago Concepto = $"{ObjFactura.SerieFolio} {If(Row2("CveClasificacion").ToString().ToEntero() > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString()}"), "")} - {If(Row2("CveSubProyecto").ToString().ToEntero() > 0, GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString()}"), "Sin SubProyecto Asignado")}" If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'Nota cuando es Nota de crédiot, debe de tomar el devoluciones y rebajas If importeMovimiento <> 0 Then If Row2("CveActivoFijo").ToString().ToEntero() > 0 Then Dim DtAF As DataTable = TmpDT.FiltraParametros($"CveActivoFijo = {Row2("CveActivoFijo")}") If DtAF.Rows.Count > 0 Then For Each RowAF As DataRow In DtAF.FiltraParametros("", "", {"CveActivoFijo", "Obs"}).Rows Dim ImporteCosto As Decimal = DtAF.SUMD("AFValorInicial", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) Dim ImporteDepreciacion As Decimal = DtAF.SUMD("AFDepreciacion", $"CveActivoFijo = {RowAF("CveActivoFijo")}").RoundSQL(2) Dim ImporteC4 As Decimal = importeMovimiento Dim ImporteC4MX As Decimal = importeMX importeMovimiento = ImporteC4 - ImporteCosto + ImporteDepreciacion importeMX = ImporteC4MX - ImporteCosto + ImporteDepreciacion If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, ImporteCosto, (ImporteCosto).RoundSQL, 49, Referencia, $"COSTO {RowAF("Obs")}", CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveActivoFijo:=Row2("CveActivoFijo").ToString().ToEntero(), Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True End If Next End If End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContableAplicar, Referencia, Concepto, CveVenta:=CveVentaAplicar, CveVentaAmortizacion:=CveVentaAmortizacionAplicar, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=Row2("CveSubProyecto").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, PorcentajeImpuesto:=Row2("PorcentajeIVA").ToString().ToDecimal) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If End If importeMovimiento = 0 Case 150 'Descuento sobre ventas If (ObjFactura.TipoDocto.Contiene("Egs", "Dev") AndAlso Not EsNCAmortizacion) OrElse NCDescuento Then Dim ConceptoContableAplicar As Integer = 150 Dim CveVentaAplicar As Integer = ObjFactura.CveVenta Dim CveVentaAmortizacionAplicar As Integer = -1 DT = TmpDTDetalle.FiltraParametros($"CvePS <> {CvePSAmortizacion}", "", {"CveClasificacion", "CveSubProyecto", "PorcentajeIVA"}) If DT.Rows.Count > 0 Then 'Se agrega movimiento separado por la cuenta de ventas (ER) For Each Row2 As DataRow In DT.Rows importeMovimiento = (TmpDTDetalle.SUM("TotalImporte", String.Format("CveClasificacion = {0} And CveSubProyecto = {1} AND PorcentajeIVA = {2}", Row2("CveClasificacion"), Row2("CveSubProyecto"), Row2("PorcentajeIVA"))).ToString().ToDecimal) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago Concepto = $"{ObjFactura.SerieFolio} {If(Row2("CveClasificacion").ToString().ToEntero() > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString()}"), "")} - {If(Row2("CveSubProyecto").ToString().ToEntero() > 0, GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString()}"), "Sin SubProyecto Asignado")}" If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'Nota cuando es Nota de crédiot, debe de tomar el devoluciones y rebajas If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContableAplicar, Referencia, Concepto, CveVenta:=CveVentaAplicar, CveVentaAmortizacion:=CveVentaAmortizacionAplicar, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=Row2("CveSubProyecto").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, PorcentajeImpuesto:=Row2("PorcentajeIVA").ToString().ToDecimal) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If End If importeMovimiento = 0 Case 103 'Descuento If ObjFactura.Descuento <> 0 AndAlso Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") AndAlso (DdlTipoAmortizacionAnticipo.SelectedValue = "-1" OrElse UsuarioActual.CveEmpresa.Contiene(140, 141, 190, 192)) Then importeMovimiento = ObjFactura.Descuento * Multiplicador * ValorMultiplicador importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador * ValorMultiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta DT = TmpDTDetalle.FiltraParametros("", "", {"CveClasificacion", "CveSubProyecto", "PorcentajeIVA"}) If DT.Rows.Count > 0 Then 'Se agrega movimiento separado por la cuenta de ventas (ER) For Each Row2 As DataRow In DT.Rows importeMovimiento = (TmpDTDetalle.SUM("Descuento", String.Format("CveClasificacion = {0} And CveSubProyecto = {1} AND PorcentajeIVA = {2}", Row2("CveClasificacion"), Row2("CveSubProyecto"), Row2("PorcentajeIVA"))).ToString().ToDecimal) * ValorMultiplicador importeMX = importeMovimiento * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago Concepto = $"{ObjFactura.SerieFolio} {If(Row2("CveClasificacion").ToString().ToEntero() > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString()}"), "")} - {If(Row2("CveSubProyecto").ToString().ToEntero() > 0, GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString()}"), "Sin SubProyecto Asignado")}" If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'Nota cuando es Nota de crédiot, debe de tomar el devoluciones y rebajas If importeMovimiento <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, 103, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveVentaAmortizacion:=-1, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=Row2("CveSubProyecto").ToString().ToEntero(), ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, PorcentajeImpuesto:=Row2("PorcentajeIVA").ToString().ToDecimal) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If End If importeMovimiento = 0 Case 8 'Ret IVA por Trasladar If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") AndAlso ObjFactura.CveTipoRetencion <> 4 Then 'SI NO ES RETENCION DE IVA DE SERVICIOS importeMovimiento = ObjFactura.RetIVA * ValorMultiplicador importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then TipoMovimiento = Not TipoMovimiento ConceptoContable = 62 importeMovimiento = importeMovimiento * -1 importeMX = importeMX * -1 End If End If Case 313 'Ret Iva Servicios If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") AndAlso ObjFactura.CveTipoRetencion = 4 Then 'SI TIENE RETENCION DE IVA DE SERVICIOS importeMovimiento = ObjFactura.RetIVA * ValorMultiplicador importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then TipoMovimiento = Not TipoMovimiento ConceptoContable = 314 importeMovimiento = importeMovimiento * -1 importeMX = importeMX * -1 End If End If Case 9 'Ret ISR por Trasladar If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") Then importeMovimiento = ObjFactura.RetISR * ValorMultiplicador importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago CveSubProyectoContabilizar = CveSubProyectoVenta 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then TipoMovimiento = Not TipoMovimiento ConceptoContable = 63 importeMovimiento = importeMovimiento * -1 importeMX = importeMX * -1 End If If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" End If Case 13 'Iva por Trasladar If Not ObjFactura.TipoDocto.Contiene("Rem", "RNC") And ObjFactura.IVA > 0 Then importeMovimiento = ObjFactura.IVA * ValorMultiplicador importeMX = Math.Round(importeMovimiento * tipoCambio * Multiplicador, 2) FechaMovimiento = ObjFactura.FechaPago PorcentajeImpuesto = TmpDT.MAX("PorcentajeIVA").ToDecimal 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then TipoMovimiento = Not TipoMovimiento ConceptoContable = 61 importeMovimiento = importeMovimiento * -1 importeMX = importeMX * -1 End If CveSubProyectoContabilizar = CveSubProyectoVenta If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" End If Case 38 'IEPS por Trasladar If Not ObjFactura.TipoDocto.Contiene("Rem") Then importeMovimiento = ObjFactura.IEPS * ValorMultiplicador importeMX = Math.Round(importeMovimiento * tipoCambio * Multiplicador, 2) FechaMovimiento = ObjFactura.Fecha CveSubProyectoContabilizar = CveSubProyectoVenta 'SI LA FACTURA ESTA PAGADA EN SU TOTALIDAD DEBE REGRESAR EL IMPUESTO If (ObjFacturaNC IsNot Nothing AndAlso ObjFacturaNC.PagadoBancos > 0) AndAlso ObjFactura.TipoDocto = "Dev" Then TipoMovimiento = Not TipoMovimiento ConceptoContable = 39 importeMovimiento = importeMovimiento * -1 importeMX = importeMX * -1 CveIE = ObjFacturaNC.PagadoCveIE End If If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" End If Case 30 'PAGO - BANCOS If DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 AndAlso ObjFactura.TipoDocto <> "Rem" Then For Each DrPago As DataRow In DtPagos.Rows CveIEPago = -1 FolioIE = -1 FolioIE = ObjBancos.GetNextFolio(DrPago("CveCuenta").ToString().ToEntero(), DrPago("CveTipoMovimiento").ToString().ToEntero()) If Not FolioIE > 0 Then ErrorPrepoliza = True Exit For End If 'If DrPago("CveTipoMovimiento").ToString().ToEntero() = 8 Then '13 ' DrPago("Importe") = DrPago("Importe").ToString().ToDecimal - TxtCambio.Text.ToDecimal 'End If CveIEPago = ObjBancos.AddBancos_IE(DrPago("CveCuenta").ToString().ToEntero(), DrPago("CveTipoMovimiento").ToString().ToEntero(), Fecha, FolioIE.ToString(), String.Format("PAGO: {0}", TxtFolio.Text), DrPago("Importe").ToString().ToDouble, DdlMoneda.SelectedValue.ToEntero(), tipoCambio, DrPago("Observaciones").ToString(), "", False, False, -1, ObjFactura.CvePrePoliza, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCorte:=CveCorte, MesesSinIntereses:=DrPago("MesesSinIntereses").ToString().ToEntero(), Modulo:="Ventas/Guardar", CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) If CveIEPago > 0 Then importeMovimiento = DrPago("Importe").ToString().ToDecimal * ValorMultiplicador importeMX = (importeMovimiento * tipoCambio * Multiplicador).RoundSQL CveSubProyectoContabilizar = CveSubProyectoVenta 'MONEDA EXTRANJERA If ObjFactura.CveMoneda > 1 Then 'BANCOS Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 30, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMovimiento, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If 'BANCOS COMPLEMENTARIA If UsaComplementariaClientes Then Dim ImporteComplementaria As Decimal = ((importeMovimiento * tipoCambio) - importeMovimiento).RoundSQL Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 204, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, ImporteComplementaria, 204, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, TipoCambioPago:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True End If End If 'PAGO CLIENTES Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 2, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMovimiento, 2, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If 'PAGO CLIENTES COMPLEMENTARIA If UsaComplementariaClientes Then Dim ImporteComplementaria As Decimal = ((importeMovimiento * tipoCambio) - importeMovimiento).RoundSQL Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 207, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, 0, ImporteComplementaria, 207, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), TipoCambio:=tipoCambio, TipoCambioPago:=tipoCambio, CveSubProyecto:=CveSubProyectoContabilizar, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True End If End If Else 'BANCOS Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 30, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If 'PAGO CLIENTES Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 2, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, importeMovimiento, importeMX, 2, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True Exit For End If End If If ObjFactura.IVA <> 0 Then Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeIVA").ToDecimal 'IVA X TRASLADAR Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 13, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.IVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 13, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If 'IVA PAGADO Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 61, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.IVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 61, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If End If If ObjFactura.IEPS <> 0 Then Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeIEPS").ToDecimal 'IEPS X TRASLADAR Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 38, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If ObjFactura.IEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total) * tipoCambio * Multiplicador, 38, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If 'IEPS PAGADO Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 39, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If ObjFactura.IEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total, ((importeMovimiento * ObjFactura.IEPS) / ObjFactura.Total) * tipoCambio * Multiplicador, 39, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If End If If ObjFactura.RetIVA <> 0 AndAlso ObjFactura.CveTipoRetencion = 4 Then Dim PorcentajeImpuestoPago As Decimal = TmpDT.MAX("PorcentajeRetIVA").ToDecimal 'RETIVA X TRASLADAR 'OBTENER CUENTAS Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 313, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovimiento, (importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 313, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, 314, NombreCliente, $"{ObjFactura.Serie}-{ObjFactura.Folio}", FolioIE.ToString()) If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, (importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total, ((importeMovimiento * ObjFactura.RetIVA) / ObjFactura.Total) * tipoCambio * Multiplicador, 314, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=CveCliente, CveIE:=CveIEPago, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, PorcentajeImpuesto:=PorcentajeImpuestoPago) Then ErrorPrepoliza = True Exit For End If End If Else ErrorPrepoliza = True Exit For End If Next importeMovimiento = 0 End If End Select If (importeMovimiento <> 0 OrElse (importeMovimiento = 0 AndAlso ObjFactura.Total = 0 AndAlso ConceptoContable = 1)) And Not ErrorPrepoliza Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=CveSubProyectoContabilizar, TipoCambio:=tipoCambio, PorcentajeImpuesto:=PorcentajeImpuesto, Contabilizable:=SeContabiliza) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If If ErrorPrepoliza Then Exit For End If Next 'verificar si es garantía total y si el saldo es 0.01 If Me.EsGarantia AndAlso ObjFactura.TipoDocto.Contiene("Ing") AndAlso HdnVentaSaldo.Value.ToDecimal = 0.01D Then Dim SaldoaSaldar As Decimal = 0.01D If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, SaldoaSaldar, SaldoaSaldar, 211, $"{ObjFactura.Serie}-{ObjFactura.Folio}", $"{NombreCliente} {ObjFactura.Serie}-{ObjFactura.Folio}", CveCliente:=ObjFactura.CveCliente, CveVenta:=ObjFactura.CveVenta, CveCuenta:=-1, TipoCambio:=ObjFactura.TipoCambio, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyectoVenta) Then ErrorPrepoliza = True End If If Not ErrorPrepoliza AndAlso Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, SaldoaSaldar, SaldoaSaldar, 2, $"{ObjFactura.Serie}-{ObjFactura.Folio}", $"{NombreCliente} {ObjFactura.Serie}-{ObjFactura.Folio}", CveCliente:=ObjFactura.CveCliente, CveVenta:=ObjFactura.CveVenta, CveCuenta:=-1, TipoCambio:=ObjFactura.TipoCambio, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyectoVenta) Then ErrorPrepoliza = True End If End If End If 'APLICA PAGO SI SELECCIONA IxC If DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then If Not ErrorPrepoliza Then Dim VentaActual As New ClsPaginas.Venta(ObjFactura, UsuarioActual) For Each row2 As GridViewRow In GVAnticipos.Rows If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 66 Then If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal If importeMovimiento <> 0 Then Dim Pago As New ClsPaginas.VentaPago Pago.Fecha = Now Pago.FechaDocumentoRelacionado = row2.DataKey("Fecha").ToString().ToDateTime() Pago.ImportePagoVenta = importeMovimiento Pago.ImportePago = importeMovimiento Pago.CveIE = row2.DataKey("CveIE").ToEntero() Pago.CveMonedaPago = row2.DataKey("CveMoneda").ToEntero() Pago.TCPago = row2.DataKey("TipoCambioPago").ToDecimal() Pago.AplicaTraslado = False Pago.Referencia = row2.DataKey("Folio") Pago.CveVentaAmortizacion = -1 Pago.TipoPago = "I" Pago.CveClientePago = ObjFactura.CveCliente ErrorPrepoliza = ClsPaginas.AplicaPrePolizaPagoVenta(VentaActual, Pago, ObjFactura.CvePrePoliza, ObjConta, AplicarConceptoAplicacion:=True) End If End If End If Next End If End If 'Si es Facturacion de una remision cancelamos, traspasamos saldos y agregamos evento a la bitacora If RemisionesLista.Count > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then 'se verifica que el documento que se está generando sea "Ing", "Ant" If Not ObjFactura.TipoDocto.Contiene("Ing", "Ant") Then ErrorPrepoliza = True ErrorList.Add("No se pueden facturar las remisiones, con ese tipo de comprobante seleccionado") Else 'CANCELACION DE PAGOS DE REMISIONES If ObjFactura.DtPagosFacturaGlobal IsNot Nothing Then For Each DrPago As DataRow In ObjFactura.DtPagosFacturaGlobal.Rows Dim ventaRef As ClsPaginas.Venta = Nothing Using ObjFacturaRef As New Modelos.Factura(UsuarioActual, DrPago("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDTDetalle:=False, VerificaAlmacen:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False) ventaRef = New ClsPaginas.Venta(ObjFacturaRef, UsuarioActual) End Using If ventaRef IsNot Nothing Then Dim Importe As Decimal = DrPago("Importe").ToString().ToDecimal() * -1 Dim Pago As New ClsPaginas.VentaPago Pago.Fecha = Now Pago.FechaDocumentoRelacionado = DrPago("FechaDocumento").ToString().ToDate Pago.ImportePagoVenta = Importe Pago.ImportePago = Importe Pago.CveIE = DrPago("CveIE").ToString().ToEntero() Pago.CveMonedaPago = DrPago("CveMoneda").ToString().ToEntero() Pago.TCPago = DrPago("TipoCambio").ToString().ToDecimal() Pago.AplicaTraslado = False Pago.Referencia = DrPago("Folio").ToString() Pago.CveVentaAmortizacion = -1 Pago.TipoPago = DrPago("TipoPago").ToString() Pago.CveClientePago = ObjFactura.CveCliente ErrorPrepoliza = ClsPaginas.AplicaPrePolizaPagoVenta(ventaRef, Pago, ObjFactura.CvePrePoliza, ObjConta, AplicarConceptoAplicacion:=False) Else ErrorPrepoliza = True End If If ErrorPrepoliza Then Exit For End If Next End If For Each CveRemision As Integer In RemisionesLista If Not ObjConta.TraspasarSaldosRemision(CveRemision, ObjFactura.CvePrePoliza, ObjFactura.CveVenta) Then ErrorPrepoliza = True End If If CveRemision > 0 Then If ObjVentas.GetVenta(CveRemision, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then Dim SerieFolioRem As String = ObjVentas.DtResultados.Rows(0)("SerieFolio").ToString() 'Factura If Not ObjEventos.AddEventoBitacora($"Venta facturada de Remisión: {SerieFolioRem}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then ErrorPrepoliza = True End If Else ErrorPrepoliza = True End If Else ErrorPrepoliza = True End If 'Remision If Not ObjEventos.AddEventoBitacora($"Remisión facturada en Venta: {ObjFactura.SerieFolio}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveRemision) Then ErrorPrepoliza = True End If Next 'TRASPASO DE PAGOS DE REMISIONES A FACTURA GLOBAL If ObjFactura.DtPagosFacturaGlobal IsNot Nothing Then Dim VentaActual As New ClsPaginas.Venta(ObjFactura, UsuarioActual) For Each DrPago As DataRow In ObjFactura.DtPagosFacturaGlobal.Rows Dim Importe As Decimal = DrPago("Importe").ToString().ToDecimal() Dim Pago As New ClsPaginas.VentaPago Pago.Fecha = Now Pago.FechaDocumentoRelacionado = DrPago("FechaDocumento").ToString().ToDate Pago.ImportePagoVenta = Importe Pago.ImportePago = Importe Pago.CveIE = DrPago("CveIE").ToString().ToEntero() Pago.CveMonedaPago = DrPago("CveMoneda").ToString().ToEntero() Pago.TCPago = DrPago("TipoCambio").ToString().ToDecimal() Pago.AplicaTraslado = False Pago.Referencia = DrPago("Folio").ToString() Pago.CveVentaAmortizacion = DrPago("CveVenta").ToString().ToEntero() Pago.TipoPago = DrPago("TipoPago").ToString() Pago.CveClientePago = ObjFactura.CveCliente ErrorPrepoliza = ClsPaginas.AplicaPrePolizaPagoVenta(VentaActual, Pago, ObjFactura.CvePrePoliza, ObjConta, AplicarConceptoAplicacion:=False) If ErrorPrepoliza Then Exit For End If Next End If End If End If 'REGRESA SALDO A LAS REMISIONES QUE SE FACTURARON EN EL INGRESO QUE SE ESTA CANCELANDO If ObjFactura.TipoDocto = "Ing" And ValorMultiplicador = -1 AndAlso NuevaFactura <> 1 AndAlso Not SeCancelaRemisionProceso Then ' se debe de excluir cuando es refacturación If ObjVentas.GetRemisionesRelacionadas(ObjFactura.CveVenta, ObjFactura.TipoDocto) AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then For Each Dr As DataRow In ObjVentas.DtResultados.Rows Dim Selecciono As Boolean = False If ChkCanRem.Checked Then For Each Gvr As GridViewRow In GvCancelarRemisiones.Rows If Gvr.DataKey("CveVenta").ToEntero() = Dr("CveVenta").ToString().ToEntero() AndAlso Gvr.FCCheckBox("ChkCancelarRemision").Checked Then Selecciono = True End If Next End If If Not Selecciono Then If Not ObjConta.TraspasarSaldosRemision(Dr("CveVenta").ToString().ToEntero(), ObjFactura.CvePrePoliza, ObjFactura.CveVenta, 1) Then ErrorPrepoliza = True End If 'Remision If Not ObjEventos.AddEventoBitacora($"Facturación cancelada en: {TxtFolio.Text}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Dr("CveVenta").ToString().ToEntero()) Then ErrorPrepoliza = True End If End If Next End If End If If NuevaFactura = 1 AndAlso TotalOriginal > TxtTotal.Text.ToDouble AndAlso ObjEventos IsNot Nothing Then If Not ObjEventos.AddEventoBitacora($"Factura a menor precio de la factura origen.", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=ObjFactura.CveVenta) Then ErrorPrepoliza = True Else Alert("Factura a menor precio de la factura origen.", TipoMensaje.MsgAdvertencia) End If End If 'Simplificacion de PrePolizas 'If ObjFactura.TipoDocto.Contiene("Egs", "Dev") OrElse SimplificarPrePoliza Then ' If Not ObjConta.PrePolizaSimplificacion(ObjFactura.CvePrePoliza, UsuarioActual.CveEmpresa) Then ' Alert("No se pudo simplificar los movimientos", TipoMensaje.MsgError) ' End If 'End If Dim ModalidadRefacturacion As Integer = UsuarioActual.Empresa.Funcionalidad(586).ToEntero() 'REFACTURACION CON PAGOS, DEBE CANCELAR SALDOS DEL DOCUMENTO ANTERIOR Y TRASPASAR PAGOS AL NUEVO If ModalidadRefacturacion = 2 AndAlso ObjFactura.TipoDocto.Contiene("Ing", "Ant") AndAlso ObjFactura.NuevaFactura = 1 Then If Not ObjConta.TraspasarSaldosPrePolizasRefacturacion(ObjFacturaNC.CveVenta, ObjFactura.CveVenta, ObjFactura.CvePrePoliza, CvePlantilaPoliza, UsuarioActual.CveEmpresa) Then ErrorList.Add("Ocurrió un error al traspasos saldos en refacturación") End If Else 'EN CASO DE SER REFACTURACION DE ANTICIPO SE ACTUALIZAN LAS VENTAS APLICADAS HACIA EL NUEVO If NuevaFactura = 1 AndAlso CveDevolucion > 0 AndAlso ObjFactura.TipoDocto.Contiene("Ant") Then If Not ObjVentas.TraspasaVentasAplicadasAnt(ObjFactura.CveVenta, CveDevolucion, UsuarioActual.CveEmpresa, ObjFactura.CvePrePoliza) Then ErrorPrepoliza = True End If End If End If 'Impuestos Locales If Not ErrorPrepoliza Then If GuardarVentaImpuestosLocales(ObjVentas, ObjConta, ObjFactura, ValorMultiplicador:=ValorMultiplicador) Then ErrorPrepoliza = True ErrorList.Add("Ocurrio un error al Guardar Impuestos Locales") End If End If 'If Not ErrorPrepoliza AndAlso UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso ObjFactura.TipoDocto = "Ing" AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "4" AndAlso ObjFactura.CveMoneda = 1 Then ' For Each row2 As GridViewRow In GVAnticipos.Rows ' If row2.DataKey("CveConceptoContable").ToString().ToEntero() = 12 Then ' If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then ' importeMovimiento = row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal '- ((row2.FCTextBox("TxtAnticipo" & row2.RowIndex).Text.ToDecimal / row2.DataKey("TotalAnticipo").ToDecimal) * row2.DataKey("IVAAnticipo").ToDecimal) ' Dim ImporteAnticipo As Decimal = importeMovimiento ' Dim CveMonedaAnticipo As Integer = row2.DataKey("CveMoneda").ToString().ToEntero() ' Dim ObjFacturaRef As New Modelos.Factura(UsuarioActual, row2.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDTDetalle:=False, VerificaAlmacen:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False) ' Dim ventaRef As New Venta(ObjFacturaRef, UsuarioActual) ' ObjFacturaRef.Dispose() ' If ventaRef.TipoDocto = "Dev" Then ' Dim Pago As New VentaPago ' Pago.Fecha = ObjFactura.Fecha ' Pago.FechaDocumentoRelacionado = ObjFactura.Fecha ' Pago.ImportePagoVenta = importeMovimiento ' Pago.ImportePago = importeMovimiento ' Pago.CveMonedaPago = ObjFactura.CveMoneda ' Pago.TCPago = ObjFactura.TipoCambio ' Pago.TipoPago = "NC" ' Pago.CveVentaAmortizacion = ObjFactura.CveVenta 'Dr("CveVenta").ToString().ToEntero() ' Pago.AplicaTraslado = False ' Pago.Referencia = Concepto ' 'Pago.CveConceptoPago = 251 ' ErrorPrepoliza = AplicaPrePolizaPagoVenta(ventaRef, Pago, ObjFactura.CvePrePoliza, ObjConta) ' Else ' ErrorPrepoliza = True ' ErrorList.Add("No se puede aplicar un documento diferente a una devolución") ' End If ' End If ' End If ' Next 'End If 'If ObjConta.ValidacionesPrePoliza(ObjFactura.CvePrePoliza, UsuarioActual, Opcion:=2, AutoConta:=AutoConta) Then ' If ObjConta.ValorPolizaDescuadre > 0 Then ' If ObjConta.ValorPolizaDescuadre = 2 Then ' ErrorPrepoliza = True ' Alert(ObjConta.MensajePolizaDescuadre, TipoMensaje.MsgError) ' End If ' 'ErrorPrepoliza = True ' GuardaLogAD($"Ventas/Ventas-ProcesoPrePolizas | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{ObjFactura.CvePrePoliza}", "LogPrePolizas") ' 'SIRVE PARA VER LA PREPOLIZA QUE SE VALIDA ' 'If ObjConta.GetPrePolizasDetalle(ObjFactura.CvePrePoliza) Then ' ' Dim DtTest = ObjConta.DtResultados ' 'End If ' End If 'Else ' ErrorPrepoliza = True 'End If Return ErrorPrepoliza Catch ex As Exception GuardaLog("GuardaPreP." & ex.ToString()) Return True End Try End Function Private Function GuardarVentaInventarios(ObjInventario As ClsInventarios, ObjVentas As ClsVentas, ObjConta As ClsContabilidad, factura As Modelos.Factura, TmpDTDetalle As DataTable) As Boolean Dim OcurrioError As Boolean = False Try If UsuarioActual.Empresa.UsaInventarios AndAlso factura.TipoDocto.Contiene("Ing", "Egs", "Rem", "Dev") Then If RemisionesLista.Count > 0 AndAlso factura.TipoDocto.Contiene("Ing", "Rem") Then For Each CveRemision As Integer In RemisionesLista 'El almacen general es el Primer Almacen de Material en la Sucursal If Not TraspasoAlmacen(ObjInventario, ObjVentas, CveRemision, ObjConta, True, 9, TmpDTDetalle) Then OcurrioError = True ErrorList.Add("Ocurrió un error al verificar inventario de remisiones.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") ModExtensiones.GuardaLog("Ocurrió un error al verificar inventario de remisiones.Revise su factura y cualquier detalle comuníquese a Soporte Técnico: CveVenta:" & CveRemision & " ") Exit For End If Next End If If DtPedidosPS IsNot Nothing AndAlso factura.TipoDocto = "Ing" Then If Not TraspasoAlmacenPedido(ObjInventario, ObjVentas, Me.CvePedido, ObjConta, True, 9, TmpDTDetalle) Then OcurrioError = True ErrorList.Add("Ocurrió un error al verificar inventario de pedidos.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") ModExtensiones.GuardaLog("Ocurrió un error al verificar inventario de pedidos.Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If 'EN ECONOLLANTAS DEBE REALIZAR SIEMPRE LA SALIDA DE ALMACEN If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso factura.TipoDocto.Contiene("Ing", "Egs", "Rem") Then For Each GvRow As GridViewRow In GvInv.Rows If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCCheckBox("cbInv").Checked = True End If Next End If If factura.TipoDocto.Contiene("Ing", "Dev") AndAlso DivAlmacen.Visible AndAlso GvInv.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("cbInv").Checked) > 0 Then Dim Filtro As String = "" Select Case factura.TipoDocto Case "Ing" Filtro = "CveConcepto IN (3,40)" Case "Dev" Filtro = "CveConcepto IN (3,40)" End Select Dim CveConceptoAlmacen As Integer = 3 If factura.TipoDocto = "Dev" Then CveConceptoAlmacen = 18 End If Dim CveAlmacen As Integer = ddlAlmacen.SelectedValue.ToEntero() If CveAlmacen <= 0 Then OcurrioError = True ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
    No ha seleccionado ningun almacen o no tiene permiso para el almacen de esta sucursal.") End If Dim CveMovimientoInventario As Integer = ObjInventario.AddMovimiento(CveAlmacen, CveConceptoAlmacen, factura.CveMoneda, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, Modulo:="Vta/E1") If CveMovimientoInventario <= 0 Then OcurrioError = True ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") Else Dim Mensaje As String = "" Dim i As Integer = 0 Dim Cantidad As Decimal Dim CveUnidad As Integer Dim CveProducto As Integer Dim Existencia As Double Dim PU As Decimal = 0 Dim DtEquivalencias As DataTable For Each Dr As DataRow In DtInv.Rows If GvInv.Rows(i).FCCheckBox("cbInv").Checked Then CveProducto = Dr("CvePS").ToString().ToEntero() CveUnidad = Dr("CveUM").ToString().ToEntero() Cantidad = Dr("Cantidad").ToString().ToDecimal Dim AplicaSeccion As Boolean = CBool(GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CveProducto).FiltroPrimeroValor("AplicaSeccion")) If Dr("CveTipoInvPS").ToString().ToEntero() = 5 And Dr("Serie").ToString() = "" Then OcurrioError = True ErrorList.Add("Se deben especificar las Series de los productos de almacén") Exit For End If If CveConceptoAlmacen = 3 AndAlso UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 140}) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing") AndAlso Dr("EntregaDirecta").ToString().ToEntero() < 1 Then Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, UsuarioActual.CveEmpresa, CveAlmacen, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1, BuscarEnTabla:=BuscarEnTabla) If Existencia < Cantidad Then OcurrioError = True ErrorList.Add($"No cuenta con la cantidad suficiente en inventario del producto {Dr("CodigoPS")} .Cuenta con {Existencia.FormatoNumero(2)}.") Exit For End If End If If UsuarioActual.CveEmpresa = 1 Then DtEquivalencias = New DataTable DtEquivalencias = GlobalDTProductosServiciosEquivalencias(CveProducto, -1, UsuarioActual.CveEmpresa) Dim CveUnidadBase As Integer = DtEquivalencias.FiltroPrimeroValor("CveUM", "UnidadBase = 'True'").ToEntero() Dim drUMBase As DataRow = DtEquivalencias.FiltroPrimero("UnidadBase = 'True'") 'SI LA UNIDAD ACTUAL NO ES LA BASE SACA PROPORCION (EQUIVALENTE) If CveUnidadBase <> CveUnidad Then ' LO QUE PUSE LO QUE VALE UNIDAD BASE LO QUE VALE UNIDAD SELECCIONADA Cantidad = Dr("Cantidad").ToString().ToDecimal * drUMBase("Cantidad").ToString().ToDecimal / DtEquivalencias.FiltraParametros(String.Format("CveUM = {0}", CveUnidad)).Rows(0)("Cantidad").ToString().ToDecimal CveUnidad = CveUnidadBase End If End If If CveProducto > 0 Then 'SI ES ENTRADA DEBE TENER EL COSTO DE LA SALIDA If CveConceptoAlmacen.Contiene(18) Then Dim DtExistencias As DataTable = Nothing If ObjInventario.GetInv_Mov(Me.CveVentaDevolucion, UsuarioActual.CveEmpresa) Then DtExistencias = ObjInventario.DtResultados.FiltraParametros($"CvePS Is Not NULL AND {Filtro}") End If Dim drPU As DataRow = DtExistencias.FiltroPrimero($"CvePS = {Dr("CvePS")} AND CveUM = {Dr("CveUM").ToString.ToEntero()}") If drPU IsNot Nothing Then PU = drPU("PU").ToString.ToDecimal Else 'OBTENGO EL ÚLTIMO COSTO Dim ObjInventarios As New ClsInventarios If ObjInventarios.GetUltimoCosto(UsuarioActual.CveEmpresa, Dr("CvePS").ToString.ToEntero) Then Dim drcosto As DataRow = ObjInventarios.DtResultados.FiltroPrimero("") If drcosto IsNot Nothing Then PU = drcosto("UltimoCosto").ToString.ToDecimal End If End If ObjInventarios.Dispose() If PU <= 0 Then 'sino se encontró valor, manda mensaje ErrorList.Add("Ocurrió un error al obtener el costo.
    ") OcurrioError = True Exit For End If End If End If Dim CveSeccionAlmacen As Integer = -3 'If AplicaSeccion Then CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, CveAlmacen, CveProducto).FiltroPrimeroValor("CveSeccionAlmacen", "").ToEntero Dim Lote As String = "-1" Dim FCaducidad As Date = MinFecha If GvInv.Rows(i).FCDropDownList("DdlCaducidadProducto") IsNot Nothing AndAlso GvInv.Rows(i).FCDropDownList("DdlCaducidadProducto").Visible Then Dim ArrayCaducidad As String() = GvInv.Rows(i).FCDropDownList("DdlCaducidadProducto").SelectedValue.Split("|"c) Lote = ArrayCaducidad(0) FCaducidad = ArrayCaducidad(1).ToDate End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, Serie:=Dr("Serie").ToString(), Lote:=Lote, FechaCaducidad:=FCaducidad, CveSeccionAlmacen:=CveSeccionAlmacen, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then OcurrioError = True ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
    ") Exit For End If Else OcurrioError = True ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
    ") Exit For End If End If PU = 0 i = i + 1 Next 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN If Not OcurrioError Then Dim DtCostos As DataTable = Nothing Dim ValorInventario As Decimal = 0 Dim TotalCosto As Decimal = 0 Dim TipoMovto68 As Boolean = True Dim TipoMovto69 As Boolean = False If CveConceptoAlmacen.Contiene(18) Then TipoMovto68 = False TipoMovto69 = True End If If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) Then DtCostos = ObjInventario.DtResultados TotalCosto = DtCostos.SUMD("Total").RoundSQL 'Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion", "CveSubProyecto", "SubProyecto"}) Dim GroupBycostos As String() = {"CveClasificacion", "CveSubProyecto", "SubProyecto"} Dim tmpCostos As DataTable = DtCostos.GroupByDT("", "", {GroupBycostos}, SumColumns:={"Total"}).FiltraParametros("GroupADSType = 1") If tmpCostos.Rows.Count > 0 Then Dim TotalCostoAcumulado As Decimal = 0 Dim cont As Integer = 1 Dim tCveSubProyecto As Integer = factura.CveSubProyecto 'Se agrega movimiento separado por la cuenta de ventas (ER) For Each RowInv As DataRow In tmpCostos.Rows ValorInventario = RowInv("Total").ToString.ToDecimal.RoundSQL 'ValorInventario =tmpCostos.SUMD("") 'DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL TotalCostoAcumulado += ValorInventario If UsuarioActual.CveEmpresa <> 119 Then tCveSubProyecto = RowInv("CveSubProyecto").ToString.ToEntero() 'cuando es el último movimiento y hay diferencias en los importes If cont = tmpCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, TipoMovto69, ValorInventario, ValorInventario, 69, factura.SerieFolio, factura.SerieFolio, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveSubProyecto:=tCveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero(), CveMovimientoAlmacen:=CveMovimientoInventario) Then OcurrioError = True End If cont += 1 Next End If 'If TotalCosto <> 0 Then If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, TipoMovto68, TotalCosto, TotalCosto, 68, factura.SerieFolio, factura.SerieFolio, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=factura.CveSubProyecto) Then OcurrioError = True ErrorList.Add("Ocurrió un error al guardar movimiento de almacen.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If 'E119, verifica si la salida está con ps de importación para que se guarde el pedimento 'If UsuarioActual.CveEmpresa = 119 AndAlso factura.TipoDocto.Contiene("Ing") Then ' 'If ObjInventario.GetVentasPedimento(CveVenta, UsuarioActual.CveEmpresa) Then ' ' Dim dttped As DataTable = ObjInventario.DtResultados ' ' For Each drt As DataRow In dttped.FiltraParametros("NumeroPedimento <> ''").Rows ' ' ObjVentas.UpdateVentasDetalleNumeroPedimento(factura.CveVenta, drt("CveVentaDetalle").ToString.ToEntero, drt("NumeroPedimento").ToString) ' ' Next ' 'End If 'End If Else OcurrioError = True ErrorList.Add("Ocurrió un error al consultar los movimientos de almacen.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If factura.Inv_CveMovimiento = CveMovimientoInventario factura.Inv_ValorInventario = ValorInventario End If 'REPLICAR MOVTO GENERADO If UsuarioActual.CveEmpresa = 199 AndAlso factura.Inv_CveMovimiento > 0 Then If Not ObjInventario.ReplicarMovtoEmpresa(UsuarioActual.CveEmpresa, factura.Inv_CveMovimiento) Then ErrorList.Add("Ocurrió un error al replicar el movimiento.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If End If 'DEBE GENERAR MOVIMIENTO SI SE FACTURARON PRODUCTOS, O NO SE REALIZA UNA REFACTURACION Dim DebeGenerarMovimiento As Boolean = TmpDT.COUNT("CvePS", "CveTipoPS = 2") > 0 AndAlso (NuevaFactura <> 1) 'VERIFICA QUE SE REALIZO EL MOVIMIENTO DE ALMACEN If Not OcurrioError AndAlso DebeGenerarMovimiento AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso factura.TipoDocto.Contiene("Ing", "Rem") Then If Not (ObjInventario.GetInv_Mov(factura.CveVenta, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0) Then OcurrioError = True ErrorList.Add("Ocurrió un error al aplicar el inventario.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If End If If UsuarioActual.CveEmpresa <> 189 AndAlso UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso factura.TipoDocto.Contiene("Rem") AndAlso DivAlmacen.Visible AndAlso GvInv.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("cbInv").Checked) > 0 Then Dim DebeGenerarMovimiento As Boolean = TmpDTDetalle.COUNT("CvePS", "CveTipoPS = 2") > 0 If DebeGenerarMovimiento Then Dim CveAlmacenSalida As Integer = ddlAlmacen.SelectedValue.ToEntero() Dim CveAlmacenExA As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=10).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={DdlSubProyectoDatos.SelectedValue}").ToEntero() Dim CveRemision As Integer = factura.CveVenta Dim CveMoneda As Integer = DdlMoneda.SelectedValue.ToEntero() Dim DtProductos As DataTable = TmpDTDetalle.FiltraParametros("CveTipoPS = 2") Dim MovDetalle As DataTable = New DataTable() MovDetalle.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) MovDetalle.Columns.Add(New DataColumn("CveUM", GetType(Integer))) MovDetalle.Columns.Add(New DataColumn("CvePS", GetType(Integer))) MovDetalle.Columns.Add(New DataColumn("PU", GetType(Decimal))) MovDetalle.Columns.Add(New DataColumn("Serie", GetType(String))) MovDetalle.Columns.Add(New DataColumn("Lote", GetType(String))) MovDetalle.Columns.Add(New DataColumn("FechaCaducidad", GetType(DateTime))) MovDetalle.Columns.Add(New DataColumn("CveVentaDetalle", GetType(Integer))) For Each RowPS As DataRow In DtProductos.Rows Dim RowInv As DataRow = MovDetalle.NewRow RowInv("Cantidad") = RowPS("Cantidad").ToString().ToDecimal() RowInv("CveUM") = RowPS("CveUM").ToString().ToEntero() RowInv("CvePS") = RowPS("CvePS").ToString().ToEntero() RowInv("PU") = 0 RowInv("Serie") = "" RowInv("Lote") = "" RowInv("FechaCaducidad") = MinFecha RowInv("CveVentaDetalle") = RowPS("CveVentaDetalle").ToString().ToEntero() MovDetalle.Rows.Add(RowInv) Next 'Le damos salida de apartado por traspaso Dim CveMovimientoSalidaPorTraspaso As Integer = GenerarMovimientoAlmacen(ObjInventario, MovDetalle, CveAlmacenSalida, 8, CveMoneda, CveRemision, AplicaMovimientoDetalleEntrada:=False, ObjConta:=ObjConta, CveAlmacenDestino:=CveAlmacenExA, MovimientoPrePoliza:=False) If Not CveMovimientoSalidaPorTraspaso > 0 Then OcurrioError = True End If Dim CveMovimientoEntrada As Integer = -1 Dim TotalPrePoliza As Decimal = 0 'Le damos entrada al general por traspaso If Not OcurrioError Then If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaPorTraspaso, UsuarioActual.CveEmpresa) Then MovDetalle = ObjInventario.DtResultados.Copy() TotalPrePoliza = MovDetalle.SUMD("Total").RoundSQL(2) End If If Not OcurrioError Then CveMovimientoEntrada = GenerarMovimientoAlmacen(ObjInventario, MovDetalle, CveAlmacenExA, 9, CveMoneda, CveRemision, CveMovimientoRelacionado:=CveMovimientoSalidaPorTraspaso, AplicaMovimientoDetalleEntrada:=False, ObjConta:=ObjConta, MovimientoPrePoliza:=False) If CveMovimientoEntrada <= 0 Then OcurrioError = True End If End If End If 'VERIFICA QUE SE REALIZO EL MOVIMIENTO DE ALMACEN If Not OcurrioError Then If Not (ObjInventario.GetInv_Mov(factura.CveVenta, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0) Then OcurrioError = True ErrorList.Add("Ocurrió un error al verificar inventario.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If If Not OcurrioError Then If ContabilizaMovimientoAlmacen(ObjConta, NowADS(), ObjFactura.SerieFolio, "Ventas/Rem", CveMovimientoSalidaPorTraspaso, CveMovimientoEntrada, TotalPrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, False) <= 0 Then OcurrioError = True End If End If If Not OcurrioError Then 'REPLICAR MOVTO GENERADO If UsuarioActual.CveEmpresa = 199 AndAlso CveMovimientoSalidaPorTraspaso > 0 Then If Not ObjInventario.ReplicarMovtoEmpresa(UsuarioActual.CveEmpresa, CveMovimientoSalidaPorTraspaso) Then ErrorList.Add("Ocurrió un error al replicar el movimiento.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If End If End If End If End If Catch ex As Exception OcurrioError = True OnError("Ocurrió un error al guardar el inventario", ex) End Try Return OcurrioError End Function Private Sub GuardarVentaEstimaciones(ObjContr As ClsContratos, factura As Modelos.Factura) Dim Str As New StringBuilder For Each gvr As GridViewRow In GvEst.Rows If gvr.FCCheckBox("Chk").Checked Then Str.AppendFormat("{0},", gvr.DataKey("CveContratoAvance")) End If Next 'debe de ser por contrato el movimiento If Str.Length > 0 Then If Not ObjContr.AddEstimaciones(CveContrato, factura.Fecha, -1, factura.CveVenta, Str.ToString(), factura.CveUsuario, factura.CveEmpresa) Then ErrorList.Add("Ocurrió un error al agregar la estimación a la Factura.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") End If End If End Sub 'Private Sub GuardarVentaAC(ObjVentas As ClsVentas, factura As Modelos.Factura, Msgok As StringBuilder) ' If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then ' If factura.TipoDocto.Contiene("Ing", "Egs", "OP", "Com") Then ' Dim IDPoliza As Modelos.RetornoPolizaConta = GenerarPolizaAC(ObjAC, factura) ' If IDPoliza.IdPoliza > 0 Then ' If ObjVentas.UpdateVentaPrePoliza(IDPoliza.IdPoliza, IDPoliza.FolioPoliza, factura.CvePrePoliza, factura.CveVenta, factura.CveEmpresa) Then ' 'Si se facturó la cotización hay que vincular la venta ' Msgok.AppendFormat("Abono Registrado Correctamente.

    Ver Poliza", IDPoliza) ' End If ' Else ' ErrorList.Add("Ocurrió un error al generar A.C. en la Factura.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") ' End If ' Else ' Msgok.Append("Movimiento Registrado Correctamente.

    ") ' End If ' End If 'End Sub Private Function GuardarVentaImpuestosLocales(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, Factura As Modelos.Factura, Optional ValorMultiplicador As Integer = 1) As Boolean Dim ErrorPrepoliza As Boolean = False If Factura.DtImpuestosLocales IsNot Nothing AndAlso Factura.CvePrePoliza > 0 AndAlso Not Factura.TipoDocto.Contiene("Cot", "Rem") Then Dim Importe As Decimal Dim Concepto As String Dim tipoCambio As Decimal Dim CveSubProyectoContabilizar As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() For Each RowIL As DataRow In Factura.DtImpuestosLocales.Rows If RowIL("TipoImpuesto").ToString().ToEntero() > 0 Then Importe = RowIL("Importe").ToString().ToDecimal * ValorMultiplicador Concepto = ViewState("VentaFolio").ToString() If ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio > 0 Then tipoCambio = Factura.TipoCambio ElseIf ObjFactura.CveMoneda = 2 AndAlso ObjFactura.TipoCambio <= 1 Then If UsuarioActual.CveEmpresa.Contiene(13, 83) Then tipoCambio = GlobalTipoCambio(Factura.Fecha.AddDays(-1)).ToString().ToDecimal Else tipoCambio = GlobalTipoCambio(Factura.Fecha).ToString().ToDecimal End If Else tipoCambio = 1 End If Select Case RowIL("TipoImpuesto").ToString() Case "1" If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, If(Factura.TipoDocto.Contiene("Egs"), True, False), Importe, Importe * tipoCambio, 27, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Case "3" If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, If(Factura.TipoDocto.Contiene("Egs"), True, False), Importe, Importe * tipoCambio, 116, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Case "4" If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, If(Factura.TipoDocto.Contiene("Egs"), True, False), Importe, Importe * tipoCambio, 58, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If Case "5" If Not ObjConta.AddPrePolizasDetalle(Factura.CvePrePoliza, If(Factura.TipoDocto.Contiene("Egs"), False, True), Importe, Importe * tipoCambio, 27, Concepto, Concepto, CveVenta:=Factura.CveVenta, CveCliente:=Factura.CveCliente, CveSubProyecto:=CveSubProyectoContabilizar) Then ErrorPrepoliza = True End If End Select End If Next End If Return ErrorPrepoliza End Function #End Region #Region " VISTA PREVIA NEW " Private Sub VistaPreviaNew() If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana(""/Ventas/PopUpBuscarClientes.aspx?Opt=Fact"", 800, 547, ""N"", ""PopUpBuscar"")") Exit Sub End If Dim TipoDoctoVistaPrevia As String = "" If CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso BtnsFacturar.Visible = True Then TipoDoctoVistaPrevia = "Ing" End If CalculaTotalesVenta(RecalculaImpuestosLocales:=False, RecalcularTotalOriginal:=False) CreaObjetosVenta(True, TipoDoctoVistaPrevia:=TipoDoctoVistaPrevia) If ObjFactura Is Nothing Or (ObjFactura.Cliente Is Nothing And Not CveEmpresaCRM > 0) Then Alert("Ocurrió un error al procesar los datos para la vista previa. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgError) ObjFactura = Nothing Exit Sub End If Dim CartaPorte As Modelos.MSubReportData = Nothing If UsuarioActual.CveEmpresa = 13 Then CartaPorte = New Modelos.MSubReportData() CartaPorte.Parametros.Add(New ReportParameter($"TieneCartaPorte", "False")) End If Dim tNombreSugerido As String = "Vista Previa - Factura" Select Case DdlTipoComprobante.SelectedValue Case "Cot" tNombreSugerido = "Vista Previa - Cotización" Case "Egs" tNombreSugerido = "Vista Previa - Egreso" Case "Ant" tNombreSugerido = "Vista Previa - Anticipo" End Select tNombreSugerido = tNombreSugerido & " - " & LblSerie.Text & "-" & TxtFolio.Text ImprimirbytesPDF(PdfFactura(ObjFactura, Guardar:=False, SubReportData:=CartaPorte), tNombreSugerido, "PDF") End Sub #End Region #Region "¡ P D F R E P O R T V I E W E R !" ''' ''' Generación y envío de correo de factura, UsarDescargaDesdePopUpVerFactura si se va realizar a travez de un thread ''' ''' ''' ''' ''' ''' ''' Private Sub GeneraPDFFactura(EnviaCorreo As Boolean, Factura As Modelos.Factura, UsuarioActual As Usuario, strURLHOST As String, Optional CorreoCRM As String = "", Optional UsarDescargaDesdePopUpVerFactura As Boolean = True) 'GUARDA PDF Dim LocalSerieFolio As String = String.Empty Dim LocalTipoDocto As String = String.Empty 'TIMBRADO NUEVO Try If UsarDescargaDesdePopUpVerFactura Then DescargarFactura(Factura.CveVenta, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario, Regenerar:=True, strURLHOST:=strURLHOST) Else GenerarPDFVenta(Factura.CveVenta, AplicaPagare:="1", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) End If Catch ex As Exception OnError("Ocurrió un error al generar el PDF", ex) End Try Dim ErrorCorreo As Boolean = False If EnviaCorreo Then If Factura IsNot Nothing Then 'MANDA CORREO If EnviaCorreo Then LocalSerieFolio = Factura.SerieFolio LocalTipoDocto = Factura.TipoDocto Dim ArchivoAdjunto As String = "" Dim ArchivoXML As String = String.Format("{0}XML\{1}\{2}.xml", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) Dim ArchivoPDF As String = String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) If Adjunto <> "" Then ArchivoAdjunto = String.Format("{0}Ventas\{1}", UsuarioActual.Empresa.Ruta, Adjunto) End If Try Dim FIXML As New FileInfo(ArchivoXML) Dim FIPDF As New FileInfo(ArchivoPDF) If FIXML.Exists AndAlso FIPDF.Exists Then MandaMails(UsuarioActual, CveVenta, Factura.TipoDocto, LocalSerieFolio, EnviaCorreo, ArchivoXML, ArchivoPDF, ArchivoAdjunto, CorreoCRM) Else ErrorCorreo = True End If Catch ex As Exception ErrorCorreo = True End Try End If Else ErrorCorreo = True End If If ErrorCorreo Then Dim ObjVentas As New ClsVentas(UsuarioActual:=UsuarioActual) If EnviaCorreo Then ObjVentas.UpdateVentaMail(3, CveVenta) Else ObjVentas.UpdateVentaMail(0, CveVenta) End If ObjVentas.Dispose() End If End If End Sub Private Sub GeneraPDFCotizacion(EnviaCorreo As Boolean, Optional CorreoContactoCRM As String = "", Optional pdfCRM As Byte() = Nothing, Optional SerieFolioCRM As String = "", Optional TipoDoctoCRM As String = "") 'GUARDA PDF Dim LocalSerieFolio As String = String.Empty Dim LocalTipoDocto As String = String.Empty 'TIMBRADO NUEVO If CorreoContactoCRM.Trim.Length > 0 Then LocalSerieFolio = SerieFolioCRM LocalTipoDocto = TipoDoctoCRM Else Try If Me.CveVenta > 0 Then GenerarPDFVenta(Me.CveVenta, AplicaPagare:="0", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) If ObjFactura Is Nothing Then ObjFactura = New Modelos.Factura(UsuarioActual, Me.CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) End If Else If ObjFactura IsNot Nothing AndAlso ObjFactura.CveVenta > 0 Then GenerarPDFVenta(ObjFactura.CveVenta, AplicaPagare:="0", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) End If End If LocalSerieFolio = ObjFactura.SerieFolio LocalTipoDocto = ObjFactura.TipoDocto Catch ex As Exception OnError("Ocurrió un error al generar el PDF", ex) End Try End If 'MANDA CORREO If EnviaCorreo Then Dim ArchivoAdjunto As String = "" Dim ArchivoXML As String = "" Dim ArchivoPDF As String = String.Format("{0}PDF\{1}\{2}.pdf", UsuarioActual.Empresa.Ruta, LocalTipoDocto, LocalSerieFolio) If Adjunto <> "" Then ArchivoAdjunto = String.Format("{0}Ventas\{1}", UsuarioActual.Empresa.Ruta, Adjunto) End If Try ' BytesPdfCotizacion(CveVenta) Dim capturedContext = HttpContext.Current Dim Hilo As New System.Threading.Thread(Sub() MandaMails(UsuarioActual, CveVenta, DdlTipoComprobante.SelectedValue.ToString(), LocalSerieFolio, ChkEnviarFactura.Checked, ArchivoXML, ArchivoPDF, ArchivoAdjunto, CorreoContactoCRM:=CorreoContactoCRM)) Hilo.Start() Catch ex As Exception OnError("Ocurrió error al mandar Mail", ex) Dim ObjVentas As New ClsVentas If ChkEnviarFactura.Checked Then ObjVentas.UpdateVentaMail(3, CveVenta) Else ObjVentas.UpdateVentaMail(0, CveVenta) End If ObjVentas.Dispose() End Try End If End Sub #End Region #Region " ANTICIPOS " Private Sub CargaAnticipos(CveCliente As Integer) Dim CargaAnticipos As Boolean = True If UsuarioActual.CveEmpresa = 189 Then CargaAnticipos = UsuarioActual.TienePermisoProceso(406) End If HdnTieneAnticipos.Value = "0" If CveCliente > 0 AndAlso CargaAnticipos Then 'QUE NO SE PUEDA REALIZAR AMORTIZACIÓN DE ANTICIPO POR DESCUENTO If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If DdlTipoAmortizacionAnticipo.Items.FindByValue("1") IsNot Nothing Then DdlTipoAmortizacionAnticipo.Items.Remove(DdlTipoAmortizacionAnticipo.Items.FindByValue("1")) End If End If HdnIVACalculado.Value = "0" 'SI ES REFACTURACION NO LIMPIAR EL FOLIO FISCAL If NuevaFactura <> 1 Then 'SI ES UNA NOTA DE CREDITO NO TIMBRADA NO DEBE LIMPIAR If Not (DdlTipoComprobante.SelectedValue.ToString().Contiene("Egs", "Dev") AndAlso CveVenta > 0 AndAlso LblSeTimbro.Text = "No") Then HdnFolioFiscalNC.Value = "0" End If End If LblAntAplicados.Text = "" LblAntAplicados.Visible = False LblAmortizacion.Text = "0.00" HdnTipoDescuento.Value = "-1" HdnTieneAnticiposVinculados.Value = "0" Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetAnticiposNCIxCCliente(CveCliente) Then Me.TmpDTAnticiposNCIxCCliente = ObjMovtos.DtResultados.Copy() End If 'AGREGAR LOS ANTICIPOS, DEV, IxC QUE ESTEN EN PUBLICO GENERAL If Me.TmpDTAnticiposNCIxCCliente IsNot Nothing AndAlso UsuarioActual.CveEmpresa.Contiene(189, 190, 192, 195, 197) Then Dim CveClientePublicoGeneral = UsuarioActual.Empresa.Funcionalidad(714).ToEntero() If CveClientePublicoGeneral > 0 Then If CveCliente <> CveClientePublicoGeneral Then If ObjMovtos.GetAnticiposNCIxCCliente(CveClientePublicoGeneral) Then For Each DrGeneral As DataRow In ObjMovtos.DtResultados.Rows Me.TmpDTAnticiposNCIxCCliente.Rows.Add(DrGeneral.ItemArray) Next End If End If End If End If ObjMovtos.Dispose() If Me.TmpDTAnticiposNCIxCCliente IsNot Nothing Then Dim DtMovtos As DataTable = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 AND SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo = 'Ant' ", "")} {If(DdlTipoComprobante.SelectedValue = "Ant", "AND Tipo = 'NC'", "")}") If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) Then DtMovtos = DtMovtos.FiltraParametros($"{If(CveVenta < 0, $"Tipo = 'Ant'{If(DdlTipoComprobante.SelectedValue = "Ing", $" AND CveMoneda ={DdlMoneda.SelectedValue.ToEntero()}", "")} ", "")}") End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DtMovtos = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 And SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo IN('RNC','IxC','Ant') {If(DdlTipoComprobante.SelectedValue = "Ant", "AND Tipo = 'NC'", "")} ", "")}") End If GVAnticipos.DataSource = DtMovtos If ObjMovtos.DtResultados.SUM("Saldo", "Saldo > 0 AND SaldoSubtotal > 0 AND Tipo = 'Ant'") > 0 Then HdnTieneAnticipos.Value = "1" End If If DtMovtos.Rows.Count > 0 Then ImgAntiPend.Visible = True If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DtMovtos IsNot Nothing AndAlso DtMovtos.Rows.Count = 0 Then ImgAntiPend.Visible = False End If If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) End If Else GVAnticipos.DataSource = Nothing End If If CveVenta <= 0 OrElse (EsCreaApartirDe Or CveDevolucion > 0) Then divAmortizacionTipo.Visible = True divAmortizacionTipoRelacion.Visible = True End If If UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 146) Then If Not DdlTipoAmortizacionAnticipo.Items.Cast(Of ListItem).Any(Function(x) x.Value = "3") Then DdlTipoAmortizacionAnticipo.Items.Add(New ListItem("Amortización anticipo sobre factura en cero", "3")) End If End If If UsuarioActual.Empresa.Funcionalidad(343) = "1" Then DdlTipoAmortizacionAnticipo.Items.Remove(DdlTipoAmortizacionAnticipo.Items.FindByValue("1")) End If GVAnticipos.Columns(4).Visible = False GVAnticipos.Columns(8).Visible = False If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then GVAnticipos.Columns(6).Visible = True End If GVAnticipos.DataBind() End If UpAnticipos.Update() UpPS.Update() End Sub Protected Sub GVAnticipos_RowCreated(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GVAnticipos.RowCreated If e.Row.RowType = DataControlRowType.Header Then e.Row.ClientIDMode = ClientIDMode.Static e.Row.ID = String.Format("TrH{0}", e.Row.RowIndex) ElseIf e.Row.RowType = DataControlRowType.DataRow Then e.Row.ClientIDMode = ClientIDMode.Static e.Row.ID = String.Format("Tr{0}", e.Row.RowIndex) e.Row.FCCheckBox("Chk").ID = "Chk" & e.Row.RowIndex e.Row.FCTextBox("TxtAnticipo").ID = "TxtAnticipo" & e.Row.RowIndex e.Row.FCTextBox("TxtTC").ID = "TxtTC" & e.Row.RowIndex DirectCast(e.Row.FindControl("CVAmortAnti"), CompareValidator).ID = "CVAmortAnti" & e.Row.RowIndex DirectCast(e.Row.FindControl("VCOAmortAnti"), AjaxControlToolkit.ValidatorCalloutExtender).ID = "VCOAmortAnti" & e.Row.RowIndex DirectCast(e.Row.FindControl("CVAmortAnti"), CompareValidator).ControlToValidate = "TxtAnticipo" & e.Row.RowIndex DirectCast(e.Row.FindControl("VCOAmortAnti"), AjaxControlToolkit.ValidatorCalloutExtender).TargetControlID = "CVAmortAnti" & e.Row.RowIndex 'SI NO TIENE PERMISO, NO PERMITIR APLICAR ANTICIPOS PUNTUALES If GVAnticipos.DataSource IsNot Nothing Then If CBool(e.Row.DBCampo("AnticipoPuntual")) AndAlso Not UsuarioActual.TienePermisoProceso(377) Then e.Row.FCCheckBox("Chk").Enabled = False End If End If End If End Sub Protected Sub GVAnticipos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GVAnticipos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.Cells(1).Width = Unit.Pixel(60) e.Row.Cells(2).Width = Unit.Pixel(100) e.Row.Cells(3).Width = Unit.Pixel(80) e.Row.Cells(4).Width = Unit.Pixel(80) End If e.Row.Cells(3).HorizontalAlign = HorizontalAlign.Right If e.Row.DataKey("Saldo").ToDouble < 0 Then e.Row.Cells(3).ForeColor = Drawing.Color.Red If e.Row.DataKey("Saldo").ToDouble = 0 Then e.Row.FCLiteral("LtlAnticipos").Text = "" Dim saldo As Decimal = 0 Dim tipoCambio As Decimal = 0 Dim total As Decimal = TxtTotal.Text.ToString().ToDecimal If CveVentaRelacion > 0 Then ' dejo seleccionado el la venta relacionado en anticipo If e.Row.DataKey("CveVenta").ToEntero() = CveVentaRelacion Then e.Row.FCCheckBox("Chk" & e.Row.RowIndex).Checked = True e.Row.FCTextBox("TxtAnticipo" & e.Row.RowIndex).Text = ImporteRelacion.ToString() End If End If If e.Row.DBCampo("Tipo").ToString() = "NC" And e.Row.DataKey("CveVenta").ToEntero() > 0 OrElse (e.Row.DBCampo("Tipo").Contiene("Ant", "IxC") And e.Row.DataKey("CveMoneda").ToEntero() = 1 AndAlso DdlMoneda.SelectedValue.ToEntero() = 2) Then 'If e.Row.DBCampo("CveMoneda").ToString().ToEntero() = 2 Then ' tipoCambio = e.Row.DBCampo("TipoCambioHoy").ToString().ToDecimal 'Else ' tipoCambio = GlobalTipoCambio(e.Row.DataKey("Fecha").ToString().ToDate).ToDecimal 'End If If TxtFechaAnticipoCliente.Text = "" Then TxtFechaAnticipoCliente.Text = Now.ToShortDateString tipoCambio = GlobalTipoCambio(TxtFechaAnticipoCliente.Text.ToDate).ToDecimal 'e.Row.DBCampo("TipoCambioHoy").ToString().ToDecimal e.Row.FCTextBox("TxtTC" & e.Row.RowIndex).Text = tipoCambio.FormatoNumero(4) If DdlMoneda.SelectedValue.ToEntero() = 1 And e.Row.DBCampo("CveMoneda").ToEntero() = 1 Then saldo = e.Row.DataKey("Saldo").ToDecimal ElseIf DdlMoneda.SelectedValue.ToEntero() = 2 And e.Row.DBCampo("CveMoneda").ToEntero() = 1 And tipoCambio > 0 Then saldo = (e.Row.DataKey("Saldo").ToString().ToDecimal / tipoCambio).TruncateDecimal ElseIf DdlMoneda.SelectedValue.ToEntero() = 1 And e.Row.DBCampo("CveMoneda").ToEntero() = 2 Then saldo = (e.Row.DataKey("Saldo").ToString().ToDecimal * tipoCambio).TruncateDecimal Else saldo = e.Row.DataKey("Saldo").ToDecimal End If Else saldo = e.Row.DataKey("Saldo").ToString().ToDecimal If CveVenta <= 0 Then If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("2") Then 'cuando es por NC, debe de tomar el total de su saldo respectivo saldo = e.Row.DataKey("SaldoConImpuestos").ToString().ToDecimal Else saldo = e.Row.DataKey("SaldoSubTotal").ToString().ToDecimal End If e.Row.FCLiteral("LtlAnticipos").Text = saldo.FormatoNumero ElseIf CveVenta > 0 AndAlso e.Row.DBCampo("Tipo").ToString() = "Ant" Then saldo = e.Row.DataKey("SaldoConImpuestos").ToString().ToDecimal e.Row.FCLiteral("LtlAnticipos").Text = saldo.FormatoNumero End If If CveVenta <= 0 AndAlso DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("4") Then saldo = e.Row.DataKey("Saldo").ToString().ToDecimal End If End If saldo = saldo.RoundSQL() Dim maxsaldo As Decimal If total > saldo Then maxsaldo = saldo Else maxsaldo = total End If If DdlContratosModal.SelectedValue.ToEntero > 0 AndAlso AmortizacionSujeridaContrato > 0 Then If AmortizacionSujeridaContrato > saldo Then AmortizacionSujeridaContrato = saldo End If End If e.Row.FCLiteral("MonedaVenta").Text = saldo.FormatoNumero(2) e.Row.FCCheckBox("Chk" & e.Row.RowIndex).Attributes.Add("onclick", String.Format("chkAnt(this,{0},{1},{2});", e.Row.FCTextBox("TxtAnticipo" & e.Row.RowIndex).ClientID, saldo, AmortizacionSujeridaContrato)) e.Row.FCTextBox("TxtAnticipo" & e.Row.RowIndex).Attributes.Add("onKeyUp", String.Format("FnCambiaAnt({0},this,{1});", e.Row.FCCheckBox("Chk" & e.Row.RowIndex).ClientID, saldo)) e.Row.FCTextBox("TxtTC" & e.Row.RowIndex).Attributes.Add("onKeyUp", String.Format("CambioTipoMoneda({0},{1},{2},{3},{4});", e.Row.FCCheckBox("Chk" & e.Row.RowIndex).ClientID, e.Row.DataKey("Saldo"), e.Row.FCTextBox("TxtAnticipo" & e.Row.RowIndex).ClientID, e.Row.FCTextBox("TxtTC" & e.Row.RowIndex).ClientID, e.Row.DataKey("CveMoneda"))) If e.Row.DataKey("CveIE").ToString().ToEntero() > 0 Then e.Row.FCLiteral("LtlFactura").Text = String.Format("{1}", e.Row.DataKey("CveIE"), e.Row.DataKey("Folio")) Else e.Row.FCLiteral("LtlFactura").Text = String.Format("{1}", e.Row.DataKey("CveVenta"), e.Row.DataKey("Folio")) End If If e.Row.DataKey("ISTotal") = "1" Then e.Row.Cells(0).Visible = False e.Row.Cells(1).ColumnSpan = 3 e.Row.Cells(1).HorizontalAlign = HorizontalAlign.Right e.Row.FCLiteral("LtlFactura").Text = String.Format("Total {0} ", e.Row.DataKey("Tipo")) e.Row.BackColor = Drawing.Color.LightGray e.Row.Cells(2).Visible = False e.Row.FCTextBox("TxtAnticipo" & e.Row.RowIndex).Visible = False e.Row.FCTextBox("TxtTC" & e.Row.RowIndex).Visible = False e.Row.FCLabel("LblTotalAnticipos").Visible = True e.Row.Cells(5).HorizontalAlign = HorizontalAlign.Right End If 'SI UN REGISTRO ES DE DIFERENTE MONEDA AL DOCUMENTO SE MUESTRAN LAS COLUMNAS If e.Row.DBCampo("CveMoneda").ToString().ToEntero() > 0 And e.Row.DBCampo("CveMoneda").ToString().ToEntero() <> DdlMoneda.SelectedValue.ToEntero() Then GVAnticipos.Columns(4).Visible = True GVAnticipos.Columns(8).Visible = True End If If UsuarioActual.Empresa.Funcionalidad(185) = "1" Then 'If e.Row.DBCampo("Tipo").ToString().Contiene("Ant", "IxC") AndAlso Not CBool(e.Row.DBCampo("AnticipoAutorizado")) Then ' e.Row.FCCheckBox("Chk" & e.Row.RowIndex).Enabled = False ' e.Row.FCCheckBox("Chk" & e.Row.RowIndex).ToolTip = "Anticipo Bloqueado" ' e.Row.FCLinkButton("LnkSolicitarActivarAnticipo").Visible = True 'End If End If If e.Row.DBCampo("CveMoneda").ToString().ToEntero() = DdlMoneda.SelectedValue.ToEntero() Then e.Row.FCTextBox("TxtTC" & e.Row.RowIndex).Visible = False End If End If End Sub Private Function GenerarNC(ImporteTotal As Decimal, CveVendedor As Integer, ByRef Venta As Venta, GvRowAnticipo As GridViewRow, ByRef ObjVentas As ClsVentas) As Modelos.Factura.MMensajeFactura Dim Retorno As Modelos.Factura.MMensajeFactura = Nothing Dim SbAlert As New StringBuilder() Try Dim ObjNC = Modelos.Factura.CrearVentaNueva(UsuarioActual, Venta.CveSubProyecto, Venta.CveCliente, Venta.CveMoneda, "Egs") ObjNC.CveMoneda = Venta.CveMoneda If ObjNC.CveMoneda = 2 Then ObjNC.TipoCambio = GlobalTipoCambio(Now).ToString().ToDecimal() Else ObjNC.TipoCambio = 1 End If Dim Total As Decimal = ImporteTotal Dim subTotal As Decimal = (Total / (1D + Venta.PorcentajeIVA)) 'Dim IVA = (subTotal * Factura.PorcentajeIVA).RoundSQL(2) Dim PU As Decimal = subTotal Dim Cantidad As Decimal = 1D Dim Descuento As Decimal = 0 Dim Obs = "" Dim CvePSAnticipo As Integer = 1 Dim DatarowPS = GlobalDTPS(UsuarioActual.CveEmpresa, SATClavePS:="84111506").FiltroPrimero("CodigoPS LIKE '%ANTICIPO%' OR CodigoPS LIKE '%anticipo%' OR CodigoPS LIKE '%Anticipo%'") If DatarowPS IsNot Nothing Then CvePSAnticipo = DatarowPS("CvePS").ToString().ToEntero() End If ObjNC.AgregarPS(CvePSAnticipo, Cantidad, PU, Descuento, Obs, CveSubProyecto:=Venta.CveSubProyecto, PorcentajeIVA:=Venta.PorcentajeIVA) ObjNC.CalculaTotales() Dim DtVentasNC = New DataTable DtVentasNC.Columns.Add("CveVenta", GetType(Integer)) DtVentasNC.Columns.Add("Importe", GetType(Decimal)) DtVentasNC.Columns.Add("FolioFiscal", GetType(String)) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TC", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TCCambioValuacion", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "CveEstatusFactura", .DataType = GetType(Integer), .DefaultValue = -1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "Folio", .DataType = GetType(String), .DefaultValue = ""}) DtVentasNC.Rows.Add(Venta.CveVenta, Total, "") ObjNC.DtVentasNC = DtVentasNC Dim DtVentasRelacionadas As New DataTable() DtVentasRelacionadas.Columns.Add("CveVenta", GetType(Integer)) DtVentasRelacionadas.Rows.Add(Venta.CveVenta) ObjNC.DtVentasRelacionadas = DtVentasRelacionadas Dim DtAnticipos As New DataTable() DtAnticipos.Columns.Add("CveVenta", GetType(Integer)) DtAnticipos.Columns.Add("Importe", GetType(Decimal)) DtAnticipos.Columns.Add("CveConceptoContable", GetType(Integer)) DtAnticipos.Columns.Add("CveIE", GetType(Integer)) DtAnticipos.Columns.Add("FolioFiscal", GetType(String)) DtAnticipos.Columns.Add("Descuentos", GetType(Decimal)) DtAnticipos.Columns.Add("TotalAnticipo", GetType(Decimal)) DtAnticipos.Columns.Add("SubTotalAnticipo", GetType(Decimal)) DtAnticipos.Columns.Add("CveMoneda", GetType(Decimal)) DtAnticipos.Columns.Add("Fecha", GetType(DateTime)) DtAnticipos.Columns.Add("TipoCambioPago", GetType(Decimal)) DtAnticipos.Columns.Add("Folio", GetType(String)) DtAnticipos.Columns.Add("Tipo", GetType(String)) If GvRowAnticipo IsNot Nothing Then Dim CveVenta = GvRowAnticipo.DataKey("CveVenta").ToEntero() Dim Importe = GvRowAnticipo.FCTextBox(String.Format("TxtAnticipo{0}", GvRowAnticipo.RowIndex)).Text.ToDecimal() Dim CveConceptoContable = GvRowAnticipo.DataKey("CveConceptoContable").ToEntero() Dim CveIE = GvRowAnticipo.DataKey("CveIE").ToEntero() Dim FolioFiscal = GvRowAnticipo.DataKey("FolioFiscal") Dim Descuentos As Decimal = GvRowAnticipo.DataKey("Descuentos").ToDecimal() Dim TotalAnticipo As Decimal = GvRowAnticipo.DataKey("TotalAnticipo").ToDecimal() Dim SubTotalAnticipo As Decimal = GvRowAnticipo.DataKey("SubTotalAnticipo").ToDecimal() Dim CveMoneda As Integer = GvRowAnticipo.DataKey("CveMoneda").ToEntero() Dim Fecha As DateTime = GvRowAnticipo.DataKey("Fecha").ToDateTime() Dim TipoCambioPago As Decimal = GvRowAnticipo.DataKey("TipoCambioPago").ToDecimal() Dim Folio = GvRowAnticipo.DataKey("Folio") Dim Tipo = GvRowAnticipo.DataKey("Tipo") DtAnticipos.Rows.Add(CveVenta, Importe, CveConceptoContable, CveIE, FolioFiscal, Descuentos, TotalAnticipo, SubTotalAnticipo, CveMoneda, Fecha, TipoCambioPago, Folio, Tipo) End If ObjNC.EsNCAmortizacion = True ObjNC.CveTipoAmortizacionAnticipo = 2 ObjNC.DtAnticiposAplicados = DtAnticipos ObjNC.CveFormaPago = 21 'Aplicación de anticipos ObjNC.CveMetodoPago = 1 ObjNC.CveUsoCFDI = Venta.CveUsoCFDI ObjNC.CveVendedor = CveVendedor ObjNC.CveTipoRelacion = 7 ObjNC.PreparaTimbre() AjustarTimbreNC(ObjNC) Retorno = ObjNC.EmitirFactura(False, Transac:=ObjVentas.IniciaTransacSQL(), Modulo:="Cobranza/GuardarVenta", MostrarURL:=True) Retorno.Factura = ObjNC If Retorno IsNot Nothing AndAlso Retorno.CveVenta > 0 Then For Each msg In Retorno.Mensajes SbAlert.AppendFormat("{0}
    ", msg) Next SbAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", Retorno.CveVenta))) Else SbAlert.Append("Ocurrió un error al generar la nota de crédito") End If Catch ex As Exception SbAlert.Append("Ocurrió un error al generar el documento") GuardaLog(ex.ToString()) End Try Return Retorno End Function Protected Sub BtnAceptarAnticipos_Click(sender As Object, e As System.EventArgs) Handles BtnAceptarAnticipos.Click AplicaAnticipos() End Sub Private Sub AplicaAnticipos() If CveVenta > 0 And CveCliente > 0 And Not EsCreaApartirDe And CveDevolucion <= 0 Then Dim EsAnticipo2017Jam As Boolean = False For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked Then If gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal > SaldoVenta Then Alert("No puede ingresar un importe mayor al saldo", TipoMensaje.MsgAdvertencia) Exit Sub ElseIf UsuarioActual.CveEmpresa = 119 AndAlso gvr.DataKey("Tipo").ToString() = "NC" AndAlso gvr.DataKey("Fecha").ToDate.Year <= 2017 Then EsAnticipo2017Jam = True End If End If Next Dim ObjConta As New ClsContabilidad Dim ObjVenta As New ClsVentas(ObjConta.IniciaTransacSQL()) Dim ObjIE As New ClsBancos(ObjConta.IniciaTransacSQL()) Dim ObjCliente As New ClsClientes(ObjConta.IniciaTransacSQL()) Dim CvePrePoliza As Integer Dim ErrorConta As Boolean Dim CveIEAnticipo As Integer Dim CvePlantillaPoliza As Integer = 10 Dim ListaNC As New List(Of Modelos.Factura.MMensajeFactura) Try CvePrePoliza = ObjConta.AddPrePolizas("Ventas/Anticipos", CvePlantillaPoliza, TxtTotal.Text.ToDecimal, TxtTotal.Text.ToDecimal, DdlMoneda.SelectedValue.ToEntero(), TxtFechaAnticipoCliente.Text.ToDate, String.Format("{0} {1} {2}-{3}", If(EsAnticipo2017Jam, "Aplicación Anticipo 2017", ""), NombreCliente, Serie, TxtFolio.Text), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If CvePrePoliza > 0 Then Dim tipoCambioPago As Decimal = 1 Dim tipoCambioVenta As Decimal = 1 Dim tipoCambioVentaValuacion As Decimal = 1 Dim PorcentajePago As Decimal = 100 Dim dtConceptos As DataTable = Nothing Dim CveMonedaVenta As Integer = DdlMoneda.SelectedValue.ToEntero() If ObjConta.GetPlantillaConceptos(UsuarioActual.CveEmpresa, CvePlantillaPoliza) Then dtConceptos = ObjConta.DtResultados End If Dim PorcentajeImpuestoAmortizacion As Decimal = TmpDT.MAX("PorcentajeIVA").ToDecimal Dim CveSubProyectoVenta As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim Importe91 As Decimal = 0 For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked Then Dim FechaUltimaFluctuacion As Date = MinFecha Dim TipoCambioFluctuacion As Decimal = 1 Dim tFecha As Date = NowADS() Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then If UltimaFluctuacion.FechaFluctuacion <= tFecha Then FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If If DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then 'SI LA VENTA VIENE EN PESOS Y SE VA A PAGAR EN PESOS tipoCambioPago = 1 tipoCambioVenta = 1 tipoCambioVentaValuacion = 1 PorcentajePago = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("Original").ToDecimal ElseIf DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 1 Then 'SI LA VENTA VIENE EN DOLARES Y SE VA A PAGAR EN PESOS tipoCambioPago = gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal tipoCambioVenta = TxtTipoCambio.Text.ToDecimal tipoCambioVentaValuacion = If(TxtFecha.Text.ToDate < FechaUltimaFluctuacion, TipoCambioFluctuacion, TxtTipoCambio.Text.ToDecimal) PorcentajePago = (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal) / gvr.DataKey("Original").ToDecimal ElseIf DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then 'SI LA VENTA VIENE EN DOLARES Y SE VA A PAGAR EN DOLARES tipoCambioPago = gvr.DataKey("TipoCambio").ToString().ToDecimal tipoCambioVenta = TxtTipoCambio.Text.ToDecimal tipoCambioVentaValuacion = If(TxtFecha.Text.ToDate < FechaUltimaFluctuacion, TipoCambioFluctuacion, TxtTipoCambio.Text.ToDecimal) PorcentajePago = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("Original").ToDecimal ElseIf DdlMoneda.SelectedValue.ToEntero() = 1 AndAlso gvr.DataKey("CveMoneda").ToEntero() = 2 Then 'SI LA VENTA VIENE EN PESOS Y SE VA A PAGAR EN DOLARES tipoCambioPago = gvr.DataKey("TipoCambioHoy").ToDecimal() ' gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal tipoCambioVenta = 1 tipoCambioVentaValuacion = If(TxtFecha.Text.ToDate < FechaUltimaFluctuacion, TipoCambioFluctuacion, TxtTipoCambio.Text.ToDecimal) PorcentajePago = (gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal) / gvr.DataKey("Original").ToDecimal End If Dim importeMovimiento As Decimal = 0 Dim importeMN As Decimal = 0 Dim TC As Decimal Dim TipoMovimiento As Boolean = True Dim Concepto As String = VentaActual.SerieFolio Dim Referencia As String = VentaActual.SerieFolio CveIEAnticipo = gvr.DataKey("CveIE").ToEntero() Select Case gvr.DataKey("CveConceptoContable").ToString() Case "3", "295" If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then Dim ImporteNC As Decimal = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal Dim RespNC = GenerarNC(ImporteNC, DdlVendedor.SelectedValue.ToEntero(), Me.VentaActual, gvr, ObjVenta) If RespNC IsNot Nothing Then If RespNC.TieneError Then ErrorConta = True Exit For Else ListaNC.Add(RespNC) End If Else ErrorConta = True End If Else importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) importeMN = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal If importeMovimiento <> 0 Then Dim Pago As New VentaPago Pago.ImportePagoVenta = importeMN Pago.ImportePago = importeMovimiento Pago.CveIE = CveIEAnticipo Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() Pago.TipoPago = "A" Pago.Fecha = TxtFechaAnticipoCliente.Text.ToDate 'TCPago = gvr.DataKey("TipoCambio").todecimal Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() Pago.TCPago = gvr.DataKey("TipoCambio").ToDecimal Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" Pago.Referencia = gvr.DataKey("Folio") Pago.AplicaConceptoImpuestoPendiente = (Not gvr.DataKey("RegresarImpuesto") = "1") AndAlso (VentaActual.IVA > 0 OrElse VentaActual.IEPS > 0) ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) End If End If Case "12" If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento TC = gvr.DataKey("TipoCambio").ToString().ToDecimal ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento 'importeMovimiento * gvr.DataKey("TipoCambio").ToString().ToDecimal TC = gvr.DataKey("TipoCambio").ToString().ToDecimal ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal TC = TipoCambioFluctuacion ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal TC = gvr.DataKey("TipoCambio").ToString().ToDecimal End If importeMovimiento = importeMovimiento.RoundSQL importeMN = importeMN.RoundSQL If importeMovimiento <> 0 Then Dim Pago As New VentaPago Pago.Fecha = TxtFechaAnticipoCliente.Text.ToDate Pago.FechaDocumentoRelacionado = gvr.DataKey("Fecha").ToDate Pago.ImportePagoVenta = importeMovimiento Pago.ImportePago = importeMN Pago.CveIE = CveIEAnticipo Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() Pago.TCPago = gvr.DataKey("TipoCambio").ToDecimal Pago.TipoPago = "NC" Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() Pago.AplicaTraslado = gvr.DataKey("RegresarImpuesto") = "1" Pago.Referencia = gvr.DataKey("Folio") ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) End If Case "66" If gvr.DataKey("CveIE").ToEntero() > 0 Then 'importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal If CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento TC = gvr.DataKey("TipoCambio").ToString().ToDecimal ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento * gvr.DataKey("TipoCambio").ToString().ToDecimal TC = gvr.DataKey("TipoCambio").ToString().ToDecimal ElseIf CveMonedaVenta = 1 And gvr.DataKey("CveMoneda").ToEntero = 2 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal TC = TipoCambioFluctuacion ElseIf CveMonedaVenta = 2 And gvr.DataKey("CveMoneda").ToEntero = 1 Then importeMovimiento = gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal importeMN = importeMovimiento * gvr.FCTextBox("TxtTC" & gvr.RowIndex).Text.ToDecimal TC = gvr.DataKey("TipoCambio").ToString().ToDecimal End If importeMovimiento = importeMovimiento.RoundSQL importeMN = importeMN.RoundSQL If importeMovimiento <> 0 Then Dim Pago As New VentaPago Pago.ImportePagoVenta = importeMovimiento Pago.ImportePago = importeMN Pago.CveIE = CveIEAnticipo Pago.CveMonedaPago = gvr.DataKey("CveMoneda").ToEntero() Pago.TCPago = gvr.DataKey("TipoCambio").ToDecimal Pago.TipoPago = "I" Pago.FechaDocumentoRelacionado = gvr.DataKey("Fecha").ToDate Pago.CveVentaAmortizacion = gvr.DataKey("CveVenta").ToEntero() Pago.AplicaTraslado = True Pago.Referencia = gvr.DataKey("Folio") Pago.CveClientePago = gvr.DataKey("CveCliente").ToEntero() ErrorConta = AplicaPrePolizaPagoVenta(VentaActual, Pago, CvePrePoliza, ObjConta) End If End If End Select End If Next Else ErrorConta = True End If ''OPCION:99 - NO SIMPLIFICAR If Not ErrorConta AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, Opcion:=99, AutoConta:=False) Then If ObjConta.ValorPolizaDescuadre > 0 Then GuardaLogAD($"Ventas/Ventas-Anticipos | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") ErrorConta = True End If End If Catch ex As Exception ErrorConta = True OnError("Ocurrió un error al guardar el anticipo", ex) End Try If ErrorConta Then Alert("Ocurrió un error al amortizar el documento. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError) ObjConta.RollBack() ObjConta.Dispose() ObjVenta.Dispose() ObjIE.Dispose() ObjCliente.Dispose() Else Dim Msg As New StringBuilder Msg.Append("Se ha amortizado correctamente.
    ") 'AJUSTA POLIZA If ObjConta.ContaFolio > 0 Then Msg.AppendFormat("

    Ver Póliza", CvePrePoliza) End If ObjConta.Commit() ObjConta.Dispose() ObjVenta.Dispose() ObjIE.Dispose() ObjCliente.Dispose() Dim MsgTimbrado As String = "" Try If ListaNC.Count > 0 Then For Each respNC In ListaNC Msg.AppendFormat(" La nota de crédito {1} se genero correctamente.
    ", respNC.CveVenta, respNC.SerieFolio) Dim SeTimbroNC As Boolean = False If LblSeTimbro.Text = "Si" Then MsgTimbrado = TimbrarNC(respNC.Factura, SeTimbroNC) Else MsgTimbrado = "No se pudo timbrar porque la factura de ingreso no ha sido timbrada previamente" End If If Not String.IsNullOrEmpty(MsgTimbrado) Then Dim StrEr As String = $"
    Comprobante no emitido :
    {MsgTimbrado}
    Por favor inténtelo de nuevo a través del botón 'Emitir' en ventas.
    " MsgTimbrado = StrEr End If If SeTimbroNC Then Dim xml = String.Format("", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", respNC.CveVenta, "XML", respNC.SerieFolio, respNC.Factura.TipoDocto))) Msg.AppendFormat("{0}", xml) End If Dim pdfNC = String.Format("", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", respNC.CveVenta))) Msg.AppendFormat("{0}", pdfNC) If Not String.IsNullOrEmpty(MsgTimbrado) Then Msg.AppendFormat("{0}", MsgTimbrado) End If Next End If Catch ex As Exception GuardaLogAD(ex.ToString()) Msg.AppendFormat("
    {0}
    ", MsgTimbrado) End Try BtnAceptarAnticipos.Enabled = False Alert(Msg.ToString(), TipoMensaje.MsgInformacion, JSBtnAceptar:="BtnRefrescarPagina();", ShowCloseButton:=False) End If Else 'cuando no se ha registrado la venta If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("1", "2", "3", "4") Then Dim Amortizacion As Decimal = 0 Dim ImpuestosLocalesTemporal As Decimal = 0 If ListaAnticiposAplicados IsNot Nothing Then ListaAnticiposAplicados.Clear() Else ListaAnticiposAplicados = New List(Of Modelos.MAnticipoRelacionado) End If If ListaDevolucionesAplicadas IsNot Nothing Then ListaDevolucionesAplicadas.Clear() Else ListaDevolucionesAplicadas = New List(Of Modelos.MAnticipoRelacionado) End If HdnIVACalculado.Value = HdnIVAOriginal.Value For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(3) Then Amortizacion += gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal ' - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal) HdnIVACalculado.Value = (HdnIVACalculado.Value.ToDouble - ((gvr.FCTextBox("TxtAnticipo" & gvr.RowIndex).Text.ToDecimal / gvr.DataKey("TotalAnticipo").ToDecimal) * gvr.DataKey("IVAAnticipo").ToDecimal)).FormatoNumero(2) ListaAnticiposAplicados.Add(New Modelos.MAnticipoRelacionado() With {.CveVenta = gvr.DataKey("CveVenta").ToEntero(), .FolioFiscal = gvr.DataKey("FolioFiscal")}) 'HdnFolioFiscalNC.Value = gvr.DataKey("FolioFiscal") 'CvePSAmortizacion = GlobalDTPS(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePS", "CveConceptoContable = 11").ToEntero() End If 'AGREGAR LAS DEV If UsuarioActual.CveEmpresa.Contiene(1, 189) AndAlso DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("4") Then If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(12) Then ListaDevolucionesAplicadas.Add(New Modelos.MAnticipoRelacionado() With {.CveVenta = gvr.DataKey("CveVenta").ToEntero(), .FolioFiscal = gvr.DataKey("FolioFiscal")}) End If End If Next 'Amortizacion += TmpDTImpuestos.SUM("Importe").ToDecimal 'RMF. 2018.12.20- saque de la jugada en la amortización los impuestos locales LtlTitDescuentos.Text = "Descuentos:" 'cuando es amortización DESCUENTO POR CONCEPTO If DdlTipoAmortizacionAnticipo.SelectedValue = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Cot") Then LtlTitDescuentos.Text = "Amortización:" 'If Amortizacion <> LblDescuentos.Text.ToDecimal Then ' Alert("El importe registrado como descuento no coincide con el importe seleccionado de anticipo.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If Dim TotalCalculableImpuestos As Decimal = 0, TotalCalculableImpuestosIVA As Decimal = 0 Dim TotalDescuentosRound As Decimal = 0 Dim Cantidad, PU, Descuento, DescuentoRound As Decimal For Each dr As DataRow In TmpDT.Rows Cantidad = dr("Cantidad").ToString().ToDecimal PU = dr("PU").ToString().ToDecimal 'proporcional la mortización al concepto Descuento = (PU * Cantidad / LblSubTotal1.Text.ToDecimal * Amortizacion) DescuentoRound = Descuento.RoundSQL(NumeroDecimales) TotalDescuentosRound += DescuentoRound TotalCalculableImpuestos = (Cantidad * (PU)) - Descuento TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + dr("PorcentajeIEPS").ToString().ToDecimal) dr("Descuento") = DescuentoRound dr("Total") = (Cantidad * PU) dr("TotalImporte") = (Cantidad * PU).RoundSQL dr("ImporteIVA") = (dr("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) dr("ImporteIEPS") = (dr("PorcentajeIEPS").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) dr("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) dr("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) dr("PorcentajeRetIVA") = ClienteRetIVA dr("PorcentajeRetISR") = ClienteRetISR dr("TotalConImpuestos") = (dr("Total").ToString().ToDecimal() - dr("Descuento").ToString().ToDecimal() + dr("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Next 'REVISA SI EXISTEN DIFERENCIAS ENTRE EL DESCUENTO Y LO AMORTIZADO PARA REALIZAR UN AJUSTE EN EL ULTIMO CONCEPTO AGREGADO Dim diff As Decimal = Math.Abs(TotalDescuentosRound - Amortizacion) Dim DrUltimo As DataRow = TmpDT.Rows(TmpDT.Rows.Count - 1) 'SI EL DESCUENTO SUPERA LO AMORTIZADO RESTA LA DIFERENCIA AL ULTIMO DESCUENTO If TotalDescuentosRound > Amortizacion Then DrUltimo("Descuento") = DrUltimo("Descuento").ToString().ToDecimal() - diff End If 'SI EL DESCUENTO ES MENOR A LO AMORTIZADO SUMA LA DIFERENCIA AL ULTIMO DESCUENTO If TotalDescuentosRound < Amortizacion Then DrUltimo("Descuento") = DrUltimo("Descuento").ToString().ToDecimal() + diff End If GvPS.DataSource = TmpDT GvPS.DataBind() Amortizacion = 0 HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") LblAntAplicados.Text = "Amortización por descuento" : LblAntAplicados.Visible = True RegistraScript("$('#ModalDescuento').modal('hide')", "hidemodal") UpPS.Update() End If If DdlTipoComprobante.SelectedValue = "Rem" Then DdlTipoComprobante.Enabled = False TrAlmacenAsignado.Visible = False TrAlmacenOrigen.Visible = False UpParametros.Update() End If 'cuando es amortización por NOTA DE CREDITO If DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then LblAntAplicados.Text = String.Format("Amortización por Nota de Crédito: {0:C}", Amortizacion) : LblAntAplicados.Visible = True HdnAnticipos.Value = Amortizacion.RoundSQL(2).ToString() Amortizacion = 0 HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") HdnTieneAnticiposVinculados.Value = "1" AplicaNCMasiva = True End If 'cuando es AMORTIZACIÓN CON FACTURA EN CERO If DdlTipoAmortizacionAnticipo.SelectedValue = "3" Then Dim SubTotalRef As Decimal = TxtSubTotal.Text.ToDecimal If LblDescuentos.Text.ToDecimal() > 0D Then SubTotalRef = TxtSubTotal.Text.ToDecimal - LblDescuentos.Text.ToDecimal() End If If Amortizacion < SubTotalRef Then '[IPP] LIMPIA LO SELECCIONADO EN CASO DE QUE NO SEA AMORTIZACIÓN DEL 100% 15Junio2018 Amortizacion = 0 For Each gvr As GridViewRow In GVAnticipos.Rows gvr.FCCheckBox($"Chk{gvr.RowIndex}").Checked = False Next If CveVenta <= 0 Then Alert("La amortización no se pudo realizar ya que los importes no cubren la totalidad del documento. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) End If End If If Amortizacion > SubTotalRef Then '[IPP] LIMPIA LO SELECCIONADO EN CASO DE QUE NO SEA AMORTIZACIÓN DEL 100% 15Junio2018 Amortizacion = 0 For Each gvr As GridViewRow In GVAnticipos.Rows gvr.FCCheckBox($"Chk{gvr.RowIndex}").Checked = False Next If CveVenta <= 0 Then Alert($"La amortización no se pudo realizar ya que los importes exceden la totalidad del documento.
    Importe sugerido para amortizar:{SubTotalRef.FormatoNumero(2)}.
    Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) End If End If LblAmortizacion.Text = Amortizacion.FormatoNumero HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") HdnTieneAnticiposVinculados.Value = "1" End If 'cuando es PAGO CON DEVOLUCION If DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then Dim SbObs As New StringBuilder For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(12, 66, 277) Then Amortizacion += gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal Dim SaldoPendiente = (gvr.FCLiteral("LtlAnticipos").Text.ToDecimal - gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal).RoundSQL(2) If SaldoPendiente > 0 Then SbObs.AppendFormat("Folio: {0} Saldo: {1:N2} ,", gvr.DataKey("Folio").Trim(), SaldoPendiente) End If End If Next 'AGREGA EN LAS OBS EL SALDO PENDIENTE If SbObs.Length > 0 Then SbObs.Remove(SbObs.Length - 1, 1) TxtObsFact.Text = SbObs.ToString() UPObservaciones.Update() End If LblAntAplicados.Text = String.Format("Pago con devolución: {0:C}", Amortizacion) : LblAntAplicados.Visible = True HdnAnticipos.Value = Amortizacion.RoundSQL(2).ToString() Amortizacion = 0 HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") HdnTieneAnticiposVinculados.Value = "1" End If CalculaTotalesVenta(ValidarDescuentos:=True) End If End If System.Threading.Thread.Sleep(5) RegistraScript("$('#DivAnticipos').modal('hide');", "jsClose") End Sub Private Sub AjustarTimbreNC(ByRef ObjNC As Modelos.Factura) If LblSeTimbro.Text = "Si" Then ObjNC.Timbre.CFDIRelacionados.UUID.Clear() ObjNC.Timbre.CFDIRelacionados.UUID.Add(LblFolioFiscal.Text.Trim()) ObjNC.Timbre.CFDIRelacionados.TipoRelacion = "07" ObjNC.Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo" End If ObjNC.Timbre.Comprobante.MetodoPago = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {ObjNC.CveMetodoPago}") ' Obj.ClaveMetodoPagoSAT ObjNC.Timbre.Comprobante.FormadePago = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {ObjNC.CveFormaPago}") 'Obj.ClaveFormaPagoSAT ObjNC.Timbre.Receptor.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {ObjNC.CveUsoCFDI}") End Sub Private Function TimbrarNC(ByRef ObjNC As Modelos.Factura, ByRef SeTimbroNC As Boolean) As String Dim MsgErrorTimbrado As String = "" 'Dim SeTimbro As Boolean = False 'Dim TimbroNC As Boolean = False Dim ObjTimbrado As New Timbrado Try If ObjNC.Timbre IsNot Nothing Then Dim ObjTimbradoNC As New Timbrado SeTimbroNC = ObjTimbradoNC.TimbrarFactura(UsuarioActual, ObjNC) If Not SeTimbroNC Then MsgErrorTimbrado = $"{MsgErrorTimbrado} {ObjTimbradoNC.MensajeErrorCFDI}" End If ObjTimbradoNC = Nothing End If Catch ex As Exception OnError("Ocurrió un error al generar el timbrado", ex) End Try If Not String.IsNullOrEmpty(MsgErrorTimbrado) Then GuardaLogAD(MsgErrorTimbrado, Archivo:="LogTimbrado") End If Return MsgErrorTimbrado End Function Private Function AgregarPrePolizasXTrasladar(ObjConta As ClsContabilidad, CvePrePoliza As Integer, PorcentajeAmortizacion As Decimal, TipoCambio As Decimal, ByRef CuentasContablesInvalidas As StringBuilder, ByRef CveCuentaContabilizacion As Integer, Importe13 As Decimal, Importe8 As Decimal, Importe9 As Decimal) As Boolean Dim ImporteMovimiento As Decimal Dim ImporteMX As Decimal Dim FechaMovimiento As Date = NowADS() Dim Concepto As String = ViewState("VentaFolio").ToString() Dim PrePolizaCorrecta As Boolean = True '13 Iva x Trasladar ImporteMovimiento = Importe13 * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento, 2) * TipoCambio If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMX, 13, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente) Then PrePolizaCorrecta = False End If End If '8 RetIVA x Trasladar ImporteMovimiento = Importe8 * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento * TipoCambio, 2) If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMX, 8, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente) Then PrePolizaCorrecta = False End If End If '9 RetISR x Trasladar ImporteMovimiento = Importe9 * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento * TipoCambio, 2) If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMX, 9, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente) Then PrePolizaCorrecta = False End If End If Return PrePolizaCorrecta End Function 'Charlie Private Function AgregarPrePolizasTrasladadas(ObjConta As ClsContabilidad, CvePrePoliza As Integer, PorcentajeAmortizacion As Decimal, TipoCambio As Decimal, ByRef CuentasContablesInvalidas As StringBuilder, Optional ByRef CuentasContablesInvalidasSIG As StringBuilder = Nothing, Optional ByRef CveCuentaContabilizacion As Integer = Nothing) As Boolean Dim ImporteMovimiento As Decimal Dim ImporteMX As Decimal Dim FechaMovimiento As Date = NowADS() Dim Concepto As String = ViewState("VentaFolio").ToString() Dim PrePolizaCorrecta As Boolean = True Dim PorcentajeImpuesto As Decimal '61 Iva Trasladado ImporteMovimiento = TxtIVA.Text.ToDecimal * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento * TipoCambio, 2) PorcentajeImpuesto = TmpDT.MAX("PorcentajeIVA").ToDecimal If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteMovimiento, ImporteMX, 61, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente, PorcentajeImpuesto:=PorcentajeImpuesto) Then PrePolizaCorrecta = False End If End If '62 Ret IVA Trasladado ImporteMovimiento = TxtRetIVA.Text.ToDecimal * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento * TipoCambio, 2) If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMX, 62, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente) Then PrePolizaCorrecta = False End If End If '63 Ret ISR Trasladado ImporteMovimiento = TxtRetISR.Text.ToDecimal * PorcentajeAmortizacion ImporteMX = Math.Round(ImporteMovimiento * TipoCambio, 2) If ImporteMovimiento > 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteMovimiento, ImporteMX, 63, Concepto, Concepto, CveVenta:=CveVenta, CveCliente:=CveCliente) Then PrePolizaCorrecta = False End If End If Return PrePolizaCorrecta End Function #End Region #Region " BTN ELIMINAR " Protected Sub BtnEmitir_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnEmitir.Click 'ChkEnviarFactura.Checked = False If CveVenta <= 0 Then Alert("Ocurrió un error al emitir la factura", TipoMensaje.MsgError) Exit Sub End If If UsuarioActual.Empresa.TipoFacturacion = "CFDi" Then If UsuarioActual.Empresa.FacturaProduccion Then CreaObjetosVenta() 'PARA CUANDO YA ESTA GUARDADA LA VENTA ObjFactura.Timbre = PreParaTimbre(ObjFactura) ObjFactura.CveVenta = CveVenta ObjFactura.Serie = Serie ObjFactura.Folio = Folio ObjFactura.Timbre.Comprobante.Serie = Serie ObjFactura.Timbre.Comprobante.Folio = Folio.ToString() Dim ObjTimbrado As New Timbrado Dim FM As New Modelos.FemsaFactura Dim TmpDT7Eleven As New DataTable Dim TmpDTComplementosTimbrado As New DataTable PrepararTimbrado(FM, TmpDT7Eleven, TmpDTComplementosTimbrado) If ChkEmitirCartaPorte.Checked Then Dim RespCartaPorte As Timbres.MMensajeCartaPorte = Timbres.PreParaCartaPorteFactura(CveTimbreCartaPorteVenta, UsuarioActual) If Not RespCartaPorte.TieneError Then ObjFactura.Timbre.Complementos.CartaPorte = RespCartaPorte.CartaPorte Else Alert(RespCartaPorte.Mensaje, TipoMensaje.MsgAdvertencia) Exit Sub End If End If Dim SeTimbro As Boolean = False Dim DebeTimbrar As Boolean = True Try If DebeTimbrar Then SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura) End If Catch ex As Exception SeTimbro = False End Try 'SI SE TIMBRO CON UN TIPO DE CAMBIO DISTINCTO, DEBE ACTUALIZAR LA PREPOLIZA If SeTimbro AndAlso ChkEmitirComercioExterior.Checked AndAlso DdlTipoComprobante.SelectedValue = "Ing" AndAlso DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso TxtTipoCambio.Text.ToDecimal() > 1 AndAlso (TxtTipoCambio.Text.ToDecimal() <> TipoCambioOriginal) Then Using ObjVentas As New ClsVentas If ObjVentas.UpdateVentaTC(Me.CveVenta, UsuarioActual.CveEmpresa, TxtTipoCambio.Text.ToDecimal()) Then Alert("Se actualizó el tipo de cambio del documento") End If End Using End If If SeTimbro Then 'MENSAJE PRINCIPAL MensajeAlert = New StringBuilder MensajeAlert.AppendFormat(String.Format("
    La {0}: {1} se generó correctamente.

    ", ObjFactura.TipoDocumento, ObjFactura.SerieFolio)) 'XML Dim ArchivoXML As String = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) If File.Exists(ArchivoXML) Then MensajeAlert.AppendFormat("", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) End If If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant", "Egs") Then If UsuarioActual.Empresa.Funcionalidad(707) = "1" Then Dim ArchivoIng As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.mrt", UsuarioActual.Empresa.Ruta)) Dim ArchivoRem As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.mrt", UsuarioActual.Empresa.Ruta)) Dim ArchivoEgs As New System.IO.FileInfo(String.Format("{0}Formatos/NotaCredito.mrt", UsuarioActual.Empresa.Ruta)) If ArchivoIng.Exists Or ArchivoRem.Exists Or ArchivoEgs.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", CveVenta))) Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If Else Dim ArchivoIng As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoRem As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta)) Dim ArchivoEgs As New System.IO.FileInfo(String.Format("{0}Formatos/NotaCredito.rdlc", UsuarioActual.Empresa.Ruta)) If ArchivoIng.Exists Or ArchivoRem.Exists Or ArchivoEgs.Exists Then MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", CveVenta))) Else MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ") End If End If End If 'IMPRESION Try 'MANDA CORREO Dim capturedContext = HttpContext.Current Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) Dim Factura As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=False, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) Dim Hilo As New System.Threading.Thread(Sub() GeneraPDFFactura(ChkEnviarFactura.Checked, Factura, UsuarioActual, strURLHOST, UsarDescargaDesdePopUpVerFactura:=True)) Hilo.Start() Catch ex As Exception OnError("Ocurrió un error al enviar el PDF", ex) End Try 'SE COMENTA PORQUE SE GENERA LA NOTA DE CREDITO CON LOS IMPORTES DE LA VENTA 'If ObjFactura.TipoDocto = "Ing" AndAlso ObjFactura.Timbre.CFDIRelacionados.TipoRelacion = "07" Then ' CreaObjetosVentaAmortizacion(Nothing, ObjTimbrado.UUID, ObjFactura.CveVentaRelacion, CveVenta) ' For Each Gvr As GridViewRow In GvAntNC.Rows ' If Gvr.DataKey("FolioFiscal").ToString() = "" AndAlso Gvr.DataKey("TipoDocto") = "Egs" Then ' ObjFacturaDevolucion.CveVenta = Gvr.DataKey("CveVenta").ToEntero() ' ObjFacturaDevolucion.Serie = Gvr.DataKey("Serie").ToString() ' ObjFacturaDevolucion.Folio = Gvr.DataKey("Folio").ToEntero() ' ObjFacturaDevolucion.Timbre = PreParaTimbre(ObjFacturaDevolucion) ' End If ' Exit For ' Next ' If ObjFacturaDevolucion.CveVenta.ToEntero() > 0 Then ' Dim Obj2 As New List(Of Object) ' Obj2.Add(ObjFacturaDevolucion) ' If Not IsNothing(Obj2) AndAlso Obj2.Count > 0 Then ' Dim ofa As Modelos.Factura = CType(Obj2(0), Modelos.Factura) ' ofa.Timbre.CFDIRelacionados.UUID.Clear() ' ofa.Timbre.CFDIRelacionados.UUID.Add(ObjTimbrado.UUID) ' If ObjTimbrado.TimbrarFactura(UsuarioActual, ofa) Then ' MensajeAlert.AppendFormat(String.Format("
    La {0}: {1} se timbro correctamente.

    ", ofa.TipoDocumento, ofa.SerieFolio)) ' Else ' MensajeAlert.AppendFormat(String.Format("
    La {0}: {1} no se timbro correctamente.

    ", ofa.TipoDocumento, ofa.SerieFolio)) ' End If ' End If ' End If 'End If 'NOTIFICACION DE SMS 'Dim EstatusSMS As Integer = 0 'If ObjFactura.TipoDocto = "Ing" Then ' Dim ObjEventos As New ClsOIEventos ' EnviarSMSTimbrado(ObjEventos) ' ObjEventos.Dispose() 'End If 'Select Case EstatusSMS ' Case 1 ' MensajeAlert.AppendFormat("Notificación SMS: enviado con éxito al cliente al celular: {0}", ObjFactura.Cliente.CobranzaTelefono) ' Case 2 ' MensajeAlert.AppendFormat("Notificación SMS: sin enviar. Ocurrió un error en el envío, por favor verifique la información del cliente.") ' Case 3 ' MensajeAlert.AppendFormat("Notificación SMS: sin enviar. No se pudo cargar el celular del cliente, por favor verifique la información del cliente.") 'End Select 'MUESTA Alert OK 'MensajeAlert.Append("El Documento se generó correctamente") Dim Liga As String = If(UsuarioActual.CveRol = 1165, "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";", $"document.location.href=""/Ventas/Clientes.aspx?CveCliente={CveCliente}&Opt=2"";") Alert(MensajeAlert.ToString(), TipoMensaje.MsgInformacion, Liga) TrEmitir.Visible = False Else Alert(ObjTimbrado.MensajeErrorCFDI, TipoMensaje.MsgError) End If Else Me.OnError("El SAT regresó el siguiente mensaje: Crédito insuficiente.", New Exception) End If ElseIf UsuarioActual.Empresa.TipoFacturacion = "CBB" Then End If End Sub #End Region #Region " DESCUENTOS " Protected Sub BtnAplicarDescG_Click(sender As Object, e As System.EventArgs) Handles BtnAplicarDescG.Click If HdnTipoDescuento.Value = "2" Then If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then Dim IVAPromedio As Double = Math.Round(TmpDT.SUM("IVA") / TmpDT.COUNT("Consec"), 2) Dim IVA As Double = TmpDT.Rows(0)("IVA").ToString().ToDouble If IVAPromedio <> IVA Then Alert("No se puede aplicar descuento general a la factura ya tiene conceptos con diferente tasa de IVA", TipoMensaje.MsgError) Else 'Dim Descuento As Double = HdnDescuento.Value.Trim.Replace(",", "").ToDouble CalculaTotalesVenta() 'LblDescuentos.Text = Descuento.FormatoNumero(2) 'TxtIVA.Text = ((TxtSubTotal.Text.Trim.Replace(",", "").ToDouble - Descuento - LblAmortizacion.Text.Trim.Replace(",", "").ToDouble) * IVAPromedio).FormatoNumero(2) 'HdnIVAOriginal.Value = TxtIVA.Text 'CalculaTotales(True) HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") End If End If ElseIf HdnTipoDescuento.Value = "3" Then If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then Dim IVAPromedio As Double = Math.Round(TmpDT.SUM("IVA") / TmpDT.COUNT("Consec"), 2) Dim IVA As Double = TmpDT.Rows(0)("IVA").ToString().ToDouble If IVAPromedio <> IVA Then Alert("No se puede aplicar descuento general a la factura ya tiene conceptos con diferente tasa de IVA", TipoMensaje.MsgError) Else 'Dim Amortizacion As Decimal = HdnDescuento.Value.Trim.Replace(",", "").ToDecimal 'LblAmortizacion.Text = Amortizacion.FormatoNumero(2) 'TxtIVA.Text = ((TxtSubTotal.Text.Trim.Replace(",", "").ToDouble - Amortizacion - LblDescuentos.Text.Trim.Replace(",", "").ToDouble) * IVAPromedio).FormatoNumero(2) 'HdnIVAOriginal.Value = TxtIVA.Text 'CalculaTotales(True) CalculaTotalesVenta() HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" RegistraScript("BorraDescuentos();") HdnTieneAnticiposVinculados.Value = "1" End If End If End If RegistraScript("$('#ModalDescuento').modal('hide')", "hidemodal") UpPS.Update() End Sub Private Sub BtnAplicarOtrosConceptos_Click(sender As Object, e As EventArgs) Handles BtnAplicarOtrosConceptos.Click TotalOtrosConceptos = 0 For Each row As GridViewRow In GVOtrosConceptos.Rows TotalOtrosConceptos += row.FCTextBox("TxtCantidadConcepto").Text.ToDecimal Next RegistraScript("$('#ModalOtrosConceptos').modal('hide')", "hidemodal") End Sub 'Private Sub BtnAplicarComplementos_Click(sender As Object, e As EventArgs) Handles AplicarComplementosTimbrado.Click ' LkbAgregarComplementos.CssClass = "btn btn-circle btn-xs green" ' UpPS.Update() ' RegistraScript("$('#ModalComplementos').modal('hide')", "hidemodal") 'End Sub 'Private Sub BtnCancelarComplementos_Click(sender As Object, e As EventArgs) Handles CancelarComplementosTimbrado.Click ' trEntidad.Visible = False ' trContaComplementos.Visible = False ' trAmbito.Visible = False ' trTipoCampaña.Visible = False ' RblComplementos.SelectedIndex = -1 ' TxtIdConta.Text = "" ' DdlTipoCampaña.SelectedIndex = -1 ' DdlAmbitoComplemento.SelectedIndex = -1 ' DdlINEEntidad.SelectedIndex = -1 ' LkbAgregarComplementos.CssClass = "btn btn-circle btn-xs gray" ' UpComplementos.Update() ' UpDatosComplementos.Update() ' UpPS.Update() ' RegistraScript("$('#ModalComplementos').modal('hide')", "hidemodal") 'End Sub '2019-07-31 OSCAR Nuevo cancela usando el metodo de cancelacion de facturas Protected Sub LnkCancelarComplemetno_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).BindingContainer, GridViewRow) Dim ObjCancelacion As New Timbrado Dim ObjBanco As New ClsBancos Dim CveComplementoPago As Integer = GvRow.DataKey("CveComplementoPago").ToEntero() Dim FolioFiscal As String = GvRow.DataKey("FolioFiscal").ToString() Dim RFCEmisor As String = UsuarioActual.Empresa.RFC Dim RFCReceptor As String = GvRow.DataKey("RFCReceptor") Dim CvePACCancelacion As Integer = GvRow.DataKey("CvePAC").ToEntero() Dim RespCancelacion As RespuestaCancelacionSAT = ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, 0, RFCReceptor, RFCEmisor, CvePACCancelacion) If RespCancelacion.Verificado Then If ObjBanco.UpdateComplementoPagoCancelado(CveComplementoPago, 2, CvePACCancelacion, UsuarioActual.CveEmpresa, ObjCancelacion.CancelacionFecha, ObjCancelacion.CancelacionAcuse, 1) Then CargaComplementosPago() Alert("El complemento se canceló correctamente.") End If Else Alert("Los servicios de cancelación del SAT no se encuentran disponibles o presentan time out. Intente de nuevo en unos minutos.
    Origen del error: WebService www.sat.gob.mx", TipoMensaje.MsgError) End If ObjBanco.Dispose() End Sub #End Region #Region " VISTA PREVIA " Protected Sub BtnVistaPrevia_Click(sender As Object, e As System.EventArgs) Handles BtnVistaPrevia.Click VistaPreviaNew() End Sub #End Region #Region "I M A G E - B U T T O N S" Protected Sub ImgBtnAddC_Click(sender As Object, e As ImageClickEventArgs) Handles ImgBtnAddC.Click Dim Row As DataRow = Nothing Row = DTmpC.NewRow Row("Descripcion") = tbDescC.Text DTmpC.Rows.Add(Row) tbDescC.Text = "" tbDescC.Focus() GvConceptos.DataSource = DTmpC GvConceptos.DataBind() UPCD.Update() End Sub Protected Sub ImgBtnAddF_Click(sender As Object, e As ImageClickEventArgs) Handles ImgBtnAddF.Click Dim Row As DataRow = Nothing Dim ObjVentas As New ClsVentas Row = DTmpF.NewRow Row("CveVenta") = 0 Row("Titulo") = tbTituloF.Text Row("Nombre") = tbNmbF.Text Row("Puesto") = tbPuesF.Text Row("Lado") = ddlPos.SelectedValue.ToEntero() DTmpF.Rows.Add(Row) tbNmbF.Text = "" tbPuesF.Text = "" tbTituloF.Text = "" ddlPos.SelectedValue = CStr(0) GvFirmas.DataSource = DTmpF GvFirmas.DataBind() UPFirmas.Update() tbTituloF.Focus() End Sub #End Region #Region "D R O P - D O W N - L I S T" Private Sub DdlPSIndexChange(CvePSParametro As Integer, Ddl As ADServerControl.Dropdownlost) If Not CveCliente > 0 And Not CveEmpresaCRM > 0 Then Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana(""/Ventas/PopUpBuscarClientes.aspx?Opt=Fact"", 800, 547, ""N"", ""PopUpBuscar"")") Exit Sub End If If CvePSParametro > 0 Then Dim drPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimero("") If drPS IsNot Nothing Then CargaListasPreciosSubProyectos(CvePSParametro) 'HdnUnidadMedida.Value = PS.Rows(0)("CveUnidadMedida").ToString() HdnPS.Value = drPS("PS").ToString() HdnCodigoPS.Value = drPS("PSCodigo").ToString() HdnTipoPS.Value = drPS("CveTipoPS").ToString() HdnTipoInv.Value = drPS("Inv_CveMetodoInventario").ToString() HdnAplicaIEPS.Value = drPS("AplicaIEPS").ToString() HdnPorcentajeIEPS.Value = drPS("IEPSPorcentaje").ToString() DdlUnidadMedida.Items.Clear() If UsuarioActual.Empresa.UsaInventarios Then DdlUnidadMedida.DataSource = GlobalDTProductosServiciosEquivalencias(CvePSParametro, -1, UsuarioActual.CveEmpresa) Else DdlUnidadMedida.DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) End If DdlUnidadMedida.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlUnidadMedida.SelectedValue = "-1" DdlUnidadMedida.DataBind() DdlUnidadMedida.SelectedValueExist(drPS("CveUnidadMedida").ToString()) If UsuarioActual.TienePermisoProceso(253) Then TxtPrecio.Enabled = True If EsVentaMedica Then TxtPrecio.Enabled = False If UsuarioActual.CveUsuario = 3986 Or RBLTipoVenta.SelectedValue.ToEntero = 2 Then TxtPrecio.Enabled = True End If If DdlTipoComprobante.SelectedValue = "Cot" Then TxtPrecio.Enabled = True End If Else If drPS("CveTipoPS").ToString() = "1" Then 'Si es servicio If UsuarioActual.Empresa.Funcionalidad(558).ToString() = "1" Then 'Si es Empresa llantera TxtPrecio.Enabled = True Else 'TxtPrecio.Enabled = False End If Else TxtPrecio.Enabled = True End If End If Dim PSCodigoSAT As String = drPS("SATClavePS").ToString If UsuarioActual.TienePermisoProceso(68) AndAlso Not PSCodigoSAT.Contiene("84111506", "80141610") Then TxtPrecio.Enabled = False If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count = 0 AndAlso Not ChkEmitirComercioExterior.Checked Then DdlMoneda.SelectedValueExist(drPS("CveMoneda").ToString()) CambiaMoneda() End If 'SUGIERE PRECIO Dim PrecioSugerido As Decimal = 0 Dim tPrecioSugerido As Decimal = 0 tPrecioSugerido = drPS("Precio").ToString().ToDecimal Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePSParametro, drPS("CveClasificacion").ToString().ToEntero()) PrecioSugerido = ObjPrecioSugerido.PrecioSugerido If ObjPrecioSugerido.CvePrecioLista > 0 AndAlso DivPrecioLista.Visible Then DdlPrecioLista.SelectedValueExist(ObjPrecioSugerido.CvePrecioLista) If UsuarioActual.CveEmpresa = 189 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot", "Ped") Then If DirectCast(DdlPrecioLista.DataSource, DataTable) IsNot Nothing Then Dim dt = DirectCast(DdlPrecioLista.DataSource, DataTable) If dt IsNot Nothing Then If dt.Rows.Count > 0 Then 'CHECA SI EL PRECIO SUGERIDO ESTA EN LA LISTA DE PRECIOS PERMITIDAS If dt.FiltroPrimeroValor("CvePrecioLista", $"CvePrecioLista = {ObjPrecioSugerido.CvePrecioLista}").ToEntero() <= 0 Then If ObjPrecioSugerido.CvePrecioLista = Me.CvePrecioListaCliente Then Alert("La lista de precios del cliente no esta permitido en la sucursal actual", TipoMensaje.MsgAdvertencia) End If ObjPrecioSugerido.CvePrecioLista = -1 ObjPrecioSugerido.PrecioSugerido = 0 tPrecioSugerido = 0 PrecioSugerido = 0 End If Else ObjPrecioSugerido.CvePrecioLista = -1 ObjPrecioSugerido.PrecioSugerido = 0 tPrecioSugerido = 0 PrecioSugerido = 0 If Not CBool(drPS("PrecioLibre")) Then Alert("No se encontro una lista de precios permitida en la sucursal actual", TipoMensaje.MsgAdvertencia) End If End If Else ObjPrecioSugerido.CvePrecioLista = -1 ObjPrecioSugerido.PrecioSugerido = 0 tPrecioSugerido = 0 PrecioSugerido = 0 If Not CBool(drPS("PrecioLibre")) Then Alert("No se encontraron listas de precio disponibles", TipoMensaje.MsgAdvertencia) End If End If End If End If End If End If If UsuarioActual.CveEmpresa = 189 Then If DdlTipoComprobante.SelectedValue.Contiene("Ant") Then DdlPrecioLista.SelectedValueExistInsert("-1", "Sin lista") Me.CvePrecioLista = -1 ObjPrecioSugerido.CvePrecioLista = -1 ObjPrecioSugerido.PrecioSugerido = 0 tPrecioSugerido = 0 PrecioSugerido = 0 TxtPrecio.Enabled = CBool(drPS("PrecioLibre")) Else TxtPrecio.Enabled = CBool(drPS("PrecioLibre")) End If End If If UsuarioActual.TienePermisoProceso(253) Then TxtPrecio.Enabled = True 'permiso para activar los precios If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido TxtPrecio.Text = PrecioSugerido.ToString("#,##0.####") ' que muestre hasta los 4 digitos si lo requiere If IsNumeric(TxtCantidad.Text.Trim) Then LblTotalPS.Text = (TxtCantidad.Text.Trim.ToDouble * TxtPrecio.Text.ToDouble).ToString().FormatoNumero(2) Else LblTotalPS.Text = "0.00" End If LblPrecio1.Text = TxtPrecio.Text UPPDescuento.Update() HdnIVAPS.Value = If(drPS("IVA").ToString() = "-1", ViewState("IVA"), drPS("IVA").ToString()).ToString() HdnIVARetAPS.Value = drPS("RetIVA").ToString() HdnCodigo.Value = drPS("Codigo").ToString() If DdlClasificacion.SelectedIndex = 0 Then If drPS("CveClasificacion").ToString() IsNot Nothing Then DdlClasificacion.SelectedValueExist(drPS("CveClasificacion").ToString()) Else Alert("El Productos/Servicio no tiene asignada una Clasificación.", TipoMensaje.MsgInformacion) End If End If If UsuarioActual.Empresa.Funcionalidad(716) = "1" Then Dim Imagen = drPS("Imagen").ToString Dim URLImagen As String = "" If Not String.IsNullOrEmpty(Imagen) Then URLImagen = String.Format("/ashx/SIGWeb.ashx?Metodo=GetImg&r={0}", Extensiones.Encripta(Imagen)) End If If imgImagen.Attributes.Item("src") Is Nothing Then imgImagen.Attributes.Add("src", URLImagen) Else imgImagen.Attributes.Item("src") = URLImagen End If UpImagen.Update() If Not String.IsNullOrEmpty(Imagen) Then RegistraScript("initcarusel();", "I1") End If End If Dim AgregarPSAutomaticamente As Boolean = False If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Egs", "Ant") Then AgregarPSAutomaticamente = True End If If UsuarioActual.CveEmpresa = 189 Then AgregarPSAutomaticamente = False Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) Dim Costo As Decimal = 0 If (CveVenta <= 0 OrElse EsCreaApartirDe) AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso PuedeVerCosto Then GvPS.Columns(10).Visible = True thCosto.Visible = True thCosto2.Visible = True If UsuarioActual.Empresa.Funcionalidad(602) = "UC" Then 'validación sobre el último costo Dim ObjInventarios As New ClsInventarios If ObjInventarios.GetUltimoCosto(UsuarioActual.CveEmpresa, CvePSParametro) Then Dim dr As DataRow = ObjInventarios.DtResultados.FiltroPrimero("") If dr IsNot Nothing Then Costo = dr("UltimoCosto").ToString.ToDecimal End If End If ObjInventarios.Dispose() Else Dim ObjInventarios As New ClsInventarios Costo = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.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 Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() End If If Costo > 0 Then If TxtPrecio.Text.ToDecimal() > 0 Then Dim PorUtilidad = String.Format("{0:N2} %", ((TxtPrecio.Text.ToDecimal() - Costo) / Costo) * 100D) LtlHeaderCosto.Text = String.Format("{0:N2}
    {1}", Costo, PorUtilidad) End If End If End If End If Me.ObjDescuentoGral = CalcularDescuentos(CvePSParametro, TxtCantidad.Text.Trim.ToDecimal, TxtPrecio.Text.ToDecimal()) If Me.ObjDescuentoGral IsNot Nothing Then If ObjDescuentoGral.CvePromocionDetalle > 0 Then TagPromocion.Visible = True If UsuarioActual.CveEmpresa = 189 Then If DtPromociones IsNot Nothing Then Dim NombrePromo As String = DtPromociones.FiltroPrimeroValor("NombrePromocion", $"CvePromocionDetalle={ObjDescuentoGral.CvePromocionDetalle}") TagPromocion.Attributes.Add("title", NombrePromo) End If End If End If If Me.ObjDescuentoGral.EsPUModificado Then TxtPrecio.Text = Me.ObjDescuentoGral.PU.ToString() End If End If If AgregarPSAutomaticamente Then AgregarPS() End If End If ElseIf CvePSParametro = -2 Then CargaPS(DdlClasificacion.SelectedValue.ToEntero(), Ddl) End If If UsuarioActual.CveEmpresa.Contiene(186, 189) Then TxtPrecio.Focus() End If UPPPS.Update() UpPS.Update() End Sub Private Function CalculaPrecioSugerido(CvePSParametro As Integer, CveClasificacion As Integer, Optional CvePrecioListaSugerido As Integer = -1) As Modelos.MPrecioSugerido Dim Retorno As New Modelos.MPrecioSugerido Dim PrecioSugerido As Decimal = 0 If UsuarioActual.CveEmpresa.Contiene(1) Then Dim ObjPS As New ClsProductosServicios If ObjPS.GetPorcentajeProductos(CveCliente) Then Dim PrecioAplicado As Decimal = ObjPS.DtResultados.FiltraParametros($"CvePS = {CvePSParametro}").FiltroPrimeroValor("PrecioA").ToDecimal If PrecioAplicado > 0 Then PrecioSugerido = PrecioAplicado End If End If ObjPS.Dispose() End If If UsuarioActual.Empresa.Funcionalidad(404).ToEntero > 0 Then 'cuando el valor es 10.- secuencia Cliente/Sucursal, 20 - sucursal/cliente Dim TipoPrecioLista As Integer = UsuarioActual.Empresa.Funcionalidad(404).ToEntero ' si es 10. primero el cliente Dim CvePrecioListaPS As Integer Dim PorcentajePrecio As Decimal = 0 If TipoPrecioLista = 10 Then CvePrecioListaPS = Me.CvePrecioListaCliente If CvePrecioListaPS <= 0 Then CvePrecioListaPS = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() End If Else CvePrecioListaPS = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() If CvePrecioListaPS <= 0 Then CvePrecioListaPS = Me.CvePrecioListaCliente 'GlobalDTCliente(UsuarioActual.CveEmpresa, Estatus:=-1, CveCliente:=CveCliente).FiltroPrimeroValor("CvePrecioLista").ToEntero() End If If Me.CvePrecioListaCliente > 0 Then Dim ArrayClientes As String() = UsuarioActual.Empresa.Funcionalidad(711).Split(",".ToCharArray()) 'VERIFICA SI EL CLIENTE ACTUAL DEBE TENER PRIORIDAD SU LISTA DE PRECIOS If ArrayClientes.Length > 0 AndAlso ArrayClientes.Count(Function(cliente) cliente.Trim() = Me.CveCliente.ToString()) > 0 Then CvePrecioListaPS = Me.CvePrecioListaCliente End If End If End If 'SI ESTA AGREGANDO TOMAR DEL SELECCIONADO If DivPrecioLista.Visible AndAlso CvePrecioListaSugerido > 0 Then CvePrecioListaPS = CvePrecioListaSugerido End If 'SI ES EDICION DE PS If CvePrecioListaSugerido > 0 AndAlso (UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(360) = "1") Then If GvPS.EditIndex >= 0 Then CvePrecioListaPS = CvePrecioListaSugerido End If End If Dim CvePrecioListaPredeterminada = -1 Dim AplicaPredeterminado As Boolean = False If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso RBLTipoVenta.SelectedValue = "2" Then AplicaPredeterminado = True CvePrecioListaPredeterminada = GlobalDTPrecioListas(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePrecioLista", "Predeterminada = True").ToEntero() If CvePrecioListaPredeterminada > 0 Then CvePrecioListaPS = CvePrecioListaPredeterminada End If End If If AplicaPredeterminado AndAlso CvePrecioListaPredeterminada <= 0 Then Alert("No hay una lista de precios predeterminada", TipoMensaje.MsgAdvertencia) End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then 'ES CREDITO, DEBE TOMAR LA LISTA DE PRECIOS DE CREDITO If RBLPago.SelectedValue = "1" Then Dim CvePrecioListaCredito = GlobalDTPrecioListas(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvePrecioLista", "ISNULL(Credito,False) = True").ToEntero() If CvePrecioListaCredito > 0 Then CvePrecioListaPS = CvePrecioListaCredito End If End If 'ESTE CLIENTE DEBE TENER PRIORIDAD SU LISTA DE PRECIO, SEA CREDITO O CONTADO If CveCliente = 888648 Then If Me.CvePrecioListaCliente > 0 Then CvePrecioListaPS = Me.CvePrecioListaCliente End If End If End If If CvePrecioListaPS > 0 Then Dim ObjPS As New ClsProductosServicios If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioListaPS, CvePS:=CvePSParametro, Opcion:=1) Then PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal PorcentajePrecio = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal End If ObjPS.Dispose() End If If AplicaPredeterminado AndAlso PrecioSugerido <= 0 Then Alert("El producto y/o servicio no tiene asignado un valor en la lista de precios predeterminada", TipoMensaje.MsgAdvertencia) End If If PrecioSugerido = 0 Then Dim ObjInventarios As New ClsInventarios Dim CostoPS As Decimal = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidad.Text.Trim.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(CvePSParametro, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() If CostoPS > 0 And PorcentajePrecio > 0 Then PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS End If End If Me.CvePrecioLista = CvePrecioListaPS Retorno.CvePrecioLista = CvePrecioListaPS End If If PrecioSugerido > 0 Then Dim PrecioBaseCosto As Decimal = 0 PrecioBaseCosto = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion).FiltroPrimeroValor("PrecioBaseCosto", "").ToDecimal If PrecioBaseCosto > 0 Then PrecioSugerido = PrecioSugerido * ((PrecioBaseCosto / 100) + 1) End If End If Retorno.PrecioSugerido = PrecioSugerido Return Retorno End Function Protected Sub DdlPS_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DdlPS.selectedindexchange DdlPSIndexChange(DdlPS.SelectedValue.ToEntero(), DdlPS) End Sub Protected Sub DdlPSEdit_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Dim ActualizarPrecios As Boolean = False If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then ActualizarPrecios = True End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then ActualizarPrecios = True End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then ActualizarPrecios = True End If If ActualizarPrecios Then Dim EditarPrecio As Boolean = True If DdlTipoComprobante.SelectedValue = "Ant" AndAlso UsuarioActual.CveEmpresa = 189 Then EditarPrecio = False End If If GvPS.EditIndex >= 0 AndAlso EditarPrecio Then Dim ddlPSEdit = DirectCast(sender, ADServerControl.Dropdownlost) Dim GvRow = DirectCast(ddlPSEdit.NamingContainer, GridViewRow) If (GvRow.RowState = DataControlRowState.Edit OrElse GvRow.RowState = 5) Then Dim CvePSParametro = ddlPSEdit.SelectedValue.ToEntero() Dim CveClasificacion As Integer = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimeroValor("CveClasificacion").ToEntero() If CveClasificacion > 0 Then Dim DdlCla As DropDownList = GvRow.FCDropDownList("DdlClasificacion") DdlCla.SelectedValueExist(CveClasificacion) End If Dim CvePrecioListaSugerido As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(360) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(109) = "1" Then Dim DdlPrecioListaEdit = GvRow.FCDropDownList("DdlPrecioListaEdit") If UsuarioActual.CveEmpresa = 189 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot", "Ped") AndAlso GvRow.FCHtmlGenericControl("DivPrecioLista").Visible Then Using ObjVta As New ClsVentas If ObjVta.GetPreciosListaSPPermitidos(DdlSubProyectoDatos.SelectedValue.ToEntero(), CvePSParametro, UsuarioActual.CveEmpresa) Then Dim Dt As DataTable = Nothing If UsuarioActual.TienePermisoProceso(384) Then Dt = ObjVta.DtResultados.Copy() Else Dt = ObjVta.DtResultados.FiltraParametros("Restringuida = 'False'") End If GvRow.FCDropDownList("DdlPrecioListaEdit").DataSource = Dt GvRow.FCDropDownList("DdlPrecioListaEdit").DataBind() GvRow.FCDropDownList("DdlPrecioListaEdit").SelectedValueExist(GvRow.DataKey("CvePrecioLista")) End If End Using End If End If CvePrecioListaSugerido = DdlPrecioListaEdit.SelectedValue.ToEntero() Else CvePrecioListaSugerido = GvRow.DataKey("CvePrecioLista").ToEntero() End If Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimero("") If DrPS IsNot Nothing Then 'SUGIERE PRECIO Dim PrecioSugerido As Decimal = 0 Dim tPrecioSugerido As Decimal = 0 tPrecioSugerido = DrPS("Precio").ToString().ToDecimal Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePSParametro, DrPS("CveClasificacion").ToString().ToEntero(), CvePrecioListaSugerido:=CvePrecioListaSugerido) PrecioSugerido = ObjPrecioSugerido.PrecioSugerido If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido GvRow.FCTextBox("TxtPrecio").Text = PrecioSugerido.ToString("#,##0.####") ' que muestre hasta los 4 digitos si lo requiere End If End If End If End If End Sub Protected Sub DdlPrecioListaEdit_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(360) = "1" Then If GvPS.EditIndex >= 0 Then Dim DdlPrecioListaEdit = DirectCast(sender, DropDownList) Dim GvRow = DirectCast(DdlPrecioListaEdit.NamingContainer, GridViewRow) If (GvRow.RowState = DataControlRowState.Edit OrElse GvRow.RowState = 5) Then Dim CvePSParametro = GvRow.FCDropDownLost("DdlPS").SelectedValue.ToEntero() Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimero("") If DrPS IsNot Nothing Then 'SUGIERE PRECIO Dim PrecioSugerido As Decimal = 0 Dim tPrecioSugerido As Decimal = 0 tPrecioSugerido = DrPS("Precio").ToString().ToDecimal Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePSParametro, DrPS("CveClasificacion").ToString().ToEntero(), CvePrecioListaSugerido:=DdlPrecioListaEdit.SelectedValue.ToEntero()) PrecioSugerido = ObjPrecioSugerido.PrecioSugerido If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido GvRow.FCTextBox("TxtPrecio").Text = PrecioSugerido.ToString("#,##0.####") ' que muestre hasta los 4 digitos si lo requiere End If End If End If End If End Sub Protected Sub DdlClasificacion_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlClasificacion.SelectedIndexChanged CargaPS(DdlClasificacion.SelectedValue.ToEntero(), DdlPS) UpPS.Update() End Sub Protected Sub DdlNCFactura_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlNCFactura.SelectedIndexChanged Dim objcompras As New ClsCompras If objcompras.GetCompraDetalleAlmacen(0, DdlNCFactura.SelectedValue.ToEntero()) Then GvInvNC.DataSource = objcompras.DtResultados If objcompras.DtResultados.Rows.Count > 0 Then Tab.ActiveTabIndex = 1 Updatetabs.Update() End If Else GvInvNC.DataSource = Nothing End If GvInvNC.DataBind() UpINVNC.Update() objcompras.Dispose() End Sub Protected Sub DdlTipoComprobante_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlTipoComprobante.SelectedIndexChanged CambiaTipoComprobante() End Sub Private Sub CambiaTipoComprobante() CambiaTipoDocto() LimpiaEscondeContado() End Sub Private Sub CambiaTipoDocto() CargaNC(IfNull(Request("CveDevolucion"), "-1").ToString().ToEntero()) ConfiguraTipoDocto() CargaFolios() CargaEstatusFactura(DdlTipoComprobante.SelectedValue) UpEstatus.Update() If UsuarioActual.TienePermisoProceso(274) Then TrAntEspecial.Visible = DdlTipoComprobante.SelectedValue = "Ant" End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Rem" Then TrRemEspecial.Visible = UsuarioActual.TienePermisoProceso(390) End If 'REINICIALIZA VALORES DE ENTREGA POR ADELANTADO RequiereAlmacenDestino = False TrAlmacenAsignado.Visible = False TrAlmacenOrigen.Visible = False If DdlTipoComprobante.SelectedValue = "Cot" And UsuarioActual.Empresa.Funcionalidad(135).Contiene("1", "2") Then Alert("Se requiere una autorización.", TipoMensaje.MsgAdvertencia) TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False 'RBLPago.Enabled = False RBLPago.SelectedValue = "2" RBLPago_SelectedIndexChanged(RBLPago, EventArgs.Empty) TxtFechaVencimientoCotizacion.Text = NowADS().ToString() GvPS.Columns(5).Visible = True ThTiempoEntrega.Visible = True ThTiempoEntrega2.Visible = True ChkEnviarFactura.Checked = True UpnTools.Update() tdTelefonoGen.Visible = False tdTxtTelefonoGen.Visible = False If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 122, 140, 145) Then ChkEnviarFactura.Checked = False End If Else If DdlTipoComprobante.SelectedValue = "Cot" Then TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False 'RBLPago.Enabled = False 'RBLPago.SelectedValue = "2" TxtFechaVencimientoCotizacion.Text = NowADS().ToString() GvPS.Columns(5).Visible = True ThTiempoEntrega.Visible = True ThTiempoEntrega2.Visible = True tdTelefonoGen.Visible = False tdTxtTelefonoGen.Visible = False 'CUANDO SEA COMPUPROVEEDORES NO MANDA COTIZACIONES If UsuarioActual.CveEmpresa = 72 Then ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = False LblEnviarMail.Visible = False End If If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 122, 145) Then ChkEnviarFactura.Checked = False End If Else TrDireccion.Visible = True TrCiudad.Visible = True TrRFC.Visible = True GvPS.Columns(5).Visible = False ThTiempoEntrega.Visible = False ThTiempoEntrega2.Visible = False RBLPago.Enabled = True LblMensaje.Visible = UsuarioActual.Empresa.Funcionalidad(152) <> "" And DdlTipoComprobante.SelectedValue.Contiene("Ing") If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Egs", "Dev") Then ChkEnviarFactura.Checked = EnviarCorreoCliente ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True ObtenerFechaVencimientoCER() If DdlTipoComprobante.SelectedValue.Contiene("Egs") Then 'se cargan las facturas timbradas 'CargaFacturasRelacionar() 'RegistraScript("$('#DivRelacionarFacturasNC').modal('show');") End If End If If DdlTipoComprobante.SelectedValue.Contiene("Rem", "PeC", "PA", "Ped") Then 'ENTREGA POR ADELANTADO If UsuarioActual.Empresa.Funcionalidad(145) = "1" And Not DdlTipoComprobante.SelectedValue.Contiene("PA") Then 'If UsuarioActual.CveEmpresa.Contiene(4, 72, 80, 119) Then RequiereAlmacenDestino = True 'If DdlTipoComprobante.SelectedValue.Contiene("Ped", "PeC") Then ' TrAlmacenAsignado.Visible = True 'End If Dim CveAlmacenDestino As Integer = DtContratos.FiltroPrimeroValor("CveAlmacenDestino", $"CveContrato = {If(DdlContratosModal.Items.Count > 0, DdlContratosModal.SelectedValue, "0")}").ToEntero() If CveAlmacenDestino > 0 Then DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} And CveTipoAlmacen In (4,10)") DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.Items.Insert(0, New ListItem(DtContratos.FiltroPrimeroValor("Almacen", $"CveContrato = {DdlContratosModal.SelectedValue}"), CveAlmacenDestino.ToString())) DdlAlmacenAsignado.SelectedValue = CveAlmacenDestino.ToString() Else DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()} AND CveTipoAlmacen IN (10)") DdlAlmacenAsignado.DataBind() End If Dim CveAlmacenOrigen As Integer = DtContratos.FiltroPrimeroValor("CveAlmacenOrigen", $"CveContrato = {If(DdlContratosModal.Items.Count > 0, DdlContratosModal.SelectedValue, "0")}").ToEntero() If CveAlmacenOrigen > 0 Then DdlAlmacenOrigen.Items.Clear() DdlAlmacenOrigen.DataSource = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveTipoAlmacen:=-1, CveAlmacen:=CveAlmacenOrigen) '.FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") DdlAlmacenOrigen.DataBind() DdlAlmacenOrigen.SelectedValueExist(CveAlmacenOrigen.ToString()) End If UpParametros.Update() Else RequiereAlmacenDestino = False TrAlmacenAsignado.Visible = False TrAlmacenOrigen.Visible = False End If 'ENVIO DE FACTURA ChkEnviarFactura.Checked = False ChkEnviarFactura.Visible = True LblEnviarMail.Visible = True If CveVenta > 0 AndAlso EnviarCorreoCliente Then ChkEnviarFactura.Checked = EnviarCorreoCliente End If If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "PA", "Ped") AndAlso (ReceptorRFC = "XAXX010101000" Or LblRFC.Text = "XAXX010101000") Then TrDireccion.Visible = False TrCiudad.Visible = False TrRFC.Visible = False tdTelefonoGen.Visible = True tdTxtTelefonoGen.Visible = True Else TxtAtencionA.Text = "" TxtTelefonoGenerico.Text = "" End If End If End If If DdlTipoComprobante.SelectedValue.Contiene("Ing") Then ImgAntiPend.Visible = True Else ImgAntiPend.Visible = False End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem") Then ImgAntiPend.Visible = True End If If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) End If If ImgAntiPend.Visible Then If Me.TmpDTAnticiposNCIxCCliente IsNot Nothing Then Dim DtMovtos As DataTable = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 And SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo IN('NC','RNC','IxC','Ant') ", "")}") If DtMovtos.Rows.Count = 0 Then ImgAntiPend.Visible = False End If End If End If TxtFechaPago.Text = NowADS().AddDays(PlazoCobranza).ToShortDateString DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) TabAlmacen.Enabled = DdlTipoComprobante.SelectedValue <> "Ant" 'VALIDA ESTATUS CLIENTE - SOLO SE PUEDE USAR EL CLIENTE PARA COTIZAR EN CASO DE ESTAR INACTIVO If EsCreaApartirDe OrElse ModalidadEdicion OrElse CveVenta <= 0 Then If DdlTipoComprobante.SelectedValue.Contiene("Cot", "DPe") Or TipoContrato >= 0 Then 'SI VIENE DE PEDIDO DE AF DESDE CONTRATO NO BLOQUEA CUANDO EL CLIENTE ESTA INACTIVO BtnEmitirImprimir.Visible = True TrVistaPrevia.Visible = True Else If LblCliente.Text <> "Cliente" And Not EstatusCliente Then Alert("El Cliente seleccionado no esta activo", TipoMensaje.MsgAdvertencia) End If If Not CveEmpresaCRM > 0 Then BtnEmitirImprimir.Visible = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 TrVistaPrevia.Visible = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 Else BtnEmitirImprimir.Visible = TieneBloqueoPorCreditoVencimiento = 0 TrVistaPrevia.Visible = TieneBloqueoPorCreditoVencimiento = 0 End If End If End If If DdlTipoComprobante.SelectedValue = "Ing" Then ImgAntiPend.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem") Then ImgAntiPend.Visible = True End If If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) End If If ImgAntiPend.Visible Then If Me.TmpDTAnticiposNCIxCCliente IsNot Nothing Then Dim DtMovtos As DataTable = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 And SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo IN('NC','RNC','IxC','Ant') ", "")}") If DtMovtos.Rows.Count = 0 Then ImgAntiPend.Visible = False End If End If End If MostrarOpcionesPaqueteria() TrAtencionA.Visible = True tdVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") tdFechaVigencia.Visible = DdlTipoComprobante.SelectedValue.Contiene("Cot") If UsuarioActual.Empresa.Funcionalidad(706) = "1" AndAlso (CveVenta <= 0 OrElse EsCreaApartirDe) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem") Then TrTipoContable.Visible = True End If CargaListasPreciosSubProyectos(If(DdlPS.SelectedValue.ToEntero() <= 0, -1, DdlPS.SelectedValue.ToEntero())) If DdlTipoComprobante.SelectedValue = "Ant" AndAlso UsuarioActual.CveEmpresa = 189 Then Dim DatarowPS = GlobalDTPS(UsuarioActual.CveEmpresa, SATClavePS:="84111506").FiltroPrimero("CodigoPS LIKE '%ANTICIPO%' OR CodigoPS LIKE '%anticipo%' OR CodigoPS LIKE '%Anticipo%'") If DatarowPS IsNot Nothing Then DdlPS.SelectedValue = DatarowPS("CvePS").ToString() DdlPS.SelectedText = DatarowPS("CodigoPS").ToString() DdlPS_SelectedIndexChanged(Nothing, Nothing) End If End If Updatetabs.Update() UPCondicionesPago.Update() UpCliente.Update() UpPS.Update() UPObservaciones.Update() End Sub Protected Sub DdlSucursalCliente_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSucursalCliente.SelectedIndexChanged CargaClienteSucursal(DdlSucursalCliente.SelectedValue.ToEntero()) 'RECARGA LAS RESTRICCIONES DE CREDITO SI SE CAMBIO LA SUCURSAL DEL CLIENTE If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then CargaRestriccionesCreditoCliente(Alertas:=True, CveVenta:=Me.CveVenta) End If End Sub Protected Sub DdlCCEdit_SelectedIndexChanged(sender As Object, e As System.EventArgs) Dim gvr As GridViewRow = DirectCast(DirectCast(sender, DropDownList).BindingContainer, GridViewRow) Dim CveProyecto As String = DirectCast(sender, DropDownList).SelectedValue gvr.FCDropDownList("DDlSubProyecto").Items.Clear() gvr.FCDropDownList("DDlSubProyecto").DataSource = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveProyecto:=CveProyecto.ToEntero()) gvr.FCDropDownList("DDlSubProyecto").DataBind() gvr.FCDropDownList("DDlSubProyecto").Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) End Sub Protected Sub DdlClasificacion_SelectedIndexChanged1(sender As Object, e As EventArgs) Dim gvr As GridViewRow = DirectCast(DirectCast(sender, DropDownList).BindingContainer, GridViewRow) CargaPS(gvr.FCDropDownList("DdlClasificacion").SelectedValue.ToEntero(), gvr.FCDropDownLost("DdlPS")) End Sub Protected Sub BtnEstimacion_Click(sender As Object, e As EventArgs) Handles BtnEstimacion.Click Dim Contrato As String = "" Dim Importe As Decimal = 0 Dim CvePS As Integer Dim PS As String Dim PSCodigo As String Dim CveUM As Integer Dim UM As String Dim CveClasificacion As Integer Dim Clasificacion As String Dim CveProyecto As Integer Dim Proyecto As String Dim CveSubProyecto As Integer Dim SubProyecto As String Dim FechaInicial As String = "" TmpDT.Rows.Clear() For Each Row As GridViewRow In GvEst.Rows If Row.FCCheckBox("Chk").Checked Then Importe += Row.FCLiteral("LtlImporte").Text.ToDecimal Contrato = Row.DataKey("NumeroContrato") CveContrato = Row.DataKey("CveContrato").ToEntero() FechaInicial = Row.DataKey("FechaInicial").ToString().ToDate.ToString("dd MMMM yyyy") CveSubProyecto = Row.DataKey("CveSubProyecto").ToEntero() End If Next If Importe > 0 Then CvePS = UsuarioActual.Empresa.Funcionalidad(106).ToEntero() If CvePS > 0 Then Dim rowPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If rowPS IsNot Nothing Then PS = rowPS("PS").ToString() PSCodigo = rowPS("PSCodigo").ToString() CveUM = rowPS("CveUM").ToString().ToEntero() UM = rowPS("UnidadMedida").ToString() CveClasificacion = rowPS("CveClasificacion").ToString().ToEntero() Clasificacion = rowPS("Clasificacion").ToString() Dim rowSP As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto={0}", CveSubProyecto)) Proyecto = rowSP("Proyecto").ToString() CveProyecto = rowSP("CveProyecto").ToString().ToEntero() SubProyecto = rowSP("SubProyecto").ToString() AgregarProductoServicio(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, String.Format("{0} - {1}, con un importe de {2}", Contrato, FechaInicial, Importe.FormatoNumero), Importe, 0, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) 'AddPS(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, String.Format("{0} - {1}, con un importe de {2}", Contrato, FechaInicial, Importe.FormatoNumero), Importe, 0.16, 0, 0, 1, 0, True, "", CveProyecto, Proyecto, CveSubProyecto, SubProyecto, rowPS("CveTipoPS").ToString().ToEntero(), rowPS("Inv_CveMetodoInventario").ToString().ToEntero(), CodigoPS:=PSCodigo) DdlTipoComprobante.SelectedValue = "Rem" DdlTipoComprobante_SelectedIndexChanged(DdlTipoComprobante, Nothing) End If UpParametros.Update() Tab.ActiveTab = TabGenerales Else Alert("La empresa no contiene un producto asignado a la estimació", TipoMensaje.MsgInformacion) End If Updatetabs.Update() End If End Sub Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlProyecto.SelectedIndexChanged CargaSubProyecto(FiltraPorProyecto:=True) End Sub #End Region #Region " SUCURSAL FACTURACION " Private Sub DdlSubProyectoDatos_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSubProyectoDatos.SelectedIndexChanged CambiaSucursalGeneral() End Sub Private Sub CambiaSucursalGeneral(Optional RecargarPartidas As Boolean = True) Dim ObjSubProyectos As New ClsSubProyectos 'Dim ObjSucursal As New ClsSucursales If ObjSubProyectos.GetSubProyectos() Then DTSucursal = ObjSubProyectos.DtResultados.FiltraParametros(String.Format("CveSubProyecto = {0}", DdlSubProyectoDatos.SelectedValue.ToEntero())) 'Dim drc As DataRow 'drc = DTSucursal(0) DdlSubProyecto.Items.Clear() DdlSubProyecto.DataSource = DTSucursal 'DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1")) 'DdlSubProyecto.SelectedValue = "-1" DdlSubProyecto.DataBind() DdlSubProyecto.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) CambiaSucursal(RecargarPartidas) DdlSubProyectoEjecucion.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) DdlSubProyectoCobranza.SelectedValueExist(DdlSubProyectoDatos.SelectedValue) 'If ObjSucursal.GetSucursales(UsuarioActual.CveEmpresa) Then ' DTSucursal = ObjSucursal.DtResultados.FiltraParametros(String.Format("CveSucursal = {0}", drc("CveSucursal").ToString().ToEntero())) ' Dim dre As DataRow ' dre = DTSucursal(0) ' DdlSucursal.SelectedValue = dre("CveSucursal").ToString() ' CambiaSucursal() 'End If End If ObjSubProyectos.Dispose() CargaVendedores() HabilitarRemisionesPublicoGeneral() If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then DdlPS.Attributes.Remove("data-cvesubproyecto") DdlPS.Attributes.Add("data-cvesubproyecto", DdlSubProyectoDatos.SelectedValue) End If CargaListasPreciosSubProyectos(If(DdlPS.SelectedValue.ToEntero() <= 0, -1, DdlPS.SelectedValue.ToEntero())) Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() UpDetalle.Update() UpEmitirTransitorio.Update() End Sub Private Sub CambiaSucursal(Optional RecargarPartidas As Boolean = True) CargaFormatoSucursal() CargaFolios() CargaVendedores() CargarAlmacenes() If RecargarPartidas Then RecargaSucursalPartidas() End If DdlPS.Attributes.Remove("data-cvesubproyecto") DdlPS.Attributes.Add("data-cvesubproyecto", DdlSubProyectoDatos.SelectedValue) UpPS.Update() End Sub Private Sub RecargaSucursalPartidas() Dim CveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim SubProyecto As String = "" If CveSubProyecto > 0 Then SubProyecto = DdlSubProyectoDatos.SelectedItem.Text End If If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then For Each Row As DataRow In TmpDT.Rows Row("CveSubProyecto") = CveSubProyecto Row("SubProyecto") = SubProyecto Next End If GvPS.DataSource = TmpDT DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") GvPS.DataBind() UpPS.Update() End Sub Private Sub CargaFolios(Optional FacturarDocumentoNuevo As Boolean = False) If ExFolioFactura Then Exit Sub End If If DdlSubProyectoDatos.SelectedValue.ToEntero() <= 0 Then Alert("No se tienen asignadas sucursales", TipoMensaje.MsgError) Exit Sub End If 'If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue <> "Cot" AndAlso (CveVenta <= 0 Or (DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0) Or CveDevolucion > 0) Then ' TxtFolio.Text = "" 'Else Dim ObjFolios As New ClsGralFolios() Dim TipoDoctoConsulta As String = If(DdlTipoComprobante.SelectedValue = "Ant", "Ing", If(DdlTipoComprobante.SelectedValue = "PA", "Rem", DdlTipoComprobante.SelectedValue)) If ObjFolios.GetFolios(TipoDoctoConsulta, UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format(" CveSubProyecto = {0} And Estado = 'Activo'", DdlSubProyectoDatos.SelectedValue)) If DT.Rows.Count > 0 Then ViewState("CveFolio") = DT.Rows(0)("CveFolio").ToString().ToEntero() 'ViewState("NumAprobacion") = CLng(DT.Rows(0)("Aprobacion").ToString()) 'ViewState("FechaAprobacion") = DT.Rows(0)("FechaAprobacion").ToString().ToDate ViewState("FolioActual") = DT.Rows(0)("FActual").ToString() If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso CveVenta > 0 AndAlso Not EsCreaApartirDe AndAlso Not String.IsNullOrEmpty(SerieVenta) Then LblSerie.Text = SerieVenta Else LblSerie.Text = DT.Rows(0)("Serie").ToString() End If TxtFolio.Text = DT.Rows(0)("FActual").ToString() If Not FacturarDocumentoNuevo Then If Not CveEmpresaCRM > 0 Then 'SI ES UNA REMISION EXISTENTE, NO MOSTRAR LOS BOTONES If Not (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Rem") Then BtnCrearApartirDe.Enabled = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 BtnEmitirImprimir.Visible = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 TrVistaPrevia.Visible = EstatusCliente End If Else If TipoDoctoConsulta.Contiene("Ing", "Egs", "Ant", "Dev") Then BtnCrearApartirDe.Enabled = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 BtnEmitirImprimir.Visible = EstatusCliente AndAlso TieneBloqueoPorCreditoVencimiento = 0 TrVistaPrevia.Visible = EstatusCliente Else BtnCrearApartirDe.Enabled = True BtnEmitirImprimir.Visible = True TrVistaPrevia.Visible = True End If End If End If UpFacturar.Update() Else If DdlTipoComprobante.Items.Count > 0 Then Alert("No tiene registrados Folios para " & DdlTipoComprobante.SelectedItem.Text & " en esta sucursal.", TipoMensaje.MsgAdvertencia) Else Alert("No tiene permisos para generar ningun tipo de documento.", TipoMensaje.MsgAdvertencia) End If TrEmitir.Visible = False TrVistaPrevia.Visible = False BtnCrearApartirDe.Enabled = False BtnEmitirImprimir.Visible = False UpFacturar.Update() End If DT.Dispose() End If ObjFolios.Dispose() 'End If End Sub Private Sub CargaFormatoSucursal(Optional RecalcularIVA As Boolean = True) Dim dr As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto = {0}", If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue))) If dr IsNot Nothing Then ViewState("SucCalle") = dr("Calle") ViewState("SucNoExt") = dr("NoExt") ViewState("SucNoInt") = dr("NoInt") ViewState("SucColonia") = dr("Colonia") ViewState("SucLocalidad") = dr("Localidad") ViewState("SucMunicipio") = dr("Municipio") ViewState("SucEstado") = dr("Estado") ViewState("SucPais") = dr("Pais") ViewState("SucCP") = dr("CP") ViewState("FormatoFactura") = dr("FormatoFactura") ViewState("IVA") = dr("IVA") DdlIVA.Visible = False Select Case ViewState("IVA").ToString().ToDouble Case 0 DdlIVA.SelectedValue = "1" PorcentajeIVA = ViewState("IVA").ToString().ToDecimal Case 0.08 DdlIVA.SelectedValue = If(EsCreaApartirDe, $"{(TmpDT.MAX("PorcentajeIVA").ToDecimal() + 1).RoundSQL(2).ToString()}", "1.08") PorcentajeIVA = If(EsCreaApartirDe, TmpDT.MAX("PorcentajeIVA").ToDecimal, ViewState("IVA").ToString().ToDecimal).RoundSQL(2) DdlIVA.Visible = If(Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0, True, False) Case 0.16 DdlIVA.SelectedValue = "1.16" PorcentajeIVA = ViewState("IVA").ToString().ToDecimal End Select 'SI ES COTIZACION HABILITAR EL DDL DE IVA If CveVenta <= 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then DdlIVA.Visible = True End If 'si es GDiaz, bloqueado el cambio de % de IVA 'If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DdlIVA.Visible = False If RecalcularIVA AndAlso TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 AndAlso (Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0) Then RecalculaIVA() ViewState("TipoFormato") = dr("TipoFormato") If SerieXML <> "" Then LblSerie.Text = SerieXML Dim CveSubProyecto As Integer = GetSubProyectoSucursal() If CveSubProyecto > 0 Then CargaSubProyecto(CveSubProyecto) UPPProy.Update() TipoVentaSucursal = dr("TipoVenta").ToString().ToEntero() If dr("TipoVenta").ToString() = "1" Then LiBuscarPrecio.Visible = True UpnTools.Update() 'activa el modo de pago efectivo directamente, y es venta nueva If ViewState("CveVenta").ToString().ToEntero() < 0 Then InicializaCondicionesPago() RBLPago.SelectedValue = "2" LimpiaEscondeContado() If DdlCuentaEfectivo.Items.Count = 2 Then DdlCuentaEfectivo.SelectedIndex = 0 End If End If 'ECONO, SOLO EL CLIENTE SIGI, PUEDE MODIFICAR EL IVA A 16% If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DdlIVA.Visible Then If TxtCodigo.Text.Trim().ToUpper() = "SIGI" Then DdlIVA.Enabled = True Else DdlIVA.Enabled = False End If End If End If UpFacturar.Update() UpPS.Update() UpParametros.Update() End Sub Private Sub CargaVendedores() Dim CveVendedorActual As Integer = 0 Dim EsVentaNueva As Boolean = (Me.CveVenta <= 0 OrElse Me.EsCreaApartirDe OrElse NuevaFactura = 1) DdlVendedor.Items.Clear() DdlVendedor.SelectedValue = Nothing DdlVendedorSucursal.Items.Clear() DdlVendedorSucursal.SelectedValue = Nothing If UsuarioActual.Empresa.Funcionalidad(302) = "1" AndAlso DdlSubProyectoDatos.SelectedValue.ToEntero() > 0 Then DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=-1).FiltraParametros(String.Format("VendedorTipo IN (1,4) AND (CveSubProyecto IS NULL OR CveSubProyecto = {0})", DdlSubProyectoDatos.SelectedValue)) Else DdlVendedor.DataSource = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros("VendedorTipo = 1") End If DdlVendedorSucursal.DataSource = DdlVendedor.DataSource DdlVendedor.DataBind() DdlVendedorSucursal.DataBind() DdlVendedor.Items.Insert(0, New ListItem("Sin Asignar", "-1")) DdlVendedorSucursal.Items.Insert(0, New ListItem("Sin Asignar", "-1")) DdlVendedor.SelectedValueExist("0") DdlVendedorSucursal.SelectedValueExist("0") 'SI NO ES VENTA ACTUAL If EsVentaNueva Then 'PRIMERO TOMA EL VENDEDOR DEL USUARIO If UsuarioActual.CveVendedor > 0 Then CveVendedorActual = UsuarioActual.CveVendedor End If 'DAR PREFERENCIA AL VENDEDOR ASIGNADO AL CLIENTE If Me.CveVendedorCliente > 0 Then CveVendedorActual = Me.CveVendedorCliente End If 'DAR PREFERENCIA AL VENDEDOR ASIGNADO LA SUCURSAL CLIENTE If Me.CveVendedorClienteSucursal > 0 Then CveVendedorActual = Me.CveVendedorClienteSucursal End If 'SI TIENE CONTRATO TOMA EL DEL CONTRATO If Me.CveVendedorContrato > 0 Then CveVendedorActual = Me.CveVendedorContrato End If 'SI ES EMPRESA CRM TOMA DE AQUI If Me.CveVendedorEmpresaCRM > 0 Then CveVendedorActual = Me.CveVendedorEmpresaCRM End If Else 'SI ES VENTA EXISTENTE TOMA EL DE LA VENTA If Me.CveVendedorVenta > 0 Then CveVendedorActual = Me.CveVendedorVenta End If End If If CveVendedorActual > 0 Then Dim VendedorActual As String = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=-1).FiltroPrimeroValor("Vendedor", $"CveVendedor = {CveVendedorActual}") 'SI NO ENCUENTRA BUSCA EN LOS VENDEDORES DEL PV 'If String.IsNullOrEmpty(VendedorActual) Then ' VendedorActual = GlobalDTVendedores(UsuarioActual.CveEmpresa, VendedorTipo:=4).FiltroPrimeroValor("Vendedor", String.Format("CveVendedor = {0}", CveVendedorActual)) 'End If If String.IsNullOrEmpty(VendedorActual) Then DdlVendedor.SelectedValueExist(CveVendedorActual) Else DdlVendedor.SelectedValueExistInsert(CveVendedorActual, VendedorActual) End If End If If DdlVendedor.SelectedValue.ToEntero() > 0 AndAlso Not UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = False End If 'multiples vendedores visible If UsuarioActual.TienePermisoProceso(153) OrElse UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = True End If 'PERMITIR EDITAR EL VENDEDOR ANTES DE FACTURAR If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso TmpDT IsNot Nothing AndAlso TmpDT.SUM("CantidadFacturadaCot") = 0) Then DdlVendedor.Enabled = True End If UPPVentas.Update() 'TxtCorreoNotificaciones.Text = GlobalDTUsuarios(UsuarioActual.CveUsuario).FiltroPrimeroValor("Correo") End Sub #End Region #Region " AGREGAR PS " Protected Sub LbAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LbAgregar.Click AgregarPS() End Sub Private Function ValidaAgregarPS(Cantidad As Decimal, CvePS As Integer, CveUM As Integer, PU As Double, CveTipoPS As Integer, CveClasificacion As Integer, CveSubProyecto As Integer, ObjDescuento As Modelos.VentaDescuentos, Optional CantidadModal As Decimal = 0D, Optional PSValidarModal As String = "", Optional CantidadOriginal As Decimal = 0D, Optional EsEdicion As Boolean = False) As Boolean 'NO TOCAR - IPP 'VALIDA PARAMETROS If CvePS <= 0 Or CveUM <= 0 Then Alert("Es necesario seleccionar el Producto o Servicio a facturar.", TipoMensaje.MsgAdvertencia) Return False End If If PSValidarModal.Trim.Length > 0 Then HdnPS.Value = PSValidarModal End If 'SI USA CONTABILIDAD LA CLASIFICACION ES OBLIGATORIA If CveClasificacion <= 0 AndAlso UsuarioActual.Empresa.UsaContabilidad Then Alert("La Clasificación es obligatoria, favor de seleccionarla", TipoMensaje.MsgAdvertencia) Return False End If 'SUBPROYECTO OBLIGATORIO If CveSubProyecto <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(120) = "1" Then Alert("El Subproyecto es obligatorio, favor de seleccionarlo", TipoMensaje.MsgAdvertencia) Return False End If If CveCliente <= 0 And Not CveEmpresaCRM > 0 Then Alert("Es necesario seleccionar el cliente al cual se le va a facturar.", TipoMensaje.MsgAdvertencia, "AbrirVentana('/Ventas/PopUpBuscarClientes.aspx?Opt=Fact', 800, 547, 'N', 'PopUpBuscar')") Return False End If Dim PrecioLibre As Boolean = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then Dim DatarowPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DatarowPS IsNot Nothing Then If DdlTipoComprobante.SelectedValue = "Ant" Then Dim PSCodigoSAT As String = DatarowPS("SATClavePS").ToString If PSCodigoSAT <> "84111506" Then Alert($"El producto y/o servicio '{DatarowPS("CodigoPS").ToString}' no es valido para generar anticipos", TipoMensaje.MsgAdvertencia) Return False End If End If If DdlTipoComprobante.SelectedValue = "Cot" Then If PU < DatarowPS("PrecioMinimo").ToString().ToDecimal() Then Alert($"El precio no puede ser menor al precio mínimo. Precio Mínimo: {DatarowPS("PrecioMinimo"):N2}", TipoMensaje.MsgAdvertencia) Return False End If End If PrecioLibre = CBool(DatarowPS("PrecioLibre")) End If End If If PU <= 0 Then Alert("No se puede vender a un importe de cero", TipoMensaje.MsgAdvertencia) Return False End If 'SI NO VIENE DESDE EL MODAL If CantidadModal = 0 Then If Cantidad <= 0 Then Alert("La cantidad debe ser mayor a cero", TipoMensaje.MsgAdvertencia) Return False End If End If 'VALIDA PROMOCIONES 'If DtPromociones Is Nothing Then ' Dim ObjVentas As New ClsVentas ' If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, CveSubProyecto, CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then ' DtPromociones = ObjVentas.DtResultados.Copy() ' End If ' ObjVentas.Dispose() 'End If 'VALIDA PRECIO CERO (0) 'If UsuarioActual.Empresa.Funcionalidad(139).ToString().ToEntero() > 0 And PU = 0 And DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {CvePS}").ToDecimal > 0 Then ' Alert($"El producto {HdnPS.Value}. No se puede vender a un importe de cero ($0)", TipoMensaje.MsgAdvertencia) ' Return False 'End If Dim ValidarMonedas As Boolean = False 'SI NO TIENE LA FUNCIONALIDAD VALIDARA LAS MONEDAS If UsuarioActual.Empresa.Funcionalidad(524) <> "" Then ValidarMonedas = True 'MODALIDAD EDICION If EsEdicion Then ValidarMonedas = False End If 'REFACTURACION If NuevaFactura = 1 Then ValidarMonedas = False End If If ValidarMonedas Then If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count >= 1 Then Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) If DrPS IsNot Nothing Then If DrPS("CveMoneda").ToString.ToEntero() <> DdlMoneda.SelectedValue.ToEntero() Then Alert("No puede agregar un producto de diferente moneda a la ya seleccionada", TipoMensaje.MsgAdvertencia) Return False End If End If End If End If End If ' NO VALIDA EXISTENCIAS NI COSTO - PERMISO PARA NO VALIDAR If Not UsuarioActual.TienePermisoProceso(169) AndAlso RBLTipoVenta.SelectedValue.ToEntero <> 5 Then 'SOLO VALIDA EXISTENCIAS Y COSTO: SI USA INVENTARIOS, SOLO PRODUCTOS TIPO PRODUCTO, SOLO REMISIONES E INGRESOS Dim ValidaExistenciasCosto As Boolean = UsuarioActual.Empresa.UsaInventarios AndAlso CveTipoPS = 2 AndAlso (DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ing", "PA") OrElse ((DdlTipoComprobante.SelectedValue.Contiene("Cot") And UsuarioActual.CveEmpresa.Contiene(119)) OrElse (DdlTipoComprobante.SelectedValue.Contiene("Ped") And UsuarioActual.CveEmpresa.Contiene(186)))) 'VALIDA COSTO PARA LAS COTIZACIONES If Not ValidaExistenciasCosto Then If DdlTipoComprobante.SelectedValue.Contiene("Cot") AndAlso (UsuarioActual.Empresa.Funcionalidad(382) = "1" OrElse UsuarioActual.CveEmpresa = 1) Then ValidaExistenciasCosto = True End If End If If ValidaExistenciasCosto Then Dim Costo As Decimal If UsuarioActual.Empresa.Funcionalidad(602) = "UC" Then 'validación sobre el último costo Dim ObjInventarios As New ClsInventarios If ObjInventarios.GetUltimoCosto(UsuarioActual.CveEmpresa, CvePS) Then Dim dr As DataRow = ObjInventarios.DtResultados.FiltroPrimero("") If dr IsNot Nothing Then Costo = dr("UltimoCosto").ToString.ToDecimal End If End If ObjInventarios.Dispose() Else Dim ObjInventarios As New ClsInventarios Costo = ObjInventarios.GetCostoPS(CvePS, Cantidad, -1, "-1", TxtFecha.Text.ToDate, CveSubProyecto, 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 Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, Cantidad, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() End If Dim PrecioMinimo As Decimal = 0 'RMF. condicion temporal, para reubicación, precio mínimo If UsuarioActual.CveEmpresa = 119 Then 'Dim CvePrecioLista As Integer = 38 Dim objPS As New ClsProductosServicios If objPS.GetPSSucursalesALL(CvePS, UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto) Then PrecioMinimo = objPS.DtResultados.FiltroPrimeroValor("PrecioMinimo", "").ToDecimal End If objPS.Dispose() End If Dim ValidaExistencia As Boolean = (DdlTipoComprobante.SelectedValue <> "Cot" And ChkSinExistencia.Checked = False) Or UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 If CantidadOriginal > 0 Then 'SI NO HAY CAMBIOS EN LAS CANTIDADES, NO VALIDAR EXISTENCIA If CantidadOriginal = Cantidad Then ValidaExistencia = False End If End If If ValidaExistencia Then 'VALIDA EXISTENCIA If UsuarioActual.CveEmpresa.Contiene({72, 80, 119, 153, 140, 186, 190, 192, 197, 189, 186}) Then Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Dim Existencia As Decimal = 0D Using ObjInv2 As New ClsInventarios If RBLTipoVenta.SelectedValue.ToEntero = 6 Then Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, CveAlmacenFiltroDdl, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=-1, CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=0, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) Else Dim CveAlmacenConsulta As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso DivAlmacen.Visible Then CveAlmacenConsulta = ddlAlmacen.SelectedValue.ToEntero() End If Existencia = ObjInv2.GetExistenciasPS(CvePS, CveUM, UsuarioActual.CveEmpresa, CveAlmacenConsulta, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=CveSubProyecto, CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, BuscarEnTabla:=BuscarEnTabla) End If End Using If CveVenta <= 0 OrElse Me.EsCreaApartirDe Then Dim tCantValidar As Decimal = TmpDT.SUM("Cantidad", $"CvePS = {CvePS} AND (EntregaDirecta IS NULL OR EntregaDirecta < 1)") - CantidadOriginal + (If(CantidadModal > 0, CantidadModal, Cantidad)) If Existencia - tCantValidar < 0 Then Dim CveAlmacenConsulta As Integer = -1 Dim StrAlmacen As New StringBuilder If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso DivAlmacen.Visible Then CveAlmacenConsulta = ddlAlmacen.SelectedValue.ToEntero() If CveAlmacenConsulta > 0 Then Dim Almacen As String = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenConsulta).FiltroPrimeroValor("Almacen") StrAlmacen.AppendFormat("
    Almacén: {0}", Almacen) End If End If Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.ToString("#,##0.####") + "." + StrAlmacen.ToString(), TipoMensaje.MsgAdvertencia) Return False End If Else If DdlTipoComprobante.SelectedValue = "Rem" Then Dim CantidadVenta As Decimal = 0 Using ObjVentasE As New ClsVentas If ObjVentasE.GetVentaDetalle(CveVenta) Then CantidadVenta = ObjVentasE.DtResultados.SUM("Cantidad", $"CvePS = {CvePS}") End If End Using 'SUMA LO YA RESTADO EN PENDIENTE POR SURTIR QUE PERTENESCA A LA VENTA. 'PARA QUE NO RESTE LA EXISTENCIA 2 VECES Y PUEDAS COMPARAR LO REAL If (Existencia + CantidadVenta) - TmpDT.SUM("Cantidad", $"CvePS = {CvePS} And (EntregaDirecta Is NULL Or EntregaDirecta < 1)") < (If(CantidadModal > 0, CantidadModal, Cantidad)) Then Alert("No cuenta con la cantidad suficiente en inventario. Cuenta con " + Existencia.ToString("#,##0.####") + ".", TipoMensaje.MsgAdvertencia) Return False End If End If End If End If End If Dim VerificarCostos As Boolean = True If UsuarioActual.TienePermisoProceso(253) Then VerificarCostos = False If ObjDescuento IsNot Nothing Then If ObjDescuento.CvePromocionDetalle > 0 Then VerificarCostos = False End If If ObjDescuento.ImporteDescuento > 0 Then VerificarCostos = False End If If ObjDescuento.EsPUModificado Then VerificarCostos = False End If End If 'VALIDA COSTOS If Not CveContrato > 0 AndAlso VerificarCostos Then 'BANDERAS PARA VALIDACIONES Dim EsValido As Boolean = False Dim EsValidoMayor As Boolean = False Dim CostoMenor As Decimal = 0.0D Dim CostoMayor As Decimal = 0.0D Dim PorcentajeMinimoCostoEmpresa = UsuarioActual.Empresa.Funcionalidad(129).ToDecimal If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then Dim DrPSCosto As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) If DrPSCosto IsNot Nothing Then If DrPSCosto("PorcentajeMinimoUtilidad").ToString <> "" AndAlso DrPSCosto("PorcentajeMinimoUtilidad").ToString().ToDecimal() <> 0 Then PorcentajeMinimoCostoEmpresa = DrPSCosto("PorcentajeMinimoUtilidad").ToString().ToDecimal() End If End If End If 'PRECIO MINIMO If PorcentajeMinimoCostoEmpresa <> 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then '' NOTA. si tiene preciominimo, debe de validarlos e ignorar el costo, pero se debe de considerar el TC, para el costo If PrecioMinimo > 0 Then 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA If PU >= PrecioMinimo Then ' aqui se comparar los importes directos, sin el TC EsValido = True End If Else CostoMenor = Costo + ((PorcentajeMinimoCostoEmpresa / 100) * Costo) 'SI EL PRECIO ES MAYOR AL COSTO, SI PASA If PU * If(DdlMoneda.SelectedValue = "1", 1, TxtTipoCambio.Text.ToDecimal) >= CostoMenor Then EsValido = True End If End If Else EsValido = True End If 'PRECIO MAXIMO If UsuarioActual.Empresa.Funcionalidad(133).ToEntero() > 0 AndAlso UsuarioActual.CveUsuario <> 1560 Then CostoMayor = Costo + ((UsuarioActual.Empresa.Funcionalidad(133).ToDecimal / 100) * Costo) 'SI EL PRECIO ES MAYOR AL COSTO MAXIMO, SI PASA If PU * If(DdlMoneda.SelectedValue = "1", 1, TxtTipoCambio.Text.ToDecimal) <= CostoMayor Then EsValidoMayor = True End If Else EsValidoMayor = True End If 'VALIDA PROMOCION: SI TIENE PROMOCION Y EL PRECIO ES MENOR AL PRECIO DE PROMOCION, NO PASA | SI YA CUMPLE NO VUELVE A VALIDAR 'SIRVE PARA VALIDAR PRECIOS DEBAJO DEL PRECIO MINIMO PERMITIDO If Not EsValido Then If DtPromociones.FiltraParametros($"CvePS = {CvePS}").Rows.Count > 0 Then If PU * If(DdlMoneda.SelectedValue = "1", 1, TxtTipoCambio.Text.ToDecimal) >= DtPromociones.FiltroPrimeroValor("PUPromocion", $"CvePS = {CvePS}").ToDecimal Then EsValido = True End If Else Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") 'valida sino tiene promocion la clasificacion If DrPS IsNot Nothing Then If DtPromociones.FiltraParametros(String.Format("CveClasificacion = {0}", CveClasificacion)).Rows.Count > 0 Then ''falta aplicar si tiene promocion Dim drPromo As DataRow = DtPromociones.FiltroPrimero(String.Format("CveClasificacion = {0}", CveClasificacion)) If drPromo IsNot Nothing Then If drPromo("CveMarca").ToString() = DrPS("CveMarca").ToString() Then End If End If End If End If End If End If 'NO DEJA REGISTRAR MENOS AL PRECIO MINIMO If Not PrecioLibre Then Dim MensajeCosto As New StringBuilder Dim TienePermisoImportes As Boolean = UsuarioActual.TienePermisoProceso(201) If Not EsValido Then Dim tNomPS As String = "" Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") 'valida sino tiene promocion la clasificacion If DrPS IsNot Nothing Then tNomPS = DrPS("PSCodigo").ToString End If MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio menor de su Costo
    ", tNomPS) If TienePermisoImportes Then MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) MensajeCosto.AppendFormat("El rango menor aceptado es: {0}% ${1:#,###.00}
    ", PorcentajeMinimoCostoEmpresa, CostoMenor) MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) End If Alert(String.Format(MensajeCosto.ToString()), TipoMensaje.MsgAdvertencia) Return False End If 'NO DEJA REGISTRAR MAS AL PRECIO MAXIMO If Not EsValidoMayor Then Dim tNomPS As String = "" Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") 'valida sino tiene promocion la clasificacion If DrPS IsNot Nothing Then tNomPS = DrPS("PSCodigo").ToString End If MensajeCosto.AppendFormat("El Producto {0}. No se puede vender a un precio mayor de su rango aceptado
    ", tNomPS) If TienePermisoImportes Then MensajeCosto.AppendFormat("El costo del producto es: ${0:#,###.00}
    ", Costo) MensajeCosto.AppendFormat("El rango mayor aceptado es: {0}% ${1:#,###.00}
    ", UsuarioActual.Empresa.Funcionalidad(133).ToEntero(), CostoMayor) MensajeCosto.AppendFormat("El precio indicado es: ${0:#,###.00} ({1}% de ganancia)
    ", PU.FormatoNumero, (If(Costo > 0, ((PU - Costo) * 100) / Costo, 0)).FormatoNumero) End If Alert(MensajeCosto.ToString(), TipoMensaje.MsgAdvertencia) Return False End If End If End If End If End If Return True End Function Private Function CalcularDescuentos(CvePS As Integer, Cantidad As Decimal, PU As Decimal) As Modelos.VentaDescuentos Dim Descuento As Decimal = HdnDescuento.Value.ToDecimal If UsuarioActual.Empresa.Funcionalidad(572) = "1" AndAlso Not TbDescuentosRNC.Visible Then TbDescuentosRNC.Visible = True LnkDescuentosRNC.Visible = UsuarioActual.TienePermisoProceso(328) End If If HdnTipoDescuento.Value = "0" Then Descuento = HdnDescuento.Value.ToDecimal * Cantidad End If Dim ValidaCondicionesComerciales As Boolean = True 'AGREGA PROMOCION EN EL DESCUENTO Dim TipoPromo As Integer = 0 Dim TotalPromocion As Decimal = 0 Dim PromocionPorcentaje As Decimal = 0 Dim PUModificado As Decimal = 0 Dim SeAjustoPU As Boolean = False Dim PUPromocion As Decimal = 0 Dim CantMinima As Integer = 0 Dim CveMarcaPS As Integer = 0 Dim CveClasifPS As Integer = 0 Dim CveRinTamañoPS As Integer = 0 Dim CvePromocionDetalle As Integer = 0 Dim IncluyeImpuestos As Boolean = False Dim TipoAplicacion As Integer = 1 ' 1 - descuento, 2 en PU Dim ObjDescuento As New Modelos.VentaDescuentos If DdlSubProyectoDatos.SelectedValue = "11842" Then '' E141, el subproyecto: Franquicia, no proceden las promociones Return ObjDescuento End If Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS IsNot Nothing Then CveMarcaPS = DrPS("CveMarca").ToString().ToEntero() CveClasifPS = DrPS("CveClasificacion").ToString().ToEntero() CveRinTamañoPS = DrPS("CveRinTamaño").ToString().ToEntero() If CveClasifPS = 20636 Then ValidaCondicionesComerciales = False End If 'CAMBIO DE VIGENCIA NO SE APLICAN DESCUENTOS If CveClasifPS = 20637 Then ObjDescuento.ImporteDescuento = 0 Return ObjDescuento End If If UsuarioActual.CveRol = 1 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Cot") AndAlso CveRinTamañoPS > 0 Then If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso Not TbDescuentosAdicionales.Visible Then TbDescuentosAdicionales.Visible = True End If End If End If Dim dr As DataRow = Nothing If DtPromociones IsNot Nothing AndAlso DtPromociones.Rows.Count > 0 Then dr = DtPromociones.FiltroPrimero(String.Format("CvePS = {0} AND (CveSubProyecto = {1} OR CveSubProyecto IS NULL) AND (CveRinTamaño = {2} OR CveRinTamaño IS NULL) AND ((TipoPromocion <> 3 AND (CantidadMinima <= {3} OR CantidadMinima IS NULL)) OR (TipoPromocion = 3 AND CantidadMinima <= {3} ))", CvePS, DdlSubProyectoDatos.SelectedValue, CveRinTamañoPS, Cantidad), Orderby:="CantidadMinima desc ") If dr Is Nothing Then 'verifica marca, si tiene asignada la promocion If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then dr = DtPromociones.FiltroPrimero(String.Format("CvePS IS NULL AND (CveClasificacion = {0} OR CveClasificacion IS NULL) AND (CveMarca = {1} OR CveMarca IS NULL) AND (CveSubProyecto = {2} OR CveSubProyecto IS NULL) AND (CveRinTamaño = {3} OR CveRinTamaño IS NULL) AND ((TipoPromocion <> 3 AND (CantidadMinima <= {4} OR CantidadMinima IS NULL)) OR (TipoPromocion = 3 AND CantidadMinima <= {4} )) ", CveClasifPS, CveMarcaPS, DdlSubProyectoDatos.SelectedValue, CveRinTamañoPS, Cantidad), Orderby:="CantidadMinima desc") Else dr = DtPromociones.FiltroPrimero(String.Format("CvePS IS NULL AND CveClasificacion = {0} AND (CveMarca = {1} OR CveMarca IS NULL) AND (CveSubProyecto = {2} OR CveSubProyecto IS NULL) AND (CveRinTamaño = {3} OR CveRinTamaño IS NULL) AND ((TipoPromocion <> 3 AND (CantidadMinima <= {4} OR CantidadMinima IS NULL)) OR (TipoPromocion = 3 AND CantidadMinima <= {4} )) ", CveClasifPS, CveMarcaPS, DdlSubProyectoDatos.SelectedValue, CveRinTamañoPS, Cantidad), Orderby:="CantidadMinima desc") End If End If End If Dim Cant As Integer = 1 Dim CveMarcaPromocion As Integer = -1 If dr IsNot Nothing Then CveMarcaPromocion = dr("CveMarca").ToString().ToEntero() TipoPromo = dr("TipoPromocion").ToString().ToEntero() CantMinima = dr("CantidadMinima").ToString().ToEntero() IncluyeImpuestos = dr("IncluyeImpuestos").ToString() = "True" PromocionPorcentaje = dr("Promocion").ToString().ToDecimal PUPromocion = dr("PUPromocion").ToString().ToDecimal CvePromocionDetalle = dr("CvePromocionDetalle").ToString().ToEntero() TipoAplicacion = dr("TipoAplicacion").ToString().ToEntero() If CantMinima > 0 Then Cant = Math.Floor(Cantidad / CantMinima).ToEntero() End If End If TotalPromocion = Math.Round(PUPromocion * Cant / (1 + If(IncluyeImpuestos, PorcentajeIVA, 0)), 6) If TipoPromo = 1 Then 'Promocion por Importe $ If TipoAplicacion = 2 Then Descuento = 0 SeAjustoPU = True PUModificado = Math.Round(PUPromocion / (1 + If(IncluyeImpuestos, PorcentajeIVA, 0)), 6) Else Descuento = Descuento + (PU * Cant) - TotalPromocion End If ElseIf TipoPromo = 2 Then 'Promocion por % If TipoAplicacion = 2 Then Descuento = 0 SeAjustoPU = True PUModificado = Math.Round((PU - (PU * PromocionPorcentaje / 100D)) / (1 + If(IncluyeImpuestos, PorcentajeIVA, 0)), 6) Else Descuento = Descuento + ((PU * PromocionPorcentaje / 100) * Cantidad) End If ElseIf TipoPromo = 3 Then 'Promocion por Cantidad If Cantidad >= CantMinima Then Descuento = Descuento + TotalPromocion Else CvePromocionDetalle = -1 End If ElseIf TipoPromo = 4 Then 'Promocion por precio base + X% 'siempre es sobre PU y toma el último costo Dim Costo As Decimal = DrPS("UltimoCosto").ToString.ToDecimal Descuento = 0 SeAjustoPU = True PUModificado = (Costo + (Costo * PromocionPorcentaje / 100D)).RoundSQL(4) End If Dim TieneCondicionesComerciales As Boolean = False 'VERIFICA SI APLICAN CONDICIONES COMERCIALES If ValidaCondicionesComerciales AndAlso DtPorcentajeMarcas IsNot Nothing AndAlso DtPorcentajeMarcas.Rows.Count > 0 Then 'VERIFICA SI EL PRODUCTO TIENE ESPECIFICADA UNA MARCA If Not String.IsNullOrEmpty(DrPS("CveMarca").ToString()) AndAlso DrPS("CveMarca").ToString().ToEntero() > 0 Then Dim RowPorcentaje As DataRow = DtPorcentajeMarcas.FiltroPrimero($"CveMarca={DrPS("CveMarca").ToString()}") 'REALIZA LOS DESCUENTOS DE ACUERDO AL PORCENTAJE POR MARCA If RowPorcentaje IsNot Nothing Then '(AHORA LOS DESCUENTOS SON ACUMULABLES) 'Descuento = 0 Dim PorcentajeProducto As Decimal = RowPorcentaje("PorcentajeProducto").ToString().ToDecimal() / 100D Dim PorcentajeProducto2 As Decimal = RowPorcentaje("PorcentajeProducto2").ToString().ToDecimal() / 100D Dim PorcentajeProducto3 As Decimal = RowPorcentaje("PorcentajeProducto3").ToString().ToDecimal() / 100D Dim TotalInicial As Decimal = (Cantidad * (PU)) '- Descuento Dim TotalFinal As Decimal = TotalInicial 'SI APLICA EL PRIMER DESCUENTO If PorcentajeProducto > 0 Then TieneCondicionesComerciales = True Dim Descuento1 As Decimal = (TotalInicial * PorcentajeProducto).RoundSQL(2) Dim Total2 As Decimal = (TotalInicial - Descuento1) 'SI APLICA EL SEGUNDO DESCUENTO If PorcentajeProducto2 > 0 Then Dim Descuento2 As Decimal = (Total2 * PorcentajeProducto2).RoundSQL(2) Dim Total3 As Decimal = (Total2 - Descuento2) 'SI APLICA EL TERCER DESCUENTO If PorcentajeProducto3 > 0 Then Dim Descuento3 As Decimal = (Total3 * PorcentajeProducto3).RoundSQL(2) TotalFinal = Total3 - Descuento3 Else TotalFinal = Total3 End If Else TotalFinal = Total2 End If Else TotalFinal = TotalInicial End If If PorcentajeProducto > 0 Then Descuento += ((Cantidad * PU) - TotalFinal) ObjDescuento.NombrePromo = "CONDICIONES COMERCIALES" End If 'SI TIENE PRONTO PAGO CALCULA EL IMPORTE If DdlTipoComprobante.SelectedValue = "Ing" AndAlso RowPorcentaje("ProntoPago").ToString().ToDecimal() > 0 Then Dim SubTotalProntoPago As Decimal = (Cantidad * (PU)) - Descuento Dim TotalProntoPago As Decimal = SubTotalProntoPago * (1 + PorcentajeIVA) Dim PorcentajeProntoPago As Decimal = RowPorcentaje("ProntoPago").ToString().ToDecimal() / 100D ObjDescuento.ImporteProntoPago = (TotalProntoPago * PorcentajeProntoPago).RoundSQL(2) End If End If End If End If If Descuento < 0 Then Descuento = 0 Alert("No se calculó el descuento correctamente", TipoMensaje.MsgAdvertencia) End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not TieneCondicionesComerciales Then 'LTH AA Paq. 2 baterias, LTH AAA Paq. 02 baterias, LTH AA Paq. 4 baterias, LTH AAA Paq. 4 Baterias If CvePS.Contiene(521445, 521448, 402917, 402918) Then 'SI TIENE BATERIAS AGREGADAS CON LA MARCA LTH, APLICAR PROMOCION, LA CLASIFICACION DEBE SER ACUMULADORES If TmpDT.SUMD("Cantidad", "CveMarca IN (819,826,1085,1052) AND CveClasificacion IN (20520,20522,20513,20521,20512,20514,20229)") >= 1D Then Descuento = 0 SeAjustoPU = True 'Paq. 2 baterias If CvePS.Contiene(521445, 521448) Then PUPromocion = 25D End If 'Paq. 4 baterias If CvePS.Contiene(402917, 402918) Then PUPromocion = 40D End If PUModificado = Math.Round(PUPromocion / (1 + PorcentajeIVA), 6) End If End If End If 'YOKOHAMA If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso CveRinTamañoPS > 0 AndAlso CveMarcaPromocion.Contiene(800, 912, 1238, 1381, 1456, 1528, 1600, 1672, 1807) Then If CveMarcaPromocion > 0 Then ObjDescuento.NombrePromo = "YOKOHAMA VERANO" 'dr("NombrePromocion").ToString() ObjDescuento.CveMarca = CveMarcaPromocion Dim Rin As String = GlobalDTPSRinTamaños(UsuarioActual.CveEmpresa, CveRinTamañoPS).FiltroPrimeroValor("RinTamaño", "") Dim PromoDescuento As Decimal = (Descuento * (1 + If(IncluyeImpuestos, PorcentajeIVA, 0))).RoundSQL(2) ObjDescuento.ObsDescuento = String.Format("RIN {0} BONO ${1:N2}", Rin, PromoDescuento) End If End If ObjDescuento.ImporteDescuento = Descuento.RoundSQL(2) ObjDescuento.CvePromocionDetalle = CvePromocionDetalle If SeAjustoPU Then ObjDescuento.PU = PUModificado ObjDescuento.EsPUModificado = True End If Return ObjDescuento End Function Public Function ValidaPorcentajeMarcas(CvePS As Integer, Cantidad As Decimal, PU As Decimal, DescPS As Decimal) As Boolean Dim Retorno As Boolean = False Dim Descuento As Decimal = 0 Dim ValidaCondicionesComerciales As Boolean = True Dim CveMarcaPS As Integer = -1 Dim CveClasifPS As Integer = -1 Dim CveRinTamañoPS As Integer = -1 Dim PSCodigo As String = "" Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS IsNot Nothing Then CveMarcaPS = DrPS("CveMarca").ToString().ToEntero() CveClasifPS = DrPS("CveClasificacion").ToString().ToEntero() CveRinTamañoPS = DrPS("CveRinTamaño").ToString().ToEntero() PSCodigo = DrPS("PSCodigo").ToString() If CveClasifPS = 20636 Then ValidaCondicionesComerciales = False End If 'CAMBIO DE VIGENCIA NO SE APLICAN DESCUENTOS If CveClasifPS = 20637 Then Descuento = 0 Retorno = True Return Retorno End If End If If ValidaCondicionesComerciales Then 'VERIFICA SI APLICAN CONDICIONES COMERCIALES If DtPorcentajeMarcas IsNot Nothing AndAlso DtPorcentajeMarcas.Rows.Count > 0 Then 'VERIFICA SI EL PRODUCTO TIENE ESPECIFICADA UNA MARCA If Not String.IsNullOrEmpty(DrPS("CveMarca").ToString()) AndAlso DrPS("CveMarca").ToString().ToEntero() > 0 Then Dim RowPorcentaje As DataRow = DtPorcentajeMarcas.FiltroPrimero($"CveMarca={DrPS("CveMarca").ToString()}") 'REALIZA LOS DESCUENTOS DE ACUERDO AL PORCENTAJE POR MARCA If RowPorcentaje IsNot Nothing Then '(AHORA LOS DESCUENTOS SON ACUMULABLES) 'Descuento = 0 Dim PorcentajeProducto As Decimal = RowPorcentaje("PorcentajeProducto").ToString().ToDecimal() / 100D Dim PorcentajeProducto2 As Decimal = RowPorcentaje("PorcentajeProducto2").ToString().ToDecimal() / 100D Dim PorcentajeProducto3 As Decimal = RowPorcentaje("PorcentajeProducto3").ToString().ToDecimal() / 100D Dim TotalInicial As Decimal = (Cantidad * (PU)) '- Descuento Dim TotalFinal As Decimal = TotalInicial 'SI APLICA EL PRIMER DESCUENTO If PorcentajeProducto > 0 Then Dim Descuento1 As Decimal = (TotalInicial * PorcentajeProducto).RoundSQL(2) Dim Total2 As Decimal = (TotalInicial - Descuento1) 'SI APLICA EL SEGUNDO DESCUENTO If PorcentajeProducto2 > 0 Then Dim Descuento2 As Decimal = (Total2 * PorcentajeProducto2).RoundSQL(2) Dim Total3 As Decimal = (Total2 - Descuento2) 'SI APLICA EL TERCER DESCUENTO If PorcentajeProducto3 > 0 Then Dim Descuento3 As Decimal = (Total3 * PorcentajeProducto3).RoundSQL(2) TotalFinal = Total3 - Descuento3 Else TotalFinal = Total3 End If Else TotalFinal = Total2 End If Else TotalFinal = TotalInicial End If If PorcentajeProducto > 0 Then Descuento += ((Cantidad * PU) - TotalFinal) End If If Descuento.RoundSQL(2) <> DescPS.RoundSQL(2) Then Retorno = False Else Retorno = True End If Else Retorno = True End If Else Retorno = True End If Else Retorno = True End If Else Retorno = True End If If Not Retorno Then Alert($"No coinciden las condiciones comerciales con el descuento.
    Cantidad: {Cantidad.FormatoNumero()}
    Producto: '{PSCodigo}'
    Precio: {PU.FormatoNumero()}
    Descuento: {DescPS.FormatoNumero()}
    Descuento por condiciones comerciales: {Descuento.FormatoNumero()}", TipoMensaje.MsgError) End If Return Retorno End Function 'Private ReadOnly Property ClasificacionesDescuentos As Dictionary(Of Integer, Decimal) ' Get ' Return New Dictionary(Of Integer, Decimal) From { ' {20516, 0.21D}, 'Descuento para lubricantes LTH ' {20515, 0.25D} 'Descuento para filtros LTH ' } ' End Get 'End Property Private Sub AgregarPS() 'SELECCIONA EL PS DEPENDIENDO LA MODALIDAD (CODIGO BARRAS - DDL) Try Dim CvePS As Integer = -1 If DIVCod.Visible Then CvePS = HdnCvePS.Value.ToEntero() Else CvePS = DdlPS.SelectedValue.ToEntero() End If Dim Cantidad As Decimal = TxtCantidad.Text.ToDecimal Dim PU As Decimal = If(CvePSAmortizacion > 0, TxtPrecio.Text.Trim.ToDecimal * -1, TxtPrecio.Text.Trim.ToDecimal) Dim ObjDescuento As New Modelos.VentaDescuentos If ObjDescuentoGral IsNot Nothing Then ObjDescuento = ObjDescuentoGral End If If ValidaAgregarPS(Cantidad, CvePS, DdlUnidadMedida.SelectedValue.ToEntero(), PU, HdnTipoPS.Value.ToEntero(), DdlClasificacion.SelectedValue.ToEntero(), DdlSubProyectoDatos.SelectedValue.ToEntero(), ObjDescuento) Then If UsuarioActual.Empresa.Funcionalidad(507) = DdlPS.SelectedValue Then CvePSAmortizacion = DdlPS.SelectedValue.ToEntero().ToEntero() End If Dim CvePrecioListaPS As Integer = -1 Dim PrecioListaPS As String = "" 'VALIDA LA ASIGNACION DE LISTA DE PRECIOS If DivPrecioLista.Visible Then If DdlPrecioLista.SelectedValue.ToEntero() > 0 AndAlso DdlPrecioLista.SelectedValue.ToEntero() = Me.CvePrecioLista Then CvePrecioListaPS = Me.CvePrecioLista If UsuarioActual.CveEmpresa = 189 Then PrecioListaPS = DdlPrecioLista.SelectedItem.Text.Split("-"c)(0) Else PrecioListaPS = DdlPrecioLista.SelectedItem.Text End If Else Dim PermiteEdicion = UsuarioActual.CveEmpresa = 189 AndAlso TxtPrecio.Enabled If Not PermiteEdicion Then 'sino es la seleccionada se recalcula de nuevo CargaPrecioLista(DdlPS.SelectedValue.ToEntero) Exit Sub End If End If Else If Me.CvePrecioLista > 0 Then CvePrecioListaPS = Me.CvePrecioLista If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then PrecioListaPS = GlobalDTPrecioListas(UsuarioActual.CveEmpresa).FiltroPrimeroValor("PrecioLista", $"CvePrecioLista={CvePrecioListaPS}") End If End If End If Dim NumTurnos As Decimal = 0 If UsuarioActual.CveEmpresa.Contiene(7, 122) Then NumTurnos = TxtNumTurnos.Text.ToDecimal() End If 'SI TIENE PERMISO PARA VER COSTO, QUE LO AGREGUE AL TMPDT Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) Dim Costo As Decimal = 0 If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso PuedeVerCosto Then Dim ObjInventarios As New ClsInventarios Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.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 Costo <= 0 Then Costo = ObjInventarios.GetCostoPS(CvePS, TxtCantidad.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() End If AgregarProductoServicio(Cantidad, DdlUnidadMedida.SelectedValue.ToEntero(), DdlUnidadMedida.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero(), DdlClasificacion.SelectedItem.Text, CvePS, "", TxtObsPS.Text.TrimEnd, PU, ObjDescuento.ImporteDescuento, DdlProyecto.SelectedValue.ToEntero(), DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text, Serie:=If(DIVCod.Visible, TxtCodigoSerie.Text.Trim, ""), TiempoEntrega:=TxtTiempoEntrega.Text, CuentaPredial:=TxtCuentaPredial.Text.Trim, RegeneraIEPS:=ClienteDesglosaIEPS, CvePromocionDetalle:=ObjDescuento.CvePromocionDetalle, ImporteProntoPago:=ObjDescuento.ImporteProntoPago, ObjDescuento:=ObjDescuento, CvePrecioLista:=CvePrecioListaPS, PrecioLista:=PrecioListaPS, NumTurnos:=NumTurnos, Costo:=Costo) 'CALCULA EN BASE AL ULTIMO AGREGADO If TmpDT.Rows.Count > 0 Then CalculaPSPromocionFiltrosLubricantes(TmpDT.Rows(TmpDT.Rows.Count - 1)) End If CalculaUsados() If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ObjDescuento IsNot Nothing Then ListaDescuentos.Add(ObjDescuento) End If CalculaTotalesVenta() LimpiaAgregar() 'SI EL PORLET DE COMERCIO EXTERIOR EXTERIOR ESTA VISIBLE SE ACTUALIZAN LOS PRODUCTOS DEL GRIDVIEW If AplicaComercioExterior Then CargaGvComercioExterior() End If End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then TxtCantidad.Focus() TxtCantidad.Text = "1" End If OrdenarPS() UpPS.Update() Catch ex As Exception OnError("Ocurrió un error al agregar el producto", ex) End Try End Sub Private Sub CalculaPSPromocionFiltrosLubricantes(ByRef RowEdit As DataRow) If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not ClienteEsDistribuidor Then Dim CantidadMinValidaPromoFiltro As Decimal = 4 Dim CantidadMinValidaPromoLubricantes As Decimal = 5 Dim CantidadDescuento As Decimal = 0 'Dim AgregaDescuentos As Boolean = False 'DESCUENTO EN LUBRICANTES If RowEdit IsNot Nothing AndAlso RowEdit("CveClasificacion").ToString().Contiene("20516") Then Dim Cantidad As Decimal = RowEdit("Cantidad").ToString().ToDecimal() 'CALCULA LA CANTIDAD DE DESCUENTO, REDONDEO HACIA ABAJO CantidadDescuento = Math.DivRem(Cantidad.ToString().ToEntero(), CantidadMinValidaPromoLubricantes.ToString().ToEntero(), 1).ToString().ToDecimal() Dim Descuentos = CantidadDescuento * RowEdit("PU").ToString().ToDecimal() Dim PU As Decimal = RowEdit("PU").ToString().ToDecimal() Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (Descuentos)) Dim TotalCalculableImpuestosIVA As Decimal = 0 TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + RowEdit("PorcentajeIEPS").ToString().ToDecimal) RowEdit("Cantidad") = Cantidad RowEdit("Descuento") = Descuentos RowEdit("ImporteIVA") = (RowEdit("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) RowEdit("Descuento") = Descuentos RowEdit("Total") = (Cantidad * PU) RowEdit("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) RowEdit("TotalConImpuestos") = (RowEdit("Total").ToString().ToDecimal() - RowEdit("Descuento").ToString().ToDecimal() + RowEdit("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) 'VERIFICA SI TIENE FILTROS AGREGADOS, ELIMINAR SI YA NO CUMPLE LA PROMOCION If CantidadDescuento <= 0 Then Dim RowsFiltros = TmpDT.Select("CveClasificacion IN(20515) AND Descuento > 0") For Each Row As DataRow In RowsFiltros TmpDT.Rows.Remove(Row) Next End If 'AGREGA LOS DESCUENTOS ADICIONALES 'AgregaDescuentos = True End If ' DESCUENTO EN FILTROS If RowEdit IsNot Nothing AndAlso RowEdit("CveClasificacion").ToString().Contiene("20515") Then Dim TotalLubricantes = TmpDT.SUMD("Cantidad", "CveClasificacion IN(20516)") Dim TotalFiltros = TmpDT.SUMD("Cantidad", "CveClasificacion IN(20515) AND Descuento = 0") Dim TotalFiltrosDescuento = TmpDT.SUMD("Cantidad", "CveClasificacion IN(20515) AND Descuento > 0") 'SI HAY LUBRICANTES, 1 FILTRO DEBE SER GRATIS If TotalLubricantes >= CantidadMinValidaPromoFiltro Then 'CALCULA LA CANTIDAD DE DESCUENTO, REDONDEO HACIA ABAJO CantidadDescuento = Math.DivRem(TotalLubricantes.ToString().ToEntero(), CantidadMinValidaPromoFiltro.ToString().ToEntero(), 1).ToString().ToDecimal() 'VERIFICA QUE AUN SE PUEDA APLICAR DESCUENTO If TotalFiltrosDescuento < CantidadDescuento Then Dim Cantidad As Decimal = RowEdit("Cantidad").ToString().ToDecimal() 'AJUSTA PARA QUE DEL DESCUENTO NO SUPERA EL VALOR DEL FILTRO If CantidadDescuento > Cantidad Then CantidadDescuento = Cantidad End If Dim Descuentos = CantidadDescuento * RowEdit("PU").ToString().ToDecimal() Dim PU As Decimal = RowEdit("PU").ToString().ToDecimal() Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (Descuentos)) Dim TotalCalculableImpuestosIVA As Decimal = 0 TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + RowEdit("PorcentajeIEPS").ToString().ToDecimal) RowEdit("Cantidad") = Cantidad RowEdit("Descuento") = Descuentos RowEdit("ImporteIVA") = (RowEdit("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) RowEdit("Descuento") = Descuentos RowEdit("Total") = (Cantidad * PU) RowEdit("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) RowEdit("TotalConImpuestos") = (RowEdit("Total").ToString().ToDecimal() - RowEdit("Descuento").ToString().ToDecimal() + RowEdit("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) 'AGREGA LOS DESCUENTOS ADICIONALES 'AgregaDescuentos = True End If End If End If 'VERIFICA SI APLICAN OTROS DESCUENTOS 'If AgregaDescuentos Then ' Dim ObjDescuento As Modelos.VentaDescuentos = CalcularDescuentos(RowEdit("CvePS").ToString().ToEntero(), RowEdit("Cantidad").ToString().ToDecimal(), RowEdit("PU").ToString().ToDecimal()) ' If ObjDescuento.ImporteDescuento > 0 AndAlso Not ObjDescuento.EsPUModificado Then ' Dim Cantidad As Decimal = RowEdit("Cantidad").ToString().ToDecimal() ' Dim PU As Decimal = RowEdit("PU").ToString().ToDecimal() ' Dim Descuentos = RowEdit("Descuento").ToString().ToDecimal() + ObjDescuento.ImporteDescuento ' If Descuentos < (Cantidad * PU) Then ' Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (Descuentos)) ' Dim TotalCalculableImpuestosIVA As Decimal = 0 ' TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + RowEdit("PorcentajeIEPS").ToString().ToDecimal) ' RowEdit("Descuento") = Descuentos ' RowEdit("ImporteIVA") = (RowEdit("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) ' RowEdit("TotalConImpuestos") = (RowEdit("Total").ToString().ToDecimal() - RowEdit("Descuento").ToString().ToDecimal() + RowEdit("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) ' End If ' End If 'End If End If End Sub Private Sub CalculaLineasAdicionales() If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "PA") AndAlso UsuarioActual.Empresa.Funcionalidad(705) = "1" Then DdlLineaAdicional.DataSource = Nothing Dim TCConsulta As Decimal = TxtTipoCambio.Text.ToDecimal() Using ObjVentas As New ClsVentas 'SI ES VENTA EXISTENTE , SI SE VA EDITAR SOLO MOSTRAR LAS CON SALDO, FECHA DE VENCIMIENTO VIGENTE O LA LINEA ACTUAL If CveVenta > 0 Then If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados.FiltraParametros($"(Saldo > 0 AND CveEstatus = 1 AND FechaVencimiento >= '{NowADS().ToString("yyyy/MM/dd")}') OR CveLineaAdicional = {Me.CveLineaAdicionalVenta}") End If End If Else 'SI SE ESTA FACTURANDO UNA REMISION DEBE SELECCIONAR LA LINEA ADICIONAL DE ESTA If Me.CveLineaAdicionalVenta > 0 Then If ObjVentas.GetLineasAdicionalesSaldo(Me.CveLineaAdicionalVenta, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=-1, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados End If End If Else If ObjVentas.GetLineasAdicionalesSaldo(-1, CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, ConSaldo:=1, FechaVencimientoConsulta:=NowADS()) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TrLineaAdicional.Visible = True DdlLineaAdicional.DataSource = ObjVentas.DtResultados End If End If End If End If End Using DdlLineaAdicional.DataBind() DdlLineaAdicional.Items.Insert(0, New ListItem("Seleccione", "-1")) If Me.CveLineaAdicionalVenta > 0 Then DdlLineaAdicional.SelectedValueExist(CveLineaAdicionalVenta.ToString()) DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) DdlLineaAdicional.Enabled = False LnkUpdateLineaAdicional.Visible = True End If End If UpParametros.Update() UPCondicionesPago.Update() End Sub Private Sub LimpiaAgregar() TxtCantidad.Text = "" TxtNumTurnos.Text = "" HdnPS.Value = "-1" HdnCodigoPS.Value = "-1" HdnTipoPS.Value = "-1" HdnTipoInv.Value = "-1" DdlClasificacion.SelectedIndex = 0 If Not UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then DdlPS.SelectedValue = "-1" Else DdlPS.SelectedValue = "" DdlPS.SelectedText = "" End If TxtObsPS.Text = "" LtlHeaderCosto.Text = "" TxtPrecio.Text = "" LblTotalPS.Text = "0.00" HdnIVAPS.Value = "-1" HdnIVARetAPS.Value = "-1" HdnAplicaIEPS.Value = "False" HdnPorcentajeIEPS.Value = "0" HdnCodigo.Value = "-1" TxtCuentaPredial.Text = "" TagPromocion.Visible = False ' codigo comentado RMF. 2016.06.13, esto paa que respete el que tenga selecionado e nla sucursal 'DdlProyecto.SelectedIndex = 0 'DdlSubProyecto.Items.Clear() 'DdlSubProyecto.Items.Insert(0, New ListItem("Sin SubProyecto Asignado", "-1")) TxtCantidad.Focus() 'Limpia descuentos HdnTipoDescuento.Value = "-1" HdnDescuento.Value = "0" LblPrecio1.Text = "0.00" LblTotalPS1.Text = "0.00" TxtPorDescP.Text = "0" TxtDescP.Text = "0" LblDescuento.Text = "0.00" LblPrecioFinal.Text = "0.00" 'CODIGO BARRAS TxtCodigoBarras.Text = "" TxtCodigoSerie.Text = "" TxtTiempoEntrega.Text = "" ObjDescuentoGral = Nothing 'FOCUS DEPENDIENDO MODALIDAD DE CODIGO BARRAS If DIVCod.Visible Then TxtCodigoBarras.Focus() Else TxtCantidad.Focus() End If UPPDescuento.Update() UpINV.Update() UPPPS.Update() End Sub Private Sub CargaPorcentajeMarcas() Dim ObjPS As New ClsProductosServicios If ObjPS.GetPorcentajeMarcas(CveCliente) Then DtPorcentajeMarcas = ObjPS.DtResultados.Copy() End If ObjPS.Dispose() End Sub Private Function AgregarProductoServicio(Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, Obs As String, PU As Decimal, Descuento As Decimal, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String, Optional Serie As String = "", Optional TiempoEntrega As String = "", Optional EntregaDirecta As Integer = 0, Optional CveContratoDetalle As Integer = 0, Optional CveVentaDetalle As Integer = 0, Optional CveMovimientoDetallePedido As Integer = 0, Optional CveOrdenCompraDetalle As Integer = 0, Optional CveVentaDetalleRemision As Integer = 0, Optional CveVentaDetalleCotizacion As Integer = 0, Optional CuentaPredial As String = "", 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, Optional ImporteProntoPago As Decimal = 0, Optional ByRef ObjDescuento As Modelos.VentaDescuentos = Nothing, Optional CvePrecioLista As Integer = -1, Optional PrecioLista As String = "", Optional CveActivoFijo As Integer = -1, Optional AFDepreciacion As Decimal = 0D, Optional AFValorInicial As Decimal = 0D, Optional NumTurnos As Decimal = 0D, Optional CantidadConversion As Decimal = 0, Optional Costo As Decimal = 0, Optional PorcentajeIVAFijo As Decimal = -1, Optional ConsecutivoManual As Integer = 0, Optional OrdenManual As Integer = 0) As Boolean Dim Retorno As Boolean = False 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 '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 Descuento = Descuento.RoundSQL(NumeroDecimales) If Not TmpDT.Columns.Contains("RetIVA") Then TmpDT.Columns.Add("RetIVA", GetType(Decimal)) End If Row = TmpDT.NewRow() Row("CveProyecto") = CveProyecto Row("Proyecto") = Proyecto Row("CveSubProyecto") = CveSubProyecto Row("SubProyecto") = SubProyecto Row("Serie") = Serie Row("TiempoEntrega") = TiempoEntrega If OrdenManual > 0 Then Row("Orden") = OrdenManual Else If Modalidad = "U" Then Row("Orden") = Index Else Dim OrdenActual As Integer = TmpDT.MAX("Orden").ToEntero() If OrdenActual < 0 Then OrdenActual = 0 End If Row("Orden") = OrdenActual + 1 End If End If 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.Contiene(72, 80, 146) 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 Else If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) 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 'SI NO ES REFACTURACION verifica si tiene ventaminima If NuevaFactura <> 1 Then 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 If CveUM <= 0 Then CveUM = DrPS("CveUnidadMedida").ToString().ToEntero() End If Row("Cantidad") = Cantidad Row("CveUM") = CveUM Row("UM") = DrPS("UnidadMedida") Row("CveClasificacion") = DrPS("CveClasificacion") Row("Clasificacion") = DrPS("Clasificacion") Row("CvePS") = CvePS Row("Obs") = Obs '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 If DrPS("IVA").ToString().Contiene("-1", "") Then If PorcentajeIVAFijo > 0 Then Row("PorcentajeIVA") = PorcentajeIVAFijo 'si mandan el dato quiere decir que está fijo! Else Row("PorcentajeIVA") = PorcentajeIVA End If Else Row("PorcentajeIVA") = DrPS("IVA") End If If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso LblRFC.Text = "XEXX010101000" Then DrPS("IVA") = 0 Row("PorcentajeIVA") = 0 End If If ClienteNODesglosaIVA Then 'If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then PU = PU * (1 + Row("PorcentajeIVA").ToString().ToDecimal) VentaNODesglosaIVA = True 'End If DrPS("IVA") = 0 Row("PorcentajeIVA") = 0 End If TotalCalculableImpuestos = ((Cantidad * (PU)) - Descuento) TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal) Row("PU") = PU Row("Codigo") = DrPS("Codigo") Row("NumeroParte") = DrPS("NumeroParte") Row("NoIdentificacion") = DrPS("Codigo") Row("ClaveSATFraccionArancelaria") = DrPS("ClaveSATFraccionArancelaria") Row("ClaveSATUnidadAduana") = DrPS("ClaveSATUnidadAduana") Row("ClaveSATFraccionArancelariaDescripcion") = DrPS("ClaveSATFraccionArancelariaDescripcion") Row("ClaveSATUnidadAduanaDescripcion") = DrPS("ClaveSATUnidadAduanaDescripcion") If ConsecutivoManual > 0 Then Row("Consec") = ConsecutivoManual Else If Modalidad = "U" Then Row("Consec") = Index Else Dim ConsecutivoActual As Integer = TmpDT.MAX("Consec").ToEntero() If ConsecutivoActual < 0 Then ConsecutivoActual = 0 End If Row("Consec") = ConsecutivoActual + 1 End If End If Row("PS") = DrPS("PS") Row("CodigoPS") = DrPS("PSCodigo").ToString() Row("CveTipoPS") = DrPS("CveTipoPS") Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario") Row("AplicaSerie") = DrPS("AplicaSerie") Row("AplicaLote") = DrPS("AplicaLote") Row("AplicaCaducidad") = DrPS("AplicaCaducidad") Row("CveTamaño") = DrPS("CveTamaño") Row("CodigoObjetoImpuesto") = DrPS("CodigoObjetoImpuesto") If CveClasificacion <= 0 Then Row("CveClasificacion") = DrPS("CveClasificacion") If Clasificacion = "" Then Row("Clasificacion") = DrPS("Clasificacion") Dim ClienteRetIVA As Decimal = Me.ClienteRetIVA If ClienteRetIVA <= 0 AndAlso DrPS("RetIVA").ToString.ToDecimal > 0 Then ClienteRetIVA = DrPS("RetIVA").ToString.ToDecimal DdlTipoRetencion.Enabled = True End If If ClienteRetIVA <= 0 Then If 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 If LblRetIVA.Text.ToDecimal() > 0 Then TrRetIVA.Style.Add("display", "") DdlTipoRetencion.Visible = True Else TrRetIVA.Style.Add("display", "none") End If Row("IVA") = Row("PorcentajeIVA") Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) Row("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) Row("RetIVA") = (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) Row("TotalConImpuestos") = (Row("Total").ToString().ToDecimal() - Row("Descuento").ToString().ToDecimal() + Row("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Row("SATClaveProdServ") = DrPS("SATClavePS") Row("SATClaveUM") = DrPS("SATClaveUnidadMedida") If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then Row("CvePresupuestoIngreso") = Me.DdlFuenteRecaudacion.SelectedValue 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("EsCargo") = EsCargo If TmpDT.Columns.Contains("CveMarca") Then Row("CveMarca") = DrPS("CveMarca") End If If ImporteProntoPago > 0 Then Row("ImporteProntoPago") = ImporteProntoPago Row("TieneProntoPago") = "Si" 'SOLO DEBE MOSTRASE SI EL PAGO ES DE CONTADO If RBLPago.SelectedValue = "2" Then GvPS.Columns(23).Visible = True thProntoPago.Visible = True thProntoPago2.Visible = True End If End If Row("CvePrecioLista") = CvePrecioLista Row("PrecioLista") = PrecioLista Row("CveActivoFijo") = CveActivoFijo Row("AFDepreciacion") = AFDepreciacion Row("AFValorInicial") = AFValorInicial Row("NumTurnos") = NumTurnos Row("Costo") = Costo Row("CodigoAlterno") = DrPS("CodigoAlterno") Row("PSAlterno") = DrPS("PSAlterno") 'SI NO SE UTILIZA LA CONVERSION, UTILIZA LA CANTIDAD If CantidadConversion = 0 Then If DrPS("PesoKg").ToString().ToDecimal() > 0 Then CantidadConversion = Cantidad * DrPS("PesoKg").ToString().ToDecimal() Else CantidadConversion = Cantidad End If End If Row("CantidadConversion") = CantidadConversion If UsuarioActual.CveEmpresa.Contiene(119, 13, 83) 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 '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 End If End If 'RELACIONAL PS CON EL DESCUENTO If ObjDescuento IsNot Nothing Then ObjDescuento.Consec = Row("Consec").ToString().ToEntero() End If 'RECARGAR GV TmpDT.Rows.Add(Row) '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 As DataRow = 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 Dim ConsecutivoActual As Integer = TmpDT.MAX("Consec").ToEntero() If ConsecutivoActual < 0 Then ConsecutivoActual = 0 End If DrPoliza("Consec") = ConsecutivoActual + 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, Opcion:=1) Then PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal If PrecioSugerido = 0 Then Dim ObjInventarios As New ClsInventarios Dim CostoPS As Decimal = 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 As Decimal = 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 Dim DescAdicional As Decimal = 0 Dim CvePromoDetalle As Integer = -1 Dim ObjDesc As New VentaDescuentos If PrecioSugerido > 0 Then PU = PrecioSugerido ObjDesc = CalcularDescuentos(CvePSAdicional, DrPoliza("Cantidad").ToString().ToDecimal(), PU) If ObjDesc IsNot Nothing Then If ObjDesc.EsPUModificado Then PU = ObjDesc.PU End If DescAdicional = ObjDesc.ImporteDescuento CvePromoDetalle = ObjDesc.CvePromocionDetalle End If End If PU = PU.RoundSQL(6) DrPoliza("PU") = PU TotalCalculableImpuestos = (DrPoliza("Cantidad").ToString().ToDecimal * (PU) - DescAdicional) If DrPSAdicional("IVA").ToString().Contiene("-1", "") Then DrPoliza("PorcentajeIVA") = PorcentajeIVA Else DrPoliza("PorcentajeIVA") = DrPSAdicional("IVA") End If DrPoliza("IVA") = DrPoliza("PorcentajeIVA") DrPoliza("ImporteIVA") = (DrPoliza("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) DrPoliza("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) DrPoliza("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) DrPoliza("PorcentajeRetIVA") = ClienteRetIVA DrPoliza("PorcentajeRetISR") = ClienteRetISR DrPoliza("PorcentajeIEPS") = DrPSAdicional("IEPSPorcentaje") DrPoliza("ImporteIEPS") = (DrPSAdicional("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales) DrPoliza("IEPS") = DrPoliza("ImporteIEPS") DrPoliza("Descuento") = DescAdicional ' Descuento DrPoliza("TipoDescuento") = HdnTipoDescuento.Value DrPoliza("Total") = (DrPoliza("Cantidad").ToString().ToDecimal * PU) DrPoliza("TotalImporte") = (DrPoliza("Cantidad").ToString().ToDecimal * PU).RoundSQL(NumeroDecimales) DrPoliza("TotalConImpuestos") = (DrPoliza("Total").ToString().ToDecimal() - DrPoliza("Descuento").ToString().ToDecimal() + DrPoliza("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) DrPoliza("SATClaveProdServ") = DrPSAdicional("SATClavePS") DrPoliza("SATClaveUM") = DrPSAdicional("SATClaveUnidadMedida") DrPoliza("CveActivoFijo") = -1 DrPoliza("CvePromocionDetalle") = CvePromoDetalle 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 Return Retorno End Function #End Region #Region "D A T A - T A B L E S" Private Sub CreaDTVentas() TmpDT = New DataTable TmpDT.Columns.Add("CveVenta", GetType(Integer)) TmpDT.Columns.Add("Consec", GetType(Integer)) TmpDT.Columns.Add("Cantidad", GetType(Decimal)) TmpDT.Columns.Add("Codigo", GetType(String)) TmpDT.Columns.Add("CveUM", GetType(Integer)) TmpDT.Columns.Add("UM", GetType(String)) TmpDT.Columns.Add("SATClaveUM", GetType(String)) TmpDT.Columns.Add("CveClasificacion", GetType(Integer)) TmpDT.Columns.Add("Clasificacion", GetType(String)) TmpDT.Columns.Add("CvePS", GetType(Integer)) TmpDT.Columns.Add("PS", GetType(String)) TmpDT.Columns.Add("CodigoPS", GetType(String)) TmpDT.Columns.Add("SATClaveProdServ", GetType(String)) TmpDT.Columns.Add("NumeroParte", GetType(String)) TmpDT.Columns.Add("NoIdentificacion", GetType(String)) TmpDT.Columns.Add("CveTipoPS", GetType(Integer)) TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer)) TmpDT.Columns.Add("AplicaSerie", GetType(Integer)) TmpDT.Columns.Add("AplicaLote", GetType(Integer)) TmpDT.Columns.Add("AplicaCaducidad", GetType(Integer)) TmpDT.Columns.Add("Serie", GetType(String)) TmpDT.Columns.Add("CuentaPredial", GetType(String)) TmpDT.Columns.Add("Obs", GetType(String)) TmpDT.Columns.Add("TiempoEntrega", GetType(String)) TmpDT.Columns.Add("PU", GetType(Decimal)) TmpDT.Columns.Add("IVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteIVA", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal)) TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal)) TmpDT.Columns.Add("IEPS", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal)) TmpDT.Columns.Add("Descuento", GetType(Decimal)) TmpDT.Columns.Add("TipoDescuento", GetType(Integer)) TmpDT.Columns.Add("TotalImporte", GetType(Decimal)) TmpDT.Columns.Add("Total", GetType(Decimal)) TmpDT.Columns.Add("RetIVA", GetType(Decimal)) TmpDT.Columns.Add("RetISR", GetType(Decimal)) 'Para uso del módulo contable TmpDT.Columns.Add("CveProyecto", GetType(Integer)) TmpDT.Columns.Add("Proyecto", GetType(String)) TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) TmpDT.Columns.Add("SubProyecto", GetType(String)) TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer)) TmpDT.Columns.Add("CvePromocionDetalle", GetType(Integer)) 'TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto TmpDT.Columns.Add("CvePresupuestoIngreso", GetType(Integer)) TmpDT.Columns.Add("CveFuenteRecaudacion", GetType(Integer)) 'Contratos TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer)) 'Remisiones a Facturas TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRemision", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleCotizacion", GetType(Integer)) 'Pedido2 a Facturas TmpDT.Columns.Add("CveVentaDetallePedido2", GetType(Integer)) TmpDT.Columns.Add("Origen", GetType(Integer)) 'Ordenes Servicio TmpDT.Columns.Add("CveOS", GetType(Integer)) TmpDT.Columns.Add("CveOSDetalle", GetType(Integer)) TmpDT.Columns.Add("SeFacturara", GetType(Integer)) TmpDT.Columns.Add("Folio", GetType(Integer)) TmpDT.Columns.Add("Estatus", GetType(String)) 'Ordenamiento TmpDT.Columns.Add("Orden", GetType(Integer)) TmpDT.Columns.Add("TipoDocto", GetType(String)) 'OC TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer)) TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) TmpDT.Columns.Add("CantidadFacturadaCot", GetType(Decimal)) TmpDT.Columns.Add("CantidadFacturadaPed2", GetType(Decimal)) TmpDT.Columns.Add("CantidadInventario", GetType(Decimal)) TmpDT.Columns.Add("ClaveSATFraccionArancelaria", GetType(String)) TmpDT.Columns.Add("ClaveSATUnidadAduana", GetType(String)) TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", GetType(String)) TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String)) TmpDT.Columns.Add("CveTamaño", GetType(Integer)) TmpDT.Columns.Add("CveConcepto", GetType(Integer)) TmpDT.Columns.Add("EsCargo", GetType(Boolean)) TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) TmpDT.Columns.Add("TieneProntoPago", GetType(String)) TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String)) TmpDT.Columns.Add("CveMarca", GetType(Integer)) TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) TmpDT.Columns.Add("PrecioLista", GetType(String)) TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns("EsCargo").DefaultValue = False TmpDT.Columns("TieneProntoPago").DefaultValue = "No" TmpDT.Columns("ImporteProntoPago").DefaultValue = 0 TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) TmpDT.Columns("NumTurnos").DefaultValue = 0 TmpDT.Columns.Add("NumeroPedimento", GetType(String)) TmpDT.Columns.Add("CodigoAlterno", GetType(String)) TmpDT.Columns.Add("PSAlterno", GetType(String)) 'USO PARA COMERCIO EXTERIOR TmpDT.Columns.Add("CantidadConversion", GetType(Decimal)) TmpDT.Columns("CantidadConversion").DefaultValue = 0 TmpDT.Columns.Add("TotalConImpuestos", GetType(Decimal)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D End Sub Private Sub CreaDTmpC() DTmpC = New DataTable DTmpC.Columns.Add("Descripcion", GetType(String)) End Sub Private Sub CreaDTmpF() DTmpF = New DataTable DTmpF.Columns.Add("CveVenta", GetType(Integer)) DTmpF.Columns.Add("Titulo", GetType(String)) DTmpF.Columns.Add("Nombre", GetType(String)) DTmpF.Columns.Add("Puesto", GetType(String)) DTmpF.Columns.Add("Lado", GetType(Integer)) End Sub Private Sub CreaDTImpuestos() TmpDTImpuestos = New DataTable TmpDTImpuestos.Columns.Add("CveImpuestoLocal", GetType(Integer)) TmpDTImpuestos.Columns.Add("ImpuestoLocal", GetType(String)) TmpDTImpuestos.Columns.Add("Porcentaje", GetType(Decimal)) TmpDTImpuestos.Columns.Add("Importe", GetType(Decimal)) TmpDTImpuestos.Columns.Add("TipoImpuesto", GetType(Integer)) TmpDTImpuestos.Columns.Add("CveCuenta", GetType(Integer)) TmpDTImpuestos.Columns.Add("Orden", GetType(Integer)) End Sub Private Sub CreaDTImpuestosIVAIEPS() TmpDTImpuestosIVAIEPS = New DataTable TmpDTImpuestosIVAIEPS.Columns.Add("Impuesto", GetType(String)) TmpDTImpuestosIVAIEPS.Columns.Add("tasa", GetType(String)) TmpDTImpuestosIVAIEPS.Columns.Add("Importe", GetType(Decimal)) TmpDTImpuestosIVAIEPS.Columns.Add("Orden", GetType(Integer)) End Sub Private Sub CreaDTDocumentosRelacionados() TmpDTDocumentosRelacionados = New DataTable TmpDTDocumentosRelacionados.Columns.Add("SerieFolio", GetType(String)) TmpDTDocumentosRelacionados.Columns.Add("Fecha", GetType(String)) TmpDTDocumentosRelacionados.Columns.Add("Importe", GetType(Decimal)) TmpDTDocumentosRelacionados.Columns.Add("FolioFiscal", GetType(Integer)) End Sub #End Region #Region "P D F" #End Region #Region "A C T U A L I Z A " #Region "New" 'Private Function ActualizaTimbrado(Timbro As Boolean, CveVenta As Integer) As Boolean ' Dim Retorno = False ' Dim ObjVentas As New ClsVentas() ' Retorno = ObjVentas.UpdateVentaTimbre(CBool(Timbro), CveVenta) ' ObjVentas.Dispose() ' Return Retorno 'End Function 'Private Sub ActualizaCadenaOriginal(CadenaOriginal As String, CveVenta As Integer) ' Dim ObjVentas As New ClsVentas() ' ObjVentas.UpdateVentaCadenaOriginal(CadenaOriginal.ToString(), CveVenta) ' ObjVentas.Dispose() 'End Sub 'Private Sub ActualizaEstatus(CveEstatus As Integer, FolioFiscal As String, CveVenta As Integer) ' Dim ObjVentas As New ClsVentas() ' ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, "", NowADS(), CveVenta) ' ObjVentas.Dispose() 'End Sub 'Private Sub ActualizaCliente(NumCtaPago As String, MetodoDePago As Integer, CveCliente As Integer) ' Dim ObjCliente As New ClsClientes ' ObjCliente.UpdateClienteFactura(NumCtaPago, MetodoDePago, CveCliente, UsuarioActual.CveUsuario) ' ObjCliente.Dispose() 'End Sub #End Region #End Region #Region "M E T O D O S" Private Sub CargaOtrosConceptos() Dim ObjVentas As New ClsVentas If ObjVentas.GetVentaOtrosConceptos(UsuarioActual.CveEmpresa, CveVenta) Then GVOtrosConceptos.DataSource = ObjVentas.DtResultados GVOtrosConceptos.DataBind() UpOtrosConceptos.Update() End If ObjVentas.Dispose() End Sub 'Private Function GenerarPolizaAC(ObjAC As ClsContPAQi, factura As Modelos.Factura, Optional CancelacionIngreso As Boolean = False) As Modelos.RetornoPolizaConta ' Dim Retorno As New Modelos.RetornoPolizaConta ' Dim IDPoliza As Integer = 0 ' Dim ErrorAC As Boolean = False ' 'Dim ObjAC As New ClsContPAQi(UsuarioActual.Empresa) : ObjAC.IniciaTransacSQL() ' Dim Fecha As Date = factura.Fecha ' Dim Concepto As String = String.Format("GD {0}", factura.Cliente.Nombre) ' Dim Paridad As Integer = 1 ' Dim TipoMovto As Boolean = False ' If CancelacionIngreso Then ' Concepto = String.Format("Cancelación GD {0}", factura.Cliente.Nombre) ' Paridad = -1 ' TipoMovto = True ' End If ' Dim TipoPoliza = If(factura.TipoDocto = "OP" Or factura.TipoDocto = "Com", 3, 1) ' IDPoliza = ObjAC.AddPoliza(TipoPoliza, Concepto, factura.Total * 2, factura.Total * 2, factura.CveUsuario, Fecha) ' Dim dr As DataRow ' = DTPresupuestoIngresos.FiltroPrimero(String.Format("CvePresupuestoIngreso = {0}", DdlFuenteRecaudacion.SelectedValue)) ' 'Dim Importe As Double = TxtTotal.Text.ToDouble ' Dim CtaCliente As Integer = 0 ' Dim CtaISSSTESON As Integer = 643 ' Dim CtaISPT As Integer = 1745 ' ' Dim NombreCliente As String = ViewState("NombreCliente").ToString() ' If IDPoliza > 0 Then ' Retorno.IdPoliza = IDPoliza ' Retorno.FolioPoliza = ObjAC.Folio ' 'Orden de PAGO ' If factura.TipoDocto = "OP" Then ' If DdlOrdenPago.SelectedValue.ToEntero() = 1 Then ' 'ISSSTESON ' If ObjAC.AddMovimiento(IDPoliza, 0, False, Paridad * factura.Total, "", Concepto, 0, Fecha, "") Then ' If Not ObjAC.AddMovimiento(IDPoliza, CtaISSSTESON, True, Paridad * factura.Total, "", Concepto, 0, Fecha, "") Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' 'ISPT ' If ObjAC.AddMovimiento(IDPoliza, 0, False, Paridad * factura.Total, "", Concepto, 0, Fecha, "") Then ' If Not ObjAC.AddMovimiento(IDPoliza, CtaISPT, True, Paridad * factura.Total, "", Concepto, 0, Fecha, "") Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' End If ' ' NORMAL ' Else ' Dim Detalles = From gvr As GridViewRow In GvPS.Rows.Cast(Of GridViewRow)() ' Group gvr By Grp = New With { ' Key .CvePresupuestoIngreso = gvr.FCDropDownList("DdlFR").SelectedValue.ToEntero() ' } Into Group ' Select Grp.CvePresupuestoIngreso, ' TotalImporte = Group.Sum(Function(r) r.FCLiteral("LtlTotal").Text.ToDouble) ' 'Select Case TipoComprobante ' ' Case "Ing", "Egs" ' For Each grp In Detalles ' dr = DTPresupuestoIngresos.FiltroPrimero(String.Format("CvePresupuestoIngreso = {0}", grp.CvePresupuestoIngreso)) ' Concepto = String.Format("{0} - {1}: {2}", NombreCliente, DdlTipoComprobante.SelectedItem.Text.ToString(), TxtFolio.Text) ' If ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaPorEjecutar").ToString().ToEntero(), False, Paridad * grp.TotalImporte, "", Concepto, 0, Fecha, "V||" & factura.CveVenta) Then ' If ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaDevengado").ToString().ToEntero(), True, Paridad * grp.TotalImporte, "", Concepto, 0, Fecha, "V||" & factura.CveVenta) Then ' 'CARGO la deuda del cliente ' If ObjAC.AddMovimiento(IDPoliza, CtaCliente, TipoMovto, grp.TotalImporte, "", Concepto, 0, Fecha, "V||" & factura.CveVenta) Then ' 'abono, ' If Not ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaMatriz").ToString().ToEntero(), Not TipoMovto, grp.TotalImporte, "", Concepto, 0, Fecha, "V||" & factura.CveVenta) Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Next ' 'Case "OP", "Com" ' ' Dim Importe As Decimal = 0 ' ' If ObjAC.AddMovimiento(123456, IDPoliza, CtaCliente, False, Importe, "", Concepto, 0, Fecha, "") Then ' ' If ObjAC.AddMovimiento(123456, IDPoliza, CtaCliente, True, Importe, "", Concepto, 0, Fecha, "") Then ' ' End If ' ' End If ' 'End Select ' End If ' Else ' ErrorAC = True ' End If ' If Not ErrorAC Then ' ObjAC.AjustaPoliza(IDPoliza) ' Else ' Retorno.IdPoliza = 0 ' Retorno.FolioPoliza = -1 ' Alert("Error al agregar la Póliza de AC.", TipoMensaje.MsgError) ' End If ' ' ObjAC.Dispose() ' Return Retorno 'End Function 'Private Function GenerarPolizaAC(ObjAC As ClsContPAQi, Optional CancelacionIngreso As Boolean = False) As Integer ' Dim Retorno As Integer = 0 ' Dim IDPoliza As Integer = 0 ' Dim ErrorAC As Boolean = False ' 'Dim ObjAC As New ClsContPAQi(UsuarioActual.Empresa) : ObjAC.IniciaTransacSQL() ' Dim Fecha As Date = TxtFecha.Text.ToDate ' Dim Concepto As String = String.Format("GD {0}", NombreCliente) ' Dim Paridad As Integer = 1 ' Dim TipoMovto As Boolean = False ' If CancelacionIngreso Then ' Concepto = String.Format("Cancelación GD {0}", NombreCliente) ' Paridad = -1 ' TipoMovto = True ' End If ' Dim TipoPoliza = If(DdlTipoComprobante.SelectedValue.ToString() = "OP" Or DdlTipoComprobante.SelectedValue.ToString() = "Com", 3, 1) ' IDPoliza = ObjAC.AddPoliza(TipoPoliza, Concepto, TxtTotal.Text.ToDouble * 2, TxtTotal.Text.ToDouble * 2, UsuarioActual.CveUsuario, Fecha) ' Dim dr As DataRow ' = DTPresupuestoIngresos.FiltroPrimero(String.Format("CvePresupuestoIngreso = {0}", DdlFuenteRecaudacion.SelectedValue)) ' 'Dim Importe As Double = TxtTotal.Text.ToDouble ' Dim CtaCliente As Integer = 0 ' Dim CtaISSSTESON As Integer = 643 ' Dim CtaISPT As Integer = 1745 ' ' Dim NombreCliente As String = ViewState("NombreCliente").ToString() ' If IDPoliza > 0 Then ' 'Orden de PAGO ' If DdlTipoComprobante.SelectedValue.ToString() = "OP" Then ' If DdlOrdenPago.SelectedValue.ToEntero() = 1 Then ' 'ISSSTESON ' If ObjAC.AddMovimiento(IDPoliza, CtaCliente, False, Paridad * TxtTotal.Text.ToDecimal, "", Concepto, 0, Fecha, "V||" & CveVenta) Then ' If Not ObjAC.AddMovimiento(IDPoliza, CtaISSSTESON, True, Paridad * TxtTotal.Text.ToDecimal, "", Concepto, 0, Fecha, "V||" & CveVenta) Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' 'ISPT ' If ObjAC.AddMovimiento(IDPoliza, CtaCliente, False, Paridad * TxtTotal.Text.ToDecimal, "", Concepto, 0, Fecha, "V||" & CveVenta) Then ' If Not ObjAC.AddMovimiento(IDPoliza, CtaISPT, True, Paridad * TxtTotal.Text.ToDecimal, "", Concepto, 0, Fecha, "V||" & CveVenta) Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' End If ' ' NORMAL ' Else ' Dim Detalles = From gvr As GridViewRow In GvPS.Rows.Cast(Of GridViewRow)() ' Group gvr By Grp = New With { ' Key .CvePresupuestoIngreso = gvr.FCDropDownList("DdlFR").SelectedValue.ToEntero() ' } Into Group ' Select Grp.CvePresupuestoIngreso, ' TotalImporte = Group.Sum(Function(r) r.FCLiteral("LtlTotal").Text.ToDouble) ' 'Select Case TipoComprobante ' ' Case "Ing", "Egs" ' For Each grp In Detalles ' dr = DTPresupuestoIngresos.FiltroPrimero(String.Format("CvePresupuestoIngreso = {0}", grp.CvePresupuestoIngreso)) ' Concepto = String.Format("{0} - {1}: {2}", NombreCliente, DdlTipoComprobante.SelectedItem.Text.ToString(), TxtFolio.Text) ' If ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaPorEjecutar").ToString().ToEntero(), False, Paridad * grp.TotalImporte, "", Concepto, 0, Fecha, "") Then ' If ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaDevengado").ToString().ToEntero(), True, Paridad * grp.TotalImporte, "", Concepto, 0, Fecha, "") Then ' 'CARGO la deuda del cliente ' If ObjAC.AddMovimiento(IDPoliza, CtaCliente, TipoMovto, grp.TotalImporte, "", Concepto, 0, Fecha, "") Then ' 'abono, ' If Not ObjAC.AddMovimiento(IDPoliza, dr("IdCuentaMatriz").ToString().ToEntero(), Not TipoMovto, grp.TotalImporte, "", Concepto, 0, Fecha, "") Then ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Else ' ErrorAC = True ' End If ' Next ' 'Case "OP", "Com" ' ' Dim Importe As Decimal = 0 ' ' If ObjAC.AddMovimiento(123456, IDPoliza, CtaCliente, False, Importe, "", Concepto, 0, Fecha, "") Then ' ' If ObjAC.AddMovimiento(123456, IDPoliza, CtaCliente, True, Importe, "", Concepto, 0, Fecha, "") Then ' ' End If ' ' End If ' 'End Select ' End If ' Else ' ErrorAC = True ' End If ' If Not ErrorAC Then ' ObjAC.AjustaPoliza(IDPoliza) ' Retorno = IDPoliza ' Else ' Retorno = -1 ' Alert("Error al agregar la Póliza de AC.", TipoMensaje.MsgError) ' End If ' ' ObjAC.Dispose() ' Return Retorno 'End Function Private Sub SetValues() ViewState("TipoCambio") = 1 If UsuarioActual.Empresa.MostrarRetIVA Then TrRetIVA.Style.Add("display", "") If UsuarioActual.Empresa.MostrarRetISR Then TrRetISR.Style.Add("display", "") If UsuarioActual.CveEmpresa.Contiene(72, 80) Then ' agregar en el modal de PS. que forme el código del producto TxtPS.Enabled = False DivDdlTipo.Visible = True DivTxtModelo.Visible = True DivTxtAdicional.Visible = True DdlTipo.Attributes.Add("onChange", "CreaDescripcionPS();") DdlMarcaPSDes.Attributes.Add("onChange", "CreaDescripcionPS();") TxtModelo.Attributes.Add("onKeyUp ", "CreaDescripcionPS();") TxtAdicional.Attributes.Add("onKeyUp ", "CreaDescripcionPS();") CargaClasificacionesDetalles() ClasificacionModal() End If If Not UsuarioActual.CveEmpresa.Contiene(1, 119) Then 'PAGO CON TERMINAL PARA JAM RBLPago.Items.RemoveAt(2) End If End Sub Private Sub SetPermisos() If CveVenta < 1 OrElse EsCreaApartirDe Then 'Puede cotizar If Not UsuarioActual.TienePermisoProceso(59) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) End If 'Puede Hacer NC If Not UsuarioActual.TienePermisoProceso(175) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Egs")) End If 'Puede Hacer Devolución If Not UsuarioActual.TienePermisoProceso(264) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Dev")) Else If UsuarioActual.CveEmpresa.Contiene(1, 190) Then If DdlTipoComprobante.Items.FindByValue("Dev") Is Nothing Then DdlTipoComprobante.Items.Add(New ListItem("Devolución", "Dev")) End If End If End If 'Puede facturar If Not UsuarioActual.TienePermisoProceso(60) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ing")) If Not UsuarioActual.TienePermisoProceso(399) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ant")) If Not UsuarioActual.TienePermisoProceso(175) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Egs")) End If If Not UsuarioActual.TienePermisoProceso(264) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Dev")) End If End If 'Puede anticipos If UsuarioActual.TienePermisoProceso(399) Then If DdlTipoComprobante.Items.FindByValue("Ant") Is Nothing Then DdlTipoComprobante.Items.Add(New ListItem("Anticipo", "Ant")) End If 'Puede remisionar If Not UsuarioActual.TienePermisoProceso(199) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) LnkFacturarRemision.Visible = False LnkRemisiones.Visible = False End If 'Puede hacer pedido If Me.CveVenta <= 0 Then If Not UsuarioActual.TienePermisoProceso(177) Then If DdlTipoComprobante.Items.FindByValue("Ped") IsNot Nothing Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Ped")) End If End If End If '[IPP]: FALTA CONFIGURAR Y DAR PERMISO A TODOS LOS QUE TENGAN ACCESO A VENTAS ''Puede remisionar 'If Not UsuarioActual.TienePermisoProceso(199) Then ' DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) 'End If ''MODO SOLO LECTURA 'If DdlTipoComprobante.Items.Count = 0 Then ' DdlTipoComprobante.Items.Insert(0, New ListItem("Solo lectura", "-1")) ' TrBotones.Visible = False 'End If ConfiguraTipoDocto() End If End Sub Private Sub CalculaTotalesVenta(Optional RecalculaImpuestosLocales As Boolean = True, Optional NCDescuento As Boolean = False, Optional ValidarDescuentos As Boolean = False, Optional RecalcularTotalOriginal As Boolean = True, Optional Reordenar As Boolean = False) Dim TotalSubTotal As Decimal = TmpDT.SUMD("TotalImporte") Dim TotalSubTotalRef As Decimal = TotalSubTotal Dim TotalDescuentos As Decimal = TmpDT.SUMD("Descuento") Dim TotalAmortizacion As Decimal = LblAmortizacion.Text.ToDecimal Dim TotalIVA As Decimal = TmpDT.SUMD("ImporteIVA") Dim TotalIEPS As Decimal = TmpDT.SUMD("ImporteIEPS") Dim TotalRetIVA As Decimal = TmpDT.SUMD("ImporteRetIVA") Dim TotalRetISR As Decimal = TmpDT.SUMD("ImporteRetISR") Dim Total As Decimal = 0 Dim TotalImpuestosLocales As Decimal = 0 Dim TotalProntoPago As Decimal = 0 If ValidarDescuentos Then TotalSubTotalRef = TotalSubTotal - TotalDescuentos End If If TotalAmortizacion > 0 AndAlso TotalSubTotalRef = TotalAmortizacion Then ' si se amortizó completa la factura, debe de limpiar los impuestos PorcentajeRetIVA If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("3") Then For Each dr As DataRow In TmpDT.Rows dr("ImporteIVA") = 0 : dr("ImporteIEPS") = 0 : dr("PorcentajeIEPS") = 0 : dr("ImporteRetIVA") = 0 : dr("PorcentajeRetIVA") = 0 : dr("ImporteRetISR") = 0 : dr("PorcentajeIVA") = 0 : dr("IVA") = 0 Next If TmpDTImpuestos IsNot Nothing Then For Each dr2 As DataRow In TmpDTImpuestos.Rows dr2("Importe") = 0 Next TmpDTImpuestos.AcceptChanges() End If TmpDT.AcceptChanges() TotalIVA = TmpDT.SUMD("ImporteIVA") TotalIEPS = TmpDT.SUMD("ImporteIEPS") TotalRetIVA = TmpDT.SUMD("ImporteRetIVA") TotalRetISR = TmpDT.SUMD("ImporteRetISR") TotalImpuestosLocales = TmpDTImpuestos.SUMD("Importe") End If End If If RecalculaImpuestosLocales AndAlso TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then If TotalSubTotal <> TotalAmortizacion Then For Each drt As DataRow In TmpDTImpuestos.Rows drt("Importe") = drt("Porcentaje").ToString().ToDecimal * TotalSubTotal / 100 Next End If GvImpuestosLocales2.DataSource = TmpDTImpuestos GvImpuestosLocales2.DataBind() End If For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then If gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal > 0 Then If gvr.DataKey("TipoImpuesto") = "5" Then ' traslado de imp local TotalImpuestosLocales -= gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal Else TotalImpuestosLocales += gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal End If End If End If Next 'If TotalDescuentos > 0 Then GvPS.Columns(ColumnaDescuento).Visible = True : thEncDesc1.Visible = True : thEncDesc2.Visible = True Else GvPS.Columns(ColumnaDescuento).Visible = False : thEncDesc1.Visible = False : thEncDesc2.Visible = False If TotalIEPS > 0 Then TrIEPS.Visible = True : GvPS.Columns(ColumnaIEPS).Visible = True : thEncIEPS1.Visible = True : thEncIEPS2.Visible = True Else TrIEPS.Visible = False : GvPS.Columns(ColumnaIEPS).Visible = False : thEncIEPS1.Visible = False : thEncIEPS2.Visible = False If TotalRetIVA > 0 Then GvPS.Columns(ColumnaRetIVA).Visible = True Else GvPS.Columns(ColumnaRetIVA).Visible = False If TotalRetISR > 0 Then GvPS.Columns(ColumnaRetISR).Visible = True Else GvPS.Columns(ColumnaRetISR).Visible = False If DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero().Contiene(2, 1) Then TotalAmortizacion = 0 End If Dim TotalRemNCAplicado As Decimal = 0 If TbDescuentosRNC.Visible AndAlso ListaNCDesc IsNot Nothing Then TotalRemNCAplicado = ListaNCDesc.Sum(Function(RNC) RNC.TotalRemNCAplicado) If ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then TotalRemNCAplicado += ListaNCBonificacion.Sum(Function(RNC) RNC.TotalRemNCAplicado) End If End If Total = (TotalSubTotal - TotalDescuentos - TotalAmortizacion + TotalIVA + TotalIEPS - TotalRetIVA - TotalRetISR - TotalImpuestosLocales) LblSubTotal1.Text = TotalSubTotal.FormatoNumero(2) TxtSubTotal.Text = TotalSubTotal.FormatoNumero(2) LblDescuentos.Text = TotalDescuentos.FormatoNumero TxtSubTotal2.Text = (TotalSubTotal - TotalDescuentos - TotalAmortizacion).FormatoNumero(2) TxtRetIVA.Text = TotalRetIVA.FormatoNumero(2) TxtRetISR.Text = TotalRetISR.FormatoNumero(2) TxtIVA.Text = TotalIVA.FormatoNumero TxtIEPS.Text = TotalIEPS.FormatoNumero TxtTotal.Text = Total.FormatoNumero 'SI ES PAGO DE CONTADO If RBLPago.SelectedValue = "2" Then TotalProntoPago = TmpDT.SUM("ImporteProntoPago") End If HdnProntoPago.Value = TotalProntoPago.ToString() LblProntoPago.Text = TotalProntoPago.FormatoNumero(2) LblTotalAPagar.Text = (TxtTotal.Text.ToDecimal() - TotalRemNCAplicado - TotalProntoPago).FormatoNumero If RecalcularTotalOriginal Then LblTotalOriginal.Text = (TxtTotal.Text.ToDecimal()).FormatoNumero End If LblTotalAPagarAdicional.Text = (LblTotalOriginal.Text.ToDecimal() - LblDescuentoAdicional.Text.ToDecimal()).FormatoNumero LblAmort.Text = TxtSubTotal.Text If CveVenta <= 0 OrElse (CveDevolucion > 0 And NuevaFactura = 1) Then HdnVentaSaldo.Value = Total.ToString() Else HdnVentaSaldo.Value = SaldoVenta.ToString() End If HdnIVAOriginal.Value = TxtIVA.Text 'JJMQ 20160506: Se agrego para la validacion de pago de contado. 'CVImporteContado.ValueToCompare = Total.ToString() If MensajeCveSAT IsNot Nothing AndAlso MensajeCveSAT.ToString().Length > 0 Then Alert($"Los siguientes conceptos hace falta especificar clave SAT

    {MensajeCveSAT.ToString()}", TipoMensaje.MsgAdvertencia) MensajeCveSAT.Clear() End If If Reordenar Then Dim view As DataView = New DataView(TmpDT) view.Sort = "Orden" GvPS.DataSource = view GvPS.DataBind() Else GvPS.DataSource = TmpDT GvPS.DataBind() End If 'RECARGA GV INVENTARIO If (Not CveVenta > 0 Or DdlTipoComprobante.SelectedValue = "Cot") OrElse (UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso EsCreaApartirDe) Then DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") CargaGVInv(DtInv) End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso ListaDescuentos IsNot Nothing AndAlso ListaDescuentos.Count > 0 Then Dim Titulo As String = ListaDescuentos.FirstOrDefault().NombrePromo Dim strPromos As New StringBuilder If Not String.IsNullOrEmpty(Titulo) Then For Each Promo As Modelos.VentaDescuentos In ListaDescuentos If Not String.IsNullOrEmpty(Promo.ObsDescuento) Then strPromos.AppendFormat("{0}, ", Promo.ObsDescuento) End If Next If strPromos.Length > 2 Then strPromos.Remove(strPromos.Length - 2, 2) End If If strPromos.Length > 0 Then TxtObsFact.Text = "" TxtObsFact.Text = String.Format("{0} {1}", Titulo, strPromos.ToString()) End If End If End If ValidaImportePublicoGeneral() UPObservaciones.Update() UpContado.Update() UpPS.Update() RegistraScript("BorraDescuentos();", "BorraDescuentos") End Sub Private Function ValidaAdendaFEMSA() As Boolean Dim Retorno As Boolean = False If Not AplicaFEMSA Then Retorno = True Else If TxtFEMSA_Version.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtFEMSA_Version.Text.Trim) Then Retorno = False Alert("La versión de la Adenda es requerida y debe ser numérica. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf TxtFEMSA_NumSociedad.Text.Trim.Length = 0 Then Retorno = False Alert("El número de Sociedad para la Adenda es requerido. Por favor capture uno.", TipoMensaje.MsgAdvertencia) ElseIf TxtFEMSA_NumProveedor.Text.Trim.Length = 0 Then Retorno = False Alert("El número de Proveedor para la Adenda es requerido. Por favor capture uno.", TipoMensaje.MsgAdvertencia) ElseIf DdlTipoComprobante.SelectedValue = "Ing" AndAlso (TxtFEMSA_NumPedido.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtFEMSA_NumPedido.Text.Trim)) Then Retorno = False Alert("El número de Pedido para la Adenda es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf DdlTipoComprobante.SelectedValue = "Ing" AndAlso (TxtFEMSA_NumEntrada.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtFEMSA_NumEntrada.Text.Trim)) Then Retorno = False Alert("El número de Entrada para la Adenda es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf DdlTipoComprobante.SelectedValue = "Ing" AndAlso TxtFEMSA_NumRemision.Text.Trim.Length = 0 Then Retorno = False Alert("El número de Remisión para la Adenda es requerido. Por favor capture uno.", TipoMensaje.MsgAdvertencia) ElseIf TxtFEMSA_Mail.Text.Trim.Length = 0 Then Retorno = False Alert("El Mail para la Adenda es requerido. Por favor capture uno.", TipoMensaje.MsgAdvertencia) Else Retorno = True End If End If Return Retorno End Function Private Function ValidaComplementoDetallista() As Boolean Dim Retorno As Boolean = False If Not AplicaDetallista Then Retorno = True Else If TxtDet_OrdenCompra.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtDet_OrdenCompra.Text.Trim) Then Retorno = False Alert("El campo Orden de Compra es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia, "") ElseIf TxtDet_FechaOrdenCompra.Text.Trim.Length = 0 OrElse Not IsDate(TxtDet_FechaOrdenCompra.Text.Trim) Then Retorno = False Alert("El campo Fecha de Orden de Compra es requerido y debe de contar con un formato válido de fecha. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf TxtDet_GLNComprador.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtDet_GLNComprador.Text.Trim) Then Retorno = False Alert("El campo GLN-Comprador es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf TxtDet_Departamento.Text.Trim.Length = 0 Then Retorno = False Alert("El campo Departamento es requerido. Por favor ingrese uno.", TipoMensaje.MsgAdvertencia) ElseIf TxtDet_GLNVendedor.Text.Trim.Length = 0 OrElse Not IsNumeric(TxtDet_GLNVendedor.Text.Trim) Then Retorno = False Alert("El campo GLN-Vendedor es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia) ElseIf TxtDet_NumProv.Text.Trim.Length = 0 Then Retorno = False Alert("El campo Número de Proveedor es requerido y debe ser numérico. Por favor corrija.", TipoMensaje.MsgAdvertencia) Else Retorno = True End If End If Return Retorno End Function Private Function ValidaComplementoFord() As Boolean Dim Retorno As Boolean = False If Not AplicaFord Then Retorno = True Else If TxtFordGSDB.Text.Trim.Length = 0 Then Retorno = False Alert("El campo GSDB es requerido. Por favor corrija.", TipoMensaje.MsgAdvertencia) Else If LstFordASN.Items.Count = 0 Then Retorno = True 'Alert("El campo ASN es requerido. Por favor corrija.", TipoMensaje.MsgAdvertencia) Else Retorno = True End If End If End If Return Retorno End Function Private Sub VinculaCotizacionVenta() Dim ObjVentas As New ClsVentas() ObjVentas.UpdateVentaCotizacion(CveVenta, Request("CveVenta").ToEntero()) ObjVentas.Dispose() End Sub Private Sub GeneraAddenda7Eleven(Archivo As String) Dim cfdi As String = "" Dim SB As New StringBuilder Try Using sr As New StreamReader(Archivo) cfdi = sr.ReadToEnd() End Using Catch e As Exception Alert("The file could not be read:", TipoMensaje.MsgError) End Try cfdi = cfdi.Replace("", "") SB.Append(cfdi) SB.Append("") SB.AppendFormat("", Txt7ElevenNumProveedor.Text.Trim) SB.AppendFormat("", Txt7ElevenFolio.Text.Trim, Txt7ElevenTienda.Text.Trim, Txt7ElevenFecha.Text.Trim.ToDate.ToString("yyyy-MM-dd")) For Each Row As DataRow In TmpDT.Rows SB.AppendFormat("", Row("Codigo"), Row("PS"), Row("Cantidad").ToString().ToDouble.FormatoNumero(), Row("PU").ToString().ToDouble.FormatoNumero()) Next SB.Append("") Using outfile As New StreamWriter(Archivo) outfile.Write(SB.ToString()) End Using 'Exit Sub 'Dim MyXmlDocument As New XmlDocument() 'MyXmlDocument.Load("C:/Temp/aaa.xml") 'Dim nsmgr = New XmlNamespaceManager(MyXmlDocument.NameTable) 'nsmgr.AddNamespace("cfdi", "http://www.sat.gob.mx/cfd/3") 'Dim ParentElement As XmlElement = MyXmlDocument.CreateElement("cfdi:Addenda", "https://edixcfisecure.ekomercio.com/esquemas") 'ParentElement.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance") 'ParentElement.SetAttribute("xsi:schemaLocation", "https://edixcfisecure.ekomercio.com/esquemas https:/edixcfdisecure.ekomercio.com/esquemas/7Eleven.xsd") 'Dim Prov As XmlElement = MyXmlDocument.CreateElement("cfdi:Proveedor", "") 'Prov.SetAttribute("Clave", "3125") 'Dim ns As String = "cfdi" 'MyXmlDocument.DocumentElement.GetNamespaceOfPrefix("cfdi") 'Dim Recepciones As XmlElement = MyXmlDocument.CreateElement("cfdi:Recepciones") 'Recepciones.Prefix = "cfdi" 'Dim Recepcion As XmlElement = MyXmlDocument.CreateElement("cfdi:Recepcion") 'Recepcion.SetAttribute("folio", Txt7ElevenFolio.Text.Trim) 'Recepcion.SetAttribute("tienda", Txt7ElevenTienda.Text.Trim) 'Recepcion.SetAttribute("fecha", Txt7ElevenFecha.Text.Trim.ToDate.ToString("yyyy-dd-MM")) 'Dim Productos As XmlElement = MyXmlDocument.CreateElement("cfdi:Productos") ''dentro de un ciclo 'Dim Producto As XmlElement = MyXmlDocument.CreateElement("cfdi:Producto") 'Producto.SetAttribute("codigo", "cod1") 'Producto.SetAttribute("descripcion", "prod1") 'Producto.SetAttribute("cantidad", "99") 'Producto.SetAttribute("precio", "2000") 'Productos.AppendChild(Producto) ''fin de ciclo 'Recepcion.AppendChild(Productos) 'Recepciones.AppendChild(Recepcion) 'ParentElement.AppendChild(Prov) 'ParentElement.AppendChild(Recepciones) 'MyXmlDocument.DocumentElement.AppendChild(ParentElement) 'MyXmlDocument.Save("C:/Temp/aa.xml") End Sub Protected Sub DdlFuenteRecaudacion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlFuenteRecaudacion.SelectedIndexChanged For Each dr As DataRow In TmpDT.Rows dr("CvePresupuestoIngreso") = DdlFuenteRecaudacion.SelectedValue Next GvPS.DataSource = TmpDT GvPS.DataBind() UpPS.Update() End Sub Protected Sub DdlFR_SelectedIndexChanged(sender As Object, e As EventArgs) Dim DdlFR_Gv As DropDownList = CType(sender, DropDownList) Dim index As Integer = CType(DdlFR_Gv.NamingContainer, GridViewRow).FCLiteral("LtlConsecutivo").Text.ToString().ToEntero() If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then TmpDT(index - 1)("CvePresupuestoIngreso") = DdlFR_Gv.SelectedValue End If TmpDT.AcceptChanges() End Sub Protected Sub LnkASN_Click(sender As Object, e As EventArgs) Handles LnkASN.Click If TxtFordASN.Text.Trim.Length > 20 Then Alert("Maximo 20 Caracteres", TipoMensaje.MsgAdvertencia) : Exit Sub LstFordASN.Items.Add(New ListItem(TxtFordASN.Text.Trim)) TxtFordASN.Text = "" TxtFordASN.Focus() End Sub Protected Sub LnkFordQuitar_Click(sender As Object, e As EventArgs) Handles LnkFordQuitar.Click LstFordASN.Items.RemoveAt(LstFordASN.SelectedIndex) End Sub Private Sub LnkImprimir_Click(sender As Object, e As EventArgs) Handles LnkImprimir.Click GeneraPDFCot(TxtFecha.Text.Trim.ToDate, Nothing, VentaFolio, False, False) End Sub Protected Sub TxtCodigo_TextChanged(sender As Object, e As System.EventArgs) Handles TxtCodigo.TextChanged Dim Nombre As String = "-1" Dim Codigo As String = "-1" Dim NombreCorto As String = "-1" Dim RFC As String = "-1" Dim Telefono As String = "-1" Dim Mail As String = "-1" If TxtCodigo.Text.Trim <> String.Empty Then Codigo = TxtCodigo.Text.Trim If Codigo <> "-1" Then Dim ObjClientes As New ClsClientes() If ObjClientes.GetClientes(-1, Nombre, Codigo, NombreCorto, RFC, Telefono, Mail, -1, UsuarioActual.CveEmpresa, TipoCliente:=-1) Then If ObjClientes.DtResultados.Rows.Count > 0 Then If UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 77 AndAlso Not ObjClientes.CveCliente.Contiene(10450, 10460, 10458) Then TrEmitir.Visible = False : BtnCrearApartirDe.Enabled = False : LbAgregar.Enabled = False : BtnBuscarCliente.Enabled = False : BtnEmitirImprimir.Visible = False : TrVistaPrevia.Visible = False UpFacturar.Update() Exit Sub ElseIf UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 21 AndAlso Not ObjClientes.CveCliente.Contiene(27448) Then TrEmitir.Visible = False : BtnCrearApartirDe.Enabled = False : LbAgregar.Enabled = False : BtnBuscarCliente.Enabled = False : BtnEmitirImprimir.Visible = False : TrVistaPrevia.Visible = False UpFacturar.Update() Exit Sub Else HdnCveCliente.Value = ObjClientes.CveCliente.ToString() End If BtnBuscarCliente_Click(sender, e) Else Alert("No se encontró el cliente con el código: " & TxtCodigo.Text.Trim & ".", Extensiones.TipoMensaje.MsgAdvertencia) TxtCodigo.Text = "" LblCliente.Text = "Cliente" LblDireccion.Text = "Dirección" LblColonia.Text = "Colonia" LblCiudad.Text = "Ciudad" LblEstado.Text = "Estado" LblCP.Text = "00000" LblRFC.Text = "AAA010101AAA" LblTelefono.Text = "9999999999" trsucursalcliente.Visible = False End If End If ObjClientes.Dispose() End If End Sub Protected Sub TxtFolio_TextChanged(sender As Object, e As System.EventArgs) Handles TxtFolio.TextChanged If EsCreaApartirDe OrElse ModalidadEdicion OrElse CveVenta <= 0 Then ViewState("EstablecioFolio") = True Alert("Se estableció el Folio Fijo para el nuevo documento.") End If End Sub Private Sub HabilitarFacturacionSucursal() trsucursalcliente.Visible = True LnkAgregarSucursal.Visible = True LblSucursal.Text = "Cliente" If (CveVenta <= 0 OrElse NuevaFactura = 1) Then DdlSucursalCliente.Enabled = True End If DdlSucursalCliente_SelectedIndexChanged(DdlSucursalCliente, EventArgs.Empty) UpCliente.Update() End Sub Protected Sub ChkFacturarSucursal_CheckedChanged(sender As Object, e As EventArgs) End Sub Protected Sub LnkAgregarSucursal_Click(sender As Object, e As EventArgs) RegistraScript("showDivAgregarSucursal();") End Sub Protected Sub BtnAgregar_Click(sender As Object, e As System.EventArgs) Handles BtnAgregarSucursal.Click Dim LT As String = "0" Dim LG As String = "0" If CveCliente > 0 Then Dim ObjCliente As New ClsClientes Try If ObjCliente.AddSucursal(CveCliente, TxtNombreSucursal.Text.Trim, UsuarioActual.CveUsuario, TxtCiudadSucursal.Text.Trim, TxtColoniaSucursal.Text.Trim, TxtCPSucursal.Text.Trim, TxtDireccionSucursal.Text.Trim, TxtEstadoSucursal.Text.Trim, TxtLocalidadSucursal.Text.Trim, TxtPaisSucursal.Text.Trim, TxtNumExtSucursal.Text.Trim, TxtNumIntSucursal.Text.Trim, TxtTelefonoSucursal.Text.Trim.Replace(" ", "").Replace("(", "").Replace(")", "").Replace("-", ""), TxtCorreoSucursal.Text.Trim, "", "", DdlVendedorSucursal.SelectedValue.ToEntero, "", -1, 0, -1, DdlSucursalUsoCFDI.SelectedValue.ToEntero, -1, -1, LT:=LT, LG:=LG, RFC:=TxtRFCSucursal.Text.Trim()) Then TxtNombreSucursal.Text = "" TxtCiudadSucursal.Text = "" TxtColoniaSucursal.Text = "" TxtCPSucursal.Text = "" TxtDireccionSucursal.Text = "" TxtEstadoSucursal.Text = "" TxtLocalidadSucursal.Text = "" TxtPaisSucursal.Text = "" TxtNumExtSucursal.Text = "" TxtNumIntSucursal.Text = "" TxtTelefonoSucursal.Text = "" TxtCorreoSucursal.Text = "" DdlVendedorSucursal.SelectedIndex = 0 DdlSucursalUsoCFDI.SelectedIndex = 0 Alert("La nueva Sucursal del Cliente se guardó correctamente.", TipoMensaje.MsgInformacion) 'VUELVE A CARGAR LAS SUCURSALES DdlSucursalCliente.Items.Clear() If ObjCliente.GetSucursales(CveCliente) Then DdlSucursalCliente.DataSource = ObjCliente.DtResultados If ObjCliente.DtResultados.Rows.Count > 0 Then trsucursalcliente.Visible = True Else trsucursalcliente.Visible = False End If Else trsucursalcliente.Visible = False DdlSucursalCliente.DataSource = Nothing End If DdlSucursalCliente.Items.Insert(0, New ListItem("Matriz", "-1")) DdlSucursalCliente.DataBind() End If Catch ex As Exception OnError("Ocurrió un error al agregar la sucursal", ex) End Try ObjCliente.Dispose() End If UpCliente.Update() RegistraScript("hideDivAgregarSucursal();") End Sub Private Sub ConfiguraTipoDocto() 'Esconde Todo TdOrdenPago.Visible = False Tr33.Visible = False 'si tiene la funcionalidad que se active independiente del tipo de documento RMF 15-10-2017 Tr33.Visible = True If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Egs", "Dev") Then BtnEmitirImprimir.Text = "Emitir e Imprimir" ElseIf DdlTipoComprobante.SelectedValue.Contiene("Rem", "Ped", "PeC", "PA", "RNC", "Com") Then BtnEmitirImprimir.Text = "Registrar" ElseIf DdlTipoComprobante.SelectedValue = "Cot" Then BtnEmitirImprimir.Text = "Cotizar" 'FACTURACION 3.3 Tr33.Visible = True ElseIf DdlTipoComprobante.SelectedValue.ToString() = "OP" Then BtnEmitirImprimir.Text = "Registrar" TdOrdenPago.Visible = True End If If DdlTipoComprobante.SelectedValue = "Cot" AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" Then HLCargaCotizaciones.Visible = True HlAgregarExcel.Visible = False 'Else ' HLCargaCotizaciones.Visible = False ' HlAgregarExcel.Visible = True End If Dim PuedeVerCosto As Boolean = UsuarioActual.TienePermisoProceso(201) OrElse UsuarioActual.TienePermisoProceso(385) If (CveVenta <= 0 OrElse EsCreaApartirDe) AndAlso UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso PuedeVerCosto Then GvPS.Columns(10).Visible = True thCosto.Visible = True thCosto2.Visible = True Else GvPS.Columns(10).Visible = False thCosto.Visible = False thCosto2.Visible = False End If UpPS.Update() UpCargaExceles.Update() UpFacturar.Update() End Sub Private Sub EliminaPoliza() 'If UsuarioActual.Empresa.TipoContabilidad = 2 Then ' Dim ObjAC As New ClsContPAQi(UsuarioActual.Empresa) ' ObjAC.IniciaTransacSQL() ' Dim ObjConta As New ClsContabilidad ' ObjConta.IniciaTransacSQL() ' Dim ErrorMovimiento = False ' 'Elimina la poliza ' If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso (UsuarioActual.Empresa.UsaAC Or UsuarioActual.Empresa.UsaContabilidad) AndAlso IdPoliza > 0 Then ' If Not ObjAC.RemovePoliza(IdPoliza) Then ' ErrorMovimiento = True ' End If ' End If ' 'Desasocia la poliza ' If Not ErrorMovimiento Then ' If Not ObjConta.DesasociarPoliza(IdPoliza, UsuarioActual.CveEmpresa) Then ' ErrorMovimiento = True ' End If ' End If ' If Not ErrorMovimiento Then ' If Not ObjConta.UpdatePrePolizasDetalleBloquear(CvePrePoliza, False) Then ' ErrorMovimiento = True ' End If ' End If ' If Not ErrorMovimiento Then ' Alert("La póliza ha sido desvinculada y eliminada con éxito.", TipoMensaje.MsgInformacion) ' ObjAC.Commit() ' ObjConta.Commit() ' BtnDescontabilizar.Visible = False ' Else ' Alert("Ocurrió un error al desvincular y/o eliminar la póliza. Por favor intente de nuevo ", TipoMensaje.MsgError) ' ObjAC.RollBack() ' ObjConta.RollBack() ' End If ' ObjAC.Dispose() ' ObjConta.Dispose() 'End If End Sub Protected Sub DdlPS_SelectedIndexChanged1(sender As Object, e As EventArgs) Dim Ddl As DropDownList = CType(sender, DropDownList) Dim gvr As GridViewRow = CType(Ddl.BindingContainer, GridViewRow) gvr.FCDropDownList("DdlUnidadMedida").DataSource = GlobalDTProductosServiciosEquivalencias(Ddl.SelectedValue.ToEntero(), -1, UsuarioActual.CveEmpresa) gvr.FCDropDownList("DdlUnidadMedida").DataBind() End Sub Private Function TraspasoAlmacen(ByRef ObjInventario As ClsInventarios, ByRef ObjVentas As ClsVentas, CveRemision As Integer, ByRef ObjConta As ClsContabilidad, ConSalida As Boolean, ConceptoMovimiento As Integer, TmpDTDetalle As DataTable) As Boolean Dim OcurrioError As Boolean = False Try Dim DtMovimientos As DataTable Dim DtMovimientosDetalles As DataTable DtRemConceptosSurtidos = Nothing Dim TieneMovimientosServicioDomicilio As Boolean = False Dim TieneMovimientosSinCosto As Boolean = False Dim TieneMovimientosContrato As Boolean = False 'Obtenemos los movimientos detalle If ObjInventario.GetInv_Mov(CveRemision, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 Then DtMovimientos = ObjInventario.DtResultados.FiltraParametros("", DistinctColumns:={"CveMovimiento"}) 'Si estamos facturando remisiones ajustamos por ventadetalle If RemisionesLista.Count > 0 AndAlso DtRemisionesTmpDT IsNot Nothing AndAlso DtRemisionesTmpDT.Rows.Count > 0 AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim resultados = From DtRemisiones In DtRemisionesTmpDT Join DtMovDet In ObjInventario.DtResultados.FiltraParametros("CvePS > 0") On DtRemisiones("CveVentaDetalleRemision").ToString().ToEntero() Equals DtMovDet("CveVentaDetalle").ToString().ToEntero() Select DtMovDet Try If resultados.Count > 0 Then DtMovimientosDetalles = resultados.CopyToDataTable Else DtMovimientosDetalles = New DataTable End If Catch ex As Exception GuardaLog($"LOG IPP: Ventas LN: 10033. - DtRemisionesTmpDT.Rows.Count: {DtRemisionesTmpDT.Rows.Count} - ObjInventario.DtResultados.FiltraParametros('CvePS > 0').Rows.Count: {ObjInventario.DtResultados.FiltraParametros("CvePS > 0").Rows.Count} Ex:{ex.Message}") DtMovimientosDetalles = New DataTable End Try 'SE FILTRAN LOS MOVIMIENTOS DE LA PARTE QUE SE FACTURA DE LA REMISION DtMovimientos = DtMovimientosDetalles.FiltraParametros("", DistinctColumns:={"CveMovimiento"}) Else DtMovimientosDetalles = ObjInventario.DtResultados.FiltraParametros("CvePS > 0") End If 'VALIDAR SI TIENE PRODUCTOS POR TRASPASAR If DtMovimientos.Rows.Count > 0 Then Dim GeneroMovimientoAlmacen As Boolean = False TieneMovimientosServicioDomicilio = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen IN (29,4)") > 0 TieneMovimientosSinCosto = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen=26") > 0 TieneMovimientosContrato = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen IN (11)") > 0 For Each dr As DataRow In DtMovimientos.Rows 'VERIFICA SI YA SE GENERARON LAS SALIDAS DE ALMACEN NECESARIAS If DtRemConceptosSurtidos IsNot Nothing Then If DtRemConceptosSurtidos.SUMD("Surtido") = DtRemConceptosSurtidos.SUMD("Cantidad") Then Exit For End If End If 'Obtenemos los Movimientos de salida If ObjInventario.GetMovimientos(dr("CveMovimiento").ToString().ToEntero(), ConceptoMovimiento, -1, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 AndAlso DtMovimientosDetalles.Rows.Count > 0 Then Dim RowMovimiento As DataRow = ObjInventario.DtResultados(0) Dim CveAlmacenSalida As Integer = RowMovimiento("CveAlmacen").ToString().ToEntero() Dim CveAlmacenEntrada As Integer = RowMovimiento("CveAlmacenRelacionado").ToString().ToEntero() Dim CveMoneda As Integer = RowMovimiento("CveMoneda").ToString().ToEntero() Dim CveTipoAlmacen As Integer = RowMovimiento("CveTipoAlmacen").ToString().ToEntero() If (CveAlmacenEntrada > 0 AndAlso CveTipoAlmacen <> 1) Or RemisionesLista.Count = 0 Then 'Con remisiones parciales ignoramos las surtidas ya realizadas Dim MovDetalle As New DataTable Dim AplicaMovimientoDetalleEntrada As Boolean = True If RemisionesLista.Count > 0 Then AplicaMovimientoDetalleEntrada = True If TieneMovimientosSinCosto OrElse TieneMovimientosServicioDomicilio Then MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") Else If TieneMovimientosContrato Then MovDetalle = CuadrarFacturaMovimientos(ObjVentas, CveRemision, DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}")) Else MovDetalle = CuadrarFacturaMovimientos(ObjVentas, CveRemision, DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (SaldoAlmacen > 0 AND CantidadDisponible > 0)")) End If End If Else MovDetalle = DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}") End If If ErrorList.Count = 0 AndAlso MovDetalle.Rows.Count > 0 Then Dim CveMovimientoSalidaPorTraspaso As Integer = -1 Dim CveConceptoSalidaAlmacen As Integer = 40 'SALIDA DEFINITIVA DEL SISTEMA Dim CveAlmacenParaSalida As Integer = CveAlmacenSalida 'Le damos salida normal If ConSalida AndAlso Not OcurrioError Then If Not OcurrioError Then Dim CveMovimientoSalidaAlmacen As Integer = GenerarMovimientoAlmacen(ObjInventario, MovDetalle, CveAlmacenParaSalida, CveConceptoSalidaAlmacen, CveMoneda, ObjFactura.CveVenta, AplicaMovimientoDetalleEntrada:=AplicaMovimientoDetalleEntrada, MovimientoPrePoliza:=True, ObjConta:=ObjConta) GeneroMovimientoAlmacen = CveMovimientoSalidaAlmacen > 0 If Not GeneroMovimientoAlmacen Then OcurrioError = True Exit For End If If Not OcurrioError AndAlso UsuarioActual.Empresa.Funcionalidad(573) = "1" Then OcurrioError = Not GenerarMovimientoAlmacenVirtual(TmpDTDetalle, CveMovimientoSalidaAlmacen, CveAlmacenParaSalida, ObjInventario, ObjConta:=ObjConta) End If End If End If End If MovDetalle.Dispose() If OcurrioError Then Exit For End If End If End If End If If OcurrioError Then Exit For End If Next 'VERIFICA QUE SE HAYA GENERADO MOVIMIENTO DE ALMACEN If Not OcurrioError Then OcurrioError = Not GeneroMovimientoAlmacen End If 'VERIFICA SI YA SE GENERARON LAS SALIDAS DE ALMACEN NECESARIAS If Not OcurrioError AndAlso RemisionesLista.Count > 0 AndAlso DtRemConceptosSurtidos IsNot Nothing Then If DtRemConceptosSurtidos.SUMD("Surtido") <> DtRemConceptosSurtidos.SUMD("Cantidad") Then OcurrioError = True Alert("Lo facturado no coincide con lo surtido en inventario", TipoMensaje.MsgAdvertencia) End If End If End If End If Else OcurrioError = True End If 'LIMPIAR EL DT DE CONCEPTOS SURTIDOS If DtRemConceptosSurtidos IsNot Nothing Then DtRemConceptosSurtidos.Clear() DtRemConceptosSurtidos = Nothing End If Catch ex As Exception OcurrioError = True OnError("Ocurrió un error al realizar el traspaso", ex) End Try Return Not OcurrioError End Function Private Function CuadrarFacturaMovimientos(ByRef ObjVentas As ClsVentas, CveRemision As Integer, MovDetalle As DataTable) As DataTable Dim MovDTCuadrados As New DataTable MovDTCuadrados = MovDetalle.Clone MovDTCuadrados.Clear() 'Llenamos el DT solo si es primera llamada If DtRemConceptosSurtidos Is Nothing Then Dim DtDetalleRemision As DataTable = Nothing Dim StrCveVentasDetalle As New StringBuilder() If ObjVentas.GetVentaDetalle(CveRemision) Then DtDetalleRemision = ObjVentas.DtResultados.FiltraParametros("", DistinctColumns:={"CveVenta", "CveVentaDetalle"}) End If For Each RowDetalle As DataRow In DtDetalleRemision.Rows StrCveVentasDetalle.AppendFormat("{0},", RowDetalle("CveVentaDetalle")) Next If StrCveVentasDetalle.Length > 0 Then StrCveVentasDetalle.Remove(StrCveVentasDetalle.Length - 1, 1) End If If DtDetalleRemision IsNot Nothing Then DtRemConceptosSurtidos = New DataTable DtRemConceptosSurtidos.Columns.Add("CveRemision", GetType(Integer)) DtRemConceptosSurtidos.Columns.Add("CveVentaDetalle", GetType(Integer)) DtRemConceptosSurtidos.Columns.Add("Cantidad", GetType(Decimal)) DtRemConceptosSurtidos.Columns.Add("Surtido", GetType(Decimal)) 'VERIFICA SOLO LOS QUE SON TIPO PRODUCTOS For Each dr As DataRow In DtRemisionesTmpDT.FiltraParametros($"CveTipoPS = 2 AND CveVentaDetalle IN ({StrCveVentasDetalle.ToString()})").Rows Dim dtr As DataRow = DtRemConceptosSurtidos.NewRow dtr("CveRemision") = CveRemision dtr("CveVentaDetalle") = dr("CveVentaDetalle") dtr("Cantidad") = dr("Cantidad") dtr("Surtido") = 0 DtRemConceptosSurtidos.Rows.Add(dtr) Next End If End If For Each dr As DataRow In MovDetalle.Rows Dim rowSurtidos As DataRow = DtRemConceptosSurtidos.FiltroPrimero($"CveVentaDetalle={dr("CveVentaDetalle")}") Dim rowSurtidosP As DataRow = DtRemConceptosSurtidos.Select($"CveVentaDetalle={dr("CveVentaDetalle")}").FirstOrDefault Dim Indice As Integer = DtRemConceptosSurtidos.Rows.IndexOf(rowSurtidosP) 'Si no se ha terminado de surtir agregamos el movimiento If Indice >= 0 Then ' rowSurtidos("Surtido").ToString().ToDouble < rowSurtidos("Cantidad").ToString().ToDouble AndAlso (dr("CantidadDisponible").ToString().ToDouble - rowSurtidos("Surtido").ToString().ToDouble > 0 Or dr("Serie").ToString() <> "") If rowSurtidos("Surtido").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDecimal Then Dim CantidadSurtida As Decimal = If(dr("CantidadDisponible").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDouble, dr("CantidadDisponible").ToString().ToDecimal, rowSurtidos("Cantidad").ToString().ToDecimal) 'SI LA CANTIDAD SURTIDA SUPERA LO REQUERIDO, TOMA SOLO LO NECESARIO PARA COMPLETAR If (rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida) > rowSurtidos("Cantidad").ToString().ToDecimal Then CantidadSurtida = (rowSurtidos("Cantidad").ToString().ToDecimal - rowSurtidos("Surtido").ToString().ToDecimal) End If MovDTCuadrados.ImportRow(dr) MovDTCuadrados(MovDTCuadrados.Rows.Count - 1)("Cantidad") = CantidadSurtida DtRemConceptosSurtidos(Indice)("Surtido") = rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida End If Else ErrorList.Add("Ocurrió un error al traspasar el inventario de la remisión") Exit For End If Next Return MovDTCuadrados End Function Private Function TraspasoAlmacenPedido(ByRef ObjInventario As ClsInventarios, ByRef ObjVentas As ClsVentas, CvePedido As Integer, ByRef ObjConta As ClsContabilidad, ConSalida As Boolean, ConceptoMovimiento As Integer, TmpDTDetalle As DataTable) As Boolean Dim OcurrioError As Boolean = False Try Dim DtMovimientos As DataTable Dim DtMovimientosDetalles As DataTable DtRemConceptosSurtidos = Nothing Dim TieneMovimientosServicioDomicilio As Boolean = False Dim TieneMovimientosSinCosto As Boolean = False Dim TieneMovimientosContrato As Boolean = False 'Obtenemos los movimientos detalle If ObjInventario.GetInv_Mov(CvePedido, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 Then DtMovimientos = ObjInventario.DtResultados.FiltraParametros("", DistinctColumns:={"CveMovimiento"}) DtMovimientosDetalles = ObjInventario.DtResultados.FiltraParametros("CvePS > 0") 'VALIDAR SI TIENE PRODUCTOS POR TRASPASAR If DtMovimientos.Rows.Count > 0 Then Dim GeneroMovimientoAlmacen As Boolean = False TieneMovimientosServicioDomicilio = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen IN (29,4)") > 0 TieneMovimientosSinCosto = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen=26") > 0 TieneMovimientosContrato = DtMovimientosDetalles.COUNT("CveTipoAlmacen", "CveTipoAlmacen IN (11)") > 0 For Each dr As DataRow In DtMovimientos.Rows 'VERIFICA SI YA SE GENERARON LAS SALIDAS DE ALMACEN NECESARIAS If DtPedidosConceptosSurtidos IsNot Nothing Then If DtPedidosConceptosSurtidos.SUMD("Surtido") = DtPedidosConceptosSurtidos.SUMD("Cantidad") Then Exit For End If End If 'Obtenemos los Movimientos de salida If ObjInventario.GetMovimientos(dr("CveMovimiento").ToString().ToEntero(), ConceptoMovimiento, -1, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 AndAlso DtMovimientosDetalles.Rows.Count > 0 Then Dim RowMovimiento As DataRow = ObjInventario.DtResultados(0) Dim CveAlmacenSalida As Integer = RowMovimiento("CveAlmacen").ToString().ToEntero() Dim CveAlmacenEntrada As Integer = RowMovimiento("CveAlmacenRelacionado").ToString().ToEntero() Dim CveMoneda As Integer = RowMovimiento("CveMoneda").ToString().ToEntero() Dim CveTipoAlmacen As Integer = RowMovimiento("CveTipoAlmacen").ToString().ToEntero() If (CveAlmacenEntrada > 0 AndAlso CveTipoAlmacen <> 1) Then Dim MovDetalle As New DataTable Dim AplicaMovimientoDetalleEntrada As Boolean = False MovDetalle = CuadrarFacturaMovimientosPedido(ObjVentas, CvePedido, DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")} AND (SaldoAlmacen > 0 AND CantidadDisponible > 0)")) If ErrorList.Count = 0 AndAlso MovDetalle.Rows.Count > 0 Then 'SALIDA DEFINITIVA DEL SISTEMA Dim CveConceptoSalidaAlmacen As Integer = 40 Dim CveAlmacenParaSalida As Integer = CveAlmacenSalida AplicaMovimientoDetalleEntrada = True 'Le damos salida normal If ConSalida AndAlso Not OcurrioError Then If Not OcurrioError Then Dim CveMovimientoSalidaAlmacen As Integer = GenerarMovimientoAlmacenPedido(ObjInventario, MovDetalle, CveAlmacenParaSalida, CveConceptoSalidaAlmacen, CveMoneda, ObjFactura.CveVenta, AplicaMovimientoDetalleEntrada:=AplicaMovimientoDetalleEntrada, MovimientoPrePoliza:=True, ObjConta:=ObjConta) GeneroMovimientoAlmacen = CveMovimientoSalidaAlmacen > 0 If Not GeneroMovimientoAlmacen Then OcurrioError = True Exit For End If End If End If End If MovDetalle.Dispose() If OcurrioError Then Exit For End If End If End If End If If OcurrioError Then Exit For End If Next 'VERIFICA QUE SE HAYA GENERADO MOVIMIENTO DE ALMACEN If Not OcurrioError Then OcurrioError = Not GeneroMovimientoAlmacen End If 'VERIFICA SI YA SE GENERARON LAS SALIDAS DE ALMACEN NECESARIAS If Not OcurrioError AndAlso DtPedidosConceptosSurtidos IsNot Nothing Then If DtPedidosConceptosSurtidos.SUMD("Surtido") <> DtPedidosConceptosSurtidos.SUMD("Cantidad") Then OcurrioError = True Alert("Lo facturado no coincide con lo surtido en inventario", TipoMensaje.MsgAdvertencia) End If End If End If End If Else OcurrioError = True End If 'LIMPIAR EL DT DE CONCEPTOS SURTIDOS If DtPedidosConceptosSurtidos IsNot Nothing Then DtPedidosConceptosSurtidos.Clear() DtPedidosConceptosSurtidos = Nothing End If Catch ex As Exception OcurrioError = True OnError("Ocurrió un error al realizar el traspaso", ex) End Try Return Not OcurrioError End Function Private Function CuadrarFacturaMovimientosPedido(ByRef ObjVentas As ClsVentas, CvePedido As Integer, MovDetalle As DataTable) As DataTable Dim MovDTCuadrados As New DataTable MovDTCuadrados = MovDetalle.Clone MovDTCuadrados.Clear() 'Llenamos el DT solo si es primera llamada If DtPedidosConceptosSurtidos Is Nothing Then Dim DtDetallePedido As DataTable = Nothing Dim StrCveVentasDetalle As New StringBuilder() If ObjVentas.GetVentaDetalle(CvePedido) Then DtDetallePedido = ObjVentas.DtResultados.FiltraParametros("", DistinctColumns:={"CveVenta", "CveVentaDetalle"}) End If For Each RowDetalle As DataRow In DtDetallePedido.Rows StrCveVentasDetalle.AppendFormat("{0},", RowDetalle("CveVentaDetalle")) Next If StrCveVentasDetalle.Length > 0 Then StrCveVentasDetalle.Remove(StrCveVentasDetalle.Length - 1, 1) End If If DtDetallePedido IsNot Nothing Then DtPedidosConceptosSurtidos = New DataTable DtPedidosConceptosSurtidos.Columns.Add("CvePedido", GetType(Integer)) DtPedidosConceptosSurtidos.Columns.Add("CveVentaDetalle", GetType(Integer)) DtPedidosConceptosSurtidos.Columns.Add("Cantidad", GetType(Decimal)) DtPedidosConceptosSurtidos.Columns.Add("Surtido", GetType(Decimal)) 'VERIFICA SOLO LOS QUE SON TIPO PRODUCTOS For Each dr As DataRow In DtPedidosPS.FiltraParametros($"CveTipoPS = 2 AND CveVentaDetalle IN ({StrCveVentasDetalle.ToString()})").Rows Dim dtr As DataRow = DtPedidosConceptosSurtidos.NewRow dtr("CvePedido") = CvePedido dtr("CveVentaDetalle") = dr("CveVentaDetalle") dtr("Cantidad") = dr("Cantidad") dtr("Surtido") = 0 DtPedidosConceptosSurtidos.Rows.Add(dtr) Next End If End If For Each dr As DataRow In MovDetalle.Rows Dim rowSurtidos As DataRow = DtPedidosConceptosSurtidos.FiltroPrimero($"CveVentaDetalle={dr("CveVentaDetalle")}") Dim rowSurtidosP As DataRow = DtPedidosConceptosSurtidos.Select($"CveVentaDetalle={dr("CveVentaDetalle")}").FirstOrDefault Dim Indice As Integer = DtPedidosConceptosSurtidos.Rows.IndexOf(rowSurtidosP) 'Si no se ha terminado de surtir agregamos el movimiento If Indice >= 0 Then ' rowSurtidos("Surtido").ToString().ToDouble < rowSurtidos("Cantidad").ToString().ToDouble AndAlso (dr("CantidadDisponible").ToString().ToDouble - rowSurtidos("Surtido").ToString().ToDouble > 0 Or dr("Serie").ToString() <> "") If rowSurtidos("Surtido").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDecimal Then Dim CantidadSurtida As Decimal = If(dr("CantidadDisponible").ToString().ToDecimal < rowSurtidos("Cantidad").ToString().ToDouble, dr("CantidadDisponible").ToString().ToDecimal, rowSurtidos("Cantidad").ToString().ToDecimal) 'SI LA CANTIDAD SURTIDA SUPERA LO REQUERIDO, TOMA SOLO LO NECESARIO PARA COMPLETAR If (rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida) > rowSurtidos("Cantidad").ToString().ToDecimal Then CantidadSurtida = (rowSurtidos("Cantidad").ToString().ToDecimal - rowSurtidos("Surtido").ToString().ToDecimal) End If MovDTCuadrados.ImportRow(dr) MovDTCuadrados(MovDTCuadrados.Rows.Count - 1)("Cantidad") = CantidadSurtida DtPedidosConceptosSurtidos(Indice)("Surtido") = rowSurtidos("Surtido").ToString().ToDecimal + CantidadSurtida End If Else ErrorList.Add("Ocurrió un error al traspasar el inventario de la remisión") Exit For End If Next Return MovDTCuadrados End Function Private Function SalidaEntradaAlmacen(ByRef ObjInventario As ClsInventarios, CveRemision As Integer, ByRef ObjConta As ClsContabilidad) As Boolean Dim OcurrioError As Boolean = False Dim DtMovimientos As DataTable Dim DtMovimientosDetalles As DataTable 'Obtenemos los movimientos detalle If ObjInventario.GetInv_Mov(CveRemision, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 Then DtMovimientos = ObjInventario.DtResultados.FiltraParametros("", DistinctColumns:={"CveMovimiento"}) DtMovimientosDetalles = ObjInventario.DtResultados.FiltraParametros("CvePS > 0") For Each dr As DataRow In DtMovimientos.Rows 'Obtenemos los Movimientos de salida If ObjInventario.GetMovimientos(dr("CveMovimiento").ToString().ToEntero(), 3, -1, UsuarioActual.CveEmpresa) Then Dim CveAlmacenSalida As Integer = ObjInventario.DtResultados(0)("CveAlmacen").ToString().ToEntero() Dim CveMoneda As Integer = ObjInventario.DtResultados(0)("CveMoneda").ToString().ToEntero() 'Le damos entrada If Not GenerarMovimientoAlmacen(ObjInventario, DtMovimientosDetalles.FiltraParametros($"CveMovimiento = {dr("CveMovimiento")}"), CveAlmacenSalida, 2, CveMoneda, CveRemision) > 0 Then OcurrioError = True End If End If Next End If End If Return Not OcurrioError End Function Private Function GenerarMovimientoAlmacen(ByRef ObjInventario As ClsInventarios, DtMovDetalle As DataTable, CveAlmacen As Integer, ConceptoEntrada As Integer, CveMoneda As Integer, CveVenta As Integer, Optional MovimientoPrePoliza As Boolean = True, Optional ByRef ObjConta As ClsContabilidad = Nothing, Optional CveMovimientoRelacionado As Integer = -1, Optional AplicaMovimientoDetalleEntrada As Boolean = False, Optional CveAlmacenDestino As Integer = -1) As Integer Dim OcurrioError As Boolean = False Dim ContadorMovtosDetalles As Integer = 0 Dim CveMovimientoInventario As Integer = ObjInventario.AddMovimiento(CveAlmacen, ConceptoEntrada, CveMoneda, NowADS(), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, CveMovimientoRelacionado:=CveMovimientoRelacionado, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="Vta/E4") If CveMovimientoInventario > 0 Then 'Agregamos los detalles For Each MovDet As DataRow In DtMovDetalle.Rows Dim Cantidad As Decimal = 0 Dim CantidadRemision As Decimal = DtRemisionesTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetalleRemision={MovDet("CveVentaDetalle").ToString()}").ToDecimal Dim CantidadInventario As Decimal = MovDet("Cantidad").ToString().ToDecimal If RemisionesLista.Count > 0 AndAlso ChkRemProductos.Checked AndAlso CantidadInventario >= CantidadRemision Then Cantidad = CantidadRemision Else Cantidad = CantidadInventario End If Dim CveUnidad As Integer = MovDet("CveUM").ToString().ToEntero() Dim PU As Decimal = MovDet("PU").ToString().ToDecimal Dim CveProducto As Integer = MovDet("CvePS").ToString().ToEntero() Dim Serie As String = MovDet("Serie").ToString() Dim Lote As String = MovDet("Lote").ToString() Dim FechaCaducidad As Date = MovDet("FechaCaducidad").ToString.ToDate Dim CveSeccionAlmacen As Integer = -3 'SE DEBE CALCULAR LA SECCION EL EN TRIGGER DE INVENTARIOS Dim Consec As Integer = DtRemisionesTmpDT.FiltroPrimeroValor("Consec", $"CveVentaDetalle = {MovDet("CveVentaDetalle").ToString()}").ToEntero() 'COMIENZA: VENTADETALLE 'CUANDO SEA SALIDA VA POR LA VENTA DETALLE DE LA FACTURA DE LA REMISION - OJO!! SOLO FUNCIONA HASTA ORITA QUE SE HACE SALIDA SOLO CUANDO SE FACTURA LA REMISION Dim CveVentaDetalle As Integer = If(ConceptoEntrada.Contiene(3, 40), TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"Consec={Consec}").ToEntero(), MovDet("CveVentaDetalle").ToString().ToEntero()) Dim CveVentaDetalleRemision As Integer = -1 If ConceptoEntrada = 40 AndAlso MovDet("CveVentaDetalle").ToString().ToEntero() > 0 Then CveVentaDetalleRemision = MovDet("CveVentaDetalle").ToString().ToEntero() End If 'CUANDO LA VENTADETALLE NO TENGA VALOR DEBE MARCAR ERROR, NUEVA RESTRICCION DE ALMACEN If CveVentaDetalle < 0 Then Alert("no se encontro la venta detalle. Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) OcurrioError = True Exit For End If 'TERMINA: VENTADETALLE If Cantidad < 0 Then Alert("Ocurrió un Error al generar los movimientos de almacén. Por favor comuniquese con atención SIG.", TipoMensaje.MsgError) OcurrioError = True Exit For End If 'CUANDO SEA REMISION FACTURADA DEBE RELACIONAR LOS NUEVOS MOVIMIENTOS POR EL DETALLE Dim CveMovimientoDetalleEntrada As Integer = -1 If AplicaMovimientoDetalleEntrada Then CveMovimientoDetalleEntrada = MovDet("CveMovimientoDetalle").ToString().ToEntero() End If If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalleEntrada, CveVentaDetalleRemision:=CveVentaDetalleRemision) Then ContadorMovtosDetalles += 1 Else OcurrioError = True Exit For End If Next 'Agregamos las PrePolizas If Not OcurrioError Then If MovimientoPrePoliza AndAlso CveMovimientoInventario > 0 Then 'OcurrioError = Not GeneraPrePolizaMovimientoAlmacen(ObjInventario, ObjConta, ObjContPaq, ObjFactura, ObjFactura.CvePrePoliza, CveMovimientoInventario, CveAlmacen) Dim CveSubProyectoPrePoliza As Integer = ObjFactura.CveSubProyecto If CveAlmacen > 0 Then Dim CveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveSubProyecto").ToString().ToEntero() If CveSubProyectoAlmacen > 0 Then CveSubProyectoPrePoliza = CveSubProyectoAlmacen End If End If If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim DtCostos As DataTable = ObjInventario.DtResultados.Copy Dim DtCostosDistinct As DataTable = ObjInventario.DtResultados.FiltraParametros("", "", {"CveClasificacion"}) Dim ValorInventario As Decimal Dim TotalCostoAcumulado As Decimal = 0D Dim Cont As Integer = 1 Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL Dim TipoMovto69 As Boolean = False 'SI ES MOVIMIENTO DE ENTRADA CAMBIAR LA NATURALEZA DEL MOVIMIENTO If ConceptoEntrada.Contiene(9) Then TipoMovto69 = True End If For Each RowInv As DataRow In DtCostosDistinct.Rows ValorInventario = DtCostos.SUMD("Total", String.Format("CveClasificacion = {0}", RowInv("CveClasificacion"))).RoundSQL TotalCostoAcumulado += ValorInventario 'cuando es el último movimiento y hay diferencias en los importes If Cont = DtCostosDistinct.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If Try Dim CveSubProyecto69 As Integer = CveSubProyectoPrePoliza If UsuarioActual.CveEmpresa = 119 Then CveSubProyecto69 = ObjFactura.CveSubProyecto End If 'If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovto69, ValorInventario, ValorInventario, 69, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=CveSubProyecto69) Then OcurrioError = True Exit For End If 'End If Catch ex As Exception OcurrioError = True ModExtensiones.GuardaLog("Error inesperado (15147)." + ex.ToString()) Alert("Error inesperado (15147). Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) End Try Cont += 1 Next If Not OcurrioError Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovto69, TotalCosto, TotalCosto, 68, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=CveSubProyectoPrePoliza) Then OcurrioError = True End If End If If Not OcurrioError AndAlso UsuarioActual.CveEmpresa = 119 Then If ObjInventario.GetVentasPedimento(CveVenta, UsuarioActual.CveEmpresa) Then Dim dttped As DataTable = ObjInventario.DtResultados For Each drt As DataRow In dttped.FiltraParametros("Pedimento <> ''").Rows ObjInventario.UpdateVentasDetalleNumeroPedimento(CveVenta, drt("CveVentaDetalle").ToString.ToEntero, drt("Pedimento").ToString) Dim dtr As DataRow() = TmpDT.Select($"CveVentaDetalle ={drt("CveVentaDetalle")}") If dtr IsNot Nothing Then 'actualizamos los datos temporales para timbrar dtr(0)("NumeroPedimento") = drt("Pedimento").ToString End If Next End If End If Else OcurrioError = True End If End If End If 'VALIDA QUE SE HALLAN AGREGADO DETALLES AL MOVIMIENTO If ContadorMovtosDetalles = 0 Then OcurrioError = True End If Else OcurrioError = True End If If OcurrioError Then Return -1 Else Return CveMovimientoInventario End If 'Return Not OcurrioError End Function Private Function GeneraPrePolizaMovimientoAlmacen(ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, ObjFactura As Modelos.Factura, CvePrePoliza As Integer, CveMovimientoInventario As Integer, CveAlmacen As Integer) As Boolean Dim OcurrioError As Boolean = False Dim GenerarPrePolizaNueva As Boolean = False Try Dim DtCostos As DataTable = Nothing Dim DtCostosDistinct As DataTable = Nothing Dim ValorInventario As Decimal = 0D Dim TotalCostoAcumulado As Decimal = 0D Dim Cont As Integer = 1 If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then DtCostos = ObjInventario.DtResultados.Copy DtCostosDistinct = ObjInventario.DtResultados.FiltraParametros("", "", {"CveClasificacion"}) Else OcurrioError = True End If If OcurrioError Then Return Not OcurrioError End If Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL If CvePrePoliza <= 0 Then GenerarPrePolizaNueva = True CvePrePoliza = ObjConta.AddPrePolizas("Ventas/GeneraMovimientoAlmacen", ObjFactura.CvePlantillaPoliza, TotalCosto, TotalCosto, ObjFactura.CveMoneda, ObjFactura.Fecha, If(CveEmpresaCRM > 0, LblEmpresaCRM.Text, ObjFactura.Cliente.Nombre), ObjFactura.CveUsuario, UsuarioActual.CveEmpresa) If CvePrePoliza <= 0 Then OcurrioError = True Return Not OcurrioError End If End If For Each RowInv As DataRow In DtCostosDistinct.Rows ValorInventario = DtCostos.SUMD("Total", String.Format("CveClasificacion = {0}", RowInv("CveClasificacion"))).RoundSQL TotalCostoAcumulado += ValorInventario 'cuando es el último movimiento y hay diferencias en los importes If Cont = DtCostosDistinct.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If Try 'If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ValorInventario, ValorInventario, 69, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True Exit For End If 'End If Catch ex As Exception OcurrioError = True Alert("Error inesperado (15147). Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) End Try Cont += 1 Next If Not OcurrioError Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, TotalCosto, TotalCosto, 68, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True End If End If If GenerarPrePolizaNueva Then Dim AutoConta As Boolean = UsuarioActual.Empresa.Funcionalidad(200) = "1" AutoConta = AutocontaMatriz(AutoConta) If UsuarioActual.CveEmpresa = 119 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ant", "Rem", "RNC", "Cot", "Ped", "PA", "Egs", "Dev") Then AutoConta = False End If If AutoConta Then If Not ObjConta.ContabilizarPrePoliza(ObjFactura.CvePrePoliza, ObjFactura.CveUsuario, UsuarioActual.Empresa) Then Alert("Ocurrio un Error al contabilizar la prepoliza de almacen, pongase en contacto con Soporte Técnico", TipoMensaje.MsgError) End If End If End If Catch ex As Exception OnError("Ocurrió un error al generar la prepoliza del movimiento de almacen", ex) OcurrioError = True End Try Return Not OcurrioError End Function Private Function GenerarMovimientoAlmacenVirtual(TmpDTDetalle As DataTable, CveMovimientoSalidaAlmacen As Integer, CveAlmacen As Integer, ByRef ObjInventario As ClsInventarios, Optional ByRef ObjConta As ClsContabilidad = Nothing) As Boolean Dim OcurrioError As Boolean = False Try Dim CveMovimientoVirtual As Integer = -1 Dim CveAlmacenVirtual As Integer = -1 Dim CveConceptoMovimientoVirtual As Integer = 37 Dim DtPSVirtual As DataTable = Nothing CveAlmacenVirtual = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero() 'SI TIENE ALMACEN VIRTUAL ASIGNADO GENERA EL MOVIMIENTO VIRTUAL If CveAlmacenVirtual > 0 Then If ObjInventario.GetMovimientosDetalleVirtual(CveMovimientoSalidaAlmacen, UsuarioActual.CveEmpresa) Then DtPSVirtual = ObjInventario.DtResultados.Copy() Else OcurrioError = True End If If Not OcurrioError AndAlso DtPSVirtual IsNot Nothing AndAlso DtPSVirtual.Rows.Count > 0 Then CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, ObjFactura.CveVenta, -1, -1, Modulo:="Vta/VV2", CveMovimientoRelacionado:=CveMovimientoSalidaAlmacen) If CveMovimientoVirtual > 0 Then For Each RowUsado As DataRow In DtPSVirtual.Rows Dim CvePS As Integer = RowUsado("CvePS").ToString().ToEntero() Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal() Dim PU As Decimal = RowUsado("Cargo").ToString().ToDecimal() Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() Dim CveVentaDetalle As Integer = -1 'RELACIONA LA VENTA DETALLA DE LA REMISION If TmpDTDetalle IsNot Nothing Then CveVentaDetalle = TmpDTDetalle.FiltroPrimeroValor("CveVentaDetalle", $"Cantidad = {RowUsado("Cantidad")} AND CvePS = {RowUsado("CvePS")}").ToEntero() End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1, CveVentaDetalle:=CveVentaDetalle) Then OcurrioError = True Exit For End If Next Else OcurrioError = True End If 'Agregamos las PrePolizas If Not OcurrioError Then If CveMovimientoVirtual > 0 Then 'OcurrioError = Not GeneraPrePolizaMovimientoAlmacen(ObjInventario, ObjConta, ObjContPaq, ObjFactura, ObjFactura.CvePrePoliza, CveMovimientoInventario, CveAlmacen) If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim DtCostos As DataTable = ObjInventario.DtResultados.Copy Dim DtCostosDistinct As DataTable = ObjInventario.DtResultados.FiltraParametros("", "", {"CveClasificacion"}) Dim ValorInventario As Decimal Dim TotalCostoAcumulado As Decimal = 0D Dim Cont As Integer = 1 Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL For Each RowInv As DataRow In DtCostosDistinct.Rows ValorInventario = DtCostos.SUMD("Total", String.Format("CveClasificacion = {0}", RowInv("CveClasificacion"))).RoundSQL TotalCostoAcumulado += ValorInventario 'cuando es el último movimiento y hay diferencias en los importes If Cont = DtCostosDistinct.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If Try 'If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, ValorInventario, ValorInventario, 69, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoVirtual, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True Exit For End If 'End If Catch ex As Exception OcurrioError = True Alert("Error inesperado (15148). Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) End Try Cont += 1 Next If Not OcurrioError Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, TotalCosto, TotalCosto, 68, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveMovimientoAlmacen:=CveMovimientoVirtual, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True End If End If Else OcurrioError = True End If End If End If End If Else Alert("No se tiene definido el almacen virtual.") OcurrioError = True End If Catch ex As Exception OnError("Ocurrió un error al generar el almacen virtual.", ex) OcurrioError = True End Try Return Not OcurrioError End Function Private Function GenerarMovimientoAlmacenVirtualConsignacion(CveVenta As Integer, CveAlmacenContrato As Integer, ByRef ObjInventario As ClsInventarios, ObjFactura As Modelos.Factura, Optional ByRef ObjConta As ClsContabilidad = Nothing) As Boolean Dim OcurrioError As Boolean = False If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then Try Dim CveMovimientoVirtual As Integer = -1 Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenContrato).FiltroPrimeroValor("CveAlmacenVirtual").ToEntero() Dim CveConceptoMovimientoVirtual As Integer = 37 Dim DtPSVirtual As DataTable = Nothing Dim DtTamanios As DataTable = Nothing Dim CveMovimientoReferencia As Integer = -1 Dim CveSubProyecto As Integer = -1 'SI TIENE UN ALMACEN VIRTUAL GENERA EL MOVIMIENTO If CveAlmacenVirtual > 0 Then If ObjInventario.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then Dim RowMovimiento As DataRow = ObjInventario.DtResultados.FiltroPrimero("CvePS IS NULL AND ((CveTipoAlmacen = 24 AND CveConcepto = 2) OR (CveTipoAlmacen = 17 AND CveConcepto = 8)) AND CveVenta > 0") If RowMovimiento IsNot Nothing Then CveMovimientoReferencia = RowMovimiento("CveMovimiento").ToString().ToEntero() Else OcurrioError = True End If Else OcurrioError = True End If If ObjInventario.GetMovimientosDetalleVirtual(CveMovimientoReferencia, UsuarioActual.CveEmpresa) Then DtPSVirtual = ObjInventario.DtResultados.Copy() Else OcurrioError = True End If If Not OcurrioError AndAlso DtPSVirtual.Rows.Count > 0 Then CveMovimientoVirtual = ObjInventario.AddMovimiento(CveAlmacenVirtual, CveConceptoMovimientoVirtual, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, ObjFactura.CveVenta, -1, -1, Modulo:="Vta/VV", CveMovimientoRelacionado:=CveMovimientoReferencia) If CveMovimientoVirtual > 0 Then For Each RowUsado As DataRow In DtPSVirtual.Rows Dim CvePS As Integer = RowUsado("CvePS").ToString().ToEntero() Dim CantidadUsado As Decimal = RowUsado("Cantidad").ToString().ToDecimal() Dim PU As Decimal = RowUsado("Cargo").ToString().ToDecimal() Dim CveUM As Integer = RowUsado("CveUM").ToString().ToEntero() If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtual, CantidadUsado, CveUM, CvePS, PU, -1) Then OcurrioError = True Exit For End If Next Else OcurrioError = True End If 'Agregamos las PrePolizas If Not OcurrioError Then If CveMovimientoVirtual > 0 Then 'OcurrioError = Not GeneraPrePolizaMovimientoAlmacen(ObjInventario, ObjConta, ObjContPaq, ObjFactura, ObjFactura.CvePrePoliza, CveMovimientoInventario, CveAlmacen) If ObjInventario.GetMovimientosDetalle(CveMovimientoVirtual, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim DtCostos As DataTable = ObjInventario.DtResultados.Copy Dim DtCostosDistinct As DataTable = ObjInventario.DtResultados.FiltraParametros("", "", {"CveClasificacion"}) Dim ValorInventario As Decimal Dim TotalCostoAcumulado As Decimal = 0D Dim Cont As Integer = 1 Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL For Each RowInv As DataRow In DtCostosDistinct.Rows ValorInventario = DtCostos.SUMD("Total", String.Format("CveClasificacion = {0}", RowInv("CveClasificacion"))).RoundSQL TotalCostoAcumulado += ValorInventario 'cuando es el último movimiento y hay diferencias en los importes If Cont = DtCostosDistinct.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If Try 'If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, False, ValorInventario, ValorInventario, 69, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoVirtual, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True Exit For End If 'End If Catch ex As Exception OcurrioError = True Alert("Error inesperado (15148). Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) End Try Cont += 1 Next If Not OcurrioError Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, True, TotalCosto, TotalCosto, 68, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveMovimientoAlmacen:=CveMovimientoVirtual, CveSubProyecto:=ObjFactura.CveSubProyecto) Then OcurrioError = True End If End If Else OcurrioError = True End If End If End If End If End If Catch ex As Exception OnError("Ocurrió un error al generar el almacen virtual.", ex) OcurrioError = True End Try End If Return Not OcurrioError End Function Private Function GenerarMovimientoAlmacenPedido(ByRef ObjInventario As ClsInventarios, DtMovDetalle As DataTable, CveAlmacen As Integer, ConceptoEntrada As Integer, CveMoneda As Integer, CveVenta As Integer, Optional MovimientoPrePoliza As Boolean = True, Optional ByRef ObjConta As ClsContabilidad = Nothing, Optional CveMovimientoRelacionado As Integer = -1, Optional AplicaMovimientoDetalleEntrada As Boolean = False, Optional CveAlmacenDestino As Integer = -1) As Integer Dim OcurrioError As Boolean = False Dim ContadorMovtosDetalles As Integer = 0 Dim CveMovimientoInventario As Integer = ObjInventario.AddMovimiento(CveAlmacen, ConceptoEntrada, CveMoneda, NowADS(), -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, CveVenta, -1, -1, CveMovimientoRelacionado:=CveMovimientoRelacionado, CveAlmacenDestino:=CveAlmacenDestino, Modulo:="Vta/P1") If CveMovimientoInventario > 0 Then 'Agregamos los detalles For Each MovDet As DataRow In DtMovDetalle.Rows Dim Cantidad As Decimal = 0 Dim CantidadPedido As Decimal = DtPedidosTmpDT.FiltroPrimeroValor("Cantidad", $"CveVentaDetallePedido2={MovDet("CveVentaDetalle").ToString()}").ToDecimal Dim CantidadInventario As Decimal = MovDet("Cantidad").ToString().ToDecimal If CantidadInventario >= CantidadPedido Then Cantidad = CantidadPedido Else Cantidad = CantidadInventario End If Dim CveUnidad As Integer = MovDet("CveUM").ToString().ToEntero() Dim PU As Decimal = MovDet("PU").ToString().ToDecimal Dim CveProducto As Integer = MovDet("CvePS").ToString().ToEntero() Dim Serie As String = MovDet("Serie").ToString() Dim Lote As String = MovDet("Lote").ToString() Dim FechaCaducidad As Date = MovDet("FechaCaducidad").ToString.ToDate Dim CveSeccionAlmacen As Integer = -3 'SE DEBE CALCULAR LA SECCION EL EN TRIGGER DE INVENTARIOS Dim Consec As Integer = DtPedidosTmpDT.FiltroPrimeroValor("Consec", $"CveVentaDetalle = {MovDet("CveVentaDetalle").ToString()}").ToEntero() 'COMIENZA: VENTADETALLE 'CUANDO SEA SALIDA VA POR LA VENTA DETALLE DE LA FACTURA DE LA REMISION - OJO!! SOLO FUNCIONA HASTA ORITA QUE SE HACE SALIDA SOLO CUANDO SE FACTURA LA REMISION Dim CveVentaDetalle As Integer = If(ConceptoEntrada.Contiene(3, 40), TmpDT.FiltroPrimeroValor("CveVentaDetalle", $"Consec={Consec}").ToEntero(), MovDet("CveVentaDetalle").ToString().ToEntero()) Dim CveVentaDetallePedido As Integer = -1 If ConceptoEntrada = 40 AndAlso MovDet("CveVentaDetalle").ToString().ToEntero() > 0 Then CveVentaDetallePedido = MovDet("CveVentaDetalle").ToString().ToEntero() End If 'CUANDO LA VENTADETALLE NO TENGA VALOR DEBE MARCAR ERROR, NUEVA RESTRICCION DE ALMACEN If CveVentaDetalle < 0 Then Alert("no se encontro la venta detalle. Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) OcurrioError = True Exit For End If 'TERMINA: VENTADETALLE If Cantidad < 0 Then Alert("Ocurrió un Error al generar los movimientos de almacén. Por favor comuniquese con atención SIG.", TipoMensaje.MsgError) OcurrioError = True Exit For End If 'CUANDO SEA REMISION FACTURADA DEBE RELACIONAR LOS NUEVOS MOVIMIENTOS POR EL DETALLE Dim CveMovimientoDetalleEntrada As Integer = -1 If AplicaMovimientoDetalleEntrada Then CveMovimientoDetalleEntrada = MovDet("CveMovimientoDetalle").ToString().ToEntero() End If If ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, PU, -1, CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Serie, Lote:=Lote, FechaCaducidad:=FechaCaducidad, CveVentaDetalle:=CveVentaDetalle, CveMovimientoDetalleEntrada:=CveMovimientoDetalleEntrada, CveVentaDetalleRemision:=CveVentaDetallePedido) Then ContadorMovtosDetalles += 1 Else OcurrioError = True Exit For End If Next 'Agregamos las PrePolizas If Not OcurrioError Then If MovimientoPrePoliza AndAlso CveMovimientoInventario > 0 Then 'OcurrioError = Not GeneraPrePolizaMovimientoAlmacen(ObjInventario, ObjConta, ObjContPaq, ObjFactura, ObjFactura.CvePrePoliza, CveMovimientoInventario, CveAlmacen) Dim CveSubProyectoPrePoliza As Integer = ObjFactura.CveSubProyecto If CveAlmacen > 0 Then Dim CveSubProyectoAlmacen As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacen).FiltroPrimeroValor("CveSubProyecto").ToString().ToEntero() If CveSubProyectoAlmacen > 0 Then CveSubProyectoPrePoliza = CveSubProyectoAlmacen End If End If If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) AndAlso ObjInventario.DtResultados.Rows.Count > 0 Then Dim DtCostos As DataTable = ObjInventario.DtResultados.Copy Dim DtCostosDistinct As DataTable = ObjInventario.DtResultados.FiltraParametros("", "", {"CveClasificacion"}) Dim ValorInventario As Decimal Dim TotalCostoAcumulado As Decimal = 0D Dim Cont As Integer = 1 Dim TotalCosto As Decimal = DtCostos.SUMD("Total").RoundSQL Dim TipoMovto69 As Boolean = False 'SI ES MOVIMIENTO DE ENTRADA CAMBIAR LA NATURALEZA DEL MOVIMIENTO If ConceptoEntrada.Contiene(9) Then TipoMovto69 = True End If For Each RowInv As DataRow In DtCostosDistinct.Rows ValorInventario = DtCostos.SUMD("Total", String.Format("CveClasificacion = {0}", RowInv("CveClasificacion"))).RoundSQL TotalCostoAcumulado += ValorInventario 'cuando es el último movimiento y hay diferencias en los importes If Cont = DtCostosDistinct.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado) End If Try Dim CveSubProyecto69 As Integer = CveSubProyectoPrePoliza If UsuarioActual.CveEmpresa = 119 Then CveSubProyecto69 = ObjFactura.CveSubProyecto End If 'If ValorInventario <> 0 Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovto69, ValorInventario, ValorInventario, 69, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=CveSubProyecto69) Then OcurrioError = True Exit For End If 'End If Catch ex As Exception OcurrioError = True ModExtensiones.GuardaLog("Error inesperado (15147)." + ex.ToString()) Alert("Error inesperado (15147). Por favor comuniquese con atención SIG.", TipoMensaje.ToastError) End Try Cont += 1 Next If Not OcurrioError Then If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, Not TipoMovto69, TotalCosto, TotalCosto, 68, ObjFactura.SerieFolio, ObjFactura.SerieFolio, CveVenta:=CveVenta, CveCliente:=ObjFactura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, CveSubProyecto:=CveSubProyectoPrePoliza) Then OcurrioError = True End If End If If Not OcurrioError AndAlso UsuarioActual.CveEmpresa = 119 Then If ObjInventario.GetVentasPedimento(CveVenta, UsuarioActual.CveEmpresa) Then Dim dttped As DataTable = ObjInventario.DtResultados For Each drt As DataRow In dttped.FiltraParametros("Pedimento <> ''").Rows ObjInventario.UpdateVentasDetalleNumeroPedimento(CveVenta, drt("CveVentaDetalle").ToString.ToEntero, drt("Pedimento").ToString) Dim dtr As DataRow() = TmpDT.Select($"CveVentaDetalle ={drt("CveVentaDetalle")}") If dtr IsNot Nothing Then 'actualizamos los datos temporales para timbrar dtr(0)("NumeroPedimento") = drt("Pedimento").ToString End If Next End If End If Else OcurrioError = True End If End If End If 'VALIDA QUE SE HALLAN AGREGADO DETALLES AL MOVIMIENTO If ContadorMovtosDetalles = 0 Then OcurrioError = True End If Else OcurrioError = True End If If OcurrioError Then Return -1 Else Return CveMovimientoInventario End If 'Return Not OcurrioError End Function Private Function SalidaAlmacenMateriales(ByRef ObjInventario As ClsInventarios, CveOS As Integer, ByRef ObjConta As ClsContabilidad, ConSalida As Boolean, ConceptoMovimiento As Integer) As Boolean Dim TieneError As Boolean = False Dim CveMovimientoSalida As Integer = 0 Dim CveMovimientoEntrada As Integer = 0 Dim CveMovimientoSalida2 As Integer = 0 Dim CveMovimientoEntrada2 As Integer = 0 Dim CveMovimientoSalida3 As Integer = 0 Dim CveMovimientoEntrada3 As Integer = 0 Dim AlmacenEntrada As Integer = -1 Dim FolioSalida As Integer = 0 Dim FolioEntrada As Integer = 0 Dim TextoError As String = "" Dim TextoExistencia As StringBuilder = New StringBuilder 'Obtenemos los movimientos detalle If ObjInventario.GetMovimientosOS(9, CveOS, UsuarioActual.CveEmpresa) Then If ObjInventario.DtResultados.Rows.Count > 0 Then Dim CveMovimiento As Integer = ObjInventario.DtResultados(0)("CveMovimiento").ToString().ToEntero() Dim CveAlmacenOrigen As Integer = ObjInventario.DtResultados(0)("CveAlmacen").ToString().ToEntero() Dim CveAlmacenDestino As Integer = ObjInventario.DtResultados(0)("AlmacenDestino2").ToString().ToEntero() Dim CveMoneda As Integer = ObjInventario.DtResultados(0)("CveMoneda").ToString().ToEntero() Dim CveTipoAlmacen As Integer = ObjInventario.DtResultados(0)("CveTipoAlmacen").ToString().ToEntero() 'AGREGAMOS LA ENTRADA Movto 1 If Not TieneError Then AlmacenEntrada = CveAlmacenOrigen CveMovimientoEntrada = ObjInventario.AddMovimiento(AlmacenEntrada, 8, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida, CveOS:=CveOS, Modulo:="Vta/OS") FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada <= 0 Then TextoError = "No se pudo generar el movimiento de entrada correctamente" TieneError = True Else If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, -1, -1) Then TieneError = True TextoError = "Ocurrió un Error al guardar los movimientos de entrada" Exit For End If Next End If End If End If 'AGREGAMOS LA ENTRADA Movto 2 If Not TieneError Then AlmacenEntrada = CveAlmacenDestino CveMovimientoEntrada2 = ObjInventario.AddMovimiento(AlmacenEntrada, 9, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida2, CveOS:=CveOS, Modulo:="Vta/OS") FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada2 <= 0 Then TextoError = "No se pudo generar el movimiento de entrada correctamente" TieneError = True Else If ObjInventario.GetMovimientosDetalle(CveMovimientoEntrada, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada2, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, -1, -1) Then TieneError = True TextoError = "Ocurrió un Error al guardar los movimientos de entrada" Exit For End If Next End If End If End If 'AGREGAMOS LA ENTRADA Movto 3 If Not TieneError Then AlmacenEntrada = CveAlmacenDestino CveMovimientoEntrada3 = ObjInventario.AddMovimiento(AlmacenEntrada, 3, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1, CveAlmacenDestino:=-1, CveMovimientoRelacionado:=CveMovimientoSalida3, CveOS:=CveOS, Modulo:="Vta/OS") FolioEntrada = ObjInventario.Folio If CveMovimientoEntrada3 <= 0 Then TextoError = "No se pudo generar el movimiento de entrada correctamente" TieneError = True Else If ObjInventario.GetMovimientosDetalle(CveMovimientoEntrada2, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntrada3, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, -1, -1) Then TieneError = True TextoError = "Ocurrió un Error al guardar los movimientos de entrada" Exit For End If Next End If End If End If End If End If TextoExistencia.Clear() Return TieneError End Function 'Protected Sub LbVerInventario_Click(sender As Object, e As EventArgs) Handles LbVerInventario.Click ' RegistraScript(String.Format("AbrirVentana('/Inventarios/PopUpExistenciasAlmacen.aspx?CvePS={0}',800,547,'N');", DdlPS.SelectedValue)) 'End Sub #End Region #Region " MANDA CORREO " Private Sub MandaMails(UsuarioActual As Usuario, CveVenta As Integer, TipoDocto As String, SerieFolio As String, EnviarFactura As Boolean, XML As String, PDF As String, Adjunto As String, Optional CorreoContactoCRM As String = "") Dim ObjMail As New ClsSisMail() Dim ResultadoMail As Integer = 0 Dim CorreoDestino As String = "" If Me.Mail.Trim.Length > 0 Then CorreoDestino = Me.Mail End If If CorreoContactoCRM.Trim.Length > 0 Then CorreoDestino = CorreoContactoCRM ViewState("MailCC") = "" End If Try Dim Asunto As String = String.Empty Dim Cuerpo As String = String.Empty Dim TipoComprobante As String = "" If TipoDocto = "Ing" Then TipoComprobante = "Factura" If TipoDocto = "Egs" Then TipoComprobante = "Nota de Crédito" If TipoDocto = "Dev" Then TipoComprobante = "Nota de Devolución" If TipoDocto = "Rem" Then TipoComprobante = "Remisión" If TipoDocto = "Cot" Then TipoComprobante = "Cotización" If TipoDocto = "Ant" Then TipoComprobante = "Anticipo" If TipoDocto = "Cot" Then If UsuarioActual.Empresa.PlantillaMailVentaCotizacion.Trim.Length > 0 Then Cuerpo = UsuarioActual.Empresa.PlantillaMailVentaCotizacion Cuerpo = Cuerpo.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Cuerpo = Cuerpo.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Cuerpo = Cuerpo.Replace("{""TipoDocumento""}", TipoComprobante) Cuerpo = Cuerpo.Replace("{""Fecha""}", TxtFecha.Text) Cuerpo = Cuerpo.Replace("{""Total""}", TxtTotal.Text) Cuerpo = Cuerpo.Replace("{""FechaVencimiento""}", TxtFechaPago.Text) Cuerpo = Cuerpo.Replace("{""SerieFolio""}", SerieFolio) Cuerpo = Cuerpo.Replace("{""Vigencia""}", TxtFechaVencimientoCotizacion.Text) Cuerpo = Cuerpo.Replace("{""AtencionA""}", TxtAtencionA.Text) Cuerpo = Cuerpo.Replace("{""Sucursal""}", DdlSubProyectoDatos.SelectedItem.Text) Cuerpo = Cuerpo.Replace("{""DescripcionVenta""}", TxtDescripcionVenta.Text) End If If UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion.Trim.Length > 0 Then Asunto = UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion Asunto = Asunto.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Asunto = Asunto.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Asunto = Asunto.Replace("{""TipoDocumento""}", TipoComprobante) Asunto = Asunto.Replace("{""Fecha""}", TxtFecha.Text) Asunto = Asunto.Replace("{""Total""}", TxtTotal.Text) Asunto = Asunto.Replace("{""FechaVencimiento""}", TxtFechaPago.Text) Asunto = Asunto.Replace("{""SerieFolio""}", SerieFolio) Asunto = Asunto.Replace("{""Vigencia""}", TxtFechaVencimientoCotizacion.Text) Asunto = Asunto.Replace("{""AtencionA""}", TxtAtencionA.Text) Asunto = Asunto.Replace("{""Sucursal""}", DdlSubProyectoDatos.SelectedItem.Text) Asunto = Asunto.Replace("{""DescripcionVenta""}", TxtDescripcionVenta.Text) End If Else If UsuarioActual.Empresa.PlantillaMailVenta.Trim.Length > 0 Then Cuerpo = UsuarioActual.Empresa.PlantillaMailVenta Cuerpo = Cuerpo.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Cuerpo = Cuerpo.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Cuerpo = Cuerpo.Replace("{""TipoDocumento""}", TipoComprobante) Cuerpo = Cuerpo.Replace("{""Fecha""}", TxtFecha.Text) Cuerpo = Cuerpo.Replace("{""Total""}", TxtTotal.Text) Cuerpo = Cuerpo.Replace("{""FechaVencimiento""}", TxtFechaPago.Text) Cuerpo = Cuerpo.Replace("{""SerieFolio""}", SerieFolio) Cuerpo = Cuerpo.Replace("{""AtencionA""}", TxtAtencionA.Text) Cuerpo = Cuerpo.Replace("{""Sucursal""}", DdlSubProyectoDatos.SelectedItem.Text) Cuerpo = Cuerpo.Replace("{""DescripcionVenta""}", TxtDescripcionVenta.Text) End If If UsuarioActual.Empresa.AsuntoPlantillaMailVenta.Trim.Length > 0 Then Asunto = UsuarioActual.Empresa.AsuntoPlantillaMailVenta Asunto = Asunto.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Asunto = Asunto.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Asunto = Asunto.Replace("{""TipoDocumento""}", TipoComprobante) Asunto = Asunto.Replace("{""Fecha""}", TxtFecha.Text) Asunto = Asunto.Replace("{""Total""}", TxtTotal.Text) Asunto = Asunto.Replace("{""FechaVencimiento""}", TxtFechaPago.Text) Asunto = Asunto.Replace("{""SerieFolio""}", SerieFolio) Asunto = Asunto.Replace("{""AtencionA""}", TxtAtencionA.Text) Asunto = Asunto.Replace("{""Sucursal""}", DdlSubProyectoDatos.SelectedItem.Text) Asunto = Asunto.Replace("{""DescripcionVenta""}", TxtDescripcionVenta.Text) End If End If If Not EnviarFactura Then ResultadoMail = 0 End If Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) If DdlTipoComprobante.SelectedValue = "Cot" Then LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = PDF}) Else LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = PDF}) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = XML}) End If If Adjunto <> "" Then LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = Adjunto}) End If Dim DisplayName As String = "" If UsuarioActual.CveEmpresa = 119 Then DisplayName = "Facturación Agroquímicos JAM" If ObjMail.SendMail(EmpresaActual, CorreoDestino, Asunto, Cuerpo, MailCC, LSRutasMail, Displayname:=DisplayName) Then ResultadoMail = 1 Else ResultadoMail = 3 End If 'CASO ESPECIAL If CveUsuarioActual = 1446 Then ' Flora Dim str As String = "Flora Envio: Correo:" & CorreoDestino & " - CorreosCC: " & MailCC & " RM:" & ResultadoMail.ToString() str.GuardaLog() ElseIf CveUsuarioActual = 1513 Then ' Flora Dim str As String = "Flora Envio (secundario): Correo:" & CorreoDestino & " - CorreosCC: " & MailCC & " RM:" & ResultadoMail.ToString() str.GuardaLog() End If 'Next Catch ex As Exception OnError("Ocurrió error al mandar el Mail", ex) ResultadoMail = 3 Finally Dim ObjVentas As New ClsVentas(UsuarioActual:=UsuarioActual) ObjVentas.UpdateVentaMail(ResultadoMail, CveVenta) ObjVentas.Dispose() End Try End Sub #End Region #Region " ESTIMACIONES " Protected Sub DdlContrato_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlContrato.SelectedIndexChanged Dim valueselect As String = DdlContrato.SelectedValue Dim CveContrato As Integer = valueselect.ToEntero() Using ObjContratos As New ClsContratos If ObjContratos.GetContratos(CveContrato, UsuarioActual.CveEmpresa, CveCliente:=CveCliente) Then Me.CveContratoTipo = ObjContratos.DtResultados.Rows(0)("CveContratoTipo").ToString().ToEntero() End If End Using If CveContratoTipo <> 33 Then CargaDatosEstimaciones(CveCliente) DdlContrato.SelectedValue = valueselect If DdlContrato.SelectedValue.ToEntero() > 0 Then For Each gvr As GridViewRow In GvEst.Rows If gvr.DataKey("CveContratoAvance").ToEntero() > 0 Then gvr.FCCheckBox("Chk").Checked = True gvr.FCCheckBox("Chk").Visible = True End If Next BtnEstimacion.Visible = True End If Else CargaDatosContratoDetalle() GvEst.Visible = False ContratoDetalles.Visible = False GvContratoDetalles.Visible = True DdlContrato.SelectedValue = valueselect BtnEstimacion.Visible = False UPEstimaciones.Update() End If 'If RblOpcionContrato.SelectedValue = "3" Then ' GvEst.DataSource = Nothing ' GvEst.DataBind() ' BtnEstimacion.Visible = False ' BtnCargarContratoDetalles.Visible = False ' BtnCancelarContratoDetalles.Visible = False ' UPEstimaciones.Update() 'End If End Sub Private Sub CargaDatosEstimaciones(CveCliente As Integer) If CveVenta > 0 Then Exit Sub End If If DdlContrato.SelectedValue.ToEntero() > 0 Then Dim ObjContrato As New ClsContratos If ObjContrato.GetEstimacionesPorFacturar(-1, CveCliente, DdlContrato.SelectedValue.ToEntero(), 0, UsuarioActual.CveEmpresa) Then GvEst.DataSource = ObjContrato.DtResultados If ObjContrato.DtResultados.Rows.Count > 0 Then 'BtnEstimacion.Visible = True DdlContrato.Items.Clear() DdlContrato.Items.Add(New ListItem("Todos", "-1")) DdlContrato.DataSource = ObjContrato.DtResultados.FiltraParametros("CveContrato > 0", "NumeroContrato", DistinctColumns:={"CveContrato", "NumeroContrato"}) End If End If ObjContrato.Dispose() DdlContrato.DataBind() GvEst.DataBind() End If UPEstimaciones.Update() End Sub Private Sub CargaDatosContratoDetalle() If CveVenta > 0 Then Exit Sub End If Dim ObjContrato As New ClsContratos If DdlContrato.SelectedValue.ToEntero() > 0 Then If ObjContrato.GetContratosDetalle(DdlContrato.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then GvContratoDetalles.DataSource = ObjContrato.DtResultados End If Else GvContratoDetalles.DataSource = Nothing End If ObjContrato.Dispose() GvContratoDetalles.DataBind() GvContratoDetalles.EmptyDataText = "No se encontraron productos/servicios para este contrato" UPEstimaciones.Update() End Sub Private Sub CargaContratosCliente(CveCliente As Integer) If CveVenta > 0 Then Exit Sub End If DdlContrato.Items.Clear() DdlContrato.Items.Add(New ListItem("Todos", "-1")) Dim ObjContratos As New ClsContratos If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, CveCliente:=CveCliente, CveEstatus:=-1) Then DdlContrato.DataSource = ObjContratos.DtResultados.FiltraParametros("CveContrato > 0", "NumeroContrato", DistinctColumns:={"CveContrato", "NumeroContrato"}) End If ObjContratos.Dispose() DdlContrato.DataBind() UPEstimaciones.Update() End Sub Protected Sub GVEst_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEst.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.Cells(0).Width = Unit.Pixel(30) e.Row.Cells(1).Width = Unit.Pixel(300) 'Seccion e.Row.Cells(2).Width = Unit.Pixel(100) 'Cantidad e.Row.CssClass = "Totales" Else If e.Row.DBCampo("CveContratoAvance").ToString().ToEntero() > 0 Then ' e.Row.FCCheckBox("Chk").Visible = True Else If e.Row.DBCampo("CveSubFamilias").ToString().ToEntero() > 0 Then e.Row.CssClass = "SubTotales3" Else If e.Row.DBCampo("CveFamilias").ToString().ToEntero() > 0 Then e.Row.CssClass = "SubTotales2" Else e.Row.CssClass = "SubTotales" End If End If End If End If End If End Sub Private Sub ObtenerFechaVencimientoCER() Try Dim CerFile As New FileStream(Ruta & "Certificados\" & UsuarioActual.Empresa.ArchivoCer, FileMode.Open, FileAccess.Read) Dim Size As Integer = CerFile.Length.ToString().ToEntero() Dim Data As Byte() = New Byte(Size - 1) {} Size = CerFile.Read(Data, 0, Size) CerFile.Close() CerFile.Dispose() Dim x509 As New X509Certificate2() x509.Import(Data) If x509.NotAfter <= NowADS() Then Alert("La fecha del certificado ha expirado.", TipoMensaje.MsgAdvertencia) End If Catch ex As Exception Alert("No se pudo verificar la fecha del certificado", TipoMensaje.ToastError) End Try End Sub #End Region #Region "E V E N T O - B I T A C O R A" Protected Sub GvEB_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEB.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.Cells(0).Width = Unit.Pixel(200) e.Row.Cells(1).Width = Unit.Pixel(200) e.Row.Cells(2).Width = Unit.Pixel(100) e.Row.Cells(3).Width = Unit.Pixel(500) End If If e.Row.DBCampo("Archivo").ToString() <> "" Then e.Row.FCLinkButton("LinkArchivo").Visible = True e.Row.FCLinkButton("LinkArchivo").CommandArgument = String.Format("OI\{0}", e.Row.DBCampo("Archivo").ToString()) ScriptManager.GetCurrent(Me).RegisterPostBackControl(e.Row.FCLinkButton("LinkArchivo")) 'Registro un evento Postbacktrigger, que recargue toda la pagina para que funcione End If e.Row.Cells(3).HorizontalAlign = HorizontalAlign.Left End If End Sub Protected Sub BtnGuardarEventoBitacora_Click(sender As Object, e As EventArgs) Handles BtnGuardarEventoBitacora.Click Dim FileExtension As String = "-1" Dim filesgral As List(Of Archivo) = Anexo.getfiles().Archivos Dim Filename As String = "" For Each fileItem As Archivo In filesgral FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") Filename = fileItem.filename Next Dim ObjEventos As New ClsOIEventos() If ObjEventos.AddEventoBitacora(TxtEventoDescripcion.Text.Trim, String.Format(".{0}", FileExtension), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then If Filename <> "" Then Filename.FilesMove(String.Format("OI{0}", ObjEventos.CveEvento.ToString()), String.Format("{0}OI", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) End If End If ObjEventos.Dispose() CargaEventoBitacora() UPEventoBitacora.Update() End Sub Private Sub CargaEventoBitacora() If CveVenta <= 0 Then Exit Sub Dim ObjEventoBitacora As New ClsOIEventos() If ObjEventoBitacora.GetAgendaBitacora(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then GvEB.DataSource = ObjEventoBitacora.DtResultados.FiltraParametros("CveTipoEvento IN(6,2,1)") Else GvEB.DataSource = Nothing End If ObjEventoBitacora.Dispose() GvEB.DataBind() End Sub Protected Sub DownloadFile(ByVal sender As Object, ByVal e As EventArgs) Dim filePath As String = String.Format("{0}{1}", UsuarioActual.Empresa.Ruta, CType(sender, LinkButton).CommandArgument) Dim Archivo As New System.IO.FileInfo(filePath) HttpContext.Current.Response.Clear() HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.ContentType = "application/octet-stream" HttpContext.Current.Response.AppendHeader("Content-disposition", "attachment; filename=" + Path.GetFileName(filePath)) HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) HttpContext.Current.Response.TransmitFile(filePath) HttpContext.Current.Response.Flush() HttpContext.Current.Response.End() Archivo = Nothing End Sub #End Region #Region "BTN 'S" Protected Sub LnkActualizarOrdenProduccion_Click(sender As Object, e As EventArgs) If DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then Dim ObjCGame As New ClsCGame If ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), CveVenta) Then Alert("La orden de producción fue actualizada con exito.") End If ObjCGame.Dispose() Else Alert("Tiene que seleccionar una orden de producción.", TipoMensaje.MsgAdvertencia) End If End Sub Protected Sub LnkContratoAcptar_Click(sender As Object, e As EventArgs) Handles LnkContratoAcptar.Click Dim objcontra As New ClsContratos objcontra.IniciaTransacSQL() If objcontra.AddContratosAceptados(ViewState("CveVenta").ToString().ToEntero(), TxtNombreContrato.Text, 13, UsuarioActual.CveEmpresa, UsuarioActual.CveUsuario) Then '-----------------------------------------------Falata la CveContrato!!!!!!!!!!!!!! objcontra.Commit() Alert("La cotización fue aceptada" & objcontra.CveContrato, TipoMensaje.MsgInformacion) Else objcontra.RollBack() Alert("La cotización no fue aceptada", TipoMensaje.MsgError) End If objcontra.Dispose() End Sub Private Sub BtnGarantia_Click(sender As Object, e As EventArgs) Handles LkGarantia.Click Dim s As String = "" 'Nos vamos a la nueva factura Dim url As String = String.Format("/RMA/Garantias.aspx?CveVenta={0}", CveVenta) Response.Redirect(url) End Sub 'Private Sub LkNotaCreditoC_Click(sender As Object, e As EventArgs) Handles LkNotaCredito.Click ' Dim url As String = String.Format("Ventas.aspx?CveDevolucion={0}&NuevaFactura=2", CveVenta) ' Response.Redirect(url) 'End Sub Private Sub BtnNuevaFactura_Click(sender As Object, e As EventArgs) Handles LkRefacturacion.Click 'Nos vamos a la nueva factura If RefacturarCancelada Then Response.Redirect($"Ventas.aspx?CveDevolucion={CveVenta}&NuevaFactura=1") Else 'si es la empresa 119, Candado, no permite refacturar, si no se ha surtido y que no sea refacturación, para que cancele la factura mejor. 'comentado. RMF. 2023.11136. visto con Fernanda 'If UsuarioActual.CveEmpresa = 119 AndAlso LkRefacturacion.Visible AndAlso CveVentaPadre <= 0 Then ' Dim PermiteRefacturarar As Boolean = True ' Using ObjInv As New ClsInventarios ' If ObjInv.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then ' If ObjInv.DtResultados.Rows.Count > 0 Then ' PermiteRefacturarar = False ' End If ' End If ' End Using ' If Not PermiteRefacturarar Then ' Alert("La factura no se puede refacturar si no ha sido surtida previamente", TipoMensaje.MsgAdvertencia) ' Exit Sub ' End If 'End If Dim script As String = "" If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Dev", "Egs") Then Dim sb As New StringBuilder() If Not String.IsNullOrEmpty(FolioFiscal) AndAlso Not (UsuarioActual.Empresa.Funcionalidad(529) = "1") Then sb.Append("La factura se encuentra en el siguiente estatus del SAT:
    ") Dim TotalT As Decimal = TxtTotal.Text.ToDecimal Dim RFCReceptor As String = LblRFC.Text.Trim 'SI SE FACTURO LA SUCURSAL DEL CLIENTE TOMA EL RFC DE ESTA If FacturarSucursal AndAlso Me.ClienteSucursal IsNot Nothing Then RFCReceptor = Me.ClienteSucursal.RFC End If Dim SWatch As New Stopwatch SWatch.Start() Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True) SWatch.Stop() Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000 SegundosRespuesta = SegundosRespuesta.ToEntero If SegundosRespuesta >= 5 Then Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastError, "") End If If Vigencia IsNot Nothing Then If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) DivRelacionadasRefacturacion.Visible = True BtnMotivoRefacturacion.Visible = False DivMotivoRefacturacionTexto.Visible = False Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion) If Relacionados IsNot Nothing Then Dim sbExtra As New StringBuilder() If Relacionados.Codigo = 500 Then sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.") Else sbExtra.Append(Relacionados.Mensaje) Dim SbHijos As New StringBuilder() Dim SbPadres As New StringBuilder() 'If Relacionados.RelacionadosHijo IsNot Nothing Then ' For Each hijo In Relacionados.RelacionadosHijo ' SbHijos.AppendFormat("{0};", hijo.Uuid) ' Next ' If SbHijos.Length > 0 Then ' SbHijos.Remove(SbHijos.Length - 1, 1) ' End If 'End If If Relacionados.RelacionadosPadre IsNot Nothing Then For Each padre As Timbrado.RelacionadosPadre In Relacionados.RelacionadosPadre SbPadres.AppendFormat("{0};", padre.Uuid) Next If SbPadres.Length > 0 Then SbPadres.Remove(SbPadres.Length - 1, 1) End If End If Using ObjVentas As New ClsVentas 'If SbHijos.Length > 0 Then ' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then ' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy() ' End If 'End If If SbPadres.Length > 0 Then If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then GvFacturasPadreRefacturar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}") End If End If End Using 'GvFacturasHijosCancelar.DataBind() GvFacturasPadreRefacturar.DataBind() End If If sbExtra.Length > 0 Then LbExtraRefacturacion.Text = $"
    *{sbExtra.ToString()}" End If End If End If If Vigencia.EsCancelable = "Cancelable sin aceptación" Then 'script = "BtnRefacturacionConfirmarAceptacion();" Me.CveEstadoCancelacion = 1 sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) sb.Append("Está seguro de realizar la refacturación?.") End If If Vigencia.EsCancelable = "Cancelable con aceptación" OrElse String.IsNullOrEmpty(Vigencia.EsCancelable) Then 'script = "BtnRefacturacionConfirmar();" Me.CveEstadoCancelacion = 2 sb.AppendFormat("{0}
    ", "Cancelable con aceptación") sb.Append("Está seguro de cancelar el documento para realizar la refacturación?.") End If Else 'If Not UsuarioActual.Empresa.FacturaProduccion Then ' script = "BtnRefacturacionConfirmar();" 'End If sb.Append("No encontrado
    ") End If Else 'sb.Append("¿Desea realizar la refacturación?
    ") script = "BtnRefacturacionConfirmarAceptacion();" End If LblEstatusRefacturacion.Text = sb.ToString() UpMotivoRefac.Update() RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1") 'Alert(sb.ToString(), TipoMensaje.MsgConfirmacion, JSBtnAceptar:=script, TextoConfirmacion:="    Si    ", TextoCancelacion:="    No    ") End If End If End Sub Private Sub BtnMotivoRefacturacion_Click(sender As Object, e As System.EventArgs) Handles BtnMotivoRefacturacion.Click CancelarDocumento(EsRefacturacion:=True) End Sub 'BtnRefacturacionConfirmar Private Sub BtnRefacturacionConfirmar_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmar.Click ' DdlMotivoRefactura.SelectedValueExist(1) ' DdlMotivoCancelacion.Enabled = False 'UpRefac.Update() RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1") 'CancelarDocumento(True) End Sub Private Sub BtnRefacturacionConfirmarAceptacion_Click(sender As Object, e As System.EventArgs) Handles BtnRefacturacionConfirmarAceptacion.Click 'DdlMotivoCancelacion.SelectedValueExist(1) 'DdlMotivoCancelacion.Enabled = False 'UpRefac.Update() RegistraScript("$('#DivMotivoRefacturacion').modal({ backdrop: 'static', keyboard: false });", "R1") 'CancelarDocumento(True) End Sub Private Sub BtnMateriales_Click(sender As Object, e As EventArgs) Handles BtnMateriales.Click Dim OS As New ClsOS Dim DtDetalle As DataTable = Nothing Dim DtDetalleMateriales As DataTable = Nothing DtDetalle = TmpDT.Copy For Each Row As DataRow In DtDetalle.Rows If OS.GetDetalleMateriales(Row("CveOSDetalle").ToString().ToEntero(), CveOS) Then Dim Cons As Integer = TmpDT.Rows.Count + 1 For Each dr As DataRow In OS.DtResultados.FiltraParametros("SeFacturara = 1 ").Rows Dim drt As DataRow = TmpDT.NewRow FacturaMateriales = 1 drt("Consec") = Cons drt("CveClasificacion") = dr("CveClasificacion") drt("Clasificacion") = dr("Clasificacion") drt("CvePS") = dr("CvePS") drt("PS") = dr("PS") drt("CodigoPS") = dr("CodigoPS") drt("Cantidad") = dr("Cantidad") drt("CveOSDetalle") = dr("CveOSDetalle") drt("CveSubProyecto") = dr("CveSubProyecto") drt("SubProyecto") = dr("SubProyecto") drt("CveActivoFijo") = -1 TmpDT.Rows.Add(drt) Cons = Cons + 1 Next End If DtDetalleMateriales = OS.DtResultados.FiltraParametros("SeFacturara = 1 ") Next OS.Dispose() GvPS.DataSource = TmpDT DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") GvPS.DataBind() UpPS.Update() End Sub Private Sub BtnPermisoEditarRemision_Click(sender As Object, e As EventArgs) Handles BtnPermisoEditarRemision.Click BtnEditarRemision.Visible = True BtnPermisoEditarRemision.Visible = False BtnCrearApartirDe.Visible = False TxtObsFact.Enabled = True TxtOrdenCompra.Enabled = True TxtPedidoContrato.Enabled = True TxtObsAlmacen.Enabled = True DdlUsoCFDI.Enabled = True DdlMetodoPago33.Enabled = True DdlFormaPago33.Enabled = True UPCondicionesPago.Update() If Me.PermiteCredito Then RBLPago.Enabled = True DdlVendedor.Enabled = True DdlSucursalCliente.Enabled = True ModalidadEdicion = True ViewState("CveClienteAnterior") = CveCliente If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso CveTipoVenta.Contiene(1, 3, 5) Then TrVentasMedicas1.Visible = True DdlMedico.Enabled = True DdlProcedimiento.Enabled = True TxtPaciente.Enabled = True TxtEpisodio.Enabled = True TxtFolioRemision.Enabled = True 'carga los almacenes para la existencias AsignaAlmacenWS() End If Dim CantidadFacturadaRemision As Decimal = 0 'EN BDH NO DEBE PERMITIR EDITAR EL PU If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then For Each Gvr As GridViewRow In GvPS.Rows Gvr.FCLinkButton("imgE").Visible = True Gvr.FCLinkButton("imgD").Visible = False CantidadFacturadaRemision += Gvr.DataKey("CantidadFacturadaRem").ToString().ToDecimal Next Else 'SI EL DETALLE NO TIENE MOVIMIENTOS DE INVENTARIO ES VISIBLE For Each Gvr As GridViewRow In GvPS.Rows Gvr.FCLinkButton("imgE").Visible = Not Gvr.DataKey("CantidadFacturadaRem").ToString().ToDouble > 0 Gvr.FCLinkButton("imgD").Visible = Not Gvr.DataKey("CantidadInventario").ToString().ToDouble > 0 CantidadFacturadaRemision += Gvr.DataKey("CantidadFacturadaRem").ToString().ToDecimal 'If GvInv.Rows.Count > 0 Then ' Gvr.FCLinkButton("imgE").Enabled = False ' Gvr.FCLinkButton("imgE").ToolTip = "No se puede editar debido a que ya hay un movimiento de almacen." 'End If Next End If 'ACTIVA CAMBIO DE CLIENTE - SI NO TIENE NADA FACTURADO If Not CantidadFacturadaRemision > 0 AndAlso UsuarioActual.TienePermisoProceso(284) Then HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto") TxtCodigo.ReadOnly = False End If If CantidadFacturadaRemision = 0 AndAlso UsuarioActual.TienePermisoProceso(161) Then DdlVendedor.Enabled = True End If TxtCantidad.Enabled = True DdlClasificacion.Enabled = True DdlPS.Enabled = True TxtObsPS.Enabled = True DdlProyecto.Enabled = True DdlSubProyecto.Enabled = True If EsVentaMedica Then TxtPrecio.Enabled = False If UsuarioActual.CveUsuario = 3986 Then TxtPrecio.Enabled = True End If Else TxtPrecio.Enabled = True End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then DdlFormaEntrega.Enabled = True End If LbAgregar.Enabled = True ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '2'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = ''; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = 'none'; $get('BtnAplicarDescG').style.display = ''; $get('TrMotivoDescuento').style.display = '';") LblSubTotal1.Text = TxtSubTotal.Text LblAmort.Text = TxtSubTotal.Text LimpiaEscondeContado() If Not UsuarioActual.TienePermisoProceso(289) Then DdlMetodoPago33.Enabled = True DdlFormaPago33.Enabled = True End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If DdlMedico.SelectedValue.ToEntero() > 0 Then TxtFechaOS.Enabled = True End If End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then LiCalcularPromociones.Visible = True End If 'NO PERMITE EDITAR FECHA DEL PAGO If Not UsuarioActual.TienePermisoProceso(260) Then TxtFechaPago.Enabled = False imgCalendario.Visible = False End If TxtAtencionA.Enabled = True GvPS.Columns(21).Visible = True thOrden.Visible = True Dim HabilitarExistencias As Boolean = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then HabilitarExistencias = True GvPS.Columns(20).Visible = True End If For Each GvRow As GridViewRow In GvPS.Rows If GvRow.RowType = DataControlRowType.Header Then GvRow.FCLinkButton("LnkOrdenarGvPS").Visible = True End If If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCTextBox("TxtOrden").Visible = True If GvRow.FCTextBox("TxtOrden").ToEntero() <= 0 Then GvRow.FCTextBox("TxtOrden").Text = GvRow.DataKey("Consec") End If End If If HabilitarExistencias Then GvRow.FCLinkButton("LnkExistencias").Visible = True GvRow.FCLinkButton("imgClone").Visible = False GvRow.FCLinkButton("LnkDescuentos").Visible = False End If Next OrdenarPS(True) UpCliente.Update() UPPVentas.Update() UpPS.Update() UpCliente.Update() UPObservaciones.Update() UpnTools.Update() End Sub Private Sub BtnEditarRemision_Click(sender As Object, e As EventArgs) Handles BtnEditarRemision.Click If TmpDT Is Nothing OrElse TmpDT.Rows.Count = 0 Then Alert("Es necesario tener al menos 1 producto y/o servicio", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim OcurrioError As Boolean = False Dim ObjVentas As New ClsVentas ObjVentas.IniciaTransacSQL() Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) Dim ObjBancos As New ClsBancos(ObjVentas.IniciaTransacSQL()) Dim ObjCGame As New ClsCGame(ObjVentas.IniciaTransacSQL()) Dim Moneda As Integer = DdlMoneda.SelectedValue.ToEntero() Dim TipoCambio As Decimal = TxtTipoCambio.Text.ToDecimal EditoRemision = True CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero Try 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS If DdlMoneda.SelectedValue.ToEntero() <> 2 AndAlso ChkConvertirDolares.Checked Then For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / TxtTipoCambioDlls.Text.Trim.ToDecimal).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) End If Next TxtSubTotal.Text = TmpDT.SUM("Total").FormatoNumero LblDescuentos.Text = TmpDT.SUM("Descuento").FormatoNumero LblAmortizacion.Text = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales).FormatoNumero TxtIVA.Text = TmpDT.SUM("ImporteIVA").FormatoNumero TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero TxtRetISR.Text = TmpDT.SUM("ImporteRetISR").FormatoNumero TxtIEPS.Text = TmpDT.SUM("ImporteIEPS").FormatoNumero TxtTotal.Text = (TxtSubTotal.Text.ToDecimal - LblDescuentos.Text.ToDecimal - LblAmortizacion.Text.ToDecimal + TxtIVA.Text.ToDecimal + TxtIEPS.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal - ImpuestosLocales).ToDecimal.FormatoNumero TipoCambio = TxtTipoCambioDlls.Text.Trim.ToDecimal Moneda = 2 End If 'CONVERTIR REMISION - TIPO MONEDA -PESO A DOLARES If DdlMoneda.SelectedValue.ToEntero() <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then Dim Importe As Decimal Dim TCC As Decimal = TxtTipoCambio.Text.Trim.ToDecimal For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * TCC, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDecimal * TCC, NumeroDecimales) Importe = Row("Total").ToString().ToDecimal - Row("Descuento").ToString().ToDecimal Row("ImporteIEPS") = Math.Round(Importe * Row("PorcentajeIEPS").ToString().ToDecimal, NumeroDecimales) Row("ImporteIVA") = Math.Round(Importe * Row("PorcentajeIVA").ToString().ToDecimal, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Importe * Row("PorcentajeRetIVA").ToString().ToDecimal, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Importe * Row("PorcentajeRetISR").ToString().ToDecimal, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * TxtTipoCambio.Text.Trim.ToDecimal).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * TxtTipoCambio.Text.Trim.ToDecimal, NumeroDecimales) End If Next TxtSubTotal.Text = TmpDT.SUM("Total").FormatoNumero LblDescuentos.Text = TmpDT.SUM("Descuento").FormatoNumero LblAmortizacion.Text = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * TxtTipoCambio.Text.Trim.ToDecimal, NumeroDecimales).FormatoNumero TxtIVA.Text = TmpDT.SUM("ImporteIVA").FormatoNumero TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero TxtRetISR.Text = TmpDT.SUM("ImporteRetISR").FormatoNumero TxtIEPS.Text = TmpDT.SUM("ImporteIEPS").FormatoNumero TxtTotal.Text = (TxtSubTotal.Text.ToDecimal - LblDescuentos.Text.ToDecimal - LblAmortizacion.Text.ToDecimal + TxtIVA.Text.ToDecimal + TxtIEPS.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal - ImpuestosLocales).ToDecimal.FormatoNumero TipoCambio = 1 Moneda = 1 End If Dim FechaParaSurtir As DateTime = MinFecha If TxtFechaOS.Text.Replace(",", "").ToDateTime() > MinFecha Then FechaParaSurtir = TxtFechaOS.Text.Replace(",", "").ToDateTime() End If If Not ObjVentas.UpdateVentas(TxtSubTotal.Text.ToDecimal, LblDescuentos.Text.ToDecimal, TxtIVA.Text.ToDecimal, TxtIEPS.Text.ToDecimal, TxtTotal.Text.ToDecimal, Moneda, TipoCambio, TxtFecha.Text.Trim.ToDate, TxtObsFact.Text.Trim, UsuarioActual.CveEmpresa, CveVenta, Vigencia:=TxtFechaVencimientoCotizacion.Text.Trim.ToDate, CondicionesPago:=If(RBLPago.SelectedValue = "2", 0, 1), PedidoContrato:=TxtPedidoContrato.Text, AtencionA:=TxtAtencionA.Text.Trim.ToUpper(), CveMetodoPago33:=DdlMetodoPago33.SelectedValue.ToEntero(), CveFormaPago33:=DdlFormaPago33.SelectedValue.ToEntero(), TipoDocto:=DdlTipoComprobante.SelectedValue, CveCliente:=CveCliente, CveClienteSucursal:=CveClienteSucursal, OrdenCompra:=TxtOrdenCompra.Text, RetIVA:=TxtRetIVA.Text.ToDecimal, RetISR:=TxtRetISR.Text.ToDecimal, Kilometraje:=TxtKilometraje.Text.ToDecimal, CveUsoCFDi:=DdlUsoCFDI.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), ServicioDomicilio:=TrServicioDomicilio.Visible, CveMedico:=DdlMedico.SelectedValue.ToEntero, CveProcedimiento:=DdlProcedimiento.SelectedValue.ToEntero, FechaParaSurtir:=FechaParaSurtir, Paciente:=TxtPaciente.Text, Episodio:=TxtEpisodio.Text, CveCondicionEntrega:=DdlFormaEntrega.SelectedValue.ToEntero(), FolioRemision:=TxtFolioRemision.Text.Trim, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then OcurrioError = True End If If Not OcurrioError Then If DdlMedico.SelectedValue.ToEntero() > 0 AndAlso TxtFechaOS.Text.Replace(",", "").ToDateTime() > MinFecha Then If Not ObjVentas.UpdateFechaOSVenta(CveVenta, FechaParaSurtir, UsuarioActual.CveEmpresa) Then OcurrioError = True End If End If End If 'Cargo de nueva cuenta el detalle de Ventas (Conceptos) If Not OcurrioError Then Dim index As Integer = 0 For Each Row As DataRow In TmpDT.Rows Dim CveVentaDetalle As Integer = Row("CveVentaDetalle").ToString().ToEntero() If CveVentaDetalle > 0 Then If Not ObjVentas.UpdateVentaDetalleRemision(Row("CveVentaDetalle").ToString().ToEntero(), Row("CvePS").ToString().ToEntero(), Row("Cantidad").ToString().ToDecimal, Row("PU").ToString().ToDecimal(), Row("ImporteIEPS").ToString().ToDecimal(), Row("PorcentajeIEPS").ToString().ToDecimal(), Row("ImporteIVA").ToString().ToDecimal(), Row("PorcentajeIVA").ToString().ToDecimal(), Row("Descuento").ToString().ToDecimal(), Row("Obs").ToString(), UsuarioActual.CveUsuario, CvePromocionDetalle:=Row("CvePromocionDetalle").ToString().ToEntero()) Then OcurrioError = True Exit For End If Else If Not ObjVentas.AddVentaDetalle(CveVenta, Row("CvePS").ToString().ToEntero(), Row("Cantidad").ToString().ToDecimal, Row("CveUM").ToString().ToEntero(), Row("PU").ToString().ToDecimal(If(ChkConvertirDoctoPesos.Checked, TxtTipoCambio.Text.ToDecimal, 1)), Row("ImporteIVA").ToString().ToDecimal, Math.Round((Row("Total").ToString().ToDecimal(If(ChkConvertirDoctoPesos.Checked, TxtTipoCambio.Text.ToDecimal, 1)) * (1 + Row("PorcentajeIVA").ToString().ToDecimal(If(ChkConvertirDoctoPesos.Checked, TxtTipoCambio.Text.ToDecimal, 1)))), 6), Row("Obs").ToString(), Row("Descuento").ToString().ToDecimal(If(ChkConvertirDoctoPesos.Checked, TxtTipoCambio.Text.ToDecimal, 1)), Row("TipoDescuento").ToString().ToEntero(), Row("CveSubProyecto").ToString().ToEntero(), Row("CvePresupuestoIngreso").ToString().ToEntero(), PorcentajeIVA:=Row("PorcentajeIVA").ToString().ToDecimal, IEPS:=Row("ImporteIEPS").ToString().ToDecimal(If(ChkConvertirDoctoPesos.Checked, TxtTipoCambio.Text.ToDecimal, 1)), PorcentajeIEPS:=Row("PorcentajeIEPS").ToString().ToDouble, TiempoEntrega:=Row("TiempoEntrega").ToString(), CveVentaDetallePadre:=Row("CveVentaDetalle").ToString().ToEntero(), CveContratoDetalle:=Row("CveContratoDetalle").ToString().ToEntero(), CvePromocionDetalle:=Row("CvePromocionDetalle").ToString().ToEntero(), ImporteRetIVA:=Row("ImporteRetIVA").ToString().ToDecimal, ImporteRetISR:=Row("ImporteRetISR").ToString().ToDecimal, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString().ToDouble, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString().ToDecimal, CuentaPredial:=Row("CuentaPredial").ToString(), CvePrecioLista:=Row("CvePrecioLista").ToString().ToEntero(), CveActivoFijo:=Row("CveActivoFijo").ToString().ToEntero(), NumTurnos:=Row("NumTurnos").ToString().ToDecimal()) Then OcurrioError = True Exit For Else TmpDT.Rows(index)("CveVentaDetalle") = ObjVentas.CveVentaDetalle End If End If index = index + 1 Next End If 'ELIMINA LOS DETALLES If Not OcurrioError Then Dim DtEliminados As New DataTable If ObjVentas.GetVentaDetalle(CveVenta) Then DtEliminados = ObjVentas.DtResultados.FiltraParametros("", "", {"CveVentaDetalle"}) For Each Dr1 As DataRow In DtEliminados.Rows If TmpDT.FiltraParametros($"CveVentaDetalle = {Dr1("CveVentaDetalle")}").Rows.Count = 0 Then If Not ObjVentas.RemoveVentasDetalle(CveVenta, Dr1("CveVentaDetalle").ToString().ToEntero()) Then OcurrioError = True End If End If Next Else OcurrioError = True End If End If 'OcurrioError = ProcesoPrepolizas(ObjConta, ObjFactura, -1, TmpDT, ObjAC, 1, ObjBancos, ObjVentas) 'Actualizo impuestos locales If Not OcurrioError Then For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then If Not ObjVentas.UpdateVentaImpuestoLocales(CveVenta, gvr.DataKey("CveImpuestoLocal").ToString().ToEntero(), gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDecimal) Then OcurrioError = True End If End If Next End If 'Orden Produccion' If Not OcurrioError Then If UsuarioActual.CveEmpresa.Contiene(126) Then If CveVenta > 0 And DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then If Not ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), CveVenta) Then OcurrioError = True End If End If End If End If If Not OcurrioError Then If RegeneracionPolizas(ObjVentas, ObjConta, ObjBancos) Then OcurrioError = True End If End If If ObjConta.ValidacionesPrePoliza(-1, UsuarioActual, Opcion:=2, CveVenta:=CveVenta) Then If ObjConta.ValorPolizaDescuadre > 0 Then If ObjConta.ValorPolizaDescuadre = 2 Then OcurrioError = True Alert(ObjConta.MensajePolizaDescuadre, TipoMensaje.MsgError) End If End If End If Catch ex As Exception OcurrioError = True OnError("Ocurrió un error al actualizar la remisión", ex) End Try If OcurrioError Then ObjVentas.RollBack() Alert("Ocurrió un error al guardar los cambios. Por favor intente de nuevo.", TipoMensaje.MsgError) Else ObjVentas.Commit() Alert("Los cambios se guardaron correctamente.", TipoMensaje.MsgInformacion, JSBtnAceptar:="BtnRefrescarPagina();") End If ObjVentas.Dispose() ObjConta.Dispose() ObjBancos.Dispose() 'REGENERAR EL PDF If Not OcurrioError Then Try GenerarPDFVenta(CveVenta, AplicaPagare:="1", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) 'Dim CveEmpresaPDF As Integer = UsuarioActual.CveEmpresa 'Dim CveUsuarioPDF As Integer = UsuarioActual.CveUsuario 'Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) 'RegenerarPDF(CveVenta, CveEmpresaPDF, CveUsuarioPDF, strURLHOST) ' 'Dim Hilo As New System.Threading.Thread(Sub() ) 'Hilo.Start() Catch ex As Exception OnError("Ocurrió un error al regenerar el PDF", ex) End Try End If End Sub Private Sub BtnActualizarCuentaTerminal_Click(sender As Object, e As EventArgs) Handles BtnActualizarCuentaTerminal.Click Dim ObjVentas As New ClsVentas ObjVentas.IniciaTransacSQL() Dim TieneError As Boolean = False If Not ObjVentas.UpdateVentaCuentaTerminal(DdlCuentaTerminalModal.SelectedValue.ToEntero(), CveVenta) Then TieneError = True End If If TieneError Then ObjVentas.RollBack() Else ObjVentas.Commit() RegistraScript("$('#ModalCuentaTerminal').modal('hide')") Alert("Se asignó correctamente la cuenta terminal", JSBtnAceptar:="BtnRefrescarPagina();") End If ObjVentas.Dispose() End Sub #End Region #Region "CODIGO DE BARRAS" Protected Sub ChkClasificacion_CheckedChanged(sender As Object, e As EventArgs) If ChkClasificacion.Checked Then DIVClasificacion.Visible = False DIVClasif.Visible = False DIVCodBarras.Visible = True DIVCod.Visible = True TxtCodigoBarras.Focus() Else DIVClasificacion.Visible = True DIVClasif.Visible = True DIVCodBarras.Visible = False DIVCod.Visible = False End If End Sub Protected Sub CargarCodigo() Dim TipoVenta As Integer = 0 Dim drSucursal As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto = {0}", If(DdlSubProyectoDatos.SelectedValue = "", "-1", DdlSubProyectoDatos.SelectedValue))) If drSucursal IsNot Nothing Then TipoVenta = drSucursal("TipoVenta").ToString().ToEntero() If TipoVenta = 1 Then ChkClasificacion.Checked = True DIVClasif.Visible = False DIVClasificacion.Visible = False DIVCodBarras.Visible = True DIVCod.Visible = True TxtCodigoBarras.Focus() 'RegistraScript(String.Format("$( document ).ready(function() {{$('#{0}').focus()}});", TxtCodigoBarras.ClientID), "cb") Else ChkClasificacion.Visible = False End If End Sub Protected Sub BtnCodigoBarras_Click(sender As Object, e As EventArgs) Handles BtnCodigoBarrasSerie.Click Dim DrProducto As DataRow = Nothing If TxtCantidad.Text.Trim.ToDouble <= 0 Then TxtCantidad.Text = "1" Dim CvePS As Integer 'LIMPIA "PROPIEDAD" HdnCvePS.Value = "" 'BUSCA POR SERIE E IGNORA CODIGO DE BARRAS (LIMPIA) If TxtCodigoSerie.Text.Trim <> "" Then Dim Serie As String = TxtCodigoSerie.Text.Trim().ToUpper() Dim Objinventarios As New ClsInventarios Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Dim Existencia As Decimal = Objinventarios.GetExistenciasPS(-1, -1, UsuarioActual.CveEmpresa, -1, Serie:=Serie, ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), BuscarEnTabla:=BuscarEnTabla) Dim ExistenciaActual As Decimal = DtInv.SUMD("Cantidad", String.Format("Serie = '{0}'", Serie)) CvePS = Objinventarios.CvePS Objinventarios.Dispose() If Existencia - ExistenciaActual > 0 Then If CvePS > 0 Then DrProducto = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrProducto IsNot Nothing Then HdnCvePS.Value = CvePS.ToString() TxtCantidad.Text = "1" Else Alert($"No se encontró un producto con la serie: {Serie}. Por favor verifique y vuelva a intentar ", TipoMensaje.MsgAdvertencia) End If End If Else Alert(String.Format("No hay existencia suficiente del producto con la Serie: {0}. Por favor rectifique y vuelva a intentar", Serie), TipoMensaje.MsgAdvertencia) TxtCodigoSerie.Focus() RegistraScript($"$('#{TxtCodigoSerie.ClientID}').select();") Exit Sub End If End If 'BUSCA POR CODIGO DE BARRAS If Not CvePS > 0 AndAlso TxtCodigoBarras.Text.Trim() <> "" Then DrProducto = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa).FiltroPrimero($"CodigoBarras = '{TxtCodigoBarras.Text.Trim()}'") If DrProducto IsNot Nothing Then If DrProducto("Inv_CveMetodoInventario").ToString() = "5" OrElse DrProducto("AplicaSerie").ToString = "True" Then 'si es serie TxtCodigoSerie.Focus() Exit Sub Else CvePS = DrProducto("CvePS").ToString.ToEntero() HdnCvePS.Value = CvePS.ToString() End If Else TxtCodigoBarras.Focus() RegistraScript($"$('#{TxtCodigoBarras.ClientID}').select();") Alert($"No se encontró un producto con el código de barras: {Serie}. Por favor verifique y vuelva a intentar ", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If DrProducto Is Nothing Then Alert("El producto no fue encontrado", TipoMensaje.MsgAdvertencia) End If 'CARGA VALORES DEL PS DdlPSIndexChange(CvePS, DdlPS) If Not TxtCantidad.Text.ToDouble > 0 Then TxtCantidad.Text = "1" TxtPrecio.Focus() TxtPrecio.Text = "11" RegistraScript($"$('#{TxtPrecio.ClientID}').select();") UpPS.Update() 'LO DE ABAJO YA NO SE USA - ES VIEJO Exit Sub 'PARA AGREGAR PS DIRECTO If DrProducto IsNot Nothing Then TxtObsPS.Text = "" If UsuarioActual.CveEmpresa = 80 Then 'BUSCA EL PRECIO DE LA SUCURSAL Dim ObjPS As New ClsProductosServicios If ObjPS.GetPSSucursales(DrProducto("CvePS").ToString().ToEntero(), UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero()) Then Dim dtt As DataTable = ObjPS.DtResultados Dim drPrecio As DataRow = dtt.FiltroPrimero("") If drPrecio IsNot Nothing And TxtPrecio.Enabled = False Then TxtPrecio.Text = drPrecio("Importe").ToString().ToDouble.ToString("N4") End If dtt.Dispose() End If ObjPS.Dispose() 'SI NO CARGA PRECIO DE LA SUCURSAL TOMA EL DEL PS If TxtPrecio.Text.ToDouble <= 0 Then TxtPrecio.Text = DrProducto("Precio").ToString().ToDouble.ToString("N4") End If HdnPS.Value = DrProducto("PS").ToString() HdnCodigoPS.Value = DrProducto("PSCodigo").ToString() HdnTipoPS.Value = DrProducto("CveTipoPS").ToString() HdnTipoInv.Value = DrProducto("Inv_CveMetodoInventario").ToString() HdnAplicaIEPS.Value = DrProducto("AplicaIEPS").ToString() HdnPorcentajeIEPS.Value = DrProducto("IEPSPorcentaje").ToString() HdnIVAPS.Value = If(DrProducto("IVA").ToString() = "-1", ViewState("IVA"), DrProducto("IVA").ToString()).ToString() HdnIVARetAPS.Value = DrProducto("RetIVA").ToString() HdnCodigo.Value = DrProducto("Codigo").ToString() If ValidaAgregarPS(TxtCantidad.Text.ToDecimal(), DrProducto("CvePS").ToString().ToEntero(), DrProducto("CveUM").ToString().ToEntero(), TxtPrecio.Text.Trim.ToDouble, DrProducto("CveTipoPS").ToString().ToEntero(), DdlClasificacion.SelectedValue.ToEntero(), DdlSubProyectoDatos.SelectedValue.ToEntero(), Nothing) Then If UsuarioActual.Empresa.Funcionalidad(507) = DdlPS.SelectedValue Then CvePSAmortizacion = DdlPS.SelectedValue.ToEntero().ToEntero() End If AgregarProductoServicio(TxtCantidad.Text.Trim.ToDecimal, DrProducto("CveUM").ToString().ToEntero(), DrProducto("UnidadMedida").ToString(), DrProducto("CveClasificacion").ToString().ToEntero(), DrProducto("Clasificacion").ToString(), DrProducto("CvePS").ToString().ToEntero(), DrProducto("PS").ToString(), TxtObsPS.Text.Trim, TxtPrecio.Text.Trim.ToDecimal, 0, DdlProyecto.SelectedValue.ToEntero(), DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text) 'AddPS(TxtCantidad.Text.Trim.ToDouble, DrProducto("CveUM").ToString().ToEntero(), DrProducto("UnidadMedida").ToString(), DrProducto("CveClasificacion").ToString().ToEntero(), DrProducto("Clasificacion").ToString(), ' DrProducto("CvePS").ToString().ToEntero(), DrProducto("PS").ToString(), TxtObsPS.Text.Trim, TxtPrecio.Text.Trim.ToDouble, HdnIVAPS.Value.ToDouble, 0, 0, ' -1, -1, True, DrProducto("Codigo").ToString(), DdlProyecto.SelectedValue.ToEntero(), ' DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text, DrProducto("CveTipoPS").ToString().ToEntero(), DrProducto("Inv_CveMetodoInventario").ToString().ToEntero(), Serie:=Serie, CodigoPS:=DrProducto("PSCodigo").ToString()) LimpiaAgregar() End If End If Else Alert("El producto no fue encontrado.", TipoMensaje.MsgAdvertencia) End If UpPS.Update() End Sub Private Sub DdlMoneda_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlMoneda.SelectedIndexChanged CambiaMoneda() End Sub Private Sub CambiaMoneda() TrConversionTipoCambio.Visible = False TrConversionDolares.Visible = False Select Case DdlMoneda.SelectedValue Case "1" TxtTipoCambio.Text = "1" TxtTipoCambioDlls.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString() TrConversionDolares.Visible = True ChkConvertirDolares.Enabled = Not UsuarioActual.TienePermisoProceso(324) Case "2" TxtTipoCambioDlls.Text = "1" If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate.AddDays(-1)).ToString() Else TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString() End If TrConversionTipoCambio.Visible = True ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) Case Else If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate.AddDays(-1)).ToString() Else TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString() End If TrConversionTipoCambio.Visible = True End Select If UsuarioActual.CveEmpresa.Contiene(13, 83) Then TxtTipoCambio.Enabled = True TxtTipoCambioDlls.Enabled = True TxtTipoCambio.ReadOnly = False TxtTipoCambioDlls.ReadOnly = False End If UpPS.Update() If CveCliente > 0 Then CargaAnticipos(CveCliente) End If 'If CveVenta <= 0 Then ' CalculaLineasAdicionales() 'End If End Sub Private Sub btnBuscarPrecio_Click(sender As Object, e As EventArgs) Handles btnBuscarPrecio.Click Dim Codigo, CodigoBarras As String Dim CvePS As Integer CvePS = If(DdlBPPS.SelectedValue.ToEntero() > 0, DdlBPPS.SelectedValue.ToEntero(), -1) Codigo = If(TxtBPCodigo.Text.Trim.Length = 0, "", TxtBPCodigo.Text) CodigoBarras = If(TxtBPCodigoBarras.Text.Trim.Length = 0, "", TxtBPCodigoBarras.Text) Dim ObjPS As New ClsProductosServicios If ObjPS.GetPSSucursalesALL(DdlPS.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), Codigo:=Codigo, CodigoBarras:=CodigoBarras) Then GVBuscarPrecio.DataSource = ObjPS.DtResultados Else GVBuscarPrecio.DataSource = Nothing End If ObjPS.Dispose() GVBuscarPrecio.DataBind() UpBuscarPrecio.Update() End Sub #End Region #Region " CONDICIONES DE PAGO " Private Sub InicializaCondicionesPago() DtPagos = New DataTable DtPagos.Columns.Add("CveTipoMovimiento", GetType(String)) DtPagos.Columns.Add("TipoMovimiento", GetType(String)) DtPagos.Columns.Add("CveCuenta", GetType(String)) DtPagos.Columns.Add("Cuenta", GetType(String)) DtPagos.Columns.Add("Folio", GetType(String)) DtPagos.Columns.Add("Importe", GetType(Decimal)) DtPagos.Columns.Add("Observaciones", GetType(String)) DtPagos.Columns.Add("Tipo", GetType(String)) DtPagos.Columns.Add("CveMetodoPago", GetType(Integer)) DtPagos.Columns.Add("MesesSinIntereses", GetType(Integer)) CargaCuentas() End Sub Private Sub LimpiaContado() CargaCuentas() DdlCuentaEfectivo.SelectedValueExist(-1) TxtImporteEfectivo.Text = "0.00" TxtImporteCredito.Text = "0.00" TxtImporteDebito.Text = "0.00" TxtImporteCheque.Text = "0.00" TxtImporteTransferencia.Text = "0.00" TxtImporteContado.Text = "0.00" TxtImporteOtrosContado.Text = "0.00" End Sub Private Sub LimpiaEscondeContado() 'LIMPIA DivContado.Visible = False DivTerminal.Visible = False If DtPagos IsNot Nothing Then DtPagos.Rows.Clear() CargaGridContado() Select Case RBLPago.SelectedValue.ToEntero() Case 1 'CREDITO TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString 'SI ES CREDITO EL METODO DE PAGO DEBE SER PPD If UsuarioActual.Empresa.Funcionalidad(589) = "1" Then DdlMetodoPago33.SelectedValueExist("3") DdlMetodoPago33.Enabled = UsuarioActual.TienePermisoProceso(408) If Me.CveVenta > 0 AndAlso (Not Me.EsCreaApartirDe) AndAlso (Not Me.ModalidadEdicion) AndAlso Me.CveMetodoPago33Venta > 0 Then DdlMetodoPago33.SelectedValueExist(Me.CveMetodoPago33Venta) End If CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) 'SI ES VENTA NUEVA, ASIGNA LA DEL CLIENTE If (Me.CveVenta <= 0 OrElse Me.EsCreaApartirDe) AndAlso Me.CveFormaPago33Cliente > 0 Then DdlFormaPago33.SelectedValueExist(Me.CveFormaPago33Cliente) End If 'SI ES VENTA EXISTENTE, ASIGNA LA GUARDADA If Me.CveVenta > 0 AndAlso (Not Me.EsCreaApartirDe) AndAlso Me.CveFormaPago33Venta > 0 Then DdlFormaPago33.SelectedValueExist(Me.CveFormaPago33Venta) End If If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) Then DdlFormaPago33.Enabled = False DdlFormaPago33.SelectedValueExist("20") End If End If Case 2 'CONTADO If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Rem") OrElse (UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 And DdlTipoComprobante.SelectedValue = "Cot") OrElse (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso Not UsuarioActual.CveEmpresa.Contiene(119, 158)) Then DivContado.Visible = True If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then DivTransferencia.Visible = False End If TxtImporteContado.Text = TxtTotal.Text 'SI ES MODALIDAD COBRANZA, NO MOSTRAR If (UsuarioActual.Empresa.Funcionalidad(109) = "1") Then DivContado.Visible = UsuarioActual.TienePermisoProceso(375) End If End If TxtFechaPago.Text = NowADS().ToShortDateString 'SI ES CONTADO EL METODO DE PAGO DEBE SER PUE If UsuarioActual.Empresa.Funcionalidad(589) = "1" Then DdlMetodoPago33.SelectedValueExist("1") DdlMetodoPago33.Enabled = UsuarioActual.TienePermisoProceso(408) If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) Then DdlFormaPago33.Enabled = True End If CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) 'SI ES VENTA NUEVA, ASIGNA LA DEL CLIENTE If (Me.CveVenta <= 0 OrElse Me.EsCreaApartirDe) AndAlso Me.CveFormaPago33Cliente > 0 Then DdlFormaPago33.SelectedValueExist(Me.CveFormaPago33Cliente) End If 'SI ES VENTA EXISTENTE, ASIGNA LA GUARDADA If Me.CveVenta > 0 AndAlso (Not Me.EsCreaApartirDe) AndAlso (Not Me.ModalidadEdicion) AndAlso Me.CveFormaPago33Venta > 0 Then DdlFormaPago33.SelectedValueExist(Me.CveFormaPago33Venta) End If End If If NuevaFactura = 1 Then 'SI ES REFACTURACION CON PAGOS NO PERMITIR AGREGAR PAGO If ObjFacturaNC.Pagado > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(586).ToEntero() = 2 Then BtnAgregarPago.Visible = False End If End If Case 3 ' TERMINAL DivTerminal.Visible = True TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString End Select LimpiaContado() LimpiaProntoPago() 'NO PERMITE EDITAR FECHA DEL PAGO If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not UsuarioActual.TienePermisoProceso(260) Then TxtFechaPago.Enabled = False imgCalendario.Visible = False End If DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) UpContado.Update() UPCondicionesPago.Update() End Sub Private Sub LimpiaProntoPago() If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If RBLPago.SelectedValue = "2" Then GvPS.Columns(23).Visible = True thProntoPago.Visible = True thProntoPago2.Visible = True Else GvPS.Columns(23).Visible = False thProntoPago.Visible = False thProntoPago2.Visible = False End If CalculaTotalesVenta() End If End Sub Private Sub CargaCuentas() DdlCuentaEfectivo.Items.Clear() DdlCuentaTarjetaCredito.Items.Clear() DdlCuentaTarjetaDebito.Items.Clear() DdlCuentaCheque.Items.Clear() DdlCuentaTransferencia.Items.Clear() Dim DtCC As DataTable = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa) 'MOSTRAR SOLO CUENTAS DE CONTADO EN BDH If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then DdlCuentaEfectivo.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 0", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) DdlCuentaCheque.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 0", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) Else DdlCuentaEfectivo.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) DdlCuentaCheque.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) End If DdlCuentaTarjetaCredito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) DdlCuentaTarjetaDebito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) 'If UsuarioActual.Empresa.Funcionalidad(558) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(531) = "1" Then ' DdlCuentaTarjetaCredito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) ' DdlCuentaTarjetaDebito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1 AND TieneTerminal = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) 'Else ' DdlCuentaTarjetaCredito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND (CveTipoCuenta <> 1 OR TieneTerminal = 1)", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) ' DdlCuentaTarjetaDebito.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND (CveTipoCuenta <> 1 OR TieneTerminal = 1)", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) 'End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.CveEmpresa.Contiene(195, 197) Then DdlCuentaTransferencia.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) Else DdlCuentaTransferencia.DataSource = DtCC.FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta <> 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) End If DtCC.Dispose() DdlCuentaEfectivo.DataBind() 'DdlCuentaEfectivo.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlCuentaTarjetaCredito.DataBind() 'DdlCuentaTarjetaCredito.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlCuentaTarjetaDebito.DataBind() 'DdlCuentaTarjetaDebito.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlCuentaCheque.DataBind() 'DdlCuentaCheque.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlCuentaTransferencia.DataBind() 'DdlCuentaTransferencia.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Protected Sub DdlOtroFormaPago_SelectedIndexChanged(sender As Object, e As EventArgs) DivContadoOtrosCuenta.Attributes.Add("class", "col-md-6") DivMesesSinIntereses2.Visible = False Select Case DdlOtroFormaPago.SelectedValue.ToEntero() Case 1 DivContadoOtrosCuenta.Attributes.Add("class", "col-md-3") DivMesesSinIntereses2.Visible = True DdlCuentaOtrosContado.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta <> 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) Exit Select Case 2 DdlCuentaOtrosContado.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta <> 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) Exit Select Case 3 DdlCuentaOtrosContado.DataSource = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveMoneda = {0} AND CveTipoCuenta = 1", If(DdlMoneda.SelectedValue.ToEntero() <= 0, 1, DdlMoneda.SelectedValue.ToEntero()))) Exit Select Case -1 DdlCuentaOtrosContado.DataSource = Nothing Exit Select End Select DdlCuentaOtrosContado.DataBind() UpContado.Update() End Sub 'DdlOtroFormaPago Private Function CargaFolioContado(CveCuenta As Integer, TipoTransaccion As Integer) As Long Dim Folio As Long If CveCuenta > 0 And TipoTransaccion > 0 Then Dim Banco As New ClsBancos Folio = Banco.GetNextFolio(CveCuenta, TipoTransaccion) Banco.Dispose() Else Folio = -1 End If Return Folio End Function Private Sub CargaGridContado() 'If DtPagos IsNot Nothing Then ' HdnPagadoContado.Value = DtPagos.SUMD("Importe").ToString() 'Else ' HdnPagadoContado.Value = "0" 'End If GvPagos.DataSource = DtPagos GvPagos.DataBind() End Sub Protected Sub GvPagos_RowDeleting(sender As Object, e As GridViewDeleteEventArgs) Handles GvPagos.RowDeleting DtPagos.Rows.RemoveAt(e.RowIndex) 'JJMQ 20160506: Validacion para no pagar de mas a peticion de I.P. Dim abonado As Decimal = DtPagos.SUMD("Importe") Dim saldo As Decimal = TxtTotal.Text.Replace(",", "").ToDecimal - abonado 'CVImporteContado.ValueToCompare = (saldo.FormatoNumero(2).ToDouble).ToString() LblDescuentoAdicional.Text = "0.00" CalculaTotalesVenta() CargaGridContado() UpContado.Update() End Sub Private Sub BtnAgregarPago_Click(sender As Object, e As EventArgs) Handles BtnAgregarPago.Click If NuevaFactura = 1 Then 'SI ES REFACTURACION CON PAGOS NO PERMITIR AGREGAR PAGO If ObjFacturaNC.Pagado > 0 AndAlso UsuarioActual.Empresa.Funcionalidad(586).ToEntero() = 2 Then Alert("No se puede agregar un pago a una refacturación con pagos", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Dim abonado, saldo As Double Dim total As Decimal = TxtImporteEfectivo.Text.ToDecimal + TxtImporteCredito.Text.ToDecimal + TxtImporteDebito.Text.ToDecimal + TxtImporteCheque.Text.ToDecimal + TxtImporteTransferencia.Text.ToDecimal DtPagos = Nothing DtPagos = New DataTable Dim Cambio As Decimal = TxtCambio.Text.ToDecimal 'SI ES FALTANTE NO DEBE CONSIDERARSE If HdnCambioFaltante.Value = "2" Then Cambio = 0 End If DtPagos.Columns.Add("CveTipoMovimiento", GetType(String)) DtPagos.Columns.Add("TipoMovimiento", GetType(String)) DtPagos.Columns.Add("CveCuenta", GetType(String)) DtPagos.Columns.Add("Cuenta", GetType(String)) DtPagos.Columns.Add("Folio", GetType(String)) DtPagos.Columns.Add("Importe", GetType(Decimal)) DtPagos.Columns.Add("Observaciones", GetType(String)) DtPagos.Columns.Add("Tipo", GetType(String)) DtPagos.Columns.Add("CveMetodoPago", GetType(Integer)) DtPagos.Columns.Add("MesesSinIntereses", GetType(Integer)) If total <= 0 Then Alert("No se ha ingresado importe", TipoMensaje.MsgAdvertencia) : Exit Sub If Cambio > 0 And TxtImporteEfectivo.Text.ToDecimal < Cambio Then Alert("Debe haber un pago en efectivo y ser mayor que el cambio. Si no, ser pago exacto.", TipoMensaje.MsgAdvertencia) CargaGridContado() Exit Sub End If If (DtPagos.SUM("Importe").ToString().ToDecimal + total - Cambio) > TxtTotal.Text.ToDecimal Then Alert("El importe de los pagos no puede exceder el importe de la factura. Por favor rectifique.", TipoMensaje.MsgAdvertencia) CargaGridContado() Exit Sub End If 'Pago en Efectivo If TxtImporteEfectivo.Text.ToDecimal > 0 Then If DdlCuentaEfectivo.Items.Count > 0 Then Dim DrEfectivo As DataRow = DtPagos.NewRow DrEfectivo("CveTipoMovimiento") = 13 DrEfectivo("TipoMovimiento") = "Pago en Efectivo" DrEfectivo("CveCuenta") = DdlCuentaEfectivo.SelectedValue DrEfectivo("Cuenta") = DdlCuentaEfectivo.SelectedItem.Text DrEfectivo("Importe") = TxtImporteEfectivo.Text.ToDecimal - Cambio DrEfectivo("Folio") = CargaFolioContado(DdlCuentaEfectivo.SelectedValue.ToEntero(), 6) DrEfectivo("Observaciones") = "" DrEfectivo("Tipo") = "Caja Chica" DrEfectivo("CveMetodoPago") = 1 DrEfectivo("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrEfectivo) Else Alert("Debe seleccionar una cuenta válida de caja", TipoMensaje.MsgAdvertencia) End If End If 'Pago Tarjeta Credito If TxtImporteCredito.Text.ToDecimal > 0 Then If DdlCuentaTarjetaCredito.Items.Count > 0 Then Dim DrCredito As DataRow = DtPagos.NewRow DrCredito("CveTipoMovimiento") = 12 DrCredito("TipoMovimiento") = "Tarjeta de Crédito" DrCredito("CveCuenta") = DdlCuentaTarjetaCredito.SelectedValue DrCredito("Cuenta") = DdlCuentaTarjetaCredito.SelectedItem.Text DrCredito("Importe") = TxtImporteCredito.Text DrCredito("Folio") = CargaFolioContado(DdlCuentaTarjetaCredito.SelectedValue.ToEntero(), 12) DrCredito("Observaciones") = "" DrCredito("Tipo") = "Tarjeta de Crédito" DrCredito("CveMetodoPago") = 4 If UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 Then DrCredito("MesesSinIntereses") = DDlMesesSinIntereses.SelectedValue.ToEntero() Else DrCredito("MesesSinIntereses") = -1 End If DtPagos.Rows.Add(DrCredito) Else Alert("Debe seleccionar una cuenta válida de crédito", TipoMensaje.MsgAdvertencia) End If End If 'Pago Tarjeta Debito If TxtImporteDebito.Text.ToDecimal > 0 Then If DdlCuentaTarjetaDebito.Items.Count > 0 Then Dim DrDebito As DataRow = DtPagos.NewRow DrDebito("CveTipoMovimiento") = 11 DrDebito("TipoMovimiento") = "Tarjeta de Debito" DrDebito("CveCuenta") = DdlCuentaTarjetaDebito.SelectedValue DrDebito("Cuenta") = DdlCuentaTarjetaDebito.SelectedItem.Text DrDebito("Importe") = TxtImporteDebito.Text DrDebito("Folio") = CargaFolioContado(DdlCuentaTarjetaDebito.SelectedValue.ToEntero(), 11) DrDebito("Observaciones") = "" DrDebito("Tipo") = "Tarjeta de Débito" DrDebito("CveMetodoPago") = 18 DrDebito("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrDebito) Else Alert("Debe seleccionar una cuenta válida de débito", TipoMensaje.MsgAdvertencia) End If End If 'Pago Tarjeta Debito If TxtImporteCheque.Text.ToDecimal > 0 Then If DdlCuentaCheque.Items.Count > 0 Then Dim DrCheque As DataRow = DtPagos.NewRow DrCheque("CveTipoMovimiento") = 3 DrCheque("TipoMovimiento") = "Cheque" DrCheque("CveCuenta") = DdlCuentaCheque.SelectedValue DrCheque("Cuenta") = DdlCuentaCheque.SelectedItem.Text DrCheque("Importe") = TxtImporteCheque.Text DrCheque("Folio") = CargaFolioContado(DdlCuentaCheque.SelectedValue.ToEntero(), 3) DrCheque("Observaciones") = "" DrCheque("Tipo") = "Cheque" DrCheque("CveMetodoPago") = 2 DrCheque("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrCheque) Else Alert("Debe seleccionar una cuenta de cheque", TipoMensaje.MsgAdvertencia) End If End If 'Pago Transferencia If TxtImporteTransferencia.Text.ToDecimal > 0 Then If DdlCuentaTransferencia.Items.Count > 0 Then Dim DrCheque As DataRow = DtPagos.NewRow DrCheque("CveTipoMovimiento") = 8 DrCheque("TipoMovimiento") = "Transferencia" DrCheque("CveCuenta") = DdlCuentaTransferencia.SelectedValue DrCheque("Cuenta") = DdlCuentaTransferencia.SelectedItem.Text DrCheque("Importe") = TxtImporteTransferencia.Text DrCheque("Folio") = CargaFolioContado(DdlCuentaTransferencia.SelectedValue.ToEntero(), 8) DrCheque("Observaciones") = "" DrCheque("Tipo") = "Transferencia" DrCheque("CveMetodoPago") = 3 DrCheque("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrCheque) Else Alert("Debe seleccionar una cuenta de transferencia", TipoMensaje.MsgAdvertencia) End If End If 'Otro Metodo de pago Select Case DdlOtroFormaPago.SelectedValue.ToEntero() Case -1 Exit Select Case 1 If TxtImporteOtrosContado.Text.ToDecimal > 0 Then If DdlCuentaOtrosContado.Items.Count > 0 Then Dim DrCredito As DataRow = DtPagos.NewRow DrCredito("CveTipoMovimiento") = 12 DrCredito("TipoMovimiento") = "Tarjeta de Crédito" DrCredito("CveCuenta") = DdlCuentaOtrosContado.SelectedValue DrCredito("Cuenta") = DdlCuentaOtrosContado.SelectedItem.Text DrCredito("Importe") = TxtImporteOtrosContado.Text DrCredito("Folio") = CargaFolioContado(DdlCuentaOtrosContado.SelectedValue.ToEntero(), 12) DrCredito("Observaciones") = "" DrCredito("Tipo") = "Tarjeta de Crédito" DrCredito("CveMetodoPago") = 4 If UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 Then DrCredito("MesesSinIntereses") = DdlMesesSinIntereses2.SelectedValue.ToEntero() Else DrCredito("MesesSinIntereses") = -1 End If DtPagos.Rows.Add(DrCredito) Else Alert("Debe seleccionar una cuenta válida de crédito( Otra condición de pago)", TipoMensaje.MsgAdvertencia) End If End If Exit Select Case 2 If TxtImporteOtrosContado.Text.ToDecimal > 0 Then If DdlCuentaOtrosContado.Items.Count > 0 Then Dim DrDebito As DataRow = DtPagos.NewRow DrDebito("CveTipoMovimiento") = 11 DrDebito("TipoMovimiento") = "Tarjeta de Debito" DrDebito("CveCuenta") = DdlCuentaOtrosContado.SelectedValue DrDebito("Cuenta") = DdlCuentaOtrosContado.SelectedItem.Text DrDebito("Importe") = TxtImporteOtrosContado.Text DrDebito("Folio") = CargaFolioContado(DdlCuentaOtrosContado.SelectedValue.ToEntero(), 11) DrDebito("Observaciones") = "" DrDebito("Tipo") = "Tarjeta de Débito" DrDebito("CveMetodoPago") = 18 DrDebito("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrDebito) Else Alert("Debe seleccionar una cuenta válida de débito( Otra condición de pago)", TipoMensaje.MsgAdvertencia) End If End If Exit Select Case 3 If TxtImporteOtrosContado.Text.ToDecimal > 0 Then If DdlCuentaOtrosContado.Items.Count > 0 Then Dim DrCheque As DataRow = DtPagos.NewRow DrCheque("CveTipoMovimiento") = 3 DrCheque("TipoMovimiento") = "Cheque" DrCheque("CveCuenta") = DdlCuentaOtrosContado.SelectedValue DrCheque("Cuenta") = DdlCuentaOtrosContado.SelectedItem.Text DrCheque("Importe") = TxtImporteOtrosContado.Text DrCheque("Folio") = CargaFolioContado(DdlCuentaOtrosContado.SelectedValue.ToEntero(), 3) DrCheque("Observaciones") = "" DrCheque("Tipo") = "Cheque" DrCheque("CveMetodoPago") = 2 DrCheque("MesesSinIntereses") = -1 DtPagos.Rows.Add(DrCheque) Else Alert("Debe seleccionar una cuenta de cheque( Otra condición de pago)", TipoMensaje.MsgAdvertencia) End If End If Exit Select End Select 'JJMQ 20160506: Validacion para no pagar de mas a peticion de I.P. abonado = DtPagos.SUM("Importe") saldo = TxtTotal.Text.Replace(",", "").ToDouble - abonado 'CVImporteContado.ValueToCompare = (saldo.FormatoNumero(2).ToDouble).ToString() If (Not UsuarioActual.CveEmpresa.Contiene(119, 158)) AndAlso Me.CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue = "Cot" AndAlso Not ValidaPagosContado(MostrarAlertas:=False) Then VerificarBtnFacturarCotizacion(DdlVendedor.SelectedValue.ToEntero(), MostrarGenerarRemision:=False) UpFacturar.Update() End If 'TOMA EL VALOR DEL PAGO MAS ALTO QUE SE APLIQUE If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DtPagos IsNot Nothing Then Dim RowPagoMasAlto As DataRow = DtPagos.FiltraParametros("", Orderby:="Importe DESC").FiltroPrimero("") If RowPagoMasAlto IsNot Nothing Then DdlFormaPago33.SelectedValueExist(RowPagoMasAlto("CveMetodoPago")) End If End If Dim VieneDeCotizacion As Boolean = False If DtCotizacionesPS IsNot Nothing AndAlso DtCotizacionesPS.Rows.Count > 0 Then VieneDeCotizacion = True End If If UsuarioActual.CveRol = 1 AndAlso DdlTipoComprobante.SelectedValue = "Ing" AndAlso (Not VieneDeCotizacion) AndAlso UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DtPagos IsNot Nothing AndAlso TbDescuentosAdicionales.Visible Then If TmpDT.SUMD("Descuento") > 0 AndAlso DtPagos.SUMD("Importe", "MesesSinIntereses <=0") = TxtTotal.Text.ToDecimal() Then Dim TotalDescuento As Decimal = TmpDT.SUMD("Total", "Descuento > 0") * 0.05D Dim RowDescuentos As DataRow() = TmpDT.Select("Descuento > 0") If RowDescuentos IsNot Nothing Then LblDescuentoAdicional.Text = TotalDescuento.FormatoNumero(2) 'Dim Row As DataRow = RowDescuentos(0) 'Row("Descuento") = Row("Descuento").ToString().ToDecimal() + TotalDescuento 'Dim TotalCalculableImpuestos As Decimal = (Row("Cantidad").ToString().ToDecimal() * Row("PU").ToString().ToDecimal()) - Row("Descuento").ToString().ToDecimal() 'Row("ImporteIVA") = (TotalCalculableImpuestos * Row("PorcentajeIVA").ToString().ToDecimal()).RoundSQL(2) 'BtnAgregarPago.Enabled = False CalculaTotalesVenta() Dim RowPago As DataRow = DtPagos.Rows(0) RowPago("Importe") = LblTotalAPagarAdicional.Text.ToDecimal() End If Else LblDescuentoAdicional.Text = "0.00" End If UpPS.Update() End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0 Then Dim ImporteMaximo As Decimal = DtPagos.MAX("Importe").ToDecimal() Dim RowPagoMaximo As DataRow = DtPagos.FiltroPrimero($"Importe >= {ImporteMaximo}") If RowPagoMaximo IsNot Nothing Then Dim CveTipoTransaccion As Integer = RowPagoMaximo("CveTipoMovimiento").ToString().ToEntero() If CveTipoTransaccion > 0 Then Dim CveFormaPago = GlobalDTTipoTransacciones.FiltroPrimeroValor("CveFormaPago", RowFilter:=$"CveTipoTransaccion = {CveTipoTransaccion} AND Estatus = 1") DdlFormaPago33.SelectedValueExist(CveFormaPago) End If End If End If CargaGridContado() UpContado.Update() UPCondicionesPago.Update() End Sub Private Sub RBLPago_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RBLPago.SelectedIndexChanged LimpiaEscondeContado() Dim EjecutaRecalculaPrecios As Boolean = False If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then EjecutaRecalculaPrecios = True If UsuarioActual.CveEmpresa = 189 Then EjecutaRecalculaPrecios = False If EjecutaRecalculaPrecios Then RecalculaPrecios(False) End Sub Private Function ValidaPagosContado(Optional MostrarAlertas As Boolean = True, Optional TipoDoctoViejo As String = "") As Boolean Dim Retorno As Boolean = False Dim AmortizacionNC As Decimal = 0 'SI ES AMORTIZACION POR NOTA DE CREDITO DEBE SUMAR LA TOTALIDAD PARA COMPARAR EL PAGO If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant") AndAlso DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("2", "4") Then For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(3, 12, 66) Then AmortizacionNC += gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal End If Next End If Dim TienePagos As Boolean = ((Not (DtPagos Is Nothing OrElse DtPagos.Rows.Count = 0)) AndAlso (DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0)) OrElse AmortizacionNC > 0 'SI LA VENTA ES NUEVA VALIDAR TAMBIEN LOS PAGOS DE CONTADO If (UsuarioActual.Empresa.Funcionalidad(558) = "1" OrElse UsuarioActual.CveEmpresa = 197) AndAlso ((CveVenta <= 0 OrElse EsCreaApartirDe OrElse TipoDoctoViejo = "Cot") AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant")) Then If Not PermiteCredito AndAlso Not TienePagos AndAlso TxtTotal.Text.ToDecimal > 0 Then If MostrarAlertas Then Alert("Es necesario especificar un pago.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If If (Not PermiteCredito OrElse RBLPago.SelectedValue = "2") AndAlso TienePagos AndAlso TxtTotal.Text.ToDecimal > 0 Then Dim TotalPago As Decimal = DtPagos.SUM("Importe") + AmortizacionNC If TotalPago <> (TxtTotal.Text.ToDecimal - LblDescuentoAdicional.Text.ToDecimal()) Then If MostrarAlertas Then Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If End If End If 'VALIDA PAGOS EN FACTURAS DE ING,ANT NUEVAS O FACTURACION DE REM O COTIZACIONES If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso RBLPago.SelectedValue = "2" AndAlso ((CveVenta <= 0 AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant")) OrElse TipoDoctoViejo.Contiene("Rem", "Cot")) Then Dim TotalPagadoGarantia As Decimal = 0 If TxtTotal.Text.ToDecimal = 0.01 AndAlso Me.EsGarantia = True Then TotalPagadoGarantia = 0.01D TienePagos = True ViewState("SaldoVenta") = SaldoVenta - TotalPagadoGarantia End If If Not TienePagos AndAlso TxtTotal.Text.ToDecimal > 0 Then If MostrarAlertas Then Alert("Es necesario especificar un pago.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If If TienePagos Then Dim TotalPagoContado As Decimal = If(DtPagos IsNot Nothing, DtPagos.SUM("Importe"), 0) + AmortizacionNC Dim TotalProntoPago As Decimal = LblProntoPago.Text.ToDecimal() If UsuarioActual.Empresa.Funcionalidad(572) = "1" Then Dim TotalRNC As Decimal = If((ListaNCDesc IsNot Nothing AndAlso ListaNCDesc.Count > 0) OrElse (ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0), LblDescuentosRNC.Text.Trim().ToDecimal(), 0) Dim ImporteTotal As Decimal = (TxtTotal.Text.ToDecimal).RoundSQL(2) Dim TotalPagado As Decimal = (TotalPagoContado + TotalRNC + TotalProntoPago + TotalPagadoGarantia).RoundSQL(2) If TotalPagado <> ImporteTotal Then If MostrarAlertas Then Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If Else Dim TotalPagado As Decimal = (TotalPagoContado + TotalProntoPago).RoundSQL(2) If TotalPagado <> TxtTotal.Text.ToDecimal.RoundSQL(2) Then If MostrarAlertas Then Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If End If End If End If 'SI TIENE SALDO PENDIENTE VALIDA SI TIENE PAGOS If Me.SaldoVenta > 0 Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant") AndAlso (UsuarioActual.Empresa.Funcionalidad(531) = "1") AndAlso (Not PermiteCredito) AndAlso Not TienePagos And TxtTotal.Text.ToDecimal > 0 Then If MostrarAlertas Then Alert("Es necesario especificar un pago.", TipoMensaje.MsgAdvertencia) End If Retorno = True End If If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ant") Then If Not PermiteCredito AndAlso TienePagos AndAlso TxtTotal.Text.ToDecimal > 0 Then Dim TotalPago As Decimal = DtPagos.SUM("Importe") + AmortizacionNC If TotalPago <> TxtTotal.Text.ToDecimal Then If MostrarAlertas Then Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) End If Retorno = True Return Retorno End If End If End If If UsuarioActual.Empresa.Funcionalidad(572) = "1" Then Dim TotalNC As Decimal = If((ListaNCDesc IsNot Nothing AndAlso ListaNCDesc.Count > 0) OrElse (ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0), LblTotalAPagar.Text.Trim().ToDecimal(), 0) If TotalNC > 0 Then If (DtPagos.SUM("Importe").ToString().ToDecimal() + AmortizacionNC + Total - TxtCambio.Text.ToDecimal) > TotalNC Then If MostrarAlertas Then Alert("El importe de los pagos no puede exceder el importe de la factura. Por favor verifique.", TipoMensaje.MsgAdvertencia) End If Retorno = True End If Else If (DtPagos.SUM("Importe").ToString().ToDecimal() + AmortizacionNC + Total - TxtCambio.Text.ToDecimal) > TxtTotal.Text.ToDecimal Then If MostrarAlertas Then Alert("El importe de los pagos no puede exceder el importe de la factura. Por favor verifique.", TipoMensaje.MsgAdvertencia) End If Retorno = True End If End If Else If (DtPagos.SUM("Importe").ToString().ToDecimal() + AmortizacionNC + Total - TxtCambio.Text.ToDecimal) > TxtTotal.Text.ToDecimal Then If MostrarAlertas Then Alert("El importe de los pagos no puede exceder el importe de la factura. Por favor verifique.", TipoMensaje.MsgAdvertencia) End If Retorno = True End If End If End If Return Retorno End Function Private Function ValidaPorcentajeIVA() As Boolean Dim Retorno As Boolean = True If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then Dim DtIVA As DataTable = TmpDT.FiltraParametros("PorcentajeIVA > 0", "", {"PorcentajeIVA"}) 'SOLO DEBE TENER PORCENTAJE DE 8 o 16 no ambos If DtIVA.Rows.Count > 1 Then Retorno = False Alert("No se puede tener porcentajes de IVA de 8 y 16% en una sola factura", TipoMensaje.MsgAdvertencia) End If End If Return Retorno End Function #End Region #Region " SERIE ALMACEN " Protected Sub BtnSerie_Click(sender As Object, e As EventArgs) Dim Row As GridViewRow = CType(CType(sender, Button).NamingContainer, GridViewRow) If Row.FCTextBox("TxtSerie").Text.Trim = "" Then Exit Sub Dim Index As Integer = Row.RowIndex Dim ObjInventarios As New ClsInventarios Dim Existencia As Decimal = ObjInventarios.GetExistenciasPSSerie(Row.FCTextBox("TxtSerie").Text.ToString(), ddlAlmacen.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Dim ExistenciaActual As Decimal = DtInv.SUMD("Cantidad", String.Format("Serie = '{0}'", Row.FCTextBox("TxtSerie").Text.ToString())) 'Valida Existencia If Existencia - ExistenciaActual <= 0 Then Alert(String.Format("No hay existencia suficiente del producto con la Serie: {0}. Por favor rectifique y vuelva a intentar", Row.FCTextBox("TxtSerie").Text.ToString()), TipoMensaje.MsgAdvertencia) Row.FCTextBox("TxtSerie").Text = "" Row.FCHiddenField("HdnSerie").Value = "" TmpDT.Rows(Index)("Serie") = "" Else Row.FCHiddenField("HdnSerie").Value = Row.FCTextBox("TxtSerie").Text TmpDT.Rows(Index)("Serie") = Row.FCTextBox("TxtSerie").Text End If TmpDT.AcceptChanges() DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") ObjInventarios.Dispose() UpINV.Update() End Sub Private Function ValidaSerieINV() As Boolean Dim Retorno As Boolean = False Dim Existencia As Decimal = 0 Dim ExistenciaActual As Decimal = 0 Dim ObjInventarios As New ClsInventarios For Each Gvr As GridViewRow In GvInv.Rows If Gvr.FCCheckBox("cbInv").Checked Then 'VACIO If Gvr.FCTextBox("TxtSerie").Visible = True And Gvr.FCTextBox("TxtSerie").Text.Trim = "" Then Alert("Algun producto con salida de inventario no tiene especificada la SERIE. Por favor verifique.", TipoMensaje.MsgAdvertencia) Retorno = True Exit For End If 'SIN EXISTENCIA If Gvr.FCTextBox("TxtSerie").Visible = True And Gvr.FCTextBox("TxtSerie").Text.Trim <> "" Then Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Existencia = ObjInventarios.GetExistenciasPS(-1, -1, UsuarioActual.CveEmpresa, ddlAlmacen.SelectedValue.ToEntero(), Serie:=Gvr.FCTextBox("TxtSerie").Text.ToString(), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1, BuscarEnTabla:=BuscarEnTabla) ExistenciaActual = DtInv.SUMD("Cantidad", String.Format("Serie = '{0}'", Gvr.FCTextBox("TxtSerie").Text.Trim)) 'Valida Existencia If Existencia - ExistenciaActual < 0 Then Alert(String.Format("No hay existencia suficiente del producto con la Serie: {0}. Por favor rectifique y vuelva a intentar", Gvr.FCTextBox("TxtSerie").Text.ToString()), TipoMensaje.MsgAdvertencia) Gvr.FCTextBox("TxtSerie").Text = "" Retorno = True Exit For End If End If End If Next Return Retorno End Function #End Region #Region " BUSCAR CLIENTE " Protected Sub BtnBuscarCliente_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtnBuscarCliente.Click ViewState("CveCliente") = HdnCveCliente.Value.ToEntero() CargaCliente(HdnCveCliente.Value.ToEntero()) If DdlPS.SelectedValue IsNot Nothing AndAlso DdlPS.SelectedValue.ToEntero() > 0 Then DdlPS_SelectedIndexChanged(sender, e) DdlPS.Focus() Else TxtCantidad.Focus() End If 'DdlPS.SelectedIndex = 14 'DdlPS_SelectedIndexChanged(sender, e) 'TxtCantidad.Focus() 'CARGA CONTRATOS VerificarContrato() End Sub Private Sub LnkAgregarCliente_Click(sender As Object, e As EventArgs) Handles LnkAgregarCliente.Click LimpiarAgregarCliente() RegistraScript("showDivEC();") End Sub Private Sub LimpiarAgregarCliente() DivNombreCliente.Visible = False DivTipoPersona.Visible = False DivDireccionCliente.Visible = False DVRegimenSociedad.Visible = False DivNumeroCPCliente.Visible = False 'DivColoniaTelefonoCliente.Visible = False DivCiudadLocalidadCliente.Visible = False DivEstadoPaisCliente.Visible = False DivCorreoCuentaCliente.Visible = False DivBotonesAgregarCliente.Visible = False DivFormaCliente.Visible = False divRegimenCliente.Visible = False divGiro.Visible = False DivBusquedaCliente.Visible = False BtnRegresarBusqueda.Visible = False CargaEstados() TxtNombreCliente.Text = "" TxtRFCCliente.Text = "" TxtRegimenSociedad.Text = "" DdlEstadoSAT.SelectedValueExist("-1") TxtCiudadCliente.Text = "" TxtLocalidadCliente.Text = "" TxtColoniaCliente.Text = "" TxtCPCliente.Text = "" TxtDireccionCliente.Text = "" TxtNumExtCliente.Text = "" TxtNumIntCliente.Text = "" TxtCorreoCliente.Text = "" TxtTelefonoCliente.Text = "" If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then TxtRFCNombre.Text = "" BtnCrearCliente.Visible = True DivValidaRFC.Visible = False DivValidaPorNombre.Visible = True CargaGiro() TxtRFCNombre.Focus() Else DivValidaRFC.Visible = True DivValidaPorNombre.Visible = False TxtRFCCliente.Focus() End If UpAgregarCliente.Update() End Sub Protected Sub GvBusquedaCliente_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvBusquedaCliente.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Left Dim Liga As String = String.Format("", e.Row.DBCampo("CveCliente")) e.Row.FCLiteral("LtlCodigo").Text = String.Format("
    {0}{1}
    ", Liga, e.Row.DBCampo("Codigo")) e.Row.FCLiteral("LtlNombre").Text = String.Format("
    {0}{1}
    ", Liga, e.Row.DBCampo("NombreComercial")) e.Row.FCLiteral("LtlRFC").Text = String.Format("
    {0}{1}
    ", Liga, e.Row.DBCampo("RFC")) End If End Sub Private Sub BtnValidaPorNombre_Click(sender As Object, e As EventArgs) Handles BtnValidaPorNombre.Click If TxtRFCNombre.Text.Length <= 2 Then Alert("Debe escribir al menos 3 caracteres", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim ObjCliente As New ClsClientes If ObjCliente.BuscarClienteRFCNombre(TxtRFCNombre.Text, UsuarioActual.CveEmpresa) Then If ObjCliente.DtResultados.Rows.Count = 1 AndAlso Not TxtRFCNombre.Text.Trim().Contiene("XAXX010101000", "XEXX010101000") Then RegistraScript("hideDivEC();") ViewState("CveCliente") = ObjCliente.DtResultados(0)("CveCliente").ToString().ToEntero() HdnCveCliente.Value = ObjCliente.DtResultados(0)("CveCliente").ToString() CargaCliente(CveCliente) UpCliente.Update() ElseIf ObjCliente.DtResultados.Rows.Count > 0 AndAlso Not TxtRFCNombre.Text.Trim().Contiene("XAXX010101000", "XEXX010101000") Then DivBusquedaCliente.Visible = True GvBusquedaCliente.DataSource = ObjCliente.DtResultados GvBusquedaCliente.DataBind() Else DivValidaRFC.Visible = True DivValidaPorNombre.Visible = False DivBusquedaCliente.Visible = False 'VERIFICAR SI EL TEXTO DE ENTRADA ES UN NOMBRE O UN RFC If TxtRFCNombre.Text.Length > 13 Then TxtNombreCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() ElseIf EsRFC(TxtRFCNombre.Text.Trim()) Then TxtRFCCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() Else TxtNombreCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() End If BtnValidarRFC_Click(Nothing, EventArgs.Empty) End If End If ObjCliente.Dispose() UpAgregarCliente.Update() End Sub Private Sub BtnValidarRFC_Click(sender As Object, e As EventArgs) Handles BtnValidarRFC.Click If TxtRFCCliente.Text.ToUpper.Contiene("XAXX010101000", "XEXX010101000") Then DivNombreCliente.Visible = True DivTipoPersona.Visible = True DivDireccionCliente.Visible = True DivNumeroCPCliente.Visible = True 'DivColoniaTelefonoCliente.Visible = True DivCiudadLocalidadCliente.Visible = True DivEstadoPaisCliente.Visible = True DivCorreoCuentaCliente.Visible = True DivBotonesAgregarCliente.Visible = True DivFormaCliente.Visible = True RFVDireccionC.Visible = False RFVNoEC.Visible = False RFVColoniaC.Visible = False RFVCiudadC.Visible = False RFVLocalidadC.Visible = False RFVSATPais.Visible = False divRegimenCliente.Visible = True RdTipoPersona.SelectedValue = "0" DdlMetodoCliente.SelectedValueExist("1") DdlMetodoCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) 'DdlFormaCliente.SelectedValueExist(1) DdlRegimenFiscalCliente.DataSource = GlobalDTRegimenesFiscales().FiltraParametros("CveRegimenFiscal = 11") DdlRegimenFiscalCliente.DataBind() CargaComboCFDICliente() Else If TxtRFCCliente.Text.Trim.Length > 2 Then Dim ObjCliente As New ClsClientes If ObjCliente.ValidaClienteRFC(TxtRFCCliente.Text, UsuarioActual.CveEmpresa) Then If ObjCliente.DtResultados.Rows.Count > 0 Then RegistraScript("hideDivEC();") ViewState("CveCliente") = ObjCliente.DtResultados(0)("CveCliente").ToString().ToEntero() HdnCveCliente.Value = ObjCliente.DtResultados(0)("CveCliente").ToString() CargaCliente(CveCliente) UpCliente.Update() Else DivNombreCliente.Visible = True DivTipoPersona.Visible = True DivDireccionCliente.Visible = True DivNumeroCPCliente.Visible = True 'DivColoniaTelefonoCliente.Visible = True DivCiudadLocalidadCliente.Visible = True DivEstadoPaisCliente.Visible = True DivCorreoCuentaCliente.Visible = True DivBotonesAgregarCliente.Visible = True DivFormaCliente.Visible = True divRegimenCliente.Visible = True End If End If ObjCliente.Dispose() Else DivNombreCliente.Visible = True DivTipoPersona.Visible = True DivDireccionCliente.Visible = True DivNumeroCPCliente.Visible = True 'DivColoniaTelefonoCliente.Visible = True DivCiudadLocalidadCliente.Visible = True DivEstadoPaisCliente.Visible = True DivCorreoCuentaCliente.Visible = True DivBotonesAgregarCliente.Visible = True DivFormaCliente.Visible = True divRegimenCliente.Visible = True End If RFVDireccionC.Visible = True RFVNoEC.Visible = True RFVColoniaC.Visible = True RFVCiudadC.Visible = True RFVLocalidadC.Visible = True RFVSATPais.Visible = True DdlMetodoCliente.SelectedValueExist(-1) DdlFormaCliente.SelectedValueExist(-1) DdlRegimenFiscalCliente.DataSource = GlobalDTRegimenesFiscales() DdlRegimenFiscalCliente.DataBind() DdlRegimenFiscalCliente.Items.Insert(0, New ListItem("Seleccione", "-1")) CargaComboCFDICliente() End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then divGiro.Visible = True Dim DrSP As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimero("") If DrSP IsNot Nothing Then DdlEstadoSAT.SelectedValueExist(DrSP("CveEstado").ToString()) TxtCiudadCliente.Text = DrSP("Municipio").ToString() TxtLocalidadCliente.Text = DrSP("Localidad").ToString() TxtColoniaCliente.Text = DrSP("Colonia").ToString() TxtCPCliente.Text = DrSP("CP").ToString() TxtDireccionCliente.Text = DrSP("Calle").ToString() TxtNumExtCliente.Text = DrSP("NoExt").ToString() TxtNumIntCliente.Text = DrSP("NoInt").ToString() 'TxtCorreoCliente.Text = DrSP("Correo").ToString() 'TxtTelefonoCliente.Text = DrSP("Telefono").ToString() End If DdlMetodoCliente.SelectedValueExist(1) DdlMetodoCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) 'PERSONA MORAL If TxtRFCCliente.Text.Trim().Length = 12 Then RdTipoPersona.SelectedValue = "1" RdTipoPersona_SelectedIndexChanged(Nothing, EventArgs.Empty) DdlRegimenFiscalCliente.SelectedValueExist("1") DdlRegimenFiscalCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) 'PERSONA FISICA Else RdTipoPersona.SelectedValue = "0" RdTipoPersona_SelectedIndexChanged(Nothing, EventArgs.Empty) If TxtRFCCliente.Text.Trim() = "XAXX010101000" Then DdlRegimenFiscalCliente.SelectedValueExist("11") Else DdlRegimenFiscalCliente.SelectedValueExist("9") End If DdlRegimenFiscalCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) End If DdlUsoCFDICliente.SelectedValueExist("3") BtnCrearCliente.Visible = False BtnValidarRFC.Visible = False BtnRegresarBusqueda.Visible = True UpAgregarCliente.Update() End If End Sub Private Sub CargaComboCFDICliente() If DdlRegimenFiscalCliente.SelectedValue.ToEntero() > 0 Then If TxtRFCCliente.Text.ToUpper = "XAXX010101000" Then DdlUsoCFDICliente.DataSource = GlobalDTSATUsosCFDI().FiltraParametros("CveUsoCFDI = 23") DdlUsoCFDICliente.DataBind() Else Dim RegimenFiscalCliente As String = "-1" If DdlRegimenFiscalCliente.SelectedValue.ToEntero() > 0 Then RegimenFiscalCliente = GlobalDTRegimenesFiscales().FiltroPrimeroValor("CodigoRegimenFiscal", $"CveRegimenFiscal = {DdlRegimenFiscalCliente.SelectedValue}") End If DdlUsoCFDICliente.Items.Clear() Dim EsPersonaMoral As Boolean = (RdTipoPersona.SelectedValue = "1") DdlUsoCFDICliente.DataSource = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente) DdlUsoCFDICliente.DataBind() DdlUsoCFDICliente.Items.Insert(0, New ListItem("Seleccione", "-1")) End If Else DdlUsoCFDICliente.Items.Clear() DdlUsoCFDICliente.Items.Insert(0, New ListItem("Seleccione", "-1")) End If UpAgregarCliente.Update() End Sub Protected Sub DdlRegimenFiscalCliente_SelectedIndexChanged(sender As Object, e As EventArgs) CargaComboCFDICliente() End Sub Private Sub BtnAgregarCliente_Click(sender As Object, e As EventArgs) Handles BtnAgregarCliente.Click Dim CvePrecioLista As Integer = -1 Dim CveRegimenFiscal As Integer = -1 Dim CveUsoCFDI As Integer = 3 CveRegimenFiscal = DdlRegimenFiscalCliente.SelectedValue.ToEntero() CveUsoCFDI = DdlUsoCFDICliente.SelectedValue.ToEntero() Dim RegimenFiscalCliente As String = "-1" If DdlRegimenFiscalCliente.SelectedValue.ToEntero() > 0 Then RegimenFiscalCliente = GlobalDTRegimenesFiscales().FiltroPrimeroValor("CodigoRegimenFiscal", $"CveRegimenFiscal = {CveRegimenFiscal}") End If If TxtRFCCliente.Text.Trim().Length < 12 Then Alert("El RFC no es valido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlUsoCFDICliente.SelectedValue.ToEntero() <= 0 Then Alert("El 'Uso CFDI' es requerido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlRegimenFiscalCliente.SelectedValue.ToEntero() <= 0 Then Alert("El 'Régimen Fiscal' es requerido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlMetodoCliente.SelectedValue.ToEntero() <= 0 Then Alert("El 'Método Pago' es requerido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlFormaCliente.SelectedValue.ToEntero() <= 0 Then Alert("El 'Forma Pago' es requerido.", TipoMensaje.MsgAdvertencia) Exit Sub End If If TxtRFCCliente.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlRegimenFiscalCliente.SelectedValue <> "11" Then Alert("El Regimen fiscal del cliente debe ser '616 - Sin obligaciones fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) Exit Sub End If If TxtRFCCliente.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlUsoCFDICliente.SelectedValue <> "23" Then Alert("El uso cfdi del cliente debe ser 'S01 - Sin efectos fiscales' cuando se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not TxtRFCCliente.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlRegimenFiscalCliente.SelectedValue = "11" Then Alert("El Regimen fiscal del cliente no puede ser '616 - Sin obligaciones fiscales' si no se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'If Not TxtRFCCliente.Text.Trim().ToUpper().Contiene("XAXX010101000", "XEXX010101000") AndAlso DdlUsoCFDICliente.SelectedValue = "23" Then ' Alert("El uso cfdi del cliente no puede ser 'S01 - Sin efectos fiscales' si no se utiliza el RFC genérico.", TipoMensaje.MsgAdvertencia) ' Exit Sub 'End If Dim EsPersonaMoral As Boolean = (RdTipoPersona.SelectedValue = "1") Dim DtUsosCFDI As DataTable = GlobalDTSATUsosCFDI(If(Not EsPersonaMoral, 1, 0), RegimenFiscalReceptor:=RegimenFiscalCliente).FiltraParametros($"CveUsoCFDI = {CveUsoCFDI}") If DtUsosCFDI.Rows.Count = 0 Then Alert("El Uso CFDI no corresponde con el tipo de persona (fisca, moral) y el régimen fiscal.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlSubProyectoDatos.SelectedValue.ToEntero() > 0 Then Dim Dr As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero).Rows(0) If Dr IsNot Nothing Then If Dr("CvePrecioLista").ToString().ToEntero() > 0 Then CvePrecioLista = Dr("CvePrecioLista").ToString().ToEntero() End If End If End If Dim ObjCliente As New ClsClientes Dim TipoPersona As Boolean = If(RdTipoPersona.SelectedValue.ToEntero = 1, True, False) If ObjCliente.AgregarClienteNoFrecuente(TxtNombreCliente.Text.Trim, TxtDireccionCliente.Text.Trim, TxtNumExtCliente.Text.Trim, TxtNumIntCliente.Text.Trim, TxtColoniaCliente.Text.Trim, TxtLocalidadCliente.Text.Trim, TxtCiudadCliente.Text.Trim, DdlEstadoSAT.SelectedValue.ToEntero, TxtRFCCliente.Text.Trim, TxtCPCliente.Text.Trim, TxtTelefonoCliente.Text.Trim, TxtCorreoCliente.Text.Trim, DdlSubProyectoDatos.SelectedValue.ToEntero(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, "", DdlMetodoCliente.SelectedValue.ToEntero(), DdlFormaCliente.SelectedValue.ToEntero(), CvePrecioLista:=CvePrecioLista, RegimenSociedad:=TxtRegimenSociedad.Text, TipoPersona:=TipoPersona, CveRegimenFiscal:=CveRegimenFiscal, CveUsoCFDI:=CveUsoCFDI, CveClienteClasificacion:=DdlGiro.SelectedValue.ToEntero()) Then If ObjCliente.DtResultados.Rows.Count > 0 Then RegistraScript("hideDivEC();") ViewState("CveCliente") = ObjCliente.DtResultados(0)("CveCliente").ToString().ToEntero() HdnCveCliente.Value = ObjCliente.DtResultados(0)("CveCliente").ToString() CargaCliente(CveCliente) UpCliente.Update() End If End If ObjCliente.Dispose() RecargaGlobalCliente() End Sub Private Sub RecargaGlobalCliente() 'Dim Hilo As New System.Threading.Thread(AddressOf GeneraGlobalDTCliente) 'Hilo.Start() GeneraGlobalDTCliente() End Sub Private Sub GeneraGlobalDTCliente() GlobalDTCliente(UsuarioActual.CveEmpresa) = Nothing 'Dim Objclientes As New ClsClientes 'If Objclientes.GetClientes(-1, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, Estatus:=-1, TipoCliente:=-1) Then ' Application("GlobalDTCliente" & UsuarioActual.CveEmpresa) = Objclientes.DtResultados 'End If 'Objclientes.Dispose() End Sub #End Region #Region " INVENTARIO POR ENTREGA" Private Sub InventarioMov(Optional CveVentaPadre As Integer = -1) If CveVentaPadre > 0 AndAlso Not DdlTipoComprobante.SelectedValue.Contiene("Dev", "RNC") Then Dim RowVentas As DataRow = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVentaPadre, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then RowVentas = ObjVentas.DtResultados.Copy().Rows(0) End If End Using 'SI TIENE UN ANTICIPO RELACIONADO O VIENE DE UNA REFACTURACION If RowVentas IsNot Nothing Then If RowVentas("TipoDocto").ToString().Contiene("Ing", "Ant", "Ped") AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing") Then CargaInventario(Me.CveVenta) End If End If Else If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Dev", "RNC", "Ped") Then CargaInventario(Me.CveVenta) End If End If End Sub Private Sub CargaInventario(CveVenta As Integer) Dim ObjInv As New ClsInventarios If ObjInv.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then If ObjInv.DtResultados.Rows.Count > 0 Then If UsuarioActual.TienePermisoProceso(269) AndAlso Not DevolucionAlmacen = 2 Then DivDevAlm.Visible = True TieneAlmacen = True End If If DdlTipoComprobante.SelectedValue.Contiene("Rem", "Dev") Then ChkDevAlm.Checked = True LiDevolucionAlmacen.Visible = True If DdlTipoComprobante.SelectedValue = "Dev" Then LblDevAlm.Text = "Salida de almacen" End If End If CargaGVInv(ObjInv.DtResultados) End If End If ObjInv.Dispose() End Sub Private Sub CargaGVInv(DtTemporal As DataTable) If Not DtTemporal.Columns.Contains("Lote") Then DtTemporal.Columns.Add("Lote", Type.GetType("System.String")) End If If Not DtTemporal.Columns.Contains("FechaCaducidad") Then DtTemporal.Columns.Add("FechaCaducidad", Type.GetType("System.DateTime")) End If If Not DtTemporal.Columns.Contains("Serie") Then DtTemporal.Columns.Add("Serie", Type.GetType("System.String")) End If If Not DtTemporal.Columns.Contains("CveAlmacen") Then DtTemporal.Columns.Add("CveAlmacen", GetType(Integer)) If Not DtTemporal.Columns.Contains("Fecha") Then Dim colNew As DataColumn = New DataColumn("Fecha", GetType(Date)) With {.DefaultValue = NowADS()} DtTemporal.Columns.Add(colNew) End If GvInv.Columns(4).Visible = DtTemporal.MAX("Serie", "Serie <> ''") <> "" GvInv.Columns(5).Visible = DtTemporal.MAX("Lote", "Lote <> ''") <> "" GvInv.Columns(6).Visible = DtTemporal.MAX("FechaCaducidad").ToDate > MinFecha GvInv.DataSource = DtTemporal GvInv.DataBind() UpINV.Update() End Sub #End Region #Region "IMPUESTOS LOCALES" Private Sub GvImpuestosLocales2_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvImpuestosLocales2.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then 'e.Row.FCTextBox("TxtImpuestoLocalPS").Text = (TxtSubTotal.Text.ToDouble - (TxtSubTotal.Text.ToDouble * (e.Row.DBCampo("Porcentaje").ToString().ToDouble) / 100)).ToString() e.Row.FCTextBox("TxtImpuestoLocalPS").Attributes.Add("onKeyUp", String.Format("FnSuma();")) End If End Sub Private Function RegeneracionPolizas(ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ObjBancos As ClsBancos) As Boolean Dim ErrorCancelar As Boolean = False Dim Mensaje As String = "" CreaObjetosVenta() 'If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then ' ObjAC = New ClsContPAQi(UsuarioActual.Empresa) : ObjAC.IniciaTransacSQL() 'End If 'REMOVEMOS LOS CONCEPTOS DE LA PREPOLIZA ErrorCancelar = Not ObjConta.RemovePrePolizasDetalle(CvePrePoliza, -1, CveVenta, 2) ObjFactura.CveVenta = CveVenta ObjFactura.CvePrePoliza = CvePrePoliza 'VUELVE A GENERAR LAS PREPOLIZAS If Not ErrorCancelar Then ErrorCancelar = ProcesoPrepolizas(ObjConta, ObjFactura, -1, TmpDT, 1, ObjBancos, ObjVentas) If Not ErrorCancelar Then ErrorCancelar = GuardarVentaImpuestosLocales(ObjVentas, ObjConta, ObjFactura, 1) Return ErrorCancelar End Function #End Region #Region " DEVOLUCION ALMACEN " Private Sub InicializaDevolucionAlmacen() 'If Not GvInv.Rows.Count > 0 Then ' Exit Sub 'End If If CveVenta > 0 AndAlso (SaldoVenta = TxtTotal.Text.ToDecimal OrElse DdlTipoComprobante.SelectedValue = "Dev" OrElse (DdlTipoComprobante.SelectedValue = "Ped" AndAlso TmpDT IsNot Nothing AndAlso TmpDT.COUNT("CveContratoDetalle", "CveContratoDetalle > 0") > 0)) Then 'And (DdlTipoComprobante.SelectedValue.Contiene({"Rem", "Ped"}) Or (DdlTipoComprobante.SelectedValue.Contiene({"Ing"}) And TxtFecha.Text.ToDate.Month = NowADS().Month And TxtFecha.Text.ToDate.Year = NowADS().Year)) Then If Not DevolucionAlmacen = 2 Then 'If UsuarioActual.Empresa.Funcionalidad(555) = "1" Then LiDevolucionAlmacen.Visible = True 'End If End If If DevolucionAlmacen = 1 Then LBDevolucionAlmacen.Text = " Cancelar Devolución Almacén" LBDevolucionAlmacen.ToolTip = "¿Está seguro de Cancelar la Devolución de Almacén?" Else LBDevolucionAlmacen.Text = " Solicitar Devolución Almacén" 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 If DdlTipoComprobante.SelectedValue = "Dev" Then LiDevolucionAlmacen.Visible = False End If End If UpnTools.Update() 'UpInvDev.Update() End Sub Protected Sub LBDevolucionAlmacen_Click(sender As Object, e As EventArgs) Dim SaldoAlmacen As Decimal = 0 Dim ErrorVerificacion As Boolean = False Using ObjInv As New ClsInventarios If ObjInv.GetInv_Mov(CveVenta, UsuarioActual.CveEmpresa) Then If ObjInv.DtResultados.Rows.Count > 0 Then TieneAlmacen = True End If Else ErrorVerificacion = True End If End Using If ErrorVerificacion Then Alert("No se pudieron verificar los movimientos de almacen del documento.", TipoMensaje.MsgError) Exit Sub End If If Not TieneAlmacen Then Alert("El documento no tiene movimientos de almacen.", TipoMensaje.MsgAdvertencia) Exit Sub End If Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=True) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim DbRowVenta As DataRow = ObjVentas.DtResultados.Rows(0) Me.DevolucionAlmacen = DbRowVenta("EsDevolucionVenta").ToString().ToEntero() SaldoAlmacen = DbRowVenta("SaldoAlmacen").ToString().ToDecimal() End If End If End Using If DdlTipoComprobante.SelectedValue.ToString() = "Rem" AndAlso SaldoAlmacen = 0 Then Alert("El documento ya fue devuelto.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlTipoComprobante.SelectedValue.ToString() = "Ing" AndAlso SaldoAlmacen = 0 Then Alert("El movimiento ya fue devuelto.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Me.DevolucionAlmacen.Contiene(2) Then InicializaDevolucionAlmacen() UpnTools.Update() Alert("El movimiento ya fue devuelto.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim EstatusDevolucion As Integer = If(Me.DevolucionAlmacen = 0, 1, 0) Dim ObjV As New ClsVentas If ObjV.UpdateVentasDevolucionAlmacen(EstatusDevolucion, CveVenta) Then Alert("La solicitud de Devolución de Almacén se guardó correctamente") End If ObjV.Dispose() Me.DevolucionAlmacen = EstatusDevolucion InicializaDevolucionAlmacen() 'UpnTools.Update() End Sub #End Region #Region "D I R E C C I O N E N V I O" Private Sub CargaDireccionesEnvio() Dim ObjClientes As New ClsClientes Dim TieneError As Boolean = False DdlDireccionEnvio.Items.Clear() If ObjClientes.DireccionEnvioGet(-1, CveCliente, CveClienteSucursal) Then DdlDireccionEnvio.DataSource = ObjClientes.DtResultados.FiltraParametros(String.Format("Estatus = 1")) DdlDireccionEnvio.DataBind() 'DdlDireccionEnvio.Items.Insert(0, New ListItem("Seleccione", "-1")) TmpDTEnvioDireccion = ObjClientes.DtResultados Else TieneError = True End If If TieneError Then Alert("Ocurrió un error al obtener las direcciones de envío", TipoMensaje.MsgError) End If ObjClientes.Dispose() UpCliente.Update() End Sub Private Sub ChkDireccionEnvio_CheckedChanged(sender As Object, e As EventArgs) Handles ChkDireccionEnvio.CheckedChanged If ChkDireccionEnvio.Checked Then DdlDireccionEnvio.Visible = True LnkOtraDireccion.Visible = True Else DdlDireccionEnvio.Visible = False LnkOtraDireccion.Visible = False End If End Sub Private Sub BtnAgregarDireccion_Click(sender As Object, e As EventArgs) Handles BtnAgregarDireccion.Click Dim ObjClientes As New ClsClientes Dim TieneError As Boolean = False Dim CveDireccionEnvio As Integer CveDireccionEnvio = ObjClientes.DireccionEnvioAdd(CveCliente, TxtEnvioDireccion.Text.Trim, TxtEnvioNoExt.Text.Trim, TxtEnvioNoInt.Text.Trim, DdlDirClienteColonia.SelectedItem.Text.Trim, DdlDirClienteMunicipio.SelectedItem.Text.Trim, DdlDirClienteEstado.SelectedItem.Text.Trim, TxtEnvioCP.Text.Trim(), TxtEnvioContacto.Text.Trim, UsuarioActual.CveUsuario, 1, CveClienteSucursal:=CveClienteSucursal, EnvioTel:=TxtEnvioTel.Text.Trim.Replace(" ", "").Replace("(", "").Replace(")", "").Replace("-", "").Replace("_", ""), CvePais:=DdlDirClientePais.SelectedValue.ToEntero, CveEstado:=DdlDirClienteEstado.SelectedValue.ToEntero, CveMunicipio:=DdlDirClienteMunicipio.SelectedValue.ToEntero, CveLocalidad:=DdlDirClienteLocalidad.SelectedValue.ToEntero, CveColonia:=DdlDirClienteColonia.SelectedValue.ToEntero) If CveDireccionEnvio < 0 Then TieneError = True End If If Not TieneError Then 'TxtDireccion.Text = "" 'TxtColonia.Text = "" 'TxtCiudad.Text = "" 'TxtEstado.Text = "" 'TxtCP.Text = "" 'TxtNoExt.Text = "" 'TxtNoInt.Text = "" 'TxtContacto.Text = "" 'TxtDepartamento.Text = "" TxtEnvioDireccion.Text = "" TxtEnvioNoExt.Text = "" TxtEnvioNoInt.Text = "" DdlDirClienteEstado.SelectedValueExist("-1") DdlDirClienteMunicipio.SelectedValueExist("-1") DdlDirClienteColonia.SelectedValueExist("-1") 'TxtEnvioColonia.Text = "" 'TxtEnvioCiudad.Text = "" 'TxtEnvioEstado.Text = "" TxtEnvioContacto.Text = "" TxtEnvioCP.Text = "" TxtEnvioTel.Text = "" CargaDireccionesEnvio() DdlDireccionEnvio.SelectedValueExist(CveDireccionEnvio) 'DdlDireccionEnvio_SelectedIndexChanged(DdlDireccionEnvio, EventArgs.Empty) End If ObjClientes.Dispose() RegistraScript("$('#divAddDireccionEnvio').modal('hide');") End Sub Private Sub LnkOtraDireccion_Click(sender As Object, e As EventArgs) Handles LnkOtraDireccion.Click 'TxtDireccion.Text = LblDireccion.Text.Trim 'TxtNoExt.Text = CliNoExt.Trim 'TxtNoInt.Text = CliNoInt.Trim 'TxtColonia.Text = LblColonia.Text.Trim 'TxtCiudad.Text = LblCiudad.Text.Trim 'TxtEstado.Text = LblEstado.Text.Trim 'TxtCP.Text = LblCP.Text.Trim CargaCombosDirecionesClientesSAT() Dim DtDireccionEnvio As DataTable = Nothing Dim ObjClientes As New ClsClientes If ObjClientes.DireccionEnvioGet(DdlDireccionEnvio.SelectedValue.ToEntero(), CveCliente, CveClienteSucursal) Then DtDireccionEnvio = ObjClientes.DtResultados End If ObjClientes.Dispose() If DtDireccionEnvio IsNot Nothing And DtDireccionEnvio.Rows.Count > 0 Then Dim Dr As DataRow = DtDireccionEnvio.Rows(0) TxtEnvioDireccion.Text = Dr("EnvioDireccion").ToString() TxtEnvioNoExt.Text = Dr("EnvioNoExt").ToString() TxtEnvioNoInt.Text = Dr("EnvioNoInt").ToString() TxtEnvioContacto.Text = Dr("EnvioContacto").ToString() TxtEnvioCP.Text = Dr("EnvioCP").ToString() TxtEnvioTel.Text = Dr("EnvioTel").ToString() DdlDirClientePais.SelectedValueExist(Dr("CvePais")) CargaDirClienteEstado() DdlDirClienteEstado.SelectedValueExist(Dr("CveEstado")) CargaDirClienteMunicipio() DdlDirClienteMunicipio.SelectedValueExist(Dr("CveMunicipio")) CargaDirClienteColonia() DdlDirClienteLocalidad.SelectedValueExist(Dr("CveLocalidad")) CargaDirClienteLocalidad() DdlDirClienteColonia.SelectedValueExist(Dr("CveColonia")) Else TxtEnvioDireccion.Text = LblDireccion.Text.Trim TxtEnvioNoExt.Text = CliNoExt.Trim TxtEnvioNoInt.Text = CliNoInt.Trim DdlDirClienteEstado.SelectedValueExist("-1") DdlDirClienteMunicipio.SelectedValueExist("-1") DdlDirClienteColonia.SelectedValueExist("-1") 'TxtEnvioColonia.Text = LblColonia.Text.Trim 'TxtEnvioCiudad.Text = LblCiudad.Text.Trim 'TxtEnvioEstado.Text = LblEstado.Text.Trim TxtEnvioContacto.Text = "" TxtEnvioCP.Text = LblCP.Text.Trim TxtEnvioTel.Text = "" End If UpBodyDireccion.Update() RegistraScript("$('#divAddDireccionEnvio').modal();") End Sub #Region "D I R E C C I O N E N V I O - C O M B O S" Protected Sub BtnDirClienteValidar_Click(sender As Object, e As EventArgs) DirClientevalidaCodigoPostal() End Sub Private Sub CargaCombosDirecionesClientesSAT() CargaDirClientePais() CargaDirClienteEstado() CargaDirClienteMunicipio() CargaDirClienteLocalidad() CargaDirClienteColonia() End Sub Private Sub CargaDirClientePais() DdlDirClientePais.DataSource = GlobalDTGralPaises() DdlDirClientePais.DataBind() DdlDirClientePais.SelectedValueExist("151") End Sub Private Sub CargaDirClienteEstado() DdlDirClienteEstado.Items.Clear() If DdlDirClientePais.SelectedValue.ToEntero > 0 Then DdlDirClienteEstado.DataSource = GlobalDTGralEstados("-1", DdlDirClientePais.SelectedValue.ToEntero) End If DdlDirClienteEstado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlDirClienteEstado.DataBind() End Sub Private Sub CargaDirClienteColonia() DdlDirClienteColonia.Items.Clear() If DdlDirClienteMunicipio.SelectedValue.ToEntero > 0 Then DdlDirClienteColonia.DataSource = GlobalDTGralColonias("-1", "-1", "-1", DdlDirClienteMunicipio.SelectedValue.ToEntero, CodigoPostal:=If(TxtEnvioCP.Text.Trim.Length > 0, TxtEnvioCP.Text.ToEntero, -1)) End If DdlDirClienteColonia.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlDirClienteColonia.DataBind() End Sub Protected Sub CargaDirClienteLocalidad() DdlDirClienteLocalidad.Items.Clear() If DdlEstadoSAT.SelectedValue.ToEntero > 0 Then DdlDirClienteLocalidad.DataSource = GlobalDTLocalidad(DdlDirClienteEstado.SelectedValue.ToEntero, DdlDirClienteMunicipio.SelectedValue.ToEntero) DdlDirClienteLocalidad.DataBind() End If DdlDirClienteLocalidad.Items.Insert(0, New ListItem("Seleccione una", "-1")) End Sub Private Sub CargaDirClienteMunicipio() DdlDirClienteMunicipio.Items.Clear() If DdlDirClienteEstado.SelectedValue.ToEntero > 0 Then DdlDirClienteMunicipio.DataSource = GlobalDTGralMunicipios("-1", DdlDirClienteEstado.SelectedValue.ToEntero) End If DdlDirClienteMunicipio.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlDirClienteMunicipio.DataBind() End Sub Protected Sub DdlDirClientePais_SelectedIndexChanged(sender As Object, e As EventArgs) CargaDirClienteEstado() CargaDirClienteMunicipio() CargaDirClienteColonia() CargaDirClienteLocalidad() End Sub Protected Sub DdlDirClienteEstado_SelectedIndexChanged(sender As Object, e As EventArgs) CargaDirClienteMunicipio() CargaDirClienteColonia() CargaDirClienteLocalidad() End Sub Protected Sub DdlDirClienteMunicipio_SelectedIndexChanged(sender As Object, e As EventArgs) CargaDirClienteColonia() CargaDirClienteLocalidad() End Sub Protected Sub DdlDirClienteColonia_SelectedIndexChanged(sender As Object, e As EventArgs) DirClientevalidaCodigoPostal() End Sub Private Sub DirClientevalidaCodigoPostal() Dim CPTxt As Integer = TxtEnvioCP.Text.ToEntero() Dim CveColonia As Integer = DdlDirClienteColonia.SelectedValue.ToEntero If CPTxt > 0 And CveColonia > 0 Then Dim CP As Integer = GlobalDTGralColonias("-1", "-1", "-1", CveColonia:=CveColonia).FiltroPrimeroValor("CP", "").ToEntero If CPTxt <> CP Then Alert("El código postal selecionado es diferente del codigo postal de la Colonia.", TipoMensaje.MsgAdvertencia) End If End If End Sub #End Region #End Region #Region " CARGA FACTURA OC " Private Sub CargaFacturaOC() CveOC = IfNull(Request("CveOC"), -1).ToString().ToEntero() If CveOC > 0 Then Dim tDT As DataTable = Nothing Dim ObjOC As New ClsOC If ObjOC.GetOCFacturacion(CveOC, UsuarioActual.CveEmpresa) Then tDT = ObjOC.DtResultados.Copy() 'tTmpDT.Columns.Add("TipoDocto", GetType(String)) 'tTmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) 'tTmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) Else Alert("Ocurrió un error al obtener los detalles de la orden de compra. Por favor vuelva a intentar.", TipoMensaje.MsgError) End If ObjOC.Dispose() If tDT IsNot Nothing AndAlso tDT.Rows.Count > 0 Then ViewState("CveCliente") = tDT.Rows(0)("CveCliente") HdnCveCliente.Value = CveCliente.ToString() CargaCliente(CveCliente) If (DdlTipoComprobante.Items.FindByValue("Rem") IsNot Nothing) Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) End If For Each Dr As DataRow In tDT.Rows AgregarProductoServicio(Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), Dr("CvePS").ToString().ToEntero(), Dr("PS").ToString(), Dr("Obs").ToString(), Dr("PU").ToString().ToDecimal, Dr("Descuento").ToString().ToDecimal, Dr("CveProyecto").ToString().ToEntero(), Dr("Proyecto").ToString(), Dr("CveSubProyecto").ToString().ToEntero(), Dr("SubProyecto").ToString(), CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero(), CveOrdenCompraDetalle:=Dr("CveOrdenCompraDetalle").ToString().ToEntero()) Next 'GvPS.DataSource = TmpDT 'GvPS.DataBind() 'TxtSubTotal.Text = TmpDT.SUM("Total").FormatoNumero(2) 'TxtIVA.Text = (TxtSubTotal.Text.ToDecimal * ViewState("IVA").ToString().ToDecimal).ToString() 'CalculaTotalesImpuestosLocales() 'CalculaTotales(False) UpPS.Update() VerificarContrato(True) If UsuarioActual.TienePermisoProceso(175) Then DdlTipoComprobante.Items.FindByText("Egresos").Enabled = False End If DdlTipoComprobante.Items.FindByText("Cotización").Enabled = False DdlTipoComprobante.Items.FindByText("Anticipos").Enabled = False 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True UpCliente.Update() tDT.Dispose() Else Alert("No se encontró la orden de compra especificada. Por favor verifique y vuelta a intentar.", TipoMensaje.MsgAdvertencia) End If CalculaTotalesVenta() End If End Sub #End Region #Region "Metodos Viejos" Private Sub GeneraPDF(FechaFactura As DateTime, FolioFiscal As String, NoSerieCertificado As String, FechaCertificacion As DateTime, NoSerieCertificadoContribuyente As String, DTConceptos As DataTable, SelloCFDi As String, SelloSAT As String, CBB As String, Folio As String, RutaXML As String, EsVistaPrevia As Boolean, MuestraAlert As Boolean, Optional MR As ReportViewer = Nothing) Alert("No se pudo generar el PDF", TipoMensaje.MsgError) End Sub Private Sub GeneraPDFCBB(FechaFactura As DateTime, DTConceptos As DataTable, Folio As String, EsVistaPrevia As Boolean) End Sub Private Sub GeneraPDFCot(FechaCotizacion As DateTime, DTConceptos As DataTable, Folio As String, EsVistaPrevia As Boolean, GeneraDescarga As Boolean) End Sub Private Sub LkEliminarFactura_Click(sender As Object, e As EventArgs) Handles LkEliminarFactura.Click If HdnPagado.Value.ToDecimal = 0 Then Dim ObjVentas As New ClsVentas ObjVentas.IniciaTransacSQL() If ObjVentas.EliminarVenta(CveVenta) Then ObjVentas.Commit() Alert("La venta ha sido eliminada correctamente.", TipoMensaje.MsgInformacion, "document.location.href=""/Ventas/Clientes.aspx?CveCliente=" & CveCliente & """;") Else ObjVentas.RollBack() End If ObjVentas.Dispose() Else Alert("La venta no se puede eliminar ya que tiene pagos vinculados.", TipoMensaje.MsgError) End If End Sub Private Sub RblComplementos_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RblComplementos.SelectedIndexChanged If RblComplementos.SelectedValue.Contiene("5", "6") Then 'Directivo/Ejecutivo Estatal trEntidad.Visible = True trContaComplementos.Visible = True trAmbito.Visible = False trTipoCampaña.Visible = False ElseIf RblComplementos.SelectedValue = "7" Then 'Ejecutivo Nacional trEntidad.Visible = False trContaComplementos.Visible = True trAmbito.Visible = False trTipoCampaña.Visible = False ElseIf RblComplementos.SelectedValue = "8" Then 'Campaña/PreCampaña trEntidad.Visible = True trContaComplementos.Visible = True trAmbito.Visible = True trTipoCampaña.Visible = True End If UpDatosComplementos.Update() End Sub Private Sub GvPS_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles GvPS.RowCommand If e.CommandName = "Clonar" Then Dim RowNum As Integer = Convert.ToInt32(e.CommandArgument) Dim GvRow As GridViewRow = GvPS.Rows(RowNum) If (GvRow.RowState = DataControlRowState.Edit OrElse GvRow.RowState = 5) Then TxtCantidad.Text = GvRow.FCTextBox("TxtCantidad").Text DdlClasificacion.SelectedValue = GvRow.FCDropDownList("DdlClasificacion").SelectedValue DdlPS.SelectedValue = GvRow.FCDropDownLost("DdlPS").SelectedValue DdlPS_SelectedIndexChanged(Nothing, Nothing) DdlUnidadMedida.SelectedValue = GvRow.FCDropDownList("DdlUnidadMedida").SelectedValue TxtObsPS.Text = GvRow.FCTextBox("TxtObsPS").Text TxtPrecio.Text = GvRow.FCTextBox("TxtPrecio").Text Else TxtCantidad.Text = GvPS.Rows(RowNum).FCLiteral("LtlCantidad").Text DdlClasificacion.SelectedValueExistInsert(GvRow.DataKey("CveClasificacion"), GvRow.DataKey("Clasificacion")) DdlPS.SelectedValue = GvRow.DataKey("CvePS") DdlPS_SelectedIndexChanged(Nothing, Nothing) DdlUnidadMedida.SelectedValueExistInsert(GvRow.DataKey("CveUM"), GvRow.DataKey("UM")) TxtObsPS.Text = GvRow.FCLiteral("LtlObsPS").Text TxtPrecio.Text = GvRow.FCLiteral("LtlPU").Text End If DdlProyecto.SelectedValue = GvRow.DataKey("CveProyecto") DdlProyecto_SelectedIndexChanged(Nothing, Nothing) DdlSubProyecto.SelectedValue = GvRow.DataKey("CveSubProyecto") RegistraScript("Recalcula();") LbAgregar_Click(Nothing, Nothing) ElseIf e.CommandName = "Descuento" Then LblSubtotalDescPS.Text = "" LblTotalDescPS.Text = "" LblTotalFinalDescPS.Text = "" LblTituloDesc.Text = "Descuento" HdnConsecPS.Value = "-1" HdnTotalCompra.Value = "" TxtPorPS.Text = "" LblIVADescPS.Text = "" LblUtilidadPorcentaje.Text = "" HdnIVADescPS.Value = "0" Dim GvRow As GridViewRow = GvPS.Rows(e.CommandArgument.ToString().ToEntero()) LblTituloDesc.Text = $"Descuento: {GvRow.DataKey("PS")}" HdnConsecPS.Value = GvRow.DataKey("Consec") LblSubtotalDescPS.Text = (GvRow.DataKey("Total").ToDecimal()).FormatoNumero() LblTotalDescPS.Text = (GvRow.DataKey("Total").ToDecimal() + GvRow.DataKey("ImporteIVA").ToDecimal()).FormatoNumero() LblTotalFinalDescPS.Text = (GvRow.DataKey("Total").ToDecimal() + GvRow.DataKey("ImporteIVA").ToDecimal()).FormatoNumero() LblIVADescPS.Text = GvRow.DataKey("ImporteIVA").FormatoNumero() HdnIVADescPS.Value = GvRow.DataKey("IVA").FormatoNumero() Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=GvRow.DataKey("CvePS").ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then If DrPS("PorMaximoDescuento").ToString().ToDecimal() > 0 Then HdnPorcentajeMaxDescPS.Value = DrPS("PorMaximoDescuento").ToString() Else HdnPorcentajeMaxDescPS.Value = UsuarioActual.DescuentoAutorizado.ToString() End If End If Using ObjPS As New ClsProductosServicios Dim PrecioCompra = ObjPS.GetUltimoPrecioCompra(UsuarioActual.CveEmpresa, GvRow.DataKey("CvePS").ToEntero()) If PrecioCompra > 0 Then Dim SubTotalCompra = (PrecioCompra * GvRow.DataKey("Cantidad").ToDouble()) HdnTotalCompra.Value = SubTotalCompra.ToString() LblPrecioCompra.Text = $"PU Compra: {(PrecioCompra).FormatoNumero(2)}" Dim SubTotal = GvRow.DataKey("Total").ToDecimal() Dim PorUtilidad = ((SubTotal - SubTotalCompra) / SubTotal) * 100D LblUtilidadPorcentaje.Text = PorUtilidad.FormatoNumero(2) End If End Using UpDescPS.Update() If UsuarioActual.TienePermisoProceso(374) Then RegistraScript("$('#ModalDescPS').modal({backdrop: 'static', keyboard: false});") Else txtUserDesc.Text = "" txtPassDesc.Text = "" 'UpAutorizarDesc.Update() RblTipoAutorizacionDesc.SelectedValue = "1" DivUserPass.Visible = True DivCodAcceso.Visible = False txtUserDesc.Focus() RegistraScript("$('#ModalPermisoDesc').modal({backdrop: 'static', keyboard: false});setTimeout(() => {$('#txtUserDesc').focus();}, 500); ", "A2") End If ElseIf e.CommandName = "Existencias" Then Dim RowNum As Integer = Convert.ToInt32(e.CommandArgument) Dim GvRow As GridViewRow = GvPS.Rows(RowNum) LtlVerExistenciasPS.Text = $"Existencias: {GvRow.DataKey("PS")}" Dim RestringirAlmacenes As Integer = -1 Dim BuscarEnTabla As Boolean = True Dim ObjInventarios As New ClsInventarios() If ObjInventarios.GetExistenciasProducto(GvRow.DataKey("CvePS").ToEntero(), -1, UsuarioActual.CveEmpresa, -1, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), ExcluyeApartados:=-1, ExcluyeAdelantado:=1, CveSubProyecto:=-1, ExcluyeTransitorios:=1, RestringirAlmacenes:=RestringirAlmacenes, TopSelect:=100, BuscarEnTabla:=BuscarEnTabla) Then GvVerExistencias.DataSource = ObjInventarios.DtResultados.Copy() End If ObjInventarios.Dispose() GvVerExistencias.DataBind() UpVerExistencias.Update() RegistraScript("$('#DivModalVerExistencias').modal({backdrop: 'static', keyboard: false}); ", "A2") Else DdlPS_SelectedIndexChanged(Nothing, Nothing) End If End Sub Private Sub OrdenarPS(Optional Reeordenar As Boolean = True, Optional RecargarGV As Boolean = True) If Reeordenar Then For Each row As GridViewRow In GvPS.Rows TmpDT.Rows(row.RowIndex)("Orden") = row.FCTextBox("TxtOrden").Text.ToEntero() Next TmpDT.AcceptChanges() End If 'Dim resultados = From OrdenDT In TmpDT ' Order By OrdenDT("Orden").ToString().ToEntero() ' Select OrdenDT 'TmpDT = resultados.CopyToDataTable TmpDT = TmpDT.FiltraParametros("", "Orden").Copy() TmpDT.AcceptChanges() If RecargarGV Then GvPS.DataSource = TmpDT GvPS.DataBind() End If End Sub Protected Sub OrdenarGvPS(ByVal sender As Object, ByVal e As EventArgs) OrdenarPS() CalculaTotalesVenta() UpPS.Update() End Sub Private Sub LkCotizacionAutorizar_Click(sender As Object, e As EventArgs) Handles LkCotizacionAutorizar.Click EsSupervisor = True Dim ActualizoEstatus As Boolean = False Dim ObjVentas As New ClsVentas If ObjVentas.UpdateEstatusFactura(8, FolioFiscal, "", NowADS(), CveVenta) Then ActualizoEstatus = True End If ObjVentas.Dispose() If ActualizoEstatus Then If UsuarioActual.Empresa.Funcionalidad(135) = "1" Then GeneraPDFCotizacion(True) Alert("La cotización ha sido enviada al correo de nuestro cliente:" & Mail) ElseIf UsuarioActual.Empresa.Funcionalidad(135) = "2" Then Alert("La cotización ha sido autorizada.") End If Else Alert("No se pudo autorizar la cotización", TipoMensaje.MsgError) End If End Sub #End Region #Region "Cancelar, Generar y mandar por correo el acuse de cancelación." Private Sub BtnEnviarMailCancelacion_Click(sender As Object, e As EventArgs) Handles BtnEnviarMailCancelacion.Click EnviarPDFCancelacion(HdnCveVentaAcuse.Value.ToEntero()) HdnCveVentaAcuse.Value = "0" End Sub Private Function DescargarPDF(Parametros As String) As Byte() Dim Url = New Uri(String.Format("{0}Compras/PopUpVerFactura.aspx?P={1}", ClsPaginas.UrlSitio, Parametros)) 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={2}", UsuarioActual.CveEmpresa, DateTime.UtcNow.Ticks, UsuarioActual.CveUsuario))) 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 EnviarPDFCancelacion(CveVenta As Integer) Dim FacturaRef As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, CargaDTDetalle:=False, CargaDatosRelacionados:=False) If FacturaRef IsNot Nothing Then Dim ObjetoPDF As Byte() = DescargarPDF(Encripta(String.Format("OP=CAN&CVEVTA={0}", CveVenta))) If ObjetoPDF IsNot Nothing Then Dim RFC As String = UsuarioActual.Empresa.RFC Dim ObjMail As New ClsSisMail Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) Dim Asunto As String = String.Empty Dim Cuerpo As String = String.Empty Dim ResultadoMail As Integer Dim sb As New StringBuilder() If UsuarioActual.CveEmpresa = 119 Then sb.Append("") sb.Append("") sb.Append("") sb.Append("") sb.Append(" Acuse De Cancelación") sb.Append(" ") sb.Append("") sb.Append("") sb.Append(" ") sb.Append($" Estimado Cliente {FacturaRef.Cliente.Nombre},

    ") sb.Append($" Le informamos que Agroquímicos JAM, S.A. DE C.V ha cancelado el CFDI {FacturaRef.SerieFolio}, el cual ha quedado sin Efectos Fiscales y encontrará adjunto en este correo el Acuse de
    ") sb.Append($" cancelación del SAT.
    ") sb.Append(" POR LO QUE PEDIMOS ELIMINARLO Y NO INCLUIRLO EN SU CONTABILIDAD, YA QUE PUEDE REPRESENTAR UN PROBLEMA FISCAL PARA USTED O SU EMPRESA CUANDO EL SAT REALICE UNA FUTURA AUDITORIA
    ") sb.Append(" EN SU CONTABILIDAD.
    ") sb.Append(" ") sb.Append("




    ") sb.Append(" Este correo se generó automáticamente, favor de no responder este mensaje.") sb.Append("
    ") sb.Append("") sb.Append("") Else sb.Append("") sb.Append("") sb.Append("") sb.Append("") sb.Append(" Acuse De Cancelación") sb.Append(" ") sb.Append("") sb.Append("") sb.Append(" ") sb.Append($" Estimado Cliente {FacturaRef.Cliente.Nombre},

    ") sb.Append($" A través del presente medio la Empresa {UsuarioActual.Empresa.Empresa} - {RFC}, canceló el documento tipo {FacturaRef.TipodeComprobante}
    ") sb.Append($" con folio {FacturaRef.SerieFolio} y el Importe de ${FacturaRef.Total}.

    ") sb.Append(" Le hacemos llegar el acuse de cancelación.
    ") sb.Append(" ") sb.Append("




    ") sb.Append(" Este correo se generó automáticamente, favor de no responder este mensaje.") sb.Append("
    ") sb.Append("") sb.Append("") End If Asunto = $"Acuse de Cancelación {FacturaRef.SerieFolio}" Cuerpo = sb.ToString() Dim DisplayName As String = "" If UsuarioActual.CveEmpresa = 119 Then DisplayName = "Facturación Agroquímicos JAM" LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.ArchivoBinario = ObjetoPDF, .NombreArchivo = $"AcuseCancelacion{FacturaRef.SerieFolio}.pdf"}) If ObjMail.SendMail(EmpresaActual, Mail, Asunto, Cuerpo, MailCC, LSRutasMail, Displayname:=DisplayName) Then ResultadoMail = 1 Alert("El acuse de cancelación ha sido envíado correctamente.", JSBtnAceptar:="BtnRefrescarPagina();", ShowCloseButton:=False) Else ResultadoMail = 0 End If sb.Clear() FacturaRef.Dispose() FacturaRef = Nothing End If Else Alert("No se pudo enviar el acuse de cancelación", TipoMensaje.MsgAdvertencia) End If End Sub Private Sub MostrarCondicionesCancelacion(Optional Extra As String = "", Optional SaldoAlmacen As Decimal = 0) Dim SbCondiciones As New StringBuilder() If SaldoAlmacen < 0 AndAlso ChkDevAlm.Checked Then SbCondiciones.Append("*Se realizará una devolución en automático al realizar la cancelación.") End If If GvRemisiones.Rows.Count > 0 AndAlso Not DivCanRem.Visible AndAlso Not AplicaCancelarRemision Then SbCondiciones.Append("

    *No se puede cancelar las remisiones ligadas a la factura, esto puede deberse por los siguientes motivo:") SbCondiciones.Append("
         -La remisión no está facturada al 100%.") SbCondiciones.Append("
         -La remisión está relacionada con otra factura.") End If If Extra.Trim().Length > 0 Then SbCondiciones.AppendFormat("
    *{0}", Extra) End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DivCanRem.Visible = False If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") Then Using ObjVentas As New ClsVentas If ObjVentas.GetMovimientosDepositoCaja(Me.CveVenta, UsuarioActual.CveEmpresa) Then If ObjVentas.DtResultados.Rows.Count > 0 Then SbCondiciones.Append("

    *No se puede cancelar la factura, debido a que tiene el pago ya depositado.") BtnCancelarDocumento.Visible = False End If Else BtnCancelarDocumento.Visible = False End If End Using End If End If LbCancelarDescripcion.Text = SbCondiciones.ToString() SbCondiciones.Clear() UpCancelarDocumento.Update() End Sub Private Sub LbCancelarDocumento_Click(sender As Object, e As EventArgs) Handles LbCancelarDocumento.Click Dim SaldoAlmacen As Decimal = 0 If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Dev", "Ped") Then Dim PermiteCancelar As Boolean = True Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=True) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim RowVenta As DataRow = ObjVentas.DtResultados.Rows(0) SaldoAlmacen = RowVenta("SaldoAlmacen").ToString().ToDecimal() Else PermiteCancelar = False End If Else PermiteCancelar = False 'si hay error para obtener información que no continue. Exit Sub End If End Using If Not PermiteCancelar Then Alert("La venta no se puede cancelar si no ha sido surtida previamente", TipoMensaje.MsgAdvertencia) Exit Sub End If If SaldoAlmacen <> 0 Then If UsuarioActual.TienePermisoProceso(269) Then DivDevAlm.Visible = True TieneAlmacen = True End If If UsuarioActual.Empresa.Funcionalidad(567) = "1" Then DivDevAlm.Visible = True TieneAlmacen = True ChkDevAlm.Checked = True ChkDevAlm.Enabled = False End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then DivDevAlm.Visible = True TieneAlmacen = True ChkDevAlm.Checked = True ChkDevAlm.Enabled = False End If If (CveVenta > 0 AndAlso DdlTipoComprobante.SelectedValue <> "Cot") AndAlso Not AplicaDevolucion Then Using ObjInv As New ClsInventarios If ObjInv.GetInv_Mov(Me.CveVenta, UsuarioActual.CveEmpresa) AndAlso ObjInv.DtResultados.Rows.Count > 0 Then Dim RowInv As DataRow = ObjInv.DtResultados.FiltroPrimero("CveConcepto IN (3,40)") If RowInv IsNot Nothing Then CveAlmacenDevolucion = RowInv("CveAlmacen").ToString().ToEntero() End If End If End Using End If 'If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso UsuarioActual.TienePermisoProceso(269) AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing", "Dev") Then ' ChkDevAlm.Checked = True ' ChkDevAlm.Enabled = False 'End If End If End If If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant", "Dev", "Egs") Then Dim sb As New StringBuilder() Dim sbExtra As New StringBuilder() sb.Append("La factura se encuentra en el siguiente estatus del SAT:
    ") Dim TotalT As Decimal = TxtTotal.Text.ToDecimal Dim RFCReceptor As String = "" If String.IsNullOrEmpty(Me.RFCReceptorVenta) Then RFCReceptor = LblRFC.Text.Trim 'SI SE FACTURO LA SUCURSAL DEL CLIENTE TOMA EL RFC DE ESTA If FacturarSucursal AndAlso Me.ClienteSucursal IsNot Nothing Then RFCReceptor = Me.ClienteSucursal.RFC End If Else RFCReceptor = Me.RFCReceptorVenta End If If Not UsuarioActual.Empresa.Funcionalidad(529) = "1" Then Dim SWatch As New Stopwatch SWatch.Start() Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, RFCReceptor, TotalT.ToString(), True) SWatch.Stop() Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000 SegundosRespuesta = SegundosRespuesta.ToEntero If SegundosRespuesta >= 5 Then Alert($"Los servicios de validacion del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "") End If If Vigencia IsNot Nothing Then If Vigencia.EsCancelable.ToUpper() = "NO CANCELABLE" Then DivRelacionadasCancelacion.Visible = True BtnCancelarDocumento.Visible = False DivMotivoCancelacion.Visible = False DivMotivoCancelacionTxt.Visible = False DivCanRem.Visible = False DivDevAlm.Visible = False Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion) If Relacionados IsNot Nothing Then If Relacionados.Codigo = 500 Then sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.") Else sbExtra.Append(Relacionados.Mensaje) Dim SbHijos As New StringBuilder() Dim SbPadres As New StringBuilder() 'If Relacionados.RelacionadosHijo IsNot Nothing Then ' For Each hijo In Relacionados.RelacionadosHijo ' SbHijos.AppendFormat("{0};", hijo.Uuid) ' Next ' If SbHijos.Length > 0 Then ' SbHijos.Remove(SbHijos.Length - 1, 1) ' End If 'End If If Relacionados.RelacionadosPadre IsNot Nothing Then For Each padre As Timbrado.RelacionadosPadre In Relacionados.RelacionadosPadre SbPadres.AppendFormat("{0};", padre.Uuid) Next If SbPadres.Length > 0 Then SbPadres.Remove(SbPadres.Length - 1, 1) End If End If Using ObjVentas As New ClsVentas 'If SbHijos.Length > 0 Then ' If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbHijos.ToString(), UsuarioActual.CveEmpresa) Then ' GvFacturasHijosCancelar.DataSource = ObjVentas.DtResultados.Copy() ' End If 'End If If SbPadres.Length > 0 Then If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then GvFacturasPadreCancelar.DataSource = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}") End If End If End Using 'GvFacturasHijosCancelar.DataBind() GvFacturasPadreCancelar.DataBind() End If End If End If If String.IsNullOrEmpty(Vigencia.EsCancelable) Then If UsuarioActual.Empresa.FacturaProduccion AndAlso Not String.IsNullOrEmpty(FolioFiscal) Then Alert("No se pudo encontrar el estatus de la factura en el SAT.", TipoMensaje.MsgAdvertencia) Exit Sub End If MostrarRemisionesCancelar() sb.Append("No encontrado
    ") sb.Append("Está seguro de cancelar el documento?.") Else 'GUARDA EL ESTADO DE CANCELACION If Vigencia.EsCancelable.ToUpper() = "CANCELABLE CON ACEPTACIÓN" Then Me.CveEstadoCancelacion = 2 ElseIf Vigencia.EsCancelable.ToUpper() = "CANCELABLE SIN ACEPTACIÓN" Then Me.CveEstadoCancelacion = 1 End If sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) If Vigencia.EsCancelable.ToUpper() <> "NO CANCELABLE" Then MostrarRemisionesCancelar() sb.Append("Está seguro de cancelar el documento?.") End If End If Else MostrarRemisionesCancelar() sb.Append("No encontrado
    ") sb.Append("Está seguro de cancelar el documento?.") End If Else MostrarRemisionesCancelar() sb.Append("No encontrado
    ") sb.Append("Está seguro de cancelar el documento?.") End If LblCancelarDocumento.Text = sb.ToString() If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If GvCancelarRemisiones.Rows.Cast(Of GridViewRow).Count(Function(x) x.RowType = DataControlRowType.DataRow) > 0 Then sbExtra.Append("
    *Las remisones relacionadas se van a cancelar con la factura") End If End If MostrarCondicionesCancelacion(sbExtra.ToString(), SaldoAlmacen) RegistraScript("$('#ModalCancelarDocumento').modal();") UpCancelarDocumento.Update() sb.Clear() 'ElseIf DdlTipoComprobante.SelectedValue.Contiene("Ped") Then ' Dim ObjVentas As New ClsVentas ' If ObjVentas.UpdateEstatusVenta(CveVenta, 22, UsuarioActual.CveEmpresa) Then ' Dim redirectString As String = String.Format("document.location.href=""/Ventas/Ventas.aspx?CveVenta={0}""", CveVenta) ' Alert("Pedido cancelado.", JSBtnAceptar:=redirectString) ' ', "document.location.href=""/Ventas/Ventas.aspx?CveVenta=" & CveVenta ' End If ' ObjVentas.Dispose() ElseIf DdlTipoComprobante.SelectedValue.Contiene("RNC") Then LblCancelarDocumento.Text = "¿Desea cancelar la remisión de nota de crédito?
    " Dim sbExtra As New StringBuilder Using ObjAcum As New ClsAcumuladores If ObjAcum.DistribuidorMovtosGet(Me.CveCliente, UsuarioActual.CveEmpresa, CveVentaRNCCargo:=Me.CveVenta, CveConcepto:=1) Then Dim DtBon As DataTable = ObjAcum.DtResultados.FiltraParametros("CveVentaBonificacion > 0", DistinctColumns:={"SerieFolioBonificacion", "CveVentaBonificacion"}) If DtBon IsNot Nothing AndAlso DtBon.Rows.Count > 0 Then sbExtra.Append("*Se cancelaran las siguientes remisiones de nota de crédito de bonificación.
    ") For Each RowBon As DataRow In DtBon.Rows sbExtra.AppendFormat("     {1}
    ", RowBon("CveVentaBonificacion"), RowBon("SerieFolioBonificacion")) Next DtBon.Dispose() End If End If End Using LbCancelarDescripcion.Text = sbExtra.ToString() DivRelacionadasCancelacion.Visible = False BtnCancelarDocumento.Visible = True DivMotivoCancelacion.Visible = False DivMotivoCancelacionTxt.Visible = False DivCanRem.Visible = False DivDevAlm.Visible = False UpCancelarDocumento.Update() RegistraScript("$('#ModalCancelarDocumento').modal();") Else CancelarDocumento() End If End Sub Private Sub MostrarRemisionesCancelar() If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Ing") AndAlso DivCanRem.Visible Then ChkCanRem.Checked = True ChkCanRem_CheckedChanged(ChkCanRem, EventArgs.Empty) ChkCanRem.Enabled = False If DivGvCancelarRemision.Visible Then For Each GvRow As GridViewRow In GvCancelarRemisiones.Rows If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCCheckBox("ChkCancelarRemision").Checked = True GvRow.FCCheckBox("ChkCancelarRemision").Enabled = False End If Next End If End If End Sub Protected Sub ChkDevAlm_CheckedChanged(sender As Object, e As EventArgs) MostrarCondicionesCancelacion() End Sub Protected Sub BtnCancelarDocumento_Click(sender As Object, e As EventArgs) CancelarDocumento() RegistraScript("$('#ModalCancelarDocumento').modal('hide');") End Sub 'Private Sub CancelarRefacturada() ' Dim CancelacionFecha As Date ' Dim ObjVentas As New ClsVentas() : ObjVentas.IniciaTransacSQL() ' Dim CancelacionAcuse As String = "" ' Dim Mensaje As String = "" ' Dim ObjCancelacion As New Timbrado ' Dim TotalT As Decimal = TxtTotal.Text.ToDecimal ' Dim RFCReceptor As String = LblRFC.Text.Trim ' Dim CvePACCancelacion As Integer = CvePAC ' Dim CveEstatus As Integer = 4 ' Try ' If FolioFiscal <> "" Then ' Dim resp = ObjCancelacion.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, TotalT, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion) ' If resp.Verificado Then ' 'Generamos el acuse y mandamos mail de con el acuse de cancelación - DF 13/01/2017 ' CancelacionFecha = ObjCancelacion.CancelacionFecha ' CancelacionAcuse = ObjCancelacion.CancelacionAcuse ' CveEstatus = 5 ' Else ' Alert("Los servicios de cancelación del SAT no se encuentran disponibles o presentan time out. Intente de nuevo en unos minutos.
    Origen del error: WebService www.sat.gob.mx", TipoMensaje.MsgError) ' Exit Sub ' End If ' Else ' CancelacionFecha = NowADS().Date ' CancelacionAcuse = "" ' End If ' If ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, CancelacionAcuse, CancelacionFecha, CveVenta, IdPoliza, CvePAC:=CvePACCancelacion) Then ' ObjVentas.Commit() ' Alert("El nuevo estatus se guardó correctamente") ' Else ' ObjVentas.RollBack() ' Alert("Ocurrió un error al intentar cancelar la factura") ' End If ' Catch ex As Exception ' ObjVentas.RollBack() ' Mensaje = "Ocurrio un error al Cancelar la factura" ' GuardaLog($"{ex.Message}") ' End Try ' ObjVentas.Dispose() 'End Sub Private Function DecodeBase64(ByVal strXMLCodificado As String) As String Try Dim decbuff As Byte() = Convert.FromBase64String(strXMLCodificado) Return System.Text.Encoding.UTF8.GetString(decbuff) Catch Return "" End Try End Function 'Private Sub ActualizaEstatusVentaCancelada(Optional CveEstatusCancelacion As Integer = 5) ' Me.CveEstatus = CveEstatusCancelacion ' Dim ObjVentas As New ClsVentas() ' If CveEstatusCancelacion = 5 Then ' Dim IDPoliza As Integer = -1 ' Dim ErrorCancelar As Boolean = False ' Dim MensajeError As String = "" ' Dim CvePACCancelacion As Integer = CvePAC ' Dim ObjAC As ClsContPAQi = Nothing ' ObjVentas.IniciaTransacSQL() ' Try ' If UsuarioActual.Empresa.UsaAC Then ' ObjAC = New ClsContPAQi(UsuarioActual.Empresa) : ObjAC.IniciaTransacSQL() ' IDPoliza = GenerarPolizaAC(ObjAC, True) ' If IDPoliza <= 0 Then ' ErrorCancelar = True ' MensajeError = "Ocurrió un error al generar la poliza de cancelación." ' End If ' End If ' Dim solicitud = New WSGF.Service1SoapClient() ' Dim acuse = solicitud.GetAcuse(UsuarioActual.Empresa.RFC, "rene.molina@adsistemas.mx", "rene2018", FolioFiscal) ' If acuse.Estado = 0 Then ' Dim xmlAcuse = New System.Xml.XmlDocument() ' xmlAcuse.LoadXml(DecodeBase64(acuse.CfdiB64)) ' Dim CancelacionAcuse = xmlAcuse.GetElementsByTagName("SignatureValue")(0).InnerText ' Dim CancelacionFecha = xmlAcuse.SelectSingleNode("Acuse").Attributes("Fecha").Value.ToDate() ' If Not ObjVentas.UpdateEstatusFactura(Me.CveEstatus, FolioFiscal, CancelacionAcuse, CancelacionFecha, CveVenta, IDPoliza, CvePAC:=CvePACCancelacion) Then ' ErrorCancelar = True ' MensajeError = "Ocurrió un error al guardar el estatus de cancelación." ' End If ' Else ' 'sino se pudo sacar el acuse, porque se canceló en el SAT, debe de marcarlo ' End If ' Catch ex As Exception ' ErrorCancelar = True ' Alert("Ocurrió un error al actualizar el estatus", TipoMensaje.MsgError) ' Finally ' If Not ErrorCancelar Then ' ObjVentas.Commit() ' If Me.CveEstatus = 5 Then ' Dim MensajeAlert As New StringBuilder ' MensajeAlert.Append("El Documento se canceló correctamente.") ' MensajeAlert.Append($"
    Imprimir Acuse") ' MensajeAlert.Append("

    ¿Desea enviar el Acuse de Cancelación al Cliente?") ' Alert(MensajeAlert.ToString(), TipoMensaje.MsgConfirmacion, "BtnEnviarMailCancelacion()", TextoConfirmacion:="    Si    ", TextoCancelacion:="    No    ") ' Else ' Alert("El documento se canceló exitosamente.", TipoMensaje.MsgInformacion, JSBtnAceptar:="location.reload();") ' End If ' LbCancelarDocumento.Enabled = False ' If ObjAC IsNot Nothing Then ObjAC.Commit() ' Else ' Alert(MensajeError, TipoMensaje.MsgError) ' ObjVentas.RollBack() ' If ObjAC IsNot Nothing Then ObjAC.RollBack() ' End If ' ObjVentas.Dispose() ' If ObjAC IsNot Nothing Then ObjAC.Dispose() ' End Try ' ElseIf CveEstatusCancelacion = 20 Then ' If ObjVentas.UpdateEstatusFactura(CveEstatus, FolioFiscal, "", NowADS(), CveVenta) Then ' Alert("El estatus de la factura fue cambiado a 'Cancelación en Proceso'") ' End If ' ObjVentas.Dispose() ' End If 'End Sub Private Sub CancelarDocumento(Optional EsRefacturacion As Boolean = False) Dim LigaRedirigir As String = "" 'Si es cancelacion de una refactura ignoramos las condiciones 'If Me.CveEstatus = 13 Then ' CancelarRefacturada() 'End If Dim ObjFacturaCancelacion As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa, EsCancelacion:=True, VerificaAlmacen:=True) Try Dim resp As Modelos.Factura.MCancelacionVentaMensaje = Nothing Dim strMensaje As New StringBuilder() If ObjFacturaCancelacion IsNot Nothing AndAlso ObjFacturaCancelacion.CveVenta > 0 Then Dim SWatch As New Stopwatch SWatch.Start() If EsRefacturacion Then Dim ValidarSAT As Boolean = True If UsuarioActual.Empresa.Funcionalidad(529) = "1" Then ValidarSAT = False End If 'Dim msgBitacora As String = $"Motivo de refacturación: {TxtMotivoRefac.Text}" 'Dim ObjE As New ClsOIEventos() 'ObjE.AddEventoBitacora(msgBitacora, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) 'ObjE.Dispose() resp = ObjFacturaCancelacion.CancelarPorRefacturacion(DdlMotivoRefacturacion.SelectedValue.ToEntero(), TxtMotivoRefac.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ValidarSAT:=ValidarSAT) strMensaje.Append(resp.Mensaje) Else Dim ListaRemisionesCancelar As New List(Of Integer) If ChkCanRem.Checked Then For Each Gvr As GridViewRow In GvCancelarRemisiones.Rows If Gvr.FCCheckBox("ChkCancelarRemision").Checked Then ListaRemisionesCancelar.Add(Gvr.DataKey("CveVenta").ToEntero()) End If Next End If ObjFacturaCancelacion.CveAlmacenDevolucion = CveAlmacenDevolucion If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Rem", "Dev") Then ChkDevAlm.Checked = True End If If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso ObjFacturaCancelacion.TipoDocto = "Rem" Then ChkDevAlm.Checked = True End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Rem", "Ing") Then ChkDevAlm.Checked = True End If 'LOS PEDIDOS SE DEBE CANCELAR EN UN PROCESO DISTINTO If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso ObjFacturaCancelacion.TipoDocto = "Ped" Then ChkDevAlm.Checked = True End If Dim CancelacionPagos = OpcionesCancelacionPagos.SinPagos If (UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1") AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem", "Ant") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then CancelacionPagos = OpcionesCancelacionPagos.ConPagos_CancelarIE End If If (UsuarioActual.CveEmpresa = 188) AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then CancelacionPagos = OpcionesCancelacionPagos.ConPagos_GenerarIxC End If 'PARA GENERAR LA DEVOLUCION DE ALMACEN SIN ESPERAR LA ACEPTACION DEL SAT Dim GenerarDevolucionAnticipada As Boolean = False 'If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem") AndAlso Not EsRefacturacion AndAlso ObjFacturaCancelacion.Pagado > 0 Then ' CancelacionPagos = OpcionesCancelacionPagos.ConPagos_GenerarIxC 'End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Rem", "Dev") AndAlso Not EsRefacturacion Then If ChkDevAlm.Checked Then GenerarDevolucionAnticipada = True End If If ObjFacturaCancelacion.TipoDocto.Contiene("Ing") Then For Each Gvr As GridViewRow In GvCancelarRemisiones.Rows ListaRemisionesCancelar.Add(Gvr.DataKey("CveVenta").ToEntero()) Next End If End If Dim ValidarSAT As Boolean = True Dim CveEstatusFacturaAsignado As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(529) = "1" Then ValidarSAT = False Dim diasTimbrado As Decimal = DateDiff(DateInterval.Day, ObjFacturaCancelacion.FechaCP, ClsPaginas.NowADS()) 'CANCELACION SIN ACEPTACION Me.CveEstadoCancelacion = 2 'CANCELACION CON ACEPTACION If ObjFacturaCancelacion.Total < 1000D OrElse diasTimbrado <= 1 OrElse ObjFacturaCancelacion.Cliente.RFC.Contiene("XAXX010101000", "XEXX010101000") Then Me.CveEstadoCancelacion = 1 End If ObjFacturaCancelacion.CveEstadoCancelacion = Me.CveEstadoCancelacion CveEstatusFacturaAsignado = 4 End If resp = ObjFacturaCancelacion.CancelarFactura(If(ChkDevAlm.Checked, 1, 0), ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion, ForzarDevolucion:=GenerarDevolucionAnticipada, CancelacionPagos:=CancelacionPagos, ValidarSAT:=ValidarSAT, CveEstatusFacturaAsignado:=CveEstatusFacturaAsignado) strMensaje.Append(resp.Mensaje) Dim DtBonificaciones As DataTable = Nothing 'SI ES RNC DE CARGO DEBE CANCELAR LAS BON If Not resp.HuboError AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("RNC") AndAlso ObjFacturaCancelacion.Num1 = 1 Then Using ObjAcum As New ClsAcumuladores If ObjAcum.DistribuidorMovtosGet(ObjFacturaCancelacion.CveCliente, UsuarioActual.CveEmpresa, CveVentaRNCCargo:=ObjFacturaCancelacion.CveVenta, CveConcepto:=1) Then DtBonificaciones = ObjAcum.DtResultados.FiltraParametros("CveVentaBonificacion > 0", DistinctColumns:={"CveVentaBonificacion"}) End If End Using If DtBonificaciones IsNot Nothing AndAlso DtBonificaciones.Rows.Count > 0 Then For Each RowBon As DataRow In DtBonificaciones.Rows Try 'VERIFICA SI TIENE RNC DE BONIFICACION Dim Bon As New Modelos.Factura(UsuarioActual, RowBon("CveVentaBonificacion").ToString().ToEntero(), UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Dim respBon As Modelos.Factura.MCancelacionVentaMensaje = Bon.CancelarFactura(0, ListaRemisionesCancelar, CveMotivoCancelacion:=DdlMotivoCancelacion.SelectedValue.ToEntero(), Motivo:=TxtMotivoCancelacion.Text.Trim(), CveEstadoCancelacion:=Me.CveEstadoCancelacion) If respBon.HuboError Then strMensaje.AppendFormat("
    Ocurrió un error al cancelar la remisión de NC de bonificación {0} .", Bon.SerieFolio) Else strMensaje.AppendFormat("
    La remisión de nota de credito de bonificación {0} fue cancelada correctamente.", Bon.SerieFolio) End If strMensaje.AppendFormat("
    {0}", resp.Mensaje) Catch ex As Exception OnError("Ocurrió un error al cancelar la bonificación", ex) strMensaje.Append("
    Ocurrió un error al cancelar la bonificación") End Try Next DtBonificaciones.Dispose() End If End If End If SWatch.Stop() Dim SegundosRespuesta As Double = SWatch.ElapsedMilliseconds / 1000 SegundosRespuesta = SegundosRespuesta.ToEntero If SegundosRespuesta >= 5 AndAlso ObjFacturaCancelacion.TipoDocto.Contiene("Ing", "Ant", "Dev", "Egs") Then Alert($"Los servicios de cancelación del SAT presentan lentitud en la respuesta [{ SegundosRespuesta } s].", TipoMensaje.ToastAdventencia, "") End If If resp.HuboError Then Alert(strMensaje.ToString(), resp.TipoMensaje, JSBtnAceptar:="BtnRefrescarPagina();") Else If resp.CveEstatus = 5 AndAlso Not EsRefacturacion Then Alert(strMensaje.ToString(), resp.TipoMensaje, JSBtnAceptar:=$"BtnEnviarMailCancelacion({CveVenta});", TextoConfirmacion:="    Si    ", TextoCancelacion:="    
    No    ") Else If EsRefacturacion Then If resp.CveEstatus = 20 Then LigaRedirigir = $"/Ventas/RepCancelacionesPorRespuesta.aspx?CveVenta={CveVenta}" ElseIf resp.CveEstatus.Contiene(4, 5, 23) Then LigaRedirigir = $"Ventas.aspx?CveDevolucion={CveVenta}&NuevaFactura=1" Else Alert(strMensaje.ToString(), resp.TipoMensaje, JSBtnAceptar:="BtnRefrescarPagina();") End If Else Alert(strMensaje.ToString(), resp.TipoMensaje, JSBtnAceptar:="BtnRefrescarPagina();") End If End If End If Else Alert("Ocurrió un error al generar la cancelación", TipoMensaje.MsgError) End If Catch ex As Exception OnError("Ocurrió un error al cancelar", ex) End Try ObjFacturaCancelacion.Dispose() UpEstatus.Update() If Not String.IsNullOrEmpty(LigaRedirigir) Then Response.Redirect(LigaRedirigir) End If End Sub #End Region #Region "CiclosComerciales" Private Sub CargaCicloComercialURL() Dim ObjContratos As New ClsContratos Dim huboerror As Boolean = False Dim SubProyecto As String = "" Dim CveSubProyecto As Integer = -1 Dim Proyecto As String = "" If ObjContratos.CicloComercialGet(-1, -1, CveCicloComercial, UsuarioActual.CveEmpresa, MinFecha, MaxFecha, -1) Then If ObjContratos.DtResultados.Rows.Count > 0 Then Dim i As Integer = 0 Dim PU As Decimal = 0 Dim Descuento As Double = 0 Dim CveUM As Integer = 0 Dim UMM As String = "No Aplica" Dim tCvePS As Integer = 0 Dim TipoPS As Integer = 0 Dim tCveClasif As Integer = -1 Dim Clasif As String = "Sin Clasificación" Dim tPSCodigo As String = "-" Dim tPSDescripcion As String = "-" Dim PSS As String = "" Dim Obs As String = "" Dim SubTotalTemp As Decimal = 0 'Cargamos los datos del Cliente DtContratos = ObjContratos.DtResultados If ObjContratos.DtResultados(0)("IVA").ToString().ToDecimal > 0 Then ViewState("IVA") = ObjContratos.DtResultados(0)("IVA").ToString().ToDecimal End If ViewState("CveCliente") = ObjContratos.DtResultados(0)("CveCliente").ToString().ToEntero() ViewState("CveContrato") = ObjContratos.DtResultados(0)("CveContrato").ToString().ToEntero() HdnCveCliente.Value = ObjContratos.DtResultados(0)("CveCliente").ToString() CargaCliente(CveCliente) DdlTipoComprobante.Items.Insert(0, New ListItem("Ingresos", "Ing")) DdlTipoComprobante.SelectedValue = "Ing" DdlTipoComprobante.Enabled = False DdlAlmacenAsignado.Enabled = False 'CARGO DATOS DE PS/CONTRATO SubProyecto = ObjContratos.DtResultados(0)("SubProyectoContrato").ToString() CveSubProyecto = ObjContratos.DtResultados(0)("CveSubProyecto").ToString().ToEntero() Proyecto = ObjContratos.DtResultados(0)("ProyectoContrato").ToString() DdlSubProyectoDatos.SelectedValueExist(CveSubProyecto) ContratoDetalles.Visible = True DivEstimaciones.Visible = False DdlContratosModal.DataSource = DtContratos DdlContratosModal.DataBind() DdlContratosModal.Items.Insert(0, New ListItem("Seleccione", "0")) UPEstimaciones.Update() Tab.ActiveTab = TabE TabGenerales.Enabled = False Updatetabs.Update() DdlContratosModal.DataSource = ObjContratos.DtResultados DdlContratosModal.SelectedValue = ObjContratos.DtResultados(0)("CveContrato").ToString() DdlContratosModal_SelectedIndexChanged(Nothing, Nothing) If GvContratoDetalles.HeaderRow IsNot Nothing Then If GvContratoDetalles.HeaderRow.Cells.Count > 0 Then GvContratoDetalles.HeaderRow.Cells(1).Style.Add("display", "none") End If End If TxtObsFact.Text = PlantillaContrato(ObjContratos.DtResultados(0)("ObservacionesGenerales").ToString()) BtnCargarContratoDetalles_Click(Nothing, Nothing) LbAgregar.Visible = True UpPS.Update() 'AplicaGastoContrato = If(ObjContratos.DtResultados(0)("CveContratoTipo").ToString().Contiene("9", "10", "13"), True, False) 'Arrendamiento, Servicios De Impresion, Financiamiento Else Alert("Ocurrió un error al carga la información del contrato. Por favor vuelva a intentar.", TipoMensaje.MsgError) huboerror = True End If Else Alert("Ocurrió un error al carga la información del contrato. Por favor vuelva a intentar.", TipoMensaje.MsgError) huboerror = True End If ObjContratos.Dispose() End Sub Private Function PlantillaContrato(texto As String) As String Dim Plantilla As String = texto If Plantilla.Contains("{DIA}") Then Plantilla = Plantilla.Replace("{DIA}", NowADS().Day.ToString()) End If If Plantilla.Contains("{MES}") Then Dim fecha As DateTime = NowADS() Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat Dim nombreMes As String = formatoFecha.GetMonthName(fecha.Month).ToUpper() Plantilla = Plantilla.ToString().Replace("{MES}", nombreMes) End If If Plantilla.Contains("{AÑO}") Then Plantilla = Plantilla.Replace("{AÑO}", NowADS().Year.ToString()) End If If Plantilla.Contains("{TC}") Then Plantilla = Plantilla.Replace("{TC}", GlobalTipoCambio(NowADS()).FormatoNumero) End If If Plantilla.Contains("{MESANTERIOR}") Then Dim fecha As DateTime = NowADS().AddMonths(-1) Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat Dim nombreMes As String = formatoFecha.GetMonthName(fecha.Month).ToUpper() Plantilla = Plantilla.ToString().Replace("{MESANTERIOR}", nombreMes) End If If Plantilla.Contains("{INICIOMESANTERIOR}") Then Dim fecha As DateTime = NowADS().AddMonths(-1) Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat Dim nombreMes As String = formatoFecha.GetMonthName(fecha.Month).ToUpper() Dim mesAnterior As String = String.Format("01 {0} {1}", nombreMes, fecha.Year) Plantilla = Plantilla.ToString().Replace("{INICIOMESANTERIOR}", mesAnterior) End If If Plantilla.Contains("{FINMESANTERIOR}") Then Dim fecha As DateTime = NowADS().AddMonths(-1) Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat Dim nombreMes As String = formatoFecha.GetMonthName(fecha.Month).ToUpper() Dim LastDayOfMonth As Integer = DateTime.DaysInMonth(fecha.Year, fecha.Month) Dim mesAnterior As String = String.Format("{0} {1} {2}", LastDayOfMonth, nombreMes, fecha.Year) Plantilla = Plantilla.ToString().Replace("{FINMESANTERIOR}", mesAnterior) End If Return Plantilla End Function #End Region #Region "DESCARGAR E IMPRIMIR LISTADO" Public Sub DescargarFormato() Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoVentas.xlsx" Dim Archivo As New IO.FileInfo(Directorio) If Archivo.Exists Then Response.Clear() Response.ClearHeaders() Response.ClearContent() Response.AddHeader("Content-Disposition", "attachment; filename=" + Archivo.Name) Response.AddHeader("Content-Length", Archivo.Length.ToString()) Response.ContentType = "text/plain" Response.Flush() Response.TransmitFile(Archivo.FullName) Response.End() End If End Sub Public Sub DescargarFormatoCotizaciones() Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & "Empresas\Grales\Formatos\FormatoCotizaciones.xlsx" Dim Archivo As New IO.FileInfo(Directorio) If Archivo.Exists Then Response.Clear() Response.ClearHeaders() Response.ClearContent() Response.AddHeader("Content-Disposition", "attachment; filename=" + Archivo.Name) Response.AddHeader("Content-Length", Archivo.Length.ToString()) Response.ContentType = "text/plain" Response.Flush() Response.TransmitFile(Archivo.FullName) Response.End() End If End Sub Public Sub LbDescargarExcel_Click(sender As Object, e As EventArgs) Handles LbDescargarExcelVentas.Click DescargarFormato() End Sub Public Sub LbDescargarExcelCotizaciones_Click(sender As Object, e As EventArgs) Handles LbDescargarExcelCotizaciones.Click DescargarFormatoCotizaciones() End Sub Private Sub CargarArchivo(Ruta As String, FileName As String, Tipo As String, FileUrl As String) Dim dt As New DataTable Dim ErrorArchivo As Boolean = False Dim n As Integer = 0 dt = ReadExcelFile(FileUrl, True) If Not ErrorArchivo Then If Not dt.Columns(0).ColumnName = "Cantidad" Then Alert("El nombre de la primera columna debe ser 'Cantidad'.Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(1).ColumnName = "Código" Then Alert("El nombre de la segunda columna debe ser 'Código'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(2).ColumnName = "Codigo Barras" Then Alert("El nombre de la tecera columna debe ser 'Codigo Barras'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(3).ColumnName = "Producto/Servicio" Then Alert("El nombre de la cuarta columna debe ser 'Producto/Servicio'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(4).ColumnName = "UM" Then Alert("El nombre de la quinta columna debe ser 'U.M'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(5).ColumnName = "Precio Unitario" Then Alert("El nombre de la sexta columna debe ser 'Precio Unitario'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(6).ColumnName = "Proyecto" Then Alert("El nombre de la séptima columna debe ser 'Proyecto'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(7).ColumnName = "Observaciones" Then Alert("El nombre de la octava columna debe ser 'Observaciones'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(8).ColumnName = "Tiempo Entrega" Then Alert("El nombre de la novena columna debe ser 'Tiempo Entrega'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If dt.TableName = "Datos" Dim DtSubProyecto As DataTable = GlobalDTSubProyectos(UsuarioActual.CveEmpresa) DtSubProyecto.CaseSensitive = False If Not ErrorArchivo Then NumRow = 1 Dim RowNoEncontrados As String = "" Dim NumAgregados As Integer = 0 For Each Row As DataRow In dt.Rows NumAgregados = NumAgregados + 1 Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal Dim UM As String = Row("UM").ToString() Dim Codigo As String = Row("Código").ToString().Trim.ToUpper Dim CodigoBarras As String = Row("Codigo Barras").ToString().Trim.ToUpper Dim ProductoServicio As String = Row("Producto/Servicio").ToString().Trim.ToUpper Dim PrecioUnitario As Decimal = Row("Precio Unitario").ToString().ToDecimal Dim Proyecto As String = Row("Proyecto").ToString().Trim.ToUpper Dim Observaciones As String = Row("Observaciones").ToString().Trim.ToUpper Dim TiempoEntrega As String = Row("Tiempo Entrega").ToString() Dim CvePS As Integer = 0 Dim CveClasificacion As Integer = 0 Dim CveUM As Integer = 0 Dim CodigoPS As Integer = 0 Dim DrProyecto As DataRow Dim SubProyecto As String = "" Dim CveProyecto As Integer = 0 Dim CveSubProyecto As Integer = 0 NumRow = NumRow + 1 If Proyecto <> "" Then DrProyecto = DtSubProyecto.FiltroPrimero($"(SubProyecto) = '{Proyecto}'") If DrProyecto IsNot Nothing Then CveSubProyecto = DrProyecto("CveSubProyecto").ToString().ToEntero() CveProyecto = DrProyecto("CveProyecto").ToString().ToEntero() SubProyecto = DrProyecto("SubProyecto").ToString() End If Else CveProyecto = -1 CveSubProyecto = -1 End If If CveSubProyecto <= 0 Then RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Proyecto, NumRow, "Proyecto", RowNoEncontrados) End If If CveSubProyecto > 0 Then If Codigo <> "" Then Using ObjPS As New ClsProductosServicios If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, Codigo:=Codigo) Then If ObjPS.CvePS > 0 Then CvePS = ObjPS.CvePS CveUM = ObjPS.CveUnidadMedida CveClasificacion = ObjPS.CveClasificacion Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) End If Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) End If End Using ElseIf CodigoBarras <> "" Then Using ObjPS As New ClsProductosServicios If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, CodigoBarras:=CodigoBarras) Then If ObjPS.CvePS > 0 Then CvePS = ObjPS.CvePS CveUM = ObjPS.CveUnidadMedida CveClasificacion = ObjPS.CveClasificacion Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) End If Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) End If End Using ElseIf ProductoServicio <> "" Then Using ObjPS As New ClsProductosServicios If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, CodigoBarras:=CodigoBarras) Then If ObjPS.CvePS > 0 Then CvePS = ObjPS.CvePS CveUM = ObjPS.CveUnidadMedida CveClasificacion = ObjPS.CveClasificacion Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) End If Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) End If End Using Else RowNoEncontrados &= "<\BR>    - En la fila " & NumRow & " no se especificó código, código de barras ó descripción." End If End If If CvePS > 0 Then If PrecioUnitario <= 0 Then Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) PrecioUnitario = ObjPrecioSugerido.PrecioSugerido End If AgregarProductoServicio(Cantidad, CveUM, UM, -1, "", CvePS, HdnPS.Value, Observaciones, PrecioUnitario, HdnDescuento.Value.ToDecimal, CveProyecto, Proyecto, CveSubProyecto, SubProyecto, TiempoEntrega:=TiempoEntrega) End If Next CalculaTotalesVenta() If RowNoEncontrados.Length > 0 Then Alert("Los siguientes productos o servicios no se encontraron en la Base de Datos.<\BR>" & RowNoEncontrados, TipoMensaje.MsgAdvertencia) Else Alert("Se cargaron " & NumAgregados & " productos o servicios correctamente.") End If End If End If dt.Dispose() End Sub Private Sub CargarArchivoCotizacion(Ruta As String, FileName As String, Tipo As String, FileUrl As String) Dim dt As New DataTable Dim ErrorArchivo As Boolean = False Dim n As Integer = 0 dt = ReadExcelFile(FileUrl, True) If Not ErrorArchivo Then If Not dt.Columns(0).ColumnName = "Cantidad" Then Alert("El nombre de la primera columna debe ser 'Cantidad'.Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(1).ColumnName = "Código" Then Alert("El nombre de la segunda columna debe ser 'Código'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(2).ColumnName = "Codigo Barras" Then Alert("El nombre de la tecera columna debe ser 'Codigo Barras'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(3).ColumnName = "Precio Unitario" Then Alert("El nombre de la sexta columna debe ser 'Precio Unitario'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If If Not dt.Columns(4).ColumnName = "Descuento" Then Alert("El nombre de la sexta columna debe ser 'Descuento'. Favor de corregirlo", TipoMensaje.MsgError) Exit Sub End If dt.TableName = "Datos" Dim DtSubProyecto As DataTable = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()) If Not ErrorArchivo Then NumRow = 1 Dim RowNoEncontrados As String = "" Dim NumAgregados As Integer = 0 For Each Row As DataRow In dt.Rows NumAgregados = NumAgregados + 1 Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim Codigo As String = Row("Código").ToString().Trim.ToUpper() Dim CodigoBarras As String = Row("Codigo Barras").ToString().Trim.ToUpper() Dim PrecioUnitario As Decimal = Row("Precio Unitario").ToString().ToDecimal() Dim Descuento As Decimal = Row("Descuento").ToString().ToDecimal() Dim Proyecto = "" Dim CvePS As Integer = 0 Dim CveClasificacion As Integer = 0 Dim CveUM As Integer = 0 Dim UM As String = "" Dim PS As String = "" Dim DrProyecto As DataRow = DtSubProyecto.FiltroPrimero("") Dim SubProyecto As String = "" Dim CveProyecto As Integer = 0 Dim CveSubProyecto As Integer = 0 NumRow = NumRow + 1 If DrProyecto IsNot Nothing Then CveSubProyecto = DrProyecto("CveSubProyecto").ToString().ToEntero() CveProyecto = DrProyecto("CveProyecto").ToString().ToEntero() SubProyecto = DrProyecto("SubProyecto").ToString() Proyecto = DrProyecto("Proyecto").ToString() End If 'If CveSubProyecto <= 0 Then ' RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Proyecto, NumRow, "Proyecto", RowNoEncontrados) 'End If If CveSubProyecto > 0 Then If Codigo <> "" Then Using ObjPS As New ClsProductosServicios If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, Codigo:=Codigo) Then If ObjPS.CvePS > 0 Then CvePS = ObjPS.CvePS PS = ObjPS.PS CveUM = ObjPS.CveUnidadMedida CveClasificacion = ObjPS.CveClasificacion Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) End If Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) End If End Using ElseIf CodigoBarras <> "" Then Using ObjPS As New ClsProductosServicios If ObjPS.GetPS(-1, -1, UsuarioActual.CveEmpresa, CodigoBarras:=CodigoBarras) Then If ObjPS.CvePS > 0 Then CvePS = ObjPS.CvePS PS = ObjPS.PS CveUM = ObjPS.CveUnidadMedida CveClasificacion = ObjPS.CveClasificacion Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>", Codigo, NumRow, "Codigo", RowNoEncontrados) End If Else RowNoEncontrados = String.Format("{3}    - No se encontró '{0}' en la fila {1}, columna '{2}'<\BR>(NoBD)", Codigo, NumRow, "Codigo", RowNoEncontrados) End If End Using RowNoEncontrados &= "<\BR>    - En la fila " & NumRow & " no se especificó código, código de barras ó descripción." End If End If If CvePS > 0 Then If PrecioUnitario <= 0 Then Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) PrecioUnitario = ObjPrecioSugerido.PrecioSugerido End If AgregarProductoServicio(Cantidad, CveUM, UM, -1, "", CvePS, PS, "", PrecioUnitario, Descuento, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) End If Next CalculaTotalesVenta() If RowNoEncontrados.Length > 0 Then Alert("Los siguientes productos o servicios no se encontraron en la Base de Datos.<\BR>" & RowNoEncontrados, TipoMensaje.MsgAdvertencia) Else Alert("Se cargaron " & NumAgregados & " productos o servicios correctamente.") End If End If End If dt.Dispose() End Sub Private Sub BtnCargaExcel_Click(sender As Object, e As EventArgs) Handles BtnCargaExcel.Click If TxtExcel.getfiles().Archivos.Count > 0 Then Dim file As Archivo = TxtExcel.getfiles().Archivos(0) Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & file.path Dim Tipo As String = If(file.Extension.Contiene("xlsx", "xlsx", "xlsm", "xlsb"), "EXCEL", "CSV") CargarArchivo(Directorio, file.filename, Tipo, file.FileUrl) Else Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError) End If End Sub Private Sub BtnCargarExcelCotizaciones_Click(sender As Object, e As EventArgs) Handles BtnCargarExcelCotizaciones.Click If TxtExcelCotizaciones.getfiles().Archivos.Count > 0 Then Dim file As Archivo = TxtExcelCotizaciones.getfiles().Archivos(0) Dim Directorio As String = ModExtensiones.DirectorioBaseEmpresas & file.path Dim Tipo As String = If(file.Extension.Contiene("xlsx", "xlsx", "xlsm", "xlsb"), "EXCEL", "CSV") CargarArchivoCotizacion(Directorio, file.filename, Tipo, file.FileUrl) Else Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError) End If End Sub 'Private dtps As DataTable = Nothing 'Private Function GetPS(Opt As String, Valor As String) As String ' Dim StrReturn As String = String.Empty ' Dim CvePS As Integer = 0 ' If dtps Is Nothing Then dtps = GlobalDTPS(UsuarioActual.CveEmpresa) ' CvePS = dtps.FiltroPrimeroValor("CvePS", Opt & " = '" & Valor & "'").ToString().ToEntero() ' If CvePS > 0 Then ' StrReturn = "True|" & CvePS.ToString() ' Else ' StrReturn = "False|    - No se encontró " & Valor & " en la fila " & NumRow & ", columna " & Opt ' End If ' Return StrReturn 'End Function #End Region #Region "P E D I D O S" Private Sub CargaNotificacionContrato() Dim ObjContratos As New ClsContratos If ObjContratos.GetContratos(CveContrato, UsuarioActual.CveEmpresa) Then If ObjContratos.DtResultados IsNot Nothing AndAlso ObjContratos.DtResultados.Rows.Count > 0 Then CorreoNotificacionPedDev = ObjContratos.DtResultados(0)("CorreoNotificacionPedDev").ToString() End If End If ObjContratos.Dispose() End Sub Private Sub EnviarCorreoDevPed() Try Dim Body As String = GeneraCorreoDevPed() Dim Asunto As String = $"SIG - Favor de surtir el siguiente {DdlTipoComprobante.SelectedItem.Text}" Dim Hilo As New System.Threading.Thread(Sub() MandaCorreoDevPed(CorreoNotificacionPedDev, Asunto, Body)) Hilo.Start() Catch ex As Exception OnError($"Ocurrió error al mandar el correo de solicitud de {DdlTipoComprobante.SelectedItem.Text}", ex) End Try End Sub Private Sub MandaCorreoDevPed(Para As String, Asunto As String, Body As String) Dim Mail As New ClsSisMail() Mail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Body) End Sub Private Function GeneraCorreoDevPed() As String Dim strBody As New StringBuilder strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat("
    Favor de surtir el siguiente {0}

    ", DdlTipoComprobante.SelectedItem.Text) strBody.AppendFormat("
    Datos de {0} ", DdlTipoComprobante.SelectedItem.Text) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", ObjFactura.SerieFolio) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", UsuarioActual.Empresa.Empresa) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", LblCliente.Text) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", DdlSubProyectoDatos.SelectedItem.Text) strBody.Append(" ") strBody.Append(" ") strBody.AppendFormat(" ", TxtFecha.Text) strBody.Append(" ") strBody.Append("
    Serie-Folio:{0}
    Empresa:{0}
    Cliente:{0}
    Sucursal:{0}
    Fecha:{0}
    ") strBody.Append("
    ") strBody.Append("
    ") 'Cargo el detalle strBody.Append("
    ") strBody.Append("
    ") strBody.Append(" Productos/Servicios ") strBody.Append(" ") strBody.Append(" ") For Each dr As DataRow In TmpDT.Rows strBody.AppendFormat("", dr("Cantidad").ToString().FormatoNumero(), dr("UM").ToString(), dr("PS").ToString(), dr("Obs").ToString(), dr("SubProyecto").ToString(), dr("PU").ToString().FormatoNumero()) Next strBody.Append("
    CantidadUnidadProducto/ServicioNo. SerieProyectoPrecio
    {0}{1}{2}{3}{4}{5}
    ") strBody.Append("
    ") strBody.Append("
    ") strBody.Append("") Return strBody.ToString() End Function #End Region '#Region " CANCELAR PEDIDO " ' Protected Sub LBCancelarPedido_Click(sender As Object, e As EventArgs) ' Dim ObjVentas As New ClsVentas ' If ObjVentas.CancelarPedido(CveVenta, UsuarioActual.CveEmpresa) Then ' Alert("El pedido se canceló correctamente.", TipoMensaje.MsgInformacion) ' 'DdlEstatus.Items.Clear() ' 'DdlEstatus.Items.Insert(0, New ListItem(GlobalDTEstatusFactura.FiltroPrimeroValor("EstatusFactura", "CveEstatusFactura = 14"), "14")) ' 'DdlEstatus.SelectedValue = "14" ' 'DdlEstatus.DataBind() ' 'DdlEstatus.Enabled = False ' CveEstatus = 14 ' UpEstatus.Update() ' End If ' ObjVentas.Dispose() ' End Sub '#End Region #Region "D E V O L U C I O N D E P E D I D O " Private Sub CargaFacturaDevolucionPedido() Dim CveVenta As Integer = Me.CveVenta Dim MovInv As Integer = ViewState("MovInv").ToString().ToEntero() Dim ObjVentas As New ClsVentas() Dim ObjInventarios As New ClsInventarios If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados IsNot Nothing AndAlso ObjVentas.DtResultados.Rows.Count > 0 Then Dim DbRowVenta As DataRow = ObjVentas.DtResultados.Rows(0) 'CargaCliente Dim CveCliente As Integer = DbRowVenta("CveCliente").ToString().ToEntero() If UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 77 AndAlso Not CveCliente.Contiene(10450, 10460, 10458) Then Exit Sub ElseIf UsuarioActual.CveEmpresa = 2 AndAlso UsuarioActual.CveUsuario = 21 AndAlso Not CveCliente.Contiene(27448) Then Exit Sub End If HdnCveCliente.Value = CveCliente.ToString() ViewState("CveCliente") = CveCliente CargaCliente(CveCliente, -1) 'Estatus activo, se requiere para cargar una factura en la que el cliente a sido eliminado TxtFecha.Text = NowADS().ToShortDateString 'TxtSubTotal.Text = DbRowVenta("SubTotal").ToString().FormatoNumero(2) 'LblDescuentos.Text = DbRowVenta("Descuento").ToString().FormatoNumero(2) 'LblAmortizacion.Text = DbRowVenta("Amortizacion").ToString().FormatoNumero(2) 'TxtSubTotal2.Text = (TxtSubTotal.Text.Replace(",", "").Trim.Trim.ToDouble - LblDescuentos.Text.Replace(",", "").Trim.Trim.ToDouble - LblAmortizacion.Text.Replace(",", "").Trim.Trim.ToDouble).FormatoNumero(2) 'TxtIVA.Text = DbRowVenta("IVA").ToString().FormatoNumero(2) 'TxtRetIVA.Text = DbRowVenta("RetIVA").ToString().FormatoNumero(2) 'TxtRetISR.Text = DbRowVenta("RetISR").ToString().FormatoNumero(2) 'TxtIEPS.Text = DbRowVenta("IEPS").ToString().FormatoNumero(2) CveContrato = DbRowVenta("CveContrato").ToString().ToEntero() TxtMotivoDescuento.Text = DbRowVenta("MotivoDescuento").ToString() TxtObsFact.Text = DbRowVenta("Observaciones").ToString() HdnIVAOriginal.Value = TxtIVA.Text TxtPedidoContrato.Text = DbRowVenta("PedidoContrato").ToString() TxtPedidoContrato.Enabled = False TxtOrdenCompra.Text = DbRowVenta("OrdenCompra").ToString() TxtOrdenCompra.Enabled = False TxtObsAlmacen.Text = DbRowVenta("ObservacionesAlmacen").ToString() TxtFechaEjecucion.Text = DbRowVenta("FechaEjecucion").ToString().ToDateTime.ToString("dd/MM/yyyy") 'DdlSucursalEjecucion.SelectedValueExist(DbRowVenta("CveSucursalEjecucion").ToString()) 'DdlSucursalCobranza.SelectedValueExist(DbRowVenta("CveSucursalCobranza").ToString()) DdlSucursalCliente.SelectedValueExist(DbRowVenta("CveClienteSucursal").ToString()) 'DdlSucursal.SelectedValueExist(DbRowVenta("CveSucursal").ToString()) DdlSubProyectoDatos.SelectedValueExist(DbRowVenta("CveSubProyecto").ToString()) DdlSubProyectoCobranza.SelectedValueExist(DbRowVenta("CveSubProyectoCobranza").ToString()) DdlSubProyectoEjecucion.SelectedValueExist(DbRowVenta("CveSubProyectoEjecucion").ToString()) CargaClienteSucursal(DbRowVenta("CveClienteSucursal").ToString().ToEntero()) DdlMetodoPago33.SelectedIndex = 1 DdlFormaPago33.SelectedIndex = 1 DdlUsoCFDI.SelectedIndex = 1 RequiereAlmacenDestino = True DdlAlmacenAsignado.Items.Clear() DdlAlmacenAsignado.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenAsignado.SelectedValueExist("-1") DdlAlmacenAsignado.DataBind() DdlAlmacenAsignado.Items.Insert(0, New ListItem("Almacen", DbRowVenta("CveAlmacenTraspasoOrigen").ToString())) DdlAlmacenAsignado.SelectedValueExist(DbRowVenta("CveAlmacenTraspasoOrigen").ToString()) RequiereAlmacenOrigen = True DdlAlmacenOrigen.Items.Clear() DdlAlmacenOrigen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) DdlAlmacenOrigen.SelectedValueExist("-1") DdlAlmacenOrigen.DataBind() DdlAlmacenOrigen.Items.Insert(0, New ListItem("Almacen", DbRowVenta("CveAlmacenTraspasoDestino").ToString())) DdlAlmacenOrigen.SelectedValueExist(DbRowVenta("CveAlmacenTraspasoDestino").ToString()) If ObjInventarios.GetMovimientosDetalle(MovInv, UsuarioActual.CveEmpresa) AndAlso ObjInventarios.DtResultados.Rows.Count > 0 Then Dim Cons As Integer = 1 TmpDT.Clear() Dim Cantidad As Decimal = 0, PU As Decimal = 0, Descuento As Decimal = 0 Dim Filtro As String = "" If ViewState("CveMovimientoDetalle").ToString().ToEntero() > 0 Then Filtro = $"AND CveMovimientoDetalle = {ViewState("CveMovimientoDetalle").ToString().ToEntero()}" End If For Each dr As DataRow In ObjInventarios.DtResultados.FiltraParametros($"ExistenciaPedido > 0 {Filtro}").Rows AgregarProductoServicio(dr("Cantidad").ToString().ToDecimal, dr("CveUM").ToString().ToEntero(), dr("UnidadMedida").ToString(), dr("CveClasificacion").ToString().ToEntero(), dr("Clasificacion").ToString(), dr("CvePS").ToString().ToEntero(), dr("PS").ToString(), dr("Serie").ToString(), dr("PU").ToString().ToDecimal, 0.0D, dr("CveProyecto").ToString().ToEntero(), dr("Proyecto").ToString(), dr("CveSubProyecto").ToString().ToEntero(), dr("SubProyecto").ToString(), CveMovimientoDetallePedido:=dr("CveMovimientoDetalle").ToString().ToEntero()) Next CalculaTotalesVenta() End If 'Ocultamos los botones Editar, Clonar y Ordenar GvPS.Columns(18).Visible = False GvPS.Columns(20).Visible = False GvPS.Columns(21).Visible = False thOrden.Visible = False DdlVendedor.SelectedValue = DbRowVenta("CveVendedor").ToString() DdlTipoComprobante.Enabled = False 'DdlSucursal.Enabled = False DdlSubProyectoDatos.Enabled = False BtnBuscarCliente.Enabled = False 'TxtDocto.Enabled = False 'DESACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto disabled") TxtCodigo.ReadOnly = True ChkEnviarFactura.Enabled = False TxtCantidad.Enabled = False DdlClasificacion.Enabled = False DdlPS.Enabled = False TxtObsPS.Enabled = False DdlProyecto.Enabled = False DdlSubProyecto.Enabled = False TxtPrecio.Enabled = False ImgDescPU.Attributes.Clear() ImgDescTotal.Attributes.Clear() ImgDescConcepto.Attributes.Clear() LbAgregar.Enabled = False divcondicionespago.Visible = False BtnEmitirImprimir.Text = "Guardar" BtnEmitirImprimir.Visible = True UpFacturar.Update() End If End If ObjVentas.Dispose() ObjInventarios.Dispose() UpFacturar.Update() UpPS.Update() UpCliente.Update() UpEstatus.Update() End Sub #End Region '#Region " FLETES " 'Private Sub CargaFletes() ' If UsuarioActual.CveEmpresa <> 125 Or CveVenta > 0 Then ' Exit Sub ' End If ' HLModalFletes.Visible = True ' Dim ObjVentas As New ClsVentas ' If ObjVentas.GetFletes(UsuarioActual.CveEmpresa) Then ' GVFletes.DataSource = ObjVentas.DtResultados ' GVFletes.DataBind() ' End If ' UpFletes.Update() ' ObjVentas.Dispose() 'End Sub '#End Region #Region "A G R E G A R P S M O D A L" Private Sub CargaMetodosPSModal() CargaTipoProductos() CargaClasificacionesPS() 'CargarMetodosInv() CargaUnidadesMedida() CargarMarcas() End Sub 'Private Sub CargarMetodosInv() ' DdlMetodoInv.Items.Clear() ' DdlMetodoInv.DataSource = GlobalDTInvMetodosInventario ' DdlMetodoInv.DataBind() ' DdlMetodoInv.Items.Insert(0, New ListItem("Seleccione", "-1")) 'End Sub Private Sub CargaClasificacionesDetalles() DdlTipo.Items.Clear() DdlTipo.DataSource = GlobalDTClasificacionesDetalle(UsuarioActual.CveEmpresa) DdlTipo.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlTipo.DataBind() End Sub Private Sub CargaClasificacionesPS() If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then DdlClasificacionPS.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby:="Clasificacion") 'DdlTipo.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros(" Codigo = '' OR Codigo IS NULL ", Orderby:="Clasificacion") Else DdlClasificacionPS.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros("", Orderby:="Clasificacion") 'DdlTipo.DataSource = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, UsoClasificacion:=1).FiltraParametros("", Orderby:="Clasificacion") End If 'BLOQUEA DDL CLASIFICACION If UsuarioActual.Empresa.Funcionalidad(121) = "1" Then If Not UsuarioActual.TienePermisoProceso(147) Then DdlClasificacionPS.Enabled = False 'DdlTipo.Enabled = False End If End If DdlClasificacionPS.DataBind() 'DdlTipo.DataBind() End Sub Private Sub CargaTipoProductos() 'BLOQUEA DDL TIPO PRODUCTO If UsuarioActual.Empresa.Funcionalidad(122) = "1" Then If Not UsuarioActual.TienePermisoProceso(149) Then DdlTipoPS.Enabled = False DdlTipoPS.SelectedValueExist("2") End If End If End Sub Private Sub CargaUnidadesMedida() DdlUnidadMedidaPS.Items.Clear() DdlUnidadMedidaPS.DataSource = GlobalDTUnidadesMedida(UsuarioActual.CveEmpresa) DdlUnidadMedidaPS.DataBind() DdlUnidadMedidaPS.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Protected Sub CargarMarcas() If UsuarioActual.Empresa.Funcionalidad(130) = "1" Then If UsuarioActual.CveEmpresa.Contiene(72, 80) Then DivMarcaPSDes.Visible = True Else DivMarca.Visible = True End If DdlMarca.Items.Clear() DdlMarcaPSDes.Items.Clear() 'Dim ObjMarcas As New ClsProductosServicios 'ObjMarcas.GetMarcas(UsuarioActual.CveEmpresa) 'DdlMarca.DataSource = ObjMarcas.DtResultados 'DdlMarcaPSDes.DataSource = ObjMarcas.DtResultados 'ObjMarcas.Dispose() DdlMarca.DataSource = GlobalDTGralMarcas(UsuarioActual.CveEmpresa) DdlMarcaPSDes.DataSource = GlobalDTGralMarcas(UsuarioActual.CveEmpresa) DdlMarca.DataBind() DdlMarcaPSDes.DataBind() End If DdlMarca.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlMarcaPSDes.Items.Insert(0, New ListItem("Seleccione", "-1")) End Sub Private Sub BtnModalAddPS_Click(sender As Object, e As EventArgs) Handles BtnModalAddPS.Click TxtCodigoPS.Text = "" TxtCodigoBarrasPS.Text = "" TxtPS.Text = "" TxtModelo.Text = "" TxtAdicional.Text = "" DdlTipoPS.SelectedIndex = 0 DdlUnidadMedidaPS.SelectedIndex = 0 DdlClasificacionPS.SelectedIndex = 0 'DdlMetodoInv.SelectedIndex = 0 ChkRequiereSerie.Checked = False DdlMarca.SelectedIndex = -1 DdlMarcaPSDes.SelectedIndex = -1 CargaClasificacionesDetalles() CargaMetodosPSModal() UpAddPS.Update() RegistraScript(String.Format("$('#{0}').modal('show');", "DivAddPS")) End Sub Private Sub LbAddPS_Click(sender As Object, e As EventArgs) Handles LbAddPS.Click If (TxtCodigoPS.Text = TxtCodigoBarrasPS.Text AndAlso TxtCodigoPS.Text <> "") Then Alert("Los codigos no pueden ser iguales. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return End If If UsuarioActual.Empresa.Funcionalidad(265) = "1" And TxtCodigoPS.Text = "" Then Alert("El código es requerido.", TipoMensaje.MsgAdvertencia) Return End If If TxtCodigoPS.Text <> "" AndAlso Not TxtCodigoPS.Text.Length >= 3 Then Alert("El código tiene que que tener una longitud de al menos 3 digitos.", TipoMensaje.MsgAdvertencia) Return End If Dim CveMetodoInventario As Integer = 0 If ChkRequiereSerie.Checked Then CveMetodoInventario = 5 Else CveMetodoInventario = 1 Dim CveMarca As Integer = 0 If UsuarioActual.CveEmpresa.Contiene(72, 80) Then CveMarca = DdlMarcaPSDes.SelectedValue.ToEntero() Else CveMarca = DdlMarca.SelectedValue.ToEntero() Dim ObjProductosServicios As New ClsProductosServicios() If ObjProductosServicios.AddPS(DdlClasificacionPS.SelectedValue.ToEntero(), -1, DdlUnidadMedidaPS.SelectedValue.ToEntero(), TxtCodigoPS.Text.Trim, "", TxtCodigoBarrasPS.Text.Trim, TxtPS.Text.Trim, 0, -1, 0, False, 0, False, True, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveMetodoInventario, 0, CveTipoPS:=DdlTipoPS.SelectedValue.ToEntero(), CveMarca:=CveMarca, CveSATPS:=DdlSATPS.SelectedValue.ToEntero(), CveClasificacionDetalle:=DdlTipo.SelectedValue.ToEntero(), CveObjetoImpuesto:=2) > 0 Then DdlClasificacion.SelectedValueExist(DdlClasificacionPS.SelectedValue.ToEntero()) DdlClasificacion_SelectedIndexChanged(DdlClasificacionPS, e) 'SI ES DDLOST If UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then DdlPS.SelectedValue = ObjProductosServicios.CvePS.ToString() DdlPS.SelectedText = TxtPS.Text.Trim Else DdlPS.ddl.Items.Insert(2, New ListItem(TxtPS.Text.Trim, ObjProductosServicios.CvePS.ToString())) DdlPS.ddl.SelectedValueExist(ObjProductosServicios.CvePS) End If DdlUnidadMedida.Items.Clear() DdlUnidadMedida.Items.Insert(0, New ListItem(DdlUnidadMedidaPS.SelectedItem.Text, DdlUnidadMedidaPS.SelectedValue)) DdlUnidadMedida.SelectedValueExist(DdlUnidadMedidaPS.SelectedValue) HdnPS.Value = TxtPS.Text.Trim HdnCodigoPS.Value = $"{TxtCodigoPS.Text.Trim}-{TxtPS.Text.Trim}" HdnTipoPS.Value = DdlTipoPS.SelectedValue HdnTipoInv.Value = CveMetodoInventario.ToString() HdnAplicaIEPS.Value = "False" HdnPorcentajeIEPS.Value = "-1" HdnIVAPS.Value = "0.16" HdnIVARetAPS.Value = "0" HdnCodigo.Value = TxtCodigoPS.Text.Trim End If ObjProductosServicios.Dispose() UpPS.Update() RegistraScript(String.Format("$('#{0}').modal('hide');", "DivAddPS")) RecargaGlobal() End Sub Private Sub RecargaGlobal() 'Dim Hilo As New System.Threading.Thread(AddressOf GeneraGlobalDT) 'Hilo.Start() GeneraGlobalDT() End Sub Private Sub GeneraGlobalDT() 'Dim dtt As DataTable GlobalDTProductosServiciosEquivalencias(-1, -1, UsuarioActual.CveEmpresa) = Nothing GlobalDTPSSimplificado(UsuarioActual.CveEmpresa) = Nothing 'Dim ObjPS As New ClsProductosServicios 'If ObjPS.GetPSSimplificado(UsuarioActual.CveEmpresa) Then Application(String.Format("GlobalDTPSSimplificado{0}", UsuarioActual.CveEmpresa)) = ObjPS.DtResultados.AsEnumerable() 'If ObjPS.GetPSEquivalencias(-1, UsuarioActual.CveEmpresa) Then ' GlobalDTProductosServiciosEquivalencias(-1, -1, UsuarioActual.CveEmpresa) = ObjPS.DtResultados 'End If 'ObjPS.Dispose() End Sub #End Region #Region "REORDENAR" Protected Sub BtnReordenar_Click(sender As Object, e As EventArgs) Handles BtnReordenar.Click Dim sArray As String() sArray = HdnIndices.Value.Split(";"c) Dim DTClon As DataTable = TmpDT.Clone Dim Consec As Integer = 1 For Each indice As String In sArray If IsNumeric(indice) Then Dim dr As DataRow = TmpDT.Rows(indice.ToEntero()) dr("Consec") = Consec dr.AcceptChanges() DTClon.ImportRow(dr) Consec += 1 End If Next TmpDT = DTClon Dim view As DataView = New DataView(TmpDT) view.Sort = "Consec" GvPS.DataSource = view GvPS.DataBind() CalculaTotalesVenta() DTClon.Dispose() End Sub #End Region #Region " CONTRATO DE CONSIGNACION DE VENTA - SURTIDO DE ALMACÉN " Function RegistraAlmacenConsignacionVenta(ByRef ObjInventario As ClsInventarios, ByRef ObjConta As ClsContabilidad, factura As Modelos.Factura) As Boolean If Not (UsuarioActual.Empresa.UsaInventarios AndAlso CveAlmacenExistenciasContrato > 0) Then Return True End If Dim CveMovimientoSalidaConsignacion As Integer = -1 Dim CveMovimientoEntradaGeneral As Integer = -1 Dim CveMovimientoSalidaGeneral As Integer = -1 'MOVIMIENTO DE SALIDA POR TRASPASO DEL ALMACEN DE CONSIGNACION CveMovimientoSalidaConsignacion = ObjInventario.AddMovimiento(CveAlmacenExistenciasContrato, 8, 1, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, Modulo:="Vta/E5") If CveMovimientoSalidaConsignacion > 0 Then Dim CveProducto As Integer Dim CveUnidad As Integer Dim Cantidad As Decimal Dim Existencia As Double For Each Dr As DataRow In TmpDT.FiltraParametros("CveTipoPS=2").Rows CveProducto = Dr("CvePS").ToString().ToEntero() CveUnidad = Dr("CveUM").ToString().ToEntero() Cantidad = Dr("Cantidad").ToString().ToDecimal If Not CveProducto > 0 Then Return False End If Dim drP As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CveProducto).FiltroPrimero("") Dim AplicaSeccion As Boolean = CBool(drP("AplicaSeccion")) Dim AplicaSerie As Boolean = CBool(drP("AplicaSerie")) Dim CveSeccionAlmacen As Integer = -1 If AplicaSerie Then For Each Dr2 As DataRow In DtContratosSerieDetalle.FiltraParametros($"ConsecId = {Dr("CveContratoDetalle")}").Rows Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, factura.CveEmpresa, CveAlmacenExistenciasContrato, Serie:=Dr2("Serie").ToString(), FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1, BuscarEnTabla:=BuscarEnTabla) If Existencia < 1 Then GuardaLogAD($"El producto no tiene existencia: CvePS:{CveProducto},CveUnidad:{CveUnidad},Cantidad: {Cantidad},Existencia: {Existencia},CveAlmacen:{CveAlmacenExistenciasContrato},Serie:{Dr2("Serie").ToString()}") Return False End If CveSeccionAlmacen = -3 If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaConsignacion, 1, CveUnidad, CveProducto, 0, -1, Serie:=Dr2("Serie").ToString(), CveSeccionAlmacen:=CveSeccionAlmacen, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then Return False End If Next Else Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, factura.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero(), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1, BuscarEnTabla:=BuscarEnTabla) If Existencia < Cantidad Then GuardaLogAD($"El producto no tiene existencia: CvePS:{CveProducto},CveUnidad:{CveUnidad},Cantidad: {Cantidad},Existencia: {Existencia},CveAlmacen:{CveAlmacenExistenciasContrato}") Return False End If CveSeccionAlmacen = -3 If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaConsignacion, Cantidad, CveUnidad, CveProducto, 0, -1, CveSeccionAlmacen:=CveSeccionAlmacen, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then Return False End If End If Next Else Return False End If 'ENTRADA POR TRASPASO A GENERAL CveMovimientoEntradaGeneral = ObjInventario.AddMovimiento(CveAlmacenOrigenContrato, 9, 1, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, CveMovimientoRelacionado:=CveMovimientoSalidaConsignacion, Modulo:="Vta/E6") If CveMovimientoEntradaGeneral > 0 Then If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaConsignacion, UsuarioActual.CveEmpresa) Then Dim CveSeccionAlmacen As Integer = -1 For Each Dr As DataRow In ObjInventario.DtResultados.Rows If CBool(Dr("AplicaSeccion")) Then CveSeccionAlmacen = GlobalDTInvPSSeccionesAlmacen(UsuarioActual.CveEmpresa, CveAlmacenOrigenContrato, Dr("CvePS").ToString.ToEntero).FiltroPrimeroValor("CveSeccionAlmacen").ToEntero Else CveSeccionAlmacen = -1 End If If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaGeneral, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), CveSeccionAlmacen:=CveSeccionAlmacen, Serie:=Dr("Serie").ToString(), Lote:=Dr("Lote").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then Return False End If Next End If Else Return False End If 'SALIDA GENERAL CveMovimientoSalidaGeneral = ObjInventario.AddMovimiento(CveAlmacenOrigenContrato, 3, 1, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, Modulo:="Vta/E7") If CveMovimientoSalidaGeneral > 0 Then If ObjInventario.GetMovimientosDetalle(CveMovimientoEntradaGeneral, UsuarioActual.CveEmpresa) Then For Each Dr As DataRow In ObjInventario.DtResultados.Rows If Not ObjInventario.AddMovimientoDetalle(CveMovimientoSalidaGeneral, Dr("Cantidad").ToString().ToDecimal, Dr("CveUM").ToString().ToEntero(), Dr("CvePS").ToString().ToEntero(), Dr("PU").ToString().ToDecimal, CveAF:=Dr("CveAF").ToString().ToEntero(), CveSeccionAlmacen:=Dr("CveSeccionAlmacen").ToString().ToEntero(), Serie:=Dr("Serie").ToString(), Lote:=Dr("Lote").ToString(), CveMovimientoDetalleEntrada:=Dr("CveMovimientoDetalle").ToString().ToEntero(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero()) Then Return False End If Next End If 'GENERAR PREPOLIZA If Not GeneraPrePolizaMovimientoAlmacen(ObjInventario, ObjConta, ObjFactura, ObjFactura.CvePrePoliza, CveMovimientoSalidaGeneral, CveAlmacenOrigenContrato) Then Return False End If Dim RealizarMovimientoVirtual As Boolean = False If UsuarioActual.Empresa.Funcionalidad(573) = "1" Then RealizarMovimientoVirtual = True End If 'VIRTUAL SALIDA If RealizarMovimientoVirtual Then Dim dtvirtual As DataTable = Nothing Dim CveAlmacenVirtual As Integer = GlobalDTAlmacen(UsuarioActual.CveEmpresa, CveAlmacen:=CveAlmacenOrigenContrato).FiltroPrimeroValor("CveAlmacenVirtual", "").ToEntero() Dim CveMovimientoVirtualSalida As Integer 'SI TIENE UN ALMACEN VIRTUAL ASIGNADO GENERA EL MOVIMIENTO VIRTUAL If CveAlmacenVirtual > 0 Then If ObjInventario.GetMovimientosDetalleVirtual(CveMovimientoSalidaGeneral, UsuarioActual.CveEmpresa) Then dtvirtual = ObjInventario.DtResultados If dtvirtual.Rows.Count > 0 Then CveMovimientoVirtualSalida = ObjInventario.AddMovimiento(CveAlmacenVirtual, 37, 1, TxtFecha.Text.ToDate, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, factura.CveVenta, -1, -1, Observaciones:="", Modulo:="VV2", CveMovimientoRelacionado:=CveMovimientoSalidaGeneral) 'FolioVirtualSalida = ObjInventario.Folio For Each RowVirtual As DataRow In dtvirtual.Rows Dim CvePS As Integer = RowVirtual("CvePS").ToString().ToEntero() Dim CantidadUsado As Decimal = RowVirtual("Cantidad").ToString().ToDecimal() Dim PU As Decimal = RowVirtual("PU").ToString().ToDecimal() Dim CveUM As Integer = RowVirtual("CveUM").ToString().ToEntero() If Not ObjInventario.AddMovimientoDetalle(CveMovimientoVirtualSalida, CantidadUsado, CveUM, CvePS, PU, -1, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then Return False End If Next Else Return False End If Else Return False End If Else Return False End If End If Else Return False End If If Not GenerarMovimientoAlmacenVirtualConsignacion(factura.CveVenta, CveAlmacenExistenciasContrato, ObjInventario, factura, ObjConta) Then Return False End If Return True End Function #Region " AGREGA POR SERIE/LOTE " Private Sub CreaConsignacionSerieDetalle() If DtContratosSerieDetalle Is Nothing Then DtContratosSerieDetalle = New DataTable DtContratosSerieDetalle.Columns.Add("Consec", GetType(Integer)) DtContratosSerieDetalle.Columns.Add("ConsecId", GetType(Integer)) DtContratosSerieDetalle.Columns.Add("CvePS", GetType(Integer)) DtContratosSerieDetalle.Columns.Add("CveUM", GetType(Integer)) DtContratosSerieDetalle.Columns.Add("Serie", GetType(String)) Else DtContratosSerieDetalle.Clear() End If End Sub Protected Sub BtnSerieConsignacion_Click(sender As Object, e As EventArgs) Dim Argumentos As String() = CType(sender, Button).CommandArgument.Split("°"c) CveConsecSerie = Argumentos(0).ToEntero() CvePSSerie = Argumentos(1).ToEntero() CveUMSerie = Argumentos(2).ToEntero() LbProducto.Text = Argumentos(3) LbCantidad.Text = If(Argumentos(4).ToDecimal < 0.0D, 0, Argumentos(4).ToDecimal).FormatoNumero LimitaCantidadSerie = Argumentos(5).ToEntero() CargaSerie() End Sub Private Sub CargaSerie(Optional CerrarCompletado As Boolean = False) RegistraScript("$('#DivSerieConsignacion').modal();", "ModalLote") GvSerie.DataSource = DtContratosSerieDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie), "Consec DESC") GvSerie.DataBind() lblSerieTotal.Text = GvSerie.Rows.Count.ToString() 'VALIDA QUE SIGA AGREGANDO If DtContratosSerieDetalle.FiltraParametros(String.Format("ConsecId = {0}", CveConsecSerie)).Rows.Count = LbCantidad.Text.ToEntero() And LimitaCantidadSerie = 1 Then BtnAgregarPS.Enabled = False If CerrarCompletado Then RegistraScript("$('#DivSerieConsignacion').modal('hide');") End If Else BtnAgregarPS.Enabled = True End If UpSerieConsignacion.Update() TxtSerie.Text = "" TxtSerie.Focus() End Sub Protected Sub BtnAgregarPS_Click(sender As Object, e As EventArgs) AgregaSerie(TxtSerie.Text.Replace(" ", String.Empty)) End Sub Private Sub AgregaSerie(Serie As String) If Serie.Trim = "" Then Alert("El campo Serie es obligatorio. Por favor rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim SeriesArreglo As String() = Serie.Trim.Split(";"c) 'VALIDACION DE SERIES DUPLICADAS Dim MensajeAlert As New StringBuilder Dim DtDuplicado As New DataTable Dim DtSeriesNuevas As New DataTable DtSeriesNuevas.Columns.Add("Serie", GetType(String)) 'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS ' Dim dr As DataRow = GlobalDTProductosServicios(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CvePS = {0}", CvePSSerie), "PS") Dim dr As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePSSerie).FiltroPrimero("", "PS") For Each SerieRow As String In SeriesArreglo SerieRow = SerieRow.ToUpper DtDuplicado = DtContratosSerieDetalle.FiltraParametros($"ConsecId = {CveConsecSerie} AND Serie = '{SerieRow}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
    El numero de Serie ""{SerieRow}"" proporcionado ya se encuentra ingresado.") Continue For End If DtDuplicado = DtSeriesNuevas.FiltraParametros($"Serie = '{SerieRow}'") If DtDuplicado IsNot Nothing AndAlso DtDuplicado.Rows.Count > 0 Then MensajeAlert.Append($"
    El numero de Serie ""{SerieRow}"" proporcionado se encuentra duplicado.") Continue For End If 'PARA VALIDAR SI LA SERIE ES IGUAL AL CODIGO O CODIGOBARRAS If SerieRow = dr("Codigo").ToString().ToUpper Or SerieRow = dr("CodigoBarras").ToString().ToUpper Then MensajeAlert.Append($"
    El numero de Serie {SerieRow} coincide con el codigo o codigo de barras del producto. Por favor rectifique y vuelva a intentar.") Continue For End If Dim Row As DataRow = DtSeriesNuevas.NewRow Row("Serie") = SerieRow DtSeriesNuevas.Rows.Add(Row) Next If MensajeAlert.ToString() <> "" Then Alert(MensajeAlert.ToString(), TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error") Exit Sub End If MensajeAlert.Clear() Dim MensajeSinExistencias As New StringBuilder Dim ObjInventarios As New ClsInventarios Dim Index As Integer = 0 For Each SerieRow As String In SeriesArreglo Dim Row As DataRow = DtContratosSerieDetalle.NewRow Index = Index + 1 If Index > LbCantidad.Text.ToEntero() And LimitaCantidadSerie = 1 Then MensajeSinExistencias.Append($"Serie: {SerieRow} - En esta serie ocurrió un error por favor de comunicarse con soporte tecnico..
    ") Continue For End If 'VERIFICA EXISTENCIAS Dim BuscarEnTabla As Boolean = If(UsuarioActual.Empresa.Funcionalidad(715) = "1", True, False) Dim Existencia As Decimal = ObjInventarios.GetExistenciasPS(CvePSSerie, CveUMSerie, UsuarioActual.CveEmpresa, CveAlmacenExistenciasContrato, FechaMovto:=TxtFecha.Text.ToDateTime.ToString("yyyy/MM/dd HH:mm"), Serie:=SerieRow, BuscarEnTabla:=BuscarEnTabla) If Existencia < 1 Then MensajeSinExistencias.Append($"Serie: {SerieRow}.
    ") Continue For End If Row("ConsecId") = CveConsecSerie Row("Consec") = DtContratosSerieDetalle.Rows.Count + 1 Row("CvePS") = CvePSSerie Row("CveUM") = CveUMSerie Row("Serie") = SerieRow DtContratosSerieDetalle.Rows.Add(Row) Next ObjInventarios.Dispose() TxtSerie.Text = "" CargaCantidadSerieGV() CargaSerie(True) If MensajeSinExistencias.ToString() <> "" Then Alert($"Las siguientes Series no cuentan con la existencia suficiente por lo cual se omitieron.
    {MensajeSinExistencias.ToString()}", TipoMensaje.MsgAdvertencia) RegistraScript("playsonidito('142608__autistic-lucario__error.wav')", "Error") Else RegistraScript("playsonidito('beep-07.wav')", "Existo") End If MensajeSinExistencias.Clear() End Sub Protected Sub GvSerie_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvSerie.RowDeleting Try Dim keySerie As String = e.Keys("Serie").ToString() For Each dr As DataRow In DtContratosSerieDetalle.Rows If dr("Serie").ToString() = keySerie Then dr.Delete() End If Next Catch ex As Exception Finally DtContratosSerieDetalle.AcceptChanges() CargaCantidadSerieGV() CargaSerie() End Try End Sub Private Sub CargaCantidadSerieGV() 'MODIFICA CANTIDAD DEL GV CONTRATOS For Each Gvr As GridViewRow In GvContratoDetalles.Rows If Gvr.DataKey("CvePS").ToEntero() = CvePSSerie Then Dim Contador As Integer = DtContratosSerieDetalle.FiltraParametros(String.Format("ConsecId = {0}", Gvr.DataKey("CveContratoDetalle"))).Rows.Count Gvr.FCTextBox("TxtCant").Text = Contador.ToString() UPEstimaciones.Update() Exit For End If Next End Sub #End Region #End Region #Region " ENVIAR SMS - CONFIRMACION DE TIMBRADO " 'Private Function EnviarSMSTimbrado(ByRef ObjEventos As ClsOIEventos) As Integer ' 'NOTA: ' '0 = NO APLICA ' '1 = TODO FINO ' '2 = ERROR ' '3 = SIN CELULAR - PROBLEMA CON EL CELULAR ' Try ' Dim Mensaje As String = UsuarioActual.Empresa.Funcionalidad(152) ' If Mensaje = "" Then Return 0 ' Dim Celular As String = "" ' Try ' Celular = ObjFactura.Cliente.CobranzaTelefono ' Catch ex As Exception ' End Try ' If Celular.Length <> 10 Then Return 3 ' 'ARMA MENSAJE ' '4: VSH Monitoreo aviso de: Factura pendiente {SerieFolio} del {Fecha} por ${Importe} fecha limite de pago {FechaPago} Bancomer 0171426931-{ClienteNombreCorto} ' Mensaje = Mensaje.Replace("{SerieFolio}", ObjFactura.SerieFolio) ' Mensaje = Mensaje.Replace("{Fecha}", ObjFactura.Fecha.ToString("dd-MMM-yyyy").Replace(".", "")) ' Mensaje = Mensaje.Replace("{Importe}", ObjFactura.Total.FormatoNumero) ' Mensaje = Mensaje.Replace("{FechaPago}", ObjFactura.FechaPago.ToString("dd-MMM-yyyy").Replace(".", "")) ' Mensaje = Mensaje.Replace("{ClienteNombreCorto}", ObjFactura.Cliente.NombreCorto) ' If Mensaje = "" Then Return 2 ' Dim ObjMensaje As New ClsTecnoMovil ' If ObjMensaje.EnviarMensajeWS(Celular, Mensaje) Then ' If ObjEventos.AddEventoBitacora($"Notificación al cliente via SMS. Mensaje: {Mensaje}", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCliente:=ObjFactura.CveCliente, CveVenta:=ObjFactura.CveVenta) Then ' End If ' Return 1 ' Else ' Return 2 ' End If ' Catch ex As Exception ' OnError("Ocurrió un error al generar el SMS", ex) ' Return 0 ' End Try 'End Function #End Region #Region " COMPLEMENTOS PAGO " Private Sub CargaComplementosPago() Dim ObjBancos As New ClsBancos If UsuarioActual.CveRol = 1 Then GvComplementoPagos.Columns(7).Visible = True End If If ObjBancos.GetComplementoPagos(-1, -1, CveVenta, UsuarioActual.CveEmpresa) Then GvComplementoPagos.DataSource = ObjBancos.DtResultados End If ObjBancos.Dispose() GvComplementoPagos.DataBind() UpComplementoPagos.Update() End Sub Protected Sub GvComplementoPagos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvComplementoPagos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Cells(2).Text = String.Format("
    ", Encripta(String.Format("OP=CompP&EXT=xml&SerieFolio={0}&CveComplementoPago={1}&CveIE={2}", e.Row.DBCampo("SerieFolio"), e.Row.DBCampo("CveComplementoPago"), e.Row.DBCampo("CveIE")))) e.Row.Cells(3).Text = String.Format("", Encripta(String.Format("OP=CompP&EXT=pdf&SerieFolio={0}&CveComplementoPago={1}&CveIE={2}", e.Row.DBCampo("SerieFolio"), e.Row.DBCampo("CveComplementoPago"), e.Row.DBCampo("CveIE")))) If e.Row.DataKey("Estatus").Contiene("1", "3") Then e.Row.FCLinkButton("LnkCancelarComplemetno").Visible = True End If End If End Sub Protected Sub LnkSendMail_Click(sender As Object, e As EventArgs) Dim gvRow As GridViewRow = DirectCast((DirectCast(sender, LinkButton)).NamingContainer, GridViewRow) HdnSerieFolioPago.Value = gvRow.DataKey("SerieFolio").ToString() TxtParaMail.Text = gvRow.DataKey("CobranzaCorreo").ToString() UpSendMail.Update() RegistraScript("$('#ModalDivMail').modal('show');") End Sub Private Sub LnkComplementoPago_Click(sender As Object, e As EventArgs) Handles LnkComplementoPago.Click CargaComplementosPago() RegistraScript("$('#ModalComplementoPagos').modal('show');") End Sub Protected Sub BtnSendMail_Click(sender As Object, e As System.EventArgs) Handles BtnSendMail.Click Try If HdnSerieFolioPago.Value <> "-1" Then If TxtParaMail.Text = "" Then Alert("Tiene que introducir un correo en el campo Correo de Pago el cual se encuentra en el expediente del cliente en la pestaña cuentas x cobrar. ", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim ObjMail As New ClsSisMail() Dim RutaXML As String = String.Format("{0}\XML\Pag\{1}.xml", UsuarioActual.Empresa.Ruta, HdnSerieFolioPago.Value) Dim RutaPDF As String = String.Format("{0}\PDF\Pag\{1}.pdf", UsuarioActual.Empresa.Ruta, HdnSerieFolioPago.Value) Dim Cuerpo As String = "Se hace entrega del comprobante de pago" Dim Asunto As String = "Entrega de comprobante de pago" 'If UsuarioActual.Empresa.PlantillaMailVenta.Trim.Length > 0 Then ' Cuerpo = UsuarioActual.Empresa.PlantillaMailVenta ' Cuerpo = Cuerpo.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) ' Cuerpo = Cuerpo.Replace("{""TipoDocumento""}", TipoComprobante) 'End If 'If UsuarioActual.Empresa.AsuntoPlantillaMailVenta.Trim.Length > 0 Then ' Asunto = UsuarioActual.Empresa.AsuntoPlantillaMailVenta ' Asunto = Asunto.Replace("{""TipoDocumento""}", TipoComprobante) 'End If If IO.File.Exists(RutaPDF) AndAlso IO.File.Exists(RutaXML) Then Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = RutaPDF}) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = RutaXML}) If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMail.Text.Trim, Asunto, Cuerpo, TxtCC.Text.Trim, LSRutasMail) Then TxtCC.Text = "" RegistraScript("$('#ModalDivMail').modal('hide');") Alert("El correo se envió correctamente", TipoMensaje.MsgInformacion) Else Alert("No se pudo enviar el correo electrónico.", TipoMensaje.MsgError) End If Else Alert("No se pudo adjuntar el correo electrónico.", TipoMensaje.MsgError) End If End If Catch ex As Exception OnError("Ocurrió error al mandar MAIL", ex) End Try End Sub #End Region #Region "RELACIONAR FACTURAS A NC " 'Private Sub CargaFacturasRelacionar() ' Dim ObjVentas As New ClsVentas ' Dim dtt As DataTable = Nothing ' If ObjVentas.GetVentas(UsuarioActual.CveEmpresa, "-1", "-1", -1, "-1", CveCliente, -1, 3, -1, ' NowADS().AddYears(-1).ToShortDateString, NowADS().ToShortDateString, "-1", -1, -1, CveUsuarioConsulta:=UsuarioActual.CveUsuario) Then ' If ObjVentas.DtResultados.Rows.Count > 0 Then ' dtt = ObjVentas.DtResultados.FiltraParametros("TipoDocto IN ('Ing','Ant')") ' End If ' End If ' ObjVentas.Dispose() ' Alert(dtt.Rows.Count.ToString()) ' GvRelacionarNC.DataSource = dtt ' GvRelacionarNC.DataBind() ' If dtt IsNot Nothing Then dtt.Dispose() ' UPRelacionarNC.Update() 'End Sub #End Region #Region " DOCUMENTACION VENTAS" Property DtDocumentacionCliente As DataTable Get If ViewState("DtDocumentacionCliente") Is Nothing Then Return New DataTable Else Return DirectCast(ViewState("DtDocumentacionCliente"), DataTable) End If End Get Set(value As DataTable) ViewState("DtDocumentacionCliente") = value End Set End Property Property IndexDocumentoCliente As Integer Get If ViewState("IndexDocumentoCliente") Is Nothing Then Return -1 Else Return DirectCast(ViewState("IndexDocumentoCliente"), Integer) End If End Get Set(value As Integer) ViewState("IndexDocumentoCliente") = value End Set End Property Property AdjuntoDocumentacion As String Get If ViewState("AdjuntoDocumentacion") Is Nothing Then Return "" Else Return DirectCast(ViewState("AdjuntoDocumentacion"), String) End If End Get Set(value As String) ViewState("AdjuntoDocumentacion") = value End Set End Property Protected Sub LnkDocCliente_Click(sender As Object, e As EventArgs) RegistraScript("$('#DivDocsCliente').modal({ backdrop: 'static', keyboard: false });") End Sub Private Sub CargaDocumentacionCliente() LiDocumentoCliente.Visible = False Dim objRH As New ClsEdocumentacion Dim TempCliente As Integer = If(CveVenta <= 0, CveCliente, -1) Dim TipoDocumento As Integer = If(CveVenta <= 0, 14, -1) If CveVenta <= 0 AndAlso TempCliente <= 0 Then Dim a As String = "carga de documentacion del cliente, masivo, corregir" a.GuardaLog() End If If objRH.DocumentacionElectronicaGet(-1, TempCliente, -1, UsuarioActual.CveEmpresa, TipoDocumento, CveVenta) Then DtDocumentacionCliente = objRH.DtResultados.FiltraParametros("CveDocumentacionElectronica > 0") DtDocumentacionCliente.Columns.Add("Accion", Type.GetType("System.String")) DtDocumentacionCliente.Columns.Add("RutaArchivo", Type.GetType("System.String")) DtDocumentacionCliente.Columns.Add("UpArchivo", Type.GetType("System.String")) DtDocumentacionCliente.AcceptChanges() GvDocumentosCliente.DataSource = DtDocumentacionCliente LiDocumentoCliente.Visible = True Else DtDocumentacionCliente = Nothing GvDocumentosCliente.DataSource = Nothing End If objRH.Dispose() GvDocumentosCliente.DataBind() UpDocsCliente.Update() End Sub Protected Sub LnkUploadDocumentacionCliente_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) IndexDocumentoCliente = GvRow.RowIndex Dim Documentacion As String = GvRow.DataKey("Documentacion").ToString() AdjuntoDocumentacion = GvRow.DataKey("Adjunto").ToString() LtlModalTitleUploadDocumentoCliente.Text = "Subir " & Documentacion BtnModalClienteDocumentoCancelar.Visible = True UpModalTitleUploadDocumentoCliente.Update() UpModalButtonUploadDocumentoCliente.Update() RegistraScript("$('#DivDocsClienteUpload').modal({ backdrop: 'static', keyboard: false});") End Sub Protected Sub BtnModalClienteDocumentoUpload_Click(sender As Object, e As EventArgs) Handles BtnModalClienteDocumentoUpload.Click If Not TxtFileCliente.getfiles().Archivos.Count > 0 Then Alert("Tiene que cargar un archivo", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim FileExtension As String = "-1" Dim Filesgral As List(Of Archivo) = TxtFileCliente.getfiles().Archivos Dim Filename As String = "" Dim ErrorCarga As Boolean = False For Each fileItem As Archivo In Filesgral Try FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") Dim tempArray() As String tempArray = fileItem.filename.ToString().Split("-".ToCharArray()) If RequiereOC And Not BtnModalClienteDocumentoCancelar.Visible Then Dim Count As Integer = 0 For Each GvRow As GridViewRow In GvDocumentosCliente.Rows If GvRow.DataKey("Orden").ToEntero() = 1 Then IndexDocumentoCliente = Count CargaDocumentoOC = True Exit For End If Count = +1 Next End If If fileItem Is Nothing Then ErrorCarga = True Exit For Else If fileItem.FileUrl Is Nothing Then ErrorCarga = True Exit For End If End If DtDocumentacionCliente(IndexDocumentoCliente)("RutaArchivo") = fileItem.FileUrl DtDocumentacionCliente(IndexDocumentoCliente)("UpArchivo") = "1" TxtFileCliente.Text = "" UpModalUploadClienteDocumento.Update() Alert("Documento cargado", TipoMensaje.MsgInformacion) Catch ex As Exception OnError("Error al cargar archivo", ex) End Try Next If ErrorCarga Then Alert("No se pudo cargar el archivo", TipoMensaje.MsgAdvertencia) Exit Sub End If GvDocumentosCliente.DataSource = DtDocumentacionCliente GvDocumentosCliente.DataBind() DtDocumentacionCliente.AcceptChanges() UpDocsCliente.Update() RegistraScript("$('#DivDocsClienteUpload').modal('hide')", "hidemodal3") End Sub Private Sub GvDocumentosCliente_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDocumentosCliente.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim ArchivoRuta As String = e.Row.DataKey("RutaArchivo") Dim Adjunto As String = e.Row.DBCampo("Adjunto").ToString() Dim ImgDownLoad As Literal = e.Row.FCLiteral("ImgDownLoad") Dim Chk As CheckBox = e.Row.FCCheckBox("chkEstatus") Chk.Checked = If(e.Row.DataKey("Estatus").ToString() = "1", True, False) If ArchivoRuta.Trim.Length > 0 Then Dim fi As New FileInfo(ArchivoRuta) Dim linkDescarga As String = "" If fi.Exists Then linkDescarga = $"/Temp/{fi.Name}" ImgDownLoad.Text = String.Format(" ", linkDescarga) ImgDownLoad.Visible = True End If Else If Adjunto.Trim.Length > 0 Then ArchivoRuta = UsuarioActual.Empresa.Ruta & "Documentacion\Ventas\" & Adjunto Dim fi As New FileInfo(ArchivoRuta) Dim linkDescarga As String = "" If fi.Exists() Then linkDescarga = $"/Empresas/{UsuarioActual.CveEmpresa}/Documentacion/ventas/{fi.Name}" ImgDownLoad.Text = String.Format(" ", linkDescarga) ImgDownLoad.Visible = True End If End If End If 'Else ' If ArchivoRuta.Trim.Length > 0 Then ' Dim fi As New FileInfo(ArchivoRuta) ' Dim linkDescarga As String = "" ' If fi.Exists Then ' linkDescarga = $"/Temp/{fi.Name}" ' ImgDownLoad.Visible = True ' ImgDownLoad.Text = String.Format(" ", linkDescarga) ' Else ' ImgDownLoad.Visible = False ' End If ' Else ' ImgDownLoad.Visible = False ' End If 'End If End If End Sub Private Sub GuardaVentaDocumentosCliente(tCveVenta As Integer, ByRef objDocumentacion As ClsEdocumentacion) If tCveVenta > 0 Then For Each DRow As DataRow In DtDocumentacionCliente.FiltraParametros("RutaArchivo <> '' ").Rows Dim CveDocumentacion As Integer = DRow("CveDocumentacion").ToString().ToEntero() Dim Estatus As Integer = DRow("Estatus").ToString().ToEntero() Dim Adjunto As String = DRow("Adjunto").ToString() Dim NombreArchivo As String = "" Dim ArchivoRuta As String = DRow("RutaArchivo").ToString() If ArchivoRuta.Length > 0 Then Adjunto = ArchivoRuta Dim Extension As String = Path.GetExtension(Adjunto) Dim CveDocumentacionElectronica As Integer = objDocumentacion.DocumentacionElectronicaAdd(CveDocumentacion, -1, -1, -1, 1, DRow("Observacion").ToString(), Extension, UsuarioActual.CveUsuario, New Date(1900, 1, 1), CveVenta:=tCveVenta) If CveDocumentacionElectronica <= 0 Then ErrorList.Add("No se pudo registrar el documento ") NombreArchivo = $"{CveDocumentacionElectronica}{Extension}" If ArchivoRuta.Length > 0 And NombreArchivo.Length > 0 Then If Not Directory.Exists($"{UsuarioActual.Empresa.Ruta}Documentacion\Ventas\") Then Directory.CreateDirectory($"{UsuarioActual.Empresa.Ruta}Documentacion\Ventas\") End If Dim ArchivoExistenteRuta As String = $"{UsuarioActual.Empresa.Ruta}Documentacion\Ventas\{NombreArchivo}" If File.Exists(ArchivoExistenteRuta) Then File.Delete(ArchivoExistenteRuta) Try File.Move(ArchivoRuta, ArchivoExistenteRuta) Catch ex As Exception ErrorList.Add("No se pudo guardar el documento de la venta") Exit For End Try End If Next End If End Sub Protected Sub chkEstatus_CheckedChanged(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, CheckBox).NamingContainer, GridViewRow) Dim chk As CheckBox = GvRow.FCCheckBox("chkEstatus") IndexDocumentoCliente = GvRow.RowIndex If chk.Checked Then DtDocumentacionCliente(IndexDocumentoCliente)("Estatus") = True Else DtDocumentacionCliente(IndexDocumentoCliente)("Estatus") = False End If DtDocumentacionCliente.AcceptChanges() End Sub Protected Sub CargarArchivosOC(sender As Object, e As EventArgs) Dim Documentacion As String = "" RegistraScript("$('#DivDocsCliente').modal({ backdrop: 'static', keyboard: false });", "ModalArchivos") Dim Count As Integer = 0 For Each GvRow As GridViewRow In GvDocumentosCliente.Rows If GvRow.DataKey("Orden").ToEntero() = 1 Then IndexDocumentoCliente = Count Documentacion = GvRow.DataKey("Documentacion").ToString() AdjuntoDocumentacion = GvRow.DataKey("Adjunto").ToString() Exit For End If Count = +1 Next LtlModalTitleUploadDocumentoCliente.Text = "Subir " & Documentacion BtnModalClienteDocumentoCancelar.Visible = False UpModalTitleUploadDocumentoCliente.Update() UpModalButtonUploadDocumentoCliente.Update() RegistraScript("$('#DivDocsClienteUpload').modal({ backdrop: 'static', keyboard: false});", "modalOC") End Sub #End Region #Region " SALDAR VENTA " Protected Sub BtnSaldarVenta_Click(sender As Object, e As EventArgs) SaldarVenta() End Sub Private Sub SaldarVenta() 'Dim ObjVenta As New ClsVentas 'If ObjVenta.VentasSaldar(CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, -1, -1, TxtFechaSaldarVenta.Text.ToDate) Then ' Alert("Documento Saldado") 'End If 'ObjVenta.Dispose() 'RegistraScript("$('#ModalSaldarVenta').modal('hide')", "ModalSaldarVentaHidde") Dim CvePrePoliza As Integer = 0 Dim MsgError As String = "" 'Dim ObjIE As New ClsBancos Dim FechaUltimaFluctuacion As Date = MinFecha Dim TipoCambioFluctuacion As Decimal = 1 Dim tFecha As Date = TxtFechaSaldarVenta.Text.ToDate Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then If UltimaFluctuacion.FechaFluctuacion <= tFecha Then FechaUltimaFluctuacion = UltimaFluctuacion.FechaFluctuacion TipoCambioFluctuacion = UltimaFluctuacion.TCFluctuacion End If End If 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then ' If ObjIE.DtResultados.Rows.Count > 0 Then ' Dim tFecha As Date = TxtFechaSaldarVenta.Text.ToDate ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha < #" & Fecha & "#", "Fecha DESC") ' If drr IsNot Nothing Then ' FechaUltimaFluctuacion = drr("Fecha").ToString().ToDate ' TipoCambioFluctuacion = drr("TipoCambio").ToString().ToDecimal ' End If ' End If 'End If ' ObjIE.Dispose() Dim Total As Decimal = 0 Dim Saldo As Decimal = 0 Dim SubTotal As Decimal Dim IVA As Decimal Dim IEPS As Decimal Dim Descuentos As Decimal Dim TCVenta As Decimal Dim FechaVenta As Date Dim FechaPago As Date = TxtFechaSaldarVenta.Text.ToDateTime() Dim tCveMoneda As Integer Dim PorcentajePago As Decimal Dim SerieFolio As String = "" Dim CveSubProyecto As Integer Dim CveClasificacion As Integer Dim PorcentajeImpuesto As Decimal = 0 ViewState("CveVenta") = IfNull(Request("CveVenta"), 0).ToString.ToEntero Dim Obj As New ClsVentas If Obj.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then Dim DbRowVenta As DataRow = Obj.DtResultados.FiltroPrimero("") ViewState("SaldoVenta") = DbRowVenta("Saldo").ToString() Total = DbRowVenta("Total").ToString.ToDecimal SubTotal = DbRowVenta("Saldo").ToString.ToDecimal SerieFolio = DbRowVenta("SerieFolio").ToString Saldo = SaldoVenta PorcentajePago = SaldoVenta / Total IVA = PorcentajePago * DbRowVenta("IVA").ToString.ToDecimal IEPS = PorcentajePago * DbRowVenta("IEPS").ToString.ToDecimal Descuentos = PorcentajePago * DbRowVenta("Descuento").ToString.ToDecimal TCVenta = DbRowVenta("TipoCambio").ToString.ToDecimal FechaVenta = DbRowVenta("Fecha").ToString.ToDate ' FechaPago = TxtFechaSaldarVenta.Text.ToDate tCveMoneda = DbRowVenta("CveMoneda").ToString.ToEntero ViewState("CveCliente") = DbRowVenta("CveCliente").ToString.ToEntero CveSubProyecto = DbRowVenta("CveSubProyecto").ToString.ToEntero PorcentajeImpuesto = DbRowVenta("PorcentajeIVA").ToString.ToDecimal If Obj.GetVentaDetalle(CveVenta) Then CveClasificacion = Obj.DtResultados.MAX("CveClasificacion").ToEntero End If SubTotal = Saldo - IVA - IEPS End If Obj.Dispose() Dim TCPago As Decimal = GlobalTipoCambio(FechaPago).FormatoNumero(4).ToDecimal Dim CveConceptoDeduccion As Integer = 211 'si la fecha del documento es anterior a su ultima fluctuación. toma el Tc de la fluctuacion If tCveMoneda = 2 Then If FechaVenta < FechaUltimaFluctuacion Then TCVenta = TipoCambioFluctuacion End If End If 'condicionante Dim ClienteMovto As Boolean = True Dim SubtotalMovto As Boolean = False Dim CveConceptoCliente As Integer = 2 Dim ImpuestosMovto As Boolean = False Dim ConceptoPartida As String = "saldado " & SerieFolio 'If CveConceptoDeduccion = 255 Then IdCuentaContableNoDeducible = UsuarioActual.Empresa.Funcionalidad(266).ToEntero() 'If CveConceptoDeduccion = 211 Then IdCuentaContableNoDeducible = UsuarioActual.Empresa.Funcionalidad(559).ToEntero() 'If CveConceptoDeduccion = 263 Then IdCuentaContableNoDeducible = UsuarioActual.Empresa.Funcionalidad(537).ToEntero() 'If CveConceptoDeduccion = 252 Then IdCuentaContableNoDeducible = 0 'If CveConceptoDeduccion = 78 Then IdCuentaContableNoDeducible = 0 If UsuarioActual.CveEmpresa.Contiene(4, 7, 11, 12, 122) Then ClienteMovto = False : Saldo = Saldo * -1 ImpuestosMovto = True : IVA = IVA * -1 CveConceptoCliente = 1 End If Dim UsaComplementaria As Boolean = True Dim ObjConta As New ClsContabilidad ObjConta.IniciaTransacSQL() Try If MsgError = "" AndAlso Saldo > 0 Then CvePrePoliza = ObjConta.AddPrePolizas("Ventas/Saldarr", 47, SaldoVenta, SaldoVenta, tCveMoneda, FechaPago, ConceptoPartida, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) If UsaComplementaria AndAlso tCveMoneda = 2 Then 'normal If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, ClienteMovto, Saldo, If(tCveMoneda = 1, Saldo, Saldo), CveConceptoCliente, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, TipoCambio:=TCVenta, TipoCambioPago:=TCPago) Then MsgError = "Ocurrio un error al saldar el movimiento" End If 'complementaria If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, ClienteMovto, 0, If(tCveMoneda = 1, Saldo, (Saldo * TCVenta) - Saldo), 207, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, ImporteME:=Saldo, TipoCambio:=TCVenta, TipoCambioPago:=TCPago) Then MsgError = "Ocurrio un error al saldar el movimiento" End If Else If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, ClienteMovto, Saldo, If(tCveMoneda = 1, Saldo, Saldo * TCVenta), CveConceptoCliente, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, TipoCambio:=TCVenta, TipoCambioPago:=TCPago) Then MsgError = "Ocurrio un error al saldar el movimiento" End If End If 'fluctuación. If tCveMoneda = 2 Then Dim ImporteFluctuacion As Decimal = 0 ImporteFluctuacion = Saldo * (TCPago - TCVenta) If TCPago > TCVenta Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Math.Abs(ImporteFluctuacion), Math.Abs(ImporteFluctuacion), 64, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, TipoCambio:=TCVenta, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyecto) Then MsgError = "Ocurrio un error al saldar el movimiento" End If Else If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Math.Abs(ImporteFluctuacion), Math.Abs(ImporteFluctuacion), 65, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, TipoCambio:=TCVenta, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyecto) Then MsgError = "Ocurrio un error al saldar el movimiento" End If End If 'cuando hay pago en dólares, se ajusta el concepto de subtotal, SubTotal = (Saldo * TCVenta) + ImporteFluctuacion - (IVA * TCVenta) - (IEPS * TCVenta) End If If IVA > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, ImpuestosMovto, IVA, If(tCveMoneda = 1, IVA, IVA * TCVenta), 13, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, PorcentajeImpuesto:=PorcentajeImpuesto, TipoCambio:=TCVenta, TipoCambioPago:=TCPago) Then MsgError = "Ocurrio un error al saldar el movimiento" End If If IEPS > 0 AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, ImpuestosMovto, IEPS, If(tCveMoneda = 1, IEPS, IEPS * TCVenta), 38, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, PorcentajeImpuesto:=PorcentajeImpuesto, TipoCambio:=TCVenta, TipoCambioPago:=TCPago) Then MsgError = "Ocurrio un error al saldar el movimiento" End If 'al gasto,Subtotal If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, SubtotalMovto, SubTotal, SubTotal, CveConceptoDeduccion, SerieFolio, ConceptoPartida, CveCliente:=CveCliente, CveVenta:=CveVenta, CveCuenta:=-1, TipoCambio:=TCVenta, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyecto) Then MsgError = "Ocurrio un error al saldar el movimiento" End If If ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 5) Then If ObjConta.ValorPolizaDescuadre > 0 Then MsgError = ObjConta.MensajePolizaDescuadre + " " + ObjConta.ValorDiferencia GuardaLogAD($"Ventas/ClientesAbonar | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") End If End If Else MsgError = "Saldo Cero" End If Catch ex As Exception MsgError = "Ocurrió un error al saldar" GuardaLog(ex.ToString()) End Try If MsgError = "" Then 'ObjConta.RollBack() ObjConta.Commit() RegistraScript("$('#ModalSaldarVenta').modal('hide')", "ModalSaldarVentaHidde") Alert("Documento Saldado") Else ObjConta.RollBack() Alert(MsgError, TipoMensaje.MsgError) End If ObjConta.Dispose() End Sub #End Region #Region "PAQUETERIA GUIAS" Protected Sub LnkAgregarGuia_Click(sender As Object, e As EventArgs) ''DivModalGuias 'DdlPaqueteria.Items.Clear() 'DdlPaqueteria.DataSource = GlobalDTPaqueterias 'DdlPaqueteria.DataBind() 'DdlPaqueteria.Items.Insert(0, New ListItem("Seleccione ", "-1")) 'UpModalGuias.Update() 'CargaGvPaqueteria() 'RegistraScript("$('#DivModalGuias').modal({ backdrop: 'static', keyboard: false });") '' 21/Marzo/2018 - Se agrego Link a Modulo Paqueterias Guias RegistraScript(String.Format("AbrirVentana('/General/PopUpPaqueteriasGuias.aspx?CveVenta={0}',800,620);", CveVenta)) End Sub Protected Sub BtnAgregarGuia_Click(sender As Object, e As EventArgs) Dim objInventario As New ClsInventarios Dim CvePaqueteriaGuia As Integer If objInventario.AddPaqueteriaGuia(DdlPaqueteria.SelectedValue.ToEntero(), -1, TxtPaqueteriaGuia.Text.Trim, TxtPaqueteriaNumcajas.Text.ToEntero(), TxtPaqueteriaPeso.Text.ToDecimal, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, TxtRastreo.Text.Trim, TxtDimensiones.Text.Trim, TxtFechaEst.Text.Trim, CveVenta:=CveVenta) Then CvePaqueteriaGuia = objInventario.DtResultados.Rows(0)(0).ToString().ToEntero() CargaGvPaqueteria() LimpiacontrolesPaqueteria() 'Envia notificacion se agrego guia vacia eliminada If TxtPaqueteriaGuia.Text.Trim.Length = 0 Then EnviarCorreoNotificacionGuias(2, $"{LblSerie.Text}-{TxtFolio.Text}", NombreCliente, "", DdlPaqueteria.SelectedItem.Text, "", TxtRastreo.Text, CveVenta, TmpDT, CvePaqueteriaGuia:=CvePaqueteriaGuia) End If End If objInventario.Dispose() End Sub Protected Sub LnkRemovePaqueteriaGuia_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim CvePaqueteriaGuia As Integer = GvRow.DataKey("CvePaqueteriaGuia").ToString().ToEntero() Dim Guia As String = GvRow.DataKey("Guia").ToString() Dim objInventario As New ClsInventarios If objInventario.RemovePaqueteriaGuia(CvePaqueteriaGuia, UsuarioActual.CveEmpresa) Then CargaGvPaqueteria() If Guia.Trim.Length = 0 Then 'Envia notificacion se elimino guia vacia eliminada EnviarCorreoNotificacionGuias(3, $"{LblSerie.Text}-{TxtFolio.Text}", NombreCliente, "", DdlPaqueteria.SelectedItem.Text, "", TxtRastreo.Text, CveVenta, TmpDT, CvePaqueteriaGuia:=CvePaqueteriaGuia) End If End If objInventario.Dispose() End Sub Private Sub CargaGvPaqueteria() Dim objInventario As New ClsInventarios If objInventario.GetPaqueteriaGuia(-1, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then GvPaqueriaGuias.DataSource = objInventario.DtResultados If objInventario.DtResultados.Rows.Count > 0 Then BtnAgregarGuia.Attributes.Add("data-toggle", "confirmation") BtnAgregarGuia.Attributes.Add("data-popout", "true") BtnAgregarGuia.Attributes.Add("data-original-title", "¿Está seguro de registrar una nueva guia a la factura?") BtnAgregarGuia.Attributes.Add("data-btn-ok-label", "si") Else BtnAgregarGuia.Attributes.Remove("data-toggle") BtnAgregarGuia.Attributes.Remove("data-popout") BtnAgregarGuia.Attributes.Remove("data-original-title") BtnAgregarGuia.Attributes.Remove("data-btn-ok-label") End If If objInventario.DtResultados.Rows.Count > 1 Then EnviarCorreoNotificacionGuias(4, $"{LblSerie.Text}-{TxtFolio.Text}", NombreCliente, "", DdlPaqueteria.SelectedItem.Text, "", TxtRastreo.Text, CveVenta, TmpDT, CountPaqueteria:=objInventario.DtResultados.Rows.Count) End If Else GvPaqueriaGuias.DataSource = Nothing End If objInventario.Dispose() GvPaqueriaGuias.DataBind() UpModalGuias.Update() End Sub Private Sub LimpiacontrolesPaqueteria() DdlPaqueteria.SelectedIndex = 0 TxtPaqueteriaGuia.Text = "" TxtPaqueteriaNumcajas.Text = "" TxtPaqueteriaPeso.Text = "" TxtRastreo.Text = "" TxtDimensiones.Text = "" TxtFechaEst.Text = "" End Sub Protected Sub LnkGuiaPaqueteriaGuia_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim CveMovimiento As Integer = -1 Dim CvePaqueteriaGuia As Integer = GvRow.DataKey("CvePaqueteriaGuia").ToString().ToEntero() Dim NumCajas As String = GvRow.DataKey("NumCajas").ToString() Dim Guia As String = GvRow.DataKey("Guia").ToString() Dim Peso As String = GvRow.DataKey("Peso").ToString().ToDecimal.ToString("####.00") Dim DTDatosClienteGuia As New DataTable Dim DTMovimientosDetalle As New DataTable Dim CvePaqueteria As Integer = GvRow.DataKey("CvePaqueteria").ToString().ToEntero() Dim RutaRdlc As String = Server.MapPath("~") & "\Empresas\Grales\Formatos\GuiasFormato" & CvePaqueteria & ".rdlc" Dim Rastreo As String = GvRow.DataKey("Rastreo") Dim Dimensiones As String = GvRow.DataKey("Dimensiones") Dim FechaEstimada As String = GvRow.DataKey("FechaEstimada") Dim ValorStimado As Double = 0 If Not File.Exists(RutaRdlc) Then RutaRdlc = Server.MapPath("~") & "\Empresas\Grales\Formatos\GuiasFormato0.rdlc" End If RutaRdlc = RutaRdlc.Replace(Server.MapPath("~") & "\", "") Dim params As New List(Of ReportParameter) Dim ObjInventario As New ClsInventarios If ObjInventario.GetPaqueteriaGuiasInfoFormato(CveMovimiento, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then DTDatosClienteGuia = ObjInventario.DtResultados Else ObjInventario.Dispose() Exit Sub End If If ObjInventario.GetMovimientosDetalle(CveMovimiento, UsuarioActual.CveEmpresa) Then DTMovimientosDetalle = ObjInventario.DtResultados DTMovimientosDetalle.Columns.Add("Peso") DTMovimientosDetalle.Columns.Add("Dimensiones") DTMovimientosDetalle.AcceptChanges() For Each Drow As DataRow In DTMovimientosDetalle.Rows Drow("Peso") = Peso Drow("Dimensiones") = Dimensiones DTMovimientosDetalle.AcceptChanges() Next ValorStimado = DTMovimientosDetalle.SUM("PU") ObjInventario.Dispose() Else ObjInventario.Dispose() Exit Sub End If If DTDatosClienteGuia.Rows.Count > 0 Then params.Add(New ReportParameter("NombreComercial", DTDatosClienteGuia.Rows(0)("NombreComercial").ToString())) params.Add(New ReportParameter("Direccion", DTDatosClienteGuia.Rows(0)("Direccion").ToString())) params.Add(New ReportParameter("Colonia", DTDatosClienteGuia.Rows(0)("Colonia").ToString())) params.Add(New ReportParameter("NoExt", DTDatosClienteGuia.Rows(0)("NoExt").ToString())) params.Add(New ReportParameter("NoInt", DTDatosClienteGuia.Rows(0)("NoInt").ToString())) params.Add(New ReportParameter("Localidad", DTDatosClienteGuia.Rows(0)("Localidad").ToString())) params.Add(New ReportParameter("Telefono", DTDatosClienteGuia.Rows(0)("Telefono").ToString())) params.Add(New ReportParameter("RFCCliente", DTDatosClienteGuia.Rows(0)("RFC").ToString())) params.Add(New ReportParameter("CiudadCliente", DTDatosClienteGuia.Rows(0)("Ciudad").ToString())) Else Exit Sub End If Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") Dim logouri As String = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("EmpresaDireccion", UsuarioActual.Empresa.Direccion)) params.Add(New ReportParameter("EmpresaTelefono", UsuarioActual.Empresa.Telefono)) params.Add(New ReportParameter("EmpresaColonia", UsuarioActual.Empresa.Colonia)) params.Add(New ReportParameter("EmpresaLocalidad", UsuarioActual.Empresa.Localidad)) params.Add(New ReportParameter("RFCEmpresa", UsuarioActual.Empresa.RFC)) params.Add(New ReportParameter("CiudadEmpresa", UsuarioActual.Empresa.Ciudad)) params.Add(New ReportParameter("EmpresaTelefono", UsuarioActual.Empresa.Telefono)) params.Add(New ReportParameter("NumCajas", NumCajas)) params.Add(New ReportParameter("Peso", Peso)) params.Add(New ReportParameter("Guia", Guia)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) params.Add(New ReportParameter("Anio", NowADS().Year.ToString())) params.Add(New ReportParameter("Mes", NowADS().Month.ToString("00"))) params.Add(New ReportParameter("Dia", NowADS().Day.ToString("00"))) params.Add(New ReportParameter("Rastreo", Rastreo)) params.Add(New ReportParameter("Dimensiones", Dimensiones)) params.Add(New ReportParameter("FechaEstimada", FechaEstimada)) params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) ImprimirPDF(RutaRdlc, DTMovimientosDetalle, params, $"ReporteGuia_{NowADS().ToString("yyyyMMddhhmmss")}") End Sub Private Sub GvPaqueriaGuias_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvPaqueriaGuias.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then Dim Lnk As LinkButton = e.Row.FCLinkButton("LnkGuiaPaqueteriaGuia") Dim Destinatario As String = e.Row.DataKey("Mail").ToString() If Destinatario.Length = 0 Then e.Row.FCLinkButton("LnkGuiaPaqueteriaMail").Visible = False Else e.Row.FCLinkButton("LnkGuiaPaqueteriaMail").Attributes.Add("title", "Enviar correo a: " & Destinatario) End If ScriptManager.GetCurrent(Me).RegisterPostBackControl(Lnk) End If End Sub Private Sub GvPaqueteriaCreaEnlaces() For Each GvRow As GridViewRow In GvPaqueriaGuias.Rows If GvRow.RowType = DataControlRowType.DataRow Then Dim Lnk As LinkButton = GvRow.FCLinkButton("LnkGuiaPaqueteriaGuia") ScriptManager.GetCurrent(Me).RegisterPostBackControl(Lnk) End If Next End Sub Protected Sub LnkGuiaPaqueteriaMail_Click(sender As Object, e As EventArgs) Dim GvRow As GridViewRow = DirectCast(DirectCast(sender, LinkButton).NamingContainer, GridViewRow) Dim SerieFolio As String = GvRow.DataKey("SerieFolio").ToString() Dim NombreComercial As String = GvRow.DataKey("NombreComercial").ToString() Dim Destinatario As String = GvRow.DataKey("Mail").ToString() Dim Paqueteria As String = GvRow.DataKey("Paqueteria").ToString() Dim Guia As String = GvRow.DataKey("Guia").ToString() Dim Rastreo As String = GvRow.DataKey("Rastreo").ToString() Dim CveVenta As Integer = GvRow.DataKey("CveVenta").ToEntero() EnviarCorreoNotificacionGuias(1, SerieFolio, NombreComercial, Destinatario, Paqueteria, Guia, Rastreo, CveVenta, New DataTable) End Sub Private Sub EnviarCorreoNotificacionGuias(Tipo As Integer, SerieFolio As String, NombreComercial As String, Destinatario As String, Paqueteria As String, Guia As String, Rastreo As String, CveVenta As Integer, tDtMovimientos As DataTable, Optional CountPaqueteria As Integer = Nothing, Optional CvePaqueteriaGuia As Integer = -1) Dim Correo As New ClsSisMail() Dim Asunto As String = UsuarioActual.Empresa.NombreCorto & " Envio de pedido: " & SerieFolio Dim Cuerpo As New StringBuilder Select Case Tipo Case 1 'Notificacion Normal ' Dim ObjCliente As New ClsClientes() 'Dim FolioOC As String = "" 'Dim FolioPedido As String = "" 'Dim CorreoDestino = "" 'Dim CveVendedor As Integer = DdlVendedor.SelectedValue.ToEntero() 'Dim CorreoVendedor As String = "" 'Dim CorreoVendedorUsuarioActual As String = "" 'If CveVendedor > 0 Then ' Dim DtTemp As New DataTable ' DtTemp = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros($"CveVendedor={CveVendedor}") ' If DtTemp.Rows.Count > 0 Then ' CorreoVendedor = DtTemp.Rows(0)("Correo").ToString() ' End If 'End If 'Try ' If UsuarioActual.CveVendedor > 0 Then ' Dim DtTemp As New DataTable ' DtTemp = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltraParametros($"CveVendedor={ UsuarioActual.CveVendedor}") ' If DtTemp.Rows.Count > 0 Then ' CorreoVendedorUsuarioActual = DtTemp.Rows(0)("Correo").ToString() ' End If ' End If 'Catch ex As Exception 'End Try 'If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then ' If ObjCliente.CobranzaCorreo <> ObjCliente.Mail Then ' CorreoDestino = $"{ObjCliente.CobranzaCorreo};{ObjCliente.Mail }" ' Else ' CorreoDestino = $"{ObjCliente.Mail}" ' End If 'End If 'ObjCliente.Dispose() 'If CorreoVendedor.Trim.Length > 0 Then ' CorreoDestino = $"{CorreoDestino};{CorreoVendedor}" 'End If 'If CorreoVendedorUsuarioActual.Trim.Length > 0 Then ' CorreoDestino = $"{CorreoDestino};{CorreoVendedorUsuarioActual}" 'End If 'If CveOC > 0 Then ' Dim ObjOC As New ClsOC ' If ObjOC.GetOC(CveOC, UsuarioActual.CveEmpresa) Then ' FolioOC = ObjOC.Folio.ToString() ' End If ' ObjOC.Dispose() 'End If 'If CvePedido > 0 Then ' Dim ObjVenta As New ClsVentas ' If ObjVenta.GetVenta(CvePedido, UsuarioActual.CveEmpresa) Then ' FolioPedido = ObjVenta.Folio.ToString() ' End If ' ObjVenta.Dispose() 'End If Cuerpo.AppendLine($"Estimado {NombreComercial} le informamos que los productos de la factura {SerieFolio} han sido enviados mediante la paquetería {Paqueteria} con Guia {Guia} , Rastreo {Rastreo} .

    ") If tDtMovimientos IsNot Nothing AndAlso tDtMovimientos.Rows.Count > 0 Then Cuerpo.AppendLine("") Cuerpo.AppendLine("") For Each Drow As DataRow In tDtMovimientos.Rows Cuerpo.AppendLine($"") Next Cuerpo.AppendLine("
    CantidadProducto
    {Drow("Cantidad").ToString().ToEntero() }{Drow("PS").ToString()}
    ") End If Cuerpo.AppendLine("

    Dudas y aclaraciones con su coordinador empresarial.") ' Destinatario = "sig.buzon@gmail.com" If Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString()) Then GuardarBitacora(CveVenta, "", "Notificación de envío de productos al cliente") Alert("Correo envíado exitosamente a " & Destinatario) Else Alert("Ocurrió un error al envíar el correo a " & Destinatario) End If Exit Select Case 2 'Notificacion Guia vacia 'Cuerpo.AppendLine($"Se informa que en la venta {SerieFolio} se agrego la paqueteria {Paqueteria} con guia vacia por el usuario { UsuarioActual.Nombre }.

    ") 'If tDtMovimientos IsNot Nothing AndAlso tDtMovimientos.Rows.Count > 0 Then ' Cuerpo.AppendLine("") ' Cuerpo.AppendLine("") ' For Each Drow As DataRow In tDtMovimientos.Rows ' Cuerpo.AppendLine($"") ' Next ' Cuerpo.AppendLine("
    CantidadProducto
    {Drow("Cantidad").ToString().ToEntero() }{Drow("PS").ToString()}
    ") 'End If 'Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString()) 'Exit Select Case 3 'Notificacion Gui Vacia Eliminada 'Cuerpo.AppendLine($"Se informa que en la venta {SerieFolio} se elimino la paqueteria {Paqueteria} con guia vacia por el usuario { UsuarioActual.Nombre }.

    ") 'If tDtMovimientos IsNot Nothing AndAlso tDtMovimientos.Rows.Count > 0 Then ' Cuerpo.AppendLine("") ' Cuerpo.AppendLine("") ' For Each Drow As DataRow In tDtMovimientos.Rows ' Cuerpo.AppendLine($"") ' Next ' Cuerpo.AppendLine("
    CantidadProducto
    {Drow("Cantidad").ToString().ToEntero() }{Drow("PS").ToString()}
    ") ' Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString()) 'End If Exit Select Case 4 'mas de una guia Cuerpo.AppendLine($"Se informa que en la venta {SerieFolio} cuenta con { CountPaqueteria } paqueterias, se agrego la paqueteria {Paqueteria}, usuario { UsuarioActual.Nombre }.

    ") Destinatario = "" If UsuarioActual.CveEmpresa.Contiene(72, 80) Then Destinatario = "luzdelmarcoeto@compuproveedores.com;ramonmartinez@compuproveedores.com" End If 'correo a ramón y a luz If tDtMovimientos IsNot Nothing AndAlso tDtMovimientos.Rows.Count > 0 Then Cuerpo.AppendLine("") Cuerpo.AppendLine("") For Each Drow As DataRow In tDtMovimientos.Rows Cuerpo.AppendLine($"") Next Cuerpo.AppendLine("
    CantidadProducto
    {Drow("Cantidad").ToString().ToEntero() }{Drow("PS").ToString()}
    ") End If Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString()) Cuerpo.Clear() Exit Select End Select End Sub Private Sub GuardarBitacora(CveVenta As Integer, RutaAdjunto As String, Obser As String) Dim ObjEventos As New ClsOIEventos() Try If ObjEventos.AddEventoBitacora(Obser, "", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then End If Catch ex As Exception OnError("Se presento un Error al guardar la Bitacora", ex) End Try ObjEventos.Dispose() End Sub Private Function RegistrarPaqueteriaGuia(ByRef ObjGeneral As ClsGenerales, CveVenta As Integer) As Boolean Dim ErrorMovInv As Boolean = False Dim CveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim CveEstatus As Integer = 1 Dim Fecha As String = NowADS().ToString("dd/MM/yyyy") Dim FechaEstimada As String = "-1" Dim NoCajas As Integer = 0 Dim Observaciones As String = "" Dim CvePaqueteria As Integer = -1 ' GlobalDTPaqueterias(UsuarioActual.CveEmpresa, 0).FiltroPrimeroValor("CvePaqueteria", "").ToEntero If CveSubProyecto > 0 Then Dim CvePaqueteriaGuia As Integer = ObjGeneral.AddPaqueteriasGuias(CvePaqueteria, 9, CveEstatus, CveSubProyecto, Fecha, "", "", NoCajas, 0.00, "-1", FechaEstimada, Observaciones, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, ImplicaCosto:=False) If CvePaqueteriaGuia > 0 Then If CveVenta > 0 OrElse CveSubProyecto > 0 Then If Not ObjGeneral.AddPaqueteriasGuiasDetalles(CvePaqueteriaGuia, CveVenta, -1, -1, -1) Then ErrorMovInv = True End If End If Else ErrorMovInv = True End If Else ErrorMovInv = True End If Return Not ErrorMovInv End Function #End Region #Region " APLICAR NOTA DE CREDITO " Private Sub InicializaAplicarNC() 'SI NO ES VENTA EXISTENTE NO DEBE ENTRAR ESTE PROCESO If CveVenta <= 0 Then Exit Sub End If AplicaNCMasiva = False AplicaNC = False 'SOLO APLICA PARA INGRESOS O ANTICIPOS If (Not DdlTipoComprobante.SelectedValue.Contiene("Ing", "Ant")) Then ''If Not HplSaldoAuxiliar.Text.ToDouble > 0 Then LkNotaCredito.Visible = False LBNotaCredito.Visible = False Exit Sub End If 'sino tiene el permiso de peude generar NC If Not UsuarioActual.TienePermisoProceso(175) Then LBNotaCredito.Visible = False Exit Sub End If If Not HplSaldoAuxiliar.Text.ToDouble > 0 Then LBNotaCredito.Visible = False Exit Sub End If If DeshabilitarAplicarNotaDeCredito(LblRFC.Text) Then LBNotaCredito.Visible = False Exit Sub End If LBNotaCredito.Visible = True 'LkNotaCredito.Visible = False TxtNCPorcentaje.Attributes.Add("onkeyup", "CalculaImporteNC();") TxtNCImporte.Attributes.Add("onkeyup", "CalculaPorcentajeNC();") Dim PorcentajeMaximo As Decimal = 0 If TxtTotal.Text.ToDouble > 0 Then PorcentajeMaximo = HplSaldoAuxiliar.Text.ToDecimal * 100 / TxtTotal.Text.ToDecimal Else RVNCPorcentaje.MinimumValue = "0" RVTxtNCImporte.MinimumValue = "0" End If TxtNCPorcentaje.Text = PorcentajeMaximo.FormatoNumero(4) If PorcentajeMaximo < RVNCPorcentaje.MinimumValue.ToDouble Then RVNCPorcentaje.MinimumValue = PorcentajeMaximo.FormatoNumero(4).ToDouble.ToString() End If RVNCPorcentaje.MaximumValue = PorcentajeMaximo.FormatoNumero(4).ToDouble.ToString() TxtNCImporte.Text = ((PorcentajeMaximo * TxtTotal.Text.ToDouble) / 100).FormatoNumero If ((PorcentajeMaximo * TxtTotal.Text.ToDouble) / 100).FormatoNumero().ToDouble < RVTxtNCImporte.MinimumValue.ToDouble Then RVTxtNCImporte.MinimumValue = ((PorcentajeMaximo * TxtTotal.Text.ToDouble) / 100).FormatoNumero().ToDouble.ToString() End If RVTxtNCImporte.MaximumValue = ((PorcentajeMaximo * TxtTotal.Text.ToDouble) / 100).FormatoNumero().ToDouble.ToString() 'RVIRNC.MinimumValue = RVTxtNCImporte.MinimumValue 'RVIRNC.MaximumValue = RVTxtNCImporte.MaximumValue UpAplicarNC.Update() End Sub Protected Sub DdlVentaUsado_SelectedIndexChanged(sender As Object, e As EventArgs) RblRNCTipo_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) End Sub Private Sub InicializaAplicarNCMasiva() 'If Not UsuarioActual.CveUsuario = 100 Then ' If Not UsuarioActual.CveEmpresa.Contiene(1, 72, 80, 119) Then ' Exit Sub ' End If 'End If 'sino tiene el permiso de peude generar NC If Not UsuarioActual.TienePermisoProceso(175) Then 'sino tiene el permiso de peude generar NC no directas, solo relacionadas por proceso If Not UsuarioActual.TienePermisoProceso(334) Then 'sino tiene el 175 y tampoco el 334, que se salga Exit Sub End If End If AplicaNCMasiva = True LBNotaCredito.Visible = True 'LkNotaCredito.Visible = False TxtNCPorcentaje.Attributes.Add("onkeyup", "CalculaImporteNCMasivo();") TxtNCImporte.Text = "0.00" TxtNCImporte.Enabled = False RVTxtNCImporte.Enabled = False UpAplicarNC.Update() UpModalRemisionesNC.Update() End Sub Private Sub CargaCxC() Dim CveClienteSucursal As Integer = -1 If DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then CveClienteSucursal = DdlSucursalCliente.SelectedValue.ToEntero() End If Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetCxCClienteDetalle(ViewState("CveCliente").ToString().ToEntero(), "-1", "-1", -1, -1, UsuarioActual.CveEmpresa, CveClienteSucursal:=CveClienteSucursal) Then Dim DtTemporal As DataTable = ObjMovtos.DtResultados.FiltraParametros("TipoDocto NOT IN ('RNC','Rem') AND Tipo = 'Act' AND CveVenta > 0", "Moneda, OrdenVencimiento, FechaVencimiento") GvCxC.DataSource = DtTemporal End If If UsuarioActual.Empresa.Funcionalidad(713) <> "" Then GvCxC.Columns(6).Visible = True 'columna de IEPS ObjMovtos.Dispose() GvCxC.DataBind() UpAplicarNC.Update() End Sub Protected Sub RblRNCTipo_SelectedIndexChanged(sender As Object, e As EventArgs) ChkMostarProductosRNC.Checked = False DivRNCCargosDetalle.Visible = False DivRNCCargos.Visible = True ChkMostarProductosRNCBon.Checked = False DivRNCBonificacionesDetalle.Visible = False DivRNCBonificaciones.Visible = True Select Case RblRNCTipo.SelectedValue Case "1" 'CARGOS LtlCargos.Text = "CARGOS" DivRNCCargo.Visible = True DivRNCBon.Visible = False CargaRNC(DdlVentaUsado.SelectedValue.ToEntero(), False, False) Case "2" 'BONIFICACIONES DivRNCCargo.Visible = False DivRNCBon.Visible = True CargaRNC(-1, True, False) Case "3" 'AJUSTE/GARANTIAS LtlCargos.Text = "AJUSTES/GARANTIAS" DivRNCCargo.Visible = True DivRNCBon.Visible = False CargaRNC(DdlVentaUsado.SelectedValue.ToEntero(), False, True) End Select End Sub Protected Sub RblRNCTipoDesc_SelectedIndexChanged(sender As Object, e As EventArgs) Select Case RblRNCTipoDesc.SelectedValue Case "1" 'CARGOS LtlCargoDesc.Text = "CARGOS" DivRNCCargoDesc.Visible = True DivRNCBonDesc.Visible = True If ChkMostarProductosRNCDesc.Checked Then DivRNCCargoDescTotal.Visible = False DivRNCCargoDescDetalle.Visible = True CargaRNCDetalleDesc() Else DivRNCCargoDescTotal.Visible = True DivRNCCargoDescDetalle.Visible = False CargaRNCDesc(False, False) End If CargaBonificacionesDesc("-1", True) Case "2" 'BONIFICACIONES DivRNCCargoDesc.Visible = False DivRNCBonDesc.Visible = True If ChkMostarProductosRNCDesBonificacion.Checked Then DivRNCBonDescTotal.Visible = False DivRNCBonDescDetalle.Visible = True CargaRNCDetalleDescBonificacion() Else DivRNCBonDescTotal.Visible = True DivRNCBonDescDetalle.Visible = False CargaRNCDesc(True, False) End If Case "3" 'AJUSTE/GARANTIAS LtlCargoDesc.Text = "AJUSTES/GARANTIAS" DivRNCCargoDesc.Visible = True DivRNCBonDesc.Visible = True If ChkMostarProductosRNCDesc.Checked Then DivRNCCargoDescTotal.Visible = False DivRNCCargoDescDetalle.Visible = True CargaRNCDetalleDesc(True) Else DivRNCCargoDescTotal.Visible = True DivRNCCargoDescDetalle.Visible = False CargaRNCDesc(False, True) End If CargaBonificacionesDesc("-1", True) End Select End Sub Protected Sub ChkMostarProductosRNC_CheckedChanged(sender As Object, e As EventArgs) If ChkMostarProductosRNC.Checked Then DivRNCCargos.Visible = False DivRNCCargosDetalle.Visible = True CargaRNCDetalle(DdlVentaUsado.SelectedValue.ToEntero(), CargaSoloGarantias:=RblRNCTipo.SelectedValue = "3") Else DivRNCCargos.Visible = True DivRNCCargosDetalle.Visible = False RblRNCTipo_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) End If UpModalRemisionesNC.Update() End Sub Protected Sub ChkMostarProductosRNCBon_CheckedChanged(sender As Object, e As EventArgs) If ChkMostarProductosRNCBon.Checked Then DivRNCBonificaciones.Visible = False DivRNCBonificacionesDetalle.Visible = True CargaRNCDetalleBonificacion(DdlVentaUsado.SelectedValue.ToEntero()) Else DivRNCBonificaciones.Visible = True DivRNCBonificacionesDetalle.Visible = False RblRNCTipo_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) End If UpModalRemisionesNC.Update() End Sub Protected Sub ChkMostarProductosRNCDesc_CheckedChanged(sender As Object, e As EventArgs) RblRNCTipoDesc_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) UpModalRemisionesNC.Update() End Sub Protected Sub ChkMostarProductosRNCDesBonificacion_CheckedChanged(sender As Object, e As EventArgs) RblRNCTipoDesc_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) UpModalRemisionesNC.Update() End Sub Private Sub CargaRNC(Optional CveVentaUsado As Integer = -1, Optional CargarBonificaciones As Boolean = False, Optional CargarSoloGarantias As Boolean = False) Dim DtNC As DataTable = Nothing If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetAnticiposNCIxCCliente(CveCliente, CveMoneda:=-1) Then DtNC = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'RNC' AND CveVenta > 0 and Saldo > 0", "Moneda,Fecha,Folio") End If ObjMovtos.Dispose() Me.TmpDTRNCBonificacionesSeleccionadas = Nothing If DtNC IsNot Nothing Then Me.TmpDTRNCBonificacionesCliente = DtNC.FiltraParametros("TipoRNC = 2") Me.TmpDTRNCBonificacionesCliente.Columns.Add("ImporteBonificacion", GetType(Decimal)) Me.TmpDTRNCBonificacionesCliente.Columns.Add("IVABonificacion", GetType(Decimal)) Me.TmpDTRNCBonificacionesCliente.Columns.Add("CveVentaRNCCargo", GetType(Integer)) If CargarBonificaciones Then 'Me.TmpDTRNCBonificacionesSeleccionadas = Me.TmpDTRNCBonificacionesCliente.Copy() CargaBonificaciones(-1, True) End If If CargarSoloGarantias Then GvRemisionesNC.DataSource = DtNC.FiltraParametros("TipoRNC = 1 AND EsGarantia = True") Else GvRemisionesNC.DataSource = DtNC.FiltraParametros("TipoRNC = 1 AND EsGarantia = False") End If GvRemisionesNC.DataBind() 'GvRemisionesNCBon.DataSource = Me.TmpDTRNCBonificacionesSeleccionadas 'GvRemisionesNCBon.DataBind() Dim SaldoMaximoUtilizable As Decimal = 0 If CargarSoloGarantias Then Dim SaldoMaximo As Decimal = DtNC.SUMD("Saldo", "TipoRNC = 1 AND EsGarantia = True") If SaldoMaximo > 0 Then SaldoMaximoUtilizable = SaldoMaximo Else SaldoMaximoUtilizable = 0 End If Else 'SI ES DISTRUIBUIDOR DEBE CARGAR EN BASE SU SALDO DE USADOS, SI ES PISO PUEDE PERMITIR APLICAR TODO SU SALDO If ClienteEsDistribuidor Then Dim ObjAcum As New ClsAcumuladores If ObjAcum.GetMovimientosDistribuidorResumen(CveCliente, UsuarioActual.CveEmpresa) Then Dim RowUsadosNC As DataRow = ObjAcum.DtResultados.Rows(2) DivSMU.Visible = True Dim SaldoMaximo As Decimal = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() If SaldoMaximo > 0 Then SaldoMaximoUtilizable = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() Else SaldoMaximoUtilizable = 0 End If Else SaldoMaximoUtilizable = 0 End If ObjAcum.Dispose() Else If DtNC IsNot Nothing Then SaldoMaximoUtilizable = DtNC.SUMD("Saldo") End If End If End If If CveVentaUsado > 0 Then DivSMU.Visible = True 'Dim FacUsado As New Modelos.Factura(UsuarioActual, CveVentaUsado, UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim DtDetalleUsado As DataTable = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVentaDetalle(CveVentaUsado) Then DtDetalleUsado = ObjVentas.DtResultados.Copy() End If End Using If DtDetalleUsado IsNot Nothing Then Dim SaldoMaximoUsadosFactura As Decimal = DtDetalleUsado.SUM("Total", "EsCargo = True") + DtDetalleUsado.SUM("ImporteIVA", "EsCargo = True") If SaldoMaximoUtilizable < SaldoMaximoUsadosFactura Then HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LtlSMU.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) Else HdnSaldoMaximoUsados.Value = SaldoMaximoUsadosFactura.ToString() LtlSMU.Text = String.Format("{0:N2}", SaldoMaximoUsadosFactura) End If Else HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LtlSMU.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) End If Else HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LtlSMU.Text = SaldoMaximoUtilizable.FormatoNumero(2) End If Else HdnSaldoMaximoUsados.Value = "0" LtlSMU.Text = "0" End If End If UpModalRemisionesNC.Update() UpDescNC.Update() End Sub Private Sub CargaRNCDesc(Optional CargarBonificaciones As Boolean = False, Optional CargarSoloGarantias As Boolean = False) Dim DtNC As DataTable = Nothing If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetAnticiposNCIxCCliente(CveCliente, CveMoneda:=-1) Then DtNC = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'RNC' AND CveVenta > 0 and Saldo > 0", "Moneda,Fecha,Folio") End If ObjMovtos.Dispose() Me.TmpDTRNCBonificacionesSeleccionadas = Nothing If DtNC IsNot Nothing Then Me.TmpDTRNCBonificacionesCliente = DtNC.FiltraParametros("TipoRNC = 2") Me.TmpDTRNCBonificacionesCliente.Columns.Add("ImporteBonificacion", GetType(Decimal)) Me.TmpDTRNCBonificacionesCliente.Columns.Add("IVABonificacion", GetType(Decimal)) Me.TmpDTRNCBonificacionesCliente.Columns.Add("CveVentaRNCCargo", GetType(Integer)) If CargarBonificaciones Then 'Me.TmpDTRNCBonificacionesSeleccionadas = Me.TmpDTRNCBonificacionesCliente.Copy() CargaBonificacionesDesc("-1", True) End If If CargarSoloGarantias Then GvDescNCCargos.DataSource = DtNC.FiltraParametros("TipoRNC = 1 AND EsGarantia = True") Else GvDescNCCargos.DataSource = DtNC.FiltraParametros("TipoRNC = 1 AND EsGarantia = False") End If GvDescNCCargos.DataBind() Dim SaldoMaximoCliente As Decimal = 0 Dim SaldoEntregado As Decimal = 0 If CargarSoloGarantias Then Dim SaldoMaximo As Decimal = DtNC.SUMD("Saldo", "TipoRNC = 1 AND EsGarantia = True") If SaldoMaximo > 0 Then SaldoMaximoCliente = SaldoMaximo Else SaldoMaximoCliente = 0 End If Else Dim ObjAcum As New ClsAcumuladores If ObjAcum.GetMovimientosDistribuidorResumen(CveCliente, UsuarioActual.CveEmpresa) Then Dim RowUsadosNC As DataRow = ObjAcum.DtResultados.Rows(2) DivSMU.Visible = True Dim SaldoMaximo As Decimal = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() If SaldoMaximo > 0 Then SaldoMaximoCliente = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() Else SaldoMaximoCliente = 0 End If Dim RowEntregado As DataRow = ObjAcum.DtResultados.Rows(1) SaldoEntregado = RowEntregado("ValorConImpuestos").ToString().ToDecimal() Else SaldoMaximoCliente = 0 End If ObjAcum.Dispose() End If Dim SaldoMaximoUsadosFactura As Decimal = Me.TmpDT.SUM("Total", "EsCargo = True") + Me.TmpDT.SUM("ImporteIVA", "EsCargo = True") If SaldoMaximoCliente > 0 AndAlso SaldoMaximoCliente < SaldoMaximoUsadosFactura Then SaldoMaximoUsadosFactura = SaldoMaximoCliente End If Dim SaldoMaximoUtilizable As Decimal = If(SaldoMaximoUsadosFactura < SaldoEntregado, SaldoMaximoUsadosFactura, SaldoEntregado) If SaldoMaximoUtilizable > 0 Then HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LblSaldoMaximoUsados.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) Else HdnSaldoMaximoUsados.Value = "0" LblSaldoMaximoUsados.Text = String.Format("{0:N2}", 0) End If Else HdnSaldoMaximoUsados.Value = "0" LblSaldoMaximoUsados.Text = "0" End If End If UpDescNC.Update() End Sub Private Sub CargaRNCDetalle(Optional CveVentaUsado As Integer = -1, Optional CargaSoloGarantias As Boolean = False) Dim DtNC As DataTable = Nothing Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetRemisionesNCCliente(CveCliente, True, CveMoneda:=-1) Then Me.TmpDTRNCDetalle = ObjMovtos.DtResultados.FiltraParametros("Total > 0") End If ObjMovtos.Dispose() If CargaSoloGarantias Then TmpDTRNCDetalle = TmpDTRNCDetalle.FiltraParametros("EsGarantia = True") Else TmpDTRNCDetalle = TmpDTRNCDetalle.FiltraParametros("EsGarantia = False") End If Me.TmpDTRNCDetalle.Columns.Add(New DataColumn("CveVentaDetalleNCGenerada", GetType(Integer))) Me.TmpDTRNCDetalleSelecciondas = Nothing Me.TmpDTRNCDetalleSelecciondas = TmpDTRNCDetalle.Clone() Me.TmpDTRNCDetalleSelecciondas.Clear() GvRemisionesNCDetalle.DataSource = TmpDTRNCDetalle.FiltraParametros("TipoRNC = 1") 'GvRemisionesNCBon.DataSource = TmpDTRNCBonificacionesSeleccionadas 'Me.TmpDTRNCBonificacionesCliente = DtNC.FiltraParametros("TipoRNC = 2") 'Me.TmpDTRNCBonificacionesCliente.Columns.Add("ImporteBonificacion", GetType(Decimal)) 'Me.TmpDTRNCBonificacionesCliente.Columns.Add("IVABonificacion", GetType(Decimal)) 'Me.TmpDTRNCBonificacionesCliente.Columns.Add("CveVentaRNCCargo", GetType(Integer)) GvRemisionesNCDetalle.DataBind() 'GvRemisionesNCBon.DataBind() Dim SaldoMaximoUtilizable As Decimal = 0 If CargaSoloGarantias Then Dim SaldoMaximo As Decimal = TmpDTRNCDetalle.SUMD("Total", "TipoRNC = 1") If SaldoMaximo > 0 Then SaldoMaximoUtilizable = SaldoMaximo Else SaldoMaximoUtilizable = 0 End If Else If Me.ClienteEsDistribuidor Then Dim ObjAcum As New ClsAcumuladores If ObjAcum.GetMovimientosDistribuidorResumen(CveCliente, UsuarioActual.CveEmpresa) Then Dim RowUsadosNC As DataRow = ObjAcum.DtResultados.Rows(2) DivSMU.Visible = True SaldoMaximoUtilizable = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() Else 'DivSMU.Visible = False SaldoMaximoUtilizable = 0 End If ObjAcum.Dispose() Else SaldoMaximoUtilizable = TmpDTRNCDetalle.SUMD("Total") End If End If If CveVentaUsado > 0 Then DivSMU.Visible = True 'Dim FacUsado As New Modelos.Factura(UsuarioActual, CveVentaUsado, UsuarioActual.CveEmpresa) Dim DtDetalleUsado As DataTable = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVentaDetalle(CveVentaUsado) Then DtDetalleUsado = ObjVentas.DtResultados.Copy() End If End Using If DtDetalleUsado IsNot Nothing Then Dim SaldoMaximoUsados As Decimal = DtDetalleUsado.SUM("Total", "EsCargo = True") + DtDetalleUsado.SUM("ImporteIVA", "EsCargo = True") HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() If SaldoMaximoUtilizable < SaldoMaximoUsados Then HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LtlSMU.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) Else HdnSaldoMaximoUsados.Value = SaldoMaximoUsados.ToString() LtlSMU.Text = String.Format("{0:N2}", SaldoMaximoUsados) End If End If Else HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LtlSMU.Text = SaldoMaximoUtilizable.FormatoNumero(2) End If UpModalRemisionesNC.Update() UpDescNC.Update() End Sub Private Sub CargaRNCDetalleDesc(Optional CargarSoloGarantias As Boolean = False) Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetRemisionesNCCliente(CveCliente, True, CveMoneda:=-1) Then Me.TmpDTRNCDetalle = ObjMovtos.DtResultados.Copy() End If ObjMovtos.Dispose() Me.TmpDTRNCDetalle.Columns.Add(New DataColumn("CveVentaDetalleNCGenerada", GetType(Integer))) Me.TmpDTRNCDetalleSelecciondas = Nothing Me.TmpDTRNCDetalleSelecciondas = TmpDTRNCDetalle.Clone() Me.TmpDTRNCDetalleSelecciondas.Clear() If CargarSoloGarantias Then GvDescNCCargosDetalle.DataSource = TmpDTRNCDetalle.FiltraParametros("TipoRNC = 1 AND EsGarantia = True") Else GvDescNCCargosDetalle.DataSource = TmpDTRNCDetalle.FiltraParametros("TipoRNC = 1 AND EsGarantia = False") End If GvDescNCCargosDetalle.DataBind() Dim SaldoMaximoCliente As Decimal = 0 Dim SaldoEntregado As Decimal = 0 If CargarSoloGarantias Then Dim SaldoMaximo As Decimal = TmpDTRNCDetalle.SUMD("Saldo", "TipoRNC = 1 AND EsGarantia = True") If SaldoMaximo > 0 Then SaldoMaximoCliente = SaldoMaximo Else SaldoMaximoCliente = 0 End If Else Dim ObjAcum As New ClsAcumuladores If ObjAcum.GetMovimientosDistribuidorResumen(CveCliente, UsuarioActual.CveEmpresa) Then Dim RowUsadosNC As DataRow = ObjAcum.DtResultados.Rows(2) DivSMU.Visible = True Dim SaldoMaximo As Decimal = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() If SaldoMaximo > 0 Then SaldoMaximoCliente = RowUsadosNC("ValorConImpuestos").ToString().ToDecimal() Else SaldoMaximoCliente = 0 End If Dim RowEntregado As DataRow = ObjAcum.DtResultados.Rows(1) SaldoEntregado = RowEntregado("ValorConImpuestos").ToString().ToDecimal() Else SaldoMaximoCliente = 0 End If ObjAcum.Dispose() End If Dim SaldoMaximoUsadosFactura As Decimal = Me.TmpDT.SUM("Total", "EsCargo = True") + Me.TmpDT.SUM("ImporteIVA", "EsCargo = True") If SaldoMaximoCliente > 0 AndAlso SaldoMaximoCliente < SaldoMaximoUsadosFactura Then SaldoMaximoUsadosFactura = SaldoMaximoCliente End If Dim SaldoMaximoUtilizable As Decimal = If(SaldoMaximoUsadosFactura < SaldoEntregado, SaldoMaximoUsadosFactura, SaldoEntregado) If SaldoMaximoUtilizable > 0 Then HdnSaldoMaximoUsados.Value = SaldoMaximoUtilizable.ToString() LblSaldoMaximoUsados.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) Else HdnSaldoMaximoUsados.Value = "0" LblSaldoMaximoUsados.Text = String.Format("{0:N2}", 0) End If UpDescNC.Update() End Sub Private Sub CargaRNCDetalleBonificacion(Optional CveVentaUsado As Integer = -1) 'Dim ObjMovtos As New ClsMovimientos() 'If ObjMovtos.GetRemisionesNCCliente(CveCliente, True, CveMoneda:=-1, CveClienteSucursal:=DdlSucursalCliente.SelectedValue.ToEntero()) Then ' Me.TmpDTRNCBonificacionDetalle = ObjMovtos.DtResultados.Copy() 'End If 'ObjMovtos.Dispose() 'Me.TmpDTRNCBonificacionDetalle.Columns.Add(New DataColumn("CveVentaDetalleNCGenerada", GetType(Integer))) 'Me.TmpDTRNCBonificacionDetalleSeleccionadas = Nothing 'Me.TmpDTRNCBonificacionDetalleSeleccionadas = TmpDTRNCBonificacionDetalle.Clone() 'Me.TmpDTRNCBonificacionDetalleSeleccionadas.Clear() 'GvRemisionesNCBonDetalle.DataSource = TmpDTRNCBonificacionDetalle.FiltraParametros("TipoRNC = 2") 'GvRemisionesNCBonDetalle.DataBind() Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetRemisionesNCCliente(CveCliente, True, CveMoneda:=-1) Then Me.TmpDTRNCDetalle = ObjMovtos.DtResultados.Copy() End If ObjMovtos.Dispose() Me.TmpDTRNCDetalle.Columns.Add(New DataColumn("CveVentaDetalleNCGenerada", GetType(Integer))) Me.TmpDTRNCDetalleSelecciondas = Nothing Me.TmpDTRNCDetalleSelecciondas = TmpDTRNCDetalle.Clone() Me.TmpDTRNCDetalleSelecciondas.Clear() GvRemisionesNCBonDetalle.DataSource = TmpDTRNCDetalle.FiltraParametros("TipoRNC = 2") GvRemisionesNCBonDetalle.DataBind() Dim SaldoMaximoUtilizable As Decimal = 0 If TmpDTRNCBonificacionesSeleccionadas IsNot Nothing Then Dim SaldoMaximo As Decimal = TmpDTRNCBonificacionesSeleccionadas.SUMD("Saldo") If SaldoMaximo > 0 Then SaldoMaximoUtilizable = SaldoMaximo Else SaldoMaximoUtilizable = 0 End If End If If DdlVentaUsado.SelectedValue.ToEntero() > 0 Then Dim DtDetalleFactura As DataTable = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVentaDetalle(DdlVentaUsado.SelectedValue.ToEntero()) Then DtDetalleFactura = ObjVentas.DtResultados.FiltraParametros("EsCargo = True") End If End Using Dim ImporteBon As Decimal = DtDetalleFactura.SUMD("PUBonificacion") * (1 + DtDetalleFactura.MAX("PorcentajeIVA").ToDecimal()) If SaldoMaximoUtilizable < ImporteBon Then LtlSMUBon.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) HdnSMUBon.Value = SaldoMaximoUtilizable.ToString() Else LtlSMUBon.Text = String.Format("{0:N2}", ImporteBon) HdnSMUBon.Value = ImporteBon.ToString() End If DtDetalleFactura.Dispose() Else HdnSMUBon.Value = SaldoMaximoUtilizable.ToString() LtlSMUBon.Text = SaldoMaximoUtilizable.FormatoNumero(2) End If UpModalRemisionesNC.Update() End Sub Private Sub CargaRNCDetalleDescBonificacion() Dim DtNC As DataTable = Nothing Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetRemisionesNCCliente(CveCliente, True, CveMoneda:=-1) Then Me.TmpDTRNCBonificacionDetalle = ObjMovtos.DtResultados.Copy() End If ObjMovtos.Dispose() Me.TmpDTRNCBonificacionDetalle.Columns.Add(New DataColumn("CveVentaDetalleNCGenerada", GetType(Integer))) Me.TmpDTRNCBonificacionDetalleSeleccionadas = Nothing Me.TmpDTRNCBonificacionDetalleSeleccionadas = TmpDTRNCBonificacionDetalle.Clone() Me.TmpDTRNCBonificacionDetalleSeleccionadas.Clear() GvDescNCBonDetalle.DataSource = TmpDTRNCBonificacionDetalle.FiltraParametros("TipoRNC = 2") GvDescNCBonDetalle.DataBind() 'Dim SaldoMaximoUsados As Decimal = Me.TmpDT.SUM("Total", "EsCargo = True").ToDecimal() + Me.TmpDT.SUM("ImporteIVA", "EsCargo = True").ToDecimal() 'If SaldoMaximoUsados > 0 Then ' HdnSaldoMaximoUsados.Value = SaldoMaximoUsados.ToString() ' LblSaldoMaximoUsados.Text = String.Format("{0:N2}", SaldoMaximoUsados) 'Else ' HdnSaldoMaximoUsados.Value = "0" ' LblSaldoMaximoUsados.Text = "0" 'End If UpDescNC.Update() End Sub Private Sub CargaBonificaciones(CveVentaRNCCargo As Integer, AplicarRNC As Boolean) If TmpDTRNCBonificacionesSeleccionadas Is Nothing Then TmpDTRNCBonificacionesSeleccionadas = Me.TmpDTRNCBonificacionesCliente.Clone() End If If ChkMostarProductosRNCBon.Checked Then DivRNCBonificaciones.Visible = False DivRNCBonificacionesDetalle.Visible = True CargaRNCDetalleBonificacion() Else DivRNCBonificaciones.Visible = True DivRNCBonificacionesDetalle.Visible = False Dim ListaBon As New List(Of Modelos.VentasBonificaciones) Dim DtBon As DataTable = Nothing Dim SbFiltro As New StringBuilder() SbFiltro.Append("CveVenta IN(") Using ObjAcum As New ClsAcumuladores If ObjAcum.DistribuidorMovtosGet(CveCliente, UsuarioActual.CveEmpresa, CveVentaRNCCargo:=CveVentaRNCCargo) Then DtBon = ObjAcum.DtResultados.Copy() End If End Using If DtBon IsNot Nothing Then Dim queryBonificacion = From dr In DtBon Where dr("CveVentaBonificacion").ToString().ToEntero > 0 Group By CveVentaBonificacion = dr("CveVentaBonificacion").ToString().ToEntero, CveVenta = dr("CveVenta").ToString().ToEntero Into x = Group Select New With { .CveVentaRNCCargo = CveVenta, .CveVentaBonificacion = CveVentaBonificacion, .ImporteBonificacion = x.Sum(Function(s) s("ImporteBonificacion").ToString().ToDecimal), .IVABonificacion = x.Sum(Function(s) s("IVABonificacion").ToString().ToDecimal) } For Each bon In queryBonificacion SbFiltro.AppendFormat("'{0}',", bon.CveVentaBonificacion) ListaBon.Add(New Modelos.VentasBonificaciones() With {.CveVentaRNCCargo = bon.CveVentaRNCCargo, .CveVentaBonificacion = bon.CveVentaBonificacion, .ImporteBonificacion = bon.ImporteBonificacion, .IVABonificacion = bon.IVABonificacion}) Next SbFiltro.Remove(SbFiltro.Length - 1, 1) SbFiltro.Append(")") End If If ListaBon.Count > 0 Then Dim Bonificaciones As DataRow() = Me.TmpDTRNCBonificacionesCliente.Select(SbFiltro.ToString()) For Each RowBonificacion As DataRow In Bonificaciones Dim RNCBonificacion = ListaBon.Where(Function(x) x.CveVentaBonificacion = RowBonificacion("CveVenta").ToString().ToEntero()) RowBonificacion("ImporteBonificacion") = RNCBonificacion.Sum(Function(x) x.ImporteBonificacion) RowBonificacion("IVABonificacion") = RNCBonificacion.Sum(Function(x) x.IVABonificacion) RowBonificacion("CveVentaRNCCargo") = CveVentaRNCCargo If AplicarRNC Then TmpDTRNCBonificacionesSeleccionadas.Rows.Add(RowBonificacion.ItemArray) Else For Each RowEliminar In Me.TmpDTRNCBonificacionesSeleccionadas.Select(SbFiltro.ToString()) RowEliminar.Delete() Next End If Next End If 'VERIFICA SI TIENE BONIFICACIONES PARA AGREGARLAS If TmpDTRNCBonificacionesSeleccionadas IsNot Nothing AndAlso TmpDTRNCBonificacionesSeleccionadas.Rows.Count > 0 Then DivRNCBon.Visible = True Else DivRNCBon.Visible = False End If GvRemisionesNCBon.DataSource = TmpDTRNCBonificacionesSeleccionadas GvRemisionesNCBon.DataBind() 'Dim SMUBon As Decimal = Me.TmpDTRNCBonificacionesSeleccionadas.SUM("ImporteBonificacion").ToDecimal() + Me.TmpDTRNCBonificacionesSeleccionadas.SUM("IVABonificacion").ToDecimal() 'LtlSMUBon.Text = String.Format("{0:N2}", SMUBon) 'HdnSMUBon.Value = SMUBon.ToString() Dim SaldoMaximoUtilizable As Decimal = TmpDTRNCBonificacionesSeleccionadas.SUMD("Saldo") If DdlVentaUsado.SelectedValue.ToEntero() > 0 Then Dim DtDetalleFactura As DataTable = Nothing Using ObjVentas As New ClsVentas If ObjVentas.GetVentaDetalle(DdlVentaUsado.SelectedValue.ToEntero()) Then DtDetalleFactura = ObjVentas.DtResultados.FiltraParametros("EsCargo = True") End If End Using Dim ImporteBon As Decimal = DtDetalleFactura.SUMD("PUBonificacion") * (1 + DtDetalleFactura.MAX("PorcentajeIVA").ToDecimal()) If SaldoMaximoUtilizable < ImporteBon Then LtlSMUBon.Text = String.Format("{0:N2}", SaldoMaximoUtilizable) HdnSMUBon.Value = SaldoMaximoUtilizable.ToString() Else LtlSMUBon.Text = String.Format("{0:N2}", ImporteBon) HdnSMUBon.Value = ImporteBon.ToString() End If DtDetalleFactura.Dispose() Else If SaldoMaximoUtilizable > 0 Then HdnSMUBon.Value = SaldoMaximoUtilizable.ToString() LtlSMUBon.Text = SaldoMaximoUtilizable.FormatoNumero(2) Else HdnSMUBon.Value = "0" LtlSMUBon.Text = "0" End If End If UpModalRemisionesNC.Update() End If End Sub 'Protected Sub ChkAplicarRNC_CheckedChanged(sender As Object, e As EventArgs) ' Dim ChkAplicarRNC As CheckBox = DirectCast(sender, CheckBox) ' Dim SbRNC As New StringBuilder() ' For Each GvRow As GridViewRow In GvDescNCCargos.Rows ' If GvRow.RowType = DataControlRowType.DataRow Then ' If GvRow.FCCheckBox("ChkAplicar").Checked Then ' SbRNC.AppendFormat("{0},", GvRow.DataKey("CveVenta")) ' End If ' End If ' Next ' If SbRNC.Length > 0 Then ' SbRNC.Remove(SbRNC.Length - 1, 1) ' CargaBonificacionesDesc(SbRNC.ToString(), True) ' Else ' CargaBonificacionesDesc(SbRNC.ToString(), ChkAplicarRNC.Checked) ' End If 'End Sub 'Protected Sub ChkAplicarRNCDesc_CheckedChanged(sender As Object, e As EventArgs) ' Dim ChkAplicarRNC As CheckBox = DirectCast(sender, CheckBox) ' Dim SbRNC As New StringBuilder() ' For Each GvRow As GridViewRow In GvDescNCCargosDetalle.Rows ' If GvRow.RowType = DataControlRowType.DataRow Then ' If GvRow.FCCheckBox("ChkAplicar").Checked Then ' SbRNC.AppendFormat("{0},", GvRow.DataKey("CveVenta")) ' End If ' End If ' Next ' If SbRNC.Length > 0 Then ' SbRNC.Remove(SbRNC.Length - 1, 1) ' CargaBonificacionesDesc(SbRNC.ToString(), True) ' Else ' CargaBonificacionesDesc(SbRNC.ToString(), ChkAplicarRNC.Checked) ' End If 'End Sub Private Sub CargaBonificacionesDesc(CvesVentaRNCCargo As String, AplicarRNC As Boolean) If ChkMostarProductosRNCDesBonificacion.Checked Then DivRNCBonDescTotal.Visible = False DivRNCBonDescDetalle.Visible = True CargaRNCDetalleDescBonificacion() Else DivRNCBonDescTotal.Visible = True DivRNCBonDescDetalle.Visible = False If TmpDTRNCBonificacionesSeleccionadas Is Nothing Then TmpDTRNCBonificacionesSeleccionadas = Me.TmpDTRNCBonificacionesCliente.Clone() Else TmpDTRNCBonificacionesSeleccionadas.Clear() End If Dim ListaVentasRNCCargos As String() = {} If CvesVentaRNCCargo <> "-1" OrElse Not String.IsNullOrEmpty(CvesVentaRNCCargo) Then ListaVentasRNCCargos = CvesVentaRNCCargo.Split(","c) End If Dim ListaBon As New List(Of Modelos.VentasBonificaciones) Dim DtBon As DataTable = Nothing Dim SbFiltro As New StringBuilder() SbFiltro.Append("CveVenta IN(") Using ObjAcum As New ClsAcumuladores For Each CveVentaRNC As String In ListaVentasRNCCargos If ObjAcum.DistribuidorMovtosGet(CveCliente, UsuarioActual.CveEmpresa, CveVentaRNCCargo:=CveVentaRNC.ToEntero()) Then Dim DtDist As DataTable = ObjAcum.DtResultados.Copy() If DtBon Is Nothing Then DtBon = DtDist.Clone() End If DtBon.Merge(DtDist) End If Next End Using If DtBon IsNot Nothing Then Dim queryBonificacion = From dr In DtBon Group By CveVentaBonificacion = dr("CveVentaBonificacion").ToString().ToEntero, CveVentaRNCCargo = dr("CveVentaRNCCargo").ToString().ToEntero Into x = Group Select New With { .CveVentaRNCCargo = CveVentaRNCCargo, .CveVentaBonificacion = CveVentaBonificacion, .ImporteBonificacion = x.Sum(Function(s) s("ImporteBonificacion").ToString().ToDecimal), .IVABonificacion = x.Sum(Function(s) s("IVABonificacion").ToString().ToDecimal) } For Each bon In queryBonificacion SbFiltro.AppendFormat("'{0}',", bon.CveVentaBonificacion) ListaBon.Add(New Modelos.VentasBonificaciones() With {.CveVentaRNCCargo = bon.CveVentaRNCCargo, .CveVentaBonificacion = bon.CveVentaBonificacion, .ImporteBonificacion = bon.ImporteBonificacion, .IVABonificacion = bon.IVABonificacion}) Next SbFiltro.Remove(SbFiltro.Length - 1, 1) SbFiltro.Append(")") End If If ListaBon.Count > 0 Then Dim Bonificaciones As DataRow() = Me.TmpDTRNCBonificacionesCliente.Select(SbFiltro.ToString()) For Each RowBonificacion As DataRow In Bonificaciones Dim RNCBonificacion = ListaBon.Where(Function(x) x.CveVentaBonificacion = RowBonificacion("CveVenta").ToString().ToEntero()) RowBonificacion("ImporteBonificacion") = RNCBonificacion.Sum(Function(x) x.ImporteBonificacion) RowBonificacion("IVABonificacion") = RNCBonificacion.Sum(Function(x) x.IVABonificacion) RowBonificacion("CveVentaRNCCargo") = RNCBonificacion(0).CveVentaRNCCargo If AplicarRNC Then TmpDTRNCBonificacionesSeleccionadas.Rows.Add(RowBonificacion.ItemArray) Else For Each RowEliminar As DataRow In Me.TmpDTRNCBonificacionesSeleccionadas.Select(SbFiltro.ToString()) RowEliminar.Delete() Next End If Next End If 'VERIFICA SI TIENE BONIFICACIONES PARA AGREGARLAS If TmpDTRNCBonificacionesSeleccionadas IsNot Nothing AndAlso TmpDTRNCBonificacionesSeleccionadas.Rows.Count > 0 Then DivRNCBonDesc.Visible = True Else DivRNCBonDesc.Visible = False End If GvDescNCBonificaciones.DataSource = TmpDTRNCBonificacionesSeleccionadas GvDescNCBonificaciones.DataBind() End If UpDescNC.Update() End Sub Protected Sub GvDescNCCargos_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDescNCCargos.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End Sub Protected Sub GvDescNCCargosDetalle_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDescNCCargosDetalle.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveVentaDetalleRNC").ToEntero() = 0 Then e.Row.CssClass = "Totales" e.Row.FCCheckBox("ChkAplicar").Visible = False e.Row.FCTextBox("TxtCantidadRNC").Visible = False Else e.Row.CssClass = "ImportesRNCDetalle" e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChkDetalle({e.Row.FCTextBox("TxtCantidadRNC").ClientID},{e.Row.DBCampo("CantidadPendiente").ToDouble},{e.Row.DBCampo("Total").ToDouble}, this);") 'e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End If End Sub Protected Sub GvDescNCBonDetalle_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDescNCBonDetalle.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveVentaDetalleRNC").ToEntero() = 0 Then e.Row.CssClass = "Totales" e.Row.FCCheckBox("ChkAplicar").Visible = False e.Row.FCTextBox("TxtCantidadRNC").Visible = False Else e.Row.CssClass = "ImportesRNCDetalle" e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChkDetalleBonificacion({e.Row.FCTextBox("TxtCantidadRNC").ClientID},{e.Row.DBCampo("CantidadPendiente").ToDouble},{e.Row.DBCampo("Total").ToDouble}, this);") 'e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End If End Sub Protected Sub GvRemisionesNCBonDetalle_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvRemisionesNCBonDetalle.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveVentaDetalleRNC").ToEntero() = 0 Then e.Row.FCLiteral("TtlTotal").Text = DirectCast(GvRemisionesNCBonDetalle.DataSource, DataTable).SUMD("Total", $"CveVenta = {e.Row.DBCampo("CveVenta")}").FormatoNumero(2) e.Row.CssClass = "Totales" e.Row.FCCheckBox("ChkAplicar").Visible = False e.Row.FCTextBox("TxtCantidadRNC").Visible = False Else e.Row.CssClass = "ImportesRNCDetalle" e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChkDetalleBon({e.Row.FCTextBox("TxtCantidadRNC").ClientID},{e.Row.DBCampo("CantidadPendiente").ToDouble},{e.Row.DBCampo("Total").ToDouble}, this);") 'e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End If End Sub Protected Sub GvRNCDevoluciones_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvRNCDevoluciones.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCBonChkDesc({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCBonChkDesc({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End Sub Protected Sub GvDescNCBonificaciones_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvDescNCBonificaciones.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCBonChkDesc({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCBonChkDesc({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End Sub Protected Sub GvCxC_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkCxC").Attributes.Add("onclick", $"CalculaTotalChk({e.Row.DBCampo("Original").ToDouble},{e.Row.DBCampo("SubTotal").ToDouble},{TxtTotalGv.ClientID},{e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble},{TxtNCPorcentaje.Text.ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaCantidadNCMasivo({TxtNCPorcentaje.Text.ToDouble()},{e.Row.DBCampo("Saldo").ToDouble},{e.Row.DBCampo("Original").ToDouble},{e.Row.DBCampo("SubTotal").ToDouble},{TxtTotalGv.ClientID},{TxtNCImporte.ClientID},{e.Row.FCCheckBox("ChkCxC").ClientID}, this);") End If End Sub Protected Sub GvRemisionesNC_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvRemisionesNC.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") End If End Sub Protected Sub GvRemisionesNCDetalle_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvRemisionesNCDetalle.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveVentaDetalleRNC").ToEntero() = 0 Then e.Row.FCLiteral("TtlTotal").Text = DirectCast(GvRemisionesNCDetalle.DataSource, DataTable).SUMD("Total", $"CveVenta = {e.Row.DBCampo("CveVenta")}").FormatoNumero(2) e.Row.CssClass = "Totales" e.Row.FCCheckBox("ChkAplicar").Visible = False e.Row.FCTextBox("TxtCantidadRNC").Visible = False End If End If End Sub Protected Sub GvRemisionesNCBon_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvRemisionesNCBon.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCBonChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") e.Row.FCTextBox("TxtImporte").Attributes.Add("onkeyup", $"LimitaSaldoRNCBonChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble});") End If End Sub Protected Sub DdlNCNivelImporte_SelectedIndexChanged(sender As Object, e As EventArgs) Dim ImporteReferencia As Double = 0, PorcentajeMaximo As Double = 0 If Not AplicaNCMasiva Then ImporteReferencia = If(DdlNCNivelImporte.SelectedValue.ToEntero() = 1, TxtTotal.Text.Trim.ToDouble, TxtSubTotal.Text.Trim.ToDouble) PorcentajeMaximo = HplSaldoAuxiliar.Text.ToDouble * 100 / TxtTotal.Text.Trim.ToDouble RVNCPorcentaje.MaximumValue = PorcentajeMaximo.FormatoNumero(4).ToDouble.ToString() RVTxtNCImporte.MaximumValue = ((PorcentajeMaximo * ImporteReferencia) / 100).FormatoNumero().ToDouble.ToString() End If If AplicaNCMasiva Then RegistraScript($"CalculaImporteNCMasivo()", "CalculaImporteNCMasivo") Else RegistraScript("CalculaImporteNC();", "CalculaImporteNC") UpAplicarNC.Update() End Sub Protected Sub BtnAplicarNC_Click(sender As Object, e As EventArgs) 'SOLO APLICA SI NO HAY DOCUMENTOS QUE SELECCIONAR If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Dim Verificacion As Boolean = False If ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0 Then ' si hay opciones seleccionadas, se activa el generar las NCs Verificacion = True Else If UsuarioActual.TienePermisoProceso(175) Then ' si es una nc, que se va a generar directa, el permiso de generar NC directas Verificacion = True Else 'verificar autorizaciones Dim ObjVentas As New ClsVentas If ObjVentas.GetAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, -1, "Egs", CveEstatus:=1) Then Dim RowAutorizacion As DataRow = ObjVentas.DtResultados.FiltroPrimero($"CveVenta IS NULL ", Orderby:="TipoAutorizacion,Importe DESC") If RowAutorizacion IsNot Nothing Then Dim ImporteAutorizacion As Decimal = RowAutorizacion("Importe").ToString().ToDecimal() If ImporteAutorizacion >= TxtNCImporte.Text.ToDecimal Then Verificacion = True End If End If End If ObjVentas.Dispose() ' si es una nc, que se va a generar directa, debe de revisar que tenga una autorización, o el permiso de generar NC directas End If End If If GvCxC.Rows.Count = 0 OrElse GvCxC.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("ChkCxC").Checked) = 0 Then If Verificacion Then If ClienteEsDistribuidor AndAlso TxtImportesRemisionesNC.Text.ToDecimal() > 0 Then Alert("No se puede generar una nota de crédito para devolución de efectivo si el cliente es distribuidor.", TipoMensaje.MsgAdvertencia) Else Alert("No se ha seleccionado ninguna factura, en caso de no seleccionar ninguna se creará una nueva nota de crédito. ¿Está seguro de realizar esta acción?", TipoMensaje.MsgConfirmacion, JSBtnAceptar:="BtnAplicaNuevaNC();", TextoConfirmacion:="    Si    ", TextoCancelacion:="    No    ") End If Else Alert("No se puede Generar notas de crédito directas", TipoMensaje.MsgAdvertencia) End If Else ' si viene de remisiones, puede seguir adelante If Verificacion Then AplicarNotaCreditoDesdeVenta() Else Alert("No se puede Generar notas de crédito directas", TipoMensaje.MsgAdvertencia) End If End If Else AplicarNotaCreditoDesdeVenta() End If End Sub Private Sub BtnAplicaNuevaNC_Click(sender As Object, e As EventArgs) Handles BtnAplicaNuevaNC.Click Me.EsNCDevolucionEfectivo = True AplicarNotaCreditoDesdeVenta(AplicaNuevoDocumento:=True) End Sub Private Sub AplicarNotaCreditoDesdeVenta(Optional AplicaNuevoDocumento As Boolean = False) If UsuarioActual.Empresa.Funcionalidad(344) = "1" Then If AplicaNuevoDocumento AndAlso TxtImportesRemisionesNC.Text.ToDecimal() > 0 Then TxtNCImporte.Text = TxtImportesRemisionesNC.Text End If If ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0 Then If TxtImportesRemisionesNC.Text.ToDecimal() <> TxtNCImporte.Text.ToDecimal() Then Alert($"Los importes no coinciden", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If Dim Monedas As New List(Of Integer) For Each gvr As GridViewRow In GvCxC.Rows If gvr.FCCheckBox("ChkCxC").Checked Then Monedas.Add(gvr.DataKey("CveMoneda").ToString().ToEntero()) End If Next Monedas = Monedas.Distinct().ToList() If Monedas.Count > 0 Then If Monedas.Count > 1 Then Alert($"Debe seleccionar facturas de la misma moneda", TipoMensaje.MsgAdvertencia) Exit Sub End If DdlMoneda.SelectedValueExist(Monedas(0).ToString()) End If RegistraScript("$('#ModalAplicarNC').modal('hide');", "EscondeModalNC") CveVentaUsadoDevolucionEfectivo = -1 DdlTipoComprobante.SelectedValueExistInsert("Egs", "Egresos") Dim AplicaImpuestosLocales As Boolean = False 'Dim ObjCliente As New ClsClientes 'If ObjCliente.GetClienteImpuestosLocales(CveCliente) Then ' 'se cargan impuestos locales ' Dim DtClienteImpuesto As DataTable = ObjCliente.DtResultados.FiltraParametros("Seleccionado = 1", "Orden") ' AplicaImpuestosLocales = (DtClienteImpuesto IsNot Nothing AndAlso DtClienteImpuesto.Rows.Count > 0) 'End If 'ObjCliente.Dispose() DdlLineaAdicional.SelectedValue = "-1" 'limpieza de la linea adicionales 'CARGA IMPUESTOS LOCALES Dim ObjVentas As New ClsVentas() If ObjVentas.GetVentaImpuestosLocales(CveVenta) Then If ObjVentas.DtResultados.Rows.Count > 0 Then AplicaImpuestosLocales = True TrOtros.Visible = True TmpDTImpuestos = ObjVentas.DtResultados GvImpuestosLocales2.DataSource = ObjVentas.DtResultados GvImpuestosLocales2.DataBind() GvImpuestosLocales2.Enabled = True GvImpuestosLocales2.Visible = True End If End If ObjVentas.Dispose() 'SI SE SELECCIONO UNA FACTURA PARA DEVOLUCION DE EFECTIVO DEBE ASOCIARLA A LA NOTA DE CREDITO If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso AplicaNuevoDocumento AndAlso DdlVentaUsado.SelectedValue.ToEntero() > 0 AndAlso TxtImportesRemisionesNC.Text.ToDecimal() > 0 Then CveVentaUsadoDevolucionEfectivo = DdlVentaUsado.SelectedValue.ToEntero() End If 'SI SE VA APLICAR A LA FACTURA ACTUAL, NO UTILIZAR LOS DATOS DE AMORTIZACION Me.TmpDTAnticiposNCIxCCliente = Nothing GVAnticipos.DataSource = Me.TmpDTAnticiposNCIxCCliente GVAnticipos.DataBind() DdlTipoAmortizacionAnticipo.SelectedValueExist("-1") DdlTipoRelacionAnticipo.SelectedValueExist("-1") AplicarNC(DdlNCPS.SelectedValue.ToEntero(), EsNCAmortizacion:=ChkAplicaNCAnticipo.Checked, AplicaImpuestosLocales:=AplicaImpuestosLocales, AplicaNuevoDocumento:=AplicaNuevoDocumento, AplicoNCFacturaActual:=True) If UsuarioActual.CveEmpresa.Contiene(199, 201) Then TxtObsFact.Text = "" TxtOrdenCompra.Text = "" TxtPedidoContrato.Text = "" TxtObsAlmacen.Text = "" TxtObsFact.Enabled = True TxtOrdenCompra.Enabled = True TxtPedidoContrato.Enabled = True TxtObsAlmacen.Enabled = True End If End Sub Private Sub AplicarNC(CvePS As Integer, Optional NCDescuento As Boolean = False, Optional EsNCAmortizacion As Boolean = False, Optional AplicaImpuestosLocales As Boolean = True, Optional AplicaNuevoDocumento As Boolean = False, Optional AplicoNCFacturaActual As Boolean = False, Optional TipoDoctoNC As String = "Egs") Try 'VALIDACION DE AUTORIZACION PARA NC, POR AHORA SOLO BDH If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso AplicoNCFacturaActual AndAlso TipoDoctoNC = "Egs" Then Dim PermiteAutorizacion = False 'SI NO ES GENERADA CON REMISIONES DE NC, UTILIZAR LA AUTORIZACION If (ListaRemisionesNC Is Nothing OrElse ListaRemisionesNC.Count = 0) Then PermiteAutorizacion = True End If If PermiteAutorizacion Then VerificaAutorizacionEgs(VerificarImportes:=True, MostrarAlertas:=True) If Me.CveAutorizacion <= 0 Then Exit Sub End If End If End If Me.AplicaDocumentoNuevoNC = AplicaNuevoDocumento Dim DrPS As DataRow = Nothing If CvePS > 0 AndAlso TipoDoctoNC = "Egs" Then DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS Is Nothing Then Alert("Ocurrió un error al cargar la información del producto. Por favor comuniquese con asistencia SIG", TipoMensaje.MsgError) Exit Sub Else 'VALIDA CLAVES SAT If DrPS("SATClavePS").ToString() = "" Then Alert($"El concepto {DrPS("Codigo").ToString()}-{DrPS("PS").ToString()} no cuenta con producto SAT. Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) Exit Sub End If If DrPS("SATClaveUnidadMedida").ToString() = "" Then Alert($"El concepto {DrPS("Codigo").ToString()}-{DrPS("PS").ToString()} no cuenta con Unidad Medida SAT. Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If If Not AplicaImpuestosLocales Then If TmpDTImpuestos IsNot Nothing Then TmpDTImpuestos.Rows.Clear() GvImpuestosLocales2.DataSource = TmpDTImpuestos GvImpuestosLocales2.DataBind() End If End If Me.AplicoNCFacturaActual = AplicoNCFacturaActual 'CREAMOS DT PARA UTILIZAR AL TIMBRAR InicializaDTVentasNC() Dim DtImpuestos As New DataTable DtImpuestos.Columns.Add("ImportePU", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteTotal", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("CveSubProyecto", GetType(Integer)) DtImpuestos.AcceptChanges() Dim AcumuladoNC As Decimal = 0 Dim DtImpuestosBonificacion As DataTable = DtImpuestos.Copy() If Not AplicaNuevoDocumento Then If AplicaNCMasiva Then If NCDescuento Then For Each RNC As Modelos.Factura In ListaNCDesc DtImpuestos.Merge(CargaDtImpuestosNC(RNC.CveVenta, RNC.TotalRemNCAplicado, NCDescuento:=True, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero()), True, MissingSchemaAction.Ignore) Next 'SI HAY RNC DE BONIFICACION SE AGREGAN If ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then For Each RNC As Modelos.Factura In ListaNCBonificacion DtImpuestosBonificacion.Merge(CargaDtImpuestosNC(RNC.CveVenta, RNC.TotalRemNCAplicado, NCDescuento:=True, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero()), True, MissingSchemaAction.Ignore) Next End If Else Dim NumVentasAplicar As Integer = 1 For Each Gvr As GridViewRow In GvCxC.Rows If Gvr.FCCheckBox("ChkCxC").Checked Then DtImpuestos.Merge(CargaDtImpuestosNC(Gvr.DataKey("CveVenta").ToString().ToEntero(), Gvr.FCTextBox("TxtImporte").Text.ToString().ToDecimal, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero()), True, MissingSchemaAction.Ignore) 'CARGA FACTURA A LA CUAL SE APLICA LA NC AcumuladoNC += Gvr.FCTextBox("TxtImporte").Text.ToString().ToDecimal CargaNCDT(Gvr.DataKey("CveVenta").ToString().ToEntero(), DdlTipoComprobante.SelectedValue, Gvr.FCTextBox("TxtImporte").Text.ToString().ToDecimal) If UsuarioActual.CveEmpresa = 140 AndAlso NumVentasAplicar = 1 Then DdlMetodoPago33.Enabled = True DdlMetodoPago33.SelectedValueExist(Gvr.DataKey("CveMetodoPago33").ToString()) CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.Enabled = True DdlFormaPago33.SelectedValueExist(Gvr.DataKey("CveFormaPago33").ToString()) End If NumVentasAplicar += 1 End If Next End If Else DtImpuestos = CargaDtImpuestosNC(CveVenta, TxtNCImporte.Text.Trim.ToDecimal, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero()) If EsNCAmortizacion Then If DtAnticipoAmortizacion Is Nothing Then InicializaDTAnticiposAmortizacion() End If Dim PorcentajeAplicado As Decimal = (TxtNCPorcentaje.Text.ToDecimal / 100D) Dim RowAnticipo As DataRow = DtAnticipoAmortizacion.NewRow RowAnticipo("CveVenta") = Me.CveVenta RowAnticipo("Importe") = TxtNCImporte.Text.Trim.ToDecimal RowAnticipo("SaldoAnticipo") = SaldoAnticipo * PorcentajeAplicado DtAnticipoAmortizacion.Rows.Add(RowAnticipo) End If End If Else If ListaRemisionesNC IsNot Nothing Then For Each RNC As Modelos.Factura In ListaRemisionesNC DtImpuestos.Merge(CargaDtImpuestosNC(RNC.CveVenta, RNC.TotalRemNCAplicado, NCDescuento:=True, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero(), AplicaNCUsado:=(UsuarioActual.CveEmpresa = 140)), True, MissingSchemaAction.Ignore) Next End If If ListaNCBonificacion IsNot Nothing Then For Each RNC As Modelos.Factura In ListaNCBonificacion DtImpuestosBonificacion.Merge(CargaDtImpuestosNC(RNC.CveVenta, RNC.TotalRemNCAplicado, NCDescuento:=True, AplicaImpuestosLocales:=AplicaImpuestosLocales, NivelTotal:=DdlNCNivelImporte.SelectedValue.ToEntero(), AplicaNCUsado:=(UsuarioActual.CveEmpresa = 140)), True, MissingSchemaAction.Ignore) Next End If End If Dim query = From dr In DtImpuestos Group By PorcentajeIVA = dr("PorcentajeIVA").ToString().ToDecimal, PorcentajeRetIVA = dr("PorcentajeRetIVA").ToString().ToDecimal, PorcentajeRetISR = dr("PorcentajeRetISR").ToString().ToDecimal, PorcentajeIEPS = dr("PorcentajeIEPS").ToString().ToDecimal Into x = Group Select ImportePU = x.Sum(Function(s) s("ImportePU").ToString().ToDecimal), ImporteTotal = x.Sum(Function(s) s("ImporteTotal").ToString().ToDecimal).RoundSQL(2), ImporteIVA = x.Sum(Function(s) (s("ImporteIVA").ToString().ToDecimal)).RoundSQL(2), ' Math.Round(s("ImporteIVA").ToString().ToDecimal, 2)) * (1 + PorcentajeIEPS) * PorcentajeIVA, ImporteRetIVA = x.Sum(Function(s) (s("ImporteRetIVA").ToString().ToDecimal)).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetIVA, ImporteRetISR = x.Sum(Function(s) (s("ImporteRetISR").ToString().ToDecimal)).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetISR, ImporteIEPS = x.Sum(Function(s) (s("ImporteIEPS").ToString().ToDecimal)).RoundSQL(2), 'Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeIEPS, PorcentajeIVA = PorcentajeIVA, PorcentajeRetIVA = PorcentajeRetIVA, PorcentajeRetISR = PorcentajeRetISR, PorcentajeIEPS = PorcentajeIEPS Dim queryBonificacion = From dr In DtImpuestosBonificacion Group By PorcentajeIVA = dr("PorcentajeIVA").ToString().ToDecimal, PorcentajeRetIVA = dr("PorcentajeRetIVA").ToString().ToDecimal, PorcentajeRetISR = dr("PorcentajeRetISR").ToString().ToDecimal, PorcentajeIEPS = dr("PorcentajeIEPS").ToString().ToDecimal Into x = Group Select ImportePU = x.Sum(Function(s) s("ImportePU").ToString().ToDecimal), ImporteTotal = x.Sum(Function(s) s("ImporteTotal").ToString().ToDecimal).RoundSQL(2), ImporteIVA = x.Sum(Function(s) (s("ImporteIVA").ToString().ToDecimal)).RoundSQL(2), ' Math.Round(s("ImporteIVA").ToString().ToDecimal, 2)) * (1 + PorcentajeIEPS) * PorcentajeIVA, ImporteRetIVA = x.Sum(Function(s) (s("ImporteRetIVA").ToString().ToDecimal)).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetIVA, ImporteRetISR = x.Sum(Function(s) (s("ImporteRetISR").ToString().ToDecimal)).RoundSQL(2),' Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeRetISR, ImporteIEPS = x.Sum(Function(s) (s("ImporteIEPS").ToString().ToDecimal)).RoundSQL(2), 'Math.Round(s("ImportePU").ToString().ToDecimal, 2)) * PorcentajeIEPS, PorcentajeIVA = PorcentajeIVA, PorcentajeRetIVA = PorcentajeRetIVA, PorcentajeRetISR = PorcentajeRetISR, PorcentajeIEPS = PorcentajeIEPS Dim DrSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimero("") If DrSubProyecto Is Nothing Then Alert("Ocurrió un error al cargar la información de centro de costos. Por favor comuniquese con asistencia SIG", TipoMensaje.MsgError) Exit Sub End If DtImpuestos = query.QueryToDataTable(False) DtImpuestosBonificacion = queryBonificacion.QueryToDataTable(False) Dim TieneMultiplesSubProyectos As Boolean = False 'VERIFICA SI EN LA FACTURA ACTUAL TUVO MULTIPLES SUBPROYECTOS, PARA CUADRAR AL FINAL EL IMPORTE ACUMULADO If Not AplicaNCMasiva AndAlso AplicoNCFacturaActual Then TieneMultiplesSubProyectos = TmpDT.FiltraParametros("", "", {"CveSubProyecto"}).COUNT("CveSubProyecto", "CveSubProyecto > 0") > 1 If TieneMultiplesSubProyectos Then AcumuladoNC = TxtNCImporte.Text.Trim.ToDecimal End If End If 'ASUSTO LA DIFERENCIA EN EL ÚLTIMO CONCEPTO If TipoDoctoNC = "Egs" AndAlso (Not AplicaNuevoDocumento) AndAlso (AplicaNCMasiva OrElse TieneMultiplesSubProyectos) AndAlso (Not NCDescuento) AndAlso AcumuladoNC > 0 Then 'CODIGO PARA AJUSTE DE CENTAVO, SI EL IMPORTE TOTAL NO CUADRA CON LOS TOTALES Dim ImporteNC As Decimal = DtImpuestos.SUMD("ImporteTotal") + DtImpuestos.SUMD("ImporteIVA") + DtImpuestos.SUMD("ImporteIEPS") - DtImpuestos.SUMD("ImporteRetIVA") - DtImpuestos.SUMD("ImporteRetISR") Dim difTmp As Decimal = AcumuladoNC - ImporteNC If Math.Abs(difTmp) > 0.00D Then Dim ImporteAjustado As Decimal = DtImpuestos.Rows(DtImpuestos.Rows.Count - 1)("ImporteTotal").ToString().ToDecimal + difTmp DtImpuestos.Rows(DtImpuestos.Rows.Count - 1)("ImporteTotal") = ImporteAjustado DtImpuestos.Rows(DtImpuestos.Rows.Count - 1)("ImportePU") = ImporteAjustado End If End If If Not NCDescuento Then LimpiaDocumentoNC() End If Dim CveSubProyecto As Integer = DrSubProyecto("CveSubProyecto").ToString().ToEntero() Dim SubProyecto As String = DrSubProyecto("SubProyecto").ToString() Dim CveProyecto As Integer = DrSubProyecto("CveProyecto").ToString().ToEntero() Dim Proyecto As String = DrSubProyecto("Proyecto").ToString() AplicaNC = True If NCDescuento Then TmpDTDescNC = TmpDT.Clone() TmpDTDescNC.Clear() If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If AplicaRNCXDetalle Then CrearDTNCCargoDetalle(ListaNCDesc, TmpDTDescNC, DrPS, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) Else CrearDTNCCargo(ListaNCDesc, TmpDTDescNC, DrPS, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) End If 'CONSULTA EL CONCEPTO DE NC Dim ArrayNC As String() = UsuarioActual.Empresa.Funcionalidad(591).Split(",".ToCharArray()) Dim NCBonificacion As Integer = 0 If ArrayNC.Length > 4 Then NCBonificacion = ArrayNC(4).ToEntero() End If Dim DrBonRef As DataRow = Nothing 'EN LA NC DE BONIFICACION EL CONCEPTO DEBE SER SIEMPRE 'BONIFICACION POR USADO' Dim DrPSBonificacion As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=NCBonificacion).FiltroPrimero("") If DrPSBonificacion IsNot Nothing Then DrBonRef = DrPSBonificacion Else DrBonRef = DrPS Alert("No se encontró el concepto de BONIFICACION POR USADO", TipoMensaje.MsgAdvertencia) End If If AplicaRNCBonificacionXDetalle Then CrearDTNCBonificacionDescDetalle(ListaNCBonificacion, TmpDTDescNC, DrBonRef, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) Else CrearDTNCBonificacionDesc(DtImpuestosBonificacion, TmpDTDescNC, DrBonRef, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) End If Else For Each Dr As DataRow In DtImpuestos.Rows AgregaTempDT(TmpDTDescNC, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, TxtNCObservaciones.Text.Trim, 1, Dr("ImportePU").ToString.ToDecimal, Dr("PorcentajeIVA").ToString.ToDecimal, Dr("ImporteIVA").ToString.ToDecimal, Dr("PorcentajeRetIVA").ToString().ToDecimal, Dr("ImporteRetIVA").ToString().ToDecimal, Dr("PorcentajeRetISR").ToString().ToDecimal, Dr("ImporteRetISR").ToString().ToDecimal, Dr("PorcentajeIEPS").ToString().ToDecimal, Dr("ImporteIEPS").ToString().ToDecimal, -1, 0, Dr("ImporteTotal").ToString().ToDecimal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) Next End If TrTipoRelacion.Visible = True DdlTiposRelacion.SelectedValueExist("1") 'verifica el tipo de cambio que se actualice If DdlMoneda.SelectedValue <> "1" Then If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then TxtTipoCambio.Text = GlobalTipoCambio(NowADS().AddDays(-1)).ToString() Else TxtTipoCambio.Text = GlobalTipoCambio(NowADS()).ToString() End If End If Else If DdlTipoComprobante.SelectedValue = "Ant" Then CveAnticipo = CveVenta DdlTipoComprobante.SelectedValueExist(TipoDoctoNC) 'verifica el total de multiples facturas Dim Acumulado12 As Decimal = 0 Dim UltimoRenglon As Integer = 1 Dim Ajuste As Decimal = 0 'DEBE AGREGAR LOS USADOS DE LA REMISION EN LA NOTA DE CREDITO If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso (ListaRemisionesNC IsNot Nothing AndAlso ListaRemisionesNC.Count > 0) Then If AplicaRNCXDetalle Then CrearDTNCCargoDetalle(ListaRemisionesNC, TmpDT, DrPS, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) Else CrearDTNCCargo(ListaRemisionesNC, TmpDT, DrPS, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) End If 'EN LA NC DE BONIFICACION EL CONCEPTO DEBE SER SIEMPRE 'BONIFICACION POR USADO' 'CONSULTA EL CONCEPTO DE NC Dim ArrayNC As String() = UsuarioActual.Empresa.Funcionalidad(591).Split(",".ToCharArray()) Dim NCBonificacion As Integer = 0 If ArrayNC.Length > 4 Then NCBonificacion = ArrayNC(4).ToEntero() End If Dim DrPSBonificacion As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=NCBonificacion).FiltroPrimero("") If DrPSBonificacion IsNot Nothing Then CrearDTNCBonificacion(ListaRemisionesNC, DtImpuestosBonificacion, TmpDT, DrPSBonificacion, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) Else Alert("No se encontró el concepto de BONIFICACION POR USADO", TipoMensaje.MsgAdvertencia) CrearDTNCBonificacion(ListaRemisionesNC, DtImpuestosBonificacion, TmpDT, DrPS, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) End If ElseIf TipoDoctoNC = "Dev" Then CrearDTNCDevolucion(ListaRemisionesNC, TmpDT, CveProyecto, Proyecto, CveSubProyecto, SubProyecto) Else For Each Dr As DataRow In DtImpuestos.Rows Acumulado12 += Dr("ImportePU").ToString().ToDecimal.RoundSQL + Dr("ImporteIVA").ToString().ToDecimal.RoundSQL + Dr("ImporteIEPS").ToString().ToDecimal If UltimoRenglon = DtImpuestos.Rows.Count Then 'ajusta 5 centavos de diferencia If Acumulado12 <> AcumuladoNC And Math.Abs(Acumulado12 - AcumuladoNC) <= 0.05 Then Ajuste = (Acumulado12 - AcumuladoNC) End If End If UltimoRenglon += 1 AgregaTempDT(TmpDT, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, TxtNCObservaciones.Text.Trim, 1, Dr("ImportePU").ToString().ToDecimal + Ajuste, Dr("PorcentajeIVA").ToString().ToDecimal, Dr("ImporteIVA").ToString().ToDecimal, Dr("PorcentajeRetIVA").ToString().ToDecimal, Dr("ImporteRetIVA").ToString().ToDecimal, Dr("PorcentajeRetISR").ToString().ToDecimal, Dr("ImporteRetISR").ToString().ToDecimal, Dr("PorcentajeIEPS").ToString().ToDecimal, Dr("ImporteIEPS").ToString().ToDecimal, -1, 0, Dr("ImporteTotal").ToString().ToDecimal(), "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) Next End If GvPS.DataSource = TmpDT GvPS.DataBind() CalculaTotalesVenta(RecalculaImpuestosLocales:=AplicaImpuestosLocales) TrTipoRelacion.Visible = True If TipoDoctoNC = "Egs" Then DdlTiposRelacion.SelectedValueExist("1") ElseIf TipoDoctoNC = "Dev" Then If DdlTipoComprobante.Items.FindByValue("Dev") Is Nothing Then DdlTipoComprobante.Items.Insert(0, New ListItem("Devolucion", "Dev")) End If DdlTipoComprobante.SelectedValueExist("Dev") DdlTiposRelacion.SelectedValueExist("3") End If DdlSubProyectoDatos.Enabled = False 'condicióon, en la que se verifica que el importe total de aplicación de la nota de crédito sea igual al del total de la nota de crédito, ej. saldo de la factura 1000.01 y la nota de crédito se generó po 1000.00 If Not AplicaNCMasiva Then Dim TT As Decimal = TxtNCImporte.Text.ToDecimal If TT > TxtTotal.Text.ToDecimal Then TT = TxtTotal.Text.ToDecimal CargaNCDT(CveVenta, DdlTipoComprobante.SelectedValue, TT) End If 'verifica el tipo de cambio que se actualice If DdlMoneda.SelectedValue <> "1" Then If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then TxtTipoCambio.Text = GlobalTipoCambio(NowADS().AddDays(-1)).ToString() Else TxtTipoCambio.Text = GlobalTipoCambio(NowADS()).ToString() End If End If LblTCValuacion.Visible = False UpPS.Update() LBNotaCredito.Visible = False LnkAplicarRNCDevolucion.Visible = False CambiaTipoDocto() End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then TxtAtencionA.Enabled = True UpCliente.Update() End If 'SI NO ESTA VISIBLE, HABILITAR PARA GENERAR LA NC If Not BtnEmitirImprimir.Visible Then BtnEmitirImprimir.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Me.CveAutorizacion > 0 Then Using ObjVentas As New ClsVentas If ObjVentas.GetAutorizacion(CveAutorizacion, UsuarioActual.CveEmpresa) Then If Not String.IsNullOrEmpty(ObjVentas.DtResultados.FiltroPrimeroValor("TipoVenta")) Then TrTipoVentaEgs.Visible = True TxtObsFact.Text = $"{ObjVentas.DtResultados.FiltroPrimeroValor("TipoVenta")}" UPObservaciones.Update() End If End If End Using End If Catch ex As Exception OnError("Ocurrió un error al aplicar NC", ex) End Try UPCondicionesPago.Update() End Sub Private Sub CrearDTNCCargo(ListaNC As List(Of Modelos.Factura), ByRef TmpDTCargo As DataTable, DrPS As DataRow, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) For Each RNC As Modelos.Factura In ListaNC Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False For Each RowUsado As DataRow In RNC.DtDetalle.FiltraParametros("", Orderby:="PU").Rows Dim Cantidad As Decimal = RowUsado("Cantidad").ToString().ToDecimal() Dim CvePSCargo As Integer = RowUsado("CvePS").ToString().ToEntero() Dim Obs As String = "" 'SI ES ACUMULADOR LAS OBSERVACIOENS DEBEN SER EL NOMBRE DEL ACUMULADOR If ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($"CvePSCargo = {CvePSCargo}") IsNot Nothing Then Obs = RowUsado("CodigoPS").ToString() Else Obs = RowUsado("Obs").ToString() End If If Not String.IsNullOrEmpty(TxtNCObservaciones.Text.Trim()) Then Obs = String.Format("{0} - {1}", Obs, TxtNCObservaciones.Text.Trim()) End If Dim ImportePU As Decimal = RowUsado("PU").ToString().ToDecimal Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNC.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNC.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteIEPS = (TotalCalculableImpuestos * RowUsado("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) ImporteRetIVA = (TotalCalculableImpuestos * RowUsado("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) ImporteRetISR = (TotalCalculableImpuestos * RowUsado("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = RNC.DtDetalle.Rows.Count OrElse Terminar Then Dim Ajuste As Decimal = 0 If Math.Abs(RNC.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNC.TotalRemNCAplicado - TotalAcumuladoRNC ImporteIVA += Ajuste End If End If UltimoRenglonRNC += 1 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTCargo, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowUsado("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, RowUsado("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, RowUsado("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, RowUsado("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CveVentaDetalleRNC:=RowUsado("CveVentaDetalle").ToString().ToEntero(), CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If If Terminar Then Exit For End If Next Next End Sub Private Sub CrearDTNCCargoDetalle(ListaNC As List(Of Modelos.Factura), ByRef TmpDTCargo As DataTable, DrPS As DataRow, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) For Each RNC As Modelos.Factura In ListaNC Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False For Each RowUsado As DataRow In Me.TmpDTRNCDetalleSelecciondas.FiltraParametros($"CveVenta={RNC.CveVenta}", Orderby:="PU").Rows Dim Cantidad As Decimal = RowUsado("Cantidad").ToString().ToDecimal() Dim CvePSCargo As Integer = RowUsado("CvePS").ToString().ToEntero() Dim Obs As String = "" 'SI ES ACUMULADOR LAS OBSERVACIOENS DEBEN SER EL NOMBRE DEL ACUMULADOR If ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($"CvePSCargo = {CvePSCargo}") IsNot Nothing Then Obs = RowUsado("CodigoPS").ToString() End If 'SI TIENE BCI EN LAS OBSERVACIONES AGREGARLO A LA FACTURA If Not String.IsNullOrEmpty(RowUsado("Observaciones").ToString()) Then If String.IsNullOrEmpty(Obs) Then Obs = RowUsado("Observaciones").ToString() Else Obs = String.Format("{0} - {1}", Obs, RowUsado("Observaciones").ToString()) End If End If If Not String.IsNullOrEmpty(TxtNCObservaciones.Text.Trim()) Then Obs = String.Format("{0} - {1}", Obs, TxtNCObservaciones.Text.Trim()) End If Dim ImportePU As Decimal = RowUsado("PU").ToString().ToDecimal Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = 0 '(TotalCalculableImpuestos * RowUsado("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = 0 ' (TotalCalculableImpuestos * RowUsado("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = 0 ' (TotalCalculableImpuestos * RowUsado("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA) 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNC.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNC.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = Me.TmpDTRNCDetalleSelecciondas.FiltraParametros($"CveVenta={RNC.CveVenta}").Rows.Count OrElse Terminar Then Dim Ajuste As Decimal = 0 If Math.Abs(RNC.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNC.TotalRemNCAplicado - TotalAcumuladoRNC ImporteIVA += Ajuste End If End If UltimoRenglonRNC += 1 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTCargo, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowUsado("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, 0, ImporteRetIVA, 0, ImporteRetISR, 0, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CveVentaDetalleRNC:=RowUsado("CveVentaDetalleRNC").ToString().ToEntero(), CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If If Terminar Then Exit For End If Next Next End Sub Private Sub CrearDTNCBonificacion(ListaNC As List(Of Modelos.Factura), DtImpuestosBonificacion As DataTable, ByRef TmpDTNC As DataTable, DrPS As DataRow, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) 'SI TIENE DE BONIFICACION LOS AGREGA If DtImpuestosBonificacion IsNot Nothing AndAlso ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then TmpDTDescNCBonificacion = TmpDTNC.Clone() TmpDTDescNCBonificacion.Clear() For Each RNCBonificacion As Modelos.Factura In ListaNCBonificacion Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False Dim RNCCargo = ListaNC.Where(Function(f) f.CveVenta = RNCBonificacion.CveVentaRNCCargo).FirstOrDefault() For Each RowCargo As DataRow In RNCCargo.DtDetalle.FiltraParametros("", Orderby:="PU").Rows Dim PorcentajeAplicado As Decimal = (RNCBonificacion.TotalRemNCAplicado / RNCBonificacion.Total) Dim Cantidad As Decimal = RowCargo("Cantidad").ToString().ToDecimal() '* PorcentajeAplicado Dim Obs As String = RowCargo("CodigoPS").ToString() If Not String.IsNullOrEmpty(TxtNCObservaciones.Text.Trim()) Then Obs = String.Format("{0} - {1}", Obs, TxtNCObservaciones.Text.Trim()) End If Dim ImportePU As Decimal = RowCargo("PUBonificacion").ToString().ToDecimal Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNCBonificacion.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowCargo("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteIEPS = (TotalCalculableImpuestos * RowCargo("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) ImporteRetIVA = (TotalCalculableImpuestos * RowCargo("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) ImporteRetISR = (TotalCalculableImpuestos * RowCargo("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = RNCCargo.DtDetalle.Rows.Count Then Dim Ajuste As Decimal = 0 If Math.Abs(RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC ImporteIVA += Ajuste End If End If UltimoRenglonRNC += 1 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTDescNCBonificacion, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowCargo("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, RowCargo("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, RowCargo("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, RowCargo("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If Next Next End If End Sub Private Sub CrearDTNCBonificacionDesc(DtImpuestosBonificacion As DataTable, ByRef TmpDTNC As DataTable, DrPS As DataRow, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) 'SI TIENE DE BONIFICACION LOS AGREGA If DtImpuestosBonificacion IsNot Nothing AndAlso ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then TmpDTDescNCBonificacion = TmpDTNC.Clone() TmpDTDescNCBonificacion.Clear() For Each RNCBonificacion As Modelos.Factura In ListaNCBonificacion Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False 'Dim RNCCargo = ListaNC.Where(Function(f) f.CveVenta = RNCBonificacion.CveVentaRNCCargo).FirstOrDefault() For Each RowCargo As DataRow In TmpDT.FiltraParametros("EsCargo = True", Orderby:="PU").Rows Dim CantidadCargo As Decimal = RowCargo("Cantidad").ToString().ToDecimal() Dim ImportePU As Decimal = ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Bonificacion", $"CvePSCargo={RowCargo("CvePS")}").ToDecimal() Dim TotalCalculableImpuestosCargo As Decimal = (CantidadCargo * ImportePU) Dim TotalCargo As Decimal = TotalCalculableImpuestosCargo + (TotalCalculableImpuestosCargo * RowCargo("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim PorcentajeAplicado As Decimal = (RNCBonificacion.TotalRemNCAplicado / TotalCargo) Dim Cantidad As Decimal = RowCargo("Cantidad").ToString().ToDecimal() * PorcentajeAplicado Dim Obs As String = RowCargo("CodigoPS").ToString() If Not String.IsNullOrEmpty(TxtNCObservaciones.Text.Trim()) Then Obs = String.Format("{0} - {1}", Obs, TxtNCObservaciones.Text.Trim()) End If 'Dim ImportePU = RowCargo("PUBonificacion").ToString().ToDecimal Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = (TotalCalculableImpuestos * RowCargo("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNCBonificacion.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowCargo("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteIEPS = (TotalCalculableImpuestos * RowCargo("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) ImporteRetIVA = (TotalCalculableImpuestos * RowCargo("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) ImporteRetISR = (TotalCalculableImpuestos * RowCargo("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = TmpDT.FiltraParametros("EsCargo = True", Orderby:="PU").Rows.Count Then Dim Ajuste As Decimal = 0 If Math.Abs(RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNCBonificacion.TotalRemNCAplicado - TotalAcumuladoRNC ImporteIVA += Ajuste End If End If UltimoRenglonRNC += 1 Dim CveVentaDetalleRNC As Integer = RNCBonificacion.DtDetalle.FiltroPrimeroValor("CveVentaDetalle").ToEntero() 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTDescNCBonificacion, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowCargo("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, RowCargo("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, RowCargo("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, RowCargo("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CveVentaDetalleRNC:=CveVentaDetalleRNC, CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If Next Next End If End Sub Private Sub CrearDTNCBonificacionDescDetalle(ListaNC As List(Of Modelos.Factura), ByRef TmpDTCargo As DataTable, DrPS As DataRow, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) TmpDTDescNCBonificacion = TmpDTCargo.Clone() TmpDTDescNCBonificacion.Clear() For Each RNC As Modelos.Factura In ListaNC Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False For Each RowUsado As DataRow In Me.TmpDTRNCBonificacionDetalleSeleccionadas.FiltraParametros($"CveVenta={RNC.CveVenta}", Orderby:="PU").Rows Dim Cantidad As Decimal = RowUsado("Cantidad").ToString().ToDecimal() Dim CvePSCargo As Integer = RowUsado("CvePS").ToString().ToEntero() Dim Obs As String = "" 'SI ES ACUMULADOR LAS OBSERVACIOENS DEBEN SER EL NOMBRE DEL ACUMULADOR If ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($"CvePSCargo = {CvePSCargo}") IsNot Nothing Then Obs = RowUsado("CodigoPS").ToString() 'Else ' Obs = RowUsado("Obs").ToString() End If If Not String.IsNullOrEmpty(TxtNCObservaciones.Text.Trim()) Then Obs = String.Format("{0} - {1}", Obs, TxtNCObservaciones.Text.Trim()) End If Dim ImportePU As Decimal = RowUsado("PU").ToString().ToDecimal Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = 0 '(TotalCalculableImpuestos * RowUsado("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = 0 ' (TotalCalculableImpuestos * RowUsado("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = 0 ' (TotalCalculableImpuestos * RowUsado("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA) 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNC.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNC.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowUsado("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = Me.TmpDTRNCBonificacionDetalleSeleccionadas.FiltraParametros($"CveVenta={RNC.CveVenta}").Rows.Count OrElse Terminar Then Dim Ajuste As Decimal = 0 If Math.Abs(RNC.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNC.TotalRemNCAplicado - TotalAcumuladoRNC ImporteIVA += Ajuste End If End If UltimoRenglonRNC += 1 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTDescNCBonificacion, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowUsado("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, 0, ImporteRetIVA, 0, ImporteRetISR, 0, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CveVentaDetalleRNC:=RowUsado("CveVentaDetalleRNC").ToString().ToEntero(), CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If If Terminar Then Exit For End If Next Next End Sub Private Sub CrearDTNCDevolucion(ListaNC As List(Of Modelos.Factura), ByRef TmpDTCargo As DataTable, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String) For Each RNC As Modelos.Factura In ListaNC Dim UltimoRenglonRNC As Integer = 1 Dim TotalAcumuladoRNC As Decimal = 0 Dim Terminar As Boolean = False For Each RowRNC As DataRow In RNC.DtDetalle.FiltraParametros("", Orderby:="PU").Rows Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=RowRNC("CvePS").ToString().ToEntero()).FiltroPrimero("") Dim Cantidad As Decimal = RowRNC("Cantidad").ToString().ToDecimal() Dim CvePSCargo As Integer = RowRNC("CvePS").ToString().ToEntero() Dim ImportePU As Decimal = RowRNC("PU").ToString().ToDecimal Dim Obs As String = "" Dim TotalCalculableImpuestos As Decimal = (Cantidad * ImportePU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * RowRNC("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteIEPS As Decimal = (TotalCalculableImpuestos * RowRNC("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetIVA As Decimal = (TotalCalculableImpuestos * RowRNC("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) Dim ImporteRetISR As Decimal = (TotalCalculableImpuestos * RowRNC("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) Dim ImporteTotal As Decimal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR).RoundSQL 'SI EL IMPORTE ES MAYOR REALIZA EL AJUSTE If TotalAcumuladoRNC > RNC.TotalRemNCAplicado Then Terminar = True 'RESTA LO SUMANDO DEL ACUMULADO TotalAcumuladoRNC -= (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim Diferencia As Decimal = RNC.TotalRemNCAplicado - TotalAcumuladoRNC Dim TotalPartida As Decimal = (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR) Dim PorcentajePorAplicar As Decimal = (Diferencia / TotalPartida) Cantidad = Cantidad * PorcentajePorAplicar TotalCalculableImpuestos = (Cantidad * ImportePU) ImporteIVA = (TotalCalculableImpuestos * RowRNC("PorcentajeIVA").ToString().ToDecimal).RoundSQL(2) ImporteIEPS = (TotalCalculableImpuestos * RowRNC("PorcentajeIEPS").ToString().ToDecimal).RoundSQL(2) ImporteRetIVA = (TotalCalculableImpuestos * RowRNC("PorcentajeRetIVA").ToString().ToDecimal).RoundSQL(2) ImporteRetISR = (TotalCalculableImpuestos * RowRNC("PorcentajeRetISR").ToString().ToDecimal).RoundSQL(2) ImporteTotal = TotalCalculableImpuestos TotalAcumuladoRNC += (TotalCalculableImpuestos + ImporteIVA + ImporteIEPS - ImporteRetIVA - ImporteRetISR).RoundSQL End If 'SI ES EL ULTIMO REGLON REALIZA UN AJUSTE If UltimoRenglonRNC = RNC.DtDetalle.Rows.Count OrElse Terminar Then Dim Ajuste As Decimal = 0 If Math.Abs(RNC.TotalRemNCAplicado - TotalAcumuladoRNC) > 0.00 Then Ajuste = RNC.TotalRemNCAplicado - TotalAcumuladoRNC If ImporteIVA > 0 Then ImporteIVA += Ajuste ElseIf ImporteIEPS > 0 Then ImporteIEPS += Ajuste End If End If End If UltimoRenglonRNC += 1 'SOLO AGREGA SI LA CANTIDAD ES MAYOR CERO If Cantidad.RoundSQL(6) > 0D AndAlso ImportePU.RoundSQL(6) > 0 Then AgregaTempDT(TmpDTCargo, DrPS("CvePS").ToString().ToEntero(), DrPS("PS").ToString(), DrPS("Codigo").ToString(), DrPS("PSCodigo").ToString(), DrPS("CveTipoPS").ToString().ToEntero(), DrPS("Inv_CveMetodoInventario").ToString().ToEntero(), DrPS("CveUM").ToString().ToEntero(), DrPS("UnidadMedida").ToString(), DrPS("CveClasificacion").ToString().ToEntero(), DrPS("Clasificacion").ToString(), CveProyecto, Proyecto, CveSubProyecto, SubProyecto, Obs, Cantidad, ImportePU, RowRNC("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, RowRNC("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, RowRNC("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, RowRNC("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, 0, ImporteTotal, "", "", -1, -1, DrPS("SATClavePS").ToString(), DrPS("SATClaveUnidadMedida").ToString(), -1, -1, -1, -1, -1, -1, CveVentaDetalleRNC:=RowRNC("CveVentaDetalle").ToString().ToEntero(), CodigoObjetoImpuesto:=DrPS("CodigoObjetoImpuesto").ToString()) End If If Terminar Then Exit For End If Next Next End Sub Private Function CargaDtImpuestosNC(CveVentaNC As Integer, Importe As Decimal, Optional NCDescuento As Boolean = False, Optional AplicaImpuestosLocales As Boolean = True, Optional NivelTotal As Integer = 1, Optional AplicaNCUsado As Boolean = False, Optional ForzarAjuste As Boolean = False, Optional AplicaDescuentos As Boolean = False, Optional ReasignarTmpDT As Boolean = True) As DataTable Dim Total As Decimal = 0, SubTotal As Decimal = 0, Saldo As Decimal = 0 Dim TmpDT As DataTable = Nothing Dim TmpDTImpuestos As DataTable = Nothing Dim ObjVentas As New ClsVentas If ObjVentas.GetVentaImpuestosLocales(CveVentaNC) Then If ObjVentas.DtResultados.Rows.Count > 0 Then TmpDTImpuestos = ObjVentas.DtResultados.Copy() End If End If If ObjVentas.GetVentaDetalle(CveVentaNC) Then TmpDT = ObjVentas.DtResultados.Copy() TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer)) TmpDT.Columns.Add("TieneProntoPago", GetType(String)) TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal)) 'TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D End If Dim FechaFactura As DateTime = NowADS() If AplicaNCMasiva OrElse AplicaNCUsado Then If ObjVentas.GetVenta(CveVentaNC, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Total = ObjVentas.DtResultados()(0)("Total").ToString().ToDecimal SubTotal = ObjVentas.DtResultados()(0)("SubTotal").ToString().ToDecimal FechaFactura = ObjVentas.DtResultados()(0)("Fecha").ToString().ToDateTime() End If End If Else Total = TxtTotal.Text.ToDecimal SubTotal = TxtSubTotal.Text.ToDecimal End If ObjVentas.Dispose() Dim DtImpuestosLocal As DataTable = TmpDT.FiltraParametros("", "", {"PorcentajeIVA", "PorcentajeRetIVA", "PorcentajeRetISR", "PorcentajeIEPS", "CveSubProyecto"}).Copy() DtImpuestosLocal.Columns.Add("ImportePU", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteTotal", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteIVA", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteRetIVA", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteRetISR", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteIEPS", GetType(Decimal)) If AplicaDescuentos Then DtImpuestosLocal.Columns.Add("Descuento", GetType(Decimal)) End If Dim ImporteReferencia As Decimal = If(NivelTotal = 1, Total, SubTotal) Dim Porcentaje As Decimal = ((Importe * 100D) / ImporteReferencia) / 100D Dim FiltroStr As String = "" Dim TotalImpuestosLocalesVentaOriginal As Decimal = 0 Dim TotalImpuestosLocalesRecalculado As Decimal = 0 'CALCULA LO EQUIVALENTE EN IMPUSTOS LOCALES If TmpDTImpuestos IsNot Nothing AndAlso TmpDTImpuestos.Rows.Count > 0 Then TotalImpuestosLocalesVentaOriginal = TmpDTImpuestos.SUMD("Importe") TotalImpuestosLocalesRecalculado = TotalImpuestosLocalesVentaOriginal * Porcentaje End If Dim AplicaRedondeo As Boolean = True Dim TieneMultiplesSubProyectos As Boolean = TmpDT.FiltraParametros("", "", {"CveSubProyecto"}).COUNT("CveSubProyecto", "CveSubProyecto > 0") > 1 If AplicaNCMasiva AndAlso Not NCDescuento OrElse TieneMultiplesSubProyectos Then AplicaRedondeo = False End If For Each Dr As DataRow In DtImpuestosLocal.Rows FiltroStr = String.Format("ISNULL(PorcentajeIVA,0) = {0} AND ISNULL(PorcentajeRetIVA,0) = {1} AND ISNULL(PorcentajeRetISR,0) = {2} AND ISNULL(PorcentajeIEPS,0) = {3} AND ISNULL(CveSubProyecto,0) = {4} ", Dr("PorcentajeIVA").ToString().ToDecimal, Dr("PorcentajeRetIVA").ToString().ToDecimal, Dr("PorcentajeRetISR").ToString().ToDecimal, Dr("PorcentajeIEPS").ToString().ToDecimal, Dr("CveSubProyecto")) Dim importePuTemp As Decimal = 0 importePuTemp = (Porcentaje * (TmpDT.SUMD("TotalImporte", FiltroStr) - TmpDT.SUMD("Descuento", FiltroStr))) Dim DescuentoAplicado As Decimal = 0 If AplicaDescuentos Then DescuentoAplicado = Porcentaje * TmpDT.SUMD("Descuento", FiltroStr) End If If Not AplicaImpuestosLocales Then importePuTemp = importePuTemp - TotalImpuestosLocalesVentaOriginal End If Dr("ImporteTotal") = importePuTemp.RoundSQL(2) Dr("ImporteIEPS") = (importePuTemp * Dr("PorcentajeIEPS").ToString().ToDecimal()) 'A PARTIR DEL 2020 SE CAMBIO EL CALCULO PARA EL IVA CONSIDERANDO EL IEPS If FechaFactura.Year <= 2019 Then Dr("ImporteIVA") = (importePuTemp * Dr("PorcentajeIVA").ToString().ToDecimal()) Else Dim TotalCalculableImpuestosIVA As Decimal = importePuTemp * (1 + Dr("PorcentajeIEPS").ToString().ToDecimal) Dr("ImporteIVA") = ((TotalCalculableImpuestosIVA) * Dr("PorcentajeIVA").ToString().ToDecimal) End If Dr("ImporteRetIVA") = (importePuTemp * Dr("PorcentajeRetIVA").ToString().ToDecimal()) Dr("ImporteRetISR") = (importePuTemp * Dr("PorcentajeRetISR").ToString().ToDecimal()) If AplicaDescuentos Then Dr("ImportePU") = importePuTemp + DescuentoAplicado Dr("Descuento") = DescuentoAplicado Dr("ImporteTotal") = Dr("ImportePU").ToString().ToDecimal().RoundSQL(2) Else Dr("ImportePU") = importePuTemp End If If AplicaRedondeo Then Dr("ImporteIEPS") = Dr("ImporteIEPS").ToString().ToDecimal().RoundSQL(2) Dr("ImporteIVA") = Dr("ImporteIVA").ToString().ToDecimal().RoundSQL(2) Dr("ImporteRetIVA") = Dr("ImporteRetIVA").ToString().ToDecimal().RoundSQL(2) Dr("ImporteRetISR") = Dr("ImporteRetISR").ToString().ToDecimal().RoundSQL(2) Dr("ImportePU") = Dr("ImportePU").ToString().ToDecimal().RoundSQL(6) If AplicaDescuentos Then Dr("Descuento") = Dr("Descuento").ToString().ToDecimal().RoundSQL(2) End If End If Next Dim importeNC As Decimal = (DtImpuestosLocal.SUMD("ImporteTotal") + DtImpuestosLocal.SUMD("ImporteIVA") + DtImpuestosLocal.SUMD("ImporteIEPS") - DtImpuestosLocal.SUMD("ImporteRetIVA") - DtImpuestosLocal.SUMD("ImporteRetISR")) If AplicaDescuentos Then importeNC -= DtImpuestosLocal.SUMD("Descuento") End If If AplicaImpuestosLocales Then Importe = Importe + TotalImpuestosLocalesRecalculado End If If AplicaRedondeo Then 'ASUSTO LA DIFERENCIA EN EL ÚLTIMO CONCEPTO 'CODIGO PARA AJUSTE DE CENTAVO, SI EL IMPORTE TOTAL NO CUADRA CON LOS TOTALES Dim difTmp As Decimal = Importe - importeNC If Math.Abs(difTmp) > 0.00D Then Dim ImporteAjustado As Decimal = DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal").ToString().ToDecimal + difTmp DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal") = ImporteAjustado DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImportePU") = ImporteAjustado End If End If 'SI LA DIFERENCIA ES MENOR O IGUAL A 1 CENTAVO, AJUSTAR EL TOTAL If ForzarAjuste Then 'ASUSTO LA DIFERENCIA EN LOS IMPUESTOS Dim difTmp As Decimal = Importe - importeNC If Math.Abs(difTmp) > 0.00D AndAlso Math.Abs(difTmp) <= 0.01D Then 'SI TIENE IVA, AJUSTAR AQUI If DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteIVA").ToString().ToDecimal() > 0 Then Dim ImporteIVAAjustado As Decimal = DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteIVA").ToString().ToDecimal + difTmp DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteIVA") = ImporteIVAAjustado Else Dim ImporteAjustado As Decimal = DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal").ToString().ToDecimal + difTmp DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal") = ImporteAjustado DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImportePU") = ImporteAjustado End If End If End If If Not NCDescuento AndAlso ReasignarTmpDT Then Me.TmpDT = TmpDT End If 'CARGA FACTURA A LA CUAL SE APLICA LA NC 'CargaNCDT(CveVentaNC, Importe.ToDecimal) Return DtImpuestosLocal End Function Private Sub AgregaTempDT(ByRef TmpDT As DataTable, CvePS As Integer, PS As String, Codigo As String, CodigoPS As String, CveTipoPS As Integer, CveTipoInvPS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CveProyecto As Integer, Proyecto As String, CveSubProyecto As Integer, SubProyecto As String, Obs As String, Cantidad As Decimal, PU As Decimal, PorcentajeIVA As Decimal, ImporteIVA As Decimal, PorcentajeRetIVA As Decimal, ImporteRetIVA As Decimal, PorcentajeRetISR As Decimal, ImporteRetISR As Decimal, PorcentajeIEPS As Decimal, ImporteIEPS As Decimal, TipoDescuento As Integer, Descuento As Decimal, Total As Decimal, Serie As String, TiempoEntrega As String, CvePresupuestoIngreso As Integer, EntregaDirecta As Integer, SATClaveProdServ As String, SATClaveUM As String, CveContratoDetalle As Integer, CveVentaDetalle As Integer, CveMovimientoDetallePedido As Integer, CveOrdenCompraDetalle As Integer, CveVentaDetalleRemision As Integer, CveVentaDetalleCotizacion As Integer, Optional CveTamaño As Integer = -1, Optional CveVentaDetalleRNC As Integer = -1, Optional CodigoObjetoImpuesto As String = "") Dim Row As DataRow = Nothing Row = TmpDT.NewRow() Row("Consec") = TmpDT.Rows.Count + 1 Row("Orden") = TmpDT.Rows.Count + 1 Row("CvePS") = CvePS Row("PS") = PS Row("Codigo") = Codigo Row("CodigoPS") = CodigoPS Row("CveTipoPS") = CveTipoPS Row("CveTipoInvPS") = CveTipoInvPS Row("CveUM") = CveUM Row("UM") = UM Row("CveClasificacion") = CveClasificacion Row("Clasificacion") = Clasificacion Row("CveProyecto") = CveProyecto Row("Proyecto") = Proyecto Row("CveSubProyecto") = CveSubProyecto Row("SubProyecto") = SubProyecto Row("Obs") = Obs Row("Cantidad") = Cantidad Row("PU") = PU.RoundSQL(6) Row("PorcentajeIVA") = PorcentajeIVA Row("IVA") = PorcentajeIVA Row("ImporteIVA") = Math.Round(ImporteIVA, NumeroDecimales) Row("PorcentajeRetIVA") = PorcentajeRetIVA Row("ImporteRetIVA") = Math.Round(ImporteRetIVA, NumeroDecimales) Row("PorcentajeRetISR") = PorcentajeRetISR Row("ImporteRetISR") = Math.Round(ImporteRetISR, NumeroDecimales) Row("PorcentajeIEPS") = PorcentajeIEPS Row("ImporteIEPS") = Math.Round(ImporteIEPS, NumeroDecimales) Row("IEPS") = Math.Round(ImporteIEPS, NumeroDecimales) Row("TipoDescuento") = TipoDescuento Row("Descuento") = Math.Round(Descuento, NumeroDecimales) Row("Total") = Math.Round(Total, NumeroDecimales) Row("TotalImporte") = Math.Round(Total, NumeroDecimales) Row("TotalConImpuestos") = (Row("Total").ToString().ToDecimal() - Row("Descuento").ToString().ToDecimal() + Row("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Row("Serie") = Serie Row("TiempoEntrega") = TiempoEntrega Row("CvePresupuestoIngreso") = CvePresupuestoIngreso Row("EntregaDirecta") = EntregaDirecta Row("SATClaveProdServ") = SATClaveProdServ Row("SATClaveUM") = SATClaveUM 'Contratos Row("CveContratoDetalle") = CveContratoDetalle Row("CveVentaDetalle") = CveVentaDetalle Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle Row("CveVentaDetalleRemision") = CveVentaDetalleRemision Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion Row("CveTamaño") = CveTamaño Row("CveVentaDetalleRNC") = CveVentaDetalleRNC Row("CodigoObjetoImpuesto") = CodigoObjetoImpuesto Row("CveActivoFijo") = -1 TmpDT.Rows.Add(Row) End Sub Private Sub LimpiaDocumentoNC() EsCreaApartirDe = True UpEstatus.Visible = False TabAlmacen.Visible = False 'LIMPIA ACCIONES HLOrdendeCompra.Visible = False LBAplicaDevolucion.Visible = False 'LkNotaCredito.Visible = False LkEliminarFactura.Visible = False ImgDownCancelacion.Visible = False LkRefacturacion.Visible = False HLOrdenServicio.Visible = False LkCotizacionAutorizar.Visible = False LnkFacturarRemision.Visible = False LnkRemisiones.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False LbCancelarDocumento.Visible = False 'LBCancelarPedido.Visible = False LiDevolucionAlmacen.Visible = False HLPagar.Visible = False HlAgregarExcel.Visible = False HLCargaCotizaciones.Visible = False HplDownXML.Visible = False HplDownPDF.Visible = False HLSaldarVenta.Visible = False LBNotaCredito.Visible = False LnkAplicarRNCDevolucion.Visible = False LiComplementoPago.Visible = False HlCuentaTerminal.Visible = False LiLnkGuias.Visible = False LiDocumentoCliente.Visible = False 'REINICIALIZA VALORES DE CANTIDAD FACTURADA - SOLO DEBEN MOSTRARSE AL CARGAR UNA REMISION GvPS.Columns(6).Visible = False ThCantidadFacturadaRem.Visible = False ThCantidadFacturadaRem2.Visible = False GvPS.Columns(7).Visible = False ThCantidadFacturada.Visible = False ThCantidadFacturada2.Visible = False 'LIMPIA DETALLES TmpDT.Clear() GvPS.DataSource = Nothing GvPS.DataBind() LblFolioFiscal.Text = "" TxtFecha.Text = NowADS().ToShortDateString 'DESACTIVA/ACTIVA BOTONES TrVistaPrevia.Visible = True BtnEmitir.Visible = False BtnCrearApartirDe.Visible = False BtnGenerarRemision.Visible = False BtnPermisoEditarCotizacion.Visible = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then LiCalcularPromociones.Visible = False End If BtnEditarCotizacion.Visible = False BtnGenerarOS.Visible = False 'ACTIVA CONDICIONES DE PAGO DdlUsoCFDI.Enabled = True DdlUsoCFDI.SelectedValueExist("2") If UsuarioActual.CveEmpresa <> 140 Then DdlMetodoPago33.Enabled = True DdlMetodoPago33.SelectedValueExist("1") ' PUE CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.Enabled = True DdlFormaPago33.SelectedValueExist("11") ' condonación por default End If UpEstatus.Update() UpnTools.Update() UpCliente.Update() UpParametros.Update() UpPS.Update() UpFacturar.Update() UPObservaciones.Update() UPPDescuento.Update() UPCondicionesPago.Update() UpDetalle.Update() BloqueaCondicionesPago() End Sub Private Sub InicializaDTAnticiposAmortizacion() Me.DtAnticipoAmortizacion = New DataTable Me.DtAnticipoAmortizacion.Columns.Add("CveVenta", GetType(Integer)) Me.DtAnticipoAmortizacion.Columns.Add("Importe", GetType(Decimal)) Me.DtAnticipoAmortizacion.Columns.Add("SaldoAnticipo", GetType(Decimal)) End Sub Private Sub InicializaDTVentasNC() DtVentasNC = New DataTable DtVentasNC.Columns.Add("CveVenta", GetType(Integer)) DtVentasNC.Columns.Add("Importe", GetType(Decimal)) DtVentasNC.Columns.Add("FolioFiscal", GetType(String)) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TC", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TCCambioValuacion", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "CveEstatusFactura", .DataType = GetType(Integer), .DefaultValue = -1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "Folio", .DataType = GetType(String), .DefaultValue = ""}) End Sub Private Sub CargaNCDT(pCveVenta As Integer, TipoDocumento As String, Importe As Decimal, Optional FolioFiscal As String = "", Optional NuevaFactura As Integer = -1, Optional ByRef ObjVentas As ClsVentas = Nothing, Optional TC As Decimal = 1) If (pCveVenta > 0 AndAlso TipoDocumento.Contiene("Egs")) OrElse (pCveVenta > 0 AndAlso NuevaFactura = 1) Then Dim CveEstatusFacturaNC As Integer = -1 Dim TCCambioValuacion As Decimal = 1 Dim Folio As String = "" If FolioFiscal = "" Then Dim ObjVentasAplicar As ClsVentas If ObjVentas IsNot Nothing Then ObjVentasAplicar = ObjVentas Else ObjVentasAplicar = New ClsVentas End If If ObjVentasAplicar.GetVenta(pCveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) AndAlso ObjVentasAplicar.DtResultados.Rows.Count > 0 Then Folio = ObjVentasAplicar.DtResultados.FiltroPrimeroValor("SerieFolio").ToString() FolioFiscal = ObjVentasAplicar.DtResultados.FiltroPrimeroValor("FolioFiscal").ToString() TC = ObjVentasAplicar.DtResultados.FiltroPrimeroValor("TipoCambio").ToString().ToDecimal() TCCambioValuacion = ObjVentasAplicar.DtResultados.FiltroPrimeroValor("TipoCambioValuacion").ToString().ToDecimal() CveEstatusFacturaNC = ObjVentasAplicar.DtResultados.FiltroPrimeroValor("CveEstatusFactura").ToString().ToEntero() End If If ObjVentas Is Nothing Then ObjVentasAplicar.Dispose() End If End If Dim Dr As DataRow = DtVentasNC.NewRow Dr("CveVenta") = pCveVenta Dr("Importe") = Importe Dr("FolioFiscal") = FolioFiscal Dr("TC") = TC Dr("TCCambioValuacion") = TCCambioValuacion Dr("CveEstatusFactura") = CveEstatusFacturaNC Dr("Folio") = Folio DtVentasNC.Rows.Add(Dr) End If End Sub #End Region #Region " APLICA DEVOLUCION " Private Sub InicializaAplicaDevolucion(DtDetalle As DataTable, FechaVenta As DateTime) 'If Not UsuarioActual.CveUsuario = 100 Then ' If Not UsuarioActual.CveEmpresa.Contiene(72, 80, 119, 140, 141, 146) Then ' Exit Sub ' End If 'End If 'sino tiene el permiso no puede generar Devolucion If Not UsuarioActual.TienePermisoProceso(264) Then Exit Sub End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If FechaVenta.ToShortDateString.ToDate < Now.ToShortDateString.ToDate Then LBAplicaDevolucion.Visible = True Else LBAplicaDevolucion.Visible = False End If Else LBAplicaDevolucion.Visible = True End If 'SOLO APLICA DEVOLUCION SI TIENE MOVIMIENTOS DE ALMACEN 'If VentaSaldoAlmacen < 0 Then ' LBAplicaDevolucion.Visible = True 'ElseIf VentaSaldoAlmacen >= 0 Then ' LBAplicaDevolucion.Visible = False 'End If Dim SeEsconde As Boolean = False If DtDetalle IsNot Nothing AndAlso DtDetalle.Rows.Count > 0 Then If Not DtDetalle.SUM("CantSur").ToString().ToDecimal > 0 Then SeEsconde = True 'NO MOSTRAR LOS PRODUCTOS CON LA CLASIFICACION DE USADOS GvAplicaDevolucion.DataSource = DtDetalle.FiltraParametros("CantRes > 0 AND CveClasificacion <> 20519") End If 'activo el permiso para registrar el importe diferente a la devolución GvAplicaDevolucion.Columns(9).Visible = UsuarioActual.TienePermisoProceso(253) 'MODALIDAD CENTRO COSTOS If UsuarioActual.Empresa.Tipo_CentroCosto = 1 Then GvAplicaDevolucion.Columns(7).HeaderText = "Sucursal" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 2 Then GvAplicaDevolucion.Columns(7).HeaderText = "Proyecto" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 4 Then GvAplicaDevolucion.Columns(7).HeaderText = "Sucursal/Proyecto" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 5 Then GvAplicaDevolucion.Columns(7).HeaderText = "Proyecto/Sucursal" End If If SeEsconde Then GvAplicaDevolucion.Columns(1).Visible = False : GvAplicaDevolucion.Columns(2).Visible = False : GvAplicaDevolucion.Columns(3).Visible = False GvAplicaDevolucion.DataBind() UpDevolucion.Update() End Sub Private Sub InicializaAplicaRNCDevolucion(DtDetalle As DataTable) 'sino tiene el permiso no puede generar Devolucion If Not UsuarioActual.TienePermisoProceso(264) Then Exit Sub End If LnkAplicarRNCDevolucion.Visible = True Dim SeEsconde As Boolean = False If DtDetalle IsNot Nothing AndAlso DtDetalle.Rows.Count > 0 Then If Not DtDetalle.SUM("CantSur").ToString().ToDecimal > 0 Then SeEsconde = True 'NO MOSTRAR LOS PRODUCTOS CON LA CLASIFICACION DE USADOS GvAplicaRNCDevolucion.DataSource = DtDetalle.FiltraParametros("CantRes > 0 AND CveClasificacion <> 20519") End If 'activo el permiso para registrar el importe diferente a la devolución 'GvAplicaRNCDevolucion.Columns(9).Visible = UsuarioActual.TienePermisoProceso(253) 'MODALIDAD CENTRO COSTOS If UsuarioActual.Empresa.Tipo_CentroCosto = 1 Then GvAplicaRNCDevolucion.Columns(7).HeaderText = "Sucursal" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 2 Then GvAplicaRNCDevolucion.Columns(7).HeaderText = "Proyecto" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 4 Then GvAplicaRNCDevolucion.Columns(7).HeaderText = "Sucursal/Proyecto" ElseIf UsuarioActual.Empresa.Tipo_CentroCosto = 5 Then GvAplicaRNCDevolucion.Columns(7).HeaderText = "Proyecto/Sucursal" End If If SeEsconde Then GvAplicaRNCDevolucion.Columns(1).Visible = False : GvAplicaRNCDevolucion.Columns(2).Visible = False : GvAplicaRNCDevolucion.Columns(3).Visible = False GvAplicaRNCDevolucion.DataBind() UpAplicaRNCDevolucion.Update() End Sub Protected Sub BtnCalcularPenalizacion_Click(sender As Object, e As EventArgs) Dim PorcentajePenalizacion As Decimal = (TxtPorPenalizacion.Text.ToDecimal() / 100D) For Each GvRow As GridViewRow In GvAplicaDevolucion.Rows If GvRow.FCCheckBox("Chk").Checked Then Dim Total As Decimal = GvRow.DataKey("PU").ToDecimal() - (GvRow.DataKey("Descuento").ToDecimal() / GvRow.DataKey("Cantidad").ToDecimal()) 'APLICA EL PORCENTAJE DE PENALIZACION GvRow.FCTextBox("TxtPrecioEditado").Text = (Total - (Total * PorcentajePenalizacion)).FormatoNumero(2) End If Next UpDevolucion.Update() End Sub Protected Sub BtnAplicaDevolucion_Click(sender As Object, e As EventArgs) Dim Selecciono As Boolean = False For Each Gv As GridViewRow In GvAplicaDevolucion.Rows If Gv.FCCheckBox("Chk").Checked And Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDouble > 0 Then Selecciono = True Exit For End If Next If Not Selecciono Then Alert("Tiene que seleccionar al menos un concepto y este dege tener una cantidad mayor a 0. Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) Exit Sub End If AplicaDevolucion = True SaldoVentaDevolucion = HplSaldoAuxiliar.Text.ToDecimal CveVentaDevolucion = CveVenta DdlTipoComprobante.Items.Insert(0, New ListItem("Devolucion", "Dev")) DdlTipoComprobante.SelectedValue = "Dev" Dim AplicaPUEditado As Boolean = UsuarioActual.TienePermisoProceso(253) Dim DtUsados As DataTable = TmpDT.FiltraParametros("EsCargo = True") TmpDT.Clear() For Each Gv As GridViewRow In GvAplicaDevolucion.Rows If Gv.FCCheckBox("Chk").Checked And Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDecimal > 0 Then Dim Cantidad As Decimal = Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDecimal Dim Descuento As Decimal = Cantidad * Gv.DataKey("Descuento").ToString().ToDecimal / Gv.DataKey("Cantidad").ToString().ToDecimal Dim PU As Decimal = If(AplicaPUEditado, Gv.FCTextBox("TxtPrecioEditado").Text.ToDecimal, Gv.DataKey("PU").ToDecimal) Dim Total As Decimal = (Cantidad * PU) Dim TotalImpuestos As Decimal = (Cantidad * PU) - Descuento Dim TotalCalculableImpuestosIVA As Decimal = TotalImpuestos * (1 + Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal) Dim ImporteIVA As Decimal = TotalCalculableImpuestosIVA * Gv.DataKey("PorcentajeIVA").ToString().ToDecimal Dim ImporteRetIVA As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeRetIVA").ToString().ToDecimal Dim ImporteRetISR As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeRetISR").ToString().ToDecimal Dim ImporteIEPS As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal Dim CodigoObjetoImpuesto As String = Gv.DataKey("CodigoObjetoImpuesto") AgregaTempDT(TmpDT, Gv.DataKey("CvePS").ToString().ToEntero(), Gv.DataKey("PS").ToString(), Gv.DataKey("Codigo").ToString(), Gv.DataKey("CodigoPS").ToString(), Gv.DataKey("CveTipoPS").ToString().ToEntero(), Gv.DataKey("CveTipoInvPS").ToString().ToEntero(), Gv.DataKey("CveUM").ToString().ToEntero(), Gv.DataKey("UM").ToString(), Gv.DataKey("CveClasificacion").ToString().ToEntero(), Gv.DataKey("Clasificacion").ToString(), Gv.DataKey("CveProyecto").ToString().ToEntero(), Gv.DataKey("Proyecto").ToString(), Gv.DataKey("CveSubProyecto").ToString().ToEntero(), Gv.DataKey("SubProyecto").ToString(), Gv.DataKey("Obs").ToString(), Cantidad, PU, Gv.DataKey("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, Gv.DataKey("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, Gv.DataKey("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, Descuento, Total, "", "", -1, -1, Gv.DataKey("SATClaveProdServ").ToString(), Gv.DataKey("SATClaveUM").ToString(), -1, Gv.DataKey("CveVentaDetalle").ToString().ToEntero(), -1, -1, -1, -1, Gv.DataKey("CveTamaño").ToEntero(), CodigoObjetoImpuesto:=CodigoObjetoImpuesto) End If Next 'AGREGAR LOS USADOS EN LA DEVOLUCION CalculaUsados(DtUsados) TrTipoRelacion.Visible = True DdlTiposRelacion.SelectedValueExist("3") LimpiaDocumentoDEV() If UsuarioActual.Empresa.Funcionalidad(567) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DivAlmacen.Visible = True LltSalidaAlmacen.Text = "Devolución Almacen" Dim DTAlmacen As DataTable ddlAlmacen.Items.Clear() DTAlmacen = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}") ddlAlmacen.DataSource = DTAlmacen If DTAlmacen Is Nothing Or DTAlmacen.Rows.Count = 0 Then ddlAlmacen.Items.Insert(0, New ListItem(" Seleccione ", "-1")) ddlAlmacen.SelectedValue = "-1" End If ddlAlmacen.DataBind() If GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa).FiltraParametros($"CveSubProyecto = {DdlSubProyectoDatos.SelectedValue.ToEntero()}").Rows.Count > 0 Then ddlAlmacen.SelectedValueExist(UsuarioActual.CveAlmacen) End If GvInv.Columns(0).Visible = True DtInv = TmpDT.Copy.FiltraParametros("CveTipoPS = 2") CargaGVInv(DtInv) End If CambiaTipoDocto() CargaNC(CveVenta) CalculaTotalesVenta() If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then TxtAtencionA.Enabled = True UpCliente.Update() End If 'NO RECARGAR EL GV DE INVENTARIO AL HACER CLICK EN EL TAB DE ALMACEN HdnCargarInventario.Value = "False" UpParametros.Update() RegistraScript("$('#DivAplicaDevolucion').modal('hide')") End Sub Protected Sub GvAplicaDevolucion_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCTextBox("TxtCantidadAplicaDevolucion").Attributes.Add("onkeyup", $"LimitaCantidadAplicaDev({e.Row.DBCampo("CantRes").ToDecimal}, this);") If UsuarioActual.Empresa.Tipo_CentroCosto = 1 Or UsuarioActual.Empresa.Tipo_CentroCosto = 2 Then e.Row.FCLabel("LblProyecto").Text = e.Row.FCLabel("LblSubProyecto").Text e.Row.FCLabel("LblProyecto").Style.Clear() e.Row.FCLabel("LblSubProyecto").Text = "" 'e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") End If End If End Sub Private Sub LimpiaDocumentoDEV() 'REINICIALIZA PORLET CLIENTES ChkEnviarFactura.Enabled = True 'ACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto") TxtCodigo.ReadOnly = False 'REINICIALIZA PORLET DATOS DE EMIISION trNCFactura.Visible = True DdlSubProyectoDatos.Enabled = True TrFolioFiscal.Visible = False TxtFecha.Text = NowADS().ToShortDateString() TipoCambioFactura = TxtTipoCambio.Text.ToDecimal If DdlMoneda.SelectedValue.ToEntero() > 1 Then Dim tFecha As Date = TxtFecha.Text.ToDate Dim UltimaFluctuacion As MTipoCambioFluctuacion = GlobalTipoCambioUltimaFluctuacion(tFecha) If UsuarioActual.Empresa.Funcionalidad(703) = "1" AndAlso UltimaFluctuacion IsNot Nothing Then If UltimaFluctuacion.FechaFluctuacion > tFecha Then TipoCambioFactura = UltimaFluctuacion.TCFluctuacion End If End If 'Dim ObjIE As New ClsBancos 'If ObjIE.GetFluctuacionesBitacora(UsuarioActual.CveEmpresa) Then ' If ObjIE.DtResultados.Rows.Count > 0 Then ' Dim tFecha As Date = TxtFecha.Text.ToDate ' Dim Fecha As String = String.Format("{0}/{1}/{2}", tFecha.Year, tFecha.Month, tFecha.Day) ' Dim drr As DataRow = ObjIE.DtResultados.FiltroPrimero("Fecha > #" & Fecha & "#", "Fecha DESC") ' If drr IsNot Nothing Then ' TipoCambioFactura = drr("TipoCambio").ToString().ToDecimal ' End If ' End If 'End If 'ObjIE.Dispose() Else TipoCambioFactura = 1 End If If UsuarioActual.CveEmpresa.Contiene(13, 83) OrElse ChkEmitirComercioExterior.Checked Then TxtTipoCambio.Text = GlobalTipoCambio(NowADS().AddDays(-1)).ToString() Else TxtTipoCambio.Text = GlobalTipoCambio(NowADS()).ToString() End If UpEstatus.Visible = False 'REINICIALIZA TABS TabAlmacen.Enabled = False TabE.Enabled = False 'REINICIALIZA GENERALES PS LbAgregar.Visible = False GvPS.Columns(18).Visible = False GvPS.Columns(19).Visible = False GvPS.Columns(20).Visible = False GvPS.Columns(21).Visible = False thOrden.Visible = False DivRemisionesFacturadas.Visible = False DivAnticiposVinculados.Visible = False 'REINICIALIZA TOTALES TrConversionDolares.Visible = False 'ACTIVA CONDICIONES DE PAGO DdlUsoCFDI.Enabled = True DdlUsoCFDI.SelectedValueExist("2") DdlMetodoPago33.Enabled = True DdlMetodoPago33.SelectedValueExist("1") CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.Enabled = True DdlFormaPago33.SelectedValueExist("11") 'REINICIALIZA OBSERVACIONES TxtObsFact.Enabled = True TxtOrdenCompra.Enabled = True TxtPedidoContrato.Enabled = True TxtObsAlmacen.Enabled = True 'DESACTIVA/ACTIVA BOTONES BtnCrearApartirDe.Visible = False BtnEmitirImprimir.Visible = True BtnVistaPrevia.Visible = True BtnEmitir.Visible = False 'REINICIALIZA ACCIONES 'LkNotaCredito.Visible = False LkEliminarFactura.Visible = False ImgDownCancelacion.Visible = False LkRefacturacion.Visible = False HLOrdenServicio.Visible = False LkCotizacionAutorizar.Visible = False LnkFacturarRemision.Visible = False LnkRemisiones.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False LbCancelarDocumento.Visible = False 'LBCancelarPedido.Visible = False LiDevolucionAlmacen.Visible = False HLPagar.Visible = False HlAgregarExcel.Visible = False HLCargaCotizaciones.Visible = False HplDownXML.Visible = False HplDownPDF.Visible = False HLSaldarVenta.Visible = False LBNotaCredito.Visible = False LnkAplicarRNCDevolucion.Visible = False LiComplementoPago.Visible = False HlCuentaTerminal.Visible = False LiLnkGuias.Visible = False LiDocumentoCliente.Visible = False LBAplicaDevolucion.Visible = False HplFolioFiscalModal.Visible = False 'Limpia Anticipos Seleccionados For Each row2 As GridViewRow In GVAnticipos.Rows If row2.RowType = DataControlRowType.DataRow Then row2.FCCheckBox("Chk" & row2.RowIndex).Checked = False End If Next BloqueaCondicionesPago() UpAnticipos.Update() UpParametros.Update() UpPS.Update() UpEstatus.Update() UpCliente.Update() UpRemisiones.Update() Updatetabs.Update() UpFacturar.Update() UPCondicionesPago.Update() UpnTools.Update() UPObservaciones.Update() UpAntNC.Update() End Sub #End Region #Region "COMERCIO EXTERIOR" 'Public Sub InicializaComercioExterior() ' 'CargoComercioExterior = True ' 'CargaCombos() ' CargaGvComercioExterior() 'End Sub Public Sub CargaGvComercioExterior() GvComercioExterior.DataSource = TmpDT GvComercioExterior.DataBind() UpComercioExterior.Update() End Sub 'Public Sub CargaCombos() ' 'DdlTipoOperacion.DataSource = GlobalDTTipoOperacion() ' 'DdlTipoOperacion.Items.Insert(0, New ListItem("Seleccione", "-1")) ' 'DdlTipoOperacion.DataBind() ' 'DdlIncoterm.DataSource = GlobalDTIncoterm() ' 'DdlIncoterm.Items.Insert(0, New ListItem("Seleccione", "-1")) ' 'DdlIncoterm.DataBind() ' 'DdlClavePedimento.DataSource = GlobalDTClavePedimento() ' 'DdlClavePedimento.Items.Insert(0, New ListItem("Seleccione", "-1")) ' 'DdlClavePedimento.DataBind() 'End Sub Protected Sub GvComercioExterior_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then Dim CantidadConversion = e.Row.DBCampo("CantidadConversion").ToDecimal() Dim CantidadBase = e.Row.DBCampo("Cantidad").ToDecimal() Dim PUBase = e.Row.DBCampo("PU").ToDecimal() Dim TotalUSD = (CantidadBase * PUBase) e.Row.FCLabel("LblTotalUSD").Text = TotalUSD.ToString("N2") If CantidadConversion <> CantidadBase Then If CantidadConversion > 0 Then e.Row.FCTextBox("TxtValorUnitario").Text = (TotalUSD / CantidadConversion).ToString("N6") Else e.Row.FCTextBox("TxtValorUnitario").Text = PUBase.ToString("N2") End If Else e.Row.FCTextBox("TxtValorUnitario").Text = PUBase.ToString("N2") 'e.Row.FCTextBox("TxtValorUnitario").Attributes.Add("onkeyup", $"CalculaTotalUSD({e.Row.FCLabel("LblTotalUSD").ClientID}, this,{e.Row.FCTextBox("TxtCantidad").ClientID});") End If e.Row.FCTextBox("TxtCantidad").Attributes.Add("onkeyup", $"CalculaPU_USD({e.Row.FCTextBox("TxtValorUnitario").ClientID}, {e.Row.FCLabel("LblTotalUSD").Text.ToDecimal()},this);") e.Row.FCTextBox("TxtValorUnitario").Attributes.Add("onkeyup", $"CalculaCantidad_USD(this,{e.Row.FCLabel("LblTotalUSD").Text.ToDecimal()},{e.Row.FCTextBox("TxtCantidad").ClientID});") End If End Sub 'Protected Sub BtnCargaComercioExterior_Click(sender As Object, e As EventArgs) ' If Not CargoComercioExterior Then ' InicializaComercioExterior() ' End If 'End Sub Public Function ValidaComercioExterior() As Boolean If Not CveTipoOperacion > 0 Then Alert("Tiene que seleccionar un tipo de operación", TipoMensaje.MsgAdvertencia) Return False End If If Not CvePedimento > 0 Then Alert("Tiene que seleccionar una clave de pedimento", TipoMensaje.MsgAdvertencia) Return False End If If Not CveIncoterm > 0 Then Alert("Tiene que seleccionar un incoterm", TipoMensaje.MsgAdvertencia) Return False End If If Not GvComercioExterior.Rows.Count > 0 Then Alert("Tiene que seleccionar fraccion arancelaria,unidad aduana y valor unitario", TipoMensaje.MsgAdvertencia) End If For Each Gvr As GridViewRow In GvComercioExterior.Rows If Not Gvr.DataKey("Codigo").ToString() <> "" Then Alert("Todos los conceptos tienen que tener un codigo asignado", TipoMensaje.MsgAdvertencia) Return False End If If Not Gvr.DataKey("ClaveSATFraccionArancelaria").ToEntero() > 0 Then Alert("Todos los productos tienen que tener una fraccion arancelaria", TipoMensaje.MsgAdvertencia) Return False End If If Not Gvr.DataKey("ClaveSATUnidadAduana").ToEntero() > 0 Then Alert("Todos los productos tienen que tener una unidad aduana", TipoMensaje.MsgAdvertencia) Return False End If If Not Gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal > 0 Then Alert("Todos los conceptos tienen que tener un valor unitario mayor a 0", TipoMensaje.MsgAdvertencia) Return False End If Next Return True End Function #End Region #Region "NOTIFICACIONES AVACE" Private Sub EnviarNotificacionAvance(NumeroContrato As String, DescripcionContrato As String, ContratoTipo As String, Cliente As String, CorreoVendedor As String, Optional MontoMaximo As Double = 0) Dim ObjMail As New ClsSisMail() Dim CorreoLicitacion As String = "" Dim Para As String = String.Format("{0};{1}", CorreoVendedor, CorreoLicitacion) Dim Asunto As String = "NOTIFICACION DE 100% DE AVANCE DE CONTRATO" Dim Cuerpo As String = "" If MontoMaximo > 0 Then Cuerpo = String.Format("El Contrato {0} - {1} ({2}) con cliente {4} ha alcanzado el monto máximo de {3}.", NumeroContrato, DescripcionContrato, ContratoTipo, MontoMaximo.ToString("C2"), Cliente) Else Cuerpo = String.Format("El Contrato {0} - {1} ({2}) con cliente {3} ha llegado al 100% de Avance.", NumeroContrato, DescripcionContrato, ContratoTipo, Cliente) End If ObjMail.SendMail(ClsPaginas.EmpresaNotificaciones, Para, Asunto, Cuerpo) End Sub #End Region #Region "Comercio Exterior" Private Sub CargaPais() DdlComExtPais.Items.Clear() DdlComExtPais.DataSource = GlobalDTGralPaises() DdlComExtPais.DataBind() DdlComExtPais.SelectedValueExist("151") End Sub Private Sub CargaEstado() DdlComExtEstado.Items.Clear() If DdlComExtPais.SelectedValue.ToEntero() > 0 Then DdlComExtEstado.DataSource = GlobalDTGralEstados("-1", CvePais:=DdlComExtPais.SelectedValue.ToEntero) '(0)("ClaveSATPais").ToString() End If DdlComExtEstado.Visible = True DdlComExtEstado.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlComExtEstado.DataBind() End Sub Private Sub CargaMunicipio() DdlComExtMunicipio.Items.Clear() If DdlComExtEstado.SelectedValue.ToEntero() > 0 Then DdlComExtMunicipio.DataSource = GlobalDTGralMunicipios("-1", CveEstado:=DdlComExtEstado.SelectedValue.ToEntero()) End If DdlComExtMunicipio.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlComExtMunicipio.DataBind() DdlComExtMunicipio.Visible = True End Sub Private Sub CargaColonia() DdlComExtColonia.Items.Clear() If DdlComExtMunicipio.SelectedValue.ToEntero() > 0 Then DdlComExtColonia.DataSource = GlobalDTGralColonias("-1", "-1", "-1", CveMunicipio:=DdlComExtMunicipio.SelectedValue.ToEntero) End If DdlComExtColonia.Items.Insert(0, New ListItem("Seleccione", "-1")) DdlComExtColonia.DataBind() DdlComExtColonia.Visible = True End Sub Protected Sub DdlPais_SelectedIndexChanged(sender As Object, e As EventArgs) 'si contiene MX, USA o CANADA carga ddls, si no carga txt If DdlComExtPais.SelectedValue.Contiene("151", "66", "40") Then DdlComExtEstado.Visible = True DdlComExtMunicipio.Visible = True DdlComExtColonia.Visible = True TxtComExtEstado.Visible = False TxtComExtMunicipio.Visible = False TxtComExtColonia.Visible = False CargaEstado() CargaMunicipio() CargaColonia() Else DdlComExtEstado.Visible = False DdlComExtMunicipio.Visible = False DdlComExtColonia.Visible = False TxtComExtEstado.Visible = True TxtComExtMunicipio.Visible = True TxtComExtColonia.Visible = True End If End Sub Protected Sub DdlEstado_SelectedIndexChanged(sender As Object, e As EventArgs) 'si contiene USA o CANADA carga txt If DdlComExtPais.SelectedValue.Contiene("151") Then CargaMunicipio() CargaColonia() Else If DdlComExtPais.SelectedValue.Contiene("66", "40") Then DdlComExtMunicipio.Visible = False DdlComExtColonia.Visible = False TxtComExtMunicipio.Visible = True TxtComExtColonia.Visible = True End If End If End Sub Protected Sub DdlMunicipio_SelectedIndexChanged(sender As Object, e As EventArgs) CargaColonia() End Sub Private Sub BtnComExtConvertirUnidad_Click(sender As Object, e As EventArgs) Handles BtnComExtConvertirUnidad.Click For Each gvr As GridViewRow In GvComercioExterior.Rows gvr.FCTextBox("TxtCantidad").Text = (gvr.FCTextBox("TxtCantidad").Text.ToDecimal * TxtComExtConvertir.Text.ToDecimal).ToString() gvr.FCTextBox("TxtValorUnitario").Text = (gvr.FCTextBox("TxtValorUnitario").Text.ToDecimal / TxtComExtConvertir.Text.ToDecimal).ToString() Next End Sub #End Region Private Sub BtnFolioFiscalAsignar_Click(sender As Object, e As EventArgs) Handles BtnFolioFiscalAsignar.Click Dim ObjVentas As New ClsVentas() If ObjVentas.UpdateVentaFolioFiscal(TxtModalFolioFiscal.Text.Trim, CveVenta, UsuarioActual.CveEmpresa) Then Alert("Folio asignado", TipoMensaje.MsgInformacion) RegistraScript("$('#ModalFolioFiscal').modal('hide')") End If ObjVentas.Dispose() End Sub #Region "FORMATO CICOVISA" Protected Sub LnkImprimirFormatoCicovisa_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas Dim ObjInventario As New ClsInventarios Dim SerieFolio As String = "" Dim PedidoContrato As String = "" Dim EnvioContacto As String = "" Dim EnvioDireccion As String = "" Dim Guia As String = "" If ObjInventario.GetPaqueteriaGuia(-1, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then If ObjInventario.DtResultados.Rows.Count > 0 Then Guia = ObjInventario.DtResultados.Rows(0)("Guia").ToString() End If End If If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then SerieFolio = ObjVentas.DtResultados.Rows(0)("SerieFolio").ToString() PedidoContrato = ObjVentas.DtResultados.Rows(0)("PedidoContrato").ToString() EnvioContacto = ObjVentas.DtResultados.Rows(0)("EnvioContacto").ToString() EnvioDireccion = $"{ObjVentas.DtResultados.Rows(0)("EnvioDireccion").ToString()}, NO. EXT: {ObjVentas.DtResultados.Rows(0)("EnvioNoExt").ToString()}, COLONIA: {ObjVentas.DtResultados.Rows(0)("EnvioColonia").ToString()}, CP: {ObjVentas.DtResultados.Rows(0)("EnvioCP").ToString()}" End If End If Dim Dt As DataTable = Nothing If ObjVentas.GetVentaDetalle(CveVenta) Then Dt = ObjVentas.DtResultados End If ObjVentas.Dispose() ObjInventario.Dispose() If Dt.Rows.Count > 0 Then Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) params.Add(New ReportParameter("EnvioContacto", EnvioContacto)) params.Add(New ReportParameter("SerieFolio", SerieFolio)) params.Add(New ReportParameter("PedidoContrato", PedidoContrato)) params.Add(New ReportParameter("EnvioDireccion", EnvioDireccion)) params.Add(New ReportParameter("Guia", Guia)) ImprimirPDF("Empresas/Grales/Formatos/Cicovisa.rdlc", Dt, params, String.Format("Formato Cicovisa -{0}", NowADS().ToDateTime.ToShortDateString)) End If End Sub Protected Sub LnkImprimirFormatoTelcel_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas Dim ObjInventario As New ClsInventarios Dim SerieFolio As String = "" Dim PedidoContrato As String = "" Dim EnvioContacto As String = "" Dim EnvioDireccion As String = "" Dim EnviarOficina As String = "" Dim EnviarCalle As String = "" Dim EnviarColonia As String = "" Dim EnvioCiudad As String = "" Dim EnvioTel As String = "" Dim Guia As String = "" Dim EnvioNoExt As String = "" Dim EnvioNoInt As String = "" Dim EnvioEstado As String = "" Dim Pais As String = "" Dim CP As String = "" If ObjInventario.GetPaqueteriaGuia(-1, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then If ObjInventario.DtResultados.Rows.Count > 0 Then Guia = ObjInventario.DtResultados.Rows(0)("Guia").ToString() End If End If If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then SerieFolio = ObjVentas.DtResultados.Rows(0)("SerieFolio").ToString() PedidoContrato = ObjVentas.DtResultados.Rows(0)("PedidoContrato").ToString() If ObjVentas.DtResultados.Rows(0)("CveDireccionEnvio").ToString().ToEntero() > 0 Then EnvioContacto = ObjVentas.DtResultados.Rows(0)("EnvioContacto").ToString() EnvioDireccion = $"{ObjVentas.DtResultados.Rows(0)("EnvioDireccion").ToString()}, COLONIA: {ObjVentas.DtResultados.Rows(0)("EnvioColonia").ToString()}, CP: {ObjVentas.DtResultados.Rows(0)("EnvioCP").ToString()}" EnviarOficina = ObjVentas.DtResultados.Rows(0)("EnvioDepartamento").ToString() EnviarCalle = ObjVentas.DtResultados.Rows(0)("EnvioDireccion").ToString() EnviarColonia = ObjVentas.DtResultados.Rows(0)("EnvioColonia").ToString() EnvioCiudad = ObjVentas.DtResultados.Rows(0)("EnvioCiudad").ToString() EnvioTel = ObjVentas.DtResultados.Rows(0)("EnvioTel").ToString() EnvioNoExt = ObjVentas.DtResultados.Rows(0)("EnvioNoExt").ToString() EnvioNoInt = ObjVentas.DtResultados.Rows(0)("EnvioNoInt").ToString() EnvioEstado = ObjVentas.DtResultados.Rows(0)("EnvioEstado").ToString() Pais = ObjVentas.DtResultados.Rows(0)("SucClientePais").ToString() CP = ObjVentas.DtResultados.Rows(0)("EnvioCP").ToString() 'CP = "Envio" Else If ObjVentas.DtResultados.Rows(0)("CveClienteSucursal").ToString().ToEntero() > 0 Then 'EnvioContacto = ObjVentas.DtResultados.Rows(0)("EnvioContacto").ToString() EnvioDireccion = $"{ObjVentas.DtResultados.Rows(0)("SucClienteDireccion").ToString()}, COLONIA: {ObjVentas.DtResultados.Rows(0)("SucClienteColonia").ToString()}, CP: {ObjVentas.DtResultados.Rows(0)("SucClienteCP").ToString()}" 'EnviarOficina = ObjVentas.DtResultados.Rows(0)("EnvioDepartamento").ToString() EnviarCalle = ObjVentas.DtResultados.Rows(0)("SucClienteDireccion").ToString() EnviarColonia = ObjVentas.DtResultados.Rows(0)("SucClienteColonia").ToString() EnvioCiudad = ObjVentas.DtResultados.Rows(0)("SucClienteCiudad").ToString() EnvioTel = ObjVentas.DtResultados.Rows(0)("EnvioTel").ToString() EnvioNoExt = ObjVentas.DtResultados.Rows(0)("SucClienteNoExt").ToString() EnvioNoInt = ObjVentas.DtResultados.Rows(0)("SucClienteNoInt").ToString() EnvioEstado = ObjVentas.DtResultados.Rows(0)("SucClienteEstado").ToString() Pais = ObjVentas.DtResultados.Rows(0)("SucClientePais").ToString() 'CP = ObjVentas.DtResultados.Rows(0)("SucClienteCP").ToString() CP = "Sucursal" Else 'EnvioContacto = ObjVentas.DtResultados.Rows(0)("EnvioContacto").ToString() EnvioDireccion = $"{ObjVentas.DtResultados.Rows(0)("ClienteDireccion").ToString()}, COLONIA: {ObjVentas.DtResultados.Rows(0)("ColoniaCliente").ToString()}, CP: {ObjVentas.DtResultados.Rows(0)("CPCliente").ToString()}" 'EnviarOficina = ObjVentas.DtResultados.Rows(0)("EnvioDepartamento").ToString() EnviarCalle = ObjVentas.DtResultados.Rows(0)("ClienteDireccion").ToString() EnviarColonia = ObjVentas.DtResultados.Rows(0)("ColoniaCliente").ToString() EnvioCiudad = ObjVentas.DtResultados.Rows(0)("ClienteCiudad").ToString() EnvioTel = ObjVentas.DtResultados.Rows(0)("EnvioTel").ToString() EnvioNoExt = ObjVentas.DtResultados.Rows(0)("ClienteNoExt").ToString() EnvioNoInt = ObjVentas.DtResultados.Rows(0)("ClienteNoInt").ToString() EnvioEstado = ObjVentas.DtResultados.Rows(0)("ClienteEstado").ToString() Pais = ObjVentas.DtResultados.Rows(0)("ClientePais").ToString() 'CP = ObjVentas.DtResultados.Rows(0)("CPCliente").ToString() CP = "Cliente" End If EnvioContacto = "" EnviarOficina = "" End If End If End If Dim Dt As DataTable = Nothing If ObjVentas.GetVentaDetalle(CveVenta) Then Dt = ObjVentas.DtResultados End If ObjVentas.Dispose() ObjInventario.Dispose() If Dt.Rows.Count > 0 Then Dim params As New List(Of ReportParameter) params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa)) params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre)) params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString)) params.Add(New ReportParameter("EnvioContacto", EnvioContacto)) params.Add(New ReportParameter("SerieFolio", SerieFolio)) params.Add(New ReportParameter("PedidoContrato", PedidoContrato)) params.Add(New ReportParameter("EnvioDireccion", EnvioDireccion)) params.Add(New ReportParameter("Guia", Guia)) params.Add(New ReportParameter("EnviarOficina", EnviarOficina)) params.Add(New ReportParameter("EnviarCalle", EnviarCalle)) params.Add(New ReportParameter("EnviarColonia", EnviarColonia)) params.Add(New ReportParameter("EnvioCiudad", EnvioCiudad)) params.Add(New ReportParameter("EnvioTel", EnvioTel)) params.Add(New ReportParameter("NoExt", EnvioNoExt)) params.Add(New ReportParameter("NoInt", EnvioNoInt)) params.Add(New ReportParameter("EnvioEstado", EnvioEstado)) params.Add(New ReportParameter("Pais", Pais)) params.Add(New ReportParameter("CP", CP)) ImprimirPDF("Empresas/Grales/Formatos/Telcel.rdlc", Dt, params, String.Format("Formato RADIO MOVIL DIPSA S.A DE C.V. -{0}", NowADS().ToDateTime.ToShortDateString), "PDF") End If End Sub #End Region #Region "REQUIERE OC" Protected Sub btnBuscarOCRegistrada_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas If CveCliente > 0 AndAlso TxtOrdenCompra.Text.Trim <> "" AndAlso CveVenta <= 0 Then If ObjVentas.GetOCVentas(CveCliente, TxtOrdenCompra.Text) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Alert("Ya existen ventas con el mismo folio de orden de compra registrado", TipoMensaje.MsgAdvertencia) End If End If End If ObjVentas.Dispose() End Sub #End Region #Region "CLASIFICACIONES DETALLES" Protected Sub DdlClasificacionPS_SelectedIndexChanged(sender As Object, e As EventArgs) CargaClasificacionesDetalles() End Sub Protected Sub BtnAddClasificacionDetalle_Click(sender As Object, e As EventArgs) TxtClasificacionDetalle.Text = "" DdlClasificacionModal.SelectedValueExist(DdlClasificacionPS.SelectedValue) UpModal.Update() RegistraScript(String.Format("$('#{0}').modal('show');", "DModalClasificacion")) End Sub Protected Sub BtnAddClasificacionDetalleModal_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas If ObjVentas.AddClasificacionDetalle(TxtClasificacionDetalle.Text, DdlClasificacionModal.SelectedValue.ToEntero(), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then CargaClasificacionesDetalles() DdlTipo.SelectedValueExist(ObjVentas.CveClasificacionDetalle) UpAddPS.Update() RegistraScript(String.Format("$('#{0}').modal('hide');", "DModalClasificacion"), "1") RegistraScript("CreaDescripcionPS();", "2") End If ObjVentas.Dispose() End Sub Private Sub GVAnticipos_PageIndexChanged(sender As Object, e As EventArgs) Handles GVAnticipos.PageIndexChanged End Sub Private Sub DdlTipoAmortizacionAnticipo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlTipoAmortizacionAnticipo.SelectedIndexChanged CargaDdlNCPS() ImporteSujeridoAnticipo(DdlTipoAmortizacionAnticipo.SelectedValue.ToEntero) divAnticipoMsg.Visible = False If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem") AndAlso DdlTipoAmortizacionAnticipo.SelectedValue = "4" Then Dim DtMovtos As DataTable = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 And SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo IN('NC','RNC','IxC') ", "")}") divAmortizacionTipoRelacion.Visible = False GVAnticipos.DataSource = DtMovtos GVAnticipos.DataBind() If DtMovtos.Rows.Count > 0 Then ImgAntiPend.Visible = True If UsuarioActual.CveEmpresa = 189 Then ImgAntiPend.Visible = UsuarioActual.TienePermisoProceso(406) End If Else Dim DtMovtos As DataTable = Me.TmpDTAnticiposNCIxCCliente.FiltraParametros($"Saldo > 0 AND SaldoSubtotal > 0 {If(CveVenta < 0, $"AND Tipo = 'Ant' ", "")} {If(DdlTipoComprobante.SelectedValue = "Ant", "AND Tipo = 'NC'", "")}") divAmortizacionTipoRelacion.Visible = True If UsuarioActual.CveEmpresa.Contiene(72, 80, 146) Then DtMovtos = DtMovtos.FiltraParametros($"{If(CveVenta < 0, $"Tipo = 'Ant'{If(DdlTipoComprobante.SelectedValue = "Ing", $" AND CveMoneda ={DdlMoneda.SelectedValue.ToEntero()}", "")} ", "")}") If DtMovtos.Rows.Count > 0 Then ImgAntiPend.Visible = True End If End If End If If DdlTipoAmortizacionAnticipo.SelectedValue.Contiene("1", "2") Then 'cuando es amortización por descuento, debe tener seleccionado descuentos previamente registrados If DdlTipoAmortizacionAnticipo.SelectedValue = "1" AndAlso LblDescuentos.Text.ToDecimal <= 0 Then divAnticipoMsg.Visible = True End If If DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then 'debo de cambiar la columna que se tomaria como total, por si tiene impuestos, la NC estaria abarcandolos CargaDdlNCPS() DivConceptoNC.Visible = True Else DivConceptoNC.Visible = False End If CargaAnticipos(CveCliente) DdlTipoRelacionAnticipo.SelectedValueExist("7") Else DivConceptoNC.Visible = False DdlTipoRelacionAnticipo.SelectedValueExist("-1") End If End Sub Private Sub ImporteSujeridoAnticipo(TipoAmortizacion As Integer) 'TipoAmortizacion '1.-Anticpo como descuento se basa en subtotal '2.-Anticipo con notade credito se basa en total AmortizacionSujeridaContrato = 0 Dim Porcentaje As Decimal = PorAmortizacionAnticipo * 0.01D If PorAmortizacionAnticipo > 0 AndAlso TipoAmortizacion > 0 Then If TipoAmortizacion = 1 Then AmortizacionSujeridaContrato = (TxtSubTotal2.Text.ToDecimal * Porcentaje).RoundSQL(2) ElseIf TipoAmortizacion = 2 Then AmortizacionSujeridaContrato = (TxtTotal.Text.ToDecimal * Porcentaje).RoundSQL(2) End If Else AmortizacionSujeridaContrato = 0 End If End Sub Private Sub DdlMetodoPago33_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlMetodoPago33.SelectedIndexChanged CambiaMetodoPago33() End Sub Private Sub CambiaMetodoPago33() CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) End Sub #End Region #Region " COTIZACIONES - EDITAR " Private Sub BtnPermisoEditarCotizacion_Click(sender As Object, e As EventArgs) Handles BtnPermisoEditarCotizacion.Click ModalidadEdicion = True 'ACTIVA BOTONES PARA EDITAR For Each Row As GridViewRow In GvPS.Rows Row.FCLiteral("LtlConsecutivo").Text = (Row.RowIndex + 1).ToString() Next GvPS.Columns(ColumnaEditar).HeaderText = "Editar" GvPS.Columns(ColumnaEliminar).HeaderText = "Eliminar" GvPS.DataSource = TmpDT GvPS.DataBind() 'PORLET CLIENTE 'ACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto") TxtCodigo.ReadOnly = False ChkEnviarFactura.Enabled = True DdlSucursalCliente.Enabled = True ChkDireccionEnvio.Enabled = True DdlDireccionEnvio.Enabled = True TxtAtencionA.Enabled = True TxtFechaVencimientoCotizacion.Enabled = True 'BOTONERA BtnGenerarRemision.Visible = False BtnCrearApartirDe.Visible = False BtnEmitirImprimir.Visible = False BtnGenerarOS.Visible = False TxtCantidad.Enabled = True DdlClasificacion.Enabled = True DdlPS.Enabled = True TxtObsPS.Enabled = True DdlProyecto.Enabled = True DdlSubProyecto.Enabled = True TxtPrecio.Enabled = True LbAgregar.Enabled = True ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '2'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = ''; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = 'none'; $get('BtnAplicarDescG').style.display = ''; $get('TrMotivoDescuento').style.display = '';") LblSubTotal1.Text = TxtSubTotal.Text LblAmort.Text = TxtSubTotal.Text TxtTiempoEntrega.Enabled = True DdlVendedor.Enabled = True TxtObsFact.Enabled = True TxtMotivoDescuento.Enabled = True BtnEditarCotizacion.Visible = True BtnPermisoEditarCotizacion.Visible = False DdlFormaPago33.Enabled = True DdlUsoCFDI.Enabled = True DdlMetodoPago33.Enabled = True 'TxtNumCtaPago.Enabled = True DdlMoneda.Enabled = True TxtPedidoContrato.Enabled = True TxtOrdenCompra.Enabled = True If DdlMoneda.SelectedValue = "2" Then TrConversionTipoCambio.Visible = True End If ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambio.Enabled = True TxtTotal.ReadOnly = False TxtTotal.Attributes("readonly") = "readonly" RBLPago.Enabled = True If Me.PermiteCredito Then RBLPago.Items(0).Enabled = True End If GvImpuestosLocales2.Enabled = True If DdlTipoComprobante.SelectedValue = "Cot" Then DdlIVA.Visible = True End If BloqueaCondicionesPago() CargaVendedores() If UsuarioActual.Empresa.Funcionalidad(572) = "1" AndAlso Not TbDescuentosRNC.Visible Then TbDescuentosRNC.Visible = True LnkDescuentosRNC.Visible = UsuarioActual.TienePermisoProceso(328) End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then GvPS.Columns(20).Visible = True End If 'ECONO, SOLO EL CLIENTE SIGI, PUEDE MODIFICAR EL IVA A 16% If UsuarioActual.Empresa.Funcionalidad(558) = "1" AndAlso DdlIVA.Visible Then If TxtCodigo.Text.Trim().ToUpper() = "SIGI" Then DdlIVA.Enabled = True Else DdlIVA.Enabled = False End If End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then LiCalcularPromociones.Visible = True End If 'NO PERMITE EDITAR FECHA DEL PAGO If Not UsuarioActual.TienePermisoProceso(260) Then TxtFechaPago.Enabled = False imgCalendario.Visible = False End If GvPS.Columns(21).Visible = True thOrden.Visible = True Dim HabilitarExistencias As Boolean = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then HabilitarExistencias = True GvPS.Columns(20).Visible = True End If For Each GvRow As GridViewRow In GvPS.Rows If GvRow.RowType = DataControlRowType.Header Then GvRow.FCLinkButton("LnkOrdenarGvPS").Visible = True End If If GvRow.RowType = DataControlRowType.DataRow Then GvRow.FCTextBox("TxtOrden").Visible = True If GvRow.FCTextBox("TxtOrden").ToEntero() <= 0 Then GvRow.FCTextBox("TxtOrden").Text = GvRow.DataKey("Consec") End If End If If HabilitarExistencias Then GvRow.FCLinkButton("LnkExistencias").Visible = True GvRow.FCLinkButton("imgClone").Visible = False GvRow.FCLinkButton("LnkDescuentos").Visible = False End If Next OrdenarPS(True) UpPS.Update() UPPDescuento.Update() UPObservaciones.Update() UPCondicionesPago.Update() UpCliente.Update() UpnTools.Update() End Sub Private Sub BtnEditarCotizacion_Click(sender As Object, e As EventArgs) Handles BtnEditarCotizacion.Click If TmpDT Is Nothing OrElse TmpDT.Rows.Count = 0 Then Alert("Es necesario tener al menos 1 producto y/o servicio", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim VaFacturarCotizacion As Boolean = False 'SI CARGA UNA COTIZACION DEBE GUARDAR TAMBIEN If IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() > 0 Then ViewState("CveVenta") = IfNull(ViewState("CveCotizacion"), 0).ToString().ToEntero() VaFacturarCotizacion = True End If If Not TmpDT.Rows.Count > 0 Then Alert("Es necesario agregar al menos un producto o servicio a la factura.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim Moneda As Integer = DdlMoneda.SelectedValue.ToEntero() Dim TipoCambio As Decimal = TxtTipoCambio.Text.Trim.ToDecimal If DdlMoneda.SelectedValue.ToEntero() <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then TipoCambio = 1 Moneda = 1 End If Dim ObjVentas As New ClsVentas Dim ObjCGame As New ClsCGame(ObjVentas.IniciaTransacSQL()) Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) Dim OcurrioError As Boolean = False Dim MensajeError As String = "" Try 'CONVERTIR REMISION - TIPO MONEDA -DOLARES A PESOS If DdlMoneda.SelectedValue.ToEntero() <> 2 AndAlso ChkConvertirDolares.Checked Then For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteIEPS") = Math.Round(Row("ImporteIEPS").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteIVA") = Math.Round(Row("ImporteIVA").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Row("ImporteRetIVA").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Row("ImporteRetISR").ToString().ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / TxtTipoCambioDlls.Text.Trim.ToDecimal).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales) End If Next TxtSubTotal.Text = TmpDT.SUM("Total").FormatoNumero LblDescuentos.Text = TmpDT.SUM("Descuento").FormatoNumero LblAmortizacion.Text = Math.Round(LblAmortizacion.Text.Trim.ToDecimal / TxtTipoCambioDlls.Text.Trim.ToDecimal, NumeroDecimales).FormatoNumero TxtIVA.Text = TmpDT.SUM("ImporteIVA").FormatoNumero TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero TxtRetISR.Text = TmpDT.SUM("ImporteRetISR").FormatoNumero TxtIEPS.Text = TmpDT.SUM("ImporteIEPS").FormatoNumero TxtTotal.Text = (TxtSubTotal.Text.ToDecimal - LblDescuentos.Text.ToDecimal - LblAmortizacion.Text.ToDecimal + TxtIVA.Text.ToDecimal + TxtIEPS.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal - ImpuestosLocales).ToDecimal.FormatoNumero TipoCambio = TxtTipoCambioDlls.Text.Trim.ToDecimal Moneda = 2 End If 'CONVERTIR REMISION - TIPO MONEDA -PESO A DOLARES If DdlMoneda.SelectedValue.ToEntero() <> 1 AndAlso ChkConvertirDoctoPesos.Checked Then Dim Importe As Decimal Dim TCC As Decimal = TxtTipoCambio.Text.Trim.ToDecimal For Each Row As DataRow In TmpDT.Rows Row("PU") = Math.Round(Row("PU").ToString().ToDecimal * TCC, 6) Row("Total") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("TotalImporte") = Math.Round(Row("Cantidad").ToString().ToDecimal * Row("PU").ToString().ToDecimal, NumeroDecimales) Row("Descuento") = Math.Round(Row("Descuento").ToString().ToDecimal * TCC, NumeroDecimales) Importe = Row("Total").ToString().ToDecimal - Row("Descuento").ToString().ToDecimal Row("ImporteIEPS") = Math.Round(Importe * Row("PorcentajeIEPS").ToString().ToDecimal, NumeroDecimales) Row("ImporteIVA") = Math.Round(Importe * Row("PorcentajeIVA").ToString().ToDecimal, NumeroDecimales) Row("ImporteRetIVA") = Math.Round(Importe * Row("PorcentajeRetIVA").ToString().ToDecimal, NumeroDecimales) Row("ImporteRetISR") = Math.Round(Importe * Row("PorcentajeRetISR").ToString().ToDecimal, NumeroDecimales) Next Dim ImpuestosLocales As Double = 0 For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then gvr.FCTextBox("TxtImpuestoLocalPS").Text = (gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * TxtTipoCambio.Text.Trim.ToDecimal).FormatoNumero ImpuestosLocales += Math.Round(gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble * TxtTipoCambio.Text.Trim.ToDecimal, NumeroDecimales) End If Next TxtSubTotal.Text = TmpDT.SUM("Total").FormatoNumero LblDescuentos.Text = TmpDT.SUM("Descuento").FormatoNumero LblAmortizacion.Text = Math.Round(LblAmortizacion.Text.Trim.ToDecimal * TxtTipoCambio.Text.Trim.ToDecimal, NumeroDecimales).FormatoNumero TxtIVA.Text = TmpDT.SUM("ImporteIVA").FormatoNumero TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero TxtRetISR.Text = TmpDT.SUM("ImporteRetISR").FormatoNumero TxtIEPS.Text = TmpDT.SUM("ImporteIEPS").FormatoNumero TxtTotal.Text = (TxtSubTotal.Text.ToDecimal - LblDescuentos.Text.ToDecimal - LblAmortizacion.Text.ToDecimal + TxtIVA.Text.ToDecimal + TxtIEPS.Text.ToDecimal - TxtRetIVA.Text.ToDecimal - TxtRetISR.Text.ToDecimal - ImpuestosLocales).ToDecimal.FormatoNumero TipoCambio = 1 Moneda = 1 End If 'ACTUALIZA VENTA If Not ObjVentas.UpdateVentas(TxtSubTotal.Text.ToDecimal, LblDescuentos.Text.ToDecimal(), TxtIVA.Text.ToDecimal(), TxtIEPS.Text.ToDecimal(), TxtTotal.Text.ToDecimal(), Moneda, TipoCambio, TxtFecha.Text.Trim.ToDate, TxtObsFact.Text.Trim, UsuarioActual.CveEmpresa, CveVenta, Vigencia:=TxtFechaVencimientoCotizacion.Text.Trim.ToDate, CondicionesPago:=If(RBLPago.SelectedValue = "2", 0, 1), PedidoContrato:=TxtPedidoContrato.Text, AtencionA:=TxtAtencionA.Text.Trim.ToUpper(), CveMetodoPago33:=DdlMetodoPago33.SelectedValue.ToEntero(), CveFormaPago33:=DdlFormaPago33.SelectedValue.ToEntero(), CveCliente:=CveCliente, CveClienteSucursal:=CveClienteSucursal, OrdenCompra:=TxtOrdenCompra.Text, RetIVA:=TxtRetIVA.Text.ToDecimal, RetISR:=TxtRetISR.Text.ToDecimal, TipoDocto:=DdlTipoComprobante.SelectedValue, Kilometraje:=TxtKilometraje.Text.ToDecimal, CveUsoCFDi:=DdlUsoCFDI.SelectedValue.ToEntero(), CveVendedor:=DdlVendedor.SelectedValue.ToEntero(), CveUsuarioModifico:=UsuarioActual.CveUsuario) Then MensajeError = "Ocurrió un error al actualizar la información de la cotización" OcurrioError = True End If 'ELIMINA DETALLES If Not ObjVentas.RemoveVentasDetalle(CveVenta) Then MensajeError = "Ocurrió un error al actualizar las partidas de la cotización" OcurrioError = True End If 'RE-INSERTA DETALLES For Each Row As DataRow In TmpDT.Rows If Not ObjVentas.AddVentaDetalle(CveVenta, Row("CvePS").ToString().ToEntero(), Row("Cantidad").ToString().ToDecimal, Row("CveUM").ToString().ToEntero(), Row("PU").ToString().ToDecimal(), Row("ImporteIVA").ToString().ToDecimal, Math.Round((Row("Total").ToString().ToDecimal() * (1 + Row("PorcentajeIVA").ToString().ToDecimal())), 6), Row("Obs").ToString(), Row("Descuento").ToString().ToDecimal(), Row("TipoDescuento").ToString().ToEntero(), Row("CveSubProyecto").ToString().ToEntero(), Row("CvePresupuestoIngreso").ToString().ToEntero(), PorcentajeIVA:=Row("PorcentajeIVA").ToString().ToDecimal, IEPS:=Row("ImporteIEPS").ToString().ToDecimal(), PorcentajeIEPS:=Row("PorcentajeIEPS").ToString().ToDecimal, TiempoEntrega:=Row("TiempoEntrega").ToString(), PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA:=Row("ImporteRetIVA").ToString().ToDecimal, CvePromocionDetalle:=Row("CvePromocionDetalle").ToString().ToEntero()) Then MensajeError = "Ocurrió un error al guardar las partidas de la cotización" OcurrioError = True Exit For End If Next For Each gvr As GridViewRow In GvImpuestosLocales2.Rows If gvr.RowType = DataControlRowType.DataRow Then If Not ObjVentas.UpdateVentaImpuestoLocales(CveVenta, gvr.DataKey("CveImpuestoLocal").ToString().ToEntero(), gvr.FCTextBox("TxtImpuestoLocalPS").Text.ToDouble) Then MensajeError = "Ocurrió un error al actualizar los impuestos locales" OcurrioError = True End If End If Next 'ORDEN PRODUCCION If UsuarioActual.CveEmpresa.Contiene(126) Then If CveVenta > 0 And DdlOrdenProduccion.SelectedValue.ToEntero() > 0 Then If Not ObjCGame.UpdateOrdenProduccionVenta(DdlOrdenProduccion.SelectedValue.ToEntero(), CveVenta) Then MensajeError = "Ocurrió un error al actualizar la orden de producción" OcurrioError = True End If End If End If Catch ex As Exception OcurrioError = True OnError("Ocurrió un error al guardar la cotización", ex) End Try If OcurrioError Then ObjVentas.RollBack() Alert($"{MensajeError}. Por favor vuelva a intentar.", TipoMensaje.MsgError) Else ObjVentas.Commit() End If ObjVentas.Dispose() ObjConta.Dispose() ObjCGame.Dispose() If Not OcurrioError Then 'ELIMINA PDF VIEJO Dim ArchivoPDF As New System.IO.FileInfo(String.Format("{0}PDF\{1}\{2}-{3}.pdf", UsuarioActual.Empresa.Ruta, DdlTipoComprobante.SelectedValue, Serie, Folio)) If ArchivoPDF.Exists Then ArchivoPDF.Delete() End If 'GENERA PDF NUEVO GeneraPDFCotizacion(ChkEnviarFactura.Checked) If VaFacturarCotizacion Then Alert("Los cambios se guardaron correctamente.", TipoMensaje.MsgInformacion, "document.location.href=""/Ventas/Ventas.aspx?CveCotizacion=" & CveVenta & """;") Else Alert("Los cambios se guardaron correctamente.", TipoMensaje.MsgInformacion, "document.location.href=""/Ventas/Ventas.aspx?CveVenta=" & CveVenta & "&&Tipo=Cot"";") End If End If End Sub #End Region #Region " COTIZACIONES - SIN FACTURAR " Private Sub LnkCotizaciones_Click(sender As Object, e As EventArgs) Handles LnkCotizaciones.Click If ChkCotProductos.Checked Then CargaCotizacionesxProducto() Else CargaCotizaciones() End If RegistraScript("$('#DivCotizaciones').modal('show');") End Sub Private Sub BtnConsultarCotizaciones_Click(sender As Object, e As EventArgs) Handles BtnConsultarCotizaciones.Click If ChkCotProductos.Checked Then CargaCotizacionesxProducto() Else CargaCotizaciones() End If End Sub Private Sub ChkCotProductos_CheckedChanged(sender As Object, e As EventArgs) Handles ChkCotProductos.CheckedChanged If ChkCotProductos.Checked Then GvCotPS.Visible = True GvCot.Visible = False DivFiltroCotPS.Visible = True DivFiltroCot.Visible = False GvCot.DataSource = Nothing GvCot.DataBind() CargaCotizacionesxProducto() Else GvCotPS.Visible = False GvCot.Visible = True DivFiltroCotPS.Visible = False DivFiltroCot.Visible = True GvCotPS.DataSource = Nothing GvCotPS.DataBind() CargaCotizaciones() End If End Sub Private Sub CargaCotizaciones() Dim ObjVentas As New ClsVentas If ObjVentas.GetCotizacionesSinFacturar(txtFechaICot.Text, txtFechaFCot.Text, CveCliente, 1) Then DtCotizaciones = ObjVentas.DtResultados If Not DtCotizaciones.Columns.Contains("Aplicado") Then DtCotizaciones.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If GvCot.DataSource = DtCotizaciones End If ObjVentas.Dispose() GvCot.DataBind() UpCotizacionesFacturas.Update() End Sub Private Sub CargaCotizacionesxProducto() Dim ObjVentas As New ClsVentas If ObjVentas.GetCotizacionesSinFacturar(txtFechaICot.Text, txtFechaFCot.Text, CveCliente, 2) Then DtCotizaciones = ObjVentas.DtResultados If Not DtCotizaciones.Columns.Contains("Aplicado") Then DtCotizaciones.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then GvCotPS.DataSource = DtCotizaciones.FiltraParametros("Cantidad > 0 AND EsAcumulador = False") Else GvCotPS.DataSource = DtCotizaciones.FiltraParametros("Cantidad > 0") End If End If ObjVentas.Dispose() GvCotPS.DataBind() UpCotizacionesFacturas.Update() End Sub Protected Sub BtnGuardarCotizaciones_Click(sender As Object, e As EventArgs) Handles BtnGuardarCotizaciones.Click If GvCot.Rows.Count = 0 And GvCotPS.Rows.Count = 0 Then Alert("Debe existir por lo menos una cotización a facturar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not UsuarioActual.TienePermisoProceso(60) Then Alert("El usuario no tiene permiso para facturar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'MARCA LAS SELECCIONADAS VerificaCotizaciones(DtCotizaciones) CargarCotizacionesAFacturar() RegistraScript("$('#DivCotizaciones').modal('hide');") End Sub Private Sub CargarCotizacionesAFacturar() Dim DTSeleccionadas = DtCotizaciones.FiltraParametros("Aplicado = True") If DTSeleccionadas.Rows.Count = 0 Then Alert("Debe seleccionar por lo menos una cotización a facturar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If DTSeleccionadas.FiltraParametros("", "", {"Abreviatura"}).Rows.Count > 1 Then Alert("Solo debe seleccionar cotizaciones de la misma moneda. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If DdlMoneda.SelectedValue = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $"Abreviatura = '{DTSeleccionadas.FiltroPrimeroValor("Abreviatura")}'") DdlMoneda.Enabled = False CambiaMoneda() 'LIMPIA LAS PARTIDAS ACTUALES If GvPS.Rows.Count > 0 Then TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetISR.Text = "0.00" TxtRetIVA.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = "0.00" End If Dim Cves As New StringBuilder Dim CveMetodoPago As Integer = -1 Dim MetodoPagoDif As Boolean = False Dim ListaVentaDetalleCotizacion As List(Of Modelos.MVentaDetalleCotizacion) = Nothing If ChkCotProductos.Checked Then For Each row As DataRow In DTSeleccionadas.Rows If CveMetodoPago <> -1 And row("CveMetodoPago33").ToString().ToEntero() <> CveMetodoPago Then MetodoPagoDif = True End If CveMetodoPago = row("CveMetodoPago33").ToString().ToEntero() Cves.Append($"{row("CveVentaDetalle").ToString()},") Next For Each row As DataRow In DTSeleccionadas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows CotizacionesLista.Add(row("CveVenta").ToString().ToEntero()) Next 'CARGA LOS USADOS RELACIONADOS A LOS PRODUCTOS SELECCIONADOS DE LA COTIZACION If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then ListaVentaDetalleCotizacion = CalculaUsadosCotizacion(Cves, DTSeleccionadas, DtCotizaciones) End If Else For Each row As DataRow In DTSeleccionadas.Rows If CveMetodoPago <> -1 And row("CveMetodoPago33").ToString().ToEntero() <> CveMetodoPago Then MetodoPagoDif = True End If Cves.Append($"{row("CveVenta").ToString()},") CotizacionesLista.Add(row("CveVenta").ToString().ToEntero()) CveMetodoPago = row("CveMetodoPago33").ToString().ToEntero() Next End If If MetodoPagoDif Then Alert("Las Facturas tienen un método de pago diferente", TipoMensaje.MsgAdvertencia) End If Cves.Remove(Cves.Length - 1, 1) Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasCotizacionesTotales(CveCliente, Cves.ToString(), If(ChkCotProductos.Checked, 2, 1)) Then DtCotizacionesPS = ObjClientes.DtResultados End If ObjClientes.Dispose() Cves.Clear() 'SI SE CALCULARON USADOS LA CANTIDAD DEBE ASIGNARSE A PARTIR DEL CALCULO If ListaVentaDetalleCotizacion IsNot Nothing AndAlso ListaVentaDetalleCotizacion.Count > 0 Then For Each Dr As DataRow In DtCotizacionesPS.Rows Dim VentaDetalle = ListaVentaDetalleCotizacion.FirstOrDefault(Function(cot) cot.CveVentaDetalle = Dr("CveVentaDetalle").ToString().ToEntero()) If VentaDetalle IsNot Nothing Then Dr("Cantidad") = VentaDetalle.Cantidad End If Next End If If Not AgregaPSCotizacion() Then Alert("Ocurrió un error validar las partidas de las cotizaciones seleccionadas. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'BtnEmitirImprimir.Text = "Facturar" Dim CveTipoDocto = DdlTipoComprobante.SelectedValue DdlTipoComprobante.Items.Clear() DdlTipoComprobante.Items.Insert(0, New ListItem("Ingresos", "Ing")) DdlTipoComprobante.Items.Insert(1, New ListItem("Anticipos", "Ant")) DdlTipoComprobante.Items.Insert(2, New ListItem("Remisión", "Rem")) DdlTipoComprobante.SelectedIndex = 0 DdlTipoComprobante.SelectedValueExist(CveTipoDocto) CambiaTipoComprobante() 'DdlTipoComprobante.Enabled = False UpRemisionesFacturas.Update() UpFacturar.Update() UpPS.Update() UpParametros.Update() End Sub 'Private Function AjustarTotalCotizacionFacturada(CveCotizacion As Integer, TotalAjustar As Decimal) As Boolean ' Dim ErrorAjuste As Boolean = False ' Dim ObjCotizacion As New Modelos.Factura(UsuarioActual, CveCotizacion, UsuarioActual.CveEmpresa) ' If ObjCotizacion.CveMoneda = 1 Then ' Dim TotalNuevoDocumento As Decimal = TotalAjustar ' Dim Diferencia As Decimal = (ObjCotizacion.Total - TotalNuevoDocumento) ' If Diferencia <> 0 Then ' 'AJUSTAR EN EL IVA ' For Each RowNuevoDocumento As DataRow In TmpDT.Rows ' Dim CveVentaDetalleCotizacion As Integer = RowNuevoDocumento("CveVentaDetalleCotizacion").ToString().ToEntero() ' Dim ImporteIVANuevoDocumento As Decimal = RowNuevoDocumento("ImporteIVA").ToString().ToDecimal() ' Dim ImporteIEPSNuevoDocumento As Decimal = RowNuevoDocumento("ImporteIEPS").ToString().ToDecimal() ' If CveVentaDetalleCotizacion > 0 Then ' 'AJUSTAR IVA ' If ImporteIVANuevoDocumento > 0 Then ' Dim ImporteIVACotizacion As Decimal = ObjCotizacion.DtDetalle.FiltroPrimeroValor("ImporteIVA", $"CveVentaDetalle={CveVentaDetalleCotizacion}").ToDecimal ' If ImporteIVANuevoDocumento <> ImporteIVACotizacion Then ' RowNuevoDocumento("ImporteIVA") = ImporteIVACotizacion ' End If ' End If ' 'AJUSTAR IEPS ' If ImporteIEPSNuevoDocumento > 0 Then ' Dim ImporteIEPSCotizacion As Decimal = ObjCotizacion.DtDetalle.FiltroPrimeroValor("ImporteIEPS", $"CveVentaDetalle={CveVentaDetalleCotizacion}").ToDecimal ' If ImporteIEPSNuevoDocumento <> ImporteIEPSCotizacion Then ' RowNuevoDocumento("ImporteIEPS") = ImporteIEPSCotizacion ' End If ' End If ' End If ' Next ' End If ' CalculaTotalesVenta(RecalculaImpuestosLocales:=False) ' If Math.Abs(ObjCotizacion.Total - TotalAjustar) > 0 OrElse Math.Abs(TxtTotal.Text.ToDecimal - TotalAjustar) > 0 Then ' ErrorAjuste = True ' End If ' End If ' ObjCotizacion.Dispose() ' Return Not ErrorAjuste 'End Function Private Function CalculaUsadosCotizacion(ByRef SbVentasDetalle As StringBuilder, ByVal DTSeleccionadas As DataTable, ByVal DtCotizaciones As DataTable) As List(Of Modelos.MVentaDetalleCotizacion) Dim Retorno As New List(Of Modelos.MVentaDetalleCotizacion) Dim DTTamanios As DataTable = ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa) Dim DTCvePSCostos As DataTable = DTTamanios.FiltraParametros("", "", {"CvePSCargo"}) For Each Dr As DataRow In DTSeleccionadas.Rows Dim tCantidad = If(ChkCotProductos.Checked, GvCotPS.Rows(IndiceGVCotDataKey(GvCotPS, Dr("CveVentaDetalle").ToString())).FCTextBox("TxtCantidadCot").Text.ToDecimal, Dr("Cantidad")).ToString().ToDecimal Dr("Cantidad") = tCantidad Retorno.Add(New Modelos.MVentaDetalleCotizacion() With {.CveVentaDetalle = Dr("CveVentaDetalle").ToString().ToEntero(), .Cantidad = tCantidad}) Next Dim TmpDTCalculo As DataRow() = DTSeleccionadas.Rows.Cast(Of DataRow).ToArray() Dim DTPSTemp As New DataTable '= TmpDT.Clone DTPSTemp.Columns.Add("CveVenta", GetType(Integer)) DTPSTemp.Columns.Add("Cantidad", GetType(Integer)) DTPSTemp.Columns.Add("CvePS", GetType(Integer)) DTPSTemp.Columns.Add("PU", GetType(Decimal)) For Each DrowPartidas As DataRow In TmpDTCalculo Dim CveTamanioTemp As Integer = DrowPartidas("CveTamaño").ToString().ToEntero() Dim CveVenta As Integer = DrowPartidas("CveVenta").ToString().ToEntero() If CveTamanioTemp > 0 Then Dim DTTamanioTemp As New DataTable Dim CvePsTemp As Integer = DTTamanios.FiltraParametros($"CveTamaño = { CveTamanioTemp } ").Rows(0)("CvePSCargo").ToString().ToEntero() Dim Cargo As Decimal = DTTamanios.FiltroPrimeroValor("Cargo", $" CveTamaño = { CveTamanioTemp }").ToDecimal If DTPSTemp.FiltraParametros($"CvePs = { CvePsTemp }").Rows.Count > 0 Then For Each dRowUpdate As DataRow In DTPSTemp.Rows If (dRowUpdate("CvePS").ToString().ToEntero() = CvePsTemp) Then dRowUpdate("Cantidad") = dRowUpdate("Cantidad").ToString().ToDecimal + DrowPartidas("Cantidad").ToString().ToDecimal dRowUpdate("PU") = Cargo ' dRowUpdate("Total").ToString().ToDecimal + ImporteCargo dRowUpdate("CveVenta") = CveVenta End If Next DTPSTemp.AcceptChanges() Else Dim dRowNuevo As DataRow = DTPSTemp.NewRow dRowNuevo("CvePS") = CvePsTemp dRowNuevo("Cantidad") = DrowPartidas("Cantidad").ToString().ToDecimal dRowNuevo("PU") = Cargo dRowNuevo("CveVenta") = CveVenta DTPSTemp.Rows.Add(dRowNuevo) DTPSTemp.AcceptChanges() End If End If Next For Each drowPsTamaños As DataRow In DTPSTemp.Rows If drowPsTamaños("PU").ToString().ToDecimal > 0 Then Dim CveVentaDetalleUsado = DtCotizaciones.FiltroPrimeroValor("CveVentaDetalle", $"CveVenta = {drowPsTamaños("CveVenta")} AND CvePS = {drowPsTamaños("CvePS")}").ToEntero() SbVentasDetalle.AppendFormat("{0},", CveVentaDetalleUsado) Retorno.Add(New Modelos.MVentaDetalleCotizacion() With {.CveVentaDetalle = CveVentaDetalleUsado, .Cantidad = drowPsTamaños("Cantidad").ToString().ToDecimal()}) End If Next Return Retorno End Function Private Sub VerificaCotizaciones(ByRef dt As DataTable) If ChkCotProductos.Checked Then For Each Gvr As GridViewRow In GvCotPS.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVentaDetalle As Integer = Gvr.DataKey("CveVentaDetalle").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVentaDetalle = {CveVentaDetalle}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next Else For Each Gvr As GridViewRow In GvCot.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVenta As Integer = Gvr.DataKey("CveVenta").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVenta = {CveVenta}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next End If End Sub Private Function IndiceGVCotDataKey(GridView As GridView, DataKeyValue As String) As Integer For Each row As GridViewRow In GridView.Rows If row.DataKey("CveVentaDetalle") = DataKeyValue Then Return row.RowIndex End If Next Return Nothing End Function Private Function AgregaPSCotizacion(Optional RecalculaImpustosLocales As Boolean = True, Optional DtOrden As DataTable = Nothing) As Boolean 'Dim ObjFactCotizacion As New Modelos.Factura(UsuarioActual, CveVenta, UsuarioActual.CveEmpresa) 'Dim TotalCotizacion As Decimal = ObjFactCotizacion.Total 'TmpDT.SUM("TotalImporte").ToDecimal() + TmpDT.SUM("ImporteIVA").ToDecimal() + TmpDT.SUM("ImporteIEPS").ToDecimal() - TmpDT.SUM("ImporteRetIVA").ToDecimal() - TmpDT.SUM("ImporteRetISR").ToDecimal() 'ObjFactCotizacion.Dispose() If DtCotizacionesPS IsNot Nothing Then Dim tCantidad As Decimal = 0 For Each Dr As DataRow In DtCotizacionesPS.Select() If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then tCantidad = Dr("Cantidad").ToString().ToDecimal() Else tCantidad = If(ChkCotProductos.Checked, GvCotPS.Rows(IndiceGVCotDataKey(GvCotPS, Dr("CveVentaDetalle").ToString())).FCTextBox("TxtCantidadCot").Text.ToDecimal, Dr("Cantidad")).ToString().ToDecimal End If 'AgregarProductoServicioCotizacion(tCantidad, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), ' Dr("CvePS").ToString().ToEntero(), Dr("PS").ToString(), Dr("Obs").ToString(), Dr("PU").ToString().ToDecimal, Dr("Descuento").ToString().ToDecimal, ' Dr("PorcentajeIVA").ToString().ToDecimal, Dr("IVA").ToString().ToDecimal, ' Dr("CveProyecto").ToString().ToEntero(), Dr("Proyecto").ToString(), Dr("CveSubProyecto").ToString().ToEntero(), Dr("SubProyecto").ToString(), ' CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero(), CveVentaDetalleCotizacion:=Dr("CveVentaDetalle").ToString().ToEntero(), SeActualiza:=True) Dim OrdenManual As Integer = 0 If DtOrden IsNot Nothing Then OrdenManual = DtOrden.FiltroPrimeroValor("Orden", $"CveVentaDetalle = {Dr("CveVentaDetalle")}").ToEntero() End If AgregarProductoServicio(tCantidad, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), Dr("CvePS").ToString.ToEntero(), Dr("PS").ToString, Dr("Obs").ToString(), Dr("PU").ToString().ToDecimal, Dr("Descuento").ToString().ToDecimal, Dr("CveProyecto").ToString().ToEntero(), Dr("Proyecto").ToString, Dr("CveSubProyecto").ToString().ToEntero(), Dr("SubProyecto").ToString(), CveContratoDetalle:=Dr("CveContratoDetalle").ToString.ToEntero(), CveVentaDetalleCotizacion:=Dr("CveVentaDetalle").ToString().ToEntero(), SeActualiza:=True, PorcentajeIVAFijo:=Dr("PorcentajeIVA").ToString.ToDecimal, CvePromocionDetalle:=Dr("CvePromocionDetalle").ToString().ToEntero(), OrdenManual:=OrdenManual) Next 'Dim TotalFactura = TmpDT.SUM("TotalImporte").ToDecimal() + TmpDT.SUM("ImporteIVA").ToDecimal() + TmpDT.SUM("ImporteIEPS").ToDecimal() - TmpDT.SUM("ImporteRetIVA").ToDecimal() - TmpDT.SUM("ImporteRetISR").ToDecimal() 'Dim Diferencia As Decimal = TotalCotizacion - TotalFactura 'If Diferencia <> 0 Then ' Dim LastRow As DataRow = TmpDT.Rows(TmpDT.Rows.Count - 1) ' LastRow("ImporteIVA") = LastRow("ImporteIVA").ToString().ToDecimal() - Diferencia 'End If If DtOrden IsNot Nothing Then OrdenarPS(Reeordenar:=False, RecargarGV:=False) End If CalculaTotalesVenta(RecalculaImpuestosLocales:=RecalculaImpustosLocales) Return True Else Return False End If End Function #End Region #Region " COTIZACIONES - FACTURAR " Private Function PreparaFacturarCotizacion() As Boolean 'LIMPIAMOS 'Dim TotalCotizacion As Decimal = TxtTotal.Text.Replace(",", "").ToDecimal() Dim DtOrden As DataTable = Nothing 'SI ES UNA VENTA EXISTENTE, CONSEVAR EL ORDEN If CveVenta > 0 Then DtOrden = TmpDT.FiltraParametros("", "Orden", {"CveVentaDetalle", "Orden"}) End If TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetIVA.Text = "0.00" TxtRetISR.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text CreaDTVentas() If CveEmpresaCRM > 0 And CveAcercamientoCRM > 0 And Not CveCliente > 0 Then Alert(String.Format("La Empresa CRM no tiene un Cliente vinculado. Por favor verifique y vuelva a intentar.

    Crear Cliente
    ", CveEmpresaCRM), TipoMensaje.MsgAdvertencia) Return False End If Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasCotizacionesTotales(CveCliente, CveVenta.ToString(), 1) Then DtCotizacionesPS = ObjClientes.DtResultados End If ObjClientes.Dispose() If Not AgregaPSCotizacion(RecalculaImpustosLocales:=False, DtOrden:=DtOrden) Then Alert("Ocurrió un error al agregar los conceptos de la cotización. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return False End If 'Dim TotalFactura As Decimal = TmpDT.SUM("TotalImporte").ToDecimal() + TmpDT.SUM("ImporteIVA").ToDecimal() + TmpDT.SUM("ImporteIEPS").ToDecimal() - TmpDT.SUM("ImporteRetIVA").ToDecimal() - TmpDT.SUM("ImporteRetISR").ToDecimal() 'Dim Diferencia As Decimal = TotalCotizacion - TotalFactura 'If Diferencia <> 0 Then ' Dim LastRow As DataRow = TmpDT.Rows(TmpDT.Rows.Count - 1) ' LastRow("ImporteIVA") = LastRow("ImporteIVA").ToString().ToDecimal() + Diferencia ' CalculaTotalesVenta() 'End If If TmpDT.Rows.Count = 0 Then Alert("No hay conceptos por facturar de esta cotización o ha sido cambiada su información. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return False End If Return True End Function #End Region #Region " REMISIONES - SIN FACTURAR " Protected Sub ChkCanRem_CheckedChanged(sender As Object, e As EventArgs) If ChkCanRem.Checked Then DivGvCancelarRemision.Visible = True Else DivGvCancelarRemision.Visible = False End If MostrarCondicionesCancelacion() End Sub Private Sub LnkRemisiones_Click(sender As Object, e As EventArgs) Handles LnkRemisiones.Click Dim ObjContratos As New ClsContratos If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, CveCliente, -1) Then DdlFiltroContrato.DataSource = ObjContratos.DtResultados DdlFiltroContrato.DataBind() DdlFiltroContrato.Items.Insert(0, New ListItem("Remisiones sin Contrato", "-1")) End If DdlFiltroRemMoneda.Items.Clear() DdlFiltroRemMoneda.DataSource = GlobalDTMonedas DdlFiltroRemMoneda.DataBind() DdlFiltroRemMoneda.Items.Insert(0, New ListItem("Todas", "-1")) GvContratoDetalles.DataSource = Nothing GvContratoDetalles.DataBind() UpContratos.Update() DivEstimaciones.Visible = True ContratoDetalles.Visible = False UPEstimaciones.Update() Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() If ChkRemProductos.Checked Then CargaRemisionesxProducto(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) Else CargaRemisiones(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) End If RegistraScript("$('#DivRemisiones').modal('show');") End Sub Private Sub BtnConsultarRem_Click(sender As Object, e As EventArgs) Handles BtnConsultarRem.Click If ChkRemProductos.Checked Then CargaRemisionesxProducto(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) Else CargaRemisiones(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) End If End Sub Private Sub ChkRemProductos_CheckedChanged(sender As Object, e As EventArgs) Handles ChkRemProductos.CheckedChanged If ChkRemProductos.Checked Then GvRemPS.Visible = True GvRem.Visible = False DivFiltroRemPS.Visible = True DivFiltroRem.Visible = False GvRem.DataSource = Nothing GvRem.DataBind() CargaRemisionesxProducto(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) Else GvRemPS.Visible = False GvRem.Visible = True DivFiltroRemPS.Visible = False DivFiltroRem.Visible = True GvRemPS.DataSource = Nothing GvRemPS.DataBind() CargaRemisiones(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) End If End Sub Private Sub DdlFiltroContrato_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlFiltroContrato.SelectedIndexChanged If ChkRemProductos.Checked Then CargaRemisionesxProducto(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) Else CargaRemisiones(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) End If End Sub Private Sub DdlFiltroRemMoneda_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlFiltroRemMoneda.SelectedIndexChanged If ChkRemProductos.Checked Then CargaRemisionesxProducto(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) Else CargaRemisiones(DdlFiltroContrato.SelectedValue.ToEntero(), DdlFiltroRemMoneda.SelectedValue.ToEntero()) End If End Sub Private Sub CargaRemisiones(CveContrato As Integer, CveMoneda As Integer) Dim ObjVentas As New ClsVentas If ObjVentas.GetRemisionesSinFacturar(TxtFechaIRem.Text, TxtFechaFRem.Text, CveCliente, CveContrato, 1, CveMoneda) Then If CveContrato = -1 Then If UsuarioActual.CveEmpresa = 188 Then DTRemisiones = ObjVentas.DtResultados Else DTRemisiones = ObjVentas.DtResultados.FiltraParametros("CveContrato = 0") End If Else DTRemisiones = ObjVentas.DtResultados.FiltraParametros($"CveContrato = {CveContrato}") End If If Not DTRemisiones.Columns.Contains("Aplicado") Then DTRemisiones.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If GvRem.DataSource = DTRemisiones End If ObjVentas.Dispose() GvRem.DataBind() UpRemisionesFacturas.Update() End Sub Private Sub CargaRemisionesxProducto(CveContrato As Integer, CveMoneda As Integer) Dim ObjVentas As New ClsVentas If ObjVentas.GetRemisionesSinFacturar(TxtFechaIRem.Text, TxtFechaFRem.Text, CveCliente, CveContrato, 2, CveMoneda) Then If CveContrato = -1 Then DTRemisiones = ObjVentas.DtResultados.FiltraParametros("CveContrato = 0") Else DTRemisiones = ObjVentas.DtResultados.FiltraParametros($"CveContrato = {CveContrato}") End If If Not DTRemisiones.Columns.Contains("Aplicado") Then DTRemisiones.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If GvRemPS.DataSource = DTRemisiones End If ObjVentas.Dispose() GvRemPS.DataBind() UpRemisionesFacturas.Update() End Sub Protected Sub RblTipo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles RblTipo.SelectedIndexChanged HuboCambioRemi = Not HuboCambioRemi 'TOTAL X CONCEPTO If RblTipo.SelectedValue = "3" Then 'DivPSRemision.Visible = False ChkRemProductos.Visible = True Else 'DivPSRemision.Visible = True 'CargaPSRemision(-1, DdlPSRemision) ChkRemProductos.Visible = False ChkRemProductos.Checked = False End If ChkRemProductos_CheckedChanged(ChkRemProductos, EventArgs.Empty) End Sub Protected Sub BtnGuardarRemisiones_Click(sender As Object, e As EventArgs) Handles BtnGuardarRemisiones.Click If GvRem.Rows.Count > 0 Or GvRemPS.Rows.Count > 0 Then If RblTipo.SelectedValue.Contiene("1", "2") AndAlso DdlPSRemision.SelectedValue.ToEntero() <= 0 Then Alert("Debe seleccionar un producto para facturar la remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not UsuarioActual.TienePermisoProceso(60) Then Alert("El usuario no tiene permiso para facturar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'Checa las facturas selecionadas If Not VerificaRemisiones(DTRemisiones) Then Alert("La cantidad/total debe ser mayor que 0", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim dtSeleccionadas As DataTable = DTRemisiones.FiltraParametros("Aplicado = True") Dim CveContrato = DTRemisiones.FiltroPrimeroValor("CveContrato", "Aplicado = True").ToEntero() If dtSeleccionadas.FiltraParametros("", "", {"Abreviatura"}).Rows.Count > 1 Then Alert("Solo debe seleccionar remisiones de la misma moneda. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 Then AsignaMedicoProcedimientoFacturaRemisionesModal() End If DdlMoneda.SelectedValue = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $"Abreviatura = '{dtSeleccionadas.FiltroPrimeroValor("Abreviatura")}'") DdlMoneda.Enabled = False CambiaMoneda() If UsuarioActual.Empresa.Funcionalidad(705) = "1" Then Me.CveLineaAdicionalVenta = dtSeleccionadas.FiltroPrimeroValor("CveLineaAdicional", "CveLineaAdicional > 0").ToEntero() CalculaLineasAdicionales() End If DdlUsoCFDI.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveUsoCFDI")) DdlMetodoPago33.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveMetodoPago")) CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveFormaPago")) DiasCredito = dtSeleccionadas.FiltroPrimeroValor("DiasCredito").ToEntero() EsDiasCreditoFijo = CBool(dtSeleccionadas.FiltroPrimeroValor("EsDiasCreditoFijo")) 'validación, cuando las remisiones sean de una sucursal y el usuario solo tenga acceso a otra, deberá tener priodidad la sucursal de la que solo se factura If DdlSubProyectoDatos.Enabled = True Then DdlSubProyectoDatos.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveSubProyecto")) End If DdlSucursalCliente.SelectedValueExist(If(dtSeleccionadas.FiltroPrimeroValor("CveClienteSucursal").ToEntero() > 0, dtSeleccionadas.FiltroPrimeroValor("CveClienteSucursal"), "-1")) CambiaSucursalGeneral() CargaClienteSucursal(DdlSucursalCliente.SelectedValue.ToEntero()) DdlUsoCFDI.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveUsoCFDI")) DdlMetodoPago33.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveMetodoPago")) CargaFormaPago(DdlMetodoPago33.SelectedValue.ToEntero()) DdlFormaPago33.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveFormaPago")) If GvPS.Rows.Count > 0 Then TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text End If If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then RBLPago.SelectedValuesIfExist(dtSeleccionadas.FiltroPrimeroValor("CondicionesPago")) Else RBLPago.Items(0).Enabled = True 'sino está activo lo activamos porque las remisiones pueden ser a crédito RBLPago.SelectedValue = "1" End If RemisionesLista.Clear() DdlVendedor.SelectedValueExist(dtSeleccionadas.FiltroPrimeroValor("CveVendedor")) Dim MsgUsados As New StringBuilder Dim UsadosValidados As Boolean = True If dtSeleccionadas.Rows.Count > 0 Then Select Case RblTipo.SelectedValue Case "1" 'T O T A L G E N E R A L For Each row As DataRow In dtSeleccionadas.Rows If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Using ObjUsados As New ClsVentas If ObjUsados.GetVentasUsados(row("CveVenta").ToString().ToEntero(), -1, row("Fecha").ToString().ToDateTime, UsuarioActual.CveEmpresa) Then If ObjUsados.DtResultados.Rows.Count > 0 Then UsadosValidados = False MsgUsados.AppendFormat("{0},", row("Folio").ToString()) End If End If End Using End If If UsadosValidados Then RemisionesLista.Add(row("CveVenta").ToString().ToEntero()) End If Next IsTotalxConcepto = False Dim PU As Decimal = dtSeleccionadas.SUM("SubTotal") Dim PS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPSRemision.SelectedValue.ToEntero())(0) Dim IVA As Decimal = If(dtSeleccionadas.SUM("Iva") > 0, dtSeleccionadas.SUM("Iva") / dtSeleccionadas.SUM("SubTotal"), 0.16D) Dim rowSP As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero())(0) AgregarProductoServicio(1, PS("CveUM").ToString().ToEntero(), PS("UnidadMedida").ToString(), PS("CveClasificacion").ToString().ToEntero(), PS("Clasificacion").ToString(), PS("CvePS").ToString().ToEntero(), PS("PS").ToString(), "", PU, 0, rowSP("CveProyecto").ToString().ToEntero(), rowSP("Proyecto").ToString(), rowSP("CveSubProyecto").ToString().ToEntero(), rowSP("SubProyecto").ToString(), RegeneraIEPS:=True) CalculaTotalesVenta() Case "2" 'T O T A L X R E M I S I O N For Each row As DataRow In dtSeleccionadas.Rows If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Using ObjUsados As New ClsVentas If ObjUsados.GetVentasUsados(row("CveVenta").ToString().ToEntero(), -1, row("Fecha").ToString().ToDateTime, UsuarioActual.CveEmpresa) Then If ObjUsados.DtResultados.Rows.Count > 0 Then UsadosValidados = False MsgUsados.AppendFormat("{0},", row("Folio").ToString()) End If End If End Using End If If UsadosValidados Then RemisionesLista.Add(row("CveVenta").ToString().ToEntero()) End If Next Dim PS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPSRemision.SelectedValue.ToEntero())(0) Dim rowSP As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero())(0) Dim IVA As Double = If(dtSeleccionadas.SUM("Iva") > 0, dtSeleccionadas.SUM("Iva") / dtSeleccionadas.SUM("SubTotal"), 0.16) For Each gvr As GridViewRow In GvRem.Rows If gvr.FCCheckBox("Chk").Checked Then AgregarProductoServicio(1, PS("CveUM").ToString().ToEntero(), PS("UnidadMedida").ToString(), PS("CveClasificacion").ToString().ToEntero(), PS("Clasificacion").ToString(), PS("CvePS").ToString().ToEntero(), PS("PS").ToString(), "", gvr.DataKey("SubTotal").ToString().ToDecimal, 0, rowSP("CveProyecto").ToString().ToEntero(), rowSP("Proyecto").ToString(), rowSP("CveSubProyecto").ToString().ToEntero(), rowSP("SubProyecto").ToString(), RegeneraIEPS:=True) End If Next CalculaTotalesVenta() Case "3" 'T O T A L X C O N C E P T O IsTotalxConcepto = True Dim sb As New StringBuilder If ChkRemProductos.Checked Then For Each row As DataRow In dtSeleccionadas.Rows sb.Append($"{row("CveVentaDetalle").ToString()},") Next For Each row As DataRow In dtSeleccionadas.FiltraParametros("", DistinctColumns:={"CveVenta", "Fecha", "Folio"}).Rows If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Using ObjUsados As New ClsVentas If ObjUsados.GetVentasUsados(row("CveVenta").ToString().ToEntero(), -1, row("Fecha").ToString().ToDateTime, UsuarioActual.CveEmpresa) Then If ObjUsados.DtResultados.Rows.Count > 0 Then UsadosValidados = False MsgUsados.AppendFormat("{0},", row("Folio").ToString()) End If End If End Using End If If UsadosValidados Then RemisionesLista.Add(row("CveVenta").ToString().ToEntero()) End If Next Else For Each row As DataRow In dtSeleccionadas.Rows sb.Append($"{row("CveVenta").ToString()},") If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then Using ObjUsados As New ClsVentas If ObjUsados.GetVentasUsados(row("CveVenta").ToString().ToEntero(), -1, row("Fecha").ToString().ToDateTime, UsuarioActual.CveEmpresa) Then If ObjUsados.DtResultados.Rows.Count > 0 Then UsadosValidados = False MsgUsados.AppendFormat("{0},", row("Folio").ToString()) End If End If End Using End If If UsadosValidados Then RemisionesLista.Add(row("CveVenta").ToString().ToEntero()) End If Next End If sb.Remove(sb.Length - 1, 1) If UsadosValidados Then CargaConceptosRemisionPorFacturar(sb.ToString(), If(ChkRemProductos.Checked, 2, 1)) End If sb.Clear() End Select Dim CveTipoDocto = DdlTipoComprobante.SelectedValue DdlTipoComprobante.Items.Clear() DdlTipoComprobante.Items.Insert(0, New ListItem("Ingresos", "Ing")) DdlTipoComprobante.Items.Insert(1, New ListItem("Anticipos", "Ant")) DdlTipoComprobante.SelectedIndex = 0 DdlTipoComprobante.SelectedValueExist(CveTipoDocto) CambiaTipoComprobante() Dim MensajeRemisiones As New StringBuilder Dim MensajeRemisionesMedicas As New StringBuilder Dim EsRemisionMedica As Boolean = False Dim ObsOC As New StringBuilder Dim ObsPedido As New StringBuilder Dim ObsInv As New StringBuilder MensajeRemisiones.Append("Remisiones: ") Dim CveMetodoPago As Integer = -1 Dim MetodoPagoDif As Boolean = False For Each Dr As DataRow In dtSeleccionadas.Rows If Dr("Medico").ToString.Trim.Length > 0 Then MensajeRemisionesMedicas.Append($"Dr. {Dr("Medico").ToString}{vbCrLf}") EsRemisionMedica = True End If If Dr("Procedimiento").ToString.Trim.Length > 0 Then MensajeRemisionesMedicas.Append($"Procedimiento {Dr("Procedimiento")}{vbCrLf}") EsRemisionMedica = True End If MensajeRemisionesMedicas.Append($"Rem. {Dr("Folio")} {If(Dr("ObsFact").ToString().Length > 0, $"({Dr("ObsFact")})", "")}{vbCrLf}") MensajeRemisiones.AppendFormat("{0} {1}, ", Dr("Folio"), If(Dr("ObsFact").ToString().Length > 0, $"({Dr("ObsFact")})", "")) ObsOC.AppendFormat("{0}, ", Dr("ObsOC")) ObsPedido.AppendFormat("{0}, ", Dr("ObsPedido")) ObsInv.AppendFormat("{0}, ", Dr("ObsInv")) If CveMetodoPago <> -1 And Dr("CveMetodoPago33").ToString().ToEntero() <> CveMetodoPago Then MetodoPagoDif = True End If CveMetodoPago = Dr("CveMetodoPago33").ToString().ToEntero() Next If UsuarioActual.Empresa.Funcionalidad(578).ToEntero = 1 AndAlso EsRemisionMedica Then TxtObsFact.Text = If(MensajeRemisionesMedicas.ToString().Length > 0, MensajeRemisionesMedicas.ToString().Substring(0, MensajeRemisionesMedicas.ToString().Length - 2), "") Else TxtObsFact.Text = If(MensajeRemisiones.ToString().Length > 0, MensajeRemisiones.ToString().Substring(0, MensajeRemisiones.ToString().Length - 2), "") End If TxtOrdenCompra.Text = If(ObsOC.ToString().Length > 0, ObsOC.ToString().Substring(0, ObsOC.ToString().Length - 2), "") TxtPedidoContrato.Text = If(ObsPedido.ToString().Length > 0, ObsPedido.ToString().Substring(0, ObsPedido.ToString().Length - 2), "") TxtObsAlmacen.Text = If(ObsInv.ToString().Length > 0, ObsInv.ToString().Substring(0, ObsInv.ToString().Length - 2), "") UPObservaciones.Update() If MetodoPagoDif Then Alert("Las Facturas tienen un método de pago diferente", TipoMensaje.MsgAdvertencia) End If If CveContrato > 0 Then DdlContrato.DataSource = DtContratos.FiltraParametros($"CveContrato = {CveContrato}") DdlContrato.DataBind() End If MensajeRemisiones.Clear() ObsOC.Clear() ObsPedido.Clear() ObsInv.Clear() End If If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not UsadosValidados Then If MsgUsados.Length > 0 Then MsgUsados.Remove(MsgUsados.Length - 1, 1) End If Alert($"Las siguientes remisiones no se pueden facturar porque no se ha recibido el usado correspondiente:
    {MsgUsados.ToString()}", TipoMensaje.MsgAdvertencia) BtnEmitirImprimir.Visible = False End If 'SI HAY REMISIONES SURTIDAS, NO GENERAR EL MOVIMIENTO AUTOMATICO If UsuarioActual.Empresa.Funcionalidad(567) = "1" AndAlso dtSeleccionadas.COUNT("Surtido", "Surtido = 'Si'") > 0 Then DivAlmacen.Visible = False End If End If TxtFechaPago.Text = If(EsDiasCreditoFijo, NowADS().AddDays(DiasCredito).ToShortDateString, TxtFechaPago.Text) DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) UpRemisionesFacturas.Update() UpFacturar.Update() UpPS.Update() UpParametros.Update() UPEstimaciones.Update() UPCondicionesPago.Update() UpINV.Update() HuboCambioRemi = Not HuboCambioRemi RegistraScript("$('#DivRemisiones').modal('hide');", "DivRemisionesHide") End Sub Private Function VerificaRemisiones(ByRef dt As DataTable) As Boolean Dim Valido As Boolean = True If ChkRemProductos.Checked Then Valido = Not (From GvRow In GvRemPS.Rows.Cast(Of GridViewRow) Let Cantidad = GvRow.FCTextBox("TxtCantidadRem").Text.Trim().ToDecimal(), Aplicar = GvRow.FCCheckBox("Chk").Checked Where GvRow.RowType = DataControlRowType.DataRow AndAlso Cantidad <= 0D AndAlso Aplicar Select GvRow ).Any If Valido Then For Each Gvr As GridViewRow In GvRemPS.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVentaDetalle As Integer = Gvr.DataKey("CveVentaDetalle").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVentaDetalle = {CveVentaDetalle}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next End If Else For Each Gvr As GridViewRow In GvRem.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVenta As Integer = Gvr.DataKey("CveVenta").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVenta = {CveVenta}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next End If Return Valido End Function Private Sub CargaConceptosRemisionPorFacturar(CveRemisiones As String, TipoCargas As Integer, Optional DtOrden As DataTable = Nothing) Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasRemisionesTotales(CveCliente, CveRemisiones, TipoCargas, UsuarioActual.CveEmpresa) Then DtRemisionesPS = ObjClientes.DtResultados End If ObjClientes.Dispose() Dim CveSubProyectoVenta As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim SubProyectoVenta As String = DdlSubProyectoDatos.SelectedItem.Text Dim CveProyectoVenta As Integer = -1 Dim ProyectoVenta As String = "" If UsuarioActual.CveEmpresa = 119 AndAlso CveSubProyectoVenta > 0 Then Dim RowSP = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyectoVenta).FiltroPrimero("") If RowSP IsNot Nothing Then CveProyectoVenta = RowSP("CveProyecto").ToString().ToEntero() ProyectoVenta = RowSP("Proyecto").ToString() End If End If If DtRemisionesPS IsNot Nothing Then Dim tCantidad As Decimal = 0 For Each Dr As DataRow In DtRemisionesPS.Select() Dim CveProyecto As Integer = -1 Dim Proyecto As String = "" Dim CveSubProyecto As Integer = -1 Dim SubProyecto As String = "" If UsuarioActual.CveEmpresa = 119 Then CveProyecto = CveProyectoVenta Proyecto = ProyectoVenta CveSubProyecto = CveSubProyectoVenta SubProyecto = SubProyectoVenta Else CveProyecto = Dr("CveProyecto").ToString().ToEntero() Proyecto = Dr("Proyecto").ToString() CveSubProyecto = Dr("CveSubProyecto").ToString().ToEntero() SubProyecto = Dr("SubProyecto").ToString() End If tCantidad = If(ChkRemProductos.Checked, GvRemPS.Rows(IndiceGVDataKey(GvRemPS, "CveVentaDetalle", $"{Dr("CveVentaDetalle")}")).FCTextBox("TxtCantidadRem").Text, Dr("Cantidad")).ToString().ToDecimal Dim OrdenManual As Integer = 0 If DtOrden IsNot Nothing Then OrdenManual = DtOrden.FiltroPrimeroValor("Orden", $"CveVentaDetalle = {Dr("CveVentaDetalle")}").ToEntero() End If AgregarProductoServicio(tCantidad, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), Dr("CvePS").ToString().ToEntero(), Dr("PS").ToString(), Dr("Obs").ToString(), Dr("PU").ToString().ToDecimal, Dr("Descuento").ToString().ToDecimal, CveProyecto, Proyecto, CveSubProyecto, SubProyecto, CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), CveContratoDetalle:=Dr("CveContratoDetalle").ToString().ToEntero(), CveVentaDetalleRemision:=Dr("CveVentaDetalle").ToString().ToEntero(), CvePromocionDetalle:=Dr("CvePromocionDetalle").ToString().ToEntero(), RegeneraIEPS:=True, OrdenManual:=OrdenManual) Next If DdlFiltroContrato.SelectedValue.ToEntero() > 0 Then CveContrato = DdlFiltroContrato.SelectedValue.ToEntero() End If End If CalculaTotalesVenta() End Sub Private Function IndiceGVDataKey(GridView As GridView, DataKey As String, DataKeyValue As String) As Integer For Each row As GridViewRow In GridView.Rows If row.DataKey(DataKey) = DataKeyValue Then Return row.RowIndex End If Next Return Nothing End Function #End Region #Region " REMISIONES - FACTURAR " Private Sub ActivaFacturarRemision() 'If UsuarioActual.CveUsuario <> 100 Then ' Exit Sub 'End If Dim ObjClientes As New ClsClientes If ObjClientes.GetVentasRemisionesTotales(CveCliente, CveVenta.ToString(), 1, UsuarioActual.CveEmpresa) AndAlso ObjClientes.DtResultados.Rows.Count > 0 Then LnkFacturarRemision.Visible = True If ThCantidadFacturadaRem.Visible Then LnkFacturarRemision.ToolTip = "¿Seguro que desea facturar lo pendiente por facturar de la remisión?" End If If DdlMoneda.SelectedValue.ToEntero() = 1 Then TrConversionDolares.Visible = True ChkConvertirDolares.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambioDlls.Enabled = True Else TrConversionTipoCambio.Visible = True ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambio.Enabled = True End If UpPS.Update() End If ObjClientes.Dispose() End Sub Private Sub LnkFacturarRemision_Click(sender As Object, e As EventArgs) Handles LnkFacturarRemision.Click 'LIMPIAMOS TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetIVA.Text = "0.00" TxtRetISR.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text CreaDTVentas() CargaRemisiones(If(DdlContrato.SelectedValue.ToEntero() > 0, DdlContrato.SelectedValue.ToEntero(), -1), DdlMoneda.SelectedValue.ToEntero()) Dim DrRemision As DataRow() = DTRemisiones.Select($"CveVenta = {CveVenta}") If DrRemision.Count > 0 Then DrRemision(0)("Aplicado") = "True" End If DTRemisiones.AcceptChanges() RemisionesLista.Add(CveVenta) CargaConceptosRemisionPorFacturar(CveVenta.ToString(), 1) BtnEmitirImprimir.Text = "Facturar" DdlTipoComprobante.SelectedValue = "Ing" If Not (EstablecioFolio AndAlso UsuarioActual.TienePermisoProceso(130)) Then TxtFecha.Text = NowADS().ToShortDateString() End If UpPS.Update() UpFacturar.Update() If TmpDT.Rows.Count = 0 Then Alert("No hay conceptos por facturar de esta remisión. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If BtnEmitirImprimir_Click(BtnEmitirImprimir, EventArgs.Empty) End Sub Private Function PreparaFacturarRemision() As Boolean 'LIMPIAMOS Dim DtOrden As DataTable = Nothing 'SI ES UNA VENTA EXISTENTE, CONSEVAR EL ORDEN If CveVenta > 0 Then DtOrden = TmpDT.FiltraParametros("", "Orden", {"CveVentaDetalle", "Orden"}) End If TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetIVA.Text = "0.00" TxtRetISR.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text CreaDTVentas() CargaRemisiones(If(DdlContrato.SelectedValue.ToEntero() > 0, DdlContrato.SelectedValue.ToEntero(), -1), DdlMoneda.SelectedValue.ToEntero()) Dim DrRemision As DataRow() = DTRemisiones.Select($"CveVenta = {CveVenta}") If DrRemision.Count > 0 Then DrRemision(0)("Aplicado") = "True" End If DTRemisiones.AcceptChanges() If RemisionesLista IsNot Nothing Then RemisionesLista.Clear() RemisionesLista.Add(CveVenta) CargaConceptosRemisionPorFacturar(CveVenta.ToString(), 1, DtOrden:=DtOrden) End If If TmpDT.Rows.Count = 0 Then Alert("No hay conceptos por facturar de esta remisión. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return False End If Return True End Function #End Region #Region " PEDIDOS2 - SIN FACTURAR " Protected Sub LnkPedido2SinFacturar_Click(sender As Object, e As EventArgs) DdlMonedaModalPedido2.Items.Clear() DdlMonedaModalPedido2.DataSource = GlobalDTMonedas DdlMonedaModalPedido2.DataBind() DdlMonedaModalPedido2.Items.Insert(0, New ListItem("Todas", "-1")) Tab.ActiveTab = TabGenerales TabGenerales.Enabled = True Updatetabs.Update() CargaPedidos2(DdlMonedaModalPedido2.SelectedValue.ToEntero(), If(ChkMostrarProductosPedido2.Checked, 0, 1)) RegistraScript("$('#DivPedidos2').modal('show');") End Sub Private Sub BtnConsultaPedido_Click(sender As Object, e As EventArgs) Handles BtnConsultaPedido.Click CargaPedidos2(DdlMonedaModalPedido2.SelectedValue.ToEntero(), If(ChkMostrarProductosPedido2.Checked, 0, 1)) End Sub Protected Sub ChkMostrarProductosPedido2_CheckedChanged(sender As Object, e As EventArgs) MostrarProductoPedido2() CargaPedidos2(DdlMonedaModalPedido2.SelectedValue.ToEntero(), If(ChkMostrarProductosPedido2.Checked, 0, 1)) End Sub Private Sub MostrarProductoPedido2() If ChkMostrarProductosPedido2.Checked Then GvPedidos2SinFacturarPS.Visible = True GvPedidos2SinFacturar.Visible = False DivBuscadorPedido2PS.Visible = True DivBuscadorPedido2.Visible = False GvPedidos2SinFacturar.DataSource = Nothing GvPedidos2SinFacturar.DataBind() Else GvPedidos2SinFacturarPS.Visible = False GvPedidos2SinFacturar.Visible = True DivBuscadorPedido2PS.Visible = False DivBuscadorPedido2.Visible = True GvPedidos2SinFacturarPS.DataSource = Nothing GvPedidos2SinFacturarPS.DataBind() End If End Sub Private Sub CargaPedidos2(CveMoneda As Integer, Tipo As Integer) Dim ObjVentas As New ClsVentas If ObjVentas.GetVentaDetallePedido2SinFacturar(TxtFechaIPed.Text, TxtFechaFPedido.Text, CveCliente, CveMoneda, Tipo) Then DtPedidos2 = ObjVentas.DtResultados If Not DtPedidos2.Columns.Contains("Aplicado") Then DtPedidos2.Columns.Add("Aplicado", Type.GetType("System.Boolean")) End If If Tipo = 1 Then GvPedidos2SinFacturar.DataSource = DtPedidos2 Else GvPedidos2SinFacturarPS.DataSource = DtPedidos2 End If End If ObjVentas.Dispose() If Tipo = 1 Then GvPedidos2SinFacturar.DataBind() Else GvPedidos2SinFacturarPS.DataBind() End If UpModalPedidos2.Update() End Sub Protected Sub BtnGuardarPedido2_Click(sender As Object, e As EventArgs) If GvPedidos2SinFacturar.Rows.Count = 0 And GvPedidos2SinFacturarPS.Rows.Count = 0 Then Alert("Debe existir por lo menos un pedido a facturar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Not UsuarioActual.TienePermisoProceso(60) Then Alert("El usuario no tiene permiso para facturar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'MARCA LAS SELECCIONADAS VerificaPedidos2(DtPedidos2) Dim DTSeleccionadas As DataTable = DtPedidos2.FiltraParametros("Aplicado = True") If DTSeleccionadas.Rows.Count = 0 Then Alert("Debe seleccionar por lo menos un pedido a facturar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'SOLO PUEDE SELECCIONAR DE LA MISMA MONEDA If DTSeleccionadas.FiltraParametros("", "", {"Abreviatura"}).Rows.Count > 1 Then Alert("Solo debe seleccionar pedidos de la misma moneda. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If 'LIMPIA LAS PARTIDAS ACTUALES If GvPS.Rows.Count > 0 Then TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetISR.Text = "0.00" TxtRetIVA.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = "0.00" End If Pedidos2Lista.Clear() 'CARGAMOS LOS VALORES DEL PEDIDO DdlMoneda.SelectedValue = GlobalDTMonedas.FiltroPrimeroValor("CveMoneda", $"Abreviatura = '{DTSeleccionadas.FiltroPrimeroValor("Abreviatura")}'") DdlMoneda.Enabled = False CambiaMoneda() DdlMetodoPago33.SelectedValueExist(DTSeleccionadas.FiltroPrimeroValor("CveMetodoPago")) DdlFormaPago33.SelectedValueExist(DTSeleccionadas.FiltroPrimeroValor("CveFormaPago")) DdlUsoCFDI.SelectedValueExist(DTSeleccionadas.FiltroPrimeroValor("CveUsoCFDI")) If DdlSubProyectoDatos.Enabled Then 'validación, cuando los pedido2 sean de una sucursal y el usuario solo tenga acceso a otra, deberá tener priodidad la sucursal de la que solo se factura DdlSubProyectoDatos.SelectedValueExist(DTSeleccionadas.FiltroPrimeroValor("CveSubProyecto")) End If DdlSucursalCliente.SelectedValueExist(If(DTSeleccionadas.FiltroPrimeroValor("CveClienteSucursal").ToEntero() > 0, DTSeleccionadas.FiltroPrimeroValor("CveClienteSucursal"), "-1")) DdlVendedor.SelectedValueExist(DTSeleccionadas.FiltroPrimeroValor("CveVendedor")) CambiaSucursalGeneral() CargaClienteSucursal(DdlSucursalCliente.SelectedValue.ToEntero()) Dim Cves As New StringBuilder If ChkMostrarProductosPedido2.Checked Then For Each row As DataRow In DTSeleccionadas.Rows Cves.Append($"{row("CveVentaDetalle").ToString()},") Next For Each row As DataRow In DTSeleccionadas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows Pedidos2Lista.Add(row("CveVenta").ToString().ToEntero()) Next Else For Each row As DataRow In DTSeleccionadas.Rows Cves.Append($"{row("CveVenta").ToString()},") Pedidos2Lista.Add(row("CveVenta").ToString().ToEntero()) Next End If Cves.Remove(Cves.Length - 1, 1) Dim ObjVentas As New ClsVentas If ObjVentas.GetVentasPedidos2Totales(CveCliente, Cves.ToString(), If(ChkMostrarProductosPedido2.Checked, 2, 1)) Then DtPedidosPS = ObjVentas.DtResultados End If ObjVentas.Dispose() Cves.Clear() If Not AgregaPSPedido() Then Alert("Ocurrió un error validar las partidas de los pedidos seleccionadas. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim CveTipoDocto As String = DdlTipoComprobante.SelectedValue DdlTipoComprobante.Items.Clear() DdlTipoComprobante.Items.Insert(0, New ListItem("Ingresos", "Ing")) DdlTipoComprobante.Items.Insert(1, New ListItem("Anticipos", "Ant")) DdlTipoComprobante.Items.Insert(2, New ListItem("Remisión", "Rem")) DdlTipoComprobante.SelectedIndex = 0 DdlTipoComprobante.SelectedValueExist(CveTipoDocto) CambiaTipoComprobante() 'CARGA OBSERVACIONES DE LOS PEDIDOS Dim MensajePedidos2 As New StringBuilder Dim ObsOC As New StringBuilder Dim ObsPedido As New StringBuilder Dim ObsInv As New StringBuilder MensajePedidos2.Append("Pedidos: ") For Each Dr As DataRow In DTSeleccionadas.Rows MensajePedidos2.AppendFormat("{0} {1}, ", Dr("Folio"), If(Dr("ObsFact").ToString().Length > 0, $"({Dr("ObsFact")})", "")) ObsOC.AppendFormat("{0}, ", Dr("ObsOC")) ObsPedido.AppendFormat("{0}, ", Dr("ObsPedido")) ObsInv.AppendFormat("{0}, ", Dr("ObsInv")) Next TxtObsFact.Text = If(MensajePedidos2.ToString().Length > 0, MensajePedidos2.ToString().Substring(0, MensajePedidos2.ToString().Length - 2), "") TxtOrdenCompra.Text = If(ObsOC.ToString().Length > 0, ObsOC.ToString().Substring(0, ObsOC.ToString().Length - 2), "") TxtPedidoContrato.Text = If(ObsPedido.ToString().Length > 0, ObsPedido.ToString().Substring(0, ObsPedido.ToString().Length - 2), "") TxtObsAlmacen.Text = If(ObsInv.ToString().Length > 0, ObsInv.ToString().Substring(0, ObsInv.ToString().Length - 2), "") MensajePedidos2.Clear() ObsOC.Clear() ObsPedido.Clear() ObsInv.Clear() UpModalPedidos2.Update() UpFacturar.Update() UpPS.Update() UpParametros.Update() UPEstimaciones.Update() UPObservaciones.Update() RegistraScript("$('#DivPedidos2').modal('hide');", "DivPedidos2Hide") End Sub Private Sub VerificaPedidos2(ByRef dt As DataTable) If ChkMostrarProductosPedido2.Checked Then For Each Gvr As GridViewRow In GvPedidos2SinFacturarPS.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVentaDetalle As Integer = Gvr.DataKey("CveVentaDetalle").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVentaDetalle = {CveVentaDetalle}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next Else For Each Gvr As GridViewRow In GvPedidos2SinFacturar.Rows If Gvr.RowType = DataControlRowType.DataRow Then Dim ChkAplicar As CheckBox = Gvr.FCCheckBox("Chk") Dim CveVenta As Integer = Gvr.DataKey("CveVenta").ToEntero() Dim Drs As DataRow() = dt.Select($"CveVenta = {CveVenta}") If Drs.Count > 0 Then Drs(0)("Aplicado") = ChkAplicar.Checked End If dt.AcceptChanges() End If Next End If End Sub Private Function AgregaPSPedido(Optional FacturarPedidoActual As Boolean = False) As Boolean If DtPedidosPS IsNot Nothing Then Dim tCantidad As Decimal = 0 For Each Dr As DataRow In DtPedidosPS.Select() If Not FacturarPedidoActual Then tCantidad = If(ChkMostrarProductosPedido2.Checked, GvPedidos2SinFacturarPS.Rows(IndiceGVDataKey(GvPedidos2SinFacturarPS, "CveVentaDetalle", $"{Dr("CveVentaDetalle")}")).FCTextBox("TxtCantidadPedido2").Text, Dr("Cantidad")).ToString().ToDecimal Else tCantidad = Dr("Cantidad").ToString().ToDecimal() End If AgregarProductoServicio(tCantidad, Dr("CveUM").ToString().ToEntero(), Dr("UM").ToString(), Dr("CveClasificacion").ToString().ToEntero(), Dr("Clasificacion").ToString(), Dr("CvePS").ToString().ToEntero(), Dr("PS").ToString(), Dr("Obs").ToString(), Dr("PU").ToString().ToDecimal, Dr("Descuento").ToString().ToDecimal, Dr("CveProyecto").ToString().ToEntero(), Dr("Proyecto").ToString(), Dr("CveSubProyecto").ToString().ToEntero(), Dr("SubProyecto").ToString(), CveVentaDetalle:=Dr("CveVentaDetalle").ToString().ToEntero(), CveVentaDetallePedido2:=Dr("CveVentaDetalle").ToString().ToEntero(), RegeneraIEPS:=True) Next CalculaTotalesVenta() Return True Else Return False End If End Function #End Region #Region " PEDIDOS2 - FACTURAR " Private Function PreparaFacturarPedido() As Boolean Dim FacturarPedidoActual = If(CveVenta > 0, True, False) 'LIMPIAMOS TmpDT.Rows.Clear() TxtSubTotal.Text = "0.00" TxtSubTotal2.Text = "0.00" TxtIVA.Text = "0.00" TxtIEPS.Text = "0.00" TxtRetIVA.Text = "0.00" TxtRetISR.Text = "0.00" TxtTotal.Text = "0.00" HdnIVAOriginal.Value = TxtIVA.Text CreaDTVentas() Dim ObjVentas As New ClsVentas If ObjVentas.GetVentasPedidos2Totales(CveCliente, CveVenta.ToString(), 1) Then DtPedidosPS = ObjVentas.DtResultados End If ObjVentas.Dispose() If Not AgregaPSPedido(FacturarPedidoActual) Then Alert("Ocurrió un error validar las partidas de los pedidos seleccionadas. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return False End If If TmpDT.Rows.Count = 0 Then Alert("No hay conceptos por facturar de este pedido o ha sido cambiada su información. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia) Return False End If TxtObsFact.Text = String.Format("Pedido: {0}-{1} {2}", LblSerie.Text, TxtFolio.Text, If(TxtObsFact.Text.Length > 0, $"({TxtObsFact.Text})", "")) Return True End Function #End Region #Region " BOTONERA - ACCIONES DE ABAJO " #Region " CREAR APARTIR DE " Protected Sub BtnCrearApartirDe_Click(sender As Object, e As System.EventArgs) Handles BtnCrearApartirDe.Click Dim FolioOriginal As String = TxtFolio.Text HdnCveVenta.Value = "" BtnCrearApartirDe.Visible = False '[IPP-2Novimebre2018] REEMPLAZA LO COMENTADO ARRIBA EsCreaApartirDe = True ModalidadEdicion = True UpEstatus.Visible = False TabAlmacen.Visible = False 'CUANDO ES CREAR APARTIR DE SE LIMPIAN FUNCIONALIDADES DE DOCUMENTOS YA REGISTRADOS BtnGenerarRemision.Visible = False BtnEditarRemision.Visible = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then LiCalcularPromociones.Visible = False End If BtnPermisoEditarRemision.Visible = False BtnPermisoEditarCotizacion.Visible = False BtnEditarCotizacion.Visible = False BtnGenerarOS.Visible = False BtnsFacturar.Visible = False LBFacturarAnticipo.Visible = UsuarioActual.TienePermisoProceso(274) HLOrdendeCompra.Visible = False LBAplicaDevolucion.Visible = False 'LkNotaCredito.Visible = False LkEliminarFactura.Visible = False ImgDownCancelacion.Visible = False LkRefacturacion.Visible = False HLOrdenServicio.Visible = False LkCotizacionAutorizar.Visible = False LnkFacturarRemision.Visible = False LnkRemisiones.Visible = False LnkPedido2SinFacturar.Visible = False LnkCotizaciones.Visible = False LnkOCs.Visible = False LbCancelarDocumento.Visible = False 'LBCancelarPedido.Visible = False LiDevolucionAlmacen.Visible = False HLPagar.Visible = False HlAgregarExcel.Visible = False HLCargaCotizaciones.Visible = False 'REINICIALIZA VALORES DE CANTIDAD FACTURADA - SOLO DEBEN MOSTRARSE AL CARGAR UNA REMISION/COTIZACIÓN GvPS.Columns(6).Visible = False ThCantidadFacturadaRem.Visible = False ThCantidadFacturadaRem2.Visible = False GvPS.Columns(7).Visible = False ThCantidadFacturada.Visible = False ThCantidadFacturada2.Visible = False 'Cuando es cotización, Genera nueva cotizacion If DdlTipoComprobante.SelectedValue = "Cot" Then BtnEmitirImprimir.Text = "Cotizar" ImgAntiPend.Visible = False 'TdReferencia.Style.Add("display", "none") End If HplDownXML.Visible = False HplDownPDF.Visible = False LblFolioFiscal.Text = "" DdlTipoComprobante.Enabled = True TxtFecha.Text = NowADS().ToShortDateString() LblUsuario.Text = UsuarioActual.Usuario LblFechaRegistro.Text = NowADS().ToShortDateString() LblSeTimbro.Text = "No" LblMail.Text = "No" 'PORLET CLIENTE 'ACTIVA CAMBIO DE CLIENTE HlCliente.Attributes.Remove("class") HlCliente.Attributes.Add("class", "Texto") TxtCodigo.ReadOnly = False ChkEnviarFactura.Enabled = True DdlSucursalCliente.Enabled = True ChkDireccionEnvio.Enabled = True DdlDireccionEnvio.Enabled = True LnkOtraDireccion.Visible = True TxtAtencionA.Enabled = True TxtDescripcionVenta.Enabled = True TxtFechaVencimientoCotizacion.Enabled = True TxtCantidad.Enabled = True DdlClasificacion.Enabled = True DdlPS.Enabled = True TxtObsPS.Enabled = True DdlProyecto.Enabled = True DdlSubProyecto.Enabled = True TxtPrecio.Enabled = True LbAgregar.Enabled = True ImgDescPU.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '0'; $get('LblPrecio1').style.display = ''; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = 'none'; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = ''; $get('BtnAplicarDescG').style.display = 'none'; $get('TrMotivoDescuento').style.display = '';") ImgDescConcepto.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '1'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = ''; $get('LblSubTotal1').style.display = 'none'; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = ''; $get('BtnAplicarDescG').style.display = 'none'; $get('TrMotivoDescuento').style.display = '';") ImgDescTotal.Visible = False ImgDescTotal.Attributes.Add("onclick", "javascript:$('#ModalDescuento').modal(); $get('LblTitulo1').style.display = ''; $get('LblTitulo2').style.display = 'none'; $get('LblTituloTipo1').style.display = ''; $get('LblTituloTipo2').style.display = 'none'; $get('HdnTipoDescuento').value = '2'; $get('LblPrecio1').style.display = 'none'; $get('LblTotalPS1').style.display = 'none'; $get('LblSubTotal1').style.display = ''; $get('LblAmort').style.display = 'none'; $get('BtnAplicarDescP').style.display = 'none'; $get('BtnAplicarDescG').style.display = ''; $get('TrMotivoDescuento').style.display = '';") TxtMotivoDescuento.Enabled = True LblSubTotal1.Text = TxtSubTotal.Text TxtObsFact.Enabled = True TxtMotivoDescuento.Enabled = True TxtSubTotal.ReadOnly = False TxtIVA.ReadOnly = False TxtRetIVA.ReadOnly = False TxtRetISR.ReadOnly = False TxtTotal.ReadOnly = False CalculaTotalesVenta() BtnEmitirImprimir.Visible = True GvImpuestosLocales2.Enabled = True 'Sección Detalle DdlMoneda.Enabled = True ChkConvertirDoctoPesos.Enabled = Not UsuarioActual.TienePermisoProceso(324) TxtTipoCambio.Enabled = True TxtFechaEjecucion.ReadOnly = False TxtFechaEjecucion.Text = NowADS().ToShortDateString ImgCalendarFechaEje.Enabled = True DdlVendedor.Enabled = True DdlSubProyectoDatos.Enabled = True DdlSubProyectoEjecucion.Enabled = True DdlSubProyectoCobranza.Enabled = True TxtTiempoEntrega.Enabled = True TxtAlfa1.ReadOnly = False TxtAlfa2.ReadOnly = False TxtAlfa3.ReadOnly = False TxtNum1.ReadOnly = False TxtNum2.ReadOnly = False TxtNum3.ReadOnly = False TxtFech1.ReadOnly = False : ImgFech1.Enabled = True TxtFech2.ReadOnly = False : ImgFech2.Enabled = True TxtFech3.ReadOnly = False : ImgFech3.Enabled = True 'Condiciones de Pago RBLPago.Enabled = True RBLPago.Items(0).Enabled = True DdlFormaPago33.Enabled = True DdlUsoCFDI.Enabled = True DdlMetodoPago33.Enabled = True 'TxtNumCtaPago.Enabled = True TxtFechaPago.ReadOnly = False imgCalendario.Enabled = True TxtPedidoContrato.Enabled = True TxtOrdenCompra.Enabled = True Dim ObjCliente As New ClsClientes() If ObjCliente.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, TipoCliente:=-1) Then If ObjCliente.DtResultados.Rows.Count > 0 Then PlazoCobranza = ObjCliente.PlazoCobranza PlazoCobranzaRemision = ObjCliente.PlazoCobranzaRemision 'TxtNumCtaPago.Text = ObjCliente.NumCtaPago TxtFechaPago.Text = If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza)).ToShortDateString DdlTipoRetencion.SelectedValueExist(ObjCliente.DtResultados(0)("CveTipoRetencion").ToString()) End If End If ObjCliente.Dispose() DdlTipoRetencion_SelectedIndexChanged(DdlTipoRetencion, EventArgs.Empty) TrVistaPrevia.Visible = True TxtFechaVencimientoCotizacion.Text = NowADS().ToShortDateString DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) 'HABILITA EDITAR Y ELIMINAR DEL GV GvPS.Columns(18).Visible = True GvPS.Columns(19).Visible = True SetPermisos() CambiaTipoDocto() CambiaSucursalGeneral(RecargarPartidas:=False) CargaAnticipos(CveCliente) CargaRestriccionesCreditoCliente(True, CveVenta:=-1) If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then TabAlmacen.Visible = True DivAlmacen.Visible = True CargaGVInv(TmpDT.FiltraParametros("CveTipoPS = 2")) End If BloqueaCondicionesPago() DivDdlFacturaRela.Visible = True BtnAgregarFacturasRelaciondas.Visible = True DdlTipoRelacionARelacionar.Enabled = True GvFacturasRelacionadas.Columns(2).Visible = True CalculaTotalesVenta() Dim PorcentajeRetIVA = (TmpDT.MAX("PorcentajeRetIVA").ToDecimal() * 100) If PorcentajeRetIVA > 0 Then TrRetIVA.Style.Add("display", "") UsuarioActual.Empresa.MostrarRetIVA = True DdlTipoRetencion.Visible = True End If If DivCartaPorte.Visible Then HabilitarControlesCartaPorte(True) End If Dim FolioNuevo As String = TxtFolio.Text If FolioNuevo <> FolioOriginal Then If Adjunto <> "" Then Adjunto = "" BtnArchivoAdjunto.Text = "" BtnArchivoAdjunto.Visible = False BtnEliminarAdjunto.Visible = False BtnAdjuntar.Visible = True End If End If 'REMOVER EVENTO PARA RECARGAR ALMACEN 'spanAlmacen.Attributes.Remove("onclick") If UsuarioActual.CveEmpresa.Contiene(7, 122) Then TxtCantidad.Width = New Unit("100%") DivNumTurnos.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(360) = "1" Then CargaListasPrecios() End If 'BloqueaCondicionesPago() BtnEditar.Visible = False BtnEmitir.Visible = False BtnPermisoEditarCotizacion.Visible = False BtnEditarCotizacion.Visible = False BtnPermisoEditarRemision.Visible = False BtnEditarRemision.Visible = False BtnGenerarRemision.Visible = False BtnGeneraAutorizacion.Visible = False HdnCargarInventario.Value = "False" UpParametros.Update() UpnTools.Update() UpCliente.Update() UpParametros.Update() UpPS.Update() UpFacturar.Update() UPObservaciones.Update() UPPDescuento.Update() UPCondicionesPago.Update() UpDetalle.Update() UpEstatus.Update() UpParametros.Update() UpINV.Update() UpFacturasRelacionadas.Update() UpEmitirTransitorio.Update() End Sub #End Region #Region " GENERAR FACTURA " Protected Sub LBFacturarIngreso_Click(sender As Object, e As EventArgs) EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) 'DdlTipoComprobante.SelectedValue = "Ing" EmitirDocumentoNuevo("Ing") End Sub Protected Sub LBFacturarAnticipo_Click(sender As Object, e As EventArgs) EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) 'DdlTipoComprobante.SelectedValue = "Ant" EmitirDocumentoNuevo("Ant") End Sub #End Region #Region " GENERAR REMISION " Private Sub BtnGenerarRemision_Click(sender As Object, e As EventArgs) Handles BtnGenerarRemision.Click If DdlTipoComprobante.SelectedValue.Contiene("Cot", "PA", "Ped") Then 'CUANDO ES COTIZACION O PEDIDOA O PEDIDO2 SE HARA REMISION EraCotizacion = If(DdlTipoComprobante.SelectedValue = "Cot", 1, 0) 'DdlTipoComprobante.SelectedValue = "Rem" EmitirDocumentoNuevo("Rem") End If End Sub #End Region #Region "GENERAR AUTORIZACIÓN" Protected Sub BtnGeneraAutorizacion_Click(sender As Object, e As EventArgs) If DdlTipoComprobante.SelectedValue.Contiene("Ped") Then EmitirDocumentoNuevo("PA") End If End Sub #End Region #Region " EMITIR DOCUMENTO NUEVO " Private Function ValidaFacturarCotizacion() As Boolean Dim Retorno As Boolean = True If UsuarioActual.Empresa.Funcionalidad(558) = "1" Then Dim Total As Decimal = TxtTotal.Text.ToDecimal() Dim AmortizacionNC As Decimal = 0 Dim TienePagos As Boolean = ((Not (DtPagos Is Nothing OrElse DtPagos.Rows.Count = 0)) AndAlso (DtPagos IsNot Nothing AndAlso DtPagos.Rows.Count > 0)) OrElse AmortizacionNC > 0 'SI ES AMORTIZACION POR NOTA DE CREDITO DEBE SUMAR LA TOTALIDAD PARA COMPARAR EL PAGO If DdlTipoAmortizacionAnticipo.SelectedValue = "2" Then For Each gvr As GridViewRow In GVAnticipos.Rows If gvr.FCCheckBox("Chk" & gvr.RowIndex) IsNot Nothing AndAlso gvr.FCCheckBox("Chk" & gvr.RowIndex).Checked AndAlso gvr.DataKey("CveConceptoContable").ToEntero().Contiene(3) Then AmortizacionNC += gvr.FCTextBox(String.Format("TxtAnticipo{0}", gvr.RowIndex)).Text.ToDecimal End If Next End If If Not PermiteCredito AndAlso Not TienePagos AndAlso Total > 0 Then Alert("Es necesario especificar un pago.", TipoMensaje.MsgAdvertencia) Retorno = False Return Retorno End If If Not PermiteCredito AndAlso TienePagos AndAlso Total > 0 Then Dim TotalPago As Decimal = DtPagos.SUM("Importe") + AmortizacionNC If TotalPago < Total Then Alert("La suma de los pagos debe ser igual al total de la venta.", TipoMensaje.MsgAdvertencia) Retorno = False Return Retorno End If End If End If Return Retorno End Function Private Sub EmitirDocumentoNuevo(TipoDoctoNuevo As String) If DdlVendedor.SelectedValue.ToEntero() <= 0 AndAlso UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso TipoDoctoNuevo = "Ing" Then Alert("Debe seleccionar un vendedor.", TipoMensaje.MsgAdvertencia) Exit Sub End If If (FacturarSucursal AndAlso DdlSucursalCliente.SelectedValue.ToEntero() > 0 AndAlso (Me.ClienteSucursal IsNot Nothing AndAlso String.IsNullOrEmpty(Me.ClienteSucursal.RFC))) Then Alert("La sucursal no tiene asignada un RFC.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim TieneSoloServicios As Boolean = TmpDT.MAX("CveTipoPS") = "1" 'SI ES REMISION Y TIENE PRODUCTOS, DEBE VERIFICAR EL ALMACEN If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso Not TieneSoloServicios AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso TipoDoctoNuevo = "Ing" AndAlso Not TmpDT.MAX("CveTipoPS") = "1" Then Dim SaldoAlmacenExA As Decimal = 0 'Dim SaldoAlmacenUsados As Decimal = 0 Using ObjInventarios As New ClsInventarios 'VERIFICA SI HACE FALTA DEVOLVER PRODUCTOS Y USADOS EN ESPECIFICO If ObjInventarios.GetSaldoVentaDetalleAlmacen(CveVenta, UsuarioActual.CveEmpresa) Then SaldoAlmacenExA = ObjInventarios.DtResultados.SUMD("SaldoAlmacen", $"CveTipoAlmacen = 10") 'SaldoAlmacenUsados = ObjInventarios.DtResultados.SUMD("SaldoAlmacen", $"CveTipoAlmacen = 22") End If End Using 'Si ya se surtió y recibió If SaldoAlmacenExA <= 0 Then BtnsFacturar.Visible = False Alert("No se puede facturar hasta que se haya surtido la remisión", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso DdlTipoComprobante.SelectedValue = "Rem" AndAlso TipoDoctoNuevo = "Ing" Then SeEstaFActurandoVentaMedica = True End If If GvPagos.Rows.Count = 0 And UsuarioActual.Empresa.Funcionalidad(558).ToEntero() = 1 And RBLPago.SelectedValue.ToEntero() = 2 Then Alert("No se puede facturar hasta que se haya especificado detalladamente la forma de pago", TipoMensaje.MsgAdvertencia) Else Dim FolioFijo As Integer = 0 'CARGA LO PENDIENTE POR FACTURAR DE COTIZACION If EraCotizacion = 1 Then If Not ValidaFacturarCotizacion() Then Exit Sub End If If Not PreparaFacturarCotizacion() Then EraCotizacion = 0 DdlTipoComprobante.SelectedValue = "Cot" Exit Sub End If 'If Not AjustarTotalCotizacionFacturada(Me.CveVenta) Then ' Alert("Ocurrió un error al ajustar el importe", TipoMensaje.MsgError) ' Exit Sub 'End If End If 'CARGA LO PENDIENTE POR FACTURAR DE REMISION If DdlTipoComprobante.SelectedValue = "Rem" Then If Not PreparaFacturarRemision() Then DdlTipoComprobante.SelectedValue = "Rem" Exit Sub End If End If 'CARGA LO PENDIENTE POR FACTURAR DE PEDIDO2 If DdlTipoComprobante.SelectedValue = "Ped" Then If Not PreparaFacturarPedido() Then DdlTipoComprobante.SelectedValue = "Ped" Exit Sub End If End If 'CARGA LO PENDIENTE POR FACTURAR DE PEDIDO AUTORIZACION If DdlTipoComprobante.SelectedValue = "PA" Then ' que tome el folio fijo de la autorización FolioFijo = TxtFolio.Text.ToEntero() ViewState("FolioActual") = FolioFijo ViewState("EstablecioFolio") = True TxtFolio.Text = FolioFijo.ToString() End If If EstablecioFolio AndAlso UsuarioActual.CveEmpresa = 140 Then ' CÓDIGO TEMPORAL 2022/01/17 FolioFijo = TxtFolio.Text.ToEntero() ViewState("FolioActual") = FolioFijo End If Dim TipoDoctoViejo As String = DdlTipoComprobante.SelectedValue If TipoDoctoViejo = "PA" AndAlso TipoDoctoNuevo.Contiene("Rem") Then If DdlTipoComprobante.Items.FindByValue("Rem") Is Nothing Then DdlTipoComprobante.Items.Add(New ListItem("Remisión", "Rem")) End If End If DdlTipoComprobante.SelectedValue = TipoDoctoNuevo If Not (EstablecioFolio AndAlso UsuarioActual.TienePermisoProceso(130)) Then TxtFecha.Text = NowADS().ToString() End If 'SI TIENE LINEA ADICIONAL, NO DEBE MODIFICAR LA FECHA YA ASIGNADA If DdlLineaAdicional.SelectedValue.ToEntero() <= 0 Then TxtFechaPago.Text = If(TipoDoctoViejo = "Rem" AndAlso EsDiasCreditoFijo, NowADS().AddDays(DiasCredito), If(DdlTipoComprobante.SelectedValue = "Rem", NowADS().AddDays(PlazoCobranzaRemision), NowADS().AddDays(PlazoCobranza))).ToShortDateString End If TxtFechaEjecucion.Text = NowADS().ToString() DdlLineaAdicional_SelectedIndexChanged(DdlLineaAdicional, EventArgs.Empty) 'VALIDAR QUE NO SE HAYA REMISIONADO If TipoDoctoViejo = "PA" Then Dim RowVenta As DataRow = Nothing Dim ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then RowVenta = ObjVentas.DtResultados.Rows(0) End If ObjVentas.Dispose() If RowVenta IsNot Nothing Then Dim CveEstatusAutorizacion As Integer = RowVenta("CveEstatusFactura").ToString().ToEntero() 'SI LA AUTORIZACION ESTA REMISIONADA NO DEBE REMISIONAR DE NUEVO If CveEstatusAutorizacion = 18 Then Alert("La autorización ya está remisionada") Exit Sub End If Else Alert("No se encontró información de la autorización") Exit Sub End If End If If FolioFijo = 0 Then CargaFolios(FacturarDocumentoNuevo:=True) 'RECARGA FOLIOS CON EL NUEVO TIPO DOCTO EmitirImprimir(TipoDoctoViejo) 'MANDA A EMITIR - PROCESO VIEJO End If End Sub #End Region #End Region #Region "ACTUALIZAR FECHA DE VENCIMIENTO" Protected Sub LnkUpdateFechaVencimiento_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas Dim ObjEventos As New ClsOIEventos(ObjVentas.IniciaTransacSQL()) Dim ErrorTrans As Boolean = False Dim FechaVencimientoAnterior As String = "" If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then FechaVencimientoAnterior = ObjVentas.DtResultados.Rows(0)("FechaVencimiento").ToString().ToDate.ToShortDateString Else ErrorTrans = True End If End If If FechaVencimientoAnterior = TxtFechaPago.Text Then Alert("La fecha de pago seleccionada es igual que la anterior.", TipoMensaje.MsgAdvertencia) ObjVentas.RollBack() ObjVentas.Dispose() ObjEventos.Dispose() Exit Sub End If If Not ObjVentas.UpdateFechaVencimientoVenta(CveVenta, TxtFechaPago.Text.ToDate, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then ErrorTrans = True End If If Not ObjEventos.AddEventoBitacora($"Se actualizó la fecha de pago. Anterior:{FechaVencimientoAnterior} Actual:{TxtFechaPago.Text}.", "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=CveVenta) Then ErrorTrans = True End If If Not ErrorTrans Then ObjVentas.Commit() Alert("Fecha de pago actualizada correctamente.") Else ObjVentas.RollBack() End If ObjVentas.Dispose() ObjEventos.Dispose() End Sub #End Region Private Sub BtnRefrescarPagina_Click(sender As Object, e As EventArgs) Handles BtnRefrescarPagina.Click Response.Redirect($"~/Ventas/Ventas.aspx?CveVenta={Me.CveVenta}") End Sub Private Sub BtnCargarPSAdicionales_Click(sender As Object, e As EventArgs) Handles BtnCargarPSAdicionales.Click Dim CvePS = HdnCvePSComparar.Value.ToEntero() If CvePS > 0 Then Dim DtPSAdicionales As DataTable = Nothing Dim ObjProductosServicios As New ClsProductosServicios() If ObjProductosServicios.GetPSAdicionales(CvePS, UsuarioActual.CveEmpresa) Then DtPSAdicionales = ObjProductosServicios.DtResultados.FiltraParametros($"Tipo={HdnTipoPSComparar.Value}") End If ObjProductosServicios.Dispose() If DtPSAdicionales IsNot Nothing Then DtPSAdicionales.Columns.Add(New DataColumn("Precio", GetType(String))) For Each Row As DataRow In DtPSAdicionales.Rows Dim DrPSAdicional As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=Row("CvePSAdicional").ToString().ToEntero()).FiltroPrimero("") If DrPSAdicional IsNot Nothing Then 'SUGIERE PRECIO Dim PrecioSugerido As Decimal = 0 Dim tPrecioSugerido As Decimal = 0 tPrecioSugerido = DrPSAdicional("Precio").ToString().ToDecimal Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(Row("CvePSAdicional").ToString().ToEntero(), DrPSAdicional("CveClasificacion").ToString().ToEntero()) PrecioSugerido = ObjPrecioSugerido.PrecioSugerido If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido Row("Precio") = PrecioSugerido.ToString("#,##0.####") ' que muestre hasta los 4 digitos si lo requiere End If Next End If GvPSAdicionales.DataSource = DtPSAdicionales Dim DrPSPadre = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPSPadre IsNot Nothing Then If HdnTipoPSComparar.Value = "1" Then LtlNombreModalPS.Text = $"Productos y/o servicios adicionales. PS:{DrPSPadre("CodigoPS")}" ElseIf HdnTipoPSComparar.Value = "2" Then LtlNombreModalPS.Text = $"Productos y/o servicios similares PS:{DrPSPadre("CodigoPS")}" End If End If GvPSAdicionales.DataBind() UpSimilares.Update() RegistraScript("$('#DivSimilares').modal({backdrop: 'static', keyboard: false });") End If End Sub Private Sub BtnAgregarPSSimilar_Click(sender As Object, e As EventArgs) Handles BtnAgregarPSSimilar.Click If HdnTipoPSComparar.Value.ToEntero() > 0 Then If GvPSAdicionales.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("chkPSAdicional").Checked) <= 0 Then Alert($"Debe seleccionar al menos 1 producto", TipoMensaje.MsgAdvertencia) Exit Sub End If 'VALIDA For Each Row As GridViewRow In GvPSAdicionales.Rows If Row.RowType = DataControlRowType.DataRow Then If Row.FCCheckBox("chkPSAdicional").Checked Then If Row.FCTextBox("TxtCantidad").Text.ToDecimal() <= 0.00 Then Alert($"La cantidad del producto y/o servicio {Row.DataKey("CodigoPS")} debe ser mayor a 0", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If Next 'AGREGA For Each Row As GridViewRow In GvPSAdicionales.Rows If Row.RowType = DataControlRowType.DataRow Then If Row.FCCheckBox("chkPSAdicional").Checked Then 'LIMPIAR LAS VARIABLES TxtCantidad.Text = "" TxtPrecio.Text = "" LtlHeaderCosto.Text = "" HdnPS.Value = "-1" DdlPS.SelectedValue = "-1" DdlPS.SelectedText = "-" Dim CvePS As Integer = Row.DataKey("CvePSAdicional").ToEntero() HdnPS.Value = CvePS.ToString() DdlPS.SelectedValue = CvePS.ToString() DdlPS.SelectedText = Row.DataKey("CodigoPS") TxtCantidad.Text = Row.FCTextBox("TxtCantidad").Text TxtPrecio.Text = Row.DataKey("Precio") Dim DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS IsNot Nothing Then DdlUnidadMedida.SelectedValueExistInsert(DrPS("CveUnidadMedida").ToString(), DrPS("UnidadMedida").ToString()) DdlPSIndexChange(DdlPS.SelectedValue.ToEntero(), DdlPS) AgregarPS() End If End If End If Next End If HdnTipoPSComparar.Value = "-1" HdnCvePSComparar.Value = "-1" TxtCantidad.Text = "" TxtPrecio.Text = "" LtlHeaderCosto.Text = "" HdnPS.Value = "-1" DdlPS.SelectedValue = "-1" DdlPS.SelectedText = "-" RegistraScript("$('#DivSimilares').modal('hide');abrirDdlPS();", "A2") End Sub #Region "U S A D O S" Private Sub CalculaUsados(Optional DtUsadosDevolucion As DataTable = Nothing) If DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Cot", "Dev", "PA") Then If ViewState("CargoUsado").ToString() = "False" Then Exit Sub End If Dim DTTamanios As DataTable = ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa) Dim DTCvePSCostos As DataTable DTCvePSCostos = DTTamanios.FiltraParametros("", "", {"CvePSCargo"}) If Not TmpDT.Columns.Contains("Eliminar") Then TmpDT.Columns.Add("Eliminar", GetType(Integer)) End If Dim TmpDTCalculo As DataRow() = Nothing 'SI ES VENTA NUEVA O SI VA SER DEVOLUCION CONSIDERAR TODOS If Me.CveVenta <= 0 OrElse DtUsadosDevolucion IsNot Nothing Then TmpDTCalculo = TmpDT.Rows.Cast(Of DataRow).ToArray() 'SI ES EDICION DE REMISION SOLO CONSIDERAR LOS PRODUCTOS NUEVOS ElseIf Me.CveVenta > 0 AndAlso DtUsadosDevolucion Is Nothing AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Cot") Then TmpDTCalculo = TmpDT.Select("CveVentaDetalle IS NULL OR CveVentaDetalle <=0") End If For Each drow As DataRow In TmpDTCalculo If DTCvePSCostos IsNot Nothing Then For Each drow2 As DataRow In DTCvePSCostos.Rows If drow("CvePS").ToString().ToEntero() = drow2("CvePSCargo").ToString().ToEntero() Then drow("Eliminar") = 1 Exit For End If Next End If Next Dim TmpDTView As New DataView(TmpDT) TmpDTView.RowFilter = "Eliminar = 1" For Each dRowEliminar As DataRowView In TmpDTView dRowEliminar.Delete() Next TmpDT.AcceptChanges() 'SI ES VENTA NUEVA O SI VA SER DEVOLUCION CONSIDERAR TODOS If Me.CveVenta <= 0 OrElse DtUsadosDevolucion IsNot Nothing Then TmpDTCalculo = TmpDT.Rows.Cast(Of DataRow).ToArray() 'SI ES EDICION DE REMISION SOLO CONSIDERAR LOS PRODUCTOS NUEVOS ElseIf Me.CveVenta > 0 AndAlso DtUsadosDevolucion Is Nothing AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem", "Cot") Then TmpDTCalculo = TmpDT.Select("CveVentaDetalle IS NULL OR CveVentaDetalle <=0") End If Dim CveUnidadMedidaPSA As Integer = -1 Dim UnidadMedidaPSA As String = "Unidad" Dim CveClasificacionPSA As Integer = -1 Dim ClasificacionPSA As String = "" Dim CveSubProyectoPSA As Integer = -1 Dim SubProyectoPSA As String = "" Dim PSPSA As String = "" Dim DTPSTemp As New DataTable '= TmpDT.Clone DTPSTemp.Columns.Add("Cantidad", GetType(Integer)) DTPSTemp.Columns.Add("CveUnidadMedida", GetType(Integer)) DTPSTemp.Columns.Add("UnidadMedida", GetType(String)) DTPSTemp.Columns.Add("CveClasificacion", GetType(Integer)) DTPSTemp.Columns.Add("Clasificacion", GetType(String)) DTPSTemp.Columns.Add("CvePS", GetType(Integer)) DTPSTemp.Columns.Add("PS", GetType(String)) DTPSTemp.Columns.Add("PU", GetType(Decimal)) DTPSTemp.Columns.Add("CveSubProyecto", GetType(Integer)) DTPSTemp.Columns.Add("SubProyecto", GetType(String)) For Each DrowPartidas As DataRow In TmpDTCalculo Dim CveTamanioTemp As Integer = DrowPartidas("CveTamaño").ToString().ToEntero() If CveTamanioTemp > 0 Then Dim DTTamanioTemp As New DataTable Dim CvePsTemp As Integer = DTTamanios.FiltraParametros($"CveTamaño = { CveTamanioTemp } ").Rows(0)("CvePSCargo").ToString().ToEntero() CveSubProyectoPSA = DrowPartidas("CveSubProyecto").ToString().ToEntero() SubProyectoPSA = DrowPartidas("SubProyecto").ToString() Dim ObjProductosServicios As New ClsProductosServicios() If ObjProductosServicios.GetPS(CvePsTemp, -1, UsuarioActual.CveEmpresa) Then CveUnidadMedidaPSA = ObjProductosServicios.CveUnidadMedida CveClasificacionPSA = ObjProductosServicios.CveClasificacion ClasificacionPSA = ObjProductosServicios.Clasificacion UnidadMedidaPSA = ObjProductosServicios.DtResultados.FiltroPrimeroValor("UnidadMedida") PSPSA = ObjProductosServicios.PS End If ObjProductosServicios.Dispose() Dim Cargo As Decimal = DTTamanios.FiltroPrimeroValor("Cargo", $" CveTamaño = { CveTamanioTemp }").ToDecimal If DtUsadosDevolucion IsNot Nothing Then Cargo = DtUsadosDevolucion.FiltroPrimeroValor("PU", $"CvePS = {CvePsTemp}").ToString().ToDecimal() End If If DTPSTemp.FiltraParametros($"CvePs = { CvePsTemp }").Rows.Count > 0 Then For Each dRowUpdate As DataRow In DTPSTemp.Rows If (dRowUpdate("CvePS").ToString().ToEntero() = CvePsTemp) Then dRowUpdate("Cantidad") = dRowUpdate("Cantidad").ToString().ToDecimal + DrowPartidas("Cantidad").ToString().ToDecimal dRowUpdate("PU") = Cargo ' dRowUpdate("Total").ToString().ToDecimal + ImporteCargo End If Next DTPSTemp.AcceptChanges() Else Dim dRowNuevo As DataRow = DTPSTemp.NewRow dRowNuevo("Cantidad") = DrowPartidas("Cantidad").ToString().ToDecimal dRowNuevo("PU") = Cargo dRowNuevo("CveUnidadMedida") = CveUnidadMedidaPSA dRowNuevo("UnidadMedida") = UnidadMedidaPSA dRowNuevo("CveClasificacion") = CveClasificacionPSA dRowNuevo("Clasificacion") = ClasificacionPSA dRowNuevo("CvePS") = CvePsTemp dRowNuevo("PS") = PSPSA dRowNuevo("CveSubProyecto") = DrowPartidas("CveSubProyecto").ToString().ToEntero() dRowNuevo("SubProyecto") = DrowPartidas("SubProyecto").ToString() DTPSTemp.Rows.Add(dRowNuevo) DTPSTemp.AcceptChanges() End If End If Next If DTPSTemp IsNot Nothing AndAlso DTPSTemp.Rows.Count > 0 Then DTPSTemp = DTPSTemp.Select().OrderBy(Function(row) row("PU")).CopyToDataTable() End If For Each drowPsTamaños As DataRow In DTPSTemp.Rows Modalidad = "A" If drowPsTamaños("PU").ToString().ToDecimal > 0 Then Dim CveVentaDetalleDevolucion As Integer = -1 If DtUsadosDevolucion IsNot Nothing AndAlso DtUsadosDevolucion.Rows.Count > 0 Then CveVentaDetalleDevolucion = DtUsadosDevolucion.FiltroPrimeroValor("CveVentaDetalle", $"CvePS = {drowPsTamaños("CvePS").ToString().ToEntero()}").ToEntero() End If AgregarProductoServicio(drowPsTamaños("Cantidad").ToString().ToEntero(), drowPsTamaños("CveUnidadMedida").ToString().ToEntero(), drowPsTamaños("UnidadMedida").ToString(), drowPsTamaños("CveClasificacion").ToString().ToEntero(), drowPsTamaños("Clasificacion").ToString(), drowPsTamaños("CvePS").ToString().ToEntero(), drowPsTamaños("PS").ToString(), "", drowPsTamaños("PU").ToString().ToDecimal, 0, -1, "", drowPsTamaños("CveSubProyecto").ToString().ToEntero(), drowPsTamaños("SubProyecto").ToString(), CveVentaDetalle:=CveVentaDetalleDevolucion, EsCargo:=True) End If Next End If End Sub Private Function GuardarUsados(CveConcepto As Integer, SqlTransaccion As SqlClient.SqlTransaction, factura As Modelos.Factura, ObjAcum As ClsAcumuladores) As Boolean Dim Resultado As Boolean = True If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then If ClienteEsDistribuidor AndAlso Not factura.EsGarantia Then For Each drow As DataRow In factura.DtDetalle.Rows If drow("CveTamaño").ToString.ToEntero > 0 Then Dim DrTamanio As DataRow = ClsPaginas.GlobalDTAcumTamaños(UsuarioActual.CveEmpresa).FiltroPrimero($"CveTamaño={drow("CveTamaño").ToString.ToEntero}") If DrTamanio IsNot Nothing Then Dim Cargo As Decimal = DrTamanio("Cargo").ToString().ToDecimal() * drow("Cantidad").ToString.ToDecimal() Dim Bonificacion As Decimal = DrTamanio("Bonificacion").ToString().ToDecimal() * drow("Cantidad").ToString.ToDecimal() Dim Puntos As Decimal = DrTamanio("Puntos").ToString().ToDecimal() * drow("Cantidad").ToString.ToDecimal() If drow("CveTamaño").ToString.ToEntero > 0 Then If Not ObjAcum.DistribuidorMovtosAdd(factura.CveCliente, drow("Cantidad").ToString.ToDecimal, drow("CveTamaño").ToString.ToEntero, Puntos, Cargo, Bonificacion, CveConcepto, factura.CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0D, "", NowADS()) Then Resultado = False Exit For End If End If Else Resultado = False Exit For End If End If Next End If End If Return Resultado End Function #End Region #Region "PORCENTAJE IVA" Protected Sub DdlIVA_SelectedIndexChanged(sender As Object, e As EventArgs) If Not CveVenta > 0 Or EsCreaApartirDe Or CveDevolucion > 0 Then RecalculaIVA() If ModalidadEdicion AndAlso DdlTipoComprobante.SelectedValue = "Cot" Then RecalculaIVA() End If End Sub Private Sub RecalculaIVA() PorcentajeIVA = Math.Round(DdlIVA.SelectedValue.ToDouble - 1, 2).ToDecimal For Each Row As DataRow In TmpDT.Rows If PorcentajeIVA > 0 Then Dim DrPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=Row("CvePS").ToString().ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then If DrPS("IVA").ToString().Contiene("-1", "") Then Row("PorcentajeIVA") = PorcentajeIVA Else Row("PorcentajeIVA") = DrPS("IVA") End If Dim PU As Decimal = Row("PU").ToString().ToDecimal().RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos Dim TotalCalculableImpuestos As Decimal = (Row("Cantidad").ToString().ToDecimal * PU) - Row("Descuento").ToString().ToDecimal Dim TotalCalculableImpuestosIVA As Decimal = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) Row("IVA") = Row("PorcentajeIVA").ToString().ToDouble Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDouble * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) End If Else Row("IVA") = 0 Row("PorcentajeIVA") = 0 Row("ImporteIVA") = 0 End If Next CalculaTotalesVenta() End Sub #End Region #Region "D E S C U E N T O S X R E M I S I O N D E N O T A D E C R E D I T O" Protected Sub BtnAplicarRemisionNC_Click(sender As Object, e As EventArgs) Me.AplicaRNCXDetalle = False Me.AplicaRNCBonificacionXDetalle = False If ListaRemisionesNC Is Nothing Then ListaRemisionesNC = New List(Of Modelos.Factura) Else ListaRemisionesNC.Clear() End If If ListaNCBonificacion Is Nothing Then ListaNCBonificacion = New List(Of Modelos.Factura) Else ListaNCBonificacion.Clear() End If Dim TotalRemNCAplicado As Decimal = 0 Dim ArrayNC As String() = UsuarioActual.Empresa.Funcionalidad(591).Split(",".ToCharArray()) Dim NCConcepto As Integer = -1 Select Case RblRNCTipo.SelectedValue Case "1" 'CARGOS NCConcepto = ArrayNC(3).ToEntero() If DivTipoVentaAsingado.Visible Then LblTipoVentaAsignado.Text = "CU - CANCELACION DE USADO " End If Case "2" 'BONIFICACIONES NCConcepto = ArrayNC(4).ToEntero() If DivTipoVentaAsingado.Visible Then LblTipoVentaAsignado.Text = "BU - BONIFICACION DE USADO" End If Case "3" 'AJUSTE/GARANTIAS NCConcepto = ArrayNC(1).ToEntero() If DivTipoVentaAsingado.Visible Then LblTipoVentaAsignado.Text = "GA - GARANTIAS Y AJUSTES" End If End Select 'CARGOS/AJUSTES POR GARANTIA POR PRODUCTO If RblRNCTipo.SelectedValue.Contiene("1", "3") AndAlso ChkMostarProductosRNC.Checked Then Dim TotalAcumulado As Decimal = 0 Me.AplicaRNCXDetalle = True For Each GvRow As GridViewRow In GvRemisionesNCDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim Rows As DataRow() = TmpDTRNCDetalle.Select($"CveVentaDetalleRNC = {GvRow.DataKey("CveVentaDetalleRNC").ToEntero()}") For Each row As DataRow In Rows row("Cantidad") = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() TmpDTRNCDetalleSelecciondas.Rows.Add(row.ItemArray) Next End If End If Next Dim TerminarCiclo As Boolean = False For Each Dr As DataRow In TmpDTRNCDetalleSelecciondas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows Dim RemNC As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim TotalRNC As Decimal = 0 For Each GvRow As GridViewRow In GvRemisionesNCDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked AndAlso GvRow.DataKey("CveVenta").ToEntero() = Dr("CveVenta").ToString().ToEntero() Then Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() Dim PU As Decimal = GvRow.DataKey("PU").ToDecimal() Dim PorcentajeIVA As Decimal = GvRow.DataKey("PorcentajeIVA").ToDecimal() Dim TotalCalculableImpuestos As Decimal = (Cantidad * PU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * PorcentajeIVA).RoundSQL(2) Dim TotalRNCDetalle As Decimal = (TotalCalculableImpuestos + ImporteIVA) TotalRNC += TotalRNCDetalle End If End If Next TotalAcumulado += TotalRNC 'SI SE EXECE RESTA AL ULTIMO If TotalAcumulado > LtlSMU.Text.ToDecimal() Then TerminarCiclo = True TotalAcumulado -= TotalRNC TotalRNC = LtlSMU.Text.ToDecimal() - TotalAcumulado End If RemNC.TotalRemNCAplicado = TotalRNC 'MARCA LA VENTA QUE FUE USADA PARA EL FILTRO RemNC.Num3 = DdlVentaUsado.SelectedValue.ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaRemisionesNC.Clear() Exit Sub End If ListaRemisionesNC.Add(RemNC) If TerminarCiclo Then Exit For End If Next 'CARGOS/AJUSTES POR GARANTIA POR TOTAL ElseIf RblRNCTipo.SelectedValue.Contiene("1", "3") AndAlso Not ChkMostarProductosRNC.Checked Then For Each GvRow As GridViewRow In GvRemisionesNC.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() 'MARCA LA VENTA QUE FUE USADA PARA EL FILTRO RemNC.Num3 = DdlVentaUsado.SelectedValue.ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaRemisionesNC.Clear() Exit Sub End If ListaRemisionesNC.Add(RemNC) End If End If Next 'SI TIENE ALGUN AJUSTE O GARANTIA If ListaRemisionesNC.Any(Function(RNC) RNC.Num2 = 1) Then For Each RNC As Modelos.Factura In ListaRemisionesNC.Where(Function(x) x.Num2 = 1) Dim Salir As Boolean = False Using ObjAcum As New ClsAcumuladores If ObjAcum.GetGarantiasDetalle(RNC.CveVenta) Then 'SI ES GARANTIA TOTAL If ObjAcum.DtResultados.MAX("PorcentajeAjuste") = "1" Then If ArrayNC.Length > 2 Then NCConcepto = ArrayNC(2).ToEntero() End If Salir = True Else If ArrayNC.Length > 2 Then NCConcepto = ArrayNC(1).ToEntero() End If End If End If End Using If Salir Then Exit For End If Next Else DdlNCPS.Enabled = True End If 'BONIFICACIONES POR PRODUCTO ElseIf RblRNCTipo.SelectedValue.Contiene("2") AndAlso ChkMostarProductosRNCBon.Checked Then Dim TotalAcumulado As Decimal = 0 Me.AplicaRNCXDetalle = True For Each GvRow As GridViewRow In GvRemisionesNCBonDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim Rows As DataRow() = TmpDTRNCDetalle.Select($"CveVentaDetalleRNC = {GvRow.DataKey("CveVentaDetalleRNC").ToEntero()}") For Each row As DataRow In Rows row("Cantidad") = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() TmpDTRNCDetalleSelecciondas.Rows.Add(row.ItemArray) Next End If End If Next Dim TerminarCiclo As Boolean = False For Each Dr As DataRow In TmpDTRNCDetalleSelecciondas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows Dim RemNC As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim TotalRNC As Decimal = 0 For Each GvRow As GridViewRow In GvRemisionesNCBonDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked AndAlso GvRow.DataKey("CveVenta").ToEntero() = Dr("CveVenta").ToString().ToEntero() Then Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() Dim PU As Decimal = GvRow.DataKey("PU").ToDecimal() Dim PorcentajeIVA As Decimal = GvRow.DataKey("PorcentajeIVA").ToDecimal() Dim TotalCalculableImpuestos As Decimal = (Cantidad * PU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * PorcentajeIVA).RoundSQL(2) Dim TotalRNCDetalle As Decimal = (TotalCalculableImpuestos + ImporteIVA) TotalRNC += TotalRNCDetalle End If End If Next TotalAcumulado += TotalRNC 'SI SE EXECE RESTA AL ULTIMO If TotalAcumulado > LtlSMUBon.Text.ToDecimal() Then TerminarCiclo = True TotalAcumulado -= TotalRNC TotalRNC = LtlSMUBon.Text.ToDecimal() - TotalAcumulado End If RemNC.TotalRemNCAplicado = TotalRNC 'MARCA LA VENTA QUE FUE USADA PARA EL FILTRO RemNC.Num3 = DdlVentaUsado.SelectedValue.ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaRemisionesNC.Clear() Exit Sub End If ListaRemisionesNC.Add(RemNC) BtnAplicarNC.Enabled = True If TerminarCiclo Then Exit For End If Next 'BONIFICACIONES POR TOTAL ElseIf RblRNCTipo.SelectedValue.Contiene("2") AndAlso Not ChkMostarProductosRNCBon.Checked Then For Each GvRow As GridViewRow In GvRemisionesNCBon.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() RemNC.CveVentaRNCCargo = GvRow.DataKey("CveVentaRNCCargo").ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaRemisionesNC.Clear() Exit Sub End If ListaRemisionesNC.Add(RemNC) End If End If Next 'SI SON SOLO BONIFICACIONES GENERA LA NC PRINCIPAL EN BASE A ESAS 'If RblRNCTipo.SelectedValue.ToString() = "2" AndAlso ListaRemisionesNC.Count = 0 Then ' ListaRemisionesNC.AddRange(ListaNCBonificacion) ' ListaNCBonificacion.Clear() 'End If End If Dim DrPSSeleccionado As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=NCConcepto).FiltroPrimero("") If DrPSSeleccionado IsNot Nothing Then DdlNCPS.SelectedValueExistInsert(NCConcepto, DrPSSeleccionado("PS").ToString()) DdlNCPS.Enabled = False End If TxtImportesRemisionesNC.Text = TotalRemNCAplicado.FormatoNumero 'TxtNCImporte.Text = TotalRemNCAplicado.FormatoNumero If ListaRemisionesNC.Count > 0 Then ' si hay opciones seleccionadas, se activa el generar las NCs BtnAplicarNC.Enabled = True End If UpModalRemisionesNC.Update() UpAplicarNC.Update() RegistraScript("CerrarModalRemNC();") End Sub Protected Sub LnkDescuentosRNC_Click(sender As Object, e As EventArgs) RblRNCTipoDesc_SelectedIndexChanged(RblRNCTipoDesc, EventArgs.Empty) RegistraScript("$('#ModalAplicarDescuentoNC').modal('show'); ") End Sub Protected Sub BtnAplicarDesc_Click(sender As Object, e As EventArgs) Try Me.AplicaRNCXDetalle = False Me.AplicaRNCBonificacionXDetalle = False Dim DrPS As DataRow = Nothing Dim ArrayNC As String() = UsuarioActual.Empresa.Funcionalidad(591).Split(",".ToCharArray()) If ArrayNC.Length >= 4 Then Dim CvePSNC As Integer = ArrayNC(3).ToEntero() DrPS = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePSNC, AplicaParaVenta:=1).FiltroPrimero("") Else Dim CveSATNC As String = "84111506" DrPS = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CodigoSATPS:=CveSATNC, AplicaParaVenta:=1).Rows(0) End If If DrPS Is Nothing Then Alert("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.", TipoMensaje.MsgError) Exit Sub End If AplicaNCMasiva = True If ListaNCDesc Is Nothing Then ListaNCDesc = New List(Of Modelos.Factura) Else ListaNCDesc.Clear() End If If ListaNCBonificacion Is Nothing Then ListaNCBonificacion = New List(Of Modelos.Factura) Else ListaNCBonificacion.Clear() End If Dim TotalRemNCAplicado As Decimal = 0 Dim LimiteUsados As Decimal = LblSaldoMaximoUsados.Text.Trim().ToDecimal() If RblRNCTipoDesc.SelectedValue.Contiene("1", "3") Then If ChkMostarProductosRNCDesc.Checked Then TmpDTRNCDetalleSelecciondas.Clear() Dim TotalAcumulado As Decimal = 0 Me.AplicaRNCXDetalle = True For Each GvRow As GridViewRow In GvDescNCCargosDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim Rows As DataRow() = TmpDTRNCDetalle.Select($"CveVentaDetalleRNC = {GvRow.DataKey("CveVentaDetalleRNC").ToEntero()}") For Each row As DataRow In Rows If GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() > 0 Then row("Cantidad") = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() Dim TotalCalculableImpuestos As Decimal = row("Cantidad").ToString().ToDecimal() * row("PU").ToString().ToDecimal() Dim IVA As Decimal = (TotalCalculableImpuestos * row("PorcentajeIVA").ToString().ToDecimal()).RoundSQL() row("IVA") = IVA row("Total") = (TotalCalculableImpuestos + IVA).RoundSQL TmpDTRNCDetalleSelecciondas.Rows.Add(row.ItemArray) End If Next End If End If Next If TmpDTRNCDetalleSelecciondas.SUMD("Total") > LblSaldoMaximoUsados.Text.ToDecimal() Then Alert($"El importe no debe exceder el saldo maximo utilizable. Importe:{TmpDTRNCDetalleSelecciondas.SUMD("Total"):N2}", TipoMensaje.MsgAdvertencia) TmpDTRNCDetalleSelecciondas.Clear() ListaNCDesc.Clear() Exit Sub End If Dim TerminarCiclo As Boolean = False For Each Dr As DataRow In TmpDTRNCDetalleSelecciondas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows Dim RemNC As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim TotalRNC As Decimal = 0 For Each GvRow As GridViewRow In GvDescNCCargosDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked AndAlso GvRow.DataKey("CveVenta").ToEntero() = Dr("CveVenta").ToString().ToEntero() Then Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() If Cantidad > 0 Then Dim PU As Decimal = GvRow.DataKey("PU").ToDecimal() Dim PorcentajeIVA As Decimal = GvRow.DataKey("PorcentajeIVA").ToDecimal() Dim TotalCalculableImpuestos As Decimal = (Cantidad * PU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * PorcentajeIVA).RoundSQL(2) Dim TotalRNCDetalle As Decimal = (TotalCalculableImpuestos + ImporteIVA) TotalRNC += TotalRNCDetalle If RemNC.CveVentaRNCCargo <= 0 Then RemNC.CveVentaRNCCargo = GvRow.DataKey("CveVenta").ToEntero() End If Else Alert($"La cantidad seleccionada debe ser mayor a 0.", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() ListaNCBonificacion.Clear() Exit Sub End If End If End If Next TotalAcumulado += TotalRNC 'SI SE EXECE RESTA AL ULTIMO If TotalAcumulado > LblSaldoMaximoUsados.Text.ToDecimal() Then TerminarCiclo = True TotalAcumulado -= TotalRNC TotalRNC = LblSaldoMaximoUsados.Text.ToDecimal() - TotalAcumulado End If RemNC.TotalRemNCAplicado = TotalRNC TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() Exit Sub End If ListaNCDesc.Add(RemNC) If TerminarCiclo Then Exit For End If Next If ListaNCDesc.Sum(Function(x) x.TotalRemNCAplicado) > LblSaldoMaximoUsados.Text.ToDecimal() Then Alert($"El importe no debe exceder el saldo maximo utilizable", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() TmpDTRNCDetalleSelecciondas.Clear() Exit Sub End If Else For Each GvRow As GridViewRow In GvDescNCCargos.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() Exit Sub End If ListaNCDesc.Add(RemNC) End If End If Next End If 'SI TIENE ALGUN AJUSTE O GARANTIA If ListaNCDesc.Any(Function(RNC) RNC.Num2 = 1) Then For Each RNC As Modelos.Factura In ListaNCDesc.Where(Function(x) x.Num2 = 1) Dim Salir As Boolean = False Dim NCAjuste As Integer = -1 Dim NCGarantiaTotal As Integer = -1 If ArrayNC.Length > 2 Then NCAjuste = ArrayNC(1).ToEntero() NCGarantiaTotal = ArrayNC(2).ToEntero() End If Using ObjAcum As New ClsAcumuladores If ObjAcum.GetGarantiasDetalle(RNC.CveVenta) Then 'SI ES GARANTIA TOTAL If ObjAcum.DtResultados.MAX("PorcentajeAjuste") = "1" Then DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=NCGarantiaTotal, AplicaParaVenta:=1).Rows(0) Salir = True Else DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=NCAjuste, AplicaParaVenta:=1).Rows(0) End If End If End Using If Salir Then Exit For End If Next End If 'VERIFICA EL LIMITE DE LOS USADOS If TotalRemNCAplicado > LimiteUsados Then Alert($"La suma de las remisiones de nota de crédito de tipo 'Cargo' no debe superar el total de Usados.
    Total RNC: {TotalRemNCAplicado:N2}.
    Total Usados: {LimiteUsados:N2}", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() Exit Sub End If 'BONIFICACIONES If ChkMostarProductosRNCDesBonificacion.Checked Then TmpDTRNCBonificacionDetalleSeleccionadas.Clear() Me.AplicaRNCBonificacionXDetalle = True For Each GvRow As GridViewRow In GvDescNCBonDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim Rows As DataRow() = TmpDTRNCBonificacionDetalle.Select($"CveVentaDetalleRNC = {GvRow.DataKey("CveVentaDetalleRNC").ToEntero()}") For Each row As DataRow In Rows If GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() > 0 Then row("Cantidad") = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() Dim TotalCalculableImpuestos As Decimal = row("Cantidad").ToString().ToDecimal() * row("PU").ToString().ToDecimal() Dim IVA As Decimal = (TotalCalculableImpuestos * row("PorcentajeIVA").ToString().ToDecimal()).RoundSQL() row("IVA") = IVA row("Total") = (TotalCalculableImpuestos + IVA).RoundSQL TmpDTRNCBonificacionDetalleSeleccionadas.Rows.Add(row.ItemArray) End If Next End If End If Next Dim TerminarCiclo As Boolean = False For Each Dr As DataRow In TmpDTRNCBonificacionDetalleSeleccionadas.FiltraParametros("", DistinctColumns:={"CveVenta"}).Rows Dim RemNC As New Modelos.Factura(UsuarioActual, Dr("CveVenta").ToString().ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) Dim TotalRNC As Decimal = 0 For Each GvRow As GridViewRow In GvDescNCBonDetalle.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked AndAlso GvRow.DataKey("CveVenta").ToEntero() = Dr("CveVenta").ToString().ToEntero() Then Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidadRNC").Text.ToDecimal() If Cantidad > 0 Then Dim PU As Decimal = GvRow.DataKey("PU").ToDecimal() Dim PorcentajeIVA As Decimal = GvRow.DataKey("PorcentajeIVA").ToDecimal() Dim TotalCalculableImpuestos As Decimal = (Cantidad * PU) Dim ImporteIVA As Decimal = (TotalCalculableImpuestos * PorcentajeIVA).RoundSQL(2) Dim TotalRNCDetalle As Decimal = (TotalCalculableImpuestos + ImporteIVA) TotalRNC += TotalRNCDetalle If RemNC.CveVentaRNCCargo <= 0 Then RemNC.CveVentaRNCCargo = GvRow.DataKey("CveVenta").ToEntero() End If Else Alert($"La cantidad seleccionada debe ser mayor a 0.", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() ListaNCBonificacion.Clear() Exit Sub End If End If End If Next RemNC.TotalRemNCAplicado = TotalRNC TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaNCBonificacion.Clear() Exit Sub End If ListaNCBonificacion.Add(RemNC) If TerminarCiclo Then Exit For End If Next Else For Each GvRow As GridViewRow In GvDescNCBonificaciones.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() RemNC.CveVentaRNCCargo = GvRow.DataKey("CveVentaRNCCargo").ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaNCBonificacion.Clear() Exit Sub End If ListaNCBonificacion.Add(RemNC) End If End If Next End If ElseIf RblRNCTipoDesc.SelectedValue.Contiene("2") Then For Each GvRow As GridViewRow In GvDescNCBonificaciones.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() RemNC.CveVentaRNCCargo = GvRow.DataKey("CveVentaRNCCargo").ToEntero() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaNCBonificacion.Clear() Exit Sub End If ListaNCBonificacion.Add(RemNC) End If End If Next 'Dim LimiteBonficaciones As Decimal = LblSaldoMaximoBonificacion.Text.Trim().ToDecimal() ''VERIFICA EL LIMITE DE LOS USADOS 'If ListaNCBonificacion.Sum(Function(x) x.TotalRemNCAplicado) > LimiteBonficaciones Then ' Alert($"La suma de las remisiones de nota de crédito de tipo 'Bonificación' no debe superar el limite.
    Total RNC: {ListaNCBonificacion.Sum(Function(x) x.TotalRemNCAplicado):N2}.
    Total Usados: {LimiteUsados:N2}", TipoMensaje.MsgAdvertencia) ' ListaNCDesc.Clear() ' ListaNCBonificacion.Clear() ' Exit Sub 'End If 'SI SON SOLO BONIFICACIONES GENERA LA NC PRINCIPAL EN BASE A ESAS If RblRNCTipoDesc.SelectedValue.ToString() = "2" AndAlso ListaNCDesc.Count = 0 Then ListaNCDesc.AddRange(ListaNCBonificacion) ListaNCBonificacion.Clear() End If End If Dim TotalProntoPago As Decimal = 0 'SOLO APLICA SI EL PAGO ES DE CONTADO If RBLPago.SelectedValue = "2" Then TotalProntoPago = TmpDT.SUM("ImporteProntoPago") End If If TotalRemNCAplicado > TxtTotal.Text.ToDecimal() Then Alert($"La suma de las remisiones de nota de crédito no debe superar el total de la factura.
    Total RNC: {TotalRemNCAplicado:N2}.
    Total Factura: {TxtTotal.Text.ToDecimal():N2}", TipoMensaje.MsgAdvertencia) ListaNCDesc.Clear() ListaNCBonificacion.Clear() Exit Sub End If HdnTotalRNC.Value = TotalRemNCAplicado.ToString() LblDescuentosRNC.Text = TotalRemNCAplicado.FormatoNumero LblTotalAPagar.Text = (TxtTotal.Text.ToDecimal() - TotalRemNCAplicado - TotalProntoPago).FormatoNumero Dim CvePS As Integer = DrPS("CvePS").ToString().ToEntero() AplicarNC(CvePS, NCDescuento:=True) Catch ex As Exception OnError("Ocurrió un error al aplicar remisiones de nota de crédito", ex) End Try UpPS.Update() RegistraScript("$('#ModalAplicarDescuentoNC').modal('hide'); ") End Sub Protected Sub PreparaNCDescuento(ByRef factura As Modelos.Factura) If TmpDTDescNC IsNot Nothing Then factura.DtDetalle = TmpDTDescNC '**** IMPUESTOS LOCALES Dim TotalSubTotal As Decimal = TmpDTDescNC.SUM("TotalImporte") Dim TotalDescuentos As Decimal = TmpDTDescNC.SUM("Descuento") Dim TotalIVA As Decimal = TmpDTDescNC.SUM("ImporteIVA") Dim TotalIEPS As Decimal = TmpDTDescNC.SUM("ImporteIEPS") Dim TotalRetIVA As Decimal = TmpDTDescNC.SUM("ImporteRetIVA") Dim TotalRetISR As Decimal = TmpDTDescNC.SUM("ImporteRetISR") Dim Total As Decimal = 0 Dim TotalImpuestosLocales As Decimal = 0 Total = (TotalSubTotal - TotalDescuentos + TotalIVA + TotalIEPS - TotalRetIVA - TotalRetISR - TotalImpuestosLocales) factura.SubTotal = TotalSubTotal factura.Descuento = TotalDescuentos factura.IVA = TotalIVA factura.IEPS = TotalIEPS factura.RetIVA = TotalRetIVA factura.RetISR = TotalRetISR factura.Total = Total End If End Sub Protected Sub PreparaNCBonificacion(ByRef factura As Modelos.Factura) If ListaNCBonificacion IsNot Nothing AndAlso ListaNCBonificacion.Count > 0 Then factura.DtDetalle = Me.TmpDTDescNCBonificacion '**** IMPUESTOS LOCALES Dim TotalSubTotal As Decimal = TmpDTDescNCBonificacion.SUM("TotalImporte") Dim TotalDescuentos As Decimal = TmpDTDescNCBonificacion.SUM("Descuento") Dim TotalIVA As Decimal = TmpDTDescNCBonificacion.SUM("ImporteIVA") Dim TotalIEPS As Decimal = TmpDTDescNCBonificacion.SUM("ImporteIEPS") Dim TotalRetIVA As Decimal = TmpDTDescNCBonificacion.SUM("ImporteRetIVA") Dim TotalRetISR As Decimal = TmpDTDescNCBonificacion.SUM("ImporteRetISR") Dim Total As Decimal = 0 Dim TotalImpuestosLocales As Decimal = 0 Total = (TotalSubTotal - TotalDescuentos + TotalIVA + TotalIEPS - TotalRetIVA - TotalRetISR - TotalImpuestosLocales) factura.SubTotal = TotalSubTotal factura.Descuento = TotalDescuentos factura.IVA = TotalIVA factura.IEPS = TotalIEPS factura.RetIVA = TotalRetIVA factura.RetISR = TotalRetISR factura.Total = Total End If End Sub #End Region Protected Sub BtnModalAplicarRemisionesNC_Click(sender As Object, e As EventArgs) ChkMostarProductosRNC_CheckedChanged(ChkMostarProductosRNC, EventArgs.Empty) RegistraScript("$('#ModalAplicarRemisionesNC').modal({backdrop: 'static', keyboard: false });") End Sub #Region "P O L I Z A - V I R T U A L" Private Sub CargaCodigoUnico() If UsuarioActual.Empresa.Funcionalidad(531) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contiene("Rem") Then Dim ObjAcum As New ClsAcumuladores If ObjAcum.GetPolizasVirtuales(Me.CveVenta) AndAlso ObjAcum.DtResultados.Rows.Count > 0 Then Dim RowPoliza As DataRow = ObjAcum.DtResultados.Rows(0) If DdlTipoComprobante.SelectedValue.Contiene("Rem") Then GvCodigosUnicos.DataSource = ObjAcum.DtResultados DivCodigosUnicos.Visible = True End If If Not CBool(RowPoliza("Enviada").ToString()) Then LnkEnviarPolizaVirtual.Visible = True End If End If ObjAcum.Dispose() GvCodigosUnicos.DataBind() End If End Sub Protected Sub GeneraPolizaVentaWS(ObjFactura As Modelos.Factura) Try If UsuarioActual.CveUsuario.Contiene(3491) Then Exit Sub End If 'TipoPoliza: 01 Venta, 02 Ajuste, 03 Garantía Dim TipoPoliza As Integer = 0 For Each Row As GridViewRow In GvCodigosUnicos.Rows If Row.RowType = DataControlRowType.DataRow Then Dim CvePolizaVirtual As Integer = Row.DataKey("CvePolizaVirtual").ToEntero() Dim obj As New Modelos.MPolizaVentaWS 'DATOS DEL CLIENTE obj.customer_name = ObjFactura.Cliente.Nombre obj.customer_last_name1 = "." obj.customer_last_name2 = "" obj.customer_birthday = Nothing obj.customer_phone = ObjFactura.Cliente.Telefono obj.customer_email = ObjFactura.Cliente.Mail obj.customer_gender = "03" 'OTRO GENERO obj.customer_advertising = False obj.customer_car_brand = Row.DataKey("IdMarcaAuto").ToString().Trim() obj.customer_car_model = Row.DataKey("IdModeloAuto").ToString().Trim() obj.customer_car_year = Row.DataKey("AnioVehiculo").ToString().ToEntero() 'DATOS DE VENTA obj.sale_date = ObjFactura.Fecha obj.sale_paidby = "01" obj.sale_type = "01" 'PISO obj.sale_type_service = "0" & Row.DataKey("TipoServicio").ToString().Trim() obj.sale_total = Row.DataKey("Total").ToString().ToDecimal() obj.sale_discount = Row.DataKey("Descuento").ToString().ToDecimal() obj.sale_id = ObjFactura.CveVenta.ToString() 'DATOS DEL PRODUCTO obj.product_code = Row.DataKey("IdProductoPolizaVirtual").ToString().Trim() obj.product_unique_code = Row.FCTextBox("TxtCodigoUnico").Text.Trim() 'se indique el código único de la batería. (SERIE LOTE) obj.product_sale_type = "0" & Row.DataKey("TipoPoliza").ToString().Trim() 'DATOS DE USADO obj.used_product = CBool(Row.DataKey("TieneUsado").ToString()) If obj.used_product Then Dim FechaUsado As DateTime = Row.DataKey("FechaUsado").ToString().ToDateTime() obj.used_brand = Row.DataKey("IdMarcaUsado").ToString().Trim() 'MARCAR DEL USADO obj.used_bci = Row.DataKey("IdBCI").ToString().Trim() 'VALOR DEL BCI obj.used_month = FechaUsado.Month obj.used_year = FechaUsado.Year obj.used_sale_date = FechaUsado End If ObjFactura.SetSubProyecto() EnviarPolizaVentaWS(obj, CvePolizaVirtual, ObjFactura.SubProyecto.Acum_PortalUsuario, ObjFactura.SubProyecto.Acum_PortalContrasena) End If Next Catch ex As Exception OnError("Ocurrió un error al generar la poliza virtual", ex) End Try End Sub Protected Function EnviarPolizaVentaWS(obj As Modelos.MPolizaVentaWS, CvePolizaVirtual As Integer, Usuario As String, Contraseña As String) As Boolean Dim Retorno As Boolean = False Dim Respuesta As String = "[]" Dim User As String Dim Password As String If UsuarioActual.Empresa.FacturaProduccion Then User = Usuario '"cslth.2809@jcilink.com" Password = Contraseña ' "ff31580a95f36b51ad27f970428b77a5a9245076" Else User = "cslth.7777@lth.com" Password = "ff31580a95f36b51ad27f970428b77a5a9245076" End If Try Using wc As New HttpClient() Dim Url As New Uri("http://polizavirtual.com.mx/webservice/api/Venta") Dim Parametros As New List(Of KeyValuePair(Of String, String)) Parametros.Add(New KeyValuePair(Of String, String)("User", User)) Parametros.Add(New KeyValuePair(Of String, String)("password", Password)) Parametros.Add(New KeyValuePair(Of String, String)("customer_name", obj.customer_name)) Parametros.Add(New KeyValuePair(Of String, String)("customer_last_name1", obj.customer_last_name1)) Parametros.Add(New KeyValuePair(Of String, String)("customer_last_name2", obj.customer_last_name1)) Parametros.Add(New KeyValuePair(Of String, String)("customer_birthday", obj.customer_birthday.ToString("yyyy-MM-dd HH:mm:ss"))) Parametros.Add(New KeyValuePair(Of String, String)("customer_phone", obj.customer_phone)) Parametros.Add(New KeyValuePair(Of String, String)("customer_email", obj.customer_email)) Parametros.Add(New KeyValuePair(Of String, String)("customer_gender", obj.customer_gender)) Parametros.Add(New KeyValuePair(Of String, String)("customer_advertising", obj.customer_advertising.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("sale_date", obj.sale_date.ToString("yyyy-MM-dd HH:mm:ss"))) Parametros.Add(New KeyValuePair(Of String, String)("sale_paidby", obj.sale_paidby)) Parametros.Add(New KeyValuePair(Of String, String)("sale_type", obj.sale_type)) Parametros.Add(New KeyValuePair(Of String, String)("sale_type_service", obj.sale_type_service)) Parametros.Add(New KeyValuePair(Of String, String)("product_code", obj.product_code)) Parametros.Add(New KeyValuePair(Of String, String)("product_unique_code", obj.product_unique_code)) Parametros.Add(New KeyValuePair(Of String, String)("product_sale_type", obj.product_sale_type)) Parametros.Add(New KeyValuePair(Of String, String)("sale_total", obj.sale_total.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("used_product", obj.used_product.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("used_brand", obj.used_brand)) Parametros.Add(New KeyValuePair(Of String, String)("used_bci", obj.used_bci)) Parametros.Add(New KeyValuePair(Of String, String)("used_month", obj.used_month.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("used_year", obj.used_year.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("used_sale_date", obj.used_sale_date.ToString("yyyy-MM-dd HH:mm:ss"))) Parametros.Add(New KeyValuePair(Of String, String)("customer_car_brand", obj.customer_car_brand.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("customer_car_model", obj.customer_car_model.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("customer_car_year", obj.customer_car_year.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("sale_discount", obj.sale_discount.ToString())) Parametros.Add(New KeyValuePair(Of String, String)("sale_id", obj.sale_id.ToString())) Dim content As New FormUrlEncodedContent(Parametros) Dim response = wc.PostAsync(Url, content).Result Respuesta = response.Content.ReadAsStringAsync().Result Dim resp As JArray = JArray.Parse(Respuesta) If resp.Count > 0 Then Dim Msg As New StringBuilder() Msg.AppendFormat("Mensaje Póliza Virtual: {0} - Código: {1}", resp(0)("Descripcion").ToString(), resp(0)("Codigo")) If resp(0)("Codigo").ToString().Contiene("500", "501", "502", "503", "504", "505", "506", "507", "508", "510") Then Retorno = True End If Dim ObjAcum As New ClsAcumuladores If ObjAcum.UpdateEnvioPolizaVirtual(CvePolizaVirtual, Retorno, NowADS(), obj.product_unique_code, resp(0)("Descripcion").ToString()) Then Alert(Msg.ToString(), TipoMensaje.MsgInformacion) End If ObjAcum.Dispose() Dim ObjEventos As New ClsOIEventos() If Not ObjEventos.AddEventoBitacora(Msg.ToString(), "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVenta:=Me.CveVenta) Then ErrorList.Add("Ocurrió un error al agregar la bitacora de Póliza Virtual.") End If ObjEventos.Dispose() Msg.Clear() Else Alert("No se envió la poliza virtual", TipoMensaje.MsgAdvertencia) End If End Using Catch ex As Exception ex.GuardaLog(ex.Message) End Try Return Retorno End Function Protected Sub LnkEnviarPolizaVirtual_Click(sender As Object, e As EventArgs) If UsuarioActual.Empresa.Funcionalidad(576) = "1" AndAlso DdlTipoComprobante.SelectedValue.Contains("Rem") Then CreaObjetosVenta() GeneraPolizaVentaWS(ObjFactura) End If End Sub #End Region Protected Sub DdlTipoRetencion_SelectedIndexChanged(sender As Object, e As EventArgs) If CveVenta <= 0 OrElse EsCreaApartirDe Then If TmpDT IsNot Nothing AndAlso TmpDT.Rows.Count > 0 Then For Each RowServicio As DataRow In TmpDT.Rows Dim tClienteRetIVA As Decimal = ClienteRetIVA If tClienteRetIVA <= 0 Then If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then tClienteRetIVA = 0.106667D ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then tClienteRetIVA = 0.04D ElseIf DdlTipoRetencion.SelectedValue.Contiene("0") Then tClienteRetIVA = 0.00D End If ViewState("ClienteRetIVA") = tClienteRetIVA End If Dim TotalCalculableImpuestos As Decimal = (RowServicio("Cantidad").ToString().ToDecimal() * RowServicio("PU").ToString().ToDecimal()) - RowServicio("Descuento").ToString().ToDecimal() RowServicio("ImporteRetIVA") = (TotalCalculableImpuestos * ClienteRetIVA).RoundSQL() RowServicio("PorcentajeRetIVA") = ClienteRetIVA Next TxtRetIVA.Text = TmpDT.SUM("ImporteRetIVA").FormatoNumero(2) Dim PorcentajeRetIVA As Decimal = (TmpDT.MAX("PorcentajeRetIVA").ToDecimal() * 100) LblRetIVA.Text = PorcentajeRetIVA.FormatoNumero(2) If PorcentajeRetIVA > 0 Then TrRetIVA.Style.Add("display", "") UsuarioActual.Empresa.MostrarRetIVA = True DdlTipoRetencion.Visible = True End If GvPS.DataSource = TmpDT GvPS.DataBind() End If End If UpPS.Update() End Sub Protected Sub TxtFecha_TextChanged(sender As Object, e As EventArgs) 'SI USUARIO USA AMORTIZACIÓN CONTABLE, se carga las tablas para usarlas mas adelante If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.CveEmpresa = 48 AndAlso UsuarioActual.Empresa.UsaAC Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Cot")) DdlTipoComprobante.Items.Add(New ListItem("Compromisos", "Com")) DdlTipoComprobante.Items.Add(New ListItem("Orden Pago", "OP")) Dim AC As New ClsAC If AC.GetPresupuestoIngresos(-1, TxtFecha.Text.ToDateTime().Year, True, UsuarioActual.CveEmpresa) Then DdlFuenteRecaudacion.DataSource = AC.DtResultados() DTPresupuestoIngresos = AC.DtResultados() ViewState("DTFuenteRecaudacion") = AC.DtResultados() 'GenerarPolizasAC() End If AC.Dispose() 'columna de Fuente de recaudacion GvPS.Columns(22).Visible = True nomostrar.Visible = True nomostrar2.Visible = True 'GvPS.Width = 1250 DdlFuenteRecaudacion.DataBind() Else TFuenteRecaudacion.Visible = False End If Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() End Sub Private Function DescargarFactura(CveVenta As Integer, CveEmpresa As Integer, CveUsuarioCreo As Integer, Optional GetBytes As Boolean = True, Optional Regenerar As Boolean = False, Optional strURLHOST As String = "") As Byte() If String.IsNullOrEmpty(strURLHOST) Then strURLHOST = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) End If Dim Url As New Uri(String.Format("{0}/Compras/PopUpVerFactura.aspx?P={1}", strURLHOST, Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1®ENERAR={1}", CveVenta, If(Regenerar, "1", "0"))))) Dim File As Byte() = Nothing Try Using httpClient As New HttpClient() httpClient.Timeout = New TimeSpan(0, 2, 0) Using request As New HttpRequestMessage(HttpMethod.Get, Url) request.Headers.Add("ADSToken", Encripta(String.Format("CVEEMPRESA={0}&TICKS={1}&CveUsuario={2}", CveEmpresa, DateTime.UtcNow.Ticks, CveUsuarioCreo))) Dim response = httpClient.SendAsync(request).Result If GetBytes AndAlso 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 Protected Sub LnkGenerarOC_Click(sender As Object, e As EventArgs) Response.Redirect($"~/OC/OC.aspx?CveCotizacion={Me.CveVenta}&Tipo=OC") End Sub Protected Sub btnupEventoBitacora_Click(sender As Object, e As EventArgs) CargaEventoBitacora() End Sub Private Sub MostrarOpcionesPaqueteria() Dim mostrarOpcionesPaq As Boolean = DdlTipoComprobante.SelectedValue.Contiene("Ing", "Rem", "Ped") And UsuarioActual.Empresa.Funcionalidad(280) = "1" trPaqueteriaOpciones.Visible = mostrarOpcionesPaq trPaqueteriOpcionesLabel.Visible = mostrarOpcionesPaq trPaqueteriaDirectaLabel.Visible = False End Sub Private Sub NotificarPaqueteria() 'Dim DtVendedores As DataTable = GlobalDTVendedores(UsuarioActual.CveEmpresa) 'Dim CorreoVendedor As String = DtVendedores.FiltroPrimeroValor("Correo", String.Format("CveVendedor = {0}", DdlVendedor.SelectedValue)) 'Dim CorreoVendedorAdicional As String = DtVendedores.FiltroPrimeroValor("CorreoAdicionalNotificaciones", String.Format("CveVendedor = {0}", DdlVendedor.SelectedValue)) 'Dim CorreoCliente As String = Mail 'Dim CorreoClienteAlmacen As String = CorreoEntregaAlmacen 'Dim CorreoNotificacionCliente As String = MailCC 'Dim CorreosCC As String = String.Format("{0};{1};{2};{3}", CorreoVendedor, CorreoVendedorAdicional, CorreoCliente, CorreoNotificacionCliente) 'Dim LogCorreo As String = String.Format("{0} -- {1} --- {2}", "Tipo de entrega", CorreoClienteAlmacen, CorreosCC) 'LogCorreo.GuardaLog 'Dim MailCls As New ClsSisMail 'MailCls.SendMail(ClsPaginas.EmpresaNotificaciones, CorreoVendedor, "Entrega en mostrador", "Pendiente", CorreosCC) 'MailCls = Nothing End Sub Protected Sub BtnEditar_Click() Handles BtnEditar.Click Dim Opcion As String = BtnEditar.Text If Opcion = "Editar" Then EditarHabilitarCampos() ElseIf Opcion = "Guardar" Then GuardarValoresEditados() End If End Sub Private Sub EditarHabilitarCampos() 'Datos de emisión DdlVendedor.Enabled = True 'Observaciones TxtObsFact.Enabled = True TxtOrdenCompra.Enabled = True TxtPedidoContrato.Enabled = True TxtObsAlmacen.Enabled = True RblPaqueteria.Enabled = True DdlSucursalCliente.Enabled = True LnkUpdateLineaAdicional.Visible = True 'Acciones BtnEditar.Text = "Guardar" CalculaLineasAdicionales() DdlLineaAdicional.Enabled = True If UsuarioActual.TienePermisoProceso(357) AndAlso LblSeTimbro.Text = "No" Then DdlUsoCFDI.Enabled = True DdlMetodoPago33.Enabled = True DdlFormaPago33.Enabled = True End If If UsuarioActual.Empresa.Funcionalidad(578) = "1" AndAlso CveTipoVenta.Contiene(1, 2, 3, 5, 6) Then TrVentasMedicas1.Visible = True DdlMedico.Enabled = True DdlProcedimiento.Enabled = True TxtPaciente.Enabled = True TxtEpisodio.Enabled = True End If If UsuarioActual.TienePermisoProceso(289) Then If LblSeTimbro.Text = "No" Then DdlUsoCFDI.Enabled = False DdlMetodoPago33.Enabled = False DdlFormaPago33.Enabled = False End If TxtFechaPago.Enabled = True imgCalendario.Enabled = True End If If LblSeTimbro.Text = "No" AndAlso DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso ChkEmitirComercioExterior.Checked AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then TxtTipoCambio.Enabled = True TxtTipoCambio.ReadOnly = False UpPS.Update() End If TxtDescripcionVenta.Enabled = True If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If DdlMedico.SelectedValue.ToEntero() > 0 Then TxtFechaOS.Enabled = True End If End If 'NO PERMITE EDITAR FECHA DEL PAGO If Not UsuarioActual.TienePermisoProceso(260) Then TxtFechaPago.Enabled = False imgCalendario.Visible = False End If UpCliente.Update() UpParametros.Update() UPObservaciones.Update() UpFacturar.Update() UPCondicionesPago.Update() End Sub Private Sub GuardarValoresEditados() Dim TieneError As Boolean = False Dim AplicaUpdateTC As Boolean = False If LblSeTimbro.Text = "No" AndAlso DdlMoneda.SelectedValue.ToEntero() = 2 AndAlso ChkEmitirComercioExterior.Checked AndAlso DdlTipoComprobante.SelectedValue = "Ing" Then AplicaUpdateTC = True End If Dim ObjVentas As New ClsVentas() ObjVentas.IniciaTransacSQL() 'DdlMedicoObservaciones.Enabled = True 'DdlProcedimientoObservaciones.Enabled = True Dim FechaParaSurtir As DateTime = MinFecha If TxtFechaOS.Text.Replace(",", "").ToDateTime() > MinFecha Then FechaParaSurtir = TxtFechaOS.Text.Replace(",", "").ToDateTime() End If If Not ObjVentas.UpdateObservacionesVenta(Me.CveVenta, UsuarioActual.CveEmpresa, DdlVendedor.SelectedValue.ToEntero(), TxtObsFact.Text, RblPaqueteria.SelectedValue.ToEntero(), TxtCorreoNotificaciones.Text, TxtObsAlmacen.Text, TxtPedidoContrato.Text, TxtOrdenCompra.Text, TxtFechaPago.Text, DdlUsoCFDI.SelectedValue.ToEntero, DescripcionVenta:=TxtDescripcionVenta.Text.Trim, CveMedico:=DdlMedico.SelectedValue.ToEntero, CveProcedimiento:=DdlProcedimiento.SelectedValue.ToEntero, FechaParaSurtir:=FechaParaSurtir, Paciente:=TxtPaciente.Text, Episodio:=TxtEpisodio.Text, CveUsuarioModifico:=UsuarioActual.CveUsuario) Then TieneError = True End If If Not TieneError Then If DdlMedico.SelectedValue.ToEntero() > 0 AndAlso FechaParaSurtir > MinFecha Then If Not ObjVentas.UpdateFechaOSVenta(CveVenta, FechaParaSurtir, UsuarioActual.CveEmpresa) Then TieneError = True End If End If End If If Not TieneError AndAlso AplicaUpdateTC Then If Not ObjVentas.UpdateVentaTC(Me.CveVenta, UsuarioActual.CveEmpresa, TxtTipoCambio.Text.ToDecimal()) Then TieneError = True End If End If If Not TieneError Then ObjVentas.Commit() BtnEditar.Text = "Editar" Dim Liga As String = $"document.location.href=""/Ventas/Ventas.aspx?CveVenta={Me.CveVenta}"";" Alert("La venta se actualizó correctamente", TipoMensaje.MsgInformacion, Liga, TextoConfirmacion:="Aceptar", TextoSegundoBoton:=Nothing, JSBtn2:=Nothing, ShowCloseButton:=False) UpParametros.Update() UPObservaciones.Update() UpFacturar.Update() Else ObjVentas.RollBack() End If ObjVentas.Dispose() 'REGENERAR EL PDF Try GenerarPDFVenta(CveVenta, AplicaPagare:="1", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) 'Dim CveEmpresaPDF As Integer = UsuarioActual.CveEmpresa 'Dim CveUsuarioPDF As Integer = UsuarioActual.CveUsuario 'Dim strURLHOST As String = String.Format("{0}://{1}:{2}", HttpContext.Current.Request.Url.Scheme, HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port) 'RegenerarPDF(CveVenta, CveEmpresaPDF, CveUsuarioPDF, strURLHOST) Catch ex As Exception OnError("Ocurrió un error al regenerar el PDF", ex) End Try End Sub Private Function DeshabilitarAplicarNotaDeCredito(RFC As String) As Boolean Dim Retorno As Boolean = False If UsuarioActual.CveEmpresa = 119 AndAlso RFC.Contiene("XAXX010101000", "XEXX010101000") AndAlso Not UsuarioActual.CveUsuario.Contiene(1719, 3761) Then LBNotaCredito.Visible = False UpnTools.Update() Retorno = True End If Return Retorno End Function #Region "Auxiliar" Private Sub CargarSaldoAuxiliar(CveCliente As Integer) CargaAuxiliarClienteCxC(CveCliente, CveVenta) End Sub Private Sub CargaAuxiliarClienteCxC(CveCliente As Integer, CveVenta As Integer) Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetCxCClienteAuxiliar(CveCliente, CveVenta) Then ' DTDatos = ObjMovtos.DtResultados GVAuxiliar.DataSource = ObjMovtos.DtResultados Else GVAuxiliar.DataSource = Nothing End If ObjMovtos.Dispose() GVAuxiliar.DataBind() End Sub ''Protected Sub BtnCancelarAux_Click(sender As Object, e As EventArgs) '' 'AgregaPolizaNegativo(CvePrePolizaNegativa) ''End Sub ''Private Sub AgregaPolizaNegativo(CvePrePoliza As Integer) '' Dim ObjContabilidad As New ClsContabilidad '' Dim TieneError As Boolean = False '' ObjContabilidad.IniciaTransacSQL() '' Dim CvePrePolizaNueva As Integer = ObjContabilidad.AddPrePolizasNegativa(CvePrePoliza, UsuarioActual.CveUsuario, TxtConceptoCancelacion.Text, UsuarioActual.CveEmpresa, TxtFechaCancelacion.Text.ToDate) '' If Not CvePrePolizaNueva > 0 Then '' TieneError = True '' End If '' If Not TieneError Then '' ObjContabilidad.Commit() '' Dim Str As New StringBuilder '' Str.Append("Se agrego la póliza de cancelación correctamente.
    ") '' RegistraScript(" $('#DivCancelar').modal('hide'); ") '' If UsuarioActual.Empresa.Funcionalidad(200) = "1" Then '' If ObjContabilidad.ContabilizarPrePoliza(CvePrePolizaNueva, UsuarioActual.CveUsuario, UsuarioActual.Empresa) Then '' Str.AppendFormat("Ver Poliza", ObjContabilidad.ContaIdPoliza) '' End If '' End If '' Alert(Str.ToString) '' Else '' ObjContabilidad.RollBack() '' End If '' ObjContabilidad.Dispose() '' CargarSaldoAuxiliar(CveCliente) ''End Sub Protected Sub GVAuxiliar_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GVAuxiliar.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowIndex = 0 Then e.Row.BackColor = Drawing.Color.LightGray e.Row.FCLiteral("LtlFechaMovto").Text = "Totales: " e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(0).ColumnSpan = 2 e.Row.Cells(1).Visible = False e.Row.Cells(4).ColumnSpan = 3 e.Row.Cells(5).Visible = False e.Row.Cells(6).Visible = False e.Row.Cells(7).Visible = False e.Row.Cells(8).Visible = False ElseIf e.Row.RowIndex = 1 Then e.Row.Cells(0).Width = Unit.Pixel(95) e.Row.Cells(1).Width = Unit.Pixel(180) e.Row.Cells(2).Width = Unit.Pixel(80) e.Row.Cells(3).Width = Unit.Pixel(80) e.Row.Cells(4).Width = Unit.Pixel(83) e.Row.Cells(5).Width = Unit.Pixel(93) e.Row.Cells(6).Width = Unit.Pixel(85) e.Row.Cells(7).Width = Unit.Pixel(95) e.Row.Cells(8).Width = Unit.Pixel(70) End If e.Row.Cells(1).HorizontalAlign = HorizontalAlign.Left e.Row.Cells(2).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(3).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(4).HorizontalAlign = HorizontalAlign.Left If e.Row.FCLiteral("LtlContabilizado").Text = "Si" Then Dim Liga As String = String.Format("", e.Row.DBCampo("IdPoliza")) e.Row.FCLiteral("LtlPoliza").Text = String.Format("{0}{1}", Liga, e.Row.DBCampo("Poliza")) End If If e.Row.DBCampo("CveConceptoContable").ToEntero.Contiene(2) AndAlso e.Row.DBCampo("CvePersonal").ToEntero > 0 Then Dim Liga As String = String.Format("", e.Row.DBCampo("CvePersonal")) e.Row.FCLiteral("LtlConcepto").Text = String.Format("{0}{1}", Liga, e.Row.DBCampo("ConceptoContable")) End If If e.Row.DBCampo("TipoReferencia").ToEntero = 1 Then e.Row.FCHyperLink("HplReferencia").NavigateUrl = $"/Bancos/IE.aspx?CveIE={e.Row.DBCampo("CveReferencia").ToEntero}" ElseIf e.Row.DBCampo("TipoReferencia").ToEntero = 2 Then e.Row.FCHyperLink("HplReferencia").NavigateUrl = $"/Ventas/Ventas.aspx?CveVenta={e.Row.DBCampo("CveReferencia").ToEntero}" End If If e.Row.DBCampo("CveConceptoContable").ToEntero.Contiene(275) AndAlso e.Row.DBCampo("CveVenta").ToEntero > 0 Then e.Row.FCHyperLink("HplReferencia").NavigateUrl = $"/Ventas/Ventas.aspx?CveVenta={e.Row.DBCampo("CveVenta").ToEntero}" End If End If End Sub Function ValidaVentaContratoObra() As Boolean Dim Respuesta As Boolean = False If EscontratoObra AndAlso PorAmortizacionAnticipo > 0 Then ' si es contrato de obra y tiene amortización de anticipo If DdlTipoComprobante.SelectedValue = "Ing" Then If DdlEstimacionesObra.SelectedValue.ToEntero > 0 Then Dim ImporteAmortizarFinal As Decimal = 0 If GVAnticipos.Rows.Count > 0 Then Dim actualindex As Integer = 0 For Each row2 As GridViewRow In GVAnticipos.Rows If row2.FCCheckBox("Chk" & row2.RowIndex).Checked Then ImporteAmortizarFinal = ImporteAmortizarFinal + row2.FCTextBox($"TxtAnticipo{actualindex}").Text.ToDecimal End If actualindex = actualindex + 1 Next End If If ImporteAmortizarFinal > 0 Then Respuesta = True Else Respuesta = False Alert("Debe de seleccionar un importe de amortización.", TipoMensaje.MsgAdvertencia) End If Else Respuesta = False Alert("Se selecciono un contrato de obra, para continuar seleccione una estimación.", TipoMensaje.MsgAdvertencia) End If ElseIf DdlTipoComprobante.SelectedValue = "Ant" Or DdlTipoComprobante.SelectedValue = "Egs" Then Respuesta = True Else Alert("Tipo de documento no valido para contratos de obra.", TipoMensaje.MsgAdvertencia) Respuesta = False End If Else Respuesta = True End If Return Respuesta End Function #End Region #Region " N O T A - D E - C R E D I T O - P R O N T O - P A G O" Private Function GenerarNCProntoPago(SqlTransaccion As SqlClient.SqlTransaction, ByRef ObjCliente As ClsClientes, ObjFactura As Modelos.Factura) As Modelos.MensajeProntoPago Dim Retorno As New Modelos.MensajeProntoPago Dim Resp As New Modelos.Factura.MMensajeFactura Dim ObjFacturaProntoPago As Modelos.Factura = Nothing Try ObjFacturaProntoPago = New Modelos.Factura(UsuarioActual) ObjFacturaProntoPago.TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.TextoLimpio ObjFacturaProntoPago.CveUsuario = UsuarioActual.CveUsuario ObjFacturaProntoPago.UsuarioCreo = UsuarioActual.Usuario Dim CveSubProyecto As Integer = ObjFactura.CveSubProyecto Dim CveMoneda As Integer = ObjFactura.CveMoneda Dim CveCliente As Integer = ObjFactura.CveCliente Dim Folio As Integer = -1 Dim Serie As String = "-1" ObjFacturaProntoPago.CveEmpresa = UsuarioActual.CveEmpresa ObjFacturaProntoPago.TipoCambio = If(CveMoneda = 1, 1, GlobalTipoCambio(NowADS()).FormatoNumero(4).ToDecimal()) ObjFacturaProntoPago.ConvertirPesos = False ObjFacturaProntoPago.CveMoneda = CveMoneda ObjFacturaProntoPago.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {CveMoneda}") ObjFacturaProntoPago.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {CveMoneda}") ObjFacturaProntoPago.Serie = Serie ObjFacturaProntoPago.Folio = Folio ObjFacturaProntoPago.TipoDocto = "Egs" ObjFacturaProntoPago.Fecha = NowADS() ObjFacturaProntoPago.Version = "4.0" If ObjFacturaProntoPago.Cliente Is Nothing Then ObjFacturaProntoPago.Cliente = New Modelos.ClienteModel End If ObjFacturaProntoPago.Cliente.CodigoRegimenFiscal = ClienteCodigoRegimenFiscal ObjFacturaProntoPago.Cliente.RegimenFiscal = ClienteRegimenFiscal ObjFacturaProntoPago.CveMetodoPago = 1 ObjFacturaProntoPago.MetodoPago = "Pago en una sola exhibición" ObjFacturaProntoPago.ClaveMetodoPagoSAT = "PUE" ObjFacturaProntoPago.CveFormaPago = 21 ObjFacturaProntoPago.FormaPago = "Aplicación de anticipos" ObjFacturaProntoPago.ClaveFormaPagoSAT = "30" ObjFacturaProntoPago.CveSubProyecto = CveSubProyecto ObjFacturaProntoPago.SetSubProyecto() ObjFacturaProntoPago.CveCliente = CveCliente ObjFacturaProntoPago.SetCliente() If ObjCliente.GetClientes(ObjFacturaProntoPago.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then If ObjCliente.DtResultados.Rows.Count > 0 Then ObjFacturaProntoPago.CveUsoCFDI = ObjCliente.CveUsoCFDI ObjFacturaProntoPago.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI)) ObjFacturaProntoPago.ClaveUsoCFDISAT = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI)) ObjFacturaProntoPago.DtDetalle = CreaDTDetalleNCProntoPago() CargaImpuestosProntoPago(ObjFacturaProntoPago, ObjFactura, ObjCliente.DesglosaIEPS, ObjCliente.RetIVA.ToDecimal, ObjCliente.RetISR.ToDecimal) End If End If If ObjCliente.GetSucursales(CveCliente) Then If ObjCliente.DtResultados.Rows.Count > 0 Then ObjFacturaProntoPago.CveClienteSucursal = If(String.IsNullOrEmpty(ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'")), -1, ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'").ToEntero()) Else ObjFacturaProntoPago.CveClienteSucursal = -1 End If End If ObjFacturaProntoPago.CveTipoRelacion = 7 ObjFacturaProntoPago.TipoRelacion = "07" ObjFacturaProntoPago.UUIDRelacionados = New List(Of String) Select Case ObjFacturaProntoPago.TipoDocto Case "Ing" ObjFacturaProntoPago.TipoDocumento = "Factura" Case "REM" ObjFacturaProntoPago.TipoDocumento = "Remision" Case "Cot" ObjFacturaProntoPago.TipoDocumento = "Cotizacion" Case "Egs" ObjFacturaProntoPago.TipoDocumento = "Nota de Crédito" Case "Dev" ObjFacturaProntoPago.TipoDocumento = "Nota de Devolución" Case Else ObjFacturaProntoPago.TipoDocumento = "" End Select ObjFacturaProntoPago.FechaPago = NowADS() Dim DtVentasNC As DataTable = InicializaDTVentasNCProntoPago() Dim TotalImporte As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("TotalImporte") Dim ImporteIVA As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("ImporteIVA") Dim ImporteRetIVA As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("ImporteRetIVA") Dim ImporteRetISR As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("ImporteRetISR") Dim ImporteIEPS As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("ImporteIEPS") Dim Descuento As Decimal = ObjFacturaProntoPago.DtDetalle.SUMD("Descuento") Dim Amortizacion As Decimal = 0 Dim Total As Decimal = (TotalImporte + ImporteIVA + ImporteIEPS) - (ImporteRetIVA + ImporteRetISR + Descuento + Amortizacion) 'DETALLES ObjFacturaProntoPago.SubTotal = TotalImporte ObjFacturaProntoPago.Descuento = Descuento ObjFacturaProntoPago.Amortizacion = Amortizacion ObjFacturaProntoPago.IVA = ImporteIVA ObjFacturaProntoPago.RetIVA = ImporteRetIVA ObjFacturaProntoPago.RetISR = ImporteRetISR ObjFacturaProntoPago.IEPS = ImporteIEPS ObjFacturaProntoPago.Total = Total ObjFacturaProntoPago.TotalOtrosConceptos = 0 Dim Drt As DataRow = DtVentasNC.NewRow Drt("CveVenta") = ObjFactura.CveVenta Drt("Importe") = ObjFactura.DescuentoProntoPago Drt("FolioFiscal") = ObjFactura.FolioFiscal DtVentasNC.Rows.Add(Drt) DtVentasNC.AcceptChanges() ObjFacturaProntoPago.DtVentasRelacionadas = New DataTable ObjFacturaProntoPago.DtVentasRelacionadas.Columns.Add("CveVenta", GetType(Integer)) ObjFacturaProntoPago.DtVentasNC = DtVentasNC ObjFacturaProntoPago.Timbre = PreParaTimbre(ObjFacturaProntoPago) ObjFacturaProntoPago.CveTipoVenta = 8 'PRONTO PAGO Resp = ObjFacturaProntoPago.EmitirFactura(False, Transac:=SqlTransaccion) Retorno.ObjFacturaProntoPago = ObjFacturaProntoPago Catch ex As Exception Resp.CveVenta = -1 Resp.TieneError = True OnError("Ocurrio un error al generar la nota de credito de pronto pago", ex) End Try Retorno.Mensaje = Resp Return Retorno End Function Private Sub AgregaTempDTNCProntoPago(ByRef TmpDT As DataTable, CvePS As Integer, PS As String, Codigo As String, CodigoPS As String, CveTipoPS As Integer, CveTipoInvPS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CveProyecto As Integer, CveSubProyecto As Integer, Obs As String, Cantidad As Double, PU As Double, PorcentajeIVA As Double, ImporteIVA As Double, PorcentajeRetIVA As Double, ImporteRetIVA As Double, PorcentajeRetISR As Double, ImporteRetISR As Double, PorcentajeIEPS As Double, ImporteIEPS As Double, TipoDescuento As Integer, Descuento As Double, Total As Double, Serie As String, TiempoEntrega As String, CvePresupuestoIngreso As Integer, EntregaDirecta As Integer, SATClaveProdServ As String, SATClaveUM As String, CveContratoDetalle As Integer, CveVentaDetalle As Integer, CveMovimientoDetallePedido As Integer, CveOrdenCompraDetalle As Integer, CveVentaDetalleRemision As Integer, CveVentaDetalleCotizacion As Integer, CodigoObjetoImpuesto As String) Dim Row As DataRow = Nothing Row = TmpDT.NewRow() Row("Consec") = TmpDT.Rows.Count + 1 Row("Orden") = TmpDT.Rows.Count + 1 Row("CvePS") = CvePS Row("PS") = PS Row("Codigo") = Codigo Row("CodigoPS") = CodigoPS Row("CveTipoPS") = CveTipoPS Row("CveTipoInvPS") = CveTipoInvPS Row("CveUM") = CveUM Row("UM") = UM Row("CveClasificacion") = CveClasificacion Row("Clasificacion") = Clasificacion Row("CveProyecto") = CveProyecto Row("Proyecto") = "" Row("CveSubProyecto") = CveSubProyecto Row("SubProyecto") = "" Row("Obs") = Obs Row("Cantidad") = Cantidad Row("PU") = Math.Round(PU, 6) Row("PorcentajeIVA") = PorcentajeIVA Row("IVA") = PorcentajeIVA Row("ImporteIVA") = Math.Round(ImporteIVA, 2) Row("PorcentajeRetIVA") = PorcentajeRetIVA Row("ImporteRetIVA") = Math.Round(ImporteRetIVA, 2) Row("PorcentajeRetISR") = PorcentajeRetISR Row("ImporteRetISR") = Math.Round(ImporteRetISR, 2) Row("PorcentajeIEPS") = PorcentajeIEPS Row("ImporteIEPS") = Math.Round(ImporteIEPS, 2) Row("IEPS") = Math.Round(ImporteIEPS, 2) Row("TipoDescuento") = TipoDescuento Row("Descuento") = Math.Round(Descuento, 2) Row("Total") = Math.Round(Total, 2) Row("TotalImporte") = Math.Round(Total, 2) Row("TotalConImpuestos") = (Row("Total").ToString().ToDecimal() - Row("Descuento").ToString().ToDecimal() + Row("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Row("Serie") = Serie Row("TiempoEntrega") = TiempoEntrega Row("CvePresupuestoIngreso") = CvePresupuestoIngreso Row("EntregaDirecta") = EntregaDirecta Row("SATClaveProdServ") = SATClaveProdServ Row("SATClaveUM") = SATClaveUM Row("CodigoObjetoImpuesto") = CodigoObjetoImpuesto 'Contratos Row("CveContratoDetalle") = CveContratoDetalle Row("CveVentaDetalle") = CveVentaDetalle Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle Row("CveVentaDetalleRemision") = CveVentaDetalleRemision Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion Row("CveActivoFijo") = -1 TmpDT.Rows.Add(Row) End Sub Private Sub CargaImpuestosProntoPago(ByRef ObjFacturaDevolucion As Modelos.Factura, ObjFactura As Modelos.Factura, ClienteDesglosaIEPS As Boolean, ClienteRetIVA As Decimal, ClienteRetISR As Decimal) Dim DtImpuestos As New DataTable DtImpuestos.Columns.Add("ImportePU", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteTotal", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetIVA", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteRetISR", GetType(Decimal)) DtImpuestos.Columns.Add("PorcentajeIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("ImporteIEPS", GetType(Decimal)) DtImpuestos.Columns.Add("CveSubProyecto", GetType(Integer)) DtImpuestos.AcceptChanges() Dim AcumuladoNC As Decimal = 0 DtImpuestos.Merge(CargaDtImpuestosNCProntoPago(ObjFactura.CveVenta, ObjFactura.DescuentoProntoPago), True, MissingSchemaAction.Ignore) DtImpuestos = CargaTotalesImpuestosProntoPago(DtImpuestos) Dim DrSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, ObjFacturaDevolucion.CveSubProyecto).Rows(0) Dim Cantidad As Decimal = 1 Dim CveProyecto As Integer = DrSubProyecto("CveProyecto").ToString().ToEntero() Dim CveSubProyecto As Integer = DrSubProyecto("CveSubProyecto").ToString.ToEntero Dim SubProyecto As String = DrSubProyecto("SubProyecto").ToString Dim Proyecto As String = DrSubProyecto("Proyecto").ToString Dim CveSATNC As Integer Dim ArrayNC As String() = UsuarioActual.Empresa.Funcionalidad(591).Split(",".ToCharArray()) Dim NCBonificacion As Integer = 0 If ArrayNC.Length > 6 Then 'CONCEPTO DE PRONTO PAGO CveSATNC = ArrayNC(6).ToEntero() End If Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CveSATNC, AplicaParaVenta:=1).FiltroPrimero("") For Each Dr As DataRow In DtImpuestos.Rows AgregaTempDTNCProntoPago(ObjFacturaDevolucion.DtDetalle, DrPS("CvePS").ToString.ToEntero, DrPS("PS").ToString, DrPS("Codigo").ToString, DrPS("PSCodigo").ToString, DrPS("CveTipoPS").ToString.ToEntero, DrPS("Inv_CveMetodoInventario").ToString.ToEntero, DrPS("CveUM").ToString.ToEntero, DrPS("UnidadMedida").ToString, DrPS("CveClasificacion").ToString.ToEntero, DrPS("Clasificacion").ToString, CveProyecto, CveSubProyecto, "", Cantidad, Dr("ImportePU").ToString.ToDecimal, Dr("PorcentajeIVA").ToString.ToDecimal, Dr("ImporteIVA").ToString.ToDecimal, Dr("PorcentajeRetIVA").ToString.ToDecimal, Dr("ImporteRetIVA").ToString.ToDecimal, Dr("PorcentajeRetISR").ToString.ToDecimal, Dr("ImporteRetISR").ToString.ToDecimal, Dr("PorcentajeIEPS").ToString.ToDecimal, Dr("ImporteIEPS").ToString.ToDecimal, -1, 0.0, Dr("ImporteTotal").ToString.ToDecimal, "", "", -1, -1, DrPS("SATClavePS").ToString, DrPS("SATClaveUnidadMedida").ToString, -1, -1, -1, -1, -1, -1, DrPS("CodigoObjetoImpuesto").ToString()) Next End Sub Private Function CargaDtImpuestosNCProntoPago(CveVentaNC As Integer, Importe As Decimal) As DataTable Dim Total As Decimal = 0, SubTotal As Decimal = 0, Saldo As Decimal = 0 Dim TmpDT As DataTable = Nothing Dim ObjVentas As New ClsVentas If ObjVentas.GetVentaDetalle(CveVentaNC) Then TmpDT = ObjVentas.DtResultados TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D End If If ObjVentas.GetVenta(CveVentaNC, UsuarioActual.CveEmpresa, VerificaAlmacen:=False) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Total = ObjVentas.DtResultados()(0)("Total").ToString.ToDecimal SubTotal = ObjVentas.DtResultados()(0)("SubTotal").ToString.ToDecimal End If End If ObjVentas.Dispose() Dim DtImpuestosLocal As DataTable = TmpDT.FiltraParametros("", "", {"PorcentajeIVA", "PorcentajeRetIVA", "PorcentajeRetISR", "PorcentajeIEPS", "CveSubProyecto"}).Copy DtImpuestosLocal.Columns.Add("ImportePU", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteTotal", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteIVA", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteRetIVA", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteRetISR", GetType(Decimal)) DtImpuestosLocal.Columns.Add("ImporteIEPS", GetType(Decimal)) Dim ImporteReferencia As Decimal = Total Dim Porcentaje As Decimal = ((Importe * 100) / ImporteReferencia) / 100 Dim FiltroStr As String = "" Dim ImporteTotalConcepto As Decimal = 0 For Each Dr As DataRow In DtImpuestosLocal.Rows FiltroStr = String.Format("ISNULL(PorcentajeIVA,0) = {0} AND ISNULL(PorcentajeRetIVA,0) = {1} AND ISNULL(PorcentajeRetISR,0) = {2} AND ISNULL(PorcentajeIEPS,0) = {3} AND ISNULL(CveSubProyecto,0) = {4} ", Dr("PorcentajeIVA").ToString.ToDecimal, Dr("PorcentajeRetIVA").ToString.ToDecimal, Dr("PorcentajeRetISR").ToString.ToDecimal, Dr("PorcentajeIEPS").ToString.ToDecimal, Dr("CveSubProyecto")) ImporteTotalConcepto = Porcentaje * (TmpDT.SUMD("TotalImporte", FiltroStr) - TmpDT.SUMD("Descuento", FiltroStr)) Dr("ImportePU") = ImporteTotalConcepto.RoundSQL(6) Dr("ImporteTotal") = ImporteTotalConcepto.RoundSQL(2) Dr("ImporteIVA") = (ImporteTotalConcepto * Dr("PorcentajeIVA").ToString().ToDecimal()).RoundSQL(2) Dr("ImporteRetIVA") = (ImporteTotalConcepto * Dr("PorcentajeRetIVA").ToString().ToDecimal()).RoundSQL(2) Dr("ImporteRetISR") = (ImporteTotalConcepto * Dr("PorcentajeRetISR").ToString().ToDecimal()).RoundSQL(2) Dr("ImporteIEPS") = (ImporteTotalConcepto * Dr("PorcentajeIEPS").ToString().ToDecimal()).RoundSQL(2) 'Dr("ImporteIVA") = Math.Round(Porcentaje * TmpDT.SUM("ImporteIVA", FiltroStr), 2) 'Dr("ImporteRetIVA") = Math.Round(Porcentaje * TmpDT.SUM("ImporteRetIVA", FiltroStr), 2) 'Dr("ImporteRetISR") = Math.Round(Porcentaje * TmpDT.SUM("ImporteRetISR", FiltroStr), 2) 'Dr("ImporteIEPS") = Math.Round(Porcentaje * TmpDT.SUM("ImporteIEPS", FiltroStr), 2) '(Dr("ImporteTotal").ToString.ToDecimal - Dr("ImporteIVA").ToString.ToDecimal - Dr("ImporteRetIVA").ToString.ToDecimal - Dr("ImporteRetISR").ToString.ToDecimal - Dr("ImporteIEPS").ToString.ToDecimal) Next 'codigo para ajuste de centavo, si el importe total no cuadra con los totales Dim difTmp As Decimal = Importe - (DtImpuestosLocal.SUMD("ImporteTotal") + DtImpuestosLocal.SUMD("ImporteIVA") + DtImpuestosLocal.SUMD("ImporteIEPS") - DtImpuestosLocal.SUMD("ImporteRetIVA") - DtImpuestosLocal.SUMD("ImporteRetISR")) If Math.Abs(difTmp) >= 0.01 Then 'asusto la diferencia en el último concepto Dim ImporteAjustado As Decimal = DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal").ToString.ToDecimal + difTmp DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImporteTotal") = ImporteAjustado DtImpuestosLocal.Rows(DtImpuestosLocal.Rows.Count - 1)("ImportePU") = ImporteAjustado End If 'CARGA FACTURA A LA CUAL SE APLICA LA NC 'CargaNCDT(CveVentaNC, Importe.ToDecimal) Return DtImpuestosLocal End Function Private Function CargaTotalesImpuestosProntoPago(DtImpuestos As DataTable) As DataTable Dim query = From dr In DtImpuestos Group By PorcentajeIVA = dr("PorcentajeIVA").ToString.ToDecimal, PorcentajeRetIVA = dr("PorcentajeRetIVA").ToString.ToDecimal, PorcentajeRetISR = dr("PorcentajeRetISR").ToString.ToDecimal, PorcentajeIEPS = dr("PorcentajeIEPS").ToString.ToDecimal Into x = Group Select ImportePU = x.Sum(Function(s) s("ImportePU").ToString.ToDecimal), ImporteTotal = x.Sum(Function(s) s("ImporteTotal").ToString.ToDecimal), ImporteIVA = x.Sum(Function(s) Math.Round(s("ImporteIVA").ToString.ToDecimal, 2)), ' Math.Round(s("ImporteIVA").ToString.ToDecimal, 2)) * (1 + PorcentajeIEPS) * PorcentajeIVA, ImporteRetIVA = x.Sum(Function(s) Math.Round(s("ImporteRetIVA").ToString.ToDecimal, 2)),' Math.Round(s("ImportePU").ToString.ToDecimal, 2)) * PorcentajeRetIVA, ImporteRetISR = x.Sum(Function(s) Math.Round(s("ImporteRetISR").ToString.ToDecimal, 2)),' Math.Round(s("ImportePU").ToString.ToDecimal, 2)) * PorcentajeRetISR, ImporteIEPS = x.Sum(Function(s) Math.Round(s("ImporteIEPS").ToString.ToDecimal, 2)), 'Math.Round(s("ImportePU").ToString.ToDecimal, 2)) * PorcentajeIEPS, PorcentajeIVA = PorcentajeIVA, PorcentajeRetIVA = PorcentajeRetIVA, PorcentajeRetISR = PorcentajeRetISR, PorcentajeIEPS = PorcentajeIEPS Return query.QueryToDataTable(False) End Function Protected Function CreaDTDetalleNCProntoPago() As DataTable Dim TmpDT As New DataTable TmpDT.Columns.Add("CveVenta", GetType(Integer)) TmpDT.Columns.Add("Consec", GetType(Integer)) TmpDT.Columns.Add("Cantidad", GetType(Decimal)) TmpDT.Columns.Add("Codigo", GetType(String)) TmpDT.Columns.Add("CveUM", GetType(Integer)) TmpDT.Columns.Add("UM", GetType(String)) TmpDT.Columns.Add("SATClaveUM", GetType(String)) TmpDT.Columns.Add("CveClasificacion", GetType(Integer)) TmpDT.Columns.Add("Clasificacion", GetType(String)) TmpDT.Columns.Add("CvePS", GetType(Integer)) TmpDT.Columns.Add("PS", GetType(String)) TmpDT.Columns.Add("CodigoPS", GetType(String)) TmpDT.Columns.Add("SATClaveProdServ", GetType(String)) TmpDT.Columns.Add("NoIdentificacion", GetType(String)) TmpDT.Columns.Add("CveTipoPS", GetType(Integer)) TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer)) TmpDT.Columns.Add("Serie", GetType(String)) TmpDT.Columns.Add("CuentaPredial", GetType(String)) TmpDT.Columns.Add("Obs", GetType(String)) TmpDT.Columns.Add("TiempoEntrega", GetType(String)) TmpDT.Columns.Add("PU", GetType(Decimal)) TmpDT.Columns.Add("IVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteIVA", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal)) TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal)) TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal)) TmpDT.Columns.Add("IEPS", GetType(Decimal)) TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal)) TmpDT.Columns.Add("Descuento", GetType(Decimal)) TmpDT.Columns.Add("TipoDescuento", GetType(Integer)) TmpDT.Columns.Add("TotalImporte", GetType(Decimal)) TmpDT.Columns.Add("Total", GetType(Decimal)) 'Para uso del módulo contable TmpDT.Columns.Add("CveProyecto", GetType(Integer)) TmpDT.Columns.Add("Proyecto", GetType(String)) TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) TmpDT.Columns.Add("SubProyecto", GetType(String)) TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer)) 'TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto TmpDT.Columns.Add("CvePresupuestoIngreso", GetType(Integer)) TmpDT.Columns.Add("CveFuenteRecaudacion", GetType(Integer)) 'Contratos TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer)) 'Remisiones a Facturas TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleRemision", GetType(Integer)) TmpDT.Columns.Add("CveVentaDetalleCotizacion", GetType(Integer)) 'Pedido2 a Facturas TmpDT.Columns.Add("CveVentaDetallePedido2", GetType(Integer)) TmpDT.Columns.Add("Origen", GetType(Integer)) 'Ordenes Servicio TmpDT.Columns.Add("CveOS", GetType(Integer)) TmpDT.Columns.Add("CveOSDetalle", GetType(Integer)) TmpDT.Columns.Add("SeFacturara", GetType(Integer)) TmpDT.Columns.Add("Folio", GetType(Integer)) TmpDT.Columns.Add("Estatus", GetType(String)) 'Ordenamiento TmpDT.Columns.Add("Orden", GetType(Integer)) TmpDT.Columns.Add("TipoDocto", GetType(String)) 'OC TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer)) TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer)) TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal)) TmpDT.Columns.Add("CantidadFacturadaCot", GetType(Decimal)) TmpDT.Columns.Add("CantidadFacturadaPed2", GetType(Decimal)) TmpDT.Columns.Add("CantidadInventario", GetType(Decimal)) TmpDT.Columns.Add("ClaveSATFraccionArancelaria", GetType(String)) TmpDT.Columns.Add("ClaveSATUnidadAduana", GetType(String)) TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", GetType(String)) TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String)) TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String)) TmpDT.Columns.Add("CveTamaño", GetType(Integer)) TmpDT.Columns.Add("EsCargo", GetType(Boolean)) TmpDT.Columns.Add("CveMarca", GetType(Integer)) TmpDT.Columns.Add("CvePrecioLista", GetType(Integer)) TmpDT.Columns.Add("PrecioLista", GetType(String)) TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal)) TmpDT.Columns.Add("AFValorInicial", GetType(Decimal)) TmpDT.Columns.Add("NumTurnos", GetType(Decimal)) TmpDT.Columns("NumTurnos").DefaultValue = 0D TmpDT.Columns.Add("NumeroPedimento", GetType(String)) TmpDT.Columns.Add("TotalConImpuestos", GetType(Decimal)) TmpDT.Columns.Add("Costo", GetType(Decimal)) TmpDT.Columns("Costo").DefaultValue = 0D Return TmpDT End Function Private Function InicializaDTVentasNCProntoPago() As DataTable Dim DtVentasNC As New DataTable DtVentasNC.Columns.Add("CveVenta", GetType(Integer)) DtVentasNC.Columns.Add("Importe", GetType(Decimal)) DtVentasNC.Columns.Add("FolioFiscal", GetType(String)) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TC", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "TCCambioValuacion", .DataType = GetType(Decimal), .DefaultValue = 1}) DtVentasNC.Columns.Add(New DataColumn With {.ColumnName = "CveEstatusFactura", .DataType = GetType(Integer), .DefaultValue = -1}) Return DtVentasNC End Function #End Region Protected Sub LnkAplicarRNCDevolucion_Click(sender As Object, e As EventArgs) If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then Dim SaldoAlmacen As Decimal = 0 Dim PermiteCancelar As Boolean = True Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa, VerificaAlmacen:=True) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim RowVenta As DataRow = ObjVentas.DtResultados.Rows(0) SaldoAlmacen = RowVenta("SaldoAlmacen").ToString().ToDecimal() End If End If End Using Dim PuedeAplicarDevolucion As Boolean = False If SaldoAlmacen > 0 Then If DevolucionAlmacen = 0 Then PuedeAplicarDevolucion = True ElseIf DevolucionAlmacen.Contiene(1, 2) Then Alert("No se puede aplicar una devolución sobre el documento actual", TipoMensaje.MsgAdvertencia) End If ElseIf SaldoAlmacen <= 0 Then Alert("No se puede aplicar una devolución sobre el documento actual", TipoMensaje.MsgAdvertencia) End If If PuedeAplicarDevolucion Then RegistraScript("$('#DivAplicaRNCDevolucion').modal('show');") End If Else Dim DtNC As DataTable = Nothing Dim ObjMovtos As New ClsMovimientos() If ObjMovtos.GetAnticiposNCIxCCliente(CveCliente, CveMoneda:=-1) Then DtNC = ObjMovtos.DtResultados.FiltraParametros("Tipo = 'RNC' AND TipoRNC = 3 AND CveVenta > 0 and Saldo > 0", "Moneda,Fecha,Folio") End If ObjMovtos.Dispose() GvRNCDevoluciones.DataSource = DtNC GvRNCDevoluciones.DataBind() UpRNCDevolucion.Update() RegistraScript("$('#ModalAplicaRNCDevolucion').modal('show');") End If End Sub Protected Sub BtnAplicarRNCDevoluciones_Click(sender As Object, e As EventArgs) Me.AplicaRNCXDetalle = False If ListaRemisionesNC Is Nothing Then ListaRemisionesNC = New List(Of Modelos.Factura) Else ListaRemisionesNC.Clear() End If If ListaNCBonificacion Is Nothing Then ListaNCBonificacion = New List(Of Modelos.Factura) Else ListaNCBonificacion.Clear() End If Dim TotalRemNCAplicado As Decimal = 0 For Each GvRow As GridViewRow In GvRNCDevoluciones.Rows If GvRow.RowType = DataControlRowType.DataRow Then If GvRow.FCCheckBox("ChkAplicar").Checked Then Dim RemNC As New Modelos.Factura(UsuarioActual, GvRow.DataKey("CveVenta").ToEntero(), UsuarioActual.CveEmpresa, CargaDatosCliente:=False, CargaDatosRelacionados:=False) RemNC.TotalRemNCAplicado = GvRow.FCTextBox("TxtImporte").Text.ToDecimal() TotalRemNCAplicado += RemNC.TotalRemNCAplicado If RemNC.TotalRemNCAplicado <= 0 Then Alert($"Debe asignar un importe en la siguiente remisión: {RemNC.SerieFolio}", TipoMensaje.MsgAdvertencia) ListaRemisionesNC.Clear() Exit Sub End If ListaRemisionesNC.Add(RemNC) End If End If Next TxtImportesRemisionesNC.Text = TotalRemNCAplicado.FormatoNumero TxtNCImporte.Text = TotalRemNCAplicado.FormatoNumero UpModalRemisionesNC.Update() UpAplicarNC.Update() AplicarNC(-1, NCDescuento:=False, EsNCAmortizacion:=False, AplicaImpuestosLocales:=True, AplicaNuevoDocumento:=True, AplicoNCFacturaActual:=True, TipoDoctoNC:="Dev") RegistraScript("$('#ModalAplicaRNCDevolucion').modal('hide');") End Sub Protected Sub btnGuardarAdjunto_Click(sender As Object, e As System.EventArgs) Handles btnGuardarAdjunto.Click GuardarArchivoAdjunto() End Sub Private Sub GuardarArchivoAdjunto() If Not txtAdjuntar.getfiles().Archivos.Count > 0 Then Alert("Tiene que cargar un archivo.", TipoMensaje.MsgAdvertencia) Exit Sub End If If LblSerie.Text = "" Or TxtFolio.Text = "" Then Alert("Debe asignar una serie un folio antes de subir el archivo.", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim FileExtension As String = "-1" Dim Filesgral As List(Of Archivo) = txtAdjuntar.getfiles().Archivos Dim Filename As String = "" Dim fileItem As Archivo = Filesgral(0) Try FileExtension = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") Adjunto = String.Format("{0}-{1}.{2}", LblSerie.Text, TxtFolio.Text, FileExtension) Dim Path As String Path = String.Format("{0}Ventas", UsuarioActual.Empresa.Ruta) If Not Directory.Exists(Path) Then Directory.CreateDirectory(Path) End If Path += $"/{Adjunto}" If File.Exists(Path) Then File.Delete(Path) End If My.Computer.FileSystem.MoveFile(fileItem.FileUrl, Path) If File.Exists(Path) Then If Me.CveVenta > 0 Then Using ObjVta As New ClsVentas If ObjVta.UpdateVentaAdjunto(Me.CveVenta, Adjunto, UsuarioActual.CveEmpresa) Then Alert("Documento cargado", TipoMensaje.MsgInformacion) End If End Using Else Alert("Documento cargado", TipoMensaje.MsgInformacion) End If End If BtnAdjuntar.Visible = False BtnArchivoAdjunto.Text = Adjunto BtnArchivoAdjunto.Visible = True BtnEliminarAdjunto.Visible = True BtnReemplazarAdjunto.Visible = False Catch ex As Exception OnError("Error al cargar archivo", ex) End Try End Sub Protected Sub BtnArchivoAdjunto_Click(sender As Object, e As System.EventArgs) Handles BtnArchivoAdjunto.Click Dim ruta As String = HttpContext.Current.Request.ApplicationPath ruta = String.Format("{0}Ventas", UsuarioActual.Empresa.Ruta) ruta += $"/{Adjunto}" Dim Archivo As New System.IO.FileInfo(ruta) Try If Archivo IsNot Nothing Then If Archivo.Exists Then HttpContext.Current.Response.Clear() HttpContext.Current.Response.ClearContent() HttpContext.Current.Response.ContentType = "application/octet-stream" HttpContext.Current.Response.AppendHeader("Content-disposition", String.Format("attachment; filename={0}", Archivo.Name)) HttpContext.Current.Response.AddHeader("Content-Length", Archivo.Length.ToString()) HttpContext.Current.Response.TransmitFile(ruta) Response.Flush() ' send it to the client to download HttpContext.Current.Response.SuppressContent = True HttpContext.Current.ApplicationInstance.CompleteRequest() Response.End() Else Alert("El archivo no existe", TipoMensaje.MsgAdvertencia) End If End If Catch ex As Exception End Try End Sub Protected Sub BtnEliminarAdjunto_Click(sender As Object, e As System.EventArgs) Handles BtnEliminarAdjunto.Click Dim objVentas As New ClsVentas Dim Path As String Path = String.Format("{0}Ventas/{1}", UsuarioActual.Empresa.Ruta, Adjunto) If File.Exists(Path) Then File.Delete(Path) If Me.CveVenta > 0 Then Using ObjVta As New ClsVentas If ObjVta.UpdateVentaAdjunto(Me.CveVenta, "", UsuarioActual.CveEmpresa) Then Alert("Documento eliminado", TipoMensaje.MsgInformacion) End If End Using End If End If BtnAdjuntar.Visible = True BtnArchivoAdjunto.Text = "" BtnArchivoAdjunto.Visible = False BtnEliminarAdjunto.Visible = False End Sub Protected Sub LnkSolicitarCredito_Click(sender As Object, e As EventArgs) Handles LnkSolicitarCredito.Click If CveCliente <= 0 Then Alert("Debe seleccionar un cliente", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlVendedor.SelectedValue.ToEntero() <= 0 Then Alert("Debe seleccionar un vendedor", TipoMensaje.MsgAdvertencia) Exit Sub End If TxtImporteSolicitud.Text = "" DdlSolCreditoTipoDocto_SelectedIndexChanged(Nothing, EventArgs.Empty) RegistraScript("$('#DivModalSolicitarCredito').modal('show')") UpModalSolicitud.Update() End Sub Protected Sub BtnSolicitarCredito_Click(sender As Object, e As EventArgs) Handles BtnSolicitarCredito.Click If UsuarioActual.Empresa.Funcionalidad(595) = "3" Then RegistraScript("$('#DivModalSolicitarCredito').modal('hide')") 'si el documento existe generará If CveVenta > 0 Then Dim ObjVta As New ClsVentas If ObjVta.AddAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero(), TxtTotal.Text.ToDecimal(), 0, UsuarioActual.CveUsuario, 1, TipoDocumento:=DdlTipoComprobante.SelectedValue, DiasVencidos:=25, CveVenta:=CveVenta) Then RegistraScript("$('#DivModalSolicitarCredito').modal('hide')") Alert("La autorización se agregó correctamente.", TipoMensaje.MsgInformacion) 'signal Dim mensaje = "
    La autorización se agregó correctamente." ClsSisNotificaciones.EnviarAlerta("Autorización Crédito", mensaje, "100", Tipo:=TipoNotificacion.ToastInformacionB) End If ObjVta.Dispose() Else 'sino existe, solo lo cierra. se crea al guardar. Exit Sub End If Else Dim DiasVencidos As Integer = 0 Dim CveEstatus As Integer = 0 Dim TipoDocto As String = DdlSolCreditoTipoDocto.SelectedValue Dim CveTipoAutorizacion As Integer = DdlTipoAutorizacion.SelectedValue.ToEntero() If UsuarioActual.Empresa.Funcionalidad(595) <> "3" AndAlso CveTipoAutorizacion <= 0 Then Alert("Debe seleccionar un tipo de autorización", TipoMensaje.MsgAdvertencia) Exit Sub End If If CveTipoAutorizacion = 2 Then DiasVencidos = TxtDiasVencidos.Text.ToEntero() End If Dim Motivo As String = TxtMotivoAutorizacion.Text Dim CveTipoVenta As Integer = -1 If DdlTipoVentaSolCredito.SelectedValue.ToEntero() > 0 Then CveTipoVenta = DdlTipoVentaSolCredito.SelectedValue.ToEntero() End If If CveTipoVenta <= 0 AndAlso TipoDocto = "Egs" Then Alert("Debe seleccionar un tipo de venta", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim ObjPS As New ClsVentas If ObjPS.AddAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero(), TxtImporteSolicitud.Text.ToDecimal(), CveEstatus, UsuarioActual.CveUsuario, CveTipoAutorizacion, TipoDocumento:=DdlSolCreditoTipoDocto.SelectedValue, DiasVencidos:=DiasVencidos, Motivo:=Motivo, CveTipoVenta:=CveTipoVenta) Then RegistraScript("$('#DivModalSolicitarCredito').modal('hide')") Alert("La autorización se agregó correctamente.", TipoMensaje.MsgInformacion) 'signal Dim mensaje = "
    La autorización se agregó correctamente." ClsSisNotificaciones.EnviarAlerta("Autorización Crédito", mensaje, "100", Tipo:=TipoNotificacion.ToastInformacionB) End If ObjPS.Dispose() End If UpModalSolicitud.Update() End Sub Protected Sub DdlTipoAutorizacion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlTipoAutorizacion.SelectedIndexChanged DivImporteSolicitud.Visible = DdlTipoAutorizacion.SelectedValue = "1" DivDiasVencidos.Visible = DdlTipoAutorizacion.SelectedValue = "2" If Not UsuarioActual.Empresa.Funcionalidad(382) = "1" Then TxtDiasVencidos.Text = "25" End If UpModalSolicitud.Update() End Sub Protected Sub DdlSolCreditoTipoDocto_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlSolCreditoTipoDocto.SelectedIndexChanged Dim TipoDocto As String = DdlSolCreditoTipoDocto.SelectedValue.ToString() Select Case TipoDocto Case "Ing" If DdlTipoAutorizacion.Items.FindByValue("2") Is Nothing Then DdlTipoAutorizacion.Items.Insert(0, New ListItem("Vencimiento", "2")) DivMotivoAutorizacion.Visible = True End If DivTipoVentaSol.Visible = False Case "Egs" 'QUITAR LA DE VENCIMIENTO DdlTipoAutorizacion.Items.Remove(DdlTipoAutorizacion.Items.FindByValue("2")) DivMotivoAutorizacion.Visible = True DivTipoVentaSol.Visible = True DdlTipoVentaSolCredito.DataSource = GlobalDTTipoVenta(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' AND TipoDocto = 'Egs' AND CveTipoVenta NOT IN (7,9,10,11) ") DdlTipoVentaSolCredito.DataBind() DdlTipoVentaSolCredito.Items.Insert(0, New ListItem("Seleccione", "-1")) End Select UpModalSolicitud.Update() End Sub Protected Sub LnkEditarDir_Click(sender As Object, e As EventArgs) DdlDireccionEnvio.Enabled = True ChkDireccionEnvio.Enabled = True ChkDireccionEnvio.Checked = True ChkDireccionEnvio_CheckedChanged(ChkDireccionEnvio, EventArgs.Empty) 'DdlDireccionEnvio.Visible = True LnkEditarDir.Visible = False LnkAplicarDir.Visible = True End Sub Protected Sub LnkAplicarDir_Click(sender As Object, e As EventArgs) Dim ProcesoOK As Boolean = True Dim ObjVentas As New ClsVentas() If Not ObjVentas.UpdateDireccionEnvioVenta(CveVenta, DdlDireccionEnvio.SelectedValue.ToEntero, UsuarioActual.CveEmpresa) Then ProcesoOK = False End If ObjVentas.Dispose() If ProcesoOK Then Alert("La dirección se ha actualizado correctamente.", TipoMensaje.MsgInformacion) LnkAplicarDir.Visible = False LnkEditarDir.Visible = True End If End Sub Protected Sub RdTipoPersona_SelectedIndexChanged(sender As Object, e As EventArgs) DVRegimenSociedad.Visible = False DivRazonSocial2.Attributes.Add("class", "col-md-12") DivRazonSocial2.Attributes.Add("class", "col-md-8") DVRegimenSociedad.Visible = RdTipoPersona.SelectedValue = "1" If TxtRFCCliente.Text.ToUpper = "XAXX010101000" Then DdlRegimenFiscalCliente.DataSource = GlobalDTRegimenesFiscales().FiltraParametros("CveRegimenFiscal = 11") DdlRegimenFiscalCliente.DataBind() Else Dim dt As DataTable = GlobalDTRegimenesFiscales(RdTipoPersona.SelectedValue.ToEntero).FiltraParametros("", "CodigoRegimenFiscal") Dim Val As String = "" If dt IsNot Nothing AndAlso dt.Rows.Count > 0 Then 'verifico que sino existe el valor. lo limpie Val = dt.FiltroPrimeroValor("CveRegimenFiscal", "CveRegimenFiscal = " & DdlRegimenFiscalCliente.SelectedValue) If Val = "" Then 'sino encuentra valor, lo limpia DdlRegimenFiscalCliente.Items.Clear() DdlRegimenFiscalCliente.SelectedValue = Nothing End If End If DdlRegimenFiscalCliente.DataSource = dt DdlRegimenFiscalCliente.DataBind() DdlRegimenFiscalCliente.SelectedValueExist(Val) End If DdlRegimenFiscalCliente.Items.Insert(0, New ListItem("Seleccione", "-1")) If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then 'PERSONA MORAL If RdTipoPersona.SelectedValue = "1" Then DdlRegimenFiscalCliente.SelectedValueExist("1") DdlRegimenFiscalCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) 'PERSONA FISICA Else If TxtRFCCliente.Text.Trim() = "XAXX010101000" Then DdlRegimenFiscalCliente.SelectedValueExist("11") Else DdlRegimenFiscalCliente.SelectedValueExist("9") End If DdlRegimenFiscalCliente_SelectedIndexChanged(Nothing, EventArgs.Empty) End If DdlUsoCFDICliente.SelectedValueExist("3") Else CargaComboCFDICliente() End If UpAgregarCliente.Update() End Sub #Region "C A R T A - P O R T E" Public Sub CargarCamiones() TxtFechaEntregaCP.Text = NowADS().Date.ToString("dd/MM/yyyy HH:mm") TxtFechaLlegadaCP.Text = NowADS().Date.ToString("dd/MM/yyyy HH:mm") 'NowADS().Date.AddDays(1).AddMinutes(-1).ToString("dd/MM/yyyy HH:mm") DdlConfigAuto.Items.Clear() DdlUnidadCamion.Items.Clear() DdlChofer.Items.Clear() DdlChofer.DataSource = GlobalDTChoferes(UsuarioActual.CveEmpresa) DdlChofer.DataBind() DdlChofer.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) DdlUnidadCamion.DataSource = GlobalDTInvCamiones(UsuarioActual.CveEmpresa, CveTipoCamion:=1) DdlUnidadCamion.DataBind() DdlUnidadCamion.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) DdlConfigAuto.DataSource = GlobalDTGralCartaPorteConfigAutoTransportes DdlConfigAuto.DataBind() DdlConfigAuto.Items.Insert(0, New ListItem("Seleccione una", "-1")) DdlRemolque1.DataSource = GlobalDTInvCamiones(UsuarioActual.CveEmpresa, CveTipoCamion:=2) DdlRemolque1.DataBind() DdlRemolque1.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) UpEmitirTransitorio.Update() End Sub Protected Sub DdlUnidadCamionActivoFijo_SelectedIndexChanged(sender As Object, e As EventArgs) ChkEmitirCartaPorte.Checked = True DvRemolque1.Visible = False DvRemolque2.Visible = False DdlRemolque1.SelectedValueExist(-1) DdlRemolque2.SelectedValueExist(-1) If DdlUnidadCamion.SelectedValue.ToEntero > 0 Then Dim CveConfig As String = GlobalDTInvCamiones(UsuarioActual.CveEmpresa, CveCamion:=DdlUnidadCamion.SelectedValue.ToEntero, CveTipoCamion:=1).FiltroPrimeroValor("CveConfigAutoTransporte") DdlConfigAuto.SelectedValueExist(CveConfig) DdlConfigAuto_SelectedIndexChanged(Nothing, Nothing) End If UpEmitirTransitorio.Update() End Sub Protected Sub DdlConfigAuto_SelectedIndexChanged(sender As Object, e As EventArgs) ValidaConfiguracionVehiculo() End Sub Public Sub CargaVentaCortePorte(CveVenta As Integer) Dim CveEntregaAlmacen As Integer = -1 Dim CveDireccionOrigen As Integer = -1 Dim CveDireccionDestino As Integer = -1 Dim CveCamionRemolque1 As Integer = -1 Dim CveCamionRemolque2 As Integer = -1 Dim CveConfigAutoTransporte As Integer = -1 Using ObjGral As New ClsGenerales If ObjGral.GetGralTimbre(-1, "Ing", MinFecha, MaxFecha, 0, UsuarioActual.CveEmpresa, -1, CveVenta:=CveVenta) AndAlso ObjGral.DtResultados.Rows.Count > 0 Then Dim RowCP As DataRow = ObjGral.DtResultados.Rows(0) Me.CveTimbreCartaPorteVenta = RowCP("CveTimbre").ToString().ToEntero() If CveTimbreCartaPorteVenta > 0 Then ChkEmitirCartaPorte.Checked = True CveEntregaAlmacen = RowCP("CveEntregaAlmacen").ToString().ToEntero() CveDireccionOrigen = RowCP("CveDireccionOrigen").ToString().ToEntero() CveDireccionDestino = RowCP("CveDireccionDestino").ToString().ToEntero() TxtFechaEntregaCP.Text = RowCP("FechaEntrega").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm") TxtFechaLlegadaCP.Text = RowCP("FechaLlegada").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm") TxtDistancia.Text = RowCP("Distancia").ToString() DdlChofer.SelectedValueExist(RowCP("CveChofer").ToString()) DdlUnidadCamion.SelectedValueExist(RowCP("CveCamion").ToString()) CveCamionRemolque1 = RowCP("CveCamionRemolque1").ToString().ToEntero() CveCamionRemolque2 = RowCP("CveCamionRemolque2").ToString().ToEntero() CveConfigAutoTransporte = RowCP("CveConfigAutoTransporte").ToString().ToEntero() End If End If If ChkEmitirCartaPorte.Checked AndAlso CveEntregaAlmacen > 0 AndAlso ObjGral.GetEntregaAlmacenRutaDetalle(CveEntregaAlmacen) Then DtMercancias = ObjGral.DtResultados End If End Using If ChkEmitirCartaPorte.Checked AndAlso CveCliente > 0 Then Dim ObjClientes As New ClsClientes If ObjClientes.DireccionEnvioGet(-1, CveCliente, -1) Then TmpDTDireccionCP = ObjClientes.DtResultados.FiltraParametros(String.Format("Estatus = 1")) End If ObjClientes.Dispose() DdlDireccionOrigen.DataSource = TmpDTDireccionCP DdlDireccionOrigen.DataBind() DdlDireccionDestino.DataSource = TmpDTDireccionCP DdlDireccionDestino.DataBind() DdlDireccionOrigen.SelectedValueExist(CveDireccionOrigen.ToString()) DdlDireccionDestino.SelectedValueExist(CveDireccionDestino.ToString()) GvMercanciasCP.DataSource = DtMercancias GvMercanciasCP.DataBind() If DdlUnidadCamion.SelectedValue.ToEntero() > 0 Then If CveConfigAutoTransporte > 0 Then DvRemolque1.Visible = False DvRemolque2.Visible = False DdlRemolque1.SelectedValueExist(-1) DdlRemolque2.SelectedValueExist(-1) DdlConfigAuto.SelectedValueExist(CveConfigAutoTransporte.ToString()) DdlConfigAuto_SelectedIndexChanged(DdlConfigAuto, EventArgs.Empty) If CveCamionRemolque1 > 0 Then DdlRemolque1.SelectedValueExist(CveCamionRemolque1.ToString()) DdlRemolque1_SelectedIndexChanged(DdlRemolque1, EventArgs.Empty) If CveCamionRemolque2 > 0 Then DdlRemolque2.SelectedValueExist(CveCamionRemolque2.ToString()) End If End If End If End If Else TmpDTDireccionCP = Nothing End If HabilitarControlesCartaPorte(False) UpEmitirTransitorio.Update() End Sub Private Sub HabilitarControlesCartaPorte(Habilitar As Boolean) TxtFechaEntregaCP.Enabled = Habilitar TxtFechaLlegadaCP.Enabled = Habilitar DdlChofer.Enabled = Habilitar DdlUnidadCamion.Enabled = Habilitar DdlConfigAuto.Enabled = Habilitar DdlRemolque1.Enabled = Habilitar DdlRemolque2.Enabled = Habilitar DdlDireccionOrigen.Enabled = Habilitar DdlDireccionDestino.Enabled = Habilitar TxtDistancia.Enabled = Habilitar LnkAgregarMercancia.Enabled = Habilitar GvMercanciasCP.Columns(3).Visible = Habilitar End Sub Private Sub ValidaConfiguracionVehiculo() DvRemolque1.Visible = False DvRemolque2.Visible = False DdlRemolque1.SelectedValueExist(-1) DdlRemolque2.SelectedValueExist(-1) If DdlConfigAuto.SelectedValue.ToEntero > 0 Then Dim Remolque As String = GlobalDTGralCartaPorteConfigAutoTransportes.FiltroPrimeroValor("Remolque", $" CveConfigAutoTransporte ='{DdlConfigAuto.SelectedValue}'") If Remolque <> "" Then If Remolque = "1" Then RequiereRemolque = True MostrarRemolques = True End If If Remolque = "0, 1" Then RequiereRemolque = False MostrarRemolques = True End If If Remolque = "0" Then RequiereRemolque = False MostrarRemolques = False End If End If Else RequiereRemolque = False MostrarRemolques = False End If If RequiereRemolque Or MostrarRemolques Then DvRemolque1.Visible = True End If If Not RequiereRemolque Then DvConfiguracionVeiculo.Visible = False Else DvConfiguracionVeiculo.Visible = True End If UpEmitirTransitorio.Update() End Sub Protected Sub DdlRemolque1_SelectedIndexChanged(sender As Object, e As EventArgs) DdlRemolque2.Items.Clear() If DdlRemolque1.SelectedValue.ToEntero > 0 Then DvRemolque2.Visible = True DdlRemolque2.DataSource = GlobalDTInvCamiones(UsuarioActual.CveEmpresa, CveTipoCamion:=2) DdlRemolque2.DataBind() Else DvRemolque2.Visible = False End If DdlRemolque2.Items.Insert(0, New ListItem("Seleccione uno", "-1")) UpEmitirTransitorio.Update() End Sub Private Function GuardarCartaPorte(ByRef ObjFactura As Modelos.Factura, ByRef ObjGral As ClsGenerales, ByRef ObjClientes As ClsClientes) As Integer Dim ErrorProceso As Boolean = False Dim CveTimbre As Integer = -1 Try Dim CveDireccionOrigen As Integer = DdlDireccionOrigen.SelectedValue.ToEntero Dim CveDireccionDestino As Integer = DdlDireccionDestino.SelectedValue.ToEntero 'If SucursalOrigenCP IsNot Nothing Then ' CveDireccionOrigen = ObjClientes.DireccionEnvioAdd(-1, SucursalOrigenCP.Direccion, SucursalOrigenCP.NoExt, SucursalOrigenCP.NoInt, SucursalOrigenCP.Colonia, SucursalOrigenCP.Municipio, SucursalOrigenCP.Estado, SucursalOrigenCP.CP.ToEntero(), "", UsuarioActual.CveUsuario, 1, -1, "", CveEstado:=SucursalOrigenCP.CveEstado, CvePais:=SucursalOrigenCP.CvePais, CveEmpresa:=UsuarioActual.CveEmpresa) 'End If 'If SucursalDestinoCP IsNot Nothing Then ' CveDireccionDestino = ObjClientes.DireccionEnvioAdd(-1, SucursalDestinoCP.Direccion, SucursalDestinoCP.NoExt, SucursalDestinoCP.NoInt, SucursalDestinoCP.Colonia, SucursalDestinoCP.Municipio, SucursalDestinoCP.Estado, SucursalDestinoCP.CP.ToEntero(), "", UsuarioActual.CveUsuario, 1, -1, "", CveEstado:=SucursalDestinoCP.CveEstado, CvePais:=SucursalDestinoCP.CvePais, CveEmpresa:=UsuarioActual.CveEmpresa) 'End If If Not (CveDireccionOrigen > 0 And CveDireccionDestino > 0) Then ErrorProceso = True Return -1 End If Dim Fechallegada As DateTime = TxtFechaLlegadaCP.Text.ToDateTime() Dim FechaEntrega As DateTime = TxtFechaEntregaCP.Text.ToDateTime() Dim Distancia As Integer = TxtDistancia.Text.ToEntero() Dim CveEntregaAlmacen As Integer = ObjGral.AddInvEntregaAlmacenRuta(DdlSubProyectoDatos.SelectedValue.ToEntero, CveDireccionOrigen, CveDireccionDestino, -1, DdlChofer.SelectedValue.ToEntero, DdlUnidadCamion.SelectedValue.ToEntero, FechaEntrega, Fechallegada, "I", "-1", "-1", Fechallegada, 1, 1, Distancia, CveConfigAutoTransporte:=DdlConfigAuto.SelectedValue.ToEntero, CveCamionRemolque1:=DdlRemolque1.SelectedValue.ToEntero, CveCamionRemolque2:=DdlRemolque2.SelectedValue.ToEntero) If CveEntregaAlmacen > 0 Then For Each RowPS As DataRow In ObjFactura.DtMercancias.Rows If Not ObjGral.AddEntregaAlmacenRutaDetalle(CveEntregaAlmacen, RowPS("CvePS").ToString().ToEntero, RowPS("Cantidad").ToString().ToDecimal, RowPS("CveUnidadMedida").ToString().ToEntero, UsuarioActual.CveUsuario, RowPS("PesoKg").ToString().ToDecimal) Then ErrorProceso = True Exit For End If Next CveTimbre = ObjGral.AddGralTimbre("Ing", DdlSubProyectoDatos.SelectedValue.ToEntero, TxtFecha.Text.ToDate, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveEntregaAlmacen:=CveEntregaAlmacen, AplicaCP:=True, CveVenta:=ObjFactura.CveVenta) If Not CveTimbre > 0 Then ErrorProceso = True End If Else ErrorProceso = True End If Catch ex As Exception ErrorProceso = True OnError("Ocurrió un error al guardar los datos de la carta porte", ex) End Try If Not ErrorProceso Then Return CveTimbre Else Return -1 End If End Function Property RequiereRemolque As Boolean Get If ViewState("RequiereRemolque") Is Nothing Then ViewState("RequiereRemolque") = False End If Return Boolean.Parse(ViewState("RequiereRemolque").ToString) End Get Set(value As Boolean) ViewState("RequiereRemolque") = value End Set End Property Property MostrarRemolques As Boolean Get If ViewState("MostrarRemolques") Is Nothing Then ViewState("MostrarRemolques") = False End If Return Boolean.Parse(ViewState("MostrarRemolques").ToString) End Get Set(value As Boolean) ViewState("MostrarRemolques") = value End Set End Property 'Property SucursalOrigenCP As Modelos.SucursalModel ' Get ' If ViewState("SucursalOrigenCP") Is Nothing Then ' Return Nothing ' End If ' Return DirectCast(ViewState("SucursalOrigenCP"), Modelos.SucursalModel) ' End Get ' Set(value As Modelos.SucursalModel) ' ViewState("SucursalOrigenCP") = value ' End Set 'End Property 'Property SucursalDestinoCP As Modelos.SucursalModel ' Get ' If ViewState("SucursalDestinoCP") Is Nothing Then ' Return Nothing ' End If ' Return DirectCast(ViewState("SucursalDestinoCP"), Modelos.SucursalModel) ' End Get ' Set(value As Modelos.SucursalModel) ' ViewState("SucursalDestinoCP") = value ' End Set 'End Property 'Private Sub CargaDireccionSucursalOrigen(Row As DataRow) ' If SucursalOrigenCP Is Nothing Then ' SucursalOrigenCP = New Modelos.SucursalModel ' Else ' SucursalOrigenCP = Nothing ' SucursalOrigenCP = New Modelos.SucursalModel ' End If ' Dim SBDomicilioSucursal As New StringBuilder() ' Try ' If Row IsNot Nothing Then ' SucursalOrigenCP.Direccion = Row("Calle").ToString() ' SucursalOrigenCP.NoExt = Row("NoExt").ToString() ' SucursalOrigenCP.NoInt = Row("NoInt").ToString() ' SucursalOrigenCP.Colonia = Row("Colonia").ToString() ' SucursalOrigenCP.CP = Row("CP").ToString() ' SucursalOrigenCP.Municipio = Row("Municipio").ToString() ' SucursalOrigenCP.CveEstado = Row("CveEstado").ToString().ToEntero() ' SucursalOrigenCP.Estado = Row("Estado").ToString() ' SucursalOrigenCP.CvePais = Row("CvePais").ToString().ToEntero() ' SucursalOrigenCP.Pais = Row("Pais").ToString() ' SBDomicilioSucursal.AppendFormat("{0}", Row("Calle").ToString()) ' If Row("NoInt").ToString().Length > 0 Then ' SBDomicilioSucursal.AppendFormat(", No.Int: {0}", Row("NoInt").ToString()) ' End If ' If Row("Colonia").ToString().Length > 0 Then ' SBDomicilioSucursal.AppendFormat(", Col: {0}", Row("Colonia").ToString()) ' End If ' If Row("CP").ToString().ToEntero > 0 Then ' SBDomicilioSucursal.AppendFormat(", CP: {0}", Row("CP").ToString()) ' End If ' If Row("NoExt").ToString().Length > 0 Then ' SBDomicilioSucursal.AppendFormat(" No.Ext: {0}", Row("NoExt").ToString()) ' End If ' Dim CiudadSucursal As String = String.Format("{0},{1}", Row("Municipio").ToString(), Row("Estado").ToString()) ' If CiudadSucursal.Length > 0 Then ' SBDomicilioSucursal.AppendFormat(", {0}", CiudadSucursal) ' End If ' If Row("Pais").ToString().Length > 0 Then ' SBDomicilioSucursal.AppendFormat(", {0}", Row("Pais").ToString()) ' End If ' If Not String.IsNullOrEmpty(Row("Telefono").ToString()) Then ' SucursalOrigenCP.TelefonoSucursal = Row("Telefono").ToString() ' End If ' End If ' Catch ex As Exception ' SBDomicilioSucursal.Clear() ' GuardaLog(ex.ToString()) ' End Try ' 'TxtOrigenCP.Text = SBDomicilioSucursal.ToString ' UpEmitirTransitorio.Update() 'End Sub Protected Sub DdlDireccionEnvio_SelectedIndexChanged(sender As Object, e As EventArgs) 'If SucursalDestinoCP Is Nothing Then ' SucursalDestinoCP = New Modelos.SucursalModel 'Else ' SucursalDestinoCP = Nothing ' SucursalDestinoCP = New Modelos.SucursalModel 'End If 'If TmpDTEnvioDireccion IsNot Nothing AndAlso TmpDTEnvioDireccion.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())).Rows.Count > 0 Then ' Dim Row As DataRow = TmpDTEnvioDireccion.FiltroPrimero(String.Format("CveDireccionEnvio = {0}", DdlDireccionEnvio.SelectedValue.ToEntero())) ' If Row IsNot Nothing Then ' SucursalDestinoCP.Direccion = Row("EnvioDireccion").ToString() ' SucursalDestinoCP.Colonia = Row("EnvioColonia").ToString() ' SucursalDestinoCP.Municipio = Row("EnvioCiudad").ToString() ' SucursalDestinoCP.CveEstado = Row("CveEstado").ToString().ToEntero() ' SucursalDestinoCP.Estado = Row("EnvioEstado").ToString() ' SucursalDestinoCP.CvePais = Row("CvePais").ToString().ToEntero() ' SucursalDestinoCP.Pais = Row("Pais").ToString() ' SucursalDestinoCP.CP = Row("EnvioCP").ToString() ' TxtDestinoCP.Text = String.Format("{0} col. {1},CP:{2}, {3},{4},{5}", SucursalDestinoCP.Direccion, SucursalDestinoCP.Colonia, SucursalDestinoCP.CP, SucursalDestinoCP.Municipio, SucursalDestinoCP.Estado, SucursalDestinoCP.Pais) ' Else ' TxtDestinoCP.Text = "" ' End If 'Else ' TxtDestinoCP.Text = "" 'End If UpEmitirTransitorio.Update() End Sub 'Protected Sub DdlDireccionOrigen_SelectedIndexChanged(sender As Object, e As EventArgs) ' If SucursalOrigenCP Is Nothing Then ' SucursalOrigenCP = New Modelos.SucursalModel ' Else ' SucursalOrigenCP = Nothing ' SucursalOrigenCP = New Modelos.SucursalModel ' End If ' If TmpDTDireccionCP IsNot Nothing AndAlso TmpDTDireccionCP.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionOrigen.SelectedValue.ToEntero())).Rows.Count > 0 Then ' Dim Row As DataRow = TmpDTDireccionCP.FiltroPrimero(String.Format("CveDireccionEnvio = {0}", DdlDireccionOrigen.SelectedValue.ToEntero())) ' If Row IsNot Nothing Then ' SucursalOrigenCP.Direccion = Row("EnvioDireccion").ToString() ' SucursalOrigenCP.Colonia = Row("EnvioColonia").ToString() ' SucursalOrigenCP.Municipio = Row("EnvioCiudad").ToString() ' SucursalOrigenCP.CveEstado = Row("CveEstado").ToString().ToEntero() ' SucursalOrigenCP.Estado = Row("EnvioEstado").ToString() ' SucursalOrigenCP.CvePais = Row("CvePais").ToString().ToEntero() ' SucursalOrigenCP.Pais = Row("Pais").ToString() ' SucursalOrigenCP.CP = Row("EnvioCP").ToString() ' 'TxtDestinoCP.Text = String.Format("{0} col. {1},CP:{2}, {3},{4},{5}", SucursalDestinoCP.Direccion, SucursalDestinoCP.Colonia, SucursalDestinoCP.CP, SucursalDestinoCP.Municipio, SucursalDestinoCP.Estado, SucursalDestinoCP.Pais) ' Else ' 'TxtDestinoCP.Text = "" ' End If ' Else ' 'TxtDestinoCP.Text = "" ' End If ' UpEmitirTransitorio.Update() 'End Sub 'Protected Sub DdlDireccionDestino_SelectedIndexChanged(sender As Object, e As EventArgs) ' If SucursalDestinoCP Is Nothing Then ' SucursalDestinoCP = New Modelos.SucursalModel ' Else ' SucursalDestinoCP = Nothing ' SucursalDestinoCP = New Modelos.SucursalModel ' End If ' If TmpDTDireccionCP IsNot Nothing AndAlso TmpDTDireccionCP.FiltraParametros(String.Format("CveDireccionEnvio = {0}", DdlDireccionDestino.SelectedValue.ToEntero())).Rows.Count > 0 Then ' Dim Row As DataRow = TmpDTDireccionCP.FiltroPrimero(String.Format("CveDireccionEnvio = {0}", DdlDireccionDestino.SelectedValue.ToEntero())) ' If Row IsNot Nothing Then ' SucursalDestinoCP.Direccion = Row("EnvioDireccion").ToString() ' SucursalDestinoCP.Colonia = Row("EnvioColonia").ToString() ' SucursalDestinoCP.Municipio = Row("EnvioCiudad").ToString() ' SucursalDestinoCP.CveEstado = Row("CveEstado").ToString().ToEntero() ' SucursalDestinoCP.Estado = Row("EnvioEstado").ToString() ' SucursalDestinoCP.CvePais = Row("CvePais").ToString().ToEntero() ' SucursalDestinoCP.Pais = Row("Pais").ToString() ' SucursalDestinoCP.CP = Row("EnvioCP").ToString() ' 'TxtDestinoCP.Text = String.Format("{0} col. {1},CP:{2}, {3},{4},{5}", SucursalDestinoCP.Direccion, SucursalDestinoCP.Colonia, SucursalDestinoCP.CP, SucursalDestinoCP.Municipio, SucursalDestinoCP.Estado, SucursalDestinoCP.Pais) ' Else ' 'TxtDestinoCP.Text = "" ' End If ' Else ' 'TxtDestinoCP.Text = "" ' End If ' UpEmitirTransitorio.Update() 'End Sub Protected Sub LnkAgregarMercancia_Click(sender As Object, e As EventArgs) TxtCantidadMercancia.Text = "" 'DdlPSMercancia.SelectedValue = "" 'DdlPSMercancia.SelectedText = "Seleccione" UpAgregarMercancia.Update() RegistraScript("$('#DivAddMercancia').modal('show');", "M1") End Sub Private Sub CreaDTMercancias() DtMercancias = New DataTable() DtMercancias.Columns.Add(New DataColumn("Consec", GetType(Integer))) DtMercancias.Columns.Add(New DataColumn("Cantidad", GetType(Decimal))) DtMercancias.Columns.Add(New DataColumn("CvePS", GetType(Integer))) DtMercancias.Columns.Add(New DataColumn("CveUnidadMedida", GetType(Integer))) DtMercancias.Columns.Add(New DataColumn("CodigoPS", GetType(String))) DtMercancias.Columns.Add(New DataColumn("PesoKg", GetType(Decimal))) End Sub Protected Sub LnkAddPSMercancia_Click(sender As Object, e As EventArgs) If DtMercancias Is Nothing Then CreaDTMercancias() End If Dim CvePS As Integer = DdlPSMercancia.SelectedValue.ToEntero() Dim DrPS As DataRow = GlobalDTPSSimplificado(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If DrPS Is Nothing Then Alert("No se encontró la mercancía", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim NewRow As DataRow = DtMercancias.NewRow NewRow("Consec") = DtMercancias.MAX("Consec").ToEntero() + 1 NewRow("Cantidad") = TxtCantidadMercancia.Text.ToDecimal() NewRow("CvePS") = DrPS("CvePS") NewRow("CveUnidadMedida") = DrPS("CveUnidadMedida") NewRow("CodigoPS") = DrPS("PSCodigo") DtMercancias.Rows.Add(NewRow) GvMercanciasCP.DataSource = DtMercancias GvMercanciasCP.DataBind() If ChkLimpiarPS.Checked Then If TmpDT IsNot Nothing Then TmpDT.Rows.Clear() End If End If Dim CvePSServicio As Integer = DdlPSFlete.SelectedValue.ToEntero() If CvePSServicio > 0 Then Dim Cantidad As Decimal = TxtCantidadMercancia.Text.ToDecimal Dim PU As Decimal = TxtPrecioMercancia.Text.Trim.ToDecimal Dim Descuento As Decimal = 0 Dim CveUM As Integer = -1 Dim UnidadMedida As String = "" Dim CveClasificacion As Integer = -1 Dim Clasificacion As String = "" Dim drPSFlete As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSServicio).FiltroPrimero("") If DrPS IsNot Nothing Then CveUM = drPSFlete("CveUnidadMedida").ToString().ToEntero() CveClasificacion = drPSFlete("CveClasificacion").ToString().ToEntero() UnidadMedida = drPSFlete("UnidadMedida").ToString() End If Dim CveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim CveProyecto As Integer = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimeroValor("CveProyecto", "").ToEntero() Dim Proyecto As String = GlobalDTProyectosUsuarios(UsuarioActual.CveUsuario, CveProyecto, UsuarioActual.CveEmpresa, -1).FiltroPrimeroValor("Proyecto", "").ToString() AgregarProductoServicio(Cantidad, CveUM, UnidadMedida, CveClasificacion, Clasificacion, CvePSServicio, "", TxtObservacionesMercancia.Text.Trim, PU, Descuento, CveProyecto, Proyecto, CveSubProyecto, DdlSubProyectoDatos.SelectedItem.Text, Serie:="", TiempoEntrega:="", CuentaPredial:="", RegeneraIEPS:=ClienteDesglosaIEPS, CvePromocionDetalle:=-1, ImporteProntoPago:=0) CalculaTotalesVenta() Alert("Se agregó la mercancía correctamente") Else Alert("No se agregó el servicio", TipoMensaje.MsgAdvertencia) End If TxtCantidadMercancia.Text = "" TxtObservacionesMercancia.Text = "" TxtPrecioMercancia.Text = "" RegistraScript("$('#DivAddMercancia').modal('hide');", "A2") UpAgregarMercancia.Update() UpEmitirTransitorio.Update() End Sub Protected Sub GvMercanciasCP_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GvMercanciasCP.RowDeleting Dim DbRow As DataRow = Nothing DbRow = DtMercancias.Rows(e.RowIndex) DtMercancias.Rows.Remove(DbRow) GvMercanciasCP.DataSource = DtMercancias GvMercanciasCP.DataBind() Alert("Eliminado Correctamente.", TipoMensaje.MsgInformacion) UpEmitirTransitorio.Update() End Sub #End Region Protected Sub BtnGenerarPoliza_Click(sender As Object, e As EventArgs) 'CreaObjetosVenta() 'If UsuarioActual.Empresa.TipoContabilidad = 2 Then ' Dim ObjAC As New ClsContPAQi(UsuarioActual.Empresa) ' Dim Msgok As New StringBuilder ' If ObjFactura.TipoDocto.Contiene("Ing", "Egs", "OP", "Com") Then ' Dim IDPoliza As Modelos.RetornoPolizaConta = GenerarPolizaAC(ObjAC, ObjFactura) ' If IDPoliza.IdPoliza > 0 Then ' Dim ObjVentas As New ClsVentas ' If ObjVentas.UpdateVentaPrePoliza(IDPoliza.IdPoliza, IDPoliza.FolioPoliza, CvePrePoliza, CveVenta, UsuarioActual.CveEmpresa) Then ' 'Si se facturó la cotización hay que vincular la venta ' Msgok.AppendFormat("Abono Registrado Correctamente.

    Ver Poliza", IDPoliza) ' End If ' ObjVentas.Dispose() ' 'Si se facturó la cotización hay que vincular la venta ' Msgok.AppendFormat("Abono Registrado Correctamente.

    Ver Poliza", IDPoliza) ' Else ' ErrorList.Add("Ocurrió un error al generar A.C. en la Factura.
    Revise su factura y cualquier detalle comuníquese a Soporte Técnico") ' End If ' Else ' Msgok.Append("Movimiento Registrado Correctamente.

    ") ' End If ' ObjAC.Dispose() 'End If End Sub Protected Sub ChkEmitirCartaPorte_CheckedChanged(sender As Object, e As EventArgs) If ChkEmitirCartaPorte.Checked AndAlso CveCliente > 0 Then Dim ObjClientes As New ClsClientes If ObjClientes.DireccionEnvioGet(-1, CveCliente, -1) Then TmpDTDireccionCP = ObjClientes.DtResultados.FiltraParametros(String.Format("Estatus = 1")) End If ObjClientes.Dispose() Else TmpDTDireccionCP = Nothing End If DdlDireccionOrigen.DataSource = TmpDTDireccionCP DdlDireccionOrigen.DataBind() DdlDireccionDestino.DataSource = TmpDTDireccionCP DdlDireccionDestino.DataBind() CargarCamiones() HabilitarControlesCartaPorte(ChkEmitirCartaPorte.Checked) If DtMercancias Is Nothing Then CreaDTMercancias() DtMercancias.Clear() 'carga los productos inventariables como mercancía For Each drPS As DataRow In TmpDT.FiltraParametros("CveTipoPS= 2").Rows Dim NewRow As DataRow = DtMercancias.NewRow NewRow("Consec") = DtMercancias.MAX("Consec").ToEntero() + 1 NewRow("Cantidad") = drPS("Cantidad") NewRow("CvePS") = drPS("CvePS") NewRow("CveUnidadMedida") = drPS("CveUM") NewRow("CodigoPS") = drPS("PSCodigo") DtMercancias.Rows.Add(NewRow) Next GvMercanciasCP.DataSource = DtMercancias GvMercanciasCP.DataBind() End Sub 'Protected Sub ChkAgregarFlete_CheckedChanged(sender As Object, e As EventArgs) ' DivServicioFlete.Visible = ChkAgregarFlete.Checked ' UpAgregarMercancia.Update() 'End Sub Protected Sub DdlPSFlete_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DdlPSFlete.selectedindexchange Dim CvePSParametro As Integer = DdlPSFlete.SelectedValue.ToEntero() If CvePSParametro > 0 Then Dim drPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSParametro).FiltroPrimero("") If drPS IsNot Nothing Then Dim CvePSMercancia As Integer = drPS("CvePSAdicionalVigencia").ToString().ToEntero() Dim CveClasificacion As Integer = drPS("CveClasificacion").ToString().ToEntero() If CvePSMercancia > 0 Then If UsuarioActual.Empresa.Funcionalidad(141).ToString() = "1" Then DdlPSMercancia.SelectedValue = CvePSMercancia.ToString() 'DdlPSMercancia.SelectedText = TxtPS.Text.Trim Else 'DdlPSMercancia.ddl.Items.Insert(2, New ListItem(TxtPS.Text.Trim, ObjProductosServicios.CvePS.ToString())) DdlPSMercancia.ddl.SelectedValueExist(CvePSMercancia.ToString()) End If End If 'SUGIERE PRECIO Dim PrecioSugerido As Decimal = 0 Dim tPrecioSugerido As Decimal = 0 tPrecioSugerido = drPS("Precio").ToString().ToDecimal If UsuarioActual.CveEmpresa.Contiene(1) Then Dim ObjPS As New ClsProductosServicios If ObjPS.GetPorcentajeProductos(CveCliente) Then Dim PrecioAplicado As Decimal = ObjPS.DtResultados.FiltraParametros($"CvePS = {CvePSParametro}").FiltroPrimeroValor("PrecioA").ToDecimal If PrecioAplicado > 0 Then PrecioSugerido = PrecioAplicado End If End If ObjPS.Dispose() End If If UsuarioActual.Empresa.Funcionalidad(404).ToEntero > 0 Then 'cuando el valor es 10.- secuencia Cliente/Sucursal, 20 - sucursal/cliente Dim TipoPrecioLista As Integer = UsuarioActual.Empresa.Funcionalidad(404).ToEntero ' si es 10. primero el cliente Dim CvePrecioListaPS As Integer Dim PorcentajePrecio As Decimal = 0 If TipoPrecioLista = 10 Then CvePrecioListaPS = Me.CvePrecioListaCliente If CvePrecioListaPS <= 0 Then CvePrecioListaPS = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() End If Else CvePrecioListaPS = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=DdlSubProyectoDatos.SelectedValue.ToEntero()).FiltroPrimeroValor("CvePrecioLista", "").ToEntero() If CvePrecioListaPS <= 0 Then CvePrecioListaPS = Me.CvePrecioListaCliente 'GlobalDTCliente(UsuarioActual.CveEmpresa, Estatus:=-1, CveCliente:=CveCliente).FiltroPrimeroValor("CvePrecioLista").ToEntero() End If If Me.CvePrecioListaCliente > 0 Then Dim ArrayClientes As String() = UsuarioActual.Empresa.Funcionalidad(711).Split(",".ToCharArray()) 'VERIFICA SI EL CLIENTE ACTUAL DEBE TENER PRIORIDAD SU LISTA DE PRECIOS If ArrayClientes.Length > 0 AndAlso ArrayClientes.Count(Function(cliente) cliente.Trim() = Me.CveCliente.ToString()) > 0 Then CvePrecioListaPS = Me.CvePrecioListaCliente End If End If End If If CvePrecioListaPS > 0 Then Dim ObjPS As New ClsProductosServicios If ObjPS.GetPSPreciosLista(UsuarioActual.CveEmpresa, CvePrecioListaPS, CvePS:=CvePSParametro, Opcion:=1) Then PrecioSugerido = ObjPS.DtResultados.FiltroPrimeroValor("PrecioLista").ToDecimal PorcentajePrecio = ObjPS.DtResultados.FiltroPrimeroValor("Porcentaje").ToDecimal End If ObjPS.Dispose() End If If PrecioSugerido = 0 Then Dim ObjInventarios As New ClsInventarios Dim CostoPS As Decimal = ObjInventarios.GetCostoPS(CvePSParametro, TxtCantidadMercancia.Text.Trim.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(CvePSParametro, TxtCantidadMercancia.Text.Trim.ToDecimal, -1, "-1", TxtFecha.Text.ToDate, -1, CveTipoAlmacen:=1) ObjInventarios.Dispose() If CostoPS > 0 And PorcentajePrecio > 0 Then PrecioSugerido = ((PorcentajePrecio / 100) + 1) * CostoPS End If End If Me.CvePrecioLista = CvePrecioListaPS End If If PrecioSugerido > 0 Then Dim PrecioBaseCosto As Decimal = 0 PrecioBaseCosto = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=CveClasificacion).FiltroPrimeroValor("PrecioBaseCosto", "").ToDecimal If PrecioBaseCosto > 0 Then PrecioSugerido = PrecioSugerido * ((PrecioBaseCosto / 100) + 1) End If End If If PrecioSugerido <= 0 Then PrecioSugerido = tPrecioSugerido TxtPrecioMercancia.Text = PrecioSugerido.ToString("#,##0.####") ' que muestre hasta los 4 digitos si lo requiere End If End If UpAgregarMercancia.Update() End Sub Protected Sub LnkUUIDRelacionados_Click(sender As Object, e As EventArgs) Dim Vigencia As Timbrado.AcuseCancelacionSAT = Timbrado.VerificarVigenciaSAT(FolioFiscal, UsuarioActual.Empresa.RFC, LblRFC.Text, TxtTotal.Text, True) Dim sb As New StringBuilder sb.AppendFormat("{0}
    ", Vigencia.EsCancelable) Dim Relacionados As Timbrado.MRespUUIDRelacionados = Timbrado.ConsultarUUIDRelacionados(UsuarioActual.Empresa, FolioFiscal, UsuarioActual.Empresa.FacturaProduccion) If Relacionados IsNot Nothing Then Dim sbExtra As New StringBuilder() If Relacionados.Codigo = 500 Then sbExtra.Append("El servicio de verificación de documentos relacionados no esta disponible.") Else sbExtra.Append(Relacionados.Mensaje) Dim SbHijos As New StringBuilder() Dim SbPadres As New StringBuilder() If Relacionados.RelacionadosPadre IsNot Nothing Then For Each padre As Timbrado.RelacionadosPadre In Relacionados.RelacionadosPadre SbPadres.AppendFormat("{0};", padre.Uuid) Next If SbPadres.Length > 0 Then SbPadres.Remove(SbPadres.Length - 1, 1) End If End If Using ObjVentas As New ClsVentas If SbPadres.Length > 0 Then If ObjVentas.GetFacturasRelacionadasPorFolioFiscal(SbPadres.ToString(), UsuarioActual.CveEmpresa) Then Dim dtt As DataTable = ObjVentas.DtResultados.FiltraParametros($"CveVenta <> {CveVenta}") For Each dr As DataRow In dtt.Rows sb.AppendFormat("{0}-{1}-{2}
    ", dr("TipoDocto"), dr("SerieFolio"), dr("FolioFiscal")) Next End If End If End Using End If If sbExtra.Length > 0 Then LbExtraRefacturacion.Text = $"
    *{sbExtra.ToString()}" End If End If Alert(sb.ToString(), TipoMensaje.MsgInformacion) End Sub Private Function AutocontaMatriz(AutoConta As Boolean) As Boolean Dim Respuesta As Boolean = False If UsuarioActual.CveEmpresa.Contiene(13, 83) Then Dim DTSubproyectoActual As DataTable = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, DdlSubProyectoDatos.SelectedValue.ToEntero) If (DTSubproyectoActual.Rows(0)("TipoSucursal").ToString.ToEntero = 1) Then Respuesta = True Else Respuesta = False End If Else Respuesta = AutoConta End If Return Respuesta End Function Protected Sub ChkEmitirComercioExterior_CheckedChanged(sender As Object, e As EventArgs) If CveVenta <= 0 OrElse EsCreaApartirDe Then ViewState("AplicaComercioExterior") = ChkEmitirComercioExterior.Checked If ChkEmitirComercioExterior.Checked Then DdlMoneda.SelectedValueExist("2") CambiaMoneda() TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate.AddDays(-1)).ToString() Alert("El tipo de cambio va ser el del dia anterior a la fecha de la factura cuando se utiliza comercio exterior") Else TxtTipoCambio.Text = GlobalTipoCambio(TxtFecha.Text.ToDate).ToString() End If UpPS.Update() End If End Sub Protected Sub DdlLineaAdicional_SelectedIndexChanged(sender As Object, e As EventArgs) If UsuarioActual.Empresa.Funcionalidad(705) = "1" Then TxtFechaPago.Enabled = True imgCalendario.Visible = True If DdlLineaAdicional.SelectedValue.ToEntero() > 0 Then RBLPago.SelectedValue = "1" RBLPago.Enabled = False Dim TCConsulta As Decimal = TxtTipoCambio.Text.ToDecimal() Using ObjVentas As New ClsVentas If ObjVentas.GetLineasAdicionalesSaldo(DdlLineaAdicional.SelectedValue.ToEntero(), CveCliente, -1, -1, UsuarioActual.CveEmpresa, TipoCambioConsulta:=TCConsulta, FechaVencimientoConsulta:=MinFecha) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim RowLinea As DataRow = ObjVentas.DtResultados.Rows(0) If RowLinea IsNot Nothing Then If CveVenta <= 0 Then TxtFechaPago.Text = RowLinea("FechaVencimiento").ToString().ToDateTime().ToString("dd/MM/yyyy") 'AL FACTURAR CON LINEA ADICIONAL TIPO PO, SE SUMARÁN LOS DIAS DE VENCIMIENTO A LA FECHA ACTUAL If RowLinea("TipoLinea").ToString() = "2" Then TxtFechaPago.Text = TxtFecha.Text.ToDate().AddDays(RowLinea("DiasVencimiento").ToString().ToEntero()).ToString("dd/MM/yyyy") Else TxtFechaPago.Text = RowLinea("FechaVencimiento").ToString().ToDateTime().ToString("dd/MM/yyyy") End If TxtFechaPago.Enabled = False imgCalendario.Visible = False TxtOrdenCompra.Text = RowLinea("LineaAdicionalComercializador").ToString() End If Me.CveCategoriaLineaAdicional = RowLinea("CveCategoria").ToString().ToEntero() Me.CveMonedaLineaAdicional = RowLinea("CveMoneda").ToString().ToEntero() Me.SaldoLineaAdicional = RowLinea("Saldo").ToString().ToDecimal() Me.SaldoIngresosLineaAdicional = RowLinea("SaldoIngresos").ToString().ToDecimal() If CveVenta <= 0 Then If DdlTipoComprobante.SelectedValue.Contiene("PA") Then 'SI NO TIENE LA OPCION DE FACTURAR LA PERMITE If DdlTipoComprobante.Items.FindByValue("Rem") Is Nothing Then DdlTipoComprobante.Items.Insert(0, New ListItem("Remisión", "Rem")) HabilitoFacturacionIngresoLineaAdicional = True End If DdlTipoComprobante.SelectedValueExist("Rem") End If End If End If Else Alert("No se pudieron obtener datos de la linea adicional", TipoMensaje.MsgAdvertencia) Me.SaldoLineaAdicional = 0 Me.SaldoIngresosLineaAdicional = 0 Me.CveCategoriaLineaAdicional = 0 End If Else Alert("No se pudieron obtener datos de la linea adicional", TipoMensaje.MsgAdvertencia) Me.SaldoLineaAdicional = 0 Me.SaldoIngresosLineaAdicional = 0 Me.CveCategoriaLineaAdicional = 0 End If End Using Else Me.SaldoLineaAdicional = 0 Me.SaldoIngresosLineaAdicional = 0 Me.CveCategoriaLineaAdicional = 0 If CveVenta <= 0 Then TxtFechaPago.Text = NowADS().AddDays(PlazoCobranza).ToString("dd/MM/yyyy") 'SI SE HABILITO LA FACTURACION DESDE LA LINEA ADICIONAL DEBE QUITARLO If HabilitoFacturacionIngresoLineaAdicional Then DdlTipoComprobante.Items.Remove(DdlTipoComprobante.Items.FindByValue("Rem")) DdlTipoComprobante.SelectedValueExist("PA") UpParametros.Update() End If End If End If UpParametros.Update() UPCondicionesPago.Update() UPObservaciones.Update() End If End Sub Protected Sub LnkUpdateLineaAdicional_Click(sender As Object, e As EventArgs) 'VALIDAR LINEAS ADICIONALES If UsuarioActual.Empresa.Funcionalidad(705) = "1" AndAlso DdlLineaAdicional.SelectedValue.ToEntero() > 0 Then 'VERIFICA QUE LA CATEGORIA DE LOS PRODUCTOS DEBE SER LA MISMA DE LA LINEA ADICIONAL If TmpDT IsNot Nothing AndAlso Me.CveCategoriaLineaAdicional > 0 Then For Each Row As DataRow In TmpDT.FiltraParametros("", DistinctColumns:={"CveClasificacion"}).Rows Dim RowClasificacion As DataRow = GlobalDTClasificaciones(UsuarioActual.CveEmpresa, CveClasificacion:=Row("CveClasificacion").ToString().ToEntero()).FiltroPrimero("") If RowClasificacion IsNot Nothing Then Dim CveCategoria As Integer = RowClasificacion("CveCategoria").ToString().ToEntero() Dim Categoria As String = RowClasificacion("Categoria").ToString() If Me.CveCategoriaLineaAdicional <> CveCategoria Then Alert($"La categoría '{Categoria}' no pertenece a la linea adicional.", TipoMensaje.MsgAdvertencia) Exit Sub End If Else Alert($"No se encontro la clasificación.", TipoMensaje.MsgAdvertencia) Exit Sub End If Next End If 'SI NO ES A CREDITO NO SELECCIONAR LINEA ADICIONAL If RBLPago.SelectedValue <> "1" Then Alert($"La linea adicional debe ser utilizada en una venta a crédito.", TipoMensaje.MsgAdvertencia) Exit Sub End If If Me.SaldoLineaAdicional <= 0 Then Alert("El saldo de la linea adicional debe ser mayor a cero", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim TotalDocumento As Decimal = TxtTotal.Text.ToDecimal() 'VERIFICA QUE EL SALDO DISPONIBLE SEA MENOR AL IMPORTE If Me.CveMonedaLineaAdicional <> DdlMoneda.SelectedValue.ToEntero() Then 'SI LA LINEA ESTA EN PESOS Y LA FACTURA ESTA EN DOLARES If Me.CveMonedaLineaAdicional = 1 AndAlso DdlMoneda.SelectedValue.ToEntero() = 2 Then Dim SaldoUSD As Decimal = SaldoLineaAdicional / TxtTipoCambio.Text.ToDecimal() If SaldoUSD < TotalDocumento Then Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'SI LA LINEA ESTA EN DOLARES Y LA FACTURA ESTA EN PESOS If Me.CveMonedaLineaAdicional = 2 AndAlso DdlMoneda.SelectedValue.ToEntero() = 1 Then Dim SaldoMXN As Decimal = SaldoLineaAdicional * TxtTipoCambio.Text.ToDecimal() If SaldoMXN < TotalDocumento Then Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Else 'SI LA LINEA Y LA FACTURA TIENEN LA MISMA MONEDA If Me.SaldoLineaAdicional < TotalDocumento Then Alert("El saldo de la linea adicional debe ser mayor o igual al de la factura", TipoMensaje.MsgAdvertencia) Exit Sub End If End If End If Dim OrdenCompra As String = "-1" If UsuarioActual.CveEmpresa = 119 Then Dim arrayStr As String() = DdlLineaAdicional.SelectedItem.Text.Split(":"c) If arrayStr.Length > 0 Then Dim OrdenCompraTmp As String = arrayStr(0).Replace("IMP", "").Trim If TxtOrdenCompra.Text.Trim.Length > 0 Then If OrdenCompraTmp.ToUpper <> TxtOrdenCompra.Text.Trim.ToUpper Then OrdenCompra = $"{TxtOrdenCompra.Text}, {OrdenCompraTmp}" End If Else OrdenCompra = $"{OrdenCompraTmp}" End If End If End If Using ObjVentas As New ClsVentas If ObjVentas.UpdateVentaLineaAdicional(DdlLineaAdicional.SelectedValue.ToEntero(), CveVenta, "", 1, UsuarioActual.CveEmpresa, OrdenCompra:=OrdenCompra) Then Alert("Se actualizó la linea adicional de crédito de la venta") End If End Using End Sub Protected Sub ChkAplicaDestinatario_CheckedChanged(sender As Object, e As EventArgs) DivLblDestino.Visible = ChkAplicaDestinatario.Checked DivDdlDestino.Visible = ChkAplicaDestinatario.Checked If ChkAplicaDestinatario.Checked Then Dim ObjClientes As New ClsClientes If ObjClientes.DireccionEnvioGet(-1, CveCliente, -1) Then DdlDirecionDestinatario.DataSource = ObjClientes.DtResultados End If ObjClientes.Dispose() DdlDirecionDestinatario.DataBind() DdlDirecionDestinatario.Items.Insert(0, New ListItem("Seleccione", "-1")) End If UpComercioExterior.Update() End Sub Protected Sub BtnCargarInventario_Click(sender As Object, e As EventArgs) If Not LblAlertRefacInv.Visible Then If CveVentaPadre > 0 Then InventarioMov(CveVentaPadre) Else InventarioMov() End If End If 'REMOVER EVENTO PARA RECARGAR ALMACEN 'spanAlmacen.Attributes.Remove("onclick") 'Tab.ActiveTabIndex = 1 HdnCargarInventario.Value = "False" 'Updatetabs.Update() UpParametros.Update() End Sub Protected Sub LBAplicaDevolucion_Click(sender As Object, e As EventArgs) Dim SaldoAlmacen As Decimal = 0 Dim PermiteCancelar As Boolean = True Dim tCveVentaDevolucion As Integer = CveVenta If CveVentaPadre > 0 Then tCveVentaDevolucion = CveVentaPadre DevolucionAlmacen = 0 End If Using ObjVentas As New ClsVentas If ObjVentas.GetVenta(tCveVentaDevolucion, UsuarioActual.CveEmpresa, VerificaAlmacen:=True) Then If ObjVentas.DtResultados.Rows.Count > 0 Then Dim RowVenta As DataRow = ObjVentas.DtResultados.Rows(0) SaldoAlmacen = RowVenta("SaldoAlmacen").ToString().ToDecimal() End If End If End Using Dim PuedeAplicarDevolucion As Boolean = False 'código temporal RMF. para devoluciones de facturas cargadas de saldos iniciales. If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso (TxtFecha.Text.ToDate.Year < 2025 OrElse CveVentaPadre > 0) Then SaldoAlmacen = -1 DevolucionAlmacen = 0 End If If SaldoAlmacen < 0 Then If DevolucionAlmacen = 0 Then PuedeAplicarDevolucion = True ElseIf DevolucionAlmacen.Contiene(1, 2) Then Alert("No se puede aplicar una devolución sobre el documento actual", TipoMensaje.MsgAdvertencia) End If ElseIf SaldoAlmacen >= 0 Then Alert("No se puede aplicar una devolución sobre el documento actual", TipoMensaje.MsgAdvertencia) End If If PuedeAplicarDevolucion Then If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DivMotivoDevolucion.Visible = True DdlMotivoDevolucion.DataSource = GlobalDTVentasMotivosDevolucion(UsuarioActual.CveEmpresa) DdlMotivoDevolucion.DataBind() DdlMotivoDevolucion.Items.Insert(0, New ListItem("Seleccione", "-1")) UpDevolucion.Update() End If RegistraScript("$('#DivAplicaDevolucion').modal('show');") End If End Sub Protected Sub DdlPrecioLista_SelectedIndexChanged(sender As Object, e As EventArgs) If DivPrecioLista.Visible AndAlso DdlPrecioLista.SelectedValue.ToEntero() > 0 Then CargaPrecioLista(DdlPS.SelectedValue.ToEntero) End If End Sub Private Sub CargaPrecioLista(CvePS As Integer) Dim drPS As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If drPS IsNot Nothing Then Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = CalculaPrecioSugerido(drPS("CvePS").ToString().ToEntero(), drPS("CveClasificacion").ToString().ToEntero(), CvePrecioListaSugerido:=DdlPrecioLista.SelectedValue.ToEntero()) If ObjPrecioSugerido.PrecioSugerido > 0 Then TxtPrecio.Text = ObjPrecioSugerido.PrecioSugerido.ToString("#,##0.####") Else Alert("El Producto no tiene especificado precio en la lista de precio.") End If End If End Sub #Region " A C T I V O S - F I J O S" Protected Sub CargaDatosAF() CargarTipoActivoFijo() CargaDdlAF() DdlTipoActivo_SelectedIndexChanged(DdlTipoActivoFiltro, EventArgs.Empty) End Sub Protected Sub CargarTipoActivoFijo() DdlTipoActivoFiltro.DataSource = GlobalDTTipoActivoFijo(UsuarioActual.CveEmpresa).FiltraParametros("", "TipoActivoFijo") DdlTipoActivoFiltro.DataBind() DdlTipoActivoFiltro.Items.Insert(0, New ListItem("Todos", "-1")) End Sub Protected Sub DdlTipoActivo_SelectedIndexChanged(sender As Object, e As EventArgs) DdlSubTipoActivoFiltro.Items.Clear() DdlSubTipoActivoFiltro.DataSource = GlobalDTSubTipoActivoFijo(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CveTipoActivoFijo = {0}", DdlTipoActivoFiltro.SelectedValue), "SubTipoActivoFijo") DdlSubTipoActivoFiltro.DataBind() DdlSubTipoActivoFiltro.Items.Insert(0, New ListItem("Todos", "-1")) End Sub #End Region Protected Sub BtnFiltrarAF_Click(sender As Object, e As EventArgs) Using ObjAF As New ClsAF If ObjAF.GetRepActivosFijosDepreciacion(UsuarioActual.CveEmpresa, NowADS(), Depreciados:=1, CveTipoAF:=DdlTipoActivoFiltro.SelectedValue.ToEntero(), CveSubTipoAF:=DdlSubTipoActivoFiltro.SelectedValue.ToEntero(), CveSubProyecto:=DdlSubProyectoFiltroAF.SelectedValue.ToEntero()) Then GvVentaAF.DataSource = ObjAF.DtResultados.FiltraParametros("CveActivoFijo > 0 AND CveEstadoActivoFijo <> 5") End If End Using GvVentaAF.DataBind() UpActivosFijos.Update() End Sub Private Sub CargaAFVenta() If CveVenta > 0 AndAlso TmpDT IsNot Nothing AndAlso TmpDT.COUNT("CveActivoFijo", "CveActivoFijo > 0") > 0 Then DivVentasAF.Visible = True Using ObjAF As New ClsAF If ObjAF.GetActivosFijosVenta(Me.CveVenta, UsuarioActual.CveEmpresa) Then GvAF.DataSource = ObjAF.DtResultados End If End Using GvAF.DataBind() UpActivosFijos.Update() End If End Sub Public Sub CargaDdlAF() Dim CvePSAF As Integer = UsuarioActual.Empresa.Funcionalidad(380).ToEntero If CvePSAF > 0 Then Dim dtt = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePSAF, AplicaParaVenta:=1) ', SATClavePS:=CveSATNC If dtt IsNot Nothing Then DdlPSAF.DataSource = dtt DdlPSAF.DataBind() End If Else LnkGenerarPSAF.Visible = True DdlPSAF.Items.Insert(0, New ListItem("Seleccione", "-1")) End If End Sub Protected Sub BtnGuardarAF_Click(sender As Object, e As EventArgs) Dim Cantidad As Decimal = 1 Dim CvePS = DdlPSAF.SelectedValue.ToEntero() Dim CveUnidadMedida As Integer = -1 Dim UnidadMedida As String = "" Dim CveClasificacion As Integer = -1 Dim Clasificacion As String = "" Dim Obs As String = "" Dim PrecioVenta As Decimal = 0.0D Dim CveProyecto As Integer = -1 Dim Proyecto As String = "" Dim CveSubProyecto As Integer = DdlSubProyectoDatos.SelectedValue.ToEntero() Dim SubProyecto As String = DdlSubProyectoDatos.SelectedItem.Text If CveSubProyecto > 0 Then Dim RowSP = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimero("") If RowSP IsNot Nothing Then CveProyecto = RowSP("CveProyecto").ToString().ToEntero() Proyecto = RowSP("Proyecto").ToString() End If End If TmpDT.Rows.Clear() Dim CveAF As Integer = -1 Dim AFDepreciacion As Decimal = 0 Dim AFValorInicial As Decimal = 0 For Each GvRow As GridViewRow In GvVentaAF.Rows If GvRow.RowType = DataControlRowType.DataRow Then 'LIMPIA VARIABLES Obs = "" CveAF = -1 AFDepreciacion = 0 AFValorInicial = 0 PrecioVenta = 0D If GvRow.FCCheckBox("chkAF").Checked Then Obs = GvRow.DataKey("Observaciones") CveAF = GvRow.DataKey("CveActivoFijo").ToEntero() AFDepreciacion = GvRow.DataKey("DepreciacionAcumulada").ToDecimal() AFValorInicial = GvRow.DataKey("MOI").ToDecimal() PrecioVenta = GvRow.FCTextBox("TxtPrecioAF").Text.ToDecimal() If PrecioVenta < 1D Then Alert($"El activo fijo '{GvRow.DataKey("Descripcion")}' debe tener un importe para venta.", TipoMensaje.MsgAdvertencia) TmpDT.Rows.Clear() Exit Sub End If AgregarProductoServicio(Cantidad, CveUnidadMedida, UnidadMedida, CveClasificacion, Clasificacion, CvePS, "", Obs, PrecioVenta, 0, CveProyecto, Proyecto, CveSubProyecto, SubProyecto, CveActivoFijo:=CveAF, AFDepreciacion:=AFDepreciacion, AFValorInicial:=AFValorInicial) End If End If Next DdlMoneda.SelectedValue = "1" DdlMoneda.Enabled = False CalculaTotalesVenta() Tab.ActiveTabIndex = 0 Updatetabs.Update() End Sub Private Sub DdlMetodoCliente_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlMetodoCliente.SelectedIndexChanged If DdlMetodoCliente.SelectedValue = "3" Then DdlFormaCliente.DataSource = GlobalDTVtaFormaPago.FiltraParametros("CveFormaPago = 20") Else DdlFormaCliente.DataSource = GlobalDTVtaFormaPago.FiltraParametros("CveFormaPago <> 20") End If DdlFormaCliente.DataBind() If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then DdlFormaCliente.SelectedValueExist("1") End If End Sub Private Sub AsignaMedicoProcedimientoFacturaRemisionesModal() Dim CveVentaConsultar As Integer = -1 If ChkRemProductos.Checked Then For Each gvRow As GridViewRow In GvRemPS.Rows If gvRow.FCCheckBox("Chk").Checked Then CveVentaConsultar = gvRow.DataKey("CveVenta").ToEntero Exit For End If Next Else For Each gvRow As GridViewRow In GvRem.Rows If gvRow.FCCheckBox("Chk").Checked Then CveVentaConsultar = gvRow.DataKey("CveVenta").ToEntero Exit For End If Next End If If CveVentaConsultar > 0 Then Dim objVenta As New ClsVentas If objVenta.GetVenta(CveVentaConsultar, UsuarioActual.CveEmpresa) Then Dim dRow As DataRow = objVenta.DtResultados.Rows(0) DdlMedico.SelectedValueExist(dRow("CveMedico").ToString.ToEntero) DdlProcedimiento.SelectedValueExist(dRow("CveProcedimiento").ToString.ToEntero) TxtPaciente.Text = dRow("Paciente").ToString TxtEpisodio.Text = dRow("Episodio").ToString TxtAlfa1.Text = dRow("Alfa1").ToString CveTipoVenta = dRow("CveTipoVenta").ToString.ToEntero ChkRequiereTecnico_CheckedChanged(Nothing, Nothing) SeEstaFActurandoVentaMedica = True End If objVenta.Dispose() End If UpCliente.Update() End Sub #Region "VENTAS MEDICAS" Private Sub CargaTiposVenta() RBLTipoVenta.DataSource = GlobalDTTipoVenta(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") RBLTipoVenta.DataBind() RBLTipoVenta.Items.Add(New ListItem("Otros", "99")) TrVentasMedicas1.Visible = True TrVentasMedicas2.Visible = True TrVentasMedicas3.Visible = True For Each item As ListItem In RBLTipoVenta.Items item.Text = $"  {item.Text}" Next If Opcion = "Cot" Then 'TrVentasMedicas2.Visible = False TrVentasMedicas3.Visible = False Else RegistraScript("$('#DvModalTipoVenta').modal({ backdrop: 'static', keyboard: false });") End If End Sub Private Sub CargaProcedimientos(Optional CveProcedimientSeleccion As Integer = -1) DdlProcedimiento.DataSource = GlobalDTProcedimientos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") DdlProcedimiento.DataBind() DdlProcedimientoModal.DataSource = GlobalDTProcedimientos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ") DdlProcedimientoModal.DataBind() If CveProcedimientSeleccion > 0 Then DdlProcedimientoModal.SelectedValueExist(CveProcedimientSeleccion) End If UpDvModalTipoVenta.Update() UpCliente.Update() End Sub Private Sub CargaMedicos(Optional CveMedicoSeleccion As Integer = -1) DdlMedico.ClearSelection() DdlMedico.SelectedValue = Nothing DdlMedicoModal.ClearSelection() DdlMedicoModal.SelectedValue = Nothing DdlMedico.DataSource = If(UsuarioActual.CveVendedor > 0, GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros($" Estatus = 'True' AND CveVendedor = {UsuarioActual.CveVendedor} "), GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ")) DdlMedico.DataBind() DdlMedicoModal.DataSource = If(UsuarioActual.CveVendedor > 0, GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros($" Estatus = 'True' AND CveVendedor = {UsuarioActual.CveVendedor} "), GlobalDTMedicos(UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 'True' ")) DdlMedicoModal.DataBind() If CveMedicoSeleccion > 0 Then DdlMedicoModal.SelectedValueExist(CveMedicoSeleccion) End If UpDvModalTipoVenta.Update() UpCliente.Update() End Sub Private Sub CargaDdlClientesSucursal() DdlClienteSucursal.DataSource = GlobalDTClientesTodosSucursales(UsuarioActual.CveEmpresa) DdlClienteSucursal.DataBind() DdlClienteSucursal.Items.Insert(0, New ListItem("Seleccione uno", "-1")) Dim EsWS As Boolean = If(UsuarioActual.Empresa.Funcionalidad(105) = "1" Or UsuarioActual.Empresa.Funcionalidad(141) = "1", True, False) If EsWS Then DdlClientesModal.setEsWebService(True) Else DdlClientesModal.setEsWebService(False) DdlClientesModal.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa, -1) DdlClientesModal.DataBind() DdlClientesModal.ddl.Items.Insert(0, New ListItem("Seleccione Uno", "-1")) End If End Sub Protected Sub ChkRequiereTecnico_CheckedChanged(sender As Object, e As EventArgs) TdFechaOS1.Visible = ChkRequiereTecnico.Checked UpCliente.Update() End Sub Protected Sub RBLTipoVenta_SelectedIndexChanged(sender As Object, e As EventArgs) If RBLTipoVenta.SelectedValue.ToEntero > 0 Then DvModalTipoVentaPasoTipo.Visible = False DvModalTipoVentaClientesucursal.Visible = True DvModalTipoVentaPasoRequiereOS.Visible = True DvModalTipoVentaPasoMedicoProcedimiento.Visible = True ChkRequiereTecnicoModal.Checked = True ChkRequiereTecnicoModal.Enabled = True DvModalRequiereOSFecha.Visible = True TxtFechaModal.Text = NowADS.AddHours(1).ToString("yyyy-MM-dd HH").Replace(" ", "T") + ":00" ' ToString("yyyy-MM-dd HH:mm:ss").Replace(" ", "T") LnkDvModalTipoVentaAceptar.Visible = True Select Case RBLTipoVenta.SelectedValue Case "1", "5", "6" '1 Fuera de linea || 5 Consignación - Uso material || A-Vista - Material Utilizado ChkRequiereTecnicoModal.Checked = True ChkRequiereTecnicoModal.Enabled = True DvModalRequiereOSFecha.Visible = True Case "2" ' Pago Directo ChkRequiereTecnicoModal.Checked = True ChkRequiereTecnicoModal.Enabled = True DvModalRequiereOSFecha.Visible = True DvModalTipoVentaCliente.Visible = True Case "3" 'A-Vista ChkRequiereTecnicoModal.Checked = False DvModalTipoVentaPasoRequiereOS.Visible = False DvModalRequiereOSFecha.Visible = False DvModalTipoVentaPasoMedicoProcedimiento.Visible = False DVGvPSProced.Visible = False Case "4" 'Consignación ChkRequiereTecnicoModal.Checked = False DvModalTipoVentaPasoRequiereOS.Visible = False DvModalRequiereOSFecha.Visible = False DvModalTipoVentaPasoMedicoProcedimiento.Visible = False DVGvPSProced.Visible = False Case "99" ' Otros LnkDvModalTipoVentaAceptar.Visible = False UpDvModalTipoVenta.Update() RegistraScript("$('#DvModalTipoVenta').modal('hide');") End Select LblDvModalTipoVentaTitulo.Text = RBLTipoVenta.SelectedItem.Text End If UpDvModalTipoVenta.Update() End Sub Protected Sub DdlClienteSucursal_SelectedIndexChanged(sender As Object, e As EventArgs) Dim CveClienteSplit As Integer = -1 CargaPSProcedimiento(DdlProcedimiento.SelectedValue.ToEntero, DdlClienteSucursalCliente, DdlSubProyectoDatos.SelectedValue.ToEntero, CveClienteSucursalL:=DdlClienteSucursalSucursal, CveTipoVentaL:=RBLTipoVenta.SelectedValue.ToEntero) End Sub Private Function DdlClienteSucursalCliente() As Integer If DdlClienteSucursal.SelectedValue = "-1" Then Return -1 Else Dim array As String() = DdlClienteSucursal.SelectedValue.Split("|"c) Return If(array(0).ToEntero > 0, array(0).ToEntero, -1) End If End Function Private Function DdlClienteSucursalSucursal() As Integer If DdlClienteSucursal.SelectedValue = "-1" Then Return -1 Else Dim array As String() = DdlClienteSucursal.SelectedValue.Split("|"c) Return If(array(1).ToEntero > 0, array(1).ToEntero, -1) End If End Function Private Sub SeleccionarClienteSucursal(CveCliente As Integer) Dim IndexSeleccion As Integer = 0 For Each item As ListItem In DdlClienteSucursal.Items Dim array As String() = item.Value.Split("|"c) If CveCliente = array(0).ToEntero Then DdlClienteSucursal.SelectedIndex = IndexSeleccion Exit For End If IndexSeleccion = IndexSeleccion + 1 Next End Sub Protected Sub ModalValidaMedicoProcedimiento() If DdlMedicoModal.SelectedValue.ToEntero > 0 AndAlso DdlProcedimientoModal.SelectedValue.ToEntero > 0 Then LnkDvModalTipoVentaAceptar.Visible = True Else LnkDvModalTipoVentaAceptar.Visible = False End If UpDvModalTipoVenta.Update() End Sub Protected Sub LnkDvModalTipoVentaCancelar_Click(sender As Object, e As EventArgs) LnkDvModalTipoVentaAceptar.Visible = False DvModalTipoVentaPasoTipo.Visible = True DvModalTipoVentaClientesucursal.Visible = False DvModalTipoVentaCliente.Visible = False DvModalTipoVentaPasoRequiereOS.Visible = False DvModalTipoVentaPasoMedicoProcedimiento.Visible = False ChkRequiereTecnicoModal.Enabled = True DdlClienteSucursal.SelectedValueExist(-1) DvModalRequiereOSFecha.Visible = False ChkRequiereTecnicoModal.Checked = False RBLTipoVenta.SelectedValue = Nothing DdlMedicoModal.SelectedValueExist(-1) DdlProcedimientoModal.SelectedValueExist(-1) GvPSProced.DataSource = Nothing GvPSProced.DataBind() DVGvPSProced.Visible = False LblDvModalTipoVentaTitulo.Text = "Tipo de Venta" UpDvModalTipoVenta.Update() End Sub Protected Sub LnkDvModalTipoVentaAceptar_Click(sender As Object, e As EventArgs) If RBLTipoVenta.SelectedValue = "2" Then 'pago directo If DdlClientesModal.SelectedValue.ToEntero > 0 Then ViewState("CveCliente") = DdlClientesModal.SelectedValue.ToEntero Else Dim CveClientePublicoGeneral As Integer = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveCliente", " RFC = 'XAXX010101000' ").ToEntero If CveClientePublicoGeneral > 0 Then ViewState("CveCliente") = CveClientePublicoGeneral Else Alert("Debe de seleccionar un cliente.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If If DdlClienteSucursalCliente() > 0 Then CveClienteOS = DdlClienteSucursalCliente() Else Alert("Debe de seleccionar un hospital.", TipoMensaje.MsgAdvertencia) Exit Sub End If Else If DdlClienteSucursalCliente() > 0 Then ViewState("CveCliente") = DdlClienteSucursalCliente() CveClienteOS = CveCliente Else Alert("Debe de seleccionar un cliente.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If CveClienteSucursalOS = DdlClienteSucursalSucursal() If ChkRequiereTecnicoModal.Checked Then If Not IsDate(TxtFechaModal.Text.Replace(",", "")) Then Alert("El campo fecha no es válido.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If For Each GvRow As GridViewRow In GvPSProced.Rows Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidad").Text.ToDecimal Dim CveUnidadMedida As Integer = GvRow.DataKey("CveUnidadMedida").ToEntero Dim Abreviatura As String = GvRow.DataKey("Abreviatura").ToString Dim CveClasificacion As Integer = GvRow.DataKey("CveClasificacion").ToEntero Dim Clasificacion As String = GvRow.DataKey("Clasificacion").ToString Dim CvePS As Integer = GvRow.DataKey("CvePS").ToEntero Dim CodigoPS As String = GvRow.DataKey("CodigoPS") Dim PU As Decimal = GvRow.FCTextBox("TxtPrecio").Text.ToDecimal If Cantidad > 0 Then If Not ValidaAgregarPS(0, CvePS, CveUnidadMedida, PU, 2, CveClasificacion, DdlSubProyectoDatos.SelectedValue.ToEntero(), Nothing, CantidadModal:=Cantidad, PSValidarModal:=CodigoPS) Then Alert("No hay existencia.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If Next ChkRequiereTecnico.Checked = ChkRequiereTecnicoModal.Checked TxtFechaOS.Text = TxtFechaModal.Text 'TdFechaOS1.Visible = ChkRequiereTecnicoModal.Checked 'TdFechaOS2.Visible = ChkRequiereTecnicoModal.Checked DdlMedico.SelectedValueExist(DdlMedicoModal.SelectedValue) DdlProcedimiento.SelectedValueExist(DdlProcedimientoModal.SelectedValue) Dim tCveAlmacenExistencia As Integer = -1 If RBLTipoVenta.SelectedValue.Contiene("2") Then 'si es pago directo es remisión sino tiene técnico TrVentasMedicas1.Visible = True TrVentasMedicas2.Visible = True ChkRequiereTecnico.Checked = ChkRequiereTecnicoModal.Checked ChkRequiereTecnico.Enabled = True If ChkRequiereTecnico.Checked Then DdlTipoComprobante.SelectedValueExistInsert("Ped", "Pedido") Else DdlTipoComprobante.SelectedValueExistInsert("Rem", "Remisión") End If ElseIf RBLTipoVenta.SelectedValue.Contiene("3") Then ' A vista DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) DdlTipoComprobante.SelectedValueExist("Ped") TrVentasMedicas1.Visible = False TrVentasMedicas2.Visible = False ChkRequiereTecnico.Enabled = True ElseIf RBLTipoVenta.SelectedValue.Contiene("4") Then ' consignacion DdlTipoComprobante.SelectedValueExist("Ing") TrVentasMedicas1.Visible = False TrVentasMedicas2.Visible = False ChkRequiereTecnico.Enabled = True Else DdlTipoComprobante.Items.Insert(DdlTipoComprobante.Items.Count, New ListItem("Pedido", "Ped")) DdlTipoComprobante.SelectedValueExist("Ped") TrVentasMedicas1.Visible = True TrVentasMedicas2.Visible = True TdFechaOS1.Visible = True TdFechaOS2.Visible = True ChkRequiereTecnico.Enabled = True ChkRequiereTecnico.Checked = ChkRequiereTecnicoModal.Checked TdFechaOS1.Visible = ChkRequiereTecnicoModal.Checked TdFechaOS2.Visible = ChkRequiereTecnicoModal.Checked End If DdlTipoComprobante.Enabled = False CargaCliente(CveCliente) ' Si es pago directo no asigna la sucurasl al dll If RBLTipoVenta.SelectedValue.ToEntero <> 2 Then Dim tcveclientesucursal As Integer = DdlClienteSucursalSucursal() If tcveclientesucursal > 0 Then DdlSucursalCliente.SelectedValueExist(tcveclientesucursal) Else If DdlSucursalCliente.Items.Count >= 2 Then DdlSucursalCliente.SelectedIndex = 1 End If End If End If DdlTipoComprobante_SelectedIndexChanged(sender, Nothing) Dim CountPsAgregados As Integer = 0 For Each GvRow As GridViewRow In GvPSProced.Rows Dim Cantidad As Decimal = GvRow.FCTextBox("TxtCantidad").Text.ToDecimal Dim CveUnidadMedida As Integer = GvRow.DataKey("CveUnidadMedida").ToEntero Dim Abreviatura As String = GvRow.DataKey("Abreviatura").ToString Dim PU As Decimal = GvRow.FCTextBox("TxtPrecio").Text.ToDecimal Dim CveClasificacion As Integer = GvRow.DataKey("CveClasificacion").ToEntero Dim Clasificacion As String = GvRow.DataKey("Clasificacion").ToString Dim CvePS As Integer = GvRow.DataKey("CvePS").ToEntero Dim EdMedica As Decimal = 0 If RBLTipoVenta.SelectedValue = "2" Then EdMedica = GvRow.FCTextBox("TxtEdMedica").Text.ToDecimal If Cantidad > 0 Then If AgregarProductoServicio(Cantidad, CveUnidadMedida, Abreviatura, CveClasificacion, Clasificacion, CvePS, "", TxtObsPS.Text.TrimEnd, PU, 0, DdlProyecto.SelectedValue.ToEntero(), DdlProyecto.SelectedItem.Text, DdlSubProyecto.SelectedValue.ToEntero(), DdlSubProyecto.SelectedItem.Text, Serie:=If(DIVCod.Visible, TxtCodigoSerie.Text.Trim, ""), TiempoEntrega:=TxtTiempoEntrega.Text, CuentaPredial:=TxtCuentaPredial.Text.Trim, RegeneraIEPS:=ClienteDesglosaIEPS, CvePromocionDetalle:=-1, ImporteProntoPago:=0, ObjDescuento:=Nothing, CvePrecioLista:=-1, PrecioLista:="", NumTurnos:=0, CantidadConversion:=EdMedica) Then CountPsAgregados = CountPsAgregados + 1 Else Exit For End If End If Next If CountPsAgregados > 0 Then CalculaTotalesVenta() End If If UsuarioActual.CveVendedor > 0 Then DdlVendedor.SelectedValueExist(UsuarioActual.CveVendedor) UpParametros.Update() End If If RBLTipoVenta.SelectedValue.Contiene("5", "6") Then ' 3.avista,4.consig,5.consig mat, 6. avista mat. AsignaAlmacenWS() 'CargaPS(-1, DdlPS) End If If RBLTipoVenta.SelectedValue.Contiene("1") Then TxtPrecio.Enabled = True UpPS.Update() End If RegistraScript("$('#DvModalTipoVenta').modal('hide');") UpCliente.Update() End Sub Protected Sub GvPSProced_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DataKey("Precio").ToDecimal = 0 Then e.Row.FCTextBox("TxtCantidad").Enabled = False End If End If End Sub Protected Sub ChkRequiereTecnicoModal_CheckedChanged(sender As Object, e As EventArgs) 'DvModalRequiereOSFecha.Visible = ChkRequiereTecnicoModal.Checked UpDvModalTipoVenta.Update() End Sub Protected Sub DdlProcedimientoModal_SelectedIndexChanged(sender As Object, e As EventArgs) CargaPSProcedimiento(DdlProcedimientoModal.SelectedValue.ToEntero, DdlClienteSucursalCliente, DdlSubProyectoDatos.SelectedValue.ToEntero, CveClienteSucursalL:=DdlClienteSucursalSucursal, CveTipoVentaL:=RBLTipoVenta.SelectedValue.ToEntero) End Sub Protected Sub ChkVerTodosPS_CheckedChanged(sender As Object, e As EventArgs) CargaPSProcedimiento(DdlProcedimientoModal.SelectedValue.ToEntero, DdlClienteSucursalCliente, DdlSubProyectoDatos.SelectedValue.ToEntero, CveClienteSucursalL:=DdlClienteSucursalSucursal, CveTipoVentaL:=RBLTipoVenta.SelectedValue.ToEntero, AplicaTodos:=ChkVerTodosPS.Checked) End Sub Private Sub CargaPSProcedimiento(CveProcedimiento As Integer, CveClienteL As Integer, CveSubProyectoL As Integer, Optional CveClienteSucursalL As Integer = -1, Optional CveTipoVentaL As Integer = -1, Optional AplicaTodos As Boolean = False) If CveProcedimiento > 0 OrElse AplicaTodos Then If AplicaTodos Then CveProcedimiento = -1 Dim objVenta As New ClsVentas If objVenta.GetProcedimientoProductoListaPrecio(CveProcedimiento, UsuarioActual.CveEmpresa, CveClienteL, CveSubProyectoL, CveClienteSucursalL, CveTipoVentaL) Then GvPSProced.DataSource = objVenta.DtResultados End If objVenta.Dispose() Else GvPSProced.DataSource = Nothing End If GvPSProced.DataBind() DVGvPSProced.Visible = True GvPSProced.Columns(4).Visible = RBLTipoVenta.SelectedValue = "2" ' comisión Ed. Médica, solo cuando es pago directo UpDvModalTipoVenta.Update() End Sub Private Function GeneraOS(ByRef TransacSQL As SqlClient.SqlTransaction, ByRef errorList As List(Of String), CveVentaOS As Integer, SerieFolioOS As String) As Boolean Dim Errores As Boolean = False Dim CveVentaAdicional As Integer = -1 Dim CveOSTipo As Integer = GlobalDTTipoOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveOrdenServicioTipo", " Estatus = 'Activo' ").ToEntero Dim EstatusOrdenServicio As Integer = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 1").ToEntero 'If RBLTipoVenta.SelectedValue.Contiene("5", "6") Then ' CveVentaAdicional = CveVentaOS 'End If If RBLTipoVenta.SelectedValue.Contiene("2") AndAlso DdlTipoComprobante.SelectedValue = "Rem" Then 'pago directo, sino require técnico, que pase de estatus EstatusOrdenServicio = GlobalDTEstatusOrdenServicios(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveEstatusOrdenServicio", "TipoEstatus = 4").ToEntero 'tipo: 4.finalizada.3.en proceso CveVentaAdicional = CveVentaOS End If Dim ObjOrdenServicio As New ClsOS(TransacSQL) If ObjOrdenServicio.AddOrdenesServicios(CveClienteOS, DdlSubProyectoDatos.SelectedValue.ToEntero, UsuarioActual.Nombre, TxtFechaOS.Text.Replace(",", "").ToDateTime, $"Venta: {LblSerie.Text}-{TxtFolio.Text}", UsuarioActual.CveUsuario, EstatusOrdenServicio, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveVentaOS, CveVentaAdicional, -1, CveOSTipo, CveClienteSucursal:=CveClienteSucursalOS, Direccion:="", Telefono:="", CveModeloAuto:=-1, Año:="", CveMedico:=DdlMedico.SelectedValue.ToEntero, CveProcedimiento:=DdlProcedimiento.SelectedValue.ToEntero, CveTipoVenta:=RBLTipoVenta.SelectedValue.ToEntero, FechaCita:=TxtFechaOS.Text.Replace(",", "").ToDateTime, Paciente:=TxtPaciente.Text, IdentificadorCliente:=TxtEpisodio.Text) Then CveOSVentaMedica = ObjOrdenServicio.CveOS FolioOSVentaMedica = ObjOrdenServicio.Folio Else errorList.Add("Se presento un error al guardar la orden de servicio.") Errores = True End If Dim CvePSDetalle As Integer = UsuarioActual.Empresa.Funcionalidad(708).ToEntero If Not CvePSDetalle > 0 Then errorList.Add("No se tiene asignado un producto para la orden de servicio (FNC 708).") Errores = True End If If Not Errores Then Dim CveOsDetalle = ObjOrdenServicio.AddOrdenesServiciosDetalle(ObjOrdenServicio.CveOS, CvePSDetalle, 1, -1, -1, $"Venta: {LblSerie.Text}-{TxtFolio.Text}", False, True, False, -1, "-1", "-1", "-1", "", UsuarioActual.CveUsuario, Archivo:="") If Not CveOsDetalle > 0 Then ' MensajeAlert.AppendFormat(String.Format("
    La Orden de Servicio: {0} se generó correctamente.
    ", ObjOrdenServicio.Folio)) ' MensajeAlert.AppendFormat("
    ", Encripta(String.Format("OP=OS&CVEOS={0}", ObjOrdenServicio.CveOS))) 'Else errorList.Add("Se presento un error al guardar la el detalle de la orden de servicio.") Errores = True End If End If If Not Errores Then Dim ObjEventos As New ClsOIEventos(TransacSQL) Dim LigaVenta As String = String.Format("Pedido en Folio: {1}", CveVentaOS, SerieFolioOS) If Not ObjEventos.AddEventoBitacora(LigaVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveOS:=CveOSVentaMedica) Then errorList.Add("Se presento un error al guardar la bitacora de la orden de servicio.") Errores = True End If End If Return If(Errores, False, True) End Function Protected Sub LnkAddMedicoModal_Click(sender As Object, e As EventArgs) 'iFrameAddMedicoProcedimiento.Attributes.Add("src", "/Ventas/CatMedicos.aspx?EsFrame=1") AddMedicoControl.CveMedico = -1 AddMedicoControl.LimpiarControles() UpModalAddMedico.Update() RegistraScript("$('#DvModalAddMedico').modal();") End Sub Protected Sub LnkAddProcedimientoModal_Click(sender As Object, e As EventArgs) 'iFrameAddMedicoProcedimiento.Attributes.Add("src", "/Ventas/CatProcedimientoDetalle.aspx?CveProcedimiento=-1") AddProcedimientoControl.CveProcedimiento = -1 AddProcedimientoControl.LimpiarControles() UpModalAddProcedimiento.Update() RegistraScript("$('#DvModalAddProcedimiento').modal();") End Sub Protected Sub BtnRecargaMedicos_Click(sender As Object, e As EventArgs) CargaMedicos(HdnCveMedicoNuevo.Value.ToEntero) End Sub Protected Sub BtnRecargaProcedimientos_Click(sender As Object, e As EventArgs) CargaProcedimientos(HdnCveProcedimientoNuevo.Value.ToEntero) End Sub Private Sub AsignaAlmacenWS() CveAlmacenFiltroDdl = -1 Dim tCveAlmacenExistencia As Integer = -1 If UsuarioActual.Empresa.Funcionalidad(578) = "1" Then If DdlSucursalCliente.SelectedValue.ToEntero > 0 Then Dim drr As DataRow = GlobalDTClientesSucursales(UsuarioActual.CveEmpresa, CveCliente).FiltroPrimero($"CveClienteSucursal={DdlSucursalCliente.SelectedValue}") If drr IsNot Nothing Then If RBLTipoVenta.SelectedValue.Contiene("6") Then 'cuando es A-vista tCveAlmacenExistencia = drr("CveAlmacenAlterno").ToString.ToEntero ElseIf RBLTipoVenta.SelectedValue.Contiene("5") Then 'cuando es Consignación tCveAlmacenExistencia = drr("CveAlmacenConsignacion").ToString.ToEntero Else tCveAlmacenExistencia = -1 'drr("CveAlmacenAsignado").ToString.ToEntero End If End If Else Dim drr As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa, CveCliente:=CveCliente).FiltroPrimero("") If drr IsNot Nothing Then If RBLTipoVenta.SelectedValue.Contiene("6") Then 'cuando es A-vista tCveAlmacenExistencia = drr("CveAlmacenAlterno").ToString.ToEntero ElseIf RBLTipoVenta.SelectedValue.Contiene("5") Then 'cuando es Consignación tCveAlmacenExistencia = drr("CveAlmacenConsignacion").ToString.ToEntero Else tCveAlmacenExistencia = -1 ' drr("CveAlmacenAsignado").ToString.ToEntero '' cuando Fuera de Línea End If End If End If CveAlmacenFiltroDdl = tCveAlmacenExistencia If Not CveAlmacenFiltroDdl > 0 Then CveAlmacenFiltroDdl = If(CveAlmacenAsignado > 0, CveAlmacenAsignado, -1) End If DdlPS.ddlWS.Attributes.Remove("data-CveAlmacen") DdlPS.ddlWS.Attributes.Add("data-CveAlmacen", CveAlmacenFiltroDdl.ToString) End If End Sub #End Region Protected Sub LnkCancelarSoloCFDI_Click(sender As Object, e As EventArgs) If CveVenta > 0 Then Dim RowVenta As DataRow = Nothing Using ObjVentas As New ClsVentas If (ObjVentas.GetVenta(CveVenta, UsuarioActual.CveEmpresa)) Then RowVenta = ObjVentas.DtResultados.Copy().Rows(0) End If End Using If RowVenta IsNot Nothing Then Dim FolioFiscal As String = RowVenta("FolioFiscal").ToString().Trim() Dim Total As Decimal = RowVenta("Total").ToString().ToDecimal() Dim RFCReceptor As String = RowVenta("RFCReceptor").ToString() Dim CvePACCancelacion As Integer = 5 Dim ObjTimbrado As New Timbrado Dim resp = ObjTimbrado.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, UsuarioActual.Empresa.RFC, CvePACCancelacion:=CvePACCancelacion, ValidaFactura:=False, CveSATMotivoCancelacion:=2) If resp IsNot Nothing Then If resp.Verificado Then Dim CancelacionAcuse = resp.CancelacionAcuse Using ObjVentas As New ClsVentas If Not ObjVentas.UpdateCancelaVenta(CveVenta, Now, CancelacionAcuse, UsuarioActual.CveEmpresa, CvePACCancelacion, 0, EstadoCancelacion:="", CveEstadoCancelacion:=0) Then Alert("Ocurrió un error al guardar el estatus de cancelación") End If End Using End If Alert(resp.Estado) End If End If End If End Sub Protected Sub LBNotaCredito_Click(sender As Object, e As EventArgs) CargaDdlNCPS() DivTipoVentaAsingado.Visible = False If CveVenta <= 0 Then 'cuando es nueva la factura DivGvCxC.Visible = True CargaCxC() End If UpAplicarNC.Update() 'CARGAR RNC RblRNCTipo_SelectedIndexChanged(RblRNCTipo, EventArgs.Empty) If UsuarioActual.Empresa.Funcionalidad(531) = "1" Then TxtImportesRemisionesNC.Text = "0.00" TxtNCImporte.Text = "0.00" VerificaAutorizacionEgs(VerificarImportes:=True, MostrarAlertas:=False) If Me.CveAutorizacion > 0 Then Using ObjVentas As New ClsVentas If ObjVentas.GetAutorizacion(Me.CveAutorizacion, UsuarioActual.CveEmpresa) Then If ObjVentas.DtResultados.FiltroPrimeroValor("CveTipoVenta").ToEntero() > 0 Then DivTipoVentaAsingado.Visible = True LblTipoVentaAsignado.Text = ObjVentas.DtResultados.FiltroPrimeroValor("TipoVenta") DdlNCPS.Enabled = True End If End If End Using Else DivTipoVentaAsingado.Visible = True LblTipoVentaAsignado.Text = "Sin definir" DdlNCPS.Enabled = True End If End If RegistraScript("$('#ModalAplicarNC').modal('show');", "ModalNC") End Sub Protected Sub BtnCargaAuxiliarConta_Click(sender As Object, e As EventArgs) CargarSaldoAuxiliar(CveCliente) End Sub Protected Sub LnkDescargaDirecta_Click(sender As Object, e As EventArgs) ImpresionDirectaPDF() End Sub Private Sub ImpresionDirectaPDF() Dim ObjFactura As New Modelos.Factura(UsuarioActual, Me.CveVenta, UsuarioActual.CveEmpresa, CargaDTDetalle:=False, CargaDatosCliente:=False, CargaDatosRelacionados:=False, VerificaAlmacen:=False) Dim ExistePDF As Boolean = False Dim ArchivoPDF As String = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) If File.Exists(ArchivoPDF) Then ExistePDF = True Else 'REGENERAR EL PDF Try GenerarPDFVenta(CveVenta, AplicaPagare:="1", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) If File.Exists(ArchivoPDF) Then ExistePDF = True End If Catch ex As Exception OnError("Ocurrió un error al regenerar el PDF", ex) End Try End If If ExistePDF Then Dim pdf64 = Convert.ToBase64String(System.IO.File.ReadAllBytes(ArchivoPDF)) RegistraScript($"impresionBase64('{pdf64}');", "Imprimir") Else Alert("No se pudo imprimir el pdf directamente. favor de descargar manualmente el pdf.", TipoMensaje.MsgAdvertencia) End If End Sub Protected Sub TxtFechaAnticipoCliente_TextChanged(sender As Object, e As EventArgs) CargaAnticipos(CveCliente) End Sub Protected Sub BtnPorPS_Click(sender As Object, e As EventArgs) If HdnDescPS.Value.ToEntero() > 0 Then Dim RowUpdate As DataRow = TmpDT.Select($"Consec = {HdnConsecPS.Value}").FirstOrDefault() If RowUpdate IsNot Nothing Then If HdnDescPS.Value.ToDecimal().RoundSQL(2) <= RowUpdate("Total").ToString().ToDecimal() Then RowUpdate("Descuento") = HdnDescPS.Value.ToDecimal().RoundSQL(2) Dim TotalCalculableImpuestos = (RowUpdate("Cantidad").ToString().ToDecimal * RowUpdate("PU").ToString().ToDecimal) - RowUpdate("Descuento").ToString().ToDecimal() Dim TotalCalculableImpuestosIVA As Decimal = (TotalCalculableImpuestos * (1 + RowUpdate("PorcentajeIEPS").ToString().ToDecimal)) Dim ImporteIVA = (RowUpdate("PorcentajeIVA").ToString().ToDouble * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) RowUpdate("ImporteIVA") = ImporteIVA RowUpdate("TotalConImpuestos") = (RowUpdate("Total").ToString().ToDecimal() - RowUpdate("Descuento").ToString().ToDecimal() + RowUpdate("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) CalculaTotalesVenta() RegistraScript("$('#ModalDescPS').modal('hide');") Else Alert("El descuento no puede ser mayor al total.", TipoMensaje.MsgAdvertencia) End If End If Else Alert("No se pudo aplicar el descuento", TipoMensaje.MsgAdvertencia) End If End Sub Protected Sub BtnAutorizarDescuento_Click(sender As Object, e As EventArgs) Dim UsuarioAutorizar As Usuario = Nothing Dim NombreCadena As String = ClsPaginas.GlobalNombreCadenaConexionDominio(Request.Url.Host.ToUpper()) Using ObjUsuario As New ClsSisUsuarioAutenticacion(NombreCadena:=NombreCadena) If RblTipoAutorizacionDesc.SelectedValue = "1" Then UsuarioAutorizar = ObjUsuario.ValidaUsuario(txtUserDesc.Text.Trim, Encripta(txtPassDesc.Text), CveEmpresa:=UsuarioActual.CveEmpresa) Else Dim CveUsuarioNuevo As Integer = -1 Using ObjUsuarios As New ClsSisUsuarios CveUsuarioNuevo = ObjUsuarios.ValidaUsuarioCodigoAcceso(TxtCodAccDesc.Text.Trim, UsuarioActual.CveEmpresa) End Using If CveUsuarioNuevo > 0 Then Dim DrUsuario As DataRow = GlobalDTUsuarios(CveUsuarioNuevo, UsuarioActual.CveEmpresa).FiltraParametros("Estatus = 1", "", {"CveUsuario", "Usuario", "Nombre", "Contraseña", "CveEmpresa", "Rol"}).Rows(0) If DrUsuario IsNot Nothing Then Dim tUsuario, tContraseña As String Dim tCveEmpresa As Integer tUsuario = DrUsuario("Usuario").ToString tContraseña = DrUsuario("Contraseña").ToString tCveEmpresa = DrUsuario("CveEmpresa").ToString.ToEntero UsuarioAutorizar = ObjUsuario.ValidaUsuario(tUsuario, tContraseña, CveEmpresa:=tCveEmpresa) End If End If End If End Using If UsuarioAutorizar IsNot Nothing Then If UsuarioAutorizar.TienePermisoProceso(374) Then txtUserDesc.Text = "" txtPassDesc.Text = "" 'ASIGNA EL PORCENTAJE A APLICAR DEL USUARIO QUE AUTORIZA Dim RowUpdate As DataRow = TmpDT.Select($"Consec = {HdnConsecPS.Value}").FirstOrDefault() If RowUpdate IsNot Nothing Then Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=RowUpdate("CvePS").ToString().ToEntero()).FiltroPrimero("") If DrPS IsNot Nothing Then If DrPS("PorMaximoDescuento").ToString().ToDecimal() > 0 Then HdnPorcentajeMaxDescPS.Value = DrPS("PorMaximoDescuento").ToString() Else HdnPorcentajeMaxDescPS.Value = UsuarioAutorizar.DescuentoAutorizado.ToString() End If End If End If UpDescPS.Update() RegistraScript("$('#ModalPermisoDesc').modal('hide');$('#ModalDescPS').modal({backdrop: 'static', keyboard: false});", "AUT") Else Alert("El usuario no tiene permiso para autorizar", TipoMensaje.MsgAdvertencia) End If Else Alert("No se encontro el usuario para autorizar", TipoMensaje.MsgAdvertencia) End If End Sub Protected Sub ImgAntiPend_Click(sender As Object, e As EventArgs) ' $get('HdnTipoDescuento').value = '3'; MuestraAnticipos(); HdnTipoDescuento.Value = "3" If UsuarioActual.Empresa.Funcionalidad(109) = "1" OrElse UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If DdlTipoAmortizacionAnticipo.Items.FindByValue("4") Is Nothing Then DdlTipoAmortizacionAnticipo.Items.Insert(1, New ListItem("Pago con devolución", "4")) End If DdlTipoAmortizacionAnticipo.SelectedValueExist("4") DdlTipoRelacionAnticipo.SelectedValueExist("-1") DdlTipoAmortizacionAnticipo_SelectedIndexChanged(DdlTipoAmortizacionAnticipo, EventArgs.Empty) divAmortizacionTipoRelacion.Visible = False If DdlTipoComprobante.SelectedValue = "Rem" Then If DdlTipoAmortizacionAnticipo.Items.FindByValue("1") IsNot Nothing Then DdlTipoAmortizacionAnticipo.Items.Remove(DdlTipoAmortizacionAnticipo.Items.FindByValue("1")) End If If DdlTipoAmortizacionAnticipo.Items.FindByValue("2") IsNot Nothing Then DdlTipoAmortizacionAnticipo.Items.Remove(DdlTipoAmortizacionAnticipo.Items.FindByValue("2")) End If Else If Not (UsuarioActual.Empresa.Funcionalidad(382) = "1") Then If DdlTipoAmortizacionAnticipo.Items.FindByValue("1") Is Nothing Then DdlTipoAmortizacionAnticipo.Items.Add(New ListItem("Amortización anticipo en descuento", "1")) End If End If If DdlTipoAmortizacionAnticipo.Items.FindByValue("2") Is Nothing Then DdlTipoAmortizacionAnticipo.Items.Add(New ListItem("Amortización anticipo con nota de crédito", "2")) End If End If End If UpAnticipos.Update() RegistraScript("MuestraAnticipos();", "AE") End Sub Private Sub RecalculaPrecios(ByRef RecalculoPromociones As Boolean, Optional AplicarPromociones As Boolean = False) Dim PuedeRecalcular As Boolean = False If CveVenta <= 0 OrElse EsCreaApartirDe OrElse (ModalidadEdicion AndAlso Not DdlTipoComprobante.SelectedValue = "Cot") Then PuedeRecalcular = True End If 'SI ES FACTURACION DE COTIZACION, NO PERMITIR CAMBIAR LISTA DE PRECIO If DtCotizacionesPS IsNot Nothing AndAlso DtCotizacionesPS.Rows.Count > 0 Then PuedeRecalcular = False End If If AplicarPromociones Then PuedeRecalcular = True End If If TmpDT IsNot Nothing AndAlso PuedeRecalcular Then For Each Row As DataRow In TmpDT.Rows Dim Cantidad As Decimal = Row("Cantidad").ToString().ToDecimal() Dim CveClasificacion As Integer = Row("CveClasificacion").ToString().ToEntero Dim CvePS As Integer = Row("CvePS").ToString().ToEntero Dim CvePrecioListaSugerido As Integer = -1 Dim ObjPrecioSugerido As Modelos.MPrecioSugerido = Nothing If AplicarPromociones Then ObjPrecioSugerido = New Modelos.MPrecioSugerido() ObjPrecioSugerido.PrecioSugerido = Row("PU").ToString().ToDecimal() ObjPrecioSugerido.CvePrecioLista = Row("CvePrecioLista").ToString().ToEntero() Else ObjPrecioSugerido = CalculaPrecioSugerido(CvePS, CveClasificacion) End If If ObjPrecioSugerido.PrecioSugerido > 0 Then Dim PU As Decimal = ObjPrecioSugerido.PrecioSugerido.RoundSQL(6) Dim ObjDescuento As Modelos.VentaDescuentos = CalcularDescuentos(CvePS, Cantidad, PU) If ObjDescuento.EsPUModificado Then PU = ObjDescuento.PU End If 'SI NO TIENE PROMOCION, NO MODIFICAR NADA If AplicarPromociones AndAlso ObjDescuento.CvePromocionDetalle <= 0 Then Continue For End If Row("PU") = PU Dim TotalCalculableImpuestos As Decimal = ((Cantidad * PU) - (ObjDescuento.ImporteDescuento)) Dim TotalCalculableImpuestosIVA As Decimal = 0 TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + Row("PorcentajeIEPS").ToString().ToDecimal) Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales) Row("Descuento") = (ObjDescuento.ImporteDescuento).RoundSQL(NumeroDecimales) Row("Total") = (Cantidad * PU) Row("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales) Row("TotalConImpuestos") = (Row("Total").ToString().ToDecimal() - Row("Descuento").ToString().ToDecimal() + Row("ImporteIVA").ToString().ToDecimal()).RoundSQL(2) Row("CvePromocionDetalle") = ObjDescuento.CvePromocionDetalle If ObjDescuento.CvePromocionDetalle > 0 Then RecalculoPromociones = True End If End If Next Me.CalculaTotalesVenta() End If End Sub Protected Sub GvAplicaRNCDevolucion_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then e.Row.FCTextBox("TxtCantidadAplicaDevolucion").Attributes.Add("onkeyup", $"LimitaCantidadAplicaDev({e.Row.DBCampo("CantRes").ToDecimal}, this);") If UsuarioActual.Empresa.Tipo_CentroCosto = 1 Or UsuarioActual.Empresa.Tipo_CentroCosto = 2 Then e.Row.FCLabel("LblProyecto").Text = e.Row.FCLabel("LblSubProyecto").Text e.Row.FCLabel("LblProyecto").Style.Clear() e.Row.FCLabel("LblSubProyecto").Text = "" 'e.Row.FCCheckBox("ChkAplicar").Attributes.Add("onclick", $"CalculaSaldoRNCChk({e.Row.FCTextBox("TxtImporte").ClientID},{e.Row.DBCampo("Saldo").ToDouble}, this);") End If End If End Sub Protected Sub BtnAplicaRNCDevolucion_Click(sender As Object, e As EventArgs) Dim Selecciono As Boolean = False For Each Gv As GridViewRow In GvAplicaRNCDevolucion.Rows If Gv.FCCheckBox("Chk").Checked And Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDouble > 0 Then Selecciono = True Exit For End If Next If Not Selecciono Then Alert("Tiene que seleccionar al menos un concepto y este dege tener una cantidad mayor a 0. Por favor verifique y vuelva a intentar", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlTipoComprobante.Items.FindByValue("RNC") Is Nothing Then DdlTipoComprobante.Items.Add(New ListItem("Remisión de nota de crédito", "RNC")) End If DdlTipoComprobante.SelectedValueExist("RNC") TmpDT.Clear() For Each Gv As GridViewRow In GvAplicaRNCDevolucion.Rows If Gv.FCCheckBox("Chk").Checked And Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDecimal > 0 Then Dim Cantidad As Decimal = Gv.FCTextBox("TxtCantidadAplicaDevolucion").Text.ToDecimal Dim Descuento As Decimal = Cantidad * Gv.DataKey("Descuento").ToString().ToDecimal / Gv.DataKey("Cantidad").ToString().ToDecimal Dim PU As Decimal = Gv.DataKey("PU").ToDecimal Dim Total As Decimal = (Cantidad * PU) Dim TotalImpuestos As Decimal = (Cantidad * PU) - Descuento Dim TotalCalculableImpuestosIVA As Decimal = TotalImpuestos * (1 + Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal) Dim ImporteIVA As Decimal = TotalCalculableImpuestosIVA * Gv.DataKey("PorcentajeIVA").ToString().ToDecimal Dim ImporteRetIVA As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeRetIVA").ToString().ToDecimal Dim ImporteRetISR As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeRetISR").ToString().ToDecimal Dim ImporteIEPS As Decimal = TotalImpuestos * Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal Dim CodigoObjetoImpuesto As String = Gv.DataKey("CodigoObjetoImpuesto") AgregaTempDT(TmpDT, Gv.DataKey("CvePS").ToString().ToEntero(), Gv.DataKey("PS").ToString(), Gv.DataKey("Codigo").ToString(), Gv.DataKey("CodigoPS").ToString(), Gv.DataKey("CveTipoPS").ToString().ToEntero(), Gv.DataKey("CveTipoInvPS").ToString().ToEntero(), Gv.DataKey("CveUM").ToString().ToEntero(), Gv.DataKey("UM").ToString(), Gv.DataKey("CveClasificacion").ToString().ToEntero(), Gv.DataKey("Clasificacion").ToString(), Gv.DataKey("CveProyecto").ToString().ToEntero(), Gv.DataKey("Proyecto").ToString(), Gv.DataKey("CveSubProyecto").ToString().ToEntero(), Gv.DataKey("SubProyecto").ToString(), Gv.DataKey("Obs").ToString(), Cantidad, PU, Gv.DataKey("PorcentajeIVA").ToString().ToDecimal, ImporteIVA, Gv.DataKey("PorcentajeRetIVA").ToString().ToDecimal, ImporteRetIVA, Gv.DataKey("PorcentajeRetISR").ToString().ToDecimal, ImporteRetISR, Gv.DataKey("PorcentajeIEPS").ToString().ToDecimal, ImporteIEPS, -1, Descuento, Total, "", "", -1, -1, Gv.DataKey("SATClaveProdServ").ToString(), Gv.DataKey("SATClaveUM").ToString(), -1, Gv.DataKey("CveVentaDetalle").ToString().ToEntero(), -1, -1, -1, -1, Gv.DataKey("CveTamaño").ToEntero(), CodigoObjetoImpuesto:=CodigoObjetoImpuesto) End If Next BtnsFacturar.Visible = False BtnEditarRemision.Visible = False If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then LiCalcularPromociones.Visible = False End If LimpiaDocumentoDEV() CambiaTipoDocto() CalculaTotalesVenta() If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then TxtAtencionA.Enabled = True UpCliente.Update() End If UpParametros.Update() AplicaDevolucion = True CveVentaDevolucion = Me.CveVenta SaldoVentaDevolucion = HplSaldoAuxiliar.Text.ToDecimal RegistraScript("$('#DivAplicaRNCDevolucion').modal('hide')") End Sub Protected Sub LnkFacturasRelacionadas_Click(sender As Object, e As EventArgs) CargaFacturasARelacionar() If Me.AplicoNCFacturaActual Then DivDdlFacturaRela.Visible = True BtnAgregarFacturasRelaciondas.Visible = True DdlTipoRelacionARelacionar.Enabled = True DdlFacturaARelacionar.Enabled = True Me.TmpDTFacturasRelacionadas = Nothing GvFacturasRelacionadas.Columns(2).Visible = True GvFacturasRelacionadas.DataSource = Me.TmpDTFacturasRelacionadas GvFacturasRelacionadas.DataBind() End If RegistraScript("$('#DivFacturasRelacionadas').modal('show')") UpFacturasRelacionadas.Update() End Sub Protected Sub RblTipoAutorizacionDesc_SelectedIndexChanged(sender As Object, e As EventArgs) If RblTipoAutorizacionDesc.SelectedValue = "1" Then DivUserPass.Visible = True DivCodAcceso.Visible = False txtUserDesc.Focus() Else DivUserPass.Visible = False DivCodAcceso.Visible = True TxtCodAccDesc.Focus() End If End Sub Protected Function AgendarCirugia(ByRef ObjEventos As ClsOIEventos, CveOS As Integer, FolioOS As Integer) As Boolean Dim TieneError As Boolean = False Try If DdlMedico.SelectedValue.ToEntero() > 0 AndAlso TrVentasMedicas2.Visible AndAlso TdFechaOS1.Visible AndAlso TdFechaOS2.Visible Then Dim FechaCirugia As DateTime = MinFecha If TxtFechaOS.Text.Replace(",", "").ToDateTime() > MinFecha Then FechaCirugia = TxtFechaOS.Text.Replace(",", "").ToDateTime() If FechaCirugia > MinFecha Then Dim CveUsuarioAgendar = -1 Dim CveVendedor As Integer = DdlVendedor.SelectedValue.ToEntero() If CveVendedor > 0 Then Dim strVendedores = GlobalDTVendedores(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CvesUsuariosAsignados", $"CveVendedor = {CveVendedor}") If strVendedores.Split(","c).Length > 0 Then CveUsuarioAgendar = strVendedores.Split(","c)(0).ToEntero() End If End If If CveUsuarioAgendar > 0 Then Dim Descripcion As New StringBuilder If DdlMedico.SelectedValue.ToEntero() > 0 Then Descripcion.AppendFormat("Dr {0} {1}", DdlMedico.SelectedItem.Text, "
    ") End If If DdlProcedimiento.SelectedValue.ToEntero() > 0 Then Descripcion.AppendFormat("Cirugía {0} {1}", DdlProcedimiento.SelectedItem.Text, "
    ") End If Descripcion.AppendFormat("Fecha de Cirugía {0} {1}", FechaCirugia.ToString("dd/MM/yyyy HH:mm"), "
    ") Dim Hospital As String = "" If DdlClienteSucursal.SelectedValue.ToEntero() > 0 Then Hospital = DdlClienteSucursal.SelectedItem.Text ElseIf DdlSucursalCliente.SelectedValue.ToEntero() > 0 Then Hospital = DdlSucursalCliente.SelectedItem.Text Else Hospital = Me.NombreCliente End If Descripcion.AppendFormat("{0} {1}", Hospital, "
    ") Dim Asunto As String = $"Cirugía - {Hospital}" If CveOS > 0 Then Dim OIDescripcion As String = $"Orden de servicio {FolioOS} " Descripcion.AppendFormat("{0} {1}", OIDescripcion, "
    ") End If If Not ObjEventos.AddEventoAgenda(4, Asunto, Descripcion.ToString(), 3, FechaCirugia, FechaCirugia.AddHours(1), CveUsuarioAgendar, UsuarioActual.CveEmpresa, RecurrenciaTipo:=0, CveTipoEvento:=2, CveOS:=CveOS) Then TieneError = True End If End If End If End If End If Catch ex As Exception TieneError = True OnError("Ocurrió un error al generar la agenda", ex) End Try Return Not TieneError End Function #Region "Activa Anticipos" Protected Sub LnkRecargaAnticipos_Click(sender As Object, e As EventArgs) If CveCliente > 0 Then CargaAnticipos(CveCliente) End If End Sub Protected Sub LnkSolicitarActivarAnticipo_Click(sender As Object, e As EventArgs) 'falta sacar a los usuarios a notificar. Dim gvr As GridViewRow = DirectCast(DirectCast(sender, LinkButton).BindingContainer, GridViewRow) Dim Folio As String = gvr.DataKey("Folio") Dim ObjProceso As New ClsSisProcesos Dim dtt As DataTable = Nothing If ObjProceso.GetUsuariosconProceso(379, UsuarioActual.CveEmpresa) Then 'proceso para autorizar dtt = ObjProceso.DtResultados End If ObjProceso.Dispose() If dtt IsNot Nothing AndAlso dtt.Rows.Count > 0 Then For Each dr As DataRow In dtt.Rows ClsSisNotificaciones.EnviarAlerta("Solicitud de Anticipo", $"Solicitud de activación de anticipo Folio: {Folio}
    Ir Activar", dr("CveUsuario").ToString, Tipo:=TipoNotificacion.ToastInformacionB) Next End If Dim CveVenta As Integer = gvr.DataKey("CveVenta").ToEntero() Dim CveIE As Integer = gvr.DataKey("CveIE").ToEntero() Dim Saldo As Decimal = gvr.DataKey("Saldo").ToDecimal() Dim ObjVta As New ClsVentas If ObjVta.AddAutorizacionLimite(UsuarioActual.CveEmpresa, CveCliente, DdlVendedor.SelectedValue.ToEntero(), Saldo, 0, UsuarioActual.CveUsuario, 1, TipoDocumento:="Ant", DiasVencidos:=1, CveVenta:=CveVenta, CveIE:=CveIE) Then Dim msgAlert = "La autorización se agregó correctamente." Alert(msgAlert, TipoMensaje.ToastInformacionB) End If ObjVta.Dispose() End Sub #End Region Public Function GeneraLigaExistencias() As String Return " ver " End Function Protected Sub GvVerExistencias_RowDataBound(sender As Object, e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.DBCampo("CveAlmacen") = "" Then e.Row.CssClass = "Totales" End If End If End Sub Private Sub CargaGiro() Dim Dt As DataTable = GlobalDTClienteClasificaciones(UsuarioActual.CveEmpresa) DdlGiro.DataSource = Dt DdlGiro.DataBind() DdlGiro.Items.Insert(0, New ListItem("Seleccione", "-1")) UpAgregarCliente.Update() End Sub 'Public Class ClsVentasTemp ' Implements IDisposable ' 'SQL ' Private SqlConexion As SqlClient.SqlConnection ' Private SqlAdapter As SqlClient.SqlDataAdapter ' Private SqlCommand As SqlClient.SqlCommand ' Private SqlTransacc As SqlClient.SqlTransaction ' Private Data As DataTable ' Private Dataset As DataSet ' 'Atributos de la clase ' Private disposedValue As Boolean = False ' Para detectar llamadas redundantes ' Private CveConexion As Integer = 0 ' Private EsTransaccionCompartida As Boolean = False ' Public ReadOnly Property DtResultados() As DataTable ' Get ' DtResultados = Data ' End Get ' End Property ' Public Function IniciaTransacSQL() As SqlClient.SqlTransaction ' If SqlTransacc Is Nothing Then SqlTransacc = SqlConexion.BeginTransaction() ' Return SqlTransacc ' End Function ' Public Sub Commit() ' SqlTransacc.Commit() ' End Sub ' Public Sub RollBack() ' SqlTransacc.Rollback() ' End Sub ' Sub New(Optional TransaccionCompartida As SqlClient.SqlTransaction = Nothing, Optional UsuarioActual As Usuario = Nothing) ' If TransaccionCompartida Is Nothing Then ' SqlConexion = New SqlClient.SqlConnection ' SqlConexion.ConnectionString = If(UsuarioActual IsNot Nothing, UsuarioActual.RutaDB, ClsPaginas.UsuarioActualRutaDB) ' Try ' SqlConexion.Open() ' Catch ex As Exception ' OnError("Ocurrió un error al intentar conectarse a la base de datos.", ex) ' End Try ' Else ' SqlConexion = TransaccionCompartida.Connection ' SqlTransacc = TransaccionCompartida ' EsTransaccionCompartida = True ' End If ' SqlAdapter = New SqlClient.SqlDataAdapter("", SqlConexion) ' ConexionAdd() ' End Sub ' Private Sub DataAdapter(ByVal pStrSQL As String, Optional ByVal TipoComando As CommandType = CommandType.StoredProcedure) ' With SqlAdapter.SelectCommand ' .Parameters.Clear() ' .CommandText = pStrSQL ' .CommandType = TipoComando ' End With ' If Not SqlTransacc Is Nothing Then SqlAdapter.SelectCommand.Transaction = SqlTransacc ' Data = New DataTable ' End Sub ' Private Sub ConexionAdd() ' If Not EsTransaccionCompartida AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then ' Try ' DataAdapter("PA_Sis_RegistrarConexion") ' With SqlAdapter.SelectCommand.Parameters ' .Add("@Clase", SqlDbType.VarChar).Value = Me.GetType().Name ' .Add("@Modulo", SqlDbType.VarChar).Value = String.Format("{0}?{1}", HttpContext.Current.Request.Url.AbsolutePath.ToString, HttpContext.Current.Request.QueryString.ToString) ' .Add("@IDConexion", SqlDbType.Int).Direction = ParameterDirection.Output ' End With ' SqlAdapter.Fill(Data) ' CveConexion = SqlAdapter.SelectCommand.Parameters("@IDConexion").Value.ToString.ToEntero ' Catch ex As Exception ' OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) ' End Try ' End If ' End Sub ' Private Sub ConexionClose() ' If CveConexion > 0 AndAlso ConfigurationManager.AppSettings("RegistraConexion") IsNot Nothing AndAlso ConfigurationManager.AppSettings("RegistraConexion").ToString() = "1" Then ' DataAdapter(String.Format("UPDATE Sis_Conexiones SET FechaCierre = GETDATE() WHERE CveConexion = {0}", CveConexion), CommandType.Text) ' Try ' SqlAdapter.Fill(Data) ' Catch ex As Exception ' OnError("Ocurrió un error registrar la conexión.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) ' End Try ' CveConexion = 0 ' End If ' End Sub ' Public Function UpdateVentaAdjunto(CveVenta As Integer, Adjunto As String, CveEmpresa As Integer) As Boolean ' Dim Retorno As Boolean = False ' DataAdapter("PA_Vta_VentaAdjuntoUpdate") ' With SqlAdapter.SelectCommand.Parameters ' .Add("@CveVenta", SqlDbType.Int).Value = CveVenta ' .Add("@Adjunto", SqlDbType.VarChar).Value = Adjunto ' .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa ' End With ' Try ' SqlAdapter.Fill(Data) ' Retorno = True ' Catch ex As Exception ' OnError("Ocurrió un error al actualizar el adjunto de la venta.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo) ' End Try ' Return Retorno ' End Function ' ' IDisposable ' Protected Overridable Sub Dispose(disposing As Boolean) ' If Not Me.disposedValue Then ' If disposing Then ' ' TODO: dispose managed state (managed objects). ' If Not Data Is Nothing Then Data.Dispose() : Data = Nothing ' If Not Dataset Is Nothing Then Dataset.Dispose() : Dataset = Nothing ' If Not SqlAdapter Is Nothing Then SqlAdapter.Dispose() : SqlAdapter = Nothing ' If Not SqlCommand Is Nothing Then SqlCommand.Dispose() : SqlCommand = Nothing ' If Not SqlTransacc Is Nothing Then SqlTransacc.Dispose() : SqlTransacc = Nothing ' If SqlConexion.State <> ConnectionState.Closed Then SqlConexion.Close() ' If Not SqlConexion Is Nothing Then SqlConexion.Dispose() : SqlConexion = Nothing ' End If ' ' TODO: free unmanaged resources (unmanaged objects) and override Finalize() below. ' ' TODO: set large fields to null. ' End If ' Me.disposedValue = True ' End Sub ' ' This code added by Visual Basic to correctly implement the disposable pattern. ' Public Sub Dispose() Implements IDisposable.Dispose ' ' Do not change this code. Put cleanup code in Dispose(disposing As Boolean) above. ' ConexionClose() ' Dispose(True) ' GC.SuppressFinalize(Me) ' End Sub 'End Class Protected Sub ChkRemEspecial_CheckedChanged(sender As Object, e As EventArgs) If CveVenta > 0 Then Dim objV As New ClsVentas If objV.UpdateVentaRemisionEspecial(CveVenta, If(ChkRemEspecial.Checked, 2000, 0), Now.AddDays(7), UsuarioActual.CveEmpresa) Then Alert("Se aplicó el cambio", TipoMensaje.ToastInformacion) End If objV.Dispose() End If End Sub Protected Sub DdlVendedor_SelectedIndexChanged(sender As Object, e As EventArgs) 'RECARGAR PROMOCIONES Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, TxtFecha.Text.ToDateTime, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() End Sub Protected Sub BtnCrearCliente_Click(sender As Object, e As EventArgs) DivValidaRFC.Visible = True DivValidaPorNombre.Visible = False DivBusquedaCliente.Visible = False 'VERIFICAR SI EL TEXTO DE ENTRADA ES UN NOMBRE O UN RFC If TxtRFCNombre.Text.Length > 13 Then TxtNombreCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() ElseIf EsRFC(TxtRFCNombre.Text.Trim()) Then TxtRFCCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() Else TxtNombreCliente.Text = TxtRFCNombre.Text.Trim().ToUpper() End If BtnValidarRFC_Click(Nothing, EventArgs.Empty) End Sub Private Function EsRFC(texto As String) As Boolean Return Regex.IsMatch(texto, "^[a-zñA-ZÑ.)(/\\&-]{3,4}(\d{6})((\D|\d){2})((\D|\d){1})$") End Function Protected Sub BtnRegresarBusqueda_Click(sender As Object, e As EventArgs) LimpiarAgregarCliente() End Sub Protected Sub LnkCalcularPromociones_Click(sender As Object, e As EventArgs) Dim ObjVentas As New ClsVentas If ObjVentas.GetPromocionesPS(-1, Now().Date, DdlSubProyectoDatos.SelectedValue.ToEntero(), CveCliente, DdlVendedor.SelectedValue.ToEntero(), 1, UsuarioActual.CveEmpresa) Then DtPromociones = ObjVentas.DtResultados.Copy() End If ObjVentas.Dispose() Dim Recalculo As Boolean = False RecalculaPrecios(Recalculo, AplicarPromociones:=True) If Recalculo Then Alert("Se han recalculado los precios y promociones en base a las condiciones actuales") Else Alert("No se han encontrado cambios para las promociones") End If End Sub Private Sub LbVerificarExistencia_Click(sender As Object, e As EventArgs) Handles LbVerificarExistencia.Click 'RegistraScript(String.Format("AbrirVentana('/Inventarios/PopUpExistenciasAlmacenDT.aspx?CveOrdenCompra={0}',800,547,'N');", CveOrdenCompra)) VerificarExistencias() End Sub Private Sub VerificarExistencias() Dim objInv As New ClsInventarios Dim tmpDTPS As DataTable = Nothing If objInv.GetExistenciasPSVenta(CveVenta, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then tmpDTPS = objInv.DtResultados.Copy() End If objInv.Dispose() If tmpDTPS IsNot Nothing Then ' limpio los almacenes donde no tiene ningun producto existencia For i As Integer = tmpDTPS.Columns.Count - 1 To 1 Step -1 If Not tmpDTPS.Columns(i).ColumnName.Contiene("Producto") AndAlso tmpDTPS.SUM(String.Format("[{0}]", tmpDTPS.Columns(i).ColumnName)) = 0 Then tmpDTPS.Columns.RemoveAt(i) End If Next Dim DtExistencias = tmpDTPS.Clone() For i As Integer = 0 To DtExistencias.Columns.Count - 1 If DtExistencias.Columns(i).DataType <> GetType(String) Then DtExistencias.Columns(i).DataType = GetType(String) Next For Each dr As DataRow In tmpDTPS.Rows DtExistencias.ImportRow(dr) Next 'FORMATEAR NUEVO DT For j = 0 To DtExistencias.Rows.Count - 1 For i As Integer = DtExistencias.Columns.Count - 1 To 1 Step -1 If Not DtExistencias.Columns(i).ColumnName.Contiene("Producto") Then If DtExistencias.Rows(j)(i).ToString().ToEntero() = 0 Then DtExistencias.Rows(j)(i) = "-" Else DtExistencias.Rows(j)(i) = DtExistencias.Rows(j)(i).ToString().Replace(".0000", "") End If End If Next Next GvExist.DataSource = DtExistencias GvExist.DataBind() 'ORDENA HACIA LA DERECHA LAS CANTIDAD - OJO!! NO SE USO GV.COLUMNS.COUNT PORQUE LAS COLUMNAS GENERADAS EN BEHIND NO LAS RECONOCE 'EL GV TIENE UNA COLUMNA EXTRA DEBE TENER UN INDICE MAYOR For index As Integer = 1 To DtExistencias.Columns.Count For Each gvr As GridViewRow In GvExist.Rows gvr.Cells(index).HorizontalAlign = HorizontalAlign.Right Next Next End If RegistraScript("$('#DivModalExistenciaTotal').modal('show');") UPExist.Update() End Sub Protected Sub GvExist_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvExist.RowDataBound If e.Row.RowType = DataControlRowType.Header OrElse e.Row.RowType = DataControlRowType.DataRow Then e.Row.Cells(1).Visible = False End If End Sub Protected Sub LnkEnvioDeCorreoFactura_Click(sender As Object, e As EventArgs) 'HdnSerieFolioPago.Value = gvRow.DataKey("SerieFolioCP").ToString() TxtParaMailFactura.Text = CobranzaCorreo HdnSerieFolio.Value = If(ViewState("Serie").ToString.Trim.Length > 0, $"{ViewState("Serie").ToString}-{ViewState("Folio").ToString}", ViewState("Folio").ToString) HdnFolioVenta.Value = If(ViewState("Serie").ToString.Trim.Length > 0, $"{ViewState("Serie").ToString}-{ViewState("Folio").ToString}", ViewState("Folio").ToString) HdnTipoDocto.Value = DdlTipoComprobante.SelectedValue HdnCveVentaFactura.Value = CveVenta.ToString UpSendMailFactura.Update() RegistraScript("$('#ModalDivMailFactura').modal();") End Sub Protected Sub BtnSendMailFactura_Click(sender As Object, e As EventArgs) Try If HdnCveVentaFactura.Value <> "-1" AndAlso HdnFolioVenta.Value <> "-1" Then Dim ArchivoPDF As String = String.Format("{0}/PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, HdnTipoDocto.Value, HdnFolioVenta.Value) 'REGENERAR EL PDF If Not File.Exists(ArchivoPDF) Then Try GenerarPDFVenta(HdnCveVentaFactura.Value.ToEntero(), AplicaPagare:="1", GuardarPDF:=True, RegenerarPDF:=True, DescargarArchivo:=False) Catch ex As Exception OnError("Ocurrió un error al regenerar el PDF", ex) End Try End If Dim ObjMail As New ClsSisMail() Dim Ruta As String = UsuarioActual.Empresa.Ruta Dim Cuerpo As String = TxtBodyFactura.Text Dim Asunto As String = "" Dim TipoComprobante As String = "" Dim Adjunto As String = "" If DdlTipoComprobante.SelectedValue.ToString() = "Ing" Then TipoComprobante = "Factura" If DdlTipoComprobante.SelectedValue.ToString() = "Egs" Then TipoComprobante = "Nota de Crédito" If DdlTipoComprobante.SelectedValue.ToString() = "Dev" Then TipoComprobante = "Nota de Devolución" If DdlTipoComprobante.SelectedValue.ToString() = "Rem" Then TipoComprobante = "Remisión" If DdlTipoComprobante.SelectedValue.ToString() = "Cot" Then TipoComprobante = "Cotización" If DdlTipoComprobante.SelectedValue.ToString() = "Ant" Then TipoComprobante = "Anticipo" Dim DisplayName As String = "" If UsuarioActual.CveEmpresa = 119 Then DisplayName = "Facturación Agroquímicos JAM" Dim ObjVenta As New ClsVentas Dim Dr As DataRow = Nothing If ObjVenta.GetVenta(HdnCveVentaFactura.Value.ToEntero(), UsuarioActual.CveEmpresa) Then If ObjVenta.DtResultados.Rows.Count > 0 Then Dr = ObjVenta.DtResultados.Rows(0) End If End If ObjVenta.Dispose() If HdnTipoDocto.Value.ToString() = "Cot" Then If UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion.Trim.Length > 0 Then Cuerpo = UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion Cuerpo = Cuerpo.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Cuerpo = Cuerpo.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Cuerpo = Cuerpo.Replace("{""TipoDocumento""}", TipoComprobante) Cuerpo = Cuerpo.Replace("{""SerieFolio""}", HdnSerieFolio.Value.ToString()) If Dr IsNot Nothing Then Cuerpo = Cuerpo.Replace("{""FechaFactura""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""ImporteFactura""}", Dr("Total").ToString().FormatoNumero()) Cuerpo = Cuerpo.Replace("{""Fecha""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""Total""}", Dr("Total").ToString().FormatoNumero()) Cuerpo = Cuerpo.Replace("{""FechaVencimiento""}", Dr("FechaVencimiento").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""Vigencia""}", Dr("Vigencia").ToString()) Cuerpo = Cuerpo.Replace("{""AtencionA""}", Dr("AtencionA").ToString()) Cuerpo = Cuerpo.Replace("{""Sucursal""}", Dr("SubProyecto").ToString()) Cuerpo = Cuerpo.Replace("{""DescripcionVenta""}", Dr("DescripcionVenta").ToString()) End If End If If UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion.Trim.Length > 0 Then Asunto = UsuarioActual.Empresa.AsuntoPlantillaMailVentaCotizacion Asunto = Asunto.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Asunto = Asunto.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Asunto = Asunto.Replace("{""TipoDocumento""}", TipoComprobante) Asunto = Asunto.Replace("{""SerieFolio""}", HdnSerieFolio.Value.ToString()) If Dr IsNot Nothing Then Asunto = Asunto.Replace("{""FechaFactura""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""ImporteFactura""}", Dr("Total").ToString().FormatoNumero()) Asunto = Asunto.Replace("{""Fecha""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""Total""}", Dr("Total").ToString().FormatoNumero()) Asunto = Asunto.Replace("{""FechaVencimiento""}", Dr("FechaVencimiento").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""Vigencia""}", Dr("Vigencia").ToString()) Asunto = Asunto.Replace("{""AtencionA""}", Dr("AtencionA").ToString()) Asunto = Asunto.Replace("{""Sucursal""}", Dr("SubProyecto").ToString()) Asunto = Asunto.Replace("{""DescripcionVenta""}", Dr("DescripcionVenta").ToString()) End If End If Else If UsuarioActual.Empresa.PlantillaMailVenta.Trim.Length > 0 Then Cuerpo = UsuarioActual.Empresa.PlantillaMailVenta Cuerpo = Cuerpo.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Cuerpo = Cuerpo.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Cuerpo = Cuerpo.Replace("{""TipoDocumento""}", TipoComprobante) Cuerpo = Cuerpo.Replace("{""SerieFolio""}", HdnSerieFolio.Value.ToString()) If Dr IsNot Nothing Then Cuerpo = Cuerpo.Replace("{""FechaFactura""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""ImporteFactura""}", Dr("Total").ToString().FormatoNumero()) Cuerpo = Cuerpo.Replace("{""Fecha""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""Total""}", Dr("Total").ToString().FormatoNumero()) Cuerpo = Cuerpo.Replace("{""FechaVencimiento""}", Dr("FechaVencimiento").ToString().ToDate().ToShortDateString()) Cuerpo = Cuerpo.Replace("{""Vigencia""}", Dr("Vigencia").ToString()) Cuerpo = Cuerpo.Replace("{""AtencionA""}", Dr("AtencionA").ToString()) Cuerpo = Cuerpo.Replace("{""Sucursal""}", Dr("SubProyecto").ToString()) Cuerpo = Cuerpo.Replace("{""DescripcionVenta""}", Dr("DescripcionVenta").ToString()) End If End If If UsuarioActual.Empresa.AsuntoPlantillaMailVenta.Trim.Length > 0 Then Asunto = UsuarioActual.Empresa.AsuntoPlantillaMailVenta Asunto = Asunto.Replace("{""NombreEmpresa""}", UsuarioActual.Empresa.Empresa) Asunto = Asunto.Replace("{""NombreCliente""}", LtlCliente.Text.Trim) Asunto = Asunto.Replace("{""TipoDocumento""}", TipoComprobante) Asunto = Asunto.Replace("{""SerieFolio""}", HdnSerieFolio.Value.ToString()) If Dr IsNot Nothing Then Asunto = Asunto.Replace("{""FechaFactura""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""ImporteFactura""}", Dr("Total").ToString().FormatoNumero()) Asunto = Asunto.Replace("{""Fecha""}", Dr("Fecha").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""Total""}", Dr("Total").ToString().FormatoNumero()) Asunto = Asunto.Replace("{""FechaVencimiento""}", Dr("FechaVencimiento").ToString().ToDate().ToShortDateString()) Asunto = Asunto.Replace("{""Vigencia""}", Dr("Vigencia").ToString()) Asunto = Asunto.Replace("{""AtencionA""}", Dr("AtencionA").ToString()) Asunto = Asunto.Replace("{""Sucursal""}", Dr("SubProyecto").ToString()) Asunto = Asunto.Replace("{""DescripcionVenta""}", Dr("DescripcionVenta").ToString()) End If End If End If Cuerpo = $"{Cuerpo}
    {TxtBodyFactura.Text}" If UsuarioActual.Empresa.TipoFacturacion = "CFDi" AndAlso HdnTipoDocto.Value.Contiene("Ing", "Egs", "Ant", "Dev") Then Dim PDF As String = $"{Ruta}PDF\{HdnTipoDocto.Value}\{HdnFolioVenta.Value}.pdf" Dim XML As String = $"{Ruta}XML\{HdnTipoDocto.Value}\{HdnFolioVenta.Value}.xml" If File.Exists(PDF) AndAlso File.Exists(XML) Then Dim ResultadoMail As Integer = 0 Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = PDF}) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = XML}) If Dr("Adjunto").ToString() <> "" Then Adjunto = Dr("Adjunto").ToString() Dim ArchivoAdjunto As String = $"{Ruta}Ventas\{Adjunto}" LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = ArchivoAdjunto}) End If 'If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMail.Text.Trim, "Entrega de Factura", PDF, XML, ArrayCC, TxtBody.Text.Trim) Then If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMailFactura.Text.Trim, Asunto, Cuerpo, TxtCCFactura.Text.Trim, LSRutasMail, Displayname:=DisplayName) Then ResultadoMail = 1 TxtCCFactura.Text = "" TxtBodyFactura.Text = "" RegistraScript("$('#ModalDivMailFactura').modal('hide');") Alert("El correo se envió correctamente", TipoMensaje.MsgInformacion) Else ResultadoMail = 3 Alert("No se pudo enviar el correo electrónico.", TipoMensaje.MsgError) End If Dim ObjVentas As New ClsVentas ObjVentas.UpdateVentaMail(ResultadoMail, HdnCveVentaFactura.Value.ToEntero()) ObjVentas.Dispose() Else Alert("No se pudo adjuntar el correo electrónico.", TipoMensaje.MsgError) End If ElseIf HdnTipoDocto.Value.Contiene("Cot", "Rem") Then If File.Exists($"{Ruta}PDF\{HdnTipoDocto.Value}\{HdnFolioVenta.Value}.pdf") Then Dim PDF As String = $"{Ruta}PDF\{HdnTipoDocto.Value}\{HdnFolioVenta.Value}.pdf" Dim ResultadoMail As Integer = 0 Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = PDF}) If Dr("Adjunto").ToString() <> "" Then Adjunto = Dr("Adjunto").ToString() Dim ArchivoAdjunto As String = $"{Ruta}Ventas\{Adjunto}" LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = ArchivoAdjunto}) End If 'If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMail.Text.Trim, "Entrega de Factura", PDF, XML, ArrayCC, TxtBody.Text.Trim) Then If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMailFactura.Text.Trim, Asunto, Cuerpo, TxtCCFactura.Text.Trim, LSRutasMail) Then ResultadoMail = 1 TxtCCFactura.Text = "" TxtBodyFactura.Text = "" RegistraScript("$('#ModalDivMailFactura').modal('hide');") Alert("El correo se envió correctamente", TipoMensaje.MsgInformacion) Else ResultadoMail = 3 End If Dim ObjVentas As New ClsVentas ObjVentas.UpdateVentaMail(ResultadoMail, HdnCveVentaFactura.Value.ToEntero()) ObjVentas.Dispose() Else Alert("No se pudo adjuntar el correo electrónico.", TipoMensaje.MsgError) End If End If 'End If 'ObjEmprea.Dispose() ElseIf HdnSerieFolioPago.Value <> "-1" Then Dim ObjMail As New ClsSisMail() Dim RutaXML As String = String.Format("{0}XML\Pag\{1}.xml", UsuarioActual.Empresa.Ruta, HdnSerieFolioPago.Value) Dim RutaPDF As String = String.Format("{0}PDF\Pag\{1}.pdf", UsuarioActual.Empresa.Ruta, HdnSerieFolioPago.Value) Dim Cuerpo As String = "Se hace entrega del comprobante de pago" Dim Asunto As String = "Entrega de comprobante de pago" If IO.File.Exists(RutaPDF) AndAlso IO.File.Exists(RutaXML) Then Dim LSRutasMail As New List(Of ClsSisMail.ArchivoMail) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = RutaPDF}) LSRutasMail.Add(New ClsSisMail.ArchivoMail With {.Ruta = RutaXML}) If ObjMail.SendMail(UsuarioActual.Empresa, TxtParaMailFactura.Text.Trim, Asunto, Cuerpo, TxtCCFactura.Text.Trim, LSRutasMail) Then TxtCCFactura.Text = "" RegistraScript("$('#ModalDivMailFactura').modal('hide');") Alert("El correo se envió correctamente", TipoMensaje.MsgInformacion) End If Else Alert("No se encontraron los archivos para enviar.", TipoMensaje.MsgAdvertencia) End If Else Alert("No se seleccionó ninguna factura para envíar.", TipoMensaje.MsgAdvertencia) End If Catch ex As Exception OnError("Ocurrió error al mandar MAIL", ex) Dim ObjVentas As New ClsVentas ObjVentas.UpdateVentaMail(3, HdnCveVentaFactura.Value.ToEntero()) ObjVentas.Dispose() End Try End Sub End Class