Browse Source

发票作废

user5 4 years ago
parent
commit
9377012a25

+ 18 - 0
src/main/java/com/jeeplus/modules/workinvoice/entity/WorkInvoice.java

@@ -70,6 +70,8 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	private Date endContractDate;		// 结束
 	private Date endContractDate;		// 结束
 	private Date receiptMoneyDate;		// 收款日期
 	private Date receiptMoneyDate;		// 收款日期
 	private String receiptMoney;		// 是否收款
 	private String receiptMoney;		// 是否收款
+	private String cancellation;		// 作废判断
+	private String adminFlag;		// 管理员判断
 	private List<WorkInvoiceDetail> workAccountList = Lists.newArrayList();//发票明细
 	private List<WorkInvoiceDetail> workAccountList = Lists.newArrayList();//发票明细
 	public String getOfficeId() {
 	public String getOfficeId() {
 		return officeId;
 		return officeId;
@@ -456,4 +458,20 @@ public class WorkInvoice extends ActEntity<WorkInvoice> {
 	public void setReceiptMoney(String receiptMoney) {
 	public void setReceiptMoney(String receiptMoney) {
 		this.receiptMoney = receiptMoney;
 		this.receiptMoney = receiptMoney;
 	}
 	}
+
+	public String getCancellation() {
+		return cancellation;
+	}
+
+	public void setCancellation(String cancellation) {
+		this.cancellation = cancellation;
+	}
+
+	public String getAdminFlag() {
+		return adminFlag;
+	}
+
+	public void setAdminFlag(String adminFlag) {
+		this.adminFlag = adminFlag;
+	}
 }
 }

+ 168 - 28
src/main/java/com/jeeplus/modules/workinvoice/service/WorkInvoiceService.java

@@ -393,10 +393,10 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 					);
 					);
 		long s6=System.currentTimeMillis();
 		long s6=System.currentTimeMillis();
 			List<User> users = new ArrayList<>();
 			List<User> users = new ArrayList<>();
-			List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"5",workInvoice.getCreateBy());
+			//List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"5",workInvoice.getCreateBy());
 			//List<User> fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"5",workInvoice.getCreateBy());
 			//List<User> fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"5",workInvoice.getCreateBy());
-		//财务主任
-		List<User> fpglys = UserUtils.getByRoleActivityEnname("cwzg",3,office.getId(),"5",workInvoice.getCreateBy());
+		//财务员工
+		List<User> fpglys = UserUtils.getByRoleActivityEnname("cwygevod",3,office.getId(),"5",workInvoice.getCreateBy());
 		long s7=System.currentTimeMillis();
 		long s7=System.currentTimeMillis();
 			if (StringUtils.isNotBlank(workActivityMenu.getId())) {
 			if (StringUtils.isNotBlank(workActivityMenu.getId())) {
 				workProjectNotify.setNotifyRole("");
 				workProjectNotify.setNotifyRole("");
@@ -432,22 +432,19 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 				}
 				}
 				workProjectNotify.setId("");
 				workProjectNotify.setId("");
 			} else {
 			} else {
-				/*variables.put("fpglyList", fpglys);*/
-				if (bmzrs.size()==0 ){
+				//variables.put("fpglyList", fpglys);
+				if (fpglys.size()==0 ){
 					workInvoice.setInvoiceState("1");//暂存
 					workInvoice.setInvoiceState("1");//暂存
 					this.save(workInvoice);
 					this.save(workInvoice);
 				}
 				}
-				if (bmzrs.size()==0){
-					return "流程审批人不能为空,角色部门负责人下无用户,请联系管理员!";
+				if (fpglys.size()==0){
+					return "流程审批人不能为空,财务部门下无用户,请联系管理员!";
 				}
 				}
-			/*	if (fpglys.size()==0){
-					return "流程审批人不能为空,角色发票管理员下无用户,请联系管理员!";
-				}*/
 				//variables.put("fpglycount",fpglys.size());
 				//variables.put("fpglycount",fpglys.size());
-				variables.put("bmzrcount",bmzrs.size());
-				variables.put("bmzrList",bmzrs);
-				processType = "workinvoicebranch";
-				users.addAll(bmzrs);
+				variables.put("fpglycount",fpglys.size());
+				variables.put("fpglyList",fpglys);
+				processType = "newWorkInvoiceBranch";
+				users.addAll(fpglys);
 			}
 			}
 			for (User user : users){
 			for (User user : users){
 				workProjectNotify.setUser(user);
 				workProjectNotify.setUser(user);
@@ -483,16 +480,16 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 				workActivityProcessService.saveList(list, processInstance.getId());
 				workActivityProcessService.saveList(list, processInstance.getId());
 			} else {
 			} else {
 				WorkActivityProcess workActivityProcess = new WorkActivityProcess();
 				WorkActivityProcess workActivityProcess = new WorkActivityProcess();
-				workActivityProcess.setProcessKey("workinvoicebranch");
+				workActivityProcess.setProcessKey("newWorkInvoiceBranch");
 				workActivityProcess.setCount(1);
 				workActivityProcess.setCount(1);
 				workActivityProcess.setProcessInstanceId(processInstance.getId());
 				workActivityProcess.setProcessInstanceId(processInstance.getId());
 				workActivityProcess.setIsApproval("0");
 				workActivityProcess.setIsApproval("0");
 				workActivityProcessService.save(workActivityProcess);
 				workActivityProcessService.save(workActivityProcess);
-				workActivityProcess.setCount(2);
+				/*workActivityProcess.setCount(2);
 				workActivityProcess.setId("");
 				workActivityProcess.setId("");
-				workActivityProcessService.save(workActivityProcess);
-				workActivityProcessService.insertAuditsByType(bmzrs,processInstance.getId(),1,1);
-				workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),2,0);
+				workActivityProcessService.save(workActivityProcess);*/
+				workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),1,1);
+				//workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),2,0);
 			}
 			}
 		long s12=System.currentTimeMillis();
 		long s12=System.currentTimeMillis();
 		logger.info("发票送审-------生成发票编号:"+(s2-s1)+"  保存发票信息:"+(s3-s2)+"  保存发票明细数据:"+(s5-s4)
 		logger.info("发票送审-------生成发票编号:"+(s2-s1)+"  保存发票信息:"+(s3-s2)+"  保存发票明细数据:"+(s5-s4)
@@ -911,7 +908,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 			selectProcess.setProcessInstanceId(workInvoice.getProcessInstanceId());
 			selectProcess.setProcessInstanceId(workInvoice.getProcessInstanceId());
 			List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
 			List<WorkActivityProcess> workActivityProcesses = workActivityProcessService.findList(selectProcess);
 			List<Activity> activities = workActivityMenu.getActivities();
 			List<Activity> activities = workActivityMenu.getActivities();
-			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicebranch")) {
+			if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newWorkInvoiceBranch")) {
 				key = 1;
 				key = 1;
 				for (int i = 0; i < workActivityProcesses.size(); i++) {
 				for (int i = 0; i < workActivityProcesses.size(); i++) {
 					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
 					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
@@ -956,7 +953,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 					}
 					}
 				}
 				}
 			} else {
 			} else {
-				workActivityMenu.setProcessType("workinvoicebranch");
+				workActivityMenu.setProcessType("newWorkInvoiceBranch");
 				for (int i = 0; i < workActivityProcesses.size(); i++) {
 				for (int i = 0; i < workActivityProcesses.size(); i++) {
 					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
 					WorkActivityProcess activityProcess = workActivityProcesses.get(i);
 					String count = activityProcess.getCount() + "";
 					String count = activityProcess.getCount() + "";
@@ -965,17 +962,19 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 						workActivityProcess.setId("");
 						workActivityProcess.setId("");
 					}
 					}
 					// 审核环节
 					// 审核环节
-					if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+					//if ("bmzr".equals(taskDefKey) && count.contains("1")) {
+					if ("fpgly".equals(taskDefKey) && count.contains("1")) {
 						taskCount = "1";
 						taskCount = "1";
 						exp = "pass";
 						exp = "pass";
 						if ("yes".equals(workInvoice.getAct().getFlag()) &&("0").equals(workInvoice.getExt())) {
 						if ("yes".equals(workInvoice.getAct().getFlag()) &&("0").equals(workInvoice.getExt())) {
 							workActivityProcessService.insertAuditsByType(auditUsers,workInvoice.getProcessInstanceId(),2,1);
 							workActivityProcessService.insertAuditsByType(auditUsers,workInvoice.getProcessInstanceId(),2,1);
 							//分公司流程
 							//分公司流程
-							notifyRole = "财务主任审批";
+							//notifyRole = "财务主任审批";
+							notifyRole = "审批通过";
 							workActivityProcess.setIsApproval("1");
 							workActivityProcess.setIsApproval("1");
-							enname = "fpgly";
+							/*enname = "fpgly";
 							vars.put("fpglyList", auditUsers);
 							vars.put("fpglyList", auditUsers);
-							vars.put("fpglycount",auditUsers.size());
+							vars.put("fpglycount",auditUsers.size());*/
 						}else {
 						}else {
 							notifyRole = "调整申请";
 							notifyRole = "调整申请";
 							workActivityProcess.setIsApproval("2");
 							workActivityProcess.setIsApproval("2");
@@ -994,10 +993,10 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 						break;
 						break;
 					}  else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
 					}  else if ("modifyApply".equals(taskDefKey)&& count.contains("0")) {
 						taskCount = "0";
 						taskCount = "0";
-						notifyRole = "业务部负责人审批";
+						notifyRole = "财务部门审批";
 						exp = "pass";
 						exp = "pass";
 						workActivityProcess.setCount(0);
 						workActivityProcess.setCount(0);
-						enname = "bmzr";
+						enname = "cwygevod";
 						if (!"yes".equals(workInvoice.getAct().getFlag())) {
 						if (!"yes".equals(workInvoice.getAct().getFlag())) {
 							workInvoice.setInvoiceState("3");
 							workInvoice.setInvoiceState("3");
 						}
 						}
@@ -1061,7 +1060,7 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 				}
 				}
 				workActivityProcessService.deleteProcessIdAuditUsers(workInvoice.getProcessInstanceId());
 				workActivityProcessService.deleteProcessIdAuditUsers(workInvoice.getProcessInstanceId());
 			} else {
 			} else {
-				if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("workinvoicebranch")) {
+				if (StringUtils.isNotBlank(workActivityMenu.getProcessType()) && !workActivityMenu.getProcessType().equals("newWorkInvoiceBranch")) {
 					WorkProjectNotify notify = new WorkProjectNotify();
 					WorkProjectNotify notify = new WorkProjectNotify();
 					notify.setNotifyId(workInvoice.getId());
 					notify.setNotifyId(workInvoice.getId());
 					userList = workProjectNotifyService.readByNotifyId(notify);
 					userList = workProjectNotifyService.readByNotifyId(notify);
@@ -1366,4 +1365,145 @@ public class WorkInvoiceService extends CrudService<WorkInvoiceDao, WorkInvoice>
 		}
 		}
 		return page;
 		return page;
 	}
 	}
