Option Explicit On
Option Strict On
Imports System.Data
Imports Extensiones
Imports System.IO
Partial Class Inventarios_Remanufactura
Inherits ClsPaginas
#Region "PROPIEDADES"
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 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 TmpDT As DataTable
Get
Return CType(ViewState("TmpDT"), DataTable)
End Get
Set(value As DataTable)
ViewState("TmpDT") = value
End Set
End Property
Private ReadOnly Property SeGuardoPrePoliza As Boolean
Get
Return CBool(ViewState("SeGuardoPrePoliza"))
End Get
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 CveVenta As Integer
Get
Return CType(ViewState("CveVenta"), Integer)
End Get
Set(value As Integer)
ViewState("CveVenta") = 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
InicializaValores()
End If
End Sub
#Region "CARGAS"
Public Sub InicializaValores()
CargarCentrosDeCosto(DdlProyecto, DdlSubProyecto, LblProyecto, LblSubProyecto, divProyecto:=DivProyecto)
TxtFecha.Text = NowADS().ToShortDateString
'Carga Clientes
DdlCliente.setEsWebService(True)
DdlCliente.Attributes.Add("data-metodo", "getcliente")
DdlCliente.SelectedText = "Seleccione"
DdlCliente.SelectedValue = "-1"
'Carga PS
DdlPS.setEsWebService(True)
DdlPS.ddlWS.Attributes.Add("data-cveclasificacion", "-1")
DdlPS.SelectedText = "Seleccione"
DdlPS.SelectedValue = "-1"
'Carga Almacenes
DdlAlmacen.DataSource = GlobalDTAlmacenUsuarios(UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1).FiltraParametros("CveTipoAlmacen NOT IN (9,11)")
DdlAlmacen.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlAlmacen.DataBind()
CargaFolio()
CreaDTVentas()
End Sub
Public Sub CargaFolio()
Dim ObjFol As New ClsGralFolios()
If ObjFol.GetFolios("RMF", UsuarioActual.CveEmpresa) Then
If ObjFol.DtResultados.Rows.Count > 0 Then
lblFolio.Text = (ObjFol.DtResultados.Rows(0)("FActual").ToString().ToEntero + 1).ToString
Else
Alert("Necesita registrar un folio de remanufactura", ModExtensiones.TipoMensaje.MsgAdvertencia)
BtnAplicar.Enabled = False
End If
End If
ObjFol.Dispose()
UpDatosRemanufactura.Update()
End Sub
#End Region
#Region "GUARDAR"
Protected Sub BtnAplicar_Click(sender As Object, e As EventArgs)
If Not DdlCliente.SelectedValue.ToEntero > 0 Then
Alert("Tiene que seleccionar un cliente", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
If Not DdlPS.SelectedValue.ToEntero > 0 Then
Alert("Tiene que seleccionar un producto o servicio", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
Dim ObjInv As New ClsInventarios()
Dim ObjVentas As New ClsVentas(ObjInv.IniciaTransacSQL())
Dim ObjConta As New ClsContabilidad(ObjInv.IniciaTransacSQL())
Dim ObjContr As New ClsContratos(ObjInv.IniciaTransacSQL())
Dim ObjOS As New ClsOS(ObjInv.IniciaTransacSQL())
Dim ObjBancos As New ClsBancos(ObjInv.IniciaTransacSQL())
Dim ObjFolios As New ClsGralFolios(ObjInv.IniciaTransacSQL())
Dim ObjClientes As New ClsClientes(ObjInv.IniciaTransacSQL())
Dim ObjContPaq As ClsContPAQi = Nothing
Dim ErrorTrans As Boolean = False
Dim CveRemanufactura As Integer = 0
Dim CveMovimiento As Integer = 0
CveVenta = 0
ErrorList = New List(Of String)
MensajeAlert = New StringBuilder
'CREA REAMANUFACTURA
If Not ObjInv.AddRemanufactura(DdlCliente.SelectedValue.ToEntero, DdlAlmacen.SelectedValue.ToEntero,
DdlSubProyecto.SelectedValue.ToEntero, DdlPS.SelectedValue.ToEntero, lblFolio.Text,
TxtCantidad.Text.ToDecimal, TxtPrecio.Text.ToDecimal, TxtFecha.Text.ToDate, UsuarioActual.CveUsuario,
UsuarioActual.CveEmpresa) Then
ErrorTrans = True
Else
CveRemanufactura = ObjInv.CveRemanufactura
End If
'CREA MOVIMIENTO DE ENTRADA
Dim CveAlmacen As Integer = DdlAlmacen.SelectedValue.ToEntero()
Dim FolioMov As String = ""
Dim Concepto As Integer = 2
Dim Fecha As DateTime = TxtFecha.Text.ToDate
CveMovimiento = ObjInv.AddMovimiento(CveAlmacen, Concepto, 1, Fecha, -1, UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa, -1, -1, -1, -1)
If CveMovimiento > 0 Then
If GlobalDTPS(UsuarioActual.CveEmpresa, DdlPS.SelectedValue.ToEntero).Rows.Count > 0 Then
Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, DdlPS.SelectedValue.ToEntero).Rows(0)
ObjInv.AddMovimientoDetalle(CveMovimiento, TxtCantidad.Text.ToDecimal, DrPS("CveUnidadMedida").ToString().ToEntero(), DdlPS.SelectedValue.ToEntero, TxtPrecio.Text.ToDecimal, -1)
If ObjInv.GetMovimientos(CveMovimiento, -1, -1, UsuarioActual.CveEmpresa) Then
If ObjInv.DtResultados.Rows.Count > 0 Then
FolioMov = ObjInv.DtResultados.Rows(0)("Folio").ToString
MensajeAlert.AppendFormat("
", CveMovimiento, FolioMov)
End If
End If
Else
ErrorTrans = True
End If
Else
ErrorTrans = True
End If
'CREA VENTA
If CveMovimiento > 0 And Not ErrorTrans Then
CreaObjetosVenta(ObjFolios, ObjClientes)
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
ErrorTrans = True
End If
Dim RetornoVenta As Boolean = False
If Not ErrorTrans Then RetornoVenta = EmitirImprimir(ObjVentas, ObjConta, ObjInv, ObjContr, ObjContPaq, ObjBancos, ObjOS)
If Not RetornoVenta Then ErrorTrans = True Else ErrorTrans = False
End If
If CveVenta > 0 And CveMovimiento > 0 And Not ErrorTrans Then
'ACTUALIZA REMANUFACTURA CON CVEVENTA Y CVEMOVIMIENTO
If Not ObjInv.UpdateRemanufactura(CveRemanufactura, CveMovimiento, CveVenta) Then
ErrorTrans = True
End If
Else
ErrorTrans = True
End If
If Not ErrorTrans Then
ObjInv.Commit()
Else
ObjInv.RollBack()
If ObjContPaq IsNot Nothing Then ObjContPaq.RollBack()
End If
ObjInv.Dispose()
ObjVentas.Dispose()
ObjConta.Dispose()
ObjContr.Dispose()
ObjOS.Dispose()
ObjBancos.Dispose()
ObjFolios.Dispose()
ObjClientes.Dispose()
If ObjContPaq IsNot Nothing Then ObjContPaq.Dispose()
If Not ErrorTrans Then
Dim SeTimbro As Boolean = False
If ObjFactura.TipoDocto.Contiene("Ing", "Egs", "Ant") Then
If UsuarioActual.Empresa.TipoFacturacion = "CFDi" AndAlso UsuarioActual.Empresa.FacturaProduccion Then
Dim sw As New Diagnostics.Stopwatch
sw.Start()
'FACTURA INGRESO/EGRESO
Dim ObjTimbrado As New Timbrado
SeTimbro = ObjTimbrado.TimbrarFactura(UsuarioActual, ObjFactura)
sw.Stop()
GuardaLogTimbrado(sw.ElapsedMilliseconds.ToString, UsuarioActual.Empresa.CvePAC)
End If
End If
If SeTimbro Then
GeneraPDFFactura(False)
Else
MensajeAlert.AppendFormat("
La factura no se pudo timbrar. Por favor intentelo de nuevo a traves del boton Emitir o póngase en contacto con soporte técnico.")
End If
End If
If Not ErrorTrans Then
Alert(MensajeAlert.ToString, TipoMensaje.MsgInformacion)
Limpia()
Else
For Each ErrorItem As String In ErrorList
Alert(ErrorItem, TipoMensaje.MsgAdvertencia)
Next
Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError)
End If
ErrorList = Nothing
MensajeAlert = Nothing
ObjFactura = Nothing
End Sub
Public Sub Limpia()
CargaFolio()
TxtFecha.Text = NowADS().ToShortDateString
DdlCliente.SelectedText = ""
DdlCliente.SelectedValue = "-1"
DdlPS.SelectedText = ""
DdlPS.SelectedValue = "-1"
DdlProyecto.SelectedIndex = 0
DdlSubProyecto.SelectedIndex = 0
DdlAlmacen.SelectedIndex = 0
TxtCantidad.Text = ""
TxtPrecio.Text = ""
UpDatosRemanufactura.Update()
End Sub
#Region "VENTA"
Private Function EmitirImprimir(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, ObjInventario As ClsInventarios, ObjContr As ClsContratos, ObjContPaq As ClsContPAQi, ObjBancos As ClsBancos, ObjOS As ClsOS) As Boolean
Dim retorno As Boolean = False
If ObjFactura.CveCliente > 0 Then
If ObjFactura.DtDetalle.Rows.Count > 0 Then
'CONTABILIDAD AUTOMATICA Y AC
If UsuarioActual.Empresa.UsaAC OrElse UsuarioActual.Empresa.Funcionalidad(200) = "1" Then
ObjContPaq = New ClsContPAQi(UsuarioActual.Empresa)
End If
'GUARDA VENTA
GuardarVenta(ObjVentas, ObjConta, ObjInventario, ObjContr, ObjFactura, TmpDT, ObjFactura.CveNCaVincular, ObjContPaq, ObjBancos, ObjOS)
If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso (SeGuardoPrePoliza Or ObjFactura.TipoDocto.Contiene("Ped", "Cot")) Then
ViewState("CveVenta") = ObjFactura.CveVenta
'MENSAJE PRINCIPAL
MensajeAlert.AppendFormat("
", ObjFactura.CveVenta, ObjFactura.SerieFolio)
retorno = True
Else
retorno = False
End If
Else
retorno = False
End If
Else
Mensaje = "No se pudo completar facturación por que no se encontraron partidas "
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(Double))
TmpDT.Columns.Add("Codigo", GetType(String))
TmpDT.Columns.Add("CveUM", GetType(Integer))
TmpDT.Columns.Add("UM", 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("CveTipoInvPS", GetType(Integer))
TmpDT.Columns.Add("SerieLote", GetType(String))
TmpDT.Columns.Add("Obs", GetType(String))
TmpDT.Columns.Add("TiempoEntrega", GetType(String))
TmpDT.Columns.Add("PU", GetType(Double))
TmpDT.Columns.Add("IVA", GetType(Double))
TmpDT.Columns.Add("IEPS", GetType(Double))
TmpDT.Columns.Add("Descuento", GetType(Double))
TmpDT.Columns.Add("TipoDescuento", GetType(Integer))
TmpDT.Columns.Add("Total", GetType(Double))
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("CvePresupuestoIngreso", GetType(Integer))
TmpDT.Columns.Add("CveContratoDetalle", GetType(Integer))
TmpDT.Columns.Add("CveVentaDetalle", GetType(Integer))
TmpDT.Columns.Add("Observacion", GetType(String))
TmpDT.Columns.Add("SATClaveUM", GetType(String))
TmpDT.Columns.Add("SATClaveProdServ", GetType(String))
TmpDT.Columns.Add("CuentaPredial", GetType(String))
TmpDT.Columns.Add("NoIdentificacion", GetType(String))
TmpDT.Columns.Add("TotalImporte", GetType(Double))
TmpDT.Columns.Add("PorcentajeIVA", GetType(Double))
TmpDT.Columns.Add("ImporteIVA", GetType(Double))
TmpDT.Columns.Add("PorcentajeIEPS", GetType(Double))
TmpDT.Columns.Add("ImporteIEPS", GetType(Double))
TmpDT.Columns.Add("PorcentajeRetIVA", GetType(Double))
TmpDT.Columns.Add("ImporteRetIVA", GetType(Double))
TmpDT.Columns.Add("PorcentajeRetISR", GetType(Double))
TmpDT.Columns.Add("ImporteRetISR", GetType(Double))
End Sub
Private Sub CreaObjetosVenta(ObjFolios As ClsGralFolios, ObjCliente As ClsClientes)
Dim Folio As String = ""
Dim Serie As String = ""
If ObjFolios.GetFolios("Egs", UsuarioActual.CveEmpresa) Then
Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format($" Estado = 'Activo' AND CveSubProyecto = {DdlSubProyecto.SelectedValue} "))
If DT.Rows.Count > 0 Then
Serie = DT.Rows(0)("Serie").ToString
Folio = DT.Rows(0)("FActual").ToString
End If
DT.Dispose()
End If
ObjFactura = New Modelos.Factura
ObjFactura.Version = "3.3"
ObjFactura.CveUsuario = UsuarioActual.CveUsuario
ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa
ObjFactura.TipoCambio = 0
ObjFactura.ConvertirPesos = False
ObjFactura.CveMoneda = 1
ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ")
ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", "CveMoneda = 1")
ObjFactura.TipoDocto = "Egs"
ObjFactura.RefDocto = ""
ObjFactura.Folio = Folio.ToEntero
ObjFactura.Serie = Serie
'ObjFactura.CveMesa = -1
ObjFactura.Fecha = TxtFecha.Text.ToDate
ObjFactura.CvePrePoliza = -1
ObjFactura.CveMetodoPago = 1
ObjFactura.MetodoPago = "Efectivo"
ObjFactura.FechaPago = TxtFecha.Text.ToDate
ObjFactura.MotivoDescuento = ""
ObjFactura.Observaciones = ""
ObjFactura.FechaEjecucion = TxtFecha.Text.ToDate
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 = ""
ObjFactura.Descuento = 0
ObjFactura.Amortizacion = 0
ObjFactura.CveContrato = 0
ObjFactura.CveSubProyecto = DdlSubProyecto.SelectedValue.ToEntero
ObjFactura.CveSubProyectoCobranza = DdlSubProyecto.SelectedValue.ToEntero
ObjFactura.CveSubProyectoEjecucion = DdlSubProyecto.SelectedValue.ToEntero
Dim SubTotal As Decimal = TxtCantidad.Text.ToDecimal * TxtPrecio.Text.ToDecimal
Dim IVA As Decimal = SubTotal * 0.16.ToDecimal
Dim Total As Decimal = SubTotal + IVA
ObjFactura.SubTotal = SubTotal
ObjFactura.IVA = IVA
ObjFactura.RetIVA = 0
ObjFactura.RetISR = 0
ObjFactura.IEPS = 0
ObjFactura.Total = Total
Dim DrPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, DdlPS.SelectedValue.ToEntero)(0)
Dim DtR As DataRow
DtR = TmpDT.NewRow
DtR("CveVenta") = -1
DtR("Codigo") = DrPS("Codigo")
DtR("Consec") = TmpDT.Rows.Count + 1
DtR("Cantidad") = TxtCantidad.Text.ToDouble
DtR("CveUM") = DrPS("CveUM")
DtR("UM") = DrPS("UnidadMedida")
DtR("CveClasificacion") = DrPS("CveClasificacion")
DtR("Clasificacion") = DrPS("Clasificacion")
DtR("CvePS") = DrPS("CvePS")
DtR("PS") = DrPS("PS")
DtR("CodigoPS") = DrPS("PSCodigo")
DtR("Obs") = ""
DtR("PU") = TxtPrecio.Text.ToDouble
DtR("Descuento") = 0
DtR("TipoDescuento") = 0
DtR("CveProyecto") = 0
DtR("Proyecto") = ""
DtR("CveSubProyecto") = DdlSubProyecto.SelectedValue.ToEntero
DtR("SubProyecto") = DdlSubProyecto.SelectedItem.Text
DtR("CveVentaDetalle") = 0
DtR("CveContratoDetalle") = 0
DtR("Observacion") = ""
DtR("SATClaveUM") = DrPS("SATClaveUnidadMedida")
DtR("SATClaveProdServ") = DrPS("SATClavePS")
DtR("CuentaPredial") = ""
DtR("NoIdentificacion") = DrPS("Codigo")
DtR("TotalImporte") = Total
DtR("IVA") = 0.16
DtR("PorcentajeIVA") = 0.16
DtR("ImporteIVA") = IVA
DtR("PorcentajeIEPS") = 0
DtR("ImporteIEPS") = 0
DtR("PorcentajeRetIVA") = 0
DtR("ImporteRetIVA") = 0
DtR("PorcentajeRetISR") = 0
DtR("ImporteRetISR") = 0
TmpDT.Rows.Add(DtR)
'DETALLES
ObjFactura.DtDetalle = TmpDT
'CLIENTE
ObjFactura.CveCliente = DdlCliente.SelectedValue.ToEntero
ObjFactura.SetCliente()
If ObjCliente.GetClientes(DdlCliente.SelectedValue.ToEntero, "-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 = GlobalDTVtaFormaPago.FiltroPrimeroValor("FormaPago", $"CveFormaPago = {ObjCliente.CveFormaPago33}")
ObjFactura.FormaPagoSAT33 = GlobalDTVtaFormaPago.FiltroPrimeroValor("ClaveFormaPagoSAT", $"CveFormaPago = {ObjCliente.CveFormaPago33}")
ObjFactura.CveMetodoPago33 = ObjCliente.CveMetodoPago33
ObjFactura.MetodoPago33 = GlobalDTVtaMetodoPago.FiltroPrimeroValor("MetodoPago", $"CveMetodoPago = {ObjCliente.CveMetodoPago33}")
ObjFactura.ClaveMetodoPagoSAT = GlobalDTVtaMetodoPago.FiltroPrimeroValor("ClaveMetodoPagoSAT", $"CveMetodoPago = {ObjCliente.CveMetodoPago33}")
ObjFactura.CveUsoCFDI = ObjCliente.CveUsoCFDI
ObjFactura.UsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("Descripcion", $"CveUsoCFDI = {ObjCliente.CveUsoCFDI}")
ObjFactura.ClaveUsoCFDI = GlobalDTSATUsosCFDI.FiltroPrimeroValor("UsoCFDI", $"CveUsoCFDI = {ObjCliente.CveUsoCFDI}")
End If
End If
'SUBPROYECTO
ObjFactura.SetSubProyectoMatriz(Me)
ObjFactura.SetSubProyecto(Me)
ObjFactura.Timbre = PreParaTimbre(ObjFactura)
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.Fecha
Timbre.Comprobante.FormadePago = Obj.FormaPagoSAT33
Timbre.Comprobante.CondicionesdePago = Obj.FormaPago33
Timbre.Comprobante.MetodoPago = Obj.ClaveMetodoPagoSAT
Timbre.Comprobante.Subtotal = Obj.SubTotal
Timbre.Comprobante.Descuentos = Obj.Descuento
Timbre.Comprobante.Moneda = Obj.MonedaSAT
Timbre.Comprobante.TipoCambio = If(Obj.CveMoneda = 1, "1", Obj.TipoCambio.ToString)
Timbre.Comprobante.Total = Obj.Total
Timbre.Comprobante.LugarExpedicion = Obj.SubProyecto.CP
Timbre.Comprobante.Confirmacion = ""
Timbre.Receptor.RFC = Obj.Cliente.RFC
Timbre.Receptor.Nombre = Obj.Cliente.Nombre
Timbre.Receptor.ResidenciaFiscal = ""
Timbre.Receptor.NumeroRegistroTributario = ""
Timbre.Receptor.UsoCFDI = Obj.ClaveUsoCFDI
If Obj.CveTipoRelacion > 0 Then
Select Case Obj.CveTipoRelacion
Case 1
Timbre.CFDIRelacionados.TipoRelacion = "01"
Timbre.CFDIRelacionados.TipoRelacionTexto = "01-Nota de Crédito aplicada a Ingreso"
Case 2
Timbre.CFDIRelacionados.TipoRelacion = "02"
Timbre.CFDIRelacionados.TipoRelacionTexto = "02-Nota de débito de los documentos relacionados"
Case 3
Timbre.CFDIRelacionados.TipoRelacion = "03"
Timbre.CFDIRelacionados.TipoRelacionTexto = "03-Devolución aplicada a Ingreso"
Case 4
Timbre.CFDIRelacionados.TipoRelacion = "04"
Timbre.CFDIRelacionados.TipoRelacionTexto = "04-Refacturación de Ingreso"
Case 7
Timbre.CFDIRelacionados.TipoRelacion = "07"
Timbre.CFDIRelacionados.TipoRelacionTexto = "07-CFDI por aplicación de anticipo"
Case 8
Timbre.CFDIRelacionados.TipoRelacion = "08"
Timbre.CFDIRelacionados.TipoRelacionTexto = "08-Factura generada por pagos en parcialidades "
Case 9
Timbre.CFDIRelacionados.TipoRelacion = "09"
Timbre.CFDIRelacionados.TipoRelacionTexto = "09-Factura generada por pagos diferidos"
End Select
End If
Dim totSubTotal As Decimal = Obj.SubTotal
Dim totIVA As Decimal = Obj.IVA
Dim totRetIVA As Decimal = Obj.RetIVA
Dim totRetISR As Decimal = Obj.RetISR
Dim i As Integer = 1
'DETALLES
Dim tPS As String = ""
For Each drr As DataRow In Obj.DtDetalle.Rows
If drr("PS").ToString.Length = 1 Then
tPS = drr("Obs").ToString
Else
If drr("PS").ToString.Length = 0 Then
tPS = ""
Else
tPS = String.Format("{0} {1}", drr("PS"), drr("Obs"))
End If
End If
'CONDICIONANTE, ESPECIAL
If UsuarioActual.CveEmpresa = 15 Then drr("UM") = "" 'LES COMENTAN QUE NO DEBE IR LA ETIQUETA DE LA UNIDAD EN EL PRODUCTO
Dim concepto As New CFDIConceptos With {.Cantidad = drr("Cantidad").ToString.ToDecimal,
.Descripcion = tPS,
.ValorUnitario = drr("PU").ToString.ToDecimal,
.Importe = drr("TotalImporte").ToString.ToDecimal,
.Descuento = drr("Descuento").ToString.ToDecimal,
.Unidad = drr("UM").ToString,
.ClaveUnidad = drr("SATClaveUM").ToString,
.ClaveProdServ = drr("SATClaveProdServ").ToString,
.Noidentificacion = drr("Noidentificacion").ToString,
.CuentaPredial = drr("CuentaPredial").ToString}
'VERIFICA SUMA SUBTOTALES
If i = Obj.DtDetalle.Rows.Count AndAlso totSubTotal <> concepto.Importe Then 'PROCESO DE AJUSTA DE DECIMALES
concepto.Importe = totSubTotal
End If
totSubTotal = totSubTotal - concepto.Importe
'SIEMPRE ESTAMOS AGREGANDO EL IVA
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteIVA").ToString.ToDecimal})
If drr("ImporteIEPS").ToString.ToDouble > 0 Then
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "T", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeIEPS").ToString.ToDecimal, .Impuesto = "003", .Importe = drr("ImporteIEPS").ToString.ToDecimal})
End If
If drr("ImporteRetIVA").ToString.ToDouble > 0 Then 'si hay retenciones
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetIVA").ToString.ToDecimal, .Impuesto = "002", .Importe = drr("ImporteRetIVA").ToString.ToDecimal})
End If
If drr("ImporteRetISR").ToString.ToDouble > 0 Then 'retención de ISR
concepto.Impuestos.Add(New CFDIConceptosImpuestos With {.TrasladooRetencion = "R", .Base = concepto.Importe - concepto.Descuento, .TasaOCuota = drr("PorcentajeRetISR").ToString.ToDecimal, .Impuesto = "001", .Importe = drr("ImporteRetISR").ToString.ToDecimal})
End If
Timbre.Conceptos.Add(concepto)
i += 1
Next
Return Timbre
End Function
Private Sub GuardarVenta(ObjVentas As ClsVentas, ObjConta As ClsContabilidad, ObjInventario As ClsInventarios, ObjContr As ClsContratos, factura As Modelos.Factura, TmpDTDetalle As DataTable, CveNCaVincular As Integer, objContPaqi As ClsContPAQi, Optional ObjBancos As ClsBancos = Nothing, Optional ObjOS As ClsOS = Nothing)
Dim Msgok As New StringBuilder
Dim CveAlmacenTraspasoOrigen As Integer = -1
Dim CveAlmacenTraspasoDestino As Integer = -1
Dim EsDevolucionVenta As Integer = -1
Dim CveSubProyecto As Integer = TmpDTDetalle.Rows(0)("CveSubProyecto").ToString.ToEntero
factura.CvePrePoliza = ObjConta.AddPrePolizas("Reman/GuardarVenta", factura.CvePlantillaPoliza, factura.Total, factura.Total, factura.CveMoneda, factura.Fecha, factura.Cliente.Nombre, factura.CveUsuario, factura.CveEmpresa)
If Not ObjVentas.AddVenta(factura.TipoDocto, factura.Folio, factura.CveCliente, factura.CveClienteSucursal, factura.SubTotalTC, factura.DescuentoTC,
factura.AmortizacionTC, factura.IVATC, factura.RetIVATC, factura.RetISRTC,
factura.TotalTC, factura.CveMoneda, factura.TipoCambio, factura.CveMetodoPago, factura.CondicionesPago, factura.FormaPago, factura.FechaPago, factura.Fecha, factura.MotivoDescuento,
factura.Observaciones, factura.FechaEjecucion, factura.CveVendedor, factura.Alfa1, factura.Alfa2,
factura.Alfa3, factura.Num1, factura.Num2, factura.Num3,
factura.Fech1, factura.Fech2, factura.Fech3, factura.CveCorte, factura.NumeroPersonas, factura.CvePrePoliza, factura.CveUsuario, factura.CveEmpresa,
AtencionA:=factura.AtencionA, TelefonoGenerico:="", CveContrato:=factura.CveContrato, CveVentaPadre:=factura.CveVentaPadre, Det_FechaOrdenCompra:=factura.Det_FechaOrdenCompra, Det_OrdenCompra:=factura.Det_OrdenCompra, otros:=factura.Otros,
Entrega:="", Vigencia:=MinFecha,
CveAlmacenTraspasoDestino:=CveAlmacenTraspasoDestino, CveAlmacenTraspasoOrigen:=CveAlmacenTraspasoOrigen, CveDireccionEnvio:=-1, CveOC:=-1, IEPS:=factura.IEPSTC, Serie:=factura.Serie, CveCondicionEntrega:=-1,
PedidoContrato:="", CveSubProyecto:=CveSubProyecto, CveSubProyectoCobranza:=CveSubProyecto, CveSubProyectoEjecucion:=CveSubProyecto, CveFormaPago33:=factura.CveFormaPago33,
CveMetodoPago33:=factura.CveMetodoPago33, CveUsoCFDI:=factura.CveUsoCFDI) Then
ErrorList.Add("Ocurrió un error al Generar la Venta.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico")
End If
If ErrorList.Count = 0 AndAlso ObjVentas.CveVenta > 0 Then
factura.CveVenta = ObjVentas.CveVenta
factura.Serie = ObjVentas.Serie
factura.Folio = ObjVentas.Folio
ViewState("VentaFolio") = ObjVentas.SerieFolio
'Se agregan los PS
For Each Row As DataRow In TmpDTDetalle.Rows
Dim Observacion As String = Row("Observacion").ToString
If Not ObjVentas.AddVentaDetalle(ObjVentas.CveVenta, Row("CvePS").ToString.ToEntero, Row("Cantidad").ToString.ToDecimal, Row("CveUM").ToString.ToEntero,
Row("PU").ToString.ToDecimal(If(ObjFactura.ConvertirPesos, factura.TipoCambio, 1)), Row("IVA").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Math.Round((Row("Total").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("IVA").ToString.ToDecimal(If(factura.ConvertirPesos, factura.TipoCambio, 1)))), 6),
Observacion, 0, 0, Row("CveSubProyecto").ToString.ToEntero, -1,
TiempoEntrega:="", CveVentaDetallePadre:=-1, CveContratoDetalle:=Row("CveContratoDetalle").ToString.ToEntero, CvePromocionDetalle:=-1, IEPS:=Row("ImporteIEPS").ToString.ToDecimal,
ImporteRetIVA:=Row("ImporteRetIVA").ToString.ToDecimal, ImporteRetISR:=Row("ImporteRetISR").ToString.ToDecimal,
PorcentajeIEPS:=Row("PorcentajeIEPS").ToString.ToDouble, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString.ToDouble, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString.ToDecimal) Then
ErrorList.Add("Ocurrió un error al agregar un Producto o Servicio a la Factura.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico")
Exit For
Else
Dim TmpDr As DataRow = TmpDT.Select($"Consec = {Row("Consec").ToString}")(0)
TmpDr("CveVentaDetalle") = ObjVentas.CveVentaDetalle
End If
Next
If ErrorList.Count = 0 Then
'prepoliza
GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas)
End If
End If
End Sub
Private Sub GuardarVentaPrePolizas(ObjConta As ClsContabilidad, factura As Modelos.Factura, TmpDTDetalleMovimientos As DataTable, CveNCaVincular As Integer, objContPaqi As ClsContPAQi, Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing)
Dim CveIE As Integer = -1
Dim DT As DataTable = Nothing
Dim CveConceptoAfectacion As Integer = 1 'Cliente
Dim CveConceptoAntCli As Integer = 3 'Anticipo Cliente
Dim CveConceptoVenta As Integer = 4 'Venta
Dim CveConceptoCanAnt As Integer = 11 'Cancelacion Anticipos
Dim CveConceptoDSV As Integer = 12 ' DSV
Dim CveConceptoIVA As Integer = 13 'IVA Trasladado
Dim CveConceptoRetIVA As Integer = 8 'Ret IVA
Dim CveConceptoRetISR As Integer = 9 'Ret ISR
'P R E P O L I Z A S
If factura.CvePrePoliza > 0 Then
If ProcesoPrepolizas(ObjConta, factura, CveIE, TmpDTDetalleMovimientos, objContPaqi, 1, ObjBancos, ObjVentas) Then
ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico")
End If
Else
ErrorList.Add("Ocurrió un error al agregar los Movimientos de la prepoliza.
Revise su factura y cualquier detalle comuníquese a Soporte Técnico")
End If
End Sub
Private Function ProcesoPrepolizas(ObjConta As ClsContabilidad, ObjFactura As Modelos.Factura, CveIE As Integer, TmpDTDetalle As DataTable, objContPaqi As ClsContPAQi, Optional ValorMultiplicador As Integer = 1, ByRef Optional ObjBancos As ClsBancos = Nothing, ByRef Optional ObjVentas As ClsVentas = Nothing) As Boolean
Dim DT As DataTable
Dim CvePlantilaPoliza As Integer
Dim PorcentajeAmortizacion As Decimal = 0
Dim sumaAmorticaciones As Decimal = 0
Dim ivaTrasladado As Decimal = 0
Dim retIvaTrasladado As Decimal = 0
Dim retIsrTrasladado As Decimal = 0
Dim ErrorPrepoliza As Boolean = False
Dim alertaContabilizacion As String = "Se enviaron correctamente las siguientes pólizas:
"
Dim idCuentaContabilizacion As Integer = 1
Dim tipoCambio As Decimal
Dim CuentasContablesInvalidas As New StringBuilder
If ObjFactura.TipoDocto = "Ing" Or ObjFactura.TipoDocto = "Ant" Or ObjFactura.TipoDocto = "Com" Then
CvePlantilaPoliza = 4
ElseIf ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then
CvePlantilaPoliza = 7
ElseIf ObjFactura.TipoDocto = "Rem" Then
CvePlantilaPoliza = 4
End If
If ObjFactura.CveMoneda = 2 Then
tipoCambio = GlobalTipoCambio(ObjFactura.Fecha).ToString.ToDecimal
Else
tipoCambio = 1
End If
Dim ConceptoContable As Integer
Dim TipoMovimiento As Boolean
Dim importeMovimiento As Decimal
Dim FechaMovimiento As Date = Date.Today
Dim Concepto As String = ViewState("VentaFolio").ToString
Dim Referencia As String = ViewState("VentaFolio").ToString
Dim Fecha As Date = ObjFactura.Fecha
Dim importeMX As Decimal
Dim Multiplicador As Integer
If ObjConta.GetPlantillaConceptos(ObjFactura.CveEmpresa, CvePlantilaPoliza) Then
For Each Row As DataRow In ObjConta.DtResultados.Rows
ConceptoContable = Row("CveConcepto").ToString.ToEntero
TipoMovimiento = If(Row("TipoMovto").ToString = "True", True, False)
importeMovimiento = 0
Multiplicador = (Row("Multiplicador").ToString.ToEntero)
Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, ConceptoContable, ObjFactura.Cliente.Nombre, $"{ObjFactura.Serie}-{ObjFactura.Folio}", "")
Select Case ConceptoContable
Case 12 'Nota de Credito
If ObjFactura.TipoDocto.Contiene("Egs", "Dev") Then
importeMovimiento = ObjFactura.Total * ValorMultiplicador
importeMX = importeMovimiento * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
If importeMovimiento <> 0 Then
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), CveSubProyecto:=DdlSubProyecto.SelectedValue.ToEntero) Then
ErrorPrepoliza = True
Else
ViewState("SeGuardoPrePoliza") = True
End If
End If
importeMovimiento = 0
End If
Case 1 'Cliente
If ObjFactura.TipoDocto <> "Egs" Then
importeMovimiento = (ObjFactura.Total) * ValorMultiplicador
importeMX = importeMovimiento * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
If tipoCambio > 1 Then
If importeMovimiento <> 0 Then
importeMX = importeMovimiento
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, importeMovimiento * tipoCambio - importeMovimiento, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento)) Then
ErrorPrepoliza = True
End If
End If
End If
End If
Case 4 'Venta Clasificacion
If ObjFactura.TipoDocto <> "Ant" Then
DT = TmpDTDetalle.FiltraParametros($"CvePS <> {0}", "", {"CveClasificacion", "CveSubProyecto"})
If DT.Rows.Count > 0 Then
'Se agrega movimiento separado por la cuenta de ventas (ER)
For Each Row2 As DataRow In DT.Rows
importeMovimiento = (TmpDTDetalle.SUM("Total", String.Format("CveClasificacion = {0} AND CveSubProyecto = {1}", Row2("CveClasificacion"), Row2("CveSubProyecto"))).ToString.ToDecimal) * ValorMultiplicador
importeMX = importeMovimiento * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
Concepto = $"{ViewState("VentaFolio").ToString} {If(Row2("CveClasificacion").ToString.ToEntero > 0, GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString}"), "")} - {If(Row2("CveSubProyecto").ToString.ToEntero > 0, GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa).FiltroPrimeroValor("SubProyecto", $"CveSubProyecto = {Row2("CveSubProyecto").ToString}"), "Sin SubProyecto Asignado")}"
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
If importeMovimiento <> 0 Then
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString.ToEntero, CveSubProyecto:=Row2("CveSubProyecto").ToString.ToEntero, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento)) Then
ErrorPrepoliza = True
Else
ViewState("SeGuardoPrePoliza") = True
End If
End If
Next
End If
End If
importeMovimiento = 0
Case 8 'Ret IVA por Trasladar
If Not ObjFactura.TipoDocto.Contiene("Rem") Then
importeMovimiento = ObjFactura.RetIVA * ValorMultiplicador
importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
End If
Case 9 'Ret ISR por Trasladar
If Not ObjFactura.TipoDocto.Contiene("Rem") Then
importeMovimiento = ObjFactura.RetISR * ValorMultiplicador
importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
End If
Case 13 'Iva por Trasladar
importeMovimiento = ObjFactura.IVA * ValorMultiplicador
importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador
FechaMovimiento = ObjFactura.FechaPago
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
Case 38 'IEPS por Trasladar
If Not ObjFactura.TipoDocto.Contiene("Rem") Then
importeMovimiento = ObjFactura.IEPS * ValorMultiplicador
importeMX = Math.Round(importeMovimiento * tipoCambio * Multiplicador, 2)
FechaMovimiento = ObjFactura.Fecha
If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}"
End If
End Select
If importeMovimiento <> 0 Then
If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, importeMX, ConceptoContable, Referencia, Concepto, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento)) Then
ErrorPrepoliza = True
Else
ViewState("SeGuardoPrePoliza") = True
End If
End If
Next
End If
Return ErrorPrepoliza
End Function
Private Sub GeneraPDFFactura(EnviaCorreo As Boolean)
Dim Archivo As New System.IO.FileInfo(String.Format("{0}Formatos/Factura.rdlc", UsuarioActual.Empresa.Ruta))
Dim Archivo2 As New System.IO.FileInfo(String.Format("{0}Formatos/Remision.rdlc", UsuarioActual.Empresa.Ruta))
'CASO NORMAL NEW
'If Archivo.Exists Or Archivo2.Exists Then
' MensajeAlert.AppendFormat("
", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1", ObjFactura.CveVenta)))
'Else
' MensajeAlert.Append("Ocurrió un error al generar el PDF. Por favor vuelva a entrar a la factura para imprimir el PDF. ")
'End If
Dim pdf As Byte() = Nothing
'GUARDA PDF
Dim LocalSerieFolio As String = String.Empty
Dim LocalTipoDocto As String = String.Empty
'TIMBRADO NUEVO
Try
pdf = PdfFactura(ObjFactura)
Catch ex As Exception
Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia)
End Try
LocalSerieFolio = ObjFactura.SerieFolio
LocalTipoDocto = ObjFactura.TipoDocto
End Sub
#End Region
#End Region
#Region "SELECTED INDEX CHANGE"
Protected Sub DdlProyecto_SelectedIndexChanged(sender As Object, e As EventArgs)
CargarSubProyecto(DdlSubProyecto, DdlProyecto.SelectedValue)
End Sub
#End Region
End Class