706 lines
32 KiB
VB.net
706 lines
32 KiB
VB.net
Option Strict On
|
|
Imports Extensiones
|
|
Imports System.Data
|
|
Imports System.IO
|
|
Partial Class Contratos_FacturacionMasiva
|
|
Inherits ClsPaginas
|
|
|
|
#Region "Propiedades"
|
|
Private ReadOnly Property SeGuardoPrePoliza As Boolean
|
|
Get
|
|
Return CBool(ViewState("SeGuardoPrePoliza"))
|
|
End Get
|
|
End Property
|
|
Private Property DTCicloComercial As DataTable
|
|
Get
|
|
Return CType(ViewState("DTCicloComercial"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("DTCicloComercial") = value
|
|
End Set
|
|
End Property
|
|
Private Property FolioVigentes As Boolean
|
|
Get
|
|
Return CType(ViewState("FolioVigentes"), Boolean)
|
|
End Get
|
|
Set(value As Boolean)
|
|
ViewState("FolioVigentes") = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Property Mensaje As String
|
|
Get
|
|
Return CType(ViewState("Mensaje"), String)
|
|
End Get
|
|
Set(value As String)
|
|
ViewState("Mensaje") = value
|
|
End Set
|
|
End Property
|
|
Private Property ErrorList As List(Of String)
|
|
Get
|
|
Return CType(ViewState("ErrorList"), List(Of String))
|
|
End Get
|
|
Set(value As List(Of String))
|
|
ViewState("ErrorList") = value
|
|
End Set
|
|
End Property
|
|
Private Property DTDetalle As DataTable
|
|
Get
|
|
Return CType(ViewState("DTDetalle"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("DTDetalle") = value
|
|
End Set
|
|
End Property
|
|
Private Property TmpDT As DataTable
|
|
Get
|
|
Return CType(ViewState("TmpDT"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("TmpDT") = value
|
|
End Set
|
|
End Property
|
|
Private Property MensajeAlert As StringBuilder
|
|
Get
|
|
Return CType(ViewState("MensajeAlert"), StringBuilder)
|
|
End Get
|
|
Set(value As StringBuilder)
|
|
ViewState("MensajeAlert") = value
|
|
End Set
|
|
End Property
|
|
Private Property ObjFactura As Modelos.Factura
|
|
Get
|
|
Return CType(ViewState("ObjFactura"), Modelos.Factura)
|
|
End Get
|
|
Set(value As Modelos.Factura)
|
|
ViewState("ObjFactura") = value
|
|
End Set
|
|
End Property
|
|
Private Property CveCicloComercial As Integer
|
|
Get
|
|
Return ViewState("CveCicloComercial").ToString.ToEntero
|
|
End Get
|
|
Set(value As Integer)
|
|
ViewState("CveCicloComercial") = value
|
|
End Set
|
|
End Property
|
|
|
|
|
|
#End Region
|
|
|
|
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
|
|
If Not IsPostBack Then
|
|
FolioVigentes = False
|
|
CargaCombos()
|
|
Dim FechaRef = NowADS()
|
|
txtFechaI.Text = $"01/{FechaRef.Month}/{FechaRef.Year}"
|
|
txtFechaF.Text = txtFechaI.Text.ToDate().AddMonths(1).ToString("dd/MM/yyyy")
|
|
CargaDatos(-1, -1)
|
|
CreaDTVentas()
|
|
Mensaje = ""
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CargaCombos()
|
|
DdlCliente.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa)
|
|
DdlCliente.DataBind()
|
|
DdlContrato.DataSource = GlobalDTContratos(UsuarioActual.CveEmpresa)
|
|
DdlContrato.DataBind()
|
|
DdlSucursal.DataSource = GlobalDTSubProyectos(UsuarioActual.CveEmpresa)
|
|
DdlSucursal.DataBind()
|
|
End Sub
|
|
Private Sub CargaDatos(CveContrato As Integer, CveCliente As Integer)
|
|
ValidaFolio()
|
|
|
|
Dim ObjContratos As New ClsContratos
|
|
Try
|
|
If ObjContratos.CicloComercialGet(CveContrato, CveCliente, -1, UsuarioActual.CveEmpresa, txtFechaI.Text.ToDateTime, txtFechaF.Text.ToDateTime, DdlSucursal.SelectedValue.ToEntero) Then
|
|
DTCicloComercial = ObjContratos.DtResultados.Clone
|
|
|
|
For Each Row As DataRow In ObjContratos.DtResultados().FiltraParametros($"FueFacturado = 0").Rows
|
|
|
|
If Row("Observaciones").ToString().Contains("{DIA}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{DIA}", NowADS().Day.ToString())
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{MES}") Then
|
|
Dim fecha As DateTime = NowADS()
|
|
Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat
|
|
Dim nombreMes = formatoFecha.GetMonthName(fecha.Month).ToUpper()
|
|
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{MES}", nombreMes)
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{MESANTERIOR}") Then
|
|
Dim fecha As DateTime = NowADS().AddMonths(-1)
|
|
Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat
|
|
Dim nombreMes = formatoFecha.GetMonthName(fecha.Month).ToUpper()
|
|
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{MESANTERIOR}", nombreMes)
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{AÑO}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{AÑO}", NowADS().Year.ToString())
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{TC}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{TC}", GlobalTipoCambio(NowADS()).FormatoNumero)
|
|
End If
|
|
|
|
DTCicloComercial.Rows.Add(Row.ItemArray)
|
|
Next
|
|
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
DTCicloComercial = Nothing
|
|
OnError("Ocurrió un error al obtener las facturas a realizar", ex)
|
|
End Try
|
|
ObjContratos.Dispose()
|
|
|
|
GvCiclosComerciales.DataSource = DTCicloComercial
|
|
GvCiclosComerciales.DataBind()
|
|
UpGv.Update()
|
|
End Sub
|
|
|
|
Private Sub ValidaFolio()
|
|
Dim ObjFolios As New ClsGralFolios
|
|
If ObjFolios.GetFolios("Ing", UsuarioActual.CveEmpresa) Then
|
|
If ObjFolios.DtResultados.Rows.Count > 0 Then
|
|
FolioVigentes = True
|
|
End If
|
|
End If
|
|
|
|
ObjFolios.Dispose()
|
|
End Sub
|
|
Protected Sub GvCiclosComerciales_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvCiclosComerciales.RowDataBound
|
|
If e.Row.RowType = DataControlRowType.DataRow Then
|
|
'' Pendiente de aplicar validacion
|
|
If Not FolioVigentes Then
|
|
e.Row.FCCheckBox("chkDis").Enabled = False
|
|
e.Row.FCCheckBox("chkDis").ToolTip = "La sucursal vinculada con este contrato no tiene folios"
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Protected Sub btnConsultar_Click(sender As Object, e As EventArgs) Handles BtnCargaAsignados.Click
|
|
Dim CveContrato As Integer = If(DdlContrato.SelectedValue.ToEntero <= 0, -1, DdlContrato.SelectedValue.ToEntero)
|
|
Dim CveCliente As Integer = If(DdlCliente.SelectedValue.ToEntero <= 0, -1, DdlCliente.SelectedValue.ToEntero)
|
|
|
|
CargaDatos(CveContrato, CveCliente)
|
|
RegistraScript("$('#ex').removeClass('expand');$('#ex').addClass('collapse');$('.portlet-body').css('display', '');")
|
|
End Sub
|
|
|
|
Protected Sub ImgFacturarTodos_Click(sender As Object, e As EventArgs) Handles ImgFacturarTodos.Click
|
|
EjecutarFacturacion(FacturarTodos:=True)
|
|
Dim CveContrato As Integer = If(DdlContrato.SelectedValue.ToEntero <= 0, -1, DdlContrato.SelectedValue.ToEntero)
|
|
Dim CveCliente As Integer = If(DdlCliente.SelectedValue.ToEntero <= 0, -1, DdlCliente.SelectedValue.ToEntero)
|
|
|
|
CargaDatos(CveContrato, CveCliente)
|
|
End Sub
|
|
|
|
Protected Sub btnFacturarAqui_Click(sender As Object, e As EventArgs) Handles BtnFacturar.Click
|
|
EjecutarFacturacion(FacturarTodos:=False)
|
|
|
|
Dim CveContrato As Integer = If(DdlContrato.SelectedValue.ToEntero <= 0, -1, DdlContrato.SelectedValue.ToEntero)
|
|
Dim CveCliente As Integer = If(DdlCliente.SelectedValue.ToEntero <= 0, -1, DdlCliente.SelectedValue.ToEntero)
|
|
|
|
CargaDatos(CveContrato, CveCliente)
|
|
RegistraScript("$('#divAgregar').modal('hide')")
|
|
UpBodyEstatus.Update()
|
|
End Sub
|
|
|
|
Private Sub EjecutarFacturacion(Optional FacturarTodos As Boolean = False)
|
|
Dim FacturadoCorrecto As Boolean = True
|
|
Dim sb As New StringBuilder()
|
|
|
|
For Each row As GridViewRow In GvCiclosComerciales.Rows
|
|
If FacturarTodos OrElse row.FCCheckBox("chkDis").Checked Then
|
|
|
|
Dim Resp As MMensajeFacturacion = EmitirImprimir(row.DataKey("CveCicloComercial").ToString.ToEntero)
|
|
|
|
sb.AppendFormat("{0}</br></br>", Resp.Mensaje)
|
|
|
|
If Not FacturadoCorrecto Then
|
|
If Mensaje = "" Then
|
|
Alert("Ocurrió un error al facturar masivamente, por favor contacte a soporte técnico", TipoMensaje.MsgAdvertencia)
|
|
Else
|
|
Alert($"{Mensaje} en el contrato {row.DataKey("NumeroContrato").ToString}", TipoMensaje.MsgAdvertencia)
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
|
|
If sb.ToString().Length > 0 Then
|
|
Alert($"Se generaron las siguientes facturas: </br></br> {sb.ToString()}")
|
|
Else
|
|
Alert("No se generaron facturas", TipoMensaje.MsgAdvertencia)
|
|
End If
|
|
End Sub
|
|
|
|
|
|
|
|
Private Function EmitirImprimir(pCveCicloComercial As Integer) As MMensajeFacturacion
|
|
Dim Retorno As New MMensajeFacturacion
|
|
|
|
ViewState("CveCicloComercial") = pCveCicloComercial
|
|
CreaObjetosVenta()
|
|
|
|
If ObjFactura Is Nothing Or ObjFactura.Cliente Is Nothing Then
|
|
Alert("Ocurrió un error al procesar los datos de la Venta.", TipoMensaje.MsgError)
|
|
ObjFactura = Nothing
|
|
Return Retorno
|
|
End If
|
|
|
|
If ObjFactura.CveCliente > 0 Then
|
|
If ObjFactura.DtDetalle.Rows.Count > 0 Then
|
|
Dim TieneError As Boolean = False
|
|
Dim RespFactura As Modelos.Factura.MMensajeFactura = Nothing
|
|
|
|
Try
|
|
RespFactura = ObjFactura.EmitirFactura(Timbrar:=False)
|
|
|
|
If RespFactura IsNot Nothing AndAlso RespFactura.CveVenta <= 0 OrElse RespFactura.TieneError Then
|
|
TieneError = True
|
|
End If
|
|
Catch ex As Exception
|
|
TieneError = True
|
|
OnError("Ocurrió un error al generar la factura", ex)
|
|
End Try
|
|
|
|
If Not TieneError AndAlso RespFactura.CveVenta > 0 Then
|
|
Retorno.CveVenta = RespFactura.CveVenta
|
|
Retorno.SerieFolio = RespFactura.SerieFolio
|
|
Retorno.SeTimbro = ObjFactura.TimbrarFactura()
|
|
End If
|
|
|
|
Dim SbMensajes As New StringBuilder
|
|
|
|
If Not TieneError Then
|
|
SbMensajes.AppendFormat("La factura <a class=""Texto"" target='_blank' href=""/Ventas/Ventas.aspx?CveVenta={0}"">{1}</a> se guardo correctamente.", Retorno.CveVenta, Retorno.SerieFolio)
|
|
|
|
If Not Retorno.SeTimbro Then
|
|
SbMensajes.AppendFormat("<br/> La factura no se pudo timbrar.")
|
|
End If
|
|
Else
|
|
SbMensajes.Append("Ocurrió un error al generar la factura.")
|
|
If RespFactura IsNot Nothing Then
|
|
For Each msg As String In RespFactura.Mensajes
|
|
SbMensajes.Append(msg)
|
|
Next
|
|
End If
|
|
End If
|
|
|
|
Retorno.Mensaje = SbMensajes.ToString()
|
|
|
|
Else
|
|
Retorno.Mensaje = "No se pudo completar facturación por que no se encontraron partidas "
|
|
End If
|
|
|
|
End If
|
|
|
|
If ObjFactura IsNot Nothing Then
|
|
ObjFactura.Dispose()
|
|
End If
|
|
|
|
TmpDT.Clear()
|
|
Return Retorno
|
|
End Function
|
|
|
|
|
|
Private Sub CreaDTVentas()
|
|
TmpDT = New DataTable
|
|
TmpDT.Columns.Add("CveVenta", GetType(Integer))
|
|
TmpDT.Columns.Add("Consec", GetType(Integer))
|
|
TmpDT.Columns.Add("Cantidad", GetType(Decimal))
|
|
TmpDT.Columns.Add("Codigo", GetType(String))
|
|
TmpDT.Columns.Add("CveUM", GetType(Integer))
|
|
TmpDT.Columns.Add("UM", GetType(String))
|
|
TmpDT.Columns.Add("SATClaveUM", GetType(String))
|
|
TmpDT.Columns.Add("CveClasificacion", GetType(Integer))
|
|
TmpDT.Columns.Add("Clasificacion", GetType(String))
|
|
TmpDT.Columns.Add("CvePS", GetType(Integer))
|
|
TmpDT.Columns.Add("PS", GetType(String))
|
|
TmpDT.Columns.Add("CodigoPS", GetType(String))
|
|
TmpDT.Columns.Add("SATClaveProdServ", GetType(String))
|
|
TmpDT.Columns.Add("NoIdentificacion", GetType(String))
|
|
TmpDT.Columns.Add("CveTipoPS", GetType(Integer))
|
|
TmpDT.Columns.Add("CveTipoInvPS", GetType(Integer))
|
|
TmpDT.Columns.Add("Serie", GetType(String))
|
|
TmpDT.Columns.Add("CuentaPredial", GetType(String))
|
|
TmpDT.Columns.Add("Obs", GetType(String))
|
|
TmpDT.Columns.Add("TiempoEntrega", GetType(String))
|
|
TmpDT.Columns.Add("PU", GetType(Decimal))
|
|
TmpDT.Columns.Add("IVA", GetType(Decimal))
|
|
TmpDT.Columns.Add("ImporteIVA", GetType(Decimal))
|
|
TmpDT.Columns.Add("PorcentajeIVA", GetType(Decimal))
|
|
TmpDT.Columns.Add("ImporteRetIVA", GetType(Decimal))
|
|
TmpDT.Columns.Add("ImporteRetISR", GetType(Decimal))
|
|
TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Decimal))
|
|
TmpDT.Columns.Add("PorcentajeRetISR", GetType(Decimal))
|
|
TmpDT.Columns.Add("ImporteIEPS", GetType(Decimal))
|
|
TmpDT.Columns.Add("IEPS", GetType(Decimal))
|
|
TmpDT.Columns.Add("PorcentajeIEPS", GetType(Decimal))
|
|
TmpDT.Columns.Add("Descuento", GetType(Decimal))
|
|
TmpDT.Columns.Add("TipoDescuento", GetType(Integer))
|
|
TmpDT.Columns.Add("TotalImporte", GetType(Decimal))
|
|
TmpDT.Columns.Add("Total", GetType(Decimal))
|
|
'Para uso del módulo contable
|
|
TmpDT.Columns.Add("AsientoContableVentas", GetType(Integer))
|
|
TmpDT.Columns.Add("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))
|
|
|
|
'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("EsCargo", GetType(Boolean))
|
|
End Sub
|
|
Private Sub CreaObjetosVenta(Optional VistaPrevia As Boolean = False)
|
|
|
|
Dim CveProyecto As String = ""
|
|
Dim CveSubProyecto As String = ""
|
|
Dim Proyecto As String = ""
|
|
Dim SubProyecto As String = ""
|
|
|
|
ObjFactura = New Modelos.Factura(UsuarioActual)
|
|
ObjFactura.DirectorioServidor = Server.MapPath("/")
|
|
ObjFactura.CveCicloComercial = CveCicloComercial
|
|
|
|
Dim DR As DataRow = DTCicloComercial.FiltroPrimero($"CveCicloComercial = {CveCicloComercial}")
|
|
|
|
ObjFactura.Version = "3.3"
|
|
ObjFactura.CveUsuario = UsuarioActual.CveUsuario
|
|
ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa
|
|
ObjFactura.TipoCambio = 1
|
|
ObjFactura.ConvertirPesos = False
|
|
ObjFactura.CveMoneda = DR("CveMoneda").ToString.ToEntero
|
|
ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ")
|
|
ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DR("CveMoneda").ToString.ToEntero}")
|
|
ObjFactura.TipoDocto = "Ing"
|
|
ObjFactura.RefDocto = ""
|
|
ObjFactura.Folio = -1
|
|
ObjFactura.Serie = "-1"
|
|
'ObjFactura.CveMesa = -1
|
|
ObjFactura.Fecha = If(DR("FechaVenc").ToString.ToDate > NowADS(), NowADS(), DR("FechaVenc").ToString.ToDate)
|
|
|
|
ObjFactura.CvePrePoliza = -1
|
|
ObjFactura.CveMetodoPago = 1
|
|
ObjFactura.MetodoPago = "Efectivo"
|
|
|
|
ObjFactura.MotivoDescuento = ""
|
|
ObjFactura.Observaciones = If(String.IsNullOrEmpty(TxtObservaciones.Text), "", TxtObservaciones.Text + " ") + DR("Observaciones").ToString
|
|
ObjFactura.FechaEjecucion = DateTime.Today
|
|
'ObjFactura.ClaveMetodoPagoSAT = GlobalDTMetodosPago.FiltroPrimeroValor("ClaveSAT", $"CveMetodoPago = {1}")
|
|
ObjFactura.UsuarioCreo = UsuarioActual.Usuario
|
|
ObjFactura.CveCondicionEntrega = -1
|
|
ObjFactura.CondicionEntrega = ""
|
|
ObjFactura.NumeroCuenta = ""
|
|
'ObjFactura.CveSucursal = GlobalDTSucursales.FiltroPrimeroValor("CveSucursal", $"CveEmpresa = {UsuarioActual.CveEmpresa}").ToEntero
|
|
'ObjFactura.Cliente.NumCtaPago = TxtNumCtaPago.Text.Trim
|
|
ObjFactura.CondicionesPago = 0
|
|
'ObjFactura.SerieFolio = String.Format("{0}-{1}", LblSerie.Text, TxtFolio.Text)
|
|
ObjFactura.PedidoContrato = ""
|
|
ObjFactura.NumeroContrato = DR("NumeroContrato").ToString
|
|
ObjFactura.DescripcionContrato = DR("DescripcionContrato").ToString
|
|
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 = DR("CveContrato").ToString.ToEntero
|
|
CveProyecto = DR("CveProyecto").ToString
|
|
Proyecto = DR("ProyectoContrato").ToString
|
|
CveSubProyecto = DR("CveSubProyecto").ToString
|
|
ObjFactura.CveSubProyecto = CveSubProyecto.ToEntero
|
|
ObjFactura.CveSubProyectoCobranza = CveSubProyecto.ToEntero
|
|
ObjFactura.CveSubProyectoEjecucion = CveSubProyecto.ToEntero
|
|
|
|
|
|
SubProyecto = DR("SubProyectoContrato").ToString
|
|
|
|
Dim objContratos As New ClsContratos
|
|
If objContratos.GetContratosDetalle(DR("CveContrato").ToString.ToEntero, UsuarioActual.CveEmpresa) Then
|
|
DTDetalle = objContratos.DtResultados.FiltraParametros("CveTipoPresupuesto=2")
|
|
Else
|
|
DTDetalle = Nothing
|
|
End If
|
|
objContratos.Dispose()
|
|
|
|
Dim DtR As DataRow
|
|
ObjFactura.SubTotal = SUM(DTDetalle, "Total")
|
|
ObjFactura.IVA = SUM(DTDetalle, "ImporteIVA")
|
|
ObjFactura.RetIVA = SUM(DTDetalle, "ImporteRetIVA")
|
|
ObjFactura.RetISR = SUM(DTDetalle, "ImporteRetISR")
|
|
ObjFactura.IEPS = SUM(DTDetalle, "ImporteIEPS")
|
|
ObjFactura.Total = ObjFactura.SubTotal + ObjFactura.IVA + ObjFactura.IEPS - (ObjFactura.RetIVA + ObjFactura.RetISR)
|
|
|
|
For Each row As DataRow In DTDetalle.Rows
|
|
Dim drPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=row("CvePS").ToString().ToEntero()).FiltroPrimero("")
|
|
|
|
DtR = TmpDT.NewRow
|
|
DtR("CveVenta") = -1
|
|
DtR("Codigo") = row("Codigo")
|
|
DtR("Consec") = TmpDT.Rows.Count + 1
|
|
DtR("Cantidad") = row("CantidadContratada")
|
|
DtR("CveUM") = row("CveUM")
|
|
DtR("UM") = row("UM")
|
|
|
|
DtR("SATClaveUM") = row("SATClaveUM")
|
|
DtR("CveClasificacion") = row("CveClasificacion")
|
|
DtR("Clasificacion") = row("Clasificacion")
|
|
DtR("CvePS") = row("CvePS")
|
|
DtR("PS") = row("PS")
|
|
DtR("CodigoPS") = row("CodigoPS")
|
|
|
|
DtR("SATClaveProdServ") = row("SATClaveProdServ")
|
|
|
|
DtR("NoIdentificacion") = row("NoIdentificacion")
|
|
|
|
DtR("CveTipoPS") = drPS("CveTipoPS")
|
|
DtR("CveTipoInvPS") = drPS("Inv_CveMetodoInventario")
|
|
|
|
DtR("Obs") = TxtObservaciones.Text + " " + row("Observacion").ToString
|
|
DtR("PU") = row("PU")
|
|
DtR("IVA") = row("PorcentajeIVA")
|
|
DtR("PorcentajeIVA") = row("PorcentajeIVA")
|
|
DtR("ImporteIVA") = row("ImporteIVA")
|
|
DtR("PorcentajeIEPS") = row("PorcentajeIEPS")
|
|
DtR("ImporteIEPS") = row("ImporteIEPS")
|
|
DtR("PorcentajeRetIVA") = row("PorcentajeRetIVA")
|
|
DtR("ImporteRetIVA") = row("ImporteRetIVA")
|
|
DtR("PorcentajeRetISR") = row("PorcentajeRetISR")
|
|
DtR("ImporteRetISR") = row("ImporteRetISR")
|
|
DtR("Descuento") = 0
|
|
DtR("TipoDescuento") = 0
|
|
DtR("CveProyecto") = CveProyecto
|
|
DtR("Proyecto") = Proyecto
|
|
DtR("CveSubProyecto") = CveSubProyecto
|
|
DtR("SubProyecto") = SubProyecto
|
|
DtR("CveVentaDetalle") = 0
|
|
DtR("CveContratoDetalle") = row("CveContratoDetalle")
|
|
DtR("CuentaPredial") = row("CuentaPredial")
|
|
DtR("TotalImporte") = row("Total")
|
|
|
|
TmpDT.Rows.Add(DtR)
|
|
Next
|
|
|
|
|
|
'DETALLES
|
|
ObjFactura.DtDetalle = TmpDT
|
|
|
|
'CLIENTE
|
|
ObjFactura.CveCliente = DR("CveCliente").ToString.ToEntero
|
|
ObjFactura.SetCliente()
|
|
|
|
|
|
'Dim ObjCliente As New ClsClientes()
|
|
'If ObjCliente.GetClientes(DR("CveCliente").ToString.ToEntero, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
|
|
' If ObjCliente.DtResultados.Rows.Count > 0 Then
|
|
' ObjFactura.CveFormaPago = ObjCliente.CveFormaPago
|
|
' ObjFactura.FormaPago33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("FormaPago", $"CveFormaPago = {ObjCliente.CveFormaPago}")
|
|
' ObjFactura.FormaPagoSAT33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {ObjCliente.CveFormaPago}")
|
|
|
|
' ObjFactura.CveMetodoPago = ObjCliente.CveMetodoPago
|
|
' ObjFactura.MetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("MetodoPago", $"CveMetodoPago = {ObjCliente.CveMetodoPago}")
|
|
' ObjFactura.ClaveMetodoPagoSAT = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {ObjCliente.CveMetodoPago}")
|
|
|
|
' ObjFactura.CveUsoCFDI = ObjCliente.CveUsoCFDI
|
|
' ObjFactura.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", $"CveUsoCFDI = {ObjCliente.CveUsoCFDI}")
|
|
' ObjFactura.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {ObjCliente.CveUsoCFDI}")
|
|
|
|
' 'AGREGAR LOS PLAZOS PARA EL PAGO DEL CLIENTE
|
|
' Dim FechaPago As DateTime = ObjFactura.Fecha.AddDays(ObjCliente.PlazoCobranza)
|
|
' ObjFactura.FechaVencimiento = FechaPago
|
|
' ObjFactura.Vigencia = FechaPago
|
|
' ObjFactura.FechaPago = FechaPago
|
|
|
|
' End If
|
|
'End If
|
|
'ObjCliente.Dispose()
|
|
|
|
'SUBPROYECTO
|
|
ObjFactura.SetSubProyectoMatriz(Me)
|
|
ObjFactura.SetSubProyecto(Me)
|
|
|
|
ObjFactura.Timbre = PreParaTimbre(ObjFactura)
|
|
ObjFactura.FemsaFactura = New Modelos.FemsaFactura() With {
|
|
.AplicaFEMSA = False,
|
|
.FEMSA_Version = 1
|
|
}
|
|
End Sub
|
|
|
|
Private Function PreParaTimbre(Obj As Modelos.Factura) As CFDITimbre
|
|
Dim Timbre As New CFDITimbre
|
|
Timbre.Comprobante.TipoComprobante = If(Obj.TipoDocto.Contiene("Ing", "Ant"), "I", If(Obj.TipoDocto.Contiene("Egs", "Dev"), "E", ""))
|
|
Timbre.Comprobante.Folio = Obj.Folio.ToString
|
|
Timbre.Comprobante.Serie = Obj.Serie
|
|
Timbre.Comprobante.Fecha = Obj.FechaCP
|
|
Timbre.Comprobante.FormadePago = Obj.ClaveFormaPagoSAT
|
|
Timbre.Comprobante.CondicionesdePago = Obj.FormaPago
|
|
Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT
|
|
Timbre.Comprobante.Subtotal = Obj.SubTotal
|
|
Timbre.Comprobante.Descuentos = Obj.Descuento
|
|
Timbre.Comprobante.Moneda = Obj.MonedaSAT
|
|
Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString)
|
|
Timbre.Comprobante.Total = Obj.Total
|
|
|
|
Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP
|
|
Timbre.Comprobante.Confirmacion = ""
|
|
|
|
Timbre.Receptor.RFC = Obj.Cliente.RFC
|
|
Timbre.Receptor.Nombre = Obj.Cliente.Nombre
|
|
Timbre.Receptor.ResidenciaFiscal = ""
|
|
Timbre.Receptor.NumeroRegistroTributario = ""
|
|
Timbre.Receptor.UsoCFDI = Obj.ClaveUsoCFDISAT
|
|
|
|
|
|
If Obj.CveTipoRelacion > 0 Then
|
|
Select Case Obj.CveTipoRelacion
|
|
Case 1
|
|
Timbre.CFDIRelacionados.TipoRelacion = "01"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "01-Nota de Crédito aplicada a Ingreso"
|
|
Case 2
|
|
Timbre.CFDIRelacionados.TipoRelacion = "02"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "02-Nota de débito de los documentos relacionados"
|
|
Case 3
|
|
Timbre.CFDIRelacionados.TipoRelacion = "03"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "03-Devolución aplicada a Ingreso"
|
|
Case 4
|
|
Timbre.CFDIRelacionados.TipoRelacion = "04"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "04-Refacturación de Ingreso"
|
|
Case 7
|
|
Timbre.CFDIRelacionados.TipoRelacion = "07"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo"
|
|
Case 8
|
|
Timbre.CFDIRelacionados.TipoRelacion = "08"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "08-Factura generada por pagos en parcialidades "
|
|
Case 9
|
|
Timbre.CFDIRelacionados.TipoRelacion = "09"
|
|
Timbre.CFDIRelacionados.TipoRelacionTexto = "09-Factura generada por pagos diferidos"
|
|
|
|
End Select
|
|
|
|
'If DtVentasNC IsNot Nothing AndAlso DtVentasNC.Rows.Count > 0 Then
|
|
' For Each Dr As DataRow In DtVentasNC.Rows
|
|
' Timbre.CFDIRelacionados.UUID.Add(Dr("FolioFiscal").ToString)
|
|
' Next
|
|
'Else
|
|
' Timbre.CFDIRelacionados.UUID.Add(HdnFolioFiscalNC.Value)
|
|
'End If
|
|
|
|
End If
|
|
|
|
|
|
Dim totSubTotal As Decimal = Obj.SubTotal
|
|
Dim totIVA As Decimal = Obj.IVA
|
|
Dim totRetIVA As Decimal = Obj.RetIVA
|
|
Dim totRetISR As Decimal = Obj.RetISR
|
|
Dim i As Integer = 1
|
|
|
|
'detalles
|
|
Dim tPS As String = ""
|
|
|
|
For Each drr As DataRow In Obj.DtDetalle.Rows
|
|
If drr("PS").ToString.Length = 1 Then
|
|
tPS = drr("Obs").ToString
|
|
Else
|
|
If drr("PS").ToString.Length = 0 Then
|
|
tPS = ""
|
|
Else
|
|
tPS = String.Format("{0} {1}", drr("PS"), drr("Obs"))
|
|
End If
|
|
End If
|
|
'condicionante, especial
|
|
If 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,
|
|
.Unidad = drr("UM").ToString,
|
|
.ClaveUnidad = drr("SATClaveUM").ToString,
|
|
.ClaveProdServ = drr("SATClaveProdServ").ToString,
|
|
.Noidentificacion = drr("Noidentificacion").ToString,
|
|
.CuentaPredial = drr("CuentaPredial").ToString}
|
|
'verifica suma subtotales
|
|
If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'proceso de ajusta de decimales
|
|
concepto.Importe = totSubTotal
|
|
End If
|
|
totSubTotal = totSubTotal - concepto.Importe
|
|
|
|
'siempre 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
|
|
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal})
|
|
' End If
|
|
|
|
If drr("ImporteIEPS").ToString.ToDouble > 0 Then
|
|
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIEPS").ToString.ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString.ToDecimal})
|
|
End If
|
|
|
|
If drr("ImporteRetIVA").ToString.ToDouble > 0 Then 'si hay retenciones
|
|
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString.ToDecimal})
|
|
End If
|
|
|
|
If drr("ImporteRetISR").ToString.ToDouble > 0 Then 'retención de ISR
|
|
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetISR").ToString.ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString.ToDecimal})
|
|
End If
|
|
|
|
Timbre.Conceptos.Add(concepto)
|
|
i += 1
|
|
Next
|
|
Return Timbre
|
|
End Function
|
|
|
|
Public Class MMensajeFacturacion
|
|
Public Property CveVenta As Integer = -1
|
|
Public Property SerieFolio As String = ""
|
|
Public Property Mensaje As String = ""
|
|
Public Property SeTimbro As Boolean = False
|
|
End Class
|
|
|
|
End Class
|