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 Private ReadOnly Property IdCtaContRetIVA As Integer Get Return ViewState("IdCtaContRetIVA").ToString.ToEntero End Get End Property Private ReadOnly Property CveCuentaRetIVA As Integer Get Return ViewState("CveCuentaRetIVA").ToString.ToEntero End Get End Property Private ReadOnly Property IdCtaContRetISR As Integer Get Return ViewState("IdCtaContRetISR").ToString.ToEntero End Get End Property Private ReadOnly Property CveCuentaRetISR As Integer Get Return ViewState("CveCuentaRetISR").ToString.ToEntero End Get 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() txtFechaI.Text = DateTime.Today.ToString("d") txtFechaF.Text = DateTime.Today.ToString("d") CargaDatos(-1, -1) CreaDTVentas() Mensaje = "" End If End Sub Private Sub CargaCombos() DdlCliente.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa) DdlCliente.DataBind() DdlContrato.DataSource = GlobalDTContratos().FiltraParametros($"CveEmpresa = {UsuarioActual.CveEmpresa}") DdlContrato.DataBind() DdlSucursal.DataSource = GlobalDTSubProyectos(-1, -1, UsuarioActual.CveEmpresa, 1) DdlSucursal.DataBind() End Sub Private Sub CargaDatos(CveContrato As Integer, CveCliente As Integer) ValidaFolio() Dim ObjContratos As New ClsContratos If ObjContratos.CicloComercialGet(CveContrato, CveCliente, -1, UsuarioActual.CveEmpresa, txtFechaI.Text.ToDateTime, txtFechaF.Text.ToDateTime, DdlSucursal.SelectedValue.ToEntero) Then DTCicloComercial = ObjContratos.DtResultados().FiltraParametros($"FueFacturado = 0") GvCiclosComerciales.DataSource = DTCicloComercial End If ObjContratos.Dispose() 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 CargaDatos(DdlContrato.SelectedValue.ToEntero, DdlCliente.SelectedValue.ToEntero) RegistraScript("$('#ex').removeClass('expand');$('#ex').addClass('collapse');$('.portlet-body').css('display', '');") End Sub Protected Sub ImgFacturarTodos_Click(sender As Object, e As EventArgs) Handles BtnFacturar.Click EjecutarFacturacion() End Sub Private Sub EjecutarFacturacion() Dim FacturadoCorrecto = True Dim sb As New StringBuilder() For Each row As GridViewRow In GvCiclosComerciales.Rows If row.FCCheckBox("chkDis").Checked Then Dim fecha As DateTime = DateTime.Now ', row.DataKey("FechaVenc").ToString.ToDateTime() Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat Dim nombreMes = formatoFecha.GetMonthName(fecha.Month).ToUpper() Dim Etiqueta As String = String.Format("{0} - {1}", nombreMes, fecha.Year) Dim Resp = EmitirImprimir(row.DataKey("CveCicloComercial").ToString.ToEntero, Etiqueta) For Each Msg In Resp.Mensajes sb.AppendFormat("{0}

", Msg) Next 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:

