From 7a0527e207c59cdcce0b1f7a41bd7457a236ab23 Mon Sep 17 00:00:00 2001
From: 廖井涛 <2265517004@qq.com>
Date: 星期三, 26 三月 2025 10:25:52 +0800
Subject: [PATCH] Merge branch 'master' of http://bore.pub:10439/r/ERP_override
---
north-glass-erp/northglass-erp/src/lang/en.js | 1
north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java | 231 ++++++++++++++++++++++++---------------------
north-glass-erp/northglass-erp/src/lang/ar.js | 1
north-glass-erp/northglass-erp/src/lang/ru.js | 1
north-glass-erp/northglass-erp/src/lang/zh.js | 1
north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue | 4
north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java | 2
north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml | 4
8 files changed, 135 insertions(+), 110 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/lang/ar.js b/north-glass-erp/northglass-erp/src/lang/ar.js
index de2804b..fa8c0c4 100644
--- a/north-glass-erp/northglass-erp/src/lang/ar.js
+++ b/north-glass-erp/northglass-erp/src/lang/ar.js
@@ -552,6 +552,7 @@
thisWornQuantity:'鬲賳賯胤毓 賴匕賴 丕賱毓賲賱賷丞',
passAudit:'鬲賲鬲 丕賱賲賵丕賮賯丞',
patchCondition:'琛ョ墖鐘舵��',
+ changeFailed:'淇敼澶辫触锛岃妫�鏌ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟',
selectResponsibleTeam:'丕賱乇噩丕亍 丕禺鬲賷丕乇 丕賱賮乇賷賯 丕賱賲爻丐賵賱',
diff --git a/north-glass-erp/northglass-erp/src/lang/en.js b/north-glass-erp/northglass-erp/src/lang/en.js
index 8c4e6d4..76d0f79 100644
--- a/north-glass-erp/northglass-erp/src/lang/en.js
+++ b/north-glass-erp/northglass-erp/src/lang/en.js
@@ -552,6 +552,7 @@
thisWornQuantity:'This Worn Quantity',
passAudit:'Pass The Audit',
patchCondition:'Patch Condition',
+ changeFailed:'淇敼澶辫触锛岃妫�鏌ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟',
selectResponsibleTeam:'Please select a responsible team',
selectWorkReportingTeam:'Please select a responsible team',
diff --git a/north-glass-erp/northglass-erp/src/lang/ru.js b/north-glass-erp/northglass-erp/src/lang/ru.js
index 4fee41d..5236d26 100644
--- a/north-glass-erp/northglass-erp/src/lang/ru.js
+++ b/north-glass-erp/northglass-erp/src/lang/ru.js
@@ -551,6 +551,7 @@
thisWornQuantity:'协褌芯 锌褉芯褑械褋褋 锌芯胁褉械卸写械薪懈械 ',
passAudit:'袩褉芯胁械褉泻邪 锌褉芯褕谢邪',
patchCondition:'琛ョ墖鐘舵��',
+ changeFailed:'淇敼澶辫触锛岃妫�鏌ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟',
selectResponsibleTeam:'袩芯卸邪谢褍泄褋褌邪, 胁褘斜械褉懈褌械 谐褉褍锌锌褍 芯褌胁械褌褋褌胁械薪薪芯褋褌懈.',
diff --git a/north-glass-erp/northglass-erp/src/lang/zh.js b/north-glass-erp/northglass-erp/src/lang/zh.js
index 14f1be0..1a12b0a 100644
--- a/north-glass-erp/northglass-erp/src/lang/zh.js
+++ b/north-glass-erp/northglass-erp/src/lang/zh.js
@@ -552,6 +552,7 @@
thisWornQuantity:'鏈伐搴忔鐮�',
passAudit:'瀹℃牳閫氳繃',
patchCondition:'琛ョ墖鐘舵��',
+ changeFailed:'淇敼澶辫触锛岃妫�鏌ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟',
selectResponsibleTeam:'璇烽�夋嫨璐d换鐝粍',
diff --git a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
index 816f8fc..b5a0586 100644
--- a/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
+++ b/north-glass-erp/northglass-erp/src/views/pp/reportingWorks/AddReportingWork.vue
@@ -944,13 +944,15 @@
reviewState = 'review'
}
request.post(`/reportingWork/updateReportingWork/${reviewState}`,requestData).then(res =>{
- if (res.code == 200){
+ if (res.code == 200 && res.data===true){
ElMessage.success(t('reportingWorks.successfulModificationOfWorkApplication'))
router.push({path:'/main/reportingWorks/AddReportingWork',
query:{
processId:titleUploadData.value.processId,
random:Math.random()}
})
+ } else {
+ ElMessage.warning(t('reportingWorks.changeFailed'))
}
})
}
diff --git a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
index 469f1a9..44c7639 100644
--- a/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
+++ b/north-glass-erp/src/main/java/com/example/erp/mapper/pp/ReportingWorkMapper.java
@@ -102,4 +102,6 @@
String selectOrderid(String processIdStr);
Map<String,Float> getFootSum(Date selectTime1, Date selectTime2, String orderId, ReportingWork reportingWork);
+
+ Integer selectReviewedState(String reportingWorkId);
}
diff --git a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
index c95d452..4d1ad8c 100644
--- a/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
+++ b/north-glass-erp/src/main/java/com/example/erp/service/pp/ReportingWorkService.java
@@ -485,73 +485,79 @@
JSONObject reportingWorkJson = new JSONObject(reportingWorkMap);
ReportingWork reportingWork = JSONObject.parseObject(JSONObject.toJSONString(reportingWorkJson.get("title")), ReportingWork.class);
List<ReportingWorkDetail> reportingWorkDetails = JSONArray.parseArray(JSONObject.toJSONString(reportingWorkJson.get("detail")), ReportingWorkDetail.class);
+ //鏌ヨ璇ユ姤宸ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟
+ Integer transferState = reportingWorkMapper.selectReviewedState(reportingWork.getReportingWorkId());
+ if (transferState !=3){
+ //鍒犻櫎鍒虹牬鏄庣粏琛ㄥ埡鐮存暟鎹�
+ damageDetailsMapper.delete(
+ new LambdaQueryWrapper<DamageDetails>()
+ .eq(DamageDetails::getReportingWorkId, reportingWork.getReportingWorkId())
+ );
+ //淇敼灏忕墖娴佺▼琛ㄦ暟閲�
+ orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(), reportingWork.getThisProcess(), "delete");
+ //鍒犻櫎鎶ュ伐鏄庣粏琛ㄦ暟鎹�
+ reportingWorkDetailMapper
+ .delete(new LambdaQueryWrapper<ReportingWorkDetail>()
+ .eq(ReportingWorkDetail::getReportingWorkId, reportingWork.getReportingWorkId()));
- //鍒犻櫎鍒虹牬鏄庣粏琛ㄥ埡鐮存暟鎹�
- damageDetailsMapper.delete(
- new LambdaQueryWrapper<DamageDetails>()
- .eq(DamageDetails::getReportingWorkId, reportingWork.getReportingWorkId())
- );
- //淇敼灏忕墖娴佺▼琛ㄦ暟閲�
- orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(), reportingWork.getThisProcess(), "delete");
- //鍒犻櫎鎶ュ伐鏄庣粏琛ㄦ暟鎹�
- reportingWorkDetailMapper
- .delete(new LambdaQueryWrapper<ReportingWorkDetail>()
- .eq(ReportingWorkDetail::getReportingWorkId, reportingWork.getReportingWorkId()));
-
- //鏇存柊鎶ュ伐涓昏〃
- int qualityInsStatus = (int) reportingWorkJson.get("qualityInsStatus");
- reportingWorkMapper.updateById(reportingWork);
- reportingWorkDetails.forEach(reportingWorkDetail -> {
- reportingWorkDetail.setReportingWorkId(reportingWork.getReportingWorkId());
- List<DamageDetails> damageDetails = reportingWorkDetail.getDamageDetails();
- //姣忎竴鏉℃姤宸ユ暟鎹惊鐜彃鍏ユ鐮存槑缁嗚〃
- if (damageDetails != null && !damageDetails.isEmpty()) {
- damageDetails.forEach(damageDetail -> {
- damageDetail.setReportingWorkId(reportingWork.getReportingWorkId());
- damageDetail.setProcessId(reportingWork.getProcessId());
- damageDetail.setOrderNumber(reportingWorkDetail.getOrderNumber());
- damageDetail.setTechnologyNumber(reportingWorkDetail.getTechnologyNumber());
- //鏄惁淇敼璐ㄦ鐘舵��
- if (!Objects.equals(reportingWork.getThisProcess(), damageDetail.getResponsibleProcess()) && qualityInsStatus==2) {
- damageDetail.setQualityInsStatus(1);
- }
- if (Objects.equals(reviewState, "review")) {
- damageDetail.setQualityInsStatus(2);
- }
-
- damageDetailsMapper.insert(damageDetail);
- });
- }
- //鎻掑叆鎶ュ伐鏁版嵁
- reportingWorkDetailMapper.insert(reportingWorkDetail);
- orderProcessDetailMapper.insertByReportingWorkDetail(reportingWorkDetail,reportingWork.getProcessId(),reportingWork.getThisProcess());
- //淇敼鍖呰鏃朵慨鏀瑰簱瀛樻暟閲�
- if (reportingWork.getNextProcess()==null || reportingWork.getNextProcess().isEmpty()){
- //鑾峰彇璇ユ姤宸ヤ慨鏀瑰悗鐨勫彲鍏ュ簱鏁伴噺
- Integer inventory = reportingWorkDetailMapper.selectInventory(reportingWork.getProcessId(),Integer.parseInt(reportingWorkDetail.getOrderNumber()),Integer.parseInt(reportingWorkDetail.getTechnologyNumber()),reportingWork.getThisProcess());
- //淇敼娴佺▼鍗¤〃搴撳瓨鏁伴噺
- flowCardMapper.updateInventory(reportingWork.getProcessId(),reportingWorkDetail.getOrderNumber(),reportingWorkDetail.getTechnologyNumber(),inventory);
- }
- });
- //鑾峰彇璐ㄦ鏃堕棿
- if (Objects.equals(reviewState, "review")) {
- LocalDateTime
- currentDate = LocalDateTime.now();
- reportingWork.setQualityInsTime(currentDate);
+ //鏇存柊鎶ュ伐涓昏〃
+ int qualityInsStatus = (int) reportingWorkJson.get("qualityInsStatus");
reportingWorkMapper.updateById(reportingWork);
+ reportingWorkDetails.forEach(reportingWorkDetail -> {
+ reportingWorkDetail.setReportingWorkId(reportingWork.getReportingWorkId());
+ List<DamageDetails> damageDetails = reportingWorkDetail.getDamageDetails();
+ //姣忎竴鏉℃姤宸ユ暟鎹惊鐜彃鍏ユ鐮存槑缁嗚〃
+ if (damageDetails != null && !damageDetails.isEmpty()) {
+ damageDetails.forEach(damageDetail -> {
+ damageDetail.setReportingWorkId(reportingWork.getReportingWorkId());
+ damageDetail.setProcessId(reportingWork.getProcessId());
+ damageDetail.setOrderNumber(reportingWorkDetail.getOrderNumber());
+ damageDetail.setTechnologyNumber(reportingWorkDetail.getTechnologyNumber());
+ //鏄惁淇敼璐ㄦ鐘舵��
+ if (!Objects.equals(reportingWork.getThisProcess(), damageDetail.getResponsibleProcess()) && qualityInsStatus==2) {
+ damageDetail.setQualityInsStatus(1);
+ }
+ if (Objects.equals(reviewState, "review")) {
+ damageDetail.setQualityInsStatus(2);
+ }
+
+ damageDetailsMapper.insert(damageDetail);
+ });
+ }
+ //鎻掑叆鎶ュ伐鏁版嵁
+ reportingWorkDetailMapper.insert(reportingWorkDetail);
+ orderProcessDetailMapper.insertByReportingWorkDetail(reportingWorkDetail,reportingWork.getProcessId(),reportingWork.getThisProcess());
+ //淇敼鍖呰鏃朵慨鏀瑰簱瀛樻暟閲�
+ if (reportingWork.getNextProcess()==null || reportingWork.getNextProcess().isEmpty()){
+ //鑾峰彇璇ユ姤宸ヤ慨鏀瑰悗鐨勫彲鍏ュ簱鏁伴噺
+ Integer inventory = reportingWorkDetailMapper.selectInventory(reportingWork.getProcessId(),Integer.parseInt(reportingWorkDetail.getOrderNumber()),Integer.parseInt(reportingWorkDetail.getTechnologyNumber()),reportingWork.getThisProcess());
+ //淇敼娴佺▼鍗¤〃搴撳瓨鏁伴噺
+ flowCardMapper.updateInventory(reportingWork.getProcessId(),reportingWorkDetail.getOrderNumber(),reportingWorkDetail.getTechnologyNumber(),inventory);
+ }
+ });
+ //鑾峰彇璐ㄦ鏃堕棿
+ if (Objects.equals(reviewState, "review")) {
+ LocalDateTime
+ currentDate = LocalDateTime.now();
+ reportingWork.setQualityInsTime(currentDate);
+ reportingWorkMapper.updateById(reportingWork);
+ }
+
+ //淇敼灏忕墖娴佺▼琛ㄦ暟閲忎负鎶ュ伐鏄庣粏琛ㄦ暟閲�
+ //orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(), reportingWork.getThisProcess(), "add");
+ //淇濆瓨鏃ュ織
+ Log log = new Log();
+ log.setContent(reportingWorkMap.toString());
+ log.setFunction("updateReportingWork鎶ュ伐淇敼");
+ log.setOperatorId((String) reportingWorkJson.get("userId"));
+ log.setOperator((String) reportingWorkJson.get("userName"));
+ logService.saveLog(log);
+
+ return true;
+ } else {
+ return false;
}
- //淇敼灏忕墖娴佺▼琛ㄦ暟閲忎负鎶ュ伐鏄庣粏琛ㄦ暟閲�
- //orderProcessDetailMapper.updateQuantity(reportingWork.getReportingWorkId(), reportingWork.getThisProcess(), "add");
- //淇濆瓨鏃ュ織
- Log log = new Log();
- log.setContent(reportingWorkMap.toString());
- log.setFunction("updateReportingWork鎶ュ伐淇敼");
- log.setOperatorId((String) reportingWorkJson.get("userId"));
- log.setOperator((String) reportingWorkJson.get("userName"));
- logService.saveLog(log);
-
- return true;
}
//鎶ュ伐绠$悊鏌ヨ
@@ -578,38 +584,65 @@
String lastProcess = reportingWorkMapper.selectLastProcess(processId);
//鑾峰彇鏄惁鏈夊凡琛ョ墖鎴栬繑宸�
Integer countStates= Integer.valueOf(reportingWorkMapper.getPatchConditionMp(reportingWorkId));
- //鍒ゆ柇鏄惁鏈夎ˉ鐗囪繑宸ユ暟鎹�
- if (countStates==0){
- //鍒ゆ柇鏄惁鏄叆搴撳伐搴�
- if (lastProcess.equals(thisProcess)) {//鏄叆搴撳伐搴�
- //鏌ヨ璇ユ祦绋嬪崱鏁伴噺銆佸彲鍏ュ簱鏁伴噺銆佸凡鍏ュ簱鏁伴噺
- Map<String, Object> list = reportingWorkMapper.selectReceiptQuantity(processId);
- if (list.get("quantity") == list.get("receiptQuantity")) {
- return false;
- } else {
- //杞崲绫诲瀷:宸插叆搴撴暟閲�
- Integer receiptQuantity = Integer.parseInt(list.get("receivedQuantity").toString());
- //杞崲绫诲瀷:鍙叆搴撴暟閲�
- Integer inventoryQuantity = Integer.parseInt(list.get("inventoryQuantity").toString());
- //鏌ヨ璇ユ姤宸ョ紪鍙锋湰宸ュ簭瀹屽伐鏁伴噺
- Integer completedQuantity = reportingWorkMapper.selectCompletedQuantity(reportingWorkId);
- //褰撹宸ュ簭瀹屽伐鏁伴噺灏忎簬绛変簬宸插叆搴撴暟閲忔椂
- //鍙叆搴撴暟閲�-宸插叆搴撴暟閲�>=鎶ュ伐缂栧彿鏈伐搴忓畬宸ユ暟閲�
- if (inventoryQuantity - receiptQuantity >= completedQuantity) {
+ //鏌ヨ璇ユ姤宸ユ槸鍚︿负鎶ュ伐杞Щ璁㈠崟
+ Integer transferState = reportingWorkMapper.selectReviewedState(reportingWorkId);
+ if (transferState !=3){
+ //鍒ゆ柇鏄惁鏈夎ˉ鐗囪繑宸ユ暟鎹�
+ if (countStates==0){
+ //鍒ゆ柇鏄惁鏄叆搴撳伐搴�
+ if (lastProcess.equals(thisProcess)) {//鏄叆搴撳伐搴�
+ //鏌ヨ璇ユ祦绋嬪崱鏁伴噺銆佸彲鍏ュ簱鏁伴噺銆佸凡鍏ュ簱鏁伴噺
+ Map<String, Object> list = reportingWorkMapper.selectReceiptQuantity(processId);
+ if (list.get("quantity") == list.get("receiptQuantity")) {
+ return false;
+ } else {
+ //杞崲绫诲瀷:宸插叆搴撴暟閲�
+ Integer receiptQuantity = Integer.parseInt(list.get("receivedQuantity").toString());
+ //杞崲绫诲瀷:鍙叆搴撴暟閲�
+ Integer inventoryQuantity = Integer.parseInt(list.get("inventoryQuantity").toString());
+ //鏌ヨ璇ユ姤宸ョ紪鍙锋湰宸ュ簭瀹屽伐鏁伴噺
+ Integer completedQuantity = reportingWorkMapper.selectCompletedQuantity(reportingWorkId);
+ //褰撹宸ュ簭瀹屽伐鏁伴噺灏忎簬绛変簬宸插叆搴撴暟閲忔椂
+ //鍙叆搴撴暟閲�-宸插叆搴撴暟閲�>=鎶ュ伐缂栧彿鏈伐搴忓畬宸ユ暟閲�
+ if (inventoryQuantity - receiptQuantity >= completedQuantity) {
+ //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
+ List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
+ for (Map<String, Object> item : workDateList) {
+ //鏇存柊娴佺▼鍗″彲鍏ュ簱鏁伴噺
+ reportingWorkMapper.updateInventoryQuantity(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"));
+ //鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
+ reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
+ }
+ //鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
+ reportingWorkMapper.deleteWork(reportingWorkId);
+ //淇濆瓨鏃ュ織
+ Log log = new Log();
+ log.setContent(reportingWorkId+"-"+processId+"-"+thisProcess);
+ log.setFunction("deleteWork鎶ュ伐鍏ュ簱鍒犻櫎");
+ log.setOperatorId(userId);
+ log.setOperator(userName);
+ logService.saveLog(log);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ } else {//涓嶆槸鍏ュ簱宸ュ簭
+ if (count == 0) {
//鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
for (Map<String, Object> item : workDateList) {
- //鏇存柊娴佺▼鍗″彲鍏ュ簱鏁伴噺
- reportingWorkMapper.updateInventoryQuantity(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"));
//鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
}
//鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
reportingWorkMapper.deleteWork(reportingWorkId);
+
//淇濆瓨鏃ュ織
Log log = new Log();
log.setContent(reportingWorkId+"-"+processId+"-"+thisProcess);
- log.setFunction("deleteWork鎶ュ伐鍏ュ簱鍒犻櫎");
+ log.setFunction("deleteWork鎶ュ伐鍒犻櫎");
log.setOperatorId(userId);
log.setOperator(userName);
logService.saveLog(log);
@@ -618,35 +651,15 @@
return false;
}
}
-
- } else {//涓嶆槸鍏ュ簱宸ュ簭
- if (count == 0) {
- //鏌ヨ褰撳墠鎶ュ伐缂栧彿瀹屽伐娆$牬鏁伴噺鐨勬暟鎹�
- List<Map<String, Object>> workDateList = reportingWorkMapper.reportingWorkDate(reportingWorkId);
- for (Map<String, Object> item : workDateList) {
- //鏇存柊鎶ュ伐娴佺▼琛ㄦ暟鎹�
- reportingWorkMapper.updateWorkProcess(processId, item.get("order_number"), item.get("technology_number"), item.get("completed_quantity"), item.get("breakage_quantity"), thisProcess);
- }
- //鍒犻櫎鎶ュ伐锛屽皢瀹℃牳鐘舵�佹敼涓�-1
- reportingWorkMapper.deleteWork(reportingWorkId);
-
- //淇濆瓨鏃ュ織
- Log log = new Log();
- log.setContent(reportingWorkId+"-"+processId+"-"+thisProcess);
- log.setFunction("deleteWork鎶ュ伐鍒犻櫎");
- log.setOperatorId(userId);
- log.setOperator(userName);
- logService.saveLog(log);
- return true;
- } else {
- return false;
- }
}
- }
- else {
+ else {
+ return false;
+ }
+ } else {
return false;
}
+
} else {
return false;
}
diff --git a/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml b/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
index 02f61ac..a25e7bb 100644
--- a/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
+++ b/north-glass-erp/src/main/resources/mapper/pp/ReportingWork.xml
@@ -1060,4 +1060,8 @@
) AS subquery;
</select>
+
+ <select id="selectReviewedState">
+ select reviewed_state from pp.reporting_work where reporting_work_id=#{reportingWorkId};
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.8.0