1136 lines
58 KiB
VB.net
1136 lines
58 KiB
VB.net
Option Strict On
|
|
Imports Extensiones
|
|
Imports System.Data
|
|
Imports System.IO
|
|
Partial Class Contratos_FacturacionMasiva
|
|
Inherits ClsPaginas
|
|
|
|
#Region "Propiedades"
|
|
Private ReadOnly Property SeGuardoPrePoliza As Boolean
|
|
Get
|
|
Return CBool(ViewState("SeGuardoPrePoliza"))
|
|
End Get
|
|
End Property
|
|
Private Property DTCicloComercial As DataTable
|
|
Get
|
|
Return CType(ViewState("DTCicloComercial"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("DTCicloComercial") = value
|
|
End Set
|
|
End Property
|
|
Private Property FolioVigentes As Boolean
|
|
Get
|
|
Return CType(ViewState("FolioVigentes"), Boolean)
|
|
End Get
|
|
Set(value As Boolean)
|
|
ViewState("FolioVigentes") = value
|
|
End Set
|
|
End Property
|
|
|
|
Private Property Mensaje As String
|
|
Get
|
|
Return CType(ViewState("Mensaje"), String)
|
|
End Get
|
|
Set(value As String)
|
|
ViewState("Mensaje") = value
|
|
End Set
|
|
End Property
|
|
Private Property ErrorList As List(Of String)
|
|
Get
|
|
Return CType(ViewState("ErrorList"), List(Of String))
|
|
End Get
|
|
Set(value As List(Of String))
|
|
ViewState("ErrorList") = value
|
|
End Set
|
|
End Property
|
|
Private Property DTDetalle As DataTable
|
|
Get
|
|
Return CType(ViewState("DTDetalle"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("DTDetalle") = value
|
|
End Set
|
|
End Property
|
|
Private Property TmpDT As DataTable
|
|
Get
|
|
Return CType(ViewState("TmpDT"), DataTable)
|
|
End Get
|
|
Set(value As DataTable)
|
|
ViewState("TmpDT") = value
|
|
End Set
|
|
End Property
|
|
Private Property MensajeAlert As StringBuilder
|
|
Get
|
|
Return CType(ViewState("MensajeAlert"), StringBuilder)
|
|
End Get
|
|
Set(value As StringBuilder)
|
|
ViewState("MensajeAlert") = value
|
|
End Set
|
|
End Property
|
|
Private Property ObjFactura As Modelos.Factura
|
|
Get
|
|
Return CType(ViewState("ObjFactura"), Modelos.Factura)
|
|
End Get
|
|
Set(value As Modelos.Factura)
|
|
ViewState("ObjFactura") = value
|
|
End Set
|
|
End Property
|
|
Private Property CveCicloComercial As Integer
|
|
Get
|
|
Return ViewState("CveCicloComercial").ToString.ToEntero
|
|
End Get
|
|
Set(value As Integer)
|
|
ViewState("CveCicloComercial") = value
|
|
End Set
|
|
End Property
|
|
|
|
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()
|
|
Dim FechaRef = DateTime.Now
|
|
txtFechaI.Text = $"01/{FechaRef.Month}/{FechaRef.Year}"
|
|
txtFechaF.Text = txtFechaI.Text.ToDate().AddMonths(1).ToString("dd/MM/yyyy")
|
|
CargaDatos(-1, -1)
|
|
CreaDTVentas()
|
|
Mensaje = ""
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub CargaCombos()
|
|
DdlCliente.DataSource = GlobalDTCliente(UsuarioActual.CveEmpresa)
|
|
DdlCliente.DataBind()
|
|
DdlContrato.DataSource = GlobalDTContratos().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
|
|
Try
|
|
If ObjContratos.CicloComercialGet(CveContrato, CveCliente, -1, UsuarioActual.CveEmpresa, txtFechaI.Text.ToDateTime, txtFechaF.Text.ToDateTime, DdlSucursal.SelectedValue.ToEntero) Then
|
|
DTCicloComercial = ObjContratos.DtResultados.Clone
|
|
|
|
For Each Row As DataRow In ObjContratos.DtResultados().FiltraParametros($"FueFacturado = 0").Rows
|
|
|
|
If Row("Observaciones").ToString().Contains("{DIA}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{DIA}", DateTime.Now.Day.ToString())
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{MES}") Then
|
|
Dim fecha As DateTime = DateTime.Now
|
|
Dim formatoFecha = Globalization.CultureInfo.CurrentCulture.DateTimeFormat
|
|
Dim nombreMes = formatoFecha.GetMonthName(fecha.Month).ToUpper()
|
|
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{MES}", nombreMes)
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{AÑO}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{AÑO}", DateTime.Now.Year.ToString())
|
|
End If
|
|
|
|
If Row("Observaciones").ToString().Contains("{TC}") Then
|
|
Row("Observaciones") = Row("Observaciones").ToString().Replace("{TC}", GlobalTipoCambio(Now).FormatoNumero)
|
|
End If
|
|
|
|
DTCicloComercial.Rows.Add(Row.ItemArray)
|
|
Next
|
|
|
|
|
|
End If
|
|
Catch ex As Exception
|
|
DTCicloComercial = Nothing
|
|
OnError("Ocurrió un error al obtener las facturas a realizar", ex)
|
|
End Try
|
|
ObjContratos.Dispose()
|
|
|
|
GvCiclosComerciales.DataSource = DTCicloComercial
|
|
GvCiclosComerciales.DataBind()
|
|
UpGv.Update()
|
|
End Sub
|
|
|
|
Private Sub ValidaFolio()
|
|
Dim ObjFolios As New ClsGralFolios
|
|
If ObjFolios.GetFolios("Ing", UsuarioActual.CveEmpresa) Then
|
|
If ObjFolios.DtResultados.Rows.Count > 0 Then
|
|
FolioVigentes = True
|
|
End If
|
|
End If
|
|
|
|
ObjFolios.Dispose()
|
|
End Sub
|
|
Protected Sub GvCiclosComerciales_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvCiclosComerciales.RowDataBound
|
|
If e.Row.RowType = DataControlRowType.DataRow Then
|
|
'' Pendiente de aplicar validacion
|
|
If Not FolioVigentes Then
|
|
e.Row.FCCheckBox("chkDis").Enabled = False
|
|
e.Row.FCCheckBox("chkDis").ToolTip = "La sucursal vinculada con este contrato no tiene folios"
|
|
End If
|
|
End If
|
|
End Sub
|
|
|
|
Protected Sub btnConsultar_Click(sender As Object, e As EventArgs) Handles BtnCargaAsignados.Click
|
|
Dim CveContrato As Integer = If(DdlContrato.SelectedValue.ToEntero <= 0, -1, DdlContrato.SelectedValue.ToEntero)
|
|
Dim CveCliente As Integer = If(DdlCliente.SelectedValue.ToEntero <= 0, -1, DdlCliente.SelectedValue.ToEntero)
|
|
|
|
CargaDatos(CveContrato, CveCliente)
|
|
RegistraScript("$('#ex').removeClass('expand');$('#ex').addClass('collapse');$('.portlet-body').css('display', '');")
|
|
End Sub
|
|
|
|
Protected Sub ImgFacturarTodos_Click(sender As Object, e As EventArgs) Handles 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 Resp = EmitirImprimir(row.DataKey("CveCicloComercial").ToString.ToEntero)
|
|
|
|
For Each Msg In Resp.Mensajes
|
|
sb.AppendFormat("{0}</br></br>", 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: </br></br> {sb.ToString()}")
|
|
Else
|
|
Alert("No se generaron facturas", TipoMensaje.MsgAdvertencia)
|
|
End If
|
|
|
|
Dim CveContrato As Integer = If(DdlContrato.SelectedValue.ToEntero <= 0, -1, DdlContrato.SelectedValue.ToEntero)
|
|
Dim CveCliente As Integer = If(DdlCliente.SelectedValue.ToEntero <= 0, -1, DdlCliente.SelectedValue.ToEntero)
|
|
|
|
CargaDatos(CveContrato, CveCliente)
|
|
RegistraScript("$('#divAgregar').modal('hide')")
|
|
UpBodyEstatus.Update()
|
|
End Sub
|
|
|
|
Protected Sub btnFacturarAqui_Click(sender As Object, e As EventArgs)
|
|
EjecutarFacturacion()
|
|
End Sub
|
|
|
|
Private Function EmitirImprimir(pCveCicloComercial As Integer) As Modelos.Factura.MMensajeFactura
|
|
Dim Resp As New Modelos.Factura.MMensajeFactura
|
|
ViewState("CveCicloComercial") = pCveCicloComercial
|
|
CreaObjetosVenta()
|
|
|
|
If ObjFactura Is Nothing Or ObjFactura.Cliente Is Nothing Then
|
|
Alert("Ocurrió un error al procesar los datos de la Venta.", TipoMensaje.MsgError)
|
|
ObjFactura = Nothing
|
|
Return Resp
|
|
End If
|
|
|
|
|
|
If ObjFactura.CveCliente > 0 Then
|
|
If ObjFactura.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("<br/>La {0}: <b>{1}</b> se generó correctamente.<br/><br/>", 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("<ul><li><a class=""Texto"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar XML</a></li></ul>", 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.</b> 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(Optional VistaPrevia As Boolean = False)
|
|
|
|
Dim CveProyecto As String = ""
|
|
Dim CveSubProyecto As String = ""
|
|
Dim Proyecto As String = ""
|
|
Dim SubProyecto As String = ""
|
|
|
|
ObjFactura = New Modelos.Factura(UsuarioActual)
|
|
ObjFactura.DirectorioServidor = Server.MapPath("/")
|
|
ObjFactura.CveCicloComercial = CveCicloComercial
|
|
|
|
Dim DR As DataRow = DTCicloComercial.FiltroPrimero($"CveCicloComercial = {CveCicloComercial}")
|
|
|
|
ObjFactura.Version = "3.3"
|
|
ObjFactura.CveUsuario = UsuarioActual.CveUsuario
|
|
ObjFactura.CveEmpresa = UsuarioActual.CveEmpresa
|
|
ObjFactura.TipoCambio = 1
|
|
ObjFactura.ConvertirPesos = False
|
|
ObjFactura.CveMoneda = DR("CveMoneda").ToString.ToEntero
|
|
ObjFactura.Moneda = GlobalDTMonedas.FiltroPrimeroValor("Moneda", $"CveMoneda = {ObjFactura.CveMoneda} ")
|
|
ObjFactura.MonedaSAT = GlobalDTMonedas.FiltroPrimeroValor("AbreviaturaSAT", $"CveMoneda = {DR("CveMoneda").ToString.ToEntero}")
|
|
ObjFactura.TipoDocto = "Ing"
|
|
ObjFactura.RefDocto = ""
|
|
ObjFactura.Folio = -1
|
|
ObjFactura.Serie = "-1"
|
|
ObjFactura.CveMesa = -1
|
|
ObjFactura.Fecha = DR("FechaVenc").ToString.ToDate
|
|
ObjFactura.CvePrePoliza = -1
|
|
ObjFactura.CveMetodoPago = 1
|
|
ObjFactura.MetodoPago = "Efectivo"
|
|
ObjFactura.FechaPago = DateTime.Today
|
|
ObjFactura.MotivoDescuento = ""
|
|
ObjFactura.Observaciones = 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
|
|
|
|
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)
|
|
|
|
For Each row As DataRow In DTDetalle.Rows
|
|
Dim drPS As DataRow = GlobalDTPS(UsuarioActual.CveEmpresa, CvePS:=row("CvePS").ToString().ToEntero()).FiltroPrimero("")
|
|
|
|
DtR = TmpDT.NewRow
|
|
DtR("CveVenta") = -1
|
|
DtR("Codigo") = row("Codigo")
|
|
DtR("Consec") = TmpDT.Rows.Count + 1
|
|
DtR("Cantidad") = row("CantidadContratada")
|
|
DtR("CveUM") = row("CveUM")
|
|
DtR("UM") = row("UM")
|
|
DtR("SATClaveUM") = row("SATClaveUM")
|
|
DtR("CveClasificacion") = row("CveClasificacion")
|
|
DtR("Clasificacion") = row("Clasificacion")
|
|
DtR("CvePS") = row("CvePS")
|
|
DtR("PS") = row("PS")
|
|
DtR("CodigoPS") = row("CodigoPS")
|
|
DtR("SATClaveProdServ") = row("SATClaveProdServ")
|
|
DtR("NoIdentificacion") = row("NoIdentificacion")
|
|
DtR("CveTipoPS") = drPS("CveTipoPS")
|
|
DtR("CveTipoInvPS") = drPS("Inv_CveMetodoInventario")
|
|
DtR("Obs") = TxtObservaciones.Text + " " + row("Observacion").ToString
|
|
DtR("PU") = row("PU")
|
|
DtR("IVA") = row("PorcentajeIVA")
|
|
DtR("PorcentajeIVA") = row("PorcentajeIVA")
|
|
DtR("ImporteIVA") = row("ImporteIVA")
|
|
DtR("PorcentajeIEPS") = row("PorcentajeIEPS")
|
|
DtR("ImporteIEPS") = row("ImporteIEPS")
|
|
DtR("PorcentajeRetIVA") = row("PorcentajeRetIVA")
|
|
DtR("ImporteRetIVA") = row("ImporteRetIVA")
|
|
DtR("PorcentajeRetISR") = row("PorcentajeRetISR")
|
|
DtR("ImporteRetISR") = row("ImporteRetISR")
|
|
DtR("Descuento") = 0
|
|
DtR("TipoDescuento") = 0
|
|
DtR("CveProyecto") = CveProyecto
|
|
DtR("Proyecto") = Proyecto
|
|
DtR("CveSubProyecto") = CveSubProyecto
|
|
DtR("SubProyecto") = SubProyecto
|
|
DtR("CveVentaDetalle") = 0
|
|
DtR("CveContratoDetalle") = row("CveContratoDetalle")
|
|
DtR("CuentaPredial") = row("CuentaPredial")
|
|
DtR("TotalImporte") = row("Total")
|
|
|
|
TmpDT.Rows.Add(DtR)
|
|
Next
|
|
|
|
|
|
'DETALLES
|
|
ObjFactura.DtDetalle = TmpDT
|
|
|
|
'CLIENTE
|
|
ObjFactura.CveCliente = DR("CveCliente").ToString.ToEntero
|
|
ObjFactura.SetCliente()
|
|
|
|
|
|
Dim ObjCliente As New ClsClientes()
|
|
If ObjCliente.GetClientes(DR("CveCliente").ToString.ToEntero, "-1", "-1", "-1", "-1", "-1", "-1", -1, UsuarioActual.CveEmpresa, -1, TipoCliente:=-1) Then
|
|
If ObjCliente.DtResultados.Rows.Count > 0 Then
|
|
ObjFactura.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.<br />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.<br />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.<br />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.<br />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:<br><br>"
|
|
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("<br>" & 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("<br>" & 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("<ul><li><a class=""Texto"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar PDF</a></li></ul><br/>", 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
|