/** * Check if we need to create promised delivery date (pdd) for this order * if yes, calculate and save it, then send to customer * @return boolean True if PDD is needed and successfully created */ public function createPromisedDeliveryDate() { $pdd_created = false; //ONLY FOR ORDER WITH A VALID EMAIL ADDRESS AND PRODUCTS if ($this->customer_email_is_valid && $this->items_notcanceled_total > 0) { $order_use_depot_stock = true; $ids = $this->getIDItemsNotCanceled(); foreach ($ids as $item_id) { $i = $this->getItem($item_id); if (!OrderItem::isStockStatusHandleByDepot($i->stock_status)) { $order_use_depot_stock = false; break; } } $config = load_config('open-orders'); $delivery_dates = $this->getPromisedDeliveryDate(); $delivery_dates_total = count($delivery_dates); $pdd_start = null; $pdd_buffer = null; $pdd_exist = false; if ($delivery_dates_total > 0) { //PDD already exist, use delay mode //But only for MTO order $pdd_exist = true; if (!$order_use_depot_stock) { $pdd_start = $config['promised-delivery-date-mto-delay']; $pdd_buffer = $config['promised-delivery-date-mto-buffer']; } } else { //PDD not exist yet, use normal mode if ($order_use_depot_stock) { $pdd_start = $config['promised-delivery-date-dso']; $pdd_buffer = $config['promised-delivery-date-dso-buffer']; } else { $pdd_start = $config['promised-delivery-date-mto']; $pdd_buffer = $config['promised-delivery-date-mto-buffer']; } } if (!is_null($pdd_start) && !is_null($pdd_buffer)) { //Exclude weekend from promised delivery date - start $pdd_start_day = date('N', strtotime("+{$pdd_start} days")); $skip_weekend_day = 0; if ($pdd_start_day == 6) { $skip_weekend_day = 2; } elseif ($pdd_start_day == 7) { $skip_weekend_day = 1; } $pdd_start += $skip_weekend_day; //Exclude weekend from promised delivery date - end $pdd_end = $pdd_start + $pdd_buffer; $pdd_start_string = " +{$pdd_start} days"; $pdd_end_string = " +{$pdd_end} days"; $sda = array(); $sda['order_type'] = $this->order_type; $sda['order_id'] = $this->order_id; $sda['create_time'] = date('Y-m-d H:i:s'); $sda['use_depot_stock'] = $order_use_depot_stock ? '1' : '0'; $sda['pdd_start'] = date('Y-m-d', strtotime($pdd_start_string)); $sda['pdd_end'] = date('Y-m-d', strtotime($pdd_end_string)); tep_db_perform('promised_delivery_date', $sda); if ($pdd_exist) { $this->sendDelayNotification($pdd_start_string, $pdd_end_string); } else { $this->sendPromisedDeliveryDate($pdd_start_string, $pdd_end_string); } $pdd_created = true; } } return $pdd_created; }