private static function checkDeliveryDate($order, $now = null, $day = 0)
 {
     if ($now === null) {
         if (empty($order->order_delivery_date)) {
             return false;
         }
         $value = self::orderDateValue2Time($order->order_delivery_date);
     } else {
         $value = $now + $day * 24 * 60 * 60;
         // Whoops, watch out for years with leap seconds!
     }
     if (class_exists('plgHikashopshippingBFManual')) {
         $localUsableRates = plgHikashopshippingBFManual::getLocalUsableRates();
         if (!empty($localUsableRates)) {
             $unusableRates = plgHikashopshippingBFManual::unusableDeliveryRates(self::getFormattedDate('Ymd', $value), $localUsableRates);
             if (!empty($unusableRates)) {
                 if (count($localUsableRates) == count($unusableRates)) {
                     return false;
                 }
                 if (!empty($order->shipping)) {
                     foreach ($order->shipping as $shipping) {
                         if (in_array($shipping->shipping_id, $unusableRates)) {
                             return false;
                         }
                     }
                 }
             }
         }
     }
     switch (self::getFormattedDate('N', $value)) {
         case '1':
             $allowedDate = self::$_params->get('monday');
             break;
         case '2':
             $allowedDate = self::$_params->get('tuesday');
             break;
         case '3':
             $allowedDate = self::$_params->get('wednesday');
             break;
         case '4':
             $allowedDate = self::$_params->get('thursday');
             break;
         case '5':
             $allowedDate = self::$_params->get('friday');
             break;
         case '6':
             $allowedDate = self::$_params->get('saturday');
             break;
         case '7':
             $allowedDate = self::$_params->get('sunday');
             break;
         default:
             return false;
     }
     if (self::blockedDeliveryDate($value)) {
         return false;
     }
     if ($allowedDate) {
         self::$_deliveryNmlDates += 1;
     } else {
         if (!self::extraDeliveryDate($value)) {
             return false;
         }
     }
     return $value;
 }