-- timbrado de retención

This commit is contained in:
2024-08-29 08:17:32 -07:00
parent 991f70be6b
commit 0226bbc7ac
3 changed files with 650 additions and 0 deletions

View File

@@ -0,0 +1,134 @@
Option Strict On
Option Explicit On
Imports Extensiones
<Serializable>
Public Class CFDITimbreRetenciones
Private StrMsg As StringBuilder
Public Property Retencion As CFDIRetencion
Public Property CFDIRelacionados As CFDIRelacionados
Public Property Fecha As DateTime
Public Property Emisor As CFDIEmisor
Public Property Receptor As CFDIReceptorR
Public Property RetencionesImpuestos As List(Of CFDIImpuestosRetenidos)
Public Property ISRCorrespondiente As Decimal = 0
'Public Property Complementos As CFDIComplementos
Public Property Timbrado As Boolean
Public Property IStimbreFiniquito As Boolean
Public ReadOnly Property TotalOperacionRetenidos As Decimal
Get
Return (From c In RetencionesImpuestos
Where c.ImpuestoRetencion = "001"
Select c.MontoRetencion).Sum
End Get
End Property
Public ReadOnly Property TotalImpuestosGravado As Decimal
Get
Return (From c In RetencionesImpuestos
Where c.ImpuestoRetencion = "001"
Select c.MontoRetencion).Sum
End Get
End Property
Public ReadOnly Property TotalImpuestosRetenidos As Decimal
Get
Return (From c In RetencionesImpuestos
Where c.ImpuestoRetencion = "001"
Select c.MontoRetencion).Sum
End Get
End Property
Public ReadOnly Property TotalImpuestosExento As Decimal
Get
Return (From c In RetencionesImpuestos
Where c.ImpuestoRetencion = "001"
Select c.MontoRetencion).Sum
End Get
End Property
'Public ReadOnly Property Retenciones As List(Of CFDIRetenciones)
' Get
' Dim tRetorno As New List(Of CFDIRetenciones)
' Dim TRetenciones As New List(Of CFDIRetenciones)
' For Each c As CFDIConceptos In Conceptos
' For Each imp As CFDIConceptosImpuestos In c.Impuestos
' If imp.TrasladooRetencion = "R" Then
' tRetorno.Add(New CFDIRetenciones With {.Impuesto = imp.Impuesto, .Importe = imp.Importe})
' 'If imp.Impuesto = "001" Then RetencionISR += imp.Importe
' 'If imp.Impuesto = "002" Then RetencionIVA += imp.Importe
' 'If imp.Impuesto = "003" Then RetencionIEPS += imp.Importe
' End If
' Next
' Next
' If tRetorno.Count > 0 Then
' TRetenciones = tRetorno.GroupBy(Function(t) New With {Key t.Impuesto}) _
' .Select(Function(t) New CFDIRetenciones With {.Impuesto = t.Key.Impuesto,
' .Importe = t.Sum(Function(tt) tt.Importe)}) _
' .OrderBy(Function(x) x.Impuesto).ToList
' End If
' 'If RetencionISR > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "001", .Importe = RetencionISR})
' 'if RetencionIVA > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "002", .Importe = RetencionIVA})
' 'If RetencionIEPS > 0 Then Retorno.Add(New CFDIRetenciones With {.Impuesto = "003", .Importe = RetencionIEPS})
' tRetorno = Nothing
' Return TRetenciones
' End Get
'End Property
Public ReadOnly Property Mensaje As String
Get
Return StrMsg.ToString
End Get
End Property
Sub New()
StrMsg = New StringBuilder
Retencion = New CFDIRetencion
CFDIRelacionados = New CFDIRelacionados
Emisor = New CFDIEmisor
Receptor = New CFDIReceptorR
RetencionesImpuestos = New List(Of CFDIImpuestosRetenidos)
'Complementos = New CFDIComplementos
End Sub
Public Sub AddMsg(Msg As String)
StrMsg.AppendLine(Msg)
End Sub
End Class
<Serializable>
Public Class CFDIRetencion
Public Property Version As String
Public Property Serie As String = ""
Public Property Folio As String = ""
Public ReadOnly Property SerieFolio As String
Get
'sino tiene serie no pone el guión
Return If(Serie = "", Folio, $"{Serie}-{Folio}")
End Get
End Property
Public Property ClaveRetencion As String = "28"
Public Property Fecha As Date
Public Property LugarExpedicion As String = ""
Public Property PeriodoMesInicio As String = ""
Public Property PeriodoMesFin As String = ""
Public Property PeriodoEjercicio As Integer = 0
End Class
<Serializable>
Public Class CFDIReceptorR
Public Property RFCR As String
Public Property NombreDenominacionR As String
Public Property NacionalidadR As String = "Nacional"
Public Property DomicilioFiscalR As String = ""
End Class
Public Class CFDIImpuestosRetenidos
Public Property BaseRetencion As Decimal = 0.00D
Public Property ImpuestoRetencion As String = "" '001,002,003
Public Property MontoRetencion As Decimal = 0.00D ' propiedad utilizada solo para hacer ajustes, por default toma la multiplicación de base * tasa
Public Property TipoPagoRetencion As String = ""
Public Property BaseRetencionGravado As Decimal = 0.00D
Public Property BaseRetencionExento As Decimal = 0.00D
End Class