+
+
+
+	/**
+	 * 分公司作废操作
+	 * @param workInvoice
+	 * @param variables
+	 */
+	@Transactional(readOnly = false)
+	public String cancellationBranch(WorkInvoice workInvoice,Map<String, Object> variables,String processInstanceId) {
+		if (StringUtils.isBlank(workInvoice.getNumber())) {
+			synchronized (SYN_BYTE) {
+				workInvoice.setNumber(serialNumTplService.genSerialNum(UserUtils.getSelectCompany(), WorkInvoice.SERIAL_BIZCODE));
+			}
+		}
+		String officeId = UserUtils.getUser().getOffice().getId();
+		Office office = officeService.get(officeId);
+		workInvoice.setOffice(office);
+		super.save(workInvoice);
+		String str = "";
+		//所属部门
+		String userName = UserUtils.get(workInvoice.getCreateBy().getId()).getName();
+		str = "发票作废申请编号:"+workInvoice.getNumber()+",实际开票单位:"+workInvoice.getClient().getName()+",创建人:"+userName+",所属部门:"+office.getName();
+		String title = "实际开票单位:"+workInvoice.getClient().getName();
+		updateWorkInvoiceInfo(workInvoice);
+		// 用来设置启动流程的人员ID,引擎会自动把用户ID保存到activiti:initiator中
+		identityService.setAuthenticatedUserId(UserUtils.getUser().getId());
+		// 启动流程
+		String businessKey = workInvoice.getId();
+		WorkActivityMenu workActivityMenu = workActivityMenuService.findByParentAndOffice("ggh3125f1f194c82bdea00005c750905",officeService.get(workInvoice.getOfficeId()));
+		// 启动流程
+		String processType = workActivityMenu.getProcessType();
+		StringBuffer buffer = new StringBuffer();
+		Activity activity = new Activity();
+		WorkProjectNotify workProjectNotify = UtilNotify
+				.saveNotify(workInvoice.getId(),
+						null,
+						workInvoice.getCompanyId(),
+						title,
+						str,
+						"211",
+						"0",
+						"待审批",
+						""
+				);
+		List<User> users = new ArrayList<>();
+		//List<User> bmzrs = UserUtils.getByRoleActivityEnname("bmzr",2,office.getId(),"5",workInvoice.getCreateBy());
+		//List<User> fpglys = UserUtils.getByRoleActivityEnname("fpgly",3,office.getId(),"5",workInvoice.getCreateBy());
+		//财务员工
+		List<User> fpglys = UserUtils.getByRoleActivityEnname("cwygevod",3,office.getId(),"5",workInvoice.getCreateBy());
+		if (StringUtils.isNotBlank(workActivityMenu.getId())) {
+			workProjectNotify.setNotifyRole("");
+			workActivityMenu = workActivityMenuService.get(workActivityMenu.getId());
+			List<Activity> activities = workActivityMenu.getActivities();
+			for (Activity a : activities) {
+				String encount = a.getEncount();
+				String enlist = a.getEnlist();
+				if (a.getRole()!=null && StringUtils.isNotBlank(a.getRole().getEnname())){
+					List enusers = UserUtils.getByRoleActivityEnnames(a.getRole().getEnname(),office.getId(),"5",workInvoice.getCreateBy());
+					if (enusers.size()==0){
+						workInvoice.setInvoiceState("1");//暂存
+						this.save(workInvoice);
+						return "流程审批人不能为空,角色"+a.getRole().getName()+"下无用户,请联系管理员!";
+					}
+					variables.put(enlist, enusers);
+					variables.put(encount, enusers.size());
+				}
+				if (a.getDelFlag().equals("0") && a.getCount() == 1) {
+					activity = a;
+				}
+			}
+			buffer.append(activity.getRole().getEnname());
+			if (activity != null && StringUtils.isNotBlank(activity.getId())) {
+				//角色审批
+				if (StringUtils.isNotBlank(activity.getRole().getEnname())) {
+					users = UserUtils.getByRoleActivityEnnames(activity.getRole().getEnname(),office.getId(),"5",workInvoice.getCreateBy());
+				}
+				//人员审批
+				if (StringUtils.isNotBlank(activity.getUser().getId())) {
+					users.add(activity.getUser());
+				}
+			}
+			workProjectNotify.setId("");
+		} else {
+			//variables.put("fpglyList", fpglys);
+			if (fpglys.size()==0 ){
+				workInvoice.setInvoiceState("1");//暂存
+				this.save(workInvoice);
+			}
+			if (fpglys.size()==0){
+				return "流程审批人不能为空,财务部门下无用户,请联系管理员!";
+			}
+			//variables.put("fpglycount",fpglys.size());
+			variables.put("fpglycount",fpglys.size());
+			variables.put("fpglyList",fpglys);
+			processType = "newWorkInvoiceBranch";
+			users.addAll(fpglys);
+		}
+		for (User user : users){
+			workProjectNotify.setUser(user);
+			workProjectNotify.setId("");
+			workProjectNotifyService
+					.save(workProjectNotify);
+			Map<String,Object> extras = new HashMap<>();
+			extras.put("type","7002");
+			extras.put("id",workProjectNotify.getId());
+			extras.put("procDefKey","211");
+			UserUtils.pushInfoToApp(title,str,extras,user.getId());
+			UserUtils.pushIm(user.getId(),str);
+		}
+		variables.put("type", processType);
+		variables.put("busId", businessKey);
+		variables.put("title", "发票申请编号:" + workInvoice.getNumber());//设置标题;
+		ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processType, businessKey, variables);
+		workInvoice.setProcessInstance(processInstance);
+		if (StringUtils.isNotBlank(processInstanceId)) {
+			workActivityProcessService.updateProcessInstanceId(processInstance.getId(),processInstanceId);
+			workActivityProcessService.deleteProcessInstanceId(processInstanceId);
+			workActivityProcessService.deleteProcessIdAuditUsers(processInstanceId);
+		}
+		// 更新流程实例ID
+		workInvoice.setProcessInstanceId(processInstance.getId());
+		workInvoiceDao.updateProcessInstanceId(workInvoice);
+		List<Activity> list = workActivityMenu.getActivities();
+		if (list != null && list.size() != 0) {
+			workActivityProcessService.saveList(list, processInstance.getId());
+		} else {
+			WorkActivityProcess workActivityProcess = new WorkActivityProcess();
+			workActivityProcess.setProcessKey("newWorkInvoiceBranch");
+			workActivityProcess.setCount(1);
+			workActivityProcess.setProcessInstanceId(processInstance.getId());
+			workActivityProcess.setIsApproval("0");
+			workActivityProcessService.save(workActivityProcess);
+				/*workActivityProcess.setCount(2);
+				workActivityProcess.setId("");
+				workActivityProcessService.save(workActivityProcess);*/
+			workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),1,1);
+			//workActivityProcessService.insertAuditsByType(fpglys,processInstance.getId(),2,0);
+		}
+		return "";
+	}
 }
 }

+ 117 - 3
src/main/java/com/jeeplus/modules/workinvoice/web/WorkInvoiceController.java

