/**
  * customizes the backends fields, mainly for ModelAdmin
  * 
  * @param array $params configuration parameters
  *
  * @return FieldList the fields for the backend
  * 
  * @author Roland Lehmann <*****@*****.**>, Sebastian Diel <*****@*****.**>
  * @since 26.10.2012
  */
 public function getCMSFields($params = null)
 {
     $fields = parent::getCMSFields(array_merge(array('fieldClasses' => array('amount' => 'SilvercartMoneyField')), (array) $params));
     SilvercartTax::presetDropdownWithDefault($fields->dataFieldByName('SilvercartTaxID'), $this);
     $fieldGroup = new SilvercartFieldGroup('handlingCostGroup', '', $fields);
     $fieldGroup->push($fields->dataFieldByName('amount'));
     $fieldGroup->pushAndBreak($fields->dataFieldByName('SilvercartTaxID'));
     $fields->addFieldToTab('Root.Main', $fieldGroup);
     return $fields;
 }
 /**
  * Adds or modifies the fields for the Prices tab
  *
  * @param FieldList $fields FieldList to add fields to
  * 
  * @return void
  */
 public function getFieldsForPrices($fields)
 {
     SilvercartTax::presetDropdownWithDefault($fields->dataFieldByName('SilvercartTaxID'), $this);
     $pricesGroup = new SilvercartFieldGroup('PricesGroup', '', $fields);
     $pricesGroup->push($fields->dataFieldByName('PriceGross'));
     $pricesGroup->push($fields->dataFieldByName('PriceNet'));
     $pricesGroup->push($fields->dataFieldByName('MSRPrice'));
     $pricesGroup->push($fields->dataFieldByName('PurchasePrice'));
     $pricesGroup->push($fields->dataFieldByName('SilvercartTaxID'));
     $fields->insertAfter($pricesGroup, 'ProductNumberGroup');
 }
