public function shippingAction()
 {
     $this->checkIsAllowed();
     //Download Article - no need for Shipping
     if (!$this->cart->hasPhysicalItems()) {
         $this->_redirect($this->view->url(array("action" => "payment"), "coreshop_checkout"));
     }
     $this->view->provider = Plugin::getShippingProviders($this->cart);
     if ($this->getRequest()->isPost()) {
         $shippingProvider = reset($this->getParam("shipping_provider", array()));
         foreach ($this->view->provider as $provider) {
             if ($provider->getIdentifier() == $shippingProvider) {
                 $shippingProvider = $provider;
                 break;
             }
         }
         if (!$provider instanceof Shipping) {
             $this->view->error = "oh shit, not found";
         } else {
             $this->session->order['shippingProvider'] = $provider;
             $this->_redirect($this->view->url(array("action" => "payment"), "coreshop_checkout"));
         }
     }
     $this->view->headTitle($this->view->translate("Shipping"));
 }
 /**
  * calculates shipping costs for the cart
  *
  * @return int
  */
 public function getShipping()
 {
     $session = Tool::getSession();
     //check for existing shipping
     if (array_key_exists("shippingProvider", $session->order) && $session->order['deliveryProvider'] instanceof Shipping) {
         return $session->order['shippingProvider']->getShipping($this);
     }
     //get all provider and choose cheapest
     $providers = Plugin::getShippingProviders($this);
     $cheapestProvider = null;
     foreach ($providers as $p) {
         if ($cheapestProvider === null) {
             $cheapestProvider = $p;
         } else {
             if ($cheapestProvider->getShipping($this) > $p->getShipping($this)) {
                 $cheapestProvider = $p;
             }
         }
     }
     if ($cheapestProvider instanceof Shipping) {
         return $cheapestProvider->getShipping($this);
     }
     return 0;
 }