FinapbillBeforeF7SelectSample.java 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. package fi.er.opplugin;
  2. import com.alibaba.druid.util.StringUtils;
  3. import kd.bos.dataentity.entity.DynamicObject;
  4. import kd.bos.dataentity.entity.DynamicObjectCollection;
  5. import kd.bos.entity.datamodel.events.ChangeData;
  6. import kd.bos.entity.datamodel.events.PropertyChangedArgs;
  7. import kd.bos.form.field.RefBillEdit;
  8. import kd.bos.form.field.events.BeforeF7SelectEvent;
  9. import kd.bos.form.field.events.BeforeF7SelectListener;
  10. import kd.bos.form.plugin.AbstractFormPlugin;
  11. import kd.bos.list.ListShowParameter;
  12. import kd.bos.orm.query.QCP;
  13. import kd.bos.orm.query.QFilter;
  14. import kd.bos.servicehelper.BusinessDataServiceHelper;
  15. import java.math.BigDecimal;
  16. import java.math.RoundingMode;
  17. import java.util.ArrayList;
  18. import java.util.Date;
  19. import java.util.EventObject;
  20. import java.util.List;
  21. public class FinapbillBeforeF7SelectSample extends AbstractFormPlugin implements BeforeF7SelectListener {
  22. private static String nckd_apfinapbill = "nckd_apfinapbill"; //应付挂账单字段
  23. private static String nckd_real_card = "assetentry.nckd_real_card"; //应付挂账单字段
  24. private static String nckd_ap_finapbill_gz = "ap_finapbill"; //应付挂账单标识
  25. private static String nckd_er_publicreimbur_ext = "er_publicreimbursebill"; //报销单标识
  26. @Override
  27. public void registerListener(EventObject e) {
  28. //监听单据字段
  29. super.registerListener(e);
  30. RefBillEdit bill = this.getView().getControl(nckd_apfinapbill);
  31. bill.addBeforeF7SelectListener(this);
  32. }
  33. @Override
  34. public void beforeF7Select(BeforeF7SelectEvent arg0) {
  35. String fieldKey = arg0.getProperty().getName();
  36. if (StringUtils.equals(fieldKey, nckd_apfinapbill)){
  37. // 生成过滤条件对象QFilter
  38. Object nckd_sourcebillid = this.getModel().getValue("nckd_sourcebillid");
  39. if (nckd_sourcebillid != null) {
  40. //查询暂估报销单
  41. String sourcebillid = String.valueOf(nckd_sourcebillid);
  42. QFilter filter = new QFilter("nckd_sourcebillid", QCP.equals,sourcebillid);
  43. filter.and("nckd_ywlx", QCP.equals, "2");
  44. DynamicObject[] bxDynamicObjects = BusinessDataServiceHelper.load(nckd_er_publicreimbur_ext,"id",new QFilter[] {filter});
  45. if (bxDynamicObjects.length > 0) {
  46. DynamicObject bxInfo = BusinessDataServiceHelper.loadSingle(bxDynamicObjects[0].getPkValue(), bxDynamicObjects[0].getDynamicObjectType().getName());
  47. Long id = bxInfo.getLong("id");
  48. QFilter qFilter = new QFilter("sourcebillid", QCP.equals,id);
  49. // 表过滤条件
  50. ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
  51. showParameter.getListFilterParameter().setFilter(qFilter);
  52. }
  53. }else {
  54. //选取不到应付挂账单
  55. QFilter qFilter = new QFilter("id", QCP.equals,null);
  56. // 表过滤条件
  57. ListShowParameter showParameter = (ListShowParameter)arg0.getFormShowParameter();
  58. showParameter.getListFilterParameter().setFilter(qFilter);
  59. }
  60. }
  61. }
  62. @Override
  63. public void propertyChanged(PropertyChangedArgs e) {
  64. //报账类型
  65. String reimbursetype = (String) this.getModel().getValue("reimbursetype");
  66. String fieldKey = e.getProperty().getName();
  67. if (StringUtils.equals("nckd_real_card", fieldKey)){
  68. ChangeData changeData = e.getChangeSet()[0];
  69. DynamicObjectCollection dynamicObjectCollection = (DynamicObjectCollection) changeData.getNewValue();
  70. List<Long> ids = new ArrayList<>();
  71. Integer index = 0;
  72. for(DynamicObject object : dynamicObjectCollection) {
  73. Long id = (Long) object.get(2);
  74. ids.add(id);
  75. this.getModel().setValue("nckd_card_list_str","1");
  76. }
  77. //查询实物卡片清单
  78. QFilter filter = new QFilter("id", QCP.in,ids);
  79. DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("nckd_fa_card_real_list","id",new QFilter[] {filter});
  80. if (dynamicObjects.length > 0) {
  81. this.getModel().deleteEntryData("nckd_realcard_list");
  82. for (int i = 0; i < dynamicObjects.length; i++) {
  83. DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[i].getPkValue(), dynamicObjects[i].getDynamicObjectType().getName());
  84. String number = info.getString("number");//资产编码
  85. String name = info.getString("name");//资产名称
  86. String nckd_card_type = info.getString("nckd_card_type");//资产类别
  87. String nckd_card_status = info.getString("nckd_card_status");//资产状态
  88. DynamicObject nckd_orgfield = info.getDynamicObject("nckd_orgfield");//归属机构
  89. DynamicObject nckd_dept = info.getDynamicObject("nckd_dept");//归属部门
  90. String nckd_use_name = info.getString("nckd_use_name");//使用人
  91. Date nckd_start_date = info.getDate("nckd_start_date");//开始使用日期
  92. String nckd_local = info.getString("nckd_local");//存放地点
  93. String nckd_card_brand = info.getString("nckd_card_brand");//品牌
  94. String nckd_card_model = info.getString("nckd_card_model");//型号
  95. String nckd_serial_number = info.getString("nckd_serial_number");//序列号
  96. //实物卡片清单分录赋值
  97. int rowIndex = this.getModel().createNewEntryRow("nckd_realcard_list");
  98. this.getModel().setValue("nckd_card_code",number,rowIndex);
  99. this.getModel().setValue("nckd_card_name",name,rowIndex);
  100. this.getModel().setValue("nckd_card_type",nckd_card_type,rowIndex);
  101. this.getModel().setValue("nckd_card_status",nckd_card_status,rowIndex);
  102. this.getModel().setValue("nckd_orgfield",nckd_orgfield,rowIndex);
  103. this.getModel().setValue("nckd_dept",nckd_dept,rowIndex);
  104. this.getModel().setValue("nckd_use_name",nckd_use_name,rowIndex);
  105. this.getModel().setValue("nckd_start_date",nckd_start_date,rowIndex);
  106. this.getModel().setValue("nckd_local",nckd_local,rowIndex);
  107. this.getModel().setValue("nckd_card_brand",nckd_card_brand,rowIndex);
  108. this.getModel().setValue("nckd_card_model",nckd_card_model,rowIndex);
  109. this.getModel().setValue("nckd_serial_number",nckd_serial_number,rowIndex);
  110. if (index.equals(0)) {
  111. //资产信息分录赋值
  112. this.getModel().setValue("asset_name",name);
  113. //资产类别赋值
  114. //规格型号
  115. this.getModel().setValue("asset_model",nckd_card_model);
  116. //使用部门
  117. this.getModel().setValue("asset_costdept",nckd_dept);
  118. //使用人
  119. //根据姓名name查询用户,工号是number
  120. QFilter userFilter = new QFilter("name", QCP.equals,nckd_use_name);
  121. DynamicObject[] userDynamicObjects = BusinessDataServiceHelper.load("bos_user","id",new QFilter[] {userFilter});
  122. for (int d=0;d<userDynamicObjects.length;d++) {
  123. DynamicObject userInfo = BusinessDataServiceHelper.loadSingle(userDynamicObjects[i].getPkValue(), userDynamicObjects[i].getDynamicObjectType().getName());
  124. this.getModel().setValue("asset_user",userInfo);
  125. }
  126. //存放地点
  127. }
  128. index++;
  129. }
  130. //刷新实物卡片清单分录
  131. this.getView().updateView("nckd_realcard_list");
  132. this.getView().updateView("assetentry");
  133. }
  134. } else if (StringUtils.equals("nckd_apfinapbill", fieldKey)) {
  135. ChangeData changeData = e.getChangeSet()[0];
  136. DynamicObject dynamicObject = (DynamicObject) changeData.getNewValue();
  137. if (dynamicObject != null) {
  138. Long id = dynamicObject.getLong("id");
  139. //查询应付挂账
  140. QFilter filter = new QFilter("id", QCP.equals,id);
  141. DynamicObject[] yfgzDynamicObjects = BusinessDataServiceHelper.load(nckd_ap_finapbill_gz,"id",new QFilter[] {filter});
  142. DynamicObject gzInfo = BusinessDataServiceHelper.loadSingle(yfgzDynamicObjects[0].getPkValue(), yfgzDynamicObjects[0].getDynamicObjectType().getName());
  143. String billno = gzInfo.getString("billno");//单据编号
  144. DynamicObject org = gzInfo.getDynamicObject("org");//结算组织
  145. DynamicObject detailentry = gzInfo.getDynamicObjectCollection("detailentry").get(0);
  146. DynamicObject expenseitem = detailentry.getDynamicObject("expenseitem");//费用项目
  147. DynamicObject receivingsupplierid = gzInfo.getDynamicObject("receivingsupplierid");//供应商
  148. Date bookdate = gzInfo.getDate("bookdate");
  149. String remark = gzInfo.getString("remark");
  150. BigDecimal pricetaxtotal = gzInfo.getBigDecimal("pricetaxtotal");
  151. //给冲预付借款赋值
  152. int rowIndex = this.getModel().createNewEntryRow("writeoffmoney");
  153. this.getModel().setValue("loanbillnov1",billno,rowIndex);
  154. this.getModel().setValue("sourceentrycostdept",org,rowIndex);
  155. this.getModel().setValue("sourceentrycostcompany",org,rowIndex);
  156. this.getModel().setValue("sourceexpenseitem",expenseitem,rowIndex);
  157. this.getModel().setValue("srcentrywlunit",receivingsupplierid,rowIndex);
  158. this.getModel().setValue("loanapplydatev1",bookdate,rowIndex);
  159. this.getModel().setValue("loandescriptionv1",remark,rowIndex);
  160. this.getModel().setValue("loanamount",pricetaxtotal,rowIndex);
  161. this.getModel().setValue("accloanamount",pricetaxtotal,rowIndex);
  162. this.getModel().setValue("currloanamount",pricetaxtotal,rowIndex);
  163. this.getModel().setValue("curraccloanamount",pricetaxtotal,rowIndex);
  164. //刷新冲预付借款分录
  165. this.getView().updateView("writeoffmoney");
  166. }
  167. }//资产组织变更
  168. else if (StringUtils.equals("assetorg", fieldKey)) {
  169. ChangeData changeData = e.getChangeSet()[0];
  170. DynamicObject dynamicObject = (DynamicObject) changeData.getNewValue();
  171. Long id = dynamicObject.getLong("id");
  172. //查询组织
  173. QFilter filter = new QFilter("id", QCP.equals,id);
  174. DynamicObject[] orgDynamicObjects = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {filter});
  175. DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(orgDynamicObjects[0].getPkValue(), orgDynamicObjects[0].getDynamicObjectType().getName());
  176. //获取资产信息分录
  177. DynamicObjectCollection assetentry = this.getModel().getEntryEntity("assetentry");
  178. for (int i = 0; i < assetentry.size(); i++) {
  179. //给分录核算组织,使用部门赋值
  180. this.getModel().setValue("nckd_orgfield1", orgInfo, i);
  181. this.getModel().setValue("asset_costdept", orgInfo, i);
  182. }
  183. //刷新资产信息分录
  184. this.getView().updateView("assetentry");
  185. } //资产信息分录-核算组织变更
  186. else if (StringUtils.equals("nckd_orgfield1", fieldKey)) {
  187. ChangeData changeData = e.getChangeSet()[0];
  188. DynamicObject dynamicObject = (DynamicObject) changeData.getNewValue();
  189. Long id = dynamicObject.getLong("id");
  190. //查询组织
  191. QFilter filter = new QFilter("id", QCP.equals,id);
  192. DynamicObject[] orgDynamicObjects = BusinessDataServiceHelper.load("bos_org","id",new QFilter[] {filter});
  193. DynamicObject orgInfo = BusinessDataServiceHelper.loadSingle(orgDynamicObjects[0].getPkValue(), orgDynamicObjects[0].getDynamicObjectType().getName());
  194. //获取资产信息分录
  195. DynamicObjectCollection assetentry = this.getModel().getEntryEntity("assetentry");
  196. //给分录核算组织,使用部门赋值
  197. this.getModel().setValue("nckd_orgfield1", orgInfo, e.getChangeSet()[0].getRowIndex());
  198. this.getModel().setValue("asset_costdept", orgInfo, e.getChangeSet()[0].getRowIndex());
  199. //刷新资产信息分录
  200. this.getView().updateView("assetentry");
  201. } else if (StringUtils.equals("expenseamount", fieldKey) || StringUtils.equals("nckd_amountfield3", fieldKey)) {
  202. String reimbursetype = (String) this.getModel().getValue("reimbursetype");
  203. if("asset".equals(reimbursetype)) {
  204. ChangeData changeData = e.getChangeSet()[0];
  205. BigDecimal expenseamount = (BigDecimal) changeData.getNewValue();
  206. this.getModel().setValue("nckd_amountfield3", expenseamount);//含税单价
  207. //含税金额 = 含税单价*数量
  208. BigDecimal asset_quantity = (BigDecimal) this.getModel().getValue("asset_quantity");
  209. BigDecimal assetexpenseamount = expenseamount.multiply(asset_quantity);
  210. this.getModel().setValue("assetexpenseamount", assetexpenseamount);
  211. //不含税单价 = 含税单价/(1+税率)
  212. BigDecimal assettaxrate = (BigDecimal) this.getModel().getValue("assettaxrate");
  213. assettaxrate = assettaxrate.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
  214. BigDecimal rate = assettaxrate.add(BigDecimal.ONE);
  215. BigDecimal assetpricewithouttax = expenseamount.divide(rate, 2 , RoundingMode.HALF_UP);
  216. this.getModel().setValue("assetpricewithouttax", assetpricewithouttax);
  217. //不含税金额 = 不含税单价*数量
  218. BigDecimal assetorientryamount = assetpricewithouttax.multiply(asset_quantity);
  219. this.getModel().setValue("assetorientryamount", assetorientryamount);
  220. //税额 = 含税金额-不含税金额
  221. BigDecimal assettaxamount = assetexpenseamount.subtract(assetorientryamount);
  222. this.getModel().setValue("assettaxamount", assettaxamount);
  223. }
  224. } else if (StringUtils.equals("taxrate", fieldKey) || StringUtils.equals("assettaxrate", fieldKey)) {
  225. ChangeData changeData = e.getChangeSet()[0];
  226. BigDecimal assettaxrate = (BigDecimal) changeData.getNewValue();
  227. this.getModel().setValue("assettaxrate", assettaxrate);//税率
  228. //含税金额 = 含税单价 * 数量
  229. BigDecimal nckd_amountfield3 = (BigDecimal) this.getModel().getValue("nckd_amountfield3");
  230. BigDecimal asset_quantity = (BigDecimal) this.getModel().getValue("asset_quantity");
  231. BigDecimal assetexpenseamount = nckd_amountfield3.multiply(asset_quantity);
  232. this.getModel().setValue("assetexpenseamount", assetexpenseamount);
  233. //不含税单价 = 含税单价/(1+税率)
  234. assettaxrate = assettaxrate.divide(new BigDecimal(100), 2, RoundingMode.HALF_UP);
  235. BigDecimal rate = assettaxrate.add(BigDecimal.ONE);
  236. BigDecimal assetpricewithouttax = nckd_amountfield3.divide(rate, 2 , RoundingMode.HALF_UP);
  237. this.getModel().setValue("assetpricewithouttax", assetpricewithouttax);
  238. //不含税金额 = 不含税单价*数量
  239. BigDecimal assetorientryamount = assetpricewithouttax.multiply(asset_quantity);
  240. this.getModel().setValue("assetorientryamount", assetorientryamount);
  241. //税额 = 含税金额-不含税金额
  242. BigDecimal assettaxamount = assetexpenseamount.subtract(assetorientryamount);
  243. this.getModel().setValue("assettaxamount", assettaxamount);
  244. }
  245. }
  246. @Override
  247. public void afterCreateNewData(EventObject e) {
  248. //报账类型
  249. String reimbursetype = (String) this.getModel().getValue("reimbursetype");
  250. int rowIndex = this.getModel().createNewEntryRow("assetentry");
  251. if("asset".equals(reimbursetype)){
  252. //获取费用明细分录
  253. DynamicObjectCollection assetentry = this.getModel().getEntryEntity("expenseentryentity");
  254. //查询费用明细
  255. QFilter filter = new QFilter("name", QCP.equals,"资产报账");
  256. DynamicObject[] dynamicObjects = BusinessDataServiceHelper.load("er_expenseitemedit","id",new QFilter[] {filter});
  257. DynamicObject info = BusinessDataServiceHelper.loadSingle(dynamicObjects[0].getPkValue(), dynamicObjects[0].getDynamicObjectType().getName());
  258. this.getModel().setValue("expenseitem", info, 0);
  259. }
  260. }
  261. }