コード例 #1
0
        public void TestSteps()
        {
            bool SkipF0101  = true;
            bool SkipF03012 = true;
            // 1.) Read the concept
            ConceptCSV TestConceptCSV = new ConceptCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutExample1.csv", ",");

            TestConceptCSV.ReadConcept();
            // 2.) Test for missing entries
            List <string> TestMissing = TestConceptCSV.CheckForMissingShipToAddresses();

            // 3.) If entries are missing, do the following:
            if (0 < TestMissing.Count && !SkipF0101)
            {
                // 4.) Populate the missing CSV using the list of missing items
                ShipToCSV MissingShipToCSV = new ShipToCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutMissing.csv", ",");
                MissingShipToCSV.PopulateSpreadsheet(TestMissing, TestConceptCSV);
                // 5.) Populate the transformed data structure
                ShipTo MissingShipTo = XfrmShipTo.CSVToShipTo(MissingShipToCSV, false); // Don't look up JDE Addresses
                // 6.) Upload the transformed data structure to the F0101 Z-File
                JDE.PopulateF0101Z2(MissingShipTo);
                // 7.) Now write the CSV to disk
                MissingShipToCSV.WriteCSV();
                // 8.) Now, someone must run R01010Z to load the data into JDE.
                // Popup window
            }
            else if (!SkipF03012)
            {
                // TODO: 9.) Check for F03012 records
                // 10.) If F03012 records are missing:
                ShipToCSV MissingShipToCSV = new ShipToCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutMissing.csv", ",");
                MissingShipToCSV.ReadShipTo();
                if (MissingShipToCSV.ValidateHeader() &&  // Required row is all there
                    MissingShipToCSV.ValidateRows(false)) // We can't have an empty tax area code
                {
                    // 11.) Convert the CSV into a data structure we can upload
                    ShipTo PopulatedShipTo = XfrmShipTo.CSVToShipTo(MissingShipToCSV, true); // Lookup JDE Address
                    // 12.) Upload the data structure into JDE
                    JDE.PopulateF03012Z1(PopulatedShipTo);
                    // 13.) Now someone must run R03010Z to load the data into JDE.
                }
                else
                {
                    //TODO: Say we don't have a valid spreadsheet
                    int x = 0;
                    x++;
                }
            }
            else
            {
                Concept TestConcept = XfrmConcept.CSVtoConcept(TestConceptCSV);
                JDE.PopulateF47011(TestConcept);
                JDE.PopulateF47012(TestConcept);
            }
        }
コード例 #2
0
        public void PopulateF03012Z1()
        {
            ShipToCSV PopulatedCSV = new ShipToCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutMissing.csv", ",");

            PopulatedCSV.ReadShipTo();
            PopulatedCSV.ValidateHeader();
            PopulatedCSV.ValidateRows(false);                                    // Force non-empty tax area code
            ShipTo PopulatedShipTo = XfrmShipTo.CSVToShipTo(PopulatedCSV, true); // Lookup JDE address

            JDE.PopulateF03012Z1(PopulatedShipTo);
        }
コード例 #3
0
        public void ReadConceptAndWriteCSV()
        {
            ConceptCSV TestConcept = new ConceptCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutExample1.csv");

            TestConcept.ReadConcept();
            List <string> TestMissing = TestConcept.CheckForMissingShipToAddresses();
            ShipToCSV     TestShip    = new ShipToCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutMissing.csv", ",");

            TestShip.PopulateSpreadsheet(TestMissing, TestConcept);
            TestShip.WriteCSV();
        }
コード例 #4
0
        public void ReadShipToCSVandPopulateF0101Z2()
        {
            ShipToCSV PopulatedCSV = new ShipToCSV(@"E:\gitHub\Rollout\TestFiles\SageRolloutMissing.csv", ",");

            PopulatedCSV.ReadShipTo();
            PopulatedCSV.ValidateHeader();
            PopulatedCSV.ValidateRows(true);
            ShipTo PopulatedShipTo = XfrmShipTo.CSVToShipTo(PopulatedCSV, false); // Dont lookup JDE address

            JDE.PopulateF0101Z2(PopulatedShipTo);
        }
