<?php
class Shipment_OrderMbrController extends Ec_Controller_Action {
  public function preDispatch() {
    // Intentionally left blank
  }

  /**
   * 订单数据导入
   * 
   * 使用IFRAME实现方式，生成的SCRIPT代码用于响应父窗口（假相AJAX）
   */
  public function importAction() {
    set_time_limit(0); // 不限执行时间

    if (!$this->getRequest()->isPost()) {
      header('content-type: text/html; charset=utf-8');
      exit('非法请求：请求方式不是POST');
    }

    $fileInfo = $_FILES['order_file'];
    $error    = '';
    $table    = '';
    $sbCode   = trim($this->getRequest()->getParam('code', ''));

    if (0 !== $fileInfo['error']) {
      $error = '上传订单数据文件失败';

      switch ($fileInfo['error']) {
        case UPLOAD_ERR_INI_SIZE:
          $error .= '：文件大小超过系统配置值' . ini_get('upload_max_filesize');
          break;
        case UPLOAD_ERR_FORM_SIZE:
          $error .= '：文件大小超过表单指定值（MAX_FILE_SIZE）';
          break;
        case UPLOAD_ERR_PARTIAL:
          $error .= '：文件上传不完整';
          break;
        case UPLOAD_ERR_NO_FILE:
          $error .= '：没有文件上传';
          break;
        case UPLOAD_ERR_NO_TMP_DIR:
          $error .= '：找不到临时目录';
          break;
        case UPLOAD_ERR_CANT_WRITE:
          $error .= '：文件写入失败';
          break;
        default:
          break;
      }
    }
    else {
      $ext = strtolower(pathinfo($fileInfo['name'], PATHINFO_EXTENSION));
      $tmp = Service_OrderInOut::getCacheDir() . md5('ORDER-IMPORT-FILE-' . microtime(TRUE)) . '.' . $ext;

      if (!move_uploaded_file($fileInfo['tmp_name'], $tmp)) {
        $error = '移动上传订单数据文件时发生异常';
      }
      else {
        $response = Service_OrderInOut::buildCache($tmp, Service_OrderInOut::TYPE_SHIPMENT, $sbCode,'orderMbr');

        if (0 === $response['status']) {
          $error = $response['message'];
        } else {
            if( isset( $response['platformError'] ) ) {
                $error = $response['platformError'];
            } else {
                $cache = $response['message'];
            }

        }
      }
    }

    if ('' === $error) { // 没有其他异常发生，说明缓存文件是存在的
      $data  = include Service_OrderInOut::getCacheDir() . $cache; // 加载缓存文件数据

      foreach ($data['upload'] as $i => $item) {
        $table .= '<tr class="' . ((0 == $i % 2) ? 'table-module-b1' : 'table-module-b2') . '">';
        $table .= '<td class="ec-center">' . ($i + 1) . '</td>';
        $table .= '<td class="ec-center">' . $item['order_code'] . '</td>';
        $table .= '<td class="ec-center">' . $item['car_number'] . '</td>';
        $table .= '<td class="ec-center">' . $item['bag_number'] . '</td>';
        $table .= '<td class="ec-center">' . $item['tracking_number'] . '</td>';
        $table .= '<td class="ec-center">' . $item['sub_tracking_number'] . '</td>';
        $table .= '<td class="ec-center">' . $item['weight'] . '</td>';
        $table .= '<td class="ec-center">' . $item['so_fee_weight'] . '</td>';
        $table .= '<td class="' . ($item['valid'] ? 'valid' : 'invalid') . '">' . $item['message'] . '</td>';
        $table .= '</tr>';
      }
    }

    if (isset($data['valid']) && !$data['valid']) { // 有不合法的数据存在，删除缓存文件
      unlink(Service_OrderInOut::getCacheDir() . $cache);
    }

    if (isset($data['valid']) && $data['valid']) {
      echo <<<SCRIPT
<script type="text/javascript">
var _pw_             = window.parent;
var _pw_form_        = _pw_.document.getElementById('search-module');
var _pw_table_       = _pw_.document.getElementById('mount-order-list-data');
_pw_form_.innerHTML  = '<form id="mountOrderDataForm" method="post" action="/shipment/order-mbr/mount" enctype="multipart/form-data" target="iframHidden">' +
                      '<p>订单数据已完成验证，点击【加挂订单】按钮执行加挂动作</p>' +
                      '<input type="hidden" id="orderCacheFile" name="cache" value="{$cache}" />' +
                      '<p style="margin-top:10px;"><input type="button" class="baseBtn" id="mountOrderDataButton" value="加挂订单" onclick="javascript:mountOrderData();" /></p>' +
                      '</form>';
_pw_table_.innerHTML = '{$table}';
</script>
SCRIPT;
    }
    elseif ('' === $error) {
      echo <<<SCRIPT
<script type="text/javascript">
var _pw_             = window.parent;
var _pw_form_        = _pw_.document.getElementById('search-module');
var _pw_table_       = _pw_.document.getElementById('mount-order-list-data');
_pw_form_.innerHTML  = '<form id="importOrderDataForm" method="post" action="/shipment/order-mbr/import/code/{$sbCode}" enctype="multipart/form-data" target="iframHidden">' +
                       '<input type="file" id="orderFile" name="order_file" value="" />' +
                       '<input type="button" id="importOrderDataButton" class="baseBtn" value="订单数据导入" onclick="javascript:importOrderData();" />' +
                       '&nbsp;&nbsp;【确认错误原因，整理后请重新上传导入订单数据】' +
                       '</form>';
_pw_table_.innerHTML = '{$table}';
</script>
SCRIPT;
    }
    else {
      echo <<<SCRIPT
<script type="text/javascript">
var _pw_             = window.parent;
var _pw_form_        = _pw_.document.getElementById('search-module');
var _pw_table_       = _pw_.document.getElementById('table-module-init');
_pw_form_.innerHTML  = '<form id="importOrderDataForm" method="post" action="/shipment/order-mbr/import/code/{$sbCode}" enctype="multipart/form-data" target="iframHidden">' +
                       '<input type="file" id="orderFile" name="order_file" value="" />' +
                       '<input type="button" id="importOrderDataButton" class="baseBtn" value="订单数据导入" onclick="javascript:importOrderData();" />' +
                       '</form>';
_pw_table_.innerHTML = '<span style="color:#b22222;">{$error}</span>&nbsp;&nbsp;【确认错误原因，整理后请重新上传导入订单数据】';
</script>
SCRIPT;
    }

    unset($data); // 释放数组
  }

