# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Sheets.V4.Model.PivotGroup do
  @moduledoc """
  A single grouping (either row or column) in a pivot table.

  ## Attributes

  *   `dataSourceColumnReference` (*type:* `GoogleApi.Sheets.V4.Model.DataSourceColumnReference.t`, *default:* `nil`) - The reference to the data source column this grouping is based on.
  *   `groupLimit` (*type:* `GoogleApi.Sheets.V4.Model.PivotGroupLimit.t`, *default:* `nil`) - The count limit on rows or columns to apply to this pivot group.
  *   `groupRule` (*type:* `GoogleApi.Sheets.V4.Model.PivotGroupRule.t`, *default:* `nil`) - The group rule to apply to this row/column group.
  *   `label` (*type:* `String.t`, *default:* `nil`) - The labels to use for the row/column groups which can be customized. For example, in the following pivot table, the row label is `Region` (which could be renamed to `State`) and the column label is `Product` (which could be renamed `Item`). Pivot tables created before December 2017 do not have header labels. If you'd like to add header labels to an existing pivot table, please delete the existing pivot table and then create a new pivot table with same parameters. +--------------+---------+-------+ | SUM of Units | Product | | | Region | Pen | Paper | +--------------+---------+-------+ | New York | 345 | 98 | | Oregon | 234 | 123 | | Tennessee | 531 | 415 | +--------------+---------+-------+ | Grand Total | 1110 | 636 | +--------------+---------+-------+
  *   `repeatHeadings` (*type:* `boolean()`, *default:* `nil`) - True if the headings in this pivot group should be repeated. This is only valid for row groupings and is ignored by columns. By default, we minimize repetition of headings by not showing higher level headings where they are the same. For example, even though the third row below corresponds to "Q1 Mar", "Q1" is not shown because it is redundant with previous rows. Setting repeat_headings to true would cause "Q1" to be repeated for "Feb" and "Mar". +--------------+ | Q1 | Jan | | | Feb | | | Mar | +--------+-----+ | Q1 Total | +--------------+
  *   `showTotals` (*type:* `boolean()`, *default:* `nil`) - True if the pivot table should include the totals for this grouping.
  *   `sortOrder` (*type:* `String.t`, *default:* `nil`) - The order the values in this group should be sorted.
  *   `sourceColumnOffset` (*type:* `integer()`, *default:* `nil`) - The column offset of the source range that this grouping is based on. For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this group refers to column `C`, whereas the offset `1` would refer to column `D`.
  *   `valueBucket` (*type:* `GoogleApi.Sheets.V4.Model.PivotGroupSortValueBucket.t`, *default:* `nil`) - The bucket of the opposite pivot group to sort by. If not specified, sorting is alphabetical by this group's values.
  *   `valueMetadata` (*type:* `list(GoogleApi.Sheets.V4.Model.PivotGroupValueMetadata.t)`, *default:* `nil`) - Metadata about values in the grouping.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :dataSourceColumnReference =>
            GoogleApi.Sheets.V4.Model.DataSourceColumnReference.t() | nil,
          :groupLimit => GoogleApi.Sheets.V4.Model.PivotGroupLimit.t() | nil,
          :groupRule => GoogleApi.Sheets.V4.Model.PivotGroupRule.t() | nil,
          :label => String.t() | nil,
          :repeatHeadings => boolean() | nil,
          :showTotals => boolean() | nil,
          :sortOrder => String.t() | nil,
          :sourceColumnOffset => integer() | nil,
          :valueBucket => GoogleApi.Sheets.V4.Model.PivotGroupSortValueBucket.t() | nil,
          :valueMetadata => list(GoogleApi.Sheets.V4.Model.PivotGroupValueMetadata.t()) | nil
        }

  field(:dataSourceColumnReference, as: GoogleApi.Sheets.V4.Model.DataSourceColumnReference)
  field(:groupLimit, as: GoogleApi.Sheets.V4.Model.PivotGroupLimit)
  field(:groupRule, as: GoogleApi.Sheets.V4.Model.PivotGroupRule)
  field(:label)
  field(:repeatHeadings)
  field(:showTotals)
  field(:sortOrder)
  field(:sourceColumnOffset)
  field(:valueBucket, as: GoogleApi.Sheets.V4.Model.PivotGroupSortValueBucket)
  field(:valueMetadata, as: GoogleApi.Sheets.V4.Model.PivotGroupValueMetadata, type: :list)
end

defimpl Poison.Decoder, for: GoogleApi.Sheets.V4.Model.PivotGroup do
  def decode(value, options) do
    GoogleApi.Sheets.V4.Model.PivotGroup.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Sheets.V4.Model.PivotGroup do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
