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 } }
private void RetrieveSubstitutions(XmlTextWriter writer, IJPMessage m, IJP ijp) { int maxSZ = -1; int[] sr = new int[100]; // They are assumed to be 0 for (int i = 0; i < m.CalendarConditions.Count; i++) { IJPCalendarCondition cc = m.CalendarConditions[i]; int n = cc.SubstitutionRuleNumber; maxSZ = Math.Max(maxSZ, n); if (cc.YearSubstitutionRule) { sr[n] |= (int)Ba.Year; } if (cc.MonthSubstitutionRule) { sr[n] |= (int)Ba.Month; } if (cc.DaySubstitutionRule) { sr[n] |= (int)Ba.Day; } if (cc.HourSubstitutionRule) { sr[n] |= (int)Ba.Hour; } if (cc.MinuteSubstitutionRule) { sr[n] |= (int)Ba.Minute; } if (cc.WeekNumberSubstitutionRule) { sr[n] |= (int)Ba.WeekNumber; } if (cc.WeekSubstitutionRule) { sr[n] |= (int)Ba.DayOfWeek; } } for (int i = 1; i <= maxSZ; i++) { if (sr[i] > 0) { IJPSubstitutionRule srs = (IJPSubstitutionRule)ijp.GetSubstitutionRule(i); writer.WriteStartElement("Substitution"); { writer.WriteAttributeString("Delimiter", "/"); writer.WriteAttributeString("StartYear", srs.StartYear.ToString()); writer.WriteAttributeString("RuleNumber", i.ToString()); writer.WriteAttributeString("RuleName", srs.Name); if ((sr[i] & (int)Ba.Year) > 0) { RetrieveSubstitution(writer, srs, Ba.Year, 0, 23); } if ((sr[i] & (int)Ba.Month) > 0) { RetrieveSubstitution(writer, srs, Ba.Month, 1, 12); } if ((sr[i] & (int)Ba.Day) > 0) { RetrieveSubstitution(writer, srs, Ba.Day, 1, 31); } if ((sr[i] & (int)Ba.Hour) > 0) { RetrieveSubstitution(writer, srs, Ba.Hour, 0, 23); } if ((sr[i] & (int)Ba.Minute) > 0) { RetrieveSubstitution(writer, srs, Ba.Minute, 0, 59); } if ((sr[i] & (int)Ba.WeekNumber) > 0) { RetrieveSubstitution(writer, srs, Ba.WeekNumber, 1, 53); } if ((sr[i] & (int)Ba.DayOfWeek) > 0) { RetrieveSubstitution(writer, srs, Ba.DayOfWeek, 1, 7); } } writer.WriteEndElement(); // Substitution } } }
// 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); }