|
@@ -0,0 +1,171 @@
|
|
|
+package nckd.wnq01.wnq.scm.plugin.form;
|
|
|
+
|
|
|
+import kd.bos.bill.AbstractBillPlugIn;
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
+import kd.bos.dataentity.entity.DynamicObjectCollection;
|
|
|
+import kd.bos.entity.datamodel.IDataModel;
|
|
|
+import kd.bos.entity.datamodel.events.ChangeData;
|
|
|
+import kd.bos.entity.datamodel.events.PropertyChangedArgs;
|
|
|
+import kd.bos.form.field.events.BeforeF7SelectEvent;
|
|
|
+import kd.bos.form.field.events.BeforeF7SelectListener;
|
|
|
+import kd.bos.orm.query.QCP;
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
+import kd.bos.util.StringUtils;
|
|
|
+import java.math.BigDecimal;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 插件说明:
|
|
|
+ * 表单标识:工程预报单(nckd_engineerrpeort)
|
|
|
+ * @author wanghaiwu_kd
|
|
|
+ * @date 2025/03/03
|
|
|
+ */
|
|
|
+public class EngineerReportEditPlugin extends AbstractBillPlugIn implements BeforeF7SelectListener {
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void beforeF7Select(BeforeF7SelectEvent beforeF7SelectEvent) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void propertyChanged(PropertyChangedArgs e) {
|
|
|
+ super.propertyChanged(e);
|
|
|
+
|
|
|
+ String key = e.getProperty().getName();
|
|
|
+
|
|
|
+ //销售组织、区域、销售类别、水泥品种、价格档位
|
|
|
+ if("org".equals(key)
|
|
|
+ || "nckd_qy".equals(key)
|
|
|
+ || "nckd_saletype".equals(key)
|
|
|
+ || "nckd_esmaterail".equals(key)
|
|
|
+ || "nckd_espricelevel".equals(key)){
|
|
|
+ setEntrySalePrice(e);
|
|
|
+ }
|
|
|
+ //价格、调整幅度
|
|
|
+ else if("nckd_esprice".equals(key)
|
|
|
+ || "nckd_espriceadj".equals(key)){
|
|
|
+ ChangeData[] changeValue = e.getChangeSet();
|
|
|
+ int changeRow = changeValue[0].getRowIndex();
|
|
|
+
|
|
|
+ BigDecimal price = (BigDecimal) this.getModel().getValue("nckd_esprice", changeRow);
|
|
|
+ BigDecimal priceaj = (BigDecimal) this.getModel().getValue("nckd_espriceadj", changeRow);
|
|
|
+
|
|
|
+ this.getModel().setValue("nckd_esauditprice", price.add(priceaj), changeRow);
|
|
|
+
|
|
|
+ this.getView().updateView("nckd_saleentry");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setEntrySalePrice(PropertyChangedArgs e){
|
|
|
+ ChangeData[] changeValue = e.getChangeSet();
|
|
|
+ int changeRow = changeValue[0].getRowIndex();
|
|
|
+
|
|
|
+ IDataModel model = this.getModel();
|
|
|
+ DynamicObject saleOrg = (DynamicObject) model.getValue("org");
|
|
|
+ DynamicObject qy = (DynamicObject) model.getValue("nckd_qy");
|
|
|
+ DynamicObject saleType = (DynamicObject) model.getValue("nckd_saletype");
|
|
|
+ DynamicObject bigSaleType = null;
|
|
|
+ if(saleType != null) {
|
|
|
+ saleType = BusinessDataServiceHelper.loadSingle(saleType.getPkValue(), "nckd_saletype");
|
|
|
+ bigSaleType = saleType.getDynamicObject("nckd_salebigtype");
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getModel().beginInit();
|
|
|
+
|
|
|
+ if(changeRow >= 0){//分录修改
|
|
|
+ model.setValue("nckd_esprice", BigDecimal.ZERO, changeRow);
|
|
|
+ model.setValue("nckd_esauditprice", BigDecimal.ZERO, changeRow);
|
|
|
+
|
|
|
+ DynamicObject material = (DynamicObject) model.getValue("nckd_esmaterail", changeRow);
|
|
|
+ String priceLevel = (String) model.getValue("nckd_espricelevel");
|
|
|
+
|
|
|
+ if(saleOrg != null && qy != null && saleType != null && material != null
|
|
|
+ && StringUtils.isNotEmpty(priceLevel)){
|
|
|
+ QFilter qFilter = new QFilter("nckd_saleorg", QCP.equals, saleOrg.getPkValue());
|
|
|
+ qFilter.and(new QFilter("nckd_qy", QCP.equals, qy.getPkValue()));
|
|
|
+ qFilter.and(new QFilter("nckd_salebigtyp", QCP.equals, bigSaleType.getPkValue()));
|
|
|
+ qFilter.and(new QFilter("nckd_material", QCP.equals, material.getPkValue()));
|
|
|
+
|
|
|
+ DynamicObject[] priceArray = BusinessDataServiceHelper.load("nckd_salepricelevel", "nckd_price", qFilter.toArray(), "nckd_price");
|
|
|
+ BigDecimal price = BigDecimal.ZERO;
|
|
|
+ if(priceArray.length > 0){
|
|
|
+ price = getLevelPrice(priceArray, priceLevel);
|
|
|
+ }
|
|
|
+ BigDecimal priceaj = (BigDecimal) model.getValue("nckd_espriceadj", changeRow);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ model.setValue("nckd_esprice", price, changeRow);
|
|
|
+ model.setValue("nckd_esauditprice", price.add(priceaj), changeRow);
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ DynamicObjectCollection saleentry = this.getModel().getEntryEntity("nckd_saleentry");
|
|
|
+
|
|
|
+ int rowIndex = -1;
|
|
|
+
|
|
|
+ //表头字段修改,分录全部重新获取一遍价格
|
|
|
+ for(DynamicObject entry : saleentry){
|
|
|
+ rowIndex++;
|
|
|
+
|
|
|
+ model.setValue("nckd_esprice", BigDecimal.ZERO, rowIndex);
|
|
|
+ model.setValue("nckd_esauditprice", BigDecimal.ZERO, rowIndex);
|
|
|
+
|
|
|
+ DynamicObject material = entry.getDynamicObject("nckd_esmaterail");
|
|
|
+ String priceLevel = entry.getString("nckd_espricelevel");
|
|
|
+
|
|
|
+ if(saleOrg != null && qy != null && saleType != null && material != null
|
|
|
+ && StringUtils.isNotEmpty(priceLevel)){
|
|
|
+ QFilter qFilter = new QFilter("nckd_saleorg", QCP.equals, saleOrg.getPkValue());
|
|
|
+ qFilter.and(new QFilter("nckd_qy", QCP.equals, qy.getPkValue()));
|
|
|
+ qFilter.and(new QFilter("nckd_salebigtyp", QCP.equals, bigSaleType.getPkValue()));
|
|
|
+ qFilter.and(new QFilter("nckd_material", QCP.equals, material.getPkValue()));
|
|
|
+
|
|
|
+ DynamicObject[] priceArray = BusinessDataServiceHelper.load("nckd_salepricelevel", "nckd_price", qFilter.toArray(), "nckd_price");
|
|
|
+ BigDecimal price = BigDecimal.ZERO;
|
|
|
+ if(priceArray.length > 0){
|
|
|
+ price = getLevelPrice(priceArray, priceLevel);
|
|
|
+ }
|
|
|
+ BigDecimal priceaj = (BigDecimal) model.getValue("nckd_espriceadj", rowIndex);
|
|
|
+
|
|
|
+ model.setValue("nckd_esprice", price, rowIndex);
|
|
|
+ model.setValue("nckd_esauditprice", price.add(priceaj), rowIndex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.getModel().endInit();
|
|
|
+
|
|
|
+ this.getView().updateView("nckd_saleentry");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private BigDecimal getLevelPrice(DynamicObject[] priceArray, String priceLevel){
|
|
|
+ BigDecimal price = BigDecimal.ZERO;
|
|
|
+
|
|
|
+ int level = 0;
|
|
|
+ if("one".equals(priceLevel)){
|
|
|
+ level = 1;
|
|
|
+ } else if("tow".equals(priceLevel)){
|
|
|
+ level = 2;
|
|
|
+ } else if("three".equals(priceLevel)){
|
|
|
+ level = 3;
|
|
|
+ } else if("four".equals(priceLevel)){
|
|
|
+ level = 4;
|
|
|
+ }
|
|
|
+
|
|
|
+ int i = 0;
|
|
|
+
|
|
|
+ for(DynamicObject data : priceArray){
|
|
|
+ i++;
|
|
|
+
|
|
|
+ if(level == i){
|
|
|
+ price = data.getBigDecimal("nckd_price");
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return price;
|
|
|
+ }
|
|
|
+}
|