@@ -132,6 +132,19 @@ public class WorkInvoiceController extends BaseController {
 	@RequestMapping(value = {"list", ""})
 	@RequestMapping(value = {"list", ""})
 	public String list(WorkInvoice workInvoice, HttpServletRequest request, HttpServletResponse response, Model model) {
 	public String list(WorkInvoice workInvoice, HttpServletRequest request, HttpServletResponse response, Model model) {
 		Page<WorkInvoice> page = workInvoiceService.findPage(new Page<WorkInvoice>(request, response), workInvoice);
 		Page<WorkInvoice> page = workInvoiceService.findPage(new Page<WorkInvoice>(request, response), workInvoice);
+		List<WorkInvoice> workInvoiceList = page.getList();
+		for (WorkInvoice info: workInvoiceList) {
+			if(UserUtils.getUser().getOffice().getName().equals("财务部") || UserUtils.getUser().getId().equals(info.getCreateBy().getId())){
+				info.setCancellation("1");
+			}else{
+				info.setCancellation("0");
+			}
+			if(UserUtils.isManager()){
+				info.setAdminFlag("1");
+			}else{
+				info.setAdminFlag("0");
+			}
+		}
 		model.addAttribute("page", page);
 		model.addAttribute("page", page);
 		return "modules/workinvoice/workInvoiceList";
 		return "modules/workinvoice/workInvoiceList";
 	}
 	}
@@ -274,7 +287,8 @@ public class WorkInvoiceController extends BaseController {
 			String str = "";
 			String str = "";
 			//1总公司0分公司
 			//1总公司0分公司
 			if("1".equals(workInvoice.getExt())){
 			if("1".equals(workInvoice.getExt())){
-				str = workInvoiceService.save(workInvoice, variables,processInstanceId);
+				//str = workInvoiceService.save(workInvoice, variables,processInstanceId);
+				str = workInvoiceService.saveBranch(workInvoice, variables,processInstanceId);
 			}else if("0".equals(workInvoice.getExt())){
 			}else if("0".equals(workInvoice.getExt())){
 				str = workInvoiceService.saveBranch(workInvoice, variables,processInstanceId);
 				str = workInvoiceService.saveBranch(workInvoice, variables,processInstanceId);
 			}
 			}
@@ -294,6 +308,106 @@ public class WorkInvoiceController extends BaseController {
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
 	}
 	}
 
 
+
+	/**
+	 * 查看,增加,编辑开票管理表单页面
+	 */
+	@RequestMapping(value = "cancellationForm")
+	public String cancellationForm(WorkInvoice workInvoice, Model model) {
+		String view = "conditionWorkInvoiceForm";
+		String tabId = request.getParameter("tabId");
+		if("1".equals(tabId)){
+			view = "workInvoiceView";
+		}else if("3".equals(tabId)){
+			ProcessInstance processInstance = actTaskService.getProcIns(workInvoice.getProcessInstanceId());
+			if (processInstance!=null) {
+				Task taskInfok = actTaskService.getCurrentTaskInfo(processInstance);
+				Act act = new Act();
+				act.setTaskId(taskInfok.getId());
+				act.setTaskName(taskInfok.getName());
+				act.setTaskDefKey(taskInfok.getTaskDefinitionKey());
+				act.setProcDefId(taskInfok.getProcessDefinitionId());
+				act.setProcInsId(taskInfok.getProcessInstanceId());
+				act.setTask(taskInfok);
+				workInvoice.setAct(act);
+				view = "workInvoiceModify";
+			}
+		}
+		// 环节编号
+		String taskDefKey = workInvoice.getAct().getTaskDefKey();
+		if (StringUtils.isNotBlank(taskDefKey) && ("bmzr".equals(taskDefKey) ||
+				"scbzr".equals(taskDefKey))){
+			view = "workInvoiceAudit";
+		}else  if (StringUtils.isNotBlank(taskDefKey) && "fpgly".equals(taskDefKey)){
+			workInvoice.setDrawerName(UserUtils.getUser().getName());
+			workInvoice.setInvoiceDate(new Date());
+			view = "workInvoiceAuditEnd";//发票管理员操作发票明细页面
+		}else if (StringUtils.isNotBlank(taskDefKey) && !taskDefKey.equals("modifyApply")){
+			view = "workInvoiceAudit";
+		}
+
+		if (StringUtils.isBlank(workInvoice.getId())){
+			//workInvoice.setNumber(IdGen.uuid());
+			//workInvoice.setInvoiceNumber( (int)((Math.random()*9+1)*100000));
+			workInvoice.setInvoiceDate(new Date());
+		}
+		model.addAttribute("workInvoice", workInvoice);
+		return "modules/workinvoice/" + view;
+	}
+
+	/**
+	 * 作废开票管理
+	 */
+	@RequestMapping(value = "cancellationAudit")
+	public String cancellationAudit(WorkInvoice workInvoice, Model model, RedirectAttributes redirectAttributes) throws Exception{
+		if (!beanValidator(model, workInvoice)){
+			return form(workInvoice, model);
+		}
+
+		User user = workInvoice.getCreateBy();
+		User loginUser = UserUtils.getUser();
+		String invoiceState = workInvoice.getInvoiceState();
+		if(null != loginUser && (loginUser.getOffice().getName().equals("财务部") || loginUser.getId().equals(workInvoice.getCreateBy().getId()))){
+		//启动流程
+		workInvoice.setInvoiceState("6");
+		String processInstanceId ="";
+		if (user!=null && StringUtils.isNotBlank(user.getId()) && StringUtils.isNotBlank(invoiceState) && "3".equals(invoiceState)){
+			processInstanceId = workInvoiceService.get(workInvoice.getId()).getProcessInstanceId();
+		}
+//		try {
+			Map<String, Object> variables = Maps.newHashMap();
+			WorkClientInfo workClientInfo =workClientInfoService.get(workInvoice.getClient().getId());
+			ProjectRecords workProject =projectRecordsService.getRuralProjectRecodes(workInvoice.getProject().getId());
+			workInvoice.setClient(workClientInfo);
+			workInvoice.setProject(workProject);
+			workInvoice.setCompanyId(UserUtils.getSelectCompany().getId());
+			workInvoice.setOfficeId(UserUtils.getSelectOffice().getId());
+			String str = "";
+			//1总公司0分公司
+			if("1".equals(workInvoice.getExt())){
+				//str = workInvoiceService.save(workInvoice, variables,processInstanceId);
+				str = workInvoiceService.cancellationBranch(workInvoice, variables,processInstanceId);
+			}else if("0".equals(workInvoice.getExt())){
+				str = workInvoiceService.cancellationBranch(workInvoice, variables,processInstanceId);
+			}
+			if(StringUtils.isNotBlank(workInvoice.getExt())){
+				if (StringUtils.isNotBlank(str)){
+					addMessage(redirectAttributes, "发票作废申请提交失败:"+str);
+				}else {
+					addMessage(redirectAttributes, "发票作废申请已经提交");
+				}
+			}
+//		} catch (Exception e) {
+//			addMessage(redirectAttributes, "发票作废申请提交失败!");
+//		}
+		}
+		else{
+			addMessage(redirectAttributes, "您不是申请人或财务部成员,无法作废");
+			return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
+		}
+		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
+	}
+
 	/**
 	/**
 	 * 保存开票管理
 	 * 保存开票管理
 	 */
 	 */
@@ -335,7 +449,7 @@ public class WorkInvoiceController extends BaseController {
 	@RequiresPermissions("workinvoice:workInvoice:del")
 	@RequiresPermissions("workinvoice:workInvoice:del")
 	@RequestMapping(value = "delete")
 	@RequestMapping(value = "delete")
 	public String delete(WorkInvoice workInvoice, RedirectAttributes redirectAttributes) {
 	public String delete(WorkInvoice workInvoice, RedirectAttributes redirectAttributes) {
-		//workInvoiceService.delete(workInvoice);
+		workInvoiceService.delete(workInvoice);
 		addMessage(redirectAttributes, "作废发票管理成功");
 		addMessage(redirectAttributes, "作废发票管理成功");
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
 	}
 	}
@@ -348,7 +462,7 @@ public class WorkInvoiceController extends BaseController {
 	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
 	public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
 		String idArray[] =ids.split(",");
 		String idArray[] =ids.split(",");
 		for(String id : idArray){
 		for(String id : idArray){
-			//workInvoiceService.delete(workInvoiceService.get(id));
+			workInvoiceService.delete(workInvoiceService.get(id));
 		}
 		}
 		addMessage(redirectAttributes, "作废发票管理成功");
 		addMessage(redirectAttributes, "作废发票管理成功");
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";
 		return "redirect:"+Global.getAdminPath()+"/workinvoice/workInvoice/?repage";

+ 36 - 0
src/main/java/com/jeeplus/modules/workprojectnotify/web/WorkProjectNotifyController.java

@@ -571,6 +571,12 @@ public class WorkProjectNotifyController extends BaseController {
 					processInstanceId = workInvoice.getProcessInstanceId();
 					processInstanceId = workInvoice.getProcessInstanceId();
 				}
 				}
 			}
 			}
