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 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) If Retorno IsNot Nothing AndAlso Retorno.CveVenta > 0 Then SbAlert.AppendFormat("{0}", Retorno.Mensajes(Retorno.Mensajes.Count - 1)) SbAlert.AppendFormat("