Example #3
0
 /**
  * Returns the default tax rate
  * 
  * @return SilvercartTax
  */
 public static function getDefault()
 {
     $defaultTaxRate = SilvercartTax::get()->filter('IsDefault', '1')->first();
     return $defaultTaxRate;
 }
 /**
  * creates test tax rates on /dev/build or creating test data in ModelAdmin.
  *
  * @return void
  *
  * @author Sebastian Diel <*****@*****.**>
  * @since 02.07.2011
  */
 public static function createTestTaxRates()
 {
     if (self::$enableTestData === true) {
         // create two standard german tax rates if no tax rate exists
         $taxRate = SilvercartTax::get()->first();
         if (!$taxRate) {
             $taxrates = array('19' => array('en_US' => '19%', 'en_GB' => '19%', 'de_DE' => '19%'), '7' => array('en_US' => '7%', 'en_GB' => '7%', 'de_DE' => '7%'));
             $locales = array('de_DE', 'en_GB', 'en_US');
             $fallbackLocale = false;
             if (!in_array(Translatable::get_current_locale(), $locales)) {
                 $locales[] = Translatable::get_current_locale();
                 $fallbackLocale = Translatable::get_current_locale();
             }
             if ($fallbackLocale !== false) {
                 $taxrates[0][$fallbackLocale] = $taxrates[0]['en_US'];
                 $taxrates[1][$fallbackLocale] = $taxrates[1]['en_US'];
             }
             foreach ($taxrates as $taxrate => $languages) {
                 $rateObj = new SilvercartTax();
                 $rateObj->Rate = $taxrate;
                 $rateObj->write();
                 foreach ($languages as $locale => $title) {
                     $rateLanguage = SilvercartTaxLanguage::get()->filter(array('Locale' => $locale, 'SilvercartTaxID' => $rateObj->ID))->first();
                     if (!$rateLanguage) {
                         $rateLanguage = new SilvercartTaxLanguage();
                         $rateLanguage->Locale = $locale;
                         $rateLanguage->SilvercartTaxID = $rateObj->ID;
                     }
                     $rateLanguage->Title = $title;
                     $rateLanguage->write();
                 }
             }
         }
     }
 }
 /**
  * Customizes the backends fields, mainly for ModelAdmin
  *
  * @return FieldList the fields for the backend
  * 
  * @author Roland Lehmann <*****@*****.**>, Sebastian Diel <*****@*****.**>
  * @since 13.02.2013
  */
 public function getCMSFields()
 {
     $this->getCMSFieldsIsCalled = true;
     $fields = parent::getCMSFields();
     $postPricingField = $fields->dataFieldByName('PostPricing');
     $postPricingField->setTitle($postPricingField->Title() . ' (' . $this->fieldLabel('PostPricingInfo') . ')');
     SilvercartTax::presetDropdownWithDefault($fields->dataFieldByName('SilvercartTaxID'), $this);
     $fieldGroup = new SilvercartFieldGroup('ShippingFeeGroup', '', $fields);
     $fieldGroup->push($fields->dataFieldByName('MaximumWeight'));
     $fieldGroup->pushAndBreak($fields->dataFieldByName('UnlimitedWeight'));
     $fieldGroup->push($fields->dataFieldByName('Price'));
     $fieldGroup->pushAndBreak($fields->dataFieldByName('SilvercartTaxID'));
     $fieldGroup->pushAndBreak($postPricingField);
     // only the carriers zones must be selectable
     $leftJoinTable = 'SilvercartZone_SilvercartCarriers';
     $leftJoinOn = '"SilvercartZone"."ID" = "SilvercartZone_SilvercartCarriers"."SilvercartZoneID"';
     $where = sprintf("\"SilvercartZone_SilvercartCarriers\".\"SilvercartCarrierID\" = %s", $this->SilvercartShippingMethod()->SilvercartCarrier()->ID);
     $zones = SilvercartZone::get()->leftJoin($leftJoinTable, $leftJoinOn)->where($where);
     if ($zones->exists()) {
         $zonesMap = $zones->map('ID', 'Title');
         $zonesField = new DropdownField('SilvercartZoneID', _t('SilvercartShippingFee.ZONE_WITH_DESCRIPTION', 'zone (only carrier\'s zones available)'), $zonesMap->toArray());
         $fieldGroup->push($zonesField);
     }
     $fieldGroup->breakAndPush($fields->dataFieldByName('freeOfShippingCostsDisabled'));
     $fieldGroup->breakAndPush($fields->dataFieldByName('freeOfShippingCostsFrom'));
     $fields->dataFieldByName('DeliveryTimeMin')->setRightTitle($this->fieldLabel('DeliveryTimeMinDesc'));
     $fields->dataFieldByName('DeliveryTimeMax')->setRightTitle($this->fieldLabel('DeliveryTimeMaxDesc'));
     $fields->dataFieldByName('DeliveryTimeText')->setRightTitle($this->fieldLabel('DeliveryTimeTextDesc'));
     $parentDeliveryTime = '';
     if ($this->SilvercartShippingMethod()->exists()) {
         $parentDeliveryTime = '<br/>(' . SilvercartShippingMethod::get_delivery_time($this->SilvercartShippingMethod(), true) . ')';
     }
     $fieldGroup->pushAndBreak(new LiteralField('DeliveryTimeHint', '<strong>' . $this->fieldLabel('DeliveryTimeHint') . $parentDeliveryTime . '</strong>'));
     $fieldGroup->push($fields->dataFieldByName('DeliveryTimeMin'));
     $fieldGroup->pushAndBreak($fields->dataFieldByName('DeliveryTimeMax'));
     $fieldGroup->pushAndBreak($fields->dataFieldByName('DeliveryTimeText'));
     $fields->addFieldToTab('Root.Main', $fieldGroup);
     return $fields;
 }
 /**
  * Returns the SilvercartTax object with the highest tax value for the
  * given taxes.
  *
  * @param array $taxes The tax rates array (associative)
  *
  * @return SilvercartTax
  *
  * @author Sebastian Diel <*****@*****.**>,
  *         Sascha Koehler <*****@*****.**>
  * @since 16.06.2014
  */
 public function getMostValuableTaxRate($taxes = null)
 {
     if (is_null($taxes)) {
         $taxes = $this->getTaxRatesWithoutFeesAndCharges('SilvercartVoucher');
     }
     $highestTaxValue = 0;
     $mostValuableTaxRate = null;
     $originalMostValuableTaxRate = null;
     foreach ($taxes as $tax) {
         if ($tax->AmountRaw >= $highestTaxValue) {
             $highestTaxValue = $tax->AmountRaw;
             $mostValuableTaxRate = $tax->Rate;
             $originalMostValuableTaxRate = $tax->OriginalRate;
         }
     }
     if (!is_null($originalMostValuableTaxRate)) {
         $silvercartTax = SilvercartTax::get()->filter('Rate', $originalMostValuableTaxRate)->first();
         if ($silvercartTax) {
             if ($originalMostValuableTaxRate != $mostValuableTaxRate) {
                 $silvercartTax->Rate = $mostValuableTaxRate;
                 $silvercartTax->setI18nTitle($mostValuableTaxRate . '%');
             }
             return $silvercartTax;
         }
     }
     return false;
 }
 /**
  * Returns handling costs for this payment method
  *
  * @return Money a money object
  */
 public function getHandlingCost()
 {
     $controller = Controller::curr();
     $member = SilvercartCustomer::currentRegisteredCustomer();
     $handlingCostToUse = false;
     if (method_exists($controller, 'getAddress')) {
         // 1) Use shipping address from checkout
         $shippingAddress = $controller->getAddress('Shipping');
     } else {
         if ($member && $member->ShippingAddressID > 0) {
             // 2) Use customer's default shipping address
             $shippingAddress = $member->ShippingAddress();
         } else {
             // 3) Generate shipping address with shop's default country
             $currentShopLocale = i18n::get_lang_from_locale(i18n::get_locale());
             $shippingAddress = new SilvercartAddress();
             $shippingAddress->SilvercartCountry = SilvercartCountry::get()->filter('ISO2', strtoupper($currentShopLocale))->first();
         }
     }
     if (!$shippingAddress) {
         return false;
     }
     $zonesDefined = false;
     foreach ($this->SilvercartHandlingCosts() as $handlingCost) {
         $zone = $handlingCost->SilvercartZone();
         if ($zone->SilvercartCountries()->find('ISO3', $shippingAddress->SilvercartCountry()->ISO3)) {
             $handlingCostToUse = $handlingCost;
             $zonesDefined = true;
             break;
         }
     }
     // Fallback if SilvercartHandlingCosts are available but no zone is defined
     if (!$zonesDefined) {
         if ($this->SilvercartHandlingCosts()->Count() > 0) {
             $handlingCostToUse = $this->SilvercartHandlingCosts()->First();
         } else {
             $silvercartTax = SilvercartTax::get()->filter('isDefault', 1)->first();
             $handlingCostToUse = new SilvercartHandlingCost();
             $handlingCostToUse->SilvercartPaymentMethod = $this;
             $handlingCostToUse->SilvercartTax = $silvercartTax;
             $handlingCostToUse->SilvercartTaxID = $silvercartTax->ID;
             $handlingCostToUse->amount = new Money();
             $handlingCostToUse->amount->setAmount(0);
             $handlingCostToUse->amount->setCurrency(SilvercartConfig::DefaultCurrency());
         }
     }
     return $handlingCostToUse;
 }