MS
This commit is contained in:
parent
f4b61df91e
commit
ac726d544f
@ -1379,7 +1379,9 @@ Public Class ClassControlBuilder
|
||||
Try
|
||||
Dim control As Label = New Label
|
||||
Dim defaultSize As Size = New Size(200, 27)
|
||||
|
||||
If id = 735 Then
|
||||
Dim i = "Obacht"
|
||||
End If
|
||||
Dim metadata As New ClassControlMetadata()
|
||||
metadata.Id = id
|
||||
metadata.Name = name
|
||||
@ -1422,6 +1424,13 @@ Public Class ClassControlBuilder
|
||||
control.Text = result.ToString
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
If text <> "" Then
|
||||
control.Text = text
|
||||
Else
|
||||
control.Text = "NO CAPTION/TEXT"
|
||||
End If
|
||||
|
||||
End If
|
||||
End If
|
||||
|
||||
|
||||
@ -115,6 +115,15 @@ Public Class ClassControlValues
|
||||
|
||||
Dim metadata = DirectCast(Control.Tag, ClassControlMetadata)
|
||||
|
||||
If TypeOf Control Is Label Then
|
||||
Continue For
|
||||
End If
|
||||
'Radio Buttons müssen nicht überprüft werden, da eine RadioButton Group
|
||||
'immer ein Control mit Checked = true hat
|
||||
If TypeOf Control Is RadioButton Then
|
||||
Continue For
|
||||
End If
|
||||
Console.WriteLine(Control.Name)
|
||||
' Groupbox muss rekursiv überprüft werden
|
||||
If TypeOf Control Is GroupBox Then
|
||||
Dim groupbox As GroupBox = DirectCast(Control, GroupBox)
|
||||
@ -123,11 +132,7 @@ Public Class ClassControlValues
|
||||
Continue For
|
||||
End If
|
||||
|
||||
'Radio Buttons müssen nicht überprüft werden, da eine RadioButton Group
|
||||
'immer ein Control mit Checked = true hat
|
||||
If TypeOf Control Is RadioButton Then
|
||||
Continue For
|
||||
End If
|
||||
|
||||
|
||||
If IsNothing(metadata.Required) OrElse metadata.Required = False Then
|
||||
Continue For
|
||||
|
||||
@ -441,7 +441,7 @@ Module ModuleHelperMethods
|
||||
Public Function Get_Grid_Sql(ConstructorId As Integer, FormId As Integer, ConstructorDetailID As Integer, ByRef GRID_TYPE As frmConstructor_Main.GridType, UserGuid As Integer, QUICK_VIEW_SQL As String,
|
||||
IS_SINGLE_RECORD As Boolean, FORM_TYPE As Integer, ByRef VIEW_ID As Integer, ByRef GridControlMain As GridControl, ByRef grvwGrid As GridView, Optional ByRef IS_GEOData As Boolean = False)
|
||||
Try
|
||||
Dim ViewName As String = "VWTEMP_PMO_FORM" & FormId.ToString
|
||||
Dim ViewName As String = "TBENTITY_TABLE" & FormId.ToString
|
||||
CURRENT_VIEWNAME = ViewName
|
||||
Dim EntitySQL As String
|
||||
|
||||
@ -457,7 +457,7 @@ Module ModuleHelperMethods
|
||||
EntitySQL = QUICK_VIEW_SQL
|
||||
|
||||
If EntitySQL = String.Empty Then
|
||||
EntitySQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T"
|
||||
EntitySQL = "SELECT T.* FROM TBENTITY_TABLE" & FormId.ToString & " T"
|
||||
If IS_SINGLE_RECORD = True Or FORM_TYPE = 5 Then
|
||||
|
||||
Else
|
||||
|
||||
@ -836,7 +836,7 @@ Public Class frmConstructorDesigner
|
||||
|
||||
Private Sub btnTestSQL_Click(sender As Object, e As EventArgs) Handles btnTestSQL.Click
|
||||
Try
|
||||
Dim EntSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & SELECTED_ENTITY_ID.ToString & " T"
|
||||
Dim EntSQL = "SELECT T.* FROM TBENTITY_TABLE" & SELECTED_ENTITY_ID.ToString & " T"
|
||||
Dim query As String = EntSQL & " " & SQL_COMMANDTextBox.Text
|
||||
|
||||
For Each row As DataGridViewRow In dgvPlaceholders.Rows
|
||||
|
||||
@ -525,7 +525,7 @@
|
||||
<value>0, 25</value>
|
||||
</data>
|
||||
<data name="GridControlMain.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1067, 212</value>
|
||||
<value>1074, 212</value>
|
||||
</data>
|
||||
<data name="GridControlMain.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
@ -668,7 +668,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="ToolStripRecords.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1067, 25</value>
|
||||
<value>1074, 25</value>
|
||||
</data>
|
||||
<data name="ToolStripRecords.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@ -752,7 +752,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="pnlDetails.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>699, 336</value>
|
||||
<value>699, 343</value>
|
||||
</data>
|
||||
<data name="pnlDetails.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>4</value>
|
||||
@ -782,7 +782,7 @@
|
||||
<value>0, 26</value>
|
||||
</data>
|
||||
<data name="pnlDocFill.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>641, 286</value>
|
||||
<value>648, 293</value>
|
||||
</data>
|
||||
<data name="pnlDocFill.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>5</value>
|
||||
@ -829,10 +829,10 @@
|
||||
<value>Ansicht eingeschränkt - Klick Bearbeiten für Entsperren</value>
|
||||
</data>
|
||||
<data name="statStripDoc.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 312</value>
|
||||
<value>0, 319</value>
|
||||
</data>
|
||||
<data name="statStripDoc.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>641, 24</value>
|
||||
<value>648, 24</value>
|
||||
</data>
|
||||
<data name="statStripDoc.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@ -859,7 +859,7 @@
|
||||
<value>0, 0</value>
|
||||
</data>
|
||||
<data name="pnlDocToolStrip.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>641, 26</value>
|
||||
<value>648, 26</value>
|
||||
</data>
|
||||
<data name="pnlDocToolStrip.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@ -880,7 +880,7 @@
|
||||
<value>Panel2</value>
|
||||
</data>
|
||||
<data name="SplitContainerDetails.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 340</value>
|
||||
<value>1356, 347</value>
|
||||
</data>
|
||||
<data name="SplitContainerDetails.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>1</value>
|
||||
@ -1056,7 +1056,7 @@
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TabDetails.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 365</value>
|
||||
<value>1356, 372</value>
|
||||
</data>
|
||||
<data name="TabDetails.Text" xml:space="preserve">
|
||||
<value>Detailansicht</value>
|
||||
@ -1074,7 +1074,7 @@
|
||||
<value>0</value>
|
||||
</data>
|
||||
<data name="TCDetails.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1362, 396</value>
|
||||
<value>1362, 403</value>
|
||||
</data>
|
||||
<data name="TCDetails.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
@ -1089,7 +1089,7 @@
|
||||
<value>Cyan</value>
|
||||
</data>
|
||||
<data name="GridControlPos.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 340</value>
|
||||
<value>1356, 347</value>
|
||||
</data>
|
||||
<data name="GridControlPos.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>0</value>
|
||||
@ -1113,7 +1113,7 @@
|
||||
<value>0, 25</value>
|
||||
</data>
|
||||
<data name="Panel1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 340</value>
|
||||
<value>1356, 347</value>
|
||||
</data>
|
||||
<data name="Panel1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>2</value>
|
||||
@ -1367,7 +1367,7 @@
|
||||
</value>
|
||||
</data>
|
||||
<data name="TabPos.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 365</value>
|
||||
<value>1356, 372</value>
|
||||
</data>
|
||||
<data name="TabPos.Text" xml:space="preserve">
|
||||
<value>Positionen</value>
|
||||
@ -1429,7 +1429,7 @@
|
||||
<value>Aqua</value>
|
||||
</data>
|
||||
<data name="GridControlDocSearch.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 340</value>
|
||||
<value>1356, 347</value>
|
||||
</data>
|
||||
<data name="GridControlDocSearch.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>7</value>
|
||||
@ -1531,7 +1531,7 @@
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TabWindream.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 365</value>
|
||||
<value>1356, 372</value>
|
||||
</data>
|
||||
<data name="TabWindream.Text" xml:space="preserve">
|
||||
<value>Dateien</value>
|
||||
@ -1962,7 +1962,7 @@
|
||||
<value>2</value>
|
||||
</data>
|
||||
<data name="TabFollowUp.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 365</value>
|
||||
<value>1356, 372</value>
|
||||
</data>
|
||||
<data name="TabFollowUp.Text" xml:space="preserve">
|
||||
<value>Wiedervorlage</value>
|
||||
@ -2073,7 +2073,7 @@
|
||||
<value>5</value>
|
||||
</data>
|
||||
<data name="GridControl1.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 340</value>
|
||||
<value>1356, 347</value>
|
||||
</data>
|
||||
<data name="GridControl1.TabIndex" type="System.Int32, mscorlib">
|
||||
<value>90</value>
|
||||
@ -2145,7 +2145,7 @@
|
||||
<value>1</value>
|
||||
</data>
|
||||
<data name="TabPageVariant.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>1356, 365</value>
|
||||
<value>1356, 372</value>
|
||||
</data>
|
||||
<data name="TabPageVariant.Text" xml:space="preserve">
|
||||
<value>Vorgängervarianten</value>
|
||||
|
||||
@ -740,7 +740,7 @@ Public Class frmConstructor_Main
|
||||
GridControlMain.MainView = grvwTiles
|
||||
End Sub
|
||||
Public Function Get_Pos_SQL(FormId As Integer)
|
||||
POS_SQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & FormId.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @PARENT_ID"
|
||||
POS_SQL = "SELECT T.* FROM TBENTITY_TABLE" & FormId.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @PARENT_ID"
|
||||
End Function
|
||||
Public Sub Clear_Grid_View()
|
||||
GridControlMain.DataSource = Nothing
|
||||
@ -1442,7 +1442,7 @@ Public Class frmConstructor_Main
|
||||
Function ReturnAmountofRecords(EntityID As Integer)
|
||||
' Statt eine Table zurückzugeben, können wir die anzahl der Zeilen auch in der Datenbank berechnen,
|
||||
' dadurch wird die Abfrage um einiges schneller
|
||||
Dim SQL As String = "SELECT COUNT(*) FROM ( SELECT T.* FROM VWTEMP_PMO_FORM" & EntityID & " AS T,TBPMO_RECORD_CONNECT T1 WHERE T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @RecordID ) x"
|
||||
Dim SQL As String = "SELECT COUNT(*) FROM ( SELECT T.* FROM TBENTITY_TABLE" & EntityID & " AS T,TBPMO_RECORD_CONNECT T1 WHERE T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = @RecordID ) x"
|
||||
|
||||
'Abhängig von der Entität dieAnzahl der Datensätze laden
|
||||
Select Case ACT_EBENE
|
||||
@ -1614,7 +1614,7 @@ Public Class frmConstructor_Main
|
||||
MsgBox(msg, MsgBoxStyle.Exclamation)
|
||||
Try
|
||||
Dim sql
|
||||
sql = "select * from VWTEMP_PMO_FORM" & PARENT_ENTITYID.ToString
|
||||
sql = "select * from TBENTITY_TABLE" & PARENT_ENTITYID.ToString
|
||||
CURRENT_PARENT_DT = ClassDatabase.Return_Datatable(sql, True)
|
||||
frmChooseParentRecord.ShowDialog()
|
||||
If CURRENT_PARENT_RECORD_ID = 0 Then
|
||||
@ -2152,7 +2152,7 @@ Public Class frmConstructor_Main
|
||||
ACTIVATE_DOC_SEARCH_ON_EDIT = result.Item("ACTIVATE_DOC_SEARCH_ON_EDIT")
|
||||
sql = String.Format("select * from TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE VISIBLE = 1 AND ENTITY_ID = {0} AND LANGUAGE = '{1}' AND CONFIG_COLUMNS = 0", ENTITY_ID, USER_LANGUAGE) 'TBPMO_WINDREAM_RESULTLIST_CONFIG"
|
||||
DT_WINDREAM_RESULTLIST = ClassDatabase.Return_Datatable(sql, True)
|
||||
sql = String.Format("select T.*, T1.HEADER_CAPTION from TBPMO_DOCRESULT_DROPDOWN_ITEMS T, TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WHERE T.CONFIG_ID = T1.GUID AND T.CONFIG_ID IN (SELECT GUID FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE ENTITY_ID = {0} AND TYPE_ID = 4 AND LANGUAGE = '{1}')", ENTITY_ID, USER_LANGUAGE)
|
||||
sql = String.Format("select T.*, T1.HEADER_CAPTION from TBPMO_DOCRESULT_DROPDOWN_ITEMS T, TBPMO_DOCSEARCH_RESULTLIST_CONFIG T1 WHERE T.CONFIG_ID = T1.GUID AND T.CONFIG_ID IN (SELECT GUID FROM TBPMO_DOCSEARCH_RESULTLIST_CONFIG WHERE ENTITY_ID = {0} AND TYPE_ID = 3 AND LANGUAGE = '{1}')", ENTITY_ID, USER_LANGUAGE)
|
||||
DT_DOCRESULT_DROPDOWN_ITEMS = ClassDatabase.Return_Datatable(sql, True)
|
||||
|
||||
sql = String.Format("select * from TBPMO_DOCSEARCH_VARIABLE_CONTROLS WHERE ENTITY_ID = {0}", ENTITY_ID) 'TBPMO_WINDREAM_RESULTLIST_CONFIG"
|
||||
@ -2266,7 +2266,7 @@ Public Class frmConstructor_Main
|
||||
If EBENE1_RECID > 0 Then
|
||||
PARENT_RECORDID = EBENE1_RECID
|
||||
If GRID_TYPE = GridType.Grid Then
|
||||
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID
|
||||
_ENTITYSQL = "SELECT T.* FROM TBENTITY_TABLE" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID
|
||||
Else
|
||||
_ENTITYSQL = _ENTITYSQL.Replace("@RecordID", EBENE2_RECID)
|
||||
_ENTITYSQL = _ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2")
|
||||
@ -2307,7 +2307,7 @@ Public Class frmConstructor_Main
|
||||
PARENT_RECORDID = EBENE2_RECID
|
||||
Try
|
||||
If GRID_TYPE = GridType.Grid Then
|
||||
_ENTITYSQL = "SELECT T.* FROM VWTEMP_PMO_FORM" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID
|
||||
_ENTITYSQL = "SELECT T.* FROM TBENTITY_TABLE" & ENTITY_ID.ToString & " T, TBPMO_RECORD_CONNECT t1 where T.[Record-ID] = T1.RECORD2_ID AND T1.RECORD1_ID = " & PARENT_RECORDID
|
||||
Else
|
||||
_ENTITYSQL = _ENTITYSQL.Replace("@RecordID", EBENE2_RECID)
|
||||
_ENTITYSQL = _ENTITYSQL.ToString.Replace("TBPMO_FORM T1", "TBPMO_FORM T1 ,TBPMO_RECORD_CONNECT T2")
|
||||
@ -2414,7 +2414,7 @@ Public Class frmConstructor_Main
|
||||
If IsNothing(DTEntity) Then
|
||||
ClassHelper.MSGBOX_Handler("ERROR", "Unexpected Error", "Error in getting Entity-Data - Check logfile")
|
||||
Else
|
||||
DTEntity.TableName = "VWTEMP_PMO_FORM" & ENTITY_ID
|
||||
DTEntity.TableName = "TBENTITY_TABLE" & ENTITY_ID
|
||||
Dim SQL_AutoValues = "SELECT GUID AS CONTROL_ID, CONNECTION_ID_1 AS CONNECTION_ID, SQL_COMMAND_1 AS SQL_COMMAND FROM TBPMO_CONTROL WHERE CONNECTION_ID_1 <> '' AND SQL_COMMAND_1 <> '' AND FORM_ID = " & ENTITY_ID
|
||||
Dim DT_AUTOVALUES As DataTable = ClassDatabase.Return_Datatable(SQL_AutoValues, True)
|
||||
CURRENT_SQL_AUTO_VALUES_DT = DT_AUTOVALUES
|
||||
@ -2926,7 +2926,12 @@ Public Class frmConstructor_Main
|
||||
Next
|
||||
' FormID und RecordID immer ausblenden
|
||||
grvwGrid.Columns.Item("Record-ID").Visible = False
|
||||
grvwGrid.Columns.Item("Form-ID").Visible = False
|
||||
Try
|
||||
grvwGrid.Columns.Item("Form-ID").Visible = False
|
||||
Catch ex As Exception
|
||||
|
||||
End Try
|
||||
|
||||
grvwGrid.Columns.Item("ROW_COLOR").Visible = False
|
||||
End If
|
||||
Catch ex As Exception
|
||||
@ -3563,6 +3568,11 @@ Public Class frmConstructor_Main
|
||||
AddressOf OnTextSelectedValueChanged,
|
||||
AddressOf OnCheckboxValueChanged,
|
||||
CURRENT_SEARCH_TYPE, RECORD_ID)
|
||||
|
||||
If DT_DOCRESULT_DROPDOWN_ITEMS.Rows.Count > 0 Then
|
||||
Dim DT_VALUES_FOR_DOC
|
||||
|
||||
End If
|
||||
End If
|
||||
Else
|
||||
Dim selnode As TreeNode = TreeViewMain.SelectedNode
|
||||
@ -4891,7 +4901,7 @@ Public Class frmConstructor_Main
|
||||
|
||||
|
||||
Dim sql
|
||||
sql = "select * from VWTEMP_PMO_FORM" & PARENT_ENTITYID.ToString
|
||||
sql = "select * from TBENTITY_TABLE" & PARENT_ENTITYID.ToString
|
||||
CURRENT_PARENT_DT = ClassDatabase.Return_Datatable(sql, True)
|
||||
frmChooseParentRecord.ShowDialog()
|
||||
|
||||
|
||||
@ -152,7 +152,7 @@ Public Class frmDocLink_to_Record
|
||||
Dim RecordId As Integer
|
||||
|
||||
If LogErrorsOnly = False Then ClassLogger.Add(" >> GridType = Grid", False)
|
||||
ResultViewName = "VWTEMP_PMO_FORM" & FormId.ToString
|
||||
ResultViewName = "TBENTITY_TABLE" & FormId.ToString
|
||||
ResultSQL = "SELECT T.* FROM " & ResultViewName & " T"
|
||||
|
||||
Try
|
||||
|
||||
@ -80,7 +80,7 @@ Public Class frmGeodataNavigation
|
||||
' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
|
||||
Me.ConstructorMain_Grid = gridControl
|
||||
'Me.EntityId = EntityId
|
||||
'Me.EntitySql = String.Format("SELECT T.*, T1.LATITUDE, T1.LONGITUDE from VWTEMP_PMO_FORM{0} T,TBPMO_RECORD_GEODATA T1 WHERE T.[Record-ID] = T1.RECORD_ID", Me.EntityId)
|
||||
'Me.EntitySql = String.Format("SELECT T.*, T1.LATITUDE, T1.LONGITUDE from TBENTITY_TABLE{0} T,TBPMO_RECORD_GEODATA T1 WHERE T.[Record-ID] = T1.RECORD_ID", Me.EntityId)
|
||||
End Sub
|
||||
|
||||
Private Sub frmGeodataNavigation_Load(sender As Object, e As EventArgs) Handles MyBase.Load
|
||||
|
||||
@ -220,7 +220,7 @@
|
||||
If loaded = False Then Exit Sub
|
||||
If cmbControls.SelectedIndex <> -1 Then
|
||||
If cmbControls.Text <> "System.Data.DataRowView" Then
|
||||
Dim Sql = "select TOP 30 [" & cmbControls.Text & "] FROM VWTEMP_PMO_FORM" & _ENTITY_ID & " WHERE [" & cmbControls.Text & "] IS NOT NULL AND [" & cmbControls.Text & "] <> '' GROUP BY [" & cmbControls.Text & "]"
|
||||
Dim Sql = "select TOP 30 [" & cmbControls.Text & "] FROM TBENTITY_TABLE" & _ENTITY_ID & " WHERE [" & cmbControls.Text & "] IS NOT NULL AND [" & cmbControls.Text & "] <> '' GROUP BY [" & cmbControls.Text & "]"
|
||||
Dim DT As DataTable = ClassDatabase.Return_Datatable(Sql)
|
||||
If DT.Rows.Count > 0 Then
|
||||
ListBoxVorschau.DataSource = DT
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user