コード例 #5
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // ValidateShipToHeader

        /// <summary>
        /// Validate the data in the shipto CSV
        /// </summary>
        /// <param name="csv"></param>
        /// <param name="AllowBlankTaxAreaCode"></param>
        /// <returns></returns>
        private bool ValidateShipToRows(ref ShipToCSV csv, bool AllowBlankTaxAreaCode)
        {
            bool result = csv.ValidateRows(AllowBlankTaxAreaCode);

            if (!result)
            {
                // TODO:  Fix this to display the bad data
                log.Error("Failed to validate row data for one or more rows");
                using (new CenterDialog(this))
                {
                    MessageBox.Show($"Error in csv. Failed to validate data in one or more rows.  See log file and documentation for more information.", "Error in Rollout CSV Data", MessageBoxButtons.OK);
                }
            }
            else
            {
                log.Debug("All row data is valid for all required columns");
            }
            return(result);
        } // ValidateShipToRows
コード例 #6
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // ValidateFreightRows

        /// <summary>
        /// The process flow to follow when you encounter missing ship to locations in the spreadsheet.
        /// </summary>
        /// <param name="names"></param>
        /// <param name="conceptCSV"></param>
        private void FollowMissingShipToPath(List <string> names, ConceptCSV conceptCSV, LoadingForm frm)
        {
            // 1.) Tell the user about the missing ship to addresses
            using (new CenterDialog(this))
            {
                MessageBox.Show($"There are {names.Count.ToString()} ship to locations that don't exist in JDE.\r\nPress OK to review the list.\r\nThen Save to CSV to create a CSV.\r\nThis CSV needs to be updated and uploaded to JDE.",
                                "Missing Ship To Locations",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Information);
            }
            // 2.) Populate the datatable
            frm.AddText("Populating the datatable for review.");
            MissingShipToCSV = new ShipToCSV();
            MissingShipToCSV.PopulateSpreadsheet(names, conceptCSV);
            this.dgv_DataDisplay.DataSource = MissingShipToCSV.DT;
            // 3.) Make the save to CSV available.
            frm.AddText("Datatable population complete.");
            btn_SaveCSV.Enabled = true;
            return;
        } // FollowMissingShipToPath
コード例 #7
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // CheckShippingVendor

        /// <summary>
        /// Validate the required columns exist
        /// </summary>
        /// <param name="csv"></param>
        /// <returns></returns>
        private bool ValidateShipToHeader(ref ShipToCSV csv)
        {
            bool result = csv.ValidateHeader();

            if (!result)
            {
                // TODO: Change this to display the missing information
                log.Error("Failed to validate required headers");
                using (new CenterDialog(this))
                {
                    MessageBoxButtons buttons = MessageBoxButtons.OK;
                    MessageBox.Show($"Error in csv.  There are missing required header rows.  See Log file and documentation for more information.", "Error in Rollout CSV Headers", buttons);
                }
            }
            else
            {
                log.Debug("All required columns exist");
            }
            return(result);
        } // ValidateShipToHeader
