diff --git a/Acumuladores/EntradasUsadosResumenRep.aspx.vb b/Acumuladores/EntradasUsadosResumenRep.aspx.vb
index 8e389cde6..6a4077447 100644
--- a/Acumuladores/EntradasUsadosResumenRep.aspx.vb
+++ b/Acumuladores/EntradasUsadosResumenRep.aspx.vb
@@ -70,14 +70,17 @@ Partial Class Acumuladores_RepEntradasUsados
Dim Mes As String = {"enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"}(Month(Today) - 1)
Dim FechaConFormato As String = String.Format("{0}, {1} de {2} de {3}", Dia, Day(Today), Mes, Year(Today))
-
+ Dim Direccion As String = String.Format("{0} {1}", UsuarioActual.Empresa.Direccion.ToString, UsuarioActual.Empresa.NoExt.ToString)
Dim params As New List(Of ReportParameter)
- params.Add(New ReportParameter("Direccion", "dirección"))
- params.Add(New ReportParameter("FechaConFormato", FechaConFormato))
+ params.Add(New ReportParameter("Direccion", Direccion))
+ params.Add(New ReportParameter("FechaConFormato", Date.Now.ToString))
params.Add(New ReportParameter("FechaInicial", txtFechaI.Text))
params.Add(New ReportParameter("FechaFinal", txtFechaF.Text))
params.Add(New ReportParameter("Sucursal", "Sucursal"))
+ params.Add(New ReportParameter("Almacen", DdlAlmacenes.SelectedItem.ToString))
+ params.Add(New ReportParameter("UsuarioImprimio", UsuarioActual.Nombre))
+
Dim rds As New ReportDataSource With {.Name = "DataSet1", .Value = DatosEntradasUsados}
diff --git a/App_Code/ClsAcumuladores.vb b/App_Code/ClsAcumuladores.vb
index 940bf0817..cd29409c4 100644
--- a/App_Code/ClsAcumuladores.vb
+++ b/App_Code/ClsAcumuladores.vb
@@ -485,7 +485,7 @@ Public Class ClsAcumuladores
#Region " FOLIOS GARANTÍA "
- Public Function FoliosGarantiaGet(CveFolioGarantia As Integer, CveEmpresa As Integer, Optional Estatus As Integer = -1, Optional TipoFolio As String = "-1", Optional Area As Integer = 1) As Boolean
+ Public Function FoliosGarantiaGet(CveFolioGarantia As Integer, CveEmpresa As Integer, Optional Estatus As Integer = -1, Optional CveSubProyecto As Integer = -1, Optional TipoFolio As String = "-1", Optional Area As Integer = 1) As Boolean
Dim Retorno As Boolean = False
'Data = New DataTable
@@ -495,6 +495,7 @@ Public Class ClsAcumuladores
.Add("@CveFolioGarantia", SqlDbType.Int).Value = CveFolioGarantia
.Add("@Estatus", SqlDbType.Int).Value = Estatus
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ .Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto
.Add("@tipoFolio", SqlDbType.VarChar).Value = TipoFolio
.Add("@Area", SqlDbType.Int).Value = Area
End With
diff --git a/App_Code/ClsClientes.vb b/App_Code/ClsClientes.vb
index a1169276d..69ac29dc8 100644
--- a/App_Code/ClsClientes.vb
+++ b/App_Code/ClsClientes.vb
@@ -1026,6 +1026,24 @@ Public Class ClsClientes
OnError("Ocurrió un error al obtener el las Sucursales del Cliente.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
+ Return Retorno
+ End Function
+
+ Public Function GetListaSucursales(RFC As String, CveEmpresa As Integer, Optional CveCliente As Integer = -1, Optional CveClienteSucursal As Integer = -1) As Boolean
+ Dim Retorno As Boolean = False
+
+ DataAdapter("PA_Vta_ClientesSucursalesGet")
+ SqlAdapter.SelectCommand.Parameters.Add("@RFC", SqlDbType.VarChar).Value = RFC
+ SqlAdapter.SelectCommand.Parameters.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ SqlAdapter.SelectCommand.Parameters.Add("@CveCliente", SqlDbType.Int).Value = CveCliente
+ SqlAdapter.SelectCommand.Parameters.Add("@CveClienteSucursal", SqlDbType.Int).Value = CveClienteSucursal
+ Try
+ SqlAdapter.Fill(Data)
+ Retorno = True
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener el las Sucursales del Cliente.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ End Try
+
Return Retorno
End Function
diff --git a/App_Code/ClsInventarios.vb b/App_Code/ClsInventarios.vb
index da84ed30d..45b8f3792 100644
--- a/App_Code/ClsInventarios.vb
+++ b/App_Code/ClsInventarios.vb
@@ -1660,6 +1660,28 @@ Public Class ClsInventarios
End Function
+ Public Function GetExistenciasSucursales(PSRequest As String, CveEmpresa As Integer) As Boolean
+ Dim Retorno As Boolean = False
+
+ DataAdapter("PA_Vta_ExistenciasSucursalesGet")
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@PSRequest", SqlDbType.VarChar).Value = PSRequest
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ End With
+
+ Try
+ SqlAdapter.Fill(Data)
+ Retorno = True
+ Catch Ex1 As SqlException
+ Me.OnError("Ocurrió un error al obtener las existencias.", Ex1, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener las existencias.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
+ End Try
+
+ Return Retorno
+
+ End Function
+
#End Region
#Region " INVENTARIOS - REPORTES "
diff --git a/App_Code/ClsNominas.vb b/App_Code/ClsNominas.vb
index 133cb56e1..caef462e6 100644
--- a/App_Code/ClsNominas.vb
+++ b/App_Code/ClsNominas.vb
@@ -216,7 +216,36 @@ Public Class ClsNominas
End Try
Return retorno
End Function
-
+ Public Function Autorizaperiodoconta(CvePeriodo As Int32, CveEmpresa As Int32) As Boolean
+ Dim retorno As Boolean = False
+ DataAdapter("PA_Nom_Autorizaperiodoconta", CommandType.StoredProcedure)
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ End With
+ Try
+ SqlAdapter.Fill(Data)
+ retorno = True
+ Catch ex As Exception
+ OnError("Ocurrió un error al autorizar periodo.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ End Try
+ Return retorno
+ End Function
+ Public Function GetDispersiondenomina(CvePeriodo As Int32, CveEmpresa As Int32) As Boolean
+ Dim retorno As Boolean = False
+ DataAdapter("PA_PA_NomDispersiondenomina", CommandType.StoredProcedure)
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@CvePeriodo", SqlDbType.Int).Value = CvePeriodo
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ End With
+ Try
+ SqlAdapter.Fill(Data)
+ retorno = True
+ Catch ex As Exception
+ OnError("Ocurrió un error al obtener el layout de nominas.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ End Try
+ Return retorno
+ End Function
Public Function GetCalculoUtilidades(ejercicio As Int32, cveEmpresa As Int32, importe As Double, importeA As Double) As Boolean
Dim retorno As Boolean = False
DataAdapter("PA_NomCalcularUtilidades", CommandType.StoredProcedure)
@@ -2093,6 +2122,29 @@ Public Class ClsNominas
Return retorno
End Function
+ Public Function PrimaRiesgoUP(CveEmpresa As Integer, Fecha As DateTime, PrimadeRiesgo As Decimal) As Boolean
+ Dim retorno As Boolean = False
+ Try
+ DTSet = New DataSet()
+ DataAdapter("PA_Nom_PrimaRiesgoUP", CommandType.StoredProcedure)
+ With SqlAdapter.SelectCommand.Parameters
+ .Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
+ .Add("@Fecha", SqlDbType.Date).Value = Fecha
+ .Add("@PrimadeRiesgo", SqlDbType.Money).Value = PrimadeRiesgo
+ End With
+
+
+ SqlAdapter.Fill(DTSet)
+ retorno = True
+ Catch sqEx As SqlException
+ retorno = False
+ OnError("Ocurrió un error al actualizar las tablas de nomina.", sqEx, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ Catch ex As Exception
+ retorno = False
+ OnError("Ocurrió un error al actualizar las tablas de nomina.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
+ End Try
+ Return retorno
+ End Function
Public Function GetTablasNomina(CveEmpresa As Integer) As Boolean
Dim retorno As Boolean = False
Try
diff --git a/App_Code/ClsPaginas.vb b/App_Code/ClsPaginas.vb
index 990a3e2f5..ef3c9b60c 100644
--- a/App_Code/ClsPaginas.vb
+++ b/App_Code/ClsPaginas.vb
@@ -5444,13 +5444,13 @@ Public Class ClsPaginas
''' Opcional Nombre del archivo que se descarga
''' Optional, Formato de Generacion PDF o Excel
'''
- Public Sub ImprimirPDF(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing)
+ Public Sub ImprimirPDF(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing, Optional Content_Disposition As String = "attachment")
Dim lrds As New List(Of ReportDataSource)
Dim rds As New ReportDataSource
rds.Name = RDSName
rds.Value = DtDatos
lrds.Add(rds)
- ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR)
+ ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR, Content_Disposition)
End Sub
Public Sub ImprimirPDFMultiDS(RutaReporte As String, lrds As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing)
ImprimirPDF(RutaReporte, lrds, Parametros, NombreArchivo, Formato, MR)
@@ -5465,9 +5465,9 @@ Public Class ClsPaginas
''' Opcional Nombre del archivo que se descarga
''' Optional, Formato de Generacion PDF o Excel
'''
- Public Sub ImprimirPDF(RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing)
+ Public Sub ImprimirPDF(RutaReporte As String, DataSource As List(Of ReportDataSource), Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional MR As ReportViewer = Nothing, Optional Content_Disposition As String = "attachment")
'limpio ReportViwer
- ImprimirbytesPDF(StreamPDF(RutaReporte, DataSource, Parametros, NombreArchivo, Formato, MR), NombreArchivo, Formato)
+ ImprimirbytesPDF(StreamPDF(RutaReporte, DataSource, Parametros, NombreArchivo, Formato, MR), NombreArchivo, Formato, Content_Disposition:=Content_Disposition)
End Sub
Public Function StreamPDF(RutaReporte As String, DtDatos As DataTable, Parametros As List(Of ReportParameter), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional RDSName As String = "DataSet1", Optional MR As ReportViewer = Nothing) As Byte()
Dim lrds As New List(Of ReportDataSource)
@@ -5857,7 +5857,7 @@ Public Class ClsPaginas
'''
'''
'''
- Public Sub ImprimirbytesPDF(bytes As Byte(), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional Descarga As Boolean = False)
+ Public Sub ImprimirbytesPDF(bytes As Byte(), Optional NombreArchivo As String = "Reporte", Optional Formato As String = "PDF", Optional Descarga As Boolean = False, Optional Content_Disposition As String = "attachment")
'limpio ReportViwer
Dim mimeType As String = Nothing
Dim extension As String = Nothing
@@ -5880,7 +5880,7 @@ Public Class ClsPaginas
Response.Buffer = True
Response.Clear()
Response.ContentType = mimeType
- Response.AddHeader("content-disposition", String.Format("attachment; filename={0}.{1}", NombreArchivo, If(Formato = "PDF", "pdf", "xls")))
+ Response.AddHeader("content-disposition", String.Format("{0}; filename={1}.{2}", Content_Disposition, NombreArchivo, If(Formato = "PDF", "pdf", "xls")))
Response.BinaryWrite(bytes) ' create the file
Response.Flush() ' send it to the client to download
HttpContext.Current.Response.SuppressContent = True
@@ -6617,13 +6617,20 @@ Public Class ClsPaginas
'CLIENTE
- If Vta.CveCliente.ToEntero > 0 Then
+ If Vta.CveCliente.ToEntero > 0 Or Vta.CveEmpresaCRM.ToEntero > 0 Then
params.Add(New ReportParameter("ClienteCodigo", Vta.Cliente.Codigo))
params.Add(New ReportParameter("ClienteNombre", If(Vta.ClienteSucursal.ImprimeNombreSucursal = "True", If(Vta.CveClienteSucursal > 0, Vta.ClienteSucursal.Sucursal, Vta.Cliente.Nombre), If(Vta.AtencionA <> "" AndAlso Vta.TipoDocto.Contiene("Ing", "Rem") AndAlso Vta.Cliente.RFC = "XAXX010101000", $"{Vta.Cliente.Nombre}({Vta.AtencionA})", Vta.Cliente.Nombre))))
params.Add(New ReportParameter("ClienteDireccion", ClienteDireccion))
params.Add(New ReportParameter("ClienteLugar", ClienteLugar))
params.Add(New ReportParameter("ClienteRFC", Vta.Cliente.RFC))
End If
+ If Vta.CveEmpresaCRM.ToEntero > 0 Then
+ params.Add(New ReportParameter("ClienteCodigo", Vta.Cliente.Codigo))
+ params.Add(New ReportParameter("ClienteNombre", Vta.Cliente.Nombre))
+ params.Add(New ReportParameter("ClienteDireccion", ClienteDireccion))
+ params.Add(New ReportParameter("ClienteLugar", ClienteLugar))
+ params.Add(New ReportParameter("ClienteRFC", Vta.Cliente.RFC))
+ End If
'TOTALES
params.Add(New ReportParameter("SubTotal", Vta.SubTotal.ToString.FormatoNumero(2)))
diff --git a/App_Code/ClsRH.vb b/App_Code/ClsRH.vb
index c9557b703..6a35f980b 100644
--- a/App_Code/ClsRH.vb
+++ b/App_Code/ClsRH.vb
@@ -5584,7 +5584,7 @@ chkAplicaVacacion As Boolean, chkAplicaIncapacidad As Boolean, chkAplicaRetardo
Return Retorno
End Function
- Public Function SolicitudVacacionesAdd(CvePersonal As Integer, Fecha As Date, FechaFin As Date, Estatus As Integer, CveUsuario As Integer, CveAutoriza As Integer, Folio As Integer, Optional Motivo As String = "") As Boolean
+ Public Function SolicitudVacacionesAdd(CvePersonal As Integer, Fecha As Date, FechaFin As Date, Estatus As Integer, CveUsuario As Integer, CveAutoriza As Integer, Folio As Integer, Optional Motivo As String = "", Optional FechaPago As String = "", Optional diasinabiles As Integer = 0, Optional PorcentajePrimaVac As Decimal = -1) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_RH_SolicitudVacacionesAdd")
@@ -5597,7 +5597,10 @@ chkAplicaVacacion As Boolean, chkAplicaIncapacidad As Boolean, chkAplicaRetardo
.Add("@CveUsuario", SqlDbType.Int).Value = CveUsuario
.Add("@CveAutoriza", SqlDbType.Int).Value = CveAutoriza
.Add("@Folio", SqlDbType.Int).Value = Folio
- '.Add("@Motivo", SqlDbType.VarChar).Value = Motivo
+ .Add("@diasinabiles", SqlDbType.Int).Value = diasinabiles
+ .Add("@PorcentajePrimaVac", SqlDbType.Money).Value = PorcentajePrimaVac
+ .Add("@FechaPago", SqlDbType.VarChar).Value = FechaPago
+ '.Add("@Motivo", SqlDbType.VarChar).Value = MotivoFechaPago As String = "", Optional diasinabiles
End With
Try
diff --git a/App_Code/LogicNominas.vb b/App_Code/LogicNominas.vb
index 61f35a5e7..e19a7325e 100644
--- a/App_Code/LogicNominas.vb
+++ b/App_Code/LogicNominas.vb
@@ -240,7 +240,7 @@ Public Class LogicNominas
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(),
+ ObjPercepciones.Add(New CFDINominaPercepciones With {.TipoPercepcion = If(Row("SATCveConcepto").ToString() = "999", "038", 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
diff --git a/App_Code/Modelos.vb b/App_Code/Modelos.vb
index 0f3579548..96d8c619a 100644
--- a/App_Code/Modelos.vb
+++ b/App_Code/Modelos.vb
@@ -1214,6 +1214,43 @@ Namespace Modelos
Return File
End Function
+ Public Function TimbrarFactura() As Boolean
+ Dim SeTimbro As Boolean = False
+ 'TIMBRADO Y CASO ESPECIAL NOTA DE CREDITO
+ If (TipoDoctoDevolucion = "" OrElse Not TipoDoctoDevolucion.Contiene("Rem", "Cot", "Ped", "DPe", "PA", "Pd2")) Then
+
+ Dim DebeTimbrar As Boolean = True
+ If UsuarioActual.CveEmpresa.Contiene(1, 72, 80) Then
+ 'si tiene anticipos seleccionados y el total es cero, que no se timbre(previo empresa72)
+ If Me.Amortizacion > 0 And Me.Total <= 0 Then
+ DebeTimbrar = False
+ End If
+ End If
+
+ If Me.TipoDocto.Contiene("Ing", "Egs", "Ant", "Dev") Then
+ If UsuarioActual.Empresa.TipoFacturacion = "CFDi" Then
+
+ If Me.FemsaFactura IsNot Nothing Then
+
+ 'FACTURA INGRESO/EGRESO
+ Dim ObjTimbrado As New Timbrado
+ 'DOCUMENTO ACTUAL
+ If DebeTimbrar Then
+ SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, Me)
+
+ If Not SeTimbro Then
+ ErrorList.Add(ObjTimbrado.MensajeErrorCFDI)
+ End If
+
+ End If
+ End If
+ End If
+ End If
+ End If
+
+ Return SeTimbro
+ End Function
+
#Region " GUARDAR - VENTA, PREPOLIZAS, INV, NC , ESTIMACIONES, AC, NOTA DE CRÉDITO "
Private Function RegistrarNCAmortizacion(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, ObjInventario As ClsInventarios, ObjContr As ClsContratos, ObjContPaq As ClsContPAQi, ByVal factura As Modelos.Factura, ObjBancos As ClsBancos, TmpDTconceptos As DataTable, ByRef ObjEventos As ClsOIEventos) As Boolean
Dim ProcesoCorrecto As Boolean = True
@@ -3668,141 +3705,28 @@ Namespace Modelos
Dim OcurrioError As Boolean = False
If UsuarioActual.Empresa.UsaInventarios AndAlso factura.TipoDocto.Contiene("Ing", "Egs", "Rem") Then
- If factura.CveAlmacen > 0 AndAlso DtInventario.Rows.Count > 0 Then
- Dim CveMovimientoInventario As Integer = ObjInventario.AddMovimiento(factura.CveAlmacen, 3, factura.CveMoneda, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, Modulo:="Mod/E5")
- If CveMovimientoInventario <= 0 Then
+ If factura.GenerarSalidaAlmacen AndAlso factura.CveAlmacen > 0 AndAlso DtInventario.Rows.Count > 0 Then
+ Dim CveMovimientoInventario As Integer = GenerarMovimientoAlmacenServicioDomicilio(ObjInventario, factura, factura.DtInventario, factura.CveAlmacen, 3, factura.CveMoneda, factura.CveVenta, "Modelos/SA", MovimientoPrePoliza:=True, ObjConta:=ObjConta)
+ If Not CveMovimientoInventario > 0 Then
OcurrioError = True
- ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico")
- Else
- Dim Mensaje As String = ""
- Dim i As Integer = 0
- Dim Cantidad As Double
- Dim CveUnidad As Integer
- Dim CveProducto As Integer
- Dim Existencia As Double
- 'Dim Pu As Double
- 'DtInv.Clone()
+ End If
+ End If
- Dim DtEquivalencias As DataTable
- For Each Dr As DataRow In DtInventario.Rows
- CveProducto = Dr("CvePS").ToString.ToEntero
- CveUnidad = Dr("CveUM").ToString.ToEntero
- Cantidad = Dr("Cantidad").ToString.ToDouble
-
- If Dr("CveTipoInvPS").ToString.ToEntero = 5 And Dr("Serie").ToString = "" Then
- OcurrioError = True
- ErrorList.Add("Se deben especificar las Series de los productos de almacén")
- Exit For
- End If
-
- If UsuarioActual.CveEmpresa.Contiene({72, 80, 119}) AndAlso factura.TipoDocto.Contiene("Rem", "Ing") Then
- Existencia = ObjInventario.GetExistenciasPS(CveProducto, CveUnidad, UsuarioActual.CveEmpresa, CveAlmacen, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), CveSubProyecto:=factura.CveSubProyecto, CveVendedor:=factura.CveVendedor, CveCliente:=If(UsuarioActual.Empresa.Funcionalidad(146) = "1", -1, CveCliente), ExcluyeAdelantado:=1, RestringirAlmacenes:=1, ExcluyeApartados:=1)
- If Existencia < Cantidad Then
- OcurrioError = True
- ErrorList.Add($"No cuenta con la cantidad suficiente en inventario del producto {Dr("CodigoPS")} .Cuenta con {Existencia.FormatoNumero(2)}.")
- Exit For
- End If
- End If
-
- If UsuarioActual.CveEmpresa = 1 Then
- DtEquivalencias = New DataTable
- DtEquivalencias = GlobalDTProductosServiciosEquivalencias(CveProducto, -1, UsuarioActual.CveEmpresa)
- Dim CveUnidadBase As Integer = DtEquivalencias.FiltroPrimeroValor("CveUM", "UnidadBase = 'True'").ToEntero
- Dim drUMBase As DataRow = DtEquivalencias.FiltroPrimero("UnidadBase = 'True'")
-
- 'SI LA UNIDAD ACTUAL NO ES LA BASE SACA PROPORCION (EQUIVALENTE)
- If CveUnidadBase <> CveUnidad Then
- ' LO QUE PUSE LO QUE VALE UNIDAD BASE LO QUE VALE UNIDAD SELECCIONADA
- Cantidad = Dr("Cantidad").ToString.ToDouble * drUMBase("Cantidad").ToString.ToDouble / DtEquivalencias.FiltraParametros(String.Format("CveUM = {0}", CveUnidad)).Rows(0)("Cantidad").ToString.ToDouble
- CveUnidad = CveUnidadBase
- End If
- End If
-
- If CveProducto > 0 Then
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoInventario, Cantidad, CveUnidad, CveProducto, 0, -1, Serie:=Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero) Then
- OcurrioError = True
- ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
")
- Exit For
- End If
- Else
- OcurrioError = True
- ErrorList.Add("Ocurrió un error al agregar los Movimientos de salida al Inventario.
")
- Exit For
- End If
-
-
- i = i + 1
- Next
-
- 'REGISTRO LA PREPOLIZA DE COSTO VS ALMACEN
- If Not OcurrioError Then
- Dim DtCostos As DataTable = Nothing
- Dim ValorInventario As Decimal = 0
- Dim TotalCosto As Decimal = 0
- If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) Then
- DtCostos = ObjInventario.DtResultados
- TotalCosto = DtCostos.SUMD("Total").RoundSQL()
- Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
- Dim IdCtaContable As Integer = 0
- Dim CveCuenta As Integer = 0
- If tmpCostos.Rows.Count > 0 Then
- Dim TotalCostoAcumulado As Decimal = 0
- Dim cont As Integer = 1
- 'Se agrega movimiento separado por la cuenta de ventas (ER)
- For Each RowInv As DataRow In tmpCostos.Rows
- ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL()
- TotalCostoAcumulado += ValorInventario
-
- 'cuando es el último movimiento y hay diferencias en los importes
- If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
- ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
- End If
-
- 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString, Row2("SubProyecto").ToString)
- IdCtaContable = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
- CveCuenta = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaGastoSIG", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
- If ValorInventario <> 0 Then
-
- If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, False, ValorInventario, factura.SerieFolio, 69, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveSubProyecto:=factura.CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=ValorInventario, CveCuenta:=CveCuenta) Then
- OcurrioError = True
- End If
- End If
- cont += 1
- Next
- End If
- IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", CveAlmacen)).ToEntero
-
- If TotalCosto <> 0 Then
- If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, True, TotalCosto, factura.SerieFolio, 68, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=TotalCosto, CveCuenta:=CveCuenta, CveSubProyecto:=factura.CveSubProyecto) Then
- OcurrioError = True
- End If
- End If
-
- factura.Inv_CveMovimiento = CveMovimientoInventario
- factura.Inv_ValorInventario = ValorInventario
-
- End If
+ If factura.CveAlmacen > 0 AndAlso factura.TipoDocto.Contiene("Ing", "Egs", "Rem") AndAlso RemisionesLista.Count > 0 Then
+ For Each CveRemision As Integer In RemisionesLista
+ 'El almacen general es el Primer Almacen de Material en la Sucursal
+ If Not TraspasoAlmacen(ObjInventario, CveRemision, ObjConta, True, 9) Then
+ OcurrioError = True
+ Exit For
End If
-
-
- End If
-
- If RemisionesLista.Count > 0 Then
- For Each CveRemision As Integer In RemisionesLista
- 'El almacen general es el Primer Almacen de Material en la Sucursal
- If Not TraspasoAlmacen(ObjInventario, CveRemision, ObjConta, True, 9) Then
- OcurrioError = True
- Exit For
- End If
- Next
- End If
+ Next
End If
If factura.TipoDocto = "Rem" AndAlso factura.ServicioDomicilio Then
Dim CveMovimientoSalida As Integer = GenerarMovimientoAlmacenServicioDomicilio(ObjInventario, factura, DtInventario, factura.CveAlmacenServicioDomicilio, 8, factura.CveMoneda, factura.CveVenta, "Modelos/SD1")
If CveMovimientoSalida > 0 Then
- If Not (GenerarMovimientoAlmacenServicioDomicilio(ObjInventario, factura, DtInventario, factura.CveAlmacenTraspasoDestino, 9, factura.CveMoneda, factura.CveVenta, "Modelos/SD1", CveMovimientoRelacionado:=CveMovimientoSalida) > 0) Then
+ If Not (GenerarMovimientoAlmacenServicioDomicilio(ObjInventario, factura, DtInventario, factura.CveAlmacenTraspasoDestino, 9, factura.CveMoneda, factura.CveVenta, "Modelos/SD2", CveMovimientoRelacionado:=CveMovimientoSalida) > 0) Then
OcurrioError = True
End If
Else
@@ -4079,7 +4003,7 @@ Namespace Modelos
End Function
- Private Function GenerarMovimientoAlmacenServicioDomicilio(ByRef ObjInventario As ClsInventarios, factura As Modelos.Factura, DtInventario As DataTable, CveAlmacen As Integer, CveConcepto As Integer, CveMoneda As Integer, CveVenta As Integer, Modulo As String, Optional MovimientoPrePoliza As Boolean = False, Optional ByRef ObjConta As ClsContabilidad = Nothing, Optional CveMovimientoRelacionado As Integer = -1) As Integer
+ Private Function GenerarMovimientoAlmacenServicioDomicilio(ByRef ObjInventario As ClsInventarios, ByRef factura As Modelos.Factura, DtInventario As DataTable, CveAlmacen As Integer, CveConcepto As Integer, CveMoneda As Integer, CveVenta As Integer, Modulo As String, Optional MovimientoPrePoliza As Boolean = False, Optional ByRef ObjConta As ClsContabilidad = Nothing, Optional CveMovimientoRelacionado As Integer = -1) As Integer
Dim OcurrioError As Boolean = False
Dim CveMovimientoInventario As Integer = ObjInventario.AddMovimiento(CveAlmacen, CveConcepto, factura.CveMoneda, factura.Fecha, -1, factura.CveUsuario, factura.CveEmpresa, -1, factura.CveVenta, -1, -1, Modulo:=Modulo, CveMovimientoRelacionado:=CveMovimientoRelacionado)
@@ -4167,9 +4091,18 @@ Namespace Modelos
Dim DtCostos As DataTable = Nothing
Dim ValorInventario As Decimal = 0
Dim TotalCosto As Decimal = 0
+
+ Dim TipoMovto68 As Boolean = True
+ Dim TipoMovto69 As Boolean = False
+
+ If CveConcepto.Contiene(18) Then
+ TipoMovto68 = False
+ TipoMovto69 = True
+ End If
+
If ObjInventario.GetMovimientosDetalle(CveMovimientoInventario, UsuarioActual.CveEmpresa) Then
DtCostos = ObjInventario.DtResultados
- TotalCosto = DtCostos.SUMD("Total").RoundSQL()
+ TotalCosto = DtCostos.SUMD("Total").RoundSQL
Dim tmpCostos As DataTable = DtCostos.FiltraParametros("", "", {"CveClasificacion"})
Dim IdCtaContable As Integer = 0
Dim CveCuenta As Integer = 0
@@ -4178,39 +4111,41 @@ Namespace Modelos
Dim cont As Integer = 1
'Se agrega movimiento separado por la cuenta de ventas (ER)
For Each RowInv As DataRow In tmpCostos.Rows
- ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL()
+ ValorInventario = DtCostos.SUMD("Total", $"CveClasificacion = {RowInv("CveClasificacion")}").RoundSQL
TotalCostoAcumulado += ValorInventario
'cuando es el último movimiento y hay diferencias en los importes
- If cont = DtCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
+ If cont = tmpCostos.Rows.Count AndAlso TotalCosto <> TotalCostoAcumulado Then
ValorInventario = ValorInventario + (TotalCosto - TotalCostoAcumulado)
End If
- 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString, Row2("SubProyecto").ToString)
- IdCtaContable = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
- CveCuenta = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaGastoSIG", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero
- If ValorInventario <> 0 Then
+ 'Concepto = String.Format("{0} - {1}", Row2("Clasificacion").ToString(), Row2("SubProyecto").ToString())
+ IdCtaContable = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaCostos", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero()
+ 'CveCuenta = GlobalDTClasificaciones(factura.CveEmpresa).FiltroPrimeroValor("IdCuentaGastoSIG", $"CveClasificacion = {RowInv("CveClasificacion")}").ToEntero()
+ 'If ValorInventario <> 0 Then
- If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, False, ValorInventario, factura.SerieFolio, 69, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveSubProyecto:=factura.CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString.ToEntero, CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=ValorInventario, CveCuenta:=CveCuenta) Then
- OcurrioError = True
- End If
+ If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, TipoMovto69, ValorInventario, factura.SerieFolio, 69, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveSubProyecto:=factura.CveSubProyecto, CveClasificacion:=RowInv("CveClasificacion").ToString().ToEntero(), CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=ValorInventario, CveCuenta:=CveCuenta) Then
+ OcurrioError = True
End If
+ 'End If
cont += 1
Next
End If
- IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", CveAlmacen)).ToEntero
+ IdCtaContable = GlobalDTAlmacen(UsuarioActual.CveEmpresa).FiltroPrimeroValor("IdCtaContable", String.Format("CveAlmacen = {0}", CveAlmacen)).ToEntero()
- If TotalCosto <> 0 Then
- If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, True, TotalCosto, factura.SerieFolio, 68, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=TotalCosto, CveCuenta:=CveCuenta, CveSubProyecto:=factura.CveSubProyecto) Then
- OcurrioError = True
- End If
+ 'If TotalCosto <> 0 Then
+ If Not ObjConta.AddPrePolizasDetalle(factura.CvePrePoliza, TipoMovto68, TotalCosto, factura.SerieFolio, 68, factura.SerieFolio, factura.Fecha, IdCtaContable, -1, CveVenta:=factura.CveVenta, CveCliente:=factura.CveCliente, CveMovimientoAlmacen:=CveMovimientoInventario, ImporteMX:=TotalCosto, CveCuenta:=CveCuenta, CveSubProyecto:=factura.CveSubProyecto) Then
+ OcurrioError = True
End If
+ 'End If
- factura.Inv_CveMovimiento = CveMovimientoInventario
- factura.Inv_ValorInventario = ValorInventario
-
+ Else
+ OcurrioError = True
End If
+ factura.Inv_CveMovimiento = CveMovimientoInventario
+ factura.Inv_ValorInventario = ValorInventario
End If
+
End If
Return CveMovimientoInventario
@@ -5516,7 +5451,7 @@ Namespace Modelos
'ENTRADA POR TRAPASO A ENTREGA POR ADELANTADO
If ObjInventario.GetMovimientosDetalle(CveMovimientoSalidaDevRem, UsuarioActual.CveEmpresa) Then
For Each Dr As DataRow In ObjInventario.DtResultados.Rows
- If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("SerieLote").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then
+ If Not ObjInventario.AddMovimientoDetalle(CveMovimientoEntradaDevRem, Dr("Cantidad").ToString.ToDecimal, Dr("CveUM").ToString.ToEntero, Dr("CvePS").ToString.ToEntero, Dr("PU").ToString.ToDecimal, Dr("CveAF").ToString.ToEntero, -1, Dr("Serie").ToString, CveVentaDetalle:=Dr("CveVentaDetalle").ToString.ToEntero, Lote:=Dr("Lote").ToString) Then
ErrorCancelar = True
Exit For
End If
@@ -5986,6 +5921,7 @@ Namespace Modelos
Public Property CveAnticipo As Integer
Public Property RemisionesLista As List(Of Integer)
Public Property CveAlmacen As Integer
+ Public Property GenerarSalidaAlmacen As Boolean = False
Public Property CveConceptoMovimiento As Integer
Public Property ObservacionesMovimiento As String
Public Property DtMovimientosUsados As DataTable
diff --git a/App_Code/Timbrado.vb b/App_Code/Timbrado.vb
index da8df25b1..b7d9bbabb 100644
--- a/App_Code/Timbrado.vb
+++ b/App_Code/Timbrado.vb
@@ -2026,14 +2026,17 @@ Public Class Timbrado
cfdi.Nomina12Percepciones(ObjCFDITimbre.Nomina.TotalSueldos, ObjCFDITimbre.Nomina.TotalIndemnizacion, ObjCFDITimbre.Nomina.TotalJubilacion, ObjCFDITimbre.Nomina.TotalPercepcionesGravado, ObjCFDITimbre.Nomina.TotalPercepcionesExento)
For Each percep As CFDINominaPercepciones In ObjCFDITimbre.Nomina.Percepciones
cfdi.Nomina12Percepcion(percep.TipoPercepcion, percep.Clave, percep.Concepto, Math.Round(percep.ImporteGravado, 2), Math.Round(percep.ImporteExento, 2))
+ If percep.TipoPercepcion.ToEntero() = 19 Then
+
+ If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
+ For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
+ cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado)
+ Next
+ End If
+ End If
Next
End If
- If ObjCFDITimbre.Nomina.HorasExtras IsNot Nothing AndAlso ObjCFDITimbre.Nomina.HorasExtras.Count > 0 Then
- For Each HoraExtra As CFDINominaHorasExtras In ObjCFDITimbre.Nomina.HorasExtras
- cfdi.Nomina12HorasExtra(HoraExtra.Dias.ToEntero, HoraExtra.TipoHoras, HoraExtra.HorasExtra, HoraExtra.ImportePagado)
- Next
- End If
'deducciones al final
If ObjCFDITimbre.Nomina.Deducciones IsNot Nothing AndAlso ObjCFDITimbre.Nomina.Deducciones.Count > 0 Then
cfdi.Nomina12Deducciones(ObjCFDITimbre.Nomina.TotalDeduccionesOtras, Math.Round(ObjCFDITimbre.Nomina.TotalDeduccionesImpuestosRetenidos, 2))
@@ -2041,14 +2044,6 @@ Public Class Timbrado
cfdi.Nomina12Deduccion(deduc.TipoDeduccion, deduc.Clave, deduc.Concepto, Math.Round(deduc.Importe, 2))
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.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe)
- Next
- End If
-
If ObjCFDITimbre.Nomina.OtrosPagos IsNot Nothing Then
' cfdi.agregarNominaOtrosPagosOtroPago12("002", "002", "Subsidio", "10.00");
' cfdi.agregarNominaOtrosPagosOtroPagoSubsidioAlEmpleo12("10.00");
@@ -2068,6 +2063,11 @@ Public Class Timbrado
Next
End If
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.Nomina12Incapacidad(Incap.DiasIncapacidad.ToEntero, Incap.TipoIncapacidad, Incap.Importe)
+ Next
+ End If
End If
#End Region
diff --git a/App_Code/modExtensiones.vb b/App_Code/modExtensiones.vb
index 9a18a5716..fbe97480e 100644
--- a/App_Code/modExtensiones.vb
+++ b/App_Code/modExtensiones.vb
@@ -968,25 +968,25 @@ Namespace Extensiones
- Public Function RoundAD(Valor As Double, Optional Decimales As Integer = 2) As Double
- Return Math.Round(Valor, Decimales)
- End Function
-
- Public Function RoundAD(Valor As Decimal, Optional Decimales As Integer = 2) As Decimal
- Return Math.Round(Valor, Decimales)
+ Public Function RoundAD(Valor As Double, Optional Decimales As Integer = 2) As Double
+ Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
+ End Function
+
+ Public Function RoundAD(Valor As Decimal, Optional Decimales As Integer = 2) As Decimal
+ Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
End Function
- Public Function RoundSQL(Valor As Double, Optional Decimales As Integer = 2) As Double
- 'Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
- 'primero, se redondea a 4, para que concuerde al redondeo de sql, si se redondea a 2 decimales por ejemplo
- Return If(Decimales < 4, Math.Round(Math.Round(Valor, 4, MidpointRounding.AwayFromZero), Decimales, MidpointRounding.AwayFromZero), Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero))
+ Public Function RoundSQL(Valor As Double, Optional Decimales As Integer = 2) As Double
+ 'Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
+ 'primero, se redondea a 4, para que concuerde al redondeo de sql, si se redondea a 2 decimales por ejemplo
+ Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
End Function
Public Function RoundSQL(Valor As Decimal, Optional Decimales As Integer = 2) As Decimal
'primero, se redondea a 4, para que concuerde al redondeo de sql
- Return If(Decimales < 4, Math.Round(Math.Round(Valor, 4, MidpointRounding.AwayFromZero), Decimales, MidpointRounding.AwayFromZero), Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero))
+ Return Math.Round(Valor, Decimales, MidpointRounding.AwayFromZero)
End Function
Public Function Abs(Valor As Double) As Double
diff --git a/Ashx/E141.ashx b/Ashx/E141.ashx
index ca6e8c319..801f1ab28 100644
--- a/Ashx/E141.ashx
+++ b/Ashx/E141.ashx
@@ -4,6 +4,7 @@ Option Strict On
Option Explicit On
Imports System.Data
+Imports System.IO
Imports System.Net.Http
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
@@ -66,6 +67,203 @@ Public Class E141 : Implements IHttpHandler
End Get
End Property
+
+#Region "GLOBAL DT"
+ Public Property GlobalDTSubProyectos(CveProyecto As Integer, Optional CveSubProyecto As Integer = -1, Optional CveEmpresa As Integer = -1, Optional Estatus As Integer = 1) As DataTable
+ Get
+ Dim AppNombre As String = String.Format("GlobalDTSubProyectos-{0}", CveEmpresa)
+ 'sino existe, recarga los datos
+ If DirectCast(HttpContext.Current.Application(AppNombre), DataTable) Is Nothing Or (DirectCast(HttpContext.Current.Application(AppNombre), DataTable) IsNot Nothing AndAlso DirectCast(HttpContext.Current.Application(AppNombre), DataTable).Rows.Count = 0) Then
+ Dim P As New ClsSubProyectos
+ If P.GetSubProyectos(CveEmpresa:=CveEmpresa) Then HttpContext.Current.Application(AppNombre) = P.DtResultados
+ P.Dispose()
+ End If
+
+ If CveProyecto <> -1 OrElse CveSubProyecto <> -1 OrElse CveEmpresa <> -1 OrElse Estatus <> -1 Then
+ Dim StrSQL As New StringBuilder
+ If CveProyecto <> -1 Then StrSQL.AppendFormat(" AND CveProyecto = {0}", CveProyecto)
+ If CveSubProyecto <> -1 Then StrSQL.AppendFormat(" AND CveSubProyecto = {0}", CveSubProyecto)
+ If Estatus <> -1 Then StrSQL.AppendFormat(" AND CveEstatus = {0}", Estatus)
+ If CveEmpresa <> -1 Then StrSQL.AppendFormat(" AND CveEmpresa = {0}", CveEmpresa)
+
+ Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), StrSQL.ToString.Trim.TrimStart("A"c, "N"c, "D"c), "", DataViewRowState.CurrentRows)
+ GlobalDTSubProyectos = Dv.ToTable
+ Dv.Dispose()
+
+ Else
+ GlobalDTSubProyectos = DirectCast(HttpContext.Current.Application(AppNombre), DataTable)
+ End If
+
+ End Get
+ Set(ByVal value As DataTable)
+ Dim AppNombre As String = String.Format("GlobalDTSubProyectos-{0}", CveEmpresa)
+ HttpContext.Current.Application(AppNombre) = value
+ End Set
+ End Property
+
+ ReadOnly Property GlobalDTPS(CveEmpresa As Integer, Optional CvePS As Integer = -1, Optional SATClavePS As String = "-1", Optional AplicaParaVenta As Integer = -1, Optional Estatus As Integer = -1, Optional Codigo As String = "-1") As DataTable
+ Get
+ Dim ObjPS As New ClsProductosServicios
+
+ If ObjPS.GetPS(CvePS, -1, CveEmpresa, Codigo:=Codigo, SATClavePS:=SATClavePS, pAplicaParaVenta:=AplicaParaVenta, pEstado:=Estatus) Then
+ GlobalDTPS = ObjPS.DtResultados
+ Else
+ GlobalDTPS = Nothing
+ End If
+
+ ObjPS.Dispose()
+ End Get
+ End Property
+
+ Property GlobalDTMonedas() As DataTable
+ Get
+ GlobalDTMonedas = DirectCast(HttpContext.Current.Application("GlobalDTMonedas"), DataTable)
+ End Get
+ Set(value As DataTable)
+ HttpContext.Current.Application("GlobalDTMonedas") = value
+ End Set
+ End Property
+
+ Public Property GlobalDTVtaFormaPago() As DataTable
+ Get
+ GlobalDTVtaFormaPago = DirectCast(HttpContext.Current.Application("GlobalDTVtaFormaPago"), DataTable)
+ End Get
+ Set(value As DataTable)
+ HttpContext.Current.Application("GlobalDTVtaFormaPago") = value
+ End Set
+ End Property
+
+ Property GlobalDTVtaMetodoPago() As DataTable
+ Get
+ GlobalDTVtaMetodoPago = DirectCast(HttpContext.Current.Application("GlobalDTVtaMetodoPago"), DataTable)
+ End Get
+ Set(value As DataTable)
+ HttpContext.Current.Application("GlobalDTVtaMetodoPago") = value
+ End Set
+ End Property
+
+ Property GlobalDTSATUsosCFDI(Optional EsPersonaFisica As Integer = -1) As DataTable
+ Get
+ If EsPersonaFisica <> -1 Then
+ Dim Tipo As String = ""
+ If EsPersonaFisica = 1 Then Tipo = "AplicaPersonaFisica = 1" Else Tipo = "AplicaPersonaMoral = 1"
+
+ Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTSATUsosCFDI"), DataTable), Tipo, " UsoCFDIDescripcion", DataViewRowState.CurrentRows)
+ GlobalDTSATUsosCFDI = Dv.ToTable
+ Dv.Dispose()
+ Else
+ GlobalDTSATUsosCFDI = DirectCast(HttpContext.Current.Application("GlobalDTSATUsosCFDI"), DataTable)
+ End If
+
+ End Get
+ Set(ByVal value As DataTable)
+ HttpContext.Current.Application("GlobalDTSATUsosCFDI") = value
+ End Set
+ End Property
+
+ Property GlobalDTAlmacen(CveEmpresa As Integer, Optional CveTipoAlmacen As Integer = -1, Optional CveEstatus As Integer = 1, Optional CveAlmacen As Integer = -1) As DataTable
+ Get
+ Dim AppNombre As String = String.Format("GlobalDTAlmacen-{0}", CveEmpresa)
+ 'sino existe, recarga los datos
+ If HttpContext.Current.Application(AppNombre) Is Nothing Then
+ Dim ObjUsr As New ClsInventarios
+ If ObjUsr.GetAlmacenes(-1, -1, CveEmpresa, -1) Then HttpContext.Current.Application(AppNombre) = ObjUsr.DtResultados
+ ObjUsr.Dispose()
+ End If
+
+ Dim Str As New StringBuilder
+ Str.Append("1=1 AND ")
+ If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa)
+ If CveTipoAlmacen > 0 Then Str.AppendFormat("AND CveTipoAlmacen = {0}", CveTipoAlmacen)
+ If CveEstatus > 0 Then Str.AppendFormat("AND CveEstatus = {0}", CveEstatus)
+ If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen)
+
+ Dim Dv As New DataView(DirectCast(HttpContext.Current.Application(AppNombre), DataTable), Str.ToString, "", DataViewRowState.CurrentRows)
+ GlobalDTAlmacen = Dv.ToTable
+ Dv.Dispose()
+ End Get
+ Set(value As DataTable)
+ Dim AppNombre As String = String.Format("GlobalDTAlmacen-{0}", CveEmpresa)
+ HttpContext.Current.Application(AppNombre) = value
+ End Set
+ 'Get
+
+ ' Dim Str As New StringBuilder
+ ' Str.Append("1=1 AND ")
+ ' If CveEmpresa <> -1 Then Str.AppendFormat(" CveEmpresa = {0} ", CveEmpresa)
+ ' If CveTipoAlmacen > 0 Then Str.AppendFormat("AND CveTipoAlmacen = {0}", CveTipoAlmacen)
+ ' If CveEstatus > 0 Then Str.AppendFormat("AND CveEstatus = {0}", CveEstatus)
+ ' If CveAlmacen > 0 Then Str.AppendFormat("AND CveAlmacen = {0}", CveAlmacen)
+
+ ' Dim Dv As New DataView(DirectCast(Application("GlobalDTAlmacen"), DataTable), Str.ToString, "", DataViewRowState.CurrentRows)
+ ' GlobalDTAlmacen = Dv.ToTable
+ ' Dv.Dispose()
+
+ 'End Get
+ 'Set(value As DataTable)
+ ' Application("GlobalDTAlmacen") = value
+ 'End Set
+ End Property
+
+ Property GlobalDTEstado(ClaveSATPais As String) As DataTable
+ Get
+ If HttpContext.Current.Application("GlobalDTEstado") Is Nothing Then
+ Dim ObjGrales As New ClsGenerales
+ If ObjGrales.GetSATEstado("-1") Then HttpContext.Current.Application("GlobalDTEstado") = ObjGrales.DtResultados Else HttpContext.Current.Application("GlobalDTEstado") = Nothing
+ ObjGrales.Dispose()
+ End If
+
+ If ClaveSATPais <> "-1" Then
+ Dim Dv As New DataView(DirectCast(HttpContext.Current.Application("GlobalDTEstado"), DataTable), String.Format("ClaveSATPais = '{0}'", ClaveSATPais), "", DataViewRowState.CurrentRows)
+ GlobalDTEstado = Dv.ToTable
+ Dv.Dispose()
+ Else
+ GlobalDTEstado = DirectCast(HttpContext.Current.Application("GlobalDTEstado"), DataTable)
+ End If
+
+ End Get
+ Set(value As DataTable)
+ HttpContext.Current.Application("GlobalDTEstado") = value
+ End Set
+ End Property
+#End Region
+
+#Region "V A L I D A - D A T O S"
+ Private Function ValidaUsuarioSistema(CveUsuario As Integer, CveEmpresa As Integer) As Usuario
+ Dim UsuarioActual As Usuario = Nothing
+ Dim ObjUsuarios As New ClsSisUsuarios
+ If ObjUsuarios.GetUsuarios(CveUsuario) Then
+ If ObjUsuarios.DtResultados.Rows.Count > 0 Then
+ Dim Usuario = ObjUsuarios.DtResultados.Rows(0)("Usuario").ToString()
+ Dim Contrasenia = ObjUsuarios.DtResultados.Rows(0)("Contraseña").ToString()
+ UsuarioActual = ObjUsuarios.ValidaUsuario(Usuario, Contrasenia, IMEI, CveEmpresa)
+ UsuarioActual.CveEmpresa = CveEmpresa
+ CreaObjetoEmpresa(UsuarioActual)
+ End If
+ End If
+ ObjUsuarios.Dispose()
+ Return UsuarioActual
+ End Function
+ Private Sub CreaObjetoEmpresa(ByRef UsuarioActual As Usuario)
+
+ Dim ObjEmpresa As New ClsSisEmpresas()
+ If ObjEmpresa.GetEmpresas(UsuarioActual.CveEmpresa, "-1", "-1", "-1", "-1") Then
+ If ObjEmpresa.GetEmpresasFuncionalidades(UsuarioActual.CveEmpresa) Then
+ Dim dttmp As Data.DataTable = ObjEmpresa.DtResultados
+
+ Dim EmpresasFuncionalidades As New HybridDictionary
+ For Each Row As Data.DataRow In dttmp.Rows
+ EmpresasFuncionalidades.Add(Convert.ToInt32(Row("CveFuncionalidad")), Row("Valor").ToString)
+ Next
+ ObjEmpresa.Empresa.SetFuncionalidades(EmpresasFuncionalidades)
+ End If
+
+ UsuarioActual.Empresa = ObjEmpresa.Empresa
+ End If
+ ObjEmpresa.Dispose()
+ End Sub
+
+#End Region
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
Dim retorno As String = ""
Try
@@ -88,7 +286,61 @@ Public Class E141 : Implements IHttpHandler
Dim Codigo = If(context.Request("Sku") = Nothing, "", context.Request("Sku").ToString())
retorno = GetExistencia(context, Codigo)
+ ElseIf Metodo = "ConsultarRFC" Then
+ context.Response.ContentType = "application/json"
+ Dim Auth = ValidarSolicitud(context)
+ If Auth.IsSucces Then
+ retorno = ConsultaRFC(context)
+ Else
+ context.Response.StatusCode = Auth.StatusCode
+ retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ End If
+
+ ElseIf Metodo = "ValidarCarrito" Then
+ context.Response.ContentType = "application/json"
+ Dim Auth = ValidarSolicitud(context)
+
+ If Auth.IsSucces Then
+ retorno = ValidarCarrito(context)
+ Else
+ context.Response.StatusCode = Auth.StatusCode
+ retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ End If
+
+ ElseIf Metodo = "RegistrarPedido" Then
+ context.Response.ContentType = "application/json"
+ Dim Auth = ValidarSolicitud(context)
+
+ If Auth.IsSucces Then
+ retorno = RegistrarPedido(context)
+ Else
+ context.Response.StatusCode = Auth.StatusCode
+ retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ End If
+
+ ElseIf Metodo = "RegistrarCotizacion" Then
+ context.Response.ContentType = "application/json"
+ Dim Auth = ValidarSolicitud(context)
+
+ If Auth.IsSucces Then
+ retorno = RegistrarCotizacion(context)
+ Else
+ context.Response.StatusCode = Auth.StatusCode
+ retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ End If
+
+ ElseIf Metodo = "GetSucursales" Then
+ context.Response.ContentType = "application/json"
+ Dim Auth = ValidarSolicitud(context)
+
+ If Auth.IsSucces Then
+ retorno = GetSucursales(context)
+ Else
+ context.Response.StatusCode = Auth.StatusCode
+ retorno = JsonConvert.SerializeObject(Auth.ErrorMessage)
+ End If
+ context.Response.StatusCode = Auth.StatusCode
Else
context.Response.ContentType = "text/html"
@@ -132,11 +384,1211 @@ Public Class E141 : Implements IHttpHandler
End Try
End Sub
+ Private Function ValidarSolicitud(ByVal context As HttpContext) As AuthMessage
+ Dim unauthorized As Boolean = True
+ Dim respuesta As New AuthMessage
+
+ Dim authHeader = context.Request.Headers("Authorization")
+ If authHeader IsNot Nothing Then
+ Dim basicAuth As String = authHeader.Replace("Basic ", "")
+
+ Dim usernamePasswordArray = Encoding.UTF8.GetString(Convert.FromBase64String(basicAuth)).Split(":"c)
+
+ Dim userName = usernamePasswordArray(0)
+ Dim password = usernamePasswordArray(1)
+ unauthorized = Not (userName = Me.UsuarioWSE141 AndAlso password = Me.PasswordWSE141)
+
+ Else
+ respuesta.ErrorMessage = New FidelityAppsResponseError() With {.message = "el usuario y/o contraseña son requeridos"}
+ respuesta.IsSucces = False
+ respuesta.StatusCode = 200
+
+ Return respuesta
+ End If
+
+ If unauthorized Then
+ respuesta.ErrorMessage = New FidelityAppsResponseError() With {.message = "el usuario y/o contraseña no son validos"}
+ respuesta.IsSucces = False
+ respuesta.StatusCode = 200
+
+ Return respuesta
+ Else
+ respuesta.ErrorMessage = Nothing
+ respuesta.IsSucces = True
+ respuesta.StatusCode = 200
+
+ Return respuesta
+ End If
+
+ End Function
+
+ Private Function ConsultaRFC(ByVal context As HttpContext) As String
+ Dim Respuesta As New FidelityAppsResponse
+ Dim RespuestaError As New FidelityAppsResponseError
+ Dim TieneError As Boolean = False
+ Dim JsonRequest As JObject = Nothing
+
+ If context.Request.InputStream IsNot Nothing Then
+ Using reader As New StreamReader(context.Request.InputStream)
+ Dim json = reader.ReadToEnd
+
+ If Not String.IsNullOrEmpty(json) Then
+ JsonRequest = JObject.Parse(json)
+ If JsonRequest Is Nothing Then
+ TieneError = True
+ End If
+ End If
+
+ End Using
+ End If
+
+ If TieneError Then
+ RespuestaError.message = "Ocurrió un error al obtener el cuerpo de los parametros"
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ End If
+
+ If Not TieneError AndAlso Not String.IsNullOrEmpty(If(JsonRequest("rfc") Is Nothing, "", JsonRequest("rfc").ToString().Trim())) Then
+
+ Dim data As New JArray
+ Dim Nombre As String = "-1"
+ Dim Codigo As String = "-1"
+ Dim NombreCorto As String = "-1"
+ Dim RFC As String = JsonRequest("rfc").ToString()
+ Dim Telefono As String = "-1"
+ Dim Mail As String = "-1"
+
+ Dim DtSucursales As DataTable = Nothing
+
+ Using ObjClientes As New ClsClientes
+ If ObjClientes.GetListaSucursales(RFC, CveEmpresa) Then
+ DtSucursales = ObjClientes.DtResultados.Copy()
+ End If
+ End Using
+
+ If DtSucursales IsNot Nothing Then
+ Try
+ For Each Row As DataRow In DtSucursales.Rows
+ Dim objSucursal As New JObject(
+ New JProperty("Id", Row("CveCliente")),
+ New JProperty("rfc", Row("RFC")),
+ New JProperty("name", Row("SucursalCliente")),
+ New JProperty("phone", Row("Telefono")),
+ New JProperty("email", Row("Correo")),
+ New JProperty("address", Row("Direccion")),
+ New JProperty("int_number", Row("NoInt")),
+ New JProperty("ext_number", Row("NoExt")),
+ New JProperty("street", Row("Direccion")),
+ New JProperty("between_streets", ""),
+ New JProperty("city", Row("Localidad")),
+ New JProperty("state", Row("Estado")),
+ New JProperty("zip_code", Row("CP")),
+ New JProperty("reference", ""),
+ New JProperty("Branch_office_code", ""),
+ New JProperty("Branch_office_name", ""),
+ New JProperty("Branch_office_id", "")
+ )
+ data.Add(objSucursal)
+ Next
+ Catch ex As Exception
+ TieneError = True
+ RespuestaError.message = "Ocurrió un error al obtener la sucursales"
+ End Try
+ DtSucursales.Dispose()
+ Else
+ TieneError = True
+ End If
+
+ Respuesta.data = data
+ Else
+ If String.IsNullOrEmpty(If(JsonRequest("rfc") Is Nothing, "", JsonRequest("rfc").ToString().Trim())) Then
+ TieneError = True
+ RespuestaError.message = "Debe ingresar un RFC"
+ End If
+ End If
+
+ If TieneError Then
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ Else
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(Respuesta)
+ End If
+ End Function
+
+ Private Function ValidarCarrito(ByVal context As HttpContext) As String
+ Dim Respuesta As New FidelityAppsResponse
+ Dim RespuestaError As New FidelityAppsResponseError
+ Dim TieneError As Boolean = False
+ Dim JsonRequest As JObject = Nothing
+
+ If context.Request.InputStream IsNot Nothing Then
+ Using reader As New StreamReader(context.Request.InputStream)
+ Dim json = reader.ReadToEnd
+
+ If Not String.IsNullOrEmpty(json) Then
+ JsonRequest = JObject.Parse(json)
+ If JsonRequest Is Nothing Then
+ TieneError = True
+ End If
+ End If
+
+ End Using
+ End If
+
+ If TieneError Then
+ RespuestaError.message = "Ocurrió un error al obtener el cuerpo de los parametros"
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ End If
+
+ Dim data As New JArray
+ Dim DtSucursalesExistencias As DataTable = Nothing
+
+ Using ObjInv As New ClsInventarios
+ If ObjInv.GetExistenciasSucursales(JsonRequest("products").ToString(), CveEmpresa) Then
+ DtSucursalesExistencias = ObjInv.DtResultados.Copy()
+ End If
+ End Using
+
+ If DtSucursalesExistencias IsNot Nothing Then
+ Try
+ For Each Row As DataRow In DtSucursalesExistencias.Rows
+ Dim objSucursal As New JObject(
+ New JProperty("code", Row("CveSubProyecto")),
+ New JProperty("name", Row("SubProyecto")),
+ New JProperty("street", Row("Calle")),
+ New JProperty("no_ext", Row("NoExt")),
+ New JProperty("no_int", Row("NoInt")),
+ New JProperty("zip", Row("CP")),
+ New JProperty("neighborhood", Row("Colonia")),
+ New JProperty("city", Row("Municipio")),
+ New JProperty("phone", Row("Telefono")),
+ New JProperty("email", Row("Correo")),
+ New JProperty("geo_lat", ""),
+ New JProperty("geo_lng", ""),
+ New JProperty("image", "")
+ )
+ data.Add(objSucursal)
+ Next
+
+ If DtSucursalesExistencias.Rows.Count = 0 Then
+ Respuesta.message = "No se encontraron resultados"
+ End If
+
+ Catch ex As Exception
+ TieneError = True
+ RespuestaError.message = "Ocurrió un error al obtener la sucursales"
+ End Try
+ DtSucursalesExistencias.Dispose()
+ Else
+ TieneError = True
+ End If
+
+ Respuesta.data = data
+
+ If TieneError Then
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ Else
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(Respuesta)
+ End If
+ End Function
+
+#Region "R E G I S T R O - V E N T A "
+ Private Function RegistrarPedido(ByVal context As HttpContext) As String
+ Dim Respuesta As New FidelityAppsResponse
+ Dim RespuestaError As New FidelityAppsResponseError
+ Dim TieneError As Boolean = False
+ Dim JsonRequest As JObject = Nothing
+
+ If context.Request.InputStream IsNot Nothing Then
+ Using reader As New StreamReader(context.Request.InputStream)
+ Dim json = reader.ReadToEnd
+
+ If Not String.IsNullOrEmpty(json) Then
+ JsonRequest = JObject.Parse(json)
+ If JsonRequest Is Nothing Then
+ TieneError = True
+ End If
+ End If
+
+ End Using
+ End If
+
+ If TieneError Then
+ RespuestaError.message = "Ocurrió un error al obtener el cuerpo de los parametros"
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ End If
+
+ If Not TieneError Then
+ Dim Usuario As Usuario = ValidaUsuarioSistema(100, CveEmpresa)
+ If Usuario IsNot Nothing Then
+ Dim Resp As New Modelos.Factura.MMensajeFactura
+ Dim ObjFactura As Modelos.Factura = Nothing
+ Dim DebeTimbrar As Boolean = False
+
+ Dim ObjClientes As New ClsClientes()
+ Dim ObjInventario As New ClsInventarios(ObjClientes.IniciaTransacSQL())
+ ObjClientes.IniciaTransacSQL()
+
+ Try
+ If Not String.IsNullOrEmpty(JsonRequest("timbrar").ToString) Then
+ DebeTimbrar = CBool(JsonRequest("timbrar"))
+ End If
+
+ ObjFactura = CreaFactura(ObjInventario, ObjClientes, "Ing", Resp, JsonRequest, Usuario)
+
+ If ObjFactura IsNot Nothing Then
+ Resp = ObjFactura.EmitirFactura(False, Transac:=ObjClientes.IniciaTransacSQL())
+
+ If Resp.CveVenta > 0 Then
+ Respuesta.status = "success"
+ Respuesta.data = Resp.CveVenta.ToString()
+ Else
+ TieneError = True
+ End If
+
+ If TieneError Then
+ Dim sb As New StringBuilder()
+ For Each msg As String In Resp.Mensajes
+ sb.AppendFormat("{0}. ", msg)
+ Next
+ RespuestaError.message = sb.ToString()
+ End If
+ Else
+ TieneError = True
+ Dim sb As New StringBuilder()
+ For Each msg As String In Resp.Mensajes
+ sb.AppendFormat("{0}. ", msg)
+ Next
+ RespuestaError.message = sb.ToString()
+ End If
+
+ Catch ex As Exception
+ TieneError = True
+ End Try
+
+ If TieneError Then
+ ObjClientes.RollBack()
+ ObjClientes.Dispose()
+ Else
+ ObjClientes.Commit()
+ ObjClientes.Dispose()
+
+ If DebeTimbrar Then
+ Dim SeTimbro As Boolean = ObjFactura.TimbrarFactura()
+ If SeTimbro Then
+ Respuesta.message = "La factura se creó correctamente"
+ Else
+ Respuesta.message = "La factura se creó pero no se pudo emitir. favor de comunicarse con soporte tecnico."
+ End If
+ Else
+ Respuesta.message = "La factura se creó correctamente."
+ End If
+ End If
+
+ Else
+ TieneError = True
+ RespuestaError.message = "No hay un usuario disponible"
+ End If
+
+ End If
+
+ If TieneError Then
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ Else
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(Respuesta)
+ End If
+ End Function
+
+
+#Region "D E F I N I R - O B J E T O S"
+ Private Function CrearCliente(ObjClientes As ClsClientes, ByRef Resp As Modelos.Factura.MMensajeFactura, JsonRequest As JObject, UsuarioActual As Usuario) As Integer
+ Dim CveCliente As Integer = -1
+
+ Dim CveSubProyecto As Integer = JsonRequest("branch_office_id").ToEntero()
+ Dim Nombre As String = If(JsonRequest("contact_name") Is Nothing, "", JsonRequest("contact_name").ToString())
+ Dim Direccion As String = If(JsonRequest("contact_address") Is Nothing, "", JsonRequest("contact_address").ToString())
+ Dim NumExt As String = If(JsonRequest("contact_ext_number") Is Nothing, "", JsonRequest("contact_ext_number").ToString())
+ Dim NumInt As String = If(JsonRequest("contact_int_number") Is Nothing, "", JsonRequest("contact_int_number").ToString())
+ Dim Colonia As String = If(JsonRequest("contact_neighborhood") Is Nothing, "", JsonRequest("contact_neighborhood").ToString())
+ Dim Localidad As String = If(JsonRequest("contact_city") Is Nothing, "", JsonRequest("contact_city").ToString())
+ Dim Ciudad As String = Localidad
+ Dim RFC As String = If(JsonRequest("invoice_rfc") Is Nothing, "XAXX010101000", JsonRequest("invoice_rfc").ToString())
+ Dim CP As String = If(JsonRequest("contact_zip_code") Is Nothing, "", JsonRequest("contact_zip_code").ToString())
+ Dim Telefono As String = If(JsonRequest("contact_phone") Is Nothing, "", JsonRequest("contact_phone").ToString())
+ Dim Correo As String = If(JsonRequest("contact_email") Is Nothing, "", JsonRequest("contact_email").ToString())
+
+ Dim CveEstado As Integer = -1
+
+ If Not String.IsNullOrEmpty(JsonRequest("contact_state").ToString()) Then
+ CveEstado = GlobalDTEstado("MEX").FiltroPrimeroValor("CveEstado", $"NombreEstado = '{JsonRequest("contact_state").ToString().Trim}'").ToEntero()
+
+ 'SI NO ENCUENTRA EL ESTADO INGRESA EL DE SONORA
+ If CveEstado <= 0 Then
+ CveEstado = 26
+ End If
+ Else
+ CveEstado = 26
+ End If
+
+ 'SI NO EXISTE EL RFC UTILIZA EL GENERICO
+ If String.IsNullOrEmpty(RFC) Then
+ RFC = "XAXX010101000"
+ End If
+
+ 'VALIDAR QUE NO EXISTA EL RFC
+ If RFC <> "XAXX010101000" Then
+ If ObjClientes.GetClientes(-1, "-1", "-1", "-1", RFC, "-1", "-1", -1, UsuarioActual.CveEmpresa, 1, TipoCliente:=-1, TopSelect:=1) Then
+ If ObjClientes.DtResultados.Rows.Count > 0 Then
+ Resp.TieneError = False
+ Resp.Mensajes.Add("El RFC ya existe en el sistema")
+ Return -1
+ End If
+ End If
+ End If
+
+ If ObjClientes.AgregarClienteNoFrecuente(Nombre, Direccion, NumExt, NumInt, Colonia, Localidad, Ciudad, CveEstado, RFC, CP, Telefono, Correo, CveSubProyecto, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, "", -1, -1) Then
+ If ObjClientes.DtResultados.Rows.Count > 0 Then
+ CveCliente = ObjClientes.DtResultados(0)("CveCliente").ToString().ToEntero()
+ End If
+ End If
+
+ If CveCliente <= 0 Then
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Ocurrió un error al crear el cliente")
+ Return -1
+ End If
+
+ Return CveCliente
+
+ End Function
+
+ Private Function CreaFactura(ObjInventario As ClsInventarios, ObjClientes As ClsClientes, TipoDocto As String, Resp As Modelos.Factura.MMensajeFactura, JsonRequest As JObject, UsuarioActual As Usuario) As Modelos.Factura
+ Try
+ Resp.TieneError = False
+ Dim Serie As String = "-1"
+ Dim CveMoneda As Integer = 1
+ Dim CveSubProyecto As Integer = JsonRequest("branch_office_id").ToEntero()
+ Dim CveCliente As Integer = If(JsonRequest("user_id") Is Nothing, 0, JsonRequest("user_id").ToEntero())
+
+ If CveCliente <= 0 Then
+ CveCliente = CrearCliente(ObjClientes, Resp, JsonRequest, UsuarioActual)
+ End If
+
+ If CveCliente <= 0 Then
+ Return Nothing
+ End If
+
+ Dim ObjFactura = New Modelos.Factura(UsuarioActual)
+ ObjFactura.TipoMensajeRespuesta = Modelos.TipoMensajeRespuesta.TextoLimpio
+ ObjFactura.Serie = Serie
+ ObjFactura.Folio = -1
+ ObjFactura.Version = "3.3"
+ ObjFactura.FolioFiscal = ""
+ ObjFactura.CveUsuario = UsuarioActual.CveUsuario
+ ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa
+ ObjFactura.TipoCambio = 1
+ ObjFactura.ConvertirPesos = False
+ ObjFactura.CveMoneda = CveMoneda
+ ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", String.Format("CveMoneda = {0} ", CveMoneda))
+ ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", String.Format("CveMoneda = {0} ", CveMoneda))
+ ObjFactura.TipoDocto = TipoDocto
+ ObjFactura.RefDocto = ""
+ ObjFactura.CveMesa = -1
+ ObjFactura.Fecha = Now
+ ObjFactura.CvePrePoliza = -1
+ ObjFactura.FechaPago = Now
+ ObjFactura.MotivoDescuento = ""
+ ObjFactura.FechaEjecucion = Now
+ ObjFactura.UsuarioCreo = UsuarioActual.Usuario
+ ObjFactura.CveCondicionEntrega = -1
+ ObjFactura.CondicionEntrega = ""
+ ObjFactura.NumeroCuenta = ""
+ ObjFactura.CondicionesPago = 0
+ ObjFactura.FormaPago = 0
+ ObjFactura.PedidoContrato = ""
+ ObjFactura.NumeroContrato = ""
+ ObjFactura.DescripcionContrato = ""
+ ObjFactura.CveCorte = -1
+ ObjFactura.TipoDocumento = ObjFactura.TipodeComprobante
+ ObjFactura.Alfa1 = ""
+ ObjFactura.Alfa2 = ""
+ ObjFactura.Alfa3 = ""
+ ObjFactura.CveContrato = -1
+ ObjFactura.ConvertirPesos = False
+ ObjFactura.CveSubProyecto = CveSubProyecto
+ ObjFactura.CveSubProyectoCobranza = CveSubProyecto
+ ObjFactura.CveSubProyectoEjecucion = CveSubProyecto
+ ObjFactura.SubProyecto = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1, CveEmpresa:=CveEmpresa).FiltroPrimero(String.Format("CveSubProyecto = {0}", CveSubProyecto)))
+ ObjFactura.SubProyectoMatriz = New Modelos.SubProyectoModel(GlobalDTSubProyectos(-1, CveSubProyecto:=-1, CveEmpresa:=UsuarioActual.CveEmpresa).FiltroPrimero("TipoSucursal=1"))
+
+ 'CLIENTE
+ ObjFactura.CveCliente = CveCliente
+ ObjFactura.CveClienteSucursal = -1
+
+ ObjFactura.SetCliente()
+
+ If ObjFactura.TipoDocto = "Cot" Then
+ If ObjClientes.GetClientes(CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
+ If ObjClientes.DtResultados.Rows.Count > 0 Then
+ ObjFactura.CveFormaPago33 = ObjClientes.CveFormaPago33
+ ObjFactura.FormaPago33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("FormaPago", String.Format("CveFormaPago = {0}", ObjClientes.CveFormaPago33))
+ ObjFactura.FormaPagoSAT33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", String.Format("CveFormaPago = {0}", ObjClientes.CveFormaPago33))
+
+ ObjFactura.CveMetodoPago33 = ObjClientes.CveMetodoPago33
+ ObjFactura.MetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("MetodoPago", String.Format("CveMetodoPago = {0}", ObjClientes.CveMetodoPago33))
+ ObjFactura.ClaveMetodoPagoSAT = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", String.Format("CveMetodoPago = {0}", ObjClientes.CveMetodoPago33))
+
+ ObjFactura.CveUsoCFDI = ObjClientes.CveUsoCFDI
+ ObjFactura.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjClientes.CveUsoCFDI))
+ ObjFactura.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjClientes.CveUsoCFDI))
+
+ End If
+ End If
+
+ ElseIf ObjFactura.TipoDocto = "Ing" Then
+
+ If ObjFactura.Cliente IsNot Nothing AndAlso Not String.IsNullOrEmpty(JsonRequest("invoice_name").ToString()) Then
+ ObjFactura.Cliente.Nombre = JsonRequest("invoice_name").ToString()
+ ObjFactura.Cliente.NombreComercial = JsonRequest("invoice_name").ToString()
+ ObjFactura.Cliente.Direccion = JsonRequest("invoice_address").ToString()
+ ObjFactura.Cliente.Colonia = ""
+ ObjFactura.Cliente.NoInt = ""
+ ObjFactura.Cliente.NoExt = ""
+ ObjFactura.Cliente.Localidad = JsonRequest("invoice_city").ToString()
+ ObjFactura.Cliente.Estado = JsonRequest("invoice_state").ToString()
+ ObjFactura.Cliente.Mail = JsonRequest("invoice_email").ToString()
+ ObjFactura.Cliente.Telefono = JsonRequest("invoice_phone").ToString()
+ End If
+
+ 'FORMA DE PAGO
+ If JsonRequest("invoice_way_to_pay") Is Nothing Then
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar una forma de pago")
+ Return Nothing
+ End If
+
+ If Not String.IsNullOrEmpty(JsonRequest("invoice_way_to_pay").ToString()) Then
+ Dim RowFormaPago As DataRow = GlobalDTVtaFormaPago.FiltroPrimero(String.Format("ClaveFormaPagoSAT = '{0}'", JsonRequest("invoice_way_to_pay").ToString()))
+ If RowFormaPago IsNot Nothing Then
+ ObjFactura.CveFormaPago33 = RowFormaPago("CveFormaPago").ToString().ToEntero()
+ ObjFactura.FormaPago33 = RowFormaPago("FormaPago").ToString()
+ ObjFactura.FormaPagoSAT33 = RowFormaPago("ClaveFormaPagoSAT").ToString()
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("No se encontro la forma de pago")
+ Return Nothing
+ End If
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar una forma de pago")
+ Return Nothing
+ End If
+
+ 'USO CFDi
+ If JsonRequest("invoice_use") Is Nothing Then
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar un uso cfdi")
+ Return Nothing
+ End If
+
+ If Not String.IsNullOrEmpty(JsonRequest("invoice_use").ToString()) Then
+ Dim RowUsoCFDi As DataRow = GlobalDTSATUsosCFDI.FiltroPrimero(String.Format("UsoCFDI = '{0}'", JsonRequest("invoice_use").ToString()))
+ If RowUsoCFDi IsNot Nothing Then
+ ObjFactura.CveUsoCFDI = RowUsoCFDi("CveUsoCFDI").ToString().ToEntero()
+ ObjFactura.UsoCFDI = RowUsoCFDi("Descripcion").ToString()
+ ObjFactura.ClaveUsoCFDI = RowUsoCFDi("UsoCFDI").ToString()
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("No se encontro el uso cfdi")
+ Return Nothing
+ End If
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar un uso cfdi")
+ Return Nothing
+ End If
+
+ 'METODO DE PAGO
+ If JsonRequest("invoice_payment_method") Is Nothing Then
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar un método de pago")
+ Return Nothing
+ End If
+
+ If Not String.IsNullOrEmpty(JsonRequest("invoice_payment_method").ToString()) Then
+ Dim RowMetodoPago As DataRow = GlobalDTVtaMetodoPago.FiltroPrimero(String.Format("ClaveMetodoPagoSAT = '{0}'", JsonRequest("invoice_payment_method").ToString()))
+ If RowMetodoPago IsNot Nothing Then
+ ObjFactura.CveMetodoPago33 = RowMetodoPago("CveMetodoPago").ToString().ToEntero()
+ ObjFactura.MetodoPago33 = RowMetodoPago("MetodoPago").ToString()
+ ObjFactura.ClaveMetodoPagoSAT = RowMetodoPago("ClaveMetodoPagoSAT").ToString()
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("No se encontro el método de pago")
+ Return Nothing
+ End If
+ Else
+ Resp.TieneError = False
+ Resp.Mensajes.Add("Debe asignar un método de pago")
+ Return Nothing
+ End If
+
+ End If
+
+ ObjFactura.CveAlmacen = GlobalDTAlmacen(CveEmpresa, CveTipoAlmacen:=1).FiltroPrimeroValor("CveAlmacen", $"CveSubProyecto={CveSubProyecto}").ToEntero()
+
+
+
+ 'DETALLES
+ ObjFactura.DtDetalle = CreaDTDetalle(ObjInventario, ObjFactura, Resp, UsuarioActual, JsonRequest)
+
+ If Resp.TieneError Then
+ Resp.Mensajes.Add("No se pudieron agregar los productos/servicios")
+ Return Nothing
+ Else
+ If ObjFactura.DtDetalle Is Nothing OrElse ObjFactura.DtDetalle.Rows.Count = 0 Then
+ Resp.Mensajes.Add("No se pudieron agregar los productos/servicios")
+ Return Nothing
+ End If
+ End If
+
+
+ 'INVENTARIO
+ If TipoDocto = "Ing" Then
+ ObjFactura.DtInventario = ObjFactura.DtDetalle.Copy.FiltraParametros("CveTipoPS = 2")
+ ObjFactura.GenerarSalidaAlmacen = True
+ ObjFactura.GenerarPDFFactura = False
+ End If
+
+ 'IMPORTES
+ Dim TotalImporte As Decimal = ObjFactura.DtDetalle.SUMD("TotalImporte")
+ Dim ImporteIVA As Decimal = ObjFactura.DtDetalle.SUMD("ImporteIVA")
+ Dim ImporteRetIVA As Decimal = ObjFactura.DtDetalle.SUMD("ImporteRetIVA")
+ Dim ImporteRetISR As Decimal = ObjFactura.DtDetalle.SUMD("ImporteRetISR")
+ Dim ImporteIEPS As Decimal = ObjFactura.DtDetalle.SUMD("ImporteIEPS")
+ Dim Descuento As Decimal = ObjFactura.DtDetalle.SUMD("Descuento")
+ Dim Amortizacion As Decimal = 0
+
+ Dim Total As Decimal = (TotalImporte + ImporteIVA + ImporteIEPS) - (ImporteRetIVA + ImporteRetISR + Descuento + Amortizacion)
+
+ ObjFactura.SubTotal = TotalImporte
+ ObjFactura.Descuento = Descuento
+ ObjFactura.Amortizacion = Amortizacion
+ ObjFactura.IVA = ImporteIVA
+ ObjFactura.RetIVA = ImporteRetIVA
+ ObjFactura.RetISR = ImporteRetISR
+ ObjFactura.IEPS = ImporteIEPS
+ ObjFactura.Total = Total
+ ObjFactura.TotalOtrosConceptos = 0
+
+ 'SI HAY DIFERENCIA DE UN CENTAVO AJUSTA
+ If Math.Abs(JsonRequest("total").ToString().ToDecimal() - ObjFactura.Total) <= 0.01 Then
+ Dim diff As Decimal = (JsonRequest("total").ToString().ToDecimal() - ObjFactura.Total)
+ If diff <> 0 Then
+ 'AJUSTA EN EL ULTIMO CONCEPTO
+ Dim IVADetalle As Decimal = ObjFactura.DtDetalle.Rows(ObjFactura.DtDetalle.Rows.Count - 1)("ImporteIVA").ToString().ToDecimal()
+
+ ObjFactura.DtDetalle.Rows(ObjFactura.DtDetalle.Rows.Count - 1)("ImporteIVA") = IVADetalle + diff
+ ObjFactura.IVA = ObjFactura.IVA + diff
+ ObjFactura.Total = ObjFactura.Total + diff
+ End If
+
+ End If
+
+ If ObjFactura.Total <> JsonRequest("total").ToString().ToDecimal() Then
+ Resp.Mensajes.Add("El total de la factura no coincide con el total enviado")
+ Return Nothing
+ End If
+
+ If ObjFactura.Descuento <> JsonRequest("discount").ToString().ToDecimal() Then
+ Resp.Mensajes.Add("Los descuentos no coinciden")
+ Return Nothing
+ End If
+
+ If (JsonRequest("subtotal").ToString().ToDecimal() - JsonRequest("discount").ToString().ToDecimal()) <> JsonRequest("total").ToString().ToDecimal() Then
+ Resp.Mensajes.Add("el subtotal y el descuento no coinciden con el total")
+ Return Nothing
+ End If
+
+ If TipoDocto = "Ing" Then
+ ObjFactura.Observaciones = "PEDIDO PROVENIENTE DE ECOMMERCE"
+ ElseIf TipoDocto = "Cot" Then
+ ObjFactura.Observaciones = "COTIZACION PROVENIENTE DE ECOMMERCE"
+ End If
+
+ ObjFactura.OrdenCompra = ""
+ ObjFactura.PedidoContrato = ""
+ ObjFactura.ObservacionesAlmacen = ""
+ ObjFactura.EnviarCorreo = False
+
+ ObjFactura.Timbre = PreParaTimbre(ObjFactura)
+ ObjFactura.FemsaFactura = New Modelos.FemsaFactura() With {
+ .AplicaFEMSA = False,
+ .FEMSA_Version = 1
+ }
+ Return ObjFactura
+ Catch ex As Exception
+ Resp.Mensajes.Add(ex.ToString())
+ Return Nothing
+ End Try
+
+ End Function
+
+ Private Function PreParaTimbre(Obj As Modelos.Factura) As CFDITimbre
+ Dim Timbre As New CFDITimbre
+ Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", ""))
+ Timbre.Comprobante.Folio = Obj.Folio.ToString
+ Timbre.Comprobante.Serie = Obj.Serie
+ Timbre.Comprobante.Fecha = Obj.FechaCP
+ Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33
+ Timbre.Comprobante.CondicionesdePago = Obj.FormaPago33
+ Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT
+ Timbre.Comprobante.Subtotal = Obj.SubTotal
+ Timbre.Comprobante.Descuentos = Obj.Descuento
+ Timbre.Comprobante.Moneda = Obj.MonedaSAT
+ Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString)
+ Timbre.Comprobante.Total = Obj.Total
+
+ Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP
+ Timbre.Comprobante.Confirmacion = ""
+
+ Timbre.Receptor.RFC = Obj.Cliente.RFC
+ Timbre.Receptor.Nombre = Obj.Cliente.Nombre
+ Timbre.Receptor.ResidenciaFiscal = ""
+ Timbre.Receptor.NumeroRegistroTributario = ""
+ Timbre.Receptor.UsoCFDI = Obj.ClaveUsoCFDI
+
+
+ If Obj.CveTipoRelacion > 0 Then
+ Select Case Obj.CveTipoRelacion
+ Case 1
+ Timbre.CFDIRelacionados.TipoRelacion = "01"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "01-Nota de Crédito aplicada a Ingreso"
+ Case 2
+ Timbre.CFDIRelacionados.TipoRelacion = "02"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "02-Nota de débito de los documentos relacionados"
+ Case 3
+ Timbre.CFDIRelacionados.TipoRelacion = "03"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "03-Devolución aplicada a Ingreso"
+ Case 4
+ Timbre.CFDIRelacionados.TipoRelacion = "04"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "04-Refacturación de Ingreso"
+ Case 7
+ Timbre.CFDIRelacionados.TipoRelacion = "07"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo"
+ Case 8
+ Timbre.CFDIRelacionados.TipoRelacion = "08"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "08-Factura generada por pagos en parcialidades "
+ Case 9
+ Timbre.CFDIRelacionados.TipoRelacion = "09"
+ Timbre.CFDIRelacionados.TipoRelacionTexto = "09-Factura generada por pagos diferidos"
+
+ End Select
+
+ End If
+
+
+ Dim totSubTotal As Decimal = Obj.SubTotal
+ Dim totIVA As Decimal = Obj.IVA
+ Dim totRetIVA As Decimal = Obj.RetIVA
+ Dim totRetISR As Decimal = Obj.RetISR
+ Dim i As Integer = 1
+
+ 'DETALLES
+ Dim tPS As String = ""
+
+ For Each drr As DataRow In Obj.DtDetalle.Rows
+ If drr("PS").ToString.Length = 1 Then
+ tPS = drr("Obs").ToString
+ Else
+ If drr("PS").ToString.Length = 0 Then
+ tPS = ""
+ Else
+ tPS = String.Format("{0} {1}", drr("PS"), drr("Obs"))
+ End If
+ End If
+
+ 'CONDICIONANTE, ESPECIAL
+ If Obj.CveEmpresa = 15 Then drr("UM") = "" 'LES COMENTAN QUE NO DEBE IR LA ETIQUETA DE LA UNIDAD EN EL PRODUCTO
+
+ Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString.ToDecimal,
+ .Descripcion = tPS,
+ .ValorUnitario = drr("PU").ToString.ToDecimal,
+ .Importe = drr("TotalImporte").ToString.ToDecimal,
+ .Descuento = drr("Descuento").ToString.ToDecimal,
+ .Unidad = drr("UM").ToString,
+ .ClaveUnidad = drr("SATClaveUM").ToString,
+ .ClaveProdServ = drr("SATClaveProdServ").ToString,
+ .Noidentificacion = drr("Noidentificacion").ToString,
+ .CuentaPredial = drr("CuentaPredial").ToString}
+ 'VERIFICA SUMA SUBTOTALES
+ If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'PROCESO DE AJUSTA DE DECIMALES
+ concepto.Importe = totSubTotal
+ End If
+ totSubTotal = totSubTotal - concepto.Importe
+
+ 'SIEMPRE ESTAMOS AGREGANDO EL IVA
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal})
+
+ If drr("ImporteIEPS").ToString.ToDouble > 0 Then
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIEPS").ToString.ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString.ToDecimal})
+ End If
+
+ If drr("ImporteRetIVA").ToString.ToDouble > 0 Then 'si hay retenciones
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString.ToDecimal})
+ End If
+
+ If drr("ImporteRetISR").ToString.ToDouble > 0 Then 'retención de ISR
+ concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetISR").ToString.ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString.ToDecimal})
+ End If
+
+ Timbre.Conceptos.Add(concepto)
+ i += 1
+ Next
+ Return Timbre
+ End Function
+ Private Function CreaDTDetalle(ByRef ObjInventarios As ClsInventarios, ObjFactura As Modelos.Factura, ByRef Retorno As Modelos.Factura.MMensajeFactura, UsuarioActual As Usuario, JsonRequest As JObject) As DataTable
+ Dim TmpDT = New DataTable
+ TmpDT.Columns.Add("CveVenta", GetType(Integer))
+ TmpDT.Columns.Add("Consec", GetType(Integer))
+ TmpDT.Columns.Add("Cantidad", GetType(Decimal))
+ TmpDT.Columns.Add("Codigo", GetType(String))
+ TmpDT.Columns.Add("CveUM", GetType(Integer))
+ TmpDT.Columns.Add("UM", GetType(String))
+ TmpDT.Columns.Add("SATClaveUM", GetType(String))
+ TmpDT.Columns.Add("CveClasificacion", GetType(Integer))
+ TmpDT.Columns.Add("Clasificacion", GetType(String))
+ TmpDT.Columns.Add("CvePS", GetType(Integer))
+ TmpDT.Columns.Add("PS", GetType(String))
+ TmpDT.Columns.Add("CodigoPS", GetType(String))
+ TmpDT.Columns.Add("SATClaveProdServ", GetType(String))
+ TmpDT.Columns.Add("NoIdentificacion", GetType(String))
+ TmpDT.Columns.Add("CveTipoPS", GetType(Integer))
+ TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer))
+ TmpDT.Columns.Add("Serie", GetType(String))
+ TmpDT.Columns.Add("CuentaPredial", GetType(String))
+ TmpDT.Columns.Add("Obs", GetType(String))
+ TmpDT.Columns.Add("TiempoEntrega", GetType(String))
+ TmpDT.Columns.Add("PU", GetType(Decimal))
+ TmpDT.Columns.Add("IVA", GetType(Decimal))
+ TmpDT.Columns.Add("ImporteIVA", GetType(Decimal))
+ TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal))
+ TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal))
+ TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal))
+ TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal))
+ TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal))
+ TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal))
+ TmpDT.Columns.Add("IEPS", GetType(Decimal))
+ TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal))
+ TmpDT.Columns.Add("Descuento", GetType(Decimal))
+ TmpDT.Columns.Add("TipoDescuento", GetType(Integer))
+ TmpDT.Columns.Add("TotalImporte", GetType(Decimal))
+ TmpDT.Columns.Add("Total", GetType(Decimal))
+ 'Para uso del módulo contable
+ TmpDT.Columns.Add("AsientoContableVentas", GetType(Integer))
+ TmpDT.Columns.Add("IdCtaContVentas", GetType(Integer))
+ TmpDT.Columns.Add("AplicaParaConcepto", GetType(Boolean))
+ TmpDT.Columns.Add("CveProyecto", GetType(Integer))
+ TmpDT.Columns.Add("Proyecto", GetType(String))
+ TmpDT.Columns.Add("CveSubProyecto", GetType(Integer))
+ TmpDT.Columns.Add("SubProyecto", GetType(String))
+ 'TipoDescuento: 1 = Descuento * PU; 2 = Descuento por Total del concepto
+ TmpDT.Columns.Add("CvePresupuestoIngreso", GetType(Integer))
+ TmpDT.Columns.Add("CveFuenteRecaudacion", GetType(Integer))
+ 'Contratos
+ TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer))
+ 'Remisiones a Facturas
+ TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer))
+ TmpDT.Columns.Add("CveVentaDetalleRemision", GetType(Integer))
+ TmpDT.Columns.Add("CveVentaDetalleCotizacion", GetType(Integer))
+
+ 'Pedido2 a Facturas
+ TmpDT.Columns.Add("CveVentaDetallePedido2", GetType(Integer))
+
+ TmpDT.Columns.Add("Origen", GetType(Integer))
+ 'Ordenes Servicio
+ TmpDT.Columns.Add("CveOS", GetType(Integer))
+ TmpDT.Columns.Add("CveOSDetalle", GetType(Integer))
+ TmpDT.Columns.Add("SeFacturara", GetType(Integer))
+ TmpDT.Columns.Add("Folio", GetType(Integer))
+ TmpDT.Columns.Add("Estatus", GetType(String))
+ 'Ordenamiento
+ TmpDT.Columns.Add("Orden", GetType(Integer))
+ TmpDT.Columns.Add("TipoDocto", GetType(String))
+ 'OC
+ TmpDT.Columns.Add("CveOrdenCompraDetalle", GetType(Integer))
+ TmpDT.Columns.Add("EntregaDirecta", GetType(Integer))
+
+ TmpDT.Columns.Add("CveMovimientoDetallePedido", GetType(Integer))
+ TmpDT.Columns.Add("CantidadFacturadaRem", GetType(Decimal))
+ TmpDT.Columns.Add("CantidadFacturadaCot", GetType(Decimal))
+ TmpDT.Columns.Add("CantidadInventario", GetType(Decimal))
+
+ TmpDT.Columns.Add("ClaveSATFraccionArancelaria", GetType(String))
+ TmpDT.Columns.Add("ClaveSATUnidadAduana", GetType(String))
+ TmpDT.Columns.Add("ClaveSATFraccionArancelariaDescripcion", GetType(String))
+ TmpDT.Columns.Add("ClaveSATUnidadAduanaDescripcion", GetType(String))
+
+ TmpDT.Columns.Add("CveTamaño", GetType(Integer))
+ Try
+ Dim ListaPS = JArray.Parse(JsonRequest("details").ToString())
+ Dim DescuentoTotal As Decimal = JsonRequest("discount").ToString().ToDecimal()
+ Dim DescuentoPorPartida As Decimal = (DescuentoTotal / ListaPS.Count)
+
+ Dim Consec As Integer = 1
+ For Each JsonPS As JObject In ListaPS
+ Dim Cantidad As Decimal = JsonPS("quantity").ToString.ToDecimal()
+
+ Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, Codigo:=JsonPS("product_sku").ToString()).FiltroPrimero("")
+
+ If DrPS Is Nothing Then
+ Retorno.TieneError = True
+ Retorno.Mensajes.Add(String.Format("No se pudo agregar el producto/servicio: {0}, no se encontró en el sistema", JsonPS("product_sku").ToString()))
+ Exit For
+ End If
+
+ 'VALIDAR QUE SEA EL MISMO PRODUCTO
+ If DrPS("Codigo").ToString() <> JsonPS("product_sku").ToString() Then
+ Retorno.TieneError = True
+ Retorno.Mensajes.Add(String.Format("No se pudo agregar el producto/servicio: {0}", DrPS("PS").ToString()))
+ Exit For
+ End If
+
+ 'VALIDA EXISTENCIA ANTES DE GENERAR LA FACTURA
+ If ObjFactura.TipoDocto = "Ing" AndAlso DrPS("CveTipoPS").ToString() = "2" Then
+ Dim Existencia As Decimal = ObjInventarios.GetExistenciasPS(DrPS("CvePS").ToString.ToEntero, DrPS("CveUnidadMedida").ToString.ToEntero, UsuarioActual.CveEmpresa, ObjFactura.CveAlmacen, CveSubProyecto:=ObjFactura.CveSubProyecto, FechaMovto:=DateTime.Today.AddDays(1).ToString("yyyy/MM/dd HH:mm"), ExcluyeAdelantado:=1, PendientePorSurtir:=1, RestringirAlmacenes:=1, ExcluyeApartados:=-1)
+
+ If Cantidad > Existencia Then
+ Retorno.TieneError = True
+ Retorno.Mensajes.Add(String.Format("No hay existencia suficiente para este producto: {0}, cuenta con : {1}", DrPS("PSCodigo").ToString(), Existencia))
+ Exit For
+ End If
+ End If
+
+
+ Dim TotalOriginal As Decimal = JsonPS("total_cost").ToString.ToDecimal()
+
+ Dim PUOrginal As Decimal = JsonPS("cost").ToString.ToDecimal()
+
+ Dim PorcentajeIVADefault As Decimal = 0.16D
+
+ Dim DrSubProyecto As DataRow = GlobalDTSubProyectos(-1, JsonRequest("branch_office_id").ToEntero(), CveEmpresa:=CveEmpresa).Rows(0)
+
+ If DrSubProyecto IsNot Nothing Then
+ PorcentajeIVADefault = DrSubProyecto("IVA").ToString().ToDecimal()
+ Else
+ PorcentajeIVADefault = 0.16D
+ End If
+
+ Dim SubTotal2 As Decimal = (TotalOriginal / (1 + PorcentajeIVADefault))
+
+ Dim IVA As Decimal = Math.Abs(SubTotal2 - TotalOriginal)
+
+ Dim SubTotal As Decimal = (SubTotal2 + DescuentoPorPartida)
+
+ Dim PUCalculado As Decimal = (SubTotal / Cantidad)
+
+ Dim Row As DataRow = AgregarProductoServicio(Retorno, UsuarioActual, TmpDT, Consec, Cantidad, DrPS("CveUnidadMedida").ToString.ToEntero, DrPS("UnidadMedida").ToString, DrPS("CveClasificacion").ToString.ToEntero, DrPS("Clasificacion").ToString,
+ DrPS("CvePS").ToString.ToEntero, DrPS("PS").ToString, "", PUCalculado, DescuentoPorPartida,
+ CveSubProyecto:=ObjFactura.CveSubProyecto, CveVentaDetalle:=-1, CveContratoDetalle:=-1, CveVentaDetalleRemision:=-1, RegeneraIEPS:=True)
+ If Row IsNot Nothing Then
+ TmpDT.Rows.Add(Row)
+ Else
+ Retorno.TieneError = True
+ Retorno.Mensajes.Add(String.Format("No se pudo agregar el producto/servicio: {0}", DrPS("PSCodigo").ToString()))
+ Exit For
+ End If
+
+ Consec += 1
+ Next
+
+ Catch ex As Exception
+ Retorno.TieneError = True
+ Retorno.Mensajes.Add(ex.ToString())
+ End Try
+
+ If Retorno.TieneError = True Then
+ TmpDT.Clear()
+ TmpDT = Nothing
+ End If
+
+ Return TmpDT
+ End Function
+
+ Private Function AgregarProductoServicio(ByRef Retorno As Modelos.Factura.MMensajeFactura, UsuarioActual As Usuario, TmpDT As DataTable, Consec As Integer, Cantidad As Decimal, CveUM As Integer, UM As String, CveClasificacion As Integer, Clasificacion As String, CvePS As Integer, PS As String, Obs As String,
+ PU As Decimal, Descuento As Decimal, CveSubProyecto As Integer,
+ Optional Serie As String = "", Optional TiempoEntrega As String = "", Optional EntregaDirecta As Integer = 0,
+ Optional CveContratoDetalle As Integer = 0, Optional CveVentaDetalle As Integer = 0, Optional CveMovimientoDetallePedido As Integer = 0,
+ Optional CveOrdenCompraDetalle As Integer = 0, Optional CveVentaDetalleRemision As Integer = 0, Optional CveVentaDetalleCotizacion As Integer = 0,
+ Optional CuentaPredial As String = "", Optional RegeneraIEPS As Boolean = True, Optional CveVentaDetallePedido2 As Integer = 0,
+ Optional ClienteRetIVA As Double = 0, Optional ClienteRetISR As Double = 0, Optional ClienteDesglosaIEPS As Boolean = True) As DataRow
+
+
+ Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("")
+
+ If DrPS Is Nothing Then
+ Retorno.Mensajes.Add("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.")
+ Return Nothing
+ End If
+
+ 'verifica si tiene ventaminima
+ If Cantidad > 0 AndAlso DrPS("VentaMinima").ToString.ToDouble() > 0 Then
+ 'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15...
+ If Cantidad < DrPS("VentaMinima").ToString.ToDouble() Then
+ Retorno.Mensajes.Add("La cantidad es menor que la venta minima")
+ Return Nothing
+ End If
+ End If
+
+ If (DrPS("SATClaveUnidadMedida").ToString = "" Or DrPS("SATClavePS").ToString = "") Then
+ 'VALIDA CLAVESAT
+ If DrPS("SATClavePS").ToString = "" Then
+ Retorno.Mensajes.Add(String.Format("{0}-{1}: Sin producto SAT
", DrPS("Codigo").ToString, DrPS("PS").ToString))
+ Return Nothing
+ ElseIf DrPS("SATClaveUnidadMedida").ToString = "" Then
+ Retorno.Mensajes.Add(String.Format("{0}-{1}: Sin Unidad Medida SAT
", DrPS("Codigo").ToString, DrPS("PS").ToString))
+ Return Nothing
+ End If
+ End If
+
+ If Not ClienteDesglosaIEPS Then
+ If Not RegeneraIEPS Then
+ PU = PU * (1 + DrPS("IEPSPorcentaje").ToString.ToDecimal)
+ End If
+ DrPS("IEPSPorcentaje") = 0
+ End If
+
+ Dim Row As DataRow = Nothing
+ Dim TotalCalculableImpuestos As Decimal = 0
+ PU = Math.Round(PU, 6) ' el precio unitario puede llevar hasta 6 decimales permitidos
+ Dim DrSubProyecto As DataRow = GlobalDTSubProyectos(-1, CveSubProyecto).Rows(0)
+
+ Row = TmpDT.NewRow()
+ Row("CveProyecto") = DrSubProyecto("CveProyecto").ToString().ToEntero()
+ Row("Proyecto") = DrSubProyecto("Proyecto").ToString()
+ Row("CveSubProyecto") = CveSubProyecto
+ Row("SubProyecto") = DrSubProyecto("SubProyecto").ToString()
+ Row("Serie") = Serie
+ Row("TiempoEntrega") = TiempoEntrega
+ Row("Orden") = TmpDT.Rows.Count + 1
+ Row("Cantidad") = Cantidad
+ Row("CveUM") = CveUM
+ Row("UM") = UM
+ Row("CveClasificacion") = CveClasificacion
+ Row("Clasificacion") = Clasificacion
+ Row("CvePS") = CvePS
+ Row("Obs") = Obs
+
+ TotalCalculableImpuestos = (Cantidad * PU) - Descuento
+
+ Row("PU") = PU
+ Row("Codigo") = DrPS("Codigo")
+ Row("NoIdentificacion") = DrPS("Codigo")
+ Row("ClaveSATFraccionArancelaria") = DrPS("ClaveSATFraccionArancelaria")
+ Row("ClaveSATUnidadAduana") = DrPS("ClaveSATUnidadAduana")
+ Row("ClaveSATFraccionArancelariaDescripcion") = DrPS("ClaveSATFraccionArancelariaDescripcion")
+ Row("ClaveSATUnidadAduanaDescripcion") = DrPS("ClaveSATUnidadAduanaDescripcion")
+ Row("Consec") = Consec
+
+ Row("PS") = DrPS("PS")
+ Row("CodigoPS") = DrPS("PSCodigo").ToString
+ Row("CveTipoPS") = DrPS("CveTipoPS")
+ Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario")
+ Row("CveTamaño") = DrPS("CveTamaño")
+
+ If CveClasificacion <= 0 Then Row("CveClasificacion") = DrPS("CveClasificacion")
+ If Clasificacion = "" Then Row("Clasificacion") = DrPS("Clasificacion")
+
+ If DrPS("IVA").ToString.Contiene("-1", "") Then
+ Row("PorcentajeIVA") = DrSubProyecto("IVA")
+ Else
+ Row("PorcentajeIVA") = DrPS("IVA")
+ End If
+
+ Row("IVA") = Row("PorcentajeIVA")
+ Row("ImporteIVA") = Math.Round(Row("PorcentajeIVA").ToString.ToDecimal * TotalCalculableImpuestos, 2)
+ Row("ImporteRetIVA") = Math.Round(ClienteRetIVA * TotalCalculableImpuestos, 2)
+ Row("ImporteRetISR") = Math.Round(ClienteRetISR * TotalCalculableImpuestos, 2)
+ Row("PorcentajeRetIVA") = ClienteRetIVA
+ Row("PorcentajeRetISR") = ClienteRetISR
+ Row("PorcentajeIEPS") = DrPS("IEPSPorcentaje")
+ Row("ImporteIEPS") = Math.Round(DrPS("IEPSPorcentaje").ToString.ToDecimal * TotalCalculableImpuestos, 2)
+ Row("IEPS") = Row("ImporteIEPS")
+ Row("Descuento") = Math.Round(Descuento, 2)
+ Row("TipoDescuento") = "2"
+
+ Row("Total") = Cantidad * PU
+ Row("TotalImporte") = Math.Round(Cantidad * PU, 2)
+
+ Row("SATClaveProdServ") = DrPS("SATClavePS")
+ Row("SATClaveUM") = DrPS("SATClaveUnidadMedida")
+
+ Row("EntregaDirecta") = EntregaDirecta
+ 'Contratos
+ Row("CveContratoDetalle") = CveContratoDetalle
+ Row("CveVentaDetalle") = CveVentaDetalle
+ Row("CveMovimientoDetallePedido") = CveMovimientoDetallePedido
+ Row("CveOrdenCompraDetalle") = CveOrdenCompraDetalle
+ Row("CveVentaDetalleRemision") = CveVentaDetalleRemision
+ Row("CveVentaDetalleCotizacion") = CveVentaDetalleCotizacion
+ Row("CveVentaDetallePedido2") = CveVentaDetallePedido2
+ Row("CuentaPredial") = CuentaPredial
+
+ 'RECARGAR GV
+ Return Row
+ End Function
+#End Region
+
+#End Region
+ Private Function RegistrarCotizacion(ByVal context As HttpContext) As String
+ Dim Respuesta As New FidelityAppsResponse
+ Dim RespuestaError As New FidelityAppsResponseError
+ Dim TieneError As Boolean = False
+ Dim JsonRequest As JObject = Nothing
+
+ If context.Request.InputStream IsNot Nothing Then
+ Using reader As New StreamReader(context.Request.InputStream)
+ Dim json = reader.ReadToEnd
+
+ If Not String.IsNullOrEmpty(json) Then
+ JsonRequest = JObject.Parse(json)
+ If JsonRequest Is Nothing Then
+ TieneError = True
+ End If
+ End If
+
+ End Using
+ End If
+
+ If TieneError Then
+ RespuestaError.message = "Ocurrió un error al obtener el cuerpo de los parametros"
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ End If
+
+ If Not TieneError Then
+ Dim Usuario As Usuario = ValidaUsuarioSistema(100, CveEmpresa)
+ If Usuario IsNot Nothing Then
+ Dim Resp As New Modelos.Factura.MMensajeFactura
+ Dim ObjClientes As New ClsClientes()
+ Dim ObjInventario As New ClsInventarios(ObjClientes.IniciaTransacSQL())
+
+ Try
+ Dim ObjFactura = CreaFactura(ObjInventario, ObjClientes, "Cot", Resp, JsonRequest, Usuario)
+
+ If ObjFactura IsNot Nothing Then
+ Resp = ObjFactura.EmitirFactura(False, Transac:=ObjClientes.IniciaTransacSQL())
+
+ If Resp.CveVenta > 0 Then
+ Respuesta.status = "success"
+ Respuesta.data = Resp.CveVenta.ToString()
+ Else
+ TieneError = True
+ End If
+
+ If TieneError Then
+ Dim sb As New StringBuilder()
+ For Each msg As String In Resp.Mensajes
+ sb.AppendFormat("{0}. ", msg)
+ Next
+ RespuestaError.message = sb.ToString()
+ End If
+ Else
+ TieneError = True
+ Dim sb As New StringBuilder()
+ For Each msg As String In Resp.Mensajes
+ sb.AppendFormat("{0}. ", msg)
+ Next
+ RespuestaError.message = sb.ToString()
+ End If
+
+ Catch ex As Exception
+ TieneError = True
+ End Try
+
+ If TieneError Then
+ ObjClientes.RollBack()
+ Else
+ ObjClientes.Commit()
+ End If
+
+ ObjClientes.Dispose()
+ ObjInventario.Dispose()
+ Else
+ TieneError = True
+ RespuestaError.message = "no hay un usuario disponible"
+ End If
+
+ End If
+
+ If TieneError Then
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ Else
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(Respuesta)
+ End If
+ End Function
+
+ Private Function GetSucursales(ByVal context As HttpContext) As String
+ Dim Respuesta As New FidelityAppsResponse
+ Dim RespuestaError As New FidelityAppsResponseError
+ Dim TieneError As Boolean = False
+
+ Dim data As New JArray
+
+ Dim DtSucursales As DataTable = GlobalDTSubProyectos(-1, CveEmpresa:=CveEmpresa).FiltraParametros("EsSucursal = True")
+ If DtSucursales IsNot Nothing Then
+ Try
+ For Each Row As DataRow In DtSucursales.Rows
+ Dim objSucursal As New JObject(
+ New JProperty("code", Row("CveSubProyecto")),
+ New JProperty("name", Row("SubProyecto")),
+ New JProperty("street", Row("Calle")),
+ New JProperty("no_ext", Row("NoExt")),
+ New JProperty("no_int", Row("NoInt")),
+ New JProperty("zip", Row("CP")),
+ New JProperty("neighborhood", Row("Colonia")),
+ New JProperty("city", Row("Municipio")),
+ New JProperty("phone", Row("Telefono")),
+ New JProperty("email", Row("Correo")),
+ New JProperty("geo_lat", ""),
+ New JProperty("geo_lng", ""),
+ New JProperty("image", "")
+ )
+ data.Add(objSucursal)
+ Next
+ Catch ex As Exception
+ TieneError = True
+ RespuestaError.message = "Ocurrió un error al obtener la sucursales"
+ End Try
+ DtSucursales.Dispose()
+ Else
+ TieneError = True
+ End If
+
+ Respuesta.data = data
+
+ If TieneError Then
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(RespuestaError)
+ Else
+ context.Response.StatusCode = 200
+ Return JsonConvert.SerializeObject(Respuesta)
+ End If
+ End Function
+
Private Function GetExistencia(ByVal context As HttpContext, Codigo As String) As String
Dim respuesta = New With {.isSuccess = False, .message = "", .products = New JArray}
If String.IsNullOrEmpty(Codigo) OrElse Codigo = "-1" Then
respuesta.message = "el parametro 'Sku' es invalido"
- respuesta.isSuccess = False
+ Respuesta.isSuccess = False
Return JsonConvert.SerializeObject(respuesta)
End If
@@ -156,7 +1608,7 @@ Public Class E141 : Implements IHttpHandler
Else
respuesta.message = "el usuario y/o contraseña son requeridos"
respuesta.isSuccess = False
- 'context.Response.StatusCode = 401
+ context.Response.StatusCode = 200
Return JsonConvert.SerializeObject(respuesta)
End If
@@ -164,7 +1616,7 @@ Public Class E141 : Implements IHttpHandler
If unauthorized Then
respuesta.message = "el usuario y/o contraseña no son validos"
respuesta.isSuccess = False
- 'context.Response.StatusCode = 401
+ context.Response.StatusCode = 200
Return JsonConvert.SerializeObject(respuesta)
End If
@@ -735,4 +2187,27 @@ Public Class E141 : Implements IHttpHandler
End If
End Function
+ Private Class FidelityAppsResponse
+ Sub New()
+ status = "success"
+ End Sub
+ Public Property status As String
+ Public Property data As Object
+ Public Property message As String
+ End Class
+
+ Private Class FidelityAppsResponseError
+ Sub New()
+ status = "error"
+ End Sub
+ Public Property status As String
+ Public Property message As String
+ End Class
+
+ Private Class AuthMessage
+ Public Property IsSucces As Boolean
+ Public Property ErrorMessage As FidelityAppsResponseError
+ Public Property StatusCode As Integer
+ End Class
+
End Class
\ No newline at end of file
diff --git a/Bancos/PagoAcreedor.aspx.cs b/Bancos/PagoAcreedor.aspx.cs
index bf115dfad..fc91d55d9 100644
--- a/Bancos/PagoAcreedor.aspx.cs
+++ b/Bancos/PagoAcreedor.aspx.cs
@@ -114,9 +114,8 @@ public partial class Bancos_PagoAcreedor : ClsPaginas
{
if (!IsPostBack)
{
- UsaComplementaria = false;
- CveMonedaCuentaPago = 0;
- if (UsuarioActual.CveEmpresa.Contiene(1, 119)) { UsaComplementaria = true; }
+ UsaComplementaria = true;
+ CveMonedaCuentaPago = 0;
rowComisiones.Visible = UsuarioActual.CveEmpresa.Contiene(1, 4, 5, 7, 11, 12, 72, 80, 126, 119, 122);
CargaTipoTransaccion();
diff --git a/Bin/GoCfdi.dll b/Bin/GoCfdi.dll
index 2aedb7722..e7555acea 100644
Binary files a/Bin/GoCfdi.dll and b/Bin/GoCfdi.dll differ
diff --git a/Compras/Compras.aspx.vb b/Compras/Compras.aspx.vb
index 7a06ef3a6..e0306b3b0 100644
--- a/Compras/Compras.aspx.vb
+++ b/Compras/Compras.aspx.vb
@@ -18072,6 +18072,11 @@ Partial Class Compras_Compras
Dim CveProyecto = If(DdlProyecto.SelectedValue.ToEntero > 0, DdlProyecto.SelectedValue.ToEntero, -1)
DdlSubProyecto.Items.Clear()
+ 'SI NO SE VE EL PROYECTO NO FILTRAR POR PROYECTO
+ If Not DdlProyecto.Visible Then
+ CveProyecto = -1
+ End If
+
DdlSubProyecto.DataSource = If(Not UsuarioActual.TienePermisoProceso(110), GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, CveProyecto, UsuarioActual.CveEmpresa, -1, 1), GlobalDTSubProyectos(CveProyecto, -1, UsuarioActual.CveEmpresa, 1))
DdlSubProyecto.DataBind()
diff --git a/Compras/PopUpVerFactura.aspx.vb b/Compras/PopUpVerFactura.aspx.vb
index 6bae061c3..9ec3b4e3e 100644
--- a/Compras/PopUpVerFactura.aspx.vb
+++ b/Compras/PopUpVerFactura.aspx.vb
@@ -13,7 +13,8 @@ Imports Stimulsoft.Report
Imports Stimulsoft.Report.Components
Imports Stimulsoft.Report.Dictionary
Imports Stimulsoft.Report.Web
-
+Imports Newtonsoft.Json.Linq
+
Partial Class PopUpVerFactura
Inherits ClsPaginas
@@ -495,8 +496,17 @@ Partial Class PopUpVerFactura
'PDF AJUSTE
If UrlParametros("OP").ToString = "AJUSTE" Then
+ 'SI YA ESTA GUARDADO
If UrlParametros("CVEGARANTIADETALLE") IsNot Nothing Then
- ImprimirPDFAjuste(UrlParametros("CVEGARANTIADETALLE").ToString.ToEntero)
+ ImprimirPDFAjuste(UrlParametros("CVEGARANTIADETALLE").ToString.ToEntero)
+ Else
+ ImprimirPDFAjuste(CvePSAjuste:=UrlParametros("CVEPSAJUSTE").ToString.ToEntero(), CveCliente:=UrlParametros("CVECLIENTE").ToString.ToEntero(),
+ CveClienteDistribuidor:=UrlParametros("CVECLIENTEDISTRIBUIDOR").ToString.ToEntero(), Consec:=UrlParametros("CONSEC").ToString,
+ FolioGarantia:=UrlParametros("FOLIOGARANTIA").ToString, FechaAjuste:=UrlParametros("FECHAAJUSTE").ToString.ToDateTime(), FechaReclamacion:=UrlParametros("FECHARECLAMACION").ToString.ToDateTime(),
+ TipoDefecto:=UrlParametros("TIPODEFECTO").ToString, CveTipoUso:=UrlParametros("CVETIPOUSO").ToString.ToEntero(), CodigoEnsamble:=UrlParametros("CODIGOENSAMBLE").ToString,
+ CodigoLinea:=UrlParametros("CODIGOLINEA").ToString, CodigoInspeccion:=UrlParametros("CODIGOINSPECCION").ToString, PorcentajeAjuste:=UrlParametros("PORCENTAJEAJUSTE").ToString,
+ BCIAjuste:=UrlParametros("BCIAJUSTE").ToString, Etiqueta:=UrlParametros("ETIQUETA").ToString, Año:=UrlParametros("AÑO").ToString, Comprobante:=UrlParametros("COMPROBANTE").ToString,
+ ModeloAuto:=UrlParametros("MODELOAUTO").ToString, MarcaAuto:=UrlParametros("MARCAAUTO").ToString, CodigoTD:=UrlParametros("CODIGOTD").ToString)
End If
End If
@@ -4696,7 +4706,135 @@ Partial Class PopUpVerFactura
params.Add(New ReportParameter("LogoPath", ""))
End If
- ImprimirPDF("Empresas/Grales/Formatos/Ajuste.rdlc", DtDatos, params, "Reporte de Ajuste", "PDF")
+ ImprimirPDF("Empresas/Grales/Formatos/Ajuste.rdlc", DtDatos, params, "Reporte de Ajuste", "PDF", Content_Disposition:="inline")
+ End Sub
+
+ Private Sub ImprimirPDFAjuste(CvePSAjuste As Integer, CveCliente As Integer, CveClienteDistribuidor As Integer, Consec As String, FolioGarantia As String, FechaAjuste As DateTime, FechaReclamacion As DateTime,
+ TipoDefecto As String, CveTipoUso As Integer, CodigoEnsamble As String, CodigoLinea As String, CodigoInspeccion As String, PorcentajeAjuste As String,
+ BCIAjuste As String, Etiqueta As String, Año As String, Comprobante As String, ModeloAuto As String, MarcaAuto As String, CodigoTD As String)
+
+ Dim MesesUso As String = "0"
+
+ Dim MarcaPS As String = ""
+ Dim CveMarca As Integer = -1
+
+ Dim FechaI As Date = FechaAjuste.AddDays(1)
+ Dim FechaF As Date = FechaReclamacion
+
+ Dim Dia As Integer = FechaI.Day
+ Try
+ 'validación adicional, para saber si el mes tiene 31 días y el actua es menor.
+ If FechaI.Day > Today.LastDayOfMonth.Day Then Dia = Today.LastDayOfMonth.Day
+ Dim FechaT As Date = String.Format("{0}/{1}/{2}", Dia, FechaF.Month, FechaF.Year).ToDate 'armo la fecha con el día del mes actual
+
+ Dim MesesTrascurridos As Integer = Math.Round(DateDiff(DateInterval.Day, FechaI, FechaT) / 30.4, 2).ToEntero 'saco los meses y lo redondeo
+
+ If FechaT > FechaF Then
+ 'todavía está en el mes actual.
+ MesesTrascurridos = MesesTrascurridos
+ Else
+ MesesTrascurridos = MesesTrascurridos + 1
+ End If
+
+ MesesUso = MesesTrascurridos.ToString
+
+ Catch ex As Exception
+ OnError("Ocurrió un error al calcular los meses de uso", ex)
+ End Try
+
+
+ Dim ObjPS As New ClsProductosServicios
+ If ObjPS.GetPS(CvePSAjuste, -1, UsuarioActual.CveEmpresa) Then
+ MarcaPS = ObjPS.DtResultados.FiltroPrimeroValor("Marca", String.Format("CvePS = {0}", CvePSAjuste))
+ End If
+ ObjPS.Dispose()
+
+ Dim Imagen As New System.IO.FileInfo(String.Format("{0}/Logo.png", UsuarioActual.Empresa.Ruta))
+ Dim logouri = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa)
+ Dim DtDatos As New DataTable
+
+ Dim params As New List(Of ReportParameter)
+
+
+ 'Informacion Distribuidor
+ If (CveClienteDistribuidor > 0) Then
+
+ Dim DatosClienteSeleccionado As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveCliente = {0}", CveClienteDistribuidor))
+ Dim CiudadEstado As String = ""
+ Dim Telefono As String = ""
+ Dim Nombre As String = ""
+
+ If DatosClienteSeleccionado IsNot Nothing Then
+ CiudadEstado = String.Format("{0}, {1}", DatosClienteSeleccionado("Ciudad"), DatosClienteSeleccionado("Estado"))
+ Telefono = DatosClienteSeleccionado("Telefono").ToString
+ Nombre = DatosClienteSeleccionado("Nombre").ToString
+ End If
+
+ params.Add(New ReportParameter("NombreDistribuidor", Nombre))
+ params.Add(New ReportParameter("CiudadEstado", CiudadEstado))
+ params.Add(New ReportParameter("TelCliente", Telefono))
+ End If
+
+
+ params.Add(New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa))
+ params.Add(New ReportParameter("Consec", Consec))
+ params.Add(New ReportParameter("FolioAcuse", FolioGarantia))
+
+ 'Informacion de Garantia o ajuste
+ params.Add(New ReportParameter("FechaInst", FechaAjuste.ToString("dd/MM/yyyy")))
+ params.Add(New ReportParameter("Fecha", FechaReclamacion.ToString("dd/MM/yyyy")))
+ params.Add(New ReportParameter("Defecto", TipoDefecto))
+ params.Add(New ReportParameter("MesesUso", MesesUso))
+ params.Add(New ReportParameter("PorcentajeAjuste", PorcentajeAjuste))
+
+ 'Informacion Acumulador
+ params.Add(New ReportParameter("CodEnsamble", CodigoEnsamble))
+ params.Add(New ReportParameter("CodLinea", CodigoLinea))
+ params.Add(New ReportParameter("CodInspeccion", CodigoInspeccion))
+ params.Add(New ReportParameter("Tipo", BCIAjuste))
+ params.Add(New ReportParameter("Marca", MarcaPS))
+ params.Add(New ReportParameter("Etiqueta", Etiqueta))
+
+ 'Informacion Vehiculo
+ params.Add(New ReportParameter("MarcaAuto", MarcaAuto))
+ params.Add(New ReportParameter("TipoAuto", ModeloAuto))
+
+ 'Informacion Consumidor
+ If (CveCliente > 0) Then
+
+ Dim DatosClienteSeleccionado As DataRow = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimero(String.Format("CveCliente = {0}", CveCliente))
+
+ Dim Nombre As String = ""
+ Dim Ciudad As String = ""
+ Dim Estado As String = ""
+ Dim Direccion As String = ""
+ Dim Telefono As String = ""
+
+ If DatosClienteSeleccionado IsNot Nothing Then
+ Nombre = DatosClienteSeleccionado("Nombre").ToString
+ Ciudad = DatosClienteSeleccionado("Ciudad").ToString
+ Estado = DatosClienteSeleccionado("Estado").ToString
+ Direccion = DatosClienteSeleccionado("Direccion").ToString
+ Telefono = DatosClienteSeleccionado("Telefono").ToString
+ End If
+
+ params.Add(New ReportParameter("NombreCliente", Nombre))
+ params.Add(New ReportParameter("Direccion", Direccion))
+ params.Add(New ReportParameter("CiudadEstadoConsumidor", String.Format("{0}, {1}", Ciudad, Estado)))
+ params.Add(New ReportParameter("TelConsumidor", Telefono))
+ End If
+
+ params.Add(New ReportParameter("Anio", Año))
+ params.Add(New ReportParameter("Comprobante", Comprobante))
+ params.Add(New ReportParameter("CodigoTD", CodigoTD))
+
+ If Imagen.Exists Then
+ params.Add(New ReportParameter("LogoPath", logouri))
+ Else
+ params.Add(New ReportParameter("LogoPath", ""))
+ End If
+
+ ImprimirPDF("Empresas/Grales/Formatos/Ajuste.rdlc", DtDatos, params, "Reporte de Ajuste", "PDF", Content_Disposition:="inline")
End Sub
#End Region
diff --git a/Compras/ReembolsosComprobaciones.aspx.vb b/Compras/ReembolsosComprobaciones.aspx.vb
index f43caaa7a..87dd131f3 100644
--- a/Compras/ReembolsosComprobaciones.aspx.vb
+++ b/Compras/ReembolsosComprobaciones.aspx.vb
@@ -425,7 +425,7 @@ Partial Class Compras_ReembolsosComprobaciones
End If
Dim UsaSimplificacionCajaChica As Boolean = False
- If UsuarioActual.CveEmpresa = 119 Then UsaSimplificacionCajaChica = True
+ If UsuarioActual.CveEmpresa.Contiene(119, 158) Then UsaSimplificacionCajaChica = True
@@ -446,7 +446,7 @@ Partial Class Compras_ReembolsosComprobaciones
CveIERegistrado = DDlCheques.SelectedValue.ToEntero
- If UsuarioActual.CveEmpresa.Contiene(119) Then
+ If UsuarioActual.CveEmpresa.Contiene(119, 158) Then
CvePrePolizaIERegistrado = ObjMov.AddPrePolizas("Compras/Comprobaciones1", 9, TxtImporteVinculado.Text.ToDecimal, TxtImporteVinculado.Text.ToDecimal, CveMoneda, TxtFechaPrePoliza.Text.ToDate, If(TxtObservaciones.Text.Trim = "", concepto, TxtObservaciones.Text.Trim), UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa)
If CveCajaChica > 0 Then
@@ -710,7 +710,7 @@ Partial Class Compras_ReembolsosComprobaciones
If gvr.DataKey("Original").ToDecimal > 0 Then PorcentajePago = (ImporteMovto / gvr.DataKey("Original").ToDecimal) Else PorcentajePago = 1
- If Not ChkReembolsarSinBancos.Checked AndAlso (Not HdnCheque.Value.ToEntero > 0 Or Not UsuarioActual.CveEmpresa.Contiene(119)) Then
+ If Not ChkReembolsarSinBancos.Checked AndAlso (Not HdnCheque.Value.ToEntero > 0 Or Not UsuarioActual.CveEmpresa.Contiene(119, 158)) Then
'Si es caja chica metemos el concepto 30, si es funcionario metemos 29
If Not ObjMov.AddPrePolizasDetalle(CvePrePolizaPago, True, ImporteMovto, Referencia, If(CveCajaChica > 0, 30, 29), ConceptoMovimiento, gvr.FCLiteral("LtlFecha").Text.ToDate, If(CveCajaChica > 0, IdCuentaBancaria, IdCtaPersonal), -1, CveIE:=CveIEPago, CveIEDevolucion:=If(CveCajaChica > 0, If(DDlCheques.SelectedValue.ToEntero = -1, CveIECajaChica, DDlCheques.SelectedValue.ToEntero), -1), CvePersonal:=CvePersonal, CveCompra:=gvr.FCHyperLink("HplF2").Text.ToEntero, CveProveedor:=gvr.FCHyperLink("HLProv").Text.ToEntero, ImporteME:=If(tipoCambio = 1, 0, ImporteMovto), ImporteMX:=ImporteMovto * tipoCambio, CveCuenta:=CveCuentaPersonal, CvePrePolizaOriginal:=CvePrePolizaPagoOriginal, Contabilizable:=If(CveCajaChica > 0 Or CvePersonal > 0, Not UsaSimplificacionCajaChica, True)) Then
MsgError = "Detalle"
diff --git a/Contabilidad/RepIVA.aspx.cs b/Contabilidad/RepIVA.aspx.cs
index 025f8b42a..659597ce7 100644
--- a/Contabilidad/RepIVA.aspx.cs
+++ b/Contabilidad/RepIVA.aspx.cs
@@ -189,7 +189,10 @@ public partial class Contabilidad_RepIVA : ClsPaginas
if (txtFechaF.Text == "" || txtFechaF.Text == "__/__/____") { FechaF = "-1"; } else { FechaF = $" Fecha Final: {txtFechaF.Text}"; }
String FechaI;
if (txtFechaI.Text == "" || txtFechaI.Text == "__/__/____") { FechaI = "-1"; } else { FechaI = $" Fecha Inicial: {txtFechaI.Text}"; }
- if (DtIVATrasladado.Rows.Count > 0 || DtIVAAcreditable.Rows.Count > 0)
+ String TipoMov;
+ if (DdlTipoMovto.SelectedItem.Text == "Todos") { TipoMov = ""; } else { TipoMov = $" Tipo Movimiento: {DdlTipoMovto.SelectedItem.Text}"; }
+
+ if (GvT.Rows.Count > 0 || GvA.Rows.Count > 0)
{
System.IO.FileInfo Imagen;
String logouri = "";
@@ -208,7 +211,7 @@ public partial class Contabilidad_RepIVA : ClsPaginas
List para = new List();
para.Add(new CrystalParametro("Empresa", UsuarioActual.Empresa.Empresa));
para.Add(new CrystalParametro("UsuarioImprimio", UsuarioActual.Nombre));
- para.Add(new CrystalParametro("Filtros", $"Filtros: {FechaI}{FechaF}"));
+ para.Add(new CrystalParametro("Filtros", $"Filtros: {FechaI}{FechaF}{TipoMov}"));
if (Imagen.Exists)
{
para.Add(new CrystalParametro("LogoPath", logouri));
diff --git a/Contratos/Contrato.aspx.vb b/Contratos/Contrato.aspx.vb
index cc658606f..992646e1b 100644
--- a/Contratos/Contrato.aspx.vb
+++ b/Contratos/Contrato.aspx.vb
@@ -693,7 +693,7 @@ Partial Class Contratos_Default
CargaConvenioPrecioFijo()
End If
- If UsuarioActual.CveEmpresa = 72 And DdlTipoContrato.SelectedValue.Contiene("7", "8", "10", "13", "28") Then
+ If UsuarioActual.CveEmpresa = 72 And DdlTipoContrato.SelectedValue.Contiene("7", "8", "9", "10", "13", "28") Then
GetNoContratoNuevo()
End If
@@ -4446,8 +4446,8 @@ Partial Class Contratos_Default
Dim TipoContrato As Integer = DdlTipoContrato.SelectedValue.ToEntero()
- Dim SufijoContrato As String = ""
-
+ Dim SufijoContrato As String = ""
+
Select Case TipoContrato
Case 7 'Contrato Comodato
SufijoContrato = "COMODATO"
diff --git a/Empresas/119/Formatos/Nomina.rdlc b/Empresas/119/Formatos/Nomina.rdlc
index 23240a972..84d07c8ba 100644
--- a/Empresas/119/Formatos/Nomina.rdlc
+++ b/Empresas/119/Formatos/Nomina.rdlc
@@ -179,7 +179,7 @@
Clave
@@ -213,7 +213,7 @@
Concepto
@@ -247,7 +247,7 @@
Importe
@@ -262,7 +262,7 @@
@@ -656,8 +656,8 @@
DsOC
- 8.8134cm
- 0.14687cm
+ 7.70215cm
+ 0.15979cm
2.05138cm
10.0953cm
@@ -773,7 +773,7 @@
Concepto
@@ -807,7 +807,7 @@
Importe
@@ -822,7 +822,7 @@
@@ -1100,7 +1100,6 @@
es-MX
- true
@@ -1235,8 +1234,8 @@
DataSet1
- 8.8156cm
- 10.24218cm
+ 7.70435cm
+ 10.2551cm
2.05606cm
9.79494cm
1
@@ -1246,474 +1245,6 @@
-
-
-
- Database
- =First(Fields!ImagenByte.Value, "dsImagenes")
- image/png
- FitProportional
- 0.27213in
- 0.20622in
- 1.30194in
- 1.48366in
-
-
-
-
-
-
-
-
- 7.3669cm
-
-
- 7.37355cm
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- Éste documento es una representación impresa de un CFDi
-
-
-
-
-
-
- Textbox258
-
-
- DimGray
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- Sello digital del emisor
-
-
-
-
-
-
- Textbox18
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!SelloDigitalEmisor.Value
-
-
-
-
-
-
- Textbox15
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- Sello dígital del SAT:
-
-
-
-
-
-
- Textbox9
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!SelloDigitalSAT.Value
-
-
-
-
-
-
- Textbox64
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- Cadena Original del timbre
-
-
-
-
-
-
- Textbox68
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.57354cm
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!CadenaOriginal.Value
-
-
-
-
-
-
- Textbox69
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- 0.44125cm
-
-
-
-
- true
- true
-
-
-
-
- Versión del comprobante: 3.3
-
-
-
-
-
-
- Textbox11
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Versión del complemento: 1.2
-
-
-
-
-
-
- Textbox12
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.6cm
-
-
-
-
- true
- true
-
-
-
-
- Usos del CFDI "P01"(Por definir)
-
-
-
-
-
-
- Textbox254
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- dsImagenes
- 0.11768cm
- 5.05803cm
- 5.21479cm
- 14.74045cm
- 1
-
-
-
-
-
- true
- 13.41609cm
- 0.14687cm
- 5.61496cm
- 19.90317cm
- 2
-
-
-
-
true
true
@@ -1738,7 +1269,7 @@
AJA850608L7A
@@ -1769,7 +1300,7 @@
=Parameters!RegistroPatronal.Value
@@ -1833,7 +1364,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.49417cm
+ 0.38834cm
@@ -1847,7 +1378,7 @@ Lugar de expedición: 83220 Hermosillo
@@ -1915,7 +1446,7 @@ Lugar de expedición: 83220 Hermosillo
SubTotal
@@ -1977,7 +1508,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.52062cm
+ 0.44125cm
@@ -1991,7 +1522,7 @@ Lugar de expedición: 83220 Hermosillo
Folio Fiscal
@@ -2059,7 +1590,7 @@ Lugar de expedición: 83220 Hermosillo
Descuentos
@@ -2094,7 +1625,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!Descuentos.Value
@@ -2121,7 +1652,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.6cm
+ 0.44125cm
@@ -2135,7 +1666,7 @@ Lugar de expedición: 83220 Hermosillo
No. Certificado del SAT
@@ -2170,7 +1701,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!CertificadoSAT.Value
@@ -2203,7 +1734,7 @@ Lugar de expedición: 83220 Hermosillo
Retenciones
@@ -2243,7 +1774,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!ISR.Value
@@ -2274,7 +1805,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.6cm
+ 0.44125cm
@@ -2288,7 +1819,7 @@ Lugar de expedición: 83220 Hermosillo
Fecha de certificación
@@ -2355,7 +1886,7 @@ Lugar de expedición: 83220 Hermosillo
TOTAL
@@ -2389,6 +1920,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!Total.Value
@@ -2432,2437 +1964,11 @@ Lugar de expedición: 83220 Hermosillo
DsOC
- 10.97749cm
- 0.14687cm
- 2.21479cm
+ 9.86624cm
+ 0.15979cm
+ 1.71208cm
19.89025cm
- 4
-
-
-
-
-
-
-
-
- 2.2642cm
-
-
- 2.11107cm
-
-
- 2.2102cm
-
-
- 2.57342cm
-
-
- 4.85068cm
-
-
- 2.633cm
-
-
- 3.2606cm
-
-
-
-
- 0.49417cm
-
-
-
-
- true
- true
-
-
-
-
- DATOS DEL EMPLEADO
-
-
-
-
-
-
- Textbox201
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 7
-
-
-
-
-
-
-
-
-
-
-
- 0.46771cm
-
-
-
-
- true
- true
-
-
-
-
- No Empleado
-
-
-
-
-
-
- Textbox194
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!NoEmpleado.Value
-
-
-
-
-
-
- Textbox195
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox333
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Nombre
-
-
-
-
-
-
- Textbox196
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!NombreCompleto.Value
-
-
-
-
-
-
- Textbox197
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- NSS
-
-
-
-
-
-
- Textbox199
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!NSS.Value
-
-
-
-
-
-
- Textbox200
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.46771cm
-
-
-
-
- true
- true
-
-
-
-
- RFC
-
-
-
-
-
-
- Textbox187
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!RFC.Value
-
-
-
-
-
-
- Textbox188
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Régimen
-
-
-
-
-
-
- Textbox190
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Regimen.Value
-
-
-
-
-
-
- Textbox191
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Departamento
-
-
-
-
-
-
- Textbox192
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Departamento.Value
-
-
-
-
-
-
- Textbox193
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.46771cm
-
-
-
-
- true
- true
-
-
-
-
- CURP
-
-
-
-
-
-
- Textbox174
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!CURP.Value
-
-
-
-
-
-
- Textbox175
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Riesgo Puesto
-
-
-
-
-
-
- Textbox177
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!RiesgoPuesto.Value
-
-
-
-
-
-
- Textbox184
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Puesto
-
-
-
-
-
-
- Textbox185
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Puesto.Value
-
-
-
-
-
-
- Textbox186
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.46771cm
-
-
-
-
- true
- true
-
-
-
-
- INFORMACION LABORAL
-
-
-
-
-
-
- Textbox167
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 7
-
-
-
-
-
-
-
-
-
-
-
- 0.4677cm
-
-
-
-
- true
- true
-
-
-
-
- Contrato
-
-
-
-
-
-
- Textbox160
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Contrato.Value
-
-
-
-
-
-
- Textbox161
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Jornada
-
-
-
-
-
-
- Textbox163
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Jornada.Value
-
-
-
-
-
-
- Textbox164
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Salario Base
-
-
-
-
-
-
- Textbox165
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!SalarioBase.Value
-
-
-
-
-
-
- Textbox166
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.52062cm
-
-
-
-
- true
- true
-
-
-
-
- Dias Pagados
-
-
-
-
-
-
- Textbox153
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!DiasPagados.Value
-
-
-
-
-
-
- Textbox154
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Periodo
-
-
-
-
-
-
- Textbox156
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Periodo.Value
-
-
-
-
-
-
- Textbox157
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Salario Diario Int
-
-
-
-
-
-
- Textbox158
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!SalarioDiarioInt.Value
-
-
-
-
-
-
- Textbox159
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.46771cm
-
-
-
-
- true
- true
-
-
-
-
- Fecha ingreso
-
-
-
-
-
-
- Textbox153
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!FechaIngreso.Value
-
-
-
-
-
-
- Textbox10
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox20
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox22
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox23
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox24
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.44124cm
-
-
-
-
- true
- true
-
-
-
-
- PAGO
-
-
-
-
-
-
- Textbox146
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 7
-
-
-
-
-
-
-
-
-
-
-
- 0.44125cm
-
-
-
-
- true
- true
-
-
-
-
- Banco
-
-
-
-
-
-
- Textbox127
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Banco.Value
-
-
-
-
-
-
- Textbox136
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Método de Pago
-
-
-
-
-
-
- Textbox142
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!MetodoPago.Value
-
-
-
-
-
-
- Textbox143
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Fecha Inicio
-
-
-
-
-
-
- Textbox144
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!FechaInicio.Value
-
-
-
-
-
-
- Textbox145
-
-
-
- Black
-
- 1pt
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.49417cm
-
-
-
-
- true
- true
-
-
-
-
- CLABE
-
-
-
-
-
-
- Textbox115
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!CLABE.Value
-
-
-
-
-
-
- Textbox117
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
- 2
-
-
-
-
-
-
- true
- true
-
-
-
-
- Forma de Pago
-
-
-
-
-
-
- Textbox119
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!FormaPago.Value
-
-
-
-
-
-
- Textbox121
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Fecha Fin
-
-
-
-
-
-
- Textbox123
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!FechaFin.Value
-
-
-
-
-
-
- Textbox125
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.44125cm
-
-
-
-
- true
- true
-
-
-
-
- Clave
-
-
-
-
-
-
- Textbox36
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Cantidad
-
-
-
-
-
-
- Textbox16
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Unidad
-
-
-
-
-
-
- Textbox21
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Moneda
-
-
-
-
-
-
- Textbox47
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Descripción
-
-
-
-
-
-
- Textbox59
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Precio Unit.
-
-
-
-
-
-
- Textbox77
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- Importe
-
-
-
-
-
-
- Textbox109
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- 0.49416cm
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Clave.Value
-
-
-
-
-
-
- Textbox54
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Cantidad.Value
-
-
-
-
-
-
- Textbox55
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Unidad.Value
-
-
-
-
-
-
- Textbox57
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- MXN
-
-
-
-
-
-
- Textbox48
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Descripcion.Value
-
-
-
-
-
-
- Textbox60
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!PU.Value
-
-
-
-
-
-
- Textbox103
-
-
- 2pt
- 2pt
- 2pt
- 2pt
- es-MX
-
-
-
-
-
-
-
- true
- true
-
-
-
-
- =Parameters!Importe.Value
-
-
-
-
-
-
- Textbox110
-
-
- 2pt
- 2pt
- 2pt
- 2pt
- es-MX
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- DsOC
- 2.58974cm
- 0.14687cm
- 6.13311cm
- 19.90317cm
- 5
+ 3
@@ -4877,7 +1983,7 @@ Lugar de expedición: 83220 Hermosillo
0.29576cm
2.1513cm
3.93798cm
- 6
+ 4
@@ -4896,7 +2002,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.6cm
+ 0.51659cm
@@ -4909,7 +2015,7 @@ Lugar de expedición: 83220 Hermosillo
Recibo Nómina
@@ -4944,7 +2050,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!ReciboNomina.Value
@@ -4969,7 +2075,7 @@ Lugar de expedición: 83220 Hermosillo
- 0.6cm
+ 0.50702cm
@@ -4983,7 +2089,7 @@ Lugar de expedición: 83220 Hermosillo
Serie
@@ -5018,7 +2124,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!Serie.Value
@@ -5058,7 +2164,7 @@ Lugar de expedición: 83220 Hermosillo
Fecha
@@ -5092,7 +2198,7 @@ Lugar de expedición: 83220 Hermosillo
=Parameters!Fecha.Value
@@ -5131,7 +2237,7 @@ Lugar de expedición: 83220 Hermosillo
Tipo de comprobante
@@ -5164,7 +2270,9 @@ Lugar de expedición: 83220 Hermosillo
N
-
+
@@ -5204,9 +2312,9 @@ Lugar de expedición: 83220 Hermosillo
DsOC
0.05745cm
12.97684cm
- 2.4cm
+ 2.22361cm
7.0732cm
- 7
+ 5
@@ -5241,7 +2349,7 @@ Lugar de expedición: 83220 Hermosillo
Recibí de la empresa arriba mencionada, la cantidad neta a que este documento, se refiere, estando conforme con las Percepciones y deducciones que en el aparecen especificados.
@@ -5259,37 +2367,10 @@ Lugar de expedición: 83220 Hermosillo
2pt
+ 2
-
-
-
- true
- true
-
-
-
-
-
-
-
-
-
-
-
- Textbox5
-
-
- 2pt
- 2pt
- 2pt
- 2pt
-
-
-
-
+
@@ -5444,10 +2525,464 @@ Lugar de expedición: 83220 Hermosillo
DsOC
- 19.20744cm
- 0.14687cm
+ 17.07534cm
+ 0.15979cm
1.12062cm
19.89024cm
+ 6
+
+
+
+
+
+ Database
+ =First(Fields!ImagenByte.Value, "dsImagenes")
+ image/png
+ FitProportional
+ 4.64173in
+ 0.068in
+ 1.30194in
+ 1.48366in
+ 7
+
+
+
+
+
+
+
+
+ 7.90238cm
+
+
+ 8.04297cm
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Éste documento es una representación impresa de un CFDi
+
+
+
+
+
+
+ Textbox258
+
+
+ DimGray
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Sello digital del emisor
+
+
+
+
+
+
+ Textbox18
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!SelloDigitalEmisor.Value
+
+
+
+
+
+
+ Textbox15
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Sello dígital del SAT:
+
+
+
+
+
+
+ Textbox9
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!SelloDigitalSAT.Value
+
+
+
+
+
+
+ Textbox64
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Cadena Original del timbre
+
+
+
+
+
+
+ Textbox68
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.57354cm
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!CadenaOriginal.Value
+
+
+
+
+
+
+ Textbox69
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ 0.44125cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Versión del comprobante: 3.3
+
+
+
+
+
+
+ Textbox11
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Versión del complemento: 1.2
+
+
+
+
+
+
+ Textbox12
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.6cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Usos del CFDI "P01"(Por definir)
+
+
+
+
+
+
+ Textbox254
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ dsImagenes
+ 11.78999cm
+ 4.13053cm
+ 5.21479cm
+ 15.94535cm
8
+
+
+
+
+ 2.2642cm
+
+
+ 2.11107cm
+
+
+ 2.2102cm
+
+
+ 2.57342cm
+
+
+ 2.70756cm
+
+
+ 2.08963cm
+
+
+ 2.633cm
+
+
+ 3.2606cm
+
+
+
+
+ 0.49417cm
+
+
+
+
+ true
+ true
+
+
+
+
+ DATOS DEL EMPLEADO
+
+
+
+
+
+
+ Textbox201
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.41479cm
+
+
+
+
+ true
+ true
+
+
+
+
+ No Empleado
+
+
+
+
+
+
+ Textbox194
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!NoEmpleado.Value
+
+
+
+
+
+
+ Textbox195
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+ Textbox333
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Nombre
+
+
+
+
+
+
+ Textbox196
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!NombreCompleto.Value
+
+
+
+
+
+
+ Textbox197
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ NSS
+
+
+
+
+
+
+ Textbox199
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!NSS.Value
+
+
+
+
+
+
+ Textbox200
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.38834cm
+
+
+
+
+ true
+ true
+
+
+
+
+ RFC
+
+
+
+
+
+
+ Textbox187
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!RFC.Value
+
+
+
+
+
+
+ Textbox188
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Régimen
+
+
+
+
+
+
+ Textbox190
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Regimen.Value
+
+
+
+
+
+
+ Textbox191
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Departamento
+
+
+
+
+
+
+ Textbox192
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Departamento.Value
+
+
+
+
+
+
+ Textbox193
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.38834cm
+
+
+
+
+ true
+ true
+
+
+
+
+ CURP
+
+
+
+
+
+
+ Textbox174
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!CURP.Value
+
+
+
+
+
+
+ Textbox175
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Riesgo Puesto
+
+
+
+
+
+
+ Textbox177
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!RiesgoPuesto.Value
+
+
+
+
+
+
+ Textbox184
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Puesto
+
+
+
+
+
+
+ Textbox185
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Puesto.Value
+
+
+
+
+
+
+ Textbox186
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.49417cm
+
+
+
+
+ true
+ true
+
+
+
+
+ INFORMACION LABORAL
+
+
+
+
+
+
+ Textbox167
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.38832cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Jornada
+
+
+
+
+
+
+ Textbox163
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Jornada.Value
+
+
+
+
+
+
+ Textbox164
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Contrato
+
+
+
+
+
+
+ Textbox160
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Contrato.Value
+
+
+
+
+
+
+ Textbox161
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Periodo
+
+
+
+
+
+
+ Textbox156
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Periodo.Value
+
+
+
+
+
+
+ Textbox157
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.38833cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Dias Pagados
+
+
+
+
+
+
+ Textbox153
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!DiasPagados.Value
+
+
+
+
+
+
+ Textbox154
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Fecha ingreso
+
+
+
+
+
+
+ Textbox153
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!FechaIngreso.Value
+
+
+
+
+
+
+ Textbox10
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Salario Base
+
+
+
+
+
+
+ Textbox165
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!SalarioBase.Value
+
+
+
+
+
+
+ Textbox166
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Salario Diario Int
+
+
+
+
+
+
+ Textbox158
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!SalarioDiarioInt.Value
+
+
+
+
+
+
+ Textbox159
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.44124cm
+
+
+
+
+ true
+ true
+
+
+
+
+ PAGO
+
+
+
+
+
+
+ Textbox146
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 8
+
+
+
+
+
+
+
+
+
+
+
+
+ 0.36187cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Banco
+
+
+
+
+
+
+ Textbox127
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Banco.Value
+
+
+
+
+
+
+ Textbox136
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Método de Pago
+
+
+
+
+
+
+ Textbox142
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!MetodoPago.Value
+
+
+
+
+
+
+ Textbox143
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Fecha Inicio
+
+
+
+
+
+
+ Textbox144
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!FechaInicio.Value
+
+
+
+
+
+
+ Textbox145
+
+
+
+ Black
+
+ 1pt
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.38834cm
+
+
+
+
+ true
+ true
+
+
+
+
+ CLABE
+
+
+
+
+
+
+ Textbox115
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!CLABE.Value
+
+
+
+
+
+
+ Textbox117
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Forma de Pago
+
+
+
+
+
+
+ Textbox119
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!FormaPago.Value
+
+
+
+
+
+
+ Textbox121
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Fecha Fin
+
+
+
+
+
+
+ Textbox123
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!FechaFin.Value
+
+
+
+
+
+
+ Textbox125
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.38833cm
+
+
+
+
+ true
+ true
+
+
+
+
+ Clave
+
+
+
+
+
+
+ Textbox36
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Cantidad
+
+
+
+
+
+
+ Textbox16
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Unidad
+
+
+
+
+
+
+ Textbox21
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Moneda
+
+
+
+
+
+
+ Textbox47
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Descripción
+
+
+
+
+
+
+ Textbox59
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Precio Unit.
+
+
+
+
+
+
+ Textbox77
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ Importe
+
+
+
+
+
+
+ Textbox109
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ 0.49416cm
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Clave.Value
+
+
+
+
+
+
+ Textbox54
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Cantidad.Value
+
+
+
+
+
+
+ Textbox55
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Unidad.Value
+
+
+
+
+
+
+ Textbox57
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ MXN
+
+
+
+
+
+
+ Textbox48
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Descripcion.Value
+
+
+
+
+
+
+ Textbox60
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+
+
+ 2
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!PU.Value
+
+
+
+
+
+
+ Textbox103
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+ es-MX
+
+
+
+
+
+
+
+ true
+ true
+
+
+
+
+ =Parameters!Importe.Value
+
+
+
+
+
+
+ Textbox110
+
+
+ 2pt
+ 2pt
+ 2pt
+ 2pt
+ es-MX
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DsOC
+ 2.51578cm
+ 0.15979cm
+ 5.0304cm
+ 19.84967cm
+ 9
+
+
+
+
- 20.50445cm
+ 18.41425cm