{sb.ToString()}") Else Alert("No se generaron facturas", TipoMensaje.MsgAdvertencia) End If CargaDatos(DdlContrato.SelectedValue.ToEntero, DdlCliente.SelectedValue.ToEntero) RegistraScript("$('#divAgregar').modal('hide')") UpBodyEstatus.Update() End Sub Protected Sub btnFacturarAqui_Click(sender As Object, e As EventArgs) EjecutarFacturacion() End Sub Private Function EmitirImprimir(pCveCicloComercial As Integer, Etiqueta As String) As Modelos.Factura.MMensajeFactura Dim Resp As New Modelos.Factura.MMensajeFactura ViewState("CveCicloComercial") = pCveCicloComercial CreaObjetosVenta(Etiqueta) 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 Resp End If If ObjFactura.CveCliente > 0 Then If DTDetalle.Rows.Count > 0 Then Resp = ObjFactura.EmitirFactura() 'Dim ObjVentas As New ClsVentas() 'Dim ObjConta As New ClsContabilidad(ObjVentas.IniciaTransacSQL()) 'Dim ObjInventario As New ClsInventarios(ObjVentas.IniciaTransacSQL()) 'Dim ObjContr As New ClsContratos(ObjVentas.IniciaTransacSQL()) 'Dim ObjOS As New ClsOS(ObjVentas.IniciaTransacSQL()) 'Dim ObjBancos As New ClsBancos(ObjVentas.IniciaTransacSQL()) 'Dim ObjClientes As New ClsClientes(ObjVentas.IniciaTransacSQL()) 'Dim ObjContPaq As ClsContPAQi = Nothing ''Dim ObjFolios As New ClsGralFolios(ObjVentas.IniciaTransacSQL()) 'ErrorList = New List(Of String) 'MensajeAlert = New StringBuilder ''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 pCveCicloComercial > 0 AndAlso ErrorList.Count = 0 Then ' If Not ObjContr.CicloComercialUpdate(pCveCicloComercial, True, UsuarioActual.CveEmpresa) Then ' ErrorList.Add("No se pudo actualizar ") ' End If 'End If 'If ObjFactura.CveVenta > 0 AndAlso ErrorList.Count = 0 AndAlso (SeGuardoPrePoliza Or ObjFactura.TipoDocto.Contiene("Ped", "Cot")) Then ' ObjVentas.Commit() ' If ObjContPaq IsNot Nothing Then ObjContPaq.Commit() ' ViewState("CveVenta") = ObjFactura.CveVenta ' Dim SeTimbro As Boolean = False ' 'TIMBRADO Y CASO ESPECIAL NOTA DE CREDITO ' 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 ' 'MENSAJE PRINCIPAL ' MensajeAlert.AppendFormat(String.Format("
La {0}: {1} se generó correctamente.

