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()));
     }
 }
Example #3
0
 public function copyAdditionalDataTo(Billing_Model_Receipt $toReceipt)
 {
     $toReceipt->setAdditionalData($this->getAdditionalData());
 }
Example #4
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();
 }