Beispiel #1
0
        void progressBarBW_DoWork(object sender, DoWorkEventArgs e)
        {
            loggerInformation = new LoggerInformation();

            if (SerialPort.GetPortNames().Contains(serialPort.PortName))
            {
                errorDectected = communicationService.GenerateHexFile(serialPort, loggerInformation);
                Log.Write(LogConstant.ReadingLogger);
            }
        }
        public bool CreateExcel(LoggerInformation loggerInformation)
        {
            var decoder         = new HexFileDecoder(loggerInformation);
            var loggerVariables = decoder.AssignLoggerVariables();

            if (loggerVariables.LoggerState != "Logging" && loggerVariables.LoggerState != "Stopped")
            {
                return(false);
            }

            var saveFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Temprecord\\TempLite\\";
            var excelPath    = saveFilePath + loggerInformation.SerialNumber + ".xlsx";
            var excel        = new ExcelPackage();
            var workSheet    = excel.Workbook.Worksheets.Add(loggerInformation.SerialNumber);

            CreateLayout(workSheet, loggerInformation, loggerVariables);

            excel.SaveAs(new FileInfo(excelPath));
            return(true);
        }
        private void CreateLayout(ExcelWorksheet workSheet, LoggerInformation loggerInformation, LoggerVariables loggerVariables)
        {
            var decoder           = new HexFileDecoder(loggerInformation);
            var channelTwoEnabled = loggerVariables.IsChannelTwoEnabled;
            var channelOne        = loggerVariables.ChannelOne;
            var channelTwo        = loggerVariables.ChannelTwo;

            var saveFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Temprecord\\TempLite\\";
            var path         = saveFilePath + "Images\\";

            if (channelOne.OutsideLimits == 0 && channelTwo.OutsideLimits == 0)
            {
                var tickImage   = Image.FromFile(path + LabelConstant.WithinLimitImage);
                var setPosition = workSheet.Drawings.AddPicture(LabelConstant.WithinLimit, tickImage);
                setPosition.SetSize(145, 128);
                setPosition.SetPosition(80, 295);
                workSheet.Cells[12, 5].Value                     = LabelConstant.WithinLimit;
                workSheet.Cells[12, 5].Style.Font.Bold           = true;
                workSheet.Cells[12, 5].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            }
            else
            {
                var warningImage = Image.FromFile(path + LabelConstant.LimitsExceededImage);
                var setPosition  = workSheet.Drawings.AddPicture(LabelConstant.LimitsExceeded, warningImage);
                setPosition.SetSize(145, 128);
                setPosition.SetPosition(80, 295);
                workSheet.Cells[12, 5].Value                     = LabelConstant.LimitsExceeded;
                workSheet.Cells[12, 5].Style.Font.Bold           = true;
                workSheet.Cells[12, 5].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
            }

            var logoRange       = workSheet.Cells[1, 3];
            var logoImage       = Image.FromFile(path + LabelConstant.LogoIcon);
            var setLogoPosition = workSheet.Drawings.AddPicture(string.Empty, logoImage);

            setLogoPosition.SetSize(103, 63);
            setLogoPosition.SetPosition(10, 65);

            workSheet.Cells[15, 2, 15, 3].Style.Font.Bold = true;
            workSheet.Cells[50, 2, 50, 3].Style.Font.Bold = true;
            workSheet.Cells[2, 1, 2, 5].Style.Font.Size   = 20;
            workSheet.Cells[2, 1, 2, 5].Style.Font.Color.SetColor(Color.Blue);
            workSheet.Cells[2, 1, 2, 5].Style.Font.Bold        = true;
            workSheet.Cells[4, 1, 4, 5].Style.Border.Top.Style = ExcelBorderStyle.Double;
            workSheet.Cells[4, 1, 4, 5].Style.Border.Top.Color.SetColor(Color.Blue);

            workSheet.Cells[1, 5].Value = DateTime.UtcNow.ToString("dd/MM/yyyy HH:mm:sss UTC");
            workSheet.Cells[2, 1].Value = LabelConstant.Title;
            workSheet.Cells[2, 5].Value = LabelConstant.SerialNumber + loggerVariables.SerialNumber;

            FillCells(workSheet, LabelConstant.Model, loggerInformation.LoggerName);
            FillCells(workSheet, LabelConstant.LoggerState, loggerVariables.LoggerState);
            FillCells(workSheet, LabelConstant.Battery, loggerVariables.BatteryPercentage);
            FillCells(workSheet, LabelConstant.SamplePeriod, loggerVariables.SameplePeriod);
            FillCells(workSheet, LabelConstant.StartDelay, loggerVariables.StartDelay);
            FillCells(workSheet, LabelConstant.FirstSample, loggerVariables.FirstSample);
            FillCells(workSheet, LabelConstant.LastSample, loggerVariables.LastSample);
            FillCells(workSheet, LabelConstant.RecordedSample, loggerVariables.RecordedSamples.ToString());
            FillCells(workSheet, LabelConstant.TagsPlaced, loggerVariables.TagsPlaced.ToString());
            row++;

            FillCells(workSheet, LabelConstant.Channel, LabelConstant.ChannelOneLabel);
            if (channelTwoEnabled)
            {
                workSheet.Cells[row - 1, 3].Value = LabelConstant.ChannelTwoLabel;
            }
            row++;

            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.PresentUpperLimit, c => c.PresetUpperLimit.ToString("N2"));
            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.PresentLowerLimit, c => c.PresetLowerLimit.ToString("N2"));
            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.Mean, c => c.Mean.ToString("N2"));
            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.MKT, c => c.MKT.ToString("N2"));
            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.Max, c => c.Max.ToString("N2"));
            FillChannelStatCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.Min, c => c.Min.ToString("N2"));
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.SampleWithinLimits, c => c.WithinLimits.ToString());
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.TimeWithinLimits, c => c.TimeWithinLimits);
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.SampleOutofLimits, c => c.OutsideLimits.ToString());
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.TimeOutOfLimits, c => c.TimeOutLimits);
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.SampleAboveLimit, c => c.AboveLimits.ToString());
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.TimeAboveLimit, c => c.TimeAboveLimits);
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.SampleBelowLimit, c => c.BelowLimits.ToString());
            FillChannelCells(workSheet, channelOne, channelTwo, channelTwoEnabled, LabelConstant.TimeBelowLimit, c => c.TimeBelowLimits);

            FillCells(workSheet, LabelConstant.UserComment, string.Empty);

            if (loggerVariables.UserData.Length > 120)
            {
                var firstLine  = loggerVariables.UserData.Substring(0, loggerVariables.UserData.Length / 2);
                var secondLine = loggerVariables.UserData.Substring(loggerVariables.UserData.Length / 2);

                FillCells(workSheet, firstLine, string.Empty);
                FillCells(workSheet, secondLine, string.Empty);
            }
            else
            {
                FillCells(workSheet, loggerVariables.UserData, string.Empty);
            }

            row = 50;
            if (channelTwoEnabled)
            {
                workSheet.Cells[row, 3].Value = LabelConstant.ChannelTwoLabel;
            }
            FillCells(workSheet, LabelConstant.DateTime, LabelConstant.ChannelOneLabel);
            row++;

            var startRange = row;
            var endRange   = (row + loggerVariables.RecordedSamples);

            FillValueCells(workSheet, decoder, loggerVariables, channelOne, channelTwo, startRange, endRange);
            CreateGraph(workSheet, loggerVariables, channelOne, channelTwo, startRange, endRange);
            workSheet.Cells[workSheet.Dimension.Address].AutoFitColumns();
        }
        public bool CreatePDF(LoggerInformation loggerInformation)
        {
            double lineCounter = 80;

            var decoder         = new HexFileDecoder(loggerInformation);
            var loggerVariables = decoder.AssignLoggerVariables();

            var channelOne        = loggerVariables.ChannelOne;
            var channelTwo        = loggerVariables.ChannelTwo;
            var channelTwoEnabled = loggerVariables.IsChannelTwoEnabled;

            var pen      = new PDFPen(Color.Black, 1);
            var font     = new PDFFont(FontType.Helvetica, 10, PDF.Drawing.FontStyle.Regular);
            var boldFont = new PDFFont(FontType.Helvetica, 10, PDF.Drawing.FontStyle.Bold);

            if (loggerVariables.LoggerState != "Logging" && loggerVariables.LoggerState != "Stopped")
            {
                return(false);
            }

            var pdfPage = CreateNewPage(font, loggerInformation.SerialNumber);

            void DrawChannelStatistics(string Label, Func <ChannelConfig, string> getString, double lineConterMultiplier = 1.0)
            {
                pdfPage.DrawString(Label, boldFont, Color.Black, PDFcoordinates.firstColumn, (float)lineCounter);
                pdfPage.DrawString(getString(channelOne) + channelOne.Unit, font, Color.Black, PDFcoordinates.secondColumn, (float)lineCounter);
                if ((channelTwoEnabled) && Label != LabelConstant.MKT)
                {
                    pdfPage.DrawString(getString(channelTwo) + channelTwo.Unit, font, Color.Black, PDFcoordinates.thirdColumn, (float)lineCounter);
                }

                lineCounter += PDFcoordinates.lineInc * lineConterMultiplier;
            }

            void DrawChannelLimits(string Label, Func <ChannelConfig, string> getString, double lineConterMultiplier = 1.0)
            {
                pdfPage.DrawString(Label, boldFont, Color.Black, PDFcoordinates.firstColumn, (float)lineCounter);
                pdfPage.DrawString(getString(channelOne), font, Color.Black, PDFcoordinates.secondColumn, (float)lineCounter);
                if (channelTwoEnabled)
                {
                    pdfPage.DrawString(getString(channelTwo), font, Color.Black, PDFcoordinates.thirdColumn, (float)lineCounter);
                }

                lineCounter += PDFcoordinates.lineInc * lineConterMultiplier;
            }

            void DrawSection(string firstColoumString, string secondColoumString, double lineConterMultiplier = 1.0)
            {
                pdfPage.DrawString(firstColoumString, boldFont, Color.Black, PDFcoordinates.firstColumn, (float)lineCounter);
                pdfPage.DrawString(secondColoumString, font, Color.Black, PDFcoordinates.secondColumn, (float)lineCounter);
                lineCounter += PDFcoordinates.lineInc * lineConterMultiplier;
            }

            if (channelOne.OutsideLimits == 0 && channelTwo.OutsideLimits == 0)
            {
                var greenPen = new PDFPen(Color.LimeGreen, 15);
                pdfPage.DrawLine(greenPen, 550, 163, 570, 180);
                pdfPage.DrawLine(greenPen, 570, 190, 632, 120);
                pdfPage.DrawString(LabelConstant.WithinLimit, font, Color.Black, PDFcoordinates.limitInfo_X, PDFcoordinates.limitInfo_Y);
            }
            else
            {
                var redPen = new PDFPen(Color.OrangeRed, 15);
                pdfPage.DrawLine(redPen, 550, 125, 610, 190);
                pdfPage.DrawLine(redPen, 550, 190, 610, 125);
                pdfPage.DrawString(LabelConstant.LimitsExceeded, font, Color.Black, PDFcoordinates.limitInfo_X, PDFcoordinates.limitInfo_Y);
            }

            //Draw the boxes
            pdfPage.DrawRectangle(pen, PDFcoordinates.box1_X1, PDFcoordinates.box1_Y1, PDFcoordinates.box1_X2 - PDFcoordinates.box1_X1, PDFcoordinates.box1_Y2 - PDFcoordinates.box1_Y1);
            pdfPage.DrawRectangle(pen, PDFcoordinates.box2_X1, PDFcoordinates.box2_Y1, PDFcoordinates.box2_X2 - PDFcoordinates.box2_X1, PDFcoordinates.box2_Y2 - PDFcoordinates.box2_Y1);
            pdfPage.DrawRectangle(pen, PDFcoordinates.box3_X1, PDFcoordinates.box3_Y1, PDFcoordinates.box3_X2 - PDFcoordinates.box3_X1, PDFcoordinates.box3_Y2 - PDFcoordinates.box3_Y1);

            //Draw the Text
            DrawSection(LabelConstant.Model, loggerInformation.LoggerName);
            DrawSection(LabelConstant.LoggerState, loggerVariables.LoggerState);
            DrawSection(LabelConstant.Battery, loggerVariables.BatteryPercentage);
            DrawSection(LabelConstant.SamplePeriod, loggerVariables.SameplePeriod + LabelConstant.TimeSuffix);
            DrawSection(LabelConstant.StartDelay, loggerVariables.StartDelay + LabelConstant.TimeSuffix);
            DrawSection(LabelConstant.FirstSample, loggerVariables.FirstSample);
            DrawSection(LabelConstant.LastSample, loggerVariables.LastSample);
            DrawSection(LabelConstant.RecordedSample, loggerVariables.RecordedSamples.ToString());
            DrawSection(LabelConstant.TotalTrips, loggerVariables.TotalTrip.ToString());
            DrawSection(LabelConstant.TagsPlaced, loggerVariables.TagsPlaced.ToString());

            lineCounter -= PDFcoordinates.lineInc * 0.5;
            pdfPage.DrawLine(pen, 20, lineCounter, 680, lineCounter);
            lineCounter += PDFcoordinates.lineInc * 0.75;

            pdfPage.DrawString(LabelConstant.Channel, boldFont, Color.Black, PDFcoordinates.firstColumn, lineCounter);
            pdfPage.DrawString(LabelConstant.ChannelOneLabel, boldFont, Color.Black, PDFcoordinates.secondColumn, lineCounter);
            if (channelTwoEnabled)
            {
                pdfPage.DrawString(LabelConstant.ChannelTwoLabel, boldFont, Color.Black, PDFcoordinates.thirdColumn, (float)lineCounter);
            }
            lineCounter += PDFcoordinates.lineInc;

            if (channelOne.AboveLimits > 0)
            {
                pdfPage.DrawString(DecodeConstant.Exceeded, font, Color.Black, PDFcoordinates.secondColumn + 50, (float)lineCounter);
            }
            if (channelTwo.AboveLimits > 0)
            {
                pdfPage.DrawString(DecodeConstant.Exceeded, font, Color.Black, PDFcoordinates.thirdColumn + 50, (float)lineCounter);
            }
            DrawChannelStatistics(LabelConstant.PresentUpperLimit, c => c.PresetUpperLimit.ToString("N2"));
            if (channelOne.BelowLimits > 0)
            {
                pdfPage.DrawString(DecodeConstant.Exceeded, font, Color.Black, PDFcoordinates.secondColumn + 50, (float)lineCounter);
            }
            if (channelTwo.BelowLimits > 0)
            {
                pdfPage.DrawString(DecodeConstant.Exceeded, font, Color.Black, PDFcoordinates.thirdColumn + 50, (float)lineCounter);
            }
            DrawChannelStatistics(LabelConstant.PresentLowerLimit, c => c.PresetLowerLimit.ToString("N2"));
            DrawChannelStatistics(LabelConstant.Mean, c => c.Mean.ToString("N2"));
            DrawChannelStatistics(LabelConstant.MKT, c => c.MKT.ToString("N2"));
            DrawChannelStatistics(LabelConstant.Max, c => c.Max.ToString("N2"));
            DrawChannelStatistics(LabelConstant.Min, c => c.Min.ToString("N2"));
            lineCounter += (PDFcoordinates.lineInc * 0.5);
            DrawChannelLimits(LabelConstant.SampleWithinLimits, c => c.WithinLimits.ToString());
            DrawChannelLimits(LabelConstant.TimeWithinLimits, c => c.TimeWithinLimits);
            lineCounter += (PDFcoordinates.lineInc * 0.5);
            DrawChannelLimits(LabelConstant.SampleOutofLimits, c => c.OutsideLimits.ToString());
            DrawChannelLimits(LabelConstant.TimeOutOfLimits, c => c.TimeOutLimits);
            lineCounter += (PDFcoordinates.lineInc * 0.5);
            DrawChannelLimits(LabelConstant.SampleAboveLimit, c => c.AboveLimits.ToString());
            DrawChannelLimits(LabelConstant.TimeAboveLimit, c => c.TimeAboveLimits);
            lineCounter += (PDFcoordinates.lineInc * 0.5);
            DrawChannelLimits(LabelConstant.SampleBelowLimit, c => c.BelowLimits.ToString());
            DrawChannelLimits(LabelConstant.TimeBelowLimit, c => c.TimeBelowLimits);
            DrawSection(LabelConstant.UserComment, string.Empty);

            if (loggerVariables.UserData.Length > 140)
            {
                var firstLine  = loggerVariables.UserData.Substring(0, loggerVariables.UserData.Length / 2);
                var secondLine = loggerVariables.UserData.Substring(loggerVariables.UserData.Length / 2);

                pdfPage.DrawString(firstLine, font, Color.Black, PDFcoordinates.firstColumn, lineCounter);
                lineCounter += PDFcoordinates.lineInc;
                pdfPage.DrawString(secondLine, font, Color.Black, PDFcoordinates.firstColumn, lineCounter);
                lineCounter += PDFcoordinates.lineInc * 0.5;
            }
            else
            {
                pdfPage.DrawString(loggerVariables.UserData, font, Color.Black, PDFcoordinates.firstColumn, lineCounter);
                lineCounter += PDFcoordinates.lineInc;
            }

            pdfPage.DrawLine(pen, 20, lineCounter, 680, lineCounter);
            lineCounter += PDFcoordinates.lineInc * 0.75;

            pdfPage.DrawString(LabelConstant.ChannelOneLabel + channelOne.Unit, font, Color.DarkOliveGreen, PDFcoordinates.secondColumn, lineCounter);
            if (channelTwoEnabled)
            {
                pdfPage.DrawString(LabelConstant.ChannelTwoLabel + channelTwo.Unit, font, Color.MediumPurple, PDFcoordinates.secondColumn + 120, lineCounter);
            }
            lineCounter += PDFcoordinates.lineInc;

            pdfPage.DrawString(LabelConstant.Comment, font, Color.Black, PDFcoordinates.commentX, PDFcoordinates.commentY);
            pdfPage.DrawString(LabelConstant.Signature, font, Color.Black, PDFcoordinates.sigX, PDFcoordinates.sigY);

            //Draw graph
            DrawGraph(decoder, loggerVariables, pdfPage, pen, font);
            FillInValues(decoder, loggerVariables, loggerInformation.SerialNumber);

            var saveFilePath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\Temprecord\\TempLite\\";
            var filename     = saveFilePath + loggerInformation.SerialNumber + ".pdf";

            pdfDocument.Save(filename);
            return(true);
        }