public async Task <ActionResult> GeneratePlaylist(DateTime?showDate, string showTime, string showName)
        {
            var playlist = new PlaylistViewModel();

            playlist.SelectedDate     = showDate != null ? showDate : DateTime.Today;
            playlist.SelectedShowTime = showName;
            var playlistDetailsList = new List <PlaylistDetails>();

            if (showDate.HasValue && !string.IsNullOrWhiteSpace(showTime))
            {
                var showTimeSpan = showTime.Split('-');
                var fromTimeSpan = TimeSpan.Parse(showTimeSpan[0]);
                var toTimeSpan   = TimeSpan.Parse(showTimeSpan[1]);

                var showDateTime = showDate.Value.Add(fromTimeSpan);
                var toDateTime   = ShowTimesHelper.CalculateShowEndTime(showDate, fromTimeSpan, toTimeSpan);

                var timeZone = TimeZoneInfo.FindSystemTimeZoneById("E. Australia Standard Time");

                var from = new DateTimeWithZone(showDateTime, timeZone).UniversalTime;
                var to   = new DateTimeWithZone(toDateTime, timeZone).UniversalTime;

                var apiPath  = string.Format(@"api/v1/plays/search.json?&from={0}&to={1}&order=asc&station=triplej&limit=50", from.ToString("yyyy-MM-ddTHH:mm:ss"), to.ToString("yyyy-MM-ddTHH:mm:ss"));
                var snapshot = await GetPlaylist(apiPath);

                if (snapshot != null && snapshot.Items != null)
                {
                    foreach (var item in snapshot.Items)
                    {
                        playlistDetailsList.Add(Services.PlaylistTransformationService.TransformPlaylistDataEntity(item));
                    }

                    playlist.PlaylistDetails = playlistDetailsList;
                }

                return(View(playlist));
            }

            return(View(playlist));
        }
Exemple #2
0
        private static DateTime IterateAndConvertDates(DateTime t, DateTime t2)
        {
            TimeZoneInfo mst = TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"); // no daylight shift
            TimeZoneInfo mdt = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");    // with daylight shifting

            Console.WriteLine("  IsDaylightSavingTime  MST                  mdt       ");
            while (t <= t2)
            {
                DateTimeWithZone d = new DateTimeWithZone(t, mst);
                DateTime         t_mdt;
                string           s_mdt = " errror ";
                if (d.TryConvertToTimeZone(mdt, out t_mdt))
                {
                    s_mdt = t_mdt.ToString();
                }

                Console.WriteLine(t.IsDaylightSavingTime() + "   " + t.ToString() + "     " + s_mdt);

                t = t.AddMinutes(15);
            }
            return(t);
        }
