ERP合同审核流程处理(二十九)
合同审批流程:
前端的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | <%@ Page Language= "C#" AutoEventWireup= "true" CodeBehind= "CRMContractEidt.aspx.cs" Inherits= "BioErpWeb.CRMSystem.CRMContract.CRMContractEidt" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" > <html xmlns= "http://www.w3.org/1999/xhtml" > <head runat= "server" > <title></title> <link href= "../../Styles/ERPBaseStyle.css" rel= "stylesheet" type= "text/css" /> <script src= "../../JS/CheckUserName.js" type= "text/javascript" ></script> <script src= "../../Scripts/jquery-1.4.1.js" type= "text/javascript" ></script> <script src= "../../Scripts/jquery.validate.js" type= "text/javascript" ></script> <script src= "../../Scripts/validateExtender.js" type= "text/javascript" ></script> <script src= "../../Scripts/ValidateMessage_ZW.js" type= "text/javascript" ></script> <script src= "../../Scripts/jquery.metadata.js" type= "text/javascript" ></script> <script src= "../../JS/CustomerName.js" type= "text/javascript" ></script> <link href= "../../Styles/InputStyle1.css" rel= "stylesheet" type= "text/css" /> <script src= "../../JS/CheckDepartMent.js" type= "text/javascript" ></script> <script src= "../../Scripts/jquery-ui-1.7.custom.min.js" type= "text/javascript" ></script> <link href= "../../Scripts/jquery-ui-1.7.custom.css" rel= "stylesheet" type= "text/css" /> <script type= "text/javascript" > $(document).ready( function () { $( "#form1" ).validate(); $( "#txtCreatTime" ).datepicker({ dateFormat: 'yy-mm-dd' }); $( "#txtSinTime" ).datepicker({ dateFormat: 'yy-mm-dd' }); $( "#txtEffectiveTime" ).datepicker({ dateFormat: 'yy-mm-dd' }); $( "#txtEndTime" ).datepicker({ dateFormat: 'yy-mm-dd' }) }); </script> <style type= "text/css" > .style1 { width: 73px; } </style> </head> <body> <form id= "form1" runat= "server" > <div> < table class= "maintable Inupttable" style= " width:900px;" > <tr> <td colspan= "8" class= "titlebar" >合同审核</td> </tr> <tr> <td class= "style1" >合同名称</td><td class= "style3" ><asp:TextBox ID= "txtName" CssClass= "required" runat= "server" ></asp:TextBox></td> <td class= "style4" >下次审批人</td><td><asp:TextBox ID= "txtUser1" CssClass= "{required:true,digits:true, min:1}" runat= "server" ></asp:TextBox> <input id= "btnuser1" type= "button" value= "选择" onclick= "showDialog3()" class= "btnchoose" /> </td> <td class= "style7" >合同负责人</td><td class= "style6" ><asp:TextBox ID= "txtUser2" CssClass= "{required:true,digits:true, min:1}" runat= "server" ></asp:TextBox> <input id= "btnUser2" type= "button" value= "选择" onclick= "showDialog3()" class= "btnchoose" /> </td> <td>所属部门</td><td> <asp:TextBox ID= "txtDepartMentID" CssClass= "{required:true,digits:true, min:1}" runat= "server" ></asp:TextBox> <input id= "btnDepart" type= "button" value= "选择" class= "btnchoose" onclick= "showDepartMentDialog2()" /></td> </tr> <tr> <td class= "style1" >签约客户</td><td class= "style3" ><asp:TextBox ID= "txtCustomer" CssClass= "{required:true,digits:true, min:1}" runat= "server" ></asp:TextBox> <input id= "btncustomer" type= "button" value= "选择" onclick= "showCustomerDialog3()" class= "btnchoose" /> </td> <td class= "style4" >签约金额</td><td><asp:TextBox ID= "txtSum" CssClass= "{required:true,number:true}" runat= "server" ></asp:TextBox>元(RMB)</td> <td class= "style7" >合同创建时间</td><td class= "style6" ><asp:TextBox ID= "txtCreatTime" CssClass= "{required:true,dateISO:true}" runat= "server" ></asp:TextBox></td> <td>计划签约时间</td><td><asp:TextBox ID= "txtSinTime" CssClass= "{required:true,dateISO:true}" runat= "server" ></asp:TextBox></td> </tr> <tr> <td class= "style1" >生效时间</td><td class= "style3" ><asp:TextBox ID= "txtEffectiveTime" CssClass= "{required:true,dateISO:true}" runat= "server" ></asp:TextBox></td> <td class= "style4" >截止</td><td colspan= "5" ><asp:TextBox ID= "txtEndTime" CssClass= "{required:true,dateISO:true}" runat= "server" ></asp:TextBox></td> </tr> <tr> <td class= "style1" >合同内容</td><td colspan= "7" > <asp:TextBox ID= "txtDesc" CssClass= "required" runat= "server" Height= "300px" Width= "100%" Rows = "10" TextMode= "MultiLine" ></asp:TextBox></td> </tr> <tr> <td class= "style1" >合同附件</td><td colspan= "5" > <asp:FileUpload ID= "FileUpload1" runat= "server" Width= "200px" /> <asp:ImageButton ID= "ImageButton1" runat= "server" ImageUrl= "~/Web/images/files.gif" Width= "26px" Height= "24px" onclick= "ImageButton1_Click" /> (下载)</td> <td>合同类型</td><td> <asp:DropDownList ID= "ddlType" runat= "server" > <asp:ListItem>买卖合同</asp:ListItem> <asp:ListItem>运输合同</asp:ListItem> <asp:ListItem>技术合同</asp:ListItem> <asp:ListItem>保管合同</asp:ListItem> <asp:ListItem>仓储合同</asp:ListItem> <asp:ListItem>委托合同</asp:ListItem> </asp:DropDownList> </td> </tr> <tr> <td class= "style1" >历史意见</td><td colspan= "7" > <asp:Label ID= "lbHistory" Width= "99%" runat= "server" Text= "" ></asp:Label> </td> </tr> <tr> <td class= "style1" >审批意见</td><td colspan= "5" > <asp:TextBox ID= "txtMind" Width= "80%" runat= "server" ></asp:TextBox> </td> <td> <asp:Label ID= "lbIsCheck" runat= "server" Visible= "false" Text= "法律顾问意见" ></asp:Label> </td><td> <asp:CheckBox ID= "cbIsCheck" Text= "符合法律效应" Visible= "false" BorderStyle= "None" runat= "server" /></td> </tr> <tr> <td colspan= "8" class= "bottomtd" > <asp:Button ID= "btnSubmit" runat= "server" Text= "合同申请提交" onclick= "btnSubmit_Click" /> </td> </tr> </ table > </div> </form> </body> </html> |
根据员工编号返回员工权限字符串的自定义函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | -- Description: 根据员工编号返回员工权限字符串 -- ============================================= CREATE FUNCTION [dbo].[GetUserRightsByUserID] ( @userid INT ) RETURNS NVARCHAR(200) AS BEGIN DECLARE cur CURSOR FOR SELECT RightID FROM dbo.tbUserRight WHERE tbUserRight.UserId =@userid OPEN cur DECLARE @Rightid NVARCHAR(20) DECLARE @Rightids NVARCHAR(1000) SET @Rightids= '' FETCH NEXT FROM cur INTO @Rightid WHILE @@FETCH_STATUS =0 BEGIN SET @Rightids=@Rightids+@Rightid+ ',' FETCH NEXT FROM cur INTO @Rightid END CLOSE cur DEALLOCATE cur RETURN @Rightids END |
存储过程的封装:
1 2 3 4 5 6 7 | CREATE PROCEDURE Sp_getUserRightsbyUserid @userid int AS BEGIN SET NOCOUNT ON ; SELECT dbo.GetUserRightsByUserID(@userid) END |
公用类的调用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | /// <summary> /// 根据用户编号返回用户的权限值字符串 /// </summary> /// <param name = "userid" >用户编号</param> /// < returns >权限值字符串</ returns > public static string getUserRightsByUserId(string userid) { //dbo.GetUserRightsByUserID SqlParameter[] pars = new SqlParameter[]{ new SqlParameter( "@userid" ,userid) }; object obj= DataBaseHelper.SelectSQLReturnObject( "Sp_getUserRightsbyUserid" , CommandType.StoredProcedure, pars); if (obj != null ) { return obj.ToString(); } else { return "" ; } } |
后端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | static byte[] filecontent = null ; static string contractid = "" ; static string tasklistid = "" ; static string documentsid = "" ; /// <summary> /// 绑定页面信息 /// </summary> protected void pageinfo() { contractid = "5" ; tasklistid = "2" ; #region 从合同信息表中绑定数据 CrmContractBLL cbll = new CrmContractBLL(); ViewContactInfo contactinfo = new ViewContactInfo(); contactinfo = cbll.getViewContactInfoByContactID(contractid); this.txtName.Text = contactinfo.ContractName; this.txtUser2.Text = contactinfo.UserID.ToString(); this.txtSinTime.Text = Convert .ToDateTime(contactinfo.SignTime.ToString()).ToString( "yyyy-MM-dd" ); this.txtCreatTime.Text = Convert .ToDateTime(contactinfo.CreateTime.ToString()).ToString( "yyyy-MM-dd" ); this.txtCustomer.Text = contactinfo.CustomerID.ToString(); this.txtSum.Text = Convert .ToDecimal(contactinfo.ContractSum.ToString()).ToString( "0.00" ); this.txtEffectiveTime.Text = Convert .ToDateTime(contactinfo.EffectiveTime).ToString( "yyyy-MM-dd" ); this.txtDesc.Text = contactinfo.ContractDesc; this.txtEndTime.Text = Convert .ToDateTime(contactinfo.EndTime).ToString( "yyyy-MM-dd" ); this.ddlType.SelectedItem.Text = contactinfo.ContractType.ToString(); this.cbIsCheck.Checked =bool.Parse(contactinfo.AssessorAuditing.ToString()); #endregion #region 从流程表中绑定数据 //1代表 合同管理表单 System.Data.DataTable dt = SqlComm.getTaskListRecordsByCondition(contractid, "1" ); System.Data.DataRow[] dr0 = dt. Select ( " listID=" + tasklistid); //如果当前表单流程的审批人和当前登录用户不一致,则跳出 if (dr0[0].ItemArray[5].ToString() != Session[ "Userid" ].ToString()) { this.FileUpload1.Visible = false ; } else { this.FileUpload1.Visible = true ; } string historys = "" ; for ( int i = 1; i < dt. Rows . Count ; i++) { historys+= dt. Rows [i][ "Mind" ].ToString() + " " + Convert .ToDateTime(dt. Rows [i][ "SumitTime" ].ToString()).ToString( "yyyy-MM-dd" )+ "</br>" ; } if (historys.Length == 0) { historys = "暂无审核意见" ; } this.lbHistory.Text = historys; this.txtDepartMentID.Text = dr0[0].ItemArray[12].ToString(); this.txtUser1.Text = dr0[0].ItemArray[5].ToString(); #endregion filecontent = Comm.GetDownDocumet( "BioCrmCorrelationDocument" , "Content" , " DocumentID=" + contactinfo.DocumentID); documentsid = contactinfo.DocumentID.ToString(); if (SqlComm.getUserRightsByUserId(Session[ "Userid" ].ToString()). Contains ( "45" ) || this.cbIsCheck.Checked== true ) { this.lbIsCheck.Visible = true ; this.cbIsCheck.Visible = true ; } else { this.lbIsCheck.Visible = false ; this.cbIsCheck.Visible = false ; } } //如果不是合同负责人本人,则不能修改合同的相关信息,只能发表审批意见或则如果是法律顾问权限人员则可以修改法律审核备注 protected void btnSubmit_Click(object sender, EventArgs e) { CrmContractBLL conbll = new CrmContractBLL(); BioCRMContract contract = new BioCRMContract(); CRMContractDocument condocument = null ; TaskListRecord tasklistRecord = null ; BioCrmCorrelationDocument document= null ; //获取合同相关信息 contract.ContractID = int .Parse(contractid); contract.UserID = int .Parse(this.txtUser2.Text); contract.ContractName = this.txtName.Text; contract.CustomerID = int .Parse(this.txtCustomer.Text); contract.ContractSum = decimal .Parse(this.txtSum.Text); contract.ContractType = this.ddlType.SelectedValue; contract.EndTime = Convert .ToDateTime(this.txtEndTime.Text); contract.EffectiveTime = Convert .ToDateTime(this.txtEffectiveTime.Text); contract.SignTime = Convert .ToDateTime(this.txtSinTime.Text); contract.ContractDesc = this.txtDesc.Text; contract.ExecutiveState = "待审核" ; if (this.cbIsCheck.Visible == true ) { contract.AssessorAuditing = cbIsCheck.Checked; } contract.CreateTime = Convert .ToDateTime(this.txtCreatTime.Text); int count = conbll.BioCRMContractaUpdate(contract); //文档基本信息 if (this.FileUpload1.HasFile) { document = new BioCrmCorrelationDocument() { DocumentID = int .Parse(documentsid.ToString()), Subject = this.txtName.Text, Content = this.FileUpload1.FileBytes, DocumentSize =this.FileUpload1.FileContent.Length, Type = this.FileUpload1.PostedFile.ContentType, ExetendName = System.IO.Path.GetExtension(this.FileUpload1.FileName), DocumentLevel = "绝密" , Name = this.FileUpload1.FileName, Remark = "合同附件文档" , UserID = int .Parse(this.txtUser2.Text), UploadTime = DateTime.Now }; BioCrmCorrelationDocumentBLL documentbll = new BioCrmCorrelationDocumentBLL(); documentbll.BioCrmCorrelationDocumentUpdate(document); } tasklistRecord = new TaskListRecord() { Accepter = int .Parse(this.txtUser1.Text), Transmitter = int .Parse(this.txtUser2.Text), AuditingSate = 0, DepartMentId = int .Parse(this.txtDepartMentID.Text), FirstAccepter = int .Parse(this.txtUser1.Text), FirstSumitTime = DateTime.Now, FirstTransmitter = int .Parse(Session[ "Userid" ].ToString()), Mind =this.txtMind.Text, Pass = 1, Subject = this.txtName.Text, SumitTime = DateTime.Now, TaskID = int .Parse(contractid), TaskTableID = 1 }; //向流程表添加一条新的记录 if (SqlComm.TaskListRecordAdd(tasklistRecord) != 0) { SqlComm.UpdateTableByCondition( "dbo.TaskListRecord" , " AuditingSate=1" , " ListID=" + tasklistid); ClientScript.RegisterStartupScript(this.GetType(), "test" , "alert('合同申请提交成功,下次审批人员编号:" + this.txtUser1.Text + "')" , true ); } } /// <summary> /// 下载 /// </summary> /// <param name = "sender" ></param> /// <param name = "e" ></param> protected void ImageButton1_Click(object sender, ImageClickEventArgs e) { //创建弹出式Windows下载窗体 Response.AddHeader( "Content-Disposition" , "attachment;filename=" + HttpUtility.UrlEncode(this.txtName.Text)); //把二进制数组写入Http输出流 Response.BinaryWrite(filecontent); //想当前客户端缓冲区输出 Response.Flush(); //停止执行 Response. End (); } |
创建没有审核的视图:
1 2 3 4 5 6 7 | CREATE VIEW View_NoAuditingState AS SELECT ListID,Subject,dbo.TaskListRecord.TaskID,dbo.TaskListRecord.TaskTableID ,Transmitter,Accepter,SumitTime,LinEdit=( SELECT LinkEdit FROM dbo.TaskNavigate WHERE dbo.TaskNavigate.TaskTableID= dbo.TaskListRecord.TaskTableID ) FROM dbo.TaskListRecord |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | /// <summary> /// 获取未审核表单信息 /// </summary> public void getNoAuditing() { NoAuditingList.DataSource= SqlComm.GetDataByCondition( "dbo.View_NoAuditingSate" , "*" , " AuditingSate=0 and Accepter='" + Session[ "Userid" ] + "'" ); this.NoAuditingList.DataBind(); } public string setToString(string str) { if (str == "0" ) { return "未受理" ; } else if (str == "1" ) { return "受理中" ; } else if (str == "2" ) { return "已解决" ; } else { return "过期" ; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了