优化采购入库单据,改为选择关联单据的方式
This commit is contained in:
@@ -635,7 +635,7 @@
|
|||||||
$("#saveDepotHead").click();
|
$("#saveDepotHead").click();
|
||||||
}
|
}
|
||||||
//搜索按钮添加快捷键
|
//搜索按钮添加快捷键
|
||||||
if(k == "13"&&(obj.id=="searchState"||obj.id=="searchNumber"||obj.id=="searchMaterial"))
|
if(k == "13"&&(obj.id=="searchNumber"||obj.id=="searchMaterial"))
|
||||||
{
|
{
|
||||||
$("#searchBtn").click();
|
$("#searchBtn").click();
|
||||||
}
|
}
|
||||||
@@ -1003,7 +1003,7 @@
|
|||||||
type: listType,
|
type: listType,
|
||||||
subType: listSubType,
|
subType: listSubType,
|
||||||
roleType: roleType,
|
roleType: roleType,
|
||||||
state: $.trim($("#searchState").val()),
|
status: "",
|
||||||
number: $.trim($("#searchNumber").val()),
|
number: $.trim($("#searchNumber").val()),
|
||||||
beginTime: beginTime,
|
beginTime: beginTime,
|
||||||
endTime: endTime,
|
endTime: endTime,
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td style="width:70px;">关联订单</td>
|
<td style="width:70px;">关联订单</td>
|
||||||
<td style="padding:5px">
|
<td style="padding:5px">
|
||||||
<input name="LinkNumber" id="LinkNumber" class="easyui-validatebox radius-ui" style="width: 150px;" readonly/>
|
<input name="LinkNumber" id="LinkNumber" class="easyui-textbox" data-options="buttonText:'选择',editable:false" style="width: 185px;"/>
|
||||||
</td>
|
</td>
|
||||||
<td style="width:100px;"></td>
|
<td style="width:100px;"></td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -286,6 +286,15 @@
|
|||||||
<a href="javascript:void(0)" id="saveOtherMoneyDlg" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
|
<a href="javascript:void(0)" id="saveOtherMoneyDlg" class="easyui-linkbutton" iconCls="icon-ok">保存</a>
|
||||||
<a href="javascript:void(0)" id="cancelOtherMoneyDlg" class="easyui-linkbutton" iconCls="icon-cancel">取消</a>
|
<a href="javascript:void(0)" id="cancelOtherMoneyDlg" class="easyui-linkbutton" iconCls="icon-cancel">取消</a>
|
||||||
</div>
|
</div>
|
||||||
|
<div id="linkBillDlg" class="easyui-dialog" style="width:880px;padding:10px 20px;"
|
||||||
|
closed="true" modal="true" buttons="#linkBillDlgBtn" cache="false" collapsible="false" closable="true">
|
||||||
|
<table id="linkBillData" style="top:100px;border-bottom-color:#FFFFFF"></table>
|
||||||
|
</div>
|
||||||
|
<div id="linkBillDlgBtn">
|
||||||
|
<a href="javascript:void(0)" id="saveLinkBill" class="easyui-linkbutton" iconCls="icon-ok">选择</a>
|
||||||
|
<a href="javascript:void(0)" id="cancelLinkBill" class="easyui-linkbutton" iconCls="icon-cancel"
|
||||||
|
onclick="javascript:$('#linkBillDlg').dialog('close')">取消</a>
|
||||||
|
</div>
|
||||||
<div id="supplier"></div>
|
<div id="supplier"></div>
|
||||||
<div id="depot"></div>
|
<div id="depot"></div>
|
||||||
<div id="account"></div>
|
<div id="account"></div>
|
||||||
@@ -425,17 +434,7 @@
|
|||||||
$(".window-mask").css({ width: webW ,height: webH});
|
$(".window-mask").css({ width: webW ,height: webH});
|
||||||
depotHeadID = 0;
|
depotHeadID = 0;
|
||||||
var res = sessionStorage.getItem("rowInfo");
|
var res = sessionStorage.getItem("rowInfo");
|
||||||
if(pageType == "skip" && res) { //从订单跳转过来
|
|
||||||
res = JSON.parse(res);
|
|
||||||
$('#OrganId').combobox('setValue', res.organId);
|
|
||||||
$("#LinkNumber").val(res.number); //关联订单号
|
|
||||||
$("#DiscountLastMoney").val(res.totalPrice); //优惠后金额
|
|
||||||
$("#ChangeAmount").val(res.totalPrice).attr("data-changeamount", res.totalPrice);
|
|
||||||
depotHeadID = res.id;
|
|
||||||
initTableData_material("edit",res.totalPrice); //商品列表
|
|
||||||
} else {
|
|
||||||
initTableData_material("add"); //商品列表
|
initTableData_material("add"); //商品列表
|
||||||
}
|
|
||||||
function supplierDlgFun(type) {
|
function supplierDlgFun(type) {
|
||||||
$('#supplierDlg').dialog('open').dialog('setTitle','<img src="/js/easyui/themes/icons/edit_add.png"/> 增加' + type + '信息');
|
$('#supplierDlg').dialog('open').dialog('setTitle','<img src="/js/easyui/themes/icons/edit_add.png"/> 增加' + type + '信息');
|
||||||
$('#supplierFM').form('clear');
|
$('#supplierFM').form('clear');
|
||||||
@@ -455,8 +454,92 @@
|
|||||||
$('#accountFM').form('clear');
|
$('#accountFM').form('clear');
|
||||||
bindAccountEvent();
|
bindAccountEvent();
|
||||||
});
|
});
|
||||||
|
//关联订单的选择事件
|
||||||
|
$('#LinkNumber').textbox({
|
||||||
|
onClickButton:function(){
|
||||||
|
$('#linkBillDlg').dialog('open').dialog('setTitle', '<img src="/js/easyui/themes/icons/edit_add.png"/> 选择关联单据');
|
||||||
|
$("#linkBillDlg").panel("move",{top:$(document).scrollTop() + ($(window).height()-400) * 0.5});
|
||||||
|
initLinkBillTableData();
|
||||||
|
}
|
||||||
|
});
|
||||||
url = '/depotHead/addDepotHeadAndDetail';
|
url = '/depotHead/addDepotHeadAndDetail';
|
||||||
}
|
}
|
||||||
|
function initLinkBillTableData() {
|
||||||
|
$('#linkBillData').datagrid({
|
||||||
|
height:300,
|
||||||
|
rownumbers: false,
|
||||||
|
//动画效果
|
||||||
|
animate:false,
|
||||||
|
//选中单行
|
||||||
|
singleSelect: true,
|
||||||
|
collapsible: false,
|
||||||
|
pagination: true,
|
||||||
|
//交替出现背景
|
||||||
|
striped : true,
|
||||||
|
pageSize: 10,
|
||||||
|
pageList: initPageNum,
|
||||||
|
columns:[[
|
||||||
|
{ field: 'id',width:35,align:"center",checkbox:true},
|
||||||
|
{ title: '供应商名称', field: 'organName',width:120},
|
||||||
|
{ title: '单据编号',field: 'number',width:155},
|
||||||
|
{ title: '商品信息',field: 'materialsList',width:200,formatter:function(value){
|
||||||
|
if(value) {
|
||||||
|
return value.replace(",",",");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{ title: '单据日期',field: 'operTimeStr',width:145},
|
||||||
|
{ title: '操作员',field: 'userName',width:60},
|
||||||
|
{ title: '金额合计',field: 'totalPrice',width:70}
|
||||||
|
]],
|
||||||
|
onLoadError:function() {
|
||||||
|
$.messager.alert('页面加载提示','页面加载异常,请稍后再试!','error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
$.ajax({
|
||||||
|
type: "get",
|
||||||
|
url: "/depotHead/list",
|
||||||
|
dataType: "json",
|
||||||
|
data: ({
|
||||||
|
search: JSON.stringify({
|
||||||
|
type: "其它",
|
||||||
|
subType: "采购订单",
|
||||||
|
roleType: roleType,
|
||||||
|
status: "1",
|
||||||
|
number: "",
|
||||||
|
beginTime: "",
|
||||||
|
endTime: "",
|
||||||
|
materialParam: "",
|
||||||
|
depotIds: depotString
|
||||||
|
}),
|
||||||
|
currentPage: 1,
|
||||||
|
pageSize: initPageSize
|
||||||
|
}),
|
||||||
|
success: function (res) {
|
||||||
|
if(res && res.code === 200){
|
||||||
|
if(res.data && res.data.page) {
|
||||||
|
$("#linkBillData").datagrid('loadData', res.data.page);
|
||||||
|
$("#saveLinkBill").off("click").on("click", function(){
|
||||||
|
var res = $('#linkBillData').datagrid('getChecked')[0];
|
||||||
|
$('#OrganId').combobox('setValue', res.organId);
|
||||||
|
$("#LinkNumber").textbox("setValue",res.number); //关联订单号
|
||||||
|
$("#DiscountLastMoney").val(res.totalPrice); //优惠后金额
|
||||||
|
$("#ChangeAmount").val(res.totalPrice).attr("data-changeamount", res.totalPrice);
|
||||||
|
depotHeadID = res.id;
|
||||||
|
initTableData_material("edit",res.totalPrice); //商品列表
|
||||||
|
$('#linkBillDlg').dialog('close');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//此处添加错误处理
|
||||||
|
error: function () {
|
||||||
|
$.messager.alert('查询提示', '查询数据后台异常,请稍后再试!', 'error');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
//编辑信息
|
//编辑信息
|
||||||
function editDepotHead(index) {
|
function editDepotHead(index) {
|
||||||
var res = $("#tableData").datagrid("getRows")[index];
|
var res = $("#tableData").datagrid("getRows")[index];
|
||||||
|
|||||||
@@ -291,7 +291,7 @@
|
|||||||
pageList: initPageNum,
|
pageList: initPageNum,
|
||||||
columns:[[
|
columns:[[
|
||||||
{ field: 'id',width:35,align:"center",checkbox:true},
|
{ field: 'id',width:35,align:"center",checkbox:true},
|
||||||
{ title: '操作',field: 'op',align:"center", width:120,
|
{ title: '操作',field: 'op',align:"center", width:90,
|
||||||
formatter:function(value,rec,index) {
|
formatter:function(value,rec,index) {
|
||||||
var str = '';
|
var str = '';
|
||||||
var orgId = rec.organId? rec.organId:0;
|
var orgId = rec.organId? rec.organId:0;
|
||||||
@@ -300,7 +300,6 @@
|
|||||||
str += '<img title="编辑" src="/js/easyui/themes/icons/pencil.png" style="cursor: pointer;" onclick="editDepotHead(\'' + index + '\');"/> ';
|
str += '<img title="编辑" src="/js/easyui/themes/icons/pencil.png" style="cursor: pointer;" onclick="editDepotHead(\'' + index + '\');"/> ';
|
||||||
str += '<img title="删除" src="/js/easyui/themes/icons/edit_remove.png" style="cursor: pointer;" onclick="inOutService.deleteDepotHead('+ rec.id +',' + orgId +',' + rec.totalPrice+',' + rec.status + ');"/>';
|
str += '<img title="删除" src="/js/easyui/themes/icons/edit_remove.png" style="cursor: pointer;" onclick="inOutService.deleteDepotHead('+ rec.id +',' + orgId +',' + rec.totalPrice+',' + rec.status + ');"/>';
|
||||||
}
|
}
|
||||||
str += ' <img title="转采购入库" src="/js/easyui/themes/icons/redo.png" style="cursor: pointer;" onclick="skipDepotHead(\'' + index + '\');"/>';
|
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -344,7 +344,7 @@ public class DepotHeadController {
|
|||||||
String rows = body.getRows();
|
String rows = body.getRows();
|
||||||
Long billsNumLimit = Long.parseLong(request.getSession().getAttribute("billsNumLimit").toString());
|
Long billsNumLimit = Long.parseLong(request.getSession().getAttribute("billsNumLimit").toString());
|
||||||
Long tenantId = Long.parseLong(request.getSession().getAttribute("tenantId").toString());
|
Long tenantId = Long.parseLong(request.getSession().getAttribute("tenantId").toString());
|
||||||
Long count = depotHeadService.countDepotHead(null,null,null,null,null,null,null,null);
|
Long count = depotHeadService.countDepotHead(null,null,null,null,null,null,null,null,null);
|
||||||
if(count>= billsNumLimit) {
|
if(count>= billsNumLimit) {
|
||||||
throw new BusinessParamCheckingException(ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_CODE,
|
throw new BusinessParamCheckingException(ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_CODE,
|
||||||
ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_MSG);
|
ExceptionConstants.DEPOT_HEAD_OVER_LIMIT_FAILED_MSG);
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ public interface DepotHeadMapperEx {
|
|||||||
@Param("type") String type,
|
@Param("type") String type,
|
||||||
@Param("subType") String subType,
|
@Param("subType") String subType,
|
||||||
@Param("creatorArray") String[] creatorArray,
|
@Param("creatorArray") String[] creatorArray,
|
||||||
|
@Param("status") String status,
|
||||||
@Param("number") String number,
|
@Param("number") String number,
|
||||||
@Param("beginTime") String beginTime,
|
@Param("beginTime") String beginTime,
|
||||||
@Param("endTime") String endTime,
|
@Param("endTime") String endTime,
|
||||||
@@ -34,6 +35,7 @@ public interface DepotHeadMapperEx {
|
|||||||
@Param("type") String type,
|
@Param("type") String type,
|
||||||
@Param("subType") String subType,
|
@Param("subType") String subType,
|
||||||
@Param("creatorArray") String[] creatorArray,
|
@Param("creatorArray") String[] creatorArray,
|
||||||
|
@Param("status") String status,
|
||||||
@Param("number") String number,
|
@Param("number") String number,
|
||||||
@Param("beginTime") String beginTime,
|
@Param("beginTime") String beginTime,
|
||||||
@Param("endTime") String endTime,
|
@Param("endTime") String endTime,
|
||||||
|
|||||||
@@ -33,12 +33,13 @@ public class DepotHeadComponent implements ICommonQuery {
|
|||||||
String type = StringUtil.getInfo(search, "type");
|
String type = StringUtil.getInfo(search, "type");
|
||||||
String subType = StringUtil.getInfo(search, "subType");
|
String subType = StringUtil.getInfo(search, "subType");
|
||||||
String roleType = StringUtil.getInfo(search, "roleType");
|
String roleType = StringUtil.getInfo(search, "roleType");
|
||||||
|
String status = StringUtil.getInfo(search, "status");
|
||||||
String number = StringUtil.getInfo(search, "number");
|
String number = StringUtil.getInfo(search, "number");
|
||||||
String beginTime = StringUtil.getInfo(search, "beginTime");
|
String beginTime = StringUtil.getInfo(search, "beginTime");
|
||||||
String endTime = StringUtil.getInfo(search, "endTime");
|
String endTime = StringUtil.getInfo(search, "endTime");
|
||||||
String materialParam = StringUtil.getInfo(search, "materialParam");
|
String materialParam = StringUtil.getInfo(search, "materialParam");
|
||||||
String depotIds = StringUtil.getInfo(search, "depotIds");
|
String depotIds = StringUtil.getInfo(search, "depotIds");
|
||||||
return depotHeadService.select(type, subType, roleType, number, beginTime, endTime, materialParam, depotIds, QueryUtils.offset(map), QueryUtils.rows(map));
|
return depotHeadService.select(type, subType, roleType, status, number, beginTime, endTime, materialParam, depotIds, QueryUtils.offset(map), QueryUtils.rows(map));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -47,12 +48,13 @@ public class DepotHeadComponent implements ICommonQuery {
|
|||||||
String type = StringUtil.getInfo(search, "type");
|
String type = StringUtil.getInfo(search, "type");
|
||||||
String subType = StringUtil.getInfo(search, "subType");
|
String subType = StringUtil.getInfo(search, "subType");
|
||||||
String roleType = StringUtil.getInfo(search, "roleType");
|
String roleType = StringUtil.getInfo(search, "roleType");
|
||||||
|
String status = StringUtil.getInfo(search, "status");
|
||||||
String number = StringUtil.getInfo(search, "number");
|
String number = StringUtil.getInfo(search, "number");
|
||||||
String beginTime = StringUtil.getInfo(search, "beginTime");
|
String beginTime = StringUtil.getInfo(search, "beginTime");
|
||||||
String endTime = StringUtil.getInfo(search, "endTime");
|
String endTime = StringUtil.getInfo(search, "endTime");
|
||||||
String materialParam = StringUtil.getInfo(search, "materialParam");
|
String materialParam = StringUtil.getInfo(search, "materialParam");
|
||||||
String depotIds = StringUtil.getInfo(search, "depotIds");
|
String depotIds = StringUtil.getInfo(search, "depotIds");
|
||||||
return depotHeadService.countDepotHead(type, subType, roleType, number, beginTime, endTime, materialParam, depotIds);
|
return depotHeadService.countDepotHead(type, subType, roleType, status, number, beginTime, endTime, materialParam, depotIds);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -82,13 +82,13 @@ public class DepotHeadService {
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DepotHeadVo4List> select(String type, String subType, String roleType, String number, String beginTime, String endTime,
|
public List<DepotHeadVo4List> select(String type, String subType, String roleType, String status, String number, String beginTime, String endTime,
|
||||||
String materialParam, String depotIds, int offset, int rows)throws Exception {
|
String materialParam, String depotIds, int offset, int rows)throws Exception {
|
||||||
List<DepotHeadVo4List> resList = new ArrayList<DepotHeadVo4List>();
|
List<DepotHeadVo4List> resList = new ArrayList<DepotHeadVo4List>();
|
||||||
List<DepotHeadVo4List> list=null;
|
List<DepotHeadVo4List> list=null;
|
||||||
try{
|
try{
|
||||||
String [] creatorArray = getCreatorArray(roleType);
|
String [] creatorArray = getCreatorArray(roleType);
|
||||||
list=depotHeadMapperEx.selectByConditionDepotHead(type, subType, creatorArray, number, beginTime, endTime, materialParam, depotIds, offset, rows);
|
list=depotHeadMapperEx.selectByConditionDepotHead(type, subType, creatorArray, status, number, beginTime, endTime, materialParam, depotIds, offset, rows);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
JshException.readFail(logger, e);
|
JshException.readFail(logger, e);
|
||||||
}
|
}
|
||||||
@@ -122,12 +122,12 @@ public class DepotHeadService {
|
|||||||
return resList;
|
return resList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long countDepotHead(String type, String subType, String roleType,String number, String beginTime, String endTime,
|
public Long countDepotHead(String type, String subType, String roleType, String status, String number, String beginTime, String endTime,
|
||||||
String materialParam, String depotIds) throws Exception{
|
String materialParam, String depotIds) throws Exception{
|
||||||
Long result=null;
|
Long result=null;
|
||||||
try{
|
try{
|
||||||
String [] creatorArray = getCreatorArray(roleType);
|
String [] creatorArray = getCreatorArray(roleType);
|
||||||
result=depotHeadMapperEx.countsByDepotHead(type, subType, creatorArray, number, beginTime, endTime, materialParam, depotIds);
|
result=depotHeadMapperEx.countsByDepotHead(type, subType, creatorArray, status, number, beginTime, endTime, materialParam, depotIds);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
JshException.readFail(logger, e);
|
JshException.readFail(logger, e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,9 @@
|
|||||||
<if test="subType != null">
|
<if test="subType != null">
|
||||||
and dh.sub_type='${subType}'
|
and dh.sub_type='${subType}'
|
||||||
</if>
|
</if>
|
||||||
|
<if test="status != null">
|
||||||
|
and dh.status ='${status}'
|
||||||
|
</if>
|
||||||
<if test="number != null">
|
<if test="number != null">
|
||||||
and dh.number like '%${number}%'
|
and dh.number like '%${number}%'
|
||||||
</if>
|
</if>
|
||||||
@@ -86,24 +89,27 @@
|
|||||||
<select id="countsByDepotHead" resultType="java.lang.Long">
|
<select id="countsByDepotHead" resultType="java.lang.Long">
|
||||||
SELECT
|
SELECT
|
||||||
COUNT(1) from
|
COUNT(1) from
|
||||||
(select distinct jsh_depot_head.* FROM jsh_depot_head
|
(select distinct dh.* FROM jsh_depot_head dh
|
||||||
left join jsh_depot_item di on jsh_depot_head.Id = di.header_id and ifnull(di.delete_flag,'0') !='1'
|
left join jsh_depot_item di on dh.Id = di.header_id and ifnull(di.delete_flag,'0') !='1'
|
||||||
left join jsh_material m on di.material_id = m.Id and ifnull(m.delete_Flag,'0') !='1'
|
left join jsh_material m on di.material_id = m.Id and ifnull(m.delete_Flag,'0') !='1'
|
||||||
WHERE 1=1
|
WHERE 1=1
|
||||||
<if test="type != null">
|
<if test="type != null">
|
||||||
and type='${type}'
|
and dh.type='${type}'
|
||||||
</if>
|
</if>
|
||||||
<if test="subType != null">
|
<if test="subType != null">
|
||||||
and sub_type='${subType}'
|
and dh.sub_type='${subType}'
|
||||||
|
</if>
|
||||||
|
<if test="status != null">
|
||||||
|
and dh.status ='${status}'
|
||||||
</if>
|
</if>
|
||||||
<if test="number != null">
|
<if test="number != null">
|
||||||
and number like '%${number}%'
|
and dh.number like '%${number}%'
|
||||||
</if>
|
</if>
|
||||||
<if test="beginTime != null">
|
<if test="beginTime != null">
|
||||||
and oper_time >= '${beginTime}'
|
and dh.oper_time >= '${beginTime}'
|
||||||
</if>
|
</if>
|
||||||
<if test="endTime != null">
|
<if test="endTime != null">
|
||||||
and oper_time <= '${endTime}'
|
and dh.oper_time <= '${endTime}'
|
||||||
</if>
|
</if>
|
||||||
<if test="materialParam != null">
|
<if test="materialParam != null">
|
||||||
and (m.`Name` like '%${materialParam}%' or m.Model like '%${materialParam}%')
|
and (m.`Name` like '%${materialParam}%' or m.Model like '%${materialParam}%')
|
||||||
@@ -112,13 +118,13 @@
|
|||||||
and di.depot_id in (${depotIds})
|
and di.depot_id in (${depotIds})
|
||||||
</if>
|
</if>
|
||||||
<if test="creatorArray != null">
|
<if test="creatorArray != null">
|
||||||
and creator in (
|
and dh.creator in (
|
||||||
<foreach collection="creatorArray" item="creator" separator=",">
|
<foreach collection="creatorArray" item="creator" separator=",">
|
||||||
#{creator}
|
#{creator}
|
||||||
</foreach>
|
</foreach>
|
||||||
)
|
)
|
||||||
</if>
|
</if>
|
||||||
and ifnull(jsh_depot_head.delete_Flag,'0') !='1') tb
|
and ifnull(dh.delete_Flag,'0') !='1') tb
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="findMaterialsListByHeaderId" resultType="java.lang.String">
|
<select id="findMaterialsListByHeaderId" resultType="java.lang.String">
|
||||||
|
|||||||
Reference in New Issue
Block a user