Ejemplo n.º 1
0
        public IDictionary <DayType, ICollection <DatesRange> > GetRanges(Month month)
        {
            var groups = month.Days.Where(d => d.Number > 0).OrderBy(d => d.Number).GroupBy(d => d.Type).ToDictionary(d => d.Key, d => d.Select(g => g.Number).ToList());

            var result = new Dictionary <DayType, ICollection <DatesRange> >();

            foreach (var group in groups)
            {
                var dayType = group.Key;

                if (!result.ContainsKey(dayType))
                {
                    result.Add(dayType, new List <DatesRange>());
                }

                var groupDays = group.Value;

                var ranges = new List <List <int> >();

                var currentRange = new List <int>();
                ranges.Add(currentRange);

                void createNewCurrentRange()
                {
                    currentRange = new List <int>();

                    ranges.Add(currentRange);
                }

                for (var i = 0; i < groupDays.Count(); i++)
                {
                    var day = groupDays[i];

                    var nextDayIndex = i + 1;

                    if (i > 0)
                    {
                        var previousDay = groupDays[i - 1];

                        if (day - previousDay > 1)
                        {
                            createNewCurrentRange();
                        }
                    }

                    if (nextDayIndex >= groupDays.Count())
                    {
                        currentRange.Add(day);

                        //createNewCurrentRange();

                        continue;
                    }

                    var nextDay = groupDays[nextDayIndex];

                    if (nextDay - day == 1)
                    {
                        currentRange.AddRange(new[] { day, nextDay });

                        i++;
                    }
                    else
                    {
                        currentRange.Add(day);

                        createNewCurrentRange();
                    }
                }

                foreach (var range in ranges)
                {
                    if (!range.Any())
                    {
                        continue;
                    }

                    var minDateNumber = range.Min();
                    var maxDateNumber = range.Max();

                    var minDate = new DateTime(month.Year, month.Number, minDateNumber);
                    var maxDate = new DateTime(month.Year, month.Number, maxDateNumber);

                    var datesRange = new DatesRange(minDate, maxDate);

                    result[dayType].Add(datesRange);
                }
            }

            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Export data using BackgroundWorker. Build series table and pass parameters from here to BackgroundWorker.
        /// </summary>
        private void btnExport_Click(object sender, EventArgs e)
        {
            // Make sure we aren't still working on a previous task
            if (bgwMain.IsBusy)
            {
                MessageBox.Show("The background worker is busy now. Please try later.", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check the themes  for export.  There should be at least one item selected.
            if (ExportThemes && clbThemes.CheckedItems.Count == 0)
            {
                MessageBox.Show("Please choose at least one theme to export", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check the desired fields for export.  There should be at least one item selected.
            if (clbExportItems.CheckedItems.Count == 0)
            {
                MessageBox.Show("Please choose at least one field to export", "Export To Text File",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //Check whether a delimiter is checked
            var delimiter = delimiterSelector1.CurrentDelimiter;

            if (String.IsNullOrEmpty(delimiter))
            {
                MessageBox.Show("Please input delimiter.", "Export To Text File");
                return;
            }

            //Check the output file path
            string outputFilename = tbOutPutFileName.Text.Trim();

            if (outputFilename == String.Empty)
            {
                MessageBox.Show("Please specify output filename", "Export To Text File");
                return;
            }
            if (Directory.Exists(Path.GetDirectoryName(outputFilename)) == false)
            {
                MessageBox.Show("The directory for the output filename does not exist", "Export To Text File");
                return;
            }

            // Construct DataTable of all the series in the selected theme
            DataTable dtSeries;

            if (ExportThemes)
            {
                var themeIds =
                    (from ThemeDescription themeDescr in clbThemes.CheckedItems select themeDescr.ThemeId).ToList();
                var repository = RepositoryFactory.Instance.Get <IDataSeriesRepository>();
                dtSeries = repository.GetSeriesIDsWithNoDataValueTable(themeIds);
            }
            else
            {
                dtSeries = _dataToExport;
            }

            var checkedItems = new List <string>();

            foreach (var item in clbExportItems.CheckedItems.Cast <string>().Where(item => !checkedItems.Contains(item)))
            {
                checkedItems.Add(item);
            }

            DatesRange datesRange = null;

            if (chbUseDateRange.Checked && cmbDateTimeColumns.SelectedIndex >= 0)
            {
                datesRange = new DatesRange
                {
                    ColumnName = cmbDateTimeColumns.SelectedItem.ToString(),
                    StartDate  = dtpStartDateRange.Value,
                    EndDate    = dtpEndDateRange.Value,
                };
            }


            //Disable all the buttons after "Export" button is clicked.
            UpdateControlsState(true);

            // Show hourglass
            Cursor = Cursors.WaitCursor;

            //pass parameters to BackgroundWorker
            var parameters = new BwParameters
            {
                CheckNoData    = chkNodata.Checked,
                Columns        = checkedItems,
                DatesRange     = datesRange,
                Delimiter      = delimiter,
                OutputFileName = outputFilename,
                Series         = dtSeries,
            };

            // Check for overwrite
            if (File.Exists(outputFilename))
            {
                var message = "File " + outputFilename + " already exists.\nWould you like to replace it?";
                var replace = MessageBox.Show(message, "Export To Text File", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (replace == DialogResult.No)
                {
                    Cursor = Cursors.Default;

                    // Restore controls to their regular state
                    UpdateControlsState(false);
                    return;
                }

                File.Delete(outputFilename);

                bgwMain.RunWorkerAsync(parameters);
            }

            else
            {
                bgwMain.RunWorkerAsync(parameters);
            }
        }