<?php
/**
 * @todo Export customs information table
 * @author freya shi
 * @version 1.2
 */
class Receiving_ReceivingExportController extends Ec_Controller_Action {
  public function preDispatch() {
    $productUom         = Service_ProductUom::getAll();
    $this->serviceClass = new Service_Receiving();
    $this->productUom   = array();

    foreach ($productUom as $item) {
      $this->productUom[$item['pu_code']] = $item['pu_name'];
     // echo '<pre>',print_r($productUom),'</pre>';exit();
    }
  }

  public function exportSelectedAction() {
    set_time_limit(0);
    ini_set('memory_limit', '1024M');

    $selectedAsn    = $this->getRequest()->getParam('selectedCode', array());
    $exportContent  = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
    $exportContent .= '<table border="1">';
    $exportContent .= '<tr><td colspan="15" style="font-size: 14px;font-weight: bold;text-align: center;">前海湾保税港区跨境电商项目转关入区装箱清单</td></tr>';
    $exportContent .= '<tr>';
    $exportContent .= '<td>序号</td>';
    $exportContent .= '<td>入区单号</td>';
    $exportContent .= '<td>建单时间</td>';
    $exportContent .= '<td>收货完成时间</td>';
    $exportContent .= '<td>订单号</td>';
    $exportContent .= '<td>运单号</td>';
    $exportContent .= '<td>产品SKU</td>';
    $exportContent .= '<td>数量</td>';
    $exportContent .= '<td>单位</td>';
    $exportContent .= '<td>料件号</td>';
    $exportContent .= '<td>海关商品编码</td>';
    $exportContent .= '<td>海关品名</td>';
    $exportContent .= '<td>单价(USD)</td>';
    $exportContent .= '<td>总价(USD)</td>';
    $exportContent .= '<td>重量(KG)</td>';
    $exportContent .= '<td>报关单项号</td>';
    $exportContent .= '<td>客户名称</td>';
    $exportContent .= '</tr>';
    $exportIndex    = 1;
    $filename       = 'ReceivingCustomsInfo-'. date('YmdHis') . '.xls';

    header('Pragma:public');
    header('Content-Type:application/x-msexecl;name="' . $filename . '"');
    header('Content-Disposition:inline;filename=' . $filename);

    foreach ($selectedAsn as $asnCode) {
      $asn = Service_Receiving::getByField($asnCode, 'receiving_code');
      $receivingAttr=Service_ReceivingAttribute::getByField($asnCode,'receiving_code');
      if (empty($asn)) {
        continue ;
      }

      $formIdMap = array();
      $asnSplit  = Service_ReceivingXml::getByCondition(array(
        'receiving_code' => $asnCode,
      ));

      if (!empty($asnSplit)) {
        foreach ($asnSplit as $item) {
          $formIdMap[$item['sub_receiving_code']] = $item['refercence_form_id'];
        }
      }

      if (1 === (int) $asn['receive_model_type']) { 
        // 集货模式
        $asnOrder = Service_ReceivingOrderDetail::getByCondition(array(
          'receiving_code' => $asn['receiving_code'],
        ));

        foreach ($asnOrder as $item) {
          $order = Service_Orders::getByField($item['order_code'], 'order_code');
          $customer = Service_Customer::getByField($order['customer_code'], 'customer_code');
          $orderProduct = Service_OrderProduct::getByCondition(array(
            'order_code' => $order['order_code'],
          ));

          foreach ($orderProduct as $opItem) {
            $product = Service_Product::getByField($opItem['product_id'], 'product_id');

            if (empty($product)) {
                continue ;
            }
            if (1 == (int) $product['product_type']) { 
              // 组合产品需要分拆
              $productCombine = Service_ProductCombineRelation::getByCondition(array(
                'product_id' => $product['product_id'],
              ));

              foreach ($productCombine as $pcItem) {
                $subProduct = Service_Product::getByField($pcItem['pcr_product_id'], 'product_id');

                if (empty($product)) {
                    continue ;
                }
                // 由产品料件号反推获取相关信息
                $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                  'from_id'  => $asn['receiving_code'],
                  'goods_id' => $subProduct['goods_id'],
                ));

                if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                  $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
                }
                else {
                  $formId = '';
                }
                
                $exportContent .= '<tr>';
                $exportContent .= '<td>' . $exportIndex . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['ref_tracking_number'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['product_sku'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$subProduct['pu_code']] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['goods_id'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_goods_name'] . '</td>';
                $exportContent .= '<td>' . $subProduct['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] * $subProduct['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] * $subProduct['product_weight'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
                $exportContent .= '</tr>';
                ++$exportIndex;
              }
            }
            else { 
              // 普通产品
              // 由产品料件号反推获取相关信息
              $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                'from_id'  => $asn['receiving_code'],
                'goods_id' => $product['goods_id'],
              ));

              if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
              }
              else {
                $formId = '';
              }

              $exportContent .= '<tr>';
              $exportContent .= '<td>' . $exportIndex . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['ref_tracking_number'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['product_sku'] . '</td>';
              $exportContent .= '<td>' . $opItem['op_quantity'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$product['pu_code']] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['goods_id'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_goods_name'] . '</td>';
              $exportContent .= '<td>' . $product['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $opItem['op_quantity'] * $product['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $opItem['op_quantity'] * $product['product_weight'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
              $exportContent .= '</tr>';
              ++$exportIndex;
            }
          }
        }
      }
      else {
        // 备货模式
        $asnProduct = Service_ReceivingDetail::getByCondition(array(
          'receiving_code' => $asn['receiving_code'],
        ));

        foreach ($asnProduct as $apItem) {
          $product  = Service_Product::getByField($apItem['product_id'], 'product_id');

          if (empty($product)) {
              continue ;
          }

          $customer = Service_Customer::getByField($product['customer_id'], 'customer_id');

          if (1 == (int) $product['product_type']) { 
            // 组合产品需要分拆
            $productCombine = Service_ProductCombineRelation::getByCondition(array(
              'product_id' => $product['product_id'],
            ));

            foreach ($productCombine as $pcItem) {
              $subProduct = Service_Product::getByField($pcItem['pcr_product_id'], 'product_id');

              if (empty($product)) {
                  continue ;
              }

              // 由产品料件号反推获取相关信息
              $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                'from_id' => $asn['receiving_code'],
                'goods_id' => $subProduct['goods_id'],
              ));

              if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
              }
              else {
                $formId = '';
              }

              $exportContent .= '<tr>';
              $exportContent .= '<td>' . $exportIndex . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' .$asn['receiving_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['product_sku'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$subProduct['pu_code']] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['goods_id'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_goods_name'] . '</td>';
              $exportContent .= '<td>' . $subProduct['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] * $subProduct['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] * $subProduct['product_weight'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
              $exportContent .= '</tr>';
              ++$exportIndex;
            }
          }
          else { 
            // 普通产品
            // 由产品料件号反推获取相关信息
            $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
              'from_id' => $asn['receiving_code'],
              'goods_id' => $product['goods_id'],
            ));

            if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
              $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
            }
            else {
              $formId = '';
            }

            $exportContent .= '<tr>';
            $exportContent .= '<td>' . $exportIndex . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['product_sku'] . '</td>';
            $exportContent .= '<td>' . $apItem['rd_receiving_qty'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$product['pu_code']] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['goods_id'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_code'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_goods_name'] . '</td>';
            $exportContent .= '<td>' . $product['product_declared_value'] . '</td>';
            $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $product['product_declared_value'] . '</td>';
            $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $product['product_weight'] . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
            $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
            $exportContent .= '</tr>';
            ++$exportIndex;
          }
        }
      }

      ob_flush();
      flush();
    }

    $exportContent .= '</table>';

    echo $exportContent;
    exit();
  }

  public function exportAllAction() {
    set_time_limit(0);
    ini_set('memory_limit', '1024M');

    $params = $this->_request->getParams();
    $operationType = isset($params['operationType']) ? $params['operationType'] : '';
    $operationCode = isset($params['operationCode']) ? $params['operationCode'] : '';

    if (!empty($operationCode)) {
      $params[$operationType] = $operationCode;
    }

    $condition = $this->serviceClass->getMatchFields($params);
    $condition['dateFor'] = isset($params['dateFor']) ? $params['dateFor'] : '';
    $condition['dateTo'] = isset($params['dateTo']) ? $params['dateTo'] : '';
    $condition['receiving_status_arr'] = isset($params['receiving_status_arr']) ? trim($params['receiving_status_arr']) : '';

    $asnRows = $this->serviceClass->getByCondition($condition);

    $exportContent  = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
    $exportContent .= '<table border="1">';
    $exportContent .= '<tr><td colspan="15" style="font-size: 14px;font-weight: bold;text-align: center;">前海湾保税港区跨境电商项目转关入区装箱清单</td></tr>';
    $exportContent .= '<tr>';
    $exportContent .= '<td>序号</td>';
    $exportContent .= '<td>入区单号</td>';
    $exportContent .= '<td>建单时间</td>';
    $exportContent .= '<td>收货完成时间</td>';
    $exportContent .= '<td>订单号</td>';
    $exportContent .= '<td>运单号</td>';
    $exportContent .= '<td>产品SKU</td>';
    $exportContent .= '<td>数量</td>';
    $exportContent .= '<td>单位</td>';
    $exportContent .= '<td>料件号</td>';
    $exportContent .= '<td>海关商品编码</td>';
    $exportContent .= '<td>海关品名</td>';
    $exportContent .= '<td>单价(USD)</td>';
    $exportContent .= '<td>总价(USD)</td>';
    $exportContent .= '<td>重量(KG)</td>';
    $exportContent .= '<td>报关单项号</td>';
    $exportContent .= '<td>客户名称</td>';
    $exportContent .= '</tr>';
    $exportIndex    = 1;
    $filename       = 'ReceivingCustomsInfo-'. date('YmdHis') . '.xls';

    header('Pragma:public');
    header('Content-Type:application/x-msexecl;name="' . $filename . '"');
    header('Content-Disposition:inline;filename=' . $filename);

    if (!empty($asnRows)) {
      foreach ($asnRows as $asn) {
        $formIdMap = array();
        $asnSplit  = Service_ReceivingXml::getByCondition(array(
          'receiving_code' => $asn['receiving_code'],
        ));
        $receivingAttr=Service_ReceivingAttribute::getByField($asn['receiving_code'],'receiving_code');
        if (!empty($asnSplit)) {
          foreach ($asnSplit as $item) {
            $formIdMap[$item['sub_receiving_code']] = $item['refercence_form_id'];
          }
        }

        if (1 === (int) $asn['receive_model_type']) {
          // 集货模式
          $asnOrder = Service_ReceivingOrderDetail::getByCondition(array(
            'receiving_code' => $asn['receiving_code'],
          ));

          foreach ($asnOrder as $item) {
            $order = Service_Orders::getByField($item['order_code'], 'order_code');
            $customer = Service_Customer::getByField($order['customer_code'], 'customer_code');
            $orderProduct = Service_OrderProduct::getByCondition(array(
              'order_code' => $order['order_code'],
            ));

            foreach ($orderProduct as $opItem) {
              $product = Service_Product::getByField($opItem['product_id'], 'product_id');

              if (1 == (int) $product['product_type']) { 
                // 组合产品需要分拆
                $productCombine = Service_ProductCombineRelation::getByCondition(array(
                  'product_id' => $product['product_id'],
                ));

                foreach ($productCombine as $pcItem) {
                  $subProduct = Service_Product::getByField($pcItem['pcr_product_id'], 'product_id');

                  // 由产品料件号反推获取相关信息
                  $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                    'from_id'  => $asn['receiving_code'],
                    'goods_id' => $subProduct['goods_id'],
                  ));

                if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                    $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
                }
                else {
                    $formId = '';
                }

                  $exportContent .= '<tr>';
                  $exportContent .= '<td>' . $exportIndex . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['ref_tracking_number'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['product_sku'] . '</td>';
                  $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$subProduct['pu_code']] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['goods_id'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_code'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_goods_name'] . '</td>';
                  $exportContent .= '<td>' . $subProduct['product_declared_value'] . '</td>';
                  $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] * $subProduct['product_declared_value'] . '</td>';
                  $exportContent .= '<td>' . $opItem['op_quantity'] * $pcItem['pcr_quantity'] * $subProduct['product_weight'] . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
                  $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
                  $exportContent .= '</tr>';
                  ++$exportIndex;
                }
              }
              else { 
                // 普通产品
                // 由产品料件号反推获取相关信息
                $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                  'from_id' => $asn['receiving_code'],
                  'goods_id' => $product['goods_id'],
                ));

              if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                    $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
                }
                else {
                    $formId = '';
                }

                $exportContent .= '<tr>';
                $exportContent .= '<td>' . $exportIndex . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['order_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $order['ref_tracking_number'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['product_sku'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$product['pu_code']] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['goods_id'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_goods_name'] . '</td>';
                $exportContent .= '<td>' . $product['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] * $product['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $opItem['op_quantity'] * $product['product_weight'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
                $exportContent .= '</tr>';
                ++$exportIndex;
              }
            }
          }
        }
        else {
          // 备货模式
          $asnProduct = Service_ReceivingDetail::getByCondition(array(
            'receiving_code' => $asn['receiving_code'],
          ));

          foreach ($asnProduct as $apItem) {
            $product  = Service_Product::getByField($apItem['product_id'], 'product_id');

            if (empty($product)) {
              continue ;
            }

            $customer = Service_Customer::getByField($product['customer_id'], 'customer_id');
            if (1 == (int) $product['product_type']) { 
              // 组合产品需要分拆
              $productCombine = Service_ProductCombineRelation::getByCondition(array(
                'product_id' => $product['product_id'],
              ));

              foreach ($productCombine as $pcItem) {
                $subProduct = Service_Product::getByField($pcItem['pcr_product_id'], 'product_id');

                // 由产品料件号反推获取相关信息
                $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                  'from_id'  => $asn['receiving_code'],
                  'goods_id' => $subProduct['goods_id'],
                ));

                if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                    $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
                }
                else {
                    $formId = '';
                }

                $exportContent .= '<tr>';
                $exportContent .= '<td>' . $exportIndex . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['product_sku'] . '</td>';
                $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$subProduct['pu_code']] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['goods_id'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_code'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $subProduct['hs_goods_name'] . '</td>';
                $exportContent .= '<td>' . $subProduct['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] * $subProduct['product_declared_value'] . '</td>';
                $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $pcItem['pcr_quantity'] * $subProduct['product_weight'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
                $exportContent .= '</tr>';
                ++$exportIndex;
              }
            }
            else {
              // 普通产品
              // 由产品料件号反推获取相关信息
              $asnSplitDetail = Service_ReceivingXmlDetail::getByCondition(array(
                'from_id'  => $asn['receiving_code'],
                'goods_id' => $product['goods_id'],
              ));

            if (!empty($asnSplitDetail) && isset($formIdMap[$asnSplitDetail[0]['sub_receiving_code']])) {
                    $formId = $formIdMap[$asnSplitDetail[0]['sub_receiving_code']];
                }
                else {
                    $formId = '';
                }

              $exportContent .= '<tr>';
              $exportContent .= '<td>' . $exportIndex . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $asn['receiving_add_time'] . '</td>';
                $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $receivingAttr['complete_received_time'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">&nbsp;</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['product_sku'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $this->productUom[$product['pu_code']] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['goods_id'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_code'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $product['hs_goods_name'] . '</td>';
              $exportContent .= '<td>' . $product['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $product['product_declared_value'] . '</td>';
              $exportContent .= '<td>' . $apItem['rd_receiving_qty'] * $product['product_weight'] . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $formId . '</td>';
              $exportContent .= '<td style="vnd.ms-excel.numberformat:@;">' . $customer['customer_company_name'] . '</td>';
              $exportContent .= '</tr>';
              ++$exportIndex;
            }
          }
        }

        ob_flush();
        flush();
      }
    }

    $exportContent .= '</table>';

    echo $exportContent;
    exit();
  }

  public function exportOutAction() 
  {
    if ($this->_request->isPost()) {
      $selectedCode =$this->_request->getParam('selectedCode',array());
      if (!empty($selectedCode)) {

      }else{
      $params = $this->_request->getParams();
      $operationType = isset($params['operationType']) ? $params['operationType'] : '';
      $operationCode = isset($params['operationCode']) ? $params['operationCode'] : '';
      if (!empty($operationCode)) {
          $params[$operationType] = $operationCode;
      }  
      $condition = $this->serviceClass->getMatchFields($params);
      if($operationType == 'E18'){
          unset($condition['receiving_id']);
          $receiving  =   Service_ReceivingOrderDetail::getByCondition(array('order_code'=>$operationCode),array('receiving_id'));
          if($receiving){
              foreach($receiving AS $value){
                  $condition['receiving_id'][$value['
                  receiving_id']] =   $value['receiving_id'];
              }
          }
      }
      $condition['dateFor'] = isset($params['dateFor'])?$params['dateFor']:'';
      $condition['dateTo'] = isset($params['dateTo'])?$params['dateTo']:'';
      $condition['customer_code'] = trim(isset($params['E8'])?$params['E8']:'');
      $condition['is_delivery'] = isset($params['E41'])?$params['E41']:($params['E41']==0?0:'');
      if (empty($condition['customer_code'])) {
          $condition['customer_code'] = trim(isset($params['cu'])?$params['cu']:'');
      }
      // if ($condition['is_delivery']=='') {
      //     $condition['is_delivery'] = trim(isset($params['de'])?$params['de']:'');
      // }
      $condition['receiving_status_arr'] = isset($params['receiving_status_arr']) ? trim($params['receiving_status_arr']) : '';
      unset($params);
      // print_r($condition);exit;
      $rows = $this->serviceClass->getByCondition($condition);
        if (!empty($rows)) {
            $selectedCode=array();
            foreach ($rows as $key => $value) {
                $selectedCode[]=$value['receiving_code'];
            }
        }
      }
      
      $filename = "export".date("YmdHis");
      require_once("PHPExcel.php");
      require_once("PHPExcel/Reader/Excel2007.php");
      require_once("PHPExcel/Reader/Excel5.php");
      require_once ('PHPExcel/IOFactory.php');

      $objExcel = new PHPExcel();
      $objProps = $objExcel->getProperties();
      $objProps->setCreator('EC');
      $objProps->setTitle('Template');
      $objExcel->setActiveSheetIndex(0);

      $objActSheet = $objExcel->getActiveSheet();
      $objActSheet->getStyle("C".$index)->getNumberFormat()->setFormatCode('0.00');
      $objActSheet->getStyle("D".$index)->getNumberFormat()->setFormatCode('0.00');
      // $objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
      $objActSheet->getColumnDimension('A')->setWidth(15);
      $objActSheet->getColumnDimension('B')->setWidth(15);
      $objActSheet->getColumnDimension('C')->setWidth(15);
      $objActSheet->getColumnDimension('D')->setWidth(15);
      $objActSheet->setCellValue('A1','收货单号');
      $objActSheet->setCellValue('B1','是否提货');
      $objActSheet->setCellValue('C1','毛重');
      $objActSheet->setCellValue('D1','仓库确认重量');

      $dataList = array();
      // print_r($selectedCode);
      foreach($selectedCode as $k=>$code){
          $receivingRow = Service_Receiving::getByField($code,"receiving_code","*");
          $dataList[$k]['receiving_code'] = $receivingRow['receiving_code'];
          $dataList[$k]['roughweight'] = $receivingRow['roughweight'];
          $dataList[$k]['netweight'] = $receivingRow['netweight'];
          $dataList[$k]['is_delivery'] = $receivingRow['is_delivery']==0?'否':'是';
      }
      $index = 2;
      foreach($dataList as $key=>$value){
          $objActSheet->setCellValue("A".$index,$value['receiving_code']);
          $objActSheet->setCellValue("B".$index,$value['is_delivery']);
          $objActSheet->setCellValueExplicit("C".$index,$value['roughweight'],PHPExcel_Cell_DataType::TYPE_NUMERIC);
          $objActSheet->setCellValue("D".$index,$value['netweight'],PHPExcel_Cell_DataType::TYPE_NUMERIC);
          $index++;
      }

      header('Pragma:public');
      header('Content-Type:application/x-msexecl;name="' . $filename . '.xls');
      header("Content-Disposition:inline;filename=" . $filename . '.xls');
      $objWriter = PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
      $objWriter->save('php://output');
  }  
  } 
}
