public function updateRule(FreeShippingUpdateEvent $event)
 {
     $areaId = $event->getArea();
     $freeShippingArea = FreeShippingQuery::create()->findOneByAreaId($areaId);
     if (null === $freeShippingArea || $freeShippingArea->getAmount() !== $event->getAmount()) {
         $id = $event->getRuleId();
         if (null !== ($freeShipping = FreeShippingQuery::create()->findPk($id))) {
             $freeShipping->setDispatcher($event->getDispatcher());
             $freeShipping->setAreaId($event->getArea())->setAmount($event->getAmount())->save();
             $event->setRule($freeShipping);
         }
     } else {
         $area = AreaQuery::create()->findOneById($areaId);
         throw new \Exception(sprintf("A free shipping rule already exists for the '%s' area", $area->getName()));
     }
 }