private void workerLoad_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { foreach (PersonalModel personal in personalLines) { XmlLineCheckInModel xmlLineCheckIn = xmlLineCheckIns.Where(x => x.CardId == personal.CardId).LastOrDefault(); LineCheckInViewModel lineCheckIn = new LineCheckInViewModel(); lineCheckIn.CardId = personal.CardId; lineCheckIn.WorkerId = personal.WorkerId; lineCheckIn.Name = personal.Name; lineCheckIn.Department = personal.Department; lineCheckIn.Position = personal.Position; lineCheckIn.HiredDate = personal.HiredDate; if (xmlLineCheckIn != null) { lineCheckIn.WorkAt = xmlLineCheckIn.WorkAt; lineCheckIn.IsLineCheckIn = true; lineCheckIn.LineTime = xmlLineCheckIn.LineTime; } List <SourceModel> sourceWorkers = sources.Where(s => s.CardId == personal.CardId).ToList(); if (sourceWorkers.Count() > 0) { lineCheckIn.IsTerminalCheckIn = true; foreach (SourceModel source in sourceWorkers) { lineCheckIn.TerminalTime += source.Time.Substring(0, 2) + ":" + source.Time.Substring(2, 2) + " | "; } } lineCheckIns.Add(lineCheckIn); } for (int i = 0; i <= lineAfters.Count - 1; i++) { ColumnDefinition cd = new ColumnDefinition(); cd.Width = new GridLength(1, GridUnitType.Star); gridShowButton.ColumnDefinitions.Add(cd); string lineAfter = lineAfters[i]; Button btnLineAfter = new Button(); Grid.SetColumn(btnLineAfter, i); btnLineAfter.Margin = new Thickness(1, 0, 1, 0); btnLineAfter.Content = lineAfter; btnLineAfter.ToolTip = lineAfter; btnLineAfter.FontSize = 12; btnLineAfter.Background = Brushes.LightGray; btnLineAfter.FontWeight = FontWeights.Bold; btnLineAfter.Click += new RoutedEventHandler(btnLineAfter_Click); gridShowButton.Children.Add(btnLineAfter); } dgCheckInList.ItemsSource = null; dgCheckInList.ItemsSource = lineCheckIns; }
private void document_PrintPage(object sender, PrintPageEventArgs e) { Margins margin = document.DefaultPageSettings.Margins; int paperWidth = (int)document.DefaultPageSettings.PrintableArea.Width - margin.Left - margin.Right; int paperHeight = (int)document.DefaultPageSettings.PrintableArea.Height - margin.Top - margin.Bottom; StringFormat sf = new StringFormat() { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center }; System.Drawing.Brush foreColor = System.Drawing.Brushes.Black; System.Drawing.Brush backColor = System.Drawing.Brushes.LightGray; System.Drawing.Pen borderColor = System.Drawing.Pens.Black; System.Drawing.Rectangle rectangleTitle = new System.Drawing.Rectangle(0 + margin.Left, 0 + margin.Top, paperWidth, 50); Font fontTitle = new Font("Arial", 12F, System.Drawing.FontStyle.Bold); e.Graphics.DrawString("Line Check-In Report", fontTitle, foreColor, rectangleTitle, sf); Font fontPrintAt = new Font("Arial", 8F, System.Drawing.FontStyle.Regular); StringFormat sfPrintAt = new StringFormat() { Alignment = StringAlignment.Far, LineAlignment = StringAlignment.Far }; e.Graphics.DrawString(string.Format("Printed at: {0:dd/MM/yyyy HH:mm:ss}", DateTime.Now), fontPrintAt, foreColor, rectangleTitle, sfPrintAt); sfPrintAt.Alignment = StringAlignment.Near; e.Graphics.DrawString(string.Format("Page " + pageIndexPrinting), fontPrintAt, foreColor, rectangleTitle, sfPrintAt); Font fontColumnName = new Font("Arial", 10F, System.Drawing.FontStyle.Bold); int tableWorkerWidth = 300; #region Main Table System.Drawing.Rectangle rectangleNo = new System.Drawing.Rectangle(0 + margin.Left, rectangleTitle.Y + rectangleTitle.Height, 40, 35); System.Drawing.Rectangle rectangleWorkerId = new System.Drawing.Rectangle(rectangleNo.X + rectangleNo.Width, rectangleNo.Y, 80, rectangleNo.Height); System.Drawing.Rectangle rectangleName = new System.Drawing.Rectangle(rectangleWorkerId.X + rectangleWorkerId.Width, rectangleNo.Y, 250, rectangleNo.Height); System.Drawing.Rectangle rectanglePosition = new System.Drawing.Rectangle(rectangleName.X + rectangleName.Width, rectangleNo.Y, 200, rectangleNo.Height); System.Drawing.Rectangle rectangleTerminalTime = new System.Drawing.Rectangle(rectanglePosition.X + rectanglePosition.Width, rectangleNo.Y, paperWidth - (rectangleNo.Width + rectangleWorkerId.Width + rectangleName.Width + rectanglePosition.Width), rectangleNo.Height); if (lineWorkAtIndexPrinted == 0 && workerFilterIndexPrinted == 0) { e.Graphics.FillRectangle(backColor, rectangleNo); e.Graphics.DrawRectangle(borderColor, rectangleNo); e.Graphics.DrawString("No.", fontColumnName, foreColor, rectangleNo, sf); e.Graphics.FillRectangle(backColor, rectangleWorkerId); e.Graphics.DrawRectangle(borderColor, rectangleWorkerId); e.Graphics.DrawString("WorkerId", fontColumnName, foreColor, rectangleWorkerId, sf); e.Graphics.FillRectangle(backColor, rectangleName); e.Graphics.DrawRectangle(borderColor, rectangleName); e.Graphics.DrawString("Name", fontColumnName, foreColor, rectangleName, sf); e.Graphics.FillRectangle(backColor, rectanglePosition); e.Graphics.DrawRectangle(borderColor, rectanglePosition); e.Graphics.DrawString("Position", fontColumnName, foreColor, rectanglePosition, sf); e.Graphics.FillRectangle(backColor, rectangleTerminalTime); e.Graphics.DrawRectangle(borderColor, rectangleTerminalTime); e.Graphics.DrawString("Department", fontColumnName, foreColor, rectangleTerminalTime, sf); rectangleNo = new System.Drawing.Rectangle(rectangleNo.X, rectangleNo.Y + rectangleNo.Height, rectangleNo.Width, 20); rectangleWorkerId = new System.Drawing.Rectangle(rectangleWorkerId.X, rectangleNo.Y, rectangleWorkerId.Width, rectangleNo.Height); rectangleName = new System.Drawing.Rectangle(rectangleName.X, rectangleNo.Y, rectangleName.Width, rectangleNo.Height); rectanglePosition = new System.Drawing.Rectangle(rectanglePosition.X, rectangleNo.Y, rectanglePosition.Width, rectangleNo.Height); rectangleTerminalTime = new System.Drawing.Rectangle(rectangleTerminalTime.X, rectangleNo.Y, rectangleTerminalTime.Width, rectangleNo.Height); } Font fontRow = new Font("Arial", 10F, System.Drawing.FontStyle.Regular); List <LineCheckInViewModel> lineCheckInPrints = lineCheckIns.Where(l => l.IsTerminalCheckIn == true && l.IsLineCheckIn == false).OrderBy(l => l.Department).ThenBy(l => l.Position).ThenBy(l => l.WorkerId).ToList(); for (int i = lineCheckInIndexPrinted; i <= lineCheckInPrints.Count() - 1; i++) { LineCheckInViewModel lineCheckIn = lineCheckInPrints[i]; e.Graphics.DrawRectangle(borderColor, rectangleNo); e.Graphics.DrawString((i + 1).ToString(), fontRow, foreColor, rectangleNo, sf); rectangleNo.Y += rectangleNo.Height; e.Graphics.DrawRectangle(borderColor, rectangleWorkerId); e.Graphics.DrawString(lineCheckIn.WorkerId, fontRow, foreColor, rectangleWorkerId, sf); rectangleWorkerId.Y += rectangleNo.Height; e.Graphics.DrawRectangle(borderColor, rectangleName); e.Graphics.DrawString(lineCheckIn.Name, fontRow, foreColor, rectangleName, sf); rectangleName.Y += rectangleNo.Height; e.Graphics.DrawRectangle(borderColor, rectanglePosition); e.Graphics.DrawString(lineCheckIn.Position, fontRow, foreColor, rectanglePosition, sf); rectanglePosition.Y += rectangleNo.Height; e.Graphics.DrawRectangle(borderColor, rectangleTerminalTime); e.Graphics.DrawString(lineCheckIn.Department, fontRow, foreColor, rectangleTerminalTime, sf); rectangleTerminalTime.Y += rectangleNo.Height; lineCheckInIndexPrinted = i + 1; if (rectangleNo.Y > paperHeight - margin.Top - margin.Bottom) { rectangleNo.Y = 0; pageIndexPrinting += 1; e.HasMorePages = true; return; } } #endregion #region Worker Table int yWorkerTableCurrent = rectangleNo.Y; DateTime dtCurrent = DateTime.Now; List <WokerFilterModel> workerFilters = WokerFilterModel.Create(); for (int j = lineWorkAtIndexPrinted; j <= lineWorkAts.Count - 1; j++) { string lineWorkAt = lineWorkAts[j]; System.Drawing.Rectangle rectangleWorkerTitle = new System.Drawing.Rectangle(0 + margin.Left, yWorkerTableCurrent, tableWorkerWidth, 35); List <LineCheckInViewModel> allCheckInPrints = lineCheckIns.Where(l => l.IsTerminalCheckIn == true && l.IsLineCheckIn == true && l.WorkAt == lineWorkAt).ToList(); if (workerFilterIndexPrinted == 0) { e.Graphics.DrawString("Calculate for " + lineWorkAt, fontColumnName, foreColor, rectangleWorkerTitle, sf); yWorkerTableCurrent += rectangleWorkerTitle.Height; } System.Drawing.Rectangle rectangleWorkerFilterName = new System.Drawing.Rectangle(rectangleWorkerTitle.X, yWorkerTableCurrent, tableWorkerWidth / 3, 25); System.Drawing.Rectangle rectangleWorkerCount = new System.Drawing.Rectangle(rectangleWorkerFilterName.X + rectangleWorkerFilterName.Width, rectangleWorkerFilterName.Y, tableWorkerWidth / 3, rectangleWorkerFilterName.Height); System.Drawing.Rectangle rectangleWorkerRatio = new System.Drawing.Rectangle(rectangleWorkerCount.X + rectangleWorkerCount.Width, rectangleWorkerFilterName.Y, tableWorkerWidth / 3, rectangleWorkerFilterName.Height); int workerCountTotal = 0; double workerRatioTotal = 0; for (int i = workerFilterIndexPrinted; i <= workerFilters.Count - 1; i++) { WokerFilterModel workerFilter = workerFilters[i]; e.Graphics.FillRectangle(backColor, rectangleWorkerFilterName); e.Graphics.DrawRectangle(borderColor, rectangleWorkerFilterName); e.Graphics.DrawString(workerFilter.Name, fontColumnName, foreColor, rectangleWorkerFilterName, sf); rectangleWorkerFilterName.Y += rectangleWorkerFilterName.Height; int workerCount = 0; if (workerFilter.MinValue == 0 && workerFilter.MaxValue > 0) { workerCount = allCheckInPrints.Where(a => DateTimeHelper.CalculateMonth(a.HiredDate, dtCurrent) <= workerFilter.MaxValue).Count(); } if (workerFilter.MinValue > 0 && workerFilter.MaxValue == 0) { workerCount = allCheckInPrints.Where(a => DateTimeHelper.CalculateMonth(a.HiredDate, dtCurrent) > workerFilter.MinValue).Count(); } if (workerFilter.MinValue > 0 && workerFilter.MaxValue > 0) { workerCount = allCheckInPrints.Where(a => DateTimeHelper.CalculateMonth(a.HiredDate, dtCurrent) > workerFilter.MinValue && DateTimeHelper.CalculateMonth(a.HiredDate, dtCurrent) <= workerFilter.MaxValue).Count(); } workerCountTotal += workerCount; e.Graphics.DrawRectangle(borderColor, rectangleWorkerCount); e.Graphics.DrawString(workerCount.ToString(), fontColumnName, foreColor, rectangleWorkerCount, sf); rectangleWorkerCount.Y += rectangleWorkerCount.Height; double workerRatio = (double)workerCount * workerFilter.Ratio; workerRatioTotal += workerRatio; e.Graphics.DrawRectangle(borderColor, rectangleWorkerRatio); e.Graphics.DrawString(workerRatio.ToString(), fontColumnName, foreColor, rectangleWorkerRatio, sf); rectangleWorkerRatio.Y += rectangleWorkerRatio.Height; yWorkerTableCurrent += rectangleWorkerFilterName.Height; workerFilterIndexPrinted = i + 1; if (yWorkerTableCurrent + rectangleWorkerFilterName.Height > paperHeight - margin.Top - margin.Bottom) { yWorkerTableCurrent = 0; pageIndexPrinting += 1; e.HasMorePages = true; return; } } workerFilterIndexPrinted = 0; e.Graphics.FillRectangle(backColor, rectangleWorkerFilterName); e.Graphics.DrawRectangle(borderColor, rectangleWorkerFilterName); e.Graphics.DrawString("TOTAL", fontColumnName, foreColor, rectangleWorkerFilterName, sf); e.Graphics.DrawRectangle(borderColor, rectangleWorkerCount); e.Graphics.DrawString(workerCountTotal.ToString(), fontColumnName, foreColor, rectangleWorkerCount, sf); e.Graphics.DrawRectangle(borderColor, rectangleWorkerRatio); e.Graphics.DrawString(workerRatioTotal.ToString(), fontColumnName, foreColor, rectangleWorkerRatio, sf); yWorkerTableCurrent += rectangleWorkerFilterName.Height; lineWorkAtIndexPrinted = j + 1; } lineWorkAtIndexPrinted = 0; lineCheckInIndexPrinted = 0; pageIndexPrinting = 1; e.HasMorePages = false; #endregion }