Source of file FlatFeeShippingRate.php
Size: 10,055 Bytes - Last Modified: 2021-12-23T10:48:05+00:00
/var/www/docs.ssmods.com/process/src/code/FlatFeeShippingRate.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 | <?php /** * Tax rates that can be set in {@link SiteConfig}. Several flat rates can be set * for any supported shipping country. * * @author Frank Mullenger <frankmullenger@gmail.com> * @copyright Copyright (c) 2011, Frank Mullenger * @package swipestripe * @subpackage shipping */ class FlatFeeShippingRate extends DataObject { /** * Fields for this tax rate * * @var Array */ private static $db = array( 'Title' => 'Varchar', 'Description' => 'Varchar', 'Price' => 'Decimal(19,4)' ); /** * Tax rates are associated with SiteConfigs. * * TODO The CTF in SiteConfig does not save the SiteConfig ID correctly so this is moot * * @var unknown_type */ private static $has_one = array( 'ShopConfig' => 'ShopConfig', 'Country' => 'Country_Shipping' ); private static $summary_fields = array( 'Title' => 'Title', 'Description' => 'Description', 'SummaryOfPrice' => 'Amount', 'Country.Title' => 'Country' ); public function providePermissions() { return array( 'EDIT_FLATFEESHIPPING' => 'Edit Flat Fee Shipping', ); } public function canEdit($member = null) { return Permission::check('EDIT_FLATFEESHIPPING'); } public function canView($member = null) { return true; } public function canDelete($member = null) { return Permission::check('EDIT_FLATFEESHIPPING'); } public function canCreate($member = null) { return Permission::check('EDIT_FLATFEESHIPPING'); } /** * Field for editing a {@link FlatFeeShippingRate}. * * @return FieldSet */ public function getCMSFields() { return new FieldList( $rootTab = new TabSet('Root', $tabMain = new Tab('ShippingRate', TextField::create('Title', _t('FlatFeeShippingRate.TITLE', 'Title')), TextField::create('Description', _t('FlatFeeShippingRate.DESCRIPTION', 'Description')) ->setRightTitle('Label used in checkout form.'), DropdownField::create('CountryID', _t('FlatFeeShippingRate.COUNTRY', 'Country'), Country_Shipping::get()->map()->toArray()), PriceField::create('Price') ) ) ); } /** * Label for using on {@link FlatFeeShippingModifierField}s. * * @see FlatFeeShippingModifierField * @return String */ public function Label() { return $this->Description . ' - ' . $this->Price()->Nice(); } /** * Summary of the current tax rate * * @return String */ public function SummaryOfPrice() { return $this->Amount()->Nice(); } public function Amount() { // TODO: Multi currency $shopConfig = ShopConfig::current_shop_config(); $amount = new Price(); $amount->setAmount($this->Price); $amount->setCurrency($shopConfig->BaseCurrency); $amount->setSymbol($shopConfig->BaseCurrencySymbol); $this->extend('updateAmount', $amount); return $amount; } /** * Display price, can decorate for multiple currency etc. * * @return Price */ public function Price() { $amount = $this->Amount(); $this->extend('updatePrice', $amount); return $amount; } } /** * So that {@link FlatFeeShippingRate}s can be created in {@link SiteConfig}. * * @author Frank Mullenger <frankmullenger@gmail.com> * @copyright Copyright (c) 2011, Frank Mullenger * @package swipestripe * @subpackage shipping */ class FlatFeeShippingRate_Extension extends DataExtension { /** * Attach {@link FlatFeeShippingRate}s to {@link SiteConfig}. * * @see DataObjectDecorator::extraStatics() */ private static $has_many = array( 'FlatFeeShippingRates' => 'FlatFeeShippingRate' ); } class FlatFeeShippingRate_Admin extends ShopAdmin { private static $tree_class = 'ShopConfig'; private static $allowed_actions = array( 'FlatFeeShippingSettings', 'FlatFeeShippingSettingsForm', 'saveFlatFeeShippingSettings' ); private static $url_rule = 'ShopConfig/FlatFeeShipping'; protected static $url_priority = 110; private static $menu_title = 'Shop Flat Fee Shipping Rates'; private static $url_handlers = array( 'ShopConfig/FlatFeeShipping/FlatFeeShippingSettingsForm' => 'FlatFeeShippingSettingsForm', 'ShopConfig/FlatFeeShipping' => 'FlatFeeShippingSettings' ); public function init() { parent::init(); $this->modelClass = 'ShopConfig'; } public function Breadcrumbs($unlinked = false) { $request = $this->getRequest(); $items = parent::Breadcrumbs($unlinked); if ($items->count() > 1) { $items->remove($items->pop()); } $items->push(new ArrayData(array( 'Title' => 'Flat Fee Shipping', 'Link' => $this->Link(Controller::join_links($this->sanitiseClassName($this->modelClass), 'FlatFeeShipping')) ))); return $items; } public function SettingsForm($request = null) { return $this->FlatFeeShippingSettingsForm(); } public function FlatFeeShippingSettings($request) { if ($request->isAjax()) { $controller = $this; $responseNegotiator = new PjaxResponseNegotiator( array( 'CurrentForm' => function () use (&$controller) { return $controller->FlatFeeShippingSettingsForm()->forTemplate(); }, 'Content' => function () use (&$controller) { return $controller->renderWith('ShopAdminSettings_Content'); }, 'Breadcrumbs' => function () use (&$controller) { return $controller->renderWith('CMSBreadcrumbs'); }, 'default' => function () use (&$controller) { return $controller->renderWith($controller->getViewer('show')); } ), $this->response ); return $responseNegotiator->respond($this->getRequest()); } return $this->renderWith('ShopAdminSettings'); } public function FlatFeeShippingSettingsForm() { $shopConfig = ShopConfig::get()->First(); $fields = new FieldList( $rootTab = new TabSet('Root', $tabMain = new Tab('Shipping', GridField::create( 'FlatFeeShippingRates', 'FlatFeeShippingRates', $shopConfig->FlatFeeShippingRates(), GridFieldConfig_HasManyRelationEditor::create() ) ) ) ); $actions = new FieldList(); $actions->push(FormAction::create('saveFlatFeeShippingSettings', _t('GridFieldDetailForm.Save', 'Save')) ->setUseButtonTag(true) ->addExtraClass('ss-ui-action-constructive') ->setAttribute('data-icon', 'add')); $form = new Form( $this, 'EditForm', $fields, $actions ); $form->setTemplate('ShopAdminSettings_EditForm'); $form->setAttribute('data-pjax-fragment', 'CurrentForm'); $form->addExtraClass('cms-content cms-edit-form center ss-tabset'); if ($form->Fields()->hasTabset()) { $form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet'); } $form->setFormAction(Controller::join_links($this->Link($this->sanitiseClassName($this->modelClass)), 'FlatFeeShipping/FlatFeeShippingSettingsForm')); $form->loadDataFrom($shopConfig); return $form; } public function saveFlatFeeShippingSettings($data, $form) { //Hack for LeftAndMain::getRecord() self::$tree_class = 'ShopConfig'; $config = ShopConfig::get()->First(); $form->saveInto($config); $config->write(); $form->sessionMessage('Saved Flat Fee Shipping Settings', 'good'); $controller = $this; $responseNegotiator = new PjaxResponseNegotiator( array( 'CurrentForm' => function () use (&$controller) { //return $controller->renderWith('ShopAdminSettings_Content'); return $controller->FlatFeeShippingSettingsForm()->forTemplate(); }, 'Content' => function () use (&$controller) { //return $controller->renderWith($controller->getTemplatesWithSuffix('_Content')); }, 'Breadcrumbs' => function () use (&$controller) { return $controller->renderWith('CMSBreadcrumbs'); }, 'default' => function () use (&$controller) { return $controller->renderWith($controller->getViewer('show')); } ), $this->response ); return $responseNegotiator->respond($this->getRequest()); } public function getSnippet() { if (!$member = Member::currentUser()) { return false; } if (!Permission::check('CMS_ACCESS_' . get_class($this), 'any', $member)) { return false; } return $this->customise(array( 'Title' => 'Flat Fee Shipping Management', 'Help' => 'Create flat fee shipping rates', 'Link' => Controller::join_links($this->Link('ShopConfig'), 'FlatFeeShipping'), 'LinkTitle' => 'Edit flat fee shipping rates' ))->renderWith('ShopAdmin_Snippet'); } } |