", ObjFactura.TipoDocumento, ObjFactura.SerieFolio)) ' If SeTimbro Then ' 'XML ' Dim ArchivoXML = String.Format("{0}/XML/{1}/{2}.xml", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio) ' If File.Exists(ArchivoXML) Then ' MensajeAlert.AppendFormat("", Encripta(String.Format("OP=FactVta&CVEVENTA={0}&EXT={1}&SERIEFOLIO={2}&TIPODOCTO={3}", ObjFactura.CveVenta, "XML", ObjFactura.SerieFolio, ObjFactura.TipoDocto))) ' End If ' 'IMPRESION ' 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 ' 'MUESTA ALERT OK ' Dim Liga = If(UsuarioActual.CveRol = 1165, "document.location.href=""/Ventas/Ventas.aspx?CveVenta=-1"";", $"document.location.href=""/Ventas/Clientes.aspx?CveCliente={ObjFactura.CveCliente}&Opt=3"";") ' retorno = True ' ObjFactura = Nothing ' Else ' ObjVentas.RollBack() ' If ObjContPaq IsNot Nothing Then ObjContPaq.RollBack() ' For Each ErrorItem In ErrorList ' Alert(ErrorItem, TipoMensaje.MsgAdvertencia) ' Next ' 'MUESTA ALERT ERROR ' Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) ' End If ' ObjVentas.Dispose() ' ObjConta.Dispose() ' ObjInventario.Dispose() ' ObjContr.Dispose() ' ErrorList = Nothing ' MensajeAlert = Nothing ' If ObjContPaq IsNot Nothing Then ObjContPaq.Dispose() 'Else ' ObjVentas.RollBack() ' If ObjContPaq IsNot Nothing Then ObjContPaq.RollBack() ' For Each ErrorItem In ErrorList ' Alert(ErrorItem, TipoMensaje.MsgAdvertencia) ' Next ' 'MUESTA ALERT ERROR ' Alert("Ocurrió un error al procesar los datos. Por favor rectifique y vuelta a intentar.", TipoMensaje.MsgError) ' ObjVentas.Dispose() ' ObjConta.Dispose() ' ObjInventario.Dispose() ' ObjContr.Dispose() ' 'ObjFolios.Dispose() ' ErrorList = Nothing ' MensajeAlert = Nothing ' If ObjContPaq IsNot Nothing Then ObjContPaq.Dispose() 'End If Else Mensaje = "No se pudo completar facturación por que no se encontraron partidas " End If End If TmpDT.Clear() Return Resp 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("IdCtaContVentas", GetType(Integer)) TmpDT.Columns.Add("AplicaParaConcepto", GetType(Boolean)) TmpDT.Columns.Add("CveProyecto", GetType(Integer)) TmpDT.Columns.Add("Proyecto", GetType(String)) TmpDT.Columns.Add("CveSubProyecto", GetType(Integer)) TmpDT.Columns.Add("SubProyecto", GetType(String)) TmpDT.Columns.Add("CveVentaDetallePadre", GetType(Integer)) '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(Etiqueta As String, Optional VistaPrevia As Boolean = False) Dim ObjFolios As New ClsGralFolios() Dim Folio As String = "" Dim Serie As String = "" 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 = 20 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 = Folio.ToEntero 'ObjFactura.Folio = If(ExFolioFactura, FolioXML.ToEntero, -1) ObjFactura.Serie = Serie ObjFactura.CveMesa = -1 ObjFactura.Fecha = DR("FechaVenc").ToString.ToDate ObjFactura.CvePrePoliza = -1 ObjFactura.CveMetodoPago = 1 ObjFactura.MetodoPago = "Efectivo" ObjFactura.FechaPago = DateTime.Today ObjFactura.MotivoDescuento = "" ObjFactura.Observaciones = Etiqueta + " " + 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.FormaPago = 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 If ObjFolios.GetFolios("Ing", UsuarioActual.CveEmpresa) Then Dim DT As DataTable = ObjFolios.DtResultados.FiltraParametros(String.Format($" Estado = 'Activo' AND CveSubProyecto = {CveSubProyecto} ")) If DT.Rows.Count > 0 Then Serie = DT.Rows(0)("Serie").ToString Folio = DT.Rows(0)("FActual").ToString End If DT.Dispose() End If ObjFolios.Dispose() Dim objContratos As New ClsContratos If objContratos.GetContratosDetalle(DR("CveContrato").ToString.ToEntero) Then DTDetalle = objContratos.DtResultados Else DTDetalle = Nothing End If objContratos.Dispose() Dim DtR As DataRow ObjFactura.SubTotal = SUM(DTDetalle, "Total").ToDecimal ObjFactura.IVA = SUM(DTDetalle, "ImporteIVA").ToDecimal ObjFactura.RetIVA = SUM(DTDetalle, "ImporteRetIVA").ToDecimal ObjFactura.RetISR = SUM(DTDetalle, "ImporteRetISR").ToDecimal ObjFactura.IEPS = SUM(DTDetalle, "ImporteIEPS").ToDecimal ObjFactura.Total = ObjFactura.SubTotal + ObjFactura.IVA + ObjFactura.IEPS - (ObjFactura.RetIVA + ObjFactura.RetISR) ObjFactura.Serie = Serie ObjFactura.Folio = Folio.ToEntero 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") = Etiqueta + " " + 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.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}") ViewState("IdCtaContRetIVA") = ObjCliente.IdCtaContRetIVA ViewState("CveCuentaRetIVA") = ObjCliente.CveCuentaRetIVA ViewState("IdCtaContRetISR") = ObjCliente.IdCtaContRetISR ViewState("CveCuentaRetISR") = ObjCliente.CveCuentaRetISR End If End If ObjCliente.Dispose() '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.FechaCP 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 '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 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("Contratos/FacturacionMasiva", 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.CveMesa, 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 TxtObservaciones.Text.Trim <> "" Then Observacion = $"{Observacion} {TxtObservaciones.Text}" End If 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 GuardarContratoAvanceEstimaciones(ObjVentas, factura, ErrorList, 1) 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 IdCtaContable As Integer Dim CveCuenta As Integer Dim IdCtaContableCliente As Integer 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 'Dim CveIEPago As Integer ' Dim FolioIE As Long 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 IdCtaContable = 0 CveCuenta = 0 Multiplicador = (Row("Multiplicador").ToString.ToEntero) Concepto = ObjConta.ObtenerConceptoEmpresa(UsuarioActual.CveEmpresa, ConceptoContable, ObjFactura.Cliente.Nombre, $"{ObjFactura.Serie}-{ObjFactura.Folio}", "") Dim PorcentajeImpuesto As Decimal = 0 Select Case ConceptoContable 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 IdCtaContable = ObjFactura.Cliente.IdCtaContClientes Else IdCtaContable = ObjFactura.Cliente.IdCtaContComplementaria If importeMovimiento <> 0 AndAlso IdCtaContable > 0 Then importeMX = importeMovimiento If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, 0, Referencia, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMovimiento * tipoCambio - importeMovimiento, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento)) Then ErrorPrepoliza = True End If End If IdCtaContable = ObjFactura.Cliente.IdCtaContMonedaExtranjera End If IdCtaContableCliente = IdCtaContable 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)}" IdCtaContable = GlobalDTClasificaciones(ObjFactura.CveEmpresa).FiltroPrimeroValor("IdCuentaIngresos", String.Format("CveClasificacion = {0}", Row2("CveClasificacion"))).ToEntero If importeMovimiento <> 0 Then If IdCtaContable <= 0 Then CuentasContablesInvalidas.Append("
" & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString + GlobalDTClasificaciones(UsuarioActual.CveEmpresa).FiltroPrimeroValor("Clasificacion", $"CveClasificacion = {Row2("CveClasificacion").ToString}")) idCuentaContabilizacion = 0 End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, ConceptoContable, Concepto, ObjFactura.Fecha, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, CveClasificacion:=Row2("CveClasificacion").ToString.ToEntero, CveSubProyecto:=Row2("CveSubProyecto").ToString.ToEntero, ImporteMX:=importeMX, 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)}" 'Contabilidad ContPAQ If IdCtaContRetIVA > 0 Then IdCtaContable = IdCtaContRetIVA Else If ObjConta.GetRetCuenta(ConceptoContable, ObjFactura.CveEmpresa) Then If ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCuentaRetIVACirculacion").ToString.ToEntero End If End If End If 'Contabilidad SIG If CveCuentaRetIVA > 0 Then CveCuenta = CveCuentaRetIVA Else If ObjConta.GetRetCuenta(ConceptoContable, ObjFactura.CveEmpresa) Then If ObjConta.DtResultados.Rows.Count > 0 Then CveCuenta = ObjConta.DtResultados.Rows(0)("IdCuentaRetIVACirculacionSIG").ToString.ToEntero End If End If End If 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)}" 'Contabilidad ContPAQ If IdCtaContRetISR > 0 Then IdCtaContable = IdCtaContRetISR Else If ObjConta.GetRetCuenta(ConceptoContable, ObjFactura.CveEmpresa) Then If ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCuentaRetISRCirculacion").ToString.ToEntero End If End If End If 'Contabilidad SIG If CveCuentaRetISR > 0 Then CveCuenta = CveCuentaRetISR Else If ObjConta.GetRetCuenta(ConceptoContable, ObjFactura.CveEmpresa) Then If ObjConta.DtResultados.Rows.Count > 0 Then CveCuenta = ObjConta.DtResultados.Rows(0)("IdCuentaRetISRCirculacionSIG").ToString.ToEntero End If End If End If End If Case 13 'Iva por Trasladar importeMovimiento = ObjFactura.IVA * ValorMultiplicador importeMX = Math.Round(importeMovimiento, 2) * tipoCambio * Multiplicador FechaMovimiento = ObjFactura.FechaPago IdCtaContable = UsuarioActual.Empresa.IdCuentaIVAxTrasladar If tipoCambio > 1 Then Concepto += $" TC:{tipoCambio} ${importeMovimiento.FormatoNumero(2)}" PorcentajeImpuesto = TmpDTDetalle.MAX("PorcentajeIVA").ToDecimal 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)}" If importeMovimiento > 0 AndAlso ObjConta.GetRetCuenta(ConceptoContable, ObjFactura.CveEmpresa) Then If ObjConta.DtResultados.Rows.Count > 0 Then IdCtaContable = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxTrasladar").ToString.ToEntero CveCuenta = ObjConta.DtResultados.Rows(0)("IdCuentaIEPSxTrasladarSIG").ToString.ToEntero End If End If PorcentajeImpuesto = TmpDTDetalle.MAX("PorcentajeIEPS").ToDecimal End If End Select If importeMovimiento <> 0 Then If IdCtaContable <= 0 Then CuentasContablesInvalidas.Append("
" & GlobalDTContaConceptosContables(-1).FiltroPrimero(String.Format("CveConceptoContable = {0}", ConceptoContable))("ConceptoContable").ToString) idCuentaContabilizacion = 0 End If If Not ObjConta.AddPrePolizasDetalle(ObjFactura.CvePrePoliza, TipoMovimiento, importeMovimiento, Referencia, ConceptoContable, Concepto, FechaMovimiento, IdCtaContable, -1, CveVenta:=ObjFactura.CveVenta, CveCliente:=ObjFactura.CveCliente, CveIE:=CveIE, ImporteMX:=importeMX, ImporteME:=If(tipoCambio = 1, 0, importeMovimiento), PorcentajeImpuesto:=PorcentajeImpuesto) Then ErrorPrepoliza = True Else ViewState("SeGuardoPrePoliza") = True End If End If Next End If Return ErrorPrepoliza End Function Private Sub GeneraPDFFactura(EnviaCorreo As Boolean) 'If Not ImprimeAlert Then 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) ' File.WriteAllBytes(String.Format("{0}PDF/{1}/{2}.pdf", UsuarioActual.Empresa.Ruta, ObjFactura.TipoDocto, ObjFactura.SerieFolio), pdf) Catch ex As Exception Alert("Ocurrió un error al generar el PDF", TipoMensaje.MsgAdvertencia) End Try LocalSerieFolio = ObjFactura.SerieFolio LocalTipoDocto = ObjFactura.TipoDocto 'End If End Sub Private Sub GuardarContratoAvanceEstimaciones(ObjVentas As ClsVentas, factura As Modelos.Factura, ErrorList As List(Of String), Multiplicador As Integer, Optional CrearAvance As Boolean = False) If factura.CveContrato > 0 Then Dim ObjContratos As New ClsContratos(ObjVentas.IniciaTransacSQL()) Dim CveEstimacion As Integer = -1 If ObjContratos.AddEstimaciones(factura.CveContrato, factura.Fecha, -1, factura.CveVenta, "-1", UsuarioActual.CveUsuario, UsuarioActual.CveEmpresa) Then CveEstimacion = ObjContratos.DtResultados(0)("CveEstimacion").ToString.ToEntero For Each row As DataRow In TmpDT.Rows If Not ObjContratos.AddContratosAvance(row("CveContratoDetalle").ToString.ToEntero, row("Cantidad").ToString.ToEntero * Multiplicador, factura.Fecha, UsuarioActual.CveUsuario, CveEstimacion:=CveEstimacion) Then ErrorList.Add("Ocurrió un error al agregar los avances") End If Next Else ErrorList.Add("Ocurrió un error al agregar las estimaciones") End If End If End Sub End Class