Exemple #3
0
        static Series ParseXmlData(XPathDocument doc, string siteID, string inel_element, DateTime t)
        {
            Series s = new Series();

            var nav = doc.CreateNavigator();


            DateTime inlTime = t.Date; // used to increment each 5 minutes

            TimeZoneInfo mst;
            TimeZoneInfo mdt;

            if (LinuxUtility.IsLinux())
            {
                //var c = TimeZoneInfo.GetSystemTimeZones();
                //foreach (var item in c)
                //{
                //    Console.WriteLine(item);
                //}

                mst = TimeZoneInfo.FindSystemTimeZoneById("US/Arizona");  // no daylight shift
                mdt = TimeZoneInfo.FindSystemTimeZoneById("US/Mountain"); // with daylight shifting
            }
            else
            {
                mst = TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"); // no daylight shift
                mdt = TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time");    // with daylight shifting
            }

            string ts = "";

            do
            {
                ts = inlTime.ToString("HH:mm");
                var query = "mesonet/Time[@time=\"" + ts + "\"]/tower[@id=\"" + siteID + "\"]"; // /spd";

                var nodeName = inel_element;
                var tag      = "";
                int idx      = inel_element.IndexOf(".");
                if (idx > 0)
                {
                    tag      = inel_element.Substring(0, idx);
                    query   += "/" + tag;
                    nodeName = inel_element.Substring(idx + 1);
                }
                var nodes = nav.Select(query);

                while (nodes.MoveNext())
                {
                    //Console.WriteLine(ts+ "id=" + nodes.Current.GetAttribute("id", ""));

                    if (nodes.Current.HasChildren)
                    {
                        var children = nodes.Current.SelectChildren(XPathNodeType.All);
                        while (children.MoveNext())
                        {
                            var n = children.Current;
                            if (n.LocalName == nodeName)
                            {
                                // Console.WriteLine(n.LocalName + " = " + n.Value);
                                double val = 0;
                                if (double.TryParse(n.Value, out val))
                                {
                                    //s.Add(t.Date.AddHours(time.Hour).AddMinutes(time.Minute), val, "inl");
                                    DateTimeWithZone td = new DateTimeWithZone(inlTime, mst);
                                    DateTime         hydrometDateTime;
                                    if (td.TryConvertToTimeZone(mdt, out hydrometDateTime))
                                    {
                                        if (s.IndexOf(hydrometDateTime) < 0)
                                        {// in November time change, we have duplicate dates..
                                            s.Add(hydrometDateTime, val, "inl");
                                        }
                                        else
                                        {
                                            Console.WriteLine("skipping dateTime " + hydrometDateTime.ToString());
                                        }
                                    }
                                }
                            }
                            else if (n.LocalName == inel_element)
                            {
                            }
                        }
                    }
                }
                inlTime = inlTime.AddMinutes(5);
            } while (ts != "23:55");

            Console.WriteLine("Read " + s.Count + " data points ");
            return(s);
        }
        protected override async Task <IProcessResult <AllExpendituresModel> > Handle(GetAllExpendituresRequest msg)
        {
            var employeeDetails = (await empRepo.GetAllEmployees())
                                  .Where(x => x.EmployeeId != 1) //exclude Admin here
                                  .ToDictionary(x => x.EmployeeId);
            var jobs   = (await jobsRepository.GetAsync()).ToDictionary(x => x.JobId);
            var result = new AllExpendituresModel();


            if (msg.IncludeArcFlashlabels)
            {
                await LoadSection(await arcFlashLabelsRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ?
                                                                           x.ExternalId == msg.LimitToSingleExpense.Value :
                                                                           true),
                                  (ArcFlashLabelExpenditure x) => new Expense <ArcFlashLabelExpenditure>()
                {
                    Detail              = x,
                    Amount              = x.TotalLabelsCost,
                    EmployeeName        = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}",
                    FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName,
                    Id = x.Id,
                    ShortExpenseName    = $"Arc Flash Label Expense ({DateTimeWithZone.ConvertToEST(x.DateOfInvoice.UtcDateTime).ToShortDateString()})",
                    JobId               = x.JobId,
                    LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime)
                },
                                  mapped => result.ArcFlashLabelExpenditures = mapped);
            }
            if (msg.IncludeCompanyVehicles)
            {
                await LoadSection(await companyVehicleRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ?
                                                                           x.ExternalId == msg.LimitToSingleExpense.Value :
                                                                           true),
                                  (CompanyVehicleExpenditure x) => new Expense <CompanyVehicleExpenditure>()
                {
                    Detail              = x,
                    Amount              = x.GetTotalCost(),
                    EmployeeName        = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}",
                    FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName,
                    Id = x.ExternalId,
                    ShortExpenseName    = $"Company Vehicle: {x.Vehicle} ({x.TotalMiles:N} miles)",
                    JobId               = x.JobId,
                    LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime)
                },
                                  mapped => result.CompanyVehicleExpenditures = mapped);
            }

            if (msg.IncludeContractorExpenditures)
            {
                await LoadSection(await contractorExpRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ?
                                                                          x.ExternalId == msg.LimitToSingleExpense.Value :
                                                                          true),
                                  (ContractorExpenditure x) => new Expense <ContractorExpenditure>()
                {
                    Detail              = x,
                    Amount              = x.TotalPOContractAmount,
                    EmployeeName        = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}",
                    FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName,
                    Id = x.ExternalId,
                    ShortExpenseName    = $"Contrator Expense (PO: {x.OrionPONumber})",
                    JobId               = x.JobId,
                    LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime)
                },
                                  mapped => result.ContractorExpenditures = mapped);
            }
            if (msg.IncludeMiscExpenditure)
            {
                await LoadSection(await miscRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ?
                                                                 x.ExternalId == msg.LimitToSingleExpense.Value :
                                                                 true),
                                  (MiscExpenditure x) => new Expense <MiscExpenditure>()
                {
                    Detail              = x,
                    Amount              = x.Amount,
                    EmployeeName        = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}",
                    FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName,
                    Id = x.Id,
                    ShortExpenseName    = $"Misc - {x.Description}",
                    JobId               = x.JobId,
                    LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime)
                },
                                  mapped => result.MiscExpenditures = mapped);
            }

            if (msg.IncludeTimeAndExpenseExpenditures)
            {
                await LoadSection(await timeAndExpenseExpRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ?
                                                                              x.ExternalId == msg.LimitToSingleExpense.Value :
                                                                              true),
                                  (TimeAndExpenceExpenditure x) => new Expense <TimeAndExpenceExpenditure>()
                {
                    Detail              = x,
                    Amount              = x.Amount,
                    EmployeeName        = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}",
                    FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName,
                    Id = x.Id,
                    ShortExpenseName    = $"T&E - ({DateTimeWithZone.ConvertToEST(x.ExpenseOnDate.UtcDateTime).ToShortDateString()})",
                    JobId               = x.JobId,
                    LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime)
                },
                                  mapped => result.TimeAndExpenceExpenditures = mapped);
            }

            result.AvailableEmployees = employeeDetails.Select(e => new CoreEmployeeDto()
            {
                EmployeeId = e.Key,
                First      = e.Value.First,
                Last       = e.Value.Last
            }).ToList();

            var inUseJobs = result.AsFullList().Select(x => x.JobId).ToHashSet();

            result.AvailableJobs = jobs.Values.Where(x => x.JobStatusId == JobStatus.Enabled || inUseJobs.Contains(x.JobId)).ToList();

            return(Success(result));
        }
