Facturacion masiva de acarreos
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
181
Ventas/FacturacionAcarreos.aspx
Normal file
181
Ventas/FacturacionAcarreos.aspx
Normal 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">×</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>
|
||||
|
||||
350
Ventas/FacturacionAcarreos.aspx.vb
Normal file
350
Ventas/FacturacionAcarreos.aspx.vb
Normal 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
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user