SalaryDistributeEditPlugin.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. package fi.em.formPlugin;
  2. import kd.bos.dataentity.entity.DynamicObject;
  3. import kd.bos.dataentity.entity.DynamicObjectCollection;
  4. import kd.bos.entity.datamodel.events.ChangeData;
  5. import kd.bos.entity.datamodel.events.PropertyChangedArgs;
  6. import kd.bos.form.ConfirmCallBackListener;
  7. import kd.bos.form.ConfirmTypes;
  8. import kd.bos.form.MessageBoxOptions;
  9. import kd.bos.form.MessageBoxResult;
  10. import kd.bos.form.events.AfterDoOperationEventArgs;
  11. import kd.bos.form.events.BeforeDoOperationEventArgs;
  12. import kd.bos.form.events.MessageBoxClosedEvent;
  13. import kd.bos.form.operate.FormOperate;
  14. import kd.bos.list.plugin.AbstractListPlugin;
  15. import kd.bos.orm.query.QFilter;
  16. import kd.bos.servicehelper.BusinessDataServiceHelper;
  17. import kd.sdk.plugin.Plugin;
  18. import java.util.ArrayList;
  19. import java.util.Arrays;
  20. import java.util.EventObject;
  21. import java.util.List;
  22. /**
  23. * @author cjz
  24. * @date 2024/8/19 9:01
  25. * @description:薪酬计提单,根据业务类型显示分录
  26. */
  27. public class SalaryDistributeEditPlugin extends AbstractListPlugin implements Plugin {
  28. private static String nckd_entrytype="nckd_entrytype";//业务类型标识
  29. private static String nckd_generalemployees="nckd_generalemployees";//薪酬明细(一般员工)分录标识
  30. private static String nckd_earlyretired="nckd_earlyretired";//薪酬明细(内退)分录标识
  31. private static String nckd_retired="nckd_retired";//薪酬明细(退休)分录标识
  32. private static String nckd_pay="nckd_pay";//人力薪酬分录标识
  33. private static String nckd_payretird="nckd_payretird";//人力薪酬(内退)分录标识
  34. private static String oldentryNum="oldentryNum";
  35. private static String newentryNum="newentryNum";
  36. //VieaFlag为分录标识,传入的分录显示,其他则隐藏
  37. public void setVieeVisible(String Viewflag)
  38. {
  39. List<String> viewList=new ArrayList<>();
  40. viewList.add(nckd_generalemployees);
  41. viewList.add(nckd_earlyretired);
  42. viewList.add(nckd_retired);
  43. viewList.add(nckd_pay);
  44. viewList.add(nckd_payretird);
  45. viewList.add("nckd_a_generalemployees");
  46. viewList.add("nckd_a_earlyretired");
  47. viewList.add("nckd_a_retired");
  48. viewList.add("nckd_a_pay");
  49. viewList.add("nckd_a_payretird");
  50. if (Viewflag.isEmpty()) {
  51. for (String item:viewList) {
  52. this.getView().setVisible(false,item);
  53. }
  54. //清空所有分录
  55. clearEntryData("");
  56. }
  57. //薪酬明细(一般员工)分录
  58. if (Viewflag.equals(nckd_generalemployees)) {
  59. for (String item:viewList) {
  60. this.getView().setVisible(false,item);
  61. }
  62. clearEntryData(nckd_generalemployees);
  63. }
  64. //薪酬明细(内退)分录
  65. if (Viewflag.equals(nckd_earlyretired)) {
  66. for (String item:viewList) {
  67. this.getView().setVisible(false,item);
  68. }
  69. clearEntryData(nckd_earlyretired);
  70. }
  71. //薪酬明细(退休)分录
  72. if (Viewflag.equals(nckd_retired)) {
  73. for (String item:viewList) {
  74. this.getView().setVisible(false,item);
  75. }
  76. clearEntryData(nckd_retired);
  77. }
  78. //人力薪酬分录
  79. if (Viewflag.equals(nckd_pay)) {
  80. for (String item:viewList) {
  81. this.getView().setVisible(false,item);
  82. }
  83. clearEntryData(nckd_pay);
  84. }
  85. //人力薪酬内退分录
  86. if (Viewflag.equals(nckd_payretird)){
  87. for (String item:viewList) {
  88. this.getView().setVisible(false,item);
  89. }
  90. clearEntryData(nckd_payretird);
  91. }
  92. }
  93. public void afterCreateNewData(EventObject e){
  94. super.afterBindData(e);
  95. //设置初始状态分录为不可见
  96. this.setVieeVisible("");
  97. }
  98. //审核后获取审核人并刷新前端界面
  99. public void afterDoOperation(AfterDoOperationEventArgs arg){
  100. super.afterDoOperation(arg);
  101. String operateKey = arg.getOperateKey();
  102. //审核操作代码
  103. String audit="audit";
  104. if (operateKey.equals(audit)) {
  105. //获取单据编号
  106. String billno=this.getModel().getDataEntity().getString("billno");
  107. QFilter filter=new QFilter("billno", QFilter.equals,billno);
  108. DynamicObject[] dynamicObjectList= BusinessDataServiceHelper.load("nckd_salarydistribute","id",new QFilter[]{filter});
  109. DynamicObject auditor = null;
  110. for (DynamicObject dynamicObject:dynamicObjectList) {
  111. DynamicObject info=BusinessDataServiceHelper.
  112. loadSingle(dynamicObject.getPkValue(),dynamicObject.getDynamicObjectType().getName());
  113. auditor=info.getDynamicObject("nckd_auditor");
  114. }
  115. if (null!=auditor) {
  116. this.getModel().setValue("nckd_auditor",auditor);
  117. this.getView().updateView();
  118. }
  119. }
  120. }
  121. public void propertyChanged(PropertyChangedArgs e)
  122. {
  123. super.beforePropertyChanged(e);
  124. String name=e.getProperty().getName();
  125. //获取单据模型
  126. DynamicObject data=this.getModel().getDataEntity();
  127. if (nckd_entrytype.equals(name)) {
  128. //获取当前分录类型
  129. ChangeData[] changeSet=e.getChangeSet();
  130. ChangeData changeData=changeSet[0];
  131. oldentryNum=(String)changeData.getOldValue();
  132. newentryNum=(String)changeData.getNewValue();
  133. String entrytype=data.getString(nckd_entrytype);
  134. if (entrytype.isEmpty()) {
  135. this.setVieeVisible("");
  136. }
  137. //分录有数据则弹窗提示,无数据则直接切换分录
  138. //分录类型为薪酬明细(一般员工)
  139. if (entrytype.equals("A")) {
  140. if (billIsNotEmpty(data)) {
  141. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  142. String confirmTip = "您确定要将分录类型改变为薪酬明细(一般员工)?操作会清空其他分录的数据,是否继续?";
  143. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  144. }else {
  145. this.setVieeVisible(nckd_generalemployees);
  146. }
  147. }
  148. //分录类型为薪酬明细(内退)
  149. if (entrytype.equals("B")) {
  150. if (billIsNotEmpty(data)) {
  151. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  152. String confirmTip = "您确定要将分录类型改变为薪酬明细(内退)?操作会清空其他分录的数据,是否继续?";
  153. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  154. }else {
  155. this.setVieeVisible(nckd_earlyretired);
  156. }
  157. }
  158. //分录类型为薪酬明细退休
  159. if (entrytype.equals("C")) {
  160. if (billIsNotEmpty(data)) {
  161. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  162. String confirmTip = "您确定要将分录类型改变为薪酬明细(退休)?操作会清空其他分录的数据,是否继续?";
  163. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  164. }else {
  165. this.setVieeVisible(nckd_retired);
  166. }
  167. }
  168. //分录类型为人力薪酬
  169. if (entrytype.equals("D")) {
  170. if (billIsNotEmpty(data)) {
  171. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  172. String confirmTip = "您确定要将分录类型改变为人力薪酬?操作会清空其他分录的数据,是否继续?";
  173. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  174. }else {
  175. this.setVieeVisible(nckd_pay);
  176. }
  177. }
  178. //分录类型为人力薪酬(内退)
  179. if (entrytype.equals("E")) {
  180. if (billIsNotEmpty(data)) {
  181. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  182. String confirmTip = "您确定要将分录类型改变为人力薪酬(内退)?操作会清空其他分录的数据,是否继续?";
  183. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  184. }else {
  185. this.setVieeVisible(nckd_payretird);
  186. }
  187. }
  188. }
  189. }
  190. //点击弹窗后回调
  191. public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
  192. super.confirmCallBack(messageBoxClosedEvent);
  193. DynamicObject data=this.getModel().getDataEntity();
  194. //获取当前分录类型
  195. String entrytype=data.getString(nckd_entrytype);
  196. // 判断如果是确认按钮
  197. if (messageBoxClosedEvent.getResult() == MessageBoxResult.Yes) {
  198. //分录类型为薪酬明细(一般员工)
  199. if (entrytype.equals("A")) {
  200. this.setVieeVisible(nckd_generalemployees);
  201. }
  202. //分录类型为薪酬明细(内退)
  203. if (entrytype.equals("B")) {
  204. this.setVieeVisible(nckd_earlyretired);
  205. }
  206. //分录类型为薪酬明细退休
  207. if (entrytype.equals("C")) {
  208. this.setVieeVisible(nckd_retired);
  209. }
  210. //分录类型为人力薪酬
  211. if (entrytype.equals("D")) {
  212. this.setVieeVisible(nckd_pay);
  213. }
  214. //分录类型为人力薪酬(内退)
  215. if (entrytype.equals("E")) {
  216. this.setVieeVisible(nckd_payretird);
  217. }
  218. }
  219. //如果为取消,则
  220. if (messageBoxClosedEvent.getResult()==MessageBoxResult.No) {
  221. //设置回原来的值,不触发值改变事件
  222. this.getModel().beginInit();
  223. data.set("nckd_entrytype",oldentryNum);
  224. this.getModel().endInit();
  225. this.getView().updateView();
  226. }
  227. }
  228. //判断单据内四个分录是否为空,分录有数据则返回true
  229. public boolean billIsNotEmpty(DynamicObject data) {
  230. //四个分录标识
  231. List<String> nckd_entryList = Arrays.asList("nckd_staffentry","nckd_earlyretiredentry","nckd_retireentry","nckd_salaryentry","nckd_salaryentryre");
  232. for (String item:nckd_entryList) {
  233. DynamicObjectCollection dynamicObjectCollection=data.getDynamicObjectCollection(item);
  234. if (!dynamicObjectCollection.isEmpty()) {
  235. return true;
  236. }
  237. }
  238. return false;
  239. }
  240. //清空除传入以外的其他分录
  241. public void clearEntryData(String nckd_entry)
  242. {
  243. //分录标识
  244. List<String> nckd_generalemployees =Arrays
  245. .asList("nckd_staffentry","nckd_earlyretiredentry","nckd_retireentry","nckd_salaryentry","nckd_salaryentryre");
  246. for (String item:nckd_generalemployees) {
  247. //不传入参数默认全部分录清除
  248. if ("".equals(nckd_entry)){
  249. this.getModel().deleteEntryData(item);
  250. }
  251. if (!item.equals(nckd_entry)) {
  252. this.getModel().deleteEntryData(item);
  253. this.getView().setVisible(true,nckd_entry);
  254. }
  255. }
  256. }
  257. }