SalaryDistributeEditPlugin.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  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 oldentryNum="oldentryNum";
  34. private static String newentryNum="newentryNum";
  35. //VieaFlag为分录标识,传入的分录显示,其他则隐藏
  36. public void setVieeVisible(String Viewflag)
  37. {
  38. List<String> viewList=new ArrayList<>();
  39. viewList.add(nckd_generalemployees);
  40. viewList.add(nckd_earlyretired);
  41. viewList.add(nckd_retired);
  42. viewList.add(nckd_pay);
  43. if (Viewflag.isEmpty()) {
  44. for (String item:viewList) {
  45. this.getView().setVisible(false,item);
  46. }
  47. //清空所有分录
  48. clearEntryData("");
  49. }
  50. //薪酬明细(一般员工)分录
  51. if (Viewflag.equals(nckd_generalemployees)) {
  52. for (String item:viewList) {
  53. this.getView().setVisible(false,item);
  54. }
  55. clearEntryData(nckd_generalemployees);
  56. }
  57. //薪酬明细(内退)分录
  58. if (Viewflag.equals(nckd_earlyretired)) {
  59. for (String item:viewList) {
  60. this.getView().setVisible(false,item);
  61. }
  62. clearEntryData(nckd_earlyretired);
  63. }
  64. //薪酬明细(退休)分录
  65. if (Viewflag.equals(nckd_retired)) {
  66. for (String item:viewList) {
  67. this.getView().setVisible(false,item);
  68. }
  69. clearEntryData(nckd_retired);
  70. }
  71. //人力薪酬分录
  72. if (Viewflag.equals(nckd_pay)) {
  73. for (String item:viewList) {
  74. this.getView().setVisible(false,item);
  75. }
  76. clearEntryData(nckd_pay);
  77. }
  78. }
  79. public void afterCreateNewData(EventObject e){
  80. super.afterBindData(e);
  81. //设置初始状态分录为不可见
  82. this.setVieeVisible("");
  83. }
  84. //审核后获取审核人并刷新前端界面
  85. public void afterDoOperation(AfterDoOperationEventArgs arg){
  86. super.afterDoOperation(arg);
  87. String operateKey = arg.getOperateKey();
  88. //审核操作代码
  89. String audit="audit";
  90. if (operateKey.equals(audit)) {
  91. //获取单据编号
  92. String billno=this.getModel().getDataEntity().getString("billno");
  93. QFilter filter=new QFilter("billno", QFilter.equals,billno);
  94. DynamicObject[] dynamicObjectList= BusinessDataServiceHelper.load("nckd_salarydistribute","id",new QFilter[]{filter});
  95. DynamicObject auditor = null;
  96. for (DynamicObject dynamicObject:dynamicObjectList) {
  97. DynamicObject info=BusinessDataServiceHelper.
  98. loadSingle(dynamicObject.getPkValue(),dynamicObject.getDynamicObjectType().getName());
  99. auditor=info.getDynamicObject("nckd_auditor");
  100. }
  101. if (null!=auditor) {
  102. this.getModel().setValue("nckd_auditor",auditor);
  103. this.getView().updateView();
  104. }
  105. }
  106. }
  107. public void propertyChanged(PropertyChangedArgs e)
  108. {
  109. super.beforePropertyChanged(e);
  110. String name=e.getProperty().getName();
  111. //获取单据模型
  112. DynamicObject data=this.getModel().getDataEntity();
  113. if (nckd_entrytype.equals(name)) {
  114. //获取当前分录类型
  115. ChangeData[] changeSet=e.getChangeSet();
  116. ChangeData changeData=changeSet[0];
  117. oldentryNum=(String)changeData.getOldValue();
  118. newentryNum=(String)changeData.getNewValue();
  119. String entrytype=data.getString(nckd_entrytype);
  120. if (entrytype.isEmpty()) {
  121. this.setVieeVisible("");
  122. }
  123. //分录有数据则弹窗提示,无数据则直接切换分录
  124. //分录类型为薪酬明细(一般员工)
  125. if (entrytype.equals("A")) {
  126. if (billIsNotEmpty(data)) {
  127. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  128. String confirmTip = "您确定要将分录类型改变为薪酬明细(一般员工)?操作会清空其他分录的数据,是否继续?";
  129. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  130. }else {
  131. this.setVieeVisible(nckd_generalemployees);
  132. }
  133. }
  134. //分录类型为薪酬明细(内退)
  135. if (entrytype.equals("B")) {
  136. if (billIsNotEmpty(data)) {
  137. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  138. String confirmTip = "您确定要将分录类型改变为薪酬明细(内退)?操作会清空其他分录的数据,是否继续?";
  139. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  140. }else {
  141. this.setVieeVisible(nckd_earlyretired);
  142. }
  143. }
  144. //分录类型为薪酬明细退休
  145. if (entrytype.equals("C")) {
  146. if (billIsNotEmpty(data)) {
  147. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  148. String confirmTip = "您确定要将分录类型改变为薪酬明细(退休)?操作会清空其他分录的数据,是否继续?";
  149. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  150. }else {
  151. this.setVieeVisible(nckd_retired);
  152. }
  153. }
  154. //分录类型为人力薪酬
  155. if (entrytype.equals("D")) {
  156. if (billIsNotEmpty(data)) {
  157. ConfirmCallBackListener confirmCallBacks = new ConfirmCallBackListener(String.valueOf(false), this);
  158. String confirmTip = "您确定要将分录类型改变为人力薪酬?操作会清空其他分录的数据,是否继续?";
  159. this.getView().showConfirm(confirmTip,MessageBoxOptions.YesNo, ConfirmTypes.Default, confirmCallBacks);
  160. }else {
  161. this.setVieeVisible(nckd_pay);
  162. }
  163. }
  164. }
  165. }
  166. //点击弹窗后回调
  167. public void confirmCallBack(MessageBoxClosedEvent messageBoxClosedEvent) {
  168. super.confirmCallBack(messageBoxClosedEvent);
  169. DynamicObject data=this.getModel().getDataEntity();
  170. //获取当前分录类型
  171. String entrytype=data.getString(nckd_entrytype);
  172. // 判断如果是确认按钮
  173. if (messageBoxClosedEvent.getResult() == MessageBoxResult.Yes) {
  174. //分录类型为薪酬明细(一般员工)
  175. if (entrytype.equals("A")) {
  176. this.setVieeVisible(nckd_generalemployees);
  177. }
  178. //分录类型为薪酬明细(内退)
  179. if (entrytype.equals("B")) {
  180. this.setVieeVisible(nckd_earlyretired);
  181. }
  182. //分录类型为薪酬明细退休
  183. if (entrytype.equals("C")) {
  184. this.setVieeVisible(nckd_retired);
  185. }
  186. //分录类型为人力薪酬
  187. if (entrytype.equals("D")) {
  188. this.setVieeVisible(nckd_pay);
  189. }
  190. }
  191. //如果为取消,则
  192. if (messageBoxClosedEvent.getResult()==MessageBoxResult.No) {
  193. //设置回原来的值,不触发值改变事件
  194. this.getModel().beginInit();
  195. data.set("nckd_entrytype",oldentryNum);
  196. this.getModel().endInit();
  197. this.getView().updateView();
  198. }
  199. }
  200. //判断单据内四个分录是否为空,分录有数据则返回true
  201. public boolean billIsNotEmpty(DynamicObject data) {
  202. //四个分录标识
  203. List<String> nckd_entryList = Arrays.asList("nckd_staffentry","nckd_earlyretiredentry","nckd_retireentry","nckd_salaryentry");
  204. for (String item:nckd_entryList) {
  205. DynamicObjectCollection dynamicObjectCollection=data.getDynamicObjectCollection(item);
  206. if (!dynamicObjectCollection.isEmpty()) {
  207. return true;
  208. }
  209. }
  210. return false;
  211. }
  212. //清空除传入以外的其他分录
  213. public void clearEntryData(String nckd_entry)
  214. {
  215. //分录标识
  216. List<String> nckd_generalemployees =Arrays.asList("nckd_staffentry","nckd_earlyretiredentry","nckd_retireentry","nckd_salaryentry");
  217. for (String item:nckd_generalemployees) {
  218. //不传入参数默认全部分录清除
  219. if ("".equals(nckd_entry)){
  220. this.getModel().deleteEntryData(item);
  221. }
  222. if (!item.equals(nckd_entry)) {
  223. this.getModel().deleteEntryData(item);
  224. this.getView().setVisible(true,nckd_entry);
  225. }
  226. }
  227. }
  228. }