+			else if(workProjectNotify.getType().equals("211")){	//开票作废管理
+				WorkInvoice workInvoice = workInvoiceService.get(workProjectNotify.getNotifyId());
+				if (workInvoice != null) {
+					processInstanceId = workInvoice.getProcessInstanceId();
+				}
+			}
 			else if(workProjectNotify.getType().equals("22")){//工程签证
 			else if(workProjectNotify.getType().equals("22")){//工程签证
 				WorkVisa workVisa =workVisaService.get(workProjectNotify.getNotifyId());
 				WorkVisa workVisa =workVisaService.get(workProjectNotify.getNotifyId());
 				if (workVisa != null) {
 				if (workVisa != null) {
@@ -968,6 +974,27 @@ public class WorkProjectNotifyController extends BaseController {
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
 					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
 						return "modules/workinvoice/workInvoiceModify";
 						return "modules/workinvoice/workInvoiceModify";
 					}
 					}
+				} else if (workProjectNotify.getType().equals("211")) {    //开票管理
+					WorkInvoice workInvoice = workInvoiceService.get(workProjectNotify.getNotifyId());
+					workInvoice.setHome("home");
+					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
+					String taskDefKey = workInvoice.getAct().getTaskDefKey();
+					model.addAttribute("workInvoice", workInvoice);
+					if (workProjectNotify.getRemarks().contains("待通知")) {
+						return "modules/workinvoice/workInvoiceView";
+					} else if (workProjectNotify.getRemarks().contains("待审批") && !"1".equals(workProjectNotify.getStatus())) {
+						if (StringUtils.isNotBlank(taskDefKey) && ("bmzr".equals(taskDefKey) ||
+								"scbzr".equals(taskDefKey))) {
+							return "modules/workinvoice/conditionWorkInvoiceAudit";
+						} else if (StringUtils.isNotBlank(taskDefKey) && "fpgly".equals(taskDefKey)) {
+							workInvoice.setDrawerName(UserUtils.getUser().getName());
+							workInvoice.setInvoiceDate(new Date());
+							model.addAttribute("workInvoice", workInvoice);
+							return "modules/workinvoice/conditionWorkInvoiceAudit";
+						}
+					} else if (workProjectNotify.getRemarks().contains("重新申请") && !"1".equals(workProjectNotify.getStatus())) {
+						return "modules/workinvoice/conditionWorkInvoiceModify";
+					}
 				} else if (workProjectNotify.getType().equals("24")) {
 				} else if (workProjectNotify.getType().equals("24")) {
 					Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 					Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 					oaLeave.setAct(getByAct(oaLeave.getProcessInstanceId()));
 					oaLeave.setAct(getByAct(oaLeave.getProcessInstanceId()));
@@ -2294,6 +2321,15 @@ public class WorkProjectNotifyController extends BaseController {
 					model.addAttribute("workInvoice",workInvoice);
 					model.addAttribute("workInvoice",workInvoice);
 					return "modules/workinvoice/workInvoiceView";
 					return "modules/workinvoice/workInvoiceView";
 				}
 				}
+				else if(workProjectNotify.getType().equals("211")){	//开票管理
+					WorkInvoice workInvoice = workInvoiceService.get(workProjectNotify.getNotifyId());
+					workInvoice.setAct(getByAct(workInvoice.getProcessInstanceId()));
+					if ( workInvoice.getAct()!=null){
+						String taskDefKey = workInvoice.getAct().getTaskDefKey();
+					}
+					model.addAttribute("workInvoice",workInvoice);
+					return "modules/workinvoice/workInvoiceView";
+				}
 				else if(workProjectNotify.getType().equals("24")){
 				else if(workProjectNotify.getType().equals("24")){
 					Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 					Leave oaLeave = leaveService.get(workProjectNotify.getNotifyId());
 					oaLeave.setAct(getByAct(oaLeave.getProcessInstanceId()));
 					oaLeave.setAct(getByAct(oaLeave.getProcessInstanceId()));

+ 1 - 0
src/main/webapp/static/common/jeeplus.js

@@ -508,6 +508,7 @@ function getAuditState(id)
         case "5":result.label = "signed";result.status="已完成";break;
         case "5":result.label = "signed";result.status="已完成";break;
         case "6":result.label = "discarding";result.status="作废中";break;
         case "6":result.label = "discarding";result.status="作废中";break;
         case "7":result.label = "discarded";result.status="已作废";break;
         case "7":result.label = "discarded";result.status="已作废";break;
+        case "9":result.label = "discarded";result.status="作废驳回";break;
         case "8":result.label = "changing";result.status="变更中";break;
         case "8":result.label = "changing";result.status="变更中";break;
         case "10":result.label = "unknown";result.status="待发起";result.action = false;break;
         case "10":result.label = "unknown";result.status="待发起";result.action = false;break;
         default:
         default:

+ 279 - 0
src/main/webapp/webpage/modules/oa/oaNotifyAdminForm.jsp

@@ -0,0 +1,279 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+    <title>通知管理</title>
+    <meta name="decorator" content="default"/>
+    <style type="text/css">
+        img {width: 50px; height: 50px;}
+    </style>
+    <script type="text/javascript" src="${ctxStatic}/ckeditor/ckeditor.js"></script>
+    <script type="text/javascript" language="JavaScript" for="window" event="onload">
+        var validateForm;
+        function doSubmit(i){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //var remarks = CKEDITOR.instances.content.getData();
+            var content = CKEDITOR.instances.contents.document.getBody().getText();
+            $("#content").val(content);
+            console.log(content+","+(content == null)+(content == undefined)+(content == ""));
+            if(content == null || content == undefined || content == "" || content == "\n"){
+                parent.layer.msg('公告内容不能为空',{icon:5});
+                return false;
+            }
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+
+            return false;
+        }
+        $(document).ready(function() {
+            //$("#name").focus();
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+            //只做查看时,禁用掉以下标签
+            $('input,textarea,select').attr('disabled',<%=request.getAttribute("disabled")%>);
+            laydate.render({
+                elem: '#startDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+            laydate.render({
+                elem: '#endDate', //目标元素。由于laydate.js封装了一个轻量级的选择器引擎,因此elem还允许你传入class、tag但必须按照这种方式 '#id .class'
+                event: 'focus', //响应事件。如果没有传入event,则按照默认的click
+                type : 'datetime'
+            });
+            $("#attachment_btn").click(function () {
+                $("#attachment_file").click();
+            });
+
+        });
+    </script>
+    <script type="text/javascript">
+        function insertTitle(tValue){
+            var list = "${oaNotify.workAttachments}";
+            var size = (list.split('url')).length-1;
+            var files = $("#attachment_file")[0].files;
+            for(var i = 0;i<files.length;i++) {
+                var file = files[i];
+                var attachmentId = "";
+                var attachmentFlag = "107";
+                console.log(file);
+                var timestamp = new Date().getTime();
+
+                var storeAs = "attachment-file/oaNotify/" + timestamp + "/" + file['name'];
+                var uploadPath = "http://gangwan-app.oss-cn-hangzhou.aliyuncs.com/" + storeAs;
+                /*将这段字符串存到数据库即可*/
+                var divId = "_attachment";
+                $("#addFile" + divId).show();
+                multipartUploadWithSts(storeAs, file, attachmentId, attachmentFlag, uploadPath, divId, size);
+            }
+        }
+
+        function changeUser(ids,names,parents) {
+            var split = ids.split(',');
+            var split2 = names.split(',');
+            $("#userTableList").html("");
+            userIdx=0;
+            for(var i=0;i<split.length;i++){
+                var id = split[i];
+                if(id==''||id==null){
+                    continue;
+                }
+                var obj = {'id':id,'name':split2[i],'officeName':parents[i]};
+                addRow('#userTableList',userIdx,userTpl,obj);
+                userIdx+=1;
+            }
+        }
+
+        function changeOffice(ids,names,parentIds) {
+            $("#officeTableList").html("");
+            officeIdx=0;
+            for(var i=0;i<ids.length;i++){
+                var obj = {'id':ids[i],'name':parentIds[i]};
+                addRow('#officeTableList',officeIdx,officeTpl,obj);
+                officeIdx+=1;
+            }
+        }
+        function getSelectOfficeIds() {
+            var selectedIds = "";
+            var pidArr = $("#officeTableList tr .officeId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+        function getSelectUserIds() {
+            var selectedIds = "";
+            var pidArr = $("#userTableList tr .userId");
+            for(var i=0;i<pidArr.length;i++){
+                selectedIds+=$(pidArr[i]).val();
+                selectedIds+=",";
+            }
+            return selectedIds;
+        }
+
+    </script>
+
+</head>
+<body >
+<div class="single-form">
+    <div class="container">
+        <form:form id="inputForm" modelAttribute="oaNotify" enctype="multipart/form-data" action="${ctx}/oa/oaNotify/adminUpdate" method="post" class="form-horizontal">
+            <form:hidden path="id"/>
+            <sys:message content="${message}"/>
+
+            <div class="form-group layui-row first">
+                <div class="form-group-label"><h2>通告信息</h2></div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>公告标题:</label>
+                    <div class="layui-input-block">
+                        <form:input path="title" htmlEscape="false" maxlength="30" class="form-control required layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>公告编号:</label>
+                    <div class="layui-input-block">
+                        <div class="input-group">
+                            <form:input path="number" htmlEscape="false" readonly="true" maxlength="30" class="form-control layui-input"/>
+                            <span class="input-group-btn">
+                                <label class="form-status"><c:choose><c:when test="${not empty oaNotify.status}">${fns:getDictLabel(oaNotify.status, 'audit_state', '')}</c:when><c:otherwise>新添</c:otherwise></c:choose></label>
+                             </span>
+                        </div>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>公告类型:</label>
+                    <div class="layui-input-block">
+                        <form:select path="type" class="form-control required simple-select">
+                            <form:options items="${fns:getMainDictList('oa_notify_type')}" itemLabel="label" itemValue="value" htmlEscape="false"/>
+                        </form:select>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建日期:</label>
+                    <div class="layui-input-block">
+                        <input id="createDate" name="createDate"  htmlEscape="false" readonly="true" class="laydate-icondate form-control layer-date layui-input laydate-icon"
+                               value="<fmt:formatDate value="${oaNotify.createDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6 ">
+                    <label class="layui-form-label"><span class="require-item">*</span>开始日期:</label>
+                    <div class="layui-input-block">
+                        <input id="startDate" name="startDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.startDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label"><span class="require-item">*</span>结束日期:</label>
+                    <div class="layui-input-block">
+                        <input id="endDate" name="endDate" style="background-color: #ffffff;" readonly="true" htmlEscape="false"  class="laydate-icondate form-control layer-date layui-input laydate-icon required"
+                               value="<fmt:formatDate value="${oaNotify.endDate}" pattern="yyyy-MM-dd HH:mm:ss"/>"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">创建人:</label>
+                    <div class="layui-input-block">
+                        <form:input id="cBName" path="createBy.name" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm6">
+                    <label class="layui-form-label">所属部门:</label>
+                    <div class="layui-input-block">
+                        <form:input id="office" path="office.topCompany" htmlEscape="false" readonly="true" class="form-control  layui-input"/>
+                    </div>
+                </div>
+                <div class="layui-item layui-col-sm12" style="padding-bottom: 20px;">
+                    <label class="layui-form-label"><span class="require-item">*</span>内容:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="contents" htmlEscape="false"  colspan="3" rows="6"  maxlength="550" class="form-control "/>
+                        <form:hidden id="content" path="content" htmlEscape="false" maxlength="64" class="form-control required"/>
+                        <sys:ckeditor replace="contents" uploadPath="/oa/oa"/>
+                    </div>
+                </div>
+            </div>
+            <div class="form-group layui-row">
+                <div class="form-group-label"><h2>附件信息</h2></div>
+                <div class="layui-item nav-btns">
+                    <a id="attachment_btn" class="nav-btn nav-btn-add" title="添加附件"><i class="fa fa-plus"></i>&nbsp;添加附件</a>
+                </div>
+                <div id="addFile_attachment" style="display: none" class="upload-progress">
+                    <span id="fileName_attachment" ></span>
+                    <b><span id="baifenbi_attachment" ></span></b>
+                    <div class="progress">
+                        <div id="jindutiao_attachment" class="progress-bar" style="width: 0%" aria-valuenow="0">
+                        </div>
+                    </div>
+                </div>
+                <input id="attachment_file" type="file" name="attachment_file" multiple="multiple" style="display: none;" onChange="if(this.value)insertTitle(this.value);"/>
+                <span id="attachment_title"></span>
+                <div class="layui-item layui-col-xs12" style="padding:0 16px;">
+                    <table id="upTable" class="table table-bordered table-condensed details">
+                        <thead>
+                        <tr>
+                                <%-- <th>序号</th>--%>
+                            <th>文件预览</th>
+                            <th>上传人</th>
+                            <th>上传时间</th>
+                            <th width="150px">操作</th>
+                        </tr>
+                        </thead>
+                        <tbody id="file_attachment">
+                        <c:forEach items="${oaNotify.workAttachments}" var = "workClientAttachment" varStatus="status">
+                            <tr>
+                                    <%-- <td>${status.index + 1}</td>--%>
+                                <c:choose>
+                                    <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpg')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'png')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'gif')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'bmp')
+                                                           or fn:containsIgnoreCase(workClientAttachment.attachmentName,'jpeg')}">
+                                        <td><img src="${workClientAttachment.url}" width="50" height="50" onclick="openDialogView('预览','${ctx}/sys/picturepreview/picturePreview?url=${workClientAttachment.url}','90%','90%')" alt="${workClientAttachment.attachmentName}"></td>
+                                    </c:when>
+                                    <c:otherwise>
+                                        <c:choose>
+                                            <c:when test="${fn:containsIgnoreCase(workClientAttachment.attachmentName,'pdf')}">
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%','1')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:when>
+                                            <c:otherwise>
+                                                <td><a class="attention-info" href="javascript:void(0)" onclick="preview('预览','${workClientAttachment.url}','90%','90%')">${workClientAttachment.attachmentName}</a></td>
+                                            </c:otherwise>
+                                        </c:choose>
+                                    </c:otherwise>
+                                </c:choose>
+                                <td>${workClientAttachment.createBy.name}</td>
+                                <td><fmt:formatDate value="${workClientAttachment.createDate}" type="both"/></td>
+                                <td class="op-td">
+                                    <div class="op-btn-box" >
+                                        <a href="javascript:location.href='${ctx}/workfullmanage/workFullManage/downLoadAttach?file='+encodeURIComponent(encodeURIComponent('${workClientAttachment.url}'));" class="op-btn op-btn-download"><i class="fa fa-download"></i>&nbsp;下载</a>
+
+                                        <c:if test="${workClientAttachment.createBy.id eq fns:getUser().id}">
+                                            <a href="javascript:void(0)" onclick="deleteFileFromAliyun(this,'${ctx}/sys/workattachment/deleteFileFromAliyun?url=${workClientAttachment.url}&id=${workClientAttachment.id}&type=2','addFile')" class="op-btn op-btn-delete" ><i class="fa fa-trash"></i>&nbsp;删除</a>
+                                        </c:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </c:forEach>
+                        </tbody>
+                    </table>
+                </div>
+            </div>
+            <div class="form-group layui-row page-end"></div>
+        </form:form>
+    </div>
+</div>
+</body>
+</html>

+ 251 - 0
src/main/webapp/webpage/modules/workinvoice/conditionWorkInvoiceAudit.jsp

@@ -0,0 +1,251 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票审批</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+		var validateForm;
+		function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+		  if(validateForm.form()){
+              if(obj == 1) {
+                  $("#flag").val("yes");
+              }else {
+                  $("#flag").val("no");
+              }
+			  $("#inputForm").submit();
+			  return true;
+		  }
+		  return false;
+		}
+		$(document).ready(function() {
+			$("#name").focus();
+			validateForm = $("#inputForm").validate({
+				submitHandler: function(form){
+					loading('正在提交,请稍等...');
+					form.submit();
+				},
+				errorContainer: "#messageBox",
+				errorPlacement: function(error, element) {
+					$("#messageBox").text("输入有误,请先更正。");
+					if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+						error.appendTo(element.parent().parent());
+					} else {
+						error.insertAfter(element);
+					}
+				}
+			});
+		});
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+	<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+		<form:hidden path="id"/>
+		<form:hidden path="home"/>
+		<form:hidden path="act.taskId"/>
+		<form:hidden path="act.taskName"/>
+		<form:hidden path="act.taskDefKey"/>
+		<form:hidden path="act.procInsId"/>
+		<form:hidden path="act.procDefId"/>
+		<form:hidden id="flag" path="act.flag"/>
+		<c:set var="status" value="${workInvoice.act.status}" />
+
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>基本信息</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectName}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+				<div class="layui-input-block">
+					<div class="input-group">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+						<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+					</div>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectId}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.client.name}"/>
+				</div>
+			</div>
+			<%--<div class="layui-item layui-col-sm6">--%>
+				<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+				<%--<div class="layui-input-block">--%>
+					<%--<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.office.name}"/>--%>
+				<%--</div>--%>
+			<%--</div>--%>
+		</div>
+		<div class="form-group layui-row first lw14">
+			<div class="form-group-label"><h2>发票详情</h2></div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">纳税人识别号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">地址:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">电话:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开户银行:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">银行账号:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">开票内容要求:</label>
+				<div class="layui-input-block">
+					<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+				</div>
+			</div>
+			<div class="layui-item layui-col-sm6">
+				<label class="layui-form-label">作废原因:</label>
+				<div class="layui-input-block">
+					<form:textarea path="remarks" readonly="true" htmlEscape="false" rows="4"  maxlength="255"  class="form-control required"/>
+				</div>
+			</div>
+                <div class="layui-item layui-col-sm12 with-textarea">
+                    <label class="layui-form-label">审批意见:</label>
+                    <div class="layui-input-block">
+                        <form:textarea path="act.comment" class="form-control " rows="5" maxlength="20"/>
+                    </div>
+                </div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>发票明细</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container">
+				<table id="contentTable" class="table table-bordered table-condensed details">
+					<thead>
+					<tr>
+						<th><span class="require-item">*</span>发票代码</th>
+						<th><span class="require-item">*</span>发票号</th>
+						<th><span class="require-item">*</span>价税合计</th>
+						<th><span class="require-item">*</span>税率</th>
+						<th><span class="require-item">*</span>金额</th>
+						<th><span class="require-item">*</span>税额</th>
+						<th><span class="require-item">*</span>累计登记金额</th>
+						<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+						<th><span class="require-item">*</span>被退标记</th>
+						<th><span class="require-item">*</span>被退票号</th>
+						<th><span class="require-item">*</span>开票日期</th>
+					</tr>
+					</thead>
+					<tbody id="workAccountList">
+					<c:if test="${not empty workInvoice.workAccountList}">
+						<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+							<tr id="workAccountList${index.index}">
+								<td title="${workAccount.code}">
+										${workAccount.code}
+								</td>
+								<td title="${workAccount.number}">
+										${workAccount.number}
+								</td>
+
+								<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.tax}">
+										${workAccount.tax}
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+								</td>
+								<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+									<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+								</td>
+								<td title="${workAccount.state}">
+										${workAccount.state}
+								</td>
+								<td title="${workAccount.backSign}">
+										${workAccount.backSign}
+								</td>
+								<td title="${workAccount.backNumber}">
+										${workAccount.backNumber}
+								</td>
+								<td>
+										<%--<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd HH:mm:ss"/>--%>
+								</td>
+							</tr>
+						</c:forEach>
+					</c:if>
+					</tbody>
+				</table>
+			</div>
+		</div>
+		<div class="form-group layui-row">
+			<div class="form-group-label"><h2>审批流程</h2></div>
+			<div class="layui-item layui-col-xs12 form-table-container" >
+				<act:flowChart procInsId="${workInvoice.act.procInsId}"/>
+				<act:histoicFlow procInsId="${workInvoice.act.procInsId}" />
+			</div>
+		</div>
+
+		<div class="form-group layui-row page-end"></div>
+	</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 504 - 0
src/main/webapp/webpage/modules/workinvoice/conditionWorkInvoiceForm.jsp

@@ -0,0 +1,504 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<%--<script src="${ctxStatic}/layer-v2.3/laydate/laydate.js"></script>--%>
+	<style>
+		#contractTypeDoc-error{
+			top:80px;
+			left:0;
+		}
+	</style>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+
+            /* $("input[name='ext']").on('ifChecked', function(event){
+                 var radioVal = $(this).val();
+                 if(radioVal == 0){
+                     $("#td1").removeClass("hide");
+                     $("#td2").addClass("hide");
+                     $("#tr1").show()
+                 }else{
+                     $("#td1").addClass("hide");
+                     $("#td2").removeClass("hide");
+                     $("#tr1").hide()
+                 }
+             });*/
+            if("${workInvoice.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            if("${workInvoice.invoiceType}" == "1"){
+                $("#invoiceType1").iCheck('check');
+                $(".invoicetype").show();
+            }else{
+                $("#invoiceType").iCheck('check');
+                $(".invoicetype").hide();
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            $("input[name='invoiceType']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                //专票必填
+                if(radioVal == 1){
+                    $(".invoicetype").show();
+                    $("#bank").attr("class","form-control required layui-input");
+                    $("#bankNumber").attr("class","form-control number required layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode required layui-input");
+                    $("#address").attr("class","form-control required layui-input");
+                    $("#telephone").attr("class","form-control isTel required layui-input");
+                }else if(radioVal == 2){
+                    $(".invoicetype").hide();
+                    $("#bank").attr("class","form-control layui-input");
+                    $("#bankNumber").attr("class","form-control number layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode layui-input");
+                    $("#address").attr("class","form-control layui-input");
+                    $("#telephone").attr("class","form-control isTel layui-input");
+                }
+            });
+            /*--------------*/
+
+        });
+        function setValuee(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#bank").val(d.bank);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#telephone").val(d.telephone);
+                    $("#address").val(d.adress);
+                    $("#ids").val(d.ids);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        function provinceForShort(province){
+            if(province == "北京市")
+                return "京";
+            else if(province == "天津市")
+                return "津";
+            else if(province == "重庆市")
+                return "渝";
+            else if(province == "上海市")
+                return "沪";
+            else if(province == "河北省")
+                return "冀";
+            else if(province == "山西省")
+                return "晋";
+            else if(province == "辽宁省")
+                return "辽";
+            else if(province == "吉林省")
+                return "吉";
+            else if(province == "黑龙江省")
+                return "黑";
+            else if(province == "江苏省")
+                return "苏";
+            else if(province == "浙江省")
+                return "浙";
+            else if(province == "安徽省")
+                return "皖";
+            else if(province == "福建省")
+                return "闽";
+            else if(province == "江西省")
+                return "赣";
+            else if(province == "山东省")
+                return "鲁";
+            else if(province == "河南省")
+                return "豫";
+            else if(province == "湖北省")
+                return "鄂";
+            else if(province == "湖南省")
+                return "湘";
+            else if(province == "广东省")
+                return "粤";
+            else if(province == "海南省")
+                return "琼";
+            else if(province == "四川省")
+                return "川/蜀";
+            else if(province == "贵州省")
+                return "黔/贵";
+            else if(province == "云南省")
+                return "云/滇";
+            else if(province == "陕西省")
+                return "陕/秦";
+            else if(province == "甘肃省")
+                return "甘/陇";
+            else if(province == "青海省")
+                return "青";
+            else if(province == "台湾省")
+                return "台";
+            else if(province == "内蒙古自治区")
+                return "内蒙古";
+            else if(province == "广西壮族自治区")
+                return "桂";
+            else if(province == "宁夏回族自治区")
+                return "宁";
+            else if(province == "新疆维吾尔自治区 ")
+                return "新";
+            else if(province == "西藏自治区")
+                return "藏";
+            else if(province == "香港特别行政区")
+                return "港";
+            else if(province == "澳门特别行政区")
+                return "澳";
+        }
+
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            console.log("-value----"+value);
+            var tax = 1 + value/100;
+            console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            console.log("-----"+num);
+            if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+                parent.layer.msg("税率必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+            }
+        }
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/cancellationAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="province" id="province"/>
+
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.number}"/>
+							<span class="input-group-btn">
+							<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+						</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.projectId}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.project.workContractInfo.client.name}"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row first">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.ext eq '0'}">本公司开票	</c:when><c:when test="${workInvoice.ext eq '1'}">上级公司开票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<c:choose><c:when test="${workInvoice.invoiceType eq '1'}">专票</c:when><c:when test="${workInvoice.invoiceType eq '2'}">普票</c:when></c:choose>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.client.name}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">纳税人识别号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.orUnicode}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">地址:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.address}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">电话:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.telephone}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开户银行:</label>
+					<div class="layui-input-block  ">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bank}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">银行账号:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.bankNumber}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="<fmt:formatNumber value="${workInvoice.money}" pattern="#,#00.00"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.content}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false" readonly="true"   class="form-control layui-input" value="${workInvoice.drawerName}"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<input htmlEscape="false"  readonly="true" class="form-control layui-input" value="<fmt:formatDate value="${workInvoice.takeDate}" pattern="yyyy-MM-dd"/>"/>
+					</div>
+				</div>
+
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>作废原因:</label>
+					<div class="layui-input-block">
+						<form:textarea path="remarks" htmlEscape="false" rows="4"  maxlength="255"  class="form-control required"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed details">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th><span class="require-item">*</span>发票状态</th><%--正常--%>
+							<th><span class="require-item">*</span>被退标记</th>
+								<%--<th><span class="require-item">*</span>被退票号</th>
+                                <th><span class="require-item">*</span>开票日期</th>--%>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						<c:if test="${not empty workInvoice.workAccountList}">
+							<c:forEach items="${workInvoice.workAccountList}" var="workAccount" varStatus="index">
+								<tr id="workAccountList${index.index}">
+									<td title="${workAccount.code}">
+											${workAccount.code}
+									</td>
+									<td title="${workAccount.number}">
+											${workAccount.number}
+									</td>
+
+									<td title="<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.totalMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.tax}">
+											${workAccount.tax}
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.taxRate}" pattern="#,#00.00"/>
+									</td>
+									<td title="<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>">
+										<fmt:formatNumber value="${workAccount.incomeMoney}" pattern="#,#00.00"/>
+									</td>
+									<td title="${workAccount.state}">
+											${workAccount.state}
+									</td>
+									<td title="${workAccount.backSign}">
+											${workAccount.backSign}
+									</td>
+										<%--<td title="${workAccount.backNumber}">
+                                                ${workAccount.backNumber}
+                                        </td>
+                                        <td title="<fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>">
+                                            <fmt:formatDate value="${workInvoice.invoiceDate}" pattern="yyyy-MM-dd"/>
+                                        </td>--%>
+								</tr>
+							</c:forEach>
+						</c:if>
+						</tbody>
+					</table>
+				</div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+
+</body>
+</html>

