/**
  * standard SS method
  * @param Object - $fields (FieldList)
  * @return Object - FieldList
  */
 function updateCMSFields(FieldList $fields)
 {
     $additionalWhereForDefault = "";
     $fields->removeByName("ExcludedFrom");
     $fields->removeByName("AdditionalTax");
     $tabName = "Root.Tax";
     if ($this->owner instanceof ProductVariation) {
         $fields->addFieldToTab($tabName, new LiteralField("SeeProductForAdditionalTax", _t("GSTTaxModifier.SEE_PARENT", "See parent Product for Additional Tax")));
     } else {
         //additional taxes
         $additionalOptions = GSTTaxModifierOptions::get()->filter(array("DoesNotApplyToAllProducts" => 1));
         if ($additionalOptions->count()) {
             $additionalOptionsList = $additionalOptions->map()->toArray();
             $fields->addFieldToTab($tabName, new CheckboxSetField("AdditionalTax", _t("GSTTaxMofidifier.ADDITIONAL_TAXES", "Additional taxes ..."), $additionalOptionsList));
         }
     }
     if ($this->owner instanceof ProductVariation) {
         $fields->addFieldToTab($tabName, new LiteralField("SeeProductForExcludedFrom", _t("GSTTaxModifier.SEE_PARRENT", "See parent product for excluded taxes")));
     } else {
         //excluded options
         $excludedOptions = GSTTaxModifierOptions::get()->filter(array("DoesNotApplyToAllProducts" => 0));
         if ($excludedOptions->count()) {
             $excludedOptionsList = $excludedOptions->map()->toArray();
             $fields->addFieldToTab($tabName, new CheckboxSetField("ExcludedFrom", _t("GSTTaxMofidifier.EXCLUDE_TAXES", "Taxes that do not apply ..."), $excludedOptionsList));
             $additionalWhereForDefault = " \"GSTTaxModifierOptions\".\"ID\" NOT IN (" . implode(", ", $excludedOptions->map("ID", "ID")->toArray()) . ")";
         }
     }
     //default options
     $defaultOptions = GSTTaxModifierOptions::get()->filter(array("DoesNotApplyToAllProducts" => 0))->where($additionalWhereForDefault);
     if ($defaultOptions->count()) {
         $fields->addFieldToTab($tabName, new ReadonlyField("AlwaysApplies", "+ " . implode(", ", $defaultOptions->map()->toArray()) . "."));
     }
 }
 private function productswithspecialtax()
 {
     $products = Product::get()->where("\"ClassName\" = 'Product'")->sort("RAND()")->limit(2);
     $taxToAdd = GSTTaxModifierOptions::get()->where("\"Code\" = 'ADD'")->First();
     if ($taxToAdd && $products->count()) {
         foreach ($products as $product) {
             $additionalTax = $product->AdditionalTax();
             $additionalTax->addMany(array($taxToAdd->ID));
         }
         $this->addExamplePages(2, "product with additional taxes (add to cart to see this feature in action)", $products);
     }
     /*
     $products = AnyPriceProductPage::get();
     $allStandardTaxes = GSTTaxModifierOptions::get()
     	->where("\"DoesNotApplyToAllProducts\" = 0");
     if($allStandardTaxes && $products->count()) {
     	foreach($products as $product) {
     		$excludedTax = $product->ExcludedFrom();
     		foreach($allStandardTaxes as $taxToExclude) {
     			$excludedTax->addMany(array($taxToExclude->ID));
     		}
     	}
     	$this->addExamplePages(2, "product without taxes (add to cart to see this feature in action)", $products);
     }
     */
 }
 /**
  * Are there Any taxes that do not apply to all products
  * @return Boolean
  */
 protected function hasExceptionTaxes()
 {
     return GSTTaxModifierOptions::get()->filter(array("DoesNotApplyToAllProducts" => 1))->First() ? false : true;
 }