/** * 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'); }
/** * 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; }