+ DataKeyNames="CveCompra,TipoCambio,CveTipoConcepto,UUID,Saldo,SerieFolio,Fecha,CveMoneda,Total,CveProveedor,SubTotal" runat="server" AutoGenerateColumns="false" GridLines="None" CssClass="table table-striped table-hover Widthall ScrollAD">
@@ -5495,6 +5530,43 @@
+
+
+
+
+
diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb
index 07fa87194..aeb94a329 100644
--- a/Compras/Compras.aspx.vb
+++ b/Compras/Compras.aspx.vb
@@ -10,7 +10,10 @@ Imports System.Threading.Tasks
Imports Newtonsoft.Json
Imports Extensiones
Imports MoreLinq
-Imports ClbNegBICFDv3_3
+Imports ClsPaginas
+Imports System.Data.SqlClient
+
+
Partial Class Compras_Compras
Inherits ClsPaginas
@@ -714,6 +717,18 @@ Partial Class Compras_Compras
ViewState("CveMetodoPago") = value
End Set
End Property
+
+ Private Property MetodoPagoOC As Integer
+ Get
+ If ViewState("MetodoPagoOC") Is Nothing Then
+ ViewState("MetodoPagoOC") = -1
+ End If
+ Return ViewState("MetodoPagoOC").ToString.ToEntero
+ End Get
+ Set(value As Integer)
+ ViewState("MetodoPagoOC") = value
+ End Set
+ End Property
Private Property TipoCambio As Decimal
Get
Return ViewState("TipoCambio").ToString.ToDecimal
@@ -1018,6 +1033,20 @@ Partial Class Compras_Compras
End Set
End Property
+ Private Property CveIEAnticipo As Integer
+ Get
+ If ViewState("CveIEAnticipo") Is Nothing Then
+ ViewState("CveIEAnticipo") = -1
+ End If
+ Return ViewState("CveIEAnticipo").ToString.ToEntero
+ End Get
+ Set(value As Integer)
+ ViewState("CveIEAnticipo") = value
+ End Set
+ End Property
+
+
+
Public Property FechaCompraOriginal As Date
Get
Return ViewState("FechaCompraOriginal").ToString.ToDate
@@ -1089,6 +1118,174 @@ Partial Class Compras_Compras
End Set
End Property
+
+#Region "PROPIEDADES PRONTO PAGO"
+ '''
+ ''' Descuento por pronto pago proveedor
+ '''
+ '''
Porcentaje de descuento de proveedor
+ Private Property PorcentajeProntoPago As Decimal
+ Get
+ If ViewState("PorcentajeProntoPago") Is Nothing Then
+ ViewState("PorcentajeProntoPago") = 0D
+ End If
+ Return ViewState("PorcentajeProntoPago").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("PorcentajeProntoPago") = value
+ End Set
+ End Property
+ Private Property AjusteProntoPagoConIVA As Decimal
+ Get
+ If ViewState("AjusteProntoPagoConIVA") Is Nothing Then
+ ViewState("AjusteProntoPagoConIVA") = 0D
+ End If
+ Return ViewState("AjusteProntoPagoConIVA").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("AjusteProntoPagoConIVA") = value
+ End Set
+ End Property
+
+ Private Property AjusteProntoPagoPorcentajeIVA As Decimal
+ Get
+ If ViewState("AjusteProntoPagoPorcentajeIVA") Is Nothing Then
+ ViewState("AjusteProntoPagoPorcentajeIVA") = 0D
+ End If
+ Return ViewState("AjusteProntoPagoPorcentajeIVA").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("AjusteProntoPagoPorcentajeIVA") = value
+ End Set
+ End Property
+
+
+ Private Property AjusteProntoPagoSinIVA As Decimal
+ Get
+ If ViewState("AjusteProntoPagoSinIVA") Is Nothing Then
+ ViewState("AjusteProntoPagoSinIVA") = 0D
+ End If
+ Return ViewState("AjusteProntoPagoSinIVA").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("AjusteProntoPagoSinIVA") = value
+ End Set
+ End Property
+ Private Property ImporteRNC As Decimal
+ Get
+ If ViewState("ImporteRNC") Is Nothing Then
+ ViewState("ImporteRNC") = 0D
+ End If
+ Return ViewState("ImporteRNC").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("ImporteRNC") = value
+ End Set
+ End Property
+ Private Property ImporteRNCProntoPago As Decimal
+ Get
+ If ViewState("ImporteRNCProntoPago") Is Nothing Then
+ ViewState("ImporteRNCProntoPago") = 0D
+ End If
+ Return ViewState("ImporteRNCProntoPago").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("ImporteRNCProntoPago") = value
+ End Set
+ End Property
+
+ Private Property ImporteRNCSaldar As Decimal
+ Get
+ If ViewState("ImporteRNCSaldar") Is Nothing Then
+ ViewState("ImporteRNCSaldar") = 0D
+ End If
+ Return ViewState("ImporteRNCSaldar").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("ImporteRNCSaldar") = value
+ End Set
+ End Property
+
+ Private Property DTRemisionesNotaDeCredito As DataTable
+ Get
+
+ If ViewState("DTRemisionesNotaDeCredito") Is Nothing Then
+ ViewState("DTRemisionesNotaDeCredito") = New DataTable
+ End If
+
+ Return DirectCast(ViewState("DTRemisionesNotaDeCredito"), DataTable)
+
+ End Get
+ Set(value As DataTable)
+ ViewState("DTRemisionesNotaDeCredito") = value
+ End Set
+ End Property
+
+
+ Private Property SerieFolioProntoPago As String
+ Get
+ If ViewState("SerieFolioProntoPago") Is Nothing Then
+ ViewState("SerieFolioProntoPago") = ""
+ End If
+ Return ViewState("SerieFolioProntoPago").ToString
+ End Get
+ Set(value As String)
+ ViewState("SerieFolioProntoPago") = value
+ End Set
+ End Property
+
+ Private Property TipoCambioProntoPago As Decimal
+ Get
+ If ViewState("TipoCambioProntoPago") Is Nothing Then
+ ViewState("TipoCambioProntoPago") = 0D
+ End If
+ Return ViewState("TipoCambioProntoPago").ToString.ToDecimal
+ End Get
+ Set(value As Decimal)
+ ViewState("TipoCambioProntoPago") = value
+ End Set
+ End Property
+
+ Private Property FechaProntoPago As Date
+ Get
+ If ViewState("FechaProntoPago") Is Nothing Then
+ ViewState("FechaProntoPago") = MinFecha
+ End If
+ Return ViewState("FechaProntoPago").ToString.ToDate
+ End Get
+ Set(value As Date)
+ ViewState("FechaProntoPago") = value
+ End Set
+ End Property
+
+ Private Property CveMonedaProntoPago As Integer
+ Get
+ If ViewState("CveMonedaProntoPago") Is Nothing Then
+ ViewState("CveMonedaProntoPago") = 0D
+ End If
+ Return ViewState("CveMonedaProntoPago").ToString.ToEntero
+ End Get
+ Set(value As Integer)
+ ViewState("CveMonedaProntoPago") = value
+ End Set
+ End Property
+
+ 'ImporteRNCSaldar = 0
+ 'SerieFolioProntoPago = ""
+ 'TipoCambioProntoPago = 1
+ 'FechaProntoPago = MinFecha
+ 'CveMonedaProntoPago = 1
+
+
+#End Region
+
+
+
+
+
+
+
+
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
'ImgBtnBuscarOC.Attributes.Add("data-toggle", "tooltip")
@@ -1488,6 +1685,11 @@ Partial Class Compras_Compras
DdlTipoComprobante.SelectedValueExist("DEV")
End If
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then
+ DdlTipoCompra.Items.Add(New ListItem("Remision Nota De Crédito", "15"))
+ End If
+
+
End If
'SE OCUPAN AFUERA DEL POSTBACK ??
@@ -3252,6 +3454,8 @@ Partial Class Compras_Compras
Private Sub CargaProveedor(CveProveedor As Integer, RFC As String, Optional RecargaCombo As Boolean = True)
+ PorcentajeProntoPago = 0D
+
Dim ObjProveedor As New ClsCompProveedores()
If ObjProveedor.GetProveedores(ClsCompProveedores.TipoConsulta.ParaUsoEnEmpresa, CveProveedor, "-1", "-1", "-1", "-1", RFC, "-1", "-1", -1, UsuarioActual.CveEmpresa) Then
@@ -3271,7 +3475,13 @@ Partial Class Compras_Compras
ViewState("CveProveedor") = ObjProveedor.CveProveedor
ViewState("CveTipoProveedor") = ObjProveedor.CveTipoProveedor
- If ObjProveedor.CveTipoProveedor = 1 Then LblProveedor.Text = "Proveedor:" Else LblProveedor.Text = "Acreedor:"
+
+ If ObjProveedor.CveTipoProveedor = 2 Then
+ LblProveedor.Text = "Acreedor:"
+ Else
+ LblProveedor.Text = "Proveedor:"
+ End If
+
CveTipoConcepto = ObjProveedor.CveTipoProveedor
ViewState("NombreProveedor") = ObjProveedor.RazonSocial
@@ -3407,6 +3617,10 @@ Partial Class Compras_Compras
End If
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then
+ PorcentajeProntoPago = ObjProveedor.PorcentajeProntoPago
+ End If
+
Else
Alert("El Proveedor solicitado no existe, por favor intente de nuevo.", TipoMensaje.MsgAdvertencia)
End If
@@ -3965,8 +4179,18 @@ Partial Class Compras_Compras
+ If Not ValidaPresupuesto(2) Then
+ Exit Sub
+ End If
+
'------------------ INICIA VALIDACIONES ------------------
+ If MetodoPagoOC = 0 AndAlso RBLPago.SelectedValue.ToEntero <> 2 Then
+ Alert("La orden de compra se definió de contado, favor de especificar la compra de contado.", TipoMensaje.MsgAdvertencia)
+ Exit Sub
+ End If
+
+
Dim CveSubProyectoPrincipal As Integer = AsignarSubProyectoPrincipal()
If Not CveSubProyectoPrincipal > 0 Then
@@ -6265,7 +6489,8 @@ Partial Class Compras_Compras
If DdlMoneda.SelectedValue.ToEntero <> 1 Then
TCO = TxtTC.Text.ToDecimal
ImporteCI176 = ObjOC.DtResultados.FiltroPrimeroValor("ImporteCI228").ToDecimal
- CostoIndirectoAcum176 += ImporteCI176
+ 'CostoIndirectoAcum176 += ImporteCI176
+ CostoIndirectoAcum176 += 0
SumatoriaInventario += Importe228 + Importe229
'se considera costoindirecto, para que la factura tiene en un concepto tipo servicio
SumatoriaOCINV += (Dr(If(ListaDocumentos IsNot Nothing AndAlso ListaDocumentos.Count > 0 AndAlso ArrAnticipos IsNot Nothing AndAlso ArrAnticipos.Count > 0 AndAlso TxtTotal.Text.ToDecimal = 0, "ImporteSinImpuestos", "Total")).ToString.ToDecimal * tipoCambioActual) - (ImporteMN228 + ImporteMN229 - ImporteCI176)
@@ -6475,8 +6700,24 @@ Partial Class Compras_Compras
ErrorPrepoliza = True
End If
Else
- If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento.RoundSQL, importeMovimiento * tipoCambioActual * Multiplicador, ConceptoContabilizacionNC, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveClasificacion:=tCveClasif, CveSubProyecto:=tCveSubProyecto, Contabilizable:=SeContabiliza) Then
- ErrorPrepoliza = True
+ Dim AplicadoenFactura As Boolean = False
+ If UsuarioActual.CveEmpresa = 119 Then
+ For Each Gvr As GridViewRow In GvFacturaNC.Rows
+ If Gvr.FCCheckBox("ChkFacturaNC").Checked Then ' recorro la seleccion y tomo el TC de cada aplicación
+ AplicadoenFactura = True
+ Dim timporteMovimientoNC As Decimal = (Gvr.FCTextBox("TxtImporte").Text.ToDecimal * Gvr.DataKey("SubTotal").ToDecimal / Gvr.DataKey("Saldo").ToDecimal).RoundSQL
+ Dim TCNC As Decimal = Gvr.DataKey("TipoCambio").ToDecimal
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, timporteMovimientoNC, (timporteMovimientoNC * TCNC * Multiplicador).RoundSQL, ConceptoContabilizacionNC, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=TCNC, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveClasificacion:=tCveClasif, CveSubProyecto:=tCveSubProyecto, Contabilizable:=SeContabiliza) Then
+ ErrorPrepoliza = True
+ End If
+ End If
+ Next
+ End If
+
+ If Not AplicadoenFactura Then ' se aplica el subtotal
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, TipoMovimiento, importeMovimiento.RoundSQL, importeMovimiento * tipoCambioActual * Multiplicador, ConceptoContabilizacionNC, Referencia, Concepto, CveCompra:=CveCompra, CveProveedor:=CveProveedorConcepto, ImporteME:=If(tipoCambioActual = 1, 0, importeMovimiento), TipoCambio:=tipoCambioActual, CveMovimientoAlmacen:=CveMovimientoDevolucion, CveClasificacion:=tCveClasif, CveSubProyecto:=tCveSubProyecto, Contabilizable:=SeContabiliza) Then
+ ErrorPrepoliza = True
+ End If
End If
End If
End If
@@ -6759,6 +7000,52 @@ Partial Class Compras_Compras
End If
Next
+
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 AndAlso DdlRemisionNotaCredito.SelectedValue.ToEntero > 0 AndAlso ImporteRNCSaldar > 0 Then
+
+ 'Dim importeMovimientoNC As Decimal = Gvr.FCTextBox("TxtImporte").Text.ToDecimal
+
+ Dim Pago As New CompraPago
+ Pago.ImportePago = ImporteRNCSaldar
+ Pago.CveMonedaPago = CompraActual.CveMoneda
+ Pago.CveCompraAmortizacion = CompraActual.CveCompra
+ Pago.Referencia = CompraActual.SerieFolio
+ Pago.TCPago = CompraActual.TC
+ Pago.AplicaAcreditable = False
+ Pago.TipoPago = "NC"
+ Pago.Fecha = CompraActual.Fecha 'toma la misma fecha de la provisión en el pago de NC
+
+ Dim CompraPago As New Compra
+ ''datos de la compra tipodocto:Fac, para sobreescribirlos
+ CompraPago.CveCompra = DdlRemisionNotaCredito.SelectedValue.ToEntero
+ CompraPago.CveProveedor = DdlProveedor.SelectedValue.ToEntero
+ CompraPago.SerieFolio = SerieFolioProntoPago
+ CompraPago.TC = TipoCambioProntoPago
+ CompraPago.Fecha = FechaProntoPago
+ CompraPago.CveMoneda = CveMonedaProntoPago
+ CompraPago.Total = ImporteRNCSaldar
+ CompraPago.CveTipoConceptoProveedor = CveTipoConcepto
+ CompraPago.CveSubProyecto = CompraActual.CveSubProyecto
+
+ ErrorPrepoliza = AplicaPrePolizaPagoCompra(CompraPago, Pago, CvePrePoliza, ObjConta)
+
+ If Not ErrorPrepoliza Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, True, ImporteRNCSaldar, ImporteRNCSaldar, 371, Referencia, Concepto, CveCompra:=DdlRemisionNotaCredito.SelectedValue.ToEntero, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio,
+ CveClasificacion:=-1, CveSubProyecto:=CompraActual.CveSubProyecto, Contabilizable:=True) Then
+ ErrorPrepoliza = True
+ End If
+
+ If Not ErrorPrepoliza Then
+ If Not ObjConta.AddPrePolizasDetalle(CvePrePoliza, False, ImporteRNCSaldar, ImporteRNCSaldar, 372, Referencia, Concepto, CveCompra:=DdlRemisionNotaCredito.SelectedValue.ToEntero, CveProveedor:=Me.CveProveedor, ImporteME:=If(TipoCambio = 1, 0, ImporteRNCSaldar), TipoCambio:=TipoCambio,
+ CveClasificacion:=-1, CveSubProyecto:=CompraActual.CveSubProyecto, Contabilizable:=True) Then
+ ErrorPrepoliza = True
+ End If
+ End If
+ End If
+
+
+ End If
+
If ErrorPrepoliza Then
ErrorMovtosCxP = True
Exit Select
@@ -6997,7 +7284,7 @@ Partial Class Compras_Compras
'EMPIEZA REFACTURACION
If Not ErrorPrepoliza AndAlso CveCompraRefacturacion > 0 Then
- ErrorBitacora = GuardaRefacturacion(ObjCompras, ObjEventos, CvePrePoliza)
+ ErrorBitacora = GuardaRefacturacion(ObjCompras, ObjEventos, CvePrePoliza, ObjConta, CompraActual)
If ErrorBitacora Then
Alert("Ocurrió un error al hacer la Refacturación", TipoMensaje.MsgError)
End If
@@ -7320,11 +7607,19 @@ Partial Class Compras_Compras
If Not ErrorPrepoliza AndAlso Not ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, Opcion:=4, AutoConta:=AutoConta) Then
TieneError = True
'If ObjConta.ValorPolizaDescuadre > 0 Then
- ' GuardaLogAD($"Compras/Compras-Guardar | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
+ ' Alert($"{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia}", TipoMensaje.MsgError)
' ErrorPrepolizaDescuadre = True
'End If
End If
+
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 AndAlso (ImporteRNC > 0 Or ImporteRNCProntoPago > 0) Then
+ If Not GeneraRemisionsNotadeCredito(ObjCompras.IniciaTransacSQL, CveCompra) Then
+ TieneError = True
+ End If
+ End If
+
+
If Not TieneError Then
ObjCompras.Commit()
If ObjContaAC IsNot Nothing Then ObjContaAC.Commit()
@@ -9588,6 +9883,8 @@ Partial Class Compras_Compras
e.Row.FCLabel("LtlUnidadMedida").Attributes.Add("title", "Unidad de medida SIN registrar")
End If
+ If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then e.Row.FCHyperLink("HplPS").Text = e.Row.DBCampo("PSCodigo")
+
'EQUIVALENCIA
If e.Row.DBCampo("CveUM").ToString.ToEntero > 0 And e.Row.DBCampo("CveTipoPS").ToString.ToEntero = 2 Then
@@ -9946,6 +10243,7 @@ Partial Class Compras_Compras
TmpDT.Columns.Add("CveCultivoCuadroDetalle", GetType(Integer))
TmpDT.Columns.Add("TemporadaCuadro", GetType(String))
+
TmpDTOriginal = New DataTable
TmpDTOriginal.Columns.Add("Consec", GetType(Integer))
TmpDTOriginal.Columns.Add("Cantidad", GetType(Decimal))
@@ -10056,6 +10354,7 @@ Partial Class Compras_Compras
TmpDTOriginal.Columns.Add("TemporadaCuadro", GetType(String))
+
End Sub
Protected Sub RecargaMaximum_Click(sender As Object, e As System.EventArgs)
@@ -10383,6 +10682,17 @@ Partial Class Compras_Compras
e.Row.FCTextBox("TxtDividir").Visible = False
End If
End If
+
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then
+
+ 'e.Row.Cells(4).Text = e.Row.DataKey("PUProtoPago").ToDecimal.ToString("###,###,###.00")
+
+ 'If PorcentajeProntoPago > 0 Then
+ ' e.Row.Cells(4).Text = e.Row.DataKey("PUProtoPago").ToDecimal - ()
+ 'End If
+
+ End If
+
End If
'HEADER GvInv
@@ -13060,7 +13370,7 @@ Partial Class Compras_Compras
RegistraScript(String.Format("$('#{0}').modal('hide')", DivRefacturacion.ClientID))
End Sub
- Private Function GuardaRefacturacion(ByRef ObjCompra As ClsCompras, ByRef ObjEventos As ClsOIEventos, CvePrePoliza As Integer) As Boolean
+ Private Function GuardaRefacturacion(ByRef ObjCompra As ClsCompras, ByRef ObjEventos As ClsOIEventos, CvePrePoliza As Integer, ByRef ObjConta As ClsContabilidad, ByRef CompraActual As Compra) As Boolean
Dim dr As DataRow = Nothing
Dim ErrorBitacora As Boolean = False
Dim IdPolizaAnterior As Integer = -1
@@ -13080,8 +13390,28 @@ Partial Class Compras_Compras
If ChkRefacNC.Checked Then Tipo = 2
'CONTABILIZA REFACTURACION
- If Not ObjCompra.Refacturacion(CveCompraRefacturacion, CveCompra, UsuarioActual.CveEmpresa, Tipo) Then
+ If ObjCompra.Refacturacion(CveCompraRefacturacion, CveCompra, UsuarioActual.CveEmpresa, Tipo) Then
+ Dim dttpagos As DataTable
+ If ObjCompra.GetComprasPagos(CveCompraRefacturacion, UsuarioActual.CveEmpresa) Then
+ dttpagos = ObjCompra.DtResultados
+
+ For Each drp As DataRow In dttpagos.Rows
+ Dim Pago As New CompraPago
+ Pago.ImportePago = drp("ImporteMN").ToString.ToDecimal
+ Pago.CveIE = drp("CveIE").ToString.ToEntero
+ Pago.CveMonedaPago = 1
+ Pago.CveCompraAmortizacion = -1
+ Pago.TipoPago = If(drp("CveIE").ToString.ToEntero > 0, "B", "NC")
+
+ Dim ErrorMovtosCxP As Boolean = AplicaPrePolizaPagoCompra(CompraActual, Pago, CvePrePoliza, ObjConta)
+ Next
+
+ End If
+
+ Else
+
ErrorBitacora = True
+
End If
@@ -13650,6 +13980,7 @@ Partial Class Compras_Compras
CargaOC()
End Sub
Private Sub CargaOC()
+ MetodoPagoOC = -1
Dim EntregaDirecta As Integer = 0
DivOCSolicitudAnticipo.Visible = False
DivOCSolicitudAnticipoModal.Visible = False
@@ -13688,6 +14019,7 @@ Partial Class Compras_Compras
HdnVCveOC.Value += String.Format("{0}{1}", If(HdnVCveOC.Value <> "", ",", ""), OC.DtResultados.Rows(0)("CveOrdenCompra").ToString)
HdnCveEstatusOC.Value += String.Format("{0}{1}", If(HdnCveEstatusOC.Value <> "", ",", ""), OC.DtResultados.Rows(0)("CveEstatusSiguiente").ToString)
EntregaDirecta += If(OC.DtResultados.Rows(0)("EntregaDirecta").ToString = "True", 1, 0)
+ MetodoPagoOC = OC.DtResultados.Rows(0)("MetodoPagoOC").ToString.ToEntero
End If
End If
Next
@@ -13703,6 +14035,7 @@ Partial Class Compras_Compras
HdnVCveOC.Value += String.Format("{0}{1}", If(HdnVCveOC.Value <> "", ",", ""), OC.DtResultados.Rows(0)("CveOrdenCompra").ToString)
HdnCveEstatusOC.Value += String.Format("{0}{1}", If(HdnCveEstatusOC.Value <> "", ",", ""), OC.DtResultados.Rows(0)("CveEstatusSiguiente").ToString)
EntregaDirecta += If(OC.DtResultados.Rows(0)("EntregaDirecta").ToString = "True", 1, 0)
+ MetodoPagoOC = OC.DtResultados.Rows(0)("MetodoPagoOC").ToString.ToEntero
End If
End If
Next
@@ -13745,7 +14078,9 @@ Partial Class Compras_Compras
Protected Sub BtnVOC_Click(sender As Object, e As EventArgs)
VinculaOC()
End Sub
+
Private Sub VinculaOC()
+ CveIEAnticipo = -1
If TxtOC.Text <> "" Then
'VARIABLES
@@ -13792,6 +14127,7 @@ Partial Class Compras_Compras
If ObjOC.DtResultados.Rows(0)("CveIEAnticipo").ToString.ToEntero > 0 Then
FoliosOCAnticipo += $"{ObjOC.DtResultados.Rows(0)("FolioOC").ToString},"
FoliosOCAnticipoIE += $"{ObjOC.DtResultados.Rows(0)("FolioIEAnticipo").ToString},"
+ CveIEAnticipo = ObjOC.DtResultados.Rows(0)("CveIEAnticipo").ToString.ToEntero
DivOCSolicitudAnticipo.Visible = True
DivOCSolicitudAnticipoModal.Visible = True
End If
@@ -13883,6 +14219,9 @@ Partial Class Compras_Compras
If DivOCSolicitudAnticipo.Visible And FoliosOCAnticipo.Length > 0 Then
LtSolicitudAnticipoFoliosOC.Text = $"La(s) siguiente(s) OC: {FoliosOCAnticipo.Substring(0, FoliosOCAnticipo.Length - 1)}. tienen vinculado un anticipo"
LtSolicitudAnticipoFoliosIE.Text = $" {FoliosOCAnticipoIE.Substring(0, FoliosOCAnticipoIE.Length - 1)}"
+
+ DVAtencionOCAnticipo.Visible = True
+ UpDVAtencionOCAnticipo.Update()
End If
'PROMOCIONES
@@ -14154,6 +14493,10 @@ Partial Class Compras_Compras
End Sub
Protected Sub BtnVincularOC_Click(sender As Object, e As EventArgs)
+ 'VincularOcProntoPago = False
+ AjusteProntoPagoPorcentajeIVA = 0D
+ AjusteProntoPagoConIVA = 0D
+ AjusteProntoPagoSinIVA = 0D
'If DdlOCVinculaInv.SelectedValue.ToEntero = 237 And Not CveFlete > 0 Then Alert("Necesita vincular un flete si selecciona Factura de Flete", TipoMensaje.MsgAdvertencia) : Exit Sub
'If DdlOCVinculaInv.SelectedValue.ToEntero = 240 And Not CveImportacion > 0 Then Alert("Necesita vincular una Importación si selecciona Factura de Importación", TipoMensaje.MsgAdvertencia) : Exit Sub
@@ -14210,15 +14553,50 @@ Partial Class Compras_Compras
LbSubTotalDif.Visible = False
Vinculacion()
Else
- LbSubTotalDif.Visible = True
- LbSubTotalDif.Text = (SubTotalCompra - SubTotalGV).FormatoNumero
- Alert("Los SubTotales de la vinculación no coinciden. Rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia,,)
- RegistraScript("CalculaTotalesOC();")
+
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then
+
+ ImporteRNC = (SubTotalCompra - SubTotalGV).RoundSQL(2)
+ ImporteRNCProntoPago = (SubTotalCompra * PorcentajeProntoPago).RoundSQL(2)
+
+ Dim ImporteOCConIVA As Decimal = 0D
+ Dim ImporteOCSinIVA As Decimal = 0D
+
+ Dim ImporteCompraConIVA As Decimal = TmpDT.SUM("Total", " IVAPorcentaje > 0 ")
+ Dim ImporteCompraSinIVA As Decimal = TmpDT.SUM("Total", " IVAPorcentaje = 0 ")
+
+ For Each gvr As GridViewRow In GvOC1.Rows
+ If gvr.DataKey("IVAPorcentaje").ToDecimal > 0 Then
+ ImporteOCConIVA = ImporteOCConIVA + (gvr.FCTextBox("TxtCantidad").Text.ToDecimal * gvr.FCTextBox("TxtPU").Text.ToDecimal)
+ Else
+ ImporteOCSinIVA = ImporteOCSinIVA + (gvr.FCTextBox("TxtCantidad").Text.ToDecimal * gvr.FCTextBox("TxtPU").Text.ToDecimal)
+ End If
+ Next
+
+ AjusteProntoPagoPorcentajeIVA = TmpDT.MAX("IVAPorcentaje").ToDecimal
+ AjusteProntoPagoConIVA = (ImporteCompraConIVA - ImporteOCConIVA)
+ AjusteProntoPagoSinIVA = (ImporteCompraSinIVA - ImporteOCSinIVA)
+
+ If ConfirmaVinculacionOCProntoPago() Then
+ Vinculacion()
+ End If
+
+
+
+ Else
+ LbSubTotalDif.Visible = True
+ LbSubTotalDif.Text = (SubTotalCompra - SubTotalGV).FormatoNumero
+ Alert("Los SubTotales de la vinculación no coinciden. Rectifique y vuelva a intentar.", TipoMensaje.MsgAdvertencia,,)
+ RegistraScript("CalculaTotalesOC();")
+ End If
+
+
End If
UpEstatus.Update()
End Sub
Protected Sub BtnVincularOCCompleta_Click(sender As Object, e As EventArgs)
+ VincularOcProntoPago = False
Vinculacion(True)
End Sub
Private Sub Vinculacion(Optional VinculacionCompleta As Boolean = False)
@@ -14346,6 +14724,51 @@ Partial Class Compras_Compras
IndexTmpOriginal += 1
Next
+
+
+
+
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 AndAlso (AjusteProntoPagoConIVA > 0 Or AjusteProntoPagoSinIVA > 0) Then
+
+ Dim CvePS_RNC As Integer = UsuarioActual.Empresa.Funcionalidad(580).ToEntero
+ Dim PSRow As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS_RNC).FiltroPrimero("")
+ Dim CveSubProyectoPrincipal As Integer = AsignarSubProyectoPrincipal()
+ Dim SubProyecto As String = GlobalDTSubProyectos(-1, CveSubProyectoPrincipal, UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto")
+
+ 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("PS").ToString
+ Dim CveUM As Integer = PSRow("CveUnidadMedida").ToString.ToEntero
+
+
+
+ Dim DTConIVA As DataTable = TmpDT.FiltraParametros(" IVAPorcentaje > 0")
+ If DTConIVA.Rows.Count > 0 Then
+
+ End If
+
+ Dim DTSinIVA As DataTable = TmpDT.FiltraParametros(" IVAPorcentaje = 0")
+ If DTSinIVA.Rows.Count > 0 Then
+
+ End If
+
+ Dim UM As String = PSRow("UnidadMedida").ToString
+
+ If AjusteProntoPagoConIVA > 0 Then
+ AddPS(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS_RNC, PS, 1, CveSubProyectoPrincipal.ToString, SubProyecto, "", "-1", "", AjusteProntoPagoConIVA, AjusteProntoPagoConIVA, AjusteProntoPagoPorcentajeIVA, 0, 0, 0, 0, 0)
+ End If
+
+ If AjusteProntoPagoSinIVA > 0 Then
+ AddPS(1, CveUM, UM, CveClasificacion, Clasificacion, CvePS_RNC, PS, 1, CveSubProyectoPrincipal.ToString, SubProyecto, "", "-1", "", AjusteProntoPagoSinIVA, AjusteProntoPagoSinIVA, 0, 0, 0, 0, 0, 0)
+ End If
+
+ End If
+
AddPS2(False)
'AJUSTE DE REDONDEO O DIFERENCIA PERMITIDA DE IMPORTE
@@ -14430,10 +14853,32 @@ Partial Class Compras_Compras
'ANTICIPO OC
If DivOCSolicitudAnticipo.Visible Then
+
+ If CveIEAnticipo > 0 Then
+ DVAtencionOCAnticipo.Visible = True
+ UpDVAtencionOCAnticipo.Update()
+ End If
+
+ Dim scripsSeccion As String = ""
+ For Each gvRow As GridViewRow In GVAnticipos.Rows
+ If gvRow.DataKey("CveIE").ToEntero = CveIEAnticipo Then
+ Dim Chk As CheckBox = gvRow.FCCheckBox("Chk")
+ scripsSeccion = scripsSeccion & $"$('#{Chk.ClientID}').click();"
+ 'RegistraScript($"$('#{Chk.ClientID}').click();", "100")
+ End If
+ Next
+
RegistraScript("MuestraAnticipos();", "MuestaAnticiposOC")
+ RegistraScript("
+ setTimeout(function() {
+ " & scripsSeccion & "
+ }, 200)
+ ")
UpAnticipos.Update()
+
End If
+
CalculaTotales()
CompraEstaVinculadaOC = True
@@ -15055,6 +15500,9 @@ Partial Class Compras_Compras
Protected Sub DdlProveedores_SelectedIndexChanged(sender As Object, e As EventArgs)
CargarFacturas()
+ If UsuarioActual.Empresa.Funcionalidad(574).ToEntero = 1 Then
+ CargaDdlRemisionNotaCredito()
+ End If
End Sub
Private Sub CargarFacturas()
@@ -16502,6 +16950,12 @@ Partial Class Compras_Compras
End Sub
Protected Sub LbAgregar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LbAgregar.Click
+
+ Dim ValImporte As Decimal = (TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal).RoundSQL(2)
+ If Not ValidaPresupuesto(1, DdlSubProyecto.SelectedValue.ToEntero, DdlSubProyecto.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero, DdlClasificacion.SelectedItem.Text, DdlTipoGasto.SelectedValue.ToEntero, DdlTipoGasto.SelectedItem.Text, ValImporte) Then
+ Exit Sub
+ End If
+
'VALIDACIONES
If Not DdlPS.SelectedValue.ToEntero > 0 Then
Alert("Es necesario seleccionar un Producto o Servicio registrado en el sistema.", TipoMensaje.MsgAdvertencia)
@@ -16548,39 +17002,43 @@ Partial Class Compras_Compras
Dim Total As Decimal = (TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal) - TxtDescuentoModal.Text.ToDecimal
- If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
- Dim ObjCon As New ClsContratos
- Dim CvePresupuesto As Integer = 0
- Dim Autorizado As Double = 0
- Dim Ejercido As Double = 0
- If ObjCon.GetPresupuestos(-1, "-1", DdlSubProyecto.SelectedValue.ToEntero, 2, -1, UsuarioActual.CveEmpresa) Then
- If ObjCon.DtResultados.Rows.Count > 0 Then
- CvePresupuesto = ObjCon.DtResultados.Rows(0)("CvePresupuesto").ToString.ToEntero
- If CvePresupuesto > 0 Then
- If ObjCon.GetPresupuestosDetalle(CvePresupuesto, -1, UsuarioActual.CveEmpresa) Then
- If ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then
- Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDouble
- End If
- End If
- If ObjCon.GetPresupuestosRep(CvePresupuesto, DdlTipoGasto.SelectedValue.ToEntero, 1, $"01/09/{NowADS().Year - 1}".ToDate, NowADS(), UsuarioActual.CveEmpresa, DdlProyecto.SelectedValue.ToEntero,
- DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveUsuario, DdlClasificacion.SelectedValue.ToEntero) Then
- If ObjCon.DtResultados.Rows.Count > 0 Then
- Ejercido = ObjCon.DtResultados.Rows(0)("Ejercido").ToString.ToDouble
- End If
- End If
- End If
- End If
- End If
- ObjCon.Dispose()
+ 'If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
+ ' Dim ObjCon As New ClsContratos
+ ' Dim CvePresupuesto As Integer = 0
+ ' Dim Autorizado As Double = 0
+ ' Dim Ejercido As Double = 0
+ ' If ObjCon.GetPresupuestos(-1, "-1", DdlSubProyecto.SelectedValue.ToEntero, 2, -1, UsuarioActual.CveEmpresa) Then
+ ' If ObjCon.DtResultados.Rows.Count > 0 Then
+ ' CvePresupuesto = ObjCon.DtResultados.Rows(0)("CvePresupuesto").ToString.ToEntero
+ ' If CvePresupuesto > 0 Then
- If CvePresupuesto > 0 And Autorizado > 0 Then
- Dim Diferencia As Double = (Ejercido + Total) - Autorizado
- If Diferencia > 0 Then
- Alert($"No hay presupuesto disponible en el subproyecto
{DdlSubProyecto.SelectedItem.Text} con la clasificación
{DdlClasificacion.SelectedItem.Text} y el tipo de gasto
{DdlTipoGasto.SelectedItem.Text}. Se excede por
{Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
- Exit Sub
- End If
- End If
- End If
+ ' If ObjCon.GetPresupuestosDetalle(CvePresupuesto, -1, UsuarioActual.CveEmpresa) Then
+ ' If ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows.Count > 0 Then
+ ' Autorizado = ObjCon.DtResultados.FiltraParametros($"CveClasificacion = {DdlClasificacion.SelectedValue.ToEntero} AND CveTipoGasto = {DdlTipoGasto.SelectedValue.ToEntero} AND Importe > 0").Rows(0)("Importe").ToString.ToDouble
+ ' End If
+ ' End If
+
+ ' If ObjCon.GetPresupuestosRep(CvePresupuesto, DdlTipoGasto.SelectedValue.ToEntero, 1, $"01/09/{NowADS().Year - 1}".ToDate, NowADS(), UsuarioActual.CveEmpresa, DdlProyecto.SelectedValue.ToEntero,
+ ' DdlSubProyecto.SelectedValue.ToEntero, UsuarioActual.CveUsuario, DdlClasificacion.SelectedValue.ToEntero) Then
+ ' If ObjCon.DtResultados.Rows.Count > 0 Then
+ ' Ejercido = ObjCon.DtResultados.Rows(0)("Ejercido").ToString.ToDouble
+ ' End If
+ ' End If
+
+ ' End If
+ ' End If
+ ' End If
+ ' ObjCon.Dispose()
+
+ ' If CvePresupuesto > 0 And Autorizado > 0 Then
+ ' Dim Diferencia As Double = (Ejercido + Total) - Autorizado
+ ' If Diferencia > 0 Then
+ ' Alert($"No hay presupuesto disponible en el subproyecto
{DdlSubProyecto.SelectedItem.Text} con la clasificación
{DdlClasificacion.SelectedItem.Text} y el tipo de gasto
{DdlTipoGasto.SelectedItem.Text}. Se excede por
{Diferencia.FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ ' Exit Sub
+ ' End If
+ ' End If
+
+ 'End If
ActualizaTotales = True
@@ -16657,6 +17115,8 @@ Partial Class Compras_Compras
' End If
'End If
+
+
Select Case Modalidad
Case "A" 'ADD
@@ -16671,6 +17131,8 @@ Partial Class Compras_Compras
Else
IVA = Math.Round(DdlIVA.SelectedValue.ToDecimal - 1, 2)
End If
+
+
AddPS(TxtCantidad.Text.Trim.ToDecimal, ddlUM.SelectedValue.ToEntero, ddlUM.SelectedItem.Text, DdlClasificacion.SelectedValue.ToEntero, DdlClasificacion.SelectedItem.Text, DdlPS.SelectedValue.ToEntero, DdlPS.SelectedText, HdnTipoPS.Value.ToEntero,
DdlSubProyecto.SelectedValue.ToString, DdlSubProyecto.SelectedItem.Text, DdlProyecto.SelectedItem.Text, DdlProyecto.SelectedValue.ToString, TxtObsPS.Text.Trim, TxtPrecio.Text.Trim.ToDecimal, Total, IVA,
TxtRetIVAModal.Text.ToDecimal / 100, TxtRetISRModal.Text.ToDecimal / 100, TxtIEPSModal.Text.ToDecimal / 100, 0, TxtDescuentoModal.Text.ToDecimal, OtrosGastos:=0, CveTipoGasto:=DdlTipoGasto.SelectedValue.ToEntero, TipoGasto:=DdlTipoGasto.SelectedItem.Text,
@@ -16748,10 +17210,14 @@ Partial Class Compras_Compras
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 = "") As Integer
+ Optional CveSATPSActualizado As Boolean = False, Optional TemporadaCuadro As String = "", Optional CodigoPS As String = "") As Integer
Dim Row As DataRow = Nothing
+ If Not TmpDT.Columns.Contains("CodigoPS") Then
+ TmpDT.Columns.Add("CodigoPS")
+ End If
+
Row = TmpDT.NewRow()
Dim Retorno As Integer = 0
Dim CveContrato As Integer = -1
@@ -16835,6 +17301,12 @@ Partial Class Compras_Compras
Row("Clasificacion") = Clasificacion
Row("CvePS") = CvePS
Row("PS") = PS
+
+ If CodigoPS.Trim = "" Then
+ CodigoPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimeroValor("CodigoPS")
+ End If
+ Row("CodigoPS") = CodigoPS
+
Row("CveTipoPS") = CveTipoPS
Row("PSDescripcion") = PSDescripcion
@@ -17018,6 +17490,9 @@ Partial Class Compras_Compras
DrPS("Clasificacion") = PSRow("Clasificacion").ToString
DrPS("CvePS") = DdlPS.SelectedValue
DrPS("PS") = PSRow("PS").ToString
+
+ DrPS("CodigoPS") = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=DdlPS.SelectedValue.ToEntero).FiltroPrimeroValor("CodigoPS")
+
DrPS("CveTipoPS") = CveTipoPS
DrPS("CveSATPS") = PSRow("CveSATPS").ToString.ToEntero
DrPS("SATClaveProductoServicio") = PSRow("SATClaveProductoServicio").ToString
@@ -17322,9 +17797,19 @@ Partial Class Compras_Compras
Dim CvePS As Integer = -1
Dim tPS As String = ""
+ Dim tCodigoPS As String = ""
CvePS = DdlPSAlias2.SelectedValue.ToEntero
- tPS = DdlPSAlias2.SelectedText
+
+ Dim dRowPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("")
+
+ If dRowPS IsNot Nothing Then
+ tPS = dRowPS("PS").ToString
+ tCodigoPS = dRowPS("CodigoPS").ToString
+ End If
+
+ 'tPS = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimeroValor("PS") 'DdlPSAlias2.SelectedText
+
If CvePS <= 0 Then
Alert("No se ha seleccionado el producto.", TipoMensaje.MsgAdvertencia)
Exit Sub
@@ -17350,6 +17835,7 @@ Partial Class Compras_Compras
TmpDT.Rows(HdnAliasInd.Value.ToEntero)("CvePS") = CvePS
TmpDT.Rows(HdnAliasInd.Value.ToEntero)("PS") = tPS
+ TmpDT.Rows(HdnAliasInd.Value.ToEntero)("CodigoPS") = tCodigoPS
TmpDT.Rows(HdnAliasInd.Value.ToEntero)("CveUM") = DdlUnidadAlias.SelectedValue.ToEntero
TmpDT.Rows(HdnAliasInd.Value.ToEntero)("UM") = DdlUnidadAlias.SelectedItem.Text
TmpDT.Rows(HdnAliasInd.Value.ToEntero)("CveClasificacion") = HdnPSAliasCveClasificacion.Value.ToEntero
@@ -17367,6 +17853,7 @@ Partial Class Compras_Compras
For Each drt As DataRow In TmpDT.Select($"PS ='{TxtPSAlias.Text.Trim}' and ISNULL(CvePS,0) = 0")
drt("CvePS") = CvePS
drt("PS") = tPS
+ drt("CodigoPS") = tCodigoPS
drt("CveUM") = DdlUnidadAlias.SelectedValue.ToEntero
drt("UM") = DdlUnidadAlias.SelectedItem.Text
drt("CveClasificacion") = HdnPSAliasCveClasificacion.Value.ToEntero
@@ -19014,6 +19501,7 @@ Partial Class Compras_Compras
dr("CveMetodoInventario") = 1
Next
CargaGvInv()
+
End If
ElseIf DdlTipoComprobante.SelectedValue.Contiene("Fac") Then
If DdlTipoCompra.SelectedValue.Contiene("14") Then 'Recolección
@@ -19029,9 +19517,24 @@ Partial Class Compras_Compras
End If
End If
+ If DdlTipoCompra.SelectedValue = "15" Then 'Remisión de nota de crédito
+
+ If DdlTipoComprobante.SelectedValue = "NC" Then
+ CargaDdlRemisionNotaCredito()
+ Else
+ Alert("Para elegir Remisión de Nota de Crédito el tipo de documento debe de ser Nota de Crédito.", TipoMensaje.MsgAdvertencia)
+ DdlRemisionNotaCredito.SelectedValueExist(-1)
+ DdlTipoCompra.SelectedValueExist(-1)
+ End If
+
+
+ End If
+
End Sub
+
+
#End Region
#Region "GARANTÍAS"
@@ -19318,12 +19821,12 @@ Partial Class Compras_Compras
End Sub
Public Sub LblProveedor_OnClick(sender As Object, e As EventArgs) Handles LblProveedor.Click
- If CveTipoConcepto = 1 Then
- LblProveedor.Text = "Acreedor:"
- CveTipoConcepto = 2
- Else
+ If CveTipoConcepto = 2 Then
LblProveedor.Text = "Proveedor:"
CveTipoConcepto = 1
+ Else
+ LblProveedor.Text = "Acreedor:"
+ CveTipoConcepto = 2
End If
End Sub
@@ -20140,6 +20643,400 @@ Partial Class Compras_Compras
Protected Sub BtnRecolecciónAplicar_Click(sender As Object, e As EventArgs)
End Sub
+
+#Region "PRESUPUESTOS"
+
+ '''
+ ''' Valida si hay presupuesto, Se valida con base en CveSubProyecto, CveClasificacion y CveTipoGasto
+ '''
+ '''
Int 1 Indica que es una valiadcion al agregar el Producto o servicio 2 Indica validacion General antes de guardae .
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Usado al validar Presupuesto cuando se agrega un producto o servicio
+ '''
Verdadero si hay presupuesto, Falso si no hay presupuesto.
+ Public Function ValidaPresupuesto(Opcion As Integer, Optional ValCveSubProyecto As Integer = -1, Optional ValSubProyecto As String = "", Optional ValCveClasificacion As Integer = -1, Optional ValClasificacion As String = "",
+ Optional ValCveTipoGasto As Integer = -1, Optional ValTipoGasto As String = "", Optional ValImporte As Decimal = 0) As Boolean
+
+ Dim respuesta As Boolean = False
+
+ If DdlTipoComprobante.SelectedValue <> "Fac" Then
+ Return True
+ End If
+
+
+
+ If UsuarioActual.Empresa.Funcionalidad(532) = "1" Then
+
+ Dim ObjCon As New ClsContratos
+ Dim CvePresupuesto As Integer = 0
+ Dim Autorizado As Double = 0
+ Dim Ejercido As Double = 0
+
+ If ObjCon.GetPresupuestosResumen(UsuarioActual.CveEmpresa, -1, 1) Then
+
+ Dim FechaCompra As Date = TxtFecha.Text.ToDate
+
+ Dim resultadosFiltrados = From row In ObjCon.DtResultados.AsEnumerable()
+ Where FechaCompra >= row.Field(Of Date)("FechaInicio") AndAlso
+ FechaCompra <= row.Field(Of Date)("FechaFin")
+ Select row
+
+
+
+
+
+ 'Dim dataTable As New DataTable
+ 'Dim rowFilter As String = ""
+ 'Dim orderby As String = ""
+ 'Dim groupByColumns As String()() = {New String() {"SubProyecto", "CveSubProyecto", "Clasificacion", "CveClasificacion", "TipoGasto", "CveTipoGasto"}}
+ 'Dim sumColumns As String() = {"Total"}
+
+
+ 'Dim resultDataTable As DataTable = GroupByDT(TmpDT, rowFilter, orderby, groupByColumns, sumColumns)
+
+
+
+
+
+ If resultadosFiltrados.Count > 0 Then
+
+
+
+ ''.TotalSum = Group.Sum(Function(r) r.Field(Of Decimal)("Total"))
+ If Opcion = 1 Then
+
+
+ Dim tieneRegistrosConCveSubProyecto As Boolean = resultadosFiltrados.Any(Function(row) CType(row("CveSubProyecto"), Integer) = ValCveSubProyecto)
+
+ If tieneRegistrosConCveSubProyecto Then
+ Dim saldoTotal As Decimal = (From row In resultadosFiltrados
+ Where row.Field(Of Integer)("CveSubProyecto") = ValCveSubProyecto AndAlso
+ row.Field(Of Integer)("CveClasificacion") = ValCveClasificacion AndAlso
+ row.Field(Of Integer)("CveTipoGasto") = ValCveTipoGasto
+ Select row.Field(Of Decimal)("Saldo")).Sum()
+ If saldoTotal > 0 Then
+
+ Dim TotalAcumuladoTabla As Decimal = (TmpDT.SUM("Total", $" CveSubProyecto = {ValCveSubProyecto} AND CveClasificacion = {ValCveClasificacion} AND CveTipoGasto = {ValCveTipoGasto} "))
+ Dim Diferencia As Decimal = saldoTotal - TotalAcumuladoTabla - ValImporte
+
+ If (Diferencia) < 0 Then
+ Alert($"No hay presupuesto disponible en el subproyecto
{ValSubProyecto} con la clasificación
{ValClasificacion}, Tipo de gasto
{ValTipoGasto}. Se excede por
{Math.Abs(Diferencia).FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+
+ Else
+ respuesta = True
+ End If
+
+ Else
+ Alert($"No hay presupuesto disponible en el subproyecto
{ValSubProyecto} con la clasificación
{ValClasificacion}, Tipo de gasto
{ValTipoGasto} ", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ End If
+ Else
+ respuesta = True
+ End If
+
+
+ Else
+
+ 'Dim EnumAgrupado = (From row In TmpDT.AsEnumerable()
+ ' Group row By
+ ' SubProyecto = row.Field(Of String)("SubProyecto"),
+ ' CveSubProyecto = row.Field(Of Integer)("CveSubProyecto"),
+ ' Clasificacion = row.Field(Of String)("Clasificacion"),
+ ' CveClasificacion = row.Field(Of Integer)("CveClasificacion"),
+ ' TipoGasto = row.Field(Of String)("TipoGasto"),
+ ' CveTipoGasto = row.Field(Of Integer)("CveTipoGasto")
+ ' Into Group
+ ' Select New With {
+ ' .SubProyecto = SubProyecto,
+ ' .CveSubProyecto = CveSubProyecto,
+ ' .Clasificacion = Clasificacion,
+ ' .CveClasificacion = CveClasificacion,
+ ' .CveTipoGasto = CveTipoGasto,
+ ' .TipoGasto = TipoGasto,
+ ' .TotalSum = Group.Sum(Function(r) If(IsDBNull(r("Total")), 0D, Convert.ToDecimal(r("Total"))))
+ ' }).ToList()
+
+ Dim EnumAgrupado = (
+ From row In TmpDT.AsEnumerable()
+ Group row By
+ SubProyecto = If(row.IsNull("SubProyecto"), String.Empty, row.Field(Of String)("SubProyecto")),
+ CveSubProyecto = If(row.IsNull("CveSubProyecto"), -1, row.Field(Of Integer)("CveSubProyecto")),
+ Clasificacion = If(row.IsNull("Clasificacion"), String.Empty, row.Field(Of String)("Clasificacion")),
+ CveClasificacion = If(row.IsNull("CveClasificacion"), -1, row.Field(Of Integer)("CveClasificacion")),
+ TipoGasto = If(row.IsNull("TipoGasto"), String.Empty, row.Field(Of String)("TipoGasto")),
+ CveTipoGasto = If(row.IsNull("CveTipoGasto"), -1, row.Field(Of Integer)("CveTipoGasto"))
+ Into Group
+ Select New With {
+ .SubProyecto = SubProyecto,
+ .CveSubProyecto = CveSubProyecto,
+ .Clasificacion = Clasificacion,
+ .CveClasificacion = CveClasificacion,
+ .CveTipoGasto = CveTipoGasto,
+ .TipoGasto = TipoGasto,
+ .TotalSum = Group.Sum(Function(r) If(IsDBNull(r("Total")), 0D, Convert.ToDecimal(r("Total"))))
+ }
+ ).ToList()
+
+
+ For Each item In EnumAgrupado
+
+
+ Dim tieneRegistrosConCveSubProyecto As Boolean = resultadosFiltrados.Any(Function(row) CType(row("CveSubProyecto"), Integer) = item.CveSubProyecto)
+
+ If tieneRegistrosConCveSubProyecto Then
+ Dim saldoTotal As Decimal = (From row In resultadosFiltrados
+ Where row.Field(Of Integer)("CveSubProyecto") = item.CveSubProyecto AndAlso
+ row.Field(Of Integer)("CveClasificacion") = item.CveClasificacion
+ Select row.Field(Of Decimal)("Saldo")).Sum()
+ If saldoTotal > 0 Then
+
+ Dim Diferencia As Decimal = saldoTotal - item.TotalSum
+
+ If (Diferencia) < 0 Then
+ Alert($"No hay presupuesto disponible en el subproyecto
{item.SubProyecto} con la clasificación
{item.Clasificacion}, Tipo de gasto
{item.TipoGasto}. Se excede por
{Math.Abs(Diferencia).FormatoNumero}", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ Exit For
+ Else
+ respuesta = True
+ End If
+
+ Else
+ Alert($"No hay presupuesto disponible en el subproyecto
{item.SubProyecto} con la clasificación
{item.Clasificacion}, Tipo de gasto
{item.TipoGasto}", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ Exit For
+ End If
+ Else
+ respuesta = True
+ End If
+ Next
+ End If
+
+
+
+
+ Else
+ 'Alert("No hay presupuestos.", TipoMensaje.MsgAdvertencia)
+ respuesta = True
+ End If
+
+
+ Else
+ 'Alert("No hay presupuestos.", TipoMensaje.MsgAdvertencia)
+ respuesta = False
+ End If
+
+ ObjCon.Dispose()
+
+
+
+ Else
+ respuesta = True
+ End If
+
+
+ Return respuesta
+
+ End Function
+
+#End Region
+
+
+#Region "PRONTO PAGO"
+
+ Public Function GeneraRemisionsNotadeCredito(ByRef trasaccion As SqlTransaction, CveCompraRegistrada As Integer) As Boolean
+ 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 = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS_RNC).FiltroPrimero("")
+ Dim CveSubProyectoPrincipal As Integer = 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 False
+ End If
+
+
+ If Not CveSubProyectoPrincipal > 0 Then
+ Alert("No esta definido el Sub Proyecto.", TipoMensaje.MsgAdvertencia)
+ Return False
+ End If
+
+ SubProyecto = GlobalDTSubProyectos(-1, CveSubProyectoPrincipal, UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto")
+
+ If PSRow IsNot Nothing Then
+
+ Dim CompraRNC As New ClsCompraManagerCompras("", ClsCompraManagerCompras.EnumCargaCompra.SinXML, GlobalDTTiposGastos(UsuarioActual.CveEmpresa), UsuarioActual)
+ CompraRNC.CveFactura = -1
+ CompraRNC.CveProveedor = DdlProveedor.SelectedValue.ToEntero
+ CompraRNC.CveTipoProveedor = CveTipoProveedor
+ CompraRNC.CveTipoConceptoProveedor = CveTipoConcepto
+ CompraRNC.TipoCompra = ClsCompraManagerCompras.EnumTipoCompra.Sin_definir
+ CompraRNC.IEPSGasto = False
+ CompraRNC.Descripcion = $"Remisión Nota de Crédito {TxtDescripcion.Text}"
+ CompraRNC.NombreProveedor = DdlProveedor.SelectedItem.Text
+ CompraRNC.Fecha = TxtFecha.Text.ToDate
+ CompraRNC.CveMoneda = DdlMoneda.SelectedValue.ToEntero
+ CompraRNC.Serie = TxtSerie.Text
+ CompraRNC.Folio = TxtFolio.Text
+ CompraRNC.CveCompraAmortizacion = CveCompraRegistrada
+
+
+
+
+ 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("PS").ToString
+ Dim CveUM As Integer = PSRow("CveUnidadMedida").ToString.ToEntero
+ Dim UM As String = PSRow("UnidadMedida").ToString
+ Dim IVARNC As Decimal = (ImporteRNC * PorcentajeIVA).RoundSQL(2)
+
+
+ CompraRNC.ConfiguraRegistroRapidoRNC(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNC, (ImporteRNC + IVARNC), IVARNC)
+ If Not CompraRNC.AddCompraRNC(trasaccion) Then
+ respuesta = False
+ End If
+
+ If respuesta Then
+
+ Dim CompraRNCProntoPAgo As New ClsCompraManagerCompras("", ClsCompraManagerCompras.EnumCargaCompra.SinXML, GlobalDTTiposGastos(UsuarioActual.CveEmpresa), UsuarioActual)
+ CompraRNCProntoPAgo.CveFactura = -1
+ CompraRNCProntoPAgo.CveProveedor = DdlProveedor.SelectedValue.ToEntero
+ CompraRNCProntoPAgo.CveTipoProveedor = CveTipoProveedor
+ CompraRNCProntoPAgo.CveTipoConceptoProveedor = CveTipoConcepto
+ CompraRNCProntoPAgo.TipoCompra = ClsCompraManagerCompras.EnumTipoCompra.Sin_definir
+ CompraRNCProntoPAgo.IEPSGasto = False
+ CompraRNCProntoPAgo.Descripcion = $"Remisión Nota de Crédito {TxtDescripcion.Text}"
+ CompraRNCProntoPAgo.NombreProveedor = DdlProveedor.SelectedItem.Text
+ CompraRNCProntoPAgo.Fecha = TxtFecha.Text.ToDate
+ CompraRNCProntoPAgo.CveMoneda = DdlMoneda.SelectedValue.ToEntero
+ CompraRNCProntoPAgo.Serie = $"{TxtSerie.Text}_P"
+ CompraRNCProntoPAgo.Folio = $"{TxtFolio.Text}_P"
+ CompraRNCProntoPAgo.CveCompraAmortizacion = CveCompraRegistrada
+ Dim IVARNCProntoPago As Decimal = (ImporteRNC * PorcentajeIVA).RoundSQL(2)
+
+ CompraRNCProntoPAgo.ConfiguraRegistroRapidoRNC(CvePS_RNC, CveUM, UM, CveClasificacion, Clasificacion, PS, CveSubProyectoPrincipal, SubProyecto, ImporteRNCProntoPago, (ImporteRNCProntoPago + IVARNCProntoPago), IVARNCProntoPago)
+ If Not CompraRNCProntoPAgo.AddCompraRNC(trasaccion) Then
+ respuesta = False
+ End If
+
+ End If
+
+
+ End If
+
+
+
+ Return respuesta
+ End Function
+
+
+ Public Property VincularOcProntoPago As Boolean
+ Get
+ If ViewState("VincularOcProntoPago") Is Nothing Then
+ ViewState("VincularOcProntoPago") = False
+ End If
+ Return Boolean.Parse(ViewState("VincularOcProntoPago").ToString)
+ End Get
+ Set(value As Boolean)
+ ViewState("VincularOcProntoPago") = value
+ End Set
+ End Property
+
+ Public Function ConfirmaVinculacionOCProntoPago() As Boolean
+
+ If VincularOcProntoPago Then
+ Return True
+ Else
+
+ If ImporteRNCProntoPago > 0 Then
+ LblModalConfirmaVinculacionProntoPago.Text = $"Existe una diferencia de ${(ImporteRNC + ImporteRNCProntoPago).ToString("###,###,###.00")} entre la compra y la Orden de Compra, se generaran dos Remisiones de Nota de Crédito una por descuento de ${ImporteRNC.ToString("###,###,###.00")} y otra por pronto pago de ${ImporteRNCProntoPago.ToString("###,###,###.00")}"
+ Else
+ LblModalConfirmaVinculacionProntoPago.Text = $"Existe una diferencia de ${(ImporteRNC).ToString("###,###,###.00")} entre la compra y la Orden de Compra, se generara una Remision de Nota de Crédito una por descuento de ${ImporteRNC.ToString("###,###,###.00")}"
+ End If
+
+ RegistraScript("$('#DVModalConfirmaVinculacionProntoPago').modal('show');")
+ UpModalConfirmaVinculacionProntoPago.Update()
+
+ Return False
+ End If
+
+ End Function
+
+ Protected Sub BtnModalConfirmaVinculacionProntoPago_Click(sender As Object, e As EventArgs)
+
+ RegistraScript("$('#DVModalConfirmaVinculacionProntoPago').modal('hide');")
+ VincularOcProntoPago = True
+ BtnVincularOC_Click(Nothing, Nothing)
+
+ End Sub
+
+ Private Sub CargaDdlRemisionNotaCredito()
+ DvDdlRemisionNotaCredito.Visible = True
+ DTRemisionesNotaDeCredito = New DataTable
+
+ Dim ObjCompras As New ClsCompras
+
+ If ObjCompras.GetNotasCreditoRep(DdlProveedor.SelectedValue.ToEntero, 0, "-1", "-1", UsuarioActual.CveEmpresa, 2) Then
+ DdlRemisionNotaCredito.DataSource = ObjCompras.DtResultados
+ DTRemisionesNotaDeCredito = ObjCompras.DtResultados
+ Else
+ Alert("Ocurrió un error al obtener el catálogo de Notas de Crédito", Extensiones.TipoMensaje.MsgError)
+ End If
+
+ ObjCompras.Dispose()
+
+ DdlRemisionNotaCredito.DataBind()
+ DdlRemisionNotaCredito.Items.Insert(0, New ListItem("-", "-1"))
+
+ UpEstatus.Update()
+
+ End Sub
+ Protected Sub DdlRemisionNotaCredito_SelectedIndexChanged(sender As Object, e As EventArgs)
+
+ ImporteRNCSaldar = 0
+ SerieFolioProntoPago = ""
+ TipoCambioProntoPago = 1
+ FechaProntoPago = MinFecha
+ CveMonedaProntoPago = 1
+
+ If DdlRemisionNotaCredito.SelectedValue.ToEntero > 0 Then
+ ImporteRNCSaldar = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Saldo", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal
+ SerieFolioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("SerieFolio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ")
+ TipoCambioProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("TipoCambio", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToDecimal
+ FechaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("Fecha", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToString.ToDate
+ CveMonedaProntoPago = DTRemisionesNotaDeCredito.FiltroPrimeroValor("CveMoneda", $" CveCompra = {DdlRemisionNotaCredito.SelectedValue.ToEntero} ").ToEntero
+ End If
+
+ ''Alert(ImporteRNCSaldar.ToString)
+ 'CompraPago.SerieFolio = Gvr.DataKey("SerieFolio")
+ 'CompraPago.TC = Gvr.DataKey("TipoCambio").ToDecimal
+ 'CompraPago.Fecha = Gvr.DataKey("Fecha").ToDate
+ 'CompraPago.CveMoneda = Gvr.DataKey("CveMoneda").ToEntero
+
+ 'CompraPago.Total = Gvr.DataKey("Total").ToDecimal
+ 'CompraPago.CveTipoConceptoProveedor = CveTipoConcepto
+
+
+ End Sub
+
+#End Region
+
+
+
+
+
End Class
@@ -20150,3 +21047,2106 @@ Public Class MMensajeDevolucion
Public Property Total As Decimal
End Class
+
+
+Public Class ClsCompraManagerCompras
+
+ Enum EnumCargaCompra
+ DesdeXML
+ DesdeArchivo
+ SinXML
+ End Enum
+ Public Enum EnumCFDIVersion
+ v32
+ V33
+ V40
+ End Enum
+ Public Enum EnumTipoCompra
+ Sin_definir = -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 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 ConceptosRetenciones
+ Get
+ Dim Ret As New 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 ConceptosRetenciones
+ Get
+ Dim Ret As New 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 ConceptosRetenciones
+ Get
+ Dim Ret As New 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.Sin_definir
+ 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 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
+
+ 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 = 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 = 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))
+ End If
+ '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
+
+ 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(-1, CveSubProyecto, CveEmpresa:=UsuarioActual.CveEmpresa).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 ConfiguraRegistroRapidoRNC(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, Total As Decimal, IVA 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
+ Me.IVA = IVA
+ Me.Total = Total
+
+
+ Dim dRowSubProyecto As DataRow = GlobalDTSubProyectos(-1, CveSubProyecto, CveEmpresa:=UsuarioActual.CveEmpresa).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, SubTotal, 0, 0, 0, 0, 0, 0)
+
+ '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.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") = (IVA * Total).RoundSQL
+ Row("IVAPorcentaje") = IVA
+ End If
+
+ Row("RetIVA") = (RetIVA * Total).RoundSQL
+ Row("RetIVAPorcentaje") = RetIVA
+ Row("RetISR") = (RetISR * Total).RoundSQL
+ Row("RetISRPorcentaje") = RetISR
+ Row("IEPSPS") = (IEPSPS * Total).RoundSQL
+ Row("IEPSPSPorcentaje") = IEPSPS
+ 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(8)
+ 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() As Boolean
+
+ If Not AjustesValidacion() Then Return False
+
+ Dim respuesta As Boolean = True
+ Dim ObjCompras As New ClsCompras
+ Dim ObjConta As New ClsContabilidad(ObjCompras.IniciaTransacSQL())
+
+ If Not AddPrepolizaCabecera(ObjConta) Then
+ respuesta = False
+ End If
+
+ If respuesta AndAlso ObjCompras.AddCompra(If(Me.TipoComprobante = "I", "Fac", "NC"), 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) 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 Then
+ If Not ObjCompras.UpdateCompraFactura(Me.CveCompra, Me.CveFactura, Me.Serie, Me.Folio) Then respuesta = False
+ End If
+
+ If respuesta Then
+ ObjCompras.Commit()
+ Else
+ ObjCompras.RollBack()
+ End If
+
+ ObjCompras.Dispose()
+ ObjConta.Dispose()
+
+ Return respuesta
+ End Function
+
+
+ Public Function AddCompraRNC(ByRef transacccion As SqlTransaction) As Boolean
+
+ If Not AjustesValidacion() Then Return False
+
+ Dim respuesta As Boolean = True
+ Dim ObjCompras As New ClsCompras(transacccion)
+ Dim ObjConta As New ClsContabilidad(transacccion)
+
+ If Not AddPrepolizaCabecera(ObjConta) Then
+ respuesta = False
+ End If
+
+ If respuesta AndAlso ObjCompras.AddCompra("RNC", 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) 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, True) Then respuesta = False
+ End If
+
+ If respuesta AndAlso ObjConta.ValidacionesPrePoliza(CvePrePoliza, UsuarioActual, 4) Then
+ If ObjConta.ValorPolizaDescuadre > 0 Then
+ Errores.AppendLine($"Compras/RNC | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}.")
+ GuardaLogAD($"Compras/RNC | Error{ObjConta.MensajePolizaDescuadre} Diferencia{ObjConta.ValorDiferencia} | CvePrePoliza:{CvePrePoliza}", "LogPrePolizas")
+ respuesta = False
+ End If
+ End If
+
+ 'If respuesta Then
+ ' If Not ObjCompras.UpdateCompraFactura(Me.CveCompra, Me.CveFactura, Me.Serie, Me.Folio) Then respuesta = False
+ 'End If
+
+ 'If respuesta Then
+ ' ObjCompras.Commit()
+ 'Else
+ ' ObjCompras.RollBack()
+ 'End If
+
+ 'ObjCompras.Dispose()
+ 'ObjConta.Dispose()
+
+ Return respuesta
+ End Function
+
+
+ Private Function AddPrepolizaCabecera(ByRef ObjConta As ClsContabilidad, Optional ES_RNC As Boolean = False) 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 ES_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 ES_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, True, 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
\ No newline at end of file
diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb
index 2e73e1c62..5810f81d3 100644
--- a/Compras/PopUpVerFactura.aspx.vb
+++ b/Compras/PopUpVerFactura.aspx.vb
@@ -10,6 +10,7 @@ Imports iText.Barcodes.Dmcode
Imports Microsoft.Reporting.WebForms
Imports Modelos
Imports Stimulsoft.Base.Context
+Imports ZXing
Partial Class PopUpVerFactura
@@ -1417,7 +1418,11 @@ Partial Class PopUpVerFactura
'IMPRIME DEPOSITOS CAJA
If UrlParametros("OP").ToString = "DC" Then
If UrlParametros("CVEIE") IsNot Nothing AndAlso UrlParametros("CVEIE").ToString.ToEntero > 0 Then
- CargaDepositosCaja(UrlParametros("CVEIE").ToString.ToEntero, UrlParametros("CUENTACAJA").ToString, UrlParametros("CUENTADEPO").ToString)
+ Dim TipoPago As String = ""
+ If UrlParametros("TIPOPAGO") IsNot Nothing Then
+ TipoPago = UrlParametros("TIPOPAGO").ToString()
+ End If
+ CargaDepositosCaja(UrlParametros("CVEIE").ToString.ToEntero, UrlParametros("CUENTACAJA").ToString, UrlParametros("CUENTADEPO").ToString, TipoPago)
End If
End If
@@ -1561,17 +1566,24 @@ Partial Class PopUpVerFactura
#Region "OP = CORT - IMPRIMIR CORTE"
Private Sub ImprimeCorte(CveCorte As Integer, Formato As String, Optional CveSubProyecto As Integer = -1)
- Dim ObjVenta As New ClsVentas
- Dim ObjPuntoVenta As New ClsPuntoVenta
Dim DtCortesVentasResumen As DataTable = Nothing
Dim DtCortesVentas As DataTable = Nothing
+ Dim DtReporteCorte As DataTable = Nothing
+ Dim DtIngresosRetiros As DataTable = Nothing
+
Dim Fecha As String = "", Nombre As String = ""
+ Dim OpcionDetallado As Integer = 1
+ If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then OpcionDetallado = 2
+
+ Dim ObjVenta As New ClsVentas
+ Dim ObjPuntoVenta As New ClsPuntoVenta
+
If ObjVenta.GetCortesDetalleVentasResumen(CveCorte, CveSubProyecto, UsuarioActual.CveEmpresa) Then
- DtCortesVentasResumen = ObjVenta.DtResultados
+ DtCortesVentasResumen = ObjVenta.DtResultados.Copy()
End If
- If ObjPuntoVenta.GetCortesDetalleVentas(CveCorte, CveSubProyecto, UsuarioActual.CveEmpresa) Then
- DtCortesVentas = ObjPuntoVenta.DtResultados
+ If ObjPuntoVenta.GetCortesDetalleVentas(CveCorte, CveSubProyecto, UsuarioActual.CveEmpresa, OpcionDetallado) Then
+ DtCortesVentas = ObjPuntoVenta.DtResultados.Copy()
If DtCortesVentas.Rows.Count > 0 Then
Dim RowInfo As DataRow = DtCortesVentas.FiltroPrimero("CveVenta > 0")
@@ -1580,27 +1592,201 @@ Partial Class PopUpVerFactura
End If
End If
+ If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then
+ If ObjPuntoVenta.GetVta_ReporteCortes(UsuarioActual.CveEmpresa, MinFecha, MaxFecha, CveSubProyecto, CveCorte:=CveCorte) Then
+ DtReporteCorte = ObjPuntoVenta.DtResultados.FiltraParametros("CveCorte > 0")
+ End If
+
+ If ObjPuntoVenta.GetVta_MovimientosCajas(CveCorte, -1) Then
+ DtIngresosRetiros = ObjPuntoVenta.DtResultados.Copy()
+ End If
+ End If
+
ObjVenta.Dispose()
ObjPuntoVenta.Dispose()
+
Dim FechaCorte As String = $"
Fecha fin: {Fecha}"
Dim Usuario As String = $"
Usuario: {Nombre}"
If DtCortesVentas.Rows.Count > 0 Or DtCortesVentasResumen.Rows.Count > 0 Then
+ Dim lrds As New List(Of ReportDataSource)
+
+ Dim DtMetodosPago = DtCortesVentasResumen.Copy()
+
+ 'MOVER EL VENTAS CREDITO DE LA DERECHA A LA IZQUIERDA EN EL PDF
+ If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then
+ DtMetodosPago = DtCortesVentasResumen.FiltraParametros("MetodoPago <> 'Crédito'")
+ End If
+
+ Dim DirFormato As String = "Empresas/Grales/Formatos/RepCortes.rdlc"
+ If File.Exists(UsuarioActual.Empresa.Ruta + "\Formatos\RepCortes.rdlc") Then
+ DirFormato = UsuarioActual.Empresa.Ruta + "\Formatos\RepCortes.rdlc"
+ End If
+
Dim params As New List(Of ReportParameter)
params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa))
params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
params.Add(New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString))
params.Add(New ReportParameter("AgrupoPor", $"{FechaCorte}{Usuario}"))
params.Add(New ReportParameter("LogoPath", RutaImagenLogo))
- Dim lrds As New List(Of ReportDataSource)
- Dim rds As New ReportDataSource With {.Name = "DataSet1", .Value = DtCortesVentasResumen}
+
+ If UsuarioActual.Empresa.Funcionalidad(109) = "1" Then
+ If DtReporteCorte IsNot Nothing Then
+ Dim DtTT = GenerateTransposedTable(DtReporteCorte)
+ Dim DtDatosVentas As New DataTable()
+ DtDatosVentas.Columns.Add(New DataColumn("Orden", GetType(Integer)))
+ DtDatosVentas.Columns.Add(New DataColumn("Columna", GetType(String)))
+ DtDatosVentas.Columns.Add(New DataColumn("Importe", GetType(Decimal)))
+
+ Dim DtDatosCajas As DataTable = DtDatosVentas.Copy()
+
+ For Each row As DataRow In DtTT.Rows
+ Dim Total = row(1).ToString()
+ If IsNumeric(Total) Then
+ Dim TipoTabla As Integer = 0
+
+ Dim Orden As Integer = 0
+ Dim rowData = DtDatosVentas.NewRow()
+ Select Case row(0).ToString()
+ Case "ImporteInicial"
+ rowData("Columna") = "Importe Inicial"
+ Orden = 1
+ TipoTabla = 2
+ Case "VentasCorte"
+ rowData("Columna") = "Total Ventas"
+ Orden = 2
+ TipoTabla = 1
+ Case "NotasCredito"
+ rowData("Columna") = "N.C."
+ Orden = 3
+ TipoTabla = 1
+ Case "VentasCredito"
+ rowData("Columna") = "Ventas Crédito"
+ Orden = 4
+ TipoTabla = 1
+ Case "VentaTotalIngreso"
+ rowData("Columna") = "Ventas Ingreso"
+ Orden = 4
+ TipoTabla = 1
+ Case "VentaTotalRemision"
+ rowData("Columna") = "Ventas Remisiones"
+ Orden = 4
+ TipoTabla = 1
+ 'Case "TotalEfectivo"
+ ' rowData("Columna") = "Total Efectivo"
+ 'Case "TotalCheque"
+ ' rowData("Columna") = "Total Cheque"
+ 'Case "TarjDebito"
+ ' rowData("Columna") = "Tarj. Débito"
+ 'Case "TarjCredito"
+ ' rowData("Columna") = "Tarj. Crédito"
+ 'Case "VentasTransferencia"
+ ' rowData("Columna") = "Total Transf."
+ Case "TotalRetiros"
+ rowData("Columna") = "Total Retiro"
+ Orden = 6
+ TipoTabla = 2
+ Case "TotalIngresos"
+ rowData("Columna") = "Total Ingreso"
+ Orden = 5
+ TipoTabla = 2
+ Case "Devoluciones"
+ rowData("Columna") = "Devoluciones"
+ Orden = 7
+ TipoTabla = 1
+ 'Case "SaldoAnteriorAplicado"
+ ' rowData("Columna") = "Saldo Aplicado"
+ ' Orden = 0
+ ' TipoTabla = 0
+ Case "TotalCaja"
+ rowData("Columna") = "Total Caja"
+ Orden = 9
+ TipoTabla = 2
+ Case Else
+ rowData("Columna") = row(0).ToString()
+ Orden = 0
+ End Select
+
+ rowData("Importe") = Total.ToDecimal()
+ rowData("Orden") = Orden
+
+ If TipoTabla = 1 Then
+ DtDatosVentas.Rows.Add(rowData.ItemArray)
+ ElseIf TipoTabla = 2 Then
+ DtDatosCajas.Rows.Add(rowData.ItemArray)
+ End If
+
+ If row(0).ToString() = "SaldoAnteriorAplicado" Then
+ Dim RowMP As DataRow = DtMetodosPago.NewRow
+ RowMP("MetodoPago") = "Saldo Aplicado"
+ RowMP("Importe") = Total.ToDecimal()
+
+ DtMetodosPago.Rows.Add(RowMP)
+ End If
+
+ End If
+ Next
+
+ Dim TotalCredito As Decimal = DtCortesVentasResumen.SUMD("Importe", "MetodoPago = 'Crédito'")
+
+ Dim rowCredito = DtDatosVentas.NewRow()
+ rowCredito("Columna") = "Crédito"
+ rowCredito("Importe") = TotalCredito
+ rowCredito("Orden") = 4
+ DtDatosVentas.Rows.Add(rowCredito)
+
+ Dim rds3 As New ReportDataSource With {.Name = "DataSet3", .Value = DtDatosVentas.FiltraParametros("Orden > 0", "Orden")}
+ lrds.Add(rds3)
+
+ Dim rds4 As New ReportDataSource With {.Name = "DataSet4", .Value = DtDatosCajas.FiltraParametros("Orden > 0", "Orden")}
+ lrds.Add(rds4)
+
+ Dim rds5 As New ReportDataSource With {.Name = "DataSet5", .Value = DtIngresosRetiros}
+ lrds.Add(rds5)
+
+ 'params.Add(New ReportParameter("VentasCorte", RowCorte("VentasCorte").ToString()))
+ 'params.Add(New ReportParameter("NotasCredito", RowCorte("NotasCredito").ToString()))
+ 'params.Add(New ReportParameter("NotasCredito", RowCorte("NotasCredito").ToString()))
+ 'params.Add(New ReportParameter("VentasCredito", RowCorte("VentasCorte").ToString()))
+ 'params.Add(New ReportParameter("VentasCorte", RowCorte("VentasCorte").ToString()))
+ 'params.Add(New ReportParameter("VentasCorte", RowCorte("VentasCorte").ToString()))
+ End If
+ End If
+
+ Dim rds As New ReportDataSource With {.Name = "DataSet1", .Value = DtMetodosPago}
lrds.Add(rds)
Dim rds2 As New ReportDataSource With {.Name = "DataSet2", .Value = DtCortesVentas}
lrds.Add(rds2)
- ImprimirPDF("Empresas/Grales/Formatos/RepCortes.rdlc", lrds, params, "ReporteCortes", Formato)
+
+
+ ImprimirPDF(DirFormato, lrds, params, "ReporteCortes", Formato)
End If
End Sub
+ Private Function GenerateTransposedTable(ByVal inputTable As DataTable) As DataTable
+ Dim outputTable As DataTable = New DataTable()
+ outputTable.Columns.Add(inputTable.Columns(0).ColumnName.ToString())
+
+ For Each inRow As DataRow In inputTable.Rows
+ Dim newColName As String = inRow(0).ToString()
+ outputTable.Columns.Add(newColName)
+ Next
+
+ For rCount As Integer = 1 To inputTable.Columns.Count - 1
+ Dim newRow As DataRow = outputTable.NewRow()
+ newRow(0) = inputTable.Columns(rCount).ColumnName.ToString()
+
+ For cCount As Integer = 0 To inputTable.Rows.Count - 1
+ Dim colValue As String = inputTable.Rows(cCount)(rCount).ToString()
+ newRow(cCount + 1) = colValue
+ Next
+
+ outputTable.Rows.Add(newRow)
+ Next
+
+ Return outputTable
+ End Function
+
#End Region
#Region " OP = FACTURA - IMPRIME COMPRA"
@@ -2042,17 +2228,10 @@ Partial Class PopUpVerFactura
Dim RutaCBB As String = $"{UsuarioActual.Empresa.Ruta}CBB\{SerieFolio}.jpg"
Dim ImagenCBB As New System.IO.FileInfo(RutaCBB)
-
-
- If Not ImagenCBB.Exists Then
- Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar()
- CBB.GenerarCBB(UsuarioActual.Empresa.RFC, ReceptorRFC, 1, FolioFiscal, RutaCBB)
- End If
-
+ If Not ImagenCBB.Exists Then GeneraQRSAT(UsuarioActual.Empresa.RFC, ReceptorRFC, 1, FolioFiscal, RutaGuardado:=RutaCBB)
Dim ImgCBB As String = $"file://{ImagenCBB.FullName}"
-
params.Add(New ReportParameter("FolioFiscal", FolioFiscal))
params.Add(New ReportParameter("CertificadoSAT", NoSerieCertificado))
params.Add(New ReportParameter("FechaCertificacion", FechaCertificacion.ToString))
@@ -2754,7 +2933,7 @@ Partial Class PopUpVerFactura
If CveConcepto = 33 Then ConceptoFormato = "ENTRADA MANUAL"
'IMPRESION ESPECIAL SALIDA DE COMPUPROVEEDORES y VSH
- If UsuarioActual.CveEmpresa.Contiene(72, 80, 119, 4, 145, 146, 186) Then
+ If UsuarioActual.CveEmpresa.Contiene(72, 80, 119, 4, 145, 146, 186, 193) Then
params.Add(New ReportParameter("Empresa", UsuarioActual.Empresa.Empresa))
params.Add(New ReportParameter("Concepto", ConceptoFormato))
params.Add(New ReportParameter("Almacen", Almacen))
@@ -2782,7 +2961,7 @@ Partial Class PopUpVerFactura
End If
- If UsuarioActual.CveEmpresa.Contiene(72, 80) Then
+ If UsuarioActual.CveEmpresa.Contiene(72, 80, 193) Then
params.Add(New ReportParameter("NombreProveedor", If(CveCompra > 0, dr("RazonSocial").ToString, "")))
params.Add(New ReportParameter("DireccionProveedor", If(CveCompra > 0, dr("Direccion").ToString, "")))
params.Add(New ReportParameter("RFCProveedor", If(CveCompra > 0, dr("RFC").ToString, "")))
@@ -2890,7 +3069,7 @@ Partial Class PopUpVerFactura
End If
- Case 3, 16, 37, 40, 45 ' S A L I D A S
+ Case 3, 16, 37, 40, 45, 47 ' S A L I D A S
'Dim Archivo As New System.IO.FileInfo(String.Format("Empresas/{0}/Formatos/Salidas.rdlc", 72))
'Dim Imagen As New System.IO.FileInfo(String.Format("Empresas/{0}/Logo.png", 72))
Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/Salidas.rdlc", UsuarioActual.Empresa.Ruta))
@@ -2903,6 +3082,8 @@ Partial Class PopUpVerFactura
concepto = "SALIDA VIRTUAL"
ElseIf CveConcepto = 45 Then
concepto = "SALIDA DE USADOS"
+ ElseIf CveConcepto = 47 Then
+ concepto = "SALIDA POR CAMBIO DE VIGENCIA"
Else
concepto = "SALIDA DE ALMACÉN POR RECONSTRUCCIÓN"
End If
@@ -5138,22 +5319,25 @@ Partial Class PopUpVerFactura
#End Region
#Region "OP = 'DC' - DEPOSITOS CAJA"
- Private Sub CargaDepositosCaja(CveIE As Integer, CuentaCaja As String, CuentaDeposito As String)
+ Private Sub CargaDepositosCaja(CveIE As Integer, CuentaCaja As String, CuentaDeposito As String, TipoPago As String)
Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/DepositoCaja.rdlc", UsuarioActual.Empresa.Ruta))
+ Dim Tabla As DataTable = Nothing
+
Dim ObjIE As New ClsBancos()
- Dim Tabla As DataTable
- ObjIE.GetBancosIEMovimientosDepositos(CveIE, UsuarioActual.CveEmpresa)
+ If ObjIE.GetBancosIEMovimientosDepositos(CveIE, UsuarioActual.CveEmpresa) Then
+ Tabla = ObjIE.DtResultados.Copy()
+ End If
+ ObjIE.Dispose()
-
- If ObjIE.DtResultados IsNot Nothing AndAlso ObjIE.DtResultados.Rows.Count > 0 Then
- Tabla = ObjIE.DtResultados
+ If Tabla IsNot Nothing AndAlso Tabla.Rows.Count > 0 Then
Dim params As New List(Of ReportParameter)
params.Add(New ReportParameter("Fecha", NowADS().ToDateTime.ToString))
- params.Add(New ReportParameter("FechaIE", ObjIE.DtResultados(0)("FechaDocumento").ToString.ToDate.ToShortDateString))
+ params.Add(New ReportParameter("FechaIE", Tabla(0)("FechaDocumento").ToString.ToDate.ToShortDateString))
params.Add(New ReportParameter("CuentaCaja", CuentaCaja))
params.Add(New ReportParameter("CuentaDeposito", CuentaDeposito))
+ params.Add(New ReportParameter("TipoPago", TipoPago))
If Archivo.Exists Then
params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
@@ -5164,11 +5348,6 @@ Partial Class PopUpVerFactura
End If
End If
-
-
-
- ObjIE.Dispose()
-
End Sub
#End Region
@@ -6039,6 +6218,13 @@ Partial Class PopUpVerFactura
ObjVentas.Dispose()
If DtPrecios IsNot Nothing Then
+
+ DtPrecios.Columns.Add(New DataColumn("CBBase64", GetType(String)))
+
+ For Each Row As DataRow In DtPrecios.Rows
+ Row("CBBase64") = Convert.ToBase64String(GeneraCodigoQR(Row("CodigoBarras").ToString(), 40, 150, 0, "CODE_39", True))
+ Next
+
Dim DirectorioArchivo As String = "Empresas/Grales/Formatos/Etiqueta.mrt"
If System.IO.File.Exists(UsuarioActual.Empresa.Ruta + "Formatos/Etiqueta.mrt") Then
DirectorioArchivo = UsuarioActual.Empresa.Ruta + "Formatos/Etiqueta.mrt"
@@ -6153,4 +6339,94 @@ Partial Class PopUpVerFactura
#End Region
+
+ Private Function GeneraCodigoQR(CodigoBarras As String, Alto As Integer, Largo As Integer, Margen As Integer, Formato As String, Optional PureBacode As Boolean = False) As Byte()
+
+ Dim barcodeWriter As New BarcodeWriter
+ Dim opciones As New ZXing.Common.EncodingOptions
+ Dim FormatoBar As New BarcodeFormat
+ 'Dim Respuesta As Byte()
+
+ opciones.Height = Alto
+ opciones.Width = Largo
+ opciones.Margin = Margen
+ opciones.PureBarcode = PureBacode
+ barcodeWriter.Options = opciones
+
+ Select Case Formato
+ Case "All_1D"
+ barcodeWriter.Format = BarcodeFormat.All_1D
+ Exit Select
+ Case "AZTEC"
+ barcodeWriter.Format = BarcodeFormat.AZTEC
+ Exit Select
+ Case "CODABAR"
+ barcodeWriter.Format = BarcodeFormat.CODABAR
+ Exit Select
+ Case "CODE_128"
+ barcodeWriter.Format = BarcodeFormat.CODE_128
+ Exit Select
+ Case "CODE_39"
+ barcodeWriter.Format = BarcodeFormat.CODE_39
+ Exit Select
+ Case "CODE_93"
+ barcodeWriter.Format = BarcodeFormat.CODE_93
+ Exit Select
+ Case "DATA_MATRIX"
+ barcodeWriter.Format = BarcodeFormat.DATA_MATRIX
+ Exit Select
+ Case "EAN_13"
+ barcodeWriter.Format = BarcodeFormat.EAN_13
+ Exit Select
+ Case "EAN_8"
+ barcodeWriter.Format = BarcodeFormat.EAN_8
+ Exit Select
+ Case "IMB"
+ barcodeWriter.Format = BarcodeFormat.IMB
+ Exit Select
+ Case "ITF"
+ barcodeWriter.Format = BarcodeFormat.ITF
+ Exit Select
+ Case "MAXICODE"
+ barcodeWriter.Format = BarcodeFormat.MAXICODE
+ Exit Select
+ Case "MSI"
+ barcodeWriter.Format = BarcodeFormat.MSI
+ Exit Select
+ Case "PDF_417"
+ barcodeWriter.Format = BarcodeFormat.PDF_417
+ Exit Select
+ Case "PLESSEY"
+ barcodeWriter.Format = BarcodeFormat.PLESSEY
+ Exit Select
+ Case "QR_CODE"
+ barcodeWriter.Format = BarcodeFormat.QR_CODE
+ Exit Select
+ Case "RSS_14"
+ barcodeWriter.Format = BarcodeFormat.RSS_14
+ Exit Select
+ Case "RSS_EXPANDED"
+ barcodeWriter.Format = BarcodeFormat.RSS_EXPANDED
+ Exit Select
+ Case "UPC_A"
+ barcodeWriter.Format = BarcodeFormat.UPC_A
+ Exit Select
+ Case "UPC_E"
+ barcodeWriter.Format = BarcodeFormat.UPC_E
+ Exit Select
+ Case "UPC_EAN_EXTENSION"
+ barcodeWriter.Format = BarcodeFormat.UPC_EAN_EXTENSION
+ Exit Select
+
+ End Select
+
+ Dim imgCod As Drawing.Bitmap = barcodeWriter.Write(CodigoBarras)
+ Dim memoriStream As New System.IO.MemoryStream
+ imgCod.Save(memoriStream, Drawing.Imaging.ImageFormat.Bmp)
+
+ 'Respuesta = Convert.ToBase64String(memoriStream.ToArray())
+
+ Return memoriStream.ToArray()
+
+ End Function
End Class
diff --git a/Compras/Proveedores.aspx b/Compras/Proveedores.aspx
index 22104def6..60c46cc56 100644
--- a/Compras/Proveedores.aspx
+++ b/Compras/Proveedores.aspx
@@ -344,8 +344,8 @@