public static function createFromBatchJobMonitionItem(Billing_Model_Receipt $monitionReceipt, Billing_Model_BatchJobMonitionItem $batchJobMonitionItem) { $fromRecord = clone $batchJobMonitionItem; $fromRecord->flatten(); $openItem = $fromRecord->getForeignRecord('open_item_id', Billing_Controller_OpenItem::getInstance()); $obj = new self(); $obj->__set('erp_context_id', $fromRecord->__get('erp_context_id')); $obj->__set('monition_receipt_id', $monitionReceipt->getId()); $obj->__set('open_item_id', $openItem->getId()); $obj->__set('debitor_id', $openItem->getForeignId('debitor_id')); $obj->__set('due_date', $openItem->__get('due_date')); $obj->__set('monition_date', new Zend_Date()); $obj->__set('open_sum', $fromRecord->__get('open_sum')); $obj->__set('total_sum', $fromRecord->__get('total_sum')); $obj->__set('due_days', $fromRecord->__get('due_days')); $obj->__set('monition_stage', $fromRecord->__get('monition_stage')); return $obj; }
public function runMonitionExport($jobId, $dueDate) { set_time_limit(0); error_reporting(E_ALL); $job = Billing_Api_BatchJobManager::getInstance()->loadBatchJob($jobId); Billing_Api_BatchJobManager::getInstance()->startBatchJob(); try { $db = Tinebase_Core::getDb(); $tm = Tinebase_TransactionManager::getInstance(); $tId = $tm->startTransaction($db); set_time_limit(0); $data = $job->getData(); $filters = $data['filters']; $pagination = new Tinebase_Model_Pagination(); $contexts = array('MEMBERSHIP' => 'Beitrag', 'DONATOR' => 'Spende', 'ERP' => 'allg.'); // get all open items (for debit) // grouped by debitors $filters[] = array('field' => 'job_id', 'operator' => 'equals', 'value' => $job->getId()); $filter = new Billing_Model_BatchJobMonitionFilter($filters, 'AND'); // count membership matching filters $batchJobMonitionIds = $this->search($filter, new Tinebase_Model_Pagination(array('sort' => 'n_family', 'dir' => 'ASC')), false, true); $tempFilePath = CSopen::instance()->getCustomerPath() . '/customize/data/documents/temp/'; $hash = md5(microtime()); $protocolBatchJobMonitionIds = array(); $bufferMonitionIds = array(); foreach ($batchJobMonitionIds as $batchJobMonitionId) { $batchJobMonition = $this->get($batchJobMonitionId); // keep out items which are locked if ($batchJobMonition->__get('monition_lock')) { continue; } $usage = array(); $contactNr = $batchJobMonition->getForeignId('contact_id'); $batchJobMonitionItems = Billing_Controller_BatchJobMonitionItem::getInstance()->getByBatchJobMonitionId($batchJobMonitionId); // get last open item (grab last order, for relating monition to) $lastOpenItem = Billing_Controller_BatchJobMonitionItem::getInstance()->getLastOpenItem($batchJobMonitionItems); $orderId = $lastOpenItem->getForeignId('order_id'); $lastReceipt = $lastOpenItem->getReceipt(); $monition = Billing_Model_Receipt::createMonition(); $monition->__set('order_id', $orderId); $lastReceipt->copyAdditionalDataTo($monition); $monition = Billing_Controller_Receipt::getInstance()->create($monition); $bufferMonitionIds[] = $monition->getId(); $overallMonitionStage = 0; foreach ($batchJobMonitionItems as $batchJobMonitionItem) { $openItem = $batchJobMonitionItem->getForeignRecord('open_item_id', Billing_Controller_OpenItem::getInstance()); $openItem->manifestNextMonitionStage(); $monitionStage = $openItem->__get('monition_stage'); $overallMonitionStage = max($overallMonitionStage, $monitionStage); $openItemMonition = Billing_Model_OpenItemMonition::createFromBatchJobMonitionItem($monition, $batchJobMonitionItem); $openItemMonition = Billing_Controller_OpenItemMonition::getInstance()->create($openItemMonition); Billing_Controller_OpenItem::getInstance()->update($openItem); } $monition->__set('monition_level', $overallMonitionStage); if (Billing_Custom_Template::isToPrint($monition, Billing_Controller_Print::TYPE_MONITION, $templateId)) { $monition->__set('template_id', $templateId); } Billing_Controller_Receipt::getInstance()->update($monition); $batchJobMonition->__set('action_state', 'DONE'); $batchJobMonition->__set('process_datetime', Zend_Date::now()); $batchJobMonition->__set('processed_by_user', Tinebase_Core::get(Tinebase_Core::USER)->getId()); $this->update($batchJobMonition); $protocolBatchJobMonitionIds[] = $batchJobMonitionId; } $printController = Billing_Controller_Print::getInstance(); $printController->printReceipts($bufferMonitionIds, false, null, false, false, false); $storage = $printController->getPrintJobStorage(); $tempFilePath = CSopen::instance()->getCustomerPath() . '/customize/data/documents/temp/'; $filename = $tempFilePath . md5(microtime()) . '.pdf'; $storage->copyOut("//out/result/merge/pdf/final", $filename); $storage->close(); Billing_Api_BatchJobManager::getInstance()->jobAddData('MONITION', $filename); Billing_Api_BatchJobManager::getInstance()->jobAddData('MonitionDownloadFilename', 'Monition-' . $job->__get('job_nr') . '.pdf'); $tm->commitTransaction($tId); //Billing_Api_BatchJobManager::getInstance()->finish(); $this->printMonitionExportPrepare($jobId, false, null, true, $protocolBatchJobMonitionIds); return array('state' => 'success', 'result' => null); // $outputFileName = $tempFilePath . md5(serialize($job).'preparePDF'.microtime()).'.pdf'; } catch (Exception $e) { echo $e->__toString(); $tm->rollback($tId); Billing_Api_BatchJobManager::getInstance()->finishError($e->__toString()); return array('state' => 'failure', 'result' => null, 'errorInfo' => array('message' => $e->getMessage(), 'trace' => $e->getTrace())); } }
public function copyAdditionalDataTo(Billing_Model_Receipt $toReceipt) { $toReceipt->setAdditionalData($this->getAdditionalData()); }
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(); }