Merge remote-tracking branch 'origin/develop' into feature/mogen

feature/mogen
Mlin 2 years ago
commit b7fe773790

@ -26,6 +26,8 @@ import org.apache.commons.lang.StringUtils;
import weaver.conn.RecordSet;
import weaver.general.Util;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import java.util.stream.Collectors;
@ -70,6 +72,45 @@ public class JobBrowserService extends BrowserService {
return resultMap;
}
@Override
public Map<String, Object> browserAutoComplete(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
Map<String, Object> apidatas = new HashMap<>();
String q = Util.null2String(httpServletRequest.getParameter("q"));
List<String> sqlParams = new ArrayList<>();
String keyword = "";
if (q.length() > 0) keyword = "%" + q + "%";
RecordSet rs = new RecordSet();
String sqlwhere = " where t.delete_type = 0 ";
String backfields = "t.id, t.job_no, h.jobtitlename as name, t.sequence_id, t.scheme_id , t.grade_id , t.level_id ";
String fromSql = "FROM jcl_org_job t left join hrmjobtitles h on t.ec_jobTitle = h.id ";
String orderby = " order by t.id ";
sqlwhere += " ";
DetachUtil detachUtil = new DetachUtil(user);
if (detachUtil.isDETACH()) {
sqlwhere += " AND t.ec_company in (" + detachUtil.getJclRoleLevels() + ")";
}
if (!"".equals(keyword)) {
sqlwhere += " and (h.jobtitlemark like ? or h.jobtitlename like ? or h.ecology_pinyin_search like ? )";
sqlParams.add(keyword);
sqlParams.add(keyword);
sqlParams.add(keyword);
}
String sql = "select " + backfields + fromSql + sqlwhere + orderby;
rs.executeQuery(sql, sqlParams);
List<Map<String, String>> datas = new ArrayList<>();
while (rs.next()) {
Map<String, String> item = new HashMap<>();
item.put("id", Util.null2String(rs.getString("id")));
String name = Util.null2String(rs.getString("name"));
item.put("name", name);
item.put("title", name);
datas.add(item);
}
apidatas.put("datas", datas);
return apidatas;
}
@Override
public Map getBrowserConditionInfo(Map<String, Object> map) {
Map<String, List<SearchConditionItem>> apiDatas = new HashMap<>();
@ -130,7 +171,7 @@ public class JobBrowserService extends BrowserService {
// 分权
DetachUtil detachUtil = new DetachUtil(user);
if (detachUtil.isDETACH()) {
sqlWhere += " AND t.parent_comp in (" + detachUtil.getJclRoleLevels() + ")";
sqlWhere += " AND t.ec_company in (" + detachUtil.getJclRoleLevels() + ")";
}
return sqlWhere;
}

@ -159,7 +159,7 @@ public class DepartmentBO {
return "";
}
String departmentPrincipal = MapperProxyFactory.getProxy(DepartmentMapper.class).getDepartmentPrincipal(id);
if (StringUtils.isBlank(departmentPrincipal)) {
if (StringUtils.isBlank(departmentPrincipal) || "$NULL$".equalsIgnoreCase(departmentPrincipal)) {
return "";
}
List<Long> collect = Arrays.stream(departmentPrincipal.split(",")).map(Long::parseLong).collect(Collectors.toList());

@ -137,7 +137,8 @@
<select id="hasSubs" resultType="java.lang.String">
select distinct supDepId
from hrmdepartment
where canceled = 0
where 1=1
<include refid="com.engine.organization.mapper.comp.CompMapper.subsWhere"/>
</select>
<select id="countUsedInJob" resultType="java.lang.Integer">
select count(1)

@ -152,7 +152,7 @@
where time_start &lt;= convert(varchar(100),getDate(),23) and time_end &gt; convert(varchar(100),getDate(),23)) and delete_type=0
group by job_id) e on a.id=e.job_id
left join ( select c.id,count(1) fcnt from hrmresource a
left join Hrmjobtitles b on a.jobtitle=b.id
left join Hrmjobtitles b on a.jobtitle=b.id and a.status&lt;4
left join jcl_org_job c on b.id=c.ec_jobtitle and a.subcompanyid1=c.ec_company and a.departmentid=c.ec_department
group by c.id) f
on f.id=a.id
@ -174,7 +174,7 @@
where time_start&lt;=NOW() and time_end &gt; NOW() and delete_type=0)
group by job_id) e on a.id=e.job_id
left join ( select c.id,count(1) fcnt from hrmresource a
left join Hrmjobtitles b on a.jobtitle=b.id
left join Hrmjobtitles b on a.jobtitle=b.id and a.status&lt;4
left join jcl_org_job c on b.id=c.ec_jobtitle and a.subcompanyid1=c.ec_company and a.departmentid=c.ec_department
group by c.id) f
on f.id=a.id
@ -196,7 +196,7 @@
where time_start&lt;=TO_DATE(to_char(SYSDATE,'yyyy-MM-dd'),'yyyy-MM-dd') and time_end&gt;TO_DATE(to_char(SYSDATE,'yyyy-MM-dd'),'yyyy-MM-dd')) and delete_type=0
group by job_id) e on a.id=e.job_id
left join ( select c.id,count(1) fcnt from hrmresource a
left join Hrmjobtitles b on a.jobtitle=b.id
left join Hrmjobtitles b on a.jobtitle=b.id and a.status&lt;4
left join jcl_org_job c on b.id=c.ec_jobtitle and a.subcompanyid1=c.ec_company and a.departmentid=c.ec_department
group by c.id) f
on f.id=a.id

@ -518,9 +518,15 @@
<if test="resourcePO.subcompanyid1 != null">
and t.ec_company = #{resourcePO.subcompanyid1}
</if>
<if test="resourcePO.subcompanyid1 == null">
and t.ec_company is null
</if>
<if test="resourcePO.departmentid != null">
and t.ec_department = #{resourcePO.departmentid}
</if>
<if test="resourcePO.departmentid == null">
and t.ec_department is null
</if>
<if test="resourcePO.jobtitle != null">
and t.ec_jobTitle = #{resourcePO.jobtitle}
</if>

@ -63,6 +63,8 @@ public interface HrmResourceMapper {
SearchTemplatePO getCustomTemplateByName(@Param("userId") Integer userId, @Param("name") String name);
SearchTemplatePO getUsedCustomTemplateByUser(@Param("userId") Integer userId);
Integer insertSearchTemplate(SearchTemplatePO templatePO);
Integer deleteSearchTemplate(@Param("id") Integer Id, @Param("userId") Integer userId);
@ -71,9 +73,9 @@ public interface HrmResourceMapper {
Integer deleteCustomTemplate(@Param("id") Integer Id, @Param("userId") Integer userId);
List<JSONObject> queryAllResColumns(@Param("level") String level,@Param("grade") String grade);
List<JSONObject> queryAllResColumns(@Param("level") String level, @Param("grade") String grade);
String queryLabelName(@Param("fieldName") String fieldName,@Param("scopeId") String scopeId);
String queryLabelName(@Param("fieldName") String fieldName, @Param("scopeId") String scopeId);
}

@ -18,7 +18,7 @@
<select id="selectFilterDatas" resultType="com.engine.organization.entity.hrmresource.po.ResourcePO">
SELECT DISTINCT subcompanyid1, departmentid, jobtitle
from hrmresource
from hrmresource where status &lt; 4
</select>
<select id="listByFilter" resultMap="HrmResourceMap">
select id, subcompanyid1 , departmentid , jobtitle , lastname , dspOrder from hrmresource t
@ -397,8 +397,8 @@
<select id="queryAllResColumns" parameterType="java.lang.String" resultType="com.alibaba.fastjson.JSONObject">
select a.fieldid, a.fieldname, b.labelname, a.issystem, a.ismand
from hrm_formfield a
inner join htmllabelinfo b on a.fieldlabel = b.indexid and b.languageid = 7
from hrm_formfield a
inner join htmllabelinfo b on a.fieldlabel = b.indexid and b.languageid = 7
</select>
<select id="getSearchTemplateByName"
resultType="com.engine.organization.entity.hrmresource.po.SearchTemplatePO">
@ -416,8 +416,12 @@
</select>
<select id="queryLabelName" parameterType="java.lang.String" resultType="java.lang.String">
select b.LABELNAME from hrm_formfield a inner join htmllabelinfo b on a.fieldlabel = b.indexid where a.FIELDNAME = #{fieldName} and b.LANGUAGEID ='7'
union all
select b.LABELNAME
from hrm_formfield a
inner join htmllabelinfo b on a.fieldlabel = b.indexid
where a.FIELDNAME = #{fieldName}
and b.LANGUAGEID = '7'
union all
SELECT t1.hrm_fieldlable as labelname
FROM cus_formfield t1,
cus_formdict t2
@ -426,5 +430,12 @@
and t1.SCOPEID = #{scopeId}
and t2.fieldname = #{fieldName}
</select>
<select id="getUsedCustomTemplateByUser"
resultType="com.engine.organization.entity.hrmresource.po.SearchTemplatePO">
select *
from jcl_org_custom_template
where ISUSED = 1
and creator = #{userId}
</select>
</mapper>

@ -111,12 +111,9 @@
from jcl_org_hrmresource t where delete_type = 0 and work_code = #{workCode}
</select>
<select id="listDetachAll" resultType="com.engine.organization.entity.hrmresource.vo.HrmResourceVO">
SELECT t.last_name as lastName,d.departmentname as departmentName,
c.subcompanyname as companyName,t.mobile,t.telephone,t1.last_name as managerName
from jcl_org_hrmresource t
left join hrmdepartment d on t.ec_department = d.id
left join hrmsubcompany c on t.ec_company = c.id
left join jcl_org_hrmresource t1 on t.manager_id = t1.id
select t.lastname as lastname, d.departmentname as departmentname, c.subcompanyname as companyname, t.mobile,
t.telephone, t1.lastname as managername from hrmresource t left join hrmdepartment d on t.departmentid = d.id
left join hrmsubcompany c on t.subcompanyid1 = c.id left join hrmresource t1 on t.managerid = t1.id
where 1 = 1
<if test="ids != null and ids.size > 0">
AND t.id IN
@ -128,7 +125,7 @@
<foreach collection="companyIds" open="(" item="companyId" separator="," close=")">
#{companyId}
</foreach>
order by t.show_order asc;
order by t.dsporder asc
</select>
<select id="getMaxShowOrder" resultType="java.lang.Long">

@ -4,7 +4,6 @@ import com.engine.organization.entity.hrmresource.param.HrmRelationSaveParam;
import com.engine.organization.entity.hrmresource.param.SearchTemplateParam;
import com.engine.organization.entity.searchtree.SearchTreeParams;
import java.util.List;
import java.util.Map;
/**
@ -126,7 +125,7 @@ public interface HrmResourceService {
* @param params
* @return
*/
List<SearchTemplateParam> getSearchTemplate(Map<String, Object> params);
Map<String, Object> getSearchTemplate(Map<String, Object> params);
/**
*

@ -88,8 +88,6 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
private static final String RIGHT_NAME = "Roster:All";
private static final String level = getFieldName("职等");
private static final String grade = getFieldName("职级");
private HrmRelationMapper getHrmRelationMapper() {
return MapperProxyFactory.getProxy(HrmRelationMapper.class);
@ -149,7 +147,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
table.setSqlwhere(sqlWhere);
List<WeaTableColumn> weaTableColumnList = new ArrayList<>();
JclOrgCustomTemplatePO jclOrgCustomTemplatePO = MapperProxyFactory.getProxy(JclOrgCustomTemplateMapper.class).queryIsusedTemp("1", String.valueOf(user.getUID()));
String columns = null;
String columns = "";
List<String> fields = new ArrayList<>();
List<SearchConditionGroup> allConditions = getAllConditions();
@ -289,18 +287,26 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
}
@Override
public List<SearchTemplateParam> getSearchTemplate(Map<String, Object> params) {
public Map<String, Object> getSearchTemplate(Map<String, Object> params) {
Map<String, Object> returnMap = new HashMap<>();
String type = Util.null2String(params.get("type"));
int userUID = user.getUID();
// 根据ID查询所存储的模板
List<SearchTemplateParam> templates;
if ("custom".equals(type)) {
templates = getHrmResourceMapper().getCustomTemplatesByUser(userUID);
SearchTemplatePO usedCustomTemplate = getHrmResourceMapper().getUsedCustomTemplateByUser(user.getUID());
if (null != usedCustomTemplate) {
returnMap.put("templateId", usedCustomTemplate.getId().toString());
} else {
returnMap.put("templateId", "-1");
}
} else {
templates = getHrmResourceMapper().getSearchTemplatesByUser(userUID);
}
templates.add(0, SearchTemplateParam.builder().key("-1").showname("默认模板").build());
return templates;
returnMap.put("templates", templates);
return returnMap;
}
@Override
@ -389,8 +395,15 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
transferOptions.add(SearchTemplateParam.builder().key(Integer.toString(idx.getAndIncrement())).showname(allCondition.getTitle()).build());
}
if ("-1".equals(templateId)) {
String selectKeys = "-1_hrm_lastname,-1_hrm_departmentid,-1_hrm_jobtitle,-1_hrm_mobile,-1_hrm_telephone,-1_hrm_managerid";
transferKeys = Arrays.asList(selectKeys.split(","));
// 查询当前使用的模板,没有使用的,则展示默认模板
SearchTemplatePO usedCustomTemplate = getHrmResourceMapper().getUsedCustomTemplateByUser(user.getUID());
if (null == usedCustomTemplate) {
String selectKeys = "-1_hrm_lastname,-1_hrm_departmentid,-1_hrm_jobtitle,-1_hrm_mobile,-1_hrm_telephone,-1_hrm_managerid";
transferKeys = Arrays.asList(selectKeys.split(","));
} else {
transferKeys = getSelectKeys(usedCustomTemplate);
templateId = usedCustomTemplate.getId().toString();
}
} else {
SearchTemplatePO searchTemplateById = getHrmResourceMapper().getCustomTemplateById(templateId);
transferKeys = getSelectKeys(searchTemplateById);
@ -399,6 +412,7 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
resultMap.put("transferDatas", transferDatas);
resultMap.put("transferKeys", transferKeys);
resultMap.put("transferOptions", transferOptions);
resultMap.put("templateId", templateId);
return resultMap;
}
@ -643,16 +657,36 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
DBType dbType = DBType.get(new RecordSet().getDBType());
StringBuilder sb = new StringBuilder(" where 1=1 and t.status <4 ");
StringBuilder sb = new StringBuilder(" where 1=1 ");
if (params.containsKey("lastName")) {
// sb.append(" and t.status = 1");
sb.append(" and t.status < 4");
}
for (Map.Entry<String, Object> entry : params.entrySet()) {
String key = entry.getKey();
String value = Util.null2String(entry.getValue());
if (StringUtils.isBlank(value)) {
continue;
}
String key = entry.getKey();
if ("lastName".equals(key)) {
sb.append(" and t.lastname ").append(dbType.like(value));
}
if ("companyId".equals(key)) {
sb.append(" and t.subcompanyid1 ='").append(value).append("'");
}
if ("departmentId".equals(key)) {
sb.append(" and t.departmentId ='").append(value).append("'");
}
if ("jobTitle".equals(key)) {
JobPO jobById = getJobMapper().getJobById(Long.parseLong(value));
if (null != jobById) {
sb.append(" and t.jobtitle ='").append(Util.null2String(jobById.getEcJobTitle())).append("' and t.subcompanyid1 = '").append(Util.null2String(jobById.getEcCompany())).append("' and t.departmentId ='").append(Util.null2String(jobById.getEcDepartment())).append("'");
} else {
sb = new StringBuilder(" where 1 = 2 ");
break;
}
}
SearchConditionItem searchConditionItem = allFieldsMap.get(key);
// 根据不同的类型,不同的查询方式
buildDynamicSql(searchConditionItem, key, value, sb, dbType);
@ -913,6 +947,9 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
hrmFieldBean.setDmlurl(cusFormFieldPO.getDmlUrl());
hrmFieldBean.setIssystem("hrm".equals(cusFormFieldPO.getTableName()) ? "1" : "0");
hrmFieldBean.setIsFormField(true);
if ("-1_hrm_status".equals(hrmFieldBean.getFieldname())) {
hrmFieldBean.setFieldvalue("1");
}
SearchConditionItem searchConditionItem = hrmFieldSearchConditionComInfo.getSearchConditionItem(hrmFieldBean, user);
conditionItems.add(searchConditionItem);
// 如果为下拉框,添加一条空选项
@ -1090,6 +1127,14 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
sb.append(" and ").append(dbType.ifNull(tableSql, "0")).append(" = '").append(value).append("' ");
break;
case SELECT://选择框
if (!"-1".equals(value)) {
if ("t.status".equalsIgnoreCase(tableSql) && "10".equals(value)) {
sb.append(" and ").append(tableSql).append(" < 4 ");
} else {
sb.append(" and ").append(tableSql).append(" = '").append(value).append("' ");
}
}
break;
case DATE:
case DATEPICKER:
case TIMEPICKER:
@ -1156,14 +1201,17 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
* @param searchConditionItem
*/
private void addEmptyForSelect(SearchConditionItem searchConditionItem) {
searchConditionItem.setValue("");
searchConditionItem.setValue("-1");
if ("-1_hrm_status".equals(searchConditionItem.getDomkey()[0])) {
// 默认赋值 在职状态
searchConditionItem.setValue("10");
}
List<SearchConditionOption> options = searchConditionItem.getOptions();
SearchConditionOption searchConditionOption = new SearchConditionOption();
searchConditionOption.setKey("");
searchConditionOption.setKey("-1");
searchConditionOption.setShowname("全部");
options.add(0, searchConditionOption);
options.forEach(item -> {
item.setSelected(false);
});
options.forEach(item -> item.setSelected(false));
}
/**
@ -1189,13 +1237,4 @@ public class HrmResourceServiceImpl extends Service implements HrmResourceServic
return selectKeys;
}
private static String getFieldName(String fieldabel) {
RecordSet recordSet = new RecordSet();
String fieldname = null;
recordSet.executeQuery("select fieldname from jcl_org_field where fieldlabel='" + fieldabel + "'");
if (recordSet.next()) {
fieldname = recordSet.getString("fieldname");
}
return fieldname;
}
}

@ -6,7 +6,6 @@ import com.engine.organization.mapper.department.DepartmentMapper;
import com.engine.organization.mapper.hrmresource.SystemDataMapper;
import com.engine.organization.util.db.MapperProxyFactory;
import org.json.JSONObject;
import weaver.conn.RecordSet;
import weaver.hrm.User;
import weaver.hrm.definedfield.HrmFieldManager;
@ -19,15 +18,13 @@ public class HrmResourceTransMethod {
public static String getFieldTrueValue(String id, String para) {
HrmFieldManager hfm = new HrmFieldManager("HrmCustomFieldByInfoType", Integer.parseInt(para.split("_")[0]));
hfm.getCustomFields();
String fieldName = hfm.getFieldname();
JSONObject hrmFieldConf = hfm.getHrmFieldConf(para.substring(para.lastIndexOf("_") + 1));
String hrmData = id;
// hfm.getCustomFields();
String fieldName = para.substring(para.lastIndexOf("_") + 1);
JSONObject hrmFieldConf = hfm.getHrmFieldConf(fieldName);
User user = new User();
user.setUid(1);
try {
return hfm.getFieldvalue(null, user, null, hrmFieldConf.getString("dmlurl"), hrmFieldConf.getInt("id"), hrmFieldConf.getInt("fieldhtmltype"), hrmFieldConf.getInt("type"), hrmData, 0, fieldName);
return hfm.getFieldvalue(null, user, null, hrmFieldConf.getString("dmlurl"), hrmFieldConf.getInt("id"), hrmFieldConf.getInt("fieldhtmltype"), hrmFieldConf.getInt("type"), id, 0, fieldName);
} catch (Exception e) {
return "";
}

@ -195,8 +195,10 @@ public class CompanyImport {
try {
if ("subcompanyname".equalsIgnoreCase(infoPO.getFieldName())) {
reallyValue = cellValue;
} else if (StringUtils.isBlank(cellValue)) {
reallyValue = "";
} else {
reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), true);
reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), null != infoPO.getIsSystem() && 1 == infoPO.getIsSystem());
}
} catch (Exception e) {
historyDetailPO.setOperateDetail(cellValue + "转换失败");

@ -124,8 +124,8 @@ public class DepartmentImport {
value += SystemEnv.getHtmlLabelName(28576, user.getLanguage());
item.put("link", templatePath);
}
if(3==i){
value = value.replace("及显示顺序","");
if (3 == i) {
value = value.replace("及显示顺序", "");
}
item.put("value", value);
itemList.add(item);
@ -206,8 +206,10 @@ public class DepartmentImport {
try {
if ("departmentmark".equalsIgnoreCase(infoPO.getFieldName()) || "subcompanyid1".equalsIgnoreCase(infoPO.getFieldName())) {
reallyValue = cellValue;
} else if (StringUtils.isBlank(cellValue)) {
reallyValue = "";
} else {
reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), true);
reallyValue = HrmFieldManagerForService.getReallyFieldvalue(infoPO.getJsonObject(cellValue), null != infoPO.getIsSystem() && 1 == infoPO.getIsSystem());
}
} catch (Exception e) {
historyDetailPO.setOperateDetail(cellValue + "转换失败");

@ -232,7 +232,7 @@ public class HrmImportAdaptExcelE9 extends BaseBean implements IHrmImportAdapt {
if ("accounttype".equalsIgnoreCase(voFields[i])) {
accounttypeIndex = i;
}
if (keyFieldIndex != 2 && certificateNumIndex != 29) break;
//if (keyFieldIndex != 2 && certificateNumIndex != 29) break;
}
try {
Workbook workbook;
@ -292,10 +292,12 @@ public class HrmImportAdaptExcelE9 extends BaseBean implements IHrmImportAdapt {
fieldList.add(cellValue);
if (keyFieldIndex == k) //如果重复性验证标准数据库字段下标与标准excel模板下标相等则找到对应的excel验证列
keyColumn = i;
if (certificateNumIndex == k) {
// if (certificateNumIndex == k) {
if ("身份证号码".equals(cellValue)) {
certificateNumColumn = i;
}
if (accounttypeIndex == k) {
// if (accounttypeIndex == k) {
if ("账号类型".equals(cellValue)) {
accounttypeColumn = i;
}
flag = true;
@ -550,7 +552,12 @@ public class HrmImportAdaptExcelE9 extends BaseBean implements IHrmImportAdapt {
if (certificateNumColumn == -1)
return false;
String certificateNum = getCellValue(row.getCell((short) certificateNumColumn)).trim();
String accounttype = getCellValue(row.getCell((short) accounttypeColumn)).trim();
String accounttype;
if (accounttypeColumn == -1) {
accounttype = "";
} else {
accounttype = getCellValue(row.getCell((short) accounttypeColumn)).trim();
}
String key = getCellValue(row.getCell((short) keyColumn)).trim();
if (voFields[fieldsMap.get(keyColumn)].equals(""))
key = getCellValue(row.getCell((short) 0)).trim() + ">" + getCellValue(row.getCell((short) 1)).trim() + "_" + key;

@ -13,7 +13,6 @@ import com.engine.organization.service.impl.HrmResourceServiceImpl;
import com.engine.organization.util.OrganizationWrapper;
import weaver.hrm.User;
import java.util.List;
import java.util.Map;
/**
@ -88,7 +87,7 @@ public class HrmResourceWrapper extends OrganizationWrapper {
return getHrmResourceService(user).updateTabForm(params);
}
public List<SearchTemplateParam> getSearchTemplate(Map<String, Object> params) {
public Map<String, Object> getSearchTemplate(Map<String, Object> params) {
return getHrmResourceService(user).getSearchTemplate(params);
}

Loading…
Cancel
Save