Option Explicit On Option Strict On Imports System.Data Imports System.Data.SqlClient Imports ClsPaginas Imports System.IO Imports System.Xml Imports DocumentFormat.OpenXml.ExtendedProperties Imports Extensiones Imports Microsoft.Reporting.WebForms Partial Class Bancos_ProveedoresAbonar Inherits ClsPaginas #Region "Propiedades" 'Configuración Private Property CveProveedor As Integer Get Return ViewState("CveProveedor").ToString.ToEntero End Get Set(value As Integer) ViewState("CveProveedor") = value End Set End Property Private Property FechaI As String Get Return ViewState("FechaI").ToString End Get Set(value As String) ViewState("FechaI") = value End Set End Property Private Property FechaF As String Get Return ViewState("FechaF").ToString End Get Set(value As String) ViewState("FechaF") = value End Set End Property Private Property CveUsuarioProgramo As Integer Get Return IfNull(ViewState("CveUsuarioProgramo"), "-1").ToString.ToEntero End Get Set(value As Integer) ViewState("CveUsuarioProgramo") = value End Set End Property Private Property TipoPago As Integer Get Return ViewState("TipoPago").ToString.ToEntero End Get Set(value As Integer) ViewState("TipoPago") = value End Set End Property Private Property CveUsuarioRegistro As Integer Get Return ViewState("CveUsuarioRegistro").ToString.ToEntero End Get Set(value As Integer) ViewState("CveUsuarioRegistro") = value End Set End Property Private Property CveUsuarioResponsable As Integer Get Return ViewState("CveUsuarioResponsable").ToString.ToEntero End Get Set(value As Integer) ViewState("CveUsuarioResponsable") = value End Set End Property Private Property CveClasificacionProveedor As Integer Get Return ViewState("CveClasificacionProveedor").ToString.ToEntero End Get Set(value As Integer) ViewState("CveClasificacionProveedor") = value End Set End Property Private Property CveAplicaNC As Integer Get Return ViewState("CveAplicaNC").ToString.ToEntero End Get Set(value As Integer) ViewState("CveAplicaNC") = value End Set End Property Private Property ProveedorPlazoPago As Integer Get Return ViewState("ProveedorPlazoPago").ToString.ToEntero End Get Set(value As Integer) ViewState("ProveedorPlazoPago") = value End Set End Property Private Property CveMoneda As Integer Get Return If(IsNothing(ViewState("CveMoneda")), -1, ViewState("CveMoneda").ToString.ToEntero) End Get Set(value As Integer) ViewState("CveMoneda") = value End Set End Property Public Property FiltrarCuentas As Integer Get Return If(IsNothing(ViewState("FiltrarCuentas")), 1, ViewState("FiltrarCuentas").ToString.ToEntero) End Get Set(value As Integer) ViewState("FiltrarCuentas") = value End Set End Property Private Property CveMonedaFiltro As Integer Get Return ViewState("CveMonedaFiltro").ToString.ToEntero End Get Set(value As Integer) ViewState("CveMonedaFiltro") = 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 Serie As String Get Return ViewState("Serie").ToString End Get Set(value As String) ViewState("Serie") = value End Set End Property Private Property CveProveedorSucursal As Integer Get Return ViewState("CveProveedorSucursal").ToString.ToEntero End Get Set(value As Integer) ViewState("CveProveedorSucursal") = value End Set End Property Private Property PermiteModificarImporte As Boolean Get Return CType(ViewState("PermiteModificarImporte").ToString, Boolean) End Get Set(value As Boolean) ViewState("PermiteModificarImporte") = value End Set End Property Private Property ComprobanteIE As String Get Return ViewState("ComprobanteIE").ToString End Get Set(value As String) ViewState("ComprobanteIE") = value End Set End Property Private Property CodigoProgramacion As String Get Return ViewState("CodigoProgramacion").ToString End Get Set(value As String) ViewState("CodigoProgramacion") = value End Set End Property Private Property CveSubProyectoFiltro As Integer Get If ViewState("CveSubProyectoFiltro") Is Nothing Then ViewState("CveSubProyectoFiltro") = -1 End If Return ViewState("CveSubProyectoFiltro").ToString.ToEntero End Get Set(value As Integer) ViewState("CveSubProyectoFiltro") = value End Set End Property Private Property DtDatos As DataTable Get Return DirectCast(ViewState("DtDatos"), DataTable) End Get Set(value As DataTable) ViewState("DtDatos") = value End Set End Property Private Property OriReferenciaCIE As String Get If ViewState("OriReferenciaCIE") Is Nothing Then Return "" Else Return ViewState("OriReferenciaCIE").ToString End If End Get Set(value As String) ViewState("OriReferenciaCIE") = value End Set End Property Private Property OriConceptoCIE As String Get If ViewState("OriConceptoCIE") Is Nothing Then Return "" Else Return ViewState("OriConceptoCIE").ToString End If End Get Set(value As String) ViewState("OriConceptoCIE") = value End Set End Property Private Property CveTipoProveedor As Integer Get If ViewState("CveTipoProveedor") Is Nothing Then ViewState("CveTipoProveedor") = -1 End If Return ViewState("CveTipoProveedor").ToString.ToEntero End Get Set(value As Integer) ViewState("CveTipoProveedor") = value End Set End Property Private Property CveTipoConceptoProveedor As Integer Get If ViewState("CveTipoConceptoProveedor") Is Nothing Then ViewState("CveTipoConceptoProveedor") = -1 End If Return ViewState("CveTipoConceptoProveedor").ToString.ToEntero End Get Set(value As Integer) ViewState("CveTipoConceptoProveedor") = value End Set End Property #End Region Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load If Not Page.IsPostBack Then 'temporal If UsuarioActual.CveUsuario.Contiene(1803, 100) Then ChkNoValidaSAT.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then HplCambiarProveedor.Visible = True DdlProveedores.setEsWebService(True) DdlProveedores.Attributes.Add("data-metodo", "getproveedores") DdlProveedores.SelectedText = "Todos" DdlProveedores.SelectedValue = "-1" End If PermiteModificarImporte = True TxtFechaIncobrable.Text = NowADS().ToShortDateString If Request("CveProveedor") IsNot Nothing AndAlso Request("CveProveedor").ToString.ToEntero > 0 Then CveProveedor = IfNull(Request("CveProveedor"), "-1").ToString.ToEntero FechaI = IfNull(Request("FechaI"), "-1").ToString FechaF = IfNull(Request("FechaF"), "-1").ToString CveUsuarioProgramo = IfNull(Request("CveUsuarioProgramo"), "-1").ToString.ToEntero TipoPago = IfNull(Request("TipoPago"), "-1").ToString.ToEntero CveUsuarioRegistro = IfNull(Request("CveUsuarioRegistro"), "-1").ToString.ToEntero CveUsuarioResponsable = IfNull(Request("CveUsuarioResponsable"), "-1").ToString.ToEntero CveClasificacionProveedor = IfNull(Request("CveClasificacion"), "-1").ToString.ToEntero CveMoneda = IfNull(Request("CveMoneda"), "-1").ToString.ToEntero CveMonedaFiltro = IfNull(Request("CveMoneda"), "-1").ToString.ToEntero FiltrarCuentas = IfNull(Request("FiltrarCuentas"), "1").ToString.ToEntero CveEstatus = IfNull(Request("CveEstatus"), "-1").ToString.ToEntero Serie = IfNull(Request("Serie"), "").ToString CveAplicaNC = IfNull(Request("CveAplicaNC"), "-1").ToString.ToEntero CveProveedorSucursal = IfNull(Request("CveProveedorSucursal"), "-1").ToString.ToEntero CodigoProgramacion = IfNull(Request("CodigoProgramacion"), "-1").ToString CveSubProyectoFiltro = IfNull(Request("CveSubProyecto"), -1).ToString.ToEntero TxtOtrosImportes.Attributes.Add("onKeyUp", String.Format("FnSuma(this,{0},{1});", "TxtTotal", 0)) 'proceso para que solo pague lo que este programada If UsuarioActual.TienePermisoProceso(98) Then PermiteModificarImporte = False End If Calendario.StartDate = NowADS().AddMonths(-48) 'proceso que restringue solo el pago de apartir del dia de hoy y como limite fin de mes If UsuarioActual.TienePermisoProceso(105) Then Calendario.StartDate = NowADS() Calendario.EndDate = NowADS().LastDayOfMonth MEVCalendario.MinimumValue = NowADS().ToShortDateString MEVCalendario.MaximumValue = NowADS().LastDayOfMonth.ToShortDateString MEVCalendario.Enabled = True End If CargaProveedor(Request("CveProveedor").ToString.ToEntero) End If ' If UsuarioActual.Empresa.Funcionalidad(142) = "1" Then trNotificar.Visible = True UpDatos.Visible = True 'End If If UsuarioActual.Empresa.UsaAC Then PnlAC.Visible = True ' Dim AC As New ClsAC ' If AC.GetPresupuestoEgresos(-1, True, usuarioactual.Empresa.EjercicioActual, UsuarioActual.CveEmpresa) Then ' 'DdlProgramaOperativo.DataSource = AC.DtResultados ' 'DdlProgramaOperativo.DataBind() ' GvAC.DataSource = AC.DtResultados ' GvAC.DataBind() ' End If ' AC.Dispose() End If 'BANDERA DE SURTIDO If UsuarioActual.Empresa.Funcionalidad(131).ToEntero > 0 Or UsuarioActual.Empresa.Funcionalidad(134).ToEntero > 0 Then GvCxP.Columns(3).Visible = True End If If CveMoneda > 0 Then LbTipoMoneda.Text = String.Format("Pago en {0}", GlobalDTMonedas.FiltraParametros(String.Format("CveMoneda = {0}", CveMoneda)).Rows(0)("Moneda")) End If 'SI NO ES GDIAZ, NO PERMITIR LA MEZCLA DE CUENTAS If UsuarioActual.Empresa.Funcionalidad(382) <> "1" AndAlso FiltrarCuentas = 0 Then FiltrarCuentas = 1 End If If FiltrarCuentas = 0 Then ChkPagarPesos.Visible = False ChkPagarDolares.Visible = False CveMonedaFiltro = -1 Else If CveMoneda = 2 Then ChkPagarPesos.Visible = True TxtTC.Text = GlobalTipoCambio(NowADS()).FormatoNumero(4) TxtFechaDocumento.Attributes.Add("onchange", "CambiaTC(this);") Else ChkPagarDolares.Visible = True TxtTC.Text = GlobalTipoCambio(NowADS()).FormatoNumero(4) End If End If RegistraScript($"TipoCambioActual = {GlobalTipoCambio(NowADS()).FormatoNumero(4)}") UpDatos.Update() If UsuarioActual.TienePermisoProceso(215) Or UsuarioActual.TienePermisoProceso(204) Then HlSaldarCuentasSinPagar.Visible = True End If If UsuarioActual.CveEmpresa.Contiene(119, 158) And CveUsuarioProgramo <> -1 Then LnkPDFSolicitud.Visible = True LnkExcelSolicitud.Visible = True End If If UsuarioActual.TienePermisoProceso(361) Then 'GvCxP.Columns(11).Visible = True chkaplicaDescuento.Visible = True End If If UsuarioActual.Empresa.Funcionalidad(382) = "1" Then If Not UsuarioActual.TienePermisoProceso(404) Then TxtFechaDocumento.Enabled = False ImgCalendario.Visible = False End If End If End If End Sub Protected Sub BtnCambiaTipoMoneda_Click(sender As Object, e As EventArgs) CambiaTipoMoneda() End Sub Private Sub CambiaTipoMoneda() If DivTC.Visible Then TxtTC.Text = GlobalTipoCambio(TxtFechaDocumento.Text.ToDate).FormatoNumero(4) If ChkPagarDolares.Checked Then 'RegistraScript("CambiaPesosDolares();") RegistraScript("CambiaDolaresPesos();") End If If ChkPagarPesos.Checked Then 'RegistraScript("CambiaDolaresPesos();") RegistraScript("CambiaPesosDolares();") End If End If UpDatos.Update() End Sub #Region " CARGA DATOS " Private Sub CargaDatos(Optional tCveMoneda As Integer = -1) 'pCveProveedor As Integer, tCveMoneda As Integer, FechaVencimientoInicio As String, FechaVencimientoFin As String, CveUsuarioRegistro As Integer, CveUsuarioPrograma As Integer, Serie As String) If tCveMoneda = -1 Then tCveMoneda = CveMoneda If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso FiltrarCuentas = 0 Then tCveMoneda = -1 End If TxtObservaciones.Text = "" TxtImporte.Text = "" TxtTotal.Text = "" Dim ObjMov As New ClsMovimientos If ObjMov.GetCxPProveedor(CveProveedor, FechaI, FechaF, CveUsuarioProgramo, CveUsuarioRegistro, CveUsuarioResponsable, CveClasificacionProveedor, tCveMoneda, CveEstatus, CveProveedorSucursal, CveAplicaNC, "-1", "-1", CodigoProgramacion, CveSubProyecto:=CveSubProyectoFiltro) Then If FiltrarCuentas = 1 Then DtDatos = ObjMov.DtResultados.FiltraParametros("Tipo = 'Act' AND Saldo > 0", "Fecha,SerieFolio") Else DtDatos = ObjMov.DtResultados.FiltraParametros("CveCompra > 0 AND Saldo > 0", "Fecha,SerieFolio") End If GvCxP.DataSource = DtDatos DtDatos.Columns.Add("Movimiento") If DtDatos.Rows.Count > 0 Then DVBusqueda.Visible = True DtDatos.Rows(0)("Movimiento") = "FACTURA DE ACREEDOR" End If End If ObjMov.Dispose() GvCxP.DataBind() UPCompras.Update() UpBusqueda.Update() End Sub Private Sub CargaProveedor(tCveProveedor As Integer) Dim ObjProveedor As New ClsCompProveedores() If ObjProveedor.GetProveedores(ClsCompProveedores.TipoConsulta.ParaUsoEnEmpresa, tCveProveedor, "-1", "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa) Then If ObjProveedor.DtResultados.Rows.Count > 0 Then 'Campos para Modificación 'GeneralesLblEncabezado CargaTipoTransaccion() CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) TxtFechaDocumento.Text = NowADS().ToShortDateString TxtPagueseA.Enabled = False HplProveedor.Text = ObjProveedor.RazonSocial HplProveedor.NavigateUrl = String.Format("/Compras/Proveedores.aspx?CveProveedor={0}", tCveProveedor) TxtPagueseA.Text = ObjProveedor.RazonSocial TxtImporte.Attributes.Add("disabled", "disabled") If DdlTipoTransaccion.SelectedValue = "1" Then RFVFolio.Enabled = True Else RFVFolio.Enabled = False TxtNotificarA.Text = $"{ObjProveedor.NotificarA.Trim}" ProveedorPlazoPago = ObjProveedor.PlazoPago If ObjProveedor.CorreoCobranza.Trim <> "" Then TxtNotificarA.Text = $"{TxtNotificarA.Text};{ObjProveedor.CorreoCobranza.Trim}" 'Sección de pago a proveedor LtlNombreProveedor.Text = ObjProveedor.RazonSocial LtlRFCProveedor.Text = ObjProveedor.RFC If Serie <> "" AndAlso Serie <> "-1" Then Dim dr As DataRow = GlobalDTProveedorSucursales(CveProveedor, UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("Serie = '{0}'", Serie)) If dr IsNot Nothing Then TxtObservaciones.Text = String.Format("Suc. {0}", dr("ProveedorSucursal")) HdnObs.Value = TxtObservaciones.Text End If End If CveTipoProveedor = ObjProveedor.CveTipoProveedor CveTipoConceptoProveedor = ObjProveedor.CveTipoProveedor CargaDatos() '(tCveProveedor, CveMoneda, FechaI, FechaF, CveUsuarioRegistro, CveUsuarioProgramo, Serie) CargaCuentasDepositos() 'CUANDO VIENE PROGRAMADO LLENA EL TEXTO OBSERVACIONES If CveUsuarioProgramo <> -1 Then RegistraScript("SumaValores();") Else Alert("El Proveedor Solicitado no existe, por favor revise su búsqueda.", TipoMensaje.MsgAdvertencia) End If End If ObjProveedor.Dispose() End Sub #End Region #Region " GV CXP " Protected Sub GvCxP_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvCxP.RowDataBound If e.Row.RowType = DataControlRowType.DataRow Then e.Row.Cells(6).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(7).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(8).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(9).HorizontalAlign = HorizontalAlign.Right e.Row.Cells(10).HorizontalAlign = HorizontalAlign.Right e.Row.FCCheckBox("Chk").Attributes.Add("onclick", String.Format(" RNCAutocheck = true; FnSuma(this,{0},{1},'{2}');", e.Row.FCTextBox("TxtAbonar").ClientID, e.Row.DBCampo("Saldo"), e.Row.FCTextBox("TxtDescuento").ClientID)) If FiltrarCuentas = 1 AndAlso e.Row.RowIndex = 0 Then e.Row.FCHyperLink("HplF").Text = (CType(GvCxP.DataSource, DataTable).Rows.Count - 1).ToString e.Row.BackColor = Drawing.Color.LightGray End If If e.Row.DBCampo("CveCompra") = "" Then e.Row.FCTextBox("TxtAbonar").Visible = False e.Row.FCCheckBox("Chk").Visible = False e.Row.FCTextBox("TxtComision").Visible = False Else e.Row.FCTextBox("TxtAbonar").Attributes.Add("onblur", String.Format(" RNCAutocheck = true; FnCambia({0},this,{1},1,'{2}',1);", e.Row.FCCheckBox("Chk").ClientID, e.Row.DBCampo("Saldo"), "El Importe no debe de exceder el saldo")) e.Row.FCTextBox("TxtComision").Attributes.Add("onblur", String.Format(" RNCAutocheck = true;FnCambia({0},this,{1},2,'{2}',2);", e.Row.FCCheckBox("Chk").ClientID, e.Row.DBCampo("Saldo"), "El Importe no debe de exceder el saldo")) End If 'si el vencimiento es diferente al configurado en el proveedor, se pone en rojo If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso DateDiff(DateInterval.Day, e.Row.DBCampo("Fecha").ToDate, e.Row.DBCampo("FechaVencimiento").ToDate) <> ProveedorPlazoPago Then e.Row.Cells(6).ForeColor = Drawing.Color.Red e.Row.Cells(6).ToolTip = $"Dias de Vencimiento ({DateDiff(DateInterval.Day, e.Row.DBCampo("Fecha").ToDate, e.Row.DBCampo("FechaVencimiento").ToDate)}) diferente al configurado en el proveedor ({ProveedorPlazoPago})" End If If e.Row.DBCampo("Saldo").ToDouble < 0 Then e.Row.Cells(7).ForeColor = Drawing.Color.Red If e.Row.DBCampo("DiasVencidos").ToDouble > 0 AndAlso CType(sender, GridView).ID = "GvCxC" Then e.Row.Cells(4).ForeColor = Drawing.Color.Red If e.Row.DBCampo("TotalOriginal").ToDouble = 0 Then DirectCast(e.Row.FindControl("LtlSaldoOriginal"), Literal).Text = "" If e.Row.DBCampo("Abonado").ToDouble = 0 Then DirectCast(e.Row.FindControl("LtlAbonado"), Literal).Text = "" If e.Row.DBCampo("Saldo").ToDouble = 0 Then DirectCast(e.Row.FindControl("LtlSaldo"), Literal).Text = "" If e.Row.DBCampo("Folio") = "N/D" Then e.Row.FCLiteral("LtlFactura").Text = e.Row.DBCampo("Folio") End If e.Row.FCTextBox("TxtAbonar").Attributes.Add("CveMoneda", e.Row.DBCampo("CveMoneda")) If e.Row.DBCampo("CveCompra").ToEntero > 0 Then Dim FiltroInv As String = "" If UsuarioActual.Empresa.Funcionalidad(134).ToEntero > 0 Then ' valores 1 - permite pago proporcional, valor 2. paga solo si se recibio el 100% 'se bloquean las opciones e.Row.FCCheckBox("Chk").Enabled = False e.Row.FCTextBox("TxtAbonar").Enabled = False Dim Str As New StringBuilder Str.AppendFormat("Importe Almacen: ${0} ({1}%)
", e.Row.DBCampo("ImporteAlmacen").FormatoNumero, e.Row.DBCampo("ImporteAlmacenPorcentaje")) If e.Row.DBCampo("ImporteServicios").ToDouble > 0 Then Str.AppendFormat("Importe Servicios: ${0} ({1}%)
", e.Row.DBCampo("ImporteServicios").FormatoNumero, e.Row.DBCampo("ImporteServiciosPorcentaje")) If e.Row.DBCampo("ImporteDevolucion").ToDouble > 0 Then Str.AppendFormat("Importe Devuelto: ${0} ({1}%)
", e.Row.DBCampo("ImporteDevolucion").FormatoNumero, e.Row.DBCampo("ImporteDevolucionPorcentaje")) Str.AppendFormat(" Importes SIN IVA") e.Row.FCLabel("LbEstatusInv").Attributes.Add("title", Str.ToString) Dim PorcentajeAlmacen As Decimal = e.Row.DBCampo("ImporteAlmacenPorcentaje").ToString.ToDecimal + e.Row.DBCampo("ImporteServiciosPorcentaje").ToString.ToDecimal + e.Row.DBCampo("ImporteDevolucionPorcentaje").ToString.ToDecimal Dim SaldoInv As Decimal = (e.Row.DBCampo("Saldo").ToString.ToDecimal * (PorcentajeAlmacen / 100)) If UsuarioActual.Empresa.Funcionalidad(134) = "1" Then 'cuando es proporcional FiltroInv = $"FnCambia({e.Row.FCCheckBox("Chk").ClientID},this,{SaldoInv},1,'{"El importe no debe exceder lo recibido en almacén"}',1);" ElseIf UsuarioActual.Empresa.Funcionalidad(134) = "2" Then FiltroInv = "" 'queno considera lo proporcional End If If PorcentajeAlmacen = 0 Then ' sin recibir e.Row.FCLabel("LbEstatusInv").Text = "" e.Row.FCLabel("LbEstatusInv").ForeColor = Drawing.Color.Red ElseIf PorcentajeAlmacen > 99.0 OrElse e.Row.DBCampo("ImporteAlmacen").ToDecimal >= e.Row.DBCampo("Saldo").ToString.ToDecimal Then 'recibido completo ' si tiene un porcentaje mayor ingresado, que este halla sido por OC, debe de permitirlo ' NOTA. si la factura tiene devoluciones, debera comparar el saldo de la factura con lo recibido en el almacen e.Row.FCLabel("LbEstatusInv").Text = "" e.Row.FCLabel("LbEstatusInv").ForeColor = Drawing.Color.Green e.Row.FCCheckBox("Chk").Enabled = True e.Row.FCTextBox("TxtAbonar").Enabled = True Else ' parcial e.Row.FCLabel("LbEstatusInv").Text = "" e.Row.FCLabel("LbEstatusInv").ForeColor = Drawing.Color.DarkOrange If UsuarioActual.Empresa.Funcionalidad(134).ToEntero = 1 Then ' si es la opcion ,de pagar lo proporcional e.Row.FCCheckBox("Chk").Enabled = True e.Row.FCTextBox("TxtAbonar").Enabled = True End If End If End If e.Row.FCLiteral("LtlAux").Text = String.Format("Ir", e.Row.DBCampo("CveProveedor"), e.Row.DBCampo("CveCompra")) e.Row.FCTextBox("TxtAbonar").Attributes.Add("onblur", String.Format(" RNCAutocheck = true; FnCambia({0},this,{1},1,'{2}',1);{3}", e.Row.FCCheckBox("Chk").ClientID, e.Row.DBCampo("Saldo"), "El Importe no debe de exceder el saldo", FiltroInv)) If Not PermiteModificarImporte Then e.Row.FCTextBox("TxtAbonar").Enabled = False If e.Row.DBCampo("CveCompraNC").ToEntero > 0 Then e.Row.FCHyperLink("HplNC").Visible = True e.Row.FCHyperLink("HplNC").ImageUrl = "/Imagenes/flag_green.png" e.Row.FCHyperLink("HplNC").ToolTip = "Notas de Crédito Aplicadas" End If If e.Row.DBCampo("ImporteProgramo").ToDouble > 0 Then e.Row.FCCheckBox("chk").Checked = True e.Row.FCTextBox("TxtAbonar").Text = e.Row.DBCampo("ImporteProgramo").ToDouble.FormatoNumero() ' N O T A: si el importe programado es mayor al Saldo de la factura, se pone el saldo If e.Row.DBCampo("ImporteProgramo").ToDouble > e.Row.DBCampo("Saldo").ToDouble Then e.Row.FCTextBox("TxtAbonar").ToolTip = "El importe programado es mayor al saldo. El Importe visible es el saldo " 'e.Row.FCTextBox("TxtAbonar").BackColor = Drawing.Color.OrangeRed e.Row.FCTextBox("TxtAbonar").CssClass = "bg-yellow-gold" e.Row.FCTextBox("TxtAbonar").Text = e.Row.DBCampo("Saldo").FormatoNumero() 'se va acumulando el importe de cada renglon para sacar el pago del IE TxtImporte.Text = (TxtImporte.Text.ToDouble + e.Row.DBCampo("Saldo").ToDouble).FormatoNumero() Else 'se va acumulando el importe de cada renglon para sacar el pago del IE TxtImporte.Text = (TxtImporte.Text.ToDouble + e.Row.DBCampo("ImporteProgramo").ToDouble).FormatoNumero() End If End If 'si está bloqueada y es refacturación, debe de permitirlo, sin importar lo que se halla ingresado If e.Row.DBCampo("CveCompraRefacturacion").ToEntero > 0 AndAlso Not e.Row.FCCheckBox("Chk").Enabled Then e.Row.FCCheckBox("Chk").Enabled = True e.Row.FCTextBox("TxtAbonar").Enabled = True End If If UsuarioActual.Empresa.Funcionalidad(306) = "1" And e.Row.DBCampo("AplicaNotaCredito").ToString = "True" Then e.Row.FCCheckBox("Chk").Enabled = False End If e.Row.FCTextBox("TxtDescuento").Attributes.Add("onkeyup", $" calculaDescuentoEscalonado({e.Row.DBCampo("Saldo")},'{e.Row.FCTextBox("TxtDescuento").ClientID}',{e.Row.FCTextBox("TxtAbonar").ClientID},{e.Row.FCCheckBox("Chk").ClientID},'El Importe no debe de exceder el saldo',1)") Else e.Row.FCTextBox("TxtDescuento").Visible = False End If End If End Sub #End Region #Region " GUARDAR " Protected Sub BtnIEGuardar_Click(sender As Object, e As EventArgs) Handles BtnIEGuardar.Click Dim ValFechaDocumento As Boolean = False Dim FoliosFechasValFechaDocumento As New StringBuilder Dim sbRNC As New StringBuilder FoliosFechasValFechaDocumento.AppendLine("Se seleccionaron facturas con fecha de mes superior al mes del pago:
") Dim sbDescuentos As New StringBuilder For Each gvRowVal As GridViewRow In GvCxP.Rows If gvRowVal.FCCheckBox("Chk").Checked Then Dim FechaFactura As Date = gvRowVal.DataKey("Fecha").ToDate Dim FechaDocumento As Date = TxtFechaDocumento.Text.ToDate Dim AnioFactura As Integer = FechaFactura.Year Dim MesFactura As Integer = FechaFactura.Month Dim AnioDocumento As Integer = FechaDocumento.Year Dim MesDocumento As Integer = FechaDocumento.Month If UsuarioActual.Empresa.UsaAC = False Then If AnioFactura > AnioDocumento Then FoliosFechasValFechaDocumento.AppendLine($"Folio: { gvRowVal.DataKey("SerieFolio") } fecha: {gvRowVal.DataKey("Fecha").ToDate.ToString("dd/MM/yyyy") }
") ValFechaDocumento = True ElseIf AnioFactura = AnioDocumento And MesFactura > MesDocumento Then FoliosFechasValFechaDocumento.AppendLine($"Folio: { gvRowVal.DataKey("SerieFolio") } fecha: {gvRowVal.DataKey("Fecha").ToDate.ToString("dd/MM/yyyy") }
") ValFechaDocumento = True End If End If End If Next If ValFechaDocumento Then Alert(FoliosFechasValFechaDocumento.ToString, TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlTipoTransaccion.SelectedValue.ToEntero < 0 Then Alert("Seleccione un tipo de transacción", TipoMensaje.MsgAdvertencia) Exit Sub End If If DdlCuenta.SelectedValue.ToEntero < 0 Then Alert("Seleccione una cuenta bancaria", TipoMensaje.MsgAdvertencia) Exit Sub End If If CveMoneda <= 0 Then Alert("Seleccione la Moneda del pago", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim dtc As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor:=CveProveedor) If dtc IsNot Nothing Then Dim Row As DataRow = dtc.FiltroPrimero(String.Format("CveCuentaDeposito = {0}", DdlCuentaDeposito.SelectedValue.ToEntero)) If Row IsNot Nothing AndAlso Row("Estatus").ToString = "False" Then Alert("La cuenta depósito del proveedor esta inactiva.", TipoMensaje.MsgAdvertencia) Exit Sub End If End If 'proceso que restringue solo el pago de apartir del dia de hoy y como limite fin de mes If UsuarioActual.TienePermisoProceso(105) AndAlso (TxtFechaDocumento.Text.ToDate < NowADS().Date Or TxtFechaDocumento.Text.ToDate > NowADS().LastDayOfMonth) Then Alert("Fecha No permitida", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim ImporteSeleccionado As Decimal = 0 Dim ValidaSAT As Boolean = True If UsuarioActual.Empresa.Funcionalidad(529) = "1" OrElse ChkNoValidaSAT.Checked Then ValidaSAT = False If Not EsProduccion Then ValidaSAT = False End If If ValidaSAT Then Dim Validada As Boolean = False Dim MsgValidadas As New StringBuilder Dim Valida As New ClsValidaCFDi() 'verifico ante el SAT las compras que voy a pagar For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then ImporteSeleccionado += gvr.FCTextBox("TxtAbonar").Text.ToDecimal If gvr.DataKey("UUID") <> "" Then Valida.Verificar(gvr.DataKey("UUID"), gvr.DataKey("RFC"), UsuarioActual.Empresa.RFC, gvr.DataKey("TotalOriginal").ToDecimal) If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa < 2 Then Valida.EsValida = 1 End If If Valida.EsValida <> 1 Then Validada = False If Valida.EsValida = 2 Then 'Cancelada 'estatus inventario, no surtida If gvr.DataKey("EstatusInventario") = "1" Then MsgValidadas.AppendFormat("Factura Cancelada: {0} - {1} , relacione su factura nueva para descontar saldo
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) Else MsgValidadas.AppendFormat("Factura Cancelada: {0} - {1} con movimientos de almacen, relacione su factura nueva para descontar saldo
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) End If Else MsgValidadas.AppendFormat("Factura No se pudo Validar: {0} - {1}
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) End If End If End If End If Next Valida.Dispose() 'verificacion doble, si no la han cancelado, ya tiene una validaci[on para que llegue aqui If MsgValidadas.Length > 0 Then Alert(String.Format("
Las Facturas presentan la siguiente situación ante el SAT.
{0}", MsgValidadas.ToString), TipoMensaje.MsgAdvertencia) Exit Sub End If Else For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then ImporteSeleccionado += gvr.FCTextBox("TxtAbonar").Text.ToDecimal End If Next End If If ImporteSeleccionado <= 0 Then Alert("Seleccione facturas", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim ObjIE As New ClsBancos() Dim ObjMov As New ClsContabilidad(ObjIE.IniciaTransacSQL) Dim ObjComp As New ClsCompras(ObjIE.IniciaTransacSQL) Dim ObjConta As ClsContPAQi = Nothing If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaContabilidad Then ObjConta = New ClsContPAQi(UsuarioActual.Empresa) ObjConta.IniciaTransacSQL() End If Dim MsgError As String = "" Dim IDPoliza As Integer = 0 Dim FolioPoliza As Integer = 0 Dim CveCuentaDeposito As Integer = 0 Dim CveConceptoCompra As Integer = 6 Dim CvePrePoliza As Integer = 0 Dim CveSubProyecto As Integer = -1 If DdlCuentaDeposito.Items.Count > 0 Then CveCuentaDeposito = DdlCuentaDeposito.SelectedValue.ToEntero End If 'Saca moneda en que se va a pagar segun metodo de pago If DdlCuenta.SelectedValue.ToEntero > 0 Then CveMoneda = GlobalDTBancosCuentas(-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMoneda", $"CveEmpresa = {UsuarioActual.CveEmpresa} AND CveCuenta = {DdlCuenta.SelectedValue.ToEntero}").ToEntero End If If TxtImporte.Text.ToDouble > 0 Then If TxtFolio.Text.Trim <> "" Then Dim Fecha As Date = TxtFechaDocumento.Text.ToDate Dim filesgral As List(Of Archivo) = Anexo.getfiles().Archivos Dim filemove As String = "" Dim Comprobante As String = "" ComprobanteIE = "" For Each fileItem As Archivo In filesgral Comprobante = IO.Path.GetExtension(String.Format("{0}Temp\{1}", AppDomain.CurrentDomain.BaseDirectory, fileItem.filename)).Replace(".", "") filemove = fileItem.filename Next Dim ConceptoPoliza As String = String.Format("{0} {1}", HplProveedor.Text, TxtObservaciones.Text) Dim FolioFijo As Integer = 0 Dim TipoCambio As Decimal = 0 'cheque If DdlTipoTransaccion.SelectedValue = "1" AndAlso UsuarioActual.CveEmpresa.Contiene(13, 83) Then FolioFijo = TxtFolio.Text.ToEntero CvePrePoliza = ObjMov.AddPrePolizas("Bancos/ProveedoresAbonar", 2, ImporteSeleccionado, ImporteSeleccionado, 1, TxtFechaDocumento.Text.ToDate, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, FolioFijo:=FolioFijo, ReglaFolioPoliza:=ObjComp.ObtenerReglaFolio(DdlTipoTransaccion.SelectedValue, Nothing, UsuarioActual.CveEmpresa), CveTipoPoliza:=ObjMov.ObtenerTipoPoliza(DdlTipoTransaccion.SelectedValue, "-1", UsuarioActual.CveEmpresa)) If CveMoneda = 2 Then TipoCambio = TxtTC.Text.ToDecimal Else If TxtTC.Visible Then TipoCambio = TxtTC.Text.ToDecimal End If End If Dim CveIE As Integer = ObjIE.AddBancos_IE(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero, TxtFechaDocumento.Text.Trim.ToDate, TxtFolio.Text.Trim, TxtPagueseA.Text.Trim, TxtImporte.Text.ToDecimal, GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveMoneda", "CveCuenta = " & DdlCuenta.SelectedValue).ToEntero, TipoCambio, TxtObservaciones.Text.Trim, TxtNotificarA.Text.Trim, ChkAbonoCuenta.Checked, True, -1, CvePrePoliza, Comprobante, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveCuentaDeposito:=CveCuentaDeposito, Referencia:=If(TxtReferenciaCIE.Visible, TxtReferenciaCIE.Text, "-1"), CveCuentaTarjeta:=If(DivTarjeta.Visible, DdlTarjeta.SelectedValue.ToEntero, -1), ConceptoCIE:=TxtConceptoCIE.Text) If CveIE > 0 Then ComprobanteIE = $"{CveIE}.{Comprobante}" If DdlCuentaDeposito.SelectedValue.ToEntero > 0 And DdlTipoTransaccion.SelectedValue = "17" Then If TxtReferenciaCIE.Text <> OriReferenciaCIE Or TxtConceptoCIE.Text <> OriConceptoCIE Then Dim ObjGrales As New ClsGenerales(ObjIE.IniciaTransacSQL) If Not ObjGrales.UpdateCuentasDepositosEstatusPagoElectronicoGrupos(DdlCuentaDeposito.SelectedValue.ToEntero, -1, -1, "-1", TxtReferenciaCIE.Text.Trim, TxtConceptoCIE.Text.Trim) Then MsgError = "Error al actualizar cuenta Referencia y Concepto Deposito." End If End If End If 'guardo el archivo If filemove <> "" Then filemove.FilesMove(CveIE.ToString, String.Format("{0}IE", UsuarioActual.Empresa.Ruta), ConcatenarDirectorioBase:=False) End If Anexo.Text = "" 'inserto los movimientos de la conta para abonar al saldo If CvePrePoliza > 0 Then Dim Pago As New CompraPago Pago.Fecha = TxtFechaDocumento.Text.ToDate Pago.CveIE = CveIE Pago.CveMonedaPago = CveMoneda 'inserto las compras que voy a pagar Dim nRow As Integer = 1 For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then Dim CompraActual As New Compra CompraActual.CveCompra = gvr.DataKey("CveCompra").ToEntero CompraActual.CveTipoConceptoProveedor = gvr.DataKey("CveTipoConcepto").ToEntero CompraActual.CveProveedor = gvr.DataKey("CveProveedor").ToEntero CompraActual.CveMoneda = gvr.DataKey("CveMoneda").ToEntero CompraActual.Fecha = gvr.DataKey("Fecha").ToDate CompraActual.SerieFolio = gvr.DataKey("SerieFolio").ToString CompraActual.ProveedorNombre = HplProveedor.Text CompraActual.TC = gvr.DataKey("TipoCambioOriginal").ToDecimal CompraActual.Total = gvr.DataKey("Total").ToDecimal CompraActual.IVA = gvr.DataKey("IVA").ToDecimal CompraActual.IVADeducible = gvr.DataKey("IVADeducible").ToDecimal CompraActual.IVANoDeducible = gvr.DataKey("IVANoDeducible").ToDecimal CompraActual.IVADeducible08 = gvr.DataKey("IVADeducible08").ToDecimal CompraActual.IVANoDeducible08 = gvr.DataKey("IVANoDeducible08").ToDecimal CompraActual.CompraNoDeducible = gvr.DataKey("NoDeducible").ToEntero CompraActual.IEPS = gvr.DataKey("IEPS").ToDecimal CompraActual.RetIVA = gvr.DataKey("RetIVA").ToDecimal CompraActual.RetISR = gvr.DataKey("RetISR").ToDecimal CompraActual.CveConceptoRetISR = gvr.DataKey("CveRetISRConcepto").ToEntero CompraActual.CveConceptoRetIVA = gvr.DataKey("CveRetIVAConcepto").ToEntero CompraActual.PorcentajeIVA = gvr.DataKey("PorcentajeIVA").ToDecimal CompraActual.EsImportacion = gvr.DataKey("EsImportacion") = "1" CompraActual.UsuarioActual = UsuarioActual CompraActual.CveSubProyecto = gvr.DataKey("CveSubProyecto").ToEntero 'Importe de pago Pago.ImportePago = gvr.FCTextBox("TxtAbonar").Text.ToDecimal 'Tipos de cambio If Pago.CveMonedaPago = 1 AndAlso CompraActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en Pesos Pago.TCPago = 1 ' TxtTC.Text.ToDecimal Pago.ImportePago = (gvr.FCTextBox("TxtAbonar").Text.ToDecimal * TxtTC.Text.ToDecimal).RoundSQL ElseIf Pago.CveMonedaPago = 2 AndAlso CompraActual.CveMoneda = 2 Then 'Si la venta viene en Dolares y se va a pagar en DOLARES Pago.TCPago = TxtTC.Text.ToDecimal ElseIf Pago.CveMonedaPago = 2 AndAlso CompraActual.CveMoneda = 1 Then 'Si la venta viene en pesos y se va a pagar en DOLARES Pago.TCPago = TxtTC.Text.ToDecimal Pago.ImportePago = (gvr.FCTextBox("TxtAbonar").Text.ToDecimal / TxtTC.Text.ToDecimal) End If If ChkPagarPesos.Checked Then If CompraActual.CveMoneda = 1 Then Pago.TCCambioMoneda = 1 Else Pago.TCCambioMoneda = 1 / TxtTC.Text.ToDecimal End If End If If ChkPagarDolares.Checked Then Pago.TCCambioMoneda = TxtTC.Text.ToDecimal End If If gvr.FCTextBox("TxtComision").Text.ToDecimal <> 0 Then Pago.OtroGastoIngreso = gvr.FCTextBox("TxtComision").Text.ToDecimal Else Pago.OtroGastoIngreso = 0 End If If AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjMov) Then MsgError = "No se pudo insertar la póliza" Exit For End If 'DESPROGRAMA LO PROGRAMADO DESPUES DE HACERLE UN PAGO ' If DdlTipoTransaccion.SelectedValue <> "9" Then 'SI ES LAYOUT SE DESPROGRAMA EN BANCOS/PAGOELECTRONICO, se comentó, 2018.07.31 peticion marilú. If MsgError = "" AndAlso gvr.DataKey("ImporteProgramo").ToDouble > 0 Then ObjComp.ProgramarCompra(gvr.DataKey("CveCompra").ToEntero, 0, UsuarioActual.CveUsuario, -1) End If 'INICIO Descuento Remision Nota de credito If UsuarioActual.Empresa.Funcionalidad(382) = "1" AndAlso UsuarioActual.Empresa.Funcionalidad(574) = "1" And ChkGeneraRNC.Checked Then Dim descuentoParts As String() = gvr.FCTextBox("TxtDescuento").Text.Split("+"c) Dim Descuento As Decimal = 0 Dim TotalTemp As Decimal = gvr.DataKey("Saldo").ToDecimal If descuentoParts.Length = 0 Then Descuento = 0 Else Descuento = gvr.DataKey("Saldo").ToString.ToDecimal - gvr.FCTextBox("TxtAbonar").Text.ToDecimal 'For i As Integer = 0 To descuentoParts.Length - 1 ' Dim descuentoPart As Decimal = descuentoParts(i).Trim().ToDecimal ' If descuentoPart > 0 Then ' Descuento = Descuento + ((TotalTemp - Descuento) * (descuentoPart / 100)) ' Else ' Continue For ' End If 'Next End If If Descuento > 0 Then Dim PorcentajeIVA As Decimal = gvr.DataKey("PorcentajeIVA").ToDecimal Dim serieFolioArray As String() = gvr.DataKey("SerieFolio").ToString.Split("-"c) Dim SerieRNC As String = "" Dim FolioRNC As String = "" Dim SerieFolioRNC As String = serieFolioArray(0) If serieFolioArray.Length = 2 Then SerieRNC = serieFolioArray(0) FolioRNC = serieFolioArray(1) SerieFolioRNC = $"D-{SerieRNC}-{ FolioRNC}" Else FolioRNC = serieFolioArray(0) End If 'Descuento = Descuento.RoundSQL(2) If PorcentajeIVA > 0 Then Descuento = ((Descuento) / (1 + PorcentajeIVA)) 'Descuento = ((Descuento) / (1 + PorcentajeIVA)).RoundSQL(2) Dim saldo As Decimal = gvr.DataKey("Saldo").ToDecimal Dim abonado As Decimal = gvr.FCTextBox("TxtAbonar").Text.ToDecimal Dim TotalRNC = Descuento + (Descuento * PorcentajeIVA).RoundSQL Dim dif As Decimal = saldo - (TotalRNC + abonado) If dif.Abs() >= 0.01 Then If dif > 0 Then 'Descuento = Descuento + 0.01D End If If dif < 0 Then 'Descuento = Descuento - 0.01D End If End If End If Dim ExisteRNC As Boolean = False If ObjComp.GetCompras(-1, $"D-{SerieRNC}", FolioRNC, CveProveedor, -1, UsuarioActual.CveEmpresa) Then Dim dtRNC As DataTable = ObjComp.DtResultados.FiltraParametros(" TipoDocto ='RNC' ") If dtRNC.Rows.Count > 0 Then ExisteRNC = True SerieFolioRNC = $"D{nRow}-{SerieRNC}-{ FolioRNC}" End If End If Dim CveCompraRNC As Integer = GeneraRNC(Descuento, ObjComp.IniciaTransacSQL, gvr.DataKey("CveCompra").ToEntero, CompraActual, ObjMov, CvePrePoliza, CveProveedor, HplProveedor.Text, TxtFechaDocumento.Text.ToDate, $"Remisión Nota de Crédito pago {gvr.DataKey("SerieFolio").ToString}", gvr.DataKey("CveMoneda").ToEntero, TxtTC.Text.ToDecimal, SerieRNC, FolioRNC, PorcentajeIVA:=PorcentajeIVA, CveSubProyecto:=gvr.DataKey("CveSubProyecto").ToEntero, nRow:=nRow, ExisteRNC:=ExisteRNC) If CveCompraRNC > 0 Then sbRNC.AppendLine($" {SerieFolioRNC}
") Else 'TieneError = True MsgError = $"Error al Generar Remisión de Nota de Crédito de factura {gvr.DataKey("SerieFolio").ToString}" Exit For End If End If End If 'FIN Descuento Remision Nota de credito End If nRow = nRow + 1 Next Dim UsaComplementariaBancos As Boolean = Not UsuarioActual.CveEmpresa.Contiene(7, 11, 122, 145, 13, 83) Dim ConceptoMovimiento As String = $"{TxtPagueseA.Text.Trim} - {TxtObservaciones.Text} {If(Pago.TCPago > 1, $" TC:{Pago.TCPago}", "")}" Dim Referencia As String = $"{HdnTipoTransaccionAbreviatura.Value}: {TxtFolio.Text.Trim}" Dim tImporteMN As Decimal = TxtImporte.Text.ToDecimal Pago.ImportePago = tImporteMN Dim ImporteME As Decimal = 0 If Pago.CveMonedaPago = 2 Then ImporteME = Pago.ImportePago If Not UsaComplementariaBancos And Pago.CveMonedaPago = 2 Then ImporteME = tImporteMN tImporteMN = (tImporteMN * Pago.TCPago).RoundSQL End If If MsgError = "" AndAlso Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePago, tImporteMN, 30, Referencia, ConceptoMovimiento, CveIE:=CveIE, CveProveedor:=CveProveedor, TipoCambio:=Pago.TCPago, CveSubProyecto:=CveSubProyecto, ImporteME:=ImporteME) Then MsgError = "No se pudo insertar la póliza" End If If Pago.CveMonedaPago = 2 AndAlso UsaComplementariaBancos Then If MsgError = "" AndAlso Not ObjMov.AddPrePolizasDetalle(CvePrePoliza, True, Pago.ImportePago, (Pago.ImportePago * Pago.TCPago - Pago.ImportePago).RoundSQL, 204, Referencia, ConceptoMovimiento, CveIE:=CveIE, CveProveedor:=CveProveedor, ImporteME:=Pago.ImportePago, TipoCambio:=Pago.TCPago, CveSubProyecto:=CveSubProyecto) Then MsgError = "No se pudo insertar la póliza" End If End If If MsgError = "" AndAlso ObjMov.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, Opcion:=5) Then If ObjMov.ValorPolizaDescuadre > 0 Then MsgError = ObjMov.MensajePolizaDescuadre + " " + ObjMov.ValorDiferencia GuardaLogAD($"Bancos/ProveedoresAbonar | Error:{ObjMov.MensajePolizaDescuadre} Diferencia:{ObjMov.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") End If End If Else MsgError = "No se pudo insertar la póliza" End If Else MsgError = "No se insertó el encabezado" End If If MsgError = "" Then 'Alert("El Documento se guardó correctamente.", TipoMensaje.MsgInformacion, "window.close();") Dim TieneError As Boolean = False If UsuarioActual.Empresa.UsaAC Then Dim Total As Double = TxtImporte.Text.ToDouble If ChkACEjercer.Checked Then Total = Total * 3 Else Total = Total * 2 End If Dim TipoChq As String = "" If DdlTipoTransaccion.SelectedValue = "1" Then TipoChq = "CHQ" 'se multiplica por dos, porque se esta juntando el ejercido y el pagado al mismo tiempo IDPoliza = ObjConta.AddPoliza(2, "Pagado " & TxtPagueseA.Text.Trim, Total, Total, UsuarioActual.CveUsuario, Fecha, TxtFolio.Text, TipoChq) If IDPoliza > 0 Then FolioPoliza = ObjConta.Folio Dim ConceptoRenglon, Referencia As String ConceptoRenglon = "" Referencia = TxtFolio.Text 'NECESITO SACAR LAS PARTIDAS DE CADA PRESUPUESTO DE LAS FACTURAS PARA AFECTARLAS CON EL PAGO Dim dtAC As New DataTable dtAC.Columns.Add("PorcentajePago", Type.GetType("System.Double")) Dim PorcentajePago As Double = 1 'Dim ComprasAC As New ClsCompras For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then 'obtengo su poliza para ver que presupuestos afecto If gvr.DataKey("TotalOriginal").ToDouble > 0 Then PorcentajePago = gvr.FCTextBox("TxtAbonar").Text.ToDouble / gvr.DataKey("TotalOriginal").ToDouble Else PorcentajePago = 1 If ObjComp.GetPresupuestosCompras(gvr.DataKey("CveCompra").ToEntero) Then dtAC.Merge(ObjComp.DtResultados) If Not gvr.DataKey("Fecha").ToString.ToDate.Year < Fecha.Year Then ' SI ES EJERCICIO ANTERIOR LA COMPRA QUE EL EJERCICIO DEL PAGO NO AGREGA MOVIMIENTOS PRESUPUESTALES For Each dr As DataRow In ObjComp.DtResultados.Rows Total = dr("TotalPresupuesto").ToString.ToDouble * PorcentajePago If Total > 0 Then 'EJERCIDO If ChkACEjercer.Checked Then ConceptoRenglon = String.Format("GE {0} Fact:{1}", TxtPagueseA.Text.Trim, gvr.DataKey("SerieFolio")) If ObjConta.AddMovimiento(IDPoliza, dr("IdCuentaEjercido").ToString.ToEntero, False, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then 'actualizo el idcuenta del presupuesto If Not ObjConta.AddMovimiento(IDPoliza, dr("IdCuentaDevengado").ToString.ToEntero, True, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then TieneError = True : Exit For End If Else TieneError = True : Exit For End If End If 'PAGADO ConceptoRenglon = String.Format("GP {0} Fact:{1}", TxtPagueseA.Text.Trim, gvr.DataKey("SerieFolio")) If ObjConta.AddMovimiento(IDPoliza, dr("IdCuentaPagado").ToString.ToEntero, False, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then 'actualizo el idcuenta del presupuesto If Not ObjConta.AddMovimiento(IDPoliza, dr("IdCuentaEjercido").ToString.ToEntero, True, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then TieneError = True : Exit For End If Else TieneError = True : Exit For End If End If Next End If 'AFECTA PROVEEDOR Total = gvr.FCTextBox("TxtAbonar").Text.ToDouble If Not ObjConta.AddMovimiento(IDPoliza, 0, False, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then TieneError = True Exit For End If End If End If Next If Not TieneError Then ConceptoRenglon = String.Format("GP {0} {1}", TxtPagueseA.Text.Trim, TxtObservaciones.Text) Total = TxtImporte.Text.ToDouble If Not ObjConta.AddMovimiento(IDPoliza, 0, True, Total, Referencia, ConceptoRenglon, 0, Fecha, "") Then TieneError = True End If End If Else TieneError = True End If End If If Not TieneError AndAlso IDPoliza > 0 Then 'actualizar la conta del IE ObjIE.UpdateIEPrePoliza(Fecha, FolioPoliza.ToString, IDPoliza, CvePrePoliza, CveIE, 0) Else IDPoliza = 0 End If If Not TieneError Then ObjIE.Commit() If ObjConta IsNot Nothing Then ObjConta.Commit() Anexo.Text = "[]" Dim Msg As New StringBuilder Msg.AppendFormat(" Folio: {1}

", CveIE, TxtFolio.Text) Msg.AppendFormat(" Imprimir movimiento
", Encripta(String.Format("OP=IECHEQUE&CVEIE={0}", CveIE))) Msg.AppendFormat(" Listado
", Encripta(String.Format("OP=ImprimeMov&CveIE={0}", CveIE))) If IDPoliza > 0 AndAlso UsuarioActual.Empresa.TipoContabilidad = 2 Then Msg.AppendFormat(" Póliza
", IDPoliza) If UsuarioActual.TienePermisoProceso(354) Then 'visualizar la póliza al registros Msg.AppendFormat("Ver Póliza   ", CvePrePoliza) End If If sbRNC.Length > 0 Then Msg.AppendFormat($"
Remisiones de Nota de Crédito Generadas y Aplicadas
{sbRNC.ToString}") End If Dim Mensaje As String = String.Format("El Documento se generó correctamente.

{0} ", Msg.ToString) 'LIMPIA TxtFolio.Text = "" TxtObservaciones.Text = "" TxtImporte.Text = "" TxtTotal.Text = "" TxtFechaDocumento.Text = NowADS().ToShortDateString DdlSelectedValue(DdlCuenta, "-1") DdlSelectedValue(DdlTipoTransaccion, "-1") Anexo.Text = "[]" UpDatos.Update() 'upanexo.Update() CargaDatos() Alert(Mensaje.ToString, TipoMensaje.MsgInformacion, If(ChkSeguirRegistrando.Checked And GvCxP.Rows.Count > 0, "location.href =""#""", "location.href =""RepProveedoresPagos.aspx""")) 'Notificación de Pago If TxtNotificarA.Text.Trim <> "" AndAlso ChkEnviarCorreo.Checked Then 'NotificacionPago(CveIE, TxtNotificarA.Text.Trim) EnviarCorreoNotificacion(CveIE, TxtNotificarA.Text.Trim, "", UsuarioActual, False) End If End If Else ObjIE.RollBack() If ObjConta IsNot Nothing Then ObjConta.RollBack() Alert(MsgError, TipoMensaje.MsgAdvertencia) End If ObjIE.Dispose() ObjMov.Dispose() ObjComp.Dispose() If ObjConta IsNot Nothing Then ObjConta.Dispose() Else Alert("Debe de llevar un folio", TipoMensaje.MsgAdvertencia) End If Else Alert("Debe de llevar un importe", TipoMensaje.MsgAdvertencia) End If End Sub Private Sub DdlSelectedValue(Ddl As DropDownList, Valor As String) If Ddl.Items.FindByValue(Valor) IsNot Nothing Then Ddl.SelectedValue = Valor Else Ddl.SelectedIndex = 0 End If End Sub #End Region #Region " TIPO TRANSACCION " Private Sub CargaTipoTransaccion() If TipoPago = 1 Then DdlTipoTransaccion.DataSource = GlobalDTTipoTransacciones.FiltraParametros("Tipo = 'Egs' AND CveTipoTransaccion IN (1, 2) and Estatus = 1 ") DdlTipoTransaccion.DataBind() DdlTipoTransaccion.SelectedValue = TipoPago.ToString ElseIf TipoPago = 2 Then DdlTipoTransaccion.DataSource = GlobalDTTipoTransacciones.FiltraParametros("Tipo = 'Egs' AND CveTipoTransaccion IN (1, 2) and Estatus = 1 ") DdlTipoTransaccion.DataBind() DdlTipoTransaccion.SelectedValue = TipoPago.ToString RecargaCuentasDepositos() ElseIf TipoPago = 3 Then DdlTipoTransaccion.DataSource = GlobalDTTipoTransacciones.FiltraParametros("Tipo = 'Egs' AND CveTipoTransaccion IN (1, 2) and Estatus = 1 ") DdlTipoTransaccion.DataBind() DdlTipoTransaccion.SelectedValue = TipoPago.ToString RecargaCuentasDepositos() Else DdlTipoTransaccion.DataSource = GlobalDTTipoTransacciones.FiltraParametros("Tipo = 'Egs' and Estatus = 1") DdlTipoTransaccion.DataBind() End If If DdlTipoTransaccion.Items.Count > 1 Then DdlTipoTransaccion.Items.Insert(0, New ListItem("Seleccione Tipo Movimiento", "-1")) End Sub Protected Sub DdlTipoTransaccion_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlTipoTransaccion.SelectedIndexChanged BtnIEGuardar.Enabled = True 'cuando es cheque If DdlTipoTransaccion.SelectedValue = "1" Then ChkAbonoCuenta.Visible = True TxtPagueseA.Enabled = True Else ChkAbonoCuenta.Visible = False TxtPagueseA.Enabled = False End If If DdlTipoTransaccion.SelectedValue.ToEntero.Contiene(9, 17) Then ChkEnviarCorreo.Enabled = False ChkEnviarCorreo.Checked = False Else ChkEnviarCorreo.Enabled = True ChkEnviarCorreo.Checked = True End If CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) RecargaCuentasDepositos() ValidaFechaDocumentoDiasPosteriores() UpGuardar.Update() End Sub #End Region #Region " CUENTAS MOVTO " Private Sub CargaCuentas(tTipoTransaccion As Integer) DdlCuenta.Items.Clear() Dim dt As DataTable = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa) If FiltrarCuentas = 1 Then If ChkPagarPesos.Checked Then dt = dt.FiltraParametros(String.Format("CveMoneda = {0}", 1)) RegistraScript("CambiaPesosDolares();") ElseIf ChkPagarDolares.Checked Then dt = dt.FiltraParametros(String.Format("CveMoneda = {0}", 2)) RegistraScript("CambiaDolaresPesos();") Else If CveMonedaFiltro > 0 Then dt = dt.FiltraParametros(String.Format("CveMoneda = {0}", CveMonedaFiltro)) End If End If End If If TipoPago = 3 Then dt = dt.FiltraParametros("CveTipoCuenta = 7") End If 'cuando es layout If tTipoTransaccion = 9 Then dt = dt.FiltraParametros("UsaLayout = 1") End If If tTipoTransaccion = 17 Then dt = dt.FiltraParametros("UsaLayoutGrupos = 1") End If DdlCuenta.DataSource = dt DdlCuenta.DataBind() DdlCuenta.Items.Insert(0, New ListItem("Seleccione cuenta", "-1")) End Sub Protected Sub DdlCuenta_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlCuenta.SelectedIndexChanged Dim dr As DataRow = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveCuenta = {0}", DdlCuenta.SelectedValue)) If FiltrarCuentas = 0 Then If dr("CveMoneda").ToString() = "2" Then ChkPagarDolares.Visible = True ChkPagarDolares.Checked = True ChkPagarDolares.Enabled = False ChkPagarPesos.Visible = False ChkPagarPesos.Checked = False Else ChkPagarPesos.Visible = True ChkPagarPesos.Checked = True ChkPagarPesos.Enabled = False ChkPagarDolares.Visible = False ChkPagarDolares.Checked = False End If TxtTC.Text = GlobalTipoCambio(NowADS()).FormatoNumero(4) TxtFechaDocumento.Attributes.Add("onchange", "CambiaTC(this);") End If 'recargo la moneda con la que se va a pagar If dr IsNot Nothing Then TxtFechaDocumento.Attributes.Remove("onchange") UpDatos.Update() If ChkPagarPesos.Checked Then CveMoneda = 2 RegistraScript("CambiaPesosDolares();") Else CveMoneda = dr("CveMoneda").ToString.ToEntero If CveMoneda = 1 Then RegistraScript("CambiaDolaresPesos();") End If End If If CveMoneda = 2 Then DivTC.Visible = True TxtFechaDocumento.Attributes.Add("onchange", "CambiaTC(this);") TxtTC.Text = GlobalTipoCambio(TxtFechaDocumento.Text.ToDate).FormatoNumero(4) End If End If ' si no tiene CveMoneda, o es -1, cuando cambia de cuenta filtra las facturas If IfNull(Request("CveMoneda"), "-1").ToString.ToEntero = -1 Then CargaDatos(CveMoneda) If HdnTipoTransaccion.Value = "Egs" AndAlso UsuarioActual.Empresa.Funcionalidad(505) <> "1" Then Dim Folio As Long Dim Banco As New ClsBancos Folio = Banco.GetNextFolio(DdlCuenta.SelectedValue.ToEntero, DdlTipoTransaccion.SelectedValue.ToEntero) Banco.Dispose() TxtFolio.Text = Folio.ToString Else TxtFolio.Text = "" End If 'ValidaCuentasDepositoLayouts() CargaCuentasDepositos() 'Dim dr2 As DataRow = GlobalDTBancosCuentas(UsuarioActual.CveUsuario, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("CveCuenta = " & DdlCuenta.SelectedValue) 'If dr2 IsNot Nothing Then ' If dr("UsaTarjeta").ToString = "True" Then ' CargaGridTarjetas() ' Else ' DivTarjeta.Visible = False ' End If 'End If End Sub 'Function ValidaCuentasDepositoLayouts() As Boolean ' Dim Respuesta As Boolean = False ' Dim OpBanco As Integer = 1 ' Dim CuentaBanco As String = DdlCuenta.SelectedItem.Text.ToUpper ' If CuentaBanco.Contains("BBVA") Or CuentaBanco.Contains("BANCOMER") Then ' OpBanco = 1 ' 'ElseIf CuentaBanco.Contains("BAJIO") Then ' ' OpBanco = 2 ' ElseIf CuentaBanco.Contains("SCOTIA") Then ' OpBanco = 3 ' End If ' Dim dtc As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor:=CveProveedor) ' If dtc IsNot Nothing Then ' If DdlTipoTransaccion.SelectedValue = "9" Then ' If OpBanco = 1 Then ' If dtc.Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' End If ' If dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'").Rows.Count > 0 Then ' trCuentaDeposito.Visible = True ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' Else ' BtnIEGuardar.Enabled = False ' Alert("El Beneficiario no tiene una cuenta activa en BBVA, dela de alta o seleccione otro método de pago", TipoMensaje.MsgAdvertencia) ' End If ' ElseIf OpBanco = 3 Then ' If dtc.Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros("EstatusPagoElectronicoScotia = 'True' AND Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' End If ' If dtc.FiltraParametros("EstatusPagoElectronicoScotia = 'True' AND Estatus ='True'").Rows.Count > 0 Then ' trCuentaDeposito.Visible = True ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' Else ' BtnIEGuardar.Enabled = False ' Alert("El Beneficiario no tiene una cuenta activa en Scotiabank, dela de alta o seleccione otro método de pago", TipoMensaje.MsgAdvertencia) ' End If ' End If ' ElseIf DdlTipoTransaccion.SelectedValue = "17" Then ' If OpBanco = 1 Then ' If dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'").Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' trCuentaDeposito.Visible = True ' BtnIEGuardar.ToolTip = "" ' Else ' BtnIEGuardar.Enabled = False ' BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) ' End If ' 'ElseIf OpBanco = 3 Then ' ' If dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'").Rows.Count > 0 Then ' ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'") ' ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' ' trCuentaDeposito.Visible = True ' ' BtnIEGuardar.ToolTip = "" ' ' Else ' ' BtnIEGuardar.Enabled = False ' ' BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' ' Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) ' ' End If ' Else ' BtnIEGuardar.Enabled = False ' BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito para layout grupos" ' Alert("El proveedor no tiene cuentas deposito para layout grupos.", TipoMensaje.MsgAdvertencia) ' End If ' Else ' Respuesta = True ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros("Estatus ='True'") ' If dtc.Rows.Count > 0 Then ' trCuentaDeposito.Visible = True ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' End If ' End If ' End If ' UpGuardar.Update() ' Return Respuesta 'End Function 'Private Sub CargaGridTarjetas() ' Dim ObjCreditos As New ClsBancos ' ObjCreditos.GetTarjetasCreditos(DdlCuenta.SelectedValue.ToEntero) ' DdlTarjeta.Items.Clear() ' DdlTarjeta.DataSource = ObjCreditos.DtResultados ' DdlTarjeta.DataBind() ' DdlTarjeta.Items.Insert(0, New ListItem("Seleccione", "-1")) ' ObjCreditos.Dispose() ' DivTarjeta.Visible = True 'End Sub #End Region #Region " CUENTAS DEPOSITOS" Private Sub CargaCuentasDepositos() DdlCuentaDeposito.ClearSelection() DdlCuentaDeposito.SelectedValue = Nothing DdlCuentaDeposito.Items.Clear() trCuentaDeposito.Visible = False 'Dim dtc As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor:=CveProveedor) 'If dtc IsNot Nothing Then ' If dtc.FiltraParametros("Estatus ='True'").Rows.Count > 0 Then ' If DdlTipoTransaccion.SelectedValue = "9" Then ' If dtc.Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' End If ' If dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'").Rows.Count > 0 Then ' trCuentaDeposito.Visible = True ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' Else ' 'BtnIEGuardar.Enabled = False ' 'Alert("El Beneficiario no tiene una cuenta activa en BBVA, dela de alta o seleccione otro método de pago", TipoMensaje.MsgAdvertencia) ' End If ' ElseIf DdlTipoTransaccion.SelectedValue = "17" Then ' If dtc.Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros(" Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' trCuentaDeposito.Visible = True ' BtnIEGuardar.ToolTip = "" ' Else ' 'BtnIEGuardar.Enabled = False ' 'BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' 'Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) ' End If ' UpGuardar.Update() ' Else ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros("Estatus ='True'") ' If dtc.Rows.Count > 0 Then ' trCuentaDeposito.Visible = True ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' End If ' End If ' DdlCuentaDeposito.DataBind() ' Else ' If DdlTipoTransaccion.SelectedValue.Contiene("9", "17") Then ' 'BtnIEGuardar.Enabled = False ' 'BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' 'Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) ' Else ' trCuentaDeposito.Visible = True ' BtnIEGuardar.Enabled = True ' BtnIEGuardar.ToolTip = "" ' End If ' UpGuardar.Update() ' End If 'Else ' If DdlTipoTransaccion.SelectedValue = "17" Then ' BtnIEGuardar.Enabled = False ' BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' Else ' trCuentaDeposito.Visible = True ' BtnIEGuardar.Enabled = True ' BtnIEGuardar.ToolTip = "" ' End If ' UpGuardar.Update() 'End If 'Else ' trCuentaDeposito.Visible = False ' DdlCuentaDeposito.Items.Clear() 'End If 'RecargaGlobalCuentasBancarias() Dim OpBanco As Integer = 1 Dim CuentaBanco As String = DdlCuenta.SelectedItem.Text.ToUpper If CuentaBanco.Contains("BBVA") Or CuentaBanco.Contains("BANCOMER") Then OpBanco = 1 'ElseIf CuentaBanco.Contains("BAJIO") Then ' OpBanco = 2 ElseIf CuentaBanco.Contains("SCOTIA") Then OpBanco = 3 End If If DdlCuenta.SelectedValue = "-1" Then BtnIEGuardar.Enabled = False trCuentaDeposito.Visible = False DdlCuentaDeposito.Items.Clear() UpnCuentasPago.Update() UpCuentaDeposito.Update() Return End If Dim dtc As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor:=CveProveedor) If dtc IsNot Nothing Then If DdlTipoTransaccion.SelectedValue = "9" Then If OpBanco = 1 Then If dtc.Rows.Count > 0 Then DdlCuentaDeposito.DataSource = dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'") DdlCuentaDeposito.DataBind() End If If dtc.FiltraParametros("EstatusPagoElectronico = 'True' AND Estatus ='True'").Rows.Count > 0 Then trCuentaDeposito.Visible = True DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) Else BtnIEGuardar.Enabled = False Alert("El Beneficiario no tiene una cuenta activa en BBVA, dela de alta o seleccione otro método de pago", TipoMensaje.MsgAdvertencia) End If ElseIf OpBanco = 3 Then If dtc.Rows.Count > 0 Then DdlCuentaDeposito.DataSource = dtc.FiltraParametros("EstatusPagoElectronicoScotia = 'True' AND Estatus ='True'") DdlCuentaDeposito.DataBind() DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) End If If dtc.FiltraParametros("EstatusPagoElectronicoScotia = 'True' AND Estatus ='True'").Rows.Count > 0 Then trCuentaDeposito.Visible = True DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) Else BtnIEGuardar.Enabled = False Alert("El Beneficiario no tiene una cuenta activa en Scotiabank, dela de alta o seleccione otro método de pago", TipoMensaje.MsgAdvertencia) End If End If ElseIf DdlTipoTransaccion.SelectedValue = "17" Then If OpBanco = 1 Then If dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' AND Estatus ='True'").Rows.Count > 0 Then DdlCuentaDeposito.DataSource = dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' AND Estatus ='True'") DdlCuentaDeposito.DataBind() DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) trCuentaDeposito.Visible = True BtnIEGuardar.ToolTip = "" Else BtnIEGuardar.Enabled = False BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) End If 'ElseIf OpBanco = 3 Then ' If dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'").Rows.Count > 0 Then ' DdlCuentaDeposito.DataSource = dtc.FiltraParametros(" EstatusPagoElectronicoGrupos = 'True' Estatus ='True'") ' DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) ' trCuentaDeposito.Visible = True ' BtnIEGuardar.ToolTip = "" ' Else ' BtnIEGuardar.Enabled = False ' BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito" ' Alert("El proveedor no tiene cuentas deposito.", TipoMensaje.MsgAdvertencia) ' End If Else BtnIEGuardar.Enabled = False BtnIEGuardar.ToolTip = "El proveedor no tiene cuentas deposito para layout grupos" Alert("El proveedor no tiene cuentas deposito para layout grupos.", TipoMensaje.MsgAdvertencia) End If Else 'Respuesta = True DdlCuentaDeposito.DataSource = dtc.FiltraParametros("Estatus ='True'") DdlCuentaDeposito.DataBind() If dtc.Rows.Count > 0 Then trCuentaDeposito.Visible = True DdlCuentaDeposito.Items.Insert(0, New ListItem("Seleccione una cuenta", "-1")) End If BtnIEGuardar.Enabled = True End If End If UpGuardar.Update() UpnCuentasPago.Update() UpCuentaDeposito.Update() End Sub Private Sub RecargaCuentasDepositos() Dim dr As DataRow = GlobalDTTipoTransacciones.FiltroPrimero(String.Format("CveTipoTransaccion = {0}", DdlTipoTransaccion.SelectedValue)) 'Egs o Ing If dr IsNot Nothing Then HdnTipoTransaccion.Value = dr("Tipo").ToString HdnTipoTransaccionAbreviatura.Value = dr("Abreviatura").ToString End If 'cuando es transferencia bancaria, debe de solicitar a que cuenta se va a depositar CargaCuentasDepositos() End Sub Protected Sub DdlCuentaDeposito_SelectedIndexChanged(sender As Object, e As EventArgs) Dim dtc As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor:=CveProveedor, CveCuentaDeposito:=DdlCuentaDeposito.SelectedValue.ToEntero) If dtc IsNot Nothing AndAlso dtc.Rows.Count = 1 Then If dtc.Rows.Count > 0 Then If dtc.Rows(0)("TieneCIE").ToString.ToEntero = 1 Then TrReferenciaCIE.Visible = True TxtReferenciaCIE.Text = dtc.Rows(0)("Referencia").ToString TxtConceptoCIE.Text = dtc.Rows(0)("ConceptoCIE").ToString OriReferenciaCIE = dtc.Rows(0)("Referencia").ToString OriConceptoCIE = dtc.Rows(0)("ConceptoCIE").ToString Else TrReferenciaCIE.Visible = False End If If Boolean.Parse(dtc.Rows(0)("EstatusPagoElectronicoGrupos").ToString) = True AndAlso dtc.Rows(0)("CveSATBanco").ToString.ToEntero <= 0 Then Alert("Es necesario establecer el banco de la cuenta deposito", TipoMensaje.MsgAdvertencia) BtnIEGuardar.Enabled = False Else BtnIEGuardar.Enabled = True End If Else TrReferenciaCIE.Visible = False End If Else TrReferenciaCIE.Visible = False End If UpCuentaDeposito.Update() UpGuardar.Update() End Sub #End Region Protected Sub DdllOtrosPagos_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlOtrosPagos.SelectedIndexChanged If DdlOtrosPagos.SelectedValue <> "-1" Then DdlProsepago.Visible = False TxtOtrosImportes.Visible = True TxtTotal.Visible = True GvCxP.Columns(13).Visible = True Else DdlProsepago.Visible = False TxtOtrosImportes.Visible = False TxtTotal.Visible = False GvCxP.Columns(13).Visible = False TxtOtrosImportes.Text = "" TxtTotal.Text = "" RegistraScript("$get('TxtImporte').value = FormatoNumero(SumaValores(), 2);") End If UpDatos.Update() UPCompras.Update() End Sub #Region " PAGAR CON PESOS " Protected Sub ChkPagarPesos_CheckedChanged(sender As Object, e As EventArgs) If ChkPagarPesos.Checked Then DivTC.Visible = True CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) TxtFechaDocumento.Attributes.Add("onchange", "CambiaTC(this);") TxtTC.Text = GlobalTipoCambio(TxtFechaDocumento.Text.ToDate).FormatoNumero(4) TxtTC.Attributes.Add("onblur", "CambiaPesosDolares()") Else DivTC.Visible = False CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) TxtFechaDocumento.Attributes.Remove("onchange") End If UpDatos.Update() RegistraScript("CambiaPesosDolares();") End Sub #End Region #Region "PAGAR CON DOLARES" Protected Sub ChkPagarDolares_CheckedChanged(sender As Object, e As EventArgs) If ChkPagarDolares.Checked Then 'DivDolaresDolares.Visible = False CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) TxtFechaDocumento.Attributes.Add("onchange", "CambiaTC(this);") TxtTC.Text = GlobalTipoCambio(TxtFechaDocumento.Text.ToDate).FormatoNumero(4) TxtTC.Attributes.Add("onblur", "CambiaDolaresPesos()") Else 'DivDolaresDolares.Visible = False CargaCuentas(DdlTipoTransaccion.SelectedValue.ToEntero) TxtFechaDocumento.Attributes.Remove("onchange") End If UpDatos.Update() RegistraScript("CambiaDolaresPesos();") End Sub #End Region #Region " NOTIFICACION PAGO " Private Sub EnviarCorreoNotificacion(CveIENotificar As Integer, CorreoNotificarA As String, CopiaPara As String, UsuarioActualNotificar As Usuario, MostarAlert As Boolean) Try EnviarCorreoNotificacionHilo(CveIENotificar, CorreoNotificarA, CopiaPara, UsuarioActualNotificar) 'Dim Hilo As New Threading.Thread(Sub() EnviarCorreoNotificacionHilo(CveIENotificar, CorreoNotificarA, CopiaPara, UsuarioActualNotificar)) 'Dim Hilo As New Threading.Thread( EnviarCorreoNotifiMandaCorreocacionHilo(CveIENotificar, CorreoNotificarA, CopiaPara, UsuarioActualNotificar)) 'Hilo.Start() If MostarAlert Then Alert("El correo se envió correctamente", TipoMensaje.ToastInformacion) End If Catch ex As Exception If MostarAlert Then Alert("No se pudo enviar el correo electrónico.", TipoMensaje.MsgError) End If End Try End Sub Private Sub EnviarCorreoNotificacionHilo(CveIENotificar As Integer, CorreoNotificarA As String, CopiaPara As String, UsuarioActualNotificar As Usuario) Try Dim ObjBancos As New ClsBancos() If ObjBancos.NotificacionPago(CveIENotificar, CorreoNotificarA, CopiaPara, UsuarioActualNotificar) Then Alert("El correo se envió correctamente", TipoMensaje.ToastInformacion) Else Alert("No se pudo enviar el correo electrónico.", TipoMensaje.MsgError) End If ObjBancos.Dispose() Catch ex As Exception GuardaLog("Error al enviar notificación de pago ProveedoresAbonar --> " & ex.StackTrace.ToString) End Try End Sub #End Region #Region "SALDAR CUENTAS" Private Sub BtnSaldarCuentasSinPagar_Click(sender As Object, e As EventArgs) Handles BtnSaldarCuentasSinPagar.Click Dim ObjConta As New ClsContabilidad ObjConta.IniciaTransacSQL() Dim CvePrePoliza As Integer = 0 Dim MsgError As String = "" Dim FuncionalidadFluctuacionImpuestos As Boolean = If(UsuarioActual.Empresa.Funcionalidad(159) = "1", True, False) Dim EsContabilizable As Boolean = If(UsuarioActual.CveEmpresa.Contiene(13, 83), False, True) CvePrePoliza = ObjConta.AddPrePolizas("Bancos/ProveedoresAbonar/Saldar", 98, 0, 0, 1, TxtFechaIncobrable.Text.ToDate, "Saldado de facturas", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) For Each gr As GridViewRow In GvCxP.Rows If gr.FCCheckBox("Chk").Checked Then Dim Saldo As Decimal = gr.FCTextBox("TxtAbonar").Text.ToDecimal 'gr.DataKey("Saldo").ToDecimal Dim TCCompra As Decimal = gr.DataKey("TipoCambio").ToDecimal Dim TCPago As Decimal = GlobalTipoCambio(TxtFechaIncobrable.Text.ToDate).ToDecimal Dim CveMoneda As Integer = gr.DataKey("CveMoneda").ToEntero Dim FechaCompra As Date = gr.DataKey("Fecha").ToDate Dim CveSubProyecto As Integer = gr.DataKey("CveSubProyecto").ToEntero Dim CveConceptoContablePago As Integer = 17 If gr.DataKey("CveTipoConcepto").ToEntero = 2 Then CveConceptoContablePago = 308 'cuando es acreedor If CveMoneda <> 1 Then Select Case CveConceptoContablePago Case 17 CveConceptoContablePago = 312 Case 308 CveConceptoContablePago = 309 Case Else End Select End If Dim CveConceptoContableComplementaria As Integer = 206 If gr.DataKey("CveTipoConcepto").ToEntero = 2 Then CveConceptoContableComplementaria = 310 'cuando es acreedor Dim ConceptoPartida As String = String.Format("Saldar compra {0}", gr.DataKey("SerieFolio").ToString) If CveMoneda > 1 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Saldo, Saldo, CveConceptoContablePago, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, TipoCambio:=TCCompra, ImporteME:=If(CveMoneda > 1, Saldo, 0), Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, 0.00D, (Saldo * TCCompra - Saldo).RoundSQL, CveConceptoContableComplementaria, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, ImporteME:=Saldo, TipoCambio:=TCCompra, Contabilizable:=EsContabilizable) Then MsgError = "No se pudo insertar la póliza" End If Else TCPago = 1 If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Saldo, If(CveMoneda = 1, Saldo, Saldo * TCCompra), CveConceptoContablePago, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, ImporteME:=If(CveMoneda > 1, Saldo, 0), TipoCambio:=TCCompra, Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If End If Dim PorcentajePago As Decimal = Saldo / gr.DataKey("TotalOriginal").ToDecimal If MsgError = "" AndAlso gr.DataKey("IVA").ToDecimal > 0 Then Dim PorcentajeImpuesto As Decimal = gr.DataKey("PorcentajeIVA").ToDecimal Dim IVA As Decimal = PorcentajePago * gr.DataKey("IVA").ToDecimal If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, IVA, If(CveMoneda = 1, IVA, IVA * If(FuncionalidadFluctuacionImpuestos, TCPago, TCCompra)), 14, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, PorcentajeImpuesto:=PorcentajeImpuesto, Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If Saldo = Saldo - IVA End If If MsgError = "" AndAlso gr.DataKey("IEPS").ToDecimal > 0 Then Dim IEPS As Decimal = PorcentajePago * gr.DataKey("IEPS").ToDecimal If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, IEPS, If(CveMoneda = 1, IEPS, IEPS * If(FuncionalidadFluctuacionImpuestos, TCPago, TCCompra)), 25, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If Saldo = Saldo - IEPS End If ' se manda al ot ingresos, los impuestos por acreditar If MsgError = "" Then Dim tcvecon As Integer = 78 Dim tTipoMovto As Boolean = True If Saldo < 0 Then tcvecon = 211 tTipoMovto = False End If If MsgError = "" AndAlso Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, tTipoMovto, Saldo, (Saldo * TCPago).RoundSQL, tcvecon, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, TipoCambio:=TCCompra, TipoCambioPago:=TCPago, CveSubProyecto:=CveSubProyecto, Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If End If 'fluctuación. If CveMoneda > 1 Then Dim ImporteFluctuacion As Decimal = 0 ImporteFluctuacion = Saldo * (TCPago - TCCompra) If CveSubProyecto <= 0 Then MsgError = "No se pudo obtener el sub proyecto o centro de costo" If TCCompra > TCPago Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Math.Abs(ImporteFluctuacion), Math.Abs(ImporteFluctuacion), 64, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveSubProyecto:=CveSubProyecto, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, TipoCambio:=TCCompra, TipoCambioPago:=TCPago, Contabilizable:=EsContabilizable) 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, gr.DataKey("SerieFolio").ToString, ConceptoPartida, CveSubProyecto:=CveSubProyecto, CveProveedor:=gr.DataKey("CveProveedor").ToEntero, CveCompra:=gr.DataKey("CveCompra").ToEntero, TipoCambio:=TCCompra, TipoCambioPago:=TCPago, Contabilizable:=EsContabilizable) Then MsgError = "Ocurrio un error al saldar el movimiento" End If End If End If End If Next If MsgError.Trim.Length = 0 AndAlso CvePrePoliza > 0 Then If MsgError = "" AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 5) Then If ObjConta.ValorPolizaDescuadre > 0 Then MsgError = ObjConta.MensajePolizaDescuadre + " " + ObjConta.ValorDiferencia GuardaLogAD($"Bancos/ProveedoresAbonar | Error:{ObjConta.MensajePolizaDescuadre} Diferencia:{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") End If End If End If If MsgError = "" Then ObjConta.Commit() CargaDatos(CveMoneda) RegistraScript("$('#ModalSaldarCuentaSinPagar').modal('hide')") Dim Msg As New StringBuilder Msg.Append("Los movimientos se saldaron correctamente.
") If UsuarioActual.TienePermisoProceso(354) Then 'visualizar la póliza al registros Msg.AppendFormat("Ver Póliza   ", CvePrePoliza) End If Alert(Msg.ToString) Else ObjConta.RollBack() Alert(MsgError, TipoMensaje.MsgError) End If ObjConta.Dispose() End Sub #End Region #Region "GENERAR SOLICITUD" Protected Sub LnkPDFSolicitud_Click(sender As Object, e As EventArgs) GenerarPDFSolicitud("PDF") End Sub Protected Sub LnkExcelSolicitud_Click(sender As Object, e As EventArgs) GenerarPDFSolicitud("EXCEL") End Sub Private Sub GenerarPDFSolicitud(Opcion As String) If DtDatos.Rows.Count > 0 Then Dim Imagen As New System.IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") Dim StrImporte As String = DtDatos.Rows(0)("Saldo").ToString.FormatoNumero 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.ToString)) params.Add(New ReportParameter("Sucursal", DtDatos.Rows(1)("SubProyecto").ToString)) params.Add(New ReportParameter("Importe", $"${StrImporte}")) params.Add(New ReportParameter("RazonSocial", TxtPagueseA.Text)) params.Add(New ReportParameter("Fecha", TxtFechaDocumento.Text)) Dim Transferencia As String = "", Banco As String = "", CLABE As String = "", Cuenta As String = "", Correo As String = "" If DdlTipoTransaccion.SelectedValue.Contiene("2", "8") Then Transferencia = "Si" Else Transferencia = "No" If DdlCuentaDeposito.SelectedValue.ToEntero > 0 Then Dim dtt As DataTable = GlobalDTProveedoresCuentas(UsuarioActual.CveEmpresa, CveProveedor, CveCuentaDeposito:=DdlCuentaDeposito.SelectedValue.ToEntero) If dtt.Rows.Count > 0 Then Banco = dtt.Rows(0)("BancoNombre").ToString CLABE = dtt.Rows(0)("CLABE").ToString Cuenta = dtt.Rows(0)("Cuenta").ToString Correo = dtt.Rows(0)("Correo").ToString End If End If params.Add(New ReportParameter("Transferencia", Transferencia)) params.Add(New ReportParameter("Banco", Banco)) params.Add(New ReportParameter("CLABE", CLABE)) params.Add(New ReportParameter("Cuenta", Cuenta)) params.Add(New ReportParameter("Correo", Correo)) params.Add(New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))) Dim NombreArchivo As String = "SolicitudPago" ''String.Format("SolicitudPago{0}.pdf", TxtPagueseA.Text).Replace(" ", "") ImprimirPDF("Empresas/Grales/Formatos/Solicitud.rdlc", DtDatos, params, NombreArchivo, Opcion) Else Alert("No se encontraron datos.", TipoMensaje.MsgAdvertencia) End If End Sub #End Region Private Sub RVTxtFechaDocumento_Init(sender As Object, e As EventArgs) Handles RVTxtFechaDocumento.Init RVTxtFechaDocumento.MaximumValue = NowADS().AddDays(2).ToShortDateString RVTxtFechaDocumento.MinimumValue = NowADS().AddMonths(-38).ToShortDateString 'RVTxtFechaDocumentoMenor.MinimumValue = NowADS().AddMonths(-38).ToShortDateString 'RVTxtFechaDocumentoMenor.MaximumValue = NowADS().AddDays(2).ToShortDateString Calendario.EndDate = NowADS().AddDays(2) End Sub Private Sub ValidaFechaDocumentoDiasPosteriores() RVTxtFechaDocumento.MaximumValue = NowADS().AddDays(3).ToShortDateString 'RVTxtFechaDocumentoMenor.MaximumValue = NowADS().AddDays(3).ToShortDateString RVTxtFechaDocumento.ErrorMessage = "ERROR:
La fecha del documento no puede ser superior a 3 días de la fecha actual" Calendario.EndDate = NowADS().AddDays(3) If DdlTipoTransaccion.SelectedValue.Contiene("1", "16") Then 'cheques, 3meses RVTxtFechaDocumento.MaximumValue = NowADS().AddMonths(3).ToShortDateString RVTxtFechaDocumento.ErrorMessage = "ERROR:
La fecha del documento no puede ser superior a 3 meses de la fecha actual" Calendario.EndDate = NowADS().AddMonths(3) End If If DdlTipoTransaccion.SelectedValue = "2" Then 'transfer, 3semanas RVTxtFechaDocumento.MaximumValue = NowADS().AddDays(21).ToShortDateString RVTxtFechaDocumento.ErrorMessage = "ERROR:
La fecha del documento no puede ser superior a 3 semanas de la fecha actual" Calendario.EndDate = NowADS().AddDays(21) End If UpDatos.Update() UpGuardar.Update() End Sub Protected Sub chkaplicaDescuento_CheckedChanged(sender As Object, e As EventArgs) GvCxP.Columns(11).Visible = chkaplicaDescuento.Checked TxtDescuenoMasivo.Visible = chkaplicaDescuento.Checked ChkGeneraRNC.Visible = chkaplicaDescuento.Checked UPCompras.Update() End Sub Private Sub tmpValida() Dim ValidaSAT As Boolean = True Dim ImporteSeleccionado As Decimal = 0 'If UsuarioActual.Empresa.Funcionalidad(529) = "1" OrElse ChkNoValidaSAT.Checked Then ValidaSAT = False If ValidaSAT Then Dim Validada As Boolean = False Dim MsgValidadas As New StringBuilder Dim Valida As New ClsValidaCFDi() 'verifico ante el SAT las compras que voy a pagar For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then ImporteSeleccionado += gvr.FCTextBox("TxtAbonar").Text.ToDecimal If gvr.DataKey("UUID") <> "" Then Valida.Verificar(gvr.DataKey("UUID"), gvr.DataKey("RFC"), UsuarioActual.Empresa.RFC, gvr.DataKey("TotalOriginal").ToDecimal) If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa < 2 Then Valida.EsValida = 1 End If If Valida.EsValida <> 1 Then Validada = False If Valida.EsValida = 2 Then 'Cancelada 'estatus inventario, no surtida If gvr.DataKey("EstatusInventario") = "1" Then MsgValidadas.AppendFormat("Factura Cancelada: {0} - {1} , relacione su factura nueva para descontar saldo
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) Else MsgValidadas.AppendFormat("Factura Cancelada: {0} - {1} con movimientos de almacen, relacione su factura nueva para descontar saldo
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) End If Else MsgValidadas.AppendFormat("Factura No se pudo Validar: {0} - {1}
", gvr.DataKey("SerieFolio"), gvr.DataKey("Descripcion")) End If End If End If End If Next Valida.Dispose() 'verificacion doble, si no la han cancelado, ya tiene una validaci[on para que llegue aqui If MsgValidadas.Length > 0 Then Alert(String.Format("
Las Facturas presentan la siguiente situación ante el SAT.
{0}", MsgValidadas.ToString), TipoMensaje.MsgAdvertencia) Exit Sub End If Else For Each gvr As GridViewRow In GvCxP.Rows If gvr.FCCheckBox("Chk").Checked Then ImporteSeleccionado += gvr.FCTextBox("TxtAbonar").Text.ToDecimal End If Next End If If ImporteSeleccionado <= 0 Then Alert("Seleccione facturas", TipoMensaje.MsgAdvertencia) Exit Sub End If End Sub Protected Sub BtnCambiarProveedor_Click(sender As Object, e As EventArgs) If DdlProveedores.SelectedValue.ToEntero() <= 0 Then Alert("Debe seleccionar un proveedor", TipoMensaje.MsgAdvertencia) Exit Sub End If Dim url As String = String.Format("/Bancos/ProveedoresAbonar.aspx?CveProveedor={0}&FechaI={1}&FechaF={2}&CveUsuarioProgramo={3}&TipoPago={4}&CveUsuarioRegistro={5}&CveUsuarioResponsable={6}&CveClasificacion={7}&CveMoneda={8}&CveEstatus={9}&CveProveedorSucursal={10}&CveAplicaNC={11}&CodigoProgramacion={12}&CveSubProyecto={13}", DdlProveedores.SelectedValue, Request("FechaI").ToString(), Request("FechaF").ToString(), Request("CveUsuarioProgramo").ToString(), -1, Request("CveUsuarioRegistro").ToString(), Request("CveUsuarioResponsable").ToString(), Request("CveClasificacion").ToString(), Request("CveMoneda").ToString(), Request("CveEstatus").ToString(), Request("CveProveedorSucursal").ToString(), Request("CveAplicaNC").ToString(), Request("CodigoProgramacion").ToString(), Request("CveSubProyecto").ToString()) Response.Redirect(url) End Sub Public Function GeneraRNC(ImporteRNC As Decimal, ByRef sqltransaccion As SqlTransaction, CveCompraAmortizada As Integer, ByRef CompraActual As Compra, ByRef ObjConta As ClsContabilidad, CvePrePoliza As Integer, CveProveedor As Integer, NombreProveedor As String, Fecha As Date, Descripcion As String, CveMoneda As Integer, TipoCambio As Decimal, Serie As String, Folio As String, Optional EsDRMN As Boolean = False, Optional TmpListadoPS As DataTable = Nothing, Optional PorcentajeIVA As Decimal = 0, Optional CveSubProyecto As Integer = -1, Optional nRow As Integer = -1, Optional ExisteRNC As Boolean = False) As Integer Dim CveCompraRNC As Integer = -1 Dim respuesta As Boolean = True 'Dim PorcentajeIVA As Decimal = TmpDT.MAX("IVAPorcentaje").ToDecimal Dim CvePS_RNC As Integer = UsuarioActual.Empresa.Funcionalidad(580).ToEntero Dim PSRow As DataRow = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa, CvePS:=CvePS_RNC).FiltroPrimero("") Dim CveSubProyectoPrincipal As Integer = CveSubProyecto 'AsignarSubProyectoPrincipal() Dim SubProyecto As String = "" If Not CvePS_RNC > 0 Then Alert("No esta definido el producto de Remisión de Nota de Crédito.", TipoMensaje.MsgAdvertencia) Return -1 End If If Not CveSubProyectoPrincipal > 0 Then Alert("No esta definido el Sub Proyecto.", TipoMensaje.MsgAdvertencia) Return -1 End If SubProyecto = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyectoPrincipal).FiltroPrimeroValor("SubProyecto") If PSRow IsNot Nothing Then Dim CompraRNC As New ClsCompraManagerComprasCA(UsuarioActual) With { .TipoDocto = "RNC", .CveProveedor = CveProveedor, .CveTipoProveedor = CveTipoProveedor, .CveTipoConceptoProveedor = CveTipoConceptoProveedor, .Descripcion = Descripcion, .NombreProveedor = NombreProveedor, .Fecha = Fecha, .CveMoneda = CveMoneda, .TipoCambio = If(CveMoneda = 1, 1, TipoCambio), .Serie = If(ExisteRNC, $"D{nRow}-{Serie}", $"D-{Serie}"), .Folio = Folio, .CveCompraAmortizacion = CveCompraAmortizada, .CveCompraRelacionada = CveCompraAmortizada } 'Dim CveTipoPS As Integer = PSRow("CveTipoPS").ToString.ToEntero 'If PSRow("CvePSCargo").ToString <> "" Then ' CveTipoPS = 2 'End If Dim CveClasificacion As Integer = PSRow("CveClasificacion").ToString.ToEntero Dim Clasificacion As String = PSRow("Clasificacion").ToString Dim PS As String = PSRow("PSCodigo").ToString Dim CveUM As Integer = PSRow("CveUnidadMedida").ToString.ToEntero Dim UM As String = PSRow("UnidadMedida").ToString Dim IVARNC As Decimal = (ImporteRNC * PorcentajeIVA).RoundSQL(2) Dim TotalRNC As Decimal = (ImporteRNC + IVARNC).RoundSQL(2) CompraRNC.ConfiguraRegistroRapido(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNC, IVARNC, TotalRNC, PorcentajeIVA) If CompraRNC.AddCompra(sqltransaccion) Then 'Dim tImporteRNC = (ImporteRNC + IVARNC).RoundSQL(2) ' le agrego el importe del iva Dim Pago As New CompraPago Pago.ImportePago = TotalRNC Pago.CveMonedaPago = CompraActual.CveMoneda Pago.CveCompraAmortizacion = CompraRNC.CveCompra Pago.Referencia = CompraRNC.SerieFolio Pago.TCPago = CompraActual.TC Pago.AplicaAcreditable = False Pago.TipoPago = "RNC" Pago.Fecha = CompraActual.Fecha 'toma la misma fecha de la provisión en el pago de NC CveCompraRNC = CompraRNC.CveCompra respuesta = Not AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjConta) If Not respuesta Then Dim error_ As Boolean = True End If Else respuesta = False End If 'If respuesta AndAlso ImporteRNCProntoPago > 0 Then ' Dim CompraRNCProntoPago As New ClsCompraManagerCompras(UsuarioActual) With { ' .TipoDocto = "RNC", ' .CveProveedor = CveProveedor, ' .CveTipoProveedor = CveTipoProveedor, ' .CveTipoConceptoProveedor = CveTipoConcepto, ' .Descripcion = Descripcion, ' .NombreProveedor = NombreProveedor, ' .Fecha = Fecha, ' .CveMoneda = CveMoneda, ' .TipoCambio = If(CveMoneda = 1, 1, TipoCambio), ' .Serie = $"PP-{Serie}", ' .Folio = $"{Folio}", ' .CveCompraAmortizacion = CveCompraRegistrada ' } ' Dim IVARNCProntoPago As Decimal = (ImporteRNCProntoPago * PorcentajeIVA).RoundSQL(2) ' CompraRNCProntoPago.ConfiguraRegistroRapido(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNCProntoPago, (ImporteRNCProntoPago + IVARNCProntoPago), IVARNCProntoPago, PorcentajeIVA) ' If CompraRNCProntoPago.AddCompra(sqltransaccion) Then ' Dim tImporteRNCProntoPago = ImporteRNCProntoPago + IVARNCProntoPago ' le agrego el importe del iva ' Dim Pago As New CompraPago ' Pago.ImportePago = tImporteRNCProntoPago ' Pago.CveMonedaPago = CompraActual.CveMoneda ' Pago.CveCompraAmortizacion = CompraRNCProntoPago.CveCompra ' Pago.Referencia = CompraRNCProntoPago.SerieFolio ' Pago.TCPago = CompraActual.TC ' Pago.AplicaAcreditable = False ' Pago.TipoPago = "RNC" ' Pago.Fecha = CompraActual.Fecha 'toma la misma fecha de la provisión en el pago de NC ' respuesta = Not AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjConta) ' Else ' respuesta = False ' End If 'End If End If Return If(respuesta, CveCompraRNC, -1) End Function End Class Public Class MMensajeDevolucion Public Property CveMovimiento As Integer Public Property TieneError As Boolean Public Property DebeRealizarDevolucion As Boolean Public Property Total As Decimal End Class Public Class ClsCompraManagerComprasCA Enum EnumCargaCompra DesdeXML DesdeArchivo SinXML End Enum Public Enum EnumCFDIVersion v32 v33 v40 End Enum Public Enum EnumTipoCompra SinDefinir = -1 Gasto_con_almacen = 10 Activo_Fijo = 1 'Costo_Indirecto = 2 Almacen = 3 Almacen_con_costo_indirecto = 8 Costo_Indirecto = 4 Importación = 5 NC_Con_Productos = 6 Apoyo_Logístico = 9 NC_Por_Devolución = 11 Garantia = 12 End Enum Public Enum EnumModalidadAccionPS Agregar Actualizar End Enum Public Property CveCompra As Integer = -1 Public Property CveProveedor As Integer Public Property CveTipoConceptoProveedor As Integer Public Property CveMoneda As Integer Public Property Fecha As Date Public ReadOnly Property SerieFolio As String Get If Serie.Length > 0 Then Return $"{Serie}-{Folio}" Else Return $"{Folio}" End If End Get End Property Public Property Serie As String = "" Public Property Folio As String = "" Public Property FolioSecundario As String = "" Public Property Descripcion As String = "" Public Property CFDIVersion As EnumCFDIVersion = EnumCFDIVersion.v40 Public Property ProveedorNombre As String = "" Public Property EsImportacion As Boolean = False Public Property TC As Decimal = 1 Public Property SubTotal As Decimal = 0D Public Property SubTotal2 As Decimal = 0D Public Property Descuento As Decimal = 0D Public Property Total As Decimal = 0D Public Property Moneda As String = "" Public Property TipoComprobante As String Public Property TipoDocto As String = "Fac" Public Property TipoCambio As Decimal = 1 Public Property CompraNoDeducible As Integer = 0 Public Property IVA As Decimal = 0D Public Property IVADeducible As Decimal = 0D Public Property IVANoDeducible As Decimal = 0 Public Property IEPS As Decimal = 0D Public Property RetIVA As Decimal = 0D Public Property RetISR As Decimal = 0D Public Property PorcentajeIVA As Decimal = 0 Public Property PorcentajeISR As Decimal = 0 Public Property CveRetIVAConcepto As Integer = -1 Public Property CveRetISRConcepto As Integer = -1 Public Property CveSubProyecto As Integer = -1 Public Property UsuarioActual As Usuario Public ReadOnly Property ConceptoPrePolizaIVA As ClsPaginas.ConceptosRetenciones Get Dim Ret As New ClsPaginas.ConceptosRetenciones If EsImportacion Then Ret.CveConceptoAcreditable = 288 Ret.CveConceptoxAcreditar = 287 Else Ret.CveConceptoAcreditable = 19 Ret.CveConceptoxAcreditar = 14 End If Return Ret End Get End Property Public ReadOnly Property ConceptoPrePolizaRetIVA As ClsPaginas.ConceptosRetenciones Get Dim Ret As New ClsPaginas.ConceptosRetenciones Dim Funcionalidad, FuncionalidadxAcred As Integer If CveRetIVAConcepto = 1 Then Funcionalidad = 308 : FuncionalidadxAcred = 307 Ret.CveConceptoAcreditable = 22 Ret.CveConceptoxAcreditar = 15 ElseIf CveRetIVAConcepto = 2 Then Funcionalidad = 310 : FuncionalidadxAcred = 309 Ret.CveConceptoAcreditable = 184 Ret.CveConceptoxAcreditar = 183 ElseIf CveRetIVAConcepto = 3 Then Funcionalidad = 312 : FuncionalidadxAcred = 311 Ret.CveConceptoAcreditable = 186 Ret.CveConceptoxAcreditar = 185 ElseIf CveRetIVAConcepto = 4 Then Funcionalidad = 314 : FuncionalidadxAcred = 313 Ret.CveConceptoAcreditable = 249 Ret.CveConceptoxAcreditar = 248 ElseIf CveRetIVAConcepto = 5 Then Funcionalidad = 578 : FuncionalidadxAcred = 578 Ret.CveConceptoAcreditable = 286 Ret.CveConceptoxAcreditar = 285 ElseIf CveRetIVAConcepto = 6 Then Funcionalidad = 578 : FuncionalidadxAcred = 578 Ret.CveConceptoAcreditable = 333 Ret.CveConceptoxAcreditar = 334 End If Return Ret End Get End Property Public ReadOnly Property ConceptoPrePolizaRetISR As ClsPaginas.ConceptosRetenciones Get Dim Ret As New ClsPaginas.ConceptosRetenciones Dim Funcionalidad, FuncionalidadxAcred As Integer If CveRetISRConcepto = 1 Then Funcionalidad = 316 : FuncionalidadxAcred = 315 Ret.CveConceptoAcreditable = 23 Ret.CveConceptoxAcreditar = 16 ElseIf CveRetISRConcepto = 2 Then Funcionalidad = 318 : FuncionalidadxAcred = 317 Ret.CveConceptoAcreditable = 244 Ret.CveConceptoxAcreditar = 243 ElseIf CveRetISRConcepto = 3 Then Funcionalidad = 349 : FuncionalidadxAcred = 348 Ret.CveConceptoAcreditable = 328 Ret.CveConceptoxAcreditar = 327 End If Return Ret End Get End Property Public Property CveMetodoPago As Integer Public Property MetodoPago As String Public Property DocumentosRelacionadosUUIDSList As List(Of String) = New List(Of String) Public ReadOnly Property DocumentosRelacionadosUUIDSString As String Get Return GeneraStringDoctosRelacionados() End Get End Property Public Property DocumentosRelacionadosAnticiposUUIDList As List(Of String) = New List(Of String) Public Property TieneAnticiposXML As Boolean = False Public Property EmisorRFC As String Public Property ReceptorRFC As String Public Property UUID As String = "" Public Property TotalRetenciones As Decimal = 0D Public Property RetencionIVA As Decimal = 0D Public Property RetencionISR As Decimal = 0D Public Property SumaTotalRetenciones As Decimal = 0D Public Property TotalTraslados As Decimal = 0D Public Property TrasladoIVA As Decimal = 0D Public Property TrasladoIEPS As Decimal = 0D Public Property SumaTotalTraslados As Decimal = 0D Public Property OtrosImpuestos As Decimal = 0D Private Property OtrosImpuestosRetenciones As Decimal = 0D Public Property Amortizacion As Decimal = 0D Public Property FechaPago As Date 'FIX ME corregir usando fecha interna calculada por los dias de credito del proveedor Public Property AplicaNotaCredito As Boolean = False Public Property XMlStr As String Public Property XMLCargaExistosa As Boolean = True Public Property Observaciones As String = "" Public Property CveEstatusFactura As Integer = 1 Public Property CvePrePoliza As Integer = -1 Public Property Redondeo As Decimal = 0 Public Property IdPoliza As Integer = -1 Public Property CveCajaChica As Integer = -1 Public Property CvePersonal As Integer = -1 Public Property NumeroReembolso As String = "" Public Property CveProveedorSucursal As Integer = -1 Public Property AplicoPromocion As Boolean = False Public Property CveConceptoContableAlmacen As Integer = -1 Public Property NoDeducible As Integer = 0 Public Property CveTipoCompra As Integer = -1 Public Property TotalOriginal As Decimal = 0D Public Property CveTipoConcepto As Integer = 1 'FIX ME Esto tiene que ver con el CveTipoProveedor 1 y 3 es CveTipoConcepto 1 y 2 es CveTipoConcepto 2 Public Property CveSubProyectoPrincipal As Integer = -1 Public Property CveFactura As Integer = -1 Public Property CveFolioGarantia As Integer = -1 Public Property TmpDT As DataTable = New DataTable Public Property SubTotalConceptos As Decimal = 0D Private Errores As StringBuilder = New StringBuilder Public ReadOnly Property MensajeError As String Get Return Errores.ToString() End Get End Property Public Property CompraSaldo As Decimal = 0D Public Property SubTotalOriginal As Decimal = 0D Public Property SubTotal2Original As Double = 0D Public Property IVAOriginal As Decimal = 0D Public Property RetIVAOriginal As Decimal = 0D Public Property RetISROriginal As Decimal = 0D Public Property Proyecto As String = "" Public Property CveProyecto As Integer = -1 Public Property SubProyecto As String = "" Public Property TipoCompra As EnumTipoCompra = EnumTipoCompra.SinDefinir Private Property DTTiposGastos() As DataTable Public Property CveTipoProveedor As Integer = -1 Public Property IEPSGasto As Boolean = False Public Property OtrosImpuestosGasto As Boolean = False Public Property OCVinculada As Boolean = False Public Property NumNoDed As Integer = 0 Public Property CveTipoPoliza As Integer = -1 Public Property NombreProveedor As Object Public Property CveCreditoDetalle As Integer = -1 Public Property CveIE As Integer = -1 Public Property CveCompraAmortizacion As Integer = -1 Public Property CveCompraRelacionada As Integer = -1 Public Sub New(UsuarioActual As Usuario) Errores = New StringBuilder Me.UsuarioActual = UsuarioActual End Sub Public Sub New(XmlFuente As String, OpcionCarga As EnumCargaCompra, DTTiposGastos As DataTable, UsuarioActual As Usuario) Errores = New StringBuilder Me.DTTiposGastos = DTTiposGastos Me.UsuarioActual = UsuarioActual If OpcionCarga = EnumCargaCompra.SinXML Then Else If OpcionCarga = EnumCargaCompra.DesdeArchivo Then CargaDesdeArchivo(XmlFuente) Else CargaDesdeString(XmlFuente) End If End If End Sub #Region "C A R G A S D E F U E N T E S " Private Sub CargaDesdeArchivo(XmlFuenteRuta As String) Dim XMLDoc As New XmlDocument If IO.File.Exists(XmlFuenteRuta) Then XMlStr = File.ReadAllText(XmlFuenteRuta).Replace("<br>", "").Replace("<", "").Replace("o;?", "") Try XMLDoc.LoadXml(XMlStr) XMLCargaExistosa = True Catch ex As Exception Try Dim oReader As New StreamReader(XmlFuenteRuta, Encoding.GetEncoding("ISO-8859-1")) XMLDoc.Load(oReader) oReader.Dispose() XMLCargaExistosa = True Catch ex2 As Exception GuardaLog("Error al intentar leer el XML del SAT. Error:" & ex2.ToString()) Errores.AppendLine("Error al intentar leer el XML. Error:" & ex2.ToString()) XMLCargaExistosa = False End Try End Try End If If XMLCargaExistosa Then CargaComprobanteXML(XMLDoc) End If End Sub Private Sub CargaDesdeString(XmlFuente As String) XMlStr = XmlFuente.Replace("<br>", "").Replace("<", "").Replace("o;?", "") Dim XMLDoc As New XmlDocument Try XMLDoc.LoadXml(XMlStr) XMLCargaExistosa = True Catch ex As Exception GuardaLog("Error al intentar leer . Error:" & ex.ToString()) Errores.AppendLine("Error al intentar leer el XML. Error:" & ex.ToString()) XMLCargaExistosa = False End Try If XMLCargaExistosa Then CargaComprobanteXML(XMLDoc) End If End Sub Private Sub CargaComprobanteXML(XMLDoc As XmlDocument) Dim nodo As XmlNode = XMLDoc.DocumentElement Serie = ValorXML(nodo, "serie") Dim StrCFDIVerion As String = ValorXML(nodo, "version") If StrCFDIVerion = "3.2" Then CFDIVersion = EnumCFDIVersion.v32 ElseIf StrCFDIVerion = "3.3" Then CFDIVersion = EnumCFDIVersion.v33 ElseIf StrCFDIVerion = "4.0" Then CFDIVersion = EnumCFDIVersion.v40 Else GuardaLog($"CFDI Versión {StrCFDIVerion} no soportada") Errores.AppendLine($"CFDI Versión {StrCFDIVerion} no soportada") XMLCargaExistosa = False Exit Sub End If Folio = ValorXML(nodo, "folio") Fecha = ValorXML(nodo, "fecha").ToDate SubTotal = ValorXML(nodo, "subTotal").ToDecimal Total = ValorXML(nodo, "total").ToDecimal Descuento = ValorXML(nodo, "descuento").ToDecimal Moneda = ValorXML(nodo, "Moneda") CveMoneda = ClsPaginas.GlobalDTMonedas().FiltroPrimeroValor("CveMoneda", $" AbreviaturaSAT = '{Moneda}' ").ToEntero If Not CveMoneda > 0 Then GuardaLog($"Moneda {Moneda} no se obtuvo la clabe") Errores.AppendLine($"Moneda {Moneda} no se obtuvo la clabe") XMLCargaExistosa = False Exit Sub End If TipoComprobante = ValorXML(nodo, "tipoDeComprobante") TipoCambio = ValorXML(nodo, "TipoCambio", "1").ToDecimal If CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40 Then Dim drm As DataRow = ClsPaginas.GlobalDTVtaMetodoPago.FiltroPrimero(String.Format("ClaveMetodoPagoSAT = '{0}'", ValorXML(nodo, "MetodoPago"))) If drm IsNot Nothing Then CveMetodoPago = drm("CveMetodoPago").ToString.ToEntero MetodoPago = drm("MetodoPagoSAT").ToString End If End If Dim namespaces As New XmlNamespaceManager(XMLDoc.NameTable) Dim Prefijo As String = If(XMLDoc.DocumentElement.Prefix = "", "cfd", XMLDoc.DocumentElement.Prefix) Dim cfdVer As String = "" If CFDIVersion = EnumCFDIVersion.v32 Then Prefijo = "cfd" cfdVer = "http://www.sat.gob.mx/cfd/2" ElseIf CFDIVersion = EnumCFDIVersion.v33 Then cfdVer = "http://www.sat.gob.mx/cfd/3" Else ' se considera que es la version 4.0 cfdVer = "http://www.sat.gob.mx/cfd/4" End If namespaces.AddNamespace(Prefijo, cfdVer) namespaces.AddNamespace("aerolineas", "http://www.sat.gob.mx/aerolineas") namespaces.AddNamespace("tfd", "http://www.sat.gob.mx/TimbreFiscalDigital") namespaces.AddNamespace("implocal", "http://www.sat.gob.mx/implocal") namespaces.AddNamespace("registrofiscal", "http://www.sat.gob.mx/registrofiscal") If TipoComprobante.ToUpper = "E" AndAlso (CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40) Then Dim UUIDS As String = "" Dim UUIDSLista As New List(Of String) Dim nodeCFDIRelacionados As XmlNode nodeCFDIRelacionados = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces) If nodeCFDIRelacionados IsNot Nothing Then For Each CFDIRelacionados As XmlNode In nodeCFDIRelacionados UUIDSLista.Add("" & CFDIRelacionados.Attributes("UUID").Value.ToString & "") Next End If DocumentosRelacionadosUUIDSList = UUIDSLista End If Dim node As XmlNode node = XMLDoc.SelectSingleNode(String.Format("//{0}:Emisor", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then EmisorRFC = ValorXML(node, "RFC") End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Receptor", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then ReceptorRFC = ValorXML(node, "RFC") End If If UsuarioActual.CveEmpresa.Contiene(119, 7) Then node = XMLDoc.SelectSingleNode(String.Format("//{0}:CfdiRelacionados", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then If ValorXML(node, "TipoRelacion").ToString.Contiene("07") Then Dim nodeDocumentosRelacionados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:CfdiRelacionado", Prefijo), namespaces) For Each documento As XmlNode In nodeDocumentosRelacionados If documento.Attributes("UUID").Value <> "" Then DocumentosRelacionadosAnticiposUUIDList.Add(documento.Attributes("UUID").Value) End If TieneAnticiposXML = True Next End If End If End If node = XMLDoc.SelectSingleNode(String.Format("//{0}:Impuestos", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeRetenciones As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Retenciones/{0}:Retencion", Prefijo), namespaces) TotalRetenciones = ValorXML(node, "totalImpuestosRetenidos", "0").ToDecimal If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then For Each retencion As XmlNode In nodeRetenciones If retencion.Attributes("Impuesto").Value = "002" Then RetencionIVA += retencion.Attributes("Importe").Value.ToDecimal If retencion.Attributes("Impuesto").Value = "001" Then RetencionISR += retencion.Attributes("Importe").Value.ToDecimal Next Else For Each retencion As XmlNode In nodeRetenciones If retencion.Attributes("impuesto").Value = "IVA" Then RetencionIVA += retencion.Attributes("importe").Value.ToDecimal If retencion.Attributes("impuesto").Value = "ISR" Then RetencionISR += retencion.Attributes("importe").Value.ToDecimal Next End If SumaTotalRetenciones += RetencionIVA SumaTotalRetenciones += RetencionISR TotalTraslados = ValorXML(node, "totalImpuestosTrasladados", "0").ToDecimal Dim nodeTraslados As XmlNodeList = XMLDoc.SelectNodes(String.Format("//{0}:Comprobante/{0}:Impuestos/{0}:Traslados/{0}:Traslado", Prefijo), namespaces) If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then For Each traslado As XmlNode In nodeTraslados If traslado.Attributes("Importe") IsNot Nothing Then If traslado.Attributes("Impuesto").Value = "002" Then TrasladoIVA += traslado.Attributes("Importe").Value.ToDecimal If traslado.Attributes("Impuesto").Value = "003" Then TrasladoIEPS += traslado.Attributes("Importe").Value.ToDecimal End If Next Else For Each traslado As XmlNode In nodeTraslados If traslado.Attributes("Importe") IsNot Nothing Then If traslado.Attributes("impuesto").Value = "IVA" Then TrasladoIVA += traslado.Attributes("importe").Value.ToDecimal If traslado.Attributes("impuesto").Value = "IEPS" Then TrasladoIEPS += traslado.Attributes("importe").Value.ToDecimal End If Next End If SumaTotalTraslados += TrasladoIVA SumaTotalTraslados += TrasladoIEPS End If Dim nodeComp As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Complemento", Prefijo), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then Dim nodeTFD As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:TimbreFiscalDigital", "tfd"), namespaces) UUID = ValorXML(nodeTFD, "UUID", "") Dim nodeRF As XmlNode = nodeComp.SelectSingleNode(String.Format("//{0}:CFDIRegistroFiscal ", "registrofiscal"), namespaces) If nodeRF IsNot Nothing Then Folio = ValorXML(nodeRF, "folio").TrimStart("0"c) End If node = node.SelectSingleNode(String.Format("//{0}:ImpuestosLocales", "implocal"), namespaces) If node IsNot Nothing AndAlso node.ChildNodes.Count > 0 Then OtrosImpuestos = ValorXML(node, "TotaldeTraslados", "0").ToDecimal '2022.06.04-- se quitan los datos de retenciones de impuestos locales, generan conflicto. RMF 'OtrosImpuestosRetenciones = ValorXML(node, "TotaldeRetenciones", "0").ToDecimal End If End If If XMLCargaExistosa Then If Not ValidateUUID(UUID) Then GuardaLog($"UUID Invalido {UUID} .") Errores.AppendLine($"UUID Invalido {UUID} .") XMLCargaExistosa = False End If End If #Region "DETALLES" Dim ObjeFacturas As New ClsCompras Dim AjustaUltimoConcepto As Boolean = False Dim nodeconceptos As XmlNode = XMLDoc.SelectSingleNode(String.Format("//{0}:Conceptos", Prefijo), namespaces) Dim XML As String = Replace(nodeconceptos.OuterXml, "", "") 'salto de linea html XML = XML.Replace("<br>", "") XML = XML.Replace("<", "") XML = XML.Replace("&", "") 'adicional, si hay otros If ObjeFacturas.GetFacturasComparacionXML(StrCFDIVerion, XML, UsuarioActual.CveEmpresa) Then TmpDT = ObjeFacturas.DtResultados TmpDT.Columns.Add("CveSATPSActualizado") SubTotalConceptos = TmpDT.SUMD("Total").RoundSQL If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) If Not TmpDT.Columns.Contains("AplicaLote") Then TmpDT.Columns.Add("AplicaLote", GetType(Boolean)) If Not TmpDT.Columns.Contains("AplicaCaducidad") Then TmpDT.Columns.Add("AplicaCaducidad", GetType(Boolean)) If Not TmpDT.Columns.Contains("Lote") Then TmpDT.Columns.Add("Lote", GetType(String)) If Not TmpDT.Columns.Contains("FechaCaducidad") Then TmpDT.Columns.Add("FechaCaducidad", GetType(Date)) 'VALIDA QUE EL XML SI VIENE CON EL CODIGO SAT 01010101 Dim ProductosCodigoSATNoPermitidos As New StringBuilder("") For Each drr As DataRow In TmpDT.FiltraParametros("ClaveProdServ = '01010101'").Rows ProductosCodigoSATNoPermitidos.AppendFormat("{0}
", drr("PS")) Next If ProductosCodigoSATNoPermitidos.ToString.Length > 0 Then Errores.AppendLine($"El comprobante contiene productos con código SAT '01010101', revise los productos:

{ProductosCodigoSATNoPermitidos.ToString}") End If Else GuardaLog($"Error al cargar detalles GetFacturasComparacionXML.") Errores.AppendLine($"Error al cargar detalles GetFacturasComparacionXML.") XMLCargaExistosa = False End If ObjeFacturas.Dispose() If CFDIVersion = EnumCFDIVersion.v33 OrElse CFDIVersion = EnumCFDIVersion.v40 Then If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) End If TmpDT.AcceptChanges() ValidacionesTotalesXml() End If Me.PorcentajeIVA = TmpDT.MAX("IVAPorcentaje").ToDecimal #End Region End Sub #End Region Public Function ConfiguraRegistroRapidoReembolso(CvePS As Integer, CveSubProyecto As Integer, CveCajaChica As Integer, CvePersonal As Integer, CveRetIVAConcepto As Integer, CveRetISRConcepto As Integer, NumeroReembolso As String) As Boolean Dim respuesta As Boolean = True Me.CveSubProyecto = CveSubProyecto Me.CveSubProyectoPrincipal = CveSubProyecto Me.CveCajaChica = CveCajaChica Me.CvePersonal = CvePersonal Me.CveRetIVAConcepto = CveRetIVAConcepto Me.CveRetISRConcepto = CveRetISRConcepto Me.CveTipoPoliza = 3 Me.NumeroReembolso = NumeroReembolso Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimero("") If dRowSubProyecto IsNot Nothing Then Me.Proyecto = dRowSubProyecto("Proyecto").ToString Me.CveProyecto = (dRowSubProyecto("CveProyecto").ToString).ToEntero Me.SubProyecto = dRowSubProyecto("SubProyecto").ToString Else Errores.AppendLine($"Error al cargar el Sub Proyecto CveSubProyecto: {CveSubProyecto}") Return False End If Dim DTIndex As DataTable = TmpDT.FiltraParametros("", DistinctColumns:={"Consec"}) For Each dRowIndex As DataRow In DTIndex.Rows If Not UpdatePSReembolso(dRowIndex("Consec").ToString.ToEntero, CvePS) Then respuesta = False End If Next If respuesta AndAlso IEPS > 0 Then If Not AgregaIEPSReembolso(CvePS:=CvePS) Then respuesta = False Else IEPS = 0 End If End If If Not AjustesValidacion() Then respuesta = False End If Return respuesta End Function Public Function ConfiguraRegistroRapido(CvePS As Integer, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, PS As String, CveSubProyecto As Integer, SubProyecto As String, SubTotal As Decimal, IVA As Decimal, Total As Decimal, PorcentajeIVA As Decimal) As Boolean Dim respuesta As Boolean = True Me.CveSubProyecto = CveSubProyecto Me.CveSubProyectoPrincipal = CveSubProyecto Me.CveCajaChica = -1 Me.CvePersonal = -1 Me.CveRetIVAConcepto = -1 Me.CveRetISRConcepto = -1 Me.CveTipoPoliza = 3 Me.NumeroReembolso = "" Me.SubTotal = SubTotal.RoundSQL Me.IVA = IVA Me.Total = Total Me.PorcentajeIVA = PorcentajeIVA Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(UsuarioActual.CveEmpresa, CveSubProyecto:=CveSubProyecto).FiltroPrimero("") If dRowSubProyecto IsNot Nothing Then Me.Proyecto = dRowSubProyecto("Proyecto").ToString Me.CveProyecto = (dRowSubProyecto("CveProyecto").ToString).ToEntero Me.SubProyecto = dRowSubProyecto("SubProyecto").ToString Else Errores.AppendLine($"Error al cargar el Sub Proyecto CveSubProyecto: {CveSubProyecto}") Return False End If CreaDTCompras() AddPS(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, 1, CveSubProyecto.ToString, SubProyecto, "", "-1", "", SubTotal, Total, 0, 0, 0, 0, 0, 0, PorcentajeIVA:=PorcentajeIVA) 'If respuesta AndAlso IEPS > 0 Then ' If Not AgregaIEPSReembolso(CvePS:=CvePS) Then ' respuesta = False ' Else ' IEPS = 0 ' End If 'End If 'If Not AjustesValidacion() Then ' respuesta = False 'End If Return respuesta End Function Private Sub CreaDTCompras() TmpDT = New DataTable 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("CveClasificacion", GetType(Integer)) TmpDT.Columns.Add("Clasificacion", GetType(String)) TmpDT.Columns.Add("CveClasificacionActualizar", GetType(Integer)) TmpDT.Columns.Add("CvePS", GetType(Integer)) TmpDT.Columns.Add("PS", GetType(String)) TmpDT.Columns.Add("Obs", GetType(String)) TmpDT.Columns.Add("PU", GetType(Decimal)) TmpDT.Columns.Add("IVA", GetType(Decimal)) TmpDT.Columns.Add("IVAPorcentaje", GetType(Decimal)) TmpDT.Columns.Add("RetIVA", GetType(Decimal)) TmpDT.Columns.Add("RetIVAPorcentaje", GetType(Decimal)) TmpDT.Columns.Add("RetISR", GetType(Decimal)) TmpDT.Columns.Add("RetISRPorcentaje", GetType(Decimal)) TmpDT.Columns.Add("IEPSPS", GetType(Double)) TmpDT.Columns.Add("IEPSPSPorcentaje", GetType(Double)) TmpDT.Columns.Add("IEPSPSIVA", GetType(Double)) TmpDT.Columns.Add("IEPSPSIVAPorcentaje", GetType(Double)) TmpDT.Columns.Add("Descuento", GetType(Decimal)) TmpDT.Columns.Add("OtrosGastos", GetType(Decimal)) TmpDT.Columns.Add("Total", GetType(Decimal)) TmpDT.Columns.Add("AsientoContableCompras", GetType(Integer)) TmpDT.Columns.Add("Proyecto", GetType(String)) TmpDT.Columns.Add("CveProyecto", GetType(Integer)) TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) TmpDT.Columns.Add("CveContrato", GetType(Integer)) TmpDT.Columns.Add("SubProyecto", GetType(String)) 'TmpDT.Columns.Add("CveEq", GetType(Integer)) TmpDT.Columns.Add("CveAlmacen", GetType(Integer)) TmpDT.Columns.Add("CvePersonal", GetType(String)) TmpDT.Columns.Add("Referencia", GetType(String)) 'AC TmpDT.Columns.Add("CveTipoGastoAC", GetType(Integer)) TmpDT.Columns.Add("CvePresupuestoEgreso", GetType(Integer)) TmpDT.Columns.Add("CveProgramaOperativo", GetType(Integer)) TmpDT.Columns.Add("CveUnidadAdministrativa", GetType(Integer)) TmpDT.Columns.Add("CveFuenteFinanciamiento", GetType(Integer)) TmpDT.Columns.Add("CveClasificacionOG", GetType(Integer)) TmpDT.Columns.Add("IdCuentaComprometido", GetType(Integer)) TmpDT.Columns.Add("IdCuentaPorEjercer", GetType(Integer)) TmpDT.Columns.Add("IdCuentaDevengado", GetType(Integer)) TmpDT.Columns.Add("IdCuentaMatriz", GetType(Integer)) 'INVENTARIO SERIE/LOTE TmpDT.Columns.Add("CveMetodoInventario", GetType(Integer)) TmpDT.Columns.Add("CveConcepto", GetType(Integer)) 'AF TmpDT.Columns.Add("CveActivoFijo", GetType(Integer)) TmpDT.Columns.Add("CodAF", GetType(String)) TmpDT.Columns.Add("TipoAF", GetType(Integer)) TmpDT.Columns.Add("AFMedida", GetType(Integer)) TmpDT.Columns.Add("AFTipoMantenimiento", GetType(Integer)) 'PS TmpDT.Columns.Add("CveTipoPS", GetType(Integer)) TmpDT.Columns.Add("CodigoPS", GetType(String)) TmpDT.Columns.Add("PSDescripcion", GetType(String)) 'CAMPO ESPECIAL PARA GLUYAS - LEE EL DEL XML - A GLUYAS LE INTERESA EL CODIGO DEL PROVEEDOR TmpDT.Columns.Add("PSCodigo", GetType(String)) 'OC TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer)) TmpDT.Columns.Add("ProductoOC", GetType(String)) TmpDT.Columns.Add("CantidadF", GetType(Double)) 'Consignaciones TmpDT.Columns.Add("CveAlmacenConsignacion", GetType(Integer)) TmpDT.Columns.Add("NoConsignacion", GetType(Integer)) TmpDT.Columns.Add("CveConsignacion", GetType(Integer)) TmpDT.Columns.Add("HdnPS", GetType(String)) TmpDT.Columns.Add("HdnCvePS", GetType(String)) TmpDT.Columns.Add("HdnClasificacion", GetType(String)) TmpDT.Columns.Add("HdnCveClasificacion", GetType(String)) TmpDT.Columns.Add("HdnCveAlmacen", GetType(String)) 'Fletes y Servicios TmpDT.Columns.Add("AplicaCostoIndirecto", GetType(Integer)) TmpDT.Columns.Add("CostoIndirectoAlmacen", GetType(Decimal)) TmpDT.Columns.Add("CveCompraDetalle", GetType(Integer)) TmpDT.Columns.Add("EntregaDirecta", GetType(Integer)) 'SAT TmpDT.Columns.Add("CveSATPS", GetType(Integer)) TmpDT.Columns.Add("SATClaveProductoServicio", GetType(String)) TmpDT.Columns.Add("CveUnidadMedidaSAT", GetType(Integer)) TmpDT.Columns.Add("SATClaveUnidadMedida", GetType(String)) TmpDT.Columns.Add("CveSATPSActualizado", GetType(Integer)) 'Tipo de Gasto TmpDT.Columns.Add("CveTipoGasto", GetType(Integer)) TmpDT.Columns.Add("TipoGasto", GetType(String)) TmpDT.Columns.Add("ImporteSinImpuestos", GetType(Double)) TmpDT.Columns.Add("ImporteConImpuestos", GetType(Double)) TmpDT.Columns.Add("NoDeducible", GetType(Boolean)) TmpDT.Columns.Add("DifPSSat", GetType(Integer)) TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer)) TmpDT.Columns.Add("CveCultivoCuadroDetalle", GetType(Integer)) TmpDT.Columns.Add("TemporadaCuadro", GetType(String)) TmpDT.Columns.Add("NoIdentificacion", GetType(String)) TmpDT.Columns.Add("AplicaLote", GetType(Boolean)) TmpDT.Columns.Add("AplicaCaducidad", GetType(Boolean)) TmpDT.Columns.Add("Lote", GetType(String)) TmpDT.Columns.Add("FechaCaducidad", GetType(Date)) TmpDT.AcceptChanges() End Sub Private Function AjustesValidacion() As Boolean Dim respuesta As Boolean = True 'VALIDA IMPORTES If Not ValidaTotalesGuardar() Then respuesta = False End If If Not AjustaCombustibles() Then respuesta = False End If If Not AjustaIVA() Then respuesta = False End If If Not AjustaRetIVA() Then respuesta = False End If If Not AjustaRetISR() Then respuesta = False End If Return respuesta End Function Private Function ValidaTotalesGuardar() As Boolean Dim EsValido As Boolean = True 'VALIDA IMPORTES 'VALIDA TOTAL CON LOS IMPORTES TOTALES Dim TempSubTotal, TempDescuentos, TempIVA, TempSubTotal2, TempRetIVA, TempRetISR, TempTotal, DifTotales, TempIEPS As Decimal Dim Amortizacion As Decimal = 0 Dim TieneAmortizacion As Boolean = False If DocumentosRelacionadosAnticiposUUIDList IsNot Nothing AndAlso DocumentosRelacionadosAnticiposUUIDList.Count > 0 Then 'Fix me ' AndAlso ArrAnticipos IsNot Nothing AndAlso ArrAnticipos.Count > 0 Then 'TieneAmortizacion = True End If 'If CveCompra < 0 AndAlso Not TieneAmortizacion Then ' LblAmortizacion.Text = "0.00" 'End If 'If UsuarioActual.CveEmpresa = 119 AndAlso TieneAmortizacion Then ' Amortizacion = LblAmortizacion.Text.Trim.ToDecimal ' TxtSubTotal.Text = (TxtSubTotal.Text.ToDouble + Amortizacion).ToString 'End If TempSubTotal = SubTotal SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 TempDescuentos = Descuento + Amortizacion TempSubTotal2 = TempSubTotal - TempDescuentos TempIVA = IVA TempIEPS = IEPS TempRetIVA = RetIVA TempRetISR = RetISR TempTotal = Math.Round(TempSubTotal2 + TempIVA + TempIEPS - TempRetIVA - TempRetISR + OtrosImpuestos - Amortizacion, 2) DifTotales = Total - TempTotal Dim DiferenciaPermitida As Decimal = 0.6D If Math.Abs(DifTotales) > DiferenciaPermitida Then Errores.AppendLine($"Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.[{Math.Abs(DifTotales) - DiferenciaPermitida}]") EsValido = False ElseIf DifTotales <> 0 Then SubTotal2 = (SubTotal2 + DifTotales) SubTotal = (SubTotal + DifTotales) SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 End If Dim DiferenciaSubtotales As Decimal = 0 If CveCompra > 0 Or CveFactura > 0 Or OCVinculada Then If SubTotalOriginal = Nothing Then SubTotalOriginal = 0 End If If SubTotal2Original = Nothing Then SubTotal2Original = 0 End If DiferenciaSubtotales = SubTotal2Original.ToString.ToDecimal - TmpDT.SUM("Total").ToString.ToDecimal '[IPP] PARCHE: Factura TELMEX para APH 12/ENERO/2018 If CveFactura = 286290 Then DiferenciaSubtotales += Descuento End If If Math.Abs(DiferenciaSubtotales) > 1 And Not CompraNoDeducible = 1 Then 'EsNoDeducible Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.") EsValido = False Else AjustaImporteUltimoConcepto(DiferenciaSubtotales) End If Else DiferenciaSubtotales = (SubTotal2 - TmpDT.SUMD("Total")).ToString.ToDecimal If Math.Abs(DiferenciaSubtotales) > 1 Then Errores.AppendLine("Los importes de los conceptos (Productos/Servicios) no cuadran con el total. Por favor verifique y vuelva a intentar.") EsValido = False Else AjustaImporteUltimoConcepto(DiferenciaSubtotales) End If End If Return EsValido End Function Private Function AjustaCombustibles() As Boolean Dim Respuesta As Boolean = False Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ") Dim DiferenciaIVas As Decimal = IVA - IVADetalles If Not TmpDT.Columns.Contains("AplicaIEPS") Then TmpDT.Columns.Add(New DataColumn("AplicaIEPS", GetType(Boolean))) End If If Not TmpDT.Columns.Contains("IEPSGrabaIVA") Then TmpDT.Columns.Add(New DataColumn("IEPSGrabaIVA", GetType(Boolean))) End If For Each dRow As DataRow In TmpDT.Rows Dim DttPS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=dRow("CvePS").ToString.ToEntero) If DttPS IsNot Nothing AndAlso DttPS.Rows.Count > 0 Then Dim DrPS As DataRow = DttPS.Rows(0) dRow("AplicaIEPS") = Boolean.Parse(DrPS("AplicaIEPS").ToString) dRow("IEPSGrabaIVA") = Boolean.Parse(DrPS("IEPSGrabaIVA").ToString) Else dRow("AplicaIEPS") = False dRow("IEPSGrabaIVA") = False End If Next Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" AplicaIEPS = 'True' AND IEPSGrabaIVA = 'False' AND IVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConIVA = CantidadRegistroConIVA + 1 End If IndiceContador = IndiceContador + 1 Next IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And Boolean.Parse(dRow("IEPSGrabaIVA").ToString) = False And dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido End If Next Else TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then Respuesta = False If IVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Alert("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.", TipoMensaje.MsgAdvertencia) Respuesta = False End If Else Respuesta = True End If If Respuesta Then Dim IEPSPSDetalles As Decimal = TmpDT.SUMD("IEPSPS", " IEPSPS > 0 ") Dim DiferenciaIEPSPS As Decimal = IEPS - IEPSPSDetalles Dim DTConsultaIEPSPS As New DataTable DTConsultaIEPSPS = TmpDT.FiltraParametros(" AplicaIEPS = 'True'") Dim IndiceContador As Integer = 0 Dim IndicePrimero As Integer = 0 For Each dRow As DataRow In TmpDT.Rows If Boolean.Parse(dRow("AplicaIEPS").ToString) And dRow("IEPSPS").ToString.ToDecimal > 0 Then IndicePrimero = IndiceContador Exit For End If IndiceContador = IndiceContador + 1 Next If DiferenciaIEPSPS.RoundSQL(2) <> 0 Then TmpDT.Rows(IndicePrimero)("IEPSPS") = TmpDT.Rows(IndicePrimero)("IEPSPS").ToString.ToDecimal + DiferenciaIEPSPS TmpDT.AcceptChanges() End If For Each dRow As DataRow In TmpDT.Rows If dRow("IEPSPSPorcentaje").ToString.ToDecimal > 0 AndAlso dRow("IEPSPS").ToString.ToDecimal = 0 Then dRow("IEPSPSPorcentaje") = 0 End If Next TmpDT.AcceptChanges() End If Return Respuesta End Function Private Function AjustaIVA() As Boolean Dim Respuesta As Boolean = False Dim IVADetalles As Decimal = TmpDT.SUMD("IVA", " IVA > 0 ") Dim DiferenciaIVas As Decimal = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0 Then If Math.Abs(DiferenciaIVas) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" IVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConIVA = CantidadRegistroConIVA + 1 End If IndiceContador = IndiceContador + 1 Next IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaIVas) / CantidadRegistroConIVA For Each dRow As DataRow In TmpDT.Rows dRow("IVA") = dRow("IVA").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("IVA") = TmpDT.Rows(IndiceUltimo)("IVA").ToString.ToDecimal + DiferenciaIVas End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste IVADetalles = TmpDT.SUMD("IVA", " IVA > 0 ") DiferenciaIVas = IVA - IVADetalles If Math.Abs(DiferenciaIVas) > 0.01D Then Respuesta = False If IVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("IVA").ToString.ToDecimal > 0 Then dRow("IVA") = dRow("IVA").ToString.ToDecimal + DiferenciaIVas TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto IVA, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaIVas} entre el IVA de la compra y los detalles.") Respuesta = False End If Else Respuesta = True End If Return Respuesta End Function Private Function AjustaRetIVA() As Boolean Dim Respuesta As Boolean = False Dim RetIVADetalles As Decimal = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") Dim DiferenciaRetIVA As Decimal = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0 Then If Math.Abs(DiferenciaRetIVA) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" RetIVA > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConRetIVA As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("RetIVA").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConRetIVA = CantidadRegistroConRetIVA + 1 End If IndiceContador = IndiceContador + 1 Next RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") DiferenciaRetIVA = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetIVA) / CantidadRegistroConRetIVA For Each dRow As DataRow In TmpDT.Rows dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("RetIVA") = TmpDT.Rows(IndiceUltimo)("RetIVA").ToString.ToDecimal + DiferenciaRetIVA End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste RetIVADetalles = TmpDT.SUMD("RetIVA", " RetIVA > 0 ") DiferenciaRetIVA = RetIVA - RetIVADetalles If Math.Abs(DiferenciaRetIVA) > 0.01D Then Respuesta = False If RetIVADetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("RetIVA").ToString.ToDecimal > 0 Then dRow("RetIVA") = dRow("RetIVA").ToString.ToDecimal + DiferenciaRetIVA TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetIVA, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaRetIVA} entre el RetIVA de la compra y los detalles.") End If Else Respuesta = True End If Return Respuesta End Function Private Function AjustaRetISR() As Boolean Dim Respuesta As Boolean = False Dim RetISRDetalles As Decimal = TmpDT.SUMD("RetISR", " RetISR > 0 ") Dim DiferenciaRetISR As Decimal = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0 Then If Math.Abs(DiferenciaRetISR) <= 0.05 Then Dim DTConsulta As New DataTable DTConsulta = TmpDT.FiltraParametros(" RetISR > 0 ") If DTConsulta.Rows.Count > 0 Then Dim IndiceContador As Integer = 0 Dim IndiceUltimo As Integer = 0 Dim CantidadRegistroConRetISR As Decimal For Each dRow As DataRow In TmpDT.Rows If dRow("RetISR").ToString.ToDecimal > 0 Then IndiceUltimo = IndiceContador CantidadRegistroConRetISR = CantidadRegistroConRetISR + 1 End If IndiceContador = IndiceContador + 1 Next RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ") DiferenciaRetISR = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0.0D Then If (TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR) < 0 Then Dim AjusteteDividido As Decimal = Math.Abs(DiferenciaRetISR) / CantidadRegistroConRetISR For Each dRow As DataRow In TmpDT.Rows dRow("RetISR") = dRow("RetISR").ToString.ToDecimal - AjusteteDividido Next Else TmpDT.Rows(IndiceUltimo)("RetISR") = TmpDT.Rows(IndiceUltimo)("RetISR").ToString.ToDecimal + DiferenciaRetISR End If TmpDT.AcceptChanges() End If End If 'Revalidacion de ajuste RetISRDetalles = TmpDT.SUMD("RetISR", " RetISR > 0 ") DiferenciaRetISR = RetISR - RetISRDetalles If Math.Abs(DiferenciaRetISR) > 0.01D Then Respuesta = False If RetISRDetalles > 0 Then For Each dRow As DataRow In TmpDT.Rows If dRow("RetISR").ToString.ToDecimal > 0 Then dRow("RetISR") = dRow("RetISR").ToString.ToDecimal + DiferenciaRetISR TmpDT.AcceptChanges() Respuesta = True Exit For End If Next Else Errores.AppendLine("Los productos especificados en el listado no tienen asignado impuesto RetISR, favor de realizar la corrección en el producto que aplique el impuesto.") Respuesta = False End If Else Respuesta = True End If Else Errores.AppendLine($"existe una diferencia de {DiferenciaRetISR} entre el RetISR de la compra y los detalles.") Respuesta = False End If Else Respuesta = True End If Return Respuesta End Function Private Function AgregaIEPSReembolso(CvePS As Integer) As Boolean Dim respuesta As Boolean = True If IEPSGasto Or OtrosImpuestosGasto Then 'AGREGA IEPS COMO CONCEPTO If IEPSGasto Then AgregarConceptoIEPS(TrasladoIEPS, CvePS) For Each Dr As DataRow In TmpDT.Rows Dr("IEPSPS") = 0 Dr("IEPSPSPorcentaje") = 0 Next TmpDT.AcceptChanges() End If 'AGREGA OTROS IMPUESTOS COMO CONCEPTO If OtrosImpuestosGasto Then AgregarConceptoIEPS(OtrosImpuestos, CvePS) End If Else respuesta = False Errores.AppendLine("Debe seleccionar al menos un impuesto. ") End If CalculaTotales() Return respuesta End Function Private Sub AgregarConceptoIEPS(IEPS As Decimal, CvePS1 As Integer) Dim SubTotalR As Decimal = TmpDT.SUM("Total").ToString.ToDecimal Dim PSS As DataTable = GlobalDTPS(UsuarioActual.CveEmpresa).FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS") Dim PSS2 As DataTable = TmpDT.FiltraParametros(String.Format("CvePS = {0} ", CvePS1), "PS") If PSS.Rows.Count > 0 Or PSS2.Rows.Count > 0 Then Dim CveUM As Integer = 0 Dim UM As String = "" Dim CveClasificacion As Integer = 0 Dim Clasificacion As String = "" Dim CvePS As Integer = 0 Dim PS As String = "" Dim CveTipoPS As Integer = 0 If PSS.Rows.Count > 0 Then CveUM = PSS.Rows(0)("CveUM").ToString.ToEntero UM = PSS.Rows(0)("UnidadMedida").ToString CveClasificacion = PSS.Rows(0)("CveClasificacion").ToString.ToEntero Clasificacion = PSS.Rows(0)("Clasificacion").ToString CvePS = PSS.Rows(0)("CvePS").ToString.ToEntero PS = PSS.Rows(0)("PS").ToString CveTipoPS = PSS.Rows(0)("CveTipoPS").ToString.ToEntero End If Dim Cantidad As Decimal = 1 Dim CveSubProyectoContrato As String = "-1" Dim CveProyecto As String = "-1" Dim SubProyecto As String = "SE" Dim Proyecto As String = "SE" Dim Obs As String = "" Dim PU As Decimal = IEPS Dim Total As Decimal = Cantidad * PU Dim IVA As Decimal = 0 Dim Descuento As Decimal = 0 If PSS2.Rows.Count > 0 Then CveUM = PSS2.Rows(0)("CveUM").ToString.ToEntero UM = PSS2.Rows(0)("UM").ToString CveClasificacion = PSS2.Rows(0)("CveClasificacion").ToString.ToEntero Clasificacion = PSS2.Rows(0)("Clasificacion").ToString CvePS = PSS2.Rows(0)("CvePS").ToString.ToEntero PS = PSS2.Rows(0)("PS").ToString CveTipoPS = PSS2.Rows(0)("CveTipoPS").ToString.ToEntero CveSubProyectoContrato = PSS2.Rows(0)("CveSubProyecto").ToString CveProyecto = PSS2.Rows(0)("CveProyecto").ToString SubProyecto = PSS2.Rows(0)("SubProyecto").ToString Proyecto = PSS2.Rows(0)("Proyecto").ToString Obs = PSS2.Rows(0)("Obs").ToString Dim CveTipoGasto As Integer = PSS2.Rows(0)("CveTipoGasto").ToString.ToEntero Dim TipoGasto As String = PSS2.Rows(0)("TipoGasto").ToString AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False, CveTipoGasto:=CveTipoGasto, TipoGasto:=TipoGasto, ModalidadAccionPS:=EnumModalidadAccionPS.Agregar) Else AddPS(Cantidad, CveUM, UM, CveClasificacion, Clasificacion, CvePS, PS, CveTipoPS, CveSubProyectoContrato, SubProyecto, Proyecto, CveProyecto, Obs, PU, Total, IVA, 0, 0, 0, 0, Descuento, TCalculaTotales:=False) End If End If Dim SubTotalIEPS As Decimal = TmpDT.SUMD("Total") Me.SubTotal = Math.Round(SubTotalIEPS, 2) Me.SubTotalConceptos = Math.Round(SubTotalIEPS, 2) PSS.Dispose() End Sub Private Function AddPS(Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, CveTipoPS As Integer, CveSubProyectoContrato As String, SubProyecto As String, Proyecto As String, CveProyecto As String, Obs As String, PU As Decimal, Total As Decimal, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, IEPSPS As Decimal, IEPSPSIVA As Decimal, Descuento As Decimal, Optional CveOrdenCompraDetalle As Integer = -1, Optional TCalculaTotales As Boolean = True, Optional PSCodigo As String = "-", Optional PSDescripcion As String = "-", Optional CantidadF As Double = -1, Optional EntregaDirecta As Integer = -1, Optional OtrosGastos As Decimal = 0, Optional CveSATPS As Integer = -1, Optional CargaXml As Boolean = False, Optional CveTipoGasto As Integer = -1, Optional TipoGasto As String = "", Optional PorcentajeIVA As Decimal = 0, Optional PorcentajeIEPS As Decimal = 0, Optional PorcentajeRetIVA As Decimal = 0, Optional PorcentajeRetISR As Decimal = 0, Optional NoDeducible As Boolean = False, Optional CveContratoDetalle As Integer = -1, Optional CveCultivoCuadroDetalle As Integer = -1, Optional CveSATPSActualizado As Boolean = False, Optional TemporadaCuadro As String = "", Optional ModalidadAccionPS As EnumModalidadAccionPS = EnumModalidadAccionPS.Agregar, Optional Con As Integer = -1, Optional CveProgramaOperativo As Integer = -1, Optional CveUnidadAdministrativa As Integer = -1, Optional CveFuenteFinanciamiento As Integer = -1, Optional CveTipoGastoAC As Integer = -1, Optional CveClasificacionOG As Integer = -1) As Integer Dim Row As DataRow = Nothing Row = TmpDT.NewRow() Dim Retorno As Integer = 0 Dim CveContrato As Integer = -1 Dim CveSubProyecto As Integer = -1 Dim Valores As String() ''CONTRATOS If CveSubProyectoContrato.Contains("|"c) Then Valores = CveSubProyectoContrato.Split("|"c) CveContrato = Valores(1).ToEntero CveSubProyecto = Valores(0).ToEntero Else CveSubProyecto = CveSubProyectoContrato.ToEntero End If 'DR PS Dim DrPS As DataRow = Nothing If CvePS > 0 Then DrPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).Rows(0) End If If DrPS IsNot Nothing Then Row("PSCodigo") = If(PSCodigo = "", DrPS("PSCodigo").ToString, PSCodigo) Row("CveMetodoInventario") = DrPS("Inv_CveMetodoInventario").ToString.ToEntero If CveTipoCompra = EnumTipoCompra.Garantia AndAlso DrPS("AplicaSerie").ToString = "True" Then Row("CveMetodoInventario") = "1" End If Else Row("PSCodigo") = PSCodigo Row("CveMetodoInventario") = 0 End If If ModalidadAccionPS = EnumModalidadAccionPS.Actualizar Then Row("Consec") = Con Else Row("Consec") = TmpDT.Rows.Count + 1 End If If (CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40) And CveSATPS > 0 Then Dim DrPSSAT As DataRow = Nothing If CargaXml Then DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("") Else DrPSSAT = GlobalDTPSATPS("-1", CveSATPS.ToString).FiltroPrimero("") End If If DrPSSAT IsNot Nothing Then Row("SATClaveProductoServicio") = DrPSSAT("SATClaveProductoServicio").ToString Row("CveSATPS") = DrPSSAT("CveSATPS").ToString If CveSATPSActualizado Then Row("CveSATPSActualizado") = 1 Else Row("CveSATPSActualizado") = 0 End If End If End If Try If (DrPS("CvePSCargo").ToString <> "") Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto) CveTipoPS = 2 End If Catch ex As Exception End Try Dim DecimalesPermitidos As Integer = 6 Row("CveConcepto") = TmpDT.Rows.Count + 1 Row("Cantidad") = Math.Round(Cantidad, DecimalesPermitidos) Row("CantidadF") = If(CantidadF = -1, Math.Round(Cantidad, DecimalesPermitidos), Math.Round(CantidadF, DecimalesPermitidos)) Row("CveUM") = CveUM Row("UM") = UM Row("CveClasificacion") = CveClasificacion Row("CveClasificacionActualizar") = CveClasificacion Row("Clasificacion") = Clasificacion Row("CvePS") = CvePS Row("PS") = PS Row("CveTipoPS") = CveTipoPS Row("PSDescripcion") = PSDescripcion Row("CveSubProyecto") = CveSubProyecto.ToEntero Row("CveProyecto") = CveProyecto.ToEntero Row("CveContrato") = CveContrato.ToEntero Row("SubProyecto") = If(SubProyecto = "Seleccione", "Sin Sub Proyecto", SubProyecto) Row("Proyecto") = If(Proyecto = "Seleccione", "Sin Proyecto", Proyecto) Row("CveActivoFijo") = -1 Row("Obs") = Obs Row("CveActivoFijo") = -1 Row("CodAF") = "-1" Row("TipoAF") = -1 Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle Row("EntregaDirecta") = EntregaDirecta Row("NoDeducible") = NoDeducible Total = Math.Round(PU, DecimalesPermitidos) * Cantidad - Descuento Row("PU") = Math.Round(PU, DecimalesPermitidos) If CargaXml And (CFDIVersion = EnumCFDIVersion.v33 Or CFDIVersion = EnumCFDIVersion.v40) Then If CveFactura > 0 And IVA = 0 Then Row("IVA") = 0 Row("IVAPorcentaje") = 0 Else Row("IVA") = Math.Round(IVA, DecimalesPermitidos) Row("IVAPorcentaje") = PorcentajeIVA End If Row("RetIVA") = Math.Round(RetIVA, DecimalesPermitidos) Row("RetIVAPorcentaje") = PorcentajeRetIVA Row("RetISR") = Math.Round(RetISR, DecimalesPermitidos) Row("RetISRPorcentaje") = PorcentajeRetISR Row("IEPSPS") = Math.Round(IEPSPS, DecimalesPermitidos) Row("IEPSPSPorcentaje") = PorcentajeIEPS Else 'If DdlIVA.SelectedValue.ToDouble = 0 Then Row("IVA") = 0 Else Row("IVA") = Math.Round(IVA * Total, DecimalesPermitidos) If CveFactura > 0 And IVA = 0 Then Row("IVA") = 0 Row("IVAPorcentaje") = 0 Else Row("IVA") = (PorcentajeIVA * Total).RoundSQL Row("IVAPorcentaje") = PorcentajeIVA End If Row("RetIVA") = (PorcentajeRetIVA * Total).RoundSQL Row("RetIVAPorcentaje") = PorcentajeRetIVA Row("RetISR") = (PorcentajeRetISR * Total).RoundSQL Row("RetISRPorcentaje") = PorcentajeRetISR Row("IEPSPS") = (PorcentajeIEPS * Total).RoundSQL Row("IEPSPSPorcentaje") = PorcentajeIEPS End If Row("ImporteConImpuestos") = (Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal) + Row("IVA").ToString.ToDecimal + Row("IEPSPS").ToString.ToDecimal - (Row("RetIVA").ToString.ToDecimal + Row("RetISR").ToString.ToDecimal) Row("ImporteSinImpuestos") = Row("Cantidad").ToString.ToDecimal * Row("PU").ToString.ToDecimal Row("IEPSPSIVA") = Math.Round(IEPSPSIVA * Total, DecimalesPermitidos) Row("IEPSPSIVAPorcentaje") = IEPSPSIVA Row("Descuento") = Math.Round(Descuento, DecimalesPermitidos) Row("OtrosGastos") = Math.Round(OtrosGastos, DecimalesPermitidos) Row("Total") = Math.Round(Total, DecimalesPermitidos) Row("CveTipoGasto") = CveTipoGasto Row("TipoGasto") = If(CveTipoGasto > 0, TipoGasto, "") Row("CveContratoDetalle") = CveContratoDetalle Row("CveCultivoCuadroDetalle") = CveCultivoCuadroDetalle Row("TemporadaCuadro") = TemporadaCuadro If UsuarioActual.Empresa.UsaAC Then Row("CveProgramaOperativo") = CveProgramaOperativo Row("CveUnidadAdministrativa") = CveUnidadAdministrativa Row("CveFuenteFinanciamiento") = CveFuenteFinanciamiento Row("CveTipoGastoAC") = CveTipoGastoAC Row("CveClasificacionOG") = CveClasificacionOG End If 'Esta parte es para validar cuando la factura tenga ieps en o se asignara el ieps como una partida ya no se considere If (CveFactura > 0 Or CveCompra > 0) And IEPS = 0 Then Row("IEPSPS") = 0 Row("IEPSPSPorcentaje") = 0 End If TmpDT.Rows.Add(Row) TmpDT.Rows.IndexOf(Row) If TCalculaTotales Then CalculaTotales(True) End If Return Retorno End Function Private Sub CalculaTotales(Optional CalculaIVA As Boolean = False, Optional EsNoDeducible As Boolean = False) 'VARIABLES DE CALCULO Dim LocalSubTotal, LocalDescuentos, LocalAmortizacion, LocalIVA, LocalSubTotal2, LocalRetIVA, LocalRetISR, LocalIEPSPS, LocalTotal, LocalSubTotalIVA, LocalSubTotalIEPSIVA As Decimal 'HACEMOS CALCULOS LocalSubTotalIVA = TmpDT.SUMD("IVA") LocalSubTotalIEPSIVA = TmpDT.SUMD("IEPSPSIVA") LocalSubTotal = (TmpDT.SUMD("Total") + TmpDT.SUMD("Descuento")).RoundSQL(2) LocalRetIVA = TmpDT.SUMD("RetIVA") LocalRetISR = TmpDT.SUMD("RetISR") LocalIEPSPS = TmpDT.SUMD("IEPSPS") If CveCompra > 0 AndAlso CveFactura > 0 Then LocalIVA = IVA Else LocalIVA = If(TmpDT.SUM("IVA") > 0, LocalSubTotalIVA + LocalSubTotalIEPSIVA, 0) End If LocalDescuentos = TmpDT.SUMD("Descuento") If Not CveCompra > 0 Then LocalAmortizacion = Me.Amortizacion End If 'RETENCIONES Dim Retenciones As Decimal = 0 Retenciones = LocalRetIVA Retenciones += LocalRetISR LocalSubTotal2 = LocalSubTotal - LocalDescuentos LocalTotal = LocalSubTotal2 + LocalIVA + LocalIEPSPS - Retenciones 'ASIGNAMOS VALORES A VISTA If CveCompra > 0 Or CveFactura > 0 Or Me.OCVinculada Then SubTotal = LocalSubTotal SubTotal2 = LocalSubTotal2 Descuento = LocalDescuentos If EsNoDeducible Then IVA = LocalIVA RetIVA = LocalRetIVA RetISR = LocalRetISR IEPS = LocalIEPSPS End If Total = LocalTotal Else SubTotal = LocalSubTotal SubTotal2 = LocalSubTotal2 IVA = LocalIVA Descuento = LocalDescuentos RetIVA = LocalRetIVA RetISR = LocalRetISR IEPS = LocalIEPSPS Total = LocalTotal 'VALORES PROPIEDAD CompraSaldo = LocalTotal End If Me.NumNoDed = TmpDT.COUNT("CvePS", "NoDeducible = True ") End Sub Private Function UpdatePSReembolso(Index As Integer, CvePS As Integer) As Boolean Dim Respuesta As Boolean = True Dim DrPS As DataRow = Nothing Try DrPS = TmpDT.Select($"Consec = {Index}")(0) If DrPS Is Nothing Then Errores.AppendLine($"No se encontrol el producto con index {Index}") Return False End If Catch ex As Exception Errores.AppendLine($"No se encontrol el producto con index {Index}") Return False End Try 'DATOS GENERALES DrPS("Obs") = "" DrPS("Proyecto") = Proyecto DrPS("CveProyecto") = CveProyecto DrPS("SubProyecto") = SubProyecto DrPS("CveSubProyecto") = CveSubProyecto DrPS("CveContratoDetalle") = -1 'IMPORTES - [CANTIDAD Y PRECIO] Dim Cantidad As Double = DrPS("Cantidad").ToString.ToDouble Dim PU As Double = DrPS("PU").ToString.ToDouble Dim Descuento As Double = DrPS("Descuento").ToString.ToDouble Dim Total As Double = (Cantidad * PU) - Descuento DrPS("NoDeducible") = NoDeducible Dim PSRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") If PSRow IsNot Nothing Then Dim CveTipoPS As Integer = PSRow("CveTipoPS").ToString.ToEntero If PSRow("CvePSCargo").ToString <> "" Then 'si es un producto de usado. que se registre contablemente como alamcen(como producto) CveTipoPS = 2 End If DrPS("CveClasificacion") = PSRow("CveClasificacion").ToString DrPS("Clasificacion") = PSRow("Clasificacion").ToString DrPS("CvePS") = CvePS DrPS("PS") = PSRow("PS").ToString DrPS("CveTipoPS") = CveTipoPS DrPS("CveSATPS") = PSRow("CveSATPS").ToString.ToEntero DrPS("SATClaveProductoServicio") = PSRow("SATClaveProductoServicio").ToString DrPS("CveSATPSActualizado") = 0 DrPS("CveUM") = PSRow("CveUnidadMedida").ToString.ToEntero DrPS("UM") = PSRow("UnidadMedida").ToString Dim DrTipoGasto As DataRow = Me.DTTiposGastos.FiltroPrimero("") DrPS("CveTipoGasto") = DrTipoGasto("CveTipoGasto") DrPS("TipoGasto") = DrTipoGasto("TipoGasto") If UsuarioActual.Empresa.Funcionalidad(562).ToEntero > 0 Then DrPS("AplicaCostoIndirecto") = "0" End If DrPS("CveCultivoCuadroDetalle") = -1 DrPS("TemporadaCuadro") = "" Else Errores.AppendLine($"No se encontrol el producto con CvePS {CvePS}") Respuesta = False End If TmpDT.AcceptChanges() Return Respuesta End Function Private Sub ValidacionesTotalesXml() If Not TmpDT.Columns.Contains("Amortizacion") Then TmpDT.Columns.Add("Amortizacion", GetType(Decimal)) End If Dim Msg As String = "" Dim SubtotalTemp As Decimal = TmpDT.SUMD("Total") + Math.Round(TmpDT.SUM("Descuento") + Math.Round(TmpDT.SUM("Amortizacion")), 2) Dim DescuentosTemp As Decimal = TmpDT.SUMD("Descuento") Dim Subtotal2Temp As Decimal = TmpDT.SUMD("Total") Dim IVATemp As Decimal = TmpDT.SUMD("IVA") Dim IEPSTemp As Decimal = TmpDT.SUMD("IEPSPS") Dim RetIVATemp As Decimal = TmpDT.SUMD("RetIVA") Dim RetISRTemp As Decimal = TmpDT.SUMD("RetISR") Dim TotalTemp As Decimal = Subtotal2Temp - RetIVATemp - RetISRTemp + Math.Round(IVATemp, 6) + IEPSTemp + OtrosImpuestos - OtrosImpuestosRetenciones If Math.Abs(Math.Round(DescuentosTemp, 6) - Math.Round(Descuento, 6)) > 0.01 Then Msg &= String.Format("- Los descuentos del detalle no coinciden con el descuento general
") End If If Math.Abs(Math.Round(IVATemp, 6) - Math.Round(TrasladoIVA, 6)) > 0.01 Then Msg &= String.Format("- Los IVAS del detalle no coinciden con el IVA general
") End If If Math.Abs(Math.Round(IEPSTemp, 6) - Math.Round(TrasladoIEPS, 6)) > 0.01 Then Msg &= String.Format("- Los IEPS del detalle no coinciden con el IEPS general
") End If If Math.Abs(Math.Round(RetIVATemp, 6) - Math.Round(RetencionIVA, 6)) > 0.01 Then Msg &= String.Format("- Los RetIVA del detalle no coinciden con el RetIVA general
") End If If Math.Abs(Math.Round(RetISRTemp, 6) - Math.Round(RetencionISR, 6)) > 0.01 Then Msg &= String.Format("- Las RetISR del detalle no coinciden con el RetIVA general
") End If If Math.Abs(Math.Round(TotalTemp, 2) - Math.Round(Total, 2)) > 0.01 Then Msg &= String.Format("- El total generado por los detalles no coincide con el total general
({0}-{1})", Math.Round(TotalTemp, 2), Math.Round(Total, 2)) End If If Msg <> "" Then Errores.AppendLine($" El comprobante XML presenta las siguientes inconsistencias:{Msg}. ") Else DescuentosTemp = Descuento IVATemp = TrasladoIVA TotalTemp = Total RetIVATemp = RetencionIVA RetISRTemp = RetencionISR IEPSTemp = TrasladoIEPS End If Me.SubTotal = SubtotalTemp Me.Descuento = DescuentosTemp Me.SubTotal2 = Subtotal2Temp Me.IVA = IVATemp Me.Total = TotalTemp Me.RetIVA = RetIVATemp Me.RetISR = RetISRTemp Me.IEPS = IEPSTemp CompraSaldo = TotalTemp AsignaValoresOriginales(SubtotalTemp, Subtotal2Temp, IVATemp, RetIVATemp, RetISRTemp, Total) End Sub Private Sub AsignaValoresOriginales(SubTotal As Decimal, SubTotal2 As Double, IVA As Decimal, RetIVA As Decimal, RetISR As Decimal, Total As Decimal) SubTotalOriginal = SubTotal SubTotal2Original = SubTotal2 IVAOriginal = IVA RetIVAOriginal = RetIVA RetISROriginal = RetISR TotalOriginal = Total End Sub Private Sub AjustaImporteUltimoConcepto(ImporteAjuste As Decimal, Optional EsCarga As Boolean = False) If ImporteAjuste = 0 Then Exit Sub Dim Amortizacion As Decimal = 0 If TmpDT.Rows.Count > 0 Then ' si hay movimientos y si esta afectando al total, que se haga el ajuste Dim Indice As Integer = If(TmpDT.Rows(TmpDT.Rows.Count - 1)("CvePS").ToString = UsuarioActual.Empresa.Funcionalidad(112).ToString, TmpDT.Rows.Count - 2, TmpDT.Rows.Count - 1) Dim tPU As Decimal If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal Else tPU = 0 End If If TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU < 0 Then 'si es negativo, que tome el dato anterior Indice = Indice - 1 If TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal > 0 Then tPU = ImporteAjuste / TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal Else tPU = 0 End If End If TmpDT.Rows(Indice)("PU") = TmpDT.Rows(Indice)("PU").ToString.ToDecimal + tPU TmpDT.Rows(Indice)("Total") = TmpDT.Rows(Indice)("Total").ToString.ToDecimal + ImporteAjuste TmpDT.Rows(Indice)("IEPSPS") = (TmpDT.Rows(Indice)("Total").ToString.ToDecimal() * TmpDT.Rows(Indice)("IEPSPSPorcentaje").ToString.ToDecimal()).RoundAD(2) TmpDT.Rows(Indice)("IVA") = (TmpDT.Rows(Indice)("PU").ToString.ToDecimal * TmpDT.Rows(Indice)("Cantidad").ToString.ToDecimal - TmpDT.Rows(Indice)("Descuento").ToString.ToDecimal) * TmpDT.Rows(Indice)("IVAPorcentaje").ToString.ToDecimal TmpDT.AcceptChanges() End If SubTotal = TmpDT.SUMD("Total") If Not EsCarga Then Descuento = TmpDT.SUMD("Descuento") End If SubTotalConceptos = SubTotal End Sub Public Function ValidateUUID(ByVal uuid As String) As Boolean Dim pattern As String = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$" Dim regex As New Regex(pattern) Return regex.IsMatch(uuid) End Function Private Function GeneraStringDoctosRelacionados() As String Dim DoctosRelacionados As String = "-1" Dim listaUUIDSRelacionados As New List(Of String) If DocumentosRelacionadosUUIDSList.Count > 0 Then For Each s As String In DocumentosRelacionadosUUIDSList If s.Trim.Length > 0 Then listaUUIDSRelacionados.Add(s.Trim) End If Next End If If listaUUIDSRelacionados.Count > 0 Then DoctosRelacionados = String.Join(",", listaUUIDSRelacionados.ToArray()) End If Return DoctosRelacionados End Function Private Function ValorXML(n As XmlNode, Campo As String, Optional Retorno As String = "") As String Dim o As XmlNode = n.Attributes.Cast(Of XmlAttribute)().SingleOrDefault(Function(a) String.Compare(a.Name, Campo, True) = 0) If o Is Nothing Then Return Retorno Else Return o.Value End If End Function Public Function AddCompra(Optional ByRef transacccion As SqlTransaction = Nothing) As Boolean If Not AjustesValidacion() Then Return False Dim respuesta As Boolean = True Dim ObjCompras As ClsCompras If transacccion IsNot Nothing Then ObjCompras = New ClsCompras(transacccion) Else ObjCompras = New ClsCompras End If Dim ObjConta As New ClsContabilidad(ObjCompras.IniciaTransacSQL()) If Not AddPrePolizaCabecera(ObjConta) Then respuesta = False End If If respuesta AndAlso ObjCompras.AddCompra(Me.TipoDocto, Me.Descripcion, Me.Serie, Me.Folio, Me.FolioSecundario, Me.CveProveedor, Me.SubTotal, Me.Descuento, Me.Amortizacion, Me.IVA, Me.RetIVA, Me.RetISR, Me.IEPS, Me.OtrosImpuestos, Me.Redondeo, Me.Total, Me.Fecha, Me.CveMoneda, Me.TipoCambio, If(Me.FechaPago = Nothing, Me.Fecha, Me.FechaPago), Me.AplicaNotaCredito, Me.Observaciones, Me.CveEstatusFactura, Me.CvePrePoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, Me.IdPoliza, CveCajaChica:=Me.CveCajaChica, CvePersonal:=Me.CvePersonal, NumeroReembolso:=Me.NumeroReembolso, CveProveedorSucursal:=Me.CveProveedorSucursal, AplicoPromocion:=Me.AplicoPromocion, PorcentajeIVA:=Me.PorcentajeIVA, CveMetodoPago:=Me.CveMetodoPago, CveRetIVAConcepto:=Me.CveRetIVAConcepto, CveConceptoContableAlmacen:=Me.CveConceptoContableAlmacen, CveRetISRConcepto:=Me.CveRetISRConcepto, NoDeducible:=Me.NoDeducible, CveTipoCompra:=Me.CveTipoCompra, TotalOriginal:=Me.TotalOriginal, CveTipoConcepto:=Me.CveTipoConcepto, EsImportacion:=Me.EsImportacion, CveFactura:=Me.CveFactura, CveSubProyecto:=Me.CveSubProyectoPrincipal, DoctosRelacionados:=Me.DocumentosRelacionadosUUIDSString, CveFolioGarantia:=Me.CveFolioGarantia, CveCompraRelacionada:=CveCompraRelacionada) Then Me.CveCompra = ObjCompras.CveCompra Else respuesta = False End If If respuesta AndAlso Me.CveCompra > 0 Then For Each Row As DataRow In Me.TmpDT.Rows Dim TipoRecepcion As Integer = -1 Dim Referencia As String = "" Dim EsNoDeducible As Boolean = False Dim CveAF As Integer = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 1, Row("CveActivoFijo").ToString.ToEntero, -1) Dim CveAFC As Integer = If(Row("CveActivoFijo").ToString.ToEntero > 0 AndAlso Row("TipoAF").ToString.ToEntero = 2, Row("CveActivoFijo").ToString.ToEntero, -1) If Not ObjCompras.AddCompraDetalle(Me.CveCompra, Row("CveUM").ToString.ToEntero, Row("CvePS").ToString.ToEntero, Row("CveSubProyecto").ToString.ToEntero, -1, CveAF, Row("Cantidad").ToString.ToDecimal, Row("PU").ToString.ToDecimal, Row("IVA").ToString.ToDecimal, Row("Total").ToString.ToDecimal, Row("Descuento").ToString.ToDecimal, Row("Obs").ToString, Row("CveOrdenCompraDetalle").ToString.ToEntero, TipoRecepcion, Row("CveContrato").ToString.ToEntero, Row("CvePresupuestoEgreso").ToString.ToEntero, AplicaCostoIndirecto:=Row("AplicaCostoIndirecto").ToString.ToEntero, EstatusAlmacen:=Row("EntregaDirecta").ToString.ToEntero, CvePersonal:=CvePersonal, CveTipoGasto:=Row("CveTipoGasto").ToString.ToEntero, AF_Medida:=Row("AFMedida").ToString.ToEntero, AF_TipoMantenimiento:=Row("AFTipoMantenimiento").ToString.ToEntero, Referencia:=Referencia, OtrosGastos:=Row("OtrosGastos").ToString.ToDecimal, RetIVA:=Row("RetIVA").ToString.ToDecimal, RetISR:=Row("RetISR").ToString.ToDecimal, IEPSPS:=Row("IEPSPS").ToString.ToDecimal.RoundSQL, IEPSPSIVA:=Row("IEPSPSIVA").ToString.ToDecimal, IVAPorcentaje:=Row("IVAPorcentaje").ToString.ToDecimal, RetIVAPorcentaje:=Row("RetIVAPorcentaje").ToString.ToDecimal, RetISRPorcentaje:=Row("RetISRPorcentaje").ToString.ToDecimal, IEPSPSPorcentaje:=Row("IEPSPSPorcentaje").ToString.ToDecimal, IEPSPSIVAPorcentaje:=Row("IEPSPSIVAPorcentaje").ToString.ToDecimal, NoDeducible:=If((Row("NoDeducible").ToString().ToUpper().Contiene("TRUE", "1")) AndAlso EsNoDeducible, True, False), CveContratoDetalle:=Row("CveContratoDetalle").ToString.ToEntero, CveCultivoCuadroDetalle:=Row("CveCultivoCuadroDetalle").ToString.ToEntero, CveActivoFijoCompra:=CveAFC) Then respuesta = False Exit For End If Next End If If respuesta Then If Not AddPrePolizaDetalles(ObjConta) Then respuesta = False End If If respuesta AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 4) Then If ObjConta.ValorPolizaDescuadre > 0 Then Errores.AppendLine($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}.") GuardaLogAD($"eFacturas/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas") respuesta = False End If End If If respuesta AndAlso Me.CveFactura > 0 Then If Not ObjCompras.UpdateCompraFactura(Me.CveCompra, Me.CveFactura, Me.Serie, Me.Folio) Then respuesta = False End If If transacccion Is Nothing Then 'SINO VIENE DE UNA TRANSACCIÓN If respuesta Then ObjCompras.Commit() Else ObjCompras.RollBack() End If ObjCompras.Dispose() ObjConta.Dispose() End If Return respuesta End Function Private Function AddPrePolizaCabecera(ByRef ObjConta As ClsContabilidad) As Boolean Dim respuesta As Boolean = False Dim ConceptoPoliza As String = String.Format("{0} - {1} - {2}", NombreProveedor, SerieFolio, "") Dim Modulo As String = "eFacturas/Registrar" If Me.TipoDocto = "RNC" Then ConceptoPoliza = String.Format("{0} - {1} - {2}", NombreProveedor, SerieFolio, "") Modulo = "Compras/RNC" End If Me.CvePrePoliza = ObjConta.AddPrePolizas(Modulo, 1, Me.Total, Me.Total, Me.CveMoneda, Me.Fecha, ConceptoPoliza, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 0, "", CveTipoPoliza:=Me.CveTipoPoliza) respuesta = If(Me.CvePrePoliza > 0, True, False) Return respuesta End Function Private Function AddPrePolizaDetalles(ByRef ObjConta As ClsContabilidad, Optional ES_RNC As Boolean = False) As Boolean Dim respuesta As Boolean = True Dim Concepto As String = $"{Me.NombreProveedor} {Me.SerieFolio}" Dim Referencia As String = Me.SerieFolio If TipoDocto = "RNC" Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, Me.Total, Me.Total, 370, Referencia, Concepto, CveCompra:=CveCompra, CveCompraAmortizacion:=Me.CveCompraAmortizacion, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, Me.Total), TipoCambio:=TipoCambio, CveClasificacion:=-1, CveSubProyecto:=Me.CveSubProyecto, Contabilizable:=True) Then respuesta = False End If If respuesta Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, Me.Total, Me.Total, 372, Referencia, Concepto, CveCompra:=CveCompra, CveCompraAmortizacion:=Me.CveCompraAmortizacion, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, Me.Total), TipoCambio:=TipoCambio, CveClasificacion:=-1, CveSubProyecto:=Me.CveSubProyecto, Contabilizable:=True) Then respuesta = False End If End If Else Dim importeMovimiento As Decimal Dim importeMN As Decimal '6 For Each RowDetalle As DataRow In TmpDT.FiltraParametros("ISNULL(TipoAF,0) <> 2", "", {"CveClasificacion", "CveSubProyecto"}).Rows importeMovimiento = TmpDT.SUMD("Total", $" CveClasificacion = {RowDetalle("CveClasificacion").ToString} AND CveSubProyecto = {RowDetalle("CveSubProyecto").ToString}") importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If importeMN <> 0 Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 6, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=Me.CveCreditoDetalle, ImporteME:=If(TipoCambio = 1, 0, importeMovimiento), TipoCambio:=TipoCambio, CveClasificacion:=RowDetalle("CveClasificacion").ToString().ToEntero(), CveSubProyecto:=RowDetalle("CveSubProyecto").ToString().ToEntero(), Contabilizable:=True) Then respuesta = False Exit For End If End If Next '14 If respuesta AndAlso Me.IVA > 0 Then importeMovimiento = Me.IVA importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 14, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=Me.PorcentajeIVA, Contabilizable:=True) Then respuesta = False End If End If '25 If respuesta AndAlso Me.IEPS > 0 Then importeMovimiento = Me.IEPS importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, importeMovimiento, importeMN, 25, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If ' If respuesta AndAlso Me.RetIVA > 0 Then importeMovimiento = Me.RetIVA importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetIVA If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If ' If respuesta AndAlso Me.RetISR > 0 Then importeMovimiento = Me.RetISR importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ret As ConceptosRetenciones = ConceptoPrePolizaRetISR If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ret.CveConceptoxAcreditar, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If End If '5 If respuesta Then importeMovimiento = Me.Total importeMN = (importeMovimiento * Me.TipoCambio).RoundSQL Dim ConPreP As ConceptosTipoSaldo = ObtenerCveConceptoPrePoliza(1, Me.CveMoneda, False, Me.CveTipoConceptoProveedor) Dim ImporteME As Decimal = importeMovimiento Dim UsaComplementaria As Boolean = True If Me.CveMoneda > 1 Then ImporteME = importeMovimiento If UsuarioActual.CveEmpresa.Contiene(13, 83) Then 'caso excepcional de complementarias UsaComplementaria = False importeMN = importeMovimiento * Me.TipoCambio Else importeMN = importeMovimiento End If If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, importeMN, ConPreP.CveConcepto, Referencia, Concepto, CveCompra:=CveCompra, CveSubProyecto:=Me.CveSubProyectoPrincipal, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=CvePersonal, CveCreditoDetalle:=CveCreditoDetalle, ImporteME:=If(Me.TipoCambio = 1, 0, importeMovimiento), TipoCambio:=Me.TipoCambio, PorcentajeImpuesto:=0, Contabilizable:=True) Then respuesta = False End If If respuesta AndAlso Me.CveMoneda > 1 AndAlso UsaComplementaria Then If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, importeMovimiento, (importeMovimiento * Me.TipoCambio - importeMovimiento).RoundSQL, ConPreP.CveConceptoComplementario, Referencia, Concepto, CveCompra:=Me.CveCompra, CveProveedor:=Me.CveProveedor, CveIE:=Me.CveIE, CvePersonal:=Me.CvePersonal, CveCompraAmortizacion:=Me.CveCompraAmortizacion, TipoCambio:=Me.TipoCambio, TipoCambioPago:=1, ImporteME:=ImporteME, CveSubProyecto:=Me.CveSubProyecto) Then respuesta = False End If End If End If End If Return respuesta End Function End Class