/** * the singleton pattern * * @return SoBilling_Controller_SoEvent */ public static function getInstance() { if (self::$_instance === NULL) { self::$_instance = new self(); } return self::$_instance; }
public function saveBatchJobMonitionItem($recordData) { return $this->_save($recordData, Billing_Controller_BatchJobMonitionItem::getInstance(), 'BatchJobMonitionItem'); }
public function prepareMonitionExport(Billing_Model_BatchJob $job) { error_reporting(E_ALL); set_time_limit(0); \org\sopen\dev\DebugLogger::openLogFileOverwrite(CSopen::instance()->getCustomerPath() . '/conf/logs/mon.log'); //throw new Exception(CSopen::instance()->getCustomerPath().'/conf/logs/mon.log'); try { $db = Tinebase_Core::getDb(); $tm = Tinebase_TransactionManager::getInstance(); $tId = $tm->startTransaction($db); $job = Billing_Api_BatchJobManager::getInstance()->loadBatchJob($job->getId()); // Billing_Api_BatchJobManager::getInstance()->startBatchJob(); $data = $job->getData(); $filters = $data['filters']; $aContexts = $data['contexts']; if (!is_array($aContexts)) { $aContexts = Zend_Json::decode($aContexts); } $pagination = new Tinebase_Model_Pagination(); //require_once 'Payment/Monition.php'; if (!is_array($filters)) { $filters = Zend_Json::decode($filters); } /*if(!is_array($paymentTypeKeys)){ $paymentTypeKeys = Zend_Json::decode($paymentTypeKeys); } $paymentTypeKeys = array( 1 => 'DEBIT', 2 => 'DEBIT_GM' );*/ $monitionStage1Days = (int) Tinebase_Core::getPreference('Billing')->getValue(Billing_Preference::MONITION_STAGE1); // get all open items (for debit) // grouped by debitors $filters[] = array('field' => 'due_days', 'operator' => 'greater', 'value' => $monitionStage1Days); /* $filters[] = array( 'field' => 'type', 'operator' => 'notin', 'value' => $paymentTypeKeys );*/ $filters[] = array('field' => 'state', 'operator' => 'not', 'value' => 'DONE'); $contextFilters = array(); foreach ($aContexts as $context => $flag) { if ($flag) { $contextFilters[] = $context; } } $filters[] = array('field' => 'erp_context_id', 'operator' => 'in', 'value' => $contextFilters); //$rawFilters = $filters; //$paymentTypeCount = count($paymentTypeKeys); /*$filters[] = array( 'field' => 'payment_method_id', 'operator' => 'equals', 'value' => $paymentTypeKeys[1] );*/ //print_r($filters); $filter = new Billing_Model_OpenItemFilter($filters, 'AND'); // count membership matching filters $openItemIds = Billing_Controller_OpenItem::getInstance()->search($filter, new Tinebase_Model_Pagination(array('sort' => 'id', 'dir' => 'ASC')), false, true); //print_r($openItemIds); $debitorOpenItemIds = array(); foreach ($openItemIds as $openItemId) { $openItem = Billing_Controller_OpenItem::getInstance()->get($openItemId); $debitorId = $openItem->getForeignId('debitor_id'); if (!array_key_exists($debitorId, $debitorOpenItemIds)) { $debitorOpenItemIds[$debitorId] = array(); } $debitorOpenItemIds[$debitorId][] = $openItemId; } foreach ($debitorOpenItemIds as $debitorId => $debitorOpenItems) { $debitor = Billing_Controller_Debitor::getInstance()->get($debitorId); $contact = $debitor->getForeignRecord('contact_id', Addressbook_Controller_Contact::getInstance()); $aSaldation = Billing_Controller_DebitorAccount::getInstance()->getSummationByDebitorId($debitorId, $contextFilters); $saldation = $aSaldation['sum']; $batchJobMonition = new Billing_Model_BatchJobMonition(null, true); $batchJobMonition->setFromArray(array('job_id' => $job->getId(), 'contact_id' => $contact->getId(), 'debitor_id' => $debitor->getId(), 'monition_stage' => 1, 'total_sum' => 0, 'open_sum' => 0, 'total_saldation' => 0, 'count_pos' => 0, 'monition_lock' => $debitor->__get('is_monition_locked'), 'skip' => false, 'action_text' => '', 'action_data' => null, 'action_type' => 'DRYRUN', 'action_state' => 'OPEN', 'error_info' => $errorInfo, 'created_datetime' => Zend_Date::now(), 'valid_datetime' => Zend_Date::now(), 'to_process_datetime' => Zend_Date::now(), 'process_datetime' => Zend_Date::now(), 'usage' => '')); $batchJobMonition = $this->create($batchJobMonition); $batchJobMonitionId = $batchJobMonition->getId(); $posCount = count($debitorOpenItems); $totalSum = 0; $totalBruttoSum = 0; $usages = array(); $maxMonitionStage = 1; foreach ($debitorOpenItems as $openItemId) { $openItem = Billing_Controller_OpenItem::getInstance()->get($openItemId); $sum = (double) $openItem->__get('open_sum'); $totalBrutto = (double) $openItem->__get('total_brutto'); $batchJobMonitionItem = new Billing_Model_BatchJobMonitionItem(null, true); $batchJobMonitionItem->setFromArray(array('batch_monition_id' => $batchJobMonitionId, 'open_item_id' => $openItem->getId(), 'erp_context_id' => $openItem->__get('erp_context_id'), 'open_sum' => $sum, 'total_sum' => $totalBrutto, 'monition_stage' => $openItem->getNextMonitionStage(), 'due_days' => $openItem->__get('due_days'), 'skip' => false, 'usage' => $openItem->__get('usage'))); $usages[] = $openItem->__get('usage'); $totalSum += $sum; $totalBruttoSum += $totalBrutto; $maxMonitionStage = max($maxMonitionStage, $openItem->getNextMonitionStage()); Billing_Controller_BatchJobMonitionItem::getInstance()->create($batchJobMonitionItem); } $usage = implode(' ', $usages); $batchJobMonition->__set('usage', $usage); $batchJobMonition->__set('open_sum', $totalSum); $batchJobMonition->__set('total_sum', $totalBruttoSum); $batchJobMonition->__set('total_saldation', $saldation); $batchJobMonition->__set('monition_stage', $maxMonitionStage); $batchJobMonition->__set('count_pos', $posCount); $this->update($batchJobMonition); } Billing_Api_BatchJobManager::getInstance()->finish(); $tm->commitTransaction($tId); \org\sopen\dev\DebugLogger::close(); return array('state' => 'success', 'result' => null); } catch (Exception $e) { // $e->__toString(); $tm->rollback($tId); Billing_Api_BatchJobManager::getInstance()->finishError($e->__toString()); \org\sopen\dev\DebugLogger::log($e->__toString); \org\sopen\dev\DebugLogger::close(); return array('state' => 'failure', 'result' => null, 'errorInfo' => array('message' => $e->getMessage(), 'trace' => $e->getTrace())); } }