|
@@ -0,0 +1,1099 @@
|
|
|
+//
|
|
|
+// Source code recreated from a .class file by IntelliJ IDEA
|
|
|
+// (powered by FernFlower decompiler)
|
|
|
+//
|
|
|
+
|
|
|
+package kd.fi.er.formplugin.web;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.EventObject;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.HashSet;
|
|
|
+import java.util.Iterator;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.TreeMap;
|
|
|
+import kd.bos.bill.OperationStatus;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.dataentity.metadata.IDataEntityProperty;
|
|
|
+import kd.bos.dataentity.metadata.clr.DataEntityPropertyCollection;
|
|
|
+import kd.bos.dataentity.resource.ResManager;
|
|
|
+import kd.bos.entity.MainEntityType;
|
|
|
+import kd.bos.entity.datamodel.IDataModel;
|
|
|
+import kd.bos.entity.datamodel.events.ChangeData;
|
|
|
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
|
|
+import kd.bos.entity.property.BasedataProp;
|
|
|
+import kd.bos.form.ConfirmCallBackListener;
|
|
|
+import kd.bos.form.FormShowParameter;
|
|
|
+import kd.bos.form.IFormView;
|
|
|
+import kd.bos.form.MessageBoxOptions;
|
|
|
+import kd.bos.form.MessageBoxResult;
|
|
|
+import kd.bos.form.control.Control;
|
|
|
+import kd.bos.form.events.MessageBoxClosedEvent;
|
|
|
+import kd.bos.form.field.BasedataEdit;
|
|
|
+import kd.bos.form.field.DateRangeEdit;
|
|
|
+import kd.bos.form.field.FieldEdit;
|
|
|
+import kd.bos.form.field.MulBasedataEdit;
|
|
|
+import kd.bos.form.plugin.AbstractFormPlugin;
|
|
|
+import kd.bos.list.ListShowParameter;
|
|
|
+import kd.bos.logging.Log;
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.servicehelper.org.OrgUnitServiceHelper;
|
|
|
+import kd.fi.er.business.bean.CostDeptF7ChangePram;
|
|
|
+import kd.fi.er.business.invoicecloud.ItemFrom;
|
|
|
+import kd.fi.er.business.servicehelper.BaseCurrencyServiceHelper;
|
|
|
+import kd.fi.er.business.servicehelper.CommonServiceHelper;
|
|
|
+import kd.fi.er.business.servicehelper.CoreBaseBillServiceHelper;
|
|
|
+import kd.fi.er.business.servicehelper.ExpenseItemServiceHelper;
|
|
|
+import kd.fi.er.business.tripstd.service.IErTripStdService;
|
|
|
+import kd.fi.er.business.tripstd.service.imp.ErTripStdServiceImp;
|
|
|
+import kd.fi.er.business.utils.AmountUtils;
|
|
|
+import kd.fi.er.business.utils.ErCommonUtils;
|
|
|
+import kd.fi.er.business.utils.ErCostCenterUtil;
|
|
|
+import kd.fi.er.business.utils.ErEntityTypeUtils;
|
|
|
+import kd.fi.er.business.utils.ErStdConfig;
|
|
|
+import kd.fi.er.business.utils.SystemParamterUtil;
|
|
|
+import kd.fi.er.common.ControlMethodEnum;
|
|
|
+import kd.fi.er.common.SettlementTypeEnum;
|
|
|
+import kd.fi.er.formplugin.budget.BudgetCommonUtil;
|
|
|
+import kd.fi.er.formplugin.daily.mobile.reimburse.listener.BeforeCostCompanyF7SelectListener;
|
|
|
+import kd.fi.er.formplugin.daily.mobile.reimburse.listener.BeforeCostDeptF7SelectListener;
|
|
|
+import kd.fi.er.formplugin.daily.mobile.reimburse.listener.BeforeExpenseItemF7SelectListener;
|
|
|
+import kd.fi.er.formplugin.daily.mobile.reimburse.listener.TripBeforeCostCenterF7SelectListener;
|
|
|
+import kd.fi.er.formplugin.daily.web.workflow.ErMobWorkFlowOtherViewEditUtils;
|
|
|
+import org.apache.commons.lang.StringUtils;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
+
|
|
|
+public class TripEntryEditEx extends AbstractFormPlugin {
|
|
|
+ private static final Log log = LogFactory.getLog(TripEntryEdit.class);
|
|
|
+ private static final String TRIP_ENTRY_ROW_INDEX = "tripEntryRowIndex";
|
|
|
+ private static final String BTN_OK = "btnok";
|
|
|
+
|
|
|
+ public TripEntryEditEx() {
|
|
|
+ }
|
|
|
+
|
|
|
+ public void registerListener(EventObject e) {
|
|
|
+ super.registerListener(e);
|
|
|
+ this.addClickListeners(new String[]{"btnok"});
|
|
|
+ MulBasedataEdit travelersF7 = (MulBasedataEdit)this.getControl("travelers");
|
|
|
+ this.getF7FilterInfo(travelersF7);
|
|
|
+ BasedataEdit travelerF7 = (BasedataEdit)this.getControl("traveler");
|
|
|
+ this.getF7FilterInfo(travelerF7);
|
|
|
+ if (this.getView().getParentView() != null && this.getView().getParentView().getModel() != null) {
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ IDataModel parentModel = this.getView().getParentView().getModel();
|
|
|
+ String number = parentModel.getDataEntityType().getName();
|
|
|
+ if (ErEntityTypeUtils.isTripReqBill(number) && (Boolean)model.getValue("isloan")) {
|
|
|
+ number = "er_loanbill";
|
|
|
+ }
|
|
|
+
|
|
|
+ BasedataEdit tripExpenseItemF7 = (BasedataEdit)this.getControl("tripexpenseitem");
|
|
|
+ tripExpenseItemF7.addBeforeF7SelectListener(new BeforeExpenseItemF7SelectListener(this.getView(), number, "entrycostdept"));
|
|
|
+ this.costDeptF7Filter();
|
|
|
+ this.costCompanyF7Filter();
|
|
|
+ this.costCenterF7Filter();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void costCenterF7Filter() {
|
|
|
+ TripBeforeCostCenterF7SelectListener beforeCostCenterF7SelectListener = new TripBeforeCostCenterF7SelectListener(this.getView());
|
|
|
+ BasedataEdit entryCostCenterF7 = (BasedataEdit)this.getControl("std_entrycostcenter");
|
|
|
+ if (entryCostCenterF7 != null) {
|
|
|
+ entryCostCenterF7.addBeforeF7SelectListener(beforeCostCenterF7SelectListener);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void costDeptF7Filter() {
|
|
|
+ BasedataEdit entrycostDeptF7 = (BasedataEdit)this.getControl("entrycostdept");
|
|
|
+ if (entrycostDeptF7 != null) {
|
|
|
+ BeforeCostDeptF7SelectListener beforeCostDeptF7SelectListener = new BeforeCostDeptF7SelectListener(this.getView());
|
|
|
+ entrycostDeptF7.addBeforeF7SelectListener(beforeCostDeptF7SelectListener);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void costCompanyF7Filter() {
|
|
|
+ BasedataEdit costCompanyF7 = (BasedataEdit)this.getControl("entrycostcompany");
|
|
|
+ Object costDept = this.getModel().getValue("entrycostdept");
|
|
|
+ Object company = this.getModel().getValue("company");
|
|
|
+ if (costCompanyF7 != null && costDept != null) {
|
|
|
+ BeforeCostCompanyF7SelectListener beforeCostCompanyF7SelectListener = new BeforeCostCompanyF7SelectListener(ErCommonUtils.getPk(costDept), ErCommonUtils.getPk(company));
|
|
|
+ costCompanyF7.addBeforeF7SelectListener(beforeCostCompanyF7SelectListener);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void getF7FilterInfo(BasedataEdit travelerF7) {
|
|
|
+ travelerF7.addBeforeF7SelectListener((listener) -> {
|
|
|
+ ListShowParameter list = (ListShowParameter)listener.getFormShowParameter();
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ if (parentView != null) {
|
|
|
+ IDataModel parentModel = parentView.getModel();
|
|
|
+ DynamicObject org = (DynamicObject)parentModel.getValue("company");
|
|
|
+ if (org != null) {
|
|
|
+ boolean travelersrelationtripreq = SystemParamterUtil.getBoolParamResult(ErCommonUtils.getPk(org), "travelersrelationtripreq");
|
|
|
+ if (travelersrelationtripreq) {
|
|
|
+ Set<Object> longSet = new HashSet();
|
|
|
+ DynamicObjectCollection clearloanentry;
|
|
|
+ if (parentModel.getProperty("writeoffapply") != null && !parentModel.getEntryEntity("writeoffapply").isEmpty()) {
|
|
|
+ clearloanentry = parentModel.getEntryEntity("writeoffapply");
|
|
|
+ Iterator var9 = clearloanentry.iterator();
|
|
|
+
|
|
|
+ label106:
|
|
|
+ while(true) {
|
|
|
+ DynamicObjectCollection applytravelers;
|
|
|
+ do {
|
|
|
+ if (!var9.hasNext()) {
|
|
|
+ break label106;
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject itemx = (DynamicObject)var9.next();
|
|
|
+ applytravelers = itemx.getDynamicObjectCollection("applytravelers");
|
|
|
+ } while(applytravelers == null);
|
|
|
+
|
|
|
+ Iterator var12 = applytravelers.iterator();
|
|
|
+
|
|
|
+ while(var12.hasNext()) {
|
|
|
+ DynamicObject apply = (DynamicObject)var12.next();
|
|
|
+ longSet.add(ErCommonUtils.getPk(apply.getDynamicObject("fbasedataid")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (parentModel.getProperty("clearloanentry") != null && !parentModel.getEntryEntity("clearloanentry").isEmpty()) {
|
|
|
+ clearloanentry = parentModel.getEntryEntity("clearloanentry");
|
|
|
+ HashSet<Long> applyIdSet = new HashSet();
|
|
|
+ Iterator var25 = clearloanentry.iterator();
|
|
|
+
|
|
|
+ while(var25.hasNext()) {
|
|
|
+ DynamicObject item = (DynamicObject)var25.next();
|
|
|
+ if ("er_tripreqbill".equals(item.getString("srcbilltype"))) {
|
|
|
+ applyIdSet.add(item.getLong("loanbillid"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject[] reqBills = BusinessDataServiceHelper.load("er_tripreqbill", "tripentry.travelers", new QFilter[]{new QFilter("id", "in", applyIdSet)});
|
|
|
+ DynamicObject[] var29 = reqBills;
|
|
|
+ int var31 = reqBills.length;
|
|
|
+
|
|
|
+ label83:
|
|
|
+ for(int var32 = 0; var32 < var31; ++var32) {
|
|
|
+ DynamicObject reqBill = var29[var32];
|
|
|
+ DynamicObjectCollection tripentry = reqBill.getDynamicObjectCollection("tripentry");
|
|
|
+ if (null != tripentry) {
|
|
|
+ Iterator var16 = tripentry.iterator();
|
|
|
+
|
|
|
+ while(true) {
|
|
|
+ DynamicObjectCollection travelers;
|
|
|
+ do {
|
|
|
+ if (!var16.hasNext()) {
|
|
|
+ continue label83;
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject entry = (DynamicObject)var16.next();
|
|
|
+ travelers = entry.getDynamicObjectCollection("travelers");
|
|
|
+ } while(null == travelers);
|
|
|
+
|
|
|
+ Iterator var19 = travelers.iterator();
|
|
|
+
|
|
|
+ while(var19.hasNext()) {
|
|
|
+ DynamicObject traveler = (DynamicObject)var19.next();
|
|
|
+ longSet.add(ErCommonUtils.getPk(traveler.getDynamicObject("fbasedataid")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ longSet.remove((Object)null);
|
|
|
+ if (!longSet.isEmpty()) {
|
|
|
+ list.getListFilterParameter().setFilter(new QFilter("id", "in", longSet));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ int multravelersrange = SystemParamterUtil.getMulTravelersRange(ErCommonUtils.getPk(org));
|
|
|
+ List allOrgList;
|
|
|
+ switch (multravelersrange) {
|
|
|
+ case 0:
|
|
|
+ default:
|
|
|
+ DynamicObject dept = (DynamicObject)parentModel.getValue("org");
|
|
|
+ list.getListFilterParameter().setFilter(QFilter.of("entryentity.dpt.masterid=?", new Object[]{dept.get("masterid")}).and(new QFilter("enable", "=", Boolean.TRUE)));
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ allOrgList = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, Collections.singletonList(ErCommonUtils.getPk(org)), true);
|
|
|
+ list.getListFilterParameter().setFilter((new QFilter("entryentity.dpt.masterid", "in", allOrgList)).and(new QFilter("enable", "=", Boolean.TRUE)));
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ long rootOrgId = OrgUnitServiceHelper.getRootOrgId();
|
|
|
+ allOrgList = OrgUnitServiceHelper.getAllSubordinateOrgs(1L, Collections.singletonList(rootOrgId), true);
|
|
|
+ list.getListFilterParameter().setFilter((new QFilter("entryentity.dpt.masterid", "in", allOrgList)).and(new QFilter("enable", "=", Boolean.TRUE)));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (multravelersrange == 0 || multravelersrange == 1) {
|
|
|
+ Long id = ErCommonUtils.getPk(parentModel.getValue("org"));
|
|
|
+ if (multravelersrange == 1) {
|
|
|
+ id = ErCommonUtils.getPk(org);
|
|
|
+ }
|
|
|
+
|
|
|
+ listener.getFormShowParameter().setCustomParam("initRootOrgId", id);
|
|
|
+ listener.getFormShowParameter().setCustomParam("initOrgId", id);
|
|
|
+ }
|
|
|
+
|
|
|
+ list.setCustomParam("isIncludeAllSub", true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ public void afterCreateNewData(EventObject e) {
|
|
|
+ super.afterCreateNewData(e);
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ if (parentView != null) {
|
|
|
+ IDataModel parentModel = parentView.getModel();
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ model.setValue("formid", parentModel.getValue("formid"));
|
|
|
+ model.setValue("iscurrency", parentModel.getValue("iscurrency"));
|
|
|
+ model.setValue("currency", ErCommonUtils.getPk(parentModel.getValue("currency")));
|
|
|
+ model.setValue("isloan", parentModel.getValue("isloan"));
|
|
|
+ model.setValue("company", parentModel.getValue("company"));
|
|
|
+ model.setValue("org", parentModel.getValue("org"));
|
|
|
+ model.setValue("bizdate", parentModel.getValue("bizdate"));
|
|
|
+ model.setValue("costorgusemode", parentModel.getValue("costorgusemode"));
|
|
|
+ model.setValue("tripentrystatus", "A");
|
|
|
+ DynamicObject applierOb = (DynamicObject)parentModel.getValue("applier");
|
|
|
+ String formId = (String)model.getValue("formid");
|
|
|
+ if (applierOb != null && (ErEntityTypeUtils.isTripReqBill(parentView.getEntityId()) || ErEntityTypeUtils.isTripReimburseBill(parentView.getEntityId()))) {
|
|
|
+ MulBasedataEdit travelersF7 = (MulBasedataEdit)this.getControl("travelers");
|
|
|
+ travelersF7.setMustInput(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setRowIndexPageCache();
|
|
|
+ DynamicObject company = (DynamicObject)model.getValue("company");
|
|
|
+ String costMode = ErCommonUtils.getCostOrgUseMode(company == null ? 0L : (Long)company.getPkValue());
|
|
|
+ if (!"0".equals(costMode)) {
|
|
|
+ BasedataEdit entryCostCenter = (BasedataEdit)this.getControl("std_entrycostcenter");
|
|
|
+ entryCostCenter.setMustInput(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ int tripEntryRowIndex = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ if (tripEntryRowIndex != -1) {
|
|
|
+ DynamicObject tripEntry = parentModel.getEntryRowEntity("tripentry", tripEntryRowIndex);
|
|
|
+ DataEntityPropertyCollection tripEntryProps = tripEntry.getDataEntityType().getProperties();
|
|
|
+ DataEntityPropertyCollection properties = model.getDataEntityType().getProperties();
|
|
|
+ Iterator var13 = properties.iterator();
|
|
|
+
|
|
|
+ while(var13.hasNext()) {
|
|
|
+ IDataEntityProperty property = (IDataEntityProperty)var13.next();
|
|
|
+ String propertyName = property.getName();
|
|
|
+ if (tripEntryProps.get(propertyName) != null) {
|
|
|
+ model.setValue(propertyName, ErCommonUtils.getObjectValue(tripEntry.get(propertyName)));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(formId) && tripEntry.get("tripentryarea") != null) {
|
|
|
+ model.setValue("triparea", ErCommonUtils.getPk(tripEntry.get("tripentryarea")));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ model.setValue("entrycostdept", ErCommonUtils.getPk(parentModel.getValue("costdept")));
|
|
|
+ String centerKey = "std_entrycostcenter";
|
|
|
+ if (!"0".equals(costMode)) {
|
|
|
+ ErCostCenterUtil.initEntryCostCenter(this.getModel(), "tripentry", model.getEntryCurrentRowIndex("std_entrycostcenter"), -1);
|
|
|
+ DynamicObject costCenter = (DynamicObject)parentModel.getValue("std_costcenter");
|
|
|
+ if (model.getProperty(centerKey) == null) {
|
|
|
+ centerKey = "entrycostcenter";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (costCenter != null) {
|
|
|
+ model.setValue(centerKey, costCenter);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ model.setValue("entrycostcompany", ErCommonUtils.getPk(parentModel.getValue("costcompany")));
|
|
|
+ if (!"0".equals(costMode)) {
|
|
|
+ if (model.getProperty(centerKey) == null) {
|
|
|
+ centerKey = "entrycostcenter";
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ErCostCenterUtil.costCenterHasCostCompany(model.getValue(centerKey), parentModel.getValue("costcompany"))) {
|
|
|
+ model.setValue(centerKey, (Object)null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ model.setValue("tripcurrency", ErCommonUtils.getPk(parentModel.getValue("currency")));
|
|
|
+ DynamicObjectCollection parentTripEntry = parentModel.getEntryEntity("tripentry");
|
|
|
+ if (parentTripEntry != null && parentTripEntry.size() > 0) {
|
|
|
+ DynamicObject tripEntry = (DynamicObject)parentTripEntry.get(parentTripEntry.size() - 1);
|
|
|
+ DynamicObject toPlace = tripEntry.getDynamicObject("to");
|
|
|
+ model.setValue("from", ErCommonUtils.getPk(toPlace));
|
|
|
+ model.setValue("startdate", tripEntry.getDate("enddate"));
|
|
|
+ model.setValue("triphappendate", tripEntry.getDate("enddate"));
|
|
|
+ }
|
|
|
+
|
|
|
+ model.setValue("tripexchangerate", BigDecimal.ONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObjectCollection travelers = (DynamicObjectCollection)model.getValue("travelers");
|
|
|
+ if (travelers != null && applierOb != null && travelers.size() == 0) {
|
|
|
+ Long pkid = (Long)applierOb.getPkValue();
|
|
|
+ Long[] applierIds = new Long[]{pkid};
|
|
|
+ model.setValue("travelers", applierIds);
|
|
|
+ }
|
|
|
+
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ Object istravelers = formShowParameter.getCustomParam("istravelers");
|
|
|
+ model.setValue("istravelers", istravelers);
|
|
|
+ if (model.getValue("company") != null) {
|
|
|
+ Object pkValue = ((DynamicObject)model.getValue("company")).getPkValue();
|
|
|
+ boolean isControl = SystemParamterUtil.isEnableTripStandard(Long.parseLong(pkValue.toString())) && SystemParamterUtil.getTripStandardControlLevel(Long.parseLong(pkValue.toString())) != ControlMethodEnum.NO_CONTROL;
|
|
|
+ model.setValue("istripcontrol", isControl);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (company != null) {
|
|
|
+ int showType = ErCommonUtils.getExpenseAssumeShowTypes((Long)company.getPkValue());
|
|
|
+ model.setValue("expensesassumeshowtypes", String.valueOf(showType));
|
|
|
+ if (showType == 2) {
|
|
|
+ FieldEdit costDept = (FieldEdit)this.getControl("entrycostdept");
|
|
|
+ costDept.setMustInput(true);
|
|
|
+ FieldEdit costCompany = (FieldEdit)this.getControl("entrycostcompany");
|
|
|
+ costCompany.setMustInput(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.showExchangeRate(false);
|
|
|
+ Boolean isMonth = (Boolean)formShowParameter.getCustomParam("isMonth");
|
|
|
+ if (isMonth != null) {
|
|
|
+ model.setValue("ismonth", isMonth);
|
|
|
+ }
|
|
|
+
|
|
|
+ Object ismulwayto = formShowParameter.getCustomParam("ismulwayto");
|
|
|
+ model.setValue("ismulwayto", ismulwayto);
|
|
|
+ CommonServiceHelper.setMulWayToVisible(parentModel, this.getView());
|
|
|
+ boolean iscurrencyshowintripentry = SystemParamterUtil.getIsCurrencyShowinTripentry(ErCommonUtils.getPk(company));
|
|
|
+ model.setValue("iscurrencyshowintripentry", iscurrencyshowintripentry);
|
|
|
+ this.setBudgetInfoByDefaultValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setBudgetInfoByDefaultValue() {
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ OperationStatus status = formShowParameter.getStatus();
|
|
|
+ Boolean isQueryBudget = (Boolean)formShowParameter.getCustomParam("isquerybudget");
|
|
|
+ Object expenseItemObj = this.getModel().getValue("tripexpenseitem");
|
|
|
+ if (expenseItemObj != null && status.equals(OperationStatus.ADDNEW) && isQueryBudget) {
|
|
|
+ BudgetCommonUtil.buildBudgetAmountField(this.getView(), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void afterBindData(EventObject e) {
|
|
|
+ super.afterBindData(e);
|
|
|
+ this.setControlVisible();
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ Long companyId = 0L;
|
|
|
+ if (parentView != null) {
|
|
|
+ companyId = ErCommonUtils.getPk(parentView.getModel().getValue("company"));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!SystemParamterUtil.getTripexpenseitemMustInput(companyId) && !this.isShowExpenseItem()) {
|
|
|
+ this.getView().setVisible(false, new String[]{"tripexpenseitem"});
|
|
|
+ } else {
|
|
|
+ FieldEdit editor = (FieldEdit)this.getView().getControl("tripexpenseitem");
|
|
|
+ // editor.setMustInput(true);
|
|
|
+ this.getView().setVisible(true, new String[]{"tripexpenseitem"});
|
|
|
+ }
|
|
|
+
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ String formId = (String)model.getValue("formid");
|
|
|
+ Boolean istripcontrol = (Boolean)model.getValue("istripcontrol");
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(formId) && istripcontrol) {
|
|
|
+ FieldEdit editor = (FieldEdit)this.getView().getControl("triparea");
|
|
|
+ editor.setMustInput(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ FieldEdit tripexchangerateEditor;
|
|
|
+ if (ErEntityTypeUtils.isTripReqBill(formId)) {
|
|
|
+ Object type = model.getValue("triporiamouctrltype");
|
|
|
+ String tripamountctrltype = type == null ? "" : type.toString();
|
|
|
+ if ("1".equals(tripamountctrltype) || "3".equals(tripamountctrltype)) {
|
|
|
+ tripexchangerateEditor = (FieldEdit)this.getView().getControl("triporiamount");
|
|
|
+ tripexchangerateEditor.setMustInput(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Boolean iscurrency = (Boolean)model.getValue("iscurrency");
|
|
|
+ if (iscurrency) {
|
|
|
+ FieldEdit editor = (FieldEdit)this.getView().getControl("tripcurrency");
|
|
|
+ editor.setMustInput(true);
|
|
|
+ tripexchangerateEditor = (FieldEdit)this.getView().getControl("tripexchangerate");
|
|
|
+ tripexchangerateEditor.setMustInput(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.setRowIndexPageCache();
|
|
|
+ int tripIndex = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ if (tripIndex >= 0 && this.getView().getParentView() != null) {
|
|
|
+ IDataModel pModel = this.getView().getParentView().getModel();
|
|
|
+ DynamicObject trip = pModel.getEntryRowEntity("tripentry", tripIndex);
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(formId) && trip != null && trip.getDynamicObjectCollection("entryentity").stream().anyMatch((v) -> {
|
|
|
+ return "2".equals(v.getString("settlementtype"));
|
|
|
+ })) {
|
|
|
+ this.getView().setEnable(false, new String[]{"tripcurrency"});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ Map<String, Object> customParams = formShowParameter.getCustomParams();
|
|
|
+ if (customParams.containsKey("tripEntryRowIndex")) {
|
|
|
+ int tripEntryRowIndex = (Integer)customParams.get("tripEntryRowIndex");
|
|
|
+ boolean isEnable = (Boolean)customParams.get("isEnable");
|
|
|
+ Map<String, IDataEntityProperty> allFields = this.getModel().getDataEntityType().getAllFields();
|
|
|
+ String entityId;
|
|
|
+ if (tripEntryRowIndex != -1) {
|
|
|
+ Iterator var14 = allFields.keySet().iterator();
|
|
|
+
|
|
|
+ while(var14.hasNext()) {
|
|
|
+ entityId = (String)var14.next();
|
|
|
+ this.getView().setEnable(isEnable, new String[]{entityId});
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getView().setEnable(isEnable, new String[]{"tirpdate"});
|
|
|
+ this.getView().setVisible(isEnable, new String[]{"btnok", "btncancel"});
|
|
|
+ }
|
|
|
+
|
|
|
+ IFormView view = this.getView();
|
|
|
+ if (parentView != null) {
|
|
|
+ entityId = parentView.getEntityId();
|
|
|
+ Boolean isloan = (Boolean)parentView.getModel().getValue("isloan", tripEntryRowIndex);
|
|
|
+ if ("er_tripreqbill_ssc".equals(entityId) && isloan) {
|
|
|
+ view.setEnable(Boolean.FALSE, new String[]{"from", "to", "mulwayto", "tirpdate", "vehicle", "vehicles", "entrycostcompany", "triporiamount", "entrycostdept", "std_project"});
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!"er_tripreqbill_ssc".equals(entityId) && (this.readOnly() || this.multiVehicles())) {
|
|
|
+ view.setVisible(Boolean.TRUE, new String[]{"vehicles"});
|
|
|
+ view.setVisible(Boolean.FALSE, new String[]{"vehicle"});
|
|
|
+ } else {
|
|
|
+ view.setVisible(Boolean.FALSE, new String[]{"vehicles"});
|
|
|
+ view.setVisible(Boolean.TRUE, new String[]{"vehicle"});
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(entityId) && tripEntryRowIndex != -1) {
|
|
|
+ boolean enable = !((DynamicObject)parentView.getModel().getDataEntity(true).getDynamicObjectCollection("tripentry").get(tripEntryRowIndex)).getDynamicObjectCollection("entryentity").stream().anyMatch((v) -> {
|
|
|
+ return StringUtils.equals(ItemFrom.InvoiceCloud.getValue(), v.getString("itemfrom")) && StringUtils.isNotBlank(v.getString("invoiceno_entry"));
|
|
|
+ });
|
|
|
+ this.getView().setEnable(enable, new String[]{"tripcurrency"});
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ErMobWorkFlowOtherViewEditUtils.setWorkFlowEditView(this.getView(), customParams, model, 2);
|
|
|
+ this.setTripDateControl();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected boolean readOnly() {
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ return parentView != null && !"A".equals(parentView.getModel().getValue("billstatus")) && !"D".equals(parentView.getModel().getValue("billstatus"));
|
|
|
+ }
|
|
|
+
|
|
|
+ protected boolean multiVehicles() {
|
|
|
+ return !this.getVihicleFromStdConfig();
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean getVihicleFromStdConfig() {
|
|
|
+ return StringUtils.equals(ErStdConfig.get("notMultiVehicles"), "true");
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setRowIndexPageCache() {
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ Map<String, Object> customParams = formShowParameter.getCustomParams();
|
|
|
+ String tripRowIndex = "-1";
|
|
|
+ if (customParams.get("tripEntryRowIndex") != null) {
|
|
|
+ tripRowIndex = customParams.get("tripEntryRowIndex").toString();
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getPageCache().put("tripEntryRowIndex", tripRowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setControlVisible() {
|
|
|
+ FormShowParameter formShowParameter = this.getView().getFormShowParameter();
|
|
|
+ Map<String, Object> customParams = formShowParameter.getCustomParams();
|
|
|
+ if (null != this.getView().getParentView() && null != this.getView().getParentView().getModel() && null != this.getView().getParentView().getModel().getProperty("formid") && null != this.getView().getParentView().getModel().getValue("company")) {
|
|
|
+ Long companyId = null;
|
|
|
+ DynamicObject company = (DynamicObject)this.getView().getParentView().getModel().getValue("company");
|
|
|
+ if (company != null) {
|
|
|
+ companyId = (Long)company.getPkValue();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (companyId != null) {
|
|
|
+ String formId = (String)this.getView().getParentView().getModel().getValue("formid");
|
|
|
+ if (customParams.get("isSsc") != null && "er_tripreqbill".equalsIgnoreCase(formId)) {
|
|
|
+ this.getView().setVisible(true, new String[]{"triporiaccappamount"});
|
|
|
+ this.setControlEnable(false);
|
|
|
+ } else if (customParams.get("isSsc") != null && "er_tripreimbursebill".equalsIgnoreCase(formId)) {
|
|
|
+ this.getView().setVisible(false, new String[]{"triporiaccappamount"});
|
|
|
+ this.setControlEnable(false);
|
|
|
+ } else {
|
|
|
+ boolean isEnable = (Boolean)customParams.get("isEnable");
|
|
|
+ this.getView().setVisible(!isEnable, new String[]{"triporiaccappamount"});
|
|
|
+ this.setControlEnable(true);
|
|
|
+ }
|
|
|
+
|
|
|
+ Boolean isQueryBudget = (Boolean)customParams.get("isquerybudget");
|
|
|
+ String budgeMsgValue = (String)ErCommonUtils.getEMParameter(companyId, "budgeMsgControl");
|
|
|
+ BudgetCommonUtil.setIsQueryBudgetFlag(this.getPageCache(), isQueryBudget);
|
|
|
+ if ((isQueryBudget == null || !isQueryBudget) && !BudgetCommonUtil.getIsQueryEASBudgetFlag(this.getPageCache())) {
|
|
|
+ this.getView().setVisible(false, new String[]{"budgetamount"});
|
|
|
+ this.getView().setVisible(false, new String[]{"budgetmsg"});
|
|
|
+ } else {
|
|
|
+ BudgetCommonUtil.setBudgeInfoVisible(budgeMsgValue, this.getView());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setControlEnable(Boolean isSsc) {
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"from"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"to"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"tirpdate"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"vehicle"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"tripcurrency"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"tripexchangerate"});
|
|
|
+ this.getView().setEnable(isSsc, new String[]{"triporiamount"});
|
|
|
+ }
|
|
|
+
|
|
|
+ private Boolean isShowExpenseItem() {
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ String formId = (String)model.getValue("formid");
|
|
|
+ Boolean isLoan = (Boolean)model.getValue("isloan");
|
|
|
+ Boolean istravelers = (Boolean)model.getValue("istravelers");
|
|
|
+ return (!ErEntityTypeUtils.isTripReqBill(formId) || !isLoan) && (!ErEntityTypeUtils.isTripReqBill(formId) || isLoan || !istravelers) && !BudgetCommonUtil.getIsQueryBudgetFlag(this.getPageCache()) && !BudgetCommonUtil.getIsQueryEASBudgetFlag(this.getPageCache()) && !BudgetCommonUtil.getIsTripReqShowExpenseitemFlag(this.getPageCache()) && !ErEntityTypeUtils.isTripReimburseBill(formId) ? false : true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void click(EventObject evt) {
|
|
|
+ super.click(evt);
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ switch (((Control)evt.getSource()).getKey()) {
|
|
|
+ case "btnok":
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ IDataModel parentModel = parentView.getModel();
|
|
|
+ String formId = (String)parentModel.getValue("formid");
|
|
|
+ if (ErEntityTypeUtils.isTripReqBill(formId) && this.amountIsZero()) {
|
|
|
+ boolean isloan = (Boolean)model.getValue("isloan");
|
|
|
+ Object type = model.getValue("triporiamouctrltype");
|
|
|
+ String tripamountctrltype = type == null ? "" : type.toString();
|
|
|
+ if (isloan && ("2".equals(tripamountctrltype) || "3".equals(tripamountctrltype))) {
|
|
|
+ this.getView().showTipNotification(ResManager.loadKDString("行程金额必须大于0。", "TripEntryEdit_0", "fi-er-formplugin", new Object[0]));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ErEntityTypeUtils.isTripReqBill(formId)) {
|
|
|
+ BigDecimal triporiaccappamount = (BigDecimal)model.getValue("triporiaccappamount");
|
|
|
+ BigDecimal tripOriAmount = (BigDecimal)model.getValue("triporiamount");
|
|
|
+ if (triporiaccappamount.compareTo(tripOriAmount) > 0) {
|
|
|
+ this.getView().showErrorNotification(ResManager.loadKDString("核定金额不允许超过借款金额。", "TripEntryEdit_1", "fi-er-formplugin", new Object[0]));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ String billName = parentModel.getDataEntity().getDataEntityType().getName();
|
|
|
+ boolean isTripReimburse = ErEntityTypeUtils.isTripReimburseBill(billName);
|
|
|
+ boolean tripdatecontrol = SystemParamterUtil.isOpenTripDateControl(ErCommonUtils.getPk(parentModel.getValue("company")));
|
|
|
+ if (!(Boolean)parentModel.getValue("istravelers") && !isTripReimburse || !(Boolean)parentModel.getValue("istravelers") && isTripReimburse && tripdatecontrol) {
|
|
|
+ String error = this.validateTripDate(parentModel);
|
|
|
+ if (StringUtils.isNotBlank(error)) {
|
|
|
+ this.getView().showErrorNotification(error);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Object from = model.getValue("from");
|
|
|
+ Object to = model.getValue("to");
|
|
|
+ String cityMS = "";
|
|
|
+ if (from.equals(to)) {
|
|
|
+ cityMS = ResManager.loadKDString("出发地与目的地相同,确认继续?", "TripEntryEdit_2", "fi-er-formplugin", new Object[0]);
|
|
|
+ }
|
|
|
+
|
|
|
+ String currencyMs = "";
|
|
|
+ int tripEntryRowIndex = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ if (tripEntryRowIndex == 0 || parentModel.getEntryRowCount("tripentry") == 0) {
|
|
|
+ Object costCompany = model.getValue("entrycostcompany");
|
|
|
+ Object company = parentModel.getValue("company");
|
|
|
+ Long newCurrency = BaseCurrencyServiceHelper.getBaseCurrencyId(company, costCompany);
|
|
|
+ Long oldCurrency = ErCommonUtils.getPk(parentModel.getValue("currency"));
|
|
|
+ if (newCurrency == null) {
|
|
|
+ this.getView().showErrorNotification(ResManager.loadKDString("未设置本位币,请联系管理员设置本位币。", "TripEntryEdit_7", "fi-er-formplugin", new Object[0]));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!newCurrency.equals(oldCurrency)) {
|
|
|
+ currencyMs = ResManager.loadKDString("切换费用承担公司导致本位币变化,将清空填写分录信息,是否继续?", "TripEntryEdit_3", "fi-er-formplugin", new Object[0]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (StringUtils.isNotBlank(cityMS) || StringUtils.isNotBlank(currencyMs)) {
|
|
|
+ String callBackId = "samecity";
|
|
|
+ if (StringUtils.isNotBlank(currencyMs)) {
|
|
|
+ callBackId = "changecurrency";
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getView().showConfirm(cityMS + "\r\n" + currencyMs, MessageBoxOptions.OKCancel, new ConfirmCallBackListener(callBackId, this));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ this.clickOk(model, parentView, parentModel, formId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean amountIsZero() {
|
|
|
+ BigDecimal triporiamount = (BigDecimal)this.getModel().getValue("triporiamount");
|
|
|
+ BigDecimal tripAmount = (BigDecimal)this.getModel().getValue("tripamount");
|
|
|
+ return tripAmount.compareTo(BigDecimal.ZERO) <= 0 || triporiamount.compareTo(BigDecimal.ZERO) <= 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ protected String validateTripDate(IDataModel parentModel) {
|
|
|
+ DynamicObjectCollection parentTripEntry = parentModel.getEntryEntity("tripentry");
|
|
|
+ int parentSize = parentTripEntry.size();
|
|
|
+ Map<Integer, Object> sortMap = new TreeMap();
|
|
|
+ if (parentSize > 0) {
|
|
|
+ parentTripEntry.forEach((entity) -> {
|
|
|
+ if (!sortMap.containsKey(entity.getInt("seq"))) {
|
|
|
+ sortMap.put(entity.getInt("seq") - 1, entity);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ Date startDate = null;
|
|
|
+ Date endDate = null;
|
|
|
+ DynamicObject curTripEntry = this.getModel().getDataEntity();
|
|
|
+ int index = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ if (index == -1) {
|
|
|
+ index = parentSize;
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject lastTripEntry = (DynamicObject)sortMap.get(index - 1);
|
|
|
+ if (lastTripEntry != null) {
|
|
|
+ startDate = curTripEntry.getDate("startdate");
|
|
|
+ endDate = lastTripEntry.getDate("enddate");
|
|
|
+ if (startDate != null && endDate != null && startDate.before(endDate)) {
|
|
|
+ return String.format(ResManager.loadKDString("第%1$s程行程期间不能早于第%2$s程行程期间。", "TripEntryEdit_9", "fi-er-formplugin", new Object[0]), index + 1, index);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject nextTripEntry = (DynamicObject)sortMap.get(index + 1);
|
|
|
+ if (nextTripEntry != null) {
|
|
|
+ endDate = curTripEntry.getDate("enddate");
|
|
|
+ startDate = nextTripEntry.getDate("startdate");
|
|
|
+ if (startDate != null && endDate != null && startDate.before(endDate)) {
|
|
|
+ return String.format(ResManager.loadKDString("第%1$s程行程期间不能晚于第%2$s程行程期间。", "TripEntryEdit_10", "fi-er-formplugin", new Object[0]), index + 1, index + 2);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
|
|
|
+ super.confirmCallBack(messageBoxClosedEvent);
|
|
|
+ String callBackId = messageBoxClosedEvent.getCallBackId();
|
|
|
+ IFormView parentView = this.getView().getParentView();
|
|
|
+ IDataModel parentModel = parentView.getModel();
|
|
|
+ String formId = (String)parentModel.getValue("formid");
|
|
|
+ if (MessageBoxResult.Yes.equals(messageBoxClosedEvent.getResult())) {
|
|
|
+ this.clickOk(this.getModel(), parentView, parentModel, formId);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void clickOk(IDataModel model, IFormView parentView, IDataModel parentModel, String formId) {
|
|
|
+ this.getView().setEnable(false, new String[]{"btnok"});
|
|
|
+ DataEntityPropertyCollection tripEntryProps = parentModel.getDataEntity(true).getDynamicObjectCollection("tripentry").getDynamicObjectType().getProperties();
|
|
|
+ int tripEntryRowIndex = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ DataEntityPropertyCollection properties = model.getDataEntityType().getProperties();
|
|
|
+ Map<String, Object> returnParam = new HashMap();
|
|
|
+ DynamicObjectCollection tripEntry = parentModel.getDataEntity().getDynamicObjectCollection("tripentry");
|
|
|
+ Long oldCurrncy = ErCommonUtils.getPk(parentModel.getValue("currency"));
|
|
|
+ IDataEntityProperty tripamount = (IDataEntityProperty)properties.get("tripamount");
|
|
|
+ IDataEntityProperty triporiamount = (IDataEntityProperty)properties.get("triporiamount");
|
|
|
+ IDataEntityProperty property;
|
|
|
+ int i;
|
|
|
+ if (tripamount != null && triporiamount != null) {
|
|
|
+ IDataEntityProperty first = (IDataEntityProperty)properties.get(0);
|
|
|
+ property = (IDataEntityProperty)properties.get(1);
|
|
|
+ i = properties.indexOf(tripamount);
|
|
|
+ int triporiamountIndex = properties.indexOf(triporiamount);
|
|
|
+ properties.set(0, tripamount);
|
|
|
+ properties.set(1, triporiamount);
|
|
|
+ properties.set(i, first);
|
|
|
+ properties.set(triporiamountIndex, property);
|
|
|
+ }
|
|
|
+
|
|
|
+ int entrySize;
|
|
|
+ int rowIndex;
|
|
|
+ if (tripEntryRowIndex == -1) {
|
|
|
+ if (StringUtils.isNotEmpty(formId)) {
|
|
|
+ entrySize = ErCommonUtils.getExpenseAssumeShowTypes(ErCommonUtils.getPk(parentModel.getValue("company")));
|
|
|
+ if (entrySize != 1 && parentModel.getDataEntity(true).getDynamicObjectCollection("tripentry").isEmpty()) {
|
|
|
+ parentModel.beginInit();
|
|
|
+ parentModel.setValue("costdept", model.getValue("entrycostdept"));
|
|
|
+ parentModel.endInit();
|
|
|
+ parentModel.setValue("costcompany", model.getValue("entrycostcompany"));
|
|
|
+ this.getView().getParentView().updateView("costdept");
|
|
|
+ if (oldCurrncy != ErCommonUtils.getPk(parentModel.getValue("currency"))) {
|
|
|
+ parentView.updateView();
|
|
|
+ this.getView().sendFormAction(parentView);
|
|
|
+ this.getView().close();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!(Boolean)parentModel.getValue("iscurrency")) {
|
|
|
+ model.setValue("tripcurrency", parentModel.getValue("currency"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ rowIndex = parentModel.createNewEntryRow("tripentry");
|
|
|
+ parentModel.setEntryCurrentRowIndex("tripentry", rowIndex);
|
|
|
+ Iterator var23 = properties.iterator();
|
|
|
+
|
|
|
+ while(var23.hasNext()) {
|
|
|
+ property = (IDataEntityProperty)var23.next();
|
|
|
+ if (tripEntry.size() > 0) {
|
|
|
+ String propertyName = property.getName();
|
|
|
+ if (tripEntryProps.get(propertyName) != null) {
|
|
|
+ if ("vehicles".equalsIgnoreCase(propertyName) && ErEntityTypeUtils.isTripReimburseBill(formId)) {
|
|
|
+ String vehicles = (String)model.getValue(propertyName);
|
|
|
+ CoreBaseBillServiceHelper.mulTripVehicle(parentModel, vehicles, rowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ if ("tripexchangerate".equals(propertyName) && properties.containsKey("tripcurrency")) {
|
|
|
+ parentModel.setValue("tripcurrency", ErCommonUtils.getObjectValue(model.getValue("tripcurrency")), rowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ parentModel.setValue(propertyName, ErCommonUtils.getObjectValue(model.getValue(propertyName)), rowIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (tripEntry.size() > 0 && ErEntityTypeUtils.isTripReimburseBill(formId)) {
|
|
|
+ CoreBaseBillServiceHelper.addDefaultTripExpenseEntry(parentModel, rowIndex);
|
|
|
+ this.setExpenseEntryValue(parentModel, model, rowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ returnParam.put("currentTripEntryIndex", rowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ returnParam.put("isUpdate", false);
|
|
|
+ } else if (parentModel.getEntryEntity("tripentry").size() > 0) {
|
|
|
+ if (tripEntryRowIndex == 0) {
|
|
|
+ parentModel.beginInit();
|
|
|
+ parentModel.setValue("costdept", model.getValue("entrycostdept"));
|
|
|
+ parentModel.endInit();
|
|
|
+ Object std_entrycostcenter = model.getValue("std_entrycostcenter");
|
|
|
+ if (std_entrycostcenter != null) {
|
|
|
+ parentModel.setValue("std_costcenter", std_entrycostcenter);
|
|
|
+ }
|
|
|
+
|
|
|
+ parentModel.setValue("costcompany", model.getValue("entrycostcompany"));
|
|
|
+ this.getView().getParentView().updateView("costdept");
|
|
|
+ if (oldCurrncy != ErCommonUtils.getPk(parentModel.getValue("currency"))) {
|
|
|
+ parentView.updateView();
|
|
|
+ this.getView().sendFormAction(parentView);
|
|
|
+ this.getView().close();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Iterator var21 = properties.iterator();
|
|
|
+
|
|
|
+ while(var21.hasNext()) {
|
|
|
+ property = (IDataEntityProperty)var21.next();
|
|
|
+ String propertyName = property.getName();
|
|
|
+ if (parentModel.getEntryEntity("tripentry").size() > 0 && tripEntryProps.get(propertyName) != null) {
|
|
|
+ if ("tripexchangerate".equals(propertyName) && properties.containsKey("tripcurrency")) {
|
|
|
+ parentModel.setValue("tripcurrency", ErCommonUtils.getObjectValue(model.getValue("tripcurrency")), tripEntryRowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ parentModel.setValue(propertyName, ErCommonUtils.getObjectValue(model.getValue(propertyName)), tripEntryRowIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(formId) && parentModel.getEntryEntity("tripentry").size() > 0) {
|
|
|
+ this.setExpenseEntryValue(parentModel, model, tripEntryRowIndex);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (parentModel.getEntryEntity("tripentry").size() > 0) {
|
|
|
+ entrySize = parentModel.getEntryRowCount("entryentity");
|
|
|
+ rowIndex = (Integer)parentModel.getValue("tripday", tripEntryRowIndex);
|
|
|
+
|
|
|
+ for(i = 0; i < entrySize; ++i) {
|
|
|
+ parentModel.setValue("daycount", rowIndex, i, parentModel.getEntryCurrentRowIndex("tripentry"));
|
|
|
+ }
|
|
|
+
|
|
|
+ returnParam.put("isUpdate", true);
|
|
|
+ returnParam.put("currentTripEntryIndex", parentModel.getEntryCurrentRowIndex("tripentry"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ returnParam.put("isOK", true);
|
|
|
+ returnParam.put("startDate", model.getValue("startDate"));
|
|
|
+ returnParam.put("endDate", model.getValue("endDate"));
|
|
|
+ this.getView().returnDataToParent(returnParam);
|
|
|
+ this.getView().sendFormAction(parentView);
|
|
|
+ this.getView().close();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setExpenseEntryValue(IDataModel parentModel, IDataModel dataModel, int rowIndex) {
|
|
|
+ DynamicObject tripEntry = parentModel.getEntryRowEntity("tripentry", rowIndex);
|
|
|
+ int tripDay = tripEntry.getInt("tripday");
|
|
|
+ DynamicObjectCollection tripTravlers = tripEntry.getDynamicObjectCollection("travelers");
|
|
|
+ parentModel.setValue("tripentryarea", ErCommonUtils.getPk(dataModel.getValue("triparea")), rowIndex);
|
|
|
+ DynamicObjectCollection expenseEntry = tripEntry.getDynamicObjectCollection("entryentity");
|
|
|
+ if (expenseEntry != null && !expenseEntry.isEmpty()) {
|
|
|
+ for(int i = 0; i < expenseEntry.size(); ++i) {
|
|
|
+ parentModel.setValue("triparea", ErCommonUtils.getPk(dataModel.getValue("tripArea")), i, rowIndex);
|
|
|
+ parentModel.setValue("daycount", tripDay, i, rowIndex);
|
|
|
+ if (!SettlementTypeEnum.MONTH_SETTLEMENT.getCode().equals(parentModel.getValue("settlementtype", i, rowIndex))) {
|
|
|
+ parentModel.setValue("trip2travelers", tripTravlers, i, rowIndex);
|
|
|
+ parentModel.setValue("trip2travelerscount", tripTravlers == null ? 0 : tripTravlers.size(), i, rowIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ public void propertyChanged(PropertyChangedArgs e) {
|
|
|
+ super.propertyChanged(e);
|
|
|
+ ChangeData[] valueSet = e.getChangeSet();
|
|
|
+ Object propValue = valueSet[0].getNewValue();
|
|
|
+ String propName = e.getProperty().getName();
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ String quoteType;
|
|
|
+ BigDecimal tripOriAmount;
|
|
|
+ BigDecimal exchangeRate;
|
|
|
+ int currencyPrecision;
|
|
|
+ BigDecimal tripAmount;
|
|
|
+ BigDecimal triporiaccappamount;
|
|
|
+ BigDecimal tripaccappamount;
|
|
|
+ Date startDate;
|
|
|
+ Date endDate;
|
|
|
+ Long tripDays;
|
|
|
+ switch (propName) {
|
|
|
+ case "tripcurrency":
|
|
|
+ if (propValue == null) {
|
|
|
+ model.setValue("tripcurrency", ErCommonUtils.getPk(valueSet[0].getOldValue()));
|
|
|
+ }
|
|
|
+
|
|
|
+ this.showExchangeRate(true);
|
|
|
+ BigDecimal tripEntryAmount = (BigDecimal)this.getModel().getValue("triporiamount");
|
|
|
+ this.getModel().setValue("triporiamount", BigDecimal.ZERO);
|
|
|
+ this.getModel().setValue("triporiamount", tripEntryAmount);
|
|
|
+ break;
|
|
|
+ case "triporiamount":
|
|
|
+ quoteType = this.getModel().getProperty("tripquotetype") == null ? "0" : (String)ObjectUtils.defaultIfNull((String)this.getModel().getValue("tripquotetype"), "0");
|
|
|
+ tripOriAmount = (BigDecimal)propValue;
|
|
|
+ exchangeRate = (BigDecimal)ObjectUtils.defaultIfNull((BigDecimal)model.getValue("tripexchangerate"), BigDecimal.ONE);
|
|
|
+ currencyPrecision = AmountUtils.getCurrencyPrecision(model, "currency");
|
|
|
+ tripAmount = AmountUtils.getCurrencyAmount(tripOriAmount, exchangeRate, currencyPrecision, quoteType);
|
|
|
+ model.setValue("tripamount", tripAmount);
|
|
|
+ model.setValue("triporiaccappamount", tripOriAmount);
|
|
|
+ model.setValue("tripaccappamount", tripAmount);
|
|
|
+ break;
|
|
|
+ case "triporiaccappamount":
|
|
|
+ quoteType = this.getModel().getProperty("tripquotetype") == null ? "0" : (String)ObjectUtils.defaultIfNull((String)this.getModel().getValue("tripquotetype"), "0");
|
|
|
+ triporiaccappamount = (BigDecimal)propValue;
|
|
|
+ BigDecimal triporiamount = (BigDecimal)model.getValue("triporiamount");
|
|
|
+ if (triporiaccappamount.compareTo(triporiamount) > 0) {
|
|
|
+ triporiaccappamount = triporiamount;
|
|
|
+ model.setValue("triporiaccappamount", triporiamount);
|
|
|
+ }
|
|
|
+
|
|
|
+ currencyPrecision = AmountUtils.getCurrencyPrecision(model, "currency");
|
|
|
+ BigDecimal changeRate = (BigDecimal)ObjectUtils.defaultIfNull((BigDecimal)model.getValue("tripexchangerate"), BigDecimal.ONE);
|
|
|
+ if (changeRate == null) {
|
|
|
+ changeRate = BigDecimal.ONE;
|
|
|
+ }
|
|
|
+
|
|
|
+ tripaccappamount = AmountUtils.getCurrencyAmount(triporiaccappamount, changeRate, currencyPrecision, quoteType);
|
|
|
+ model.setValue("tripaccappamount", tripaccappamount);
|
|
|
+ break;
|
|
|
+ case "tripexchangerate":
|
|
|
+ quoteType = this.getModel().getProperty("tripquotetype") == null ? "0" : (String)ObjectUtils.defaultIfNull((String)this.getModel().getValue("tripquotetype"), "0");
|
|
|
+ exchangeRate = (BigDecimal)ObjectUtils.defaultIfNull((BigDecimal)propValue, BigDecimal.ONE);
|
|
|
+ tripOriAmount = (BigDecimal)model.getValue("triporiamount");
|
|
|
+ triporiaccappamount = (BigDecimal)model.getValue("triporiaccappamount");
|
|
|
+ currencyPrecision = AmountUtils.getCurrencyPrecision(model, "currency");
|
|
|
+ tripAmount = AmountUtils.getCurrencyAmount(tripOriAmount, exchangeRate, currencyPrecision, quoteType);
|
|
|
+ tripaccappamount = AmountUtils.getCurrencyAmount(triporiaccappamount, exchangeRate, currencyPrecision, quoteType);
|
|
|
+ model.setValue("tripamount", tripAmount);
|
|
|
+ model.setValue("tripaccappamount", tripaccappamount);
|
|
|
+ break;
|
|
|
+ case "startdate":
|
|
|
+ startDate = (Date)propValue;
|
|
|
+ endDate = (Date)model.getValue("enddate");
|
|
|
+ tripDays = CommonServiceHelper.calcDays(startDate, endDate);
|
|
|
+ model.setValue("tripday", tripDays);
|
|
|
+ if (startDate != null && model.getValue("triphappendate") == null) {
|
|
|
+ model.setValue("triphappendate", startDate);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "enddate":
|
|
|
+ endDate = (Date)propValue;
|
|
|
+ startDate = (Date)model.getValue("startdate");
|
|
|
+ tripDays = CommonServiceHelper.calcDays(startDate, endDate);
|
|
|
+ model.setValue("tripday", tripDays);
|
|
|
+ break;
|
|
|
+ case "to":
|
|
|
+ DynamicObject to = (DynamicObject)propValue;
|
|
|
+ if (to != null) {
|
|
|
+ IDataModel parentModel = this.getView().getParentView().getModel();
|
|
|
+ DynamicObject company = (DynamicObject)parentModel.getValue("company");
|
|
|
+ Long toCityId = (Long)to.getPkValue();
|
|
|
+ Long companyId = (Long)company.getPkValue();
|
|
|
+ MainEntityType dataEntityType = model.getDataEntityType();
|
|
|
+ String orgProp = ((BasedataProp)dataEntityType.getProperty("triparea")).getOrgProp();
|
|
|
+ ErCommonUtils.getPk(parentModel.getValue(orgProp));
|
|
|
+ IErTripStdService stdService = new ErTripStdServiceImp();
|
|
|
+ DynamicObject tripArea = stdService.getTripAreaByCityIdAndCompanyId(toCityId, ErCommonUtils.getPk(parentModel.getValue(orgProp)));
|
|
|
+ if (tripArea != null) {
|
|
|
+ model.setValue("triparea", tripArea.getPkValue());
|
|
|
+ } else {
|
|
|
+ model.setValue("triparea", (Object)null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "entrycostdept":
|
|
|
+ if (propValue == null) {
|
|
|
+ propValue = valueSet[0].getOldValue();
|
|
|
+ this.getModel().setValue("entrycostdept", ErCommonUtils.getPk(propValue));
|
|
|
+ }
|
|
|
+
|
|
|
+ String costDeptShowType = CommonServiceHelper.getBillCostOrgShowType(this.getView());
|
|
|
+ if (!StringUtils.equals("3", costDeptShowType)) {
|
|
|
+ this.costDeptChange((DynamicObject)propValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ DynamicObject expenseItem = (DynamicObject)model.getValue("tripexpenseitem");
|
|
|
+ log.info("当前 costDeptShowType" + costDeptShowType);
|
|
|
+ log.info("当前 getPageCache" + BudgetCommonUtil.getIsQueryBudgetFlag(this.getPageCache()));
|
|
|
+ if (expenseItem != null && "2".equals(costDeptShowType) && BudgetCommonUtil.getIsQueryBudgetFlag(this.getPageCache())) {
|
|
|
+ BudgetCommonUtil.buildBudgetAmountField(this.getView(), 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.checkExpenseItem(propValue, model);
|
|
|
+ break;
|
|
|
+ case "entrycostcompany":
|
|
|
+ if (propValue == null && valueSet[0].getOldValue() != null) {
|
|
|
+ this.getModel().setValue("entrycostcompany", valueSet[0].getOldValue());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "tripexpenseitem":
|
|
|
+ if (BudgetCommonUtil.getIsQueryBudgetFlag(this.getPageCache()) && propValue != null) {
|
|
|
+ BudgetCommonUtil.buildBudgetAmountField(this.getView(), 0);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "std_project":
|
|
|
+ if (BudgetCommonUtil.getIsQueryBudgetFlag(this.getPageCache())) {
|
|
|
+ BudgetCommonUtil.buildBudgetAmountField(this.getView(), 0);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "vehicle":
|
|
|
+ if (this.getVihicleFromStdConfig()) {
|
|
|
+ this.getModel().setValue("vehicles", propValue);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "std_entrycostcenter":
|
|
|
+ if (propValue != null && propValue != "") {
|
|
|
+ ErCostCenterUtil.costCenterChangeForTripEdit(this.getView(), propValue);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void checkExpenseItem(Object propValue, IDataModel model) {
|
|
|
+ if (propValue != null) {
|
|
|
+ Set<Long> exceptRelExpItems = ExpenseItemServiceHelper.getNotRelOrgExpItemIds((Long)((DynamicObject)propValue).getPkValue());
|
|
|
+ DynamicObject tripExpenseItem = (DynamicObject)this.getModel().getValue("tripexpenseitem");
|
|
|
+ if (tripExpenseItem != null && exceptRelExpItems.contains(tripExpenseItem.getLong("id"))) {
|
|
|
+ model.setValue("tripexpenseitem", (Object)null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ protected void costDeptChange(DynamicObject entryCostDept) {
|
|
|
+ if (entryCostDept != null) {
|
|
|
+ DynamicObject company = (DynamicObject)this.getModel().getValue("company");
|
|
|
+ DynamicObject costCompany = (DynamicObject)this.getModel().getValue("entrycostcompany");
|
|
|
+ CostDeptF7ChangePram costDeptF7ChangePram = new CostDeptF7ChangePram(Boolean.TRUE, entryCostDept, costCompany, company);
|
|
|
+ Long costCompanyId = CoreBaseBillServiceHelper.getAccountOrgId(costDeptF7ChangePram);
|
|
|
+ this.getModel().setValue("entrycostcompany", costCompanyId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void showExchangeRate(boolean refreshExchangeRate) {
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ IDataModel parentModel = this.getView().getParentView().getModel();
|
|
|
+ DynamicObject tripCurrency = (DynamicObject)model.getValue("tripcurrency");
|
|
|
+ DynamicObject currency = (DynamicObject)parentModel.getValue("currency");
|
|
|
+ boolean showExchangeRate = tripCurrency != null && currency != null && !tripCurrency.getPkValue().equals(currency.getPkValue());
|
|
|
+ this.getView().setVisible(showExchangeRate, new String[]{"tripexchangerate", "tripamount"});
|
|
|
+ String quoteType = "0";
|
|
|
+ if (refreshExchangeRate) {
|
|
|
+ BigDecimal exchangeRate = BigDecimal.ONE;
|
|
|
+ if (tripCurrency != null && currency != null) {
|
|
|
+ long sourceCurrencyId = tripCurrency.getLong("id");
|
|
|
+ long targetCurrencyId = currency.getLong("id");
|
|
|
+ long companyId = (Long)parentModel.getValue("company_Id");
|
|
|
+ Map<String, Object> exchangeRateAndQuoteType = CommonServiceHelper.getExchangeRateFromSysParams(companyId, parentModel.getValue("costcompany"), sourceCurrencyId, targetCurrencyId, model);
|
|
|
+ quoteType = (String)ObjectUtils.defaultIfNull((String)exchangeRateAndQuoteType.get("quoteType"), "0");
|
|
|
+ exchangeRate = (BigDecimal)ObjectUtils.defaultIfNull((BigDecimal)exchangeRateAndQuoteType.get("exchangeRate"), BigDecimal.ONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (this.getModel().getProperty("tripquotetype") != null) {
|
|
|
+ this.getModel().setValue("tripquotetype", quoteType);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getModel().setValue("tripexchangerate", exchangeRate);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setTripDateControl() {
|
|
|
+ IDataModel pModel = this.getView().getParentView().getModel();
|
|
|
+ DateRangeEdit tripDate = (DateRangeEdit)this.getControl("tirpdate");
|
|
|
+ String entryName = pModel.getDataEntityType().getName();
|
|
|
+ LocalDate now = LocalDate.now();
|
|
|
+ Long companyId = ErCommonUtils.getPk(pModel.getValue("company"));
|
|
|
+ if (ErEntityTypeUtils.isTripReqBill(entryName) && StringUtils.equals("1", ErCommonUtils.getTripDateSelectRange(companyId))) {
|
|
|
+ tripDate.setMinDate(ErCommonUtils.getDateFromLocalDate(now));
|
|
|
+ } else {
|
|
|
+ if (ErEntityTypeUtils.isTripReimburseBill(entryName) && StringUtils.equals("0", SystemParamterUtil.getTripReimDateSelectRange(companyId))) {
|
|
|
+ tripDate.setMaxDate(ErCommonUtils.getDateFromLocalDate(now));
|
|
|
+ }
|
|
|
+
|
|
|
+ if (pModel.getProperty("isopentripstd") != null) {
|
|
|
+ Object company = pModel.getValue("company");
|
|
|
+ if ((!(Boolean)pModel.getValue("istravelers") || (Boolean)pModel.getValue("travelerssamestd")) && SystemParamterUtil.isOpenTripDateControl(ErCommonUtils.getPk(company)) && (Boolean)pModel.getValue("isopentripstd") && pModel.getEntryRowCount("tripentry") != 0) {
|
|
|
+ int currentIndex = Integer.parseInt(this.getPageCache().get("tripEntryRowIndex"));
|
|
|
+ currentIndex = currentIndex == -1 ? pModel.getEntryRowCount("tripentry") - 1 : currentIndex - 1;
|
|
|
+ DynamicObjectCollection tripEntry = pModel.getDataEntity(true).getDynamicObjectCollection("tripentry");
|
|
|
+ if (currentIndex >= 0 && tripEntry.size() != 0) {
|
|
|
+ DynamicObject preRow = (DynamicObject)tripEntry.get(currentIndex);
|
|
|
+ Date minDate = preRow.getDate("enddate");
|
|
|
+ tripDate.setMinDate(minDate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|