2450 lines
121 KiB
VB.net
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
|