View File

@@ -0,0 +1,171 @@
<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="TimbraRetencion.aspx.vb" Inherits="General_TimbraRetencion" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CP" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Css" runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="E" runat="Server">
Timbrados de retenciones
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="HB" runat="Server">
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="H" runat="Server">
<asp:UpdatePanel ID="UpAcciones" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<li>
<asp:LinkButton ID="LnkAgregarRetencion" OnClick="LnkAgregarRetencion_Click" runat="server"><i class="fa fa-plus"></i>Agregar Retención</asp:LinkButton></li>
</li>
</ContentTemplate>
</asp:UpdatePanel>
<li>
<asp:LinkButton ID="LnkExportar" runat="server"><i class="fa fa-ad-excel"></i> Genera Excel</asp:LinkButton>
</li>
</asp:Content>
<asp:Content ID="Content6" ContentPlaceHolderID="C" runat="Server">
<div id="DModalRetencion" class="modal ADS fade" role="dialog">
<asp:UpdatePanel class="modal-dialog" runat="server" ID="UpModal" UpdateMode="Conditional">
<ContentTemplate>
<div class="modal-content">
<div class="modal-header ">
<h4 class="modal-title">
<asp:Literal ID="ltlMotititulo" Text="Retención" runat="server"> </asp:Literal></h4>
</div>
<div class="modal-body">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= DdlClaveRetencion.ClientID.ToString()%>">Clave Retención:</label>
<asp:DropDownList ID="DdlClaveRetencion" runat="server" CssClass="select2me">
<asp:ListItem Text="01-Servicios profesionales" Value="01"></asp:ListItem>
<asp:ListItem Text="14-Dividendos o utilidades distribuidas" Value="14"></asp:ListItem>
<asp:ListItem Text="28-Pagos y retenciones a Contribuyentes del RIF" Value="28"></asp:ListItem>
</asp:DropDownList>
</div>
<div class="form-group form-md-line-input input-iconright">
<label for="<%= DdlClientes.ClientID%>">Cliente:</label>
<ADS:Dropdownlost CssClassDdl="select2me" ID="DdlClientes" EsWebService="true" Width="100%" data-metodo="getcliente" runat="server" DataTextField="NombreComercial" DataValueField="CveCliente" CssStyle="width: 100%;"></ADS:Dropdownlost>
</div>
<div class="row">
<div class="form-group form-md-line-input input-iconright col-md-4">
<label for="<%= DdlPeriodoInicio.ClientID.ToString()%>">P. Inicial:</label>
<asp:DropDownList ID="DdlPeriodoInicio" runat="server" CssClass="select2me">
<asp:ListItem Text="Enero" Value="01"></asp:ListItem>
<asp:ListItem Text="Febrero" Value="02"></asp:ListItem>
<asp:ListItem Text="Marzo" Value="03"></asp:ListItem>
<asp:ListItem Text="Abril" Value="04"></asp:ListItem>
<asp:ListItem Text="Mayo" Value="05"></asp:ListItem>
<asp:ListItem Text="Junio" Value="06"></asp:ListItem>
<asp:ListItem Text="Julio" Value="07"></asp:ListItem>
<asp:ListItem Text="Agosto" Value="08"></asp:ListItem>
<asp:ListItem Text="Septiembre" Value="09"></asp:ListItem>
<asp:ListItem Text="Octubre" Value="10"></asp:ListItem>
<asp:ListItem Text="Noviembre" Value="11"></asp:ListItem>
<asp:ListItem Text="Diciembre" Value="12"></asp:ListItem>
</asp:DropDownList>
</div>
<div class="form-group form-md-line-input input-iconright col-md-4">
<label for="<%= DdlPeriodoFin.ClientID.ToString()%>">P. Fin:</label>
<asp:DropDownList ID="DdlPeriodoFin" runat="server" CssClass="select2me">
<asp:ListItem Text="Enero" Value="01"></asp:ListItem>
<asp:ListItem Text="Febrero" Value="02"></asp:ListItem>
<asp:ListItem Text="Marzo" Value="03"></asp:ListItem>
<asp:ListItem Text="Abril" Value="04"></asp:ListItem>
<asp:ListItem Text="Mayo" Value="05"></asp:ListItem>
<asp:ListItem Text="Junio" Value="06"></asp:ListItem>
<asp:ListItem Text="Julio" Value="07"></asp:ListItem>
<asp:ListItem Text="Agosto" Value="08"></asp:ListItem>
<asp:ListItem Text="Septiembre" Value="09"></asp:ListItem>
<asp:ListItem Text="Octubre" Value="10"></asp:ListItem>
<asp:ListItem Text="Noviembre" Value="11"></asp:ListItem>
<asp:ListItem Text="Diciembre" Value="12"></asp:ListItem>
</asp:DropDownList>
</div>
<div class="form-group form-md-line-input input-iconright col-md-4">
<label for="<%= DdlEjercicio.ClientID.ToString()%>">Ejercicio:</label>
<asp:DropDownList ID="DdlEjercicio" runat="server" CssClass="select2me">
<asp:ListItem Text="2023" Value="2023"></asp:ListItem>
<asp:ListItem Text="2024" Value="2024"></asp:ListItem>
<asp:ListItem Text="2025" Value="2025"></asp:ListItem>
<asp:ListItem Text="2026" Value="2026"></asp:ListItem>
<asp:ListItem Text="2027" Value="2027"></asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= TxtBase.ClientID.ToString()%>">Base Impuesto:</label>
<asp:TextBox ID="TxtBase" runat="server" Width="100px"></asp:TextBox>
</div>
</div>
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= DdlTipoImpuesto.ClientID.ToString()%>">Tipo Impuesto:</label>
<asp:DropDownList ID="DdlTipoImpuesto" runat="server" CssClass="select2me">
<asp:ListItem Text="ISR" Value="01"></asp:ListItem>
<asp:ListItem Text="IVA" Value="02"></asp:ListItem>
<asp:ListItem Text="IEPS" Value="03"></asp:ListItem>
</asp:DropDownList>
</div>
</div>
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= TxtImpuestoRetenido.ClientID.ToString()%>">Impuesto Retenido:</label>
<asp:TextBox ID="TxtImpuestoRetenido" runat="server" Width="100px"></asp:TextBox>
</div>
</div>
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= DdlTipoPagoRet.ClientID.ToString()%>">Tipo Impuesto:</label>
<asp:DropDownList ID="DdlTipoPagoRet" runat="server" CssClass="select2me">
<asp:ListItem Text="Pago definitivo IVA" Value="01"></asp:ListItem>
<asp:ListItem Text="Pago definitivo IEPS" Value="02"></asp:ListItem>
<asp:ListItem Text="Pago definitivo ISR" Value="03"></asp:ListItem>
<asp:ListItem Text="Pago provisional ISR" Value="04"></asp:ListItem>
</asp:DropDownList>
</div>
<asp:Button ID="BtnAgregar" runat="server" Text="++" OnClick="BtnAgregar_Click" />
</div>
</div>
<div class="row">
<div class="col-md-12">
<asp:GridView ID="GvD" runat="server" DataKeyNames="TipoImpuesto,ClaveTipoImpuesto,BaseRetencion,ClaveTipoPago,TipoPago,ImpuestoRetenido"></asp:GridView>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= TxtTotal1.ClientID.ToString()%>">Base Impuesto:</label>
<asp:TextBox ID="TxtTotal1" runat="server" Width="100px"></asp:TextBox>
</div>
</div>
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= TxtTotal2.ClientID.ToString()%>">Base Impuesto:</label>
<asp:TextBox ID="TxtTotal2" runat="server" Width="100px"></asp:TextBox>
</div>
</div>
<div class="col-md-3">
<div class="form-group form-md-line-input input-iconright">
<label for="<%= TxtTotal3.ClientID.ToString()%>">Base Impuesto:</label>
<asp:TextBox ID="TxtTotal3" runat="server" Width="100px"></asp:TextBox>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<asp:Button ID="BtnEmitirRetencion" runat="server" Text="Emitir Retención" OnClick="BtnEmitirRetencion_Click" CssClass ="btn btn-primary" ValidationGroup="VgmGuardar" />
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancelar</button>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</asp:Content>
<asp:Content ID="Content7" ContentPlaceHolderID="JS" runat="Server">
</asp:Content>

View File

@@ -0,0 +1,345 @@
Option Explicit On
Option Strict On
Imports System.IO
Imports System.Data
Imports System.Xml
Imports System.Xml.Serialization
Imports ADSNetLibrary.PacsTimbrado.SAT
Imports Extensiones
Imports Profact.TimbraCFDI40
Partial Class General_TimbraRetencion
Inherits ClsPaginas
#Region "PROPIEDADES"
Private Property CveMarca() As Integer
Get
Return If(IsNothing(ViewState("CveMarca")), -1, CInt(ViewState("CveMarca")))
End Get
Set
ViewState("CveMarca") = Value
End Set
End Property
Private Property Modalidad() As String
Get
Return If(IsNothing(ViewState("Modalidad")), "", (ViewState("Modalidad").ToString))
End Get
Set
ViewState("Modalidad") = Value
End Set
End Property
Private Property DtDetalle As Data.DataTable
Get
Return If(IsNothing(ViewState("DtDetalle")), Nothing, CType(ViewState("DtDetalle"), DataTable))
End Get
Set(value As DataTable)
ViewState("DtDetalle") = value
End Set
End Property
#End Region
Private Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
DdlClientes.setEsWebService(True)
End If
End Sub
#Region "Timbra"
Private Function TimbraRetencion(cfditimbre As CFDITimbreRetenciones, UsuarioActual As Usuario) As String
Dim sw As New Diagnostics.Stopwatch
Dim swTiempo As New StringBuilder
Dim swmili As Long = 0
sw.Start()
Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}"
Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}"
Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
Dim EmisorRFC As String = UsuarioActual.Empresa.RFC
Dim EmisorNombre As String = UsuarioActual.Empresa.Empresa
Dim SubTotal As Decimal = 0
Dim AmbienteProductivo As Boolean = True
Dim NumDecimalesImporte As Integer = 2
If Not ClsPaginas.EsProduccion AndAlso (Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1) Then
AmbienteProductivo = False
Clave = "12345678a"
EmisorRFC = "EKU9003173C9"
EmisorNombre = "ESCUELA KEMPER URGATE"
ArchivoLLave = $"{Extensiones.ModExtensiones.DirectorioEmpresas}\1\Certificados\EKU9003173C9.key"
ArchivoCertificado = $"{Extensiones.ModExtensiones.DirectorioEmpresas}\1\Certificados\EKU9003173C9.cer"
UsuarioActual.Empresa.CodigoRegimenFiscal = "601"
End If
#Region "Valida"
If Not File.Exists(ArchivoCertificado) Then
Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
Return ""
End If
If Not File.Exists(ArchivoLLave) Then
Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
Return ""
End If
If UsuarioActual.Empresa.ContraseñaKey = "" Then
Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
Return ""
End If
#End Region
#Region "Variables"
Dim llaveByte As Byte(), certByte As Byte()
Dim llaveBase64 As String, certBase64 As String
Dim complemento As String = ""
Dim complementoConcepto As String = ""
'//Inicializamos el conector el parámetro indica el ambiente en el que se utilizará
'//Fasle = Ambiente de pruebas
'//True = Ambiente de producción
Dim cfdi As New Profact.TimbraCFDI40.Conector(AmbienteProductivo)
Dim comprobante As New Profact.TimbraCFDI40.Comprobante()
If Not UsuarioActual.Empresa.FacturaProduccion OrElse UsuarioActual.CveEmpresa = 1 OrElse Not ClsPaginas.EsProduccion Then
cfdi.EstableceCredenciales("mvpNUXmQfK8=")
Else
cfdi.EstableceCredenciales($"vSGxMFWnNRy/nDoowxqrqw==|Sia123654")
End If
#End Region
#Region "Verifica"
Try
llaveByte = System.IO.File.ReadAllBytes(ArchivoLLave)
llaveBase64 = Convert.ToBase64String(llaveByte)
Catch ex As Exception
Alert($"Error al leer la llave privada: {ex.Message}", TipoMensaje.MsgError)
Return ""
End Try
Try
certByte = System.IO.File.ReadAllBytes(ArchivoCertificado)
certBase64 = Convert.ToBase64String(certByte)
Catch ex As Exception
Alert($"Error al leer el certificado: {ex.Message}", TipoMensaje.MsgError)
Return ""
End Try
sw.Stop()
swTiempo.AppendFormat("Verificado : ({0}) {1} ", sw.ElapsedMilliseconds - swmili, sw.ElapsedMilliseconds)
swmili = sw.ElapsedMilliseconds
sw.Start()
#End Region
'CType([Enum].Parse(GetType(ProfactCartaPorte.CartaPorteTranspInternac), Carta.TranspInternac), ProfactCartaPorte.CartaPorteTranspInternac)
Dim retenciones As Retenciones = New Profact.TimbraCFDI40.Retenciones()
retenciones.Version = "2.0"
retenciones.FechaExp = cfditimbre.Fecha
retenciones.CveRetenc = CType([Enum].Parse(GetType(c_CveRetenc), "Item" & cfditimbre.Retencion.ClaveRetencion), c_CveRetenc)
retenciones.Emisor = New RetencionesEmisor()
retenciones.Emisor.RfcE = EmisorRFC
retenciones.Emisor.NomDenRazSocE = EmisorNombre
retenciones.Emisor.RegimenFiscalE = CType([Enum].Parse(GetType(c_RegimenFiscal), "Item" & UsuarioActual.Empresa.CodigoRegimenFiscal), c_RegimenFiscal)
retenciones.LugarExpRetenc = cfditimbre.Retencion.LugarExpedicion
Dim retencionNacional As RetencionesReceptorNacional = New RetencionesReceptorNacional()
retenciones.Receptor = New RetencionesReceptor()
retenciones.Receptor.NacionalidadR = If(cfditimbre.Receptor.NacionalidadR = "Nacional", RetencionesReceptorNacionalidadR.Nacional, RetencionesReceptorNacionalidadR.Extranjero)
retencionNacional.RfcR = cfditimbre.Receptor.RFCR
retencionNacional.NomDenRazSocR = cfditimbre.Receptor.NombreDenominacionR
retencionNacional.DomicilioFiscalR = cfditimbre.Receptor.DomicilioFiscalR
retenciones.Receptor.Item = retencionNacional
If cfditimbre.CFDIRelacionados.TipoRelacion <> "" Then
For Each uid As String In cfditimbre.CFDIRelacionados.UUID
Dim uuidrela As New RetencionesCfdiRetenRelacionados
uuidrela.TipoRelacion = CType([Enum].Parse(GetType(c_TipoRelacion), "Item" & cfditimbre.CFDIRelacionados.TipoRelacion), c_TipoRelacion)
uuidrela.UUID = uid
retenciones.CfdiRetenRelacionados = uuidrela
Next
End If
retenciones.Periodo = New RetencionesPeriodo()
retenciones.Periodo.MesIni = CType([Enum].Parse(GetType(c_Periodo), "Item" & cfditimbre.Retencion.PeriodoMesInicio), c_Periodo)
retenciones.Periodo.MesFin = CType([Enum].Parse(GetType(c_Periodo), "Item" & cfditimbre.Retencion.PeriodoMesFin), c_Periodo)
retenciones.Periodo.Ejercicio = CType([Enum].Parse(GetType(c_Ejercicio), "Item" & cfditimbre.Retencion.PeriodoEjercicio.ToString), c_Ejercicio)
retenciones.Totales = New RetencionesTotales()
retenciones.Totales.MontoTotOperacion = 0
retenciones.Totales.MontoTotGrav = 0
retenciones.Totales.MontoTotExent = 0
retenciones.Totales.MontoTotRet = cfditimbre.TotalImpuestosRetenidos
retenciones.Totales.UtilidadBimestral = 1
retenciones.Totales.UtilidadBimestralSpecified = True
retenciones.Totales.ISRCorrespondiente = cfditimbre.ISRCorrespondiente
retenciones.Totales.ISRCorrespondienteSpecified = True
retenciones.Totales.ImpRetenidos = New RetencionesTotalesImpRetenidos(cfditimbre.RetencionesImpuestos.Count - 1) {}
Dim i As Integer = 0
For Each drimp As CFDIImpuestosRetenidos In cfditimbre.RetencionesImpuestos
retenciones.Totales.ImpRetenidos(i) = New RetencionesTotalesImpRetenidos()
retenciones.Totales.ImpRetenidos(i).BaseRet = 0
retenciones.Totales.ImpRetenidos(i).BaseRetSpecified = True
retenciones.Totales.ImpRetenidos(i).ImpuestoRet = CType([Enum].Parse(GetType(c_Impuesto), "Item0" & drimp.ImpuestoRetencion), c_Impuesto) ' c_Impuesto.Item001
retenciones.Totales.ImpRetenidos(i).ImpuestoRetSpecified = True
retenciones.Totales.ImpRetenidos(i).MontoRet = drimp.MontoRetencion
retenciones.Totales.ImpRetenidos(i).TipoPagoRet = CType([Enum].Parse(GetType(c_TipoPagoRet), "Item" & drimp.TipoPagoRetencion), c_TipoPagoRet) 'c_TipoPagoRet.Item04
i += 1
Next
'retenciones.Totales.ImpRetenidos(i) = New RetencionesTotalesImpRetenidos()
'retenciones.Totales.ImpRetenidos(i).BaseRet = 0
'retenciones.Totales.ImpRetenidos(i).BaseRetSpecified = True
'retenciones.Totales.ImpRetenidos(i).ImpuestoRet = c_Impuesto.Item001
'retenciones.Totales.ImpRetenidos(i).ImpuestoRetSpecified = True
'retenciones.Totales.ImpRetenidos(i).MontoRet = 705
'retenciones.Totales.ImpRetenidos(i).TipoPagoRet = c_TipoPagoRet.Item04
'' dividendos
'Dim dividendos As Profact.TimbraCFDI.Dividendos = New Profact.TimbraCFDI.Dividendos()
'dividendos.Version = "1.0"
'dividendos.DividOUtil = New Profact.TimbraCFDI.DividendosDividOUtil()
'dividendos.DividOUtil.CveTipDivOUtil = Profact.TimbraCFDI.c_TipoDividendoOUtilidadDistribuida.Item06
'dividendos.DividOUtil.MontISRAcredRetMexico = 0.00D
'dividendos.DividOUtil.MontISRAcredRetExtranjero = 0.00D
'dividendos.DividOUtil.TipoSocDistrDiv = Profact.TimbraCFDI.DividendosDividOUtilTipoSocDistrDiv.SociedadNacional
'dividendos.DividOUtil.MontDivAcumNal = 426180D
'dividendos.DividOUtil.MontDivAcumNalSpecified = True
'dividendos.DividOUtil.MontISRAcredNal = 127586D
'dividendos.DividOUtil.MontDivAcumNalSpecified = True
Dim LXmlComplementos As List(Of XmlElement) = New List(Of XmlElement)()
'Dim nombres As System.Xml.Serialization.XmlSerializerNamespaces = New System.Xml.Serialization.XmlSerializerNamespaces()
'nombres.Add("dividendos", "http://www.sat.gob.mx/esquemas/retencionpago/1/dividendos")
'Dim xmlDividendos As String = Profact.TimbraCFDI.XMLUtilerias.SerializaObjeto(dividendos, GetType(Profact.TimbraCFDI.Dividendos), nombres)
'Dim docDividendos As XmlDocument = New XmlDocument()
'docDividendos.LoadXml(xmlDividendos)
'retenciones.DividendosSpecified = True
'LXmlComplementos.Add(docDividendos.DocumentElement)
''fin dividendos
'retenciones.Complemento = New RetencionesComplemento()
'retenciones.Complemento.Any = LXmlComplementos.ToArray()
Dim xmlEncode As String
Using sww As New System.IO.StringWriter()
Dim xs As XmlSerializer
xs = New System.Xml.Serialization.XmlSerializer(GetType(Profact.TimbraCFDI40.Retenciones))
xs.Serialize(sww, retenciones)
xmlEncode = sww.ToString()
End Using
Dim resultadoTimbre As Profact.TimbraCFDI.ResultadoTimbre
resultadoTimbre = cfdi.TimbraRetencion(retenciones)
If resultadoTimbre.Exitoso Then
Dim Retorno As String = ""
Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\Ret\"
Dim NombreArchivoXML As String = ""
Dim objGrales As New ClsGenerales
objGrales.IniciaTransacSQL()
Dim tCveTimbre As Integer = objGrales.AddGralTimbre("Ret", 12679, cfditimbre.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
NombreArchivoXML = $"{objGrales.SerieInsertada}-{objGrales.FolioInsertado}.xml"
If Not Directory.Exists(RutaArchivo) Then Directory.CreateDirectory(RutaArchivo)
If tCveTimbre > 0 Then
If objGrales.UpdateTimbreTimbrado(tCveTimbre, resultadoTimbre.FolioUUID, cfditimbre.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, 3, "4.0") Then
resultadoTimbre.GuardaXml(RutaArchivo, NombreArchivoXML)
Else
Retorno = "Error"
End If
Else
Retorno = "Error"
End If
If Retorno = "" Then
objGrales.Commit()
Else
objGrales.RollBack()
End If
objGrales.Dispose()
'If resultadoTimbre.GuardaXml("C:/", "EjemploRetencion_nombre") Then
' Alert("El xml fue guardado correctamente")
'Else
' Alert("Ocurrió un error al guardar el comprobante, por favor verifica los permisos de la carpeta")
'End If
'If resultadoTimbre.GuardaCodigoBidimensional("C:/", "codigoRetencion_nombre") Then
' Alert("El código bidimensional fue guardado correctamente")
'Else
' Alert("Ocurrió un error al guardar el código bidimensional, por favor verifica los permisos de la carpeta")
'End If
'Dim folioFiscal As String = resultadoTimbre.FolioUUID
'Dim noCertificado As String = resultadoTimbre.No_Certificado
'Dim noCertificadoSAT As String = resultadoTimbre.No_Certificado_SAT
'Dim fechaCert As String = resultadoTimbre.FechaCertificacion
'Dim selloCFDI As String = resultadoTimbre.SelloCFDI
'Dim selloSAT As String = resultadoTimbre.SelloSAT
'Dim cadena As String = resultadoTimbre.CadenaTimbre
Alert("Timbrado Exitoso")
Else
Alert(resultadoTimbre.Descripcion)
Dim detalle As String = resultadoTimbre.Detalle
End If
End Function
#End Region
Protected Sub BtnEmitirRetencion_Click(sender As Object, e As EventArgs)
Dim cfditimbre As New CFDITimbreRetenciones
cfditimbre.Fecha = Now
cfditimbre.Retencion.ClaveRetencion = DdlClaveRetencion.SelectedValue
cfditimbre.Retencion.PeriodoMesInicio = DdlPeriodoInicio.SelectedValue
cfditimbre.Retencion.PeriodoMesFin = DdlPeriodoFin.SelectedValue
cfditimbre.Retencion.PeriodoEjercicio = DdlEjercicio.SelectedValue.ToEntero
cfditimbre.Retencion.LugarExpedicion = UsuarioActual.Empresa.CP
cfditimbre.Receptor.RFCR = "AEMV690902NM5"
cfditimbre.Receptor.NacionalidadR = "Nacional"
cfditimbre.Receptor.DomicilioFiscalR = "11950"
cfditimbre.Receptor.NombreDenominacionR = "VERONICA MICHELLE ARMENTA MASON"
cfditimbre.CFDIRelacionados.TipoRelacion = "01"
cfditimbre.CFDIRelacionados.UUID.Add("671fdb07-406a-42a6-9a89-40219f663ea1")
cfditimbre.ISRCorrespondiente = 705
cfditimbre.RetencionesImpuestos.Add(New CFDIImpuestosRetenidos With {.MontoRetencion = 705, .BaseRetencion = 0, .ImpuestoRetencion = "01", .TipoPagoRetencion = "04"})
For Each gvr As GridViewRow In GvD.Rows
Dim ret As New CFDIImpuestosRetenidos With {.BaseRetencion = gvr.DataKey("BaseRetencion").ToDecimal,
.ImpuestoRetencion = gvr.DataKey("ImpuestoRetencion")}
cfditimbre.RetencionesImpuestos.Add(ret)
Next
TimbraRetencion(cfditimbre, UsuarioActual)
End Sub
Protected Sub LnkAgregarRetencion_Click(sender As Object, e As EventArgs)
UpModal.Update()
RegistraScript("$('#DModalRetencion').modal()")
DtDetalle = New DataTable
DtDetalle.Columns.Add("TipoImpuesto", GetType(String))
DtDetalle.Columns.Add("ClaveTipoImpuesto", GetType(String))
DtDetalle.Columns.Add("BaseRetencion", GetType(Decimal))
DtDetalle.Columns.Add("ClaveTipoPago", GetType(String))
DtDetalle.Columns.Add("TipoPago", GetType(String))
DtDetalle.Columns.Add("ImpuestoRetenido", GetType(Decimal))
End Sub
Protected Sub BtnAgregar_Click(sender As Object, e As EventArgs)
Dim dr As DataRow = DtDetalle.NewRow
dr("TipoImpuesto") = DdlTipoImpuesto.Text
dr("ClaveTipoImpuesto") = DdlTipoImpuesto.SelectedValue
dr("BaseRetencion") = TxtBase.Text.ToDecimal
dr("ClaveTipoPago") = DdlTipoPagoRet.SelectedValue
dr("TipoPago") = DdlTipoPagoRet.Text
dr("ImpuestoRetenido") = TxtImpuestoRetenido.Text.ToDecimal
DtDetalle.Rows.Add(dr)
GvD.DataSource = DtDetalle
GvD.DataBind()
End Sub
End Class