Commit 8c80b4d1 by 江和松

Merge remote-tracking branch 'origin/dev' into dev

parents f1a460cc 8860b951
...@@ -131,19 +131,12 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -131,19 +131,12 @@ public class ServiceHGCW010 extends ServiceBase {
AssertUtils.isNull(HGSC001, "项目编码[" + hgcw010.getProjCode() + "]不存在"); AssertUtils.isNull(HGSC001, "项目编码[" + hgcw010.getProjCode() + "]不存在");
hgcw010.setProjName(HGSC001.getProjName()); hgcw010.setProjName(HGSC001.getProjName());
} }
hgcw010.setBillState(HGConstant.BillStatus.S1);
if (StringUtils.isNotBlank(hgcw010.getBillNumber())){
hgcw010.setBillState(HGConstant.BillStatus.S2);
}
hgcw010.setSigningDate(DateUtils.formatShort(hgcw010.getSigningDate())); hgcw010.setSigningDate(DateUtils.formatShort(hgcw010.getSigningDate()));
if (hgcw010.getId() == null || hgcw010.getId() == 0) { if (hgcw010.getId() == null || hgcw010.getId() == 0) {
hgcw010.setBillState(HGConstant.BillStatus.S1);
hgcw010.setReviewStatus(ReviewStatusEnum.UNREVIEWED.getCode()); hgcw010.setReviewStatus(ReviewStatusEnum.UNREVIEWED.getCode());
this.add(hgcw010); this.add(hgcw010);
} else { } else {
List<HGCW011> hgcw011List = HGCWTools.HgCw011.getMainId(hgcw010.getId());
if (hgcw011List.size() > 0 && StringUtils.isNotEmpty(hgcw010.getBillNumber())){
hgcw010.setBillState(HGConstant.BillStatus.S2);
}
this.modify(hgcw010); this.modify(hgcw010);
} }
} }
...@@ -189,9 +182,9 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -189,9 +182,9 @@ public class ServiceHGCW010 extends ServiceBase {
try { try {
List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows(); List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows();
for (int i = 0; i < resultRows.size(); i++) { for (int i = 0; i < resultRows.size(); i++) {
HGCW010 HGCW010 = new HGCW010(); HGCW010 hgcw010 = new HGCW010();
HGCW010.fromMap(resultRows.get(i)); hgcw010.fromMap(resultRows.get(i));
List<HGCW011> hgcw011List = HGCWTools.HgCw011.getMainId(HGCW010.getId()); List<HGCW011> hgcw011List = HGCWTools.HgCw011.getMainId(hgcw010.getId());
if (CollectionUtils.isNotEmpty(hgcw011List)) { if (CollectionUtils.isNotEmpty(hgcw011List)) {
for (HGCW011 hgcw011 : hgcw011List) { for (HGCW011 hgcw011 : hgcw011List) {
HGCW002 hgcw002 = HGCWTools.HgCw002.getContractNumber(hgcw011.getSettlementNumber()); HGCW002 hgcw002 = HGCWTools.HgCw002.getContractNumber(hgcw011.getSettlementNumber());
...@@ -206,10 +199,10 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -206,10 +199,10 @@ public class ServiceHGCW010 extends ServiceBase {
HGCWTools.HgCw008.deductionAmount(hgcw011.getSettlementNumber(), HGCWTools.HgCw008.deductionAmount(hgcw011.getSettlementNumber(),
hgcw011.getTotalContractPriceIncluding().multiply(new BigDecimal(-1))); hgcw011.getTotalContractPriceIncluding().multiply(new BigDecimal(-1)));
} }
DaoUtils.update("HGCW011.delete", hgcw011); DaoUtils.update(HGCW011.DELETE, hgcw011);
} }
} }
DaoUtils.update("HGCW010.delete", HGCW010); DaoUtils.update(HGCW010.DELETE, hgcw010);
} }
inInfo = this.query(inInfo); inInfo = this.query(inInfo);
inInfo.setStatus(EiConstant.STATUS_DEFAULT); inInfo.setStatus(EiConstant.STATUS_DEFAULT);
...@@ -322,9 +315,9 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -322,9 +315,9 @@ public class ServiceHGCW010 extends ServiceBase {
return inInfo; return inInfo;
} }
public void addHGCW011(HGCW011 HGCW011) { public void addHGCW011(HGCW011 hgcw011) {
HGCW011.setId(null); hgcw011.setId(null);
DaoUtils.insert("HGCW011.insert", HGCW011); DaoUtils.insert(HGCW011.INSERT, hgcw011);
} }
...@@ -339,7 +332,7 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -339,7 +332,7 @@ public class ServiceHGCW010 extends ServiceBase {
for (int i = 0; i < resultRows.size(); i++) { for (int i = 0; i < resultRows.size(); i++) {
HGCW010 HGCW010 = new HGCW010(); HGCW010 HGCW010 = new HGCW010();
HGCW010.fromMap(resultRows.get(i)); HGCW010.fromMap(resultRows.get(i));
HGCW010.setReviewStatus(1); HGCW010.setReviewStatus(ReviewStatusEnum.REVIEWED.getCode());
DaoUtils.update("HGCW010.submit", HGCW010); DaoUtils.update("HGCW010.submit", HGCW010);
} }
inInfo = this.query(inInfo); inInfo = this.query(inInfo);
...@@ -351,14 +344,16 @@ public class ServiceHGCW010 extends ServiceBase { ...@@ -351,14 +344,16 @@ public class ServiceHGCW010 extends ServiceBase {
return inInfo; return inInfo;
} }
@OperationLogAnnotation(operModul = "销售开票",operType = "开票",operDesc = "开票保存")
public EiInfo billing(EiInfo inInfo){ public EiInfo billing(EiInfo inInfo){
try { try {
List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows(); List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows();
for (int i = 0; i < resultRows.size(); i++) { for (int i = 0; i < resultRows.size(); i++) {
HGCW010 HGCW010 = new HGCW010(); HGCW010 hgcw010 = new HGCW010();
HGCW010.fromMap(resultRows.get(i)); hgcw010.fromMap(resultRows.get(i));
HGCW010.setBillState(2); hgcw010.setBillState(HGConstant.BillStatus.S2);
DaoUtils.update("HGCW010.billing", HGCW010); this.modify(hgcw010);
//DaoUtils.update("HGCW010.billing", hgcw010);
} }
inInfo = this.query(inInfo); inInfo = this.query(inInfo);
inInfo.setStatus(EiConstant.STATUS_DEFAULT); inInfo.setStatus(EiConstant.STATUS_DEFAULT);
......
...@@ -207,16 +207,16 @@ public class ServiceHGCW010D extends ServiceEPBase { ...@@ -207,16 +207,16 @@ public class ServiceHGCW010D extends ServiceEPBase {
public void add(HGCW010 hgcw010) { public void add(HGCW010 hgcw010) {
hgcw010.setInvoiceCode(SequenceGenerator.getNextSequence(HGConstant.SequenceId.HGCW10_INVOICE_CODE)); hgcw010.setInvoiceCode(SequenceGenerator.getNextSequence(HGConstant.SequenceId.HGCW10_INVOICE_CODE));
DaoUtils.insert("HGCW010.insert", hgcw010); DaoUtils.insert(HGCW010.INSERT, hgcw010);
} }
public void modify(HGCW010 hgcw010) { public void modify(HGCW010 hgcw010) {
DaoUtils.update("HGCW010.update", hgcw010); DaoUtils.update(HGCW010.UPDATE, hgcw010);
} }
public void addHGCW011(HGCW011 hgcw011) { public void addHGCW011(HGCW011 hgcw011) {
hgcw011.setId(null); hgcw011.setId(null);
DaoUtils.insert("HGCW011.insert", hgcw011); DaoUtils.insert(HGCW011.INSERT, hgcw011);
} }
public List<HGCW011> mapToList(List<Map> rows, Long mainId) { public List<HGCW011> mapToList(List<Map> rows, Long mainId) {
......
package com.baosight.hggp.hg.cw.service; package com.baosight.hggp.hg.cw.service;
import com.baosight.eplat.utils.StringUtils;
import com.baosight.hggp.aspect.annotation.OperationLogAnnotation; import com.baosight.hggp.aspect.annotation.OperationLogAnnotation;
import com.baosight.hggp.common.DdynamicEnum; import com.baosight.hggp.common.DdynamicEnum;
import com.baosight.hggp.core.dao.DaoUtils; import com.baosight.hggp.core.dao.DaoUtils;
import com.baosight.hggp.hg.cw.domain.HGCW002;
import com.baosight.hggp.hg.cw.domain.HGCW006;
import com.baosight.hggp.hg.cw.domain.HGCW010;
import com.baosight.hggp.hg.cw.domain.HGCW011; import com.baosight.hggp.hg.cw.domain.HGCW011;
import com.baosight.hggp.hg.cw.tools.HGCWTools; import com.baosight.hggp.hg.cw.tools.HGCWTools;
import com.baosight.hggp.hg.cw.vo.UserVO; import com.baosight.hggp.hg.cw.vo.UserVO;
import com.baosight.hggp.util.CommonMethod; import com.baosight.hggp.util.CommonMethod;
import com.baosight.hggp.util.LogUtils; import com.baosight.hggp.util.LogUtils;
import com.baosight.hggp.util.MapUtils;
import com.baosight.iplat4j.core.ei.EiConstant; import com.baosight.iplat4j.core.ei.EiConstant;
import com.baosight.iplat4j.core.ei.EiInfo; import com.baosight.iplat4j.core.ei.EiInfo;
import com.baosight.iplat4j.core.exception.PlatException; import com.baosight.iplat4j.core.exception.PlatException;
import com.baosight.iplat4j.core.service.impl.ServiceBase; import com.baosight.iplat4j.core.service.impl.ServiceBase;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -30,7 +37,7 @@ public class ServiceHGCW011 extends ServiceBase { ...@@ -30,7 +37,7 @@ public class ServiceHGCW011 extends ServiceBase {
* @return * @return
*/ */
@OperationLogAnnotation(operModul = "账期维护",operType = "查询",operDesc = "初始化") @OperationLogAnnotation(operModul = "销售开票",operType = "查询",operDesc = "初始化")
public EiInfo initLoad(EiInfo inInfo) { public EiInfo initLoad(EiInfo inInfo) {
try { try {
CommonMethod.initBlock(inInfo, Arrays.asList(DdynamicEnum.FACTORY_RECORD_BLOCK_ID, CommonMethod.initBlock(inInfo, Arrays.asList(DdynamicEnum.FACTORY_RECORD_BLOCK_ID,
...@@ -48,7 +55,7 @@ public class ServiceHGCW011 extends ServiceBase { ...@@ -48,7 +55,7 @@ public class ServiceHGCW011 extends ServiceBase {
* @param inInfo * @param inInfo
* @return * @return
*/ */
@OperationLogAnnotation(operModul = "账期维护",operType = "查询",operDesc = "查询") @OperationLogAnnotation(operModul = "销售开票",operType = "查询",operDesc = "查询")
@Override @Override
public EiInfo query(EiInfo inInfo) { public EiInfo query(EiInfo inInfo) {
try { try {
...@@ -59,13 +66,56 @@ public class ServiceHGCW011 extends ServiceBase { ...@@ -59,13 +66,56 @@ public class ServiceHGCW011 extends ServiceBase {
return inInfo; return inInfo;
} }
@Override
public EiInfo update(EiInfo inInfo) {
try {
List<HGCW011> hgcw011s = MapUtils.toDaoEPBases(inInfo,HGCW011.class);
Long mainId = hgcw011s.stream().map(HGCW011::getMainId).distinct().findAny().orElseThrow(() -> new PlatException("请选择主表数据"));
HGCW010 hgcw010 = HGCWTools.HgCw010.getId(String.valueOf(mainId));
List<HGCW011> hgcw011List = HGCWTools.HgCw011.getMainId(mainId);
for (HGCW011 hgcw011: hgcw011s) {
HGCW002 hgcw002 = HGCWTools.HgCw002.getContractNumber(hgcw011.getSettlementNumber());
HGCW006 hgcw006 = HGCWTools.HgCw006.getContractNumber(hgcw011.getSettlementNumber());
HGCW011 cw011 =hgcw011List.stream().filter(hgcw0111 -> hgcw0111.getId().equals(hgcw011.getId())).findFirst().get();
BigDecimal acount = hgcw011.getTotalContractPriceIncluding();
if (acount.compareTo(cw011.getTotalContractPriceIncluding()) > 0){
acount = acount.subtract(cw011.getTotalContractPriceIncluding());
}else if (acount.compareTo(cw011.getTotalContractPriceIncluding()) < 0){
acount = cw011.getTotalContractPriceIncluding().subtract(acount).multiply(new BigDecimal(-1));
}
if (StringUtils.isNotNull(hgcw002)){
HGCWTools.HgCw008.remainingAmount(hgcw011.getSettlementNumber(), acount);
}else if (StringUtils.isNotNull(hgcw006)){
HGCWTools.HgCw006.deductionAmount(hgcw011.getSettlementNumber(), acount);
}else {
HGCWTools.HgCw008.deductionAmount(hgcw011.getSettlementNumber(), acount);
}
this.modify(hgcw011);
}
List<HGCW011> hgcw011List1 = HGCWTools.HgCw011.getMainId(mainId);
BigDecimal totalContractPriceIncluding =hgcw011List1.stream().map(HGCW011::getTotalContractPriceIncluding).reduce(BigDecimal.ZERO,BigDecimal::add);
BigDecimal taxPoints = new BigDecimal(hgcw010.getTaxPoints()); // 假设这是以整数形式给出的税率,比如17表示17%
BigDecimal taxRateAsDecimal = taxPoints.divide(new BigDecimal("100")).add(new BigDecimal("1")); // 将税率转换为小数形式
BigDecimal thisSettlementAmount = totalContractPriceIncluding.divide(taxRateAsDecimal, 2, RoundingMode.HALF_UP);
BigDecimal thisSettlementTax = totalContractPriceIncluding.subtract(thisSettlementAmount); // 计算税额
hgcw010.setThisSettlementTax(thisSettlementTax.toString());
hgcw010.setThisSettlementAmount(thisSettlementAmount.toString());
DaoUtils.update(HGCW010.UPDATE, hgcw010);
inInfo.setStatus(EiConstant.STATUS_DEFAULT);
inInfo.setMsg("操作成功!本次对[" + hgcw011s.size() + "]条数据保存成功!");
}catch (PlatException e){
LogUtils.setDetailMsg(inInfo, e, "修改失败");
}
return inInfo;
}
/** /**
* 新增操作 * 新增操作
* *
* @param inInfo * @param inInfo
* @return * @return
*/ */
@OperationLogAnnotation(operModul = "账期维护",operType = "保存",operDesc = "保存") @OperationLogAnnotation(operModul = "销售开票",operType = "保存",operDesc = "保存")
public EiInfo save(EiInfo inInfo) { public EiInfo save(EiInfo inInfo) {
try { try {
List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows(); List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows();
...@@ -96,21 +146,21 @@ public class ServiceHGCW011 extends ServiceBase { ...@@ -96,21 +146,21 @@ public class ServiceHGCW011 extends ServiceBase {
/** /**
* 新增操作 * 新增操作
* *
* @param HGCW011 * @param hgcw011
* @return * @return
*/ */
public void add(HGCW011 HGCW011) { public void add(HGCW011 hgcw011) {
DaoUtils.insert("HGCW011.insert", HGCW011); DaoUtils.insert(HGCW011.INSERT, hgcw011);
} }
/** /**
* 修改操作 * 修改操作
* *
* @param HGCW011 * @param hgcw011
* @return * @return
*/ */
public void modify(HGCW011 HGCW011) { public void modify(HGCW011 hgcw011) {
DaoUtils.update("HGCW011.update", HGCW011); DaoUtils.update(HGCW011.UPDATE, hgcw011);
} }
/** /**
...@@ -119,12 +169,13 @@ public class ServiceHGCW011 extends ServiceBase { ...@@ -119,12 +169,13 @@ public class ServiceHGCW011 extends ServiceBase {
* @param inInfo * @param inInfo
* @return * @return
*/ */
@OperationLogAnnotation(operModul = "账期维护",operType = "删除",operDesc = "删除") @OperationLogAnnotation(operModul = "销售开票",operType = "删除",operDesc = "删除")
@Override
public EiInfo delete(EiInfo inInfo) { public EiInfo delete(EiInfo inInfo) {
try { try {
List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows(); List<Map> resultRows = inInfo.getBlock(EiConstant.resultBlock).getRows();
for (int i = 0; i < resultRows.size(); i++) { for (int i = 0; i < resultRows.size(); i++) {
DaoUtils.update("HGCW011.delete", resultRows.get(i)); DaoUtils.update(HGCW011.DELETE, resultRows.get(i));
} }
inInfo = this.query(inInfo); inInfo = this.query(inInfo);
inInfo.setStatus(EiConstant.STATUS_DEFAULT); inInfo.setStatus(EiConstant.STATUS_DEFAULT);
......
...@@ -5,6 +5,7 @@ import com.baosight.hggp.core.constant.CommonConstant; ...@@ -5,6 +5,7 @@ import com.baosight.hggp.core.constant.CommonConstant;
import com.baosight.hggp.core.dao.DaoUtils; import com.baosight.hggp.core.dao.DaoUtils;
import com.baosight.hggp.core.enums.OrgTypeEnum; import com.baosight.hggp.core.enums.OrgTypeEnum;
import com.baosight.hggp.core.enums.ValidFlagEnum; import com.baosight.hggp.core.enums.ValidFlagEnum;
import com.baosight.hggp.core.security.UserSessionUtils;
import com.baosight.hggp.hg.constant.HGConstant; import com.baosight.hggp.hg.constant.HGConstant;
import com.baosight.hggp.hg.pz.domain.HGPZ009; import com.baosight.hggp.hg.pz.domain.HGPZ009;
import com.baosight.hggp.hg.xs.tools.HGXSTools; import com.baosight.hggp.hg.xs.tools.HGXSTools;
...@@ -66,9 +67,10 @@ public class ServiceHGPZ009 extends ServiceBase { ...@@ -66,9 +67,10 @@ public class ServiceHGPZ009 extends ServiceBase {
Map queryRow = EiInfoUtils.getFirstRow(inInfo); Map queryRow = EiInfoUtils.getFirstRow(inInfo);
// 排除虚拟企业 // 排除虚拟企业
queryRow.put("exValidFlag", ValidFlagEnum.VIRTUALLY.getCode()); queryRow.put("exValidFlag", ValidFlagEnum.VIRTUALLY.getCode());
queryRow.put("accountCode", UserSessionUtils.getAccountCode());
inInfo = super.query(inInfo, HGPZ009.QUERY, new HGPZ009()); inInfo = super.query(inInfo, HGPZ009.QUERY, new HGPZ009());
String projectEnv = ProjectInfo.getProjectEnv(); //String projectEnv = ProjectInfo.getProjectEnv();
inInfo.setCell(EiConstant.resultBlock, ACConstants.ROW_CODE_0, "projectEnv", projectEnv); //inInfo.setCell(EiConstant.resultBlock, ACConstants.ROW_CODE_0, "projectEnv", projectEnv);
} catch (Exception e) { } catch (Exception e) {
LogUtils.setDetailMsg(inInfo, e, "查询失败"); LogUtils.setDetailMsg(inInfo, e, "查询失败");
} }
......
...@@ -398,8 +398,8 @@ public class ServiceHGSC007 extends ServiceEPBase { ...@@ -398,8 +398,8 @@ public class ServiceHGSC007 extends ServiceEPBase {
}); });
List list = factoryCodes.stream() List list = factoryCodes.stream()
.filter(o -> com.baosight.hggp.util.StringUtils.equals(o.getOrgType(), OrgTypeEnum.FACTORY.getCode())) .filter(o -> com.baosight.hggp.util.StringUtils.equals(o.getOrgType(), OrgTypeEnum.FACTORY.getCode()))
.map(item -> new Factory(item.getCompanyCode(), item.getCompanyName(), item.getFactoryCode(), .map(item -> new Factory(item.getCompanyCode(), item.getCompanyName(), item.getOrgId(),
item.getFactoryName())).collect(Collectors.collectingAndThen( item.getOrgCname())).collect(Collectors.collectingAndThen(
Collectors.toMap(Factory::getFactoryCode, Function.identity(), Collectors.toMap(Factory::getFactoryCode, Function.identity(),
(oldValue, newValue) -> oldValue), (oldValue, newValue) -> oldValue),
// 将Map转回List // 将Map转回List
......
...@@ -1067,7 +1067,7 @@ ...@@ -1067,7 +1067,7 @@
</isNotEmpty> </isNotEmpty>
group by h2.process_code group by h2.process_code
) B on A.process_code = B.process_code ) B on A.process_code = B.process_code
where 1=1 where 1=1 and DELETE_FLAG = '0'
<isNotEmpty prepend=" AND " property="accountCode"> <isNotEmpty prepend=" AND " property="accountCode">
A.account_code = #accountCode# A.account_code = #accountCode#
</isNotEmpty> </isNotEmpty>
...@@ -1099,7 +1099,7 @@ ...@@ -1099,7 +1099,7 @@
</isNotEmpty> </isNotEmpty>
group by h2.process_code group by h2.process_code
) B on A.process_code = B.process_code ) B on A.process_code = B.process_code
where 1=1 where 1=1 and DELETE_FLAG = '0'
<isNotEmpty prepend=" AND " property="accountCode"> <isNotEmpty prepend=" AND " property="accountCode">
A.account_code = #accountCode# A.account_code = #accountCode#
</isNotEmpty> </isNotEmpty>
......
$(function () {
// 登录页加载完成时,进行浏览器版本检测
window.onload = function () {
var BROWSER_VERSION = 9;
var browser = (function () {
var ua = navigator.userAgent, tem,
M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
return 'IE ' + (tem[1] || '');
}
if (M[1] === 'Chrome') {
tem = ua.match(/\b(OPR|Edge)\/(\d+)/);
if (tem != null) return tem.slice(1).join(' ').replace('OPR', 'Opera');
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = ua.match(/version\/(\d+)/i)) != null) M.splice(1, 1, tem[1]);
return M.join(' ');
})();
var BrowserVersion = browser.split(" ");
if ((/^(MS)?( )?IE/).test(browser) && BrowserVersion[1] < BROWSER_VERSION) {
$(".warning-window").css("display", "block");
$(".i-overlay").css("display", "block");
}
if ((/^(MS)?( )?IE/).test(browser) && BrowserVersion[1] < BROWSER_VERSION - 1) {
$("#login").attr("disabled", true);
}
// 触发登录操作
loginClick();
};
$(".i-close").on("click", function () {
$(".warning-window").css("display", "none");
$(".i-overlay").css("display", "none");
});
//放大镜
$(".i-zoom-close").on("click", function () {
$(".zoom-window").css("display", "none");
$(".i-overlay").css("display", "none");
});
$(".info-detail").on("click", function () {
$(".zoom-window").css("display", "block");
$(".i-overlay").css("display", "block");
});
$.fn.textScroll = function (options) {
var defaults = {
duration: 8000,//滚动总时长控制
mode: 'normal',//滚动模式:普通normal;逐行line
perDistance: 18//line模式下每次滚动距离
},
that = this,
scrollInterval,
content = this.find(".text-content");
var items = $.extend({}, defaults, options);
//添加占位元素,处理无法滚动到底的情况
function addHoldDiv(stage, textContent) {
if (items.mode === 'no-gap') {
that.append(content.clone().addClass("second-text"));
} else {
var holdDiv = "<div class='hold-scroll'></div>";
stage.append(holdDiv);
var divHeight = stage.height() + textContent.height();
$(".hold-scroll").css({"width": "100%", "height": divHeight, "color": "transparent"});
}
}
//根据不同模式添加动画
function addAnimate() {
if (items.mode === 'normal' || items.mode === 'no-gap') {
var scrollPercent = that.scrollTop() / content.outerHeight(true);
if (that.scrollTop() === 0) {
that.animate({scrollTop: '0'}, 1000);
}
that.animate({scrollTop: content.outerHeight(true)}, Math.round(items.duration * (1 - scrollPercent)), "linear");
that.animate({scrollTop: '0'}, 0, arguments.callee);
} else if (items.mode === 'line') {
var times = Math.ceil(content.outerHeight(true) / items.perDistance);
scrollInterval = setInterval(function () {
if (content.outerHeight(true) - that.scrollTop() <= 0) {
that.animate({scrollTop: 0}, 0);
} else {
that.animate({scrollTop: that.scrollTop() + items.perDistance}, 0);
}
}, Math.round(items.duration / times));
}
}
addHoldDiv(that, content);
that.niceScroll({
'autohidemode': 'false'
});
that.mouseenter(function () {
if (items.mode === 'normal' || items.mode === 'no-gap') {
that.stop(true);
} else if (items.mode === 'line') {
clearInterval(scrollInterval);
}
that.getNiceScroll().show();
});
that.mouseleave(function (e) {
var targetElement = $(e.toElement);
if (targetElement.hasClass("nicescroll-rails-vr") || targetElement.hasClass("nicescroll-cursors")) {
targetElement.one("mouseleave", function (e) {
if ($(e.toElement) !== that && !$(e.toElement).hasClass("nicescroll-rails-vr")) {
that.getNiceScroll().hide();
addAnimate();
}
});
} else if (!targetElement.hasClass("nicescroll-rails-vr") && !targetElement.hasClass("nicescroll-cursors")) {
that.getNiceScroll().hide();
addAnimate();
}
});
that.mouseleave();
};
loginClick = function () {
var loginForm = document.getElementsByTagName("form")[0];
var urlParam = location.href.substr(location.href.indexOf("?") + 1);
if (urlParam.indexOf("p_redirect") !== -1) {
var keyString = urlParam.split('=')[0];
var valueString =urlParam.split('=')[1];
if (keyString === "p_redirect") {
var tmpInput = document.createElement("input");
tmpInput.type = "hidden";
tmpInput.name = "p_redirect";
tmpInput.value = valueString;
loginForm.appendChild(tmpInput);
}
}
// 将密码框的值修改为加密后的值
var loginPublicKey = $("#__LOGIN_PUBLICKEY__").val();
if(isAvailable(loginPublicKey)){
var encrypt = new JSEncrypt();
encrypt.setPublicKey(loginPublicKey);
var encryptedUsername = encrypt.encrypt($("input[name='p_username1']").val());
$("input[name='p_username']").val(encryptedUsername);
var encryptedPassword = encrypt.encrypt($("input[name='p_password1']").val());
$("input[name='p_password']").val(encryptedPassword);
}
loginForm.submit();
};
//判断是否值能获取的方法
function isAvailable(obj) {
if (obj === undefined) {
return false;
}
if (obj === null) {
return false;
}
if (obj === "null") {
return false;
}
return obj !== "";
}
function getParameterByName(name, url) {
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) {
return null;
}
if (!results[2]) {
return null;
}
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
});
<!DOCTYPE html>
<%@ page contentType="text/html; charset=UTF-8" %>
<%@ page import="com.baosight.iplat4j.common.constant.RSAConstants" %>
<%@ page import="com.baosight.iplat4j.core.FrameworkInfo" %>
<%@ page import="com.baosight.iplat4j.core.license.LicenseStub" %>
<%@ page import="com.baosight.iplat4j.core.log.Logger" %>
<%@ page import="com.baosight.iplat4j.core.log.LoggerFactory" %>
<%@ page import="com.baosight.iplat4j.core.util.StringUtils" %>
<%@ page import="java.net.URLDecoder" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="EF" tagdir="/WEB-INF/tags/EF" %>
<%
org.springframework.security.core.context.SecurityContextHolder.clearContext();
LicenseStub.setLicenseDir(application.getRealPath("/WEB-INF"));
String[] ret = LicenseStub.checkLicense2();
boolean valid = "true".equals(ret[0]); //LicenseStub.checkLicense2();
int days = 0;
if (!"".equals(ret[2]) && !"0".equals(ret[2])) {
days = Integer.parseInt(ret[2]);
}
String licMsg = valid ? (("false".equals(ret[3]) && days >= -10 && days < 0) ?
"<div style='color:#ee9933;font-weight:bold;font-size:18px'>许可证还有[" + (-days) + "]天将过期!</div>"
: "")
: "<div style='color:red;font-weight:bold;font-size:22px'>许可证非法!</div>";
Exception exp = (Exception) request.getAttribute("AuthenticationException");
String user = (String) request.getAttribute("AuthenticationUser");
if (!org.springframework.util.StringUtils.isEmpty(request.getParameter("expmsg"))) {
String expmsg = request.getParameter("expmsg");
exp = new Exception(URLDecoder.decode("Exception:" + expmsg));
}
String loginErrTag = "0";
if (!org.springframework.util.StringUtils.isEmpty(request.getParameter("login_error"))) {
loginErrTag = request.getParameter("login_error");
}
String username = "";
String password = "";
String captcha = "";
if (exp != null) {
username = user;
}
String usrHeader = request.getHeader("user-agent");
String projectCname = FrameworkInfo.getProjectCname();
String projectTypeDesc = FrameworkInfo.getProjectTypeDesc();
// 获取iPlatUI静态资源地址
String iPlatStaticURL = FrameworkInfo.getPlatStaticURL(request);
String theme = "ant";
// 获取Context根路径,考虑到分布式部署的场景,不能直接使用WebContext
String iPlatContext = FrameworkInfo.getPlatWebContext(request);
//读取加密配置,以及公钥
String loginPublicKey = "";
if ("on".equals(RSAConstants.cryptoPasswordEnable)) {
loginPublicKey = RSAConstants.loginRsaPublicKey;
}
final Logger logger = LoggerFactory.getLogger("index");
String LoginLogo = "default";
String LoginSystemName = "";
%>
<c:set var="ctx" value="<%=iPlatContext%>"/>
<c:set var="iPlatStaticURL" value="<%=iPlatStaticURL%>"/>
<c:set var="loginExp" value="<%=exp%>"/>
<c:set var="theme" value="<%=theme%>" scope="session"/>
<c:set var="LoginLogo" value="<%=LoginLogo%>"/>
<c:set var="LoginSystemName" value="<%=LoginLogo%>"/>
<html class="i-theme-blue">
<head>
<meta charset="utf-8"/>
<meta name="robots" content="noindex, nofollow"/>
<meta name="description" content="登录界面"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<% if (StringUtils.isNotEmpty(projectCname) && StringUtils.isNotEmpty(projectTypeDesc)) { %>
<title><%=projectCname%>[<%=projectTypeDesc%>]登录界面</title>
<% } else { %>
<title>登录界面</title>
<% } %>
<link rel="shortcut icon" href="iplat.ico" type="image/x-icon">
<link rel="stylesheet" id="css-main" href="${iPlatStaticURL}/iplatui/assets/css/iplat.ui.bootstrap.min.css">
<link href="${iPlatStaticURL}/iPlatV7-login.css" rel="stylesheet" type="text/css"/>
<%--<link rel="stylesheet" type="text/css" href="${iPlatStaticURL}/iplatui/css/iplat.ui.ued.login.css">&lt;%&ndash;ued亮色样式&ndash;%&gt;--%>
<script src="${iPlatStaticURL}/kendoui/js/jquery.min.js"></script>
<!--[if lte IE 8]>
<link href="${iPlatStaticURL}/iPlatV7-login-ie.css" rel="stylesheet" type="text/css"/>
<script src="${iPlatStaticURL}/iplatui/assets/js/polyfills/iplat.ui.ie8.polyfills.min.js"></script>
<![endif]-->
<script src="${iPlatStaticURL}/auto-login.js"></script>
<%--引入RSA加密js--%>
<script src="${iPlatStaticURL}/iplatui/js/jsencrypt.js"></script>
<%
String domain = FrameworkInfo.getProjectAppTopDomain();
if (domain != null && domain.startsWith(".")) {
domain = domain.substring(1);
%>
<script type="text/javascript">
try {
document.domain = '<%=domain%>';
} catch (ex) {
alert('model not valid[<%=domain%>]');
}
</script>
<%
}
%>
</head>
<body class="i-theme-${theme}" style="display: none;">
<div class="main">
<div class="wrapper">
<div class="content overflow-hidden">
<div class="row">
<%--公钥参数--%>
<input id="__LOGIN_PUBLICKEY__" inline="true" type="hidden" value="<%=loginPublicKey%>"/>
<div class="col-sm-6 col-sm-offset-2 col-md-4 col-md-offset-4" style="margin-bottom: 1em">
<div class="form-header">
<p style="font-size: 28px;"><b>企业经营一体化平台</b></p>
</div>
</div>
<div class="col-sm-6 col-sm-offset-2 col-md-4 col-md-offset-4">
<div class="login-block <c:if test="${not empty loginExp}"> animated shake</c:if>"
style="background-color: white;border-radius: 10px">
<div class="form-header">
<c:choose>
<c:when test="${LoginLogo == 'default'}">
<div class=""> <%--logodefault--%>
<div style="color: #004B9D;margin-left: 63%"><%=LoginSystemName%>
</div>
</div>
</c:when>
<c:otherwise>
<div class="logo">
<img src="<%=LoginLogo%>" style="float: left;height: 43px">
<div style=" width: 2px;height: 43px;background-color: rgba(28, 29, 35, 0.04);float: left;margin-left: 10px;margin-right: 10px"></div>
<img src="iplatui/img/login/bld_logo.png"
style="float: left;width: 90px;height: 43px;">
<div style="color: #004B9D;margin-left: 58%"><%=LoginSystemName%>
</div>
</div>
</c:otherwise>
</c:choose>
<p style="font-size: 20px;color: black;">用户登录</p>
<p class="text-danger">
<c:if test="${not empty loginExp}">
<%
String loginError = exp.getMessage();
int index = loginError.indexOf("Exception:");
if (index >= 0) {
loginError = loginError.substring(index + 10);
}
if (!"1".equals(loginErrTag) &&
(request.getAttribute("AuthenticationUser") == null
|| request.getAttribute("AuthenticationUser") == "")) {
loginError = "请输入用户名";
}
%>
<%=loginError%>
</c:if>
</p>
</div>
<form autocomplete="off" class="form-horizontal push-10-t push-10" action="${ctx}/login"
method="post" onsubmit="javascript:return loginClick();">
<div class="form-group">
<div class="col-xs-12">
<div class="input-group">
<div class="input-group-addon" style="background-color: rgb(232, 240, 254)">
账号
</div>
<input class="form-input" type="text"
style="border: rgb(232, 240, 254);background-color: rgb(232, 240, 254);color: black"
value="YG5918"
name="p_username1" placeholder="用户名"/>
</div>
</div>
</div>
<div class="form-group password">
<div class="col-xs-12">
<div class="input-group">
<div class="input-group-addon" style="background-color: rgb(232, 240, 254)">
密码
</div>
<input class="form-input" type="password"
style="border: rgb(232, 240, 254);background-color: rgb(232, 240, 254);color: black"
value="Easy160731!"
name="p_password1" autocomplete="off" placeholder="密码"/>
</div>
</div>
</div>
<input type="text" name="p_username" placeholder="用户名" style=""/>
<input type="password" name="p_password" autocomplete="off" placeholder="密码" style=""/>
<div class="form-group remember">
<div class="col-xs-6">
<%--<label class="css-input">--%>
<%--<input type="checkbox" id="login-remember-me" value="false"--%>
<%--name="remember-me"/><span class="i-icon"></span>--%>
<%--2周内免登录--%>
<%--</label>--%>
<%--<a href="${ctx}/web/XS0102">注册账号</a>--%>
</div>
<div class="col-xs-6" style="text-align: right">
<%--<a href="${ctx}/web/XS0102" style="margin-right: 6px">注册</a>--%>
<%--<a href="${ctx}/web/XS0106">忘记密码?</a>--%>
</div>
</div>
<div class="form-group log-in">
<div class="col-xs-12">
<button id="login" class="login-btn" type="submit">登录
</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="i-overlay"></div>
</body>
<script type="text/javascript">
var ctx = "${ctx}";
</script>
</html>
...@@ -2100,14 +2100,14 @@ $(function () { ...@@ -2100,14 +2100,14 @@ $(function () {
try { try {
if (loginName !== "admin"){ if (loginName !== "admin"){
var info = new EiInfo() var info = new EiInfo()
info.set("inqu_status-0-accountCode", loginName) //info.set("inqu_status-0-accountCode", loginName)
EiCommunicator.send("HGPZ009", "query", info, { EiCommunicator.send("HGPZ009", "query", info, {
onSuccess: function (ei) {//返回结果集 onSuccess: function (ei) {//返回结果集
if (ei.blocks.result !== undefined){ if (ei.blocks.result !== undefined){
let results = ei.getBlock("result").getMappedRows(); let results = ei.getBlock("result").getMappedRows();
if (results.length>0 && results[0].docIdPc.trim().length>0){ if (results.length>0 && results[0].docIdPc.trim().length>0){
let src = downloadHref(results[0].docIdPc.trim(),results[0].projectEnv) //let src = downloadFile(results[0].docIdPc.trim(),true)
let img=`<img src="${src}" style='width:200px;height:55px;background-image: none;'/>`; let img="<img src=\'"+downloadFile(results[0].docIdPc.trim(),true)+"\' style='width:200px;height:55px;background-image: none;'/>";
$("#sidebar .sidebar-content .side-header").html(img); $("#sidebar .sidebar-content .side-header").html(img);
//$("#sidebar .sidebar-content .side-header").attr("src",downloadHref(results[0].docIdPc,results[0].projectEnv)); //$("#sidebar .sidebar-content .side-header").attr("src",downloadHref(results[0].docIdPc,results[0].projectEnv));
}else { }else {
...@@ -2200,13 +2200,20 @@ function changepassword(formEname,formCname){ ...@@ -2200,13 +2200,20 @@ function changepassword(formEname,formCname){
}); });
} }
function downloadHref(docId,projectEnv) { /**
// S3地址有外网 * 文件下载路径
// return IPLATUI.CONTEXT_PATH + ("run" == projectEnv ? ('/docFileDownload/' + docId) *
// : ('/EU/DM/EUDM06.jsp?docId=' + docId)); * @param docId
// S3地址无外网 * @param isPreview 是否预览,true:预览
return IPLATUI.CONTEXT_PATH + ("run" == projectEnv ? ('/file/download/' + docId) * @returns {string}
: ('/EU/DM/EUDM06.jsp?docId=' + docId)); */
let downloadFile = function (docId, isPreview) {
if (isPreview) {
return IPLATUI.CONTEXT_PATH + '/file/download/preview/' + docId;
} else {
// S3地址必须支持公网
return IPLATUI.CONTEXT_PATH + '/file/download/' + docId;
}
} }
/** /**
......
...@@ -21,7 +21,6 @@ ...@@ -21,7 +21,6 @@
%> %>
<% <%
String pAuthen = request.getParameter("p_authen");
String directmode = request.getParameter("maintain") != null ? request.getParameter("maintain").toString() : ""; String directmode = request.getParameter("maintain") != null ? request.getParameter("maintain").toString() : "";
RequestDispatcher rd; RequestDispatcher rd;
String appName = FrameworkInfo.getProjectAppName(); String appName = FrameworkInfo.getProjectAppName();
...@@ -95,17 +94,6 @@ ...@@ -95,17 +94,6 @@
} else { } else {
response.sendRedirect(request.getContextPath() + _urlHtml); response.sendRedirect(request.getContextPath() + _urlHtml);
} }
} else if ("Trust".equals(pAuthen)) {
// 自动登录
rd = request.getRequestDispatcher("auto-login.jsp");
try {
rd.forward(request, response);
} catch (ServletException e1) {
e1.printStackTrace();
} finally {
out.clear();
out = pageContext.pushBody();
}
} else { } else {
//以正常方式进入登录首页 //以正常方式进入登录首页
rd = request.getRequestDispatcher("iPlatV7-login.jsp"); rd = request.getRequestDispatcher("iPlatV7-login.jsp");
......
...@@ -434,8 +434,8 @@ function billFunc() { ...@@ -434,8 +434,8 @@ function billFunc() {
message("勾选的数据中有已经开票的票据!"); message("勾选的数据中有已经开票的票据!");
flag = false; flag = false;
} }
if (row.billNumber == " ") { if (isBlank(row.billNumber)) {
message("勾选的数据中发票号为空"); message("选中的第"+(index+1)+"行数据中发票号为空!");
flag = false; flag = false;
} }
}) })
......
...@@ -81,11 +81,17 @@ function saveFunc() { ...@@ -81,11 +81,17 @@ function saveFunc() {
let flag = true; let flag = true;
$.each(rows, function(index, item) { $.each(rows, function(index, item) {
let reviewStatus= item.get("reviewStatus"); let reviewStatus= item.get("reviewStatus");
let thisAmount= item.get("thisAmount");
if((reviewStatus === "1")){ if((reviewStatus === "1")){
message("数据已审核"); message("数据已审核");
flag = false; flag = false;
return false; return false;
} }
if (!isNumber(thisAmount) && thisAmount <= 0) {
message("勾选的第" + (index + 1) + "行本次收票金额必须是大于0的数字");
flag = false;
return false;
}
}); });
if(flag) { if(flag) {
JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", { JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", {
......
...@@ -56,7 +56,7 @@ ...@@ -56,7 +56,7 @@
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="thisPriceTax" cname="结算含税金额" enable="false" hidden="false" format="{0:N2}" align="right"/> <EF:EFColumn ename="thisPriceTax" cname="结算含税金额" enable="false" hidden="false" format="{0:N2}" align="right"/>
<EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text" <EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text"
displayType="0.00" sort="true" align="right" maxLength="15" required="false" displayType="0.00" sort="true" align="right" maxLength="15" required="true"
data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/" data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/"
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text" <EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text"
......
...@@ -57,11 +57,17 @@ function saveFunc() { ...@@ -57,11 +57,17 @@ function saveFunc() {
let flag = true; let flag = true;
$.each(rows, function(index, item) { $.each(rows, function(index, item) {
let reviewStatus= item.get("reviewStatus"); let reviewStatus= item.get("reviewStatus");
let thisAmount= item.get("thisAmount");
if((reviewStatus === "1")){ if((reviewStatus === "1")){
message("数据已审核"); message("数据已审核");
flag = false; flag = false;
return false; return false;
} }
if (!isNumber(thisAmount) && thisAmount <= 0) {
message("勾选的第" + (index + 1) + "行本次收票金额必须是大于0的数字");
flag = false;
return false;
}
}); });
if(flag) { if(flag) {
JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", { JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", {
......
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/" data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/"
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text" <EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text"
displayType="0.00" sort="true" align="right" maxLength="15" required="false" displayType="0.00" sort="true" align="right" maxLength="15" required="true"
data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/" data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/"
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text" <EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text"
......
...@@ -57,11 +57,17 @@ function saveFunc() { ...@@ -57,11 +57,17 @@ function saveFunc() {
let flag = true; let flag = true;
$.each(rows, function(index, item) { $.each(rows, function(index, item) {
let reviewStatus= item.get("reviewStatus"); let reviewStatus= item.get("reviewStatus");
let thisAmount= item.get("thisAmount");
if((reviewStatus === "1")){ if((reviewStatus === "1")){
message("数据已审核"); message("数据已审核");
flag = false; flag = false;
return false; return false;
} }
if (!isNumber(thisAmount) && thisAmount <= 0) {
message("勾选的第" + (index + 1) + "行本次收票金额必须是大于0的数字");
flag = false;
return false;
}
}); });
if(flag) { if(flag) {
JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", { JSUtils.confirm("确定对勾选中的[" + rows.length + "]条数据做\"保存\"操作? ", {
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/" data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/"
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text" <EF:EFColumn ename="thisAmount" cname="本次开票金额" width="120" enable="true" readonly="false" format="{0:N2}" editType="text"
displayType="0.00" sort="true" align="right" maxLength="15" required="false" displayType="0.00" sort="true" align="right" maxLength="15" required="true"
data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/" data-regex="/^-?[0-9]{1,15}([.][0-9]{1,2})?$/"
data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/> data-errorprompt="请输入数字,该值最大可设置15位整数和2位小数!"/>
<EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text" <EF:EFColumn ename="remainingAmount" cname="剩余开票金额" width="120" enable="false" format="{0:N2}" editType="text"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment