-- timbrado de retención
This commit is contained in:
134
App_Code/CFDITimbreRetenciones.vb
Normal file
134
App_Code/CFDITimbreRetenciones.vb
Normal 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
|
||||||
171
General/TimbraRetencion.aspx
Normal file
171
General/TimbraRetencion.aspx
Normal 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>
|
||||||
|
|
||||||
345
General/TimbraRetencion.aspx.vb
Normal file
345
General/TimbraRetencion.aspx.vb
Normal 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
|
||||||
Reference in New Issue
Block a user