Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
H
hp-smart
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
platform
hp-smart
Commits
de8e4bb0
Commit
de8e4bb0
authored
Jan 31, 2024
by
宋祥
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.销售出库逻辑关联生产任务以及实时库存,
parent
02bcb651
Show whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
107 additions
and
80 deletions
+107
-80
HPKC011.java
src/main/java/com/baosight/hpjx/hp/kc/domain/HPKC011.java
+10
-2
ServiceHPKC004.java
.../java/com/baosight/hpjx/hp/kc/service/ServiceHPKC004.java
+4
-3
ServiceHPKC004A.java
...java/com/baosight/hpjx/hp/kc/service/ServiceHPKC004A.java
+14
-30
HPKC011.xml
src/main/java/com/baosight/hpjx/hp/kc/sql/HPKC011.xml
+2
-2
HPKCTools.java
src/main/java/com/baosight/hpjx/hp/kc/tools/HPKCTools.java
+56
-1
ServiceHPZL001.java
.../java/com/baosight/hpjx/hp/zl/service/ServiceHPZL001.java
+2
-1
HPKC004A.js
src/main/webapp/HP/KC/HPKC004A.js
+0
-9
HPKC004A.jsp
src/main/webapp/HP/KC/HPKC004A.jsp
+19
-32
No files found.
src/main/java/com/baosight/hpjx/hp/kc/domain/HPKC011.java
View file @
de8e4bb0
...
...
@@ -150,11 +150,19 @@ public class HPKC011 extends DaoEPBase {
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_INVENT_CODE
);
eiColumn
.
setDescName
(
"
物料
编码"
);
eiColumn
.
setDescName
(
"
部件
编码"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_INVENT_NAME
);
eiColumn
.
setDescName
(
"物料名称"
);
eiColumn
.
setDescName
(
"部件名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_SUB_INVENT_CODE
);
eiColumn
.
setDescName
(
"零部件编码"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_SUB_INVENT_NAME
);
eiColumn
.
setDescName
(
"零部件名称"
);
eiMetadata
.
addMeta
(
eiColumn
);
eiColumn
=
new
EiColumn
(
FIELD_LENGTH
);
...
...
src/main/java/com/baosight/hpjx/hp/kc/service/ServiceHPKC004.java
View file @
de8e4bb0
...
...
@@ -101,13 +101,14 @@ public class ServiceHPKC004 extends ServiceBase {
HPKC004
newKc004
=
BeanUtils
.
copy
(
dbKc004
,
HPKC004
.
class
);
newKc004
.
setSaleNo
(
SequenceGenerator
.
getNextSequence
(
HPConstant
.
SequenceId
.
HPKC004_SALE_NO
));
newKc004
.
setAmount
(
dbKc004
.
getAmount
().
negate
());
newKc004
.
set
UnitWeight
(
dbKc004
.
getUni
tWeight
().
negate
());
newKc004
.
set
Weight
(
dbKc004
.
ge
tWeight
().
negate
());
newKc004
.
setOldSaleNo
(
dbKc004
.
getSaleNo
());
newKc004
.
setIsPrint
(
CommonConstant
.
YesNo
.
NO_0
);
newKc004
.
setDeleteFlag
(
CommonConstant
.
YesNo
.
YES_1
);
DaoUtils
.
insert
(
HPKC004
.
INSERT
,
newKc004
);
// 修改库存
// HPKCTools.updateStock(dbKc004.getWhCode(), dbKc004.getInventRecordId
(),
//
dbKc004.getAmount(), dbKc004.getWeight());
HPKCTools
.
updateProdStock
(
dbKc004
.
getWhCode
(),
dbKc004
.
getProdNo
(),
dbKc004
.
getAmount
(),
dbKc004
.
getWeight
());
}
inInfo
=
this
.
query
(
inInfo
);
inInfo
.
setStatus
(
EiConstant
.
STATUS_DEFAULT
);
...
...
src/main/java/com/baosight/hpjx/hp/kc/service/ServiceHPKC004A.java
View file @
de8e4bb0
...
...
@@ -7,6 +7,7 @@ import com.baosight.hpjx.core.dao.DaoUtils;
import
com.baosight.hpjx.hp.constant.HPConstant
;
import
com.baosight.hpjx.hp.kc.domain.HPKC004
;
import
com.baosight.hpjx.hp.kc.domain.HPKC010
;
import
com.baosight.hpjx.hp.kc.domain.HPKC011
;
import
com.baosight.hpjx.hp.kc.tools.HPKCTools
;
import
com.baosight.hpjx.util.AssertUtils
;
import
com.baosight.hpjx.util.BeanUtils
;
...
...
@@ -35,11 +36,6 @@ import java.util.Map;
*/
public
class
ServiceHPKC004A
extends
ServiceEPBase
{
// 指定存货类型
private
static
final
Integer
[]
DEFAULT_INVENT_CODE
=
{
InventTypeEnum
.
MATERIAL
.
getCode
(),
InventTypeEnum
.
CONSUMABLE
.
getCode
(),
InventTypeEnum
.
SEMI_FINISHED_PRODUCT
.
getCode
(),
InventTypeEnum
.
FINISHED_PRODUCT
.
getCode
()};
/**
* 初始化
*
...
...
@@ -49,13 +45,7 @@ public class ServiceHPKC004A extends ServiceEPBase {
@Override
public
EiInfo
initLoad
(
EiInfo
inInfo
)
{
try
{
Map
queryMap
=
new
HashMap
();
queryMap
.
put
(
"inventTypes"
,
DEFAULT_INVENT_CODE
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
WH_RECORD_BLOCK_ID
),
queryMap
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
INVENT_NAME_BLOCK_ID
),
queryMap
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
INVENT_SPEC_BLOCK_ID
),
queryMap
,
false
);
CommonMethod
.
initBlock
(
inInfo
,
Arrays
.
asList
(
DdynamicEnum
.
SPEC_NAME_BLOCK_ID
),
queryMap
,
false
);
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HPKC010
().
eiMetadata
);
inInfo
.
addBlock
(
EiConstant
.
resultBlock
).
addBlockMeta
(
new
HPKC011
().
eiMetadata
);
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"初始化失败"
);
}
...
...
@@ -71,9 +61,7 @@ public class ServiceHPKC004A extends ServiceEPBase {
@Override
public
EiInfo
query
(
EiInfo
inInfo
)
{
try
{
Map
queryRow
=
EiInfoUtils
.
getFirstRow
(
inInfo
);
queryRow
.
put
(
"inventTypes"
,
DEFAULT_INVENT_CODE
);
inInfo
=
super
.
query
(
inInfo
,
HPKC010
.
QUERY
,
new
HPKC010
());
inInfo
=
super
.
query
(
inInfo
,
HPKC011
.
QUERY
,
new
HPKC011
());
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"查询失败"
);
}
...
...
@@ -92,41 +80,37 @@ public class ServiceHPKC004A extends ServiceEPBase {
// 库存ID
List
<
Long
>
ids
=
ObjectUtils
.
listKey
(
resultRows
,
"id"
);
// 行锁
HPKCTools
.
HpKc01
0
.
lock
(
ids
);
HPKCTools
.
HpKc01
1
.
lock
(
ids
);
// 获取库存信息
Map
<
Long
,
HPKC01
0
>
dbKc010Map
=
HPKCTools
.
HpKc010
.
map
(
ids
);
Map
<
Long
,
HPKC01
1
>
dbKc011Map
=
HPKCTools
.
HpKc011
.
map
(
ids
);
// 状态校验
for
(
Map
row
:
resultRows
)
{
Long
id
=
MapUtils
.
getLong
(
row
,
"id"
);
HPKC01
0
dbKc010
=
dbKc010
Map
.
get
(
id
);
AssertUtils
.
isNull
(
dbKc01
0
,
"库存号["
+
id
+
"]不存在!"
);
HPKC01
1
dbKc011
=
dbKc011
Map
.
get
(
id
);
AssertUtils
.
isNull
(
dbKc01
1
,
"库存号["
+
id
+
"]不存在!"
);
// 校验数量
BigDecimal
applyAmount
=
MapUtils
.
getBigDecimal
(
row
,
"applyAmount"
);
AssertUtils
.
isGt
(
applyAmount
,
dbKc010
.
getAmount
(),
"库存号["
+
id
+
"]可用数量不足!"
);
BigDecimal
applyWeight
=
MapUtils
.
getBigDecimal
(
row
,
"applyWeight"
);
AssertUtils
.
isGt
(
applyWeight
,
dbKc010
.
getWeight
(),
"库存号["
+
id
+
"]可用重量不足!"
);
AssertUtils
.
isGt
(
applyAmount
,
dbKc011
.
getAmount
(),
"库存号["
+
id
+
"]可用数量不足!"
);
}
// 生成销售库单
for
(
Map
row
:
resultRows
)
{
BigDecimal
applyAmount
=
MapUtils
.
getBigDecimal
(
row
,
"applyAmount"
);
BigDecimal
applyWeight
=
MapUtils
.
getBigDecimal
(
row
,
"applyWeight"
);
String
applyRemark
=
MapUtils
.
getString
(
row
,
"applyRemark"
);
Long
kcId
=
MapUtils
.
getLong
(
row
,
"id"
);
HPKC01
0
dbKc010
=
dbKc010
Map
.
get
(
kcId
);
HPKC004
newKc004
=
BeanUtils
.
copy
(
dbKc01
0
,
HPKC004
.
class
);
HPKC01
1
dbKc011
=
dbKc011
Map
.
get
(
kcId
);
HPKC004
newKc004
=
BeanUtils
.
copy
(
dbKc01
1
,
HPKC004
.
class
);
newKc004
.
setSaleNo
(
SequenceGenerator
.
getNextSequence
(
HPConstant
.
SequenceId
.
HPKC004_SALE_NO
));
newKc004
.
setReceiptDate
(
DateUtils
.
shortDate
());
newKc004
.
setAmount
(
applyAmount
);
newKc004
.
setWeight
(
apply
Weight
);
newKc004
.
setWeight
(
apply
Amount
.
multiply
(
dbKc011
.
getUnitWeight
())
);
newKc004
.
setRemark
(
applyRemark
);
newKc004
.
setKcId
(
kcId
);
newKc004
.
setIsPrint
(
CommonConstant
.
YesNo
.
NO_0
);
newKc004
.
setDeleteFlag
(
CommonConstant
.
YesNo
.
NO_0
);
DaoUtils
.
insert
(
HPKC004
.
INSERT
,
newKc004
);
// 修改库存数量
// HPKCTools.updateStock(newKc004.getWhCode(), newKc004.getInventRecordId
(),
//
newKc004.getAmount().negate(), newKc004.getWeight().negate());
HPKCTools
.
updateProdStock
(
newKc004
.
getWhCode
(),
newKc004
.
getProdNo
(),
newKc004
.
getAmount
().
negate
(),
newKc004
.
getWeight
().
negate
());
}
}
catch
(
Exception
e
)
{
LogUtils
.
setDetailMsg
(
inInfo
,
e
,
"生成出库单失败"
);
...
...
src/main/java/com/baosight/hpjx/hp/kc/sql/HPKC011.xml
View file @
de8e4bb0
...
...
@@ -57,13 +57,13 @@
INVENT_CODE = #inventCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"inventName"
>
INVENT_NAME
= #inventName#
INVENT_NAME
LIKE CONCAT('%', #inventName#, '%')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"subInventCode"
>
SUB_INVENT_CODE = #subInventCode#
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"subInventName"
>
SUB_INVENT_NAME
= #subInventName#
SUB_INVENT_NAME
LIKE CONCAT('%', #subInventName#, '%')
</isNotEmpty>
<isNotEmpty
prepend=
" AND "
property=
"createdBy"
>
CREATED_BY = #createdBy#
...
...
src/main/java/com/baosight/hpjx/hp/kc/tools/HPKCTools.java
View file @
de8e4bb0
...
...
@@ -325,7 +325,7 @@ public class HPKCTools {
}
/**
* HPKC0
04
公共DAO方法定义
* HPKC0
10
公共DAO方法定义
*
* @author:songx
* @date:2024/1/31,16:42
...
...
@@ -378,6 +378,61 @@ public class HPKCTools {
}
/**
* HPKC011公共DAO方法定义
*
* @author:songx
* @date:2024/1/31,16:42
*/
public
static
class
HpKc011
{
/**
* 查询库存信息
*
* @param ids
* @return
*/
public
static
List
<
HPKC011
>
list
(
List
<
Long
>
ids
)
{
if
(
CollectionUtils
.
isEmpty
(
ids
))
{
return
null
;
}
Map
queryMap
=
new
HashMap
();
queryMap
.
put
(
"ids"
,
ids
);
return
DaoBase
.
getInstance
().
query
(
HPKC011
.
QUERY
,
queryMap
);
}
/**
* 查询库存信息
*
* @param ids
* @return
*/
public
static
Map
<
Long
,
HPKC011
>
map
(
List
<
Long
>
ids
)
{
List
<
HPKC011
>
results
=
list
(
ids
);
if
(
CollectionUtils
.
isEmpty
(
results
))
{
return
null
;
}
return
results
.
stream
().
collect
(
Collectors
.
toMap
(
HPKC011:
:
getId
,
item
->
item
));
}
/**
* 锁
*
* @param ids
* @return
*/
public
static
void
lock
(
List
<
Long
>
ids
)
{
if
(
CollectionUtils
.
isEmpty
(
ids
))
{
return
;
}
Map
queryMap
=
new
HashMap
();
queryMap
.
put
(
"ids"
,
ids
);
DaoBase
.
getInstance
().
update
(
HPSqlConstant
.
HPKC011
.
LOCK
,
queryMap
);
}
}
/**
* 更新库存
*
...
...
src/main/java/com/baosight/hpjx/hp/zl/service/ServiceHPZL001.java
View file @
de8e4bb0
...
...
@@ -35,7 +35,8 @@ public class ServiceHPZL001 extends ServiceBase {
EiInfo
outInfo
=
super
.
initLoad
(
inInfo
,
HPZL001
);
outInfo
.
getBlock
(
EiConstant
.
resultBlock
).
getRows
().
clear
();
CommonMethod
.
initBlock
(
outInfo
,
Arrays
.
asList
(
DdynamicEnum
.
PROJ_RECORD_BLOCK_ID
),
new
HashMap
<
String
,
String
>(
1
)
{{
put
(
"status"
,
"1"
);
new
HashMap
<
String
,
Object
>(
1
)
{{
put
(
"status"
,
"1"
);
}});
return
outInfo
;
}
...
...
src/main/webapp/HP/KC/HPKC004A.js
View file @
de8e4bb0
...
...
@@ -43,9 +43,7 @@ let select = function () {
}
for
(
let
i
=
0
;
i
<
rows
.
length
;
i
++
)
{
let
applyAmount
=
rows
[
i
][
'applyAmount'
];
let
applyWeight
=
rows
[
i
][
'applyWeight'
];
let
amount
=
rows
[
i
][
'amount'
];
let
weight
=
rows
[
i
][
'weight'
];
if
(
isBlank
(
applyAmount
)
||
!
isNumber
(
applyAmount
)
||
!
(
applyAmount
>
0
))
{
message
(
"第"
+
(
i
+
1
)
+
"行申请数量必须大于0"
);
return
;
...
...
@@ -53,13 +51,6 @@ let select = function () {
if
(
parseFloat
(
applyAmount
)
>
parseFloat
(
amount
))
{
message
(
"第"
+
(
i
+
1
)
+
"行申请数量不能大于库存数量"
);
return
;
}
if
(
isBlank
(
applyWeight
)
||
!
isNumber
(
applyWeight
)
||
!
(
applyWeight
>
0
))
{
message
(
"第"
+
(
i
+
1
)
+
"行申请重量必须大于0"
);
return
;
}
if
(
parseFloat
(
applyWeight
)
>
parseFloat
(
weight
))
{
message
(
"第"
+
(
i
+
1
)
+
"行申请重量不能大于库存重量"
);
return
;
}
}
JSUtils
.
confirm
(
"确定对勾选中的["
+
rows
.
length
+
"]条数据生成出库单吗? "
,
{
...
...
src/main/webapp/HP/KC/HPKC004A.jsp
View file @
de8e4bb0
...
...
@@ -8,51 +8,38 @@
<EF:EFPage
title=
"库存查询"
>
<EF:EFRegion
id=
"inqu"
title=
"查询区域"
type=
"query"
>
<div
class=
"row"
>
<EF:EFSelect
cname=
"存货类型"
ename=
"inqu_status-0-inventType"
colWidth=
"3"
filter=
"contains"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFCodeOption
codeName=
"hpjx.hpkc.inventType"
condition=
"ITEM_CODE IN ('1', '2', '3', '4')"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"仓库名称"
ename=
"inqu_status-0-whCode"
colWidth=
"3"
filter=
"contains"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFOptions
blockId=
"wh_record_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
cname=
"存货名称"
ename=
"inqu_status-0-inventCode"
colWidth=
"3"
filter=
"contains"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFOptions
blockId=
"invent_name_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<EF:EFSelect
ename=
"inqu_status-0-spec"
cname=
"规格"
colWidth=
"3"
filter=
"contains"
>
<EF:EFOption
label=
"全部"
value=
""
/>
<EF:EFOptions
blockId=
"spec_name_block_id"
textField=
"textField"
valueField=
"valueField"
/>
</EF:EFSelect>
<div
class=
"row"
>
<EF:EFInput
cname=
"项目号"
ename=
"projCode"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"项目名称"
ename=
"projName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"部件编码"
ename=
"inventCode"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"部件名称"
ename=
"inventName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
</div>
<div
class=
"row"
>
<EF:EFInput
cname=
"零部件编码"
ename=
"subInventCode"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
<EF:EFInput
cname=
"零部件名称"
ename=
"subInventName"
blockId=
"inqu_status"
row=
"0"
colWidth=
"3"
/>
</div>
</div>
</EF:EFRegion>
<EF:EFRegion
id=
"result"
title=
"记录集"
>
<EF:EFGrid
blockId=
"result"
autoDraw=
"override"
checkMode=
"row"
>
<EF:EFColumn
ename=
"id"
cname=
"库存ID"
enable=
"false"
width=
"60"
align=
"center"
/>
<EF:EFComboColumn
ename=
"inventType"
cname=
"存货类型"
enable=
"false"
width=
"100"
align=
"center"
>
<EF:EFCodeOption
codeName=
"hpjx.hpkc.inventType"
/>
</EF:EFComboColumn>
<EF:EFComboColumn
ename=
"whCode"
cname=
"仓库名称"
enable=
"false"
width=
"120"
align=
"center"
blockName=
"wh_record_block_id"
textField=
"textField"
valueField=
"valueField"
columnTemplate=
"#=textField#"
itemTemplate=
"#=textField#"
>
</EF:EFComboColumn>
<EF:EFComboColumn
ename=
"inventCode"
cname=
"存货名称"
enable=
"false"
width=
"120"
align=
"center"
blockName=
"invent_name_block_id"
textField=
"textField"
valueField=
"valueField"
columnTemplate=
"#=textField#"
itemTemplate=
"#=textField#"
>
</EF:EFComboColumn>
<EF:EFComboColumn
ename=
"inventRecordId"
cname=
"规格"
enable=
"false"
width=
"120"
align=
"center"
blockName=
"invent_spec_block_id"
textField=
"textField"
valueField=
"valueField"
columnTemplate=
"#=textField#"
itemTemplate=
"#=textField#"
>
</EF:EFComboColumn>
<EF:EFColumn
ename=
"whName"
cname=
"仓库名称"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"projName"
cname=
"项目名称"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"inventName"
cname=
"部件名称"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"subInventName"
cname=
"零部件名称"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"applyAmount"
cname=
"申请数量"
width=
"120"
align=
"right"
format=
"{0:N3}"
required=
"true"
/>
<EF:EFColumn
ename=
"applyWeight"
cname=
"申请重量"
width=
"120"
align=
"right"
format=
"{0:N3}"
required=
"true"
/>
<EF:EFColumn
ename=
"applyRemark"
cname=
"说明"
width=
"150"
editType=
"textarea"
copy=
"true"
/>
<EF:EFColumn
ename=
"amount"
cname=
"库存数量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
sumType=
"all"
/>
<EF:EFColumn
ename=
"weight"
cname=
"库存重量"
enable=
"false"
width=
"120"
align=
"right"
format=
"{0:N3}"
sumType=
"all"
/>
<EF:EFColumn
ename=
"remark"
cname=
"备注"
enable=
"false"
width=
"150"
/>
<EF:EFColumn
ename=
"whCode"
cname=
"仓库编码"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"projCode"
cname=
"项目号"
enable=
"false"
width=
"140"
align=
"center"
/>
<EF:EFColumn
ename=
"inventCode"
cname=
"部件编码"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"subInventCode"
cname=
"零部件编码"
enable=
"false"
width=
"120"
align=
"center"
/>
<EF:EFColumn
ename=
"prodNo"
cname=
"生产订单号"
enable=
"false"
width=
"140"
align=
"center"
/>
</EF:EFGrid>
</EF:EFRegion>
</EF:EFPage>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment