/// <summary> /// add timesheet invoice page use this method /// </summary> /// <param name="entityId"></param> /// <returns></returns> public ProposalInvoiceModel GetInvoiceModelById(int entityId) { StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT Invoices.* ,"); strSql.Append("ProposalTracker.Title AS ProposalTitle,"); strSql.Append("ProposalTracker.PONo AS PONo,"); strSql.Append("Projects.ProjectID AS ProjectId,"); strSql.Append("Projects.Title AS ProjectTitle,"); strSql.Append("Companys.ComID AS CompanyId,"); strSql.Append("Companys.CompanyName AS CompanyName, "); strSql.Append("TS.Hours AS [HOURS]"); strSql.Append("FROM Invoices AS Invoices "); strSql.Append("LEFT JOIN dbo.ProposalTracker AS ProposalTracker ON ProposalTracker.ProposalTrackerID = Invoices.ProposalId "); strSql.Append("LEFT JOIN dbo.Projects AS Projects ON ProposalTracker.ProjectID = Projects.ProjectID "); strSql.Append("LEFT JOIN dbo.Companys AS Companys ON Projects.CompanyID = Companys.ComID "); strSql.Append("LEFT JOIN dbo.TSInvoiceRelation AS TR ON Invoices.ID = TR.InvoiceId "); strSql.Append("LEFT JOIN dbo.TimeSheets AS TS ON TR.TSId = TS.ID "); strSql.Append(" where Invoices.ID=@entityId "); Database db = DatabaseFactory.CreateDatabase(); using (DbCommand dbCommand = db.GetSqlStringCommand(strSql.ToString())) { db.AddInParameter(dbCommand, "entityId", DbType.Int32, entityId); ProposalInvoiceModel model = null; using (IDataReader dataReader = db.ExecuteReader(dbCommand)) { try { if (dataReader.Read()) { model = ProposalInvoiceModel.ReaderBind(dataReader); } } catch (Exception ex) { WebLogAgent.Write(string.Format("[SQLText:{0},{1}Messages:\r\n{2}]" , strSql.ToString(), base.FormatParameters(dbCommand.Parameters), ex.Message)); return(null); } } return(model); } }
/// <summary> /// All Invoices page,Pass Due page,Awaiting Payment page use this method /// </summary> /// <param name="request"></param> /// <returns></returns> public SearchInvoiceResponse SearchInvoices(SearchInvoiceRequest request) { StringBuilder sqlStr = new StringBuilder(); sqlStr.Append(@"SELECT i.ID,i.ProposalId,i.InvoiceNo,i.Milestone Milestone,c.CompanyName,i.SendOn,i.DueOn,i.ReceiveOn,i.Status, (case when i.ProposalId>0 then (select SUM(Hours) from TimeSheets where ticketid in (select TID from ProposalTrackerRelation where wid=i.ProposalId)) else sum(ts.Hours) end) [Hours], i.Notes,pt.Title AS ProposalTitle,pt.PONo,p.Title as ProjectTitle FROM Invoices i LEFT JOIN dbo.TSInvoiceRelation tsr ON i.ID=tsr.InvoiceId LEFT JOIN dbo.TimeSheets ts ON tsr.TSId=ts.ID LEFT JOIN dbo.ProposalTracker pt ON pt.ProposalTrackerID=i.ProposalId LEFT JOIN dbo.Projects p ON (p.ProjectID=ts.ProjectID or p.ProjectID=pt.ProjectID) LEFT JOIN dbo.Companys c ON p.CompanyID=c.ComID "); sqlStr.Append("WHERE 1=1 "); switch (request.Searchtype) { case InvoiceSearchType.ProposalOnly: sqlStr.Append("AND i.ProposalId !=0 "); break; case InvoiceSearchType.AwitingPayment: sqlStr.Append("AND i.Status =" + (int)InvoiceStatus.Awaiting_Payment + " "); break; case InvoiceSearchType.Payment_Received: sqlStr.Append("AND i.Status =" + (int)InvoiceStatus.Payment_Received + " "); break; case InvoiceSearchType.PassDue: sqlStr.Append("AND i.DueOn < (select getdate()-1 ) AND i.Status <=5 "); break; case InvoiceSearchType.All: break; } if (request.Keywords != "") { sqlStr.Append("AND ("); sqlStr.Append("i.InvoiceNo LIKE @Keywords "); sqlStr.Append("OR p.Title LIKE @Keywords "); //sqlStr.Append("OR ProposalTracker.Title LIKE %@Keywords% "); sqlStr.Append(") "); } if (request.CompanyId != 0) { sqlStr.Append("AND c.ComID=@CompanyId "); } if ((int)request.InvoiceStatus != 0) { sqlStr.Append("AND i.Status=@Status "); } if (request.ProjectId != 0) { sqlStr.Append("AND p.ProjectId=@ProjectId "); } sqlStr.Append(" GROUP BY i.ID,i.ProposalId,i.InvoiceNo,i.SendOn,i.DueOn,i.ReceiveOn,i.Status,c.CompanyName,i.Notes,pt.Title,i.Milestone,pt.PONo,p.Title "); if (request.OrderExpression != "") { sqlStr.AppendFormat("ORDER BY {0} ", request.OrderExpression); } else { sqlStr.Append("ORDER BY p.Title "); } if (request.OrderDirection != "") { sqlStr.Append(request.OrderDirection); } else { sqlStr.Append("DESC;"); } List <ProposalInvoiceModel> list; SearchInvoiceResponse response = new SearchInvoiceResponse(); Database db = DatabaseFactory.CreateDatabase(); using (DbCommand dbCommand = db.GetSqlStringCommand(sqlStr.ToString())) { try { db.AddInParameter(dbCommand, "Keywords", DbType.String, string.Format("%{0}%", request.Keywords.FilterSqlString())); db.AddInParameter(dbCommand, "ProjectId", DbType.Int32, request.ProjectId); db.AddInParameter(dbCommand, "CompanyId", DbType.Int32, request.CompanyId); db.AddInParameter(dbCommand, "OrderExpression", DbType.String, request.OrderExpression); db.AddInParameter(dbCommand, "OrderDirection", DbType.String, request.OrderDirection); db.AddInParameter(dbCommand, "Status", DbType.Int32, request.InvoiceStatus); using (IDataReader dataReader = db.ExecuteReader(dbCommand)) { list = new List <ProposalInvoiceModel>(); while (dataReader.Read()) { list.Add(ProposalInvoiceModel.ReaderBind(dataReader)); } response.ResultList = list; response.ResultCount = list.Count; } } catch (Exception ex) { WebLogAgent.Write(string.Format("[SQLText:{0},{1}Messages:\r\n{2}]", sqlStr.ToString(), base.FormatParameters(dbCommand.Parameters), ex.Message)); } } return(response); }