public static List <TerritoryLastCompleted> LastCompletedFrom(IList <AssignmentRowRaw> rows)
        {
            var parsedRows = new List <TerritoryLastCompleted>();

            foreach (var row in rows)
            {
                DateTime?checkedIn = null;
                if (DateTime.TryParse(row.CheckedIn, out DateTime checkedInDate))
                {
                    checkedIn = checkedInDate;
                }

                DateTime?checkedOut = null;
                if (DateTime.TryParse(row.CheckedOut, out DateTime checkedOutDate))
                {
                    checkedOut = checkedOutDate;
                }

                var parsed = new TerritoryLastCompleted
                {
                    Territory  = row.Territory,
                    Publisher  = row.Publisher,
                    CheckedOut = checkedOut,
                    CheckedIn  = checkedIn,
                };

                parsedRows.Add(parsed);
            }

            var territories = parsedRows.GroupBy(r => r.Territory).ToList();
            var assignments = new List <TerritoryLastCompleted>();

            foreach (var territory in territories)
            {
                var lastCheckedIn = territory.OrderBy(e => e.CheckedIn).Last();

                var assignment = new TerritoryLastCompleted()
                {
                    Territory   = lastCheckedIn.Territory,
                    TimesWorked = territory.Count(),
                    Publisher   = lastCheckedIn.Publisher,
                    CheckedOut  = lastCheckedIn.CheckedOut,
                    CheckedIn   = lastCheckedIn.CheckedIn,
                };

                assignments.Add(assignment);
            }

            return(assignments);
        }
Ejemplo n.º 2
0
        static void LastCompleted(List <string> args)
        {
            Console.WriteLine("Generating 'last completed' from S-13 form...");
            if (args.Count != 4)
            {
                throw new NormalException("Wrong number of arguments!  Usage: alba last-completed <s-13-csv-input-file> <alba-assignments-csv-input-file> <s-13-csv-output-file>");
            }

            string inputPath = args[1];
            string albaTerritoryAssignmentsPath = args[2];
            string outputPath = args[3];

            Console.WriteLine($"Input File Path: {inputPath}");
            Console.WriteLine($"Alba Assignment File Path: {albaTerritoryAssignmentsPath}");
            Console.WriteLine($"Output File Path: {outputPath}");

            Console.WriteLine("Loading...");
            var rows = PivotAssignmentRowsToS13Columns.LoadFrom(inputPath);

            Console.WriteLine("Removing entries with Checked-In blank...");
            var cleaned = rows
                          .Where(r => !string.IsNullOrWhiteSpace(r.CheckedIn))
                          .ToList();

            var parsed = PivotAssignmentRowsToS13Columns.LastCompletedFrom(cleaned);

            Console.WriteLine("Adding unworked territories...");
            var albaAssignments = DownloadTerritoryAssignments.LoadFromCsv(albaTerritoryAssignmentsPath);
            var errors          = new List <string>();

            foreach (var assignment in albaAssignments)
            {
                try
                {
                    int number = int.Parse(assignment.Number);

                    if (!parsed.Exists(c => string.Equals(c.Territory, number.ToString(), StringComparison.OrdinalIgnoreCase)))
                    {
                        var t = new TerritoryLastCompleted
                        {
                            Territory   = assignment.Number,
                            TimesWorked = 0,
                            Publisher   = "Never Completed",
                        };

                        parsed.Add(t);
                    }
                }
                catch (Exception e)
                {
                    errors.Add($"Number: {assignment.Number}: {e.Message}");
                }
            }

            foreach (string error in errors)
            {
                Console.WriteLine(error);
            }

            Console.WriteLine("Sorting by number...");
            var ordered = parsed.OrderBy(c => int.Parse(c.Territory)).ToList();

            Console.WriteLine("Saving data to new file...");
            PivotAssignmentRowsToS13Columns.SaveTo(ordered, outputPath);
        }