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 = Now.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.ToDouble, TxtPrecio.Text.ToDouble, 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.ToDouble, 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 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 = Now.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 = 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 = -1 Dim CveSubProyecto = 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.ToDouble, Row("CveUM").ToString.ToEntero, Row("PU").ToString.ToDouble(If(ObjFactura.ConvertirPesos, factura.TipoCambio, 1)), Row("IVA").ToString.ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1)), Math.Round((Row("Total").ToString.ToDouble(If(factura.ConvertirPesos, factura.TipoCambio, 1)) * (1 + Row("IVA").ToString.ToDouble(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.ToDouble, ImporteRetIVA:=Row("ImporteRetIVA").ToString.ToDouble, ImporteRetISR:=Row("ImporteRetISR").ToString.ToDouble, PorcentajeIEPS:=Row("PorcentajeIEPS").ToString.ToDouble, PorcentajeRetIVA:=Row("PorcentajeRetIVA").ToString.ToDouble, PorcentajeRetISR:=Row("PorcentajeRetISR").ToString.ToDouble) 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 = 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