+ 575 - 0
src/main/webapp/webpage/modules/workinvoice/conditionWorkInvoiceModify.jsp

@@ -0,0 +1,575 @@
+<%@ page contentType="text/html;charset=UTF-8" %>
+<%@ include file="/webpage/include/taglib.jsp"%>
+<html>
+<head>
+	<title>发票管理</title>
+	<meta name="decorator" content="default"/>
+	<script type="text/javascript">
+        var validateForm;
+        function doSubmit(obj){//回调函数,在编辑和保存动作时,供openDialog调用提交表单。
+            //debugger
+            if(validateForm.form()){
+                if(obj == 2){
+                    $("#flag").val("no");
+                }else{
+                    $("#flag").val("yes");
+                }
+                $("#inputForm").submit();
+                return true;
+            }
+            return false;
+        }
+        $(document).ready(function() {
+            /*$('#money').keyup(function(){
+                var c=$(this);
+                if(/[^\d]/.test(c.val())){//替换非数字字符
+                    var temp_amount=c.val().replace(/[^\d]/g,'');
+                    $(this).val(temp_amount);
+                }
+            })*/
+            jQuery.validator.addMethod("isUscCode", function(value, element) {
+                if (this.optional(element)){
+                    return true;
+                }
+                var uscCode = /^((\w{15})|(\w{18})|(\w{20}))$/;
+                return uscCode.test(value);
+            }, "请填写正确的纳税人识别号");
+
+            $("input[name='ext']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                if(radioVal == 0){
+                    $("#td1").removeClass("hide");
+                    $("#td2").addClass("hide");
+                    $("#tr1").show()
+                }else{
+                    $("#td1").addClass("hide");
+                    $("#td2").removeClass("hide");
+                    $("#tr1").hide()
+                }
+            });
+            if("${workInvoice.ext}" == "1"){
+                $("#ext1").iCheck('check')
+            }else{
+                $("#ext").iCheck('check')
+            }
+            if("${workInvoice.invoiceType}" == "1"){
+                $("#invoiceType1").iCheck('check');
+                $(".invoicetype").show();
+            }else{
+                $("#invoiceType").iCheck('check');
+                $(".invoicetype").hide();
+            }
+            validateForm = $("#inputForm").validate({
+                submitHandler: function(form){
+                    loading('正在提交,请稍等...');
+                    form.submit();
+                },
+                errorContainer: "#messageBox",
+                errorPlacement: function(error, element) {
+                    $("#messageBox").text("输入有误,请先更正。");
+                    if (element.is(":checkbox")||element.is(":radio")||element.parent().is(".input-append")){
+                        error.appendTo(element.parent().parent());
+                    } else {
+                        error.insertAfter(element);
+                    }
+                }
+            });
+
+            $("input[name='invoiceType']").on('ifChecked', function(event){
+                var radioVal = $(this).val();
+                //专票必填
+                if(radioVal == 1){
+                    $(".invoicetype").show();
+                    $("#bank").attr("class","form-control required layui-input");
+                    $("#bankNumber").attr("class","form-control number required layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode required layui-input");
+                    $("#address").attr("class","form-control required layui-input");
+                    $("#telephone").attr("class","form-control isTel required layui-input");
+                }else if(radioVal == 2){
+                    $(".invoicetype").hide();
+                    $("#bank").attr("class","form-control layui-input");
+                    $("#bankNumber").attr("class","form-control number layui-input");
+                    $("#orUnicode").attr("class","form-control isUscCode layui-input");
+                    $("#address").attr("class","form-control layui-input");
+                    $("#telephone").attr("class","form-control isTel layui-input");
+                }
+            });
+
+        });
+        function setValuee(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getWorkClientInfo',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#bank").val(d.bank);
+                    $("#orUnicode").val(d.orUnicode);
+                    $("#bankNumber").val(d.bankNumber);
+                    $("#telephone").val(d.telephone);
+                    $("#address").val(d.adress);
+                    $("#ids").val(d.ids);
+                }
+            })
+        }
+        function setDp(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getUserDp',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#dp").val(d.dp);
+                }
+            })
+        }
+        function setPNumber(obj){
+            $.ajax({
+                type:'post',
+                url:'${ctx}/workinvoice/workInvoice/getPNumber',
+                data:{
+                    "obj":obj
+                },
+                success:function(data){
+                    var d = JSON.parse(data);
+                    $("#pNumber").val(d.pNumber);
+                    $("#cInfoName").val(d.cInfoName);
+                    $("#cName").val(d.cName);
+                    $("#officeName").val(d.officeName);
+                    $("#officeId").val(d.officeId);
+                }
+            })
+        }
+
+        function addRow(list, idx, tpl, row){
+            var idx1 = $("#workAccountList tr").length;
+            if(list == '#workAccountList' && idx1 < 100){
+                bornTemplete(list, idx, tpl, row, idx1);
+            }
+        }
+        function bornTemplete(list, idx, tpl, row, idx1){
+            $(list).append(Mustache.render(tpl, {
+                idx: idx, delBtn: true, row: row,
+                order:idx1 + 1
+            }));
+            $(list+idx).find("select").each(function(){
+                $(this).val($(this).attr("data-value"));
+            });
+            $(list+idx).find("input[type='checkbox'], input[type='radio']").each(function(){
+                var ss = $(this).attr("data-value").split(',');
+                for (var i=0; i<ss.length; i++){
+                    if($(this).val() == ss[i]){
+                        $(this).attr("checked","checked");
+                    }
+                }
+            });
+        }
+        /*function delRow(obj, prefix) {
+            var id = $(prefix + "_id");
+            var delFlag = $(prefix + "_delFlag");
+            if (id.val() == "") {
+                $(obj).parent().parent().remove();
+            } else if (delFlag.val() == "0") {
+                delFlag.val("1");
+                $(obj).html("&divide;").attr("title", "撤回删除");
+                $(obj).parent().parent().addClass("error");
+                $(obj).parent().parent().addClass("hide");
+            } else if (delFlag.val() == "1") {
+                delFlag.val("0");
+                $(obj).html("&times;").attr("title", "删除");
+                $(obj).parent().parent().removeClass("error");
+            }
+            // var idx1 = $("#workAccountList tr").length; //tr 总数
+            // for (var i = 0; i < idx1; i++) {
+            //     $("#workAccountList tr").eq(i).find("td").eq(1).html(i + 1);
+            // }
+        }*/
+        function provinceForShort(province){
+            if(province == "北京市")
+                return "京";
+            else if(province == "天津市")
+                return "津";
+            else if(province == "重庆市")
+                return "渝";
+            else if(province == "上海市")
+                return "沪";
+            else if(province == "河北省")
+                return "冀";
+            else if(province == "山西省")
+                return "晋";
+            else if(province == "辽宁省")
+                return "辽";
+            else if(province == "吉林省")
+                return "吉";
+            else if(province == "黑龙江省")
+                return "黑";
+            else if(province == "江苏省")
+                return "苏";
+            else if(province == "浙江省")
+                return "浙";
+            else if(province == "安徽省")
+                return "皖";
+            else if(province == "福建省")
+                return "闽";
+            else if(province == "江西省")
+                return "赣";
+            else if(province == "山东省")
+                return "鲁";
+            else if(province == "河南省")
+                return "豫";
+            else if(province == "湖北省")
+                return "鄂";
+            else if(province == "湖南省")
+                return "湘";
+            else if(province == "广东省")
+                return "粤";
+            else if(province == "海南省")
+                return "琼";
+            else if(province == "四川省")
+                return "川/蜀";
+            else if(province == "贵州省")
+                return "黔/贵";
+            else if(province == "云南省")
+                return "云/滇";
+            else if(province == "陕西省")
+                return "陕/秦";
+            else if(province == "甘肃省")
+                return "甘/陇";
+            else if(province == "青海省")
+                return "青";
+            else if(province == "台湾省")
+                return "台";
+            else if(province == "内蒙古自治区")
+                return "内蒙古";
+            else if(province == "广西壮族自治区")
+                return "桂";
+            else if(province == "宁夏回族自治区")
+                return "宁";
+            else if(province == "新疆维吾尔自治区 ")
+                return "新";
+            else if(province == "西藏自治区")
+                return "藏";
+            else if(province == "香港特别行政区")
+                return "港";
+            else if(province == "澳门特别行政区")
+                return "澳";
+        }
+
+        function setVs(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('allPrice','proportion');
+            var value = obj.value;
+            var p = $("#price").val() || 0;
+            if(!p || p == 0){
+                parent.layer.msg("请先填写造价指标,且不能为零",{icon:5});
+                return;
+            }
+            var num = value/p ;
+            if(!/^\d+(\.\d{1,2})?$/.test( value )){
+                parent.layer.msg("合价必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+            }
+        }
+        function setTaxMoney(obj){
+            var a = $(obj).attr("id");
+            var b = a.replace('tax','taxMoney');
+            var t = a.replace('tax','totalMoney');
+            var tr = a.replace('tax','taxRate');
+            var value = obj.value || 0;
+            console.log("-value----"+value);
+            var tax = 1 + value/100;
+            console.log("-tax----"+tax);
+            var p = $("#" +  t ).val() || 0;//获取价税合计
+            console.log("-----"+p);
+            if(!p || p == 0){
+                parent.layer.msg("请先填写价税合计,且不能为零",{icon:5});
+                return;
+            }
+            var num = p/tax || 0;
+            console.log("-----"+num);
+            if(!/^\d+(\.\d{1,2})?$/.test( tax )){
+                parent.layer.msg("税率必须输入数字",{icon:5});
+            }else{
+                $("#" +  b ).val(parseFloat(num.toFixed(2)));
+                var taxRate = p - num;
+                $("#" +  tr ).val(parseFloat(taxRate.toFixed(2)));
+            }
+        }
+
+        /*function setV(obj){
+            var a =  $(obj).attr("id");
+            var b = $("#province").val();
+            var c = provinceForShort(b);//开票单位所在省/直辖市简称
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+			var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }*/
+        function setV(obj){
+            var a =  $(obj).attr("id");
+            var c = "京";
+            var date=new Date;
+            var year=date.getFullYear();
+            var month=date.getMonth()+1;
+            month =(month<10 ? "0"+month:month);
+            var mydate = (year.toString()+month.toString());
+            var timestamp="["+mydate+"]";//获取固定格式年月
+            var number = c+timestamp;
+            $("#" +  a ).val(number);
+        }
+	</script>
+</head>
+<body>
+<div class="single-form">
+	<div class="container">
+		<form:form id="inputForm" modelAttribute="workInvoice" action="${ctx}/workinvoice/workInvoice/saveAudit" method="post" class="form-horizontal">
+			<form:hidden path="id"/>
+			<form:hidden path="invoiceDate"/>
+			<form:hidden path="home"/>
+			<form:hidden path="act.taskId"/>
+			<form:hidden path="act.taskName"/>
+			<form:hidden path="act.taskDefKey"/>
+			<form:hidden path="act.procInsId"/>
+			<form:hidden path="act.procDefId"/>
+			<form:hidden id="flag" path="act.flag"/>
+			<form:hidden path="province" id="province"/>
+			<%--<form:hidden path="invoiceNumber"/>--%>
+
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>基本信息</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目名称:</label>
+					<div class="layui-input-block  with-icon">
+						<input type="hidden" value="" id ="ids">
+						<sys:gridselectcallprojectt url="${ctx}/workinvoice/workInvoice/selectproject" id="project" name="project.id"  value="${workInvoice.project.id}"  title="选择所属项目" labelName="workInvoice.project.projectName"
+													labelValue="${workInvoice.project.projectName}" cssClass="form-control required layui-input" fieldLabels="项目" fieldKeys="projectName" searchLabel="项目名称" searchKey="projectName" ></sys:gridselectcallprojectt>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">发票申请编号:</label>
+					<div class="layui-input-block">
+						<div class="input-group">
+							<form:input path="number" htmlEscape="false" readonly="true"   class="form-control layui-input"/>
+							<span class="input-group-btn">
+								<label class="form-status"><c:choose><c:when test="${ empty workInvoice.invoiceState}">新添</c:when><c:otherwise>${fns:getDictLabel(workInvoice.invoiceState, 'audit_state','')}</c:otherwise>	</c:choose></label>
+							</span>
+						</div>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>合同名称:</label>
+					<div class="layui-input-block">
+						<form:input id ="cInfoName" path="project.workContractInfo.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>项目编号:</label>
+					<div class="layui-input-block">
+						<form:input id ="pNumber" path="project.projectId" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>委托方:</label>
+					<div class="layui-input-block">
+						<form:input id ="cName" path="project.workContractInfo.client.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<%--<div class="layui-item layui-col-sm6">--%>
+					<%--<label class="layui-form-label"><span class="require-item">*</span>所属部门:</label>--%>
+					<%--<div class="layui-input-block">--%>
+						<%--<form:input id ="officeName" path="office.name" htmlEscape="false"  readonly="true" class="form-control layui-input"/>--%>
+						<%--<form:hidden path="office.id" id ="officeId" />--%>
+					<%--</div>--%>
+				<%--</div>--%>
+			</div>
+			<div class="form-group layui-row first lw14">
+				<div class="form-group-label"><h2>发票详情</h2></div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>上级/本公司开票:</label>
+					<div class="layui-input-block">
+						<c:choose>
+							<c:when test="${workInvoice.invoiceState == 4}">
+								<c:choose>
+									<c:when test="${workInvoice.ext ==0}">
+										<input value = "本公司开票" readonly="true" class="form-control layui-input"/>
+									</c:when>
+									<c:otherwise>
+										<input value = "上级公司开票" readonly="true"  class="form-control layui-input"/>
+									</c:otherwise>
+								</c:choose>
+							</c:when>
+							<c:otherwise>
+								<input type="radio" class="i-checks" name="ext" checked id="ext" value="0">
+								<label for="ext">本公司开票</label>
+								<input type="radio" class="i-checks" name="ext" id="ext1" value="1">
+								<label for="ext1">上级公司开票</label>
+							</c:otherwise>
+						</c:choose>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>发票类型:</label>
+					<div class="layui-input-block">
+						<input type="radio" class="i-checks" name="invoiceType" checked id="invoiceType1" value="1">
+						<label for="invoiceType1">专票</label>
+						<input type="radio" class="i-checks" name="invoiceType" id="invoiceType" value="2">
+						<label for="invoiceType">普票</label>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item">*</span>实际开票单位:</label>
+					<div class="layui-input-block with-icon">
+						<sys:gridselect url="${ctx}/workinvoice/workInvoice/selectclient" id="client" name="client.id"  value="${workInvoice.client.id}"  title="选择开票单位" labelName="workInvoice.client.name"
+										labelValue="${workInvoice.client.name}" cssClass="form-control required layui-input" fieldLabels="单位" fieldKeys="name" searchLabel="客户名称" searchKey="name" ></sys:gridselect>
+						</td>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>纳税人识别号:</label>
+					<div class="layui-input-block">
+						<form:input id="orUnicode" path="orUnicode" htmlEscape="false"    class="form-control isUscCode layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>地址:</label>
+					<div class="layui-input-block">
+						<form:input id="address" path="address" htmlEscape="false"    class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>电话:</label>
+					<div class="layui-input-block">
+						<form:input id="telephone" path="telephone" htmlEscape="false"    class="form-control isTel layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>开户银行:</label>
+					<div class="layui-input-block">
+						<form:input id ="bank"  path="bank" htmlEscape="false"   class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label"><span class="require-item invoicetype">*</span>银行账号:</label>
+					<div class="layui-input-block">
+						<form:input id="bankNumber" path="bankNumber" htmlEscape="false"   class="form-control number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12">
+					<label class="layui-form-label"><span class="require-item">*</span>价税合计(元):</label>
+					<div class="layui-input-block">
+						<input name="money" htmlEscape="false"  value="<fmt:formatNumber value="${workInvoice.money}" pattern="#.00#"/>" class="form-control required number layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm12 with-textarea">
+					<label class="layui-form-label">开票内容要求:</label>
+					<div class="layui-input-block">
+						<form:textarea path="content" id="contractTypeDoc" htmlEscape="false" rows="4"    class="form-control"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票人:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true"  class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">开票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+				<div class="layui-item layui-col-sm6">
+					<label class="layui-form-label">领票时间:</label>
+					<div class="layui-input-block">
+						<form:input id=""  path="" htmlEscape="false" readonly="true" class="form-control layui-input"/>
+					</div>
+				</div>
+			</div>
+			<div class="form-group layui-row">
+				<div class="form-group-label"><h2>发票明细</h2></div>
+				<div class="layui-item layui-col-xs12 form-table-container">
+					<table id="contentTable" class="table table-bordered table-condensed can-edit">
+						<thead>
+						<tr>
+							<th><span class="require-item">*</span>发票代码</th>
+							<th><span class="require-item">*</span>发票号</th>
+							<th><span class="require-item">*</span>价税合计</th>
+							<th><span class="require-item">*</span>税率</th>
+							<th><span class="require-item">*</span>金额</th>
+							<th><span class="require-item">*</span>税额</th>
+							<th><span class="require-item">*</span>累计登记金额</th>
+							<th width="150px">操作</th>
+						</tr>
+						</thead>
+						<tbody id="workAccountList">
+						</tbody>
+					</table>
+					<script type="text/template" id="workAccountListTpl">//<!--
+                                    <tr id="workAccountList{{idx}}">
+                                        <td class="hide">
+                                            <input id="workAccountList{{idx}}_id" name="workAccountList[{{idx}}].id" type="hidden" value="{{row.id}}"/>
+                                            <input id="workAccountList{{idx}}_delFlag" name="workAccountList[{{idx}}].delFlag" type="hidden" value="0"/>
+                                        </td>
+                                    	<td>
+                                        	<input id="workAccountList{{idx}}_code" name="workAccountList[{{idx}}].code" type="text" value="{{row.code}}"    class="form-control required"/>
+                                   		 </td>
+                                    	 <td>
+                                        	<input id="workAccountList{{idx}}_number" name="workAccountList[{{idx}}].number" type="text" value="{{row.number}}"    class="form-control required"/>
+                                   		 </td>
+                                    	<td>
+                                            <input id="workAccountList{{idx}}_totalMoney"  name="workAccountList[{{idx}}].totalMoney" type="text" value="{{row.totalMoney}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                        <div class="input-group">
+                                            <input id="workAccountList{{idx}}_tax" onblur="setTaxMoney(this)" name="workAccountList[{{idx}}].tax" type="text" value="{{row.tax}}"    class="form-control number required"/><span class="input-group-addon">%</span>
+                                            </div>
+
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_taxMoney" name="workAccountList[{{idx}}].taxMoney" type="text" value="{{row.taxMoney}}"    class="form-control required"/>
+                                        </td>
+										<td>
+                                            <input id="workAccountList{{idx}}_taxRate" name="workAccountList[{{idx}}].taxRate" type="text" value="{{row.taxRate}}"    class="form-control required"/>
+                                        </td>
+                                        <td>
+                                            <input id="workAccountList{{idx}}_incomeMoney" name="workAccountList[{{idx}}].incomeMoney" type="text" value="0"  readonly="true"  class="form-control required"/>
+                                        </td>
+
+                                            <input id="workAccountList{{idx}}_state" name="workAccountList[{{idx}}].state"  type="hidden" value="正常"   class="form-control"/>
+
+                                            <input id="workAccountList{{idx}}_backSign" name="workAccountList[{{idx}}].backSign"  type="hidden" value="正常"  readonly="true"  class="form-control required"/>
+
+                                            <input id="workAccountList{{idx}}_backNumber" name="workAccountList[{{idx}}].backNumber"  type="hidden" value=""  readonly="true"  class="form-control required"/>
+
+
+                                        <td class="text-center" width="10">
+                                            {{#delBtn}}<span class="close" onclick="delRow(this, '#workAccountList{{idx}}')" title="删除">&times;</span>{{/delBtn}}
+                                        </td>
+                                    </tr>//-->
+					</script>
+					<script type="text/javascript">
+                        var workAccountListRowIdx = 0, workAccountListTpl = $("#workAccountListTpl").html().replace(/(\/\/\<!\-\-)|(\/\/\-\->)/g,"");
+                        $(document).ready(function() {
+                            var data = ${fns:toJson(workInvoice.workAccountList)};
+                            for (var i=0; i<data.length; i++){
+                                addRow('#workAccountList', workAccountListRowIdx, workAccountListTpl, data[i]);
+                                workAccountListRowIdx = workAccountListRowIdx + 1;
+                            }
+                        });
+					</script></div>
+			</div>
+			<div class="form-group layui-row page-end"></div>
+		</form:form>
+	</div>
+</div>
+</body>
+</html>

+ 20 - 2
src/main/webapp/webpage/modules/workinvoice/workInvoiceList.jsp

@@ -312,7 +312,7 @@
             ,elem: '#contentTable'
             ,elem: '#contentTable'
             ,page: false
             ,page: false
             ,cols: [[
             ,cols: [[
-				{checkbox: true, fixed: true},
+				//{checkbox: true, fixed: true},
                 {field:'index',align:'center', title: '序号',width:40}
                 {field:'index',align:'center', title: '序号',width:40}
 				,{field:'projName',align:'center', title: '项目名称', minWidth:160,templet:function(d){
 				,{field:'projName',align:'center', title: '项目名称', minWidth:160,templet:function(d){
 						return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/ruralProject/ruralProjectRecords/view?id=" + d.projectId +"','95%', '95%')\">" + d.projName + "</a>";
 						return "<a class=\"attention-info\" title=\"" + d.projName + "\" href=\"javascript:void(0);\" onclick=\"openDialogView('查看项目', '${ctx}/ruralProject/ruralProjectRecords/view?id=" + d.projectId +"','95%', '95%')\">" + d.projName + "</a>";
@@ -390,6 +390,16 @@
                         {
                         {
                             xml += "<a href=\"javascript:void(0)\" onclick=\"contractOpenDialogre('变更发票管理', '${ctx}/workinvoice/workInvoice/alterForm?id="+ d.id +"','95%','95%')\" class=\"op-btn op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
                             xml += "<a href=\"javascript:void(0)\" onclick=\"contractOpenDialogre('变更发票管理', '${ctx}/workinvoice/workInvoice/alterForm?id="+ d.id +"','95%','95%')\" class=\"op-btn op-btn-revert\" ><i class=\"fa fa-edit\"></i> 变更</a>";
                         }*/
                         }*/
+
+						if(d.cancellationFlag != undefined && d.cancellationFlag =="1")
+						{
+							xml +="<a href=\"javascript:void(0)\" onclick=\"openDialogreplay('作废发票', '${ctx}/workinvoice/workInvoice/cancellationForm?id=" + d.id + "&tabId=3','95%','95%')\" class=\"op-btn op-btn-invalid\" ><i class=\"fa fa-trash-o\"></i> 作废</a>";
+						}
+
+						if(d.adminFlag != undefined && d.adminFlag =="1")
+						{
+							xml += "<a href=\"${ctx}/workinvoice/workInvoice/delete?id=" + d.id + "\" onclick=\"return confirmx('确认要删除该发票记录吗?', this.href)\"   class=\"op-btn op-btn-delete\"><i class=\"fa fa-trash\"></i> 删除</a>";
+						}
                         return xml;
                         return xml;
 
 
                     }}
                     }}
@@ -414,10 +424,10 @@
                     ,"officeName":"${workInvoice.office.name}"
                     ,"officeName":"${workInvoice.office.name}"
                     ,"responsibleName":"${workInvoice.createBy.name}"
                     ,"responsibleName":"${workInvoice.createBy.name}"
                     ,"receiptMoney":"${workInvoice.receiptMoney}"
                     ,"receiptMoney":"${workInvoice.receiptMoney}"
+                    ,"status":"${workInvoice.invoiceState}"
                     ,"money":"<fmt:formatNumber value="${workInvoice.money}" pattern="#,#0.00"/>"
                     ,"money":"<fmt:formatNumber value="${workInvoice.money}" pattern="#,#0.00"/>"
                     ,"createDate":"<fmt:formatDate value="${workInvoice.createDate}" pattern="yyyy-MM-dd"/>"
                     ,"createDate":"<fmt:formatDate value="${workInvoice.createDate}" pattern="yyyy-MM-dd"/>"
                     ,"receiptMoneyDate":"<fmt:formatDate value="${workInvoice.receiptMoneyDate}" pattern="yyyy-MM-dd"/>"
                     ,"receiptMoneyDate":"<fmt:formatDate value="${workInvoice.receiptMoneyDate}" pattern="yyyy-MM-dd"/>"
-                    ,"status":"${workInvoice.invoiceState}"
                     <c:if test="${workInvoice.invoiceState == 1 && fns:getUser().id == workInvoice.createBy.id}"><shiro:hasPermission name="workinvoice:workInvoice:edit">,"canedit1":"1"</shiro:hasPermission></c:if><%--暂存-修改--%>
                     <c:if test="${workInvoice.invoiceState == 1 && fns:getUser().id == workInvoice.createBy.id}"><shiro:hasPermission name="workinvoice:workInvoice:edit">,"canedit1":"1"</shiro:hasPermission></c:if><%--暂存-修改--%>
                     <c:if test="${workInvoice.invoiceState == '4' && fns:getUser().id == workInvoice.createBy.id}">,"canedit2":"1"</c:if><%--驳回--修改--%>
                     <c:if test="${workInvoice.invoiceState == '4' && fns:getUser().id == workInvoice.createBy.id}">,"canedit2":"1"</c:if><%--驳回--修改--%>
                     <c:if test="${workInvoice.invoiceState == '3' && fns:getUser().id == workInvoice.createBy.id}">,"canedit3":"1"</c:if><%--撤回--修改--%>
                     <c:if test="${workInvoice.invoiceState == '3' && fns:getUser().id == workInvoice.createBy.id}">,"canedit3":"1"</c:if><%--撤回--修改--%>
@@ -430,6 +440,14 @@
 							<c:when test="${workInvoice.invoiceState == '7'}">"是"</c:when>
 							<c:when test="${workInvoice.invoiceState == '7'}">"是"</c:when>
 					<c:otherwise>"否"</c:otherwise>
 					<c:otherwise>"否"</c:otherwise>
 					</c:choose>
 					</c:choose>
+					,"cancellationFlag":<c:choose>
+							<c:when test="${workInvoice.invoiceState == 5 && workInvoice.cancellation == '1'}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
+					,"adminFlag":<c:choose>
+							<c:when test="${workInvoice.invoiceState == 5 && workInvoice.adminFlag == '1'}">"1"</c:when>
+					<c:otherwise>"0"</c:otherwise>
+					</c:choose>
                 }
                 }
                 </c:forEach>
                 </c:forEach>
                 </c:if>
                 </c:if>