Facturacion masiva de acarreos

This commit is contained in:
2023-07-26 15:36:58 -07:00
parent c89b1d2082
commit adf2e44c69
6 changed files with 1328 additions and 2 deletions

View File

@@ -9325,6 +9325,7 @@ Public Class ClsPaginas
PaginaDict.Add("/Ventas/RepCancelacionesVentas.aspx".ToUpper(), 1325)
PaginaDict.Add("/Ventas/RepLineasAdicionales.aspx".ToUpper(), 1331)
PaginaDict.Add("/Ventas/RepLineasAdicionales.aspx?OP=OP".ToUpper(), 1332)
PaginaDict.Add("/Ventas/FacturacionAcarreos.aspx".ToUpper(), 774)
#End Region
#Region "Varios"
'Portal Cliente/Proveedor

View File

@@ -5823,6 +5823,115 @@ Public Class ClsVentas
Return Retorno
End Function
Public Function AddFacturacionAcarreos(Sucursal As String, RFCCliente As String, Cantidad As Decimal, PSGeneral As String, DireccionOrigen As String, DireccionDestino As String, FechaSalida As DateTime, FechaLlegada As DateTime,
Camion As String, Chofer As String, ConfigAutoTransporte As String, CamionRemolque1 As String, CamionRemolque2 As String, Distancia As Decimal, CveEmpresa As Integer) As String
Dim Retorno As String = ""
DataAdapter("PA_Vta_FacturacionAcarreosAdd")
With SqlAdapter.SelectCommand.Parameters
.Add("@SubProyecto", SqlDbType.VarChar).Value = Sucursal
.Add("@RFCCliente", SqlDbType.VarChar).Value = RFCCliente
.Add("@Cantidad", SqlDbType.Decimal).Value = Cantidad
.Add("@PSGeneral", SqlDbType.VarChar).Value = PSGeneral
.Add("@DireccionOrigen", SqlDbType.VarChar).Value = DireccionOrigen
.Add("@DireccionDestino", SqlDbType.VarChar).Value = DireccionDestino
.Add("@FechaSalida", SqlDbType.DateTime).Value = FechaSalida
.Add("@FechaLlegada", SqlDbType.DateTime).Value = FechaLlegada
.Add("@Camion", SqlDbType.VarChar).Value = Camion
.Add("@Chofer", SqlDbType.VarChar).Value = Chofer
.Add("@ConfigAutoTransporte", SqlDbType.VarChar).Value = ConfigAutoTransporte
.Add("@CamionRemolque1", SqlDbType.VarChar).Value = CamionRemolque1
.Add("@CamionRemolque2", SqlDbType.VarChar).Value = CamionRemolque2
.Add("@Distancia", SqlDbType.Decimal).Value = Distancia
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
.Add("@ErrorMSG", SqlDbType.VarChar, 300).Direction = ParameterDirection.Output
End With
Try
SqlAdapter.Fill(Data)
Retorno = SqlAdapter.SelectCommand.Parameters("@ErrorMSG").Value.ToString
Catch ex As Exception
OnError("Ocurrió un error al guardar los datos de facturación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo)
End Try
Return Retorno
End Function
Public Function GetFacturacionAcarreos(CveFacturacionAcarreo As Integer, CveCliente As Integer, CveSubProyecto As Integer, Estatus As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_FacturacionAcarreosGet")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveFacturacionAcarreo", SqlDbType.Int).Value = CveFacturacionAcarreo
.Add("@CveCliente", SqlDbType.Int).Value = CveCliente
.Add("@CveSubProyecto", SqlDbType.Int).Value = CveSubProyecto
.Add("@Estatus", SqlDbType.Int).Value = Estatus
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener los datos de facturación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return Retorno
End Function
Public Function UpdateFacturacionAcarreo(CveFacturacionAcarreo As Integer, CveVenta As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_FacturacionAcarreosUpdate")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveFacturacionAcarreo", SqlDbType.Int).Value = CveFacturacionAcarreo
.Add("@CveVenta", SqlDbType.Int).Value = CveVenta
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener los actualizar los datos de facturación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return Retorno
End Function
Public Function RemoveFacturacionAcarreo(CveFacturacionAcarreo As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_FacturacionAcarreosRemove")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveFacturacionAcarreo", SqlDbType.Int).Value = CveFacturacionAcarreo
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al obtener los eliminar los datos de facturación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return Retorno
End Function
Public Function RemoveFacturacionAcarreos(CveFacturacionAcarreo As Integer, CveEmpresa As Integer) As Boolean
Dim Retorno As Boolean = False
DataAdapter("PA_Vta_FacturacionAcarreosRemove")
With SqlAdapter.SelectCommand.Parameters
.Add("@CveFacturacionAcarreo", SqlDbType.Int).Value = CveFacturacionAcarreo
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
End With
Try
SqlAdapter.Fill(Data)
Retorno = True
Catch ex As Exception
OnError("Ocurrió un error al eliminar los datos de facturación.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
End Try
Return Retorno
End Function
#Region "IDisposable Support"

View File

@@ -811,6 +811,13 @@ Namespace Modelos
End If
End If
'VALIDA QUE EL PRECIO DEBA SER MAYOR A CERO
If Me.CveFacturacionAcarreo > 0 AndAlso Me.DtDetalle.SUMD("PU") <= 0 Then
ErrorList.Add("El precio unitario debe ser mayor a cero.")
Retorno.Mensajes = ErrorList
Return Retorno
End If
If Me.CveCliente > 0 Or Me.CveEmpresaCRM > 0 Then
If DtDetalle.Rows.Count > 0 Then
@@ -831,6 +838,7 @@ Namespace Modelos
Dim ObjEventos As New ClsOIEventos(ObjVentas.IniciaTransacSQL())
Dim ObjCGame As New ClsCGame(ObjVentas.IniciaTransacSQL())
Dim ObjDocCliente As New ClsEdocumentacion(ObjVentas.IniciaTransacSQL())
Dim ObjGeneral As New ClsGenerales(ObjVentas.IniciaTransacSQL())
Dim ObjAcum As New ClsAcumuladores(ObjVentas.IniciaTransacSQL())
Dim ObjContPaq As ClsContPAQi = Nothing
Dim MensajeAlert = New StringBuilder
@@ -863,8 +871,17 @@ Namespace Modelos
Next
End If
Dim CveTimbreCartaPorte As Integer = -1
GuardarVenta(Me, ObjVentas, ObjConta, ObjInventario, ObjContr, DtDetalle, Me.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS, ObjEventos, ObjCGame, ObjClientes, ObjAcum:=ObjAcum, Resp:=Retorno, Modulo:=Modulo)
If ErrorList.Count = 0 AndAlso Me.EmitirCartaPorte AndAlso Me.TipoDocto = "Ing" Then
CveTimbreCartaPorte = GuardarCartaPorte(Me, ObjGeneral, ObjVentas)
If CveTimbreCartaPorte <= 0 Then
ErrorList.Add("Ocurrió un error al registrar la carta porte")
End If
End If
'SI ES REFACTURACION
Dim ObjNC As List(Of Object) = Nothing
If ErrorList.Count = 0 Then
@@ -1016,6 +1033,12 @@ Namespace Modelos
End If
End If
If CveFacturacionAcarreo > 0 AndAlso ErrorList.Count = 0 Then
If Not ObjVentas.UpdateFacturacionAcarreo(Me.CveFacturacionAcarreo, CveVenta) Then
ErrorList.Add("No se pudo actualizar los datos de facturación de acarreo")
End If
End If
If ErrorList.Count = 0 AndAlso Me.CveVenta > 0 AndAlso DtDocumentacionCliente IsNot Nothing Then
' si se cargó algun documento
If DtDocumentacionCliente.FiltraParametros("RutaArchivo <> ''").Rows.Count > 0 Then
@@ -1064,6 +1087,16 @@ Namespace Modelos
Dim ObjTimbrado As New Timbrado
'DOCUMENTO ACTUAL
If DebeTimbrar Then
If Me.EmitirCartaPorte AndAlso CveTimbreCartaPorte > 0 Then
Dim RespCartaPorte = Timbres.PreParaCartaPorteFactura(CveTimbreCartaPorte, UsuarioActual)
If Not RespCartaPorte.TieneError Then
Me.Timbre.Complementos.CartaPorte = RespCartaPorte.CartaPorte
Else
DebeTimbrar = False
Retorno.Mensajes.Add(RespCartaPorte.Mensaje)
End If
End If
SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, Me)
'NOTA DE CREDITO - REFACTURADA - CASO ESPECIAL, TIMBRADO E IMPRESION
@@ -1132,7 +1165,7 @@ Namespace Modelos
If SeTimbro Then
Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, Me.TipoDocto, Me.SerieFolio)
If File.Exists(ArchivoXML) Then
MensajeAlert.AppendFormat("<ul><li><a class=""Texto"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar XML</a></li></ul>", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", Me.SerieFolio, Me.TipoDocto)))
MensajeAlert.AppendFormat("<ul><li><a class=""Texto"" target=""_blank"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar XML</a></li></ul>", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", CveVenta, "XML", Me.SerieFolio, Me.TipoDocto)))
End If
End If
@@ -1204,6 +1237,10 @@ Namespace Modelos
MensajeAlert.AppendFormat("<br/><br/><b> Se generó una Nota de crédito Folio: {0} amortizando el anticipo </b><br/>", FacturaDevolucion.Folio)
End If
If SeTimbro AndAlso CveFacturacionAcarreo > 0 Then
MensajeAlert.AppendFormat("<ul><li><a class=""Texto"" target=""_blank"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar PDF</a></li></ul><br/>", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", CveVenta)))
End If
If TipoMensajeRespuesta = TipoMensajeRespuesta.HTML Then
ListaMensajes.Add(MensajeAlert.ToString)
Retorno.LigaCliente = $"document.location.href=""/Ventas/Clientes.aspx?CveCliente={Me.CveCliente}&Opt=3"";"
@@ -1286,6 +1323,575 @@ Namespace Modelos
Return Retorno
End Function
Public Shared Function CrearVentaNueva(UsuarioActual As Usuario, CveSubProyecto As Integer, CveCliente As Integer, CveMoneda As Integer) As Modelos.Factura
Dim ObjFactura = New Modelos.Factura(UsuarioActual)
Try
ObjFactura.DirectorioServidor = HttpContext.Current.Server.MapPath("/")
Dim CveProyecto As String = ""
Dim Proyecto As String = ""
Dim SubProyecto As String = ""
ObjFactura.Version = "4.0"
ObjFactura.CveUsuario = UsuarioActual.CveUsuario
ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa
ObjFactura.ConvertirPesos = False
ObjFactura.CveMoneda = CveMoneda
ObjFactura.Moneda = ClsPaginas.GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ")
ObjFactura.MonedaSAT = ClsPaginas.GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {ObjFactura.CveMoneda}")
ObjFactura.TipoCambio = If(ObjFactura.CveMoneda = 1, 1, ClsPaginas.GlobalTipoCambio(Now).ToDecimal())
ObjFactura.TipoDocto = "Ing"
ObjFactura.RefDocto = ""
ObjFactura.Folio = -1
ObjFactura.Serie = "-1"
ObjFactura.Fecha = Now
ObjFactura.CvePrePoliza = -1
ObjFactura.CveMetodoPago = 1
ObjFactura.MetodoPago = "Efectivo"
ObjFactura.FechaPago = DateTime.Today
ObjFactura.MotivoDescuento = ""
ObjFactura.Observaciones = ""
ObjFactura.FechaEjecucion = DateTime.Today
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 = "Factura"
ObjFactura.Alfa1 = ""
ObjFactura.Alfa2 = ""
ObjFactura.Alfa3 = ""
'Totales, Y se llena TmpDTImpuestos
ObjFactura.Descuento = 0
ObjFactura.Amortizacion = 0
ObjFactura.CveContrato = -1
'CLIENTE
ObjFactura.CveCliente = CveCliente
ObjFactura.SetCliente()
Dim ObjCliente As New ClsClientes
If ObjCliente.GetClientes(ObjFactura.CveCliente, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
If ObjCliente.DtResultados.Rows.Count > 0 Then
ObjFactura.CveFormaPago33 = ObjCliente.CveFormaPago33
ObjFactura.FormaPago33 = ClsPaginas.GlobalDTVtaFormaPago.FiltroPrimeroValor("FormaPago", String.Format("CveFormaPago = {0}", ObjCliente.CveFormaPago33))
ObjFactura.FormaPagoSAT33 = ClsPaginas.GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", String.Format("CveFormaPago = {0}", ObjCliente.CveFormaPago33))
ObjFactura.CveMetodoPago33 = ObjCliente.CveMetodoPago33
ObjFactura.MetodoPago33 = ClsPaginas.GlobalDTVtaMetodoPago.FiltroPrimeroValor("MetodoPago", String.Format("CveMetodoPago = {0}", ObjCliente.CveMetodoPago33))
ObjFactura.ClaveMetodoPagoSAT = ClsPaginas.GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", String.Format("CveMetodoPago = {0}", ObjCliente.CveMetodoPago33))
ObjFactura.CveUsoCFDI = ObjCliente.CveUsoCFDI
ObjFactura.UsoCFDI = ClsPaginas.GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
ObjFactura.ClaveUsoCFDI = ClsPaginas.GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", String.Format("CveUsoCFDI = {0}", ObjCliente.CveUsoCFDI))
End If
End If
If ObjCliente.GetSucursales(ObjFactura.CveCliente) Then
If ObjCliente.DtResultados.Rows.Count > 0 Then
ObjFactura.CveClienteSucursal = If(String.IsNullOrEmpty(ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'")), -1, ObjCliente.DtResultados.FiltroPrimeroValor("CveClienteSucursal", "Estatus = 'Activo'").ToEntero())
Else
ObjFactura.CveClienteSucursal = -1
End If
End If
ObjCliente.Dispose()
ObjFactura.CveSubProyecto = CveSubProyecto.ToEntero
ObjFactura.SetSubProyecto()
ObjFactura.SetSubProyectoMatriz()
ObjFactura.CveSubProyectoCobranza = CveSubProyecto.ToEntero
ObjFactura.CveSubProyectoEjecucion = CveSubProyecto.ToEntero
'DETALLES
ObjFactura.DtDetalle = CreaDTFactura()
ObjFactura.SubTotal = ObjFactura.DtDetalle.SUMD("Total")
ObjFactura.IVA = ObjFactura.DtDetalle.SUMD("ImporteIVA")
ObjFactura.RetIVA = ObjFactura.DtDetalle.SUMD("ImporteRetIVA")
ObjFactura.RetISR = ObjFactura.DtDetalle.SUMD("ImporteRetISR")
ObjFactura.IEPS = ObjFactura.DtDetalle.SUMD("ImporteIEPS")
ObjFactura.Total = ObjFactura.SubTotal + ObjFactura.IVA + ObjFactura.IEPS - (ObjFactura.RetIVA + ObjFactura.RetISR)
'SUBPROYECTO
Catch ex As Exception
ObjFactura = Nothing
End Try
Return ObjFactura
End Function
Private Shared Function CreaDTFactura() 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))
TmpDT.Columns.Add("RetIVA", GetType(Decimal))
TmpDT.Columns.Add("RetISR", 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))
TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer))
TmpDT.Columns.Add("CvePromocionDetalle", GetType(Integer))
'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("CantidadFacturadaPed2", 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))
TmpDT.Columns.Add("CveConcepto", GetType(Integer))
TmpDT.Columns.Add("EsCargo", GetType(Boolean))
TmpDT.Columns.Add("CveVentaDetalleRNC", GetType(Integer))
TmpDT.Columns.Add("TieneProntoPago", GetType(String))
TmpDT.Columns.Add("ImporteProntoPago", GetType(Decimal))
TmpDT.Columns.Add("CodigoObjetoImpuesto", GetType(String))
TmpDT.Columns.Add("CveMarca", GetType(Integer))
TmpDT.Columns.Add("CvePrecioLista", GetType(Integer))
TmpDT.Columns.Add("PrecioLista", GetType(String))
TmpDT.Columns.Add("CveActivoFijo", GetType(Integer))
TmpDT.Columns.Add("AFDepreciacion", GetType(Decimal))
TmpDT.Columns.Add("AFValorInicial", GetType(Decimal))
TmpDT.Columns("EsCargo").DefaultValue = False
TmpDT.Columns("TieneProntoPago").DefaultValue = "No"
TmpDT.Columns("ImporteProntoPago").DefaultValue = 0
TmpDT.Columns.Add("NumTurnos", GetType(Decimal))
TmpDT.Columns("NumTurnos").DefaultValue = 0
Return TmpDT
End Function
Public Function AgregarPS(CvePS As Integer, Cantidad As Decimal, PU As Decimal, Descuento As Decimal, Obs As String,
Optional CveUM As Integer = -1, Optional CveProyecto As Integer = -1, Optional Proyecto As String = "", Optional CveSubProyecto As Integer = -1,
Optional SubProyecto As String = "", Optional PorcentajeIVA As Decimal = -1, Optional CuentaPredial As String = "") As Boolean
If Not CvePS > 0 Then
Alert("Ocurrió un error al cargar la información del producto a agregar. Por favor verifique y vuelva a intentar.", TipoMensaje.MsgError)
Return False
End If
Dim DrPS As DataRow = ClsPaginas.GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("") ' Estado = -1
If DrPS Is Nothing Then
Alert("Ocurrió un error al cargar la información del Producto. Por favor vuelva a intentar.", TipoMensaje.MsgError)
Return False
End If
If PU = -1 Then
PU = DrPS("Precio").ToString().ToDecimal()
End If
Dim NumeroDecimales As Integer = 2
Dim Row As DataRow = Nothing
Dim TotalCalculableImpuestos As Decimal = 0
Dim TotalCalculableImpuestosIVA As Decimal = 0
PU = PU.RoundSQL(6) ' el precio unitario puede llevar hasta 6 decimales permitidos
Descuento = Descuento.RoundSQL(NumeroDecimales)
If Not Me.DtDetalle.Columns.Contains("RetIVA") Then
Me.DtDetalle.Columns.Add("RetIVA", GetType(Decimal))
End If
'SI NO TIENE SUBPROYECTO ASIGNADO TOMA EL DE LA FACTURA
If CveSubProyecto = -1 Then
CveSubProyecto = Me.CveSubProyecto
End If
Row = Me.DtDetalle.NewRow()
Row("CveProyecto") = CveProyecto
Row("Proyecto") = Proyecto
Row("CveSubProyecto") = CveSubProyecto
Row("SubProyecto") = SubProyecto
Row("Serie") = ""
Row("TiempoEntrega") = ""
Dim ConsecutivoActual As Integer = Me.DtDetalle.MAX("Consec").ToEntero()
If ConsecutivoActual < 0 Then
ConsecutivoActual = 0
End If
Row("Orden") = ConsecutivoActual + 1
Row("Consec") = ConsecutivoActual + 1
Dim ClienteRetIVA = Me.Cliente.RetIVA
Dim ClienteRetISR = Me.Cliente.RetISR
If ClienteRetIVA <= 0 AndAlso DrPS("RetIVA").ToString.ToDecimal > 0 Then
ClienteRetIVA = DrPS("RetIVA").ToString.ToDecimal
End If
'If ClienteRetIVA <= 0 Then
' If DdlTipoRetencion.SelectedValue.Contiene("1", "2") Then
' ClienteRetIVA = 0.106667D
' ElseIf DdlTipoRetencion.SelectedValue.Contiene("3") Then
' ClienteRetIVA = 0.04D
' End If
'End If
'SI NO ES REFACTURACION verifica si tiene ventaminima
If Me.NuevaFactura <> 1 Then
If Cantidad > 0 AndAlso DrPS("VentaMinima").ToString().ToDecimal > 0 Then
'verifico que la cantidad sea multiplo de venta minima, es decir ventaminima =5, solo puede vender 5,10,15...
If Cantidad Mod DrPS("VentaMinima").ToString().ToDecimal <> 0 Then
Alert(String.Format("El producto se vende solo en cantidades de {0}", DrPS("VentaMinima").ToString()), TipoMensaje.MsgInformacion)
Return False
End If
End If
End If
If CveUM <= 0 Then
CveUM = DrPS("CveUnidadMedida").ToString().ToEntero()
End If
Row("Cantidad") = Cantidad
Row("CveUM") = CveUM
Row("UM") = DrPS("UnidadMedida")
Row("CveClasificacion") = DrPS("CveClasificacion")
Row("Clasificacion") = DrPS("Clasificacion")
Row("CvePS") = CvePS
Row("Obs") = Obs
'VERIFICA SI EN LA FACTURA PADRE SE DESGLOSO EL IEPS
'Dim FacturaDesglosoIEPS As Boolean = ((CveDevolucion > 0 AndAlso NuevaFactura = 1) AndAlso (Me.ObjFacturaNC IsNot Nothing AndAlso Not Me.ObjFacturaNC.VentaDesglosaIEPS))
'If Not ClienteDesglosaIEPS Then
' If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then
' PU = PU * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal)
' VentaDesglosaIEPS = True
' End If
' DrPS("IEPSPorcentaje") = 0
'End If
''SI YA SE DESGLOSO EL IEPS SE GUARDA LA BANDERA EN ESTA FACTURA
'If FacturaDesglosoIEPS Then
' VentaDesglosaIEPS = True
'End If
'SI NO HAY IVA ASIGNADO TOMA EL DEL SUBPROYECTO
If PorcentajeIVA = -1 Then
PorcentajeIVA = Me.SubProyecto.IVA
End If
If DrPS("IVA").ToString().Contiene("-1", "") Then
Row("PorcentajeIVA") = PorcentajeIVA
Else
Row("PorcentajeIVA") = DrPS("IVA")
End If
If UsuarioActual.Empresa.Funcionalidad(373) = "1" AndAlso Me.Cliente.RFC = "XEXX010101000" Then
DrPS("IVA") = 0
Row("PorcentajeIVA") = 0
End If
'If ClienteNODesglosaIVA Then
' 'If Not RegeneraIEPS AndAlso Not FacturaDesglosoIEPS Then
' PU = PU * (1 + Row("PorcentajeIVA").ToString().ToDecimal)
' VentaNODesglosaIVA = True
' 'End If
' DrPS("IVA") = 0
' Row("PorcentajeIVA") = 0
'End If
TotalCalculableImpuestos = ((Cantidad * (PU)) - Descuento)
TotalCalculableImpuestosIVA = TotalCalculableImpuestos * (1 + DrPS("IEPSPorcentaje").ToString().ToDecimal)
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("PS") = DrPS("PS")
Row("CodigoPS") = DrPS("PSCodigo").ToString()
Row("CveTipoPS") = DrPS("CveTipoPS")
Row("CveTipoInvPS") = DrPS("Inv_CveMetodoInventario")
Row("CveTamaño") = DrPS("CveTamaño")
Row("CodigoObjetoImpuesto") = DrPS("CodigoObjetoImpuesto")
Row("CveClasificacion") = DrPS("CveClasificacion")
Row("Clasificacion") = DrPS("Clasificacion")
Row("IVA") = Row("PorcentajeIVA")
Row("ImporteIVA") = (Row("PorcentajeIVA").ToString().ToDecimal * TotalCalculableImpuestosIVA).RoundSQL(NumeroDecimales)
Row("ImporteRetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales)
Row("RetIVA") = (ClienteRetIVA * TotalCalculableImpuestos).RoundSQL(NumeroDecimales)
Row("ImporteRetISR") = (ClienteRetISR * TotalCalculableImpuestos).RoundSQL(NumeroDecimales)
Row("PorcentajeRetIVA") = ClienteRetIVA
Row("PorcentajeRetISR") = ClienteRetISR
Row("PorcentajeIEPS") = DrPS("IEPSPorcentaje")
Row("ImporteIEPS") = (DrPS("IEPSPorcentaje").ToString().ToDecimal * TotalCalculableImpuestos).RoundSQL(NumeroDecimales)
Row("IEPS") = Row("ImporteIEPS")
Row("Descuento") = (Descuento).RoundSQL(NumeroDecimales)
Row("TipoDescuento") = -1
Row("CvePromocionDetalle") = -1
Row("Total") = (Cantidad * PU)
Row("TotalImporte") = (Cantidad * PU).RoundSQL(NumeroDecimales)
'Row("AsientoContableVentas") = DrPS("AsientoContableVentas")
' Row("IdCtaContVentas") = IdCtaContable
' Row("AplicaParaConcepto") = AplicaParaConcepto
Row("SATClaveProdServ") = DrPS("SATClavePS")
Row("SATClaveUM") = DrPS("SATClaveUnidadMedida")
If UsuarioActual.Empresa.TipoContabilidad = 2 AndAlso UsuarioActual.Empresa.UsaAC Then
Row("CvePresupuestoIngreso") = -1
End If
Row("EntregaDirecta") = 0
'Contratos
Row("CveContratoDetalle") = -1
Row("CveVentaDetalle") = -1
Row("CveMovimientoDetallePedido") = -1
Row("CveOrdenCompraDetalle") = -1
Row("CveVentaDetalleRemision") = -1
Row("CveVentaDetalleCotizacion") = -1
Row("CveVentaDetallePedido2") = -1
Row("CuentaPredial") = CuentaPredial
Row("EsCargo") = 0
If Me.DtDetalle.Columns.Contains("CveMarca") Then
Row("CveMarca") = DrPS("CveMarca")
End If
Row("CvePrecioLista") = -1
Row("PrecioLista") = ""
Row("CveActivoFijo") = -1
Row("AFDepreciacion") = 0
Row("AFValorInicial") = 0
Row("NumTurnos") = 0
Me.DtDetalle.Rows.Add(Row)
Return True
End Function
Public Sub CalculaTotales()
Me.SubTotal = Me.DtDetalle.SUMD("Total")
Me.IVA = Me.DtDetalle.SUMD("ImporteIVA")
Me.RetIVA = Me.DtDetalle.SUMD("ImporteRetIVA")
Me.RetISR = Me.DtDetalle.SUMD("ImporteRetISR")
Me.IEPS = Me.DtDetalle.SUMD("ImporteIEPS")
Me.Total = Me.SubTotal + Me.IVA + Me.IEPS - (Me.RetIVA + Me.RetISR)
End Sub
Public Sub PreparaTimbre()
Dim Timbre As New CFDITimbre
Timbre.Comprobante.Version = "4.0"
Timbre.Comprobante.TipoComprobante = If(Me.TipoDocto.Contiene("Ing", "Ant"), "I", If(Me.TipoDocto.Contiene("Egs", "Dev"), "E", ""))
Timbre.Comprobante.Folio = Me.Folio.ToString()
Timbre.Comprobante.Serie = Me.Serie
Timbre.Comprobante.Fecha = Me.FechaCP
Timbre.Comprobante.FormadePago = Me.FormaPagoSAT33
Timbre.Comprobante.CondicionesdePago = Me.FormaPago33
Timbre.Comprobante.MetodoPago = Me.ClaveMetodoPagoSAT
Timbre.Comprobante.SubTotal = Me.SubTotal
Timbre.Comprobante.Descuentos = Me.Descuento
Timbre.Comprobante.Moneda = Me.MonedaSAT
Timbre.Comprobante.TipoCambio = If(Me.CveMoneda = 1, "1", Me.TipoCambio.ToString())
Timbre.Comprobante.Total = Me.Total
Timbre.Comprobante.LugarExpedicion = Me.SubProyecto.CP
If Timbre.Comprobante.LugarExpedicion = "" Then
Dim aa As String = "no se guardo lugar de expedicion"
aa.GuardaLog()
End If
Timbre.Comprobante.Confirmacion = ""
If Me.FacturarSucursal Then
Timbre.Receptor.RFC = Me.ClienteSucursal.RFC
Timbre.Receptor.Nombre = Me.ClienteSucursal.Nombre
Timbre.Receptor.DomicilioFiscalReceptor = Me.ClienteSucursal.CP
Else
Timbre.Receptor.RFC = Me.Cliente.RFC
Timbre.Receptor.Nombre = Me.Cliente.Nombre
Timbre.Receptor.DomicilioFiscalReceptor = Me.Cliente.CP
End If
Timbre.Receptor.RegimenFiscalReceptor = Me.Cliente.CodigoRegimenFiscal
Timbre.Receptor.ResidenciaFiscal = ""
Timbre.Receptor.NumeroRegistroTributario = ""
Timbre.Receptor.UsoCFDI = Me.ClaveUsoCFDI
Dim totSubTotal As Decimal = Me.SubTotal
Dim totIVA As Decimal = Me.IVA
Dim totRetIVA As Decimal = Me.RetIVA
Dim totRetISR As Decimal = Me.RetISR
Dim i As Integer = 1
'detalles
Dim tPS As String = ""
For Each drr As DataRow In Me.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
tPS = tPS.Replace("|", " ")
If tPS.Length >= 1000 Then
Dim tPSRecortado = tPS.Remove(999, tPS.Length - 999)
tPS = tPSRecortado
End If
'condicionante, especial
If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" ' les comentan que no debe de ir la etiqueta de "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.RoundSQL(2),
.Unidad = drr("UM").ToString(),
.ClaveUnidad = drr("SATClaveUM").ToString(),
.ClaveProdServ = drr("SATClaveProdServ").ToString(),
.Noidentificacion = drr("Noidentificacion").ToString(),
.CuentaPredial = drr("CuentaPredial").ToString(),
.ImporteGravaIVAAdicional = drr("ImporteIEPS").ToString().ToDecimal,
.ObjetoImpuesto = drr("CodigoObjetoImpuesto").ToString()}
'verifica suma subtotales
If i = Me.DtDetalle.Rows.Count AndAlso totSubTotal.RoundSQL(2) <> concepto.Importe.RoundSQL(2) AndAlso Math.Abs(totSubTotal.RoundSQL(2) - concepto.Importe.RoundSQL(2)) <= 0.01 Then 'proceso de ajusta de decimales
concepto.Importe = totSubTotal
'concepto.ValorUnitario = totSubTotal / concepto.Cantidad
End If
totSubTotal = totSubTotal - concepto.Importe
'siempre estaremos agregando el iva, auqnue sea en importe cero o tasa cero, para que se emita la factura
' If drr("ImporteIVA").ToString().ToDouble > 0 Then
'si es ingreso amortizado por la totalidad, y arroja el valor total de cero, no debe de impuestos, y si la BASE de calculo es mayor a cero
' si es objimp = 01, significa que no lleva desglose de impuesto, está exento
If concepto.ObjetoImpuesto <> "01" AndAlso Timbre.Comprobante.Total > 0 AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional > 0) Then
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(6), .TasaOCuota = drr("PorcentajeIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString().ToDecimal})
End If
If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteIEPS").ToString().ToDouble > 0 Then
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeIEPS").ToString().ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString().ToDecimal})
End If
If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetIVA").ToString().ToDouble > 0 Then 'si hay retenciones
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetIVA").ToString().ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString().ToDecimal})
End If
If concepto.ObjetoImpuesto <> "01" AndAlso drr("ImporteRetISR").ToString().ToDouble > 0 Then 'retención de ISR
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = (concepto.Importe - concepto.Descuento).RoundSQL(6), .TasaOCuota = drr("PorcentajeRetISR").ToString().ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString().ToDecimal})
End If
'si el codigo objeto impuesto es 02 y no tiene desglose de impuestos por el descuento, debe asignar el valor 04 - Si objeto de impuesto y no causa impuesto
If concepto.Impuestos.Count = 0 AndAlso concepto.ObjetoImpuesto = "02" AndAlso (concepto.Importe - concepto.Descuento + concepto.ImporteGravaIVAAdicional).RoundSQL(2) = 0.00D Then
concepto.ObjetoImpuesto = "04"
End If
Timbre.Conceptos.Add(concepto)
i += 1
Next
Dim AplicaComercioExteriorSubProyecto As Boolean = True
Timbre.Complementos.ComercioExterior11.AplicaComercioExteriorSubProyecto = False
Me.FemsaFactura = New Modelos.FemsaFactura
Me.Timbre = Timbre
End Sub
Private Function DescargarFactura(CveVenta As Integer, CveEmpresa As Integer, Optional GetBytes As Boolean = True) As Byte()
Dim Url = New Uri(String.Format("http://{0}:{1}/Compras/PopUpVerFactura.aspx?P={2}", HttpContext.Current.Request.Url.Host, HttpContext.Current.Request.Url.Port, Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", CveVenta))))
Dim File As Byte() = Nothing
@@ -1534,6 +2140,79 @@ Namespace Modelos
End If
End Sub
Private Function GuardarCartaPorte(ByRef ObjFactura As Modelos.Factura, ByRef ObjGral As ClsGenerales, ByRef ObjVentas As ClsVentas) As Integer
Dim ErrorProceso As Boolean = False
Dim CveTimbre As Integer = -1
Try
Dim CveDireccionOrigen As Integer = -1
Dim CveDireccionDestino As Integer = -1
Dim Fechallegada As DateTime = MinFecha
Dim FechaEntrega As DateTime = MinFecha
Dim Distancia As Integer = 0
Dim CveChofer As Integer = -1
Dim CveCamion As Integer = -1
Dim CveConfigAutoTransporte As Integer = -1
Dim CveCamionRemolque1 As Integer = -1
Dim CveCamionRemolque2 As Integer = -1
If ObjVentas.GetFacturacionAcarreos(ObjFactura.CveFacturacionAcarreo, -1, -1, -1, UsuarioActual.CveEmpresa) Then
Dim Row = ObjVentas.DtResultados.Rows(0)
If Row IsNot Nothing Then
CveDireccionOrigen = Row("CveDireccionOrigen").ToString().ToEntero()
CveDireccionDestino = Row("CveDireccionDestino").ToString().ToEntero()
Fechallegada = Row("Fechallegada").ToString().ToDateTime()
FechaEntrega = Row("FechaSalida").ToString().ToDateTime()
Distancia = Row("Distancia").ToString().ToEntero()
CveChofer = Row("CveChofer").ToString().ToEntero()
CveCamion = Row("CveCamion").ToString().ToEntero()
CveConfigAutoTransporte = Row("CveConfigAutoTransporte").ToString().ToEntero()
CveCamionRemolque1 = Row("CveCamionRemolque1").ToString().ToEntero()
CveCamionRemolque2 = Row("CveCamionRemolque2").ToString().ToEntero()
End If
End If
If Not (CveDireccionOrigen > 0 And CveDireccionDestino > 0) Then
ErrorProceso = True
Return -1
End If
Dim CveEntregaAlmacen As Integer = ObjGral.AddInvEntregaAlmacenRuta(ObjFactura.CveSubProyecto, CveDireccionOrigen, CveDireccionDestino, -1, CveChofer, CveCamion, FechaEntrega, Fechallegada, "I", "-1", "-1", Fechallegada, 1, 1, Distancia,
CveConfigAutoTransporte:=CveConfigAutoTransporte, CveCamionRemolque1:=CveCamionRemolque1, CveCamionRemolque2:=CveCamionRemolque2)
If CveEntregaAlmacen > 0 Then
For Each RowPS As DataRow In ObjFactura.DtMercancias.Rows
If Not ObjGral.AddEntregaAlmacenRutaDetalle(CveEntregaAlmacen, RowPS("CvePS").ToString().ToEntero, RowPS("Cantidad").ToString().ToDecimal, RowPS("CveUnidadMedida").ToString().ToEntero, UsuarioActual.CveUsuario) Then
ErrorProceso = True
Exit For
End If
Next
CveTimbre = ObjGral.AddGralTimbre("Ing", ObjFactura.CveSubProyecto, ObjFactura.Fecha, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, CveEntregaAlmacen:=CveEntregaAlmacen, AplicaCP:=True, CveVenta:=ObjFactura.CveVenta)
If Not CveTimbre > 0 Then
ErrorProceso = True
End If
Else
ErrorProceso = True
End If
Catch ex As Exception
ErrorProceso = True
OnError("Ocurrió un error al guardar los datos de la carta porte", ex)
End Try
If Not ErrorProceso Then
Return CveTimbre
Else
Return -1
End If
End Function
Public Sub GuardarVenta(ByRef factura As Modelos.Factura, ByRef ObjVentas As ClsVentas, ByRef ObjConta As ClsContabilidad, ByRef ObjInventario As ClsInventarios, ByRef ObjContr As ClsContratos, ByRef TmpDTDetalle As DataTable, CveNCaVincular As Integer, ByRef objContPaqi As ClsContPAQi, Optional ByRef ObjBancos As ClsBancos = Nothing, Optional ByRef ObjOS As ClsOS = Nothing, ByRef Optional ObjEventos As ClsOIEventos = Nothing, ByRef Optional ObjCGame As ClsCGame = Nothing, ByRef Optional ObjCliente As ClsClientes = Nothing, Optional EsNotaCredito As Boolean = False, Optional ObjAcum As ClsAcumuladores = Nothing, ByRef Optional Resp As MMensajeFactura = Nothing, Optional Modulo As String = "Modelos/GuardarVentaM")
Dim Msgok As New StringBuilder
@@ -6774,6 +7453,8 @@ Namespace Modelos
Public Property DevPed As Integer = -1
Public Property CveFactura As Integer
Public Property CveCicloComercial As Integer
Public Property CveFacturacionAcarreo As Integer = -1
Public Property EmitirCartaPorte As Boolean = False
Public Property TipoDoctoDevolucion As String
Public Property SeGuardoPrePoliza As Boolean
Public Property DirectorioServidor As String

View File

@@ -0,0 +1,181 @@
<%@ Page Title="" Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="FacturacionAcarreos.aspx.vb" Inherits="Ventas_FacturacionAcarreos" %>
<asp:Content ID="Content1" ContentPlaceHolderID="CP" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Css" runat="Server">
</asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="E" runat="Server">
Facturación masiva de acarreos
</asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="HB" runat="Server">
</asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="H" runat="Server">
<li>
<asp:HyperLink ID="HlAgregarExcel" NavigateUrl="#" data-toggle="modal" data-target="#DivCargaExcel" runat="server"><i class='fa fa-server'></i> Importar listado</asp:HyperLink>
</li>
<li>
<asp:LinkButton ID="LnkFacturarSeleccionados" runat="server" OnClick="LnkFacturarSeleccionados_Click"><i class='fa fa-upload' style="color:green"></i> Facturar seleccionados</asp:LinkButton>
</li>
<li>
<asp:LinkButton ID="LnkEliminarSeleccionados" runat="server" OnClick="LnkEliminarSeleccionados_Click"><i class='fa fa-trash' style="color:red"></i> Eliminar seleccionados</asp:LinkButton>
</li>
</asp:Content>
<asp:Content ID="Content6" ContentPlaceHolderID="HA" runat="Server">
</asp:Content>
<asp:Content ID="Content7" ContentPlaceHolderID="C" runat="Server">
<asp:UpdatePanel ID="UPFiltros" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="portlet solid grey-cascade portlet-filter" style="" id="DivFiltros">
<div class="portlet-title portlet-filterT smalltitle " style="">
<div class="tools">
<asp:Button ID="BtnConsultar" runat="server" OnClick="BtnConsultar_Click" Text="Consultar" class="btn btn-primary" />
<a href="javascript:;" class="expand"></a>
</div>
<div class="titlefiltros caption">
<div class="row">
<div class="col-md-1 truncate">Estatus:</div>
<div class="col-md-2 ">
<asp:DropDownList runat="server" ID="DdlEstatus" CssClass="select2me" Width="100%">
<asp:ListItem Text="Todos" Value="-1"></asp:ListItem>
<asp:ListItem Text="Pendiente" Value="1" Selected="True"></asp:ListItem>
<asp:ListItem Text="No timbrado" Value="2"></asp:ListItem>
<asp:ListItem Text="Facturado y Timbrado" Value="3"></asp:ListItem>
</asp:DropDownList>
</div>
<div class="col-md-1 truncate">Cliente:</div>
<div class="col-md-2 ">
<ADS:Dropdownlost CssClassDdl="select2me" ID="DdlClientes" Width="100%" data-metodo="getcliente" UsaWebService="true" runat="server" DataTextField="NombreComercial" DataValueField="CveCliente" CssStyle="width: 100%;"></ADS:Dropdownlost>
</div>
<%--<div class="col-md-1 truncate">Sucursal:</div>
<div class="col-md-2 ">
<asp:DropDownList runat="server" ID="DdlSucursal" CssClass="select2me" Width="100%">
<asp:ListItem Text="Todos" Value="-1"></asp:ListItem>
<asp:ListItem Text="Pendiente" Value="1" Selected="True"></asp:ListItem>
<asp:ListItem Text="Facturado" Value="2"></asp:ListItem>
<asp:ListItem Text="Facturado y Timbrado" Value="3"></asp:ListItem>
</asp:DropDownList>
</div>--%>
</div>
</div>
</div>
<div class="portlet-body" style="display: none;">
<div class="row">
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UPDatos" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="portlet light smmallpadding traspasorow bordered">
<div class="portlet-title">
<div class="caption font-green">
<span class="caption-subject bold uppercase" style="line-height: 1;">Solicitudes de facturación de acarreos
</span>
</div>
<div class="actions">
<div class="btn-group">
<div class="row" style="margin-left: 0px; text-align: right" align="left">
<div style="margin-right: 15px">
<input type="text" id="TxtBusqueda1" class="form-control input-sm" onkeyup="<%= String.Format("FiltrarTabla('TxtBusqueda1','{0}')", GvDatos.ClientID) %>" style="display: inline-block; margin-right: -20px; width: 150px;" />
<a href="javascript:;" onclick="<%= String.Format("FiltrarTabla('TxtBusqueda','{0}')", GvDatos.ClientID) %>" style="margin-top: -3px;" class="btn btn-circle btn-sm label-info"><i class="icon-magnifier"></i></a>
</div>
</div>
</div>
</div>
</div>
<div class="portlet-body rowpadding">
<div class="row">
<div class="col-md-12">
<asp:GridView ID="GvDatos" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron solicitudes de facturación" OnRowDataBound="GvDatos_RowDataBound"
DataKeyNames="CveFacturacionAcarreo,CvePSGeneral,Cantidad,CveCliente,CveSubProyecto,CvePSRelacionado" CssClass="table table-striped table-advance table-hover Widthall ScrollAD mysmallbtn" data-sort="true" GridLines="None" Width="99%">
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="center" ItemStyle-Width="20px" HeaderStyle-Width="20px" ItemStyle-CssClass="NoClick">
<HeaderTemplate>
<asp:CheckBox runat="server" ID="chkSelectAll" CssClass="ChkAllClick" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="chk" CssClass="ChkAllEvt" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Cliente" DataField="Nombre" ItemStyle-Width="200px" />
<asp:BoundField HeaderText="Servicio" DataField="Servicio" ItemStyle-Width="15%" />
<asp:BoundField HeaderText="Mercancia" DataField="Mercancia" ItemStyle-Width="15%" />
<asp:BoundField HeaderText="Fecha Salida" DataField="FechaSalida" DataFormatString="{0:dd/MM/yyyy}" ItemStyle-Width="80px" />
<asp:BoundField HeaderText="Fecha Llegada" DataField="FechaLlegada" DataFormatString="{0:dd/MM/yyyy}" ItemStyle-Width="80px" />
<asp:BoundField HeaderText="Cant." DataField="Cantidad" DataFormatString="{0:N2}" ItemStyle-HorizontalAlign="Right" />
<asp:BoundField HeaderText="Origen" DataField="DireccionOrigen" ItemStyle-Width="200px" />
<asp:BoundField HeaderText="Destino" DataField="DireccionDestino" ItemStyle-Width="200px" />
<asp:HyperLinkField HeaderText="Serie Folio" DataTextField="SerieFolio" DataNavigateUrlFields="CveVenta" ItemStyle-Width="100px" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveVenta={0}" />
<asp:BoundField HeaderText="Folio Fiscal" DataField="FolioFiscal" ItemStyle-Width="265px" />
</Columns>
<RowStyle CssClass="Texto" />
<HeaderStyle CssClass="Titulos" />
</asp:GridView>
</div>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<%--CARGA EXCEL--%>
<div id="DivCargaExcel" class="modal ADS fade" role="dialog">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header ">
<button type="button" class="close" data-dismiss="modal">&times;</button>
<h4 class="modal-title">Agregar Excel</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
<h3>Arraste o haga click para subir el archivo Excel</h3>
</div>
</div>
<div class="row">
<div class="col-md-11" style="margin-left: 30px; margin-right: 30px;">
<asp:TextBox ID="TxtExcel" CssClass="ADSdropzone hidden" Text="" data-maxFile="1" runat="server"></asp:TextBox>
</div>
</div>
</div>
<div class="modal-footer">
<div class="row">
<div class="col-md-2" style="text-align: left">
<asp:UpdatePanel ID="UpDescargar" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Button ID="BtnDescargarFormato" runat="server" CssClass="btn btn-warning" Text="Descargar Formato" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="BtnDescargarFormato" />
</Triggers>
</asp:UpdatePanel>
</div>
<div class="col-md-10" style="text-align: right">
<asp:Button ID="BtnCargaExcel" runat="server" CssClass="btn btn-success" Text="Aceptar" ValidationGroup="GrpCargarExcel"></asp:Button>
<button type="button" class="btn btn-danger" data-dismiss="modal">Cancelar</button>
</div>
</div>
</div>
</div>
</div>
</div>
</asp:Content>
<asp:Content ID="Content8" ContentPlaceHolderID="JS" runat="Server">
<script type="text/javascript">
function loadpage() {
$('body').on('click', '.ChkAllClick input', function () { $(".ChkAllEvt input").not(this).prop('checked', $('.ChkAllClick input').is(':checked')); });
}
jQuery(document).ready(function () {
loadpage();
Sys.Application.add_load(function (s, e) {
loadpage();
});
});
</script>
</asp:Content>

View File

@@ -0,0 +1,350 @@

Option Explicit On
Option Strict On
Imports System.Data
Imports System.IO
Imports Extensiones
Imports GemBox.Spreadsheet
Partial Class Ventas_FacturacionAcarreos
Inherits ClsPaginas
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
CargaDatos()
End If
End Sub
Private Sub CargaDatos()
Dim CveCliente As Integer = -1
If DdlClientes.SelectedValue.ToEntero() > 0 Then
CveCliente = DdlClientes.SelectedValue.ToEntero()
End If
Using ObjVentas As New ClsVentas
If ObjVentas.GetFacturacionAcarreos(-1, CveCliente, -1, DdlEstatus.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then
GvDatos.DataSource = ObjVentas.DtResultados
End If
End Using
GvDatos.DataBind()
UPDatos.Update()
End Sub
#Region "C A R G A R E X C E L "
Private Sub BtnDescargarFormato_Click(sender As Object, e As EventArgs) Handles BtnDescargarFormato.Click
Dim DtExcel As DataTable = New DataTable("Facturas")
With DtExcel.Columns
.Add(New DataColumn("Sucursal", GetType(String)))
.Add(New DataColumn("RFC", GetType(String)))
.Add(New DataColumn("Cantidad", GetType(Decimal)))
.Add(New DataColumn("ProductoGeneral", GetType(String)))
.Add(New DataColumn("Origen", GetType(String)))
.Add(New DataColumn("Destino", GetType(String)))
.Add(New DataColumn("FechaSalida", GetType(DateTime)))
.Add(New DataColumn("FechaLlegada", GetType(DateTime)))
.Add(New DataColumn("Unidad", GetType(String)))
.Add(New DataColumn("Chofer", GetType(String)))
.Add(New DataColumn("Configuración", GetType(String)))
.Add(New DataColumn("Remolque1", GetType(String)))
.Add(New DataColumn("Remolque2", GetType(String)))
.Add(New DataColumn("Distancia", GetType(Decimal)))
End With
SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet)
Dim FileExcel As New ExcelFile()
Dim worksheet = FileExcel.Worksheets.Add(DtExcel.TableName)
worksheet.InsertDataTable(DtExcel, New InsertDataTableOptions() With
{
.ColumnHeaders = True,
.StartRow = 0,
.StartColumn = 0
})
worksheet.Rows(0).Style.FillPattern.SetPattern(FillPatternStyle.Solid, SpreadsheetColor.FromArgb(75, 119, 190), SpreadsheetColor.FromArgb(255, 255, 255))
worksheet.Rows(0).Style.Font.Color = SpreadsheetColor.FromArgb(255, 255, 255)
Dim columnCount = worksheet.CalculateMaxUsedColumns()
For i = 0 To columnCount
worksheet.Columns(i).AutoFit(1, worksheet.Rows(0), worksheet.Rows(worksheet.Rows.Count - 1))
Next
FileExcel.Save(Response, "FormatoFacturas.xlsx", SaveOptions.XlsxDefault)
End Sub
Private Sub BtnCargaExcel_Click(sender As Object, e As EventArgs) Handles BtnCargaExcel.Click
If TxtExcel.getfiles().Archivos.Count > 0 Then
Dim file As Archivo = TxtExcel.getfiles().Archivos(0)
Dim Directorio As String = AppDomain.CurrentDomain.BaseDirectory & file.path
CargarArchivo(Directorio, file.filename)
Else
Alert("No existe el archivo. Favor de subir un archivo excel a la plataforma.", TipoMensaje.MsgError)
End If
End Sub
Private Sub CargarArchivo(Ruta As String, FileName As String)
SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet)
Dim dt As DataTable = Nothing
Dim ErrorArchivo = False
Try
dt = ReadExcelFile(Ruta + FileName, True)
Catch ex As Exception
ErrorArchivo = True
OnError("Ocurrio un error al leer el archivo <br/>" & ex.Message, ex)
End Try
If Not ErrorArchivo AndAlso dt IsNot Nothing Then
dt.TableName = "Datos"
Dim MsgFacturacionAcarreos As New StringBuilder()
Dim RowsCargados As Integer = 0
Dim RowsNoCargados As Integer = 0
Dim ObjVentas As New ClsVentas
ObjVentas.IniciaTransacSQL()
Dim TieneError As Boolean = False
Try
Dim DtPS As DataTable = GlobalDTPSSimplificado(UsuarioActual.CveEmpresa)
For Each row As DataRow In dt.Rows
Dim msg As String = ObjVentas.AddFacturacionAcarreos(row("Sucursal").ToString(), row("RFC").ToString(), row("Cantidad").ToString().ToDecimal(), row("ProductoGeneral").ToString(),
row("Origen").ToString(), row("Destino").ToString(), row("FechaSalida").ToString().ToDateTime(), row("FechaLlegada").ToString().ToDateTime(),
row("Unidad").ToString(), row("Chofer").ToString(), row("Configuración").ToString(), row("Remolque1").ToString(), row("Remolque2").ToString(),
row("Distancia").ToString().ToDecimal(), UsuarioActual.CveEmpresa)
If msg = "Correcto" Then
RowsCargados += 1
Else
TieneError = True
MsgFacturacionAcarreos.AppendFormat("{0}", msg)
RowsNoCargados += 1
Exit For
End If
Next
Catch ex As Exception
OnError("Ocurrió un error al cargar los precios.", ex)
Finally
Dim MensajeFinal As New StringBuilder()
If RowsNoCargados = 0 AndAlso RowsCargados > 0 Then
MensajeFinal.Append("Los datos se cargaron correctamente. <br/><br/>")
End If
If RowsNoCargados > 0 Then
MensajeFinal.Append(MsgFacturacionAcarreos.ToString())
End If
If TieneError Then
ObjVentas.RollBack()
Alert(MensajeFinal.ToString(), TipoMensaje.MsgError)
Else
ObjVentas.Commit()
Alert(MensajeFinal.ToString())
End If
ObjVentas.Dispose()
End Try
CargaDatos()
End If
End Sub
Private Function ReadExcelFile(ByVal flatFilePath As String, ByVal firstRowHasHeaders As Boolean) As DataTable
SpreadsheetInfo.SetLicense(ModExtensiones.SerialGemBoxSpreadsheet)
Dim excelFile As ExcelFile = ExcelFile.Load(flatFilePath)
Dim unnamed As Integer = 0
Dim cols As Integer
Dim columns As String()
Dim curRow As Integer = 0
Dim curCol As Integer = 0
Dim dataTable As DataTable = New DataTable()
Dim worksheet As ExcelWorksheet = excelFile.Worksheets(0)
For cols = 0 To worksheet.Rows(0).AllocatedCells.Count - 1
If firstRowHasHeaders Then
If worksheet.Rows(0).Cells(cols).Value IsNot Nothing Then
dataTable.Columns.Add(worksheet.Rows(0).Cells(cols).Value.ToString())
Else
dataTable.Columns.Add("Unnamed Column " & (System.Threading.Interlocked.Increment(unnamed)))
End If
curRow = 1
Else
dataTable.Columns.Add("Column " & (cols + 1))
End If
Next
While curRow < worksheet.Rows.Count
columns = New String(cols - 1) {}
For curCol = 0 To cols - 1
If worksheet.Rows(curRow).Cells(curCol).Value Is Nothing Then
columns(curCol) = ""
Else
columns(curCol) = worksheet.Rows(curRow).Cells(curCol).Value.ToString()
End If
Next
dataTable.Rows.Add(columns)
curRow += 1
End While
Return dataTable
End Function
#End Region
Protected Sub GvDatos_RowDataBound(sender As Object, e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.DBCampo("SerieFolio").Length > 0 Then
e.Row.FCCheckBox("chk").Visible = False
End If
End If
End Sub
Protected Sub LnkFacturarSeleccionados_Click(sender As Object, e As EventArgs)
If GvDatos.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("chk").Checked) <= 0 Then
Alert($"Debe seleccionar un acarreo para facturar", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim msg As New StringBuilder()
Dim NumFacturasGeneradas As Integer = 0
Dim NumFacturasTimbradas As Integer = 0
For Each GvRow As GridViewRow In GvDatos.Rows
If GvRow.RowType = DataControlRowType.DataRow Then
If GvRow.FCCheckBox("chk").Checked Then
Dim CveCliente As Integer = GvRow.DataKey("CveCliente").ToEntero()
Dim CveSubProyecto As Integer = GvRow.DataKey("CveSubProyecto").ToEntero()
Dim CveMoneda As Integer = 1
Dim CvePS As Integer = GvRow.DataKey("CvePSGeneral").ToEntero()
Dim Cantidad As Decimal = GvRow.DataKey("Cantidad").ToEntero()
Dim PU As Decimal = -1
Dim Descuento As Decimal = 0
Dim Obs As String = ""
Dim CvePSMercancia As Integer = GvRow.DataKey("CvePSRelacionado").ToEntero()
Dim ObjFactura = Modelos.Factura.CrearVentaNueva(UsuarioActual, CveSubProyecto, CveCliente, CveMoneda)
ObjFactura.EmitirCartaPorte = True
ObjFactura.CveFacturacionAcarreo = GvRow.DataKey("CveFacturacionAcarreo").ToEntero()
ObjFactura.AgregarPS(CvePS, Cantidad, PU, Descuento, Obs)
ObjFactura.DtMercancias = CreaDTMercancias(CvePSMercancia, Cantidad)
ObjFactura.CalculaTotales()
ObjFactura.PreparaTimbre()
Dim resp = ObjFactura.EmitirFactura(Timbrar:=True, Modulo:="FacturacionAcarreos")
For Each m As String In resp.Mensajes
msg.AppendFormat("{0}<br/>", m)
Next
If resp.TieneError AndAlso resp.Mensajes.Count = 0 Then
msg.Append("Ocurrió un error al generar la factura.<br/>")
End If
If resp.CveVenta > 0 AndAlso Not resp.TieneError Then
NumFacturasGeneradas += 1
If resp.SeTimbro Then
NumFacturasTimbradas += 1
End If
End If
End If
End If
Next
If NumFacturasGeneradas > 0 Then
Alert($"Se generaron {NumFacturasGeneradas} y se timbraron {NumFacturasTimbradas} facturas. <br/>" + msg.ToString(), TipoMensaje.MsgInformacion)
Else
Alert($"No se pudieron generar facturas. <br/>" + msg.ToString(), TipoMensaje.MsgError)
End If
CargaDatos()
End Sub
Protected Sub LnkEliminarSeleccionados_Click(sender As Object, e As EventArgs)
If GvDatos.Rows.Cast(Of GridViewRow)().Count(Function(gvr) gvr.FCCheckBox("chk").Checked) <= 0 Then
Alert($"Debe seleccionar un acarreo para eliminar", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim msg As New StringBuilder()
Dim TieneError As Boolean = False
Dim ObjVentas As New ClsVentas
ObjVentas.IniciaTransacSQL()
Try
For Each GvRow As GridViewRow In GvDatos.Rows
If GvRow.RowType = DataControlRowType.DataRow Then
If GvRow.FCCheckBox("chk").Checked Then
If Not ObjVentas.RemoveFacturacionAcarreo(GvRow.DataKey("CveFacturacionAcarreo").ToEntero(), UsuarioActual.CveEmpresa) Then
TieneError = True
Exit For
End If
End If
End If
Next
Catch ex As Exception
TieneError = True
End Try
If TieneError Then
ObjVentas.RollBack()
Alert("Ocurrió un error al eliminar los registros.", TipoMensaje.MsgError)
Else
ObjVentas.Commit()
Alert("Los registros se eliminaron correctamente.", TipoMensaje.MsgInformacion)
End If
ObjVentas.Dispose()
CargaDatos()
End Sub
Private Function CreaDTMercancias(CvePS As Integer, Cantidad As Decimal) As DataTable
Dim DtMercancias = New DataTable()
DtMercancias.Columns.Add(New DataColumn("Consec", GetType(Integer)))
DtMercancias.Columns.Add(New DataColumn("Cantidad", GetType(Decimal)))
DtMercancias.Columns.Add(New DataColumn("CvePS", GetType(Integer)))
DtMercancias.Columns.Add(New DataColumn("CveUnidadMedida", GetType(Integer)))
DtMercancias.Columns.Add(New DataColumn("CodigoPS", GetType(String)))
Dim DrPS As DataRow = GlobalDTPSSimplificado(CveEmpresa:=UsuarioActual.CveEmpresa, CvePS:=CvePS).FiltroPrimero("")
If DrPS Is Nothing Then
Alert("No se encontró la mercancía", TipoMensaje.MsgAdvertencia)
Return Nothing
End If
Dim NewRow As DataRow = DtMercancias.NewRow
NewRow("Consec") = DtMercancias.MAX("Consec").ToEntero() + 1
NewRow("Cantidad") = Cantidad
NewRow("CvePS") = DrPS("CvePS")
NewRow("CveUnidadMedida") = DrPS("CveUnidadMedida")
NewRow("CodigoPS") = DrPS("PSCodigo")
DtMercancias.Rows.Add(NewRow)
Return DtMercancias
End Function
Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs)
CargaDatos()
End Sub
End Class

View File

@@ -365,11 +365,15 @@ Partial Class ProductosyServicios
divPrecio.Visible = UsuarioActual.Empresa.Funcionalidad(404) = "" ' si tiene lista de precio, se oculta el precio por ps
If UsuarioActual.CveEmpresa = 1 Then
divPrecio.Visible = True
End If
If UsuarioActual.Empresa.Funcionalidad(713) = "1" Then '' empresa deduce IEPS
divIEPS.Visible = True
End If
If UsuarioActual.CveEmpresa = 13 Then
If UsuarioActual.CveEmpresa.Contiene(1, 13) Then
DivPSAdicionalVigencia.Visible = True
LtlPSAdicionalVigencia.Text = "Producto Relacionado:"
CargaPSAdicionalesVigencias()