Browse Source

update

yangzhenli
V26772074 1 year ago
parent
commit
c4c736e850
  1. 246
      jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java

246
jnpf-tendering-biz/src/main/java/jnpf/service/impl/BiddingProjectSubscribeServiceImpl.java

@ -208,10 +208,10 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -208,10 +208,10 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
}
if(ObjectUtil.isNotEmpty(biddingProjectSubscribePagination.getProjectName())){
if (ObjectUtil.isNotEmpty(biddingProjectSubscribePagination.getProjectName())) {
bidding_project_subscribeNum++;
bidding_project_subscribeQueryWrapper.lambda().like(BiddingProjectSubscribeEntity::getProjectName,biddingProjectSubscribePagination.getProjectName());
bidding_project_subscribeQueryWrapper.lambda().like(BiddingProjectSubscribeEntity::getProjectName, biddingProjectSubscribePagination.getProjectName());
}
@ -691,7 +691,8 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -691,7 +691,8 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
@Override
public void updateFlow(UserEntity userEntity, BiddingProjectSubscribeEntity entity, Boolean add) {
UserEntity leaderInfo = querySuperiorLeader(userEntity);
// UserEntity leaderInfo = querySuperiorLeader(userEntity);
List<UserEntity> userEntityList = querySuperiorLeader(userEntity);
//添加根子单数据
OrganizeEntity organization = organizeService.getInfoById(userEntity.getOrganizeId());
String hierarchy = checkOrganizationHierarchy(userEntity);
@ -738,39 +739,42 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -738,39 +739,42 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
}
}
//添加子单数据即派单到上级领导
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(entity.getId().toString())
.userDeptId(leaderInfo.getOrganizeId())
.userDeptName(organizeService.getInfoById(leaderInfo.getOrganizeId()).getFullName())
.userId(leaderInfo.getId())
.userName(leaderInfo.getRealName())
.childStatus(BiddingProjectEnum.ChildStatusEnum.PENDING_REVIEW.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.PENDING_REVIEW.getDescribe())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.createUserName(userEntity.getRealName())
.createUserId(userEntity.getId())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
for (UserEntity leaderInfo : userEntityList) {
//添加子单数据即派单到上级领导
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(entity.getId().toString())
.userDeptId(leaderInfo.getOrganizeId())
.userDeptName(organizeService.getInfoById(leaderInfo.getOrganizeId()).getFullName())
.userId(leaderInfo.getId())
.userName(leaderInfo.getRealName())
.childStatus(BiddingProjectEnum.ChildStatusEnum.PENDING_REVIEW.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.PENDING_REVIEW.getDescribe())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.createTime(LocalDateTime.now())
.updateTime(LocalDateTime.now())
.createUserName(userEntity.getRealName())
.createUserId(userEntity.getId())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
//添加步骤数据
iBiddingProjectSubscribeStepService.saveOrUpdate(BiddingProjectSubscribeStep.builder()
.relationMainId(entity.getId().toString())
.relationType(BiddingProjectEnum.StepRelationTypeEnum.BIDDING.getCode())
.dealType(BiddingProjectEnum.StepTypeEnum.AUTOMATIC_DISPATCH.getCode())
.dealTypeName(BiddingProjectEnum.StepTypeEnum.AUTOMATIC_DISPATCH.getDescribe())
.relationChildId(build.getChildId())
.remake("系统自动流转至" + leaderInfo.getRealName())
.createOrganizationId(userEntity.getOrganizeId())
.createOrganizationName(fullName)
.createUserId(userEntity.getId())
.createUserName(userEntity.getRealName())
.createTime(LocalDateTime.now())
.build()
);
}
//添加步骤数据
iBiddingProjectSubscribeStepService.saveOrUpdate(BiddingProjectSubscribeStep.builder()
.relationMainId(entity.getId().toString())
.relationType(BiddingProjectEnum.StepRelationTypeEnum.BIDDING.getCode())
.dealType(BiddingProjectEnum.StepTypeEnum.AUTOMATIC_DISPATCH.getCode())
.dealTypeName(BiddingProjectEnum.StepTypeEnum.AUTOMATIC_DISPATCH.getDescribe())
.relationChildId(build.getChildId())
.remake("系统自动流转至" + leaderInfo.getRealName())
.createOrganizationId(userEntity.getOrganizeId())
.createOrganizationName(fullName)
.createUserId(userEntity.getId())
.createUserName(userEntity.getRealName())
.createTime(LocalDateTime.now())
.build()
);
BiddingProjectEnum.MainStatusEnum mainStatusEnum = null;
switch (hierarchy) {
case "1":
@ -813,7 +817,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -813,7 +817,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
// return "3";
}
private UserEntity querySuperiorLeader(UserEntity userEntity) {
private List<UserEntity> querySuperiorLeader(UserEntity userEntity) {
//查询上级组织
OrganizeEntity currentOrganization = organizeService.getInfoById(userEntity.getOrganizeId());
//校验是否为公司
@ -852,17 +856,20 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -852,17 +856,20 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
if (!shyRole.isPresent()) {
throw new DataException("数据错误,请联系管理员[1]");
}
Optional<String> leaderId = userRelationService.getListByUserIdAll(userIdList)
List<String> list = userRelationService.getListByUserIdAll(userIdList)
.stream()
.filter(userRelationEntity -> userRelationEntity.getObjectType().equals(PermissionConst.ROLE))
.filter(userRelationEntity -> shyRole.get().getId().equals(userRelationEntity.getObjectId()))
.map(UserRelationEntity::getUserId)
.findFirst();
if (!leaderId.isPresent()) {
.map(UserRelationEntity::getUserId).collect(Collectors.toList());
if (CollectionUtil.isEmpty(list)) {
throw new DataException("该人员上级无领导");
}
List<UserEntity> userEntityList = new ArrayList<>();
for (String userId : list) {
userEntityList.add(userService.getInfoById(userId));
}
//查询领导详情
return userService.getInfoById(leaderId.get());
return userEntityList;
}
@Override
@ -882,7 +889,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -882,7 +889,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
if (iBiddingProjectSubscribeChildService.lambdaQuery()
.eq(BiddingProjectSubscribeChild::getMainId, param.getId())
.eq(BiddingProjectSubscribeChild::getChildStatus, BiddingProjectEnum.ChildStatusEnum.TO_BE_SUBMITTED.getCode())
.exists()){
.exists()) {
throw new DataException("存在未提交的子项,不能审核");
}
@ -986,6 +993,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -986,6 +993,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
//修改主状态
this.lambdaUpdate()
.set(BiddingProjectSubscribeEntity::getMainStatus, BiddingProjectEnum.MainStatusEnum.RETURNED.getCode())
@ -1166,13 +1180,19 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1166,13 +1180,19 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
updateFlow(userService.getInfoById(userInfo.getUserId()), biddingProjectSubscribeEntity, false);
//审批领导状态改为已审批
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.set(BiddingProjectSubscribeChild::getChildStatus, BiddingProjectEnum.ChildStatusEnum.PASS.getCode())
.set(BiddingProjectSubscribeChild::getChildStatusName, BiddingProjectEnum.ChildStatusEnum.PASS.getDescribe())
.set(BiddingProjectSubscribeChild::getRemake, param.getRemake())
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
}
}
break;
@ -1195,6 +1215,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1195,6 +1215,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
}
}
@ -1225,24 +1252,29 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1225,24 +1252,29 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
UserEntity leader = querySuperiorLeader(userService.getInfoById(userInfo.getUserId()));
//领导的待归档
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childStatus(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getDescribe())
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(biddingProjectSubscribeEntity.getId().toString())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.userName(leader.getRealName())
.userId(leader.getId())
.userDeptId(leader.getOrganizeId())
.userDeptName(organizeService.getInfoById(leader.getOrganizeId()).getFullName())
.createTime(LocalDateTime.now())
.createUserName(userInfo.getUserName())
.createUserId(userInfo.getUserId())
.updateTime(LocalDateTime.now())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
// UserEntity leader = querySuperiorLeader(userService.getInfoById(userInfo.getUserId()));
List<UserEntity> userEntityList = querySuperiorLeader(userService.getInfoById(userInfo.getUserId()));
for (UserEntity leader : userEntityList) {
//领导的待归档
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childStatus(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getDescribe())
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(biddingProjectSubscribeEntity.getId().toString())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.userName(leader.getRealName())
.userId(leader.getId())
.userDeptId(leader.getOrganizeId())
.userDeptName(organizeService.getInfoById(leader.getOrganizeId()).getFullName())
.createTime(LocalDateTime.now())
.createUserName(userInfo.getUserName())
.createUserId(userInfo.getUserId())
.updateTime(LocalDateTime.now())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
}
} else {
//审批领导状态改为已审批
@ -1294,24 +1326,35 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1294,24 +1326,35 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
UserEntity leader = getFirstLeader(userService.getInfoById(userInfo.getUserId()));
//领导的待归档
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childStatus(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getDescribe())
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(biddingProjectSubscribeEntity.getId().toString())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.userName(leader.getRealName())
.userId(leader.getId())
.userDeptId(leader.getOrganizeId())
.userDeptName(organizeService.getInfoById(leader.getOrganizeId()).getFullName())
.createTime(LocalDateTime.now())
.createUserName(userInfo.getUserName())
.createUserId(userInfo.getUserId())
.updateTime(LocalDateTime.now())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
// UserEntity leader = getFirstLeader(userService.getInfoById(userInfo.getUserId()));
List<UserEntity> userEntityList = getFirstLeader(userService.getInfoById(userInfo.getUserId()));
for (UserEntity leader : userEntityList) {
//领导的待归档
BiddingProjectSubscribeChild build = BiddingProjectSubscribeChild.builder()
.childStatus(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getCode())
.childStatusName(BiddingProjectEnum.ChildStatusEnum.TO_BE_ARCHIVED.getDescribe())
.childId(UUID.randomUUID().toString().replace("-", ""))
.mainId(biddingProjectSubscribeEntity.getId().toString())
.rootChildFlag(BiddingProjectEnum.RootFlagEnum.NOT_ROOT_FLAG.getCode())
.userName(leader.getRealName())
.userId(leader.getId())
.userDeptId(leader.getOrganizeId())
.userDeptName(organizeService.getInfoById(leader.getOrganizeId()).getFullName())
.createTime(LocalDateTime.now())
.createUserName(userInfo.getUserName())
.createUserId(userInfo.getUserId())
.updateTime(LocalDateTime.now())
.build();
iBiddingProjectSubscribeChildService.saveOrUpdate(build);
}
} else {
//审批领导状态改为已审批
@ -1323,6 +1366,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1323,6 +1366,13 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
}
} else {
//审批类型审核通过去上传招标结果,添加子单到提交人 用于查询
@ -1362,13 +1412,20 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1362,13 +1412,20 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
.set(BiddingProjectSubscribeChild::getUpdateTime, LocalDateTime.now())
.eq(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.update();
//将其他待审批子单删除
iBiddingProjectSubscribeChildService.lambdaUpdate()
//提交人状态设为待提交
.eq(BiddingProjectSubscribeChild::getChildStatus, selfChild.getChildStatus())
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.ne(BiddingProjectSubscribeChild::getChildId, selfChild.getChildId())
.remove();
//todo 审批通过添加到抽签表中
//查询根子单
Optional<BiddingProjectSubscribeChild> rootChild = iBiddingProjectSubscribeChildService.lambdaQuery()
.eq(BiddingProjectSubscribeChild::getMainId, biddingProjectSubscribeEntity.getId())
.eq(BiddingProjectSubscribeChild::getRootChildFlag, BiddingProjectEnum.RootFlagEnum.ROOT_FLAG.getCode())
.list().stream().findFirst();
if (rootChild.isPresent()){
if (rootChild.isPresent()) {
log.info("添加到抽签表ing...");
LotteryProject lotteryProject = BeanUtil.copyProperties(rootChild.get(), LotteryProject.class);
lotteryProject.setCreateId(rootChild.get().getCreateUserId());
@ -1381,7 +1438,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1381,7 +1438,7 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
lotteryProject.setProjectNumber(biddingProjectSubscribeEntity.getProjectNumber());
lotteryProject.setProjectName(biddingProjectSubscribeEntity.getProjectName());
Date bidOpeningTime = biddingProjectSubscribeEntity.getBidOpeningTime();
if (null!=bidOpeningTime) {
if (null != bidOpeningTime) {
String format = cn.hutool.core.date.DateUtil.format(bidOpeningTime, "yyyy-MM-dd HH:mm:ss");
lotteryProject.setBidOpeningTime(LocalDate.parse(format));
lotteryProject.setBidEvaluationTime(LocalDateTime.parse(format));
@ -1416,12 +1473,15 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1416,12 +1473,15 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
iBiddingProjectSubscribeStepService.saveOrUpdate(step);
}
private UserEntity getFirstLeader(UserEntity userEntity) {
UserEntity leader = querySuperiorLeader(userEntity);
if (!StrUtil.equals("1", checkOrganizationHierarchy(leader))) {
getFirstLeader(leader);
private List<UserEntity> getFirstLeader(UserEntity userEntity) {
// UserEntity leader = querySuperiorLeader(userEntity);
List<UserEntity> userEntityList = querySuperiorLeader(userEntity);
UserEntity leaderInfo = userEntityList.stream().findFirst().get();
if (!StrUtil.equals("1", checkOrganizationHierarchy(leaderInfo))) {
getFirstLeader(leaderInfo);
}
return leader;
return userEntityList;
}
@ -1496,11 +1556,11 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1496,11 +1556,11 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
//抽签项目中止
iLotteryProjectService.lambdaUpdate()
.set(LotteryProject::getStatus, LotteryProjectDto.StatusEnum.SUSPENSION.getCode())
.set(LotteryProject::getStatusName,LotteryProjectDto.StatusEnum.SUSPENSION.getDescribe())
.set(LotteryProject::getStatusName,LotteryProjectDto.StatusEnum.SUSPENSION.getDescribe())
.eq(LotteryProject::getRelationId,id)
.eq(LotteryProject::getType,LotteryProjectDto.TypeEnum.SYSTEM.getCode())
.eq(LotteryProject::getDelFlag,"0")
.set(LotteryProject::getStatusName, LotteryProjectDto.StatusEnum.SUSPENSION.getDescribe())
.set(LotteryProject::getStatusName, LotteryProjectDto.StatusEnum.SUSPENSION.getDescribe())
.eq(LotteryProject::getRelationId, id)
.eq(LotteryProject::getType, LotteryProjectDto.TypeEnum.SYSTEM.getCode())
.eq(LotteryProject::getDelFlag, "0")
.update();
UserInfo userInfo = userProvider.get();
OrganizeEntity organize = organizeService.getInfoById(userInfo.getOrganizeId());
@ -1727,8 +1787,8 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje @@ -1727,8 +1787,8 @@ public class BiddingProjectSubscribeServiceImpl extends ServiceImpl<BiddingProje
param.put("{{tenderingEntity}}", getOrganizationLastName(entity.getTenderingEntity()));
param.put("{{projectName}}", entity.getProjectName());
Date bidOpeningTime = entity.getBidOpeningTime();
if (null != bidOpeningTime){
entity.setExplanationObid(DateUtil.dateFormatByPattern(bidOpeningTime,"yyyyMMdd")+entity.getExplanationObid());
if (null != bidOpeningTime) {
entity.setExplanationObid(DateUtil.dateFormatByPattern(bidOpeningTime, "yyyyMMdd") + entity.getExplanationObid());
}
param.put("{{explanationOfBid}}", entity.getExplanationObid());
String zb = "";

Loading…
Cancel
Save