Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Y
yifu-mvp
Project
Project
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
fangxinjiang
yifu-mvp
Commits
d5472711
You need to sign in or sign up before continuing.
Commit
d5472711
authored
Jun 21, 2022
by
hongguangwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
档案新增、查询
parent
c8b53d80
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
266 additions
and
10 deletions
+266
-10
TEmployeeInfo.java
...ifu/cloud/plus/v1/yifu/archives/entity/TEmployeeInfo.java
+9
-0
TEmployeeInfoController.java
.../v1/yifu/archives/controller/TEmployeeInfoController.java
+29
-9
TEmployeeProjectController.java
.../yifu/archives/controller/TEmployeeProjectController.java
+18
-0
TEmployeeInfoMapper.java
...oud/plus/v1/yifu/archives/mapper/TEmployeeInfoMapper.java
+5
-1
TEmployeeInfoService.java
...d/plus/v1/yifu/archives/service/TEmployeeInfoService.java
+41
-0
TEmployeeInfoServiceImpl.java
.../yifu/archives/service/impl/TEmployeeInfoServiceImpl.java
+136
-0
TEmployeeInfoMapper.xml
...ves-biz/src/main/resources/mapper/TEmployeeInfoMapper.xml
+10
-0
CacheConstants.java
...oud.plus.v1/yifu/common/core/constant/CacheConstants.java
+7
-0
DateUtil.java
...om/yifu.cloud.plus.v1/yifu/common/core/util/DateUtil.java
+11
-0
No files found.
yifu-archives/yifu-archives-api/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/entity/TEmployeeInfo.java
View file @
d5472711
...
...
@@ -23,7 +23,9 @@ import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import
io.swagger.v3.oas.annotations.media.Schema
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
org.hibernate.validator.constraints.Length
;
import
javax.validation.constraints.Max
;
import
java.time.LocalDateTime
;
/**
...
...
@@ -55,18 +57,21 @@ public class TEmployeeInfo extends BaseEntity {
* 员工类型(字典值,0外包1派遣2代理)
*/
@Schema
(
description
=
"员工类型(字典值,0外包1派遣2代理)"
)
@Max
(
value
=
1
,
message
=
"员工类型不可超过1位"
)
private
String
empNatrue
;
/**
* 员工姓名
*/
@Schema
(
description
=
"员工姓名"
)
@Max
(
value
=
20
,
message
=
"员工姓名不可超过20位"
)
private
String
empName
;
/**
* 身份证号码
*/
@Schema
(
description
=
"身份证号码"
)
@Max
(
value
=
20
,
message
=
"身份证号码不可超过20位"
)
private
String
empIdcard
;
/**
...
...
@@ -97,6 +102,7 @@ public class TEmployeeInfo extends BaseEntity {
* 年龄
*/
@Schema
(
description
=
"年龄"
)
@Max
(
value
=
11
,
message
=
"年龄不可超过11位"
)
private
Integer
empAge
;
/**
...
...
@@ -115,18 +121,21 @@ public class TEmployeeInfo extends BaseEntity {
* 政治面貌
*/
@Schema
(
description
=
"政治面貌"
)
@Max
(
value
=
32
,
message
=
"政治面貌不可超过32位"
)
private
String
politicalStatus
;
/**
* 邮箱
*/
@Schema
(
description
=
"邮箱"
)
@Max
(
value
=
32
,
message
=
"邮箱不可超过32位"
)
private
String
empEmail
;
/**
* 手机号码
*/
@Schema
(
description
=
"手机号码"
)
@Max
(
value
=
11
,
message
=
"手机号码不可超过11位"
)
private
String
empPhone
;
/**
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/controller/TEmployeeInfoController.java
View file @
d5472711
...
...
@@ -45,6 +45,9 @@ import org.springframework.http.HttpHeaders;
import
org.springframework.security.access.prepost.PreAuthorize
;
import
org.springframework.web.bind.annotation.*
;
import
javax.validation.Valid
;
import
java.util.List
;
/**
* 人员档案表
...
...
@@ -74,8 +77,6 @@ public class TEmployeeInfoController {
*/
@Operation
(
summary
=
"分页查询"
,
description
=
"分页查询"
)
@GetMapping
(
"/page"
)
//@PreAuthorize("@pms.hasPermission('demo_temployeeinfo_get')")
@SneakyThrows
public
R
<
IPage
<
TEmployeeInfo
>>
getTEmployeeInfoPage
(
Page
<
TEmployeeInfo
>
page
,
TEmployeeInfo
tEmployeeInfo
)
{
YifuUser
user
=
SecurityUtils
.
getUser
();
if
(
user
==
null
||
Common
.
isEmpty
(
user
.
getId
()))
{
...
...
@@ -151,23 +152,42 @@ public class TEmployeeInfoController {
*/
@Operation
(
summary
=
"通过id查询"
,
description
=
"通过id查询"
)
@GetMapping
(
"/{id}"
)
@PreAuthorize
(
"@pms.hasPermission('demo_temployeeinfo_get')"
)
public
R
<
TEmployeeInfo
>
getById
(
@PathVariable
(
"id"
)
String
id
)
{
return
R
.
ok
(
tEmployeeInfoService
.
getById
(
id
));
}
/**
* @param empName 姓名
* @param empIdCard 身份证
* @Description: 新增人员档案前的校验
* @Author: hgw
* @Date: 2022/6/21 11:53
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.Boolean>
**/
@Operation
(
summary
=
"新增人员档案前的校验"
,
description
=
"新增人员档案前的校验"
)
@SysLog
(
"新增人员档案前的校验"
)
@GetMapping
(
"/checkIdCard"
)
@PreAuthorize
(
"@pms.hasPermission('temployeeinfo_check')"
)
public
R
<
TEmployeeInfo
>
checkIdCard
(
@RequestParam
String
empName
,
@RequestParam
String
empIdCard
)
{
TEmployeeInfo
employeeInfo
=
new
TEmployeeInfo
();
employeeInfo
.
setEmpName
(
empName
);
employeeInfo
.
setEmpIdcard
(
empIdCard
);
employeeInfo
.
setDeleteFlag
(
CommonConstants
.
STATUS_NORMAL
);
return
tEmployeeInfoService
.
checkIdCard
(
employeeInfo
);
}
/**
* 新增人员档案表
*
* @param tEmployeeInfo 人员档案表
* @return R
*/
@Operation
(
summary
=
"新增人员档案表"
,
description
=
"新增人员档案表"
)
@SysLog
(
"新增人员档案表"
)
@PostMapping
@PreAuthorize
(
"@pms.hasPermission('
demo_
temployeeinfo_add')"
)
public
R
<
Boolean
>
save
(
@RequestBody
TEmployeeInfo
tEmployeeInfo
)
{
return
R
.
ok
(
tEmployeeInfoService
.
save
(
tEmployeeInfo
)
);
@Operation
(
summary
=
"新增人员档案表
(附带项目档案、学历)
"
,
description
=
"新增人员档案表"
)
@SysLog
(
"新增人员档案表
(附带项目档案、学历)
"
)
@PostMapping
(
"/addNewEmployee"
)
@PreAuthorize
(
"@pms.hasPermission('temployeeinfo_add')"
)
public
R
<
String
>
addNewEmployee
(
@Valid
@RequestBody
TEmployeeInfo
tEmployeeInfo
)
{
return
tEmployeeInfoService
.
addNewEmployee
(
tEmployeeInfo
);
}
/**
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/controller/TEmployeeProjectController.java
View file @
d5472711
...
...
@@ -25,6 +25,7 @@ import com.pig4cloud.plugin.excel.vo.ErrorMessage;
import
com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProject
;
import
com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeProjectService
;
import
com.yifu.cloud.plus.v1.yifu.archives.vo.EmployeeProjectVO
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog
;
import
io.swagger.v3.oas.annotations.Operation
;
...
...
@@ -51,6 +52,23 @@ public class TEmployeeProjectController {
private
final
TEmployeeProjectService
tEmployeeProjectService
;
/**
* @param empId 人员档案id
* @Description: 根据人员档案id获取项目list
* @Author: hgw
* @Date: 2022/6/21 19:19
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.util.List < com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeProject>>
**/
@Operation
(
summary
=
"根据人员档案id获取项目list"
,
description
=
"根据人员档案id获取项目list"
)
@GetMapping
(
"/getListByEmpId"
)
public
R
<
List
<
TEmployeeProject
>>
getListByEmpId
(
@RequestParam
String
empId
)
{
TEmployeeProject
project
=
new
TEmployeeProject
();
project
.
setEmpId
(
empId
);
project
.
setProjectStatus
(
CommonConstants
.
ZERO_INT
);
project
.
setDeleteFlag
(
CommonConstants
.
STATUS_NORMAL
);
return
R
.
ok
(
tEmployeeProjectService
.
list
(
Wrappers
.
query
(
project
)));
}
/**
* 分页查询
* @param page 分页对象
...
...
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/mapper/TEmployeeInfoMapper.java
View file @
d5472711
...
...
@@ -25,6 +25,8 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpEducationUpdateVo;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* 人员档案表
*
...
...
@@ -36,5 +38,7 @@ public interface TEmployeeInfoMapper extends BaseMapper<TEmployeeInfo> {
IPage
<
TEmployeeInfo
>
getPage
(
Page
<
TEmployeeInfo
>
page
,
@Param
(
"employeeInfo"
)
TEmployeeInfo
employeeInfo
,
@Param
(
"sql"
)
String
sql
);
int
updateEducationOfEmp
(
@Param
(
"education"
)
EmpEducationUpdateVo
education
);
List
<
TEmployeeInfo
>
getList
(
@Param
(
"employeeInfo"
)
TEmployeeInfo
employeeInfo
);
int
updateEducationOfEmp
(
@Param
(
"education"
)
EmpEducationUpdateVo
education
);
}
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/service/TEmployeeInfoService.java
View file @
d5472711
...
...
@@ -22,6 +22,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo
;
import
com.yifu.cloud.plus.v1.yifu.archives.vo.EmpEducationUpdateVo
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
java.util.List
;
/**
* 人员档案表
...
...
@@ -41,5 +44,43 @@ public interface TEmployeeInfoService extends IService<TEmployeeInfo> {
**/
IPage
<
TEmployeeInfo
>
getPage
(
Page
<
TEmployeeInfo
>
page
,
TEmployeeInfo
employeeInfo
,
String
sql
);
/**
* @param employeeInfo
* @Description: 获取list
* @Author: hgw
* @Date: 2022/6/21 11:56
* @return: java.util.List<com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo>
**/
List
<
TEmployeeInfo
>
getList
(
TEmployeeInfo
employeeInfo
);
/**
* @Description: code:2 : 该人员在离职库已存在,是否'恢复档案'?
* 其余code就是成功失败,
* 200成功,可以下一步。
* @Author: hgw
* @Date: 2022/6/21 15:36
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo>
**/
R
<
TEmployeeInfo
>
checkIdCard
(
TEmployeeInfo
employeeInfo
);
/**
* @param employeeInfo
* @Description: 新增档案,附带新增项目档案、学历信息
* @Author: hgw
* @Date: 2022/6/21 18:31
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/
R
<
String
>
addNewEmployee
(
TEmployeeInfo
employeeInfo
);
/**
* @param employeeInfo 档案信息
* @param fileSource 人员档案来源(4人员档案新建、5项目档案新建、1社保/公积金、3商险、2薪酬)
* @Description: 新增人员档案,其他服务新增时调用
* @Author: hgw
* @Date: 2022/6/21 19:03
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo>
**/
R
<
TEmployeeInfo
>
saveNewEmpLoyee
(
TEmployeeInfo
employeeInfo
,
String
fileSource
);
void
updateEducationOfEmp
(
EmpEducationUpdateVo
education
);
}
yifu-archives/yifu-archives-biz/src/main/java/com/yifu/cloud/plus/v1/yifu/archives/service/impl/TEmployeeInfoServiceImpl.java
View file @
d5472711
...
...
@@ -23,8 +23,18 @@ import com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo;
import
com.yifu.cloud.plus.v1.yifu.archives.mapper.TEmployeeInfoMapper
;
import
com.yifu.cloud.plus.v1.yifu.archives.service.TEmployeeInfoService
;
import
com.yifu.cloud.plus.v1.yifu.archives.vo.EmpEducationUpdateVo
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.Common
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil
;
import
com.yifu.cloud.plus.v1.yifu.common.core.util.R
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.cache.Cache
;
import
org.springframework.cache.CacheManager
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* 人员档案表
*
...
...
@@ -32,13 +42,139 @@ import org.springframework.stereotype.Service;
* @date 2022-06-20 09:55:06
*/
@Service
@RequiredArgsConstructor
public
class
TEmployeeInfoServiceImpl
extends
ServiceImpl
<
TEmployeeInfoMapper
,
TEmployeeInfo
>
implements
TEmployeeInfoService
{
// 缓存信息
private
final
CacheManager
cacheManager
;
@Override
public
IPage
<
TEmployeeInfo
>
getPage
(
Page
<
TEmployeeInfo
>
page
,
TEmployeeInfo
employeeInfo
,
String
sql
)
{
return
baseMapper
.
getPage
(
page
,
employeeInfo
,
sql
);
}
@Override
public
List
<
TEmployeeInfo
>
getList
(
TEmployeeInfo
employeeInfo
)
{
return
baseMapper
.
getList
(
employeeInfo
);
}
@Override
public
R
<
TEmployeeInfo
>
checkIdCard
(
TEmployeeInfo
employeeInfo
)
{
List
<
TEmployeeInfo
>
list
=
baseMapper
.
getList
(
employeeInfo
);
if
(
list
!=
null
&&
!
list
.
isEmpty
())
{
employeeInfo
=
list
.
get
(
0
);
if
(
employeeInfo
.
getFileStatus
()
==
CommonConstants
.
ZERO_INT
)
{
return
R
.
failed
(
"该人员已存在,禁止重复添加"
);
}
else
{
return
new
R
<>(
CommonConstants
.
dingleDigitIntArray
[
2
],
"该人员在离职库已存在,是否'恢复档案'?"
,
employeeInfo
);
}
}
else
{
// TODO - 调用校验服务
return
R
.
ok
();
}
}
/**
* @param nowNums 数字
* @Description: 获取五位字符型数字
* @Author: hgw
* @Date: 2022/6/21 17:35
* @return: 五位字符型数字
**/
private
String
getFiveNum
(
String
nowNums
)
{
if
(
nowNums
.
length
()
>=
5
)
{
return
nowNums
.
substring
(
0
,
5
);
}
String
[]
zeroArr
=
{
"0"
,
"00"
,
"000"
,
"0000"
};
int
num
=
4
-
nowNums
.
length
();
return
zeroArr
[
num
]
+
nowNums
;
}
@Override
//@GlobalTransactional // 分布式事务注解
//@Transactional(rollbackFor = Exception)
public
R
<
String
>
addNewEmployee
(
TEmployeeInfo
employeeInfo
)
{
// 新建人员档案
R
<
TEmployeeInfo
>
checks
=
this
.
saveNewEmpLoyee
(
employeeInfo
,
CommonConstants
.
dingleDigitStrArray
[
4
]);
if
(
checks
!=
null
&&
checks
.
getCode
()
!=
CommonConstants
.
SUCCESS
)
return
R
.
failed
(
checks
.
getMsg
());
// TODO-新建项目-胡雨辰
// TODO-新建学历-房
return
R
.
ok
();
}
/**
* @param employeeInfo 姓名、身份证、手机号、员工类型
* @param fileSource 4人员档案新建、5项目档案新建、1社保/公积金、3商险、2薪酬
* @Description: 新增档案
* @Author: hgw
* @Date: 2022/6/21 18:07
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.yifu.archives.entity.TEmployeeInfo>
**/
public
R
<
TEmployeeInfo
>
saveNewEmpLoyee
(
TEmployeeInfo
employeeInfo
,
String
fileSource
)
{
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpName
()))
{
return
R
.
failed
(
"员工姓名必填!"
);
}
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpIdcard
()))
{
return
R
.
failed
(
"员工身份证必填!"
);
}
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpPhone
()))
{
return
R
.
failed
(
"手机号必填!"
);
}
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpNatrue
()))
{
return
R
.
failed
(
"员工类型必填!"
);
}
if
(
Common
.
isEmpty
(
fileSource
))
{
return
R
.
failed
(
"人员档案来源必填!(4人员档案新建、5项目档案新建、1社保/公积金、3商险、2薪酬)"
);
}
TEmployeeInfo
check
=
new
TEmployeeInfo
();
check
.
setEmpName
(
employeeInfo
.
getEmpName
());
check
.
setEmpIdcard
(
employeeInfo
.
getEmpIdcard
());
check
.
setDeleteFlag
(
CommonConstants
.
STATUS_NORMAL
);
R
<
TEmployeeInfo
>
checks
=
this
.
checkIdCard
(
check
);
if
(
checks
.
getCode
()
!=
CommonConstants
.
SUCCESS
)
{
return
R
.
failed
(
checks
.
getMsg
());
}
// 校验手机号:
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpPhone
()))
{
return
R
.
failed
(
"手机号必填!"
);
}
else
{
check
=
new
TEmployeeInfo
();
check
.
setDeleteFlag
(
CommonConstants
.
STATUS_NORMAL
);
check
.
setEmpPhone
(
employeeInfo
.
getEmpPhone
());
List
<
TEmployeeInfo
>
list
=
baseMapper
.
getList
(
employeeInfo
);
if
(
list
!=
null
&&
!
list
.
isEmpty
())
{
return
R
.
failed
(
"该手机号已被使用!"
);
}
// TODO - 调用校验服务-校验手机号
}
// 字典:4人员档案新建、5项目档案新建、1社保/公积金、3商险、2薪酬
employeeInfo
.
setFileSource
(
fileSource
);
employeeInfo
.
setStatus
(
CommonConstants
.
ONE_INT
);
employeeInfo
.
setFileStatus
(
CommonConstants
.
ZERO_INT
);
employeeInfo
.
setProjectNum
(
CommonConstants
.
ONE_INT
);
employeeInfo
.
setDeleteFlag
(
CommonConstants
.
STATUS_NORMAL
);
// 生成主码:
if
(
Common
.
isEmpty
(
employeeInfo
.
getEmpCode
()))
{
String
nowDay
=
DateUtil
.
getThisDay
();
Cache
cache
=
cacheManager
.
getCache
(
CacheConstants
.
EVERYDAY_EMP_CODE
);
Object
nowNumObj
=
cache
.
get
(
nowDay
);
int
nowNums
=
1
;
if
(!
Common
.
isEmpty
(
nowNumObj
))
{
nowNums
=
(
Integer
)
nowNumObj
+
1
;
}
cache
.
put
(
nowDay
,
nowNums
);
String
numStr
=
this
.
getFiveNum
(
String
.
valueOf
(
nowNums
));
employeeInfo
.
setEmpCode
(
numStr
);
}
this
.
save
(
employeeInfo
);
return
R
.
ok
(
employeeInfo
);
}
@Override
public
void
updateEducationOfEmp
(
EmpEducationUpdateVo
education
)
{
baseMapper
.
updateEducationOfEmp
(
education
);
...
...
yifu-archives/yifu-archives-biz/src/main/resources/mapper/TEmployeeInfoMapper.xml
View file @
d5472711
...
...
@@ -163,4 +163,14 @@
order by a.CREATE_TIME desc
</select>
<!-- hgw list查询 -->
<select
id=
"getList"
resultMap=
"tEmployeeInfoMap"
>
select
<include
refid=
"baseParam"
/>
from t_employee_info a
where 1=1
<include
refid=
"employeeInfo_where"
/>
order by a.CREATE_TIME desc
</select>
</mapper>
yifu-common/yifu-common-core/src/main/java/com/yifu.cloud.plus.v1/yifu/common/core/constant/CacheConstants.java
View file @
d5472711
...
...
@@ -73,4 +73,11 @@ public interface CacheConstants {
*/
String
DATA_AUTH_DETAILS
=
"data_auth_details"
;
/**
* @Description: 每日员工主码缓存
* @Author: hgw
* @Date: 2022/6/21 17:09
**/
String
EVERYDAY_EMP_CODE
=
"everyday_emp_code"
;
}
yifu-common/yifu-common-core/src/main/java/com/yifu.cloud.plus.v1/yifu/common/core/util/DateUtil.java
View file @
d5472711
...
...
@@ -1351,6 +1351,17 @@ public class DateUtil {
return
thisMonth
;
}
/**
* @Description: 返回当前年月日字符串
* @Author: hgw
* @Date: 2022/6/21 17:19
* @return: java.lang.String
**/
public
static
String
getThisDay
(){
SimpleDateFormat
sf
=
new
SimpleDateFormat
(
DateUtil
.
ISO_DATE_FORMAT
);
return
sf
.
format
(
new
Date
());
}
/**
* @param
...
...
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