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(); }