示例#1
0
 public function createReceipt($data, $transaction = null)
 {
     // TODO: Use specific Exceptions
     if (!array_key_exists('receipt', $data)) {
         throw new Exception('Missing param receipt');
     }
     $aPReceipt = $data['receipt'];
     if (!array_key_exists('type', $aPReceipt)) {
         throw new Exception('Missing param type');
     }
     $type = $aPReceipt['type'];
     if (!Billing_Model_Receipt::isValidType($type)) {
         throw new Exception('Illegal/unknown receipt type');
     }
     $orderId = $aPReceipt['orderId'];
     $receiptController = Billing_Controller_Receipt::getInstance();
     $receipt = $receiptController->getEmptyReceipt();
     $shippingDoc = null;
     $receipt->__set('order_id', $orderId);
     $receipt->__set('type', $type);
     if (array_key_exists('receiptData', $aPReceipt)) {
         $receiptData = $aPReceipt['receiptData'];
         foreach ($receiptData as $key => $value) {
             $receipt->__set($key, $value);
         }
     }
     $receipt = $receiptController->create($receipt);
     if (array_key_exists('positions', $aPReceipt)) {
         $positions = $aPReceipt['positions'];
         $receiptPositionController = Billing_Controller_OrderPosition::getInstance();
         $posCount = 0;
         foreach ($positions as $posData) {
             $receiptPosition = $receiptPositionController->getEmptyOrderPosition();
             $receiptPosition->__set('receipt_id', $receipt->getId());
             $receiptPosition->__set('position_nr', ++$posCount);
             foreach ($posData['positionData'] as $key => $value) {
                 if ($key == 'price_group_id') {
                     if (is_array($value)) {
                         $value = $value['id'];
                     } elseif (is_object($value)) {
                         $value = $value->getId();
                     }
                 }
                 $receiptPosition->__set($key, $value);
             }
             if (array_key_exists('additionalData', $posData)) {
                 $receiptPosition->setAdditionalData($posData['additionalData']);
             }
             $receiptPositionController->create($receiptPosition);
         }
     }
     return $receipt->getId();
 }