Files
SIG/Nomina/Nomina.aspx.vb
JORGE LUIS CAUDILLO ESPARZA 3e7a5e0392
2020-06-01 01:21:30 -07:00

2450 lines
121 KiB
VB.net

Imports Extensiones
Imports System.Data
Imports System.Drawing
Imports Microsoft.Reporting.WebForms
Imports System.IO
Imports System.Xml
Partial Class Nomina_Nomina
Inherits ClsPaginas
#Region "Propiedades"
Private Shared CveNominaT As Integer
'Local
Private Property DTConceptos As Data.DataTable
Get
Return CType(ViewState("DTConceptos"), Data.DataTable)
End Get
Set(value As Data.DataTable)
ViewState("DTConceptos") = value
End Set
End Property
Private Property DTResultados As Data.DataTable
Get
Return CType(ViewState("DTResultados"), Data.DataTable)
End Get
Set(value As Data.DataTable)
ViewState("DTResultados") = value
End Set
End Property
Private ReadOnly Property DTPeriodos As Data.DataTable
Get
Return DirectCast(ViewState("DTPeriodos"), Data.DataTable)
End Get
End Property
Private Property PermisoAutorizar As Boolean
Get
Return CType(ViewState("PermisoAutorizar"), Boolean)
End Get
Set(value As Boolean)
ViewState("PermisoAutorizar") = value
End Set
End Property
Private Property PermisoEmitir As Boolean
Get
Return CType(ViewState("PermisoEmitir"), Boolean)
End Get
Set(value As Boolean)
ViewState("PermisoEmitir") = value
End Set
End Property
Public Property PermisoCancelarEmitido As Boolean
Get
Return CType(ViewState("PermisoCancelarEmitido"), Boolean)
End Get
Set(value As Boolean)
ViewState("PermisoCancelarEmitido") = value
End Set
End Property
Private ReadOnly Property CvePersonal As Integer
Get
If ViewState("CvePersonal") Is Nothing Then
Return -1
Else
Return ViewState("CvePersonal").ToString.ToEntero
End If
End Get
End Property
'Private ReadOnly Property CveNomina As Integer
' Get
' Return ViewState("CveNomina").ToString.ToEntero
' End Get
'End Property
'Private ReadOnly Property NominaFolio As String
' Get
' Return ViewState("NominaFolio").ToString
' End Get
'End Property
Private ReadOnly Property FolioFiscal As String
Get
Return ViewState("FolioFiscal").ToString
End Get
End Property
Private ReadOnly Property Ruta As String
Get
Return ModExtensiones.DirectorioBaseEmpresas & "Empresas\" & UsuarioActual.CveEmpresa & "\"
End Get
End Property
Private ReadOnly Property RutaPruebas As String
Get
Return ModExtensiones.DirectorioBaseEmpresas & "Empresas\1\"
End Get
End Property
Private ReadOnly Property SucCalle As String
Get
Return ViewState("SucCalle").ToString
End Get
End Property
Private ReadOnly Property SucNoExt As String
Get
Return ViewState("SucNoExt").ToString
End Get
End Property
Private ReadOnly Property SucNoInt As String
Get
Return ViewState("SucNoInt").ToString
End Get
End Property
Private ReadOnly Property SucColonia As String
Get
Return ViewState("SucColonia").ToString
End Get
End Property
Private ReadOnly Property SucLocalidad As String
Get
Return ViewState("SucLocalidad").ToString
End Get
End Property
Private ReadOnly Property SucMunicipio As String
Get
Return ViewState("SucMunicipio").ToString
End Get
End Property
Private ReadOnly Property SucEstado As String
Get
Return ViewState("SucEstado").ToString
End Get
End Property
Private ReadOnly Property SucPais As String
Get
Return ViewState("SucPais").ToString
End Get
End Property
Private ReadOnly Property SucCP As String
Get
Return ViewState("SucCP").ToString
End Get
End Property
Private ReadOnly Property MatCalle As String
Get
Return ViewState("MatCalle").ToString
End Get
End Property
Private ReadOnly Property MatNoExt As String
Get
Return ViewState("MatNoExt").ToString
End Get
End Property
Private ReadOnly Property MatNoInt As String
Get
Return ViewState("MatNoInt").ToString
End Get
End Property
Private ReadOnly Property MatColonia As String
Get
Return ViewState("MatColonia").ToString
End Get
End Property
Private ReadOnly Property MatLocalidad As String
Get
Return ViewState("MatLocalidad").ToString
End Get
End Property
Private ReadOnly Property MatMunicipio As String
Get
Return ViewState("MatMunicipio").ToString
End Get
End Property
Private ReadOnly Property MatEstado As String
Get
Return ViewState("MatEstado").ToString
End Get
End Property
Private ReadOnly Property MatPais As String
Get
Return ViewState("MatPais").ToString
End Get
End Property
Private ReadOnly Property MatCP As String
Get
Return ViewState("MatCP").ToString
End Get
End Property
'Private ReadOnly Property DiasPeriodo As Integer
' Get
' Return ViewState("DiasPeriodo").ToString.ToEntero
' End Get
'End Property
'Private ReadOnly Property CvePeriodo As Integer
' Get
' Return ViewState("CvePeriodo").ToString.ToEntero
' End Get
'End Property
Private ReadOnly Property CvePeriodoSeleccionado As Integer
Get
Return ViewState("CvePeriodoSeleccionado").ToString.ToEntero
End Get
End Property
'Private ReadOnly Property FechaI As Date
' Get
' Return ViewState("FechaI").ToString.ToDate
' End Get
'End Property
'Private ReadOnly Property FechaF As Date
' Get
' Return ViewState("FechaF").ToString.ToDate
' End Get
'End Property
#End Region
Partial Public Class ActualizaTimbre
Public Property Estatus As Boolean
Public Property CveNomina As Integer
Public Property CvePAC As Integer
End Class
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
If UsuarioActual.CveEmpresa = 80 OrElse UsuarioActual.CveEmpresa = 72 OrElse UsuarioActual.CveEmpresa = 119 Then
Response.Redirect("/Nomina/Nomina2.aspx")
End If
CargaTiposPeriodo()
CargaProyecto()
CargaTurnos()
CargaEmpresa()
CargaFolios()
LnkCorreos.Visible = False
TxtFechaPago.Text = Now.ToShortDateString
Dim EjercicioActual As Integer = UsuarioActual.Empresa.EjercicioActual
If EjercicioActual = 0 Then
EjercicioActual = DateTime.Now.Year
End If
DdlEjercicios.Items.Add(New ListItem(EjercicioActual.ToString(), EjercicioActual.ToString()))
DdlEjercicios.Items.Add(New ListItem((EjercicioActual - 1).ToString(), (EjercicioActual - 1).ToString()))
'Verifica Permisos de Autorizar
If UsuarioActual.TienePermisoProceso(82) Then PermisoAutorizar = True Else PermisoAutorizar = False
'Verifica Permisos de Timbrar
If UsuarioActual.TienePermisoProceso(83) Then
PermisoEmitir = True
PermisoCancelarEmitido = True
Else
PermisoEmitir = False
PermisoCancelarEmitido = False
End If
'If UsuarioActual.Rol = "Administrador AD" Then
' BtnGeneraPDF.Visible = True
' BtnActualizaNomina.Visible = True
'End If
End If
End Sub
#Region "Carga Datos,Combos, Etc..."
Private Sub CargaTiposPeriodo()
DdlTipoPeriodo.DataSource = GlobalDTTipoPeriodo.FiltraParametros("Estatus = 'Activo'")
DdlTipoPeriodo.DataBind()
End Sub
Private Sub CargaPeriodos()
If DdlTipoPeriodo.SelectedValue.ToEntero > 0 Then
Dim ObjPeriodos As New ClsNominas
If ObjPeriodos.GetPeriodos(DdlTipoPeriodo.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, DdlEjercicios.SelectedValue.ToEntero, -1, -1) Then
ViewState("DTPeriodos") = ObjPeriodos.DtResultados.FiltraParametros("Estatus IN (1,2,3,4,5)")
DdlPeriodo.DataSource = DTPeriodos
Else
DdlPeriodo.DataSource = Nothing
End If
ObjPeriodos.Dispose()
End If
DdlPeriodo.Items.Clear()
DdlPeriodo.DataBind()
DdlPeriodo.Items.Insert(0, New ListItem("Seleccione", "-1"))
End Sub
Private Sub CargaProyecto()
DdlProyecto.DataSource = GlobalDTProyectos(UsuarioActual.Empresa.CveEmpresa)
DdlProyecto.DataBind()
End Sub
Private Sub CargaSubProyecto()
DdlSubProyecto.Items.Clear()
DdlSubProyecto.DataSource = GlobalDTSubProyectos(DdlProyecto.SelectedValue.ToEntero)
DdlSubProyecto.DataBind()
DdlSubProyecto.Items.Insert(0, New ListItem("Todos", "-1"))
End Sub
Private Sub CargaTurnos()
DdlTurno.DataSource = GlobalDTTurno.FiltraParametros("CveEmpresa = " & UsuarioActual.CveEmpresa)
DdlTurno.DataBind()
End Sub
Private Sub CargaEmpresa()
Dim dr As DataRow = Nothing
dr = GlobalDTSubProyectos(-1).FiltroPrimero("SubProyecto = 'MATRIZ' AND Estatus = 'Activo' AND CveEmpresa = " & UsuarioActual.CveEmpresa)
If dr IsNot Nothing Then
ViewState("MatCalle") = dr("Calle")
ViewState("MatNoExt") = dr("NoExt")
ViewState("MatNoInt") = dr("NoInt")
ViewState("MatColonia") = dr("Colonia")
ViewState("MatLocalidad") = dr("Localidad")
ViewState("MatMunicipio") = dr("Municipio")
ViewState("MatEstado") = dr("Estado")
ViewState("MatPais") = dr("Pais")
ViewState("MatCP") = dr("CP")
'dr = GlobalDTSucursales.FiltroPrimero("CveSucursal = " & ObjCliente.CveSucursal)
ViewState("SucCalle") = dr("Calle")
ViewState("SucNoExt") = dr("NoExt")
ViewState("SucNoInt") = dr("NoInt")
ViewState("SucColonia") = dr("Colonia")
ViewState("SucLocalidad") = dr("Localidad")
ViewState("SucMunicipio") = dr("Municipio")
ViewState("SucEstado") = dr("Estado")
ViewState("SucPais") = dr("Pais")
ViewState("SucCP") = dr("CP")
End If
End Sub
Private Sub CargaFolios()
Dim ObjFolios As New ClsGralFolios()
If ObjFolios.GetFolios(TipoDocto:="Nom", CveEmpresa:=UsuarioActual.CveEmpresa) Then
Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros("Estado = 'Activo'")
If DT.Rows.Count = 1 Then
ViewState("CveFolio") = DT.Rows(0)("CveFolio").ToString.ToEntero
'ViewState("NumAprobacion") = CLng(DT.Rows(0)("Aprobacion").ToString)
'ViewState("FechaAprobacion") = DT.Rows(0)("FechaAprobacion").ToString.ToDate
ViewState("FolioActual") = DT.Rows(0)("FActual").ToString
'BtnAutorizar.Visible = True
'BtnEmitir.Visible = True
Else
Alert("No tiene registrados Folios para Nómina en esta sucursal.", TipoMensaje.MsgAdvertencia)
'BtnAutorizar.Visible = False
'BtnEmitir.Visible = False
End If
DT.Dispose()
End If
ObjFolios.Dispose()
End Sub
Private Sub CargaDatos()
VerificaPermisos()
Dim ObjNomina As New ClsRH
If ObjNomina.GetNomina2(DdlProyecto.SelectedValue.ToEntero, DdlSubProyecto.SelectedValue.ToEntero, DdlTurno.SelectedValue.ToEntero, DdlPeriodo.SelectedValue.ToEntero, UsuarioActual.CveEmpresa, DdlAgrupador.SelectedValue) Then
LnkCorreos.Visible = True
'Ocultar todas las columnas del grid y prenderlas con forme se vayan llenando
For i As Integer = 1 To GVDatos.Columns.Count
If (i >= 2 And i <= 16) Or (i >= 18 And i <= 32) Or (i >= 35 And i <= 51) Then
GVDatos.Columns(i).Visible = False
End If
Next
DTConceptos = ObjNomina.DSResultados().Tables(0)
DTResultados = ObjNomina.DSResultados().Tables(1)
ViewState("CvePeriodoSeleccionado") = DdlPeriodo.SelectedValue
Dim P As Integer = 2
Dim D As Integer = 2
Dim O As Integer = 2
For Each RowConceptos As DataRow In DTConceptos.FiltraParametros("Tipo IN ('P','D','O') AND EsPadre = 1 ").Rows
If RowConceptos("Tipo").ToString = "P" Then
GVDatos.Columns(P).Visible = True
Dim field As BoundField = DirectCast(GVDatos.Columns(P), BoundField)
GVDatos.Columns(P).Visible = True
field.DataField = RowConceptos("CveConcepto").ToString
field.HeaderText = RowConceptos("Concepto").ToString
P = P + 1
ElseIf RowConceptos("Tipo").ToString = "D" Then
GVDatos.Columns(D + 17).Visible = True
Dim field As BoundField = DirectCast(GVDatos.Columns(D + 17), BoundField)
GVDatos.Columns(D).Visible = True
field.DataField = RowConceptos("CveConcepto").ToString
field.HeaderText = RowConceptos("Concepto").ToString
D = D + 1
ElseIf RowConceptos("Tipo").ToString = "O" AndAlso UsuarioActual.CveRol = 1 Then
GVDatos.Columns(O + 34).Visible = True
Dim field As BoundField = DirectCast(GVDatos.Columns(O + 34), BoundField)
GVDatos.Columns(O).Visible = True
field.DataField = RowConceptos("CveConcepto").ToString
field.HeaderText = If(RowConceptos("Concepto").ToString.Length > 15, RowConceptos("Concepto").ToString.Substring(0, 15), RowConceptos("Concepto").ToString)
O = O + 1
End If
Next
If DTResultados.Rows.Count > 0 And DTResultados.Rows(0)("FechaPago").ToString.ToDate > MinFecha Then
TxtFechaPago.Text = DTResultados.Rows(0)("FechaPago").ToString.ToDate.ToShortDateString
End If
If O > 1 AndAlso UsuarioActual.CveRol = 1 Then ' si tiene activadas las obligaciones, que muestre el total
GVDatos.Columns(GVDatos.Columns.Count - 3).Visible = True
End If
GVDatos.DataSource = DTResultados
Else
GVDatos.DataSource = Nothing
End If
ObjNomina.Dispose()
GVDatos.DataBind()
If GVDatos.Rows.Count > 0 Then
'Ocultar las columnas donde el total sea cero
Dim tContador As Integer = 0
For i As Integer = 1 To GVDatos.Columns.Count
If (i >= 1 And i <= 15) Or (i >= 17 And i <= 31) Or (i >= 34 And i <= 49) Then
If GVDatos.Rows(0).Cells(i).Text.ToDecimal = 0 Then
GVDatos.Columns(i).Visible = False
Else
tContador += 1
End If
End If
Next
GVDatos.Width = Unit.Pixel(350 + 240 + (80 * (tContador)) + 55)
End If
GVDatos.Columns(1).Visible = True
UPDatos.Update()
End Sub
Private Sub VerificaPermisos()
'verifico los permisos de cada periodo
If DdlPeriodo.SelectedValue.ToEntero > 0 Then
Dim Per As New ClsNominas
If Per.GetPeriodos(-1, UsuarioActual.CveEmpresa, -1, -1, DdlPeriodo.SelectedValue.ToEntero) Then
Dim dr As DataRow = Per.DtResultados.FiltroPrimero("")
If dr IsNot Nothing Then
Select Case dr("Estatus").ToString().ToEntero()
Case 0
BtnAutorizar.Visible = False
BtnEmitir.Visible = False
LnkPagoNomina.Visible = False
LnkProvisionNomina.Visible = False
LblFechaPago.Visible = False
DivFechaPago.Visible = False
Case 1
BtnAutorizar.Visible = True
BtnEmitir.Visible = False
LnkPagoNomina.Visible = False
LnkProvisionNomina.Visible = False
LblFechaPago.Visible = True
DivFechaPago.Visible = True
TxtFechaPago.Text = Now.ToShortDateString
TxtFechaPago.Enabled = True
Case 2
BtnAutorizar.Visible = True
BtnEmitir.Visible = True
LblFechaPago.Visible = True
DivFechaPago.Visible = True
TxtFechaPago.Text = Now.ToShortDateString
TxtFechaPago.Enabled = True
If dr("CveIE").ToString <> "" Then
LnkPagoNomina.Visible = True
LnkPagoNomina.Text = "<i class=""fa fa-eye""></i>Ver Pago"
LnkPagoNomina.Attributes.Add("href", $"../Bancos/IE.aspx?CveIE={dr("CveIE").ToString}")
Else
LnkPagoNomina.Visible = True
LnkPagoNomina.Attributes.Add("href", $"../Bancos/PolizaCheque.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}")
End If
If dr("CvePrePolizaProvision").ToString <> "" Then
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Text = "<i class=""fa fa-eye""></i>Ver Provisón"
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePrePoliza={dr("CvePrePolizaProvision").ToString}&Tipo=NOMPROV")
Else
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}&Tipo=NOMPROV")
End If
UpnTools.Update()
Case 3
BtnAutorizar.Visible = True
BtnEmitir.Visible = False
LblFechaPago.Visible = True
DivFechaPago.Visible = True
TxtFechaPago.Text = dr("FechaPago").ToString.ToDate.ToShortDateString
TxtFechaPago.Enabled = False
If dr("CveIE").ToString <> "" Then
LnkPagoNomina.Visible = True
LnkPagoNomina.Text = "<i class=""fa fa-eye""></i>Ver Pago"
LnkPagoNomina.Attributes.Add("href", $"../Bancos/IE.aspx?CveIE={dr("CveIE").ToString}")
Else
LnkPagoNomina.Visible = True
LnkPagoNomina.Attributes.Add("href", $"../Bancos/PolizaCheque.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}")
End If
If dr("CvePrePolizaProvision").ToString <> "" Then
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Text = "<i class=""fa fa-eye""></i>Ver Provisón"
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePrePoliza={dr("CvePrePolizaProvision").ToString}&Tipo=NOMPROV")
Else
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}&Tipo=NOMPROV")
End If
UpnTools.Update()
Case 4
BtnAutorizar.Visible = True
BtnEmitir.Visible = False
LblFechaPago.Visible = True
DivFechaPago.Visible = True
TxtFechaPago.Text = Now.ToShortDateString
TxtFechaPago.Enabled = True
If dr("CveIE").ToString <> "" Then
LnkPagoNomina.Visible = True
LnkPagoNomina.Text = "<i class=""fa fa-eye""></i>Ver Pago"
LnkPagoNomina.Attributes.Add("href", $"../Bancos/IE.aspx?CveIE={dr("CveIE").ToString}")
Else
LnkPagoNomina.Visible = True
LnkPagoNomina.Attributes.Add("href", $"../Bancos/PolizaCheque.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}")
End If
If dr("CvePrePolizaProvision").ToString <> "" Then
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Text = "<i class=""fa fa-eye""></i>Ver Provisón"
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePrePoliza={dr("CvePrePolizaProvision").ToString}&Tipo=NOMPROV")
Else
LnkProvisionNomina.Visible = True
LnkProvisionNomina.Attributes.Add("href", $"../Contabilidad/RegPrePoliza.aspx?CvePeriodo={DdlPeriodo.SelectedValue.ToEntero}&CveProyecto={DdlProyecto.SelectedValue.ToEntero}&CveSubProyecto={DdlProyecto.SelectedValue.ToEntero}&CveTurno={DdlTurno.SelectedValue.ToEntero}&Tipo=NOMPROV")
End If
UpnTools.Update()
Case 5
BtnAutorizar.Visible = True
End Select
End If
End If
Per.Dispose()
If PermisoAutorizar And BtnAutorizar.Visible Then BtnAutorizar.Visible = True Else BtnAutorizar.Visible = False
If PermisoEmitir And BtnEmitir.Visible Then BtnEmitir.Visible = True Else BtnEmitir.Visible = False
End If
End Sub
#End Region
#Region "DDL'S SELECT INDEX CHANGED"
Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlProyecto.SelectedIndexChanged
CargaSubProyecto()
CargaFolios()
End Sub
Protected Sub DdlTipoPeriodo_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles DdlTipoPeriodo.SelectedIndexChanged
CargaPeriodos()
CargaFolios()
End Sub
Protected Sub DdlPeriodo_SelectedIndexChanged(sender As Object, e As EventArgs) Handles DdlPeriodo.SelectedIndexChanged
If DdlPeriodo.SelectedValue.ToEntero > 0 Then
BtnConsultar.Visible = True
Else
BtnConsultar.Visible = False
End If
End Sub
#End Region
#Region "BTN'S CLICK"
Protected Sub BtnConsultar_Click(sender As Object, e As System.EventArgs) Handles BtnConsultar.Click
If DdlPeriodo.SelectedValue <> "-1" Then
CargaDatos()
Else
Alert("Debe de seleccionar el Período con el que se desea trabajar", TipoMensaje.MsgAdvertencia)
End If
End Sub
Protected Sub LnkTimbrar_Click(sender As Object, e As EventArgs)
Dim lnk As LinkButton = DirectCast(sender, LinkButton)
Dim gvRow As GridViewRow = DirectCast(lnk.NamingContainer, GridViewRow)
Dim CvePeriodo As Integer = gvRow.DataKey("CvePeriodo").ToEntero()
Dim CvePersonal As Integer = gvRow.DataKey("CvePersonal").ToEntero()
Dim CveNomina As Integer = gvRow.DataKey("CveNomina").ToEntero()
Dim lognom As New LogicNominas
Dim Msg As String = lognom.TimbrarNomina(CveNomina, CvePersonal, CvePeriodo, UsuarioActual)
If Not IsNothing(Msg) AndAlso Msg.Length > 0 Then
Alert(Msg, TipoMensaje.MsgAdvertencia)
Else
Dim ObjPeriodo As New ClsNominas()
ObjPeriodo.CambiaEstatusPeriodo(CvePeriodo, enumNominasEstatus.Timbrada, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
ObjPeriodo.Dispose()
Alert("Se ha timbrado correctamente")
gvRow.FindControl("ImgDelete").Visible = False
gvRow.FindControl("LnkCancelar").Visible = False
gvRow.FCImage("ImgBandera").ImageUrl = "/Imagenes/flag_green.png"
gvRow.ForeColor = Color.Green
lnk.Visible = False
End If
End Sub
Protected Sub ImgDelete_Click(sender As Object, e As EventArgs)
Dim Cve As Integer = DirectCast(sender, LinkButton).CommandArgument.ToEntero
Dim Nom As New ClsNominas
If Nom.RemoveNom_Nominas(Cve) Then
Alert("Los Movimientos de la Nómina fueron eliminados", TipoMensaje.MsgInformacion)
CargaDatos()
End If
Nom.Dispose()
End Sub
Protected Sub ImgCancelar_Click(sender As Object, e As EventArgs)
Dim CveNomina As Integer = DirectCast(sender, LinkButton).CommandArgument.ToEntero
If CveNomina > 0 Then
Dim Nom As New ClsNominas
If Nom.GetNom_Nominas(CveNomina, -1, -1, -1, UsuarioActual.CveEmpresa) Then
Dim ObjTimbrado As New Timbrado
Dim FolioFiscal As String = Nom.FolioFiscal
Dim Total As Decimal = Nom.Total
Dim RFCReceptor As String = Nom.RFC
Dim RFCEmisor As String = UsuarioActual.Empresa.RFC
If ObjTimbrado.CFDICancelar(UsuarioActual.Empresa, FolioFiscal, Total, RFCReceptor, RFCEmisor) Then
Nom.UpdateEstatusNomNominas(2, UsuarioActual.Empresa.CvePAC, "", "", ("01/01/2000").ToDate, CveNomina, 0, 0, 0, 0, 0)
Alert("La nómina con folio fiscal fue cancelada ante el SAT", TipoMensaje.MsgInformacion)
End If
End If
Nom.Dispose()
CargaDatos()
End If
End Sub
Private Sub ImgExcel_Click(sender As Object, e As EventArgs) Handles ImgExcel.Click
GVDatos.Columns(0).Visible = False
GVDatos.ExportToExcel("Nomina")
GVDatos.Columns(0).Visible = True
End Sub
Protected Sub BtnAutorizar_Click(sender As Object, e As EventArgs) Handles BtnAutorizar.Click
'DTConceptos
'DTResultados
' Dim CvePeriodo As Integer
If Not (DdlAgrupador.SelectedValue = "1" AndAlso DdlProyecto.SelectedValue = "-1" AndAlso DdlSubProyecto.SelectedValue = "-1" AndAlso DdlTurno.SelectedValue = "-1") Then
Alert("Seleccione el agrupador Empresa y limpie los filtros", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim Errores As Boolean = False
Dim objAsistencias As New ClsRH
'Checar la existencia de este personal
If objAsistencias.GetAsistenciasPeriodo(CvePeriodoSeleccionado, UsuarioActual.CveEmpresa) Then
If objAsistencias.DtResultados.COUNT("CvePersonal", "Asistencias <> DiasPeriodo") = 0 Then
For Each Row As DataRow In DTResultados.FiltraParametros("CvePersonal > 0").Rows
Dim objNomina As New ClsNominas
Dim CveNomina As Integer = Row("CveNomina").ToString.ToEntero
Dim CvePersonal As Integer = Row("CvePersonal").ToString.ToEntero
Dim NombrePersonal As String = Row("Nombre").ToString
Dim CveMetodoPago As Integer = Row("CveMetodoPago").ToString.ToEntero
If CveNomina = 0 Then
objNomina.IniciaTransacSQL()
Errores = False
Dim SubTotal As Double = Row("SumaPercepciones").ToString.ToDouble
Dim Total As Double = Row("Total").ToString.ToDouble
Dim CveMoneda As Integer = 1
'RMF, verificar este ciclo, que no debe de ir
'For i As Integer = 0 To GVDatos.Rows.Count - 1
' If GVDatos.Rows(i).FCLabel("LblCvePersonal").Text.ToEntero = CvePersonal Then
' CveNomina = GVDatos.Rows(i).DataKey("CveNomina").ToEntero '.FCLabel("LblCveNomina").Text.ToEntero
' SubTotal = GVDatos.Rows(i).Cells(16).Text.ToDecimal
' Total = GVDatos.Rows(i).Cells(28).Text.ToDecimal
' Exit For
' End If
'Next
If objNomina.AddNom_Nominas(-1, 1, CvePersonal, CvePeriodoSeleccionado, SubTotal, 0, 0, Total, CveMoneda, 1, CveMetodoPago, Now, "Deducciones nómina",
"", "", "", "", 0, 0, 0, New Date, New Date, New Date, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then
CveNomina = objNomina.CveNomina
'recorro los conceptos y saco el valor
For Each drr As DataRow In DTConceptos.Rows
Dim Importe As Decimal = Row(drr("CveConcepto").ToString).ToString.ToDecimal
Dim ImporteExento As Decimal = Row(String.Format("{0}-E", drr("CveConcepto"))).ToString.ToDecimal
Dim ImporteGravado As Decimal = Row(String.Format("{0}-G", drr("CveConcepto"))).ToString.ToDecimal
Dim CveConcepto As Integer = drr("CveConcepto").ToString.ToEntero
'If Importe > 0 OrElse drr("CveSATConcepto").ToString.ToEntero > 0 Then
'JLL Se quita el OrElse, siempre que el importe sea mayor a cero debe ingresarse
If Importe > 0 OrElse drr("Obligatorio").ToString = "True" Then
Errores = Not objNomina.AddNom_NominasDetalles(objNomina.CveNomina, CvePeriodoSeleccionado, CvePersonal, CveConcepto, Importe, ImporteGravado, ImporteExento)
End If
If Errores Then Exit For
Next
'RECORRO LOS CONCEPTOS OBLIGATORIOS QUE DEBE DE HABER EN LAS AUTORIZACIONES COMO SUELDO
'For Each drr As DataRow In GlobalDTNomConceptos(UsuarioActual.CveEmpresa).FiltraParametros("Obligatorio = True").Rows
' Errores = Not objNomina.AddNom_NominasDetalles(objNomina.CveNomina, CvePeriodoSeleccionado, CvePersonal, drr("CveConcepto").ToString.ToEntero, 0, 0, 0)
'Next
''Inicia del 9, porque anteriores a esa son columnas fijas, y apartir de alli inician las columnas variables
'For i As Integer = 9 To DTResultados.Columns.Count - 1
' Dim Importe As Decimal = Row(i).ToString.ToDecimal
' Dim ImporteExento As Decimal = Row(i + 1).ToString.ToDecimal
' Dim ImporteGravado As Decimal = Row(i + 2).ToString.ToDecimal
' Dim CveConcepto As Integer = DTResultados.Columns(i).ColumnName.ToEntero
' If Importe > 0 Then
' Errores = Not objNomina.AddNom_NominasDetalles(objNomina.CveNomina, CvePeriodo, CvePersonal, CveConcepto, Importe, ImporteGravado, ImporteExento)
' End If
' If Errores = True Then
' Exit For
' End If
' i = i + 2
'Next
Else
Errores = True
End If
If Errores = False Then
objNomina.Commit()
Else
objNomina.RollBack()
End If
End If
objNomina.Dispose()
Next
'ACTUALIZO EL PERIODO, COMO AUTORIZADO, RMF, QUE ME REGRESE SI EST[A COMPLETA LA NOMINA AUTORIZADA O FALTAN EMPLEADOS
If Errores = False Then
Dim ObjPeriodo As New ClsNominas
If ObjPeriodo.CambiaEstatusPeriodo(CvePeriodoSeleccionado, enumNominasEstatus.Autorizada, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) And ObjPeriodo.UpdatePeriodoFechaPago(CvePeriodoSeleccionado, TxtFechaPago.Text.ToDate) Then
BtnEmitir.Visible = True
Dim temp As String = DdlPeriodo.SelectedValue
CargaPeriodos()
DdlPeriodo.SelectedValue = temp
End If
ObjPeriodo.Dispose()
End If
BtnConsultar_Click(New Object, New EventArgs)
Else
Dim Msg As String = String.Empty
Dim StrErrores As New StringBuilder
For Each Row As DataRow In objAsistencias.DtResultados.FiltraParametros("Asistencias <> DiasPeriodo").Rows
StrErrores.AppendFormat("- {0}, {1} de {2} <br />", Row("Nombre"), Row("Asistencias"), Row("DiasPeriodo"))
Next
Alert("No se pudo autorizar el siguiente personal por no tener completas las asistencias: <br /><br />" & StrErrores.ToString, TipoMensaje.MsgAdvertencia)
End If
End If
objAsistencias.Dispose()
End Sub
Protected Sub BtnEmitir_Click(sender As Object, e As EventArgs) Handles BtnEmitir.Click
If False Then 'UsuarioActual.CveUsuario <> 100 AndAlso (Now.Hour > 7 And Now.Hour <18) Then
Alert("Los servicios de timbrado de nómina del PAC no están disponibles. Favor de intentarlo más tarde.", TipoMensaje.MsgError)
Else
If Not (DdlAgrupador.SelectedValue = "1" AndAlso DdlProyecto.SelectedValue = "-1" AndAlso DdlSubProyecto.SelectedValue = "-1") Then
Alert("Seleccione el agrupador Empresa y limpie los filtros", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
'Dim StrErrores As New StringBuilder
Dim Msg As String = String.Empty
'Dim CvePeriodo As Integer
Dim noCiclos As Integer = 0
Dim noTotal As Integer = DTResultados.FiltraParametros("CvePersonal > 0 and SeTimbro = False AND SerieFolio <> ''").Rows.Count
'For Each Row As DataRow In DTResultados.FiltraParametros("CvePersonal > 0 and SeTimbro = False AND SerieFolio <> ''").Rows
' If noCiclos < 4 Then
' noCiclos = noCiclos + 1
' Dim CveNomina As Integer = Row("CveNomina").ToString.ToEntero
' Dim CvePersonal As Integer = Row("CvePersonal").ToString.ToEntero
' Dim SerieFolio As String = Row("SerieFolio").ToString
' CvePeriodo = Row("CvePeriodo").ToString.ToEntero
' If CveNomina > 0 Then
' If DdlEjercicios.SelectedValue.ToEntero < 2017 Then
' Msg = "No se puede timbrar del 2017"
' ' Msg = TimbrarNomina11(CveNomina, CvePersonal, CvePeriodo)
' Else
' Msg = TimbrarNomina12(CveNomina, CvePersonal, CvePeriodo)
' End If
' 'If Msg = "" Then
' ' Dim NombreComercial As String = UsuarioActual.Empresa.Empresa
' ' Dim Destinatario As String = Row("Mail").ToString
' ' Dim Personal As String = Row("Nombre").ToString
' ' Dim objNommina As New ClsNominas
' ' objNommina.GetPeriodos(-1, UsuarioActual.Empresa.CveEmpresa, -1, -1, Periodo)
' ' Dim DT As DataTable = objNommina.DtResultados
' ' Dim FechaI = DT.Rows(0)("FechaInicio").ToString.ToDate.ToShortDateString
' ' Dim FechaF = DT.Rows(0)("FechaFin").ToString.ToDate.ToShortDateString
' ' MandaCorreo(NombreComercial, SerieFolio, Destinatario, Personal, FechaI, FechaF)
' 'End If
' If Msg.Trim <> String.Empty Then StrErrores.Append(Msg & "<br />")
' End If
' Else
' Exit For
' End If
'Next
'GC.Collect()
'StrErrores.ToString().GuardaLog()
'If StrErrores.ToString <> "" Then
' Alert($" Ocurrieron los siguientes errores al timbrar: <br /> {StrErrores.ToString()} <br />{noCiclos} timbres de {noTotal}", TipoMensaje.MsgError)
'Else
Alert($" Se ha generado su solicitud de timbre un vez procesada se le enviara un correo con los resultados.<br />", TipoMensaje.MsgInformacion)
If DdlTurno.SelectedValue = "-1" Then
Dim ObjPeriodo As New ClsNominas()
ObjPeriodo.CambiaEstatusPeriodo(CvePeriodoSeleccionado, enumNominasEstatus.PorAutorizar, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
ObjPeriodo.Dispose()
'EnvioMasivoCorreo()
Dim temp As String = DdlPeriodo.SelectedValue
CargaPeriodos()
BtnEmitir.Visible = False
DdlPeriodo.SelectedValue = temp
End If
'End If
'If StrErrores.ToString <> "" Then
' Alert($"Ocurrieron los siguientes errores al timbrar: <br /> {StrErrores.ToString}", TipoMensaje.MsgError)
'Else
' Alert("La Nómina Se Timbró correctamente.", TipoMensaje.MsgInformacion)
' 'RMF. se debe de actualizar el estatus de la nomina y activar el siguiente periodo al estatus activo
' 'condicion temporal, para filtrar por filtro y timbrar por partes y no marque timeout
' If DdlTurno.SelectedValue = "-1" Then
' Dim ObjPeriodo As New ClsNominas
' ObjPeriodo.CambiaEstatusPeriodo(CvePeriodoSeleccionado, 3, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
' ObjPeriodo.Dispose()
' EnvioMasivoCorreo()
' Dim temp As String = DdlPeriodo.SelectedValue
' CargaPeriodos()
' DdlPeriodo.SelectedValue = temp
' End If
'End If
CargaDatos()
UPDatos.Update()
End If
End Sub
Private Sub MandaCorreo(NombreComercial As String, SerieFolio As String, Destinatario As String, Optional Personal As String = "", Optional FechaI As String = "", Optional FechaF As String = "", Optional CvePeriodo As Integer = -1, Optional CvePersonal As Integer = -1)
Dim RutaXml As String = String.Format("{0}\XML\Nomina\{1}.xml", UsuarioActual.Empresa.Ruta, SerieFolio)
Dim RutaPdf As String = String.Format("{0}\PDF\Nomina\{1}.pdf", UsuarioActual.Empresa.Ruta, SerieFolio)
If Destinatario.Length > 0 Then
Dim Correo As New ClsSisMail()
Dim Asunto As String = "Comprobante de Nómina"
Dim Cuerpo As New StringBuilder
Cuerpo.AppendFormat("Estimado <b>{0}</b> <br>Por este medio le hacemos llegar los comprobantes fiscales de su nomina, correspondiente al periodo del {1} al {2}<br><br>", Personal, FechaI, FechaF)
Cuerpo.AppendFormat("<br>{0}", NombreComercial)
Dim Xml As New ClsSisMail.ArchivoMail
Dim Pdf As New ClsSisMail.ArchivoMail
Dim ListaAdjuntos As New List(Of ClsSisMail.ArchivoMail)
If File.Exists(RutaXml) Then
Xml.ArchivoBinario() = File.ReadAllBytes(RutaXml)
Xml.Ruta = ""
Xml.NombreArchivo = New FileInfo(SerieFolio + ".Xml").Name
ListaAdjuntos.Add(Xml)
End If
If Not File.Exists(RutaPdf) Then
GeneraPDFNomina(CvePersonal, CvePeriodo, UsuarioActual.CveEmpresa, UsuarioActual.Empresa.Ruta)
End If
If File.Exists(RutaPdf) Then
Pdf.ArchivoBinario() = File.ReadAllBytes(RutaPdf)
Pdf.Ruta = ""
Pdf.NombreArchivo = New FileInfo(SerieFolio + ".Pdf").Name
ListaAdjuntos.Add(Pdf)
End If
If ListaAdjuntos.Count > 0 Then
If Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString, Archivos:=ListaAdjuntos) Then
' Alert("Correo enviado existosamente a " & Destinatario)
Else
' Alert("Se presento un error al enviar el correo a " & Destinatario)
End If
Else
If Correo.SendMail(UsuarioActual.Empresa, Destinatario, Asunto, Cuerpo.ToString) Then
' Alert("Correo enviado existosamente a " & Destinatario)
Else
' Alert("Se presento un error al enviar el correo a " & Destinatario)
End If
End If
Else
End If
End Sub
Protected Sub BtnGeneraPDF_Click(sender As Object, e As EventArgs) Handles BtnGeneraPDF.Click
Dim objPersonal As New ClsRH
Dim objNomina As New ClsNominas
For Each Row As DataRow In DTResultados.FiltraParametros("CvePersonal > 0 AND SeTimbro = True ").Rows
'Dim CveNomina As Integer = Row("CveNomina").ToString.ToEntero
'Dim CvePersonal As Integer = Row("CvePersonal").ToString.ToEntero
'Dim CvePeriodo As Integer = Row("CvePeriodo").ToString.ToEntero
If Row("CveNomina").ToString.ToEntero > 0 Then
objPersonal.GetPersonal(Row("CvePersonal").ToString.ToEntero, UsuarioActual.CveEmpresa)
objNomina.GetNom_Nominas(Row("CveNomina").ToString.ToEntero, Row("CvePersonal").ToString.ToEntero, Row("CvePeriodo").ToString.ToEntero, -1, UsuarioActual.CveEmpresa)
If objNomina.Folio > 0 Then
'GeneraPDF(String.Format("{0}XML\Nomina\{1}-{2}.xml", Ruta, objNomina.Serie, objNomina.Folio), Row("CvePersonal").ToString.ToEntero, Row("CvePeriodo").ToString.ToEntero, objPersonal.FormatoReciboCFDi)
Else
Alert("Error", TipoMensaje.MsgError)
End If
End If
Next
objNomina.Dispose()
objPersonal.Dispose()
objNomina = Nothing
objPersonal = Nothing
End Sub
Protected Sub BtnActualizaNomina_Click(sender As Object, e As EventArgs) Handles BtnActualizaNomina.Click
Dim objNomina As New ClsNominas
'saco el nombre de la columna ISR,
Dim SubTotal, Deducciones, ISR As Double
Dim Total As Double
Dim ColISR As String = ""
Dim dr As DataRow = DTConceptos.FiltroPrimero("CveSATConcepto = 3") 'saco los tipo ISR
If dr IsNot Nothing Then
ColISR = dr("CveConcepto").ToString
End If
For Each Row As DataRow In DTResultados.FiltraParametros("CvePersonal > 0 AND CveNomina > 0").Rows
SubTotal = Row("SumaPercepciones").ToString.ToDouble
Total = Row("Total").ToString.ToDouble
Deducciones = Row("SumaDeducciones").ToString.ToDouble
ISR = Row(String.Format("{0}", ColISR)).ToString.ToDouble
Deducciones = Deducciones - ISR
If objNomina.UpdateTotalesNominas(SubTotal, Deducciones, ISR, Total, Row("CveNomina").ToString.ToEntero) Then
End If
Next
objNomina.Dispose()
End Sub
#End Region
#Region "GvDatos"
Protected Sub GvDatos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GVDatos.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.DBCampo("Turno") = "" AndAlso e.Row.DBCampo("Nombre") = "" AndAlso e.Row.DBCampo("SubProyecto") <> "" Then
e.Row.FCLiteral("LtlNombre").Text = String.Format("<b>Sub Proyecto: {0}<b>", e.Row.DBCampo("SubProyecto"))
e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Left
ElseIf e.Row.DBCampo("Turno") <> "" AndAlso e.Row.DBCampo("Nombre") = "" Then
e.Row.FCLiteral("LtlNombre").Text = String.Format("Turno: {0}", e.Row.DBCampo("Turno"))
e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Left
Else
e.Row.Cells(0).HorizontalAlign = HorizontalAlign.Left
e.Row.FCLiteral("LtlNombre").Text = String.Format("<a class=""Texto"" href=""/RH/Personal.aspx?CvePersonal={0}"">{1}</a>", e.Row.DBCampo("CvePersonal"), e.Row.DBCampo("Nombre"))
End If
If e.Row.DBCampo("Turno") = "" AndAlso e.Row.DBCampo("Nombre") = "" AndAlso e.Row.DBCampo("SubProyecto") = "" Then
e.Row.FCLiteral("LtlNombre").Text = "Total General"
e.Row.CssClass = "SubTotales"
e.Row.Cells(0).Text = ""
End If
e.Row.FindControl("LnkTimbrar").Visible = (e.Row.DBCampo("CveNomina").ToEntero > 0 AndAlso e.Row.DBCampo("SeTimbro").ToString = "False")
'Visible='<%# If(Eval("CveNomina").ToString <> "" And Eval("SeTimbro").ToString = "False", True, False)%>'
If e.Row.DBCampo("CveNomina").ToEntero > 0 And e.Row.DBCampo("CvePersonal").ToEntero > 0 Then
e.Row.FCImage("ImgBandera").Visible = True
If e.Row.DBCampo("SeTimbro").ToString = "True" Then
e.Row.FCImage("ImgBandera").ImageUrl = "/Imagenes/flag_green.png"
e.Row.ForeColor = Color.Green
Else
e.Row.FCImage("ImgBandera").ImageUrl = "/Imagenes/flag_red.png"
e.Row.ForeColor = Color.Blue
End If
End If
End If
End Sub
#End Region
#Region "P D F"
Private Sub GeneraPDF(CveNomina As Integer, CvePersonal As Integer, CvePeriodo As Integer, FechaCFDi As DateTime, FolioFiscal As String, NoSerieCertificado As String, FechaCertificacion As DateTime, NoSerieCertificadoContribuyente As String,
SelloCFDi As String, SelloSAT As String, CBB As String, RutaXML As String, EsVistaPrevia As Boolean, CadenaOriginalCFD As String, FormatoReciboCFDi As String)
End Sub
Private Sub GeneraPDFNuevo(PathXML As String, CvePersonal As Integer, CvePeriodo As Integer)
Dim ObjNomina As New ClsNominas
Dim objPersonal As New ClsRH
Dim TieneError = False
If Not ObjNomina.GetNom_Nominas(-1, CvePersonal, CvePeriodo, -1, UsuarioActual.CveEmpresa) Then
Alert("Ocurrio un erro al obtener datos de la nomina", TipoMensaje.MsgError)
objPersonal.Dispose()
ObjNomina.Dispose()
Exit Sub
End If
Dim CveNomina = ObjNomina.CveNomina
Dim dtPercepciones As Data.DataTable
Dim dtDeducciones As Data.DataTable
Dim FechaEmision, FechaCertificacion As DateTime
Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String
FolioFiscal = ""
NoSerieCertificado = ""
SelloCFDi = ""
SelloSAT = ""
NoSerieCertificadoContribuyente = ""
Dim SerieFolio = String.Format("{0}-{1}", ObjNomina.Serie, ObjNomina.Folio)
Dim RutaCBB As String = Ruta & "CBB\" & SerieFolio & ".jpg"
Dim ImagenCBB As New System.IO.FileInfo(RutaCBB)
Dim ImgCBB = String.Format("{0}://{1}:{2}/Empresas/{3}/CBB/Nomina/{4}.jpg", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa, SerieFolio)
Dim RutaFormato As String = String.Format("{0}Formatos\Nomina.rdlc", UsuarioActual.Empresa.Ruta)
Dim RutaFormatoDefault As String = String.Format("Empresas\Grales\Formatos\Nomina.rdlc")
'SI ESTA TIMBRADA - CON XML
If System.IO.File.Exists(PathXML) Then
Dim XmlDoc As New System.Xml.XmlDocument
'XmlDoc.Load(Ruta & "XML\\Nomina\NOM A-3845.xml")
XmlDoc.Load(PathXML)
FechaEmision = XmlDoc.DocumentElement.Attributes("fecha").InnerText.ToDate
NoSerieCertificadoContribuyente = XmlDoc.DocumentElement.Attributes("noCertificado").InnerText
For i As Integer = 0 To XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes.Count - 1
If XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Name = "tfd:TimbreFiscalDigital" Then
FolioFiscal = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("UUID").InnerText
NoSerieCertificado = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("noCertificadoSAT").InnerText
FechaCertificacion = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("FechaTimbrado").InnerText.ToDate
SelloCFDi = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloCFD").InnerText
SelloSAT = XmlDoc.DocumentElement("cfdi:Complemento").ChildNodes(i).Attributes("selloSAT").InnerText
End If
Next
'SIN TIMBRAR - SIN XML
Else
FolioFiscal = "Sin Timbrar"
NoSerieCertificado = "Sin Timbrar"
SelloCFDi = "Sin Timbrar"
SelloSAT = "Sin Timbrar"
End If
Dim CadenaOriginalCFD As String = "||1.0|" + FolioFiscal + "|" + FechaCertificacion.ToString("yyyy-MM-dd") + "T" + FechaCertificacion.ToString("HH:mm:ss") + "|" + SelloCFDi + "|" + NoSerieCertificado + "||"
Dim params As New List(Of ReportParameter)
'DATOS DEL EMPLEADO
If objPersonal.GetPersonal(CvePersonal, UsuarioActual.CveEmpresa) Then
Dim Departamento As DataRow = GlobalDTDepartamentos().FiltraParametros("CveDepartamento = " & objPersonal.CveDepartamento)(0)
Dim Puesto As DataRow = GlobalDTRHPuestos(UsuarioActual.CveEmpresa).FiltraParametros($"CvePuesto = {objPersonal.CvePuesto}")(0)
Dim TipoContrato As DataRow = GlobalDTTiposContrato().FiltraParametros("CveTipoContrato = " & objPersonal.CveTipoContrato.ToString)(0)
params.Add(New ReportParameter("NoEmpleado", objPersonal.Codigo))
params.Add(New ReportParameter("RFC", objPersonal.RFC))
params.Add(New ReportParameter("CURP", objPersonal.CURP))
params.Add(New ReportParameter("NombreCompleto", objPersonal.NombreCompleto))
params.Add(New ReportParameter("Regimen", objPersonal.RegimenContratacion))
params.Add(New ReportParameter("RiesgoPuesto", objPersonal.RiesgoPuesto))
params.Add(New ReportParameter("NSS", objPersonal.NumeroSS))
params.Add(New ReportParameter("Departamento", Departamento("Departamento").ToString))
params.Add(New ReportParameter("Puesto", Puesto("Puesto").ToString))
params.Add(New ReportParameter("Contrato", TipoContrato("TipoContrato").ToString))
params.Add(New ReportParameter("Jornada", objPersonal.Jornada))
params.Add(New ReportParameter("Periodo", ObjNomina.TipoPeriodo))
params.Add(New ReportParameter("SalarioBase", objPersonal.SalarioDiario))
params.Add(New ReportParameter("SalarioDiarioInt", objPersonal.SDI))
params.Add(New ReportParameter("Banco", objPersonal.Banco))
params.Add(New ReportParameter("CLABE", objPersonal.CLABE))
Else
TieneError = True
End If
'DATOS NOMINA
If Not TieneError Then
If ObjNomina.GetNom_Nominas(CveNomina, CvePersonal, CvePeriodo, -1, UsuarioActual.CveEmpresa) Then
params.Add(New ReportParameter("ReciboNomina", ObjNomina.Folio.ToString))
params.Add(New ReportParameter("Serie", ObjNomina.Serie))
params.Add(New ReportParameter("Fecha", ObjNomina.Fecha))
params.Add(New ReportParameter("Periodo", ObjNomina.TipoPeriodo))
params.Add(New ReportParameter("DiasPagados", ObjNomina.DiasPagados.ToString))
params.Add(New ReportParameter("MetodoPago", ObjNomina.MetodoPago))
params.Add(New ReportParameter("FormaPago", ObjNomina.FormaPago))
params.Add(New ReportParameter("Cantidad", "1"))
params.Add(New ReportParameter("Unidad", "SERVICIO"))
params.Add(New ReportParameter("Descripcion", "Pago de nómina"))
params.Add(New ReportParameter("PU", ObjNomina.SubTotal))
params.Add(New ReportParameter("Importe", ObjNomina.SubTotal))
params.Add(New ReportParameter("SubTotal", ObjNomina.SubTotal))
params.Add(New ReportParameter("Descuentos", ObjNomina.Descuento))
params.Add(New ReportParameter("ISR", ObjNomina.RetISR))
params.Add(New ReportParameter("Total", ObjNomina.Total))
params.Add(New ReportParameter("ImporteLetra", ObjNomina.Total.ToString.ToDouble.Texto2Letras))
params.Add(New ReportParameter("Clave", ""))
Else
TieneError = True
End If
End If
If Not TieneError Then
If ObjNomina.GetPeriodos(-1, UsuarioActual.CveEmpresa, -1, -1, CvePeriodo) Then
params.Add(New ReportParameter("FechaInicio", ObjNomina.FechaInicio.ToString("dd/MM/yyyy")))
params.Add(New ReportParameter("FechaFin", ObjNomina.FechaFin.ToString("dd/MM/yyyy")))
Else
TieneError = True
End If
End If
'Timbrado
params.Add(New ReportParameter("FolioFiscal", FolioFiscal))
params.Add(New ReportParameter("CertificadoSAT", NoSerieCertificado))
params.Add(New ReportParameter("FechaCertificacion", FechaCertificacion))
params.Add(New ReportParameter("SelloDigitalEmisor", SelloCFDi))
params.Add(New ReportParameter("SelloDigitalSAT", SelloSAT))
params.Add(New ReportParameter("CadenaOriginal", CadenaOriginalCFD))
params.Add(New ReportParameter("QR", ImgCBB))
'PERCECIONES - DEDUCCIONES
If ObjNomina.GetNom_NominasDetalles(CveNomina, CvePersonal, CvePeriodo, "-1") Then
dtPercepciones = ObjNomina.DtResultados.FiltraParametros("Tipo = 'P' AND EsPadre = 1")
dtDeducciones = ObjNomina.DtResultados.FiltraParametros("Tipo = 'D' AND EsPadre = 1 ")
Else
dtPercepciones = Nothing
dtDeducciones = Nothing
End If
Dim lrds As New List(Of ReportDataSource)
Dim rds As New ReportDataSource
rds.Name = "DsOC"
rds.Value = dtPercepciones
lrds.Add(rds)
Dim rds1 As New ReportDataSource
rds1.Name = "DataSet1"
rds1.Value = dtDeducciones
lrds.Add(rds1)
Dim Archivo As New System.IO.FileInfo(RutaFormato)
If Not TieneError Then
If Archivo.Exists Then
'ImprimirPDF(String.Format("{0}Formatos\Nomina.rdlc", UsuarioActual.Empresa.Ruta), lrds, params, String.Format("Nomina {0}-{1}", ObjNomina.Serie.ToString, ObjNomina.Folio.ToString))
StreamPDF(String.Format("{0}Formatos\Nomina.rdlc", UsuarioActual.Empresa.Ruta), lrds, params, String.Format("Nomina {0}-{1}", ObjNomina.Serie.ToString, ObjNomina.Folio.ToString))
End If
Else
Alert("Ocurrio un error al obtener los datos de la Nomina")
End If
ObjNomina.Dispose()
objPersonal.Dispose()
End Sub
#End Region
#Region "TIMBRADO"
Private Function TimbrarNomina12(CveNomina As Integer, CvePersonal As Integer, CvePeriodo As Integer) As String
Dim Retorno As String = ""
UsuarioActual.Empresa.CvePAC = 2
Dim sw As New Diagnostics.Stopwatch
sw.Start()
Select Case UsuarioActual.Empresa.CvePAC
Case 1
Retorno = False 'TimbrarBIInformNomina12(CveNomina, CvePersonal, CvePeriodo)
Case 2
Dim cfdi As CFDITimbre = PreTimbrar(CveNomina, CvePersonal, CvePeriodo)
If cfdi IsNot Nothing AndAlso cfdi.Mensaje = "" Then
Dim ObjTimbrado As New Timbrado
Dim ObjFactura As New Modelos.Factura
ObjFactura.TipoDocto = "Nomina"
ObjFactura.Folio = cfdi.Comprobante.Folio
ObjFactura.Serie = cfdi.Comprobante.Serie
ObjFactura.Timbre = cfdi
If Not ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura, 4) Then
Retorno = ObjTimbrado.MensajeErrorCFDI
End If
'Retorno = TimbrarFacturaRealVirtual(cfdi, UsuarioActual)
If Retorno <> "" Then
Retorno = $"{Retorno} - {cfdi.Receptor.Nombre}"
Else
'Genero la addenda Ford
' GeneraPDFNuevo(String.Format("{0}XML\Nomina\{1}.xml", Ruta, NominaFolio), CvePersonal, CvePeriodo)
End If
Else
Retorno = $"No se pudo generar el pretimbre: <br/> {cfdi.Mensaje}"
End If
End Select
sw.Stop()
GuardaLogTimbrado(sw.ElapsedMilliseconds.ToString, UsuarioActual.Empresa.CvePAC, "Nomina")
Return Retorno
End Function
'Private Function TimbrarBIInformNomina12(CveNomina As Integer, CvePersonal As Integer, CvePeriodo As Integer) As String
' If UsuarioActual.CveEmpresa = 8 Then
' UsuarioActual.Empresa.FacturaProduccion = True
' End If
' 'UsuarioActual.Empresa.FacturaProduccion = False
' Dim MsgError As String = String.Empty
' Dim CFDi As New ClbNegBICFDv3_2.ClsNegEDI
' CFDi.ObjCompNomina12 = New ClbNegBICFDv3_2.ClsNegComplementoNomina12()
' 'CFDi.ObjCompNomina = New ClbNegBICFDv3_2.ClsNegCompNomina
' Dim objPersonal As New ClsRH
' Dim objNomina As New ClsNominas
' objPersonal.GetPersonal(CvePersonal, UsuarioActual.CveEmpresa)
' objNomina.GetNom_Nominas(CveNomina, CvePersonal, CvePeriodo, -1, UsuarioActual.CveEmpresa)
' Dim Total As Decimal = 0
' Dim SubTotal As Decimal = 0
' Dim Descuentos As Decimal = 0
' Dim RetISR As Decimal = 0
' Dim TotalExcento As Decimal = 0
' Dim TotalGravado As Decimal = 0
' Dim TotalPercepciones As Decimal = 0
' Dim TotalDeducciones As Decimal = 0
' Dim TotalOtrosPagos As Decimal = 0
' Dim Serie As String = objNomina.Serie
' Dim Folio As String = objNomina.Folio.ToString
' Dim NominaFolio As String = Serie & "-" & Folio
' Dim RFC As String = objPersonal.RFC.Trim
' Dim Nombre As String = objPersonal.NombreCompleto.Trim
' Dim Direccion As String = String.Format("{0} {1} {2}", objPersonal.Calle.Trim, objPersonal.NumExt.Trim, objPersonal.NumInt.Trim).Trim
' Dim Ciudad As String = objPersonal.Ciudad.Trim
' Dim Estado As String = objPersonal.Estado.Trim
' Dim CP As String = objPersonal.CP.Trim
' 'Dim TipoContrato As String = GlobalDTTiposContrato.FiltraParametros("CveTipoContrato = " + objPersonal.CveTipoContrato.ToString)(0)("TipoContrato").ToString
' 'Dim TipoPeriodo As String = GlobalDTTipoPeriodo.FiltraParametros("CveTipoPeriodo = " + objPersonal.CveTipoPeriodo.ToString)(0)("TipoPeriodo").ToString
' Dim AntiguedadSemanas As Integer = DateDiff(DateInterval.Weekday, objPersonal.FechaIngreso, Now).ToEntero
' Dim FormatoReciboCFDi As String = objPersonal.FormatoReciboCFDi
' Dim FechaInicio, FechaFin, FechaPago As Date
' Dim DiasPagados As Integer = 0
' Dim Msg As String = String.Empty
' Dim DiasIncapacitados As Integer = 0
' Dim DrPeriodo As DataRow = Nothing
' If objNomina.GetPeriodos(-1, UsuarioActual.CveEmpresa, -1, -1, CvePeriodo) Then
' If objNomina.DtResultados.Rows().Count > 0 Then
' DrPeriodo = objNomina.DtResultados.Rows(0)
' End If
' End If
' 'Dim DrPeriodo As DataRow = GlobalDTNominasPeriodos(-1, CvePeriodo, -1).FiltroPrimero("")
' If DrPeriodo IsNot Nothing Then
' FechaInicio = DrPeriodo("FechaInicio").ToString.ToDate
' FechaFin = DrPeriodo("FechaFin").ToString.ToDate
' FechaPago = DrPeriodo("FechaPago").ToString.ToDate
' If objPersonal.GetAsistencias(CvePersonal, -1, -1, -1, -1, -1, FechaInicio, FechaFin, UsuarioActual.CveEmpresa) Then
' Dim Asistencias As Integer = objPersonal.DtResultados.SUM("AplicaAsistencia").ToEntero
' Dim Vacaciones As Integer = objPersonal.DtResultados.SUM("AplicaVacacion").ToEntero
' DiasIncapacitados = objPersonal.DtResultados.SUM("AplicaIncapacidad").ToEntero
' DiasPagados = Asistencias - Vacaciones
' If DiasPagados < 0 Then DiasPagados = 0
' End If
' End If
' Dim DtPercepciones As Data.DataTable = Nothing
' Dim DtDeducciones As Data.DataTable = Nothing
' Dim DtOtrosPagos As Data.DataTable = Nothing
' If objNomina.GetNom_NominasDetalles(CveNomina, CvePersonal, CvePeriodo, "-1") Then
' If objNomina.DtResultados.Rows.Count > 0 Then
' DtPercepciones = objNomina.DtResultados.FiltraParametros("Tipo = 'P' AND EsPadre = 1 ")
' DtDeducciones = objNomina.DtResultados.FiltraParametros("Tipo = 'D' AND EsPadre = 1 ")
' TotalPercepciones = DtPercepciones.SUM("Importe")
' TotalDeducciones = DtDeducciones.SUM("Importe")
' Total = CType((Total + DtPercepciones.SUM("Importe")), Decimal)
' End If
' End If
' 'Tipo Nomina O de Ordinaria o E de extraordinaria
' 'Dim FechaPago As Date = Now
' Dim TotalSueldos As Decimal = 0
' Dim TotalIndemnizacion As Decimal = 0
' Dim TotalJubilacion As Decimal = 0
' Msg = CFDi.ObjCompNomina12.Cargar("O", FechaPago, FechaInicio, FechaFin, DiasPagados, TotalPercepciones, TotalDeducciones, 0)
' If Msg = String.Empty Then
' If DtPercepciones IsNot Nothing Then
' If DtPercepciones.Rows.Count > 0 Then
' TotalSueldos = DtPercepciones.SUM("Importe", "SATCveConcepto = '001'")
' TotalIndemnizacion = DtPercepciones.SUM("Importe", "SATCveConcepto IN ('022','023','025')") ' https://www.ccpm.org.mx/avisos/nuevo-complemento-de-nomina-version-1.2-puntos-finos-diciembre-2016.pdf
' TotalJubilacion = DtPercepciones.SUM("Importe", "SATCveConcepto IN ('039','044')") 'https://www.ccpm.org.mx/avisos/nuevo-complemento-de-nomina-version-1.2-puntos-finos-diciembre-2016.pdf
' Msg = CFDi.ObjCompNomina12.CargarPercepciones(TotalSueldos, TotalIndemnizacion, TotalJubilacion, DtPercepciones.SUM("ImporteGravado").ToDecimal, DtPercepciones.SUM("ImporteExento").ToDecimal)
' End If
' For Each Row As DataRow In DtPercepciones.Rows
' If Row("Importe").ToString.ToDecimal > 0 Then
' If Row("CveSATConcepto").ToString = "" Then
' Msg = String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)
' Else
' Msg = CFDi.ObjCompNomina12.AgregarPercepcion(Row("SATCveConcepto").ToString, Row("Codigo").ToString, Row("Concepto").ToString, Row("ImporteGravado").ToString.ToDecimal, Row("ImporteExento").ToString.ToDecimal)
' TotalExcento = TotalExcento + Row("ImporteExento").ToString.ToDecimal
' TotalGravado = TotalGravado + Row("ImporteGravado").ToString.ToDecimal
' SubTotal = SubTotal + Row("Importe").ToString.ToDecimal
' End If
' If Msg <> String.Empty Then
' Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Percepcion", New Exception)
' Exit For
' End If
' End If
' 'RMF, falta poner el numero de horas pagadas
' If Row("CveSATConcepto").ToString.ToEntero = 19 Then 'cuando son horas extras
' 'Obtengo el desglose de horas extras
' If objNomina.GetHorasExtras(CvePersonal, CvePeriodo, UsuarioActual.CveEmpresa) Then
' Dim dr As DataRow = objNomina.DtResultados.FiltroPrimero("")
' If dr IsNot Nothing Then
' If dr("HorasDobles").ToString.ToDouble > 0 Then CFDi.ObjCompNomina12.AgregarHorasExtra(dr("DiasHorasDobles").ToString.ToEntero, ClbNegBICFDv3_2.TipoHoras.Dobles, dr("HorasDobles").ToString.ToEntero, Row("Importe").ToString.ToDecimal)
' If dr("HorasTriples").ToString.ToDouble > 0 Then CFDi.ObjCompNomina12.AgregarHorasExtra(dr("DiasHorasTriples").ToString.ToEntero, ClbNegBICFDv3_2.TipoHoras.Triples, dr("HorasTriples").ToString.ToEntero, Row("Importe").ToString.ToDecimal)
' End If
' End If
' End If
' Next
' If Msg = "" Then
' CFDi.ObjCompNomina12.ObjPercepciones.TotalExento = TotalExcento
' CFDi.ObjCompNomina12.ObjPercepciones.TotalGravado = TotalGravado
' End If
' End If
' 'cargo las incapacidades
' If DiasIncapacitados > 0 Then
' If objNomina.GetIncapacidades(CvePersonal, CvePeriodo, UsuarioActual.CveEmpresa) Then
' CFDi.ObjCompNomina12.CargarIncapacidades()
' For Each dr As DataRow In objNomina.DtResultados.Rows
' CFDi.ObjCompNomina12.AgregarIncapacidad(dr("Dias").ToString.ToDecimal, dr("ClaveTipoIncapacidad").ToString.ToEntero, dr("Descuento").ToString.ToDecimal)
' Next
' End If
' End If
' TotalExcento = 0
' TotalGravado = 0
' If Msg = String.Empty Then
' If DtDeducciones IsNot Nothing Then
' If DtDeducciones.Rows.Count > 0 Then
' Total = CType((Total - DtDeducciones.SUM("Importe")), Decimal)
' CFDi.ObjCompNomina12.CargarDeducciones(CType(DtDeducciones.SUM("ImporteGravado"), Decimal), CType(DtDeducciones.SUM("ImporteExento"), Decimal))
' End If
' For Each Row As DataRow In DtDeducciones.Rows
' If Row("Importe").ToString.ToDecimal > 0 Then
' If Row("CveSATConcepto").ToString = "" Then
' Msg = String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)
' Else
' Msg = CFDi.ObjCompNomina12.AgregarDeduccion(Row("SATCveConcepto").ToString, Row("Codigo").ToString, Row("Concepto").ToString, 0)
' TotalExcento = TotalExcento + Row("ImporteExento").ToString.ToDecimal
' TotalGravado = TotalGravado + Row("ImporteGravado").ToString.ToDecimal
' If Row("CveSATConcepto").ToString.ToEntero = 3 Then
' RetISR = RetISR + Row("Importe").ToString.ToDecimal
' Else
' Descuentos = Descuentos + Row("Importe").ToString.ToDecimal
' End If
' End If
' If Msg <> String.Empty Then
' Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Deduccion", New Exception)
' Exit For
' End If
' End If
' Next
' If Msg = "" Then
' If CFDi.ObjCompNomina12.ObjDeducciones IsNot Nothing Then
' CFDi.ObjCompNomina12.ObjDeducciones.TotalOtrasDeducciones = Descuentos
' CFDi.ObjCompNomina12.ObjDeducciones.TotalImpuestosRetenidos = RetISR
' End If
' End If
' End If
' If Msg = String.Empty Then
' If DtOtrosPagos IsNot Nothing Then
' If DtOtrosPagos.Rows.Count > 0 Then
' Total = CType((Total - DtOtrosPagos.SUM("Importe")), Decimal)
' CFDi.ObjCompNomina12.CargarOtrosPagos()
' End If
' For Each Row As DataRow In DtOtrosPagos.Rows
' If Row("Importe").ToString.ToDecimal > 0 Then
' If Row("CveSATConcepto").ToString = "" Then
' Msg = String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)
' Else
' Msg = CFDi.ObjCompNomina12.AgregarOtroPago(Row("SATCveConcepto").ToString, Row("Codigo").ToString, Row("Concepto").ToString, 0)
' 'Msg = CFDi.ObjCompNomina12.CargarSubsidioAlEmpleo(0)
' 'Msg = CFDi.ObjCompNomina12.CargarCompensacionSaldosAFavor(0, 0, 0)
' End If
' If Msg <> String.Empty Then
' Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Otros Pagos", New Exception)
' Exit For
' End If
' End If
' Next
' End If
' If Msg = String.Empty Then
' Dim x As Integer = 0
' Dim Moneda As String = "MXN"
' Dim LugarExp As String = String.Format("{0}, {1}, {2}, {3}, {4}, {5}, {6}, {7}, {8} ", SucCalle, SucNoExt, SucNoInt, SucColonia, SucLocalidad, SucMunicipio, SucEstado, SucPais, SucCP)
' Dim FechaFactura As DateTime = Now
' 'Nodo Comprobante
' Dim TipoComprobante As ClbNegBICFDv3_2.TipoDeComprobante = ClbNegBICFDv3_2.TipoDeComprobante.egreso
' Msg = CFDi.comprobantecfd(0, 0, Serie, Folio, FechaFactura, "PAGO EN UNA SOLA EXHIBICION", "CONTADO", SubTotal, Descuentos, "Deducciones nómina", "1", Moneda, Total, objPersonal.MetodoPagoSAT, ClbNegBICFDv3_2.TipoDeComprobante.egreso, LugarExp, "", "", "", New Date(1900, 1, 1), 0)
' If Msg = String.Empty Then
' 'Nodo emisor
' Msg = CFDi.ObjCompNomina12.CargarEmisor("", UsuarioActual.Empresa.RegistroPatronal, UsuarioActual.Empresa.RFC)
' 'If Msg = String.Empty Then Msg = CFDi.EmisorRegimen(UsuarioActual.Empresa.CodigoRegimenFiscal)
' If Msg = String.Empty Then
' 'Nodo Entidad SNCF
' If 1 = 2 Then 'cuando es gobierno
' Msg = CFDi.ObjCompNomina12.CargarEntidadSNCF("", 0)
' End If
' If Msg = String.Empty Then
' 'Nodo Receptor
' Msg = CFDi.ObjCompNomina12.CargarReceptor(objPersonal.CURP, objPersonal.NumeroSS, objPersonal.FechaInicioContrato, AntiguedadSemanas, objPersonal.TipoContrato, "", objPersonal.ClaveTipoJornada, objPersonal.CveRegimenContratacion, objPersonal.Codigo.ToString,
' objPersonal.Departamento, objPersonal.Puesto, objPersonal.CveRiesgoPuesto, objPersonal.TipoPeriodo, objPersonal.ClaveBanco, objPersonal.BancoNumCuenta, Total, objPersonal.SDI.ToString.ToDecimal, objPersonal.ClaveEstado)
' If Msg = String.Empty Then
' 'Nodo SubContratacion
' If 1 = 2 Then Msg = CFDi.ObjCompNomina12.AgregarSubContratacion("", 0)
' If Msg = String.Empty Then
' CFDi.LstCompNomina12.Add(CFDi.ObjCompNomina12)
' Dim HasErrorConceptos As Boolean = False
' 'Dim Importe As Decimal = 0
' Msg = CFDi.ConceptosCfd(1, "ACT", "", "Pago de nómina", SubTotal, SubTotal)
' 'Timbrado
' 'Web Services de producción: http://biinform.com.mx/srvCFDi/service1.asmx
' 'Web Services de pruebasd: http://biinform.com.mx/srvCFDiPrueba/service1.asmx
' Dim WS As String = String.Empty
' If UsuarioActual.Empresa.FacturaProduccion Then
' WS = "http://portalbiinform.com.mx/srvCFDiPrueba/service1.asmx"
' Else
' WS = "http://portalbiinform.com.mx/srvCFDiPrueba/service1.asmx"
' End If
' If Not System.IO.Directory.Exists(Ruta & "XML\") Then System.IO.Directory.CreateDirectory(Ruta & "XML\")
' If Not System.IO.Directory.Exists(Ruta & "XML\Nomina\") Then System.IO.Directory.CreateDirectory(Ruta & "XML\Nomina\")
' 'Generar Timbre
' 'If UsuarioActual.Empresa.FacturaProduccion Then
' If 1 = 2 Then
' CFDi.Generar(String.Format("{0}Certificados\{1}", Ruta, UsuarioActual.Empresa.ArchivoPfx),
' UsuarioActual.Empresa.ContraseñaKey,
' String.Format("{0}Certificados\{1}", Ruta, UsuarioActual.Empresa.ArchivoCer),
' String.Format("{0}XML\Nomina\{1}.xml", Ruta, NominaFolio),
' String.Format("{0}Certificados\", Ruta),
' UsuarioActual.Empresa.BIUsuario,
' UsuarioActual.Empresa.BIContraseña,
' WS,
' True)
' Else
' If Not System.IO.Directory.Exists(Ruta & "XML\Nomina\Demo\") Then System.IO.Directory.CreateDirectory(Ruta & "XML\Nomina\Demo\")
' 'RutaPruebas & "XML\Demo\" & NominaFolio & ".xml",
' CFDi.Generar(String.Format("{0}Certificados\aaa010101aaa__csd_01.pfx", RutaPruebas),
' "12345678a",
' String.Format("{0}Certificados\aaa010101aaa__csd_01.cer", RutaPruebas),
' String.Format("{0}XML\Nomina\Demo\{1}.xml", Ruta, NominaFolio),
' String.Format("{0}Certificados\", RutaPruebas),
' "prueba",
' "123",
' WS,
' True)
' End If
' If CFDi.MsgError <> String.Empty Then
' 'OnError("Ocurrió un error al generar el timbre: " & CFDi.MsgError, New Exception)
' Dim params As New ActualizaTimbre
' params.Estatus = False
' params.CveNomina = CveNomina
' params.CvePAC = 1
' 'Dim Hilo As New System.Threading.Thread(AddressOf ActualizaTimbrado)
' 'Hilo.Start(params)
' BtnAutorizar.Enabled = False
' MsgError = "Nombre: " & Nombre & ". Error: " & CFDi.MsgError
' Else
' 'Actualiza Estatus Timbrado
' Dim params As New ActualizaTimbre
' params.Estatus = True
' params.CveNomina = CveNomina
' params.CvePAC = 1
' 'Dim Hilo As New System.Threading.Thread(AddressOf ActualizaTimbrado)
' 'Hilo.Start(params)
' Dim CBB As New ClbNegBICFDv3_2.ClsNegCBBGenerar()
' Dim FechaCertificacion As DateTime
' Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String
' FolioFiscal = CFDi.Timbrado.UUDI 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText
' NoSerieCertificado = CFDi.Timbrado.NoCertificadoSAT
' FechaCertificacion = CFDi.Timbrado.FechaTimbrado
' SelloCFDi = CFDi.Timbrado.SelloCFD
' SelloSAT = CFDi.Timbrado.SelloSAT
' NoSerieCertificadoContribuyente = CFDi.Timbrado.NoCertificado
' ViewState("FolioFiscal") = FolioFiscal
' 'Actualiza Estatus Factura
' CveNominaT = CveNomina
' Dim Rastro As String = String.Format("Nomina: CvePeriodo:{0}, CvePersonal:{1}, UUID: {2}, RFC:{3}", CvePeriodo, CvePersonal, FolioFiscal, objPersonal.RFC)
' Rastro.GuardaLog()
' If FolioFiscal <> "" Then
' 'If UsuarioActual.Empresa.FacturaProduccion Then
' ' Dim ObjNomina2 As New ClsNominas()
' ' ObjNomina2.UpdateEstatusNomNominas(3, UsuarioActual.Empresa.CvePAC, FolioFiscal, "", ("01/01/2000").ToDate, CveNomina, SubTotal, Descuentos, RetISR, Total, DiasPagados)
' ' ObjNomina2.Dispose()
' 'End If
' Rastro = "--Estatus" & Rastro
' Rastro.GuardaLog()
' 'Dim Hilo1 As New System.Threading.Thread(AddressOf ActualizaEstatus)
' 'Hilo1.Start(3)
' End If
' Dim RutaCBB As String = String.Empty
' If Not System.IO.Directory.Exists(Ruta & "CBB\") Then System.IO.Directory.CreateDirectory(Ruta & "CBB\")
' If Not System.IO.Directory.Exists(Ruta & "CBB\Nomina\") Then System.IO.Directory.CreateDirectory(Ruta & "CBB\Nomina\")
' If UsuarioActual.Empresa.FacturaProduccion Then
' RutaCBB = Ruta & "CBB\Nomina\" & NominaFolio & ".jpg"
' Else
' If Not System.IO.Directory.Exists(Ruta & "CBB\Nomina\Demo\") Then System.IO.Directory.CreateDirectory(Ruta & "CBB\Nomina\Demo\")
' RutaCBB = Ruta & "CBB\Nomina\Demo\" & NominaFolio & ".jpg"
' End If
' CBB.GenerarCBB(UsuarioActual.Empresa.RFC, RFC, Total, FolioFiscal, RutaCBB)
' 'GeneraPDF(FechaFactura, FolioFiscal, NoSerieCertificado, FechaCertificacion, NoSerieCertificadoContribuyente, TmpDT, SelloCFDi, SelloSAT, RutaCBB, VentaFolio, Ruta & "XML\" & VentaFolio & ".xml", False, CFDi.CadenaOriginal)
' 'GeneraPDF(CveNomina, CvePersonal, CvePeriodo, FechaFactura, FolioFiscal, NoSerieCertificado, FechaCertificacion, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT, RutaCBB, Ruta & "Nomina\XML\" & NominaFolio & ".xml", False, CFDi.Timbrado.CadenaOriginal, FormatoReciboCFDi)
' GeneraPDFNuevo(String.Format("{0}XML\Nomina\{1}.xml", Ruta, NominaFolio), CvePersonal, CvePeriodo)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorRegimen", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorRegimen", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorDomicilioExpedidoEn", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorDomicilioExpedidoEn", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorDomicilioFiscalCfd", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorDomicilioFiscalCfd", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorCfd", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: EmisorCfd", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre)
' End If
' Else
' 'Me.OnError(String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre), New Exception)
' MsgError = String.Format("El SAT regresó el siguiente mensaje: {0} Nombre: {1}. Objeto: Comprobante", Msg, Nombre)
' End If
' objPersonal.Dispose()
' objNomina.Dispose()
' Return MsgError
'End Function
Private Function PreTimbrar(CveNomina As Integer, CvePersonal As Integer, CvePeriodo As Integer) As CFDITimbre
Dim cfdi As New CFDITimbre
Dim objPersonal As New ClsRH
Dim objNomina As New ClsNominas
objPersonal.GetPersonal(CvePersonal, UsuarioActual.CveEmpresa)
objNomina.GetNom_Nominas(CveNomina, CvePersonal, CvePeriodo, -1, UsuarioActual.CveEmpresa)
Dim DtPercepciones As Data.DataTable = Nothing
Dim DtDeducciones As Data.DataTable = Nothing
Dim DtOtrosPagos As Data.DataTable = Nothing
Dim TotalPercepciones As Decimal = 0
Dim TotalDeducciones As Decimal = 0
Dim TotalOtrosPagos As Decimal = 0
Dim Total As Decimal = 0
If objNomina.GetNom_NominasDetalles(CveNomina, CvePersonal, CvePeriodo, "-1") Then
If objNomina.DtResultados.Rows.Count > 0 Then
DtPercepciones = objNomina.DtResultados.FiltraParametros("Tipo = 'P' AND EsPadre = 1 ")
DtDeducciones = objNomina.DtResultados.FiltraParametros("Tipo = 'D' AND EsPadre = 1 ")
TotalPercepciones = DtPercepciones.SUM("Importe")
TotalDeducciones = DtDeducciones.SUM("Importe")
Total = CType((Total + DtPercepciones.SUM("Importe")), Decimal)
End If
End If
'nota. siempre y cuando halla concepto 19
Dim DtHorasExtras As Data.DataTable = Nothing
If objNomina.GetHorasExtras(CvePersonal, CvePeriodo, UsuarioActual.CveEmpresa) Then
DtHorasExtras = objNomina.DtResultados
End If
Dim TotalExcento As Decimal = 0
Dim TotalGravado As Decimal = 0
Dim AntiguedadSemanas As Integer = DateDiff(DateInterval.Weekday, objPersonal.FechaIngreso, Now).ToEntero
Dim FormatoReciboCFDi As String = objPersonal.FormatoReciboCFDi
Dim FechaInicio, FechaFin, FechaPago As Date
Dim DiasPagados As Integer = 0
Dim Msg As String = String.Empty
Dim DiasIncapacitados As Integer = 0
Dim DrPeriodo As DataRow = Nothing
If objNomina.GetPeriodos(-1, UsuarioActual.CveEmpresa, -1, -1, CvePeriodo) Then
If objNomina.DtResultados.Rows().Count > 0 Then
DrPeriodo = objNomina.DtResultados.Rows(0)
End If
End If
'Dim DrPeriodo As DataRow = GlobalDTNominasPeriodos(-1, CvePeriodo, -1).FiltroPrimero("")
If DrPeriodo IsNot Nothing Then
FechaInicio = DrPeriodo("FechaInicio").ToString.ToDate
FechaFin = DrPeriodo("FechaFin").ToString.ToDate
FechaPago = DrPeriodo("FechaPago").ToString.ToDate
If objPersonal.GetAsistencias(CvePersonal, -1, -1, -1, -1, -1, FechaInicio, FechaFin, UsuarioActual.CveEmpresa) Then
Dim Asistencias As Integer = objPersonal.DtResultados.SUM("AplicaAsistencia").ToEntero
Dim Vacaciones As Integer = objPersonal.DtResultados.SUM("AplicaVacacion").ToEntero
DiasIncapacitados = objPersonal.DtResultados.SUM("AplicaIncapacidad").ToEntero
DiasPagados = Asistencias - Vacaciones
If DiasPagados < 0 Then DiasPagados = 0
End If
End If
'Tipo Nomina O de Ordinaria o E de extraordinaria
'Dim FechaPago As Date = Now
Dim TotalSueldos As Decimal = 0
Dim TotalIndemnizacion As Decimal = 0
Dim TotalJubilacion As Decimal = 0
cfdi.Nomina = New CFDINomina
cfdi.Nomina.Version = "1.2"
cfdi.Nomina.TipoNomina = If(objNomina.CveTipoPeriodo = 6, "E", "O")
cfdi.Nomina.FechaPago = FechaPago
cfdi.Nomina.FechaInicio = FechaInicio
cfdi.Nomina.FechaFin = FechaFin
cfdi.Nomina.NumDiasPagados = DiasPagados
cfdi.Emisor.Nombre = UsuarioActual.Empresa.Empresa
cfdi.Emisor.RFC = UsuarioActual.Empresa.RFC
cfdi.Emisor.RegistroPatronal = UsuarioActual.Empresa.RegistroPatronal
cfdi.Emisor.RegimenFiscal = UsuarioActual.Empresa.CodigoRegimenFiscal
'aplica persona fisica debe de tener CURP
If cfdi.Emisor.RegimenFiscal.Contiene("605", "606", "608", "611", "612", "614", "616", "621", "622", "629", "630", "615") Then
cfdi.Emisor.CURP = UsuarioActual.Empresa.CURP
End If
cfdi.Nomina.CveNomina = CveNomina
cfdi.Receptor.UsoCFDI = "P01"
cfdi.Receptor.RFC = objPersonal.RFC
cfdi.Receptor.Nombre = objPersonal.NombreCompleto
If DtPercepciones IsNot Nothing Then
If DtPercepciones.Rows.Count > 0 Then
Dim ObjPercepciones As New List(Of CFDINominaPercepciones)
Dim ObjHorasExtras As New List(Of CFDINominaHorasExtras)
Dim ObjOtrosPagos As New List(Of CFDINominaOtrosPagos)
For Each Row As DataRow In DtPercepciones.Rows
If Row("Importe").ToString.ToDecimal > 0 AndAlso Row("SATCveConcepto").ToString.ToEntero <> 17 Then
If Row("CveSATConcepto").ToString = "" Then cfdi.AddMsg(String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)) : Exit For
ObjPercepciones.Add(New CFDINominaPercepciones With {.TipoPercepcion = Row("SATCveConcepto").ToString,
.Clave = Row("Codigo").ToString,
.Concepto = Row("Concepto").ToString,
.ImporteGravado = Row("ImporteGravado").ToString.ToDecimal,
.ImporteExento = Row("ImporteExento").ToString.ToDecimal}
)
End If
'RMF, falta poner el numero de horas pagadas
If Row("CveSATConcepto").ToString.ToEntero = 19 Then 'cuando son horas extras
'Obtengo el desglose de horas extras
If DtHorasExtras IsNot Nothing Then
Dim dr As DataRow = DtHorasExtras.FiltroPrimero("")
If dr IsNot Nothing Then
If dr("HorasDobles").ToString.ToDouble > 0 Then ObjHorasExtras.Add(New CFDINominaHorasExtras With {.Dias = dr("DiasHorasDobles").ToString.ToEntero, .TipoHoras = "01", .HorasExtra = dr("HorasDobles").ToString.ToEntero, .ImportePagado = Row("Importe").ToString.ToDecimal})
If dr("HorasTriples").ToString.ToDouble > 0 Then ObjHorasExtras.Add(New CFDINominaHorasExtras With {.Dias = dr("DiasHorasTriples").ToString.ToEntero, .TipoHoras = "02", .HorasExtra = dr("HorasTriples").ToString.ToEntero, .ImportePagado = Row("Importe").ToString.ToDecimal})
End If
End If
End If
'subsidio al empleo
If Row("SATCveConcepto").ToString.ToEntero.ToEntero = 17 AndAlso Row("Importe").ToString.ToDecimal > 0 Then 'Subsidio
ObjOtrosPagos.Add(New CFDINominaOtrosPagos With {.TipoOtroPago = "002", ' codigo fijo, por ser refernte a subsidio al empleo
.Clave = Row("Codigo").ToString,
.Concepto = Row("Concepto").ToString,
.Importe = Row("Importe").ToString.ToDecimal}
)
End If
Next
If ObjPercepciones IsNot Nothing AndAlso ObjPercepciones.Count > 0 Then cfdi.Nomina.Percepciones = ObjPercepciones
If ObjHorasExtras IsNot Nothing AndAlso ObjHorasExtras.Count > 0 Then cfdi.Nomina.HorasExtras = ObjHorasExtras
If ObjOtrosPagos IsNot Nothing AndAlso ObjOtrosPagos.Count > 0 Then cfdi.Nomina.OtrosPagos = ObjOtrosPagos
End If
End If
'cargo las incapacidades
If DiasIncapacitados > 0 Then
If objNomina.GetIncapacidades(CvePersonal, CvePeriodo, UsuarioActual.CveEmpresa) Then
If objNomina.DtResultados IsNot Nothing AndAlso objNomina.DtResultados.Rows.Count > 0 Then
Dim ObjIncapacidades As New List(Of CFDINominaIncapacidades)
For Each dr As DataRow In objNomina.DtResultados.Rows
ObjIncapacidades.Add(New CFDINominaIncapacidades With {.DiasIncapacidad = dr("Dias").ToString.ToEntero, .TipoIncapacidad = dr("ClaveTipoIncapacidad").ToString, .Importe = dr("Descuento").ToString.ToDecimal})
Next
If ObjIncapacidades IsNot Nothing AndAlso ObjIncapacidades.Count > 0 Then cfdi.Nomina.Incapacidades = ObjIncapacidades
End If
End If
End If
TotalExcento = 0
TotalGravado = 0
If DtDeducciones IsNot Nothing Then
If DtDeducciones.Rows.Count > 0 Then
Dim ObjDeducciones As New List(Of CFDINominaDeducciones)
For Each Row As DataRow In DtDeducciones.Rows
If Row("Importe").ToString.ToDecimal > 0 Then
If Row("CveSATConcepto").ToString = "" Then cfdi.AddMsg(String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)) : Exit For
ObjDeducciones.Add(New CFDINominaDeducciones With {.TipoDeduccion = Row("SATCveConcepto").ToString,
.Clave = Row("Codigo").ToString,
.Concepto = Row("Concepto").ToString,
.Importe = Row("Importe").ToString.ToDecimal}
)
End If
Next
If ObjDeducciones IsNot Nothing AndAlso ObjDeducciones.Count > 0 Then cfdi.Nomina.Deducciones = ObjDeducciones
End If
End If
'If DtOtrosPagos IsNot Nothing Then
' If DtOtrosPagos.Rows.Count > 0 Then
' ' Total = CType((Total - DtOtrosPagos.SUM("Importe")), Decimal)
' Dim ObjOtrosPagos As New List(Of CFDINominaOtrosPagos)
' ' End If
' ' For Each Row As DataRow In DtOtrosPagos.Rows
' ' If Row("Importe").ToString.ToDecimal > 0 Then
' ' If Row("CveSATConcepto").ToString = "" Then
' ' Msg = String.Format("Concepto No registrado ({0})", Row("Concepto").ToString)
' ' Else
' ' Msg = cfdi.ObjCompNomina12.AgregarOtroPago(Row("SATCveConcepto").ToString, Row("Codigo").ToString, Row("Concepto").ToString, 0)
' ' 'Msg = CFDi.ObjCompNomina12.CargarSubsidioAlEmpleo(0)
' ' 'Msg = CFDi.ObjCompNomina12.CargarCompensacionSaldosAFavor(0, 0, 0)
' ' End If
' ' If Msg <> String.Empty Then
' ' Me.OnError("El SAT regresó el siguiente mensaje: " & Msg & ". Objeto: Otros Pagos", New Exception)
' ' Exit For
' ' End If
' ' End If
' ' Next
' If ObjOtrosPagos IsNot Nothing AndAlso ObjOtrosPagos.Count > 0 Then cfdi.Nomina.OtrosPagos = ObjOtrosPagos
' End If
'End If
cfdi.Comprobante.Version = "3.3"
cfdi.Comprobante.Serie = objNomina.Serie
cfdi.Comprobante.Folio = objNomina.Folio
cfdi.Comprobante.Fecha = Now
cfdi.Comprobante.Subtotal = cfdi.Nomina.TotalPercepciones + cfdi.Nomina.TotalOtrosPagos
cfdi.Comprobante.Descuentos = cfdi.Nomina.TotalDeducciones
cfdi.Comprobante.Total = cfdi.Comprobante.Subtotal - cfdi.Comprobante.Descuentos 'cfdi.Nomina.TotalPercepciones + cfdi.Nomina.TotalOtrosPagos - cfdi.Nomina.TotalDeducciones
cfdi.Comprobante.MotivoDescuento = "" '"Deducciones nómina"
cfdi.Comprobante.Moneda = "MXN"
cfdi.Comprobante.TipoComprobante = "N"
cfdi.Comprobante.TipoDocto = "Egs"
cfdi.Comprobante.MetodoPago = "PUE"
cfdi.Comprobante.CondicionesdePago = "" '"CONTADO"
cfdi.Comprobante.FormadePago = "99"
cfdi.Comprobante.LugarExpedicion = UsuarioActual.Empresa.CP ' AHORITA SOLO SE REQUIERE ESPECIFICAR EL CODIGO POSTAL
cfdi.Comprobante.NumCuentaPago = "" 'objPersonal.BancoNumCuenta
cfdi.Nomina.Receptor.CURP = objPersonal.CURP
cfdi.Nomina.Receptor.NSS = objPersonal.NumeroSS
cfdi.Nomina.Receptor.FechaInicioContrato = objPersonal.FechaInicioContrato
cfdi.Nomina.Receptor.Antiguedad = $"P{AntiguedadSemanas}W"
cfdi.Nomina.Receptor.TipoContrato = objPersonal.CodigoTipoContrato
cfdi.Nomina.Receptor.CodigoTipoJornada = objPersonal.ClaveTipoJornada
cfdi.Nomina.Receptor.CodigoRegimenContratacion = objPersonal.CveRegimenContratacion
cfdi.Nomina.Receptor.CodigoEmpleado = objPersonal.Codigo
cfdi.Nomina.Receptor.Departamento = objPersonal.Departamento
cfdi.Nomina.Receptor.Puesto = objPersonal.Puesto
cfdi.Nomina.Receptor.CodigoRiesgoPuesto = objPersonal.CveSATRiesgoPuesto
cfdi.Nomina.Receptor.TipoPeriodo = objPersonal.TipoPeriodoPago
cfdi.Nomina.Receptor.CodigoBanco = objPersonal.ClaveBanco
cfdi.Nomina.Receptor.NumeroCuenta = objPersonal.BancoNumCuenta
cfdi.Nomina.Receptor.SDI = objPersonal.SDI
cfdi.Nomina.Receptor.SBC = objPersonal.SDI
cfdi.Nomina.Receptor.Sindicalizado = ""
cfdi.Nomina.Receptor.CodigoEntidadFederativa = objPersonal.ClaveEstado
cfdi.Conceptos.Add(New CFDIConceptos With {.Cantidad = 1, .ClaveUnidad = "ACT", .ClaveProdServ = "84111505", .Descripcion = "Pago de nómina", .ValorUnitario = cfdi.Comprobante.Subtotal, .Importe = cfdi.Comprobante.Subtotal, .Descuento = cfdi.Nomina.TotalDeducciones})
objPersonal.Dispose()
objNomina.Dispose()
Return cfdi
End Function
' Private Function TimbrarFacturaRealVirtual(ObjCFDITimbre As CFDITimbre, UsuarioActual As Usuario) As String
' Dim Retorno As String = ""
' ' 'Sucursal matriz de la empresa
' Dim ArchivoLLave As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoKey}"
' Dim ArchivoCertificado As String = $"{UsuarioActual.Empresa.Ruta}Certificados\{UsuarioActual.Empresa.ArchivoCer}"
' Dim UsuarioServicio As String = UsuarioActual.Empresa.RFC
' Dim ClaveServicio As String = UsuarioActual.Empresa.RFC.ToLower
' Dim Clave As String = UsuarioActual.Empresa.ContraseñaKey
' Dim RFCPrueba As String = "AAA010101AAA"
' Dim UrlServicio As String = "http://generacfdi.com.mx/rvltimbrado/service1.asmx?WSDL" ' Produccion
' Dim RutaArchivo As String = $"{UsuarioActual.Empresa.Ruta}XML\Nomina\"
' Dim NombreArchivoXML As String = $"{ObjCFDITimbre.Comprobante.SerieFolio}"
' Dim SubTotal As Decimal = 0
' If Not UsuarioActual.Empresa.FacturaProduccion Then
' UsuarioServicio = "fgomez"
' ClaveServicio = "12121212"
' Clave = "12345678a"
' ArchivoLLave = $"{UsuarioActual.Empresa.Ruta}Certificados\aad990814bp7_1210261233s.key"
' ArchivoCertificado = $"{UsuarioActual.Empresa.Ruta}Certificados\aad990814bp7_1210261233s.cer"
' UrlServicio = "http://108.60.211.43/rvltimbrado/service1.asmx"
' End If
'#Region "Valida"
' If Not File.Exists(ArchivoCertificado) Then
' Alert("El archivo de certificado no existe", TipoMensaje.MsgError)
' Return False
' End If
' If Not File.Exists(ArchivoLLave) Then
' Alert("El archivo de llave privada no existe", TipoMensaje.MsgError)
' Return False
' End If
' If UsuarioActual.Empresa.ContraseñaKey = "" Then
' Alert("La clave no puede ser vacía", TipoMensaje.MsgError)
' Return False
' End If
'#End Region
'#Region "Variables"
' Dim llaveByte As Byte(), certByte As Byte()
' Dim llaveBase64 As String, certBase64 As String
' Dim cfdi As New RVCFDI.GeneraCFDI()
' Dim complemento As String = ""
' Dim complementoConcepto As String = ""
'#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 False
' 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 False
' End Try
'#End Region
' cfdi.saltarValidacion("bNtMuvZockPVhEjaPj0E")
'#Region "Certificado"
' cfdi.agregarCertificado(ArchivoCertificado)
'#End Region
'#Region "Comprobante"
' cfdi.agregarComprobante(ObjCFDITimbre.Comprobante.Version,
' ObjCFDITimbre.Comprobante.Serie,
' ObjCFDITimbre.Comprobante.Folio,
' ObjCFDITimbre.Comprobante.Fecha.ToString("yyyy-MM-ddTHH:mm:ss"),
' ObjCFDITimbre.Comprobante.FormadePago,
' ObjCFDITimbre.Comprobante.CondicionesdePago,
' ObjCFDITimbre.Comprobante.Subtotal,
' ObjCFDITimbre.Comprobante.Descuentos,
' ObjCFDITimbre.Comprobante.MotivoDescuento,
' ObjCFDITimbre.Comprobante.TipoCambio,
' ObjCFDITimbre.Comprobante.Moneda,
' ObjCFDITimbre.Comprobante.Total,
' ObjCFDITimbre.Comprobante.TipoComprobante,
' ObjCFDITimbre.Comprobante.MetodoPago,
' ObjCFDITimbre.Comprobante.LugarExpedicion,
' ObjCFDITimbre.Comprobante.NumCuentaPago)
'#Region "Emisor"
' cfdi.agregarEmisor(If(UsuarioActual.Empresa.FacturaProduccion, UsuarioActual.Empresa.RFC, RFCPrueba), UsuarioActual.Empresa.Empresa)
' cfdi.agregarRegimenFiscal(UsuarioActual.Empresa.CodigoRegimenFiscal)
'#End Region
'#Region "Receptor"
' cfdi.agregarReceptor(ObjCFDITimbre.Receptor.RFC, ObjCFDITimbre.Receptor.Nombre)
'#End Region
'#Region "Conceptos"
' 'Nodo conceptos, se agregan los PS
' If ObjCFDITimbre.Conceptos IsNot Nothing AndAlso ObjCFDITimbre.Conceptos.Count > 0 Then
' For Each concep As CFDIConceptos In ObjCFDITimbre.Conceptos
' cfdi.agregarConcepto(concep.Cantidad, concep.Unidad, concep.Noidentificacion, concep.Descripcion, concep.ValorUnitario, concep.Importe)
' Next
' End If
'#End Region
'#Region "Impuestos"
' cfdi.agregarImpuestos(0, 0)
'#End Region
' '#Region "Retenciones"
' 'cfdi.agregarRetencion("IVA", 0)
' ' If Ventas.RetISRTC > 0 Then cfdi.agregarRetencion("ISR", Ventas.RetISRTC)
' '#End Region
' '#Region "Traslados"
' ' cfdi.agregarTraslado("IVA", CDec(16.0), Ventas.IVATC)
' ' If Ventas.IEPS > 0 Then cfdi.agregarTraslado("IEPS", 10, Ventas.IEPS)
' '#End Region
'#Region "Nomina12"
' Try
' cfdi._agregadoNomina12 = True
' cfdi.Esquema.AgregarEsquema("http://www.sat.gob.mx/nomina12 http://www.sat.gob.mx/sitio_internet/cfd/nomina/nomina12.xsd")
' cfdi.agregarNomina12(ObjCFDITimbre.Nomina.Version, ObjCFDITimbre.Nomina.TipoNomina, ObjCFDITimbre.Nomina.FechaPago, ObjCFDITimbre.Nomina.FechaInicio, ObjCFDITimbre.Nomina.FechaFin, ObjCFDITimbre.Nomina.NumDiasPagados, ObjCFDITimbre.Nomina.TotalPercepciones, ObjCFDITimbre.Nomina.TotalDeducciones, ObjCFDITimbre.Nomina.TotalOtrosPagos)
' cfdi.agregarNominaEmisor12(ObjCFDITimbre.Emisor.CURP, ObjCFDITimbre.Emisor.RegistroPatronal, ObjCFDITimbre.Emisor.RFC)
' If UsuarioActual.Empresa.UsaAC Then cfdi.agregarNominaEmisorEntidadSNCF12("IF", "90")
' If ObjCFDITimbre.Nomina.Percepciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Percepciones.Count > 0 Then
' Dim TotalIndemnizacion As String = If(ObjCFDITimbre.Nomina.TotalIndemnizacion > 0, ObjCFDITimbre.Nomina.TotalIndemnizacion.ToString, "")
' Dim TotalJubilacion As String = If(ObjCFDITimbre.Nomina.TotalJubilacion > 0, ObjCFDITimbre.Nomina.TotalJubilacion.ToString, "")
' cfdi.agregarNominaPercepciones12(ObjCFDITimbre.Nomina.TotalSueldos, TotalIndemnizacion, TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento)
' For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
' cfdi.agregarNominaPercepcionesPercepcion12(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2))
' Next
' End If
' 'cfdi.agregarNominaReceptorSubContratacion12("AAD990814BP6", "50")
' 'cfdi.agregarNominaPercepcionesPercepcionAccionesOTitulos12("100", "200");
' 'cfdi.agregarNominaPercepcionesSeparacionIndemnizacion12("100", "10", "1000", "100", "50");
' 'cfdi.agregarNominaPercepcionesJubilacionPensionRetiro12("50", "100", "10", "100", "0");
' If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
' For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
' cfdi.agregarNominaPercepcionesPercepcionHorasExtra12(HoraExtra.Dias, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado)
' Next
' End If
' If ObjCFDITimbre.Nomina.Incapacidades IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Incapacidades.Count > 0 Then
' For Each Incap As CFDINominaIncapacidades In ObjCFDITimbre.Nomina.Incapacidades
' cfdi.agregarNominaIncapacidadesIncapacidad12(Incap.DiasIncapacidad, Incap.TipoIncapacidad, Incap.Importe)
' Next
' End If
' If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
' cfdi.agregarNominaDeducciones12(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2))
' For Each deduc As CFDINominaDeducciones In ObjCFDITimbre.Nomina.Deducciones
' cfdi.agregarNominaDeduccionesDeduccion12(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2))
' Next
' End If
' If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then
' ' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00");
' ' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00");
' If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing AndAlso ObjCFDITimbre.Nomina.OtrosPagos.Count > 0 Then
' For Each otpag As CFDINominaOtrosPagos In ObjCFDITimbre.Nomina.OtrosPagos
' cfdi.agregarNominaOtrosPagosOtroPago12(otpag.TipoOtroPago, otpag.Clave, otpag.Concepto, otpag.Importe)
' If otpag.TipoOtroPago = "002" Then
' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12(otpag.Importe)
' End If
' Next
' End If
' End If
'#Region "Receptor"
' cfdi.agregarNominaReceptor12(ObjCFDITimbre.Nomina.Receptor.CURP,
' ObjCFDITimbre.Nomina.Receptor.NSS,
' ObjCFDITimbre.Nomina.Receptor.FechaInicioContrato,
' ObjCFDITimbre.Nomina.Receptor.Antiguedad,
' ObjCFDITimbre.Nomina.Receptor.TipoContrato,
' ObjCFDITimbre.Nomina.Receptor.Sindicalizado,
' ObjCFDITimbre.Nomina.Receptor.CodigoTipoJornada,
' ObjCFDITimbre.Nomina.Receptor.CodigoRegimenContratacion,
' ObjCFDITimbre.Nomina.Receptor.CodigoEmpleado,
' ObjCFDITimbre.Nomina.Receptor.Departamento,
' ObjCFDITimbre.Nomina.Receptor.Puesto,
' ObjCFDITimbre.Nomina.Receptor.CodigoRiesgoPuesto,
' ObjCFDITimbre.Nomina.Receptor.TipoPeriodo,
' ObjCFDITimbre.Nomina.Receptor.CodigoBanco,
' ObjCFDITimbre.Nomina.Receptor.NumeroCuenta,
' ObjCFDITimbre.Nomina.Receptor.SBC,
' ObjCFDITimbre.Nomina.Receptor.SDI,
' ObjCFDITimbre.Nomina.Receptor.CodigoEntidadFederativa)
'#End Region
'#End Region
' 'String banco = cfdi.buscarClaveCatalogo("c_Banco", "BANAMEX");
'#End Region
'#Region "Genera XML"
' Try
' cfdi.generaXMLBase64(llaveBase64, Clave)
' cfdi.escribirXML(cfdi.Xml, RutaArchivo, NombreArchivoXML)
' Catch ex As Exception
' End Try
'#End Region
'#Region "Timbra"
' cfdi.timbrar(UsuarioServicio, ClaveServicio, UrlServicio, RutaArchivo, NombreArchivoXML)
'#End Region
' 'Verifica el error
' If cfdi.CodigoError = 0 Then
' Dim FechaCertificacion As DateTime
' Dim FolioFiscal, NoSerieCertificado, NoSerieCertificadoContribuyente, SelloCFDi, SelloSAT As String
' FolioFiscal = obtenerAtributo(cfdi.Xml, "TimbreFiscalDigital", "UUID") 'XmlDoc.DocumentElement("cfdi:Complemento").FirstChild.Attributes("UUID").InnerText
' NoSerieCertificado = obtenerAtributo(cfdi.Xml, "Comprobante", "noCertificado") ''++Pendiente
' FechaCertificacion = obtenerAtributo(cfdi.Xml, "TimbreFiscalDigital", "FechaTimbrado").ToDate
' SelloCFDi = cfdi.SelloEmisor
' SelloSAT = cfdi.SelloSat
' NoSerieCertificadoContribuyente = obtenerAtributo(cfdi.Xml, "TimbreFiscalDigital", "noCertificadoSAT") ''++Pendiente
' If FolioFiscal <> "" Then
' ''Actualiza Estatus Factura
' If UsuarioActual.Empresa.FacturaProduccion Then
' Dim ObjNomina2 As New ClsNominas()
' ObjNomina2.UpdateEstatusNomNominas(3, UsuarioActual.Empresa.CvePAC, FolioFiscal, "", ("01/01/2000").ToDate, ObjCFDITimbre.Nomina.CveNomina, 0, 0, 0, 0, 0)
' ObjNomina2.Dispose()
' End If
' 'Dim ObjVentas As New ClsVentas()
' 'Retorno = ObjVentas.UpdateEstatusFactura(3, FolioFiscal, "", Now, Ventas.CveVenta, CvePAC:=UsuarioActual.Empresa.CvePAC)
' 'ObjVentas.Dispose()
' If Not Directory.Exists(Ruta & "CBB\") Then Directory.CreateDirectory(Ruta & "CBB\")
' If Not Directory.Exists(Ruta & "CBB\Nomina\") Then Directory.CreateDirectory(Ruta & "CBB\Nomina\")
' Dim RutaCBB As String = $"{Ruta}CBB\Nomina\{ObjCFDITimbre.Comprobante.SerieFolio}.jpg"
' Dim b As Byte() = cfdi.ConvertirQrCode($"?re={UsuarioActual.Empresa.RFC}&rr={ObjCFDITimbre.Receptor.RFC}&tt={String.Format("{0,12:F6}", ObjCFDITimbre.Comprobante.Total).Trim()}&id={FolioFiscal}")
' File.WriteAllBytes(RutaCBB, b)
' Retorno = ""
' Else
' Retorno = "No se pudo timbrar ante el SAT. UUID no generado."
' End If
' Else
' Retorno = cfdi.MensajeError
' End If
' Catch ex As Exception
' Retorno = "Error al registrar nómina"
' End Try
' Return Retorno
' End Function
'Private Function obtenerAtributo(cadena_xml As String, nodo As String, nombre_atributo As String) As String
' Try
' 'Variables
' Dim valor As String
' Dim inicio As Integer = 0
' Dim fin As Integer = 0
' Dim inicionodo As Integer = cadena_xml.IndexOf(nodo)
' If inicionodo = -1 Then
' Return ""
' End If
' 'Buscamos inicio
' inicio = cadena_xml.IndexOf((Convert.ToString(" ") & nombre_atributo) + "=""", inicionodo) + nombre_atributo.Length + 3
' 'Buscamos el final
' fin = cadena_xml.IndexOf("""", inicio)
' 'Cortamos la cadena
' valor = cadena_xml.Substring(inicio, fin - inicio)
' 'Retorna el valor
' Return valor
' Catch
' Return ""
' End Try
'End Function
Private Sub ActualizaTimbrado(Data As Object)
Dim Parametros As ActualizaTimbre = CType(Data, ActualizaTimbre)
Dim ObjNomina As New ClsNominas()
ObjNomina.UpdateNom_NominasTimbre(Parametros.Estatus, Parametros.CveNomina)
ObjNomina.Dispose()
End Sub
Private Sub ActualizaCadenaOriginal(CadenaOriginal As Object)
Dim ObjNomina As New ClsNominas()
ObjNomina.UpdateNom_NominaCadenaOriginal(CadenaOriginal.ToString, CveNominaT)
ObjNomina.Dispose()
End Sub
Private Sub ActualizaEstatus(CveEstatus As Object)
'If UsuarioActual.Empresa.FacturaProduccion Then
' Dim ObjNomina As New ClsNominas()
' ObjNomina.UpdateEstatusNom_Nominas(CInt(CveEstatus), FolioFiscal, "", Now, CveNominaT)
' ObjNomina.Dispose()
'End If
End Sub
#End Region
#Region " DESCARGAR ZIP PDF, XML"
Private Sub ImgDownZip_Click(sender As Object, e As EventArgs) Handles ImgDownZip.Click
Dim pathXML As String
Dim pathPDF As String
'Using archive As ZipArchive = Compression.ZipFile.Open(String.Format("{0}nomina.zip", UsuarioActual.Empresa.Ruta), ZipArchiveMode.Create)
' For Each gvr As GridViewRow In GVDatos.Rows
' If gvr.DataKey("CvePersonal").ToEntero > 0 Then
' pathXML = Server.MapPath(String.Format("~/Empresas/{0}/XML/Nomina/{1}.xml", UsuarioActual.CveEmpresa, gvr.DataKey("SerieFolio").ToString))
' pathPDF = Server.MapPath(String.Format("~/Empresas/{0}/PDF/Nomina/{1}.pdf", UsuarioActual.CveEmpresa, gvr.DataKey("SerieFolio").ToString))
' If IO.File.Exists(pathXML) Then
' archive.CreateEntryFromFile(pathXML, String.Format("{0}.xml", gvr.DataKey("SerieFolio").ToString))
' End If
' If IO.File.Exists(pathPDF) Then
' archive.CreateEntryFromFile(pathPDF, String.Format("{0}.pdf", gvr.DataKey("SerieFolio").ToString))
' End If
' End If
' Next
'End Using
'D E S C A R G A I O N I C !
Dim DescargaZIP As Ionic.Zip.ZipFile = New Ionic.Zip.ZipFile()
Using DescargaZIP
For Each gvr As GridViewRow In GVDatos.Rows
If gvr.DataKey("CvePersonal").ToEntero > 0 Then
pathXML = Server.MapPath(String.Format("~/Empresas/{0}/XML/Nomina/{1}.xml", UsuarioActual.CveEmpresa, gvr.DataKey("SerieFolio").ToString))
pathPDF = Server.MapPath(String.Format("~/Empresas/{0}/PDF/Nomina/{1}.pdf", UsuarioActual.CveEmpresa, gvr.DataKey("SerieFolio").ToString))
If IO.File.Exists(pathXML) Then
DescargaZIP.AddFile(pathXML, "")
End If
If IO.File.Exists(pathPDF) Then
DescargaZIP.AddFile(pathPDF, "")
End If
End If
Next
DescargaZIP.Save(Response.OutputStream)
End Using
Response.AddHeader("content-Disposition", "attachment; filename=NominaTimbrado.zip")
Response.ContentType = "application/zip"
Response.End()
End Sub
#End Region
Protected Sub LnkCorreos_Click(sender As Object, e As EventArgs)
EnvioMasivoCorreo()
End Sub
Private Sub EnvioMasivoCorreo()
If GVDatos.Rows.Count > 0 Then
Dim Periodo As Integer = DdlPeriodo.SelectedValue.ToEntero
Dim objNommina As New ClsNominas
objNommina.GetPeriodos(-1, UsuarioActual.Empresa.CveEmpresa, -1, -1, Periodo)
Dim DT As DataTable = objNommina.DtResultados
Dim FechaI = DT.Rows(0)("FechaInicio").ToString.ToDate.ToShortDateString
Dim FechaF = DT.Rows(0)("FechaFin").ToString.ToDate.ToShortDateString
objNommina.Dispose()
For Each gvr As GridViewRow In GVDatos.Rows
If gvr.DataKey("SeTimbro") = "True" Then
Dim NombreComercial As String = UsuarioActual.Empresa.Empresa
Dim SerieFolio As String = gvr.DataKey("SerieFolio")
Dim Personal As String = gvr.DataKey("Nombre")
Dim Destinatario As String = gvr.DataKey("Correo")
Dim cvePeriodo = gvr.DataKey("CvePeriodo").ToString.ToEntero
Dim CvePersonal = gvr.DataKey("CvePersonal").ToString.ToEntero
MandaCorreo(NombreComercial, SerieFolio, Destinatario, Personal, FechaI, FechaF, cvePeriodo, CvePersonal)
End If
Next
Alert("Envio de Correos exitoso", TipoMensaje.MsgInformacion)
Else
Alert("Favor de Carga un Periodo", TipoMensaje.MsgError)
End If
End Sub
End Class
#Region "Nomina"
#End Region