<?php
class Order_ExportAupController extends Ec_Controller_Action {
  public function preDispatch() {
    header("Content-type:application/vnd.ms-excel;charset=utf-8");
    echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
    $this->exportFilename = '澳洲专线预报數據檔案-' . date('YmdHis') . '.xls';
    $this->serviceClass   = new Service_Orders();
  }

  public function printAction() {
    set_time_limit(0);

    $exportType = (int) trim($this->getRequest()->getParam('type', 0));

    if (1 === $exportType) {
      $this->printSelected();
    }
    else {
      $this->printAll();
    }
  }

  private function printSelected() {
    $selectedOrder = $this->getRequest()->getPost('orderId', array());
    $total         = 0;
    $content       = '';

    if (empty($selectedOrder)) {
      exit('No Data ...');
    }

    $content .= '<tr>';
    $content .= '<td>CountryCode<br />From</td>'; // 出发港地区代码
    $content .= '<td>Postcode<br />From</td>'; // 出发港邮政编码
    $content .= '<td>City<br />From</td>'; // 发货城市
    $content .= '<td>Address1<br />From</td>'; // 发货人地址
    $content .= '<td>Address2<br />From</td>'; // 发货人地址2
    $content .= '<td>Address3<br />From</td>'; // 发货人地址3
    $content .= '<td>FirstName<br />From</td>'; // 发货人名
    $content .= '<td>LastName<br />From</td>'; // 发货人姓
    $content .= '<td>Company<br />From</td>'; // 出发港国家
    $content .= '<td>EmailFrom</td>'; // 发货人邮件地址
    $content .= '<td>PhoneFrom</td>'; // 发货人联系电话

    $content .= '<td>Country<br />CodeTo</td>'; // 目的港国家代码
    $content .= '<td>Postcode<br />To</td>'; // 目的港邮政编码
    $content .= '<td>CityTo</td>'; //目的港城市
    $content .= '<td>Address 1 <br />To</td>'; // 收件人地址一
    $content .= '<td>Address 2 <br />To</td>'; // 收件人地址二
    $content .= '<td>Address 3 <br />To</td>'; // 收件人地址三
    $content .= '<td>FirstName<br />To</td>'; //收货人名
    $content .= '<td>LastName<br />To</td>'; //收货人姓
    $content .= '<td>CompanyTo</td>'; //收货公司名称
    $content .= '<td>Email</td>'; // 收件人电邮
    $content .= '<td>Phone</td>'; // 收件人电话
    $content .= '<td>CarrierId</td>';//承运商
    $content .= '<td>ServiceId</td>';//服务商
    $content .= '<td>Length<br />in cm</td>'; // 长
    $content .= '<td>Width<br />in cm</td>'; // 宽
    $content .= '<td>Height<br />in cm</td>'; // 高
    $content .= '<td>Weight<br />in kg</td>'; //计费重
    $content .= '<td>product</td>';//产品名称
    $content .= '<td>Quantity</td>';//数量
    $content .= '<td>Item <br />Price</td>';//单价
    $content .= '<td>Country of<br />Manufacture</td>';//生产国
    $content .= '<td>Reason_of_export</td>';//出口原因
    $content .= '<td>Additional_comments</td>';//订单备注
    $content .= '<td>Product<br />Description</td>';//产品描述
    $content .= '<td>Tax <br />status</td>';//纳税人身份
    $content .= '<td>Customer<br />reference</td>'; //订单号

    $content .= '</tr>';

    foreach ($selectedOrder as $selected) {
      if (!is_numeric($selected)) {
        continue ;
      }

      $selected = (int) $selected;

      if ($selected < 1) {
        continue ;
      }

      $order = Service_Orders::getByField($selected, 'order_id');

      if (empty($order) || 'AUP' !== $order['sm_code']) {
        continue ;
      }

      ++$total;
      $address   = Service_OrderAddressBook::getByField($order['order_code'], 'order_code');
      $shipOrder = Service_ShipOrder::getByField($order['order_code'], 'order_code');
      $shipOrderDetail = Service_ShipOrderDetail::getByField($order['order_code'], 'order_code');
      $country   = Service_Country::getByField((int) $address['oab_country_id'], 'country_id');
      $products  = Service_OrderProduct::getByCondition(array('order_code' => $order['order_code']));
      $totalVal  = 0;
      $skuArray  = array();

      foreach ($products as $item) 
      {
        $product    = Service_Product::getByField((int) $item['product_id'], 'product_id');
        $skuArray[] = $product['product_sku'];
        $totalVal  += $item['op_quantity'] * $item['op_purpose_declared_value'];
      }

      $skuArray = array_unique($skuArray);
      $skuArray = join($skuArray, '/');

        $content .= '<tr>';
        $content .= '<td>&nbsp;</td>'; // 出发港地区代码
        $content .= '<td>&nbsp;</td>'; // 出发港邮政编码
        $content .= '<td>&nbsp;</td>'; // 发货城市
        $content .= '<td>&nbsp;</td>'; // 发货人地址
        $content .= '<td>&nbsp;</td>'; // 发货人地址2
        $content .= '<td>&nbsp;</td>'; // 发货人地址3
        $content .= '<td>&nbsp;</td>'; // 发货人名
        $content .= '<td>&nbsp;</td>'; // 发货人姓
        $content .= '<td>&nbsp;</td>'; // 出发港国家
        $content .= '<td>&nbsp;</td>'; // 发货人邮件地址
        $content .= '<td>&nbsp;</td>'; // 发货人联系电话
        $osa = Service_OrderAddressBook::getByCondition(array('order_code'=>$order['order_code'],'oab_type'=>'0'),"*");
        $orderSendAddress = $osa[0];
        $country = Service_Country::getByField($orderSendAddress['oab_country_id'],"country_id","*");
        $content .= '<td>' . $country['country_code'] . '</td>'; // 订单国家二字码
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' .$address['oab_postcode'] . '</td>'; // 收件人邮编
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_city'] . '</td>'; // 收件人城市
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address1'] . '</td>'; // 收件人地址一
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address2'] . '</td>'; // 收件人地址二
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address3'] . '</td>'; // 收件人地址三
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_firstname'] . '</td>'; // 收件人名
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_lastname'] . '</td>'; // 收件人姓
        $content .= '<td>' .$address['oab_company'] . '</td>'; // 收件人公司
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . (empty($address['oab_email']) ? '&nbsp;' : $address['oab_email']) . '</td>'; // 收件人邮件
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_cell_phone'] . '</td>'; // 收件人电话
        $content .= '<td>Australia Post</td>'; // 承运商
        $content .= '<td style="vnd.ms-excel.numberformat:@;">1876</td>'; // 服务商
        $content .= '<td>' .(empty($shipOrderDetail['sod_length']) ? '&nbsp;' : $shipOrderDetail['sod_length']) . '</td>'; // 长
        $content .= '<td>' . $shipOrderDetail['sod_width'] . '</td>'; // 宽
        $content .= '<td>' . $shipOrderDetail['sod_height'] . '</td>'; // 高
        $content .= '<td>' . $shipOrder['so_fee_weight'] . '</td>'; // 计费重
        $content .= '<td>' . $item['product_title_en'] . '</td>'; // 产品名称
        $content .= '<td>' . $item['op_quantity'] . '</td>'; // 产品数量
        $content .= '<td>' . $item['op_purpose_declared_value'] . '</td>'; // 目的海关申报单价
        $content .= '<td>CN</td>'; // 生产国 CN 固定为中国
        $content .= '<td>Purchase</td>'; // 出口原因 Purchase 固定为 ：Purchase
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . (empty($order['remark']) ? '&nbsp;' : $order['remark']) . '</td>'; // 订单备注
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $item['product_title_en'] . '</td>'; // 描述
        $content .= '<td>&nbsp;</td>'; // 纳税人身份
        $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';//订单号
      $content .= '</tr>';
    }

    if ($total < 1) {
      exit('No Data ...');
    }

    header('pragma: public');
    header('content-type: application/x-msexecl; name=' . $this->exportFilename);
    header('content-disposition: inline; filename=' . $this->exportFilename);
    echo '<table border="1">', $content, '</table>';
  }

