Contratos, regsitro Ventas estado de cuenta
This commit is contained in:
@@ -690,6 +690,26 @@ Public Class ClsContratos
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
Public Function GetContratosObraEstadoCuenta(CveContrato As Integer, CveEmpresa As Integer, Opcion As Integer) As Boolean
|
||||
Dim Retorno = False
|
||||
|
||||
DataAdapter("PA_Con_ContratosEstadoCuentaGet")
|
||||
With SqlAdapter.SelectCommand.Parameters
|
||||
.Add("@CveContrato", SqlDbType.Int).Value = CveContrato
|
||||
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
|
||||
.Add("@Opcion", SqlDbType.Int).Value = Opcion
|
||||
End With
|
||||
|
||||
Try
|
||||
SqlAdapter.Fill(Data)
|
||||
Retorno = True
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al consultar el Estado de cuenta.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
#Region "ESTIMACION OBRA"
|
||||
@@ -1802,9 +1822,49 @@ Public Class ClsContratos
|
||||
OnError("Ocurrió un error al obtener el Reporte de Contratos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
|
||||
Public Function GetContratosAvanceEstimacionVentas(CveContrato As Integer, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
DataAdapter("PA_Con_ContratosAvanceEstimacionVentasGet")
|
||||
|
||||
With SqlAdapter.SelectCommand.Parameters
|
||||
.Add("@CveContrato", SqlDbType.Int).Value = CveContrato
|
||||
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
|
||||
End With
|
||||
Try
|
||||
SqlAdapter.Fill(Data)
|
||||
Retorno = True
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al obtener las estimaciones de Contratos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
|
||||
Public Function UpdateContratosAvanceEstimacionVentas(CveEstimacion As Integer, CveVenta As Integer, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
DataAdapter("PA_Con_ContratosAvanceEstimacionVentasUpdate")
|
||||
|
||||
With SqlAdapter.SelectCommand.Parameters
|
||||
.Add("@CveEstimacion", SqlDbType.Int).Value = CveEstimacion
|
||||
.Add("@CveVenta", SqlDbType.Int).Value = CveVenta
|
||||
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
|
||||
End With
|
||||
Try
|
||||
SqlAdapter.Fill(Data)
|
||||
Retorno = True
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al actualizar las estimaciones de Contratos.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
|
||||
Public Function GetRepContratos(pCveProveedor As Integer, pCveContrato As Integer, CveSeccion As Integer, pCvePS As Integer, pEstimacion As Integer, pCveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
DataAdapter("PA_Con_RepContratosGet")
|
||||
@@ -2186,14 +2246,6 @@ Public Class ClsContratos
|
||||
End Function
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Public Function GetReporteContratosAvancesDetalleCP(CveContrato As Integer, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
|
||||
@@ -2216,6 +2268,26 @@ Public Class ClsContratos
|
||||
End Function
|
||||
|
||||
|
||||
Public Function GetReporteContratosObraAvancesDetalle(CveContrato As Integer, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
|
||||
DataAdapter("PA_Con_ReporteContratosObraAvancesDetalleGet")
|
||||
|
||||
With SqlAdapter.SelectCommand.Parameters
|
||||
.Add("@CveContrato", SqlDbType.Int).Value = CveContrato
|
||||
.Add("@CveEmpresa", SqlDbType.Int).Value = CveEmpresa
|
||||
End With
|
||||
|
||||
|
||||
Try
|
||||
SqlAdapter.Fill(Data)
|
||||
Retorno = True
|
||||
Catch ex As Exception
|
||||
OnError("Ocurrió un error al obtener el Reporte de Avances Detalle CP.", ex, SqlAdapter.SelectCommand.Parameters.ParametrosInfo())
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
|
||||
Public Function GetReporteContratosAvancesDetalleControl(CveContrato As Integer, CveEmpresa As Integer) As Boolean
|
||||
@@ -2262,6 +2334,7 @@ Public Class ClsContratos
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
Public Function GetContratosAvancePorDocumento(CveContrato As Integer, TipoDocto As String, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno As Boolean = False
|
||||
|
||||
@@ -2470,9 +2543,10 @@ Public Class ClsContratos
|
||||
End Try
|
||||
|
||||
Return Retorno
|
||||
End Function
|
||||
|
||||
End Function
|
||||
|
||||
#End Region
|
||||
|
||||
Public Function GetContratosCostos(CveContrato As Integer, FechaInicio As DateTime, FechaFin As DateTime, CveEstatus As Integer, Tipo As Integer, CveEmpresa As Integer) As Boolean
|
||||
Dim Retorno = False
|
||||
|
||||
|
||||
@@ -218,9 +218,9 @@ Partial Class Bancos_PolizaCheque
|
||||
|
||||
|
||||
|
||||
If DdlTipoTransaccion.SelectedValue.ToEntero = 3 Then
|
||||
dt = dt.FiltraParametros("CveTipoCuenta = 7")
|
||||
End If
|
||||
'If DdlTipoTransaccion.SelectedValue.ToEntero = 3 Then
|
||||
' dt = dt.FiltraParametros("CveTipoCuenta = 7")
|
||||
'End If
|
||||
|
||||
'cuando es layout
|
||||
If DdlTipoTransaccion.SelectedValue.ToEntero = 9 Then
|
||||
|
||||
@@ -1594,6 +1594,7 @@
|
||||
<asp:LinkButton ID="LBAvanceXFacturarImporte" OnClick="MuestaModalVentasAvance" Text='<%# Eval("AvanceXFacturarImporte", "{0:###,###,##0.00##}") %>' runat="server" />
|
||||
</ItemTemplate>
|
||||
</asp:TemplateField>
|
||||
|
||||
<asp:BoundField HeaderText="Importe $" DataField="Anticipos" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:###,###,##0.00##}" ItemStyle-Width="10%" />
|
||||
|
||||
</Columns>
|
||||
@@ -1688,6 +1689,88 @@
|
||||
</ContentTemplate>
|
||||
</ajax:TabPanel>
|
||||
|
||||
<ajax:TabPanel ID="TabEstadoCuenta" Visible="False" runat="server" HeaderText="Estado de Cuenta">
|
||||
<ContentTemplate>
|
||||
|
||||
|
||||
<asp:UpdatePanel ID="UpEstoCuenta" runat="server" UpdateMode="Conditional">
|
||||
<ContentTemplate>
|
||||
</ContentTemplate>
|
||||
</asp:UpdatePanel>
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
|
||||
|
||||
<div class="portlet smmallpadding light bordered">
|
||||
<div class="portlet-title">
|
||||
<div class="tools">
|
||||
<a href="javascript;" data-idchekbox="C_chkexpand" class=" collapse" data-original-title="" title=""></a><span class="hidden">
|
||||
<input id="chkestadocuentaantyicipos" type="checkbox" name="nmchkestadocuentaantyicipos" checked="checked"></span>
|
||||
</div>
|
||||
<div class="caption uppercase" style="position: relative;"><i class="fa fa-list"></i>Anticipos</div>
|
||||
</div>
|
||||
<div class="portlet-body rowpadding">
|
||||
|
||||
|
||||
<asp:GridView ID="GvEstadoCuentaAnticipos" ClientIDMode="Static" ShowHeader="true" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron documentos."
|
||||
CssClass="table table-striped table-hover Widthall" GridLines="None">
|
||||
<Columns>
|
||||
|
||||
<asp:BoundField HeaderText="Fecha" DataField="Fecha" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
|
||||
<asp:HyperLinkField HeaderText="Serie-Folio" DataTextField="SerieFolio" Target="_blank" ItemStyle-Width="10%" ItemStyle-CssClass="Texto Izquierda" DataNavigateUrlFields="CveVenta" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveVenta={0}" />
|
||||
<asp:BoundField HeaderText="Importe" DataField="Importe" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:N2}" />
|
||||
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6">
|
||||
|
||||
|
||||
<div class="portlet smmallpadding light bordered">
|
||||
<div class="portlet-title">
|
||||
<div class="tools">
|
||||
<a href="javascript;" data-idchekbox="C_chkexpand" class=" collapse" data-original-title="" title=""></a><span class="hidden">
|
||||
<input id="chkestadocuentaFacturas" type="checkbox" name="nmchkestadocuentaFacturas" checked="checked"></span>
|
||||
</div>
|
||||
<div class="caption uppercase" style="position: relative;"><i class="fa fa-list"></i>Facturas</div>
|
||||
</div>
|
||||
<div class="portlet-body rowpadding">
|
||||
|
||||
|
||||
<asp:GridView ID="GvEstadoCuentaFacturas" ClientIDMode="Static" ShowHeader="true" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron documentos."
|
||||
CssClass="table table-striped table-hover Widthall" GridLines="None">
|
||||
<Columns>
|
||||
|
||||
<asp:BoundField HeaderText="Fecha" DataField="Fecha" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Center" DataFormatString="{0:d}" />
|
||||
<asp:HyperLinkField HeaderText="Serie-Folio" DataTextField="SerieFolio" Target="_blank" ItemStyle-Width="10%" ItemStyle-CssClass="Texto Izquierda" DataNavigateUrlFields="CveVenta" DataNavigateUrlFormatString="/Ventas/Ventas.aspx?CveVenta={0}" />
|
||||
<asp:BoundField HeaderText="Importe" DataField="Importe" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:N2}" />
|
||||
<asp:BoundField HeaderText="Amortizado" DataField="ImporteAmortizado" ItemStyle-Width="10%" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:N2}" />
|
||||
|
||||
</Columns>
|
||||
</asp:GridView>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</ContentTemplate>
|
||||
</ajax:TabPanel>
|
||||
|
||||
|
||||
<ajax:TabPanel ID="TabAvanveDocumento" runat="server" HeaderText="Avance Por Documento">
|
||||
<ContentTemplate>
|
||||
|
||||
|
||||
@@ -405,6 +405,10 @@ Partial Class Contratos_ContratoObra
|
||||
|
||||
End If
|
||||
|
||||
CargaEstadoCueta()
|
||||
|
||||
TabEstadoCuenta.Visible = True
|
||||
|
||||
Else
|
||||
'Configuración de Modalidad Insert
|
||||
LblFechaCaptura.Text = Now.ToShortDateString()
|
||||
@@ -438,6 +442,8 @@ Partial Class Contratos_ContratoObra
|
||||
CargaPSInsumos()
|
||||
ConfiguraTipos()
|
||||
CargaDatosEncabezado()
|
||||
|
||||
|
||||
' CargaImpuestosLocales()
|
||||
|
||||
End If
|
||||
@@ -2592,7 +2598,7 @@ Partial Class Contratos_ContratoObra
|
||||
|
||||
Dim ObjContratos As New ClsContratos
|
||||
|
||||
If ObjContratos.GetReporteContratosAvancesDetalleCP(CveContrato, UsuarioActual.CveEmpresa) Then
|
||||
If ObjContratos.GetReporteContratosObraAvancesDetalle(CveContrato, UsuarioActual.CveEmpresa) Then
|
||||
GvDatosAvance.DataSource = ObjContratos.DtResultados
|
||||
SumaAvance = ObjContratos.DtResultados.SUM("AvanceImporte", "CveClasificacion IS NULL")
|
||||
SumaUtilidad = ObjContratos.DtResultados.SUM("AvanceUtilidad", "CveClasificacion IS NULL")
|
||||
@@ -5116,6 +5122,37 @@ Partial Class Contratos_ContratoObra
|
||||
objContrato.Dispose()
|
||||
|
||||
End Sub
|
||||
|
||||
Private Sub CargaEstadoCueta()
|
||||
|
||||
|
||||
Dim ObjContratos As New ClsContratos
|
||||
|
||||
If ObjContratos.GetContratosObraEstadoCuenta(CveContrato, UsuarioActual.CveEmpresa, 1) Then
|
||||
GvEstadoCuentaAnticipos.DataSource = ObjContratos.DtResultados
|
||||
Else
|
||||
GvEstadoCuentaAnticipos.DataSource = Nothing
|
||||
End If
|
||||
|
||||
If ObjContratos.GetContratosObraEstadoCuenta(CveContrato, UsuarioActual.CveEmpresa, 2) Then
|
||||
GvEstadoCuentaFacturas.DataSource = ObjContratos.DtResultados
|
||||
Else
|
||||
GvEstadoCuentaFacturas.DataSource = Nothing
|
||||
End If
|
||||
|
||||
|
||||
ObjContratos.Dispose()
|
||||
|
||||
GvEstadoCuentaAnticipos.DataBind()
|
||||
GvEstadoCuentaFacturas.DataBind()
|
||||
|
||||
|
||||
|
||||
UpEstoCuenta.Update()
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
End Class
|
||||
|
||||
|
||||
|
||||
@@ -2743,8 +2743,20 @@
|
||||
<ContentTemplate>
|
||||
|
||||
<div id="DivEstimaciones" runat="server" visible="true">
|
||||
Contrato:
|
||||
<asp:DropDownList ID="DdlContrato" runat="server" AppendDataBoundItems="true" Width="350px" AutoPostBack="true" DataTextField="NumeroContrato" DataValueField="CveContrato"></asp:DropDownList>
|
||||
<table>
|
||||
<tr>
|
||||
<td>Contrato:</td>
|
||||
<td><asp:DropDownList ID="DdlContrato" runat="server" AppendDataBoundItems="true" Width="350px" AutoPostBack="true" DataTextField="NumeroContrato" DataValueField="CveContrato" CssClass="select2me" ></asp:DropDownList></td>
|
||||
</tr>
|
||||
<tr runat="server" id="DVEstimacionesObra" visible="false">
|
||||
<td> Estimacion:</td>
|
||||
<td><asp:DropDownList ID="DdlEstimacionesObra" runat="server" AppendDataBoundItems="true" Width="350px" AutoPostBack="true" DataTextField="NumeroEstimacion" DataValueField="CveEstimacion" CssClass="select2me"></asp:DropDownList></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
||||
|
||||
|
||||
<asp:HyperLink ID="HLContrato" Target="_blank" CssClass="Texto" runat="server" Text="" Font-Bold="true"></asp:HyperLink>
|
||||
<asp:GridView ID="GvEst" runat="server" AutoGenerateColumns="false" EmptyDataText="No se encontraron Estimaciones para este cliente" Width="100%" DataKeyNames="CveContrato,CveFamilias,CveSubFamilias,CveContratoAvance,Name,Importe,NumeroContrato,CveSubProyecto,FechaInicial" SelectedRowStyle-BackColor="#CCFF66" CssClass="table GvEst table-advance table-hover" Style="text-align: center;" GridLines="None">
|
||||
<Columns>
|
||||
@@ -4295,6 +4307,7 @@
|
||||
<asp:RadioButtonList ID="RblOpcionContrato" runat="server" CssClass="rbl" RepeatDirection="Horizontal" RepeatLayout="Table">
|
||||
<asp:ListItem Text="Si" Value="2"></asp:ListItem>
|
||||
<asp:ListItem Text="No" Value="1"></asp:ListItem>
|
||||
<asp:ListItem Text="Obra" Value="3"></asp:ListItem>
|
||||
</asp:RadioButtonList>
|
||||
|
||||
<asp:LinkButton ID="BtnIniciarContrato" runat="server" CssClass="btn btn-success" Text="Aceptar" />
|
||||
|
||||
@@ -3030,7 +3030,27 @@ Partial Class Ventas
|
||||
TieneContrato = True
|
||||
LnkOCs.Visible = True
|
||||
UpnTools.Update()
|
||||
|
||||
ElseIf RblOpcionContrato.SelectedValue = "3" Then
|
||||
|
||||
DivEstimaciones.Visible = True
|
||||
DVEstimacionesObra.Visible = True
|
||||
|
||||
DdlContrato.DataSource = DtContratos.FiltraParametros("CveContrato > 0", "NumeroContrato", DistinctColumns:={"CveContrato", "NumeroContrato"})
|
||||
DdlContrato.DataBind()
|
||||
DdlContrato.Items.Insert(0, New ListItem("Seleccione", "0"))
|
||||
|
||||
|
||||
BtnEstimacion.Visible = False
|
||||
GvEst.Visible = False
|
||||
|
||||
|
||||
UPEstimaciones.Update()
|
||||
|
||||
Else
|
||||
BtnEstimacion.Visible = True
|
||||
GvEst.Visible = True
|
||||
|
||||
DdlContratosOC.Items.Clear()
|
||||
DdlContratosOC.DataSource = DtContratos
|
||||
DdlContratosOC.DataBind()
|
||||
@@ -10491,6 +10511,14 @@ Partial Class Ventas
|
||||
End If
|
||||
|
||||
|
||||
If ErrorList.Count = 0 AndAlso RblOpcionContrato.SelectedValue = "3" And DdlEstimacionesObra.SelectedValue.ToEntero > 0 Then
|
||||
|
||||
If Not ObjContr.UpdateContratosAvanceEstimacionVentas(DdlEstimacionesObra.SelectedValue.ToEntero, ObjFactura.CveVenta, UsuarioActual.CveEmpresa) Then
|
||||
ErrorList.Add("Ocurrió un error al actualizar la estimación")
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
If ErrorList.Count = 0 Then
|
||||
'prepoliza
|
||||
GuardarVentaPrePolizas(ObjConta, factura, TmpDTDetalle, CveNCaVincular, objContPaqi, ObjBancos, ObjVentas, ObjEventos:=ObjEventos, EsNCAmortizacion:=EsNCAmortizacion, NCDescuento:=NCDescuento, ListaNCDescuento:=ListaNCDescuento, ObjInventario:=ObjInventario)
|
||||
@@ -18076,25 +18104,73 @@ Partial Class Ventas
|
||||
BtnEstimacion.Visible = True
|
||||
End If
|
||||
|
||||
If RblOpcionContrato.SelectedValue = "3" Then
|
||||
|
||||
|
||||
GvEst.DataSource = Nothing
|
||||
GvEst.DataBind()
|
||||
BtnEstimacion.Visible = False
|
||||
|
||||
BtnCargarContratoDetalles.Visible = False
|
||||
BtnCancelarContratoDetalles.Visible = False
|
||||
|
||||
UPEstimaciones.Update()
|
||||
|
||||
End If
|
||||
|
||||
End Sub
|
||||
Private Sub CargaDatosEstimaciones(CveCliente As Integer)
|
||||
If CveVenta > 0 Then
|
||||
Exit Sub
|
||||
End If
|
||||
Dim Con As New ClsContratos
|
||||
If Con.GetEstimacionesPorFacturar(-1, CveCliente, DdlContrato.SelectedValue.ToEntero(), 0, UsuarioActual.CveEmpresa) Then
|
||||
GvEst.DataSource = Con.DtResultados
|
||||
If Con.DtResultados.Rows.Count > 0 Then
|
||||
'BtnEstimacion.Visible = True
|
||||
DdlContrato.Items.Clear()
|
||||
DdlContrato.Items.Add(New ListItem("Todos", "-1"))
|
||||
DdlContrato.DataSource = Con.DtResultados.FiltraParametros("CveContrato > 0", "NumeroContrato", DistinctColumns:={"CveContrato", "NumeroContrato"})
|
||||
|
||||
|
||||
|
||||
If RblOpcionContrato.SelectedValue = "3" Then
|
||||
|
||||
DdlEstimacionesObra.Items.Clear()
|
||||
|
||||
If Con.GetContratosAvanceEstimacionVentas(DdlContrato.SelectedValue.ToEntero(), UsuarioActual.CveEmpresa) Then
|
||||
|
||||
DdlEstimacionesObra.DataSource = Con.DtResultados
|
||||
DdlEstimacionesObra.DataBind()
|
||||
DdlEstimacionesObra.Items.Insert(0, New ListItem("Todos", "-1"))
|
||||
|
||||
Else
|
||||
|
||||
DdlEstimacionesObra.DataSource = Nothing
|
||||
DdlEstimacionesObra.DataBind()
|
||||
|
||||
End If
|
||||
|
||||
|
||||
UPEstimaciones.Update()
|
||||
|
||||
Else
|
||||
|
||||
If Con.GetEstimacionesPorFacturar(-1, CveCliente, DdlContrato.SelectedValue.ToEntero(), 0, UsuarioActual.CveEmpresa) Then
|
||||
GvEst.DataSource = Con.DtResultados
|
||||
If Con.DtResultados.Rows.Count > 0 Then
|
||||
'BtnEstimacion.Visible = True
|
||||
DdlContrato.Items.Clear()
|
||||
DdlContrato.Items.Add(New ListItem("Todos", "-1"))
|
||||
DdlContrato.DataSource = Con.DtResultados.FiltraParametros("CveContrato > 0", "NumeroContrato", DistinctColumns:={"CveContrato", "NumeroContrato"})
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
UPEstimaciones.Update()
|
||||
Con.Dispose()
|
||||
DdlContrato.DataBind()
|
||||
GvEst.DataBind()
|
||||
|
||||
End If
|
||||
UPEstimaciones.Update()
|
||||
Con.Dispose()
|
||||
DdlContrato.DataBind()
|
||||
GvEst.DataBind()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
End Sub
|
||||
Protected Sub GVEst_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles GvEst.RowDataBound
|
||||
If e.Row.RowType = DataControlRowType.DataRow Then
|
||||
|
||||
Reference in New Issue
Block a user