Exemple #5
0
        private static void WriteCompanyVehicleSection(ReportDTO <DetailedExpenseForJobReportDTO> report, IXLWorksheet excelSheet)
        {
            var rowStart         = 11 + report.Data.TimeAndExpense.Count();
            var originalRowStart = rowStart;

            excelSheet.Row(rowStart).InsertRowsBelow(report.Data.CompanyVehicle.Count());

            excelSheet.Range($"{columns[1]}{rowStart - 1}:{columns[2]}{rowStart - 1}")
            .AddBottomBorder(XLBorderStyleValues.Medium);

            foreach (var sectionRow in report.Data.CompanyVehicle)
            {
                excelSheet.Cell(rowStart, 1)
                .MergeWith(FluentCellStyle.CellToThe.right)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .SetDataType(XLDataType.DateTime)
                .AssignValue(DateTimeWithZone.ConvertToEST(sectionRow.Date.UtcDateTime))
                .AddLeftBorder(XLBorderStyleValues.Thin)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 3)
                .AssignValue(sectionRow.Vehicle)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 4)
                .AssignValue(sectionRow.EmployeeFirstLast)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Left)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 5)
                .AssignValue(sectionRow.NumberOfDays)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 6)
                .AssignValue(sectionRow.TotalMiles)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin)
                .SetFontStyle(f => f.Bold = false);

                excelSheet.Cell(rowStart, 7)
                .AssignValue(sectionRow.Cost, dataFormatOverride: (XLDataType.Number, "$#,###,##0.00"))
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Thin)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .SetFontStyle(f => f.Bold = false)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                //HACK: set cell in column 7's right border to be thin, not sure why to do so we must touch cell 7 + 8, but meh
                excelSheet.Cell(rowStart, 8).Style.Border.LeftBorder = XLBorderStyleValues.Thin;


                rowStart++;
            }

            excelSheet.Cell(rowStart, 1)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);


            excelSheet.Cell(rowStart, 2)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);


            excelSheet.Cell(rowStart, 3)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);
            excelSheet.Cell(rowStart, 4)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);
            excelSheet.Cell(rowStart, 5)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);

            excelSheet.Cell(rowStart, 6).AssignValue("TOTAL")

            .SetAlignHorizontal(XLAlignmentHorizontalValues.Right)
            .AddRightBorder(XLBorderStyleValues.Thin)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .SetFontStyle(x => x.Bold = true);

            var totalCell = excelSheet.Cell(rowStart, 7)
                            .AddRightBorder(XLBorderStyleValues.Thin)
                            .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                            .AddBottomBorder(XLBorderStyleValues.Thin)
                            .AddLeftBorder(XLBorderStyleValues.Thin)
                            .AddTopBorder(XLBorderStyleValues.Thin)
                            .AddRightBorder(XLBorderStyleValues.Thin);

            totalCell.SetFontStyle(x => x.Bold = true);
            totalCell.FormulaA1 = $"SUM({columns[7]}{originalRowStart}:{columns[7]}{rowStart - 1})";

            totalCell.CellRight().AddLeftBorder(XLBorderStyleValues.Thin);
        }