  /**
   * 完成加挂动作
   */
  public function mountAction() {
    set_time_limit(0); // 不限执行时间

    if (!$this->getRequest()->isPost()) {
      header('content-type: text/html; charset=utf-8');
      exit('非法请求：请求方式不是POST');
    }

    $cache = trim($this->getRequest()->getPost('cache', ''));
    $error = '';

    if (!Service_OrderInOut::isCache($cache)) { // 缓存文件名判定
      $error = '无效的缓存文件名';
    }
    else {
      $response = Service_OrderInOut::mbrProcess($cache);

      if (TRUE !== $response) { // 收货、装袋、加挂中间环节有异常
        $error = $response;
      }
    }

    if ('' === $error) { // 加挂处理完成
      echo <<<SCRIPT
<script type="text/javascript">
var _pw_             = window.parent;
var _pw_form_        = _pw_.document.getElementById('search-module');
var _pw_table_       = _pw_.document.getElementById('table-module-init');
_pw_form_.innerHTML  = '所上传订单数据已完成加挂';
_pw_table_.innerHTML = '<span style="color:#228b22;">所上传订单数据已完成加挂</span>';
_pw_.getShipBatchDetailList();
</script>
SCRIPT;
    }
    else { // 有异常发生
      echo <<<SCRIPT
<script type="text/javascript">
var _pw_             = window.parent;
var _pw_form_        = _pw_.document.getElementById('search-module');
var _pw_table_       = _pw_.document.getElementById('table-module-init');
_pw_form_.innerHTML  = '<p>所上传订单数据加挂时发生异常：<span style="color:#b22222;">{$error}</span></p>';
_pw_form_.innerHTML += '<p style="margin-top:10px;"><input type="button" class="baseBtn" value="重新导入订单数据" onclick="javascript:resetImportOrderDataDialogContent();" /></p>';
_pw_table_.innerHTML = '所上传订单数据加挂时发生异常：<span style="color:#b22222;">{$error}</span>';
</script>
SCRIPT;
    }
  }
}