コード例 #8
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // AddressBookFlow

        /// <summary>
        /// Control flow for the customer master data load
        /// </summary>
        private void CustomerMasterFlow()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.GetDirectoryName(Assembly.GetAssembly(typeof(FileIO)).Location) + @"\" + "log4net.config"));
            log.Debug($"Beginning customer master F03012 Z-File Load flow.");
            using (LoadingForm frm = new LoadingForm())
            {
                frm.Visible      = true;
                MissingShipToCSV = null; // make sure to clear this out each time we load a spreadsheet
                // 1.) Get the file to load
                frm.AddText("Get file name to load.");
                string FileToLoad = FileIO.GetFileName(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), FileFilter);
                if (String.Empty != FileToLoad)
                {
                    try
                    {
                        // 2.) Load the file
                        log.Debug($"Attempting to load file {FileToLoad} using <tab> as a delimiter");
                        frm.AddText($"Attempting to load file {FileToLoad} using <tab> as a delimiter.");
                        MissingShipToCSV = new ShipToCSV(FileToLoad, "\t");
                        MissingShipToCSV.ReadShipTo();
                        frm.AddText($"Successfully read file {FileToLoad}.");
                        // 3.) Validate the required columns exist in the spreadsheet
                        log.Debug($"Attempting to validate all required columns exist in the file.");
                        frm.AddText("Validating required columns exist in the file.");
                        if (!ValidateShipToHeader(ref MissingShipToCSV))
                        {
                            return;
                        }
                        // 4.) Validate the data in the rows match the column requirements
                        frm.AddText("Validate data is in the correct format for each row and column.");
                        log.Debug("Validating all row data in all required columns");
                        if (!ValidateShipToRows(ref MissingShipToCSV, false))
                        {
                            return;
                        }                                                                 // No Blank tax area codes allowed
                        // 5.) Either populate the data table for viewing or load the data into JDE
                        using (new CenterDialog(this))
                        {
                            DialogResult result = MessageBox.Show($"All {MissingShipToCSV.DT.Rows.Count} rows of data appear to be valid -- Further checks required.\r\nTry to Load the Data into JDE?\r\nSelect No to preview the detail data before load.",
                                                                  "Load Data?",
                                                                  MessageBoxButtons.YesNoCancel,
                                                                  MessageBoxIcon.Information);

                            if (DialogResult.Cancel == result)
                            {
                                return;
                            }

                            ShipTo ship = null;
                            // 5a.) Save the data into a ShipTo & save that to JDE
                            log.Debug($"Tranform the ShipToCSV into a ShipTo object");
                            frm.AddText($"Converting CSV file to a JDE loadable object.");
                            ship = XfrmShipTo.CSVToShipTo(MissingShipToCSV, true); // Get the JDE address, since we need it
                                                                                   // 5a.1) Verify there aren't any unfound addresses
                            log.Debug($"Checking that all JDE addresses are > 0");
                            frm.AddText($"Validating JDE Addresses were found for all rows.");
                            if (AnyZeroAddresses(ship))
                            {
                                return;
                            }
                            // 5a.2) Verify all tax codes are valid
                            log.Debug($"Verifying all tax codes are valid entries in F4008");
                            frm.AddText($"Validating Tax codes are active in JDE.");
                            if (!ValidateTaxCodes(ship))
                            {
                                return;
                            }
                            // 5a.2.a) Verify all tax code explanations are valid
                            log.Debug($"Verifying all tax code explanations are valid entries in UDC 00/EX");
                            frm.AddText($"Validating Tax Explanations are valid in JDE.");
                            if (!ValidateTaxExplanations(ship))
                            {
                                return;
                            }

                            if (DialogResult.Yes == result)
                            {
                                // 5a.3) Populate the Z file
                                log.Debug($"Populating F03012Z1 with data");
                                frm.AddText("Loading JDE F03012Z1 with data.");
                                JDE.PopulateF03012Z1(ship);
                                // 5b.) Prompt the user to go to JDE
                                log.Debug($"Successfully processed the Ship To information into F03012Z1 with batch number {ship.batch}.");
                                frm.AddText($"Successfully processed bactch number: {ship.batch}.");
                                using (new CenterDialog(this))
                                {
                                    MessageBox.Show($"Your BATCH NUMBER is: {ship.batch}\r\n\r\nThe CUSTOMER MASTER information was successfully loaded into JDE.\r\nPlease go to JDE, and run the CUSTOMER MASTER load UBE.\r\n",
                                                    "Success!",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Information);
                                }
                            }
                            else if (DialogResult.No == result)
                            {
                                // 5c.3) Populate the datatable with concept information
                                frm.AddText("Successfully created JDE loadable object.");
                                this.dgv_DataDisplay.DataSource = ship.NewShipTos;
                            }
                        }
                    }
                    catch (Exception er)
                    {
                        log.Error($"{er.Message} + {er.InnerException} + {er.StackTrace}");
                        using (new CenterDialog(this))
                        {
                            MessageBox.Show($"{er.Message} + {er.InnerException} + {er.StackTrace}",
                                            "Error in Rollout",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                        }
                    }
                }
            }
            return;
        } // CustomerMasterFlow
コード例 #9
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // SaveCSVFlow

        /// <summary>
        /// The control flow for uploading and saving a Ship To CSV address book file.
        /// This data flow doesn't need the tax information.
        /// </summary>
        private void AddressBookFlow()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.GetDirectoryName(Assembly.GetAssembly(typeof(FileIO)).Location) + @"\" + "log4net.config"));
            log.Debug($"Beginning address book F0101 Z-File Load flow.");
            using (LoadingForm frm = new LoadingForm())
            {
                frm.Visible      = true;
                MissingShipToCSV = null; // make sure to clear this out each time we load a spreadsheet
                // 1.) Get the file to load
                frm.AddText("Get file name to load.");
                string FileToLoad = FileIO.GetFileName(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), FileFilter);
                if (String.Empty != FileToLoad)
                {
                    try
                    {
                        // 2.) Load the file
                        log.Debug($"Attempting to load file {FileToLoad} using <tab> as a delimiter");
                        frm.AddText($"Attempting to load file {FileToLoad} using <tab> as a delimiter.");
                        MissingShipToCSV = new ShipToCSV(FileToLoad, "\t");
                        MissingShipToCSV.ReadShipTo();
                        frm.AddText($"Successfully read file {FileToLoad}.");
                        // 3.) Validate the required columns exist in the spreadsheet
                        log.Debug($"Attempting to validate all required columns exist in the file.");
                        frm.AddText("Validating required columns exist in the file.");
                        if (!ValidateShipToHeader(ref MissingShipToCSV))
                        {
                            return;
                        }
                        // 4.) Validate the data in the rows match the column requirements
                        frm.AddText("Validate data is in the correct format for each row and column.");
                        log.Debug("Validating all row data in all required columns");
                        if (!ValidateShipToRows(ref MissingShipToCSV, true))
                        {
                            return;
                        }                                                                // Allow blank TankAreaCode
                        // 5.) Either populate the data table for viewing or load the data into JDE
                        using (new CenterDialog(this))
                        {
                            DialogResult result = MessageBox.Show($"All {MissingShipToCSV.DT.Rows.Count} rows of data are valid.\r\nLoad the Data into JDE?\r\nSelect No to preview the detail data before load.",
                                                                  "Load Data?",
                                                                  MessageBoxButtons.YesNoCancel,
                                                                  MessageBoxIcon.Information);
                            if (DialogResult.Cancel == result)
                            {
                                return;
                            }

                            // 5a.) Save the data into a ShipTo & save that to JDE
                            log.Debug($"Tranform the ShipToCSV into a ShipTo object");
                            frm.AddText($"Converting CSV file to a JDE loadable object.");
                            ShipTo ship = XfrmShipTo.CSVToShipTo(MissingShipToCSV, false); // Don't look up the JDE address, because you don't have any yet

                            if (DialogResult.Yes == result)
                            {
                                log.Debug($"Populating F0101Z2 with data");
                                frm.AddText("Loading JDE F0101Z2 with data.");
                                JDE.PopulateF0101Z2(ship);
                                // 5b.) Prompt the user to go to JDE
                                log.Debug($"Successfully processed the Ship To information into F0101Z2 with batch number {ship.batch}.");
                                frm.AddText($"Successfully processed bactch number: {ship.batch}.");
                                using (new CenterDialog(this))
                                {
                                    MessageBox.Show($"Your BATCH NUMBER is: {ship.batch}\r\n\r\nThe ship to information was successfully loaded into JDE.\r\nPlease go to JDE, and run the address book load UBE.\r\nThen come back and load the customer master information.\r\n\r\n",
                                                    "Success!",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Information);
                                }
                            }
                            else if (DialogResult.No == result)
                            {
                                frm.AddText("Successfully created JDE loadable object.");
                                this.dgv_DataDisplay.DataSource = ship.NewShipTos;
                            }
                        }
                    }
                    catch (Exception er)
                    {
                        log.Error($"{er.Message} + {er.InnerException} + {er.StackTrace}");
                        using (new CenterDialog(this))
                        {
                            MessageBox.Show($"{er.Message} + {er.InnerException} + {er.StackTrace}",
                                            "Error in Rollout",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Error);
                        }
                    }
                }
            }
            return;
        } // AddressBookFlow
コード例 #10
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // LoadRolloutFlow

        /// <summary>
        /// The control flow for saving a Ship To CSV to a file
        /// </summary>
        private void SaveCSVFlow()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.GetDirectoryName(Assembly.GetAssembly(typeof(FileIO)).Location) + @"\" + "log4net.config"));
            log.Debug($"Attempting to save Ship To CSV to a file.");
            using (LoadingForm frm = new LoadingForm())
            {
                // 1.) Verify we have a ship to CSV
                if (null != MissingShipToCSV)
                {
                    frm.AddText("Get the Ship To filename to save as.");
                    frm.Visible = true;
                    // 2.) Get the filename to save
                    string fileName = FileIO.SaveFileName(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), FileFilter);
                    if (String.Empty != fileName)
                    {
                        // 3.) Save the file
                        MissingShipToCSV.FileName  = fileName;
                        MissingShipToCSV.DeLimiter = "\t";
                        try
                        {
                            frm.AddText($"Saving {fileName} as TXT with a <tab> delimiter.");
                            MissingShipToCSV.WriteCSV();
                            frm.AddText($"Successfully saved {fileName}.");
                            this.dgv_DataDisplay.DataSource = null;
                            btn_SaveCSV.Enabled             = false;
                            using (new CenterDialog(this))
                            {
                                MessageBox.Show($"SUCCESS!!\r\nFile {fileName} saved successfully.",
                                                "File Saved Successfully",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Information);
                                MissingShipToCSV = null;
                            }
                        }
                        catch (Exception er)
                        {
                            log.Error($"{er.Message} + {er.InnerException} + {er.StackTrace}");
                            using (new CenterDialog(this))
                            {
                                MessageBox.Show($"{er.Message} + {er.InnerException} + {er.StackTrace}",
                                                "Error in Rollout",
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Error);
                            }
                        }
                    }
                }
                else
                {
                    log.Error($"We don't have a MissingShipToCSV.  Somehow we got here");
                    using (new CenterDialog(this))
                    {
                        MessageBox.Show($"ERROR: The program didn't populate the CSV before enabling this button.\r\nPlease contact IT support.",
                                        "Error in .NET program",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                    btn_SaveCSV.Enabled = false;
                }
            }
        } // SaveCSVFlow
