| /******************************************************************************* | 
 |  * You may amend and distribute as you like, but don't remove this header! | 
 |  * | 
 |  * EPPlus provides server-side generation of Excel 2007/2010 spreadsheets. | 
 |  * See http://www.codeplex.com/EPPlus for details. | 
 |  * | 
 |  * Copyright (C) 2011  Jan Källman | 
 |  * | 
 |  * This library is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU Lesser General Public | 
 |  * License as published by the Free Software Foundation; either | 
 |  * version 2.1 of the License, or (at your option) any later version. | 
 |  | 
 |  * This library is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | 
 |  * See the GNU Lesser General Public License for more details. | 
 |  * | 
 |  * The GNU Lesser General Public License can be viewed at http://www.opensource.org/licenses/lgpl-license.php | 
 |  * If you unfamiliar with this license or have questions about it, here is an http://www.gnu.org/licenses/gpl-faq.html | 
 |  * | 
 |  * All code and executables are provided "as is" with no warranty either express or implied. | 
 |  * The author accepts no liability for any damage or loss of business that this product may cause. | 
 |  * | 
 |  * Code change notes: | 
 |  * | 
 |  * Author							Change						Date | 
 |  * ****************************************************************************** | 
 |  * Jan Källman		Added		21-MAR-2011 | 
 |  * Jan Källman		License changed GPL-->LGPL 2011-12-16 | 
 |  *******************************************************************************/ | 
 |  | 
 | using System; | 
 | using System.Globalization; | 
 | using System.Xml; | 
 |  | 
 | namespace AppsheetEpplus; | 
 |  | 
 | /// <summary> | 
 | /// Base class for pivot table field groups | 
 | /// </summary> | 
 | public class ExcelPivotTableFieldGroup : XmlHelper { | 
 |   internal ExcelPivotTableFieldGroup(XmlNamespaceManager ns, XmlNode topNode) | 
 |       : base(ns, topNode) {} | 
 | } | 
 |  | 
 | /// <summary> | 
 | /// A date group | 
 | /// </summary> | 
 | public class ExcelPivotTableFieldDateGroup : ExcelPivotTableFieldGroup { | 
 |   internal ExcelPivotTableFieldDateGroup(XmlNamespaceManager ns, XmlNode topNode) | 
 |       : base(ns, topNode) {} | 
 |  | 
 |   private const string _groupByPath = "d:fieldGroup/d:rangePr/@groupBy"; | 
 |  | 
 |   /// <summary> | 
 |   /// How to group the date field | 
 |   /// </summary> | 
 |   public eDateGroupBy GroupBy { | 
 |     get { | 
 |       string v = GetXmlNodeString(_groupByPath); | 
 |       if (v != "") { | 
 |         return (eDateGroupBy)Enum.Parse(typeof(eDateGroupBy), v, true); | 
 |       } | 
 |       throw (new("Invalid date Groupby")); | 
 |     } | 
 |     private set => | 
 |       SetXmlNodeString(_groupByPath, value.ToString().ToLower(CultureInfo.InvariantCulture)); | 
 |   } | 
 |  | 
 |   /// <summary> | 
 |   /// Auto detect start date | 
 |   /// </summary> | 
 |   public bool AutoStart => GetXmlNodeBool("@autoStart", false); | 
 |  | 
 |   /// <summary> | 
 |   /// Auto detect end date | 
 |   /// </summary> | 
 |   public bool AutoEnd => GetXmlNodeBool("@autoStart", false); | 
 | } | 
 |  | 
 | /// <summary> | 
 | /// A pivot table field numeric grouping | 
 | /// </summary> | 
 | public class ExcelPivotTableFieldNumericGroup : ExcelPivotTableFieldGroup { | 
 |   internal ExcelPivotTableFieldNumericGroup(XmlNamespaceManager ns, XmlNode topNode) | 
 |       : base(ns, topNode) {} | 
 |  | 
 |   private const string _startPath = "d:fieldGroup/d:rangePr/@startNum"; | 
 |  | 
 |   /// <summary> | 
 |   /// Start value | 
 |   /// </summary> | 
 |   public double Start => (double)GetXmlNodeDoubleNull(_startPath); | 
 |  | 
 |   private const string _endPath = "d:fieldGroup/d:rangePr/@endNum"; | 
 |  | 
 |   /// <summary> | 
 |   /// End value | 
 |   /// </summary> | 
 |   public double End => (double)GetXmlNodeDoubleNull(_endPath); | 
 |  | 
 |   private const string _groupIntervalPath = "d:fieldGroup/d:rangePr/@groupInterval"; | 
 |  | 
 |   /// <summary> | 
 |   /// Interval | 
 |   /// </summary> | 
 |   public double Interval => (double)GetXmlNodeDoubleNull(_groupIntervalPath); | 
 | } |