Merge branch 'test'

yun-zuoyi
peter.pan 6 years ago
commit f302108743

@ -1,5 +1,8 @@
package cn.estsh.i3plus.pojo.base.bean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import java.util.HashMap;
/**
@ -49,6 +52,42 @@ public class DdlPackBean {
hqlPreparedMap = new HashMap<>();
}
/**
*
* @param organizeCode
* @return
*/
public static DdlPackBean getDdlPackBean(String organizeCode){
DdlPackBean result = new DdlPackBean();
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"isDeleted",result);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",result);
DdlPreparedPack.getNumEqualPack(organizeCode,"organizeCode",result);
return result;
}
public static DdlPackBean getDdlPackBean(){
DdlPackBean result = new DdlPackBean();
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"isDeleted",result);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",result);
return result;
}
public static DdlPackBean getDdlPackBean(BaseBean bean){
DdlPackBean result = new DdlPackBean();
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"isDeleted",result);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",result);
if(bean != null){
result.setOrderByStr(bean.orderBy());
}
return result;
}
public boolean isHql() {
return isHql;
}

@ -434,7 +434,8 @@ public class WmsEnumUtil {
public enum OUT_MOVEMENT_MOVE_TYPE {
IN_STORE(10, "IN", "入库"),
OUT_STORE(20, "OUT", "出库"),
MOVE_STORE(30, "MOVE", "移库");
MOVE_STORE(30, "MOVE", "移库"),
OTHER(40, "OTHER", "其他");
private int value;
private String code;
@ -503,10 +504,10 @@ public class WmsEnumUtil {
NC_DISMANTLING_PICKING(160, "NC_DISMANTLING_PICKING", "NC拆解领料"),
NC_DISMANTLING_RETREAT(170, "NC_DISMANTLING_RETREAT", "NC拆解退料"),
LINE_EDGE_SCRAPPING_OUT(180, "LINE_EDGE_SCRAPPING_OUT", "线边报废出库"),
ASN(190, "ASN", "ASN"),
PO(200, "PO", "PO"),
QC(210, "QC", "QC"),
AMPR(220, "AMPR", "AMPR");
ASN(200, "ASN", "ASN"),
PO(210, "PO", "PO"),
QC(220, "QC", "QC"),
AMPR(230, "AMPR", "AMPR");
private int value;
@ -2232,7 +2233,7 @@ public class WmsEnumUtil {
*/
public enum LANGUAGE_TYPE {
GROOVY(1, "Groovy", 10),
PYTHON(2, "Python", 20),
PYTHON(2, "jython", 20), // "jython" string can not change
JS(3, "JavaScript", 30);
// 下面这2种语言没人会写暂不支持
//SCALA(40,"scala"),
@ -2242,7 +2243,7 @@ public class WmsEnumUtil {
private String description;
private int value;
private LANGUAGE_TYPE(int index, String description, int value) {
LANGUAGE_TYPE(int index, String description, int value) {
this.index = index;
this.description = description;
this.value = value;
@ -2261,9 +2262,9 @@ public class WmsEnumUtil {
}
// 根据枚举编号获取语言代码
public static String getCodeByIndex(int index) {
public static String getCodeByIndex(Integer index) {
for (LANGUAGE_TYPE languageType : LANGUAGE_TYPE.values()) {
if (languageType.getIndex() == index) {
if (languageType.getValue() == index.intValue()) {
return languageType.getDescription();
}
}

@ -144,7 +144,7 @@ public class SysUser extends BaseBean {
@Transient
@ApiParam(value ="角色ID" , example = "0")
@JsonSerialize(using = ToStringSerializer.class)
private String roleId;
private Long roleId;
@Transient
@ApiParam(value ="角色ID集合" , example = "0")

@ -102,10 +102,10 @@ public class CoreHqlPack {
}
public static DdlPackBean packHqlSysPosition(SysPosition position,List<Long> idList){
DdlPackBean result = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(position.getOrganizeCode());
// 查询参数封装
DdlPreparedPack.getNumEqualPack(position.getParentId(),"parentId",result);
// DdlPreparedPack.getNumEqualPack(position.getParentId(),"parentId",result);
// String Like
DdlPreparedPack.getStringLikerPack(position.getName(),"name",result);
DdlPreparedPack.getStringLikerPack(position.getPositionCode(),"positionCode",result);
@ -121,7 +121,7 @@ public class CoreHqlPack {
* @return
*/
public static DdlPackBean packHqlSysPositionList(SysPosition position){
DdlPackBean result = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(position);
// 查询参数封装
DdlPreparedPack.getStringEqualPack(position.getOrganizeCode(),"organizeCode",result);
@ -153,7 +153,7 @@ public class CoreHqlPack {
}
public static DdlPackBean packHqlSysOrganize(SysOrganize organize,List<Long> idList){
DdlPackBean result = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(organize);
// String Like
DdlPreparedPack.getStringLikerPack(organize.getName(),"name",result);
@ -196,6 +196,17 @@ public class CoreHqlPack {
return result.toString();
}
public static DdlPackBean packDdlBeanSysDepartment(SysDepartment department,List<Long> idList){
DdlPackBean result = DdlPackBean.getDdlPackBean(department);
DdlPreparedPack.getStringLikerPack(department.getName(),"name",result);
DdlPreparedPack.getStringLikerPack(department.getName(),"departmentCode",result);
DdlPreparedPack.getInPackList(idList,"id",result);
result.setOrderByStr(department.orderBy());
return result;
}
/**
*
* @param menu
@ -217,6 +228,21 @@ public class CoreHqlPack {
return result.toString();
}
public static DdlPackBean packDdlBeanSysMenu(SysMenu menu,List<Long> idList){
DdlPackBean result = DdlPackBean.getDdlPackBean(menu);
DdlPreparedPack.getInPackList(idList,"id",result);
DdlPreparedPack.getNumEqualPack(menu.getParentId(),"parentId",result);
DdlPreparedPack.getNumEqualPack(menu.getMenuType(),"menuType",result);
DdlPreparedPack.getNumEqualPack(menu.getMenuStatus(),"menuStatus",result);
DdlPreparedPack.getStringLikerPack(menu.getName(),"name",result);
DdlPreparedPack.getStringLikerPack(menu.getMenuCode(),"menuCode",result);
result.setOrderByStr(menu.orderBy());
return result;
}
/**
*
* @param role
@ -246,7 +272,7 @@ public class CoreHqlPack {
}
public static DdlPackBean packDdlBeanSysRole(SysRole role,List<Long> idList){
DdlPackBean result = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(role);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"isDeleted",result);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",result);
@ -347,7 +373,7 @@ public class CoreHqlPack {
* @return
*/
public static DdlPackBean packHqlSysMessage(SysMessage message){
DdlPackBean ddlPackBean = new DdlPackBean();
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(message);
// hql拼接
DdlPreparedPack.getStringLikerPack(message.getMessageTitle(), "messageTitle", ddlPackBean);
@ -459,13 +485,28 @@ public class CoreHqlPack {
return result.toString();
}
public static DdlPackBean packDdlBeanSysUser(SysUser user,List<Long> idList){
DdlPackBean result = DdlPackBean.getDdlPackBean(user);
DdlPreparedPack.getNumEqualPack(user.getUserStatus(),"userStatus",result);
DdlPreparedPack.getStringLikerPack(user.getUserLoginName(),"userLoginName",result);
DdlPreparedPack.getStringLikerPack(user.getUserName(),"userName",result);
DdlPreparedPack.getStringLikerPack(user.getUserEmail(),"userEmail",result);
DdlPreparedPack.getStringLikerPack(user.getUserPhone(),"userPhone",result);
DdlPreparedPack.getInPackList(idList,"id",result);
result.setOrderByStr(user.orderBy());
return result;
}
/**
*
* @param user
* @return
*/
public static DdlPackBean packDdlSysUser(SysUser user){
DdlPackBean ddlPack = new DdlPackBean();
DdlPackBean ddlPack = DdlPackBean.getDdlPackBean(user);
// And X = X
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",ddlPack);
@ -566,6 +607,25 @@ public class CoreHqlPack {
return result.toString();
}
public static DdlPackBean packDdlBeanSysUserInfo(SysUserInfo userInfo,List<Long> idList){
DdlPackBean result = DdlPackBean.getDdlPackBean(userInfo);
// And
DdlPreparedPack.getNumEqualPack(userInfo.getPositionId(),"positionId",result);
DdlPreparedPack.getNumEqualPack(userInfo.getUserInfoStatus(),"userInfoStatus",result);
DdlPreparedPack.getStringEqualPack(userInfo.getOrganizeCode(),"organizeCode",result);
DdlPreparedPack.getInPackList(idList,"id",result);
// Like
DdlPreparedPack.getStringLikerPack(userInfo.getName(),"name",result);
DdlPreparedPack.getStringLikerPack(userInfo.getUserEmpNo(),"userEmpNo",result);
// 添加默认排序
result.setOrderByStr(userInfo.orderBy());
return result;
}
/**
*
* @param userInfo
@ -814,22 +874,20 @@ public class CoreHqlPack {
* @return DdlPackBean
*/
public static DdlPackBean packHqlSysFileCode(SysFile sysFile){
DdlPackBean ddlPackBean = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(sysFile);
// and
DdlPreparedPack.getStringEqualPack(sysFile.getFileCode(),"fileCode",ddlPackBean);
DdlPreparedPack.getStringEqualPack(sysFile.getFileCode(),"fileCode",result);
// not
DdlPreparedPack.getNumNOEqualPack(sysFile.getId(),"id",ddlPackBean);
DdlPreparedPack.getNumNOEqualPack(sysFile.getId(),"id",result);
return ddlPackBean;
return result;
}
public static DdlPackBean packDdlBeanSysRefUserRole(SysRefUserRole ref){
DdlPackBean result = new DdlPackBean();
DdlPackBean result = DdlPackBean.getDdlPackBean(ref);
// Number Eq
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),"isDeleted",result);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),"isValid",result);
DdlPreparedPack.getNumEqualPack(ref.getUserId(),"userId",result);
// String Eq
DdlPreparedPack.getStringEqualPack(ref.getOrganizeCode(),"organizeCode",result);
@ -837,16 +895,27 @@ public class CoreHqlPack {
return result;
}
public static DdlPackBean packDdlBeanSysRefUserRole(Long userId,Long roleId,String organizeCode){
DdlPackBean result = DdlPackBean.getDdlPackBean();
// Number Eq
DdlPreparedPack.getNumEqualPack(userId,"userId",result);
DdlPreparedPack.getNumEqualPack(roleId,"roleId",result);
// String Eq
DdlPreparedPack.getStringEqualPack(organizeCode,"organizeCode",result);
return result;
}
/**
*
* @param sysRefUserDepartments
* @return
*/
public static DdlPackBean packHqlSysOrganize(List<SysRefUserDepartment> sysRefUserDepartments){
DdlPackBean packBean = new DdlPackBean();
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getInPackList(sysRefUserDepartments.stream().map(d -> d.getOrganizeId()).collect(Collectors.toList()),"id",packBean);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.IS_VAILD.VAILD.getValue(),"isValid",packBean);
DdlPreparedPack.getNumEqualPack(CommonEnumUtil.IS_DEAL.NO.getValue(),"isDeleted",packBean);
return packBean;
}

@ -58,7 +58,7 @@ public class SapCyco extends SapBase{
@ApiParam(value = "删除标识")
@AnnoOutputColumn
private String xloek;
private String xloek="";
@ApiParam(value = "年度")
@AnnoOutputColumn

@ -22,7 +22,7 @@ public class SapRdn extends SapBase{
@ApiParam(value = "Item",example = "1")
@AnnoOutputColumn
private Integer posnr;
private String posnr;
@ApiParam(value = "收货工厂",example = "1")
@AnnoOutputColumn

@ -220,6 +220,6 @@ public class WmsDocMovementDetails extends BaseBean {
public Integer busiType;
@Column(name = "IS_SN")
@ApiParam(value = "条码生成状态", example = "1")
@ApiParam(value = "条码生成状态", example = "20")
public Integer isSn;
}

@ -140,6 +140,10 @@ public class WmsMoveDetails extends BaseBean {
@ApiParam("条码")
private String sn;
@Transient
@ApiParam("交易类型名称")
private String transTypeName;
public WmsMoveDetails(){}
public WmsMoveDetails(String partNo, Long waitingCounts ,Long finishedCounts){
@ -165,8 +169,8 @@ public class WmsMoveDetails extends BaseBean {
return finishedCounts == null ? 0L : this.finishedCounts;
}
public WmsMoveDetails(String organizeCode,String orderNo,Integer item,String partNo,String partNameRdd,String transTypeCode,
Integer itemStatus,String unit,String srcWhNo,
public WmsMoveDetails(String organizeCode,String orderNo,Integer item,String partNo,String partNameRdd,String transTypeCode
,String transTypeName,Integer itemStatus,String unit,String srcWhNo,
String srcZoneNo,String srcLocateNo,String destWhNo, String destZoneNo, String destLocateNo,
Double transQty,Double rejectQty,String refSrc,String vendorNo, String custNo){
this.organizeCode = organizeCode;
@ -175,6 +179,7 @@ public class WmsMoveDetails extends BaseBean {
this.item = item;
this.partNameRdd = partNameRdd;
this.transTypeCode = transTypeCode;
this.transTypeName = transTypeName;
this.itemStatus = itemStatus;
this.unit = unit;
this.srcWhNo = srcWhNo;
@ -189,7 +194,5 @@ public class WmsMoveDetails extends BaseBean {
this.vendorNo = vendorNo;
this.custNo = custNo;
}
}

@ -126,15 +126,19 @@ public class WmsMoveMaster extends BaseBean {
@ApiParam("库位")
private String destLocateNo;
@Transient
@ApiParam("交易类型名称")
private String transTypeName;
public WmsMoveMaster(){};
public WmsMoveMaster(String organizeCode,String partNo,String partNameRdd,String transTypeCode,Integer itemStatus,
public WmsMoveMaster(String organizeCode,String partNo,String partNameRdd,String transTypeCode,String transTypeName,Integer itemStatus,
String unit,String srcWhNo,String srcZoneNo,String destWhNo,String destZoneNo,Double transQty, Double rejectQty) {
this.organizeCode = organizeCode;
this.partNo = partNo;
this.partNameRdd = partNameRdd;
this.transTypeCode = transTypeCode;
this.transTypeName = transTypeName;
this.itemStatus = itemStatus;
this.unit = unit;
this.srcWhNo = srcWhNo;

@ -173,6 +173,10 @@ public class WmsMoveSn extends BaseBean {
@ApiParam("供应商编码")
private String vendorNo;
@Transient
@ApiParam("交易类型名称")
private String transTypeName;
public WmsMoveSn(){}
public WmsMoveSn(String partNo, Long finishedCounts ,Long waitingCounts){
@ -205,7 +209,7 @@ public class WmsMoveSn extends BaseBean {
this.refSrc = refSrc;
}
public WmsMoveSn( String organizeCode,String orderNo,Integer item,String partNo,String partNameRdd,
String transTypeCode,Integer itemStatus,String unit, String srcLocateNo,String destLocateNo,Double srcQty,Double destQty,Integer srcQcStatus,Integer descQcStatus,Integer srcSnStatus,
String transTypeCode,String transTypeName,Integer itemStatus,String unit, String srcLocateNo,String destLocateNo,Double srcQty,Double destQty,Integer srcQcStatus,Integer descQcStatus,Integer srcSnStatus,
Integer destSnStatus, String lotNo,String dateCode){
this.organizeCode=organizeCode;
this.orderNo=orderNo;
@ -213,6 +217,7 @@ public class WmsMoveSn extends BaseBean {
this.partNo=partNo;
this.partNameRdd=partNameRdd;
this.transTypeCode=transTypeCode;
this.transTypeName=transTypeName;
this.itemStatus=itemStatus;
this.unit=unit;
this.srcLocateNo=srcLocateNo;

@ -153,6 +153,10 @@ public class WmsMoveToERP extends BaseBean {
@ApiParam("是否同步")
public Integer isSync = CommonEnumUtil.FALSE;
@Column(name="REF_ITEM")
@ApiParam("关联单据行号")
public String refItem;
@ApiParam(value = "待出库数量", example = "0")
@Transient
private Long waitingCounts;

@ -204,7 +204,7 @@ public class WmsStockQuan extends BaseBean {
}
public WmsStockQuan(String whNo, String zoneNo, String unit, String partNo, String partName,
Double qty, Double failQty, Double holdQty, Double qcQty, Double rinQty, Double freezeQty, Double consignQty, Double lockQty) {
Double qty, Double failQty, Double holdQty, Double qcQty, Double rinQty, Double freezeQty, Double consignQty, Double lockQty,String prodCfgTypeCode ,String prodCfgTypeName, Double scrapQty) {
this.whNo = whNo;
this.zoneNo = zoneNo;
this.partNo = partNo;
@ -218,6 +218,9 @@ public class WmsStockQuan extends BaseBean {
this.freezeQty = freezeQty;
this.consignQty = consignQty;
this.lockQty = lockQty;
this.prodCfgTypeCode= prodCfgTypeCode;
this.prodCfgTypeName = prodCfgTypeName;
this.scrapQty = scrapQty;
}
public WmsStockQuan(Double qty, Double failQty, Double holdQty, Double qcQty, Double rinQty, Double freezeQty, Double consignQty, Double lockQty, Double scrapQty) {
this.qty = qty;

@ -0,0 +1,27 @@
package cn.estsh.i3plus.pojo.wms.bean.esbio;
import lombok.Data;
/**
* Created by Administrator on 2019/7/2.
*/
@Data
public class IQ {
public String SID="";
public String TPDESC="";
public String RECYMD="";
public String RECHMS="";
public String XMLCON="";
public String ACTFLG="";
public String ACTYMD="";
public String ACTHMS="";
}

@ -0,0 +1,27 @@
package cn.estsh.i3plus.pojo.wms.bean.esbio;
import lombok.Data;
/**
* Created by Administrator on 2019/7/2.
*/
@Data
public class OQ {
public String SID="";
public String TPDESC="";
public String CREYMD="";
public String CREHMS="";
public String XMLCON="";
public String ACTFLG="";
public String ACTYMD="";
public String ACTHMS="";
}

@ -0,0 +1,26 @@
package cn.estsh.i3plus.pojo.wms.bean.esbio;
import lombok.Data;
@Data
public class PublishTopicData {
public int TPID =0;
public String PBNO ="";
public String TPNO ="";
public String TPDESC ="";
public String MESTAB ="";
public String MESGROP ="";
public String MESORD ="";
public String MESPK ="";
public String PBNAME ="";
}

@ -0,0 +1,28 @@
package cn.estsh.i3plus.pojo.wms.bean.esbio;
import lombok.Data;
@Data
public class SI_TP {
public String TPTYP="";
public String TPNO="";
public String TPDESC="";
public String MESTAB="";
public String MESGROP="";
public String MESPK="";
public String ACTTYP="";
public String ACTDESC="";
public String ENAB="";
public String WERKS="";
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.pojo.wms.bean.esbio;
import lombok.Data;
@Data
public class SI_TPMAP {
public int SEQ=0;
public String SAPCOL="";
public String MESCOL="";
public String COLTYP="";
public String COLDESC="";
}

@ -37,4 +37,9 @@ public class GenerateSnRule {
*
*/
private Integer zoneSource;
/**
*
*/
private Integer locateSource;
}

@ -15,8 +15,9 @@ import org.springframework.stereotype.Repository;
public interface IEngineRulePersistenceRepository extends BaseRepository<EngineRulePersistence, Long> {
/**
*
* @param organizeCode
* @param ruleNo
* @return
*/
EngineRulePersistence findByRuleNo(String ruleNo);
EngineRulePersistence findByOrganizeCodeAndRuleNo(String organizeCode, String ruleNo);
}

@ -21,12 +21,14 @@ public interface IEngineScriptPersistenceRepository extends BaseRepository<Engin
* @param scriptNo
* @return
*/
EngineScriptPersistence findByScriptNo(String scriptNo);
EngineScriptPersistence findByOrganizeCodeAndScriptNo(String organizeCode, String scriptNo);
/**
*
* @return
*/
@Query("select t.languageType from EngineScriptPersistence t group by t.languageType")
@Query("select t.languageType from EngineScriptPersistence t group by t.organizeCode, t.languageType")
List findGroupByLanguageType();
EngineScriptPersistence findByScriptNo(String scriptNo);
}

@ -0,0 +1,17 @@
package cn.estsh.i3plus.pojo.wms.repository;
import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository;
import cn.estsh.i3plus.pojo.wms.bean.AmpJisRec;
import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceDataMapper;
import org.springframework.stereotype.Repository;
/**
* @Description :
* @Reference :
* @Author : jessica.chen
* @CreateDate : 2019-06-28 15:17
* @Modify:
**/
@Repository
public interface WmsInterfaceDataMapperRepository extends BaseRepository<WmsInterfaceDataMapper,Long> {
}

@ -7,6 +7,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.WmsEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.base.tool.HqlPack;
import cn.estsh.i3plus.pojo.wms.bean.*;
import cn.estsh.i3plus.pojo.wms.dbinterface.WmsInterfaceDataMapper;
import cn.estsh.i3plus.pojo.wms.engine.rule.EngineRulePersistence;
import cn.estsh.i3plus.pojo.wms.engine.script.EngineScriptPersistence;
import com.alibaba.fastjson.JSONObject;
@ -2109,4 +2110,23 @@ public class WmsHqlPack {
return result;
}
/**
*
*
* @param wmsInterfaceDataMapper
* @return
*/
public static DdlPackBean packHqlWmsInterfaceDataMapper(WmsInterfaceDataMapper wmsInterfaceDataMapper) {
DdlPackBean result = new DdlPackBean();
DdlPreparedPack.getStringLikerPack(wmsInterfaceDataMapper.getSrcTableName(), "srcTableName", result);
DdlPreparedPack.getStringLikerPack(wmsInterfaceDataMapper.getDestBeanName(), "destBeanName", result);
DdlPreparedPack.getStringLikerPack(wmsInterfaceDataMapper.getBusiRoute(), "busiRoute", result);
DdlPreparedPack.getStringLikerPack(wmsInterfaceDataMapper.getGroupName(), "groupName", result);
getStringBuilderPack(wmsInterfaceDataMapper, result);
return result;
}
}

Loading…
Cancel
Save