Exemple #6
0
        private static void WriteTimeAndExpensesSection(ReportDTO <DetailedExpenseForJobReportDTO> report, IXLWorksheet excelSheet)
        {
            var rowStart         = 7;
            var originalRowStart = rowStart;


            excelSheet.Row(rowStart).InsertRowsBelow(report.Data.TimeAndExpense.Count());

            excelSheet.Range($"{columns[1]}{rowStart - 1}:{columns[2]}{rowStart - 1}")
            .AddBottomBorder(XLBorderStyleValues.Medium);

            foreach (var sectionRow in report.Data.TimeAndExpense)
            {
                excelSheet.Cell(rowStart, 1)
                .MergeWith(FluentCellStyle.CellToThe.right)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .SetDataType(XLDataType.DateTime)
                .AssignValue(DateTimeWithZone.ConvertToEST(sectionRow.Date.UtcDateTime))
                .AddLeftBorder(XLBorderStyleValues.Thin)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == 7 ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);


                excelSheet.Cell(rowStart, 3)
                .AssignValue(sectionRow.EmployeeFirstLast)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Left)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == 7 ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);


                excelSheet.Cell(rowStart, 4)
                .AssignValue(sectionRow.Cost, dataFormatOverride: (XLDataType.Number, "$#,###,##0.00"))
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Thin)
                .AddTopBorder(rowStart == 7 ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 5)
                .AddLeftBorder(XLBorderStyleValues.Thin);

                rowStart++;
            }

            excelSheet.Cell(rowStart, 1)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);


            excelSheet.Cell(rowStart, 2)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);

            excelSheet.Cell(rowStart, 3).AssignValue("TOTAL")

            .SetAlignHorizontal(XLAlignmentHorizontalValues.Right)
            .AddRightBorder(XLBorderStyleValues.Thin)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .SetFontStyle(x => x.Bold = true);

            var totalCell = excelSheet.Cell(rowStart, 4)
                            .AddRightBorder(XLBorderStyleValues.Thin)
                            .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                            .AddBottomBorder(XLBorderStyleValues.Thin)
                            .AddLeftBorder(XLBorderStyleValues.Thin)
                            .AddTopBorder(XLBorderStyleValues.Thin)
                            .AddRightBorder(XLBorderStyleValues.Thin);

            totalCell.SetFontStyle(x => x.Bold = true);
            totalCell.FormulaA1 = $"SUM({columns[4]}{originalRowStart}:{columns[4]}{rowStart - 1})";

            totalCell.CellRight().AddLeftBorder(XLBorderStyleValues.Thin);
        }
