增加看板汇总功能
This commit is contained in:
@@ -0,0 +1,354 @@
|
||||
using Aspose.Words;
|
||||
using BLL;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Data.SqlClient;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
|
||||
namespace FineUIPro.Web.ZHGL.DataSync
|
||||
{
|
||||
public partial class DataStatistics : PageBase
|
||||
{
|
||||
#region 加载
|
||||
/// <summary>
|
||||
/// 加载页面
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
protected void Page_Load(object sender, EventArgs e)
|
||||
{
|
||||
if (!IsPostBack)
|
||||
{
|
||||
// 绑定表格
|
||||
this.BindGrid();
|
||||
OutputSummaryData();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 绑定数据Grid1
|
||||
/// <summary>
|
||||
/// 绑定数据Grid1
|
||||
/// </summary>
|
||||
private void BindGrid()
|
||||
{
|
||||
string strSql = @"select * from View_DataStatistics ";
|
||||
tb = SQLHelper.GetDataTableRunText(strSql, null);
|
||||
Grid1.RecordCount = tb.Rows.Count;
|
||||
var tab = GetFilteredTable(Grid1.FilteredData, tb);
|
||||
var table = GetPagedDataTable(Grid1, tab);
|
||||
Grid1.DataSource = table;
|
||||
Grid1.DataBind();
|
||||
}
|
||||
#endregion
|
||||
|
||||
private DataTable tb = null;
|
||||
|
||||
private void OutputSummaryData()
|
||||
{
|
||||
if (tb != null)
|
||||
{
|
||||
int CommissionerPersonNum = 0;
|
||||
int FullTimePersonNum = 0;
|
||||
int SafetySupervisionPersonNum = 0;
|
||||
int InjectionSafetyEngineerPersonNum = 0;
|
||||
int ACertificatePersonNum = 0;
|
||||
int BCertificatePersonNum = 0;
|
||||
int CCertificatePersonNum = 0;
|
||||
int TotalWorkingHours = 0;
|
||||
int LostWorkingHours = 0;
|
||||
int SafeWorkingHours = 0;
|
||||
int SafeTrainNum = 0;
|
||||
int SpecialTrainNum = 0;
|
||||
int SpecialOperationTrainNum = 0;
|
||||
int ProjectSafetyLeadingGroupMeetingNum = 0;
|
||||
int ProjectSafetyMeetingNum = 0;
|
||||
int ProjectLeadShiftCheckNum = 0;
|
||||
int ProjectSpecialCheckNum = 0;
|
||||
int ProjectMajorCheckNum = 0;
|
||||
int NearMissNum = 0;
|
||||
int RecordableEventNum = 0;
|
||||
int GeneralAccidentNum = 0;
|
||||
int MajorAccidentNum = 0;
|
||||
int SeriousAccidentNum = 0;
|
||||
int SpecialSeriousAccidentNum = 0;
|
||||
int ProjectComprehensivePlanNum = 0;
|
||||
int ProjectSpecialPlanNum = 0;
|
||||
int ProjectOnSiteDisposalPlanNum = 0;
|
||||
int ProjectDrillNum = 0;
|
||||
int CostUse = 0;
|
||||
int UseEquipmentNum = 0;
|
||||
int SpecialEquipmentNum = 0;
|
||||
int LicensesNum = 0;
|
||||
int LicensesCloseNum = 0;
|
||||
int GeneralClosedNum = 0;
|
||||
int GeneralNotClosedNum = 0;
|
||||
string GeneralRate = "/";
|
||||
int MajorClosedNum = 0;
|
||||
int MajorNotClosedNum = 0;
|
||||
string MajorRate = "/";
|
||||
int LowRiskNum = 0;
|
||||
int GeneralRiskNum = 0;
|
||||
int MediumRiskNum = 0;
|
||||
int HighRiskNum = 0;
|
||||
int CompletedNum = 0;
|
||||
int TrainPersonNum = 0;
|
||||
int ConstructionNum = 0;
|
||||
int FinishedNum = 0;
|
||||
int SuperCompletedNum = 0;
|
||||
int SuperTrainPersonNum = 0;
|
||||
int SuperConstructionNum = 0;
|
||||
int SuperFinishedNum = 0;
|
||||
int QTrainPersonNum = 0;
|
||||
int TechnicalDisclosePersonNum = 0;
|
||||
int UseNum = 0;
|
||||
int OKNum = 0;
|
||||
int ProjectPersonNum = 0;
|
||||
int ProblemNum = 0;
|
||||
int ProblemCompletedNum = 0;
|
||||
int ProblemNotCompletedNum = 0;
|
||||
string ProblemRate = "/";
|
||||
int ANum = 0;
|
||||
int BNum = 0;
|
||||
int CNum = 0;
|
||||
int KeyProcessNum = 0;
|
||||
int KeyProcessOkNum = 0;
|
||||
string KeyProcessRate = "/";
|
||||
int SpecialProcessNum = 0;
|
||||
int SpecialProcessOkNum = 0;
|
||||
string SpecialProcessRate = "/";
|
||||
int ConcealedWorksNum = 0;
|
||||
int ConcealedWorksOkNum = 0;
|
||||
string ConcealedWorksRate = "/";
|
||||
int UnitProjectOnesNum = 0;
|
||||
int UnitProjectOnesOKNum = 0;
|
||||
string UnitProjectOnesRate = "/";
|
||||
int MaterialInRecheckNum = 0;
|
||||
int MaterialInRecheckOKNum = 0;
|
||||
string MaterialInRecheckRate = "/";
|
||||
int SingleProjectNum = 0;
|
||||
int UnitProjectNum = 0;
|
||||
int SubProjectNum = 0;
|
||||
int SubdivisionalWorksNum = 0;
|
||||
int InspectionLotNum = 0;
|
||||
int WelderNum = 0;
|
||||
int TotalDineNum = 0;
|
||||
int CompleteDineNum = 0;
|
||||
int TotalFilmNum = 0;
|
||||
int OKFilmNum = 0;
|
||||
foreach (DataRow row in tb.Rows)
|
||||
{
|
||||
CommissionerPersonNum += Funs.GetNewIntOrZero(row["CommissionerPersonNum"].ToString());
|
||||
FullTimePersonNum += Funs.GetNewIntOrZero(row["FullTimePersonNum"].ToString());
|
||||
SafetySupervisionPersonNum += Funs.GetNewIntOrZero(row["SafetySupervisionPersonNum"].ToString());
|
||||
InjectionSafetyEngineerPersonNum += Funs.GetNewIntOrZero(row["InjectionSafetyEngineerPersonNum"].ToString());
|
||||
ACertificatePersonNum += Funs.GetNewIntOrZero(row["ACertificatePersonNum"].ToString());
|
||||
BCertificatePersonNum += Funs.GetNewIntOrZero(row["BCertificatePersonNum"].ToString());
|
||||
CCertificatePersonNum += Funs.GetNewIntOrZero(row["CCertificatePersonNum"].ToString());
|
||||
TotalWorkingHours += Funs.GetNewIntOrZero(row["TotalWorkingHours"].ToString());
|
||||
LostWorkingHours += Funs.GetNewIntOrZero(row["LostWorkingHours"].ToString());
|
||||
SafeWorkingHours += Funs.GetNewIntOrZero(row["SafeWorkingHours"].ToString());
|
||||
SafeTrainNum += Funs.GetNewIntOrZero(row["SafeTrainNum"].ToString());
|
||||
SpecialTrainNum += Funs.GetNewIntOrZero(row["SpecialTrainNum"].ToString());
|
||||
SpecialOperationTrainNum += Funs.GetNewIntOrZero(row["SpecialOperationTrainNum"].ToString());
|
||||
ProjectSafetyLeadingGroupMeetingNum += Funs.GetNewIntOrZero(row["ProjectSafetyLeadingGroupMeetingNum"].ToString());
|
||||
ProjectSafetyMeetingNum += Funs.GetNewIntOrZero(row["ProjectSafetyMeetingNum"].ToString());
|
||||
ProjectLeadShiftCheckNum += Funs.GetNewIntOrZero(row["ProjectLeadShiftCheckNum"].ToString());
|
||||
ProjectSpecialCheckNum += Funs.GetNewIntOrZero(row["ProjectSpecialCheckNum"].ToString());
|
||||
ProjectMajorCheckNum += Funs.GetNewIntOrZero(row["ProjectMajorCheckNum"].ToString());
|
||||
NearMissNum += Funs.GetNewIntOrZero(row["NearMissNum"].ToString());
|
||||
RecordableEventNum += Funs.GetNewIntOrZero(row["RecordableEventNum"].ToString());
|
||||
GeneralAccidentNum += Funs.GetNewIntOrZero(row["GeneralAccidentNum"].ToString());
|
||||
MajorAccidentNum += Funs.GetNewIntOrZero(row["MajorAccidentNum"].ToString());
|
||||
SeriousAccidentNum += Funs.GetNewIntOrZero(row["SeriousAccidentNum"].ToString());
|
||||
SpecialSeriousAccidentNum += Funs.GetNewIntOrZero(row["SpecialSeriousAccidentNum"].ToString());
|
||||
ProjectComprehensivePlanNum += Funs.GetNewIntOrZero(row["ProjectComprehensivePlanNum"].ToString());
|
||||
ProjectSpecialPlanNum += Funs.GetNewIntOrZero(row["ProjectSpecialPlanNum"].ToString());
|
||||
ProjectOnSiteDisposalPlanNum += Funs.GetNewIntOrZero(row["ProjectOnSiteDisposalPlanNum"].ToString());
|
||||
ProjectDrillNum += Funs.GetNewIntOrZero(row["ProjectDrillNum"].ToString());
|
||||
CostUse += Funs.GetNewIntOrZero(row["CostUse"].ToString());
|
||||
UseEquipmentNum += Funs.GetNewIntOrZero(row["UseEquipmentNum"].ToString());
|
||||
SpecialEquipmentNum += Funs.GetNewIntOrZero(row["SpecialEquipmentNum"].ToString());
|
||||
LicensesNum += Funs.GetNewIntOrZero(row["LicensesNum"].ToString());
|
||||
LicensesCloseNum += Funs.GetNewIntOrZero(row["LicensesCloseNum"].ToString());
|
||||
GeneralClosedNum += Funs.GetNewIntOrZero(row["GeneralClosedNum"].ToString());
|
||||
GeneralNotClosedNum += Funs.GetNewIntOrZero(row["GeneralNotClosedNum"].ToString());
|
||||
MajorClosedNum += Funs.GetNewIntOrZero(row["MajorClosedNum"].ToString());
|
||||
MajorNotClosedNum += Funs.GetNewIntOrZero(row["MajorNotClosedNum"].ToString());
|
||||
LowRiskNum += Funs.GetNewIntOrZero(row["LowRiskNum"].ToString());
|
||||
GeneralRiskNum += Funs.GetNewIntOrZero(row["GeneralRiskNum"].ToString());
|
||||
MediumRiskNum += Funs.GetNewIntOrZero(row["MediumRiskNum"].ToString());
|
||||
HighRiskNum += Funs.GetNewIntOrZero(row["HighRiskNum"].ToString());
|
||||
CompletedNum += Funs.GetNewIntOrZero(row["CompletedNum"].ToString());
|
||||
TrainPersonNum += Funs.GetNewIntOrZero(row["TrainPersonNum"].ToString());
|
||||
ConstructionNum += Funs.GetNewIntOrZero(row["ConstructionNum"].ToString());
|
||||
FinishedNum += Funs.GetNewIntOrZero(row["FinishedNum"].ToString());
|
||||
SuperCompletedNum += Funs.GetNewIntOrZero(row["SuperCompletedNum"].ToString());
|
||||
SuperTrainPersonNum += Funs.GetNewIntOrZero(row["SuperTrainPersonNum"].ToString());
|
||||
SuperConstructionNum += Funs.GetNewIntOrZero(row["SuperConstructionNum"].ToString());
|
||||
SuperFinishedNum += Funs.GetNewIntOrZero(row["SuperFinishedNum"].ToString());
|
||||
QTrainPersonNum += Funs.GetNewIntOrZero(row["QTrainPersonNum"].ToString());
|
||||
TechnicalDisclosePersonNum += Funs.GetNewIntOrZero(row["TechnicalDisclosePersonNum"].ToString());
|
||||
UseNum += Funs.GetNewIntOrZero(row["UseNum"].ToString());
|
||||
OKNum += Funs.GetNewIntOrZero(row["OKNum"].ToString());
|
||||
ProjectPersonNum += Funs.GetNewIntOrZero(row["ProjectPersonNum"].ToString());
|
||||
ProblemNum += Funs.GetNewIntOrZero(row["ProblemNum"].ToString());
|
||||
ProblemCompletedNum += Funs.GetNewIntOrZero(row["ProblemCompletedNum"].ToString());
|
||||
ProblemNotCompletedNum += Funs.GetNewIntOrZero(row["ProblemNotCompletedNum"].ToString());
|
||||
ANum += Funs.GetNewIntOrZero(row["ANum"].ToString());
|
||||
BNum += Funs.GetNewIntOrZero(row["BNum"].ToString());
|
||||
CNum += Funs.GetNewIntOrZero(row["CNum"].ToString());
|
||||
KeyProcessNum += Funs.GetNewIntOrZero(row["KeyProcessNum"].ToString());
|
||||
KeyProcessOkNum += Funs.GetNewIntOrZero(row["KeyProcessOkNum"].ToString());
|
||||
SpecialProcessNum += Funs.GetNewIntOrZero(row["SpecialProcessNum"].ToString());
|
||||
SpecialProcessOkNum += Funs.GetNewIntOrZero(row["SpecialProcessOkNum"].ToString());
|
||||
ConcealedWorksNum += Funs.GetNewIntOrZero(row["ConcealedWorksNum"].ToString());
|
||||
ConcealedWorksOkNum += Funs.GetNewIntOrZero(row["ConcealedWorksOkNum"].ToString());
|
||||
UnitProjectOnesNum += Funs.GetNewIntOrZero(row["UnitProjectOnesNum"].ToString());
|
||||
UnitProjectOnesOKNum += Funs.GetNewIntOrZero(row["UnitProjectOnesOKNum"].ToString());
|
||||
MaterialInRecheckNum += Funs.GetNewIntOrZero(row["MaterialInRecheckNum"].ToString());
|
||||
MaterialInRecheckOKNum += Funs.GetNewIntOrZero(row["MaterialInRecheckOKNum"].ToString());
|
||||
SingleProjectNum += Funs.GetNewIntOrZero(row["SingleProjectNum"].ToString());
|
||||
UnitProjectNum += Funs.GetNewIntOrZero(row["UnitProjectNum"].ToString());
|
||||
SubProjectNum += Funs.GetNewIntOrZero(row["SubProjectNum"].ToString());
|
||||
SubdivisionalWorksNum += Funs.GetNewIntOrZero(row["SubdivisionalWorksNum"].ToString());
|
||||
InspectionLotNum += Funs.GetNewIntOrZero(row["InspectionLotNum"].ToString());
|
||||
WelderNum += Funs.GetNewIntOrZero(row["WelderNum"].ToString());
|
||||
TotalDineNum += Funs.GetNewIntOrZero(row["TotalDineNum"].ToString());
|
||||
CompleteDineNum += Funs.GetNewIntOrZero(row["CompleteDineNum"].ToString());
|
||||
TotalFilmNum += Funs.GetNewIntOrZero(row["TotalFilmNum"].ToString());
|
||||
OKFilmNum += Funs.GetNewIntOrZero(row["OKFilmNum"].ToString());
|
||||
}
|
||||
if ((GeneralClosedNum + GeneralNotClosedNum) > 0)
|
||||
{
|
||||
GeneralRate = decimal.Round(decimal.Parse((Convert.ToDecimal(GeneralClosedNum) / (GeneralClosedNum + GeneralNotClosedNum) * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if ((MajorClosedNum + MajorNotClosedNum) > 0)
|
||||
{
|
||||
MajorRate = decimal.Round(decimal.Parse((Convert.ToDecimal(MajorClosedNum) / (MajorClosedNum + MajorNotClosedNum) * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (ProblemNum > 0)
|
||||
{
|
||||
ProblemRate = decimal.Round(decimal.Parse((Convert.ToDecimal(ProblemCompletedNum) / ProblemNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (KeyProcessNum > 0)
|
||||
{
|
||||
KeyProcessRate = decimal.Round(decimal.Parse((Convert.ToDecimal(KeyProcessOkNum) / KeyProcessNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (SpecialProcessNum > 0)
|
||||
{
|
||||
SpecialProcessRate = decimal.Round(decimal.Parse((Convert.ToDecimal(SpecialProcessOkNum) / SpecialProcessNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (ConcealedWorksNum > 0)
|
||||
{
|
||||
ConcealedWorksRate = decimal.Round(decimal.Parse((Convert.ToDecimal(ConcealedWorksOkNum) / ConcealedWorksNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (UnitProjectOnesNum > 0)
|
||||
{
|
||||
UnitProjectOnesRate = decimal.Round(decimal.Parse((Convert.ToDecimal(UnitProjectOnesOKNum) / UnitProjectOnesNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
if (MaterialInRecheckNum > 0)
|
||||
{
|
||||
MaterialInRecheckRate = decimal.Round(decimal.Parse((Convert.ToDecimal(MaterialInRecheckOKNum) / MaterialInRecheckNum * 100).ToString()), 2).ToString() + "%";
|
||||
}
|
||||
JObject summary = new JObject
|
||||
{
|
||||
{ "ShortName", "合计" },
|
||||
{ "CommissionerPersonNum", CommissionerPersonNum },
|
||||
{ "FullTimePersonNum", FullTimePersonNum },
|
||||
{ "SafetySupervisionPersonNum", SafetySupervisionPersonNum },
|
||||
{ "InjectionSafetyEngineerPersonNum", InjectionSafetyEngineerPersonNum },
|
||||
{ "ACertificatePersonNum", ACertificatePersonNum },
|
||||
{ "BCertificatePersonNum", BCertificatePersonNum },
|
||||
{ "CCertificatePersonNum", CCertificatePersonNum },
|
||||
{ "TotalWorkingHours", TotalWorkingHours },
|
||||
{ "LostWorkingHours", LostWorkingHours },
|
||||
{ "SafeWorkingHours", SafeWorkingHours },
|
||||
{ "SafeTrainNum", SafeTrainNum },
|
||||
{ "SpecialTrainNum", SpecialTrainNum },
|
||||
{ "SpecialOperationTrainNum", SpecialOperationTrainNum },
|
||||
{ "ProjectSafetyLeadingGroupMeetingNum", ProjectSafetyLeadingGroupMeetingNum },
|
||||
{ "ProjectSafetyMeetingNum", ProjectSafetyMeetingNum },
|
||||
{ "ProjectLeadShiftCheckNum", ProjectLeadShiftCheckNum },
|
||||
{ "ProjectSpecialCheckNum", ProjectSpecialCheckNum },
|
||||
{ "ProjectMajorCheckNum", ProjectMajorCheckNum },
|
||||
{ "NearMissNum", NearMissNum },
|
||||
{ "RecordableEventNum", RecordableEventNum },
|
||||
{ "GeneralAccidentNum", GeneralAccidentNum },
|
||||
{ "MajorAccidentNum", MajorAccidentNum },
|
||||
{ "SeriousAccidentNum", SeriousAccidentNum },
|
||||
{ "SpecialSeriousAccidentNum", SpecialSeriousAccidentNum },
|
||||
{ "ProjectComprehensivePlanNum", ProjectComprehensivePlanNum },
|
||||
{ "ProjectSpecialPlanNum", ProjectSpecialPlanNum },
|
||||
{ "ProjectOnSiteDisposalPlanNum", ProjectOnSiteDisposalPlanNum },
|
||||
{ "ProjectDrillNum", ProjectDrillNum },
|
||||
{ "CostUse", CostUse },
|
||||
{ "UseEquipmentNum", UseEquipmentNum },
|
||||
{ "SpecialEquipmentNum", SpecialEquipmentNum },
|
||||
{ "LicensesNum", LicensesNum },
|
||||
{ "LicensesCloseNum", LicensesCloseNum },
|
||||
{ "GeneralClosedNum", GeneralClosedNum },
|
||||
{ "GeneralNotClosedNum", GeneralNotClosedNum },
|
||||
{ "GeneralRate", GeneralRate },
|
||||
{ "MajorClosedNum", MajorClosedNum },
|
||||
{ "MajorNotClosedNum", MajorNotClosedNum },
|
||||
{ "MajorRate", MajorRate },
|
||||
{ "LowRiskNum", LowRiskNum },
|
||||
{ "GeneralRiskNum", GeneralRiskNum },
|
||||
{ "MediumRiskNum", MediumRiskNum },
|
||||
{ "HighRiskNum", HighRiskNum },
|
||||
{ "CompletedNum", CompletedNum },
|
||||
{ "TrainPersonNum", TrainPersonNum },
|
||||
{ "ConstructionNum", ConstructionNum },
|
||||
{ "FinishedNum", FinishedNum },
|
||||
{ "SuperCompletedNum", SuperCompletedNum },
|
||||
{ "SuperTrainPersonNum", SuperTrainPersonNum },
|
||||
{ "SuperConstructionNum", SuperConstructionNum },
|
||||
{ "SuperFinishedNum", SuperFinishedNum },
|
||||
{ "QTrainPersonNum", QTrainPersonNum },
|
||||
{ "TechnicalDisclosePersonNum", TechnicalDisclosePersonNum },
|
||||
{ "UseNum", UseNum },
|
||||
{ "OKNum", OKNum },
|
||||
{ "ProjectPersonNum", ProjectPersonNum },
|
||||
{ "ProblemNum", ProblemNum },
|
||||
{ "ProblemCompletedNum", ProblemCompletedNum },
|
||||
{ "ProblemNotCompletedNum", ProblemNotCompletedNum },
|
||||
{ "ProblemRate", ProblemRate },
|
||||
{ "ANum", ANum },
|
||||
{ "BNum", BNum },
|
||||
{ "CNum", CNum },
|
||||
{ "KeyProcessNum", KeyProcessNum },
|
||||
{ "KeyProcessOkNum", KeyProcessOkNum },
|
||||
{ "KeyProcessRate", KeyProcessRate },
|
||||
{ "SpecialProcessNum", SpecialProcessNum },
|
||||
{ "SpecialProcessOkNum", SpecialProcessOkNum },
|
||||
{ "SpecialProcessRate", SpecialProcessRate },
|
||||
{ "ConcealedWorksNum", ConcealedWorksNum },
|
||||
{ "ConcealedWorksOkNum", ConcealedWorksOkNum },
|
||||
{ "ConcealedWorksRate", ConcealedWorksRate },
|
||||
{ "UnitProjectOnesNum", UnitProjectOnesNum },
|
||||
{ "UnitProjectOnesOKNum", UnitProjectOnesOKNum },
|
||||
{ "UnitProjectOnesRate", UnitProjectOnesRate },
|
||||
{ "MaterialInRecheckNum", MaterialInRecheckNum },
|
||||
{ "MaterialInRecheckOKNum", MaterialInRecheckOKNum },
|
||||
{ "MaterialInRecheckRate", MaterialInRecheckRate },
|
||||
{ "SingleProjectNum", SingleProjectNum },
|
||||
{ "UnitProjectNum", UnitProjectNum },
|
||||
{ "SubProjectNum", SubProjectNum },
|
||||
{ "SubdivisionalWorksNum", SubdivisionalWorksNum },
|
||||
{ "InspectionLotNum", InspectionLotNum },
|
||||
{ "WelderNum", WelderNum },
|
||||
{ "TotalDineNum", TotalDineNum },
|
||||
{ "CompleteDineNum", CompleteDineNum },
|
||||
{ "TotalFilmNum", TotalFilmNum },
|
||||
{ "OKFilmNum", OKFilmNum }
|
||||
};
|
||||
Grid1.SummaryData = summary;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user