Esempio n. 1
0
 /**
  * the singleton pattern
  *
  * @return SoEventManager_Controller_SoEvent
  */
 public static function getInstance()
 {
     if (self::$_instance === NULL) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
Esempio n. 2
0
 protected function inspectDeleteRecord(Tinebase_Record_Interface $_record)
 {
     $rpController = Billing_Controller_ReceiptPosition::getInstance();
     $oiController = Billing_Controller_OpenItem::getInstance();
     $receiptPositions = $rpController->getByReceiptId($receiptId);
     foreach ($receiptPositions as $receiptPosition) {
         $rpController->_deleteRecord($receiptPosition);
     }
     try {
         $openItem = $oiController->getByReceiptId($_record->getId());
         $oiController->_deleteRecord($openItem);
     } catch (Exception $e) {
         //silently fail:ok
         //echo $e->__toString();
     }
 }
Esempio n. 3
0
 public function saveReceiptPosition($recordData)
 {
     $receiptId = null;
     if (array_key_exists('receipt_id', $recordData)) {
         if ($recordData['receipt_id']) {
             $receiptId = $recordData['receipt_id'];
         }
     }
     $orderPosition = $this->_save($recordData, Billing_Controller_OrderPosition::getInstance(), 'OrderPosition');
     if ($orderPosition instanceof Tinebase_Model_OrderPosition) {
         $orderPosId = $orderPosition->getId();
     } else {
         $orderPosId = $orderPosition['id'];
     }
     $orderPosition = Billing_Controller_OrderPosition::getInstance()->get($orderPosId);
     if ($receiptId) {
         // -> activate immediate update of receipt!
         // in order to have correct total sums
         Billing_Controller_ReceiptPosition::getInstance()->setUpdateReceiptAtOnce(true);
         $receipt = Billing_Controller_Receipt::getInstance()->get($receiptId);
         Billing_Controller_ReceiptPosition::getInstance()->addOrderPositions($receipt, array($orderPosition));
     }
     return $orderPosition;
 }
Esempio n. 4
0
 /**
  * 
  * get donation_amount sums collected by campaigns
  */
 public function getCreateDonationData()
 {
     try {
         if (!class_exists('Donator_Model_Donation')) {
             return null;
         }
         $hasDon = false;
         $aResult = array();
         $receiptPositions = Billing_Controller_ReceiptPosition::getInstance()->getPositionsByReceiptId($this->getId());
         foreach ($receiptPositions as $rp) {
             $article = $rp->getForeignRecordBreakNull('article_id', Billing_Controller_Article::getInstance());
             if ($article && $article->createsDonation()) {
                 $donationAmount = $article->__get('donation_amount') * $rp->__get('amount');
                 $campaign = $article->getForeignRecordBreakNull('donation_campaign_id', Donator_Controller_Campaign::getInstance());
                 if ($donationAmount != 0 && $campaign) {
                     $hasDon = true;
                     if (!array_key_exists($campaign->getId(), $aResult)) {
                         $aResult[$campaign->getId()] = $donationAmount;
                     } else {
                         $aResult[$campaign->getId()] += $donationAmount;
                     }
                 }
             }
         }
         if (!$hasDon) {
             return null;
         }
         return $aResult;
     } catch (Exception $e) {
         return null;
     }
 }
Esempio n. 5
0
 /**
  * 
  * Completely reverse an invoice by creating a credit receipt
  * @param string $receiptId
  */
 public function reverseInvoice($receiptId, $orderPositionData)
 {
     \org\sopen\dev\DebugLogger::openLogFileOverwrite(CSopen::instance()->getCustomerPath() . '/conf/logs/revinvoice.log');
     if (!is_array($orderPositionData)) {
         $orderPositionData = Zend_Json::decode($orderPositionData);
     }
     $rController = Billing_Controller_Receipt::getInstance();
     $receipt = $rController->get($receiptId);
     if ($receipt->__get('receipt_state') !== 'VALID') {
         throw new Billing_Exception_Receipt('Receipt cannot be reverted twice');
     }
     $order = $receipt->getForeignRecord('order_id', $this);
     $rpController = Billing_Controller_ReceiptPosition::getInstance();
     $opController = Billing_Controller_OrderPosition::getInstance();
     $receiptPositions = $rpController->getByReceiptId($receiptId);
     $creditReceipt = Billing_Model_Receipt::createCredit();
     $creditReceipt->__set('order_id', $order->getId());
     $creditReceipt->__set('invoice_nr', $receipt->__get('invoice_nr'));
     $creditReceipt->__set('credit_date', $receipt->__get('invoice_date'));
     $creditReceipt->__set('invoice_date', $receipt->__get('invoice_date'));
     // take same payment method for credit receipt
     $creditReceipt->__set('payment_method_id', $receipt->getForeignId('payment_method_id'));
     $creditReceipt->__set('is_cancellation', true);
     $receipt->__set('is_cancelled', true);
     \org\sopen\dev\DebugLogger::log('RECHNUNG ' . print_r($receipt, true));
     $creditReceipt = $rController->create($creditReceipt);
     $creditReceipt = $rController->get($creditReceipt->getId());
     $countPos = count($receiptPositions);
     $creditPositions = array();
     $opCount = count($orderPositionData);
     $aOrderPosData = null;
     if (is_array($orderPositionData)) {
         $aOrderPosData = org\sopen\app\util\arrays\ArrayHelper::getIndexedWithPropertyFromList($orderPositionData, 'id');
     }
     $partReverse = false;
     foreach ($receiptPositions as $invoicePosition) {
         //print_r($invoicePosition);
         if (is_array($aOrderPosData) && $opCount > 0 && (!array_key_exists($invoicePosition->getId(), $aOrderPosData) || !$aOrderPosData[$invoicePosition->getId()]['invert_amount'])) {
             $partReverse = true;
             continue;
         }
         $creditPosition = clone $invoicePosition;
         $creditPosition->__set('id', null);
         $creditPosition->__set('position_nr', ++$countPos);
         $creditPosition->__set('name', $creditPosition->__get('name') . ' -STORNO');
         if (is_array($aOrderPosData) && array_key_exists($invoicePosition->getId(), $aOrderPosData) && $aOrderPosData[$invoicePosition->getId()]['invert_amount']) {
             $creditPosition->__set('amount', $aOrderPosData[$invoicePosition->getId()]['invert_amount']);
         }
         $opController->invert($creditPosition);
         $creditPosition->flatten();
         $creditPositions[] = $opController->create($creditPosition);
     }
     $rpController->addOrderPositions($creditReceipt, $creditPositions);
     $creditReceipt = Billing_Controller_Receipt::getInstance()->get($creditReceipt->getId());
     /*
     		 
     		<value>REVERTED</value>
     		<value>PARTLYREVERTED</value>
     		<value>ISREVERSION</value>
     		<value>ISPARTREVERSION</value>
     */
     $receipt->__set('receipt_state', 'REVERTED');
     $creditReceipt->__set('receipt_state', 'ISREVERSION');
     $receipt->__set('revision_receipt_id', $creditReceipt->getId());
     $creditReceipt->__set('revision_receipt_id', $receipt->getId());
     //$creditReceipt->__set('payment_state', 'PAYED');
     $creditReceipt->__set('open_sum', -1 * (double) $receipt->__get('open_sum'));
     //$creditReceipt->__set('payed_sum',$creditReceipt->__get('total_brutto'));
     $creditReceipt->payTotal();
     if ($partReverse) {
         $receipt->__set('payment_state', 'PARTLYPAYED');
         $receipt->__set('receipt_state', 'PARTLYREVERTED');
         $creditReceipt->__set('receipt_state', 'ISPARTREVERSION');
         $receipt->payValue($creditReceipt->__get('total_brutto'));
     } else {
         try {
             $receipt->payTotal();
         } catch (Exception $e) {
             // @todo: silent failure: check OK
         }
     }
     $creditReceipt->__set('donation_id', $receipt->getForeignId('donation_id'));
     $creditReceipt->__set('reversion_record_id', $receipt->getId());
     $creditReceipt->__set('revision_receipt_id', $receipt->getId());
     $receipt->__set('reversion_record_id', $creditReceipt->getId());
     $receipt->__set('revision_receipt_id', $creditReceipt->getId());
     $receipt = $rController->update($receipt);
     $tags = $receipt->__get('tags');
     if ($tags) {
         $creditReceipt->__set('tags', $tags->toArray());
     }
     $creditReceipt = $rController->update($creditReceipt);
     \org\sopen\dev\DebugLogger::log('RECHNUNG_update ' . print_r($receipt, true));
     \org\sopen\dev\DebugLogger::log('GUTSCHRIFT ' . print_r($creditReceipt, true));
     Tinebase_Event::fireEvent(new Billing_Events_BillableReceiptCreated($creditReceipt));
     Tinebase_Event::fireEvent(new Billing_Events_BillableReceiptReverted($receipt, $creditReceipt));
     \org\sopen\dev\DebugLogger::close();
     return $creditReceipt;
 }
Esempio n. 6
0
 /**
  * 
  * Add receipt positions
  * @param unknown_type $receipt
  * @param array $positions	Array of objects: Billing_Model_Order
  */
 public function addReceiptPositions($receipt, $positions)
 {
     $rpController = Billing_Controller_ReceiptPosition::getInstance();
     $rpController->addOrderPositions($receipt, $positions);
 }