  private function printAll() {
    set_time_limit(0);
    $params    = $this->_request->getParams();
    $condition = $this->serviceClass->getNewMatchFields($params);

      if( is_array( $condition['oab_country_id'] ) && count( $condition['oab_country_id'] ) == 1 && $condition['oab_country_id'][0] === '' ) {
          unset($condition['oab_country_id']);
      }
    if ('orderCode' == $params['searchType']) {
      $condition['order_code'] = $params['searchCode'];
    } else {
      $condition['reference_no'] = $params['searchCode'];
    }

      $time = Common_Common::getStartAndEndTime($params['dateFor'],$params['dateTo']);
      $conditionTemp['dateFor'] = $time[0];
      $conditionTemp['dateTo'] = $time[1];
      unset($condition['dateFor']);
      unset($condition['dateTo']);
    $searchDateType = isset($params['searchDateType']) ? $params['searchDateType'] : '';

      switch ($searchDateType) {
          case 'createDate':
              $condition['dateFor'] = $conditionTemp['dateFor'];
              $condition['dateTo']  = $conditionTemp['dateTo'];
              break;
          case 'printTime':
              $condition['printDateFor'] = $conditionTemp['dateFor'];
              $condition['printDateTo']  = $conditionTemp['dateTo'];
              break;
          case 'packTime':
              $condition['packDateFor'] = $conditionTemp['dateFor'];
              $condition['packDateTo']  = $conditionTemp['dateTo'];
              break;
          case 'shipTime':
              $condition['shipDateFor'] = $conditionTemp['dateFor'];
              $condition['shipDateTo']  = $conditionTemp['dateTo'];
              break;
          default:
              break;
      }
    $condition['oab_type']         = '0';
    $condition['sm_code']          = 'AUP';

    if ($condition['tracking_number']) {
      $shipOrder = Service_ShipOrder::getByField($condition['tracking_number'], 'tracking_number');

      if (!empty($shipOrder)) {
        $condition['order_id'] = $shipOrder['order_id'];
      }
      else {
        $condition['order_id'] = 'none';
      }
    }

    $selectedOrder = $this->serviceClass->getOrderInnerJoinProductByCondition($condition);
    $total         = 0;
    $content       = '';

    $content .= '<tr>';
    $content .= '<td>CountryCode<br />From</td>'; // 出发港地区代码
    $content .= '<td>Postcode<br />From</td>'; // 出发港邮政编码
    $content .= '<td>City<br />From</td>'; // 发货城市
    $content .= '<td>Address1<br />From</td>'; // 发货人地址
    $content .= '<td>Address2<br />From</td>'; // 发货人地址2
    $content .= '<td>Address3<br />From</td>'; // 发货人地址3
    $content .= '<td>FirstName<br />From</td>'; // 发货人名
    $content .= '<td>LastName<br />From</td>'; // 发货人姓
    $content .= '<td>Company<br />From</td>'; // 出发港国家
    $content .= '<td>EmailFrom</td>'; // 发货人邮件地址
    $content .= '<td>PhoneFrom</td>'; // 发货人联系电话
    $content .= '<td>Country<br />CodeTo</td>'; // 目的港国家代码
    $content .= '<td>Postcode<br />To</td>'; // 目的港邮政编码
    $content .= '<td>CityTo</td>'; //目的港城市
    $content .= '<td>Address 1 <br />To</td>'; // 收件人地址一
    $content .= '<td>Address 2 <br />To</td>'; // 收件人地址二
    $content .= '<td>Address 3 <br />To</td>'; // 收件人地址三
    $content .= '<td>FirstName<br />To</td>'; //收货人名
    $content .= '<td>LastName<br />To</td>'; //收货人姓
    $content .= '<td>CompanyTo</td>'; //收货公司名称
    $content .= '<td>Email</td>'; // 收件人电邮
    $content .= '<td>Phone</td>'; // 收件人电话
    $content .= '<td>CarrierId</td>';//承运商
    $content .= '<td>ServiceId</td>';//服务商
    $content .= '<td>Length<br />in cm</td>'; // 长
    $content .= '<td>Width<br />in cm</td>'; // 宽
    $content .= '<td>Height<br />in cm</td>'; // 高
    $content .= '<td>Weight<br />in kg</td>'; //计费重
    $content .= '<td>product</td>';//产品名称
    $content .= '<td>Quantity</td>';//数量
    $content .= '<td>Item <br />Price</td>';//单价
    $content .= '<td>Country of<br />Manufacture</td>';//生产国
    $content .= '<td>Reason_of_export</td>';//出口原因
    $content .= '<td>Additional_comments</td>';//订单备注
    $content .= '<td>Product<br />Description</td>';//产品描述
    $content .= '<td>Tax <br />status</td>';//纳税人身份
    $content .= '<td>Customer<br />reference</td>'; //订单号
    $content .= '</tr>';

    foreach ($selectedOrder as $order) {
      if (empty($order) || 'AUP' !== $order['sm_code']) {
        continue ;
      }

      ++$total;
      $address   = Service_OrderAddressBook::getByField($order['order_code'], 'order_code');
      $shipOrder = Service_ShipOrder::getByField($order['order_code'], 'order_code');
      $shipOrderDetail = Service_ShipOrderDetail::getByField($order['order_code'], 'order_code');
      $country   = Service_Country::getByField((int) $address['oab_country_id'], 'country_id');
      $products  = Service_OrderProduct::getByCondition(array('order_code' => $order['order_code']));
      $totalVal  = 0;
      $skuArray  = array();

      foreach ($products as $item) {
        $product    = Service_Product::getByField((int) $item['product_id'], 'product_id');
        $skuArray[] = $product['product_sku'];
        $totalVal  += $item['op_quantity'] * $item['op_purpose_declared_value'];
      }

      $skuArray = array_unique($skuArray);
      $skuArray = join($skuArray, '/');

      $content .= '<tr>';
      $content .= '<td>&nbsp;</td>'; // 出发港地区代码
      $content .= '<td>&nbsp;</td>'; // 出发港邮政编码
      $content .= '<td>&nbsp;</td>'; // 发货城市
      $content .= '<td>&nbsp;</td>'; // 发货人地址
      $content .= '<td>&nbsp;</td>'; // 发货人地址2
      $content .= '<td>&nbsp;</td>'; // 发货人地址3
      $content .= '<td>&nbsp;</td>'; // 发货人名
      $content .= '<td>&nbsp;</td>'; // 发货人姓
      $content .= '<td>&nbsp;</td>'; // 出发港国家
      $content .= '<td>&nbsp;</td>'; // 发货人邮件地址
      $content .= '<td>&nbsp;</td>'; // 发货人联系电话
      $osa = Service_OrderAddressBook::getByCondition(array('order_code'=>$order['order_code'],'oab_type'=>'0'),"*");
      $orderSendAddress = $osa[0];
      $country = Service_Country::getByField($orderSendAddress['oab_country_id'],"country_id","*");
      $content .= '<td>' . $country['country_code'] . '</td>'; // 订单国家二字码
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' .$address['oab_postcode'] . '</td>'; // 收件人邮编
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_city'] . '</td>'; // 收件人城市
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address1'] . '</td>'; // 收件人地址一
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address2'] . '</td>'; // 收件人地址二
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_street_address3'] . '</td>'; // 收件人地址三
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_firstname'] . '</td>'; // 收件人名
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_lastname'] . '</td>'; // 收件人姓
      $content .= '<td>' .$address['oab_company'] . '</td>'; // 收件人公司
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . (empty($address['oab_email']) ? '&nbsp;' : $address['oab_email']) . '</td>'; // 收件人邮件
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $address['oab_cell_phone'] . '</td>'; // 收件人电话
      $content .= '<td>Australia Post</td>'; // 承运商
      $content .= '<td style="vnd.ms-excel.numberformat:@;">1876</td>'; // 服务商
      $content .= '<td>' .(empty($shipOrderDetail['sod_length']) ? '&nbsp;' : $shipOrderDetail['sod_length']) . '</td>'; // 长
      $content .= '<td>' . $shipOrderDetail['sod_width'] . '</td>'; // 宽
      $content .= '<td>' . $shipOrderDetail['sod_height'] . '</td>'; // 高
      $content .= '<td>' . $shipOrder['so_fee_weight'] . '</td>'; // 计费重
      $content .= '<td>' . $item['product_title_en'] . '</td>'; // 产品名称
      $content .= '<td>' . $item['op_quantity'] . '</td>'; // 产品数量
      $content .= '<td>' . $item['op_purpose_declared_value'] . '</td>'; // 目的海关申报单价
      $content .= '<td>CN</td>'; // 生产国 CN 固定为中国
      $content .= '<td>Purchase</td>'; // 出口原因 Purchase 固定为 ：Purchase
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . (empty($order['remark']) ? '&nbsp;' : $order['remark']) . '</td>'; // 订单备注
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $item['product_title_en'] . '</td>'; // 描述
      $content .= '<td>&nbsp;</td>'; // 纳税人身份
      $content .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';//订单号
      $content .= '</tr>';
    }

    if ($total < 1) {
      exit('No Data ...');
    }

    header('pragma: public');
    header('content-type: application/x-msexecl; name=' . $this->exportFilename);
    header('content-disposition: inline; filename=' . $this->exportFilename);
    echo '<table border="1">', $content, '</table>';
  }
}