コード例 #11
0
ファイル: Suwanee Rollouts.cs プロジェクト: rlillback/Rollout
        } // FollowMissingShipToPath

        /// <summary>
        /// The control flow for loading a rollout spreadsheet.
        /// </summary>
        private void LoadRolloutFlow()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(Path.GetDirectoryName(Assembly.GetAssembly(typeof(FileIO)).Location) + @"\" + "log4net.config"));
            this.dgv_DataDisplay.DataSource = null;
            MissingShipToCSV = null; // make sure to clear this out each time we load a spreadsheet
            // 1.) Get the file to load
            string FileToLoad = FileIO.GetFileName(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), FileFilter);

            if (String.Empty != FileToLoad)
            {
                try
                {
                    // 2.) Load the file
                    log.Debug($"Attempting to load file {FileToLoad} using \t as a delimiter");
                    conceptCSV = new ConceptCSV(FileToLoad, "\t");
                    using (LoadingForm frm = new LoadingForm())
                    {
                        frm.AddText("Loading Concept Spreadsheet.");
                        frm.Visible = true;
                        conceptCSV.ReadConcept();
                        // 3.) Validate the required columns exist in the spreadsheet
                        log.Debug($"Attempting to validate all required columns exist in the file.");
                        frm.AddText("Validating Concept Required Columns Exist.");
                        if (!ValidateConceptHeader(ref conceptCSV))
                        {
                            return;
                        }
                        // 4a.) Validate the data in the rows match the column requirements
                        log.Debug("Validating all row data in all required columns.");
                        frm.AddText("Validating data in concept spreadsheet.");
                        if (!ValidateConceptRows(ref conceptCSV))
                        {
                            return;
                        }
                        // 4b.) Validate the Shipping Vendor
                        log.Debug("Validating the shipping vendor is V or V3.");
                        frm.AddText("Validating the shipping vendor is a vendor in JDE.");
                        if (!CheckShippingVendor(conceptCSV))
                        {
                            return;
                        }
                        // 4c.) Validate the concept ID exists for the Customer C3 Record
                        log.Debug("Validating the Customer Number has a concept in ABAC08.");
                        frm.AddText("Validating the Customer Number has a concept code.");
                        if (!ConceptCodeExists(conceptCSV))
                        {
                            return;
                        }
                        // 5.) Verify the ship to addresses exist
                        log.Debug("Verify all Ship To addresses exist");
                        frm.AddText("Checking for missing ship to addresses in JDE.");
                        List <string> MissingShipTo = conceptCSV.CheckForMissingShipToAddresses();
                        if (0 < MissingShipTo.Count)
                        {
                            // 6a.) We found new ship to addresses, so start down that path
                            log.Debug("There are Ship To addresses that are missing.  Should we add them?");
                            frm.AddText("Found missing ship to addresses.");
                            FollowMissingShipToPath(MissingShipTo, conceptCSV, frm);
                            frm.Visible = false;
                        }
                        else
                        {
                            // 6b.) All ship to addresses exist.  So, verify the item numbers are valid
                            log.Debug("Verify all items exist in JDE.");
                            frm.AddText("No missing ship to addresses.");
                            frm.AddText("Checking for missing item numbers.");
                            List <string> MissingItems = conceptCSV.CheckForMissingItemNumbers();
                            if (0 < MissingItems.Count)
                            {
                                log.Debug("There are item numbers that don't exist in JDE.");
                                using (new CenterDialog(this))
                                {
                                    MessageBox.Show($"The following part numbers don't exist in JDE.  Please change them or add them to the 3SUW branch plant: {String.Join(",", MissingItems)}",
                                                    "Data Error!!",
                                                    MessageBoxButtons.OK,
                                                    MessageBoxIcon.Error);
                                }
                                frm.Close();
                                return;
                            }
                            else
                            {
                                log.Debug("All items exist in JDE");
                                frm.AddText("All items exist in JDE.");
                                using (new CenterDialog(this))
                                {
                                    DialogResult result = MessageBox.Show($"All {conceptCSV.DT.Rows.Count} rows of data are valid in JDE.\r\nLoad the EDI Data into JDE?\r\nSelect No to preview the detail data before load.",
                                                                          "Load EDI Data?",
                                                                          MessageBoxButtons.YesNoCancel,
                                                                          MessageBoxIcon.Information);
                                    if (DialogResult.Cancel == result)
                                    {
                                        return;
                                    }

                                    // 7.) Save the data into a concept & save that to JDE
                                    log.Debug($"Tranform the conceptCSV into a concept");
                                    frm.AddText("Transforming the spreadsheet into a concept object.");
                                    Concept concept = XfrmConcept.CSVtoConcept(conceptCSV);
                                    if (DialogResult.Yes == result)
                                    {
                                        log.Debug($"Populating header file F47011 with data");
                                        frm.AddText("Populating the EDI header file with concept data.");
                                        JDE.PopulateF47011(concept);
                                        log.Debug($"Populating detail file F47012 with data");
                                        frm.AddText("Populating the EDI detail file with concept data & freight lines.");
                                        JDE.PopulateF47012(concept);
                                        frm.AddText("Success!");
                                        // 8.) Prompt the user to go to JDE
                                        log.Debug($"Successfully processed the EDI information into F47011 and F47012");
                                        MessageBox.Show("The concept was successfully loaded into JDE.\r\nPlease go to JDE, review the data, and run the Rollout Order Import report.",
                                                        "Success!",
                                                        MessageBoxButtons.OK,
                                                        MessageBoxIcon.Information);
                                        frm.Close();
                                    }
                                    else if (DialogResult.No == result)
                                    {
                                        frm.AddText("Success!");
                                        frm.Close();
                                        this.dgv_DataDisplay.DataSource = concept.OrderDetails;
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception er)
                {
                    log.Error($"{er.Message} + {er.InnerException} + {er.StackTrace}");
                    using (new CenterDialog(this))
                    {
                        MessageBox.Show($"{er.Message} + {er.InnerException} + {er.StackTrace}",
                                        "Error in Rollout",
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Error);
                    }
                }
            }
        } // LoadRolloutFlow