Files
SIG/Ventas/FacturacionGlobal.aspx.vb

279 lines
13 KiB
VB.net

Option Explicit On
Option Strict On
Imports System.Data
Imports Extensiones
Partial Class Ventas_FacturacionGlobal
Inherits ClsPaginas
Private Property CveSubProyecto As Integer
Get
Return If(IsNothing(ViewState("CveSubProyecto")), -1, ViewState("CveSubProyecto").ToString().ToEntero())
End Get
Set(value As Integer)
ViewState("CveSubProyecto") = value
End Set
End Property
Private Property DtRemisiones As DataTable
Get
Return If(IsNothing(ViewState("DtRemisiones")), Nothing, CType(ViewState("DtRemisiones"), DataTable))
End Get
Set(value As DataTable)
ViewState("DtRemisiones") = value
End Set
End Property
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not Page.IsPostBack Then
CargaCombos()
End If
End Sub
#Region " C A R G A - D A T O S "
Public Sub CargaCombos()
DdlSubProyecto.DataSource = GlobalDTSubProyectosUsuarios(UsuarioActual.CveUsuario, -1, UsuarioActual.CveEmpresa)
DdlSubProyecto.DataBind()
DdlSubProyecto.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlPeriodo.DataSource = GlobalDTGralSATPeriodicidad()
DdlPeriodo.DataBind()
DdlPeriodo.Items.Insert(0, New ListItem("Seleccione", "-1"))
DdlMes.DataSource = GlobalDTGralSATMeses().FiltraParametros("ISNULL(CveSATPeriodicidad,0) <> 5")
DdlMes.DataBind()
DdlMes.Items.Insert(0, New ListItem("Seleccione", "-1"))
Dim Anio As Integer = Now.Year
Dim AnioAnterior As Integer = Now.Year - 1
DdlAnio.Items.Add(New ListItem(Anio.ToString(), Anio.ToString()))
DdlAnio.Items.Add(New ListItem(AnioAnterior.ToString(), AnioAnterior.ToString()))
txtFechaI.Text = Now.AddDays(-1).ToString("dd/MM/yyyy")
txtFechaF.Text = Now.ToString("dd/MM/yyyy")
End Sub
Protected Sub DdlPeriodo_SelectedIndexChanged(sender As Object, e As EventArgs)
If DdlPeriodo.SelectedValue = "5" Then
DdlMes.DataSource = GlobalDTGralSATMeses().FiltraParametros("ISNULL(CveSATPeriodicidad,0) = 5")
Else
DdlMes.DataSource = GlobalDTGralSATMeses().FiltraParametros("ISNULL(CveSATPeriodicidad,0) <> 5")
End If
DdlMes.DataBind()
DdlMes.Items.Insert(0, New ListItem("Seleccione", "-1"))
UPFiltros.Update()
End Sub
'Private Function CalculaFechas() As MFiltroPeriodicidad
' Dim Retorno As New MFiltroPeriodicidad()
' Dim Mes As String = GlobalDTGralSATMeses().FiltroPrimeroValor("Mes", $"CveSATMes = {DdlMes.SelectedValue}")
' Select Case DdlPeriodo.SelectedValue
' Case "1"
' Retorno.FechaI = DateTime.Now.AddDays(-1).Day.ToString() + "/" + Mes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = Retorno.FechaI.ToDate().AddDays(1).ToString("dd/MM/yyyy")
' Case "2"
' Retorno.FechaI = DateTime.Now.AddDays(-7).Day.ToString() + "/" + Mes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = Retorno.FechaI.ToDate().AddDays(7).ToString("dd/MM/yyyy")
' Case "3"
' If DateTime.Now.Day < 16 Then
' Retorno.FechaI = "01/" + Mes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = "15/" + Mes + "/" + DdlAnio.SelectedValue
' Else
' Dim LastDayOfMonth = DateTime.DaysInMonth(DdlAnio.SelectedValue.ToEntero(), DdlMes.SelectedValue.ToEntero())
' Retorno.FechaI = "16/" + Mes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = LastDayOfMonth.ToString() + "/" + Mes + "/" + DdlAnio.SelectedValue
' End If
' Case "4"
' Dim LastDayOfMonth = DateTime.DaysInMonth(DdlAnio.SelectedValue.ToEntero(), DdlMes.SelectedValue.ToEntero())
' Retorno.FechaI = "01/" + Mes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = LastDayOfMonth.ToString() + "/" + Mes + "/" + DdlAnio.SelectedValue
' Case "5"
' Dim LastDayOfMonth = DateTime.DaysInMonth(DdlAnio.SelectedValue.ToEntero(), DdlMes.SelectedValue.ToEntero())
' Dim PrimerMes = GlobalDTGralSATMeses().FiltroPrimeroValor("PrimerMes", $"CveSATMes = {DdlMes.SelectedValue}")
' Dim SegundoMes = GlobalDTGralSATMeses().FiltroPrimeroValor("SegundoMes", $"CveSATMes = {DdlMes.SelectedValue}")
' Retorno.FechaI = "01/" + PrimerMes + "/" + DdlAnio.SelectedValue
' Retorno.FechaF = LastDayOfMonth.ToString() + "/" + SegundoMes + "/" + DdlAnio.SelectedValue
' End Select
' Return Retorno
'End Function
Public Sub CargaDatos()
Me.CveSubProyecto = -1
If UsuarioActual.CveRol = 1 Then
GvDatos.Columns(7).Visible = True
End If
Dim CveCliente As Integer = -1 'UsuarioActual.Empresa.Funcionalidad(714).ToEntero()
Dim FechaI = If(IsDate(txtFechaI.Text.Trim()), txtFechaI.Text.Trim(), "-1")
Dim FechaF = If(IsDate(txtFechaF.Text.Trim()), txtFechaF.Text.Trim(), "-1")
Dim ObjVentas As New ClsVentas
If ObjVentas.GetRepRemisionesSinFacturar(FechaI, FechaF, "-1", DdlSubProyecto.SelectedValue, CveCliente, -1, "-1", UsuarioActual.CveEmpresa, CveUsuarioConsulta:=UsuarioActual.CveUsuario, ConsultaInventario:=False) Then
DtRemisiones = ObjVentas.DtResultados.FiltraParametros("CveVenta > 0 OR Folio IN ('Total Pesos')")
Me.CveSubProyecto = DdlSubProyecto.SelectedValue.ToEntero()
Else
DtRemisiones = Nothing
End If
ObjVentas.Dispose()
GvDatos.DataSource = DtRemisiones
GvDatos.DataBind()
UPDatos.Update()
End Sub
#End Region
Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs)
CargaDatos()
End Sub
Protected Sub GvDatos_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GvDatos.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
If e.Row.DBCampo("CveVenta").ToEntero() > 0 Then
If e.Row.DBCampo("Saldo").ToDecimal() > 0 Then
e.Row.FCCheckBox("chkDis").Enabled = False
e.Row.FCCheckBox("chkDis").ToolTip = "No se puede seleccionar esta remisión porque no ha sido pagada"
Else
e.Row.FCCheckBox("chkDis").Enabled = True
e.Row.FCCheckBox("chkDis").CssClass = "ChkAllEvt"
End If
Else
e.Row.FCCheckBox("chkDis").Visible = False
e.Row.CssClass = "Totales"
End If
End If
End Sub
Protected Sub BtnGuardar_Click(sender As Object, e As EventArgs)
Dim CveMoneda As Integer = 1
Dim SbRemisiones As New StringBuilder()
Dim RemisionesLista As New List(Of Integer)
For Each RowRem As GridViewRow In GvDatos.Rows
If RowRem.RowType = DataControlRowType.DataRow Then
If RowRem.FCCheckBox("chkDis").Checked Then
SbRemisiones.AppendFormat("{0},", RowRem.DataKey("CveVenta"))
RemisionesLista.Add(RowRem.DataKey("CveVenta").ToEntero())
End If
End If
Next
If RemisionesLista.Count = 0 Then
Alert("Debe seleccionar al menos una remisión", TipoMensaje.MsgAdvertencia)
Exit Sub
End If
SbRemisiones.Remove(SbRemisiones.Length - 1, 1)
Dim DtRemisionesPS As New DataTable()
Dim DtPagosFacturaGlobal As New DataTable()
Dim ObjClientes As New ClsClientes
If ObjClientes.GetVentasRemisionesTotales(-1, SbRemisiones.ToString(), 1, UsuarioActual.CveEmpresa) Then
DtRemisionesPS = ObjClientes.DtResultados.Copy()
End If
If ObjClientes.GetVentasRemisionesPagos(-1, SbRemisiones.ToString(), UsuarioActual.CveEmpresa) Then
DtPagosFacturaGlobal = ObjClientes.DtResultados.Copy()
End If
ObjClientes.Dispose()
If DtRemisionesPS Is Nothing OrElse DtRemisionesPS.Rows.Count = 0 Then
Alert("No se pudieron cargar las remisiones para facturar", TipoMensaje.MsgError)
GuardaLog("Remisiones: " + SbRemisiones.ToString())
Exit Sub
End If
If DtPagosFacturaGlobal Is Nothing OrElse DtPagosFacturaGlobal.Rows.Count = 0 Then
Alert("No se pudieron cargar los pagos", TipoMensaje.MsgError)
Exit Sub
End If
If Me.CveSubProyecto <= 0 Then
Alert("No se pudo cargar la sucursal", TipoMensaje.MsgError)
Exit Sub
End If
Dim CveCliente As Integer = UsuarioActual.Empresa.Funcionalidad(714).ToEntero()
If CveCliente <= 0 Then
CveCliente = GlobalDTCliente(UsuarioActual.CveEmpresa).FiltroPrimeroValor("CveCliente", "Nombre = 'PUBLICO EN GENERAL'").ToEntero
If CveCliente <= 0 Then
Alert("No se pudo cargar el cliente", TipoMensaje.MsgError)
Exit Sub
End If
End If
Dim ObjFactura = Modelos.Factura.CrearVentaNueva(UsuarioActual, Me.CveSubProyecto, CveCliente, CveMoneda, "Ing")
ObjFactura.EsFacturaGlobal = True
ObjFactura.CveSATPeriodicidad = DdlPeriodo.SelectedValue.ToEntero()
ObjFactura.CveSATMes = DdlMes.SelectedValue.ToEntero()
ObjFactura.SATAnio = DdlAnio.SelectedValue.ToEntero()
ObjFactura.RemisionesLista = RemisionesLista
ObjFactura.DtRemisionesPS = DtRemisionesPS
ObjFactura.DtRemisiones = DtRemisiones.FiltraParametros($"CveVenta IN ({SbRemisiones.ToString()})")
ObjFactura.DtPagosFacturaGlobal = DtPagosFacturaGlobal
ObjFactura.CveUsoCFDI = 23 'S01 - Sin efectos fiscales'
Dim RowNum As Integer = 0
For Each Dr As DataRow In ObjFactura.DtRemisionesPS.Rows
ObjFactura.AgregarPS(Dr("CvePS").ToString().ToEntero(), Dr("Cantidad").ToString().ToDecimal(), Dr("PU").ToString().ToDecimal(), Dr("Descuento").ToString().ToDecimal, Dr("Obs").ToString(), CveUM:=Dr("CveUM").ToString().ToEntero(),
CveProyecto:=Dr("CveProyecto").ToString().ToEntero(), CveSubProyecto:=Dr("CveSubProyecto").ToString().ToEntero(), CveVentaDetallePadre:=Dr("CveVentaDetalle").ToString().ToEntero(), CveVentaDetalleRemision:=Dr("CveVentaDetalle").ToString().ToEntero())
Next
ObjFactura.CalculaTotales()
ObjFactura.PreparaTimbre()
If Math.Abs(ObjFactura.Total.RoundSQL(2) - DtPagosFacturaGlobal.SUMD("Importe").RoundSQL(2)) > 0.01D Then
Alert($"Los pagos no coinciden con el total de la factura [{ObjFactura.Total.RoundSQL(2)}-{ DtPagosFacturaGlobal.SUMD("Importe").RoundSQL(2)}]", TipoMensaje.MsgError)
GuardaLog($"Los pagos no coinciden con el total de la factura [{ObjFactura.Total.RoundSQL(2)}-{ DtPagosFacturaGlobal.SUMD("Importe").RoundSQL(2)}] Remisiones: " + SbRemisiones.ToString())
Exit Sub
End If
Dim SbAlert As New StringBuilder()
Dim Retorno As Modelos.Factura.MMensajeFactura = Nothing
Try
Retorno = ObjFactura.EmitirFactura(True, Modulo:="FGlobal/GuardarVenta")
If Retorno IsNot Nothing AndAlso Retorno.CveVenta > 0 Then
SbAlert.AppendFormat("{0}", Retorno.Mensajes(Retorno.Mensajes.Count - 1))
SbAlert.AppendFormat("<ul><li><a class=""Texto"" href=""/Compras/PopUpVerFactura.aspx?P={0}"">Descargar PDF Factura</a></li></ul><br/>", Encripta(String.Format("OP=VTA&CVEVENTA={0}&PAG=1&GUARDAR=1", Retorno.CveVenta)))
Else
SbAlert.Append("Ocurrió un error al generar la factura")
End If
Catch ex As Exception
SbAlert.Append("Ocurrió un error al generar el documento")
GuardaLog(ex.ToString())
End Try
If Retorno IsNot Nothing AndAlso Retorno.Mensajes.Count > 0 Then
Retorno.Mensajes(Retorno.Mensajes.Count - 1) = SbAlert.ToString()
End If
If Retorno IsNot Nothing AndAlso Retorno.Mensajes IsNot Nothing AndAlso Retorno.Mensajes.Count > 0 Then
For Each Mensaje As String In Retorno.Mensajes
Alert(Mensaje, If(Retorno.TieneError, TipoMensaje.MsgError, TipoMensaje.MsgInformacion), If(Retorno.TieneError, "", "document.location.href=""/Ventas/FacturacionGlobal.aspx"";"), ShowCloseButton:=False)
Next
Else
If SbAlert.Length = 0 Then
SbAlert.Append("Ocurrió un error al generar la factura")
End If
Alert(SbAlert.ToString(), TipoMensaje.MsgError, ShowCloseButton:=False)
End If
If ObjFactura IsNot Nothing Then
ObjFactura.Dispose()
End If
End Sub
End Class