public void GenerateTimeSheet(sheet data, string SaveTo, string SignaturePath) { string tmp = TimesheetTemplate(data); PdfDocument pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(tmp, PdfSharp.PageSize.A4); pdf.Info.Title = "Daily Timesheet"; pdf.Info.Author = CompanyName; pdf.Info.Subject = String.Format("Timesheet for {0}", DateTime.Now.ToShortDateString()); int LastPageNumber = pdf.Pages.Count - 1; if (LastPageNumber > -1) { XGraphics gfx = XGraphics.FromPdfPage(pdf.Pages[LastPageNumber]); double BottonMargin = 30; XFont font = new XFont("Verdana", this.FontSize, XFontStyle.Regular); if (File.Exists(SignaturePath)) { XImage xImage = XImage.FromFile(SignaturePath); XSize p = gfx.PageSize; double yPos = p.Height - xImage.PointHeight - BottonMargin - this.FontSize; double xPos1 = this.LeftMargin + 30; double xPos2 = (p.Width / 2) - 30; double xPos3 = (p.Width - this.LeftMargin - 100); gfx.DrawString("Representative Signature", font, XBrushes.Black, Convert.ToInt32(xPos1), Convert.ToInt32(yPos)); gfx.DrawString("Printed Name", font, XBrushes.Black, Convert.ToInt32(xPos2), Convert.ToInt32(yPos)); gfx.DrawString("Date", font, XBrushes.Black, Convert.ToInt32(xPos3), Convert.ToInt32(yPos)); yPos += this.FontSize + 5; gfx.DrawImage(xImage, Convert.ToInt32(LeftMargin), Convert.ToInt32(yPos), xImage.PointWidth, xImage.PointHeight); gfx.DrawString(data.printedName, font, XBrushes.Black, Convert.ToInt32(xPos2), Convert.ToInt32(yPos)); gfx.DrawString(data.signatureDate, font, XBrushes.Black, Convert.ToInt32(xPos3), Convert.ToInt32(yPos)); } } pdf.Save(SaveTo); pdf.Close(); }
private string TimesheetTemplate(sheet s) { StringBuilder h = new StringBuilder(); h.Append("<div>"); h.Append("<header style=\"text-align: center;\">"); h.AppendFormat("<h2>{0}</h2>", this.CompanyName); h.AppendFormat("<div>{0}<br />{1}<br />{2}</div>", this.MailingAddress, this.MailingCityStateZip, this.ContactNumbers); h.Append("<hr />"); h.Append("<div style=\"font-size: 16px; font-weight: bold;\">Daily Timesheet</div>"); h.Append("<hr />"); h.Append("</header>"); h.Append("<table style=\"width: 98%; margin: auto\">"); h.Append("<tbody>"); h.Append("<tr>"); h.Append("<td>Client</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.client.ClientID); h.Append("<td>State</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.state.Name); h.Append("</tr>"); h.Append("<tr>"); h.Append("<td>Field Name</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.fieldName.ProjectName); h.Append("<td>County / Parish</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.countyOrParish); h.Append("</tr>"); h.Append("<tr>"); h.Append("<td>Location/Well Name</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.locationOrWellName); h.Append("<td>Date</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.date); h.Append("</tr>"); h.Append("<tr>"); h.Append("<td>AFE #</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.afeNumber); h.Append("<td>Day of Week</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.dayOfWeek); h.Append("</tr>"); h.Append("<tr>"); h.Append("<td>Approval #</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.approvalNumber); h.Append("<td>Truck No.</td>"); h.AppendFormat("<td style=\"border: 1px solid #000000; width: 25%; padding: 0px 5px;\">{0}</td>", s.truckNumber); h.Append("</tr>"); h.Append("</tbody>"); h.Append("</table>"); h.Append("<br />"); h.Append("<br />"); h.Append("<table style=\"width: 98%; margin: auto;\" cellpadding=\"0\" cellspacing=\"0\">"); h.Append("<thead>"); h.Append("<tr style=\"background-color: silver;\">"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\"></th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Worker</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Billing Category</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Start Time</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">End Time</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Lunch Hrs.</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Reg. Hrs.</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">O.T. Hrs.</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-right: 1px solid #000000;\">Wrkd. Hrs.</th>"); h.Append("</tr>"); h.Append("</thead>"); h.Append("<tbody>"); // Add rows here... int items = 0; double totalLunch = 0; double totalReg = 0; double totalOt = 0; double totalWkd = 0; foreach (var itm in s.workcrew) { items++; totalLunch += ConvertTimeToMinutes(itm.lunchHour); totalReg += ConvertTimeToMinutes(itm.regularHours); totalOt += ConvertTimeToMinutes(itm.overTimeHours); totalWkd += ConvertTimeToMinutes(itm.workedHours); h.Append("<tr>"); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", items); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;padding: 0px 5px;\">{0}</td>", itm.worker); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;padding: 0px 5px;\">{0}</td>", itm.billingCategory); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.startTime); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.endTime); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.lunchHour); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.regularHours); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.overTimeHours); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-right: 1px solid #000000;text-align:center;\">{0}</td>", itm.workedHours); h.Append("</tr>"); } h.Append("</tbody>"); h.Append("<tfoot>"); h.Append("<tr>"); h.Append("<td colspan=\"4\" style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;\"></td>"); h.Append("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:right; font-weight:bold;padding: 0px 5px;\">Total</td>"); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:center;\">{0}</td>", ConvertMinutesToTime(totalLunch)); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:center;\">{0}</td>", ConvertMinutesToTime(totalReg)); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:center;\">{0}</td>", ConvertMinutesToTime(totalOt)); h.AppendFormat("<td style=\"border: 1px solid #000000;text-align:center;\">{0}</td>", ConvertMinutesToTime(totalWkd)); h.Append("</tr>"); h.Append("</tfoot>"); h.Append("</table>"); h.Append("<br />"); h.Append("<br />"); h.Append("<table style=\"width: 98%; margin: auto;\" cellpadding=\"0\" cellspacing=\"0\">"); h.Append("<thead>"); h.Append("<tr style=\"background-color: silver;\">"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\"></th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Equipment or Tools</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;\">Quartity</th>"); h.Append("<th style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-right: 1px solid #000000;\">Notes:</th>"); h.Append("</tr>"); h.Append("</thead>"); h.Append("<tbody>"); int index = 0; int totalquantity = 0; foreach (var itm in s.equipmentList) { index++; totalquantity += itm.quantity; h.Append("<tr>"); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", index); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;padding: 0px 5px;\">{0}</td>", itm.equipment); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;text-align:center;\">{0}</td>", itm.quantity); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-right: 1px solid #000000;padding: 0px 5px;\">{0}</td>", itm.notes); h.Append("</tr>"); } h.Append("</tbody>"); h.Append("<tfoot>"); h.Append("<tr>"); h.Append("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;\"></td>"); h.Append("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:right; font-weight:bold;padding: 0px 5px;\">Total Hours</td>"); h.AppendFormat("<td style=\"border-top: 1px solid #000000;border-left: 1px solid #000000;border-bottom: 1px solid #000000;text-align:center;\">{0}</td>", totalquantity); h.Append("<td style=\"border: 1px solid #000000;\"></td>"); h.Append("</tr>"); h.Append("</tfoot>"); h.Append("</table>"); h.Append("<br />"); h.Append("<div style=\"width: 98%; margin: auto; border: 1px solid #000000; padding: 5px;\">"); h.AppendFormat("Remarks:<br />{0}", s.remarks); h.Append("</div>"); h.Append("</div>"); return(h.ToString()); }