FinapbillBeforeF7SelectSample.java 18 KB

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