Exemple #7
0
        private void WriteArcFlashLabelSection(ReportDTO <DetailedExpenseForJobReportDTO> report, IXLWorksheet excelSheet)
        {
            var rowStart         = 19 + report.Data.TimeAndExpense.Count() + report.Data.CompanyVehicle.Count() + report.Data.SubContractor.Count();
            var originalRowStart = rowStart;

            excelSheet.Row(rowStart).InsertRowsBelow(report.Data.ArcFlashLabel.Count());

            foreach (var sectionRow in report.Data.ArcFlashLabel)
            {
                excelSheet.Cell(rowStart, 1)
                .MergeWith(FluentCellStyle.CellToThe.right)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .SetDataType(XLDataType.DateTime)
                .AssignValue(DateTimeWithZone.ConvertToEST(sectionRow.DateOfInvoice.UtcDateTime))
                .AddLeftBorder(XLBorderStyleValues.Thin)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);


                excelSheet.Cell(rowStart, 3)
                .AssignValue(sectionRow.Quantity)
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .SetFontStyle(f => f.Bold = false)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);


                excelSheet.Cell(rowStart, 4)
                .AssignValue(sectionRow.LabelCost, dataFormatOverride: (XLDataType.Number, "$#,###,##0.00"))
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .SetFontStyle(f => f.Bold = false)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 5)
                .AssignValue(sectionRow.PostageCost, dataFormatOverride: (XLDataType.Number, "$#,###,##0.00"))
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Dotted)
                .SetFontStyle(f => f.Bold = false)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 6)
                .AssignValue(sectionRow.TotalCost, dataFormatOverride: (XLDataType.Number, "$#,###,##0.00"))
                .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                .AddLeftBorder(XLBorderStyleValues.Dotted)
                .AddRightBorder(XLBorderStyleValues.Thin)
                .SetFontStyle(f => f.Bold = false)
                .AddTopBorder(rowStart == originalRowStart ? XLBorderStyleValues.Medium : XLBorderStyleValues.Thin)
                .AddBottomBorder(XLBorderStyleValues.Thin);

                excelSheet.Cell(rowStart, 7).Style.Border.LeftBorder = XLBorderStyleValues.Thin;
                rowStart++;
            }

            excelSheet.Cell(rowStart, 1)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);


            excelSheet.Cell(rowStart, 2)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddRightBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray);

            excelSheet.Cell(rowStart, 3).AssignValue("TOTAL")
            .SetAlignHorizontal(XLAlignmentHorizontalValues.Right)
            .AddRightBorder(XLBorderStyleValues.Thin)
            .AddTopBorder(XLBorderStyleValues.Thin)
            .AddBottomBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .AddLeftBorder(XLBorderStyleValues.Thin, XLColor.Gray)
            .SetFontStyle(x => x.Bold = true);

            var labelTotal = excelSheet.Cell(rowStart, 4)
                             .AddRightBorder(XLBorderStyleValues.Thin)
                             .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                             .AddBottomBorder(XLBorderStyleValues.Thin)
                             .AddLeftBorder(XLBorderStyleValues.Thin)
                             .AddTopBorder(XLBorderStyleValues.Thin)
                             .AddRightBorder(XLBorderStyleValues.Thin);

            labelTotal.SetFontStyle(x => x.Bold = true);
            labelTotal.FormulaA1 = $"SUM({columns[4]}{originalRowStart}:{columns[4]}{rowStart - 1})";
            labelTotal.CellRight().AddLeftBorder(XLBorderStyleValues.Thin);

            var postageTotal = excelSheet.Cell(rowStart, 5)
                               .AddRightBorder(XLBorderStyleValues.Thin)
                               .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                               .AddBottomBorder(XLBorderStyleValues.Thin)
                               .AddLeftBorder(XLBorderStyleValues.Thin)
                               .AddTopBorder(XLBorderStyleValues.Thin)
                               .AddRightBorder(XLBorderStyleValues.Thin);

            postageTotal.SetFontStyle(x => x.Bold = true);
            postageTotal.FormulaA1 = $"SUM({columns[5]}{originalRowStart}:{columns[5]}{rowStart - 1})";
            postageTotal.CellRight().AddLeftBorder(XLBorderStyleValues.Thin);

            var totalCell = excelSheet.Cell(rowStart, 6)
                            .AddRightBorder(XLBorderStyleValues.Thin)
                            .SetAlignHorizontal(XLAlignmentHorizontalValues.Center)
                            .AddBottomBorder(XLBorderStyleValues.Thin)
                            .AddLeftBorder(XLBorderStyleValues.Thin)
                            .AddTopBorder(XLBorderStyleValues.Thin)
                            .AddRightBorder(XLBorderStyleValues.Thin);

            totalCell.SetFontStyle(x => x.Bold = true);
            totalCell.FormulaA1 = $"SUM({columns[6]}{originalRowStart}:{columns[6]}{rowStart - 1})";
            totalCell.CellRight().AddLeftBorder(XLBorderStyleValues.Thin);
        }