其他git仓库代码同步
This commit is contained in:
parent
29147f682c
commit
6910229b30
|
|
@ -123,7 +123,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
}
|
||||
// String csettleorgid = bvos[0].getCsettleorgid();
|
||||
String ccurrencyorgid = o1.toString();
|
||||
// UFDouble exchangerate = SOCurrencyUtil.getInCurrencyRateByOrg(csettleorgid, BFPubTools.getString_TrimAsNull(o), ccurrencyorgid, dbilldate);
|
||||
// UFDouble exchangerate = SOCurrencyUtil.getInCurrencyRateByOrg(csettleorgid,
|
||||
// BFPubTools.getString_TrimAsNull(o), ccurrencyorgid, dbilldate);
|
||||
for (SaleOrderBVO bvo : bvos) {
|
||||
bvo.setCcurrencyid(BFPubTools.getString_TrimAsNull(o1));
|
||||
if (!BFPubTools.getString_TrimAsNull(o).equals(ccurrencyorgid)) {
|
||||
|
|
@ -132,12 +133,12 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
// bvo.setNexchangerate(UFDouble.ONE_DBL);
|
||||
}
|
||||
// 折本汇率判空及保留小数位数
|
||||
UFDouble exchangerate1 = getUFDouble_NullAsOne(bvo.getNexchangerate()).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
UFDouble exchangerate1 = getUFDouble_NullAsOne(bvo.getNexchangerate()).setScale(2,
|
||||
UFDouble.ROUND_HALF_UP);
|
||||
bvo.setNexchangerate(exchangerate1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
BillVOsCheckRule checker = new BillVOsCheckRule(new SaleOrderValidator());
|
||||
checker.check(vos);
|
||||
Map<String, String> origcurrencyMap = new HashMap<>();
|
||||
|
|
@ -286,14 +287,27 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
childrenVO.setVchangerate(measrate);// 换算率
|
||||
childrenVO.setVqtunitrate(measrate);// 报价换算率
|
||||
UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate);
|
||||
// UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
// if (null != measrateNums && measrateNums.length != 0) {
|
||||
// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
// }
|
||||
// // 主数量
|
||||
// UFDouble nnum = childrenVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
// childrenVO.setNnum(nnum);
|
||||
// UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
// childrenVO.setNastnum(nastnum);// 数量
|
||||
// childrenVO.setNqtunitnum(nastnum);// 报价单位数量
|
||||
// sumnum = sumnum.add(nnum);
|
||||
// sumnny = sumnny.add(norigtaxmny);
|
||||
|
||||
UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
if (null != measrateNums && measrateNums.length != 0) {
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]);
|
||||
}
|
||||
// 主数量
|
||||
UFDouble nnum = childrenVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
UFDouble nnum = childrenVO.getNnum();
|
||||
childrenVO.setNnum(nnum);
|
||||
UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
UFDouble nastnum = nnum.multiply(measrateNum);
|
||||
childrenVO.setNastnum(nastnum);// 数量
|
||||
childrenVO.setNqtunitnum(nastnum);// 报价单位数量
|
||||
sumnum = sumnum.add(nnum);
|
||||
|
|
@ -301,7 +315,7 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
|
||||
}
|
||||
ordervo.getParentVO().setNtotalnum(sumnum);
|
||||
ordervo.getParentVO().setNtotalorigmny(sumnny.setScale(2, 4));
|
||||
ordervo.getParentVO().setNtotalorigmny(sumnny);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -427,16 +441,16 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
boolean hasNewStatus = Arrays.stream(bvos).anyMatch(bvo -> bvo.getStatus() == VOStatus.NEW);
|
||||
// 新增子表或改订单类型的情况下不校验是否存在下游
|
||||
/*if (!hasNewStatus && !isChangedTranType) {
|
||||
String countSql = "SELECT count(1) FROM so_saleinvoice_b a"
|
||||
+ " LEFT JOIN so_saleinvoice b ON a.csaleinvoiceid = b.csaleinvoiceid"
|
||||
+ " WHERE b.fopposeflag = 0 AND nvl(b.dr, 0) = 0 and csrcid = '[csrcid]' ";
|
||||
countSql = countSql.replace("[csrcid]", hvo.getCsaleorderid());
|
||||
Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor());
|
||||
if (num > 0) {
|
||||
// fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成
|
||||
ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票");
|
||||
return null;
|
||||
}
|
||||
String countSql = "SELECT count(1) FROM so_saleinvoice_b a"
|
||||
+ " LEFT JOIN so_saleinvoice b ON a.csaleinvoiceid = b.csaleinvoiceid"
|
||||
+ " WHERE b.fopposeflag = 0 AND nvl(b.dr, 0) = 0 and csrcid = '[csrcid]' ";
|
||||
countSql = countSql.replace("[csrcid]", hvo.getCsaleorderid());
|
||||
Integer num = (Integer) getDao().executeQuery(countSql, new ColumnProcessor());
|
||||
if (num > 0) {
|
||||
// fopposeflag 对冲标记 0=正常 1=已被对冲 2=对冲生成
|
||||
ExceptionUtils.wrappBusinessException("下游存在未红冲完成的销售发票");
|
||||
return null;
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
|
|
@ -479,7 +493,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
// 订单类型
|
||||
// String ctrantypeid = orderHVO.getAttributeValue("ctrantypeid") + "";
|
||||
String vtrantypecode = orderHVO.getVtrantypecode();
|
||||
// NCCForUAPLogger.debug("setOtherId-ccustomerid:" + ccustomerid + ",vtrantypecode:" + vtrantypecode);
|
||||
// NCCForUAPLogger.debug("setOtherId-ccustomerid:" + ccustomerid +
|
||||
// ",vtrantypecode:" + vtrantypecode);
|
||||
try {
|
||||
String sql = "";
|
||||
// 部门
|
||||
|
|
@ -487,7 +502,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
sql = " select pk_vid,pk_dept from org_dept where code = '[code]' ";
|
||||
sql = sql.replace("[code]", cdeptvid);
|
||||
Map deptMap = (Map) getDao().executeQuery(sql, new MapProcessor());
|
||||
// NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" + deptMap);
|
||||
// NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-deptObj:" +
|
||||
// deptMap);
|
||||
if (deptMap != null && !deptMap.isEmpty()) {
|
||||
if (!"".equals(deptMap.getOrDefault("pk_dept", "") + "")) {
|
||||
orderHVO.setCdeptid(deptMap.getOrDefault("pk_dept", "") + "");
|
||||
|
|
@ -502,7 +518,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
sql = " select pk_psndoc from bd_psndoc where code = '[code]' ";
|
||||
sql = sql.replace("[code]", cemployeeid);
|
||||
Object staffObj = getDao().executeQuery(sql, new ColumnProcessor("pk_psndoc"));
|
||||
// NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" + staffObj);
|
||||
// NCCForUAPLogger.debug("APISaleOrderMaitainImpl-setOtherId-staffObj:" +
|
||||
// staffObj);
|
||||
if (staffObj != null) {
|
||||
String id = BFPubTools.getString_TrimAsNull(staffObj);
|
||||
if (!id.isEmpty()) {
|
||||
|
|
@ -541,7 +558,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
IBilltypeService billtypeService = NCLocator.getInstance().lookup(IBilltypeService.class);
|
||||
BilltypeVO billtype = billtypeService.getBilltype(vtrantypecode);
|
||||
if (billtype != null && billtype.getPk_billtypeid() != null) {
|
||||
// NCCForUAPLogger.debug("setOtherId-pk_billtypeid:" + billtype.getPk_billtypeid());
|
||||
// NCCForUAPLogger.debug("setOtherId-pk_billtypeid:" +
|
||||
// billtype.getPk_billtypeid());
|
||||
orderHVO.setCtrantypeid(billtype.getPk_billtypeid());
|
||||
}
|
||||
}
|
||||
|
|
@ -724,12 +742,14 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate);
|
||||
UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
if (null != measrateNums && measrateNums.length != 0) {
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]);
|
||||
}
|
||||
// 主数量
|
||||
UFDouble nnum = sourceBVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
targetBVO.setNnum(nnum);
|
||||
UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
// UFDouble nnum = sourceBVO.getNnum().setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
UFDouble nnum = sourceBVO.getNnum();
|
||||
// UFDouble nastnum = nnum.multiply(measrateNum).setScale(2,
|
||||
// UFDouble.ROUND_HALF_UP);
|
||||
UFDouble nastnum = nnum.multiply(measrateNum);
|
||||
targetBVO.setNastnum(nastnum);// 数量
|
||||
targetBVO.setNqtunitnum(nastnum);// 报价单位数量
|
||||
|
||||
|
|
@ -742,20 +762,21 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
defList = getDefList("BIP-ddh");
|
||||
targetBVO.setVbdef5(defList.getOrDefault(vbdef5, ""));
|
||||
// 新增字段的setter方法
|
||||
targetBVO.setVbdef10(sourceBVO.getVbdef10()); // 项目名称
|
||||
targetBVO.setVbdef13(sourceBVO.getVbdef13()); // 国网行项目号
|
||||
targetBVO.setVbdef14(sourceBVO.getVbdef14()); // 合同销售订单变更明细id
|
||||
targetBVO.setVbdef18(sourceBVO.getVbdef18()); // 是否定制
|
||||
targetBVO.setVbdef22(sourceBVO.getVbdef22()); // 国内采购订单号
|
||||
targetBVO.setVbdef10(sourceBVO.getVbdef10()); // 项目名称
|
||||
targetBVO.setVbdef13(sourceBVO.getVbdef13()); // 国网行项目号
|
||||
targetBVO.setVbdef14(sourceBVO.getVbdef14()); // 合同销售订单变更明细id
|
||||
targetBVO.setVbdef18(sourceBVO.getVbdef18()); // 是否定制
|
||||
targetBVO.setVbdef22(sourceBVO.getVbdef22()); // 国内采购订单号
|
||||
if (StringUtils.isNotEmpty(sourceBVO.getCrowno())) {
|
||||
targetBVO.setCrowno(sourceBVO.getCrowno()); // 行号
|
||||
targetBVO.setCrowno(sourceBVO.getCrowno()); // 行号
|
||||
}
|
||||
if (StringUtils.isNotEmpty(sourceBVO.getVbdef19())) {
|
||||
targetBVO.setVbdef19(sourceBVO.getVbdef19()); // 计划开工日期
|
||||
targetBVO.setVbdef19(sourceBVO.getVbdef19()); // 计划开工日期
|
||||
}
|
||||
if (StringUtils.isNotEmpty(sourceBVO.getVbdef20())) {
|
||||
targetBVO.setVbdef20(sourceBVO.getVbdef20()); // 计划完工日期
|
||||
targetBVO.setVbdef20(sourceBVO.getVbdef20()); // 计划完工日期
|
||||
}
|
||||
targetBVO.setVbdef24(sourceBVO.getVbdef24()); // 计划评审日期
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -985,8 +1006,9 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
if (map == null) {
|
||||
throw new BusinessException(cmaterialvid + "物料未查到");
|
||||
}
|
||||
// NCCForUAPLogger.debug(String.format("setMaterl: cqtunitid = [%S], cunitid = [%S], castunitid = [%S]",
|
||||
// map.get("cqtunitid"), map.get("cunitid"), map.get("castunitid")));
|
||||
// NCCForUAPLogger.debug(String.format("setMaterl: cqtunitid = [%S], cunitid =
|
||||
// [%S], castunitid = [%S]",
|
||||
// map.get("cqtunitid"), map.get("cunitid"), map.get("castunitid")));
|
||||
bVO.setAttributeValue("castunitid", map.get("castunitid"));
|
||||
bVO.setAttributeValue("vchangerate", map.get("vchangerate"));
|
||||
|
||||
|
|
@ -1000,7 +1022,7 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
bVO.setVqtunitrate(map.get("measrate") + "");// 报价换算率
|
||||
|
||||
// UFDouble nqtunitnum = BFPubTools.getUFDouble_NullAsZero(nnum)
|
||||
// .div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0]));
|
||||
// .div(BFPubTools.getUFDouble_NullAsZero(map.get("measrate").toString().split("/")[0]));
|
||||
// bVO.setAttributeValue("nqtunitnum", nqtunitnum);
|
||||
|
||||
sql = "select sl.pk_taxcode from bd_taxrate sl inner join bd_taxcode sm on sl.pk_taxcode=sm.pk_taxcode where sl.taxrate="
|
||||
|
|
@ -1027,9 +1049,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
return null;
|
||||
}
|
||||
IUAPQueryBS queryBS = NCLocator.getInstance().lookup(IUAPQueryBS.class);
|
||||
String sql = " select nvl(measrate, '1/1') measrate" +
|
||||
" from bd_materialconvert" +
|
||||
" where pk_material='" + pk_material + "' ";
|
||||
String sql = " select nvl(measrate, '1/1') measrate" + " from bd_materialconvert" + " where pk_material='"
|
||||
+ pk_material + "' ";
|
||||
return (Map<String, Object>) queryBS.executeQuery(sql, new MapProcessor());
|
||||
}
|
||||
|
||||
|
|
@ -1195,14 +1216,30 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
// newBvo.setVchangerate(measrate);// 换算率
|
||||
// newBvo.setVqtunitrate(measrate);// 报价换算率
|
||||
UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate);
|
||||
// UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
// if (null != measrateNums && measrateNums.length != 0) {
|
||||
// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
// }
|
||||
// // 主数量
|
||||
// UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum")).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
// newBvo.setNnum(nnum);
|
||||
// UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
// newBvo.setNastnum(nastnum);// 数量
|
||||
// newBvo.setNqtunitnum(nastnum);// 报价单位数量
|
||||
//
|
||||
// UFDouble[] measrateNums = HslParseUtil.parseHsl(measrate);
|
||||
// UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
// if (null != measrateNums && measrateNums.length != 0) {
|
||||
// measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
// }
|
||||
UFDouble measrateNum = UFDouble.ONE_DBL;
|
||||
if (null != measrateNums && measrateNums.length != 0) {
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]).setScale(2, 4);
|
||||
measrateNum = measrateNums[0].div(measrateNums[1]);
|
||||
}
|
||||
// 主数量
|
||||
UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum")).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
UFDouble nnum = BFPubTools.getUFDouble_NullAsZero(bodydata.get("nnum"));
|
||||
UFDouble nastnum = nnum.multiply(measrateNum);
|
||||
newBvo.setNnum(nnum);
|
||||
UFDouble nastnum = nnum.multiply(measrateNum).setScale(2, UFDouble.ROUND_HALF_UP);
|
||||
newBvo.setNastnum(nastnum);// 数量
|
||||
newBvo.setNqtunitnum(nastnum);// 报价单位数量
|
||||
|
||||
|
|
@ -1213,10 +1250,13 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
String vbdef5 = bodydata.getOrDefault("vbdef5", "") + "";// 合同销售订单号
|
||||
defList.clear();
|
||||
defList = getDefList("BIP-ddh");
|
||||
newBvo.setVbdef5(defList.getOrDefault(vbdef5, ""));
|
||||
newBvo.setVbdef10(bodydata.getOrDefault("vbdef10", "") + "");// 项目名称
|
||||
newBvo.setVbdef13(bodydata.getOrDefault("vbdef13", "") + "");// 国网行项目号
|
||||
newBvo.setVbdef22(bodydata.getOrDefault("vbdef22", "") + "");// 国内采购订单号
|
||||
newBvo.setVbdef5(defList.getOrDefault(vbdef5, "~"));
|
||||
newBvo.setVbdef10(bodydata.getOrDefault("vbdef10", "~") + "");// 项目名称
|
||||
newBvo.setVbdef13(bodydata.getOrDefault("vbdef13", "~") + "");// 国网行项目号
|
||||
newBvo.setVbdef22(bodydata.getOrDefault("vbdef22", "~") + "");// 国内采购订单号
|
||||
if (bodydata.get("vbdef24") != null && !"".equals(bodydata.get("vbdef24")) && !"~".equals(bodydata.get("vbdef24"))) {
|
||||
newBvo.setVbdef24(bodydata.get("vbdef24") + "");// 计划评审日期
|
||||
}
|
||||
|
||||
bvoList.add(newBvo);
|
||||
}
|
||||
|
|
@ -1393,7 +1433,6 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
String accessToken = "";
|
||||
Map<String, String> params = new HashMap<>();
|
||||
|
||||
|
||||
params.put("appKey", appKey);
|
||||
String timestamp = String.valueOf(System.currentTimeMillis());
|
||||
params.put("timestamp", timestamp);
|
||||
|
|
@ -1428,7 +1467,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
return accessToken;
|
||||
}
|
||||
|
||||
public static String doSendHttp(String baseUrl, String method, Map<String, String> paramMap, String mediaType, Map<String, String> headers, String json) {
|
||||
public static String doSendHttp(String baseUrl, String method, Map<String, String> paramMap, String mediaType,
|
||||
Map<String, String> headers, String json) {
|
||||
HttpURLConnection urlConnection = null;
|
||||
InputStream in = null;
|
||||
OutputStream out = null;
|
||||
|
|
@ -1768,7 +1808,6 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新关联的下游单据
|
||||
*
|
||||
|
|
@ -1782,6 +1821,8 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
String ccustomerid = hvo.getCcustomerid();
|
||||
String ccustomervid = hvo.getCcustomervid();
|
||||
String cemployeeid = hvo.getCemployeeid();
|
||||
//zhangxinah 订单客户和开票客户同步核销明细表
|
||||
dealWithBalance(hvo);
|
||||
String cdeptid = hvo.getCdeptid();
|
||||
String cdeptvid = hvo.getCdeptvid();
|
||||
SaleOrderBVO[] bvos = vo.getChildrenVO();
|
||||
|
|
@ -1946,5 +1987,35 @@ public class APISaleOrderMaitainImpl implements IAPISaleOrderMaitain {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* zhangxinah 订单客户和开票客户同步核销明细表
|
||||
* @param hvo
|
||||
*/
|
||||
private void dealWithBalance(SaleOrderHVO hvo) {
|
||||
String csaleorderid=hvo.getCsaleorderid();
|
||||
String ccustomerid = hvo.getCcustomerid();
|
||||
String ccustomervid = hvo.getCcustomervid();
|
||||
String cinvoicecustid = hvo.getCinvoicecustid();
|
||||
String cinvoicecustvid = hvo.getCinvoicecustvid();
|
||||
//zhangxinah 订单客户和开票客户同步核销明细表
|
||||
// 构建并执行更新SQL
|
||||
String updateSql = "UPDATE so_balance SET "
|
||||
+ " ccustomerid = '[ccustomerid]', "
|
||||
+ " ccustomervid = '[ccustomervid]',"
|
||||
+ " cinvoicecustid = '[cinvoicecustid]',"
|
||||
+ " cinvoicecustvid = '[cinvoicecustvid]'"
|
||||
+ " WHERE csaleorderid = '[csaleorderid]'";
|
||||
updateSql = updateSql.replace("[ccustomerid]", ccustomerid);
|
||||
updateSql = updateSql.replace("[ccustomervid]", ccustomervid);
|
||||
updateSql = updateSql.replace("[cinvoicecustid]", cinvoicecustid);
|
||||
updateSql = updateSql.replace("[cinvoicecustvid]", cinvoicecustvid);
|
||||
updateSql = updateSql.replace("[csaleorderid]", csaleorderid);
|
||||
try {
|
||||
getDao().executeUpdate(updateSql);
|
||||
} catch (Exception e) {
|
||||
ExceptionUtils.wrappBusinessException("so-updateRelatedBill-exp: " + e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue