Example #1
0
        private void RetrieveCalendarSettings(XmlTextWriter writer, int FirstBlock, int BlockCount, IJPCalendarConditionCollection cc, int[] mask)
        {
            for (int i = 0; i < BlockCount; i++)
            {
                IJPCalendarCondition c = cc[FirstBlock + i];
                // Where is the Substitution Rule
                writer.WriteStartElement("Date"); // Start Date
                {
                    writer.WriteAttributeString("Block", (i + 1).ToString());
                    if ((mask[i] & DateUseSubRule) > 0)
                    {
                        writer.WriteAttributeString("SubstitutionRule", c.SubstitutionRuleNumber.ToString());
                        writer.WriteAttributeString("RuleName", "");
                    }

                    if ((mask[i] & DateOffset) > 0)         // Not always needed
                    {
                        writer.WriteStartElement("Offset"); // Start Offset
                        {
                            writer.WriteAttributeString("Year", c.YearOffset.ToString());
                            writer.WriteAttributeString("Month", c.MonthOffset.ToString());
                            writer.WriteAttributeString("Day", c.DayOffset.ToString());
                            writer.WriteAttributeString("Hour", c.HourOffset.ToString());
                            writer.WriteAttributeString("Minute", c.MinuteOffset.ToString());
                        }
                        writer.WriteEndElement(); // End Offset
                    }

                    if ((mask[i] & DateSubZS) > 0)
                    {
                        writer.WriteStartElement("ZeroSuppress"); // Start ZeroSuppress
                        {
                            if ((mask[i] & (int)Ba.Year) > 0)
                            {
                                writer.WriteAttributeString("Year", c.YearZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.Month) > 0)
                            {
                                writer.WriteAttributeString("Month", c.MonthZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.Day) > 0)
                            {
                                writer.WriteAttributeString("Day", c.DayZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.Hour) > 0)
                            {
                                writer.WriteAttributeString("Hour", c.HourZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.Minute) > 0)
                            {
                                writer.WriteAttributeString("Minute", c.MinuteZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.WeekNumber) > 0)
                            {
                                writer.WriteAttributeString("Week", c.WeekNumberZeroSuppression.ToString());
                            }
                            if ((mask[i] & (int)Ba.DayOfWeek) > 0)
                            {
                                writer.WriteAttributeString("DayOfWeek", c.WeekZeroSuppression.ToString());
                            }
                        }
                        writer.WriteEndElement();               // End ZeroSuppress

                        writer.WriteStartElement("Substitute"); // Start Substitute
                        {
                            if ((mask[i] & (int)Ba.Year) > 0)
                            {
                                writer.WriteAttributeString("Year", c.YearSubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.Month) > 0)
                            {
                                writer.WriteAttributeString("Month", c.MonthSubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.Day) > 0)
                            {
                                writer.WriteAttributeString("Day", c.DaySubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.Hour) > 0)
                            {
                                writer.WriteAttributeString("Hour", c.HourSubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.Minute) > 0)
                            {
                                writer.WriteAttributeString("Minute", c.MinuteSubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.WeekNumber) > 0)
                            {
                                writer.WriteAttributeString("Week", c.WeekNumberSubstitutionRule.ToString());
                            }
                            if ((mask[i] & (int)Ba.DayOfWeek) > 0)
                            {
                                writer.WriteAttributeString("DayOfWeek", c.WeekSubstitutionRule.ToString());
                            }
                        }
                        writer.WriteEndElement(); // End EnableSubstitution
                    }
                }
                writer.WriteEndElement(); // End Date
            }
        }
        // Send Calendar related information
        private bool LoadCalendar(IJPCalendarConditionCollection ccc, XmlNode obj, int CalBlockCount, int FirstCalBlock)
        {
            bool success = true;

            foreach (XmlNode d in obj)
            {
                if (d is XmlWhitespace)
                {
                    continue;
                }
                if (d.Name == "Date" && int.TryParse(GetXmlAttr(d, "Block"), out int b) && b <= CalBlockCount)
                {
                    IJPCalendarCondition cc = ccc[FirstCalBlock + b - 1];

                    if (int.TryParse(GetXmlAttr(d, "SubstitutionRule"), out int sr))
                    {
                        cc.SubstitutionRuleNumber = (byte)sr;
                    }
                    foreach (XmlNode n in d.ChildNodes)
                    {
                        if (n is XmlWhitespace)
                        {
                            continue;
                        }
                        switch (n.Name)
                        {
                        case "Offset":
                            foreach (XmlAttribute a in n.Attributes)
                            {
                                if (int.TryParse(a.Value, out int x))
                                {
                                    switch (a.Name)
                                    {
                                    case "Year":
                                        cc.YearOffset = (byte)x;
                                        break;

                                    case "Month":
                                        cc.MonthOffset = (byte)x;
                                        break;

                                    case "Day":
                                        cc.DayOffset = (ushort)x;
                                        break;

                                    case "Hour":
                                        cc.HourOffset = (short)x;
                                        break;

                                    case "Minute":
                                        cc.MinuteOffset = (short)x;
                                        break;
                                    }
                                }
                            }
                            break;

                        case "ZeroSuppress":
                            foreach (XmlAttribute a in n.Attributes)
                            {
                                IJPCalendarConditionZeroSuppress zs = ParseEnum <IJPCalendarConditionZeroSuppress>(a.Value);
                                switch (a.Name)
                                {
                                case "Year":
                                    cc.YearZeroSuppression = zs;
                                    break;

                                case "Month":
                                    cc.MonthZeroSuppression = zs;
                                    break;

                                case "Day":
                                    cc.DayZeroSuppression = zs;
                                    break;

                                case "Hour":
                                    cc.HourZeroSuppression = zs;
                                    break;

                                case "Minute":
                                    cc.MinuteZeroSuppression = zs;
                                    break;

                                case "Week":
                                    cc.WeekZeroSuppression = zs;
                                    break;

                                case "DayOfWeek":
                                    cc.WeekNumberZeroSuppression = zs;
                                    break;
                                }
                            }
                            break;

                        case "Substitute":
                            foreach (XmlAttribute a in n.Attributes)
                            {
                                if (bool.TryParse(a.Value, out bool sub))
                                {
                                    switch (a.Name)
                                    {
                                    case "Year":
                                        cc.YearSubstitutionRule = sub;
                                        break;

                                    case "Month":
                                        cc.MonthSubstitutionRule = sub;
                                        break;

                                    case "Day":
                                        cc.DaySubstitutionRule = sub;
                                        break;

                                    case "Hour":
                                        cc.HourSubstitutionRule = sub;
                                        break;

                                    case "Minute":
                                        cc.MinuteSubstitutionRule = sub;
                                        break;

                                    case "Week":
                                        cc.WeekNumberSubstitutionRule = sub;
                                        break;

                                    case "DayOfWeek":
                                        cc.WeekSubstitutionRule = sub;
                                        break;
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
            }
            return(success);
        }