Beispiel #1
0
        /// <summary>
        /// Inits this instance.
        /// </summary>
        protected virtual void Init()
        {
            _minColumnId = "9999";
            _maxColumnId = "0000";

            #region Calculate Data Boundary
            // Calculate Data Boundary
            foreach (Cell cell in this.Document.Cells)
            {
                if (cell.Position.ColumnId != "TT")
                {
                    if (string.Compare(cell.Position.ColumnId, _minColumnId) < 0)
                    {
                        _minColumnId = cell.Position.ColumnId;
                    }
                    if (string.Compare(cell.Position.ColumnId, _maxColumnId) > 0)
                    {
                        _maxColumnId = cell.Position.ColumnId;
                    }
                }
            }

            _minYear = int.Parse(_minColumnId.Substring(0, 4));
            _maxYear = int.Parse(_maxColumnId.Substring(0, 4));

            if (_minYear == 9999)
            {
                _minYear = _fromYear;
            }
            if (_maxYear == 0)
            {
                _maxYear = _toYear;
            }

            if (_fromYear == int.MinValue)
            {
                _fromYear = _minYear;
            }

            if (_toYear == int.MaxValue)
            {
                _toYear = _maxYear;
            }

            _minYear = Math.Min(_fromYear, _minYear);
            _maxYear = Math.Max(_toYear, _maxYear);
            #endregion

            // Fill Colimns
            switch (this.Document.DocumentType)
            {
            case SpreadSheetDocumentType.MonthQuarterYear:
            {
                #region SpreadSheetDocumentType.MonthQuarterYear
                for (int curYear = _minYear; curYear <= _maxYear; curYear++)
                {
                    //Fill View boundary
                    if (curYear == _fromYear)
                    {
                        _viewColumnIndex = _columns.Count;
                    }

                    if (curYear > _toYear && _viewColumnLength == 0)
                    {
                        StringBuilder totalParams = new StringBuilder();

                        for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                        {
                            if (totalParams.Length > 0)
                            {
                                totalParams.Append('+');
                            }
                            totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                        }

                        Column total = CreateColumn("TT", "Total");
                        total.Expression = totalParams.ToString();

                        _viewColumnLength = _columns.Count - _viewColumnIndex;
                    }

                    // Create Column
                    StringBuilder yearTotalParams = new StringBuilder();

                    for (int curQuarter = 1; curQuarter <= 4; curQuarter++)
                    {
                        StringBuilder quarterTotalParams = new StringBuilder();

                        for (int curMonth = (curQuarter - 1) * 3 + 1; curMonth <= curQuarter * 3; curMonth++)
                        {
                            DateTime time = new DateTime(curYear, curMonth, 1);

                            Column newColumn = CreateColumn(string.Format("{0:0000}-Q{1:0}-{2:00}", curYear, curQuarter, curMonth),
                                                            time.ToString("MMMM"));

                            if (quarterTotalParams.Length > 0)
                            {
                                quarterTotalParams.Append('+');
                            }
                            quarterTotalParams.AppendFormat("[{0}]", newColumn.Id);
                        }

                        // Quarter Total
                        Column quarterTotal = CreateColumn(string.Format("{0:0000}-Q{1:0}-T", curYear, curQuarter),
                                                           string.Format("Total", curYear, curQuarter));
                        quarterTotal.Expression = quarterTotalParams.ToString();

                        if (yearTotalParams.Length > 0)
                        {
                            yearTotalParams.Append('+');
                        }
                        yearTotalParams.AppendFormat("[{0}]", quarterTotal.Id);
                    }

                    // Year Total
                    Column yearTotal = CreateColumn(string.Format("{0:0000}-T", curYear),
                                                    string.Format("Total", curYear));
                    yearTotal.Expression = yearTotalParams.ToString();
                }

                // Final Total
                if (_viewColumnLength == 0)
                {
                    StringBuilder totalParams = new StringBuilder();

                    for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                    {
                        if (totalParams.Length > 0)
                        {
                            totalParams.Append('+');
                        }
                        totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                    }

                    Column total = CreateColumn("TT", "Total");
                    total.Expression = totalParams.ToString();

                    _viewColumnLength = _columns.Count - _viewColumnIndex;
                }

                #endregion
            }
            break;

            case SpreadSheetDocumentType.WeekYear:
            {
                #region SpreadSheetDocumentType.WeekYear
                for (int curYear = _minYear; curYear <= _maxYear; curYear++)
                {
                    //Fill View boundary
                    if (curYear == _fromYear)
                    {
                        _viewColumnIndex = _columns.Count;
                    }

                    if (curYear > _toYear && _viewColumnLength == 0)
                    {
                        StringBuilder totalParams = new StringBuilder();

                        for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                        {
                            if (totalParams.Length > 0)
                            {
                                totalParams.Append('+');
                            }
                            totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                        }

                        Column total = CreateColumn("TT", "Total");
                        total.Expression = totalParams.ToString();

                        _viewColumnLength = _columns.Count - _viewColumnIndex;
                    }

                    // Create Columns
                    StringBuilder yearTotalParams = new StringBuilder();

                    DateTime yearStart = Iso8601WeekNumber.GetFirstWeekOfYear(curYear);

                    for (int curWeek = 1; curWeek <= 52; curWeek++)
                    {
                        DateTime weekFrom = yearStart.AddDays(7 * (curWeek - 1));
                        DateTime weekTo   = weekFrom.AddDays(6);

                        Column newColumn = CreateColumn(string.Format("{0:0000}-W{1:00}", curYear, curWeek),
                                                        string.Format("{1:dd MMM}", curWeek, weekFrom, weekTo));

                        if (yearTotalParams.Length > 0)
                        {
                            yearTotalParams.Append('+');
                        }
                        yearTotalParams.AppendFormat("[{0}]", newColumn.Id);
                    }

                    // Year Total
                    Column yearTotal = CreateColumn(string.Format("{0:0000}-T", curYear),
                                                    string.Format("Total", curYear));
                    yearTotal.Expression = yearTotalParams.ToString();
                }

                // Final Total
                if (_viewColumnLength == 0)
                {
                    StringBuilder totalParams = new StringBuilder();

                    for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                    {
                        if (totalParams.Length > 0)
                        {
                            totalParams.Append('+');
                        }
                        totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                    }

                    Column total = CreateColumn("TT", "Total");
                    total.Expression = totalParams.ToString();

                    _viewColumnLength = _columns.Count - _viewColumnIndex;
                }
                #endregion
            }
            break;

            case SpreadSheetDocumentType.QuarterYear:
            {
                #region SpreadSheetDocumentType.QuarterYear
                for (int curYear = _minYear; curYear <= _maxYear; curYear++)
                {
                    //Fill View boundary
                    if (curYear == _fromYear)
                    {
                        _viewColumnIndex = _columns.Count;
                    }

                    if (curYear > _toYear && _viewColumnLength == 0)
                    {
                        StringBuilder totalParams = new StringBuilder();

                        for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                        {
                            if (totalParams.Length > 0)
                            {
                                totalParams.Append('+');
                            }
                            totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                        }

                        Column total = CreateColumn("TT", "Total");
                        total.Expression = totalParams.ToString();

                        _viewColumnLength = _columns.Count - _viewColumnIndex;
                    }

                    // Create Column
                    StringBuilder yearTotalParams = new StringBuilder();

                    for (int curQuarter = 1; curQuarter <= 4; curQuarter++)
                    {
                        StringBuilder quarterTotalParams = new StringBuilder();

                        // Quarter Total
                        Column quarterTotal = CreateColumn(string.Format("{0:0000}-Q{1:0}", curYear, curQuarter),
                                                           string.Format("{2}{1:0}", curYear, curQuarter, LocRM.GetString("Quartal")));

                        if (yearTotalParams.Length > 0)
                        {
                            yearTotalParams.Append('+');
                        }
                        yearTotalParams.AppendFormat("[{0}]", quarterTotal.Id);
                    }

                    // Year Total
                    Column yearTotal = CreateColumn(string.Format("{0:0000}-T", curYear),
                                                    string.Format("Total", curYear));
                    yearTotal.Expression = yearTotalParams.ToString();
                }

                // Final Total
                if (_viewColumnLength == 0)
                {
                    StringBuilder totalParams = new StringBuilder();

                    for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                    {
                        if (totalParams.Length > 0)
                        {
                            totalParams.Append('+');
                        }
                        totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                    }

                    Column total = CreateColumn("TT", LocRM.GetString("ProjectTotal"));
                    total.Expression = totalParams.ToString();

                    _viewColumnLength = _columns.Count - _viewColumnIndex;
                }

                #endregion
            }
            break;

            case SpreadSheetDocumentType.Year:
            {
                #region SpreadSheetDocumentType.QuarterYear
                for (int curYear = _minYear; curYear <= _maxYear; curYear++)
                {
                    //Fill View boundary
                    if (curYear == _fromYear)
                    {
                        _viewColumnIndex = _columns.Count;
                    }

                    if (curYear > _toYear && _viewColumnLength == 0)
                    {
                        StringBuilder totalParams = new StringBuilder();

                        for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                        {
                            if (totalParams.Length > 0)
                            {
                                totalParams.Append('+');
                            }
                            totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                        }

                        Column total = CreateColumn("TT", "Total");
                        total.Expression = totalParams.ToString();

                        _viewColumnLength = _columns.Count - _viewColumnIndex;
                    }

                    // Year Total
                    Column yearTotal = CreateColumn(string.Format("{0:0000}-T", curYear),
                                                    string.Format("{0:0000}", curYear));
                }

                // Final Total
                if (_viewColumnLength == 0)
                {
                    StringBuilder totalParams = new StringBuilder();

                    for (int curTYear = _minYear; curTYear <= _maxYear; curTYear++)
                    {
                        if (totalParams.Length > 0)
                        {
                            totalParams.Append('+');
                        }
                        totalParams.AppendFormat("[{0:0000}-T]", curTYear);
                    }

                    Column total = CreateColumn("TT", LocRM.GetString("ProjectTotal"));
                    total.Expression = totalParams.ToString();

                    _viewColumnLength = _columns.Count - _viewColumnIndex;
                }

                #endregion
            }
            break;

            case SpreadSheetDocumentType.Total:
            {
                _viewColumnIndex  = 0;
                _viewColumnLength = 1;
                Column total = CreateColumn("TT", LocRM.GetString("ProjectTotal"));
            }
            break;
            }
        }