|
|
@@ -0,0 +1,106 @@
|
|
|
+package nckd.jxccl.hr.htm.plugin.form.quitapply;
|
|
|
+
|
|
|
+import kd.bos.common.enums.EnableEnum;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
|
|
+import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
+import kd.bos.orm.query.QCP;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.servicehelper.QueryServiceHelper;
|
|
|
+import kd.sdk.wtc.wtp.business.attfile.AttFileVersion;
|
|
|
+import kd.sdk.wtc.wtp.business.helper.WTPServiceHelper;
|
|
|
+import kd.sdk.wtc.wtp.business.quota.QuotaQueryParam;
|
|
|
+import nckd.jxccl.hr.htm.common.quitapply.QuitApplyConstant;
|
|
|
+
|
|
|
+import java.time.ZoneId;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 离职申请单表单插件
|
|
|
+ * @entity: nckd_htm_quitapply_ext
|
|
|
+ * @author: jtd
|
|
|
+ * @date: 2025/11/18 22:53
|
|
|
+ */
|
|
|
+public class QuitApplyFormPlugin extends AbstractFormPlugin {
|
|
|
+
|
|
|
+ /** 培养协议合同类型编码 */
|
|
|
+ private static final String CONTRACTTYPE_NUMBER = "JT01";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void propertyChanged(PropertyChangedArgs e) {
|
|
|
+ super.propertyChanged(e);
|
|
|
+
|
|
|
+ String propertyName = e.getProperty().getName();
|
|
|
+ Object newValue = e.getChangeSet()[0].getNewValue();
|
|
|
+ if (QuitApplyConstant.CONTRACTENDDATE_KEY.equals(propertyName)) {
|
|
|
+ DynamicObject quitPersonDy = (DynamicObject) getModel().getValue(QuitApplyConstant.BB_EM_TID_KEY);
|
|
|
+ Date contractEndDate = (Date) newValue;
|
|
|
+ if (quitPersonDy == null || contractEndDate == null) {
|
|
|
+ getModel().setValue(QuitApplyConstant.NCKD_UNUSEDANNUALLEAVE_KEY, 0);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Long employeeId = quitPersonDy.getLong(QuitApplyConstant.ID_KEY);
|
|
|
+ setUnUsedAnnualLeave(employeeId, contractEndDate);
|
|
|
+ setTrainingAgmtStat(employeeId, contractEndDate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置应休未休剩余年假
|
|
|
+ * @param employeeId 离职人员
|
|
|
+ * @param contractEndDate 离职日期
|
|
|
+ */
|
|
|
+ private void setUnUsedAnnualLeave(Long employeeId, Date contractEndDate) {
|
|
|
+ // 获取人员考勤档案
|
|
|
+ AttFileVersion attFile = WTPServiceHelper.getAttFile(contractEndDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(), employeeId);
|
|
|
+ if (attFile == null) {
|
|
|
+ getView().showTipNotification("未获取到应休未休剩余年假,请检查离职人员是否存在离职时间内有效的考勤档案");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询应休未休剩余年假
|
|
|
+ QuotaQueryParam quotaQueryParam = new QuotaQueryParam();
|
|
|
+ // 考勤档案
|
|
|
+ quotaQueryParam.setAttFileBoId(attFile.getBoId());
|
|
|
+ // 休假类型
|
|
|
+ quotaQueryParam.setQuotaTypeIdList(Collections.singletonList(1427605179489846272L));
|
|
|
+ // 仅使用范围过滤
|
|
|
+ quotaQueryParam.setRangQueryType(0);
|
|
|
+ // 开始时间
|
|
|
+ quotaQueryParam.setStartDate(contractEndDate);
|
|
|
+ // 结束时间
|
|
|
+ quotaQueryParam.setEndDate(contractEndDate);
|
|
|
+ List<DynamicObject> quotaList = WTPServiceHelper.queryQuota(quotaQueryParam);
|
|
|
+ if (quotaList != null && !quotaList.isEmpty()) {
|
|
|
+ DynamicObject quotaDy = quotaList.get(0);
|
|
|
+ getModel().setValue(QuitApplyConstant.NCKD_UNUSEDANNUALLEAVE_KEY, quotaDy.getBigDecimal(QuitApplyConstant.USABLEVALUE_KEY));
|
|
|
+ } else {
|
|
|
+ getModel().setValue(QuitApplyConstant.NCKD_UNUSEDANNUALLEAVE_KEY, 0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设置是否还在培养协议期内
|
|
|
+ * @param employeeId
|
|
|
+ * @param contractEndDate
|
|
|
+ */
|
|
|
+ private void setTrainingAgmtStat(Long employeeId, Date contractEndDate) {
|
|
|
+ // 过滤员工
|
|
|
+ QFilter qFilter = new QFilter(String.format("%s.id", QuitApplyConstant.EMPLOYEE_KEY), QCP.equals, employeeId);
|
|
|
+ // 过滤合同类型
|
|
|
+ qFilter.and(new QFilter(String.format("%s.number", QuitApplyConstant.CONTRACTTYPE_KEY), QCP.equals, CONTRACTTYPE_NUMBER));
|
|
|
+ // 过滤日期
|
|
|
+ qFilter.and(new QFilter(QuitApplyConstant.STARTDATE_KEY, QCP.less_equals, contractEndDate));
|
|
|
+ qFilter.and(new QFilter(QuitApplyConstant.PLANENDDATE_KEY, QCP.large_equals, contractEndDate));
|
|
|
+ // 过滤状态
|
|
|
+ qFilter.and(new QFilter(QuitApplyConstant.CONTRACTSTATUS_KEY, QCP.equals, EnableEnum.YES.getCode()));
|
|
|
+ boolean exists = QueryServiceHelper.exists(QuitApplyConstant.HLCM_CONTRACTFILEOTHER_ENTITY, new QFilter[]{qFilter});
|
|
|
+ if (exists) {
|
|
|
+ getModel().setValue(QuitApplyConstant.NCKD_TRAINING_AGMT_STAT_KEY, Boolean.TRUE);
|
|
|
+ } else {
|
|
|
+ getModel().setValue(QuitApplyConstant.NCKD_TRAINING_AGMT_STAT_KEY, Boolean.FALSE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|