Exemplo n.º 1
0
        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
        }