Files
SIG/Contratos/FacturacionMasiva.aspx.vb
2025-01-21 09:18:06 -07:00

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