From 124dd32a34ced09ae87935e953dec6401d86f9ac Mon Sep 17 00:00:00 2001
From: yxj <yxj@hz-kingdee.com>
Date: 星期四, 26 十二月 2024 15:14:45 +0800
Subject: [PATCH] PDA扫码模块,根据条码删除缓存列表中对应条码记录调用方法修改,增加根据托条码删除对应记录
---
WebAPI/Controllers/CJGL/Cj_SingleStationController.cs | 321 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 305 insertions(+), 16 deletions(-)
diff --git a/WebAPI/Controllers/CJGL/Cj_SingleStationController.cs b/WebAPI/Controllers/CJGL/Cj_SingleStationController.cs
index 70a5f6d..e8ee20f 100644
--- a/WebAPI/Controllers/CJGL/Cj_SingleStationController.cs
+++ b/WebAPI/Controllers/CJGL/Cj_SingleStationController.cs
@@ -322,9 +322,23 @@
objJsonResult.data = null;
return objJsonResult;
}
-
+ string HProcID = "0";
ds = oCN.RunProcReturn("select * from gy_czygl WITH(NOLOCK) where czymc='" + user + "'", "gy_czygl");
- string HProcID = ds.Tables[0].Rows[0]["HProcID"].ToString();
+ if (ds.Tables[0].Rows.Count > 0)
+ {
+ HProcID = ds.Tables[0].Rows[0]["HProcID"].ToString();
+ }
+
+ //鍒ゆ柇褰撳墠娴佽浆鍗℃槸鍚︽槸寮�宸�
+ ds = oCN.RunProcReturn("select * from Sc_ICMOBillStatus_Tmp where HSourceBillNo='" + HBarCode + "' and HICMOStatus<>'0'", "Sc_ICMOBillStatus_Tmp");
+ if (ds.Tables[0].Rows.Count == 0)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "鍗″彿:" + HBarCode + ",娴佽浆鍗℃湭寮�宸�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
ds = oCN.RunProcReturn(@"exec h_p_Gy_BarCodeBillBomList '" + HBarCode + "'," + HProcID, "h_p_Gy_BarCodeBillBomList");
if (ds.Tables[0].Rows.Count == 0)
@@ -414,14 +428,22 @@
string HProcID = ds.Tables[0].Rows[0]["HProcID"].ToString();
oCN.RunProc("delete from Sc_AssemblyBill_BindSourceTemp where HInterID =" + HInterID + " and HBillNo_bak='" + HBillNo + "'");
+ oCN.RunProc("delete from Sc_AssemblyBill_BindBarCodeTemp where HInterID =" + HInterID + " and HBillNo_bak='" + HBillNo + "'");
for (int i = 0; i < tempList.Count; i++)
{
- //涓存椂閰嶄欢琛�
+ //涓存椂婧愬崟琛�
oCN.RunProc("Insert Into Sc_AssemblyBill_BindSourceTemp " +
"(HInterID,HEntryID,HBillNo_bak,HSourceBillNo,HSourceInterID,HSourceEntryID,HMaterID" +
",HQtyMust,HProdOrgID,HSourceBillType,HAuxPropID,HProcID,HQty,HBatchNo,HMTONo,HPlanMode) " +
" values(" + HInterID + "," + (i + 1) + ",'" + HBillNo + "','" + tempList[i].HProcExchBillNo + "',"+ tempList[i].HProcExchInterID + "," + tempList[i].HProcExchEntryID +","+ tempList[i].HMaterID+
",'0','" + HOrgID + "','',0,"+ HProcID + ","+ tempList[i].HQty + ",'" + tempList[i].HBatchNo + "','','') ");
+
+ //涓存椂閰嶄欢琛�
+ oCN.RunProc("Insert Into Sc_AssemblyBill_BindBarCodeTemp " +
+ "(HInterID,HEntryID,HBillNo_bak,HSourceBillNo,HSourceInterID,HSourceEntryID,HMaterID" +
+ ",HProdOrgID,HSourceBillType,HAuxPropID,HProcID,HQty,HBatchNo,HBarCode,HMTONo,HPlanMode) " +
+ " values(" + HInterID + "," + (i + 1) + ",'" + HBillNo + "','" + tempList[i].HProcExchBillNo + "'," + tempList[i].HProcExchInterID + "," + tempList[i].HProcExchEntryID + "," + tempList[i].HMaterID +
+ ",'" + HOrgID + "','',0," + HProcID + "," + tempList[i].HQty + ",'"+ tempList[i].HBatchNo + "','" + tempList[i].HBarCode + "','','') ");
}
oCN.Commit();
@@ -674,8 +696,26 @@
oCN.RunProc($@"insert into Sc_StationOutBillSub_SN(HInterID,HBillNo_bak,HEntryID,HBarCode,HBarCodeQty,HMakeTime,HRemark,HSourceInterID,HSourceEntryID,HSourceBillNo,HSourceBillType,HRelationQty,HRelationMoney)
values({HInterID}, '{HBillNo}', {(ds.Tables[0].Rows.Count == 0 ? 1 : int.Parse(ds.Tables[0].Rows[0]["HEntryID"].ToString()) + 1)}, '{omodel.HBarCode_P}', 1, GETDATE(), '', " + HProcExchInterID + ","+ HProcExchEntryID + ", '"+ HProcExchBillNo + "', '', 0, 0)");
+ //鎶婃潯鐮佸啓鍏ユ棩蹇楅噷闈�
+ LogService.CustomWriteLog("鏉$爜:" + omodel.HBarCode_P + ",宸ュ簭:"+ HProcID + ",鍑虹珯鏃堕棿:" + DateTime.Now, "TM" + DateTime.Now.ToString("yyyy-MM-dd"));
+
//鍙嶅啓宸ュ簭鍑虹珯鍗曠殑鍚堟牸鏁伴噺
oCN.RunProc("update Sc_StationOutBillMain set HQty+=1 where HProcExchInterID='" + HProcExchInterID + "' and HProcExchEntryID=" + HProcExchEntryID+ " and HInterID=" + HInterID);
+
+
+ ds = oCN.RunProcReturn($@"select (b.HQty -sum(isnull(ou.HQty,0))-sum(isnull(ou.HBadCount,0))) HQty from Sc_ProcessExchangeBillSub b WITH(NOLOCK)
+left join Sc_StationOutBillMain ou WITH(NOLOCK) on b.HInterID=ou.HProcExchInterID and b.HEntryID=ou.HProcExchEntryID
+where b.HInterID={HProcExchInterID} and b.HEntryID={HProcExchEntryID}
+group by b.HInterID,b.HEntryID,b.HQty", "Sc_ProcessExchangeBill_Out");
+
+ if (double.Parse(ds.Tables[0].Rows[0][0].ToString()) < 0) {
+ oCN.RollBack();
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "鍑虹珯鏁伴噺瓒呰繃娴佽浆鍗℃暟閲�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
oCN.Commit();
@@ -706,16 +746,75 @@
try
{
ds = oCN.RunProcReturn(@"select * from h_v_Gy_BarCodeBill WITH(NOLOCK) where HBarCode='" + HBarCode + "'", "h_v_Gy_BarCodeBill");
+
+ //鍒ゆ柇鏉$爜鏄惁瀛樺湪鏉$爜妗f
+ if (ds.Tables[0].Rows.Count > 0)
+ {
+ string HSourceBillNo = ds.Tables[0].Rows[0]["HSourceBillNo"].ToString();
+ DataSet dataTable = oCN.RunProcReturn(@"select * from Sc_ProcessExchangeBillMain where HBillNo='" + HSourceBillNo + "'", "Sc_ProcessExchangeBillMain");
+ //鍒ゆ柇鏉$爜鐨勬簮鍗� 娴佽浆鍗℃槸鍚﹁鍒犻櫎
+ if (dataTable.Tables[0].Rows.Count == 0)
+ {
+ //濡傛灉婧愬崟宸茬粡鍒犻櫎 鍒欐潯鐮佷篃鍒犻櫎閲嶆柊鐢熸垚
+ oCN.RunProc("delete from Gy_BarCodeBill where HBarCode='" + HBarCode + "'");
+
+ //閲嶆柊鏌ヨ鏉$爜妗f 杩涘叆鏂板鏂规硶
+ ds = oCN.RunProcReturn(@"select * from Gy_BarCodeBill where HBarCode='" + HBarCode + "'", "Gy_BarCodeBill");
+ }
+ }
+
if (ds.Tables[0].Rows.Count == 0)
{
+ //鍒ゆ柇闀垮害鏄惁涓�29浣� 鏃犲皹杞﹂棿
if (HBarCode.Length == 29)
{
- string str1 = HBarCode.Substring(23, 3);
+ string str1 = HBarCode.Substring(18, 8);
DataSet dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
-where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID="+ HOrgID, "Sc_ProcessExchangeBillMain");
+where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
+
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ str1 = HBarCode.Substring(23, 3);
+
+ dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
+left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
+left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
+where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
+
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "鏉$爜涓庢祦杞崱涓嶅瓨鍦ㄥ搴斿叧绯�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ else
+ {
+ ClsPub.CurUserName = user;
+ //鏉$爜鐢熸垚
+ return get_HBardBillSave(HProcExchBillNo, HBarCode);
+ }
+ }
+ else
+ {
+ ClsPub.CurUserName = user;
+ //鏉$爜鐢熸垚
+ return get_HBardBillSave(HProcExchBillNo, HBarCode);
+ }
+ }
+ //鍒ゆ柇闀垮害鏄惁涓�50浣� 15杞﹂棿
+ else if (HBarCode.Length == 50)
+ {
+ string str1 = HBarCode.Substring(42, 8);
+
+ DataSet dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
+left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
+left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
+where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
if (dataSet.Tables[0].Rows.Count == 0)
{
@@ -725,7 +824,8 @@
objJsonResult.data = null;
return objJsonResult;
}
- else {
+ else
+ {
ClsPub.CurUserName = user;
//鏉$爜鐢熸垚
return get_HBardBillSave(HProcExchBillNo, HBarCode);
@@ -741,21 +841,53 @@
}
}
else {
-
- string str1 = HBarCode.Substring(23, 3);
+ //鍒ゆ柇闀垮害鏄惁涓�29浣� 鏃犲皹杞﹂棿
+ if (HBarCode.Length == 29)
+ {
+ string str1 = HBarCode.Substring(18, 8);
- DataSet dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
+ DataSet dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
- if (dataSet.Tables[0].Rows.Count == 0)
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ str1 = HBarCode.Substring(23, 3);
+
+ dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
+left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
+left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
+where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
+
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "鏉$爜涓庢祦杞崱涓嶅瓨鍦ㄥ搴斿叧绯�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ }
+ }
+ //鍒ゆ柇闀垮害鏄惁涓�50浣� 15杞﹂棿
+ else if (HBarCode.Length == 50)
{
- objJsonResult.code = "0";
- objJsonResult.count = 0;
- objJsonResult.Message = "鏉$爜涓庢祦杞崱涓嶅瓨鍦ㄥ搴斿叧绯�!";
- objJsonResult.data = null;
- return objJsonResult;
+ string str1 = HBarCode.Substring(42, 8);
+
+ DataSet dataSet = oCN.RunProcReturn(@"select m.HNumber 鐗╂枡浠g爜,o.HNumber 缁勭粐浠g爜 from Sc_ProcessExchangeBillMain a WITH(NOLOCK)
+left join Gy_Material m WITH(NOLOCK) on a.HMaterID=m.HItemID
+left join Xt_ORGANIZATIONS o WITH(NOLOCK) on a.HPRDORGID=o.HItemID
+where HBillNo='" + HProcExchBillNo + "' and HProjectNum like'" + str1 + "%' and HPRDORGID=" + HOrgID, "Sc_ProcessExchangeBillMain");
+
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "鏉$爜涓庢祦杞崱涓嶅瓨鍦ㄥ搴斿叧绯�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
}
if (ds.Tables[0].Rows[0]["HStatus"].ToString() != "")
@@ -892,7 +1024,7 @@
#region 宸ュ簭鍗曞搧杩囩珯 閰嶄欢鐮佹煡璇�
[Route("Cj_SingleStation/HBardCodeAccessoryList")]
[HttpGet]
- public object HBardCodeAccessoryList(string HBarCode, string user)
+ public object HBardCodeAccessoryList(string HBarCode, string HProcExchBillNo, string user,string HBillType)
{
try
{
@@ -921,6 +1053,25 @@
objJsonResult.code = "0";
objJsonResult.count = 0;
objJsonResult.Message = "褰撳墠鏉$爜鐨勭姸鎬佷负:"+ ds.Tables[0].Rows[0]["HStatus"].ToString() + "锛�";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+
+ DataSet dataSet = oCN.RunProcReturn(@"exec h_p_CJ_SNBarCodeBillMouldBathSelect '" + HBarCode + "','" + HProcExchBillNo + "','"+ HBillType + "'", "h_p_CJ_SNBarCodeBillMouldBathSelect");
+
+ if (dataSet.Tables[0].Rows.Count == 0)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "閰嶄欢鏉$爜鍒ゆ柇澶辫触锛�";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ if (ClsPub.isStrNull(dataSet.Tables[0].Rows[0]["HBack"]) == "2")
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = DBUtility.ClsPub.isStrNull(dataSet.Tables[0].Rows[0]["HBackRemark"]);
objJsonResult.data = null;
return objJsonResult;
}
@@ -1494,9 +1645,28 @@
// }
oCN.RunProc("update Gy_BarCodeBill set HStatus='' where HBarCode='" + model.HBarCode + "'");
+
+ DataSet dataSet = oCN.RunProcReturn($"select top 1 HInterID from Sc_StationOutBillMain where HProcExchInterID={subLsit[0].HProcExchInterID} and HProcExchEntryID={subLsit[0].HProcExchEntryID} and HBadCount>0", "Sc_StationOutBillMain");
+
+ if (dataSet.Tables[0].Rows.Count > 0)
+ {
+ string HOutInterID = dataSet.Tables[0].Rows[0][0].ToString();
+
+ oCN.RunProc("update Sc_StationOutBillMain set HBadCount-=1 where HInterID='" + HOutInterID + "'");
+ }
+ else
+ {
+ oCN.RollBack();
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "淇濆瓨澶辫触,褰撳墠娴佽浆鍗″綋鍓嶅伐搴忕殑鍑虹珯鍗曟病鏈変笉鑹暟閲�!";
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
}
}
else {
+ oCN.RollBack();
objJsonResult.code = "0";
objJsonResult.count = 0;
objJsonResult.Message = "淇濆瓨澶辫触,鏃犵粨鏋滐紒";
@@ -1843,6 +2013,45 @@
}
#endregion
+ #region 宸ュ簭鍗曞搧杩囩珯 杩芥函鎶ヨ〃 閰嶄欢娓呭崟鏌ヨ
+ [Route("Sc_AssemblyBill/AssemblyBillAndStationInBillList_SN")]
+ [HttpGet]
+ public object AssemblyBillAndStationInBillList_SN(string sWhere)
+ {
+ try
+ {
+ List<object> columnNameList = new List<object>();
+
+ string sql1 = "exec h_p_Sc_AssemblyBillAndStationInBillList_SN ";
+ string sql = sql1 + sWhere;
+ ds = oCN.RunProcReturn(sql, "h_p_Sc_AssemblyBillAndStationInBillList_SN");
+
+ //娣诲姞鍒楀悕
+ foreach (DataColumn col in ds.Tables[0].Columns)
+ {
+ Type dataType = col.DataType;
+ string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}";
+ columnNameList.Add(JsonConvert.DeserializeObject(ColmString));//鑾峰彇鍒癉ataColumn鍒楀璞$殑鍒楀悕
+ }
+
+ objJsonResult.code = "1";
+ objJsonResult.count = 1;
+ objJsonResult.Message = "Sucess锛�";
+ objJsonResult.data = ds.Tables[0];
+ objJsonResult.list = columnNameList;
+ return objJsonResult;
+ }
+ catch (Exception e)
+ {
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "Exception锛�" + e.ToString();
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ }
+ #endregion
+
#region 宸ュ簭鍗曞搧杩囩珯 閫嗗悜杩芥函鎶ヨ〃 娴佽浆鍗℃煡璇�
[Route("Cj_SingleStation/Sc_ProcessExchangeBillMainList")]
[HttpGet]
@@ -1963,5 +2172,85 @@
}
#endregion
+ #region 宸ュ簭鍗曞搧杩囩珯 鍗曞搧杩囩珯鏌ヨ
+ [Route("Cj_SingleStation/SingleItemTransitList")]
+ [HttpGet]
+ public object SingleItemTransitList(string HProcExchBillNo, string user)
+ {
+ try
+ {
+
+ List<object> columnNameList = new List<object>();
+
+ string sql = @"exec h_p_SingleItemTransitList '" + HProcExchBillNo + "'";
+ ds = oCN.RunProcReturn(sql, "h_p_SingleItemTransitList");
+
+ //娣诲姞鍒楀悕
+ foreach (DataColumn col in ds.Tables[0].Columns)
+ {
+ Type dataType = col.DataType;
+ string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}";
+ columnNameList.Add(JsonConvert.DeserializeObject(ColmString));//鑾峰彇鍒癉ataColumn鍒楀璞$殑鍒楀悕
+ }
+
+ objJsonResult.code = "1";
+ objJsonResult.count = 1;
+ objJsonResult.Message = "Sucess锛�";
+ objJsonResult.data = ds.Tables[0];
+ objJsonResult.list = columnNameList;
+ return objJsonResult;
+ }
+ catch (Exception e)
+ {
+ oCN.RollBack();
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "Exception锛�" + e.ToString();
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ }
+ #endregion
+
+ #region 宸ュ簭鍗曞搧杩囩珯 鍗曞搧杩囩珯鏌ヨ 鏌ヨ鍏蜂綋鏉$爜
+ [Route("Cj_SingleStation/SingleItemTransit_SN_List")]
+ [HttpGet]
+ public object SingleItemTransit_SN_List(string sWhere, string TableName)
+ {
+ try
+ {
+
+ List<object> columnNameList = new List<object>();
+
+ string sql = @"exec h_p_SingleItemTransit_SN_List '" + sWhere + "','"+ TableName + "'";
+ ds = oCN.RunProcReturn(sql, "h_p_SingleItemTransit_SN_List");
+
+ //娣诲姞鍒楀悕
+ foreach (DataColumn col in ds.Tables[0].Columns)
+ {
+ Type dataType = col.DataType;
+ string ColmString = "{\"ColmCols\":\"" + col.ColumnName + "\",\"ColmType\":\"" + dataType.Name + "\"}";
+ columnNameList.Add(JsonConvert.DeserializeObject(ColmString));//鑾峰彇鍒癉ataColumn鍒楀璞$殑鍒楀悕
+ }
+
+ objJsonResult.code = "1";
+ objJsonResult.count = 1;
+ objJsonResult.Message = "Sucess锛�";
+ objJsonResult.data = ds.Tables[0];
+ objJsonResult.list = columnNameList;
+ return objJsonResult;
+ }
+ catch (Exception e)
+ {
+ oCN.RollBack();
+ objJsonResult.code = "0";
+ objJsonResult.count = 0;
+ objJsonResult.Message = "Exception锛�" + e.ToString();
+ objJsonResult.data = null;
+ return objJsonResult;
+ }
+ }
+ #endregion
+
}
}
\ No newline at end of file
--
Gitblit v1.9.1