예제 #1
0
 /**
  * (non-PHPdoc)
  * @see Tinebase_Controller_Record_Abstract::_inspectCreate()
  */
 protected function _inspectUpdate(Tinebase_Record_Interface $_record)
 {
     $debitor = $_record->getForeignRecordBreakNull('debitor_id', Billing_Controller_Debitor::getInstance());
     if ($_record->__get('is_return_debit') && $_record->__get('state') != 'GREEN') {
         if ($_record->getForeignId('debitor_id')) {
             $debitorId = $_record->getForeignId('debitor_id');
             $amount = $_record->__get('payment_amount');
             $returnDebitFee = $_record->__get('return_inquiry_fee');
             try {
                 $toReturnPayment = Billing_Controller_Payment::getInstance()->getDebitToReturn($debitorId, $amount, $returnDebitFee, 'DEBIT');
                 $returnPaymentId = $toReturnPayment->getId();
                 if ($returnPaymentId && $debitorId && $toReturnPayment->__get('is_cancelled') == false) {
                     $_record->__set('state', 'GREEN');
                     $_record->__set('return_debit_base_payment_id', $returnPaymentId);
                 }
                 return;
             } catch (Exception $e) {
                 $returnPaymentId = null;
             }
         }
     }
     if ($_record->__get('is_return_debit')) {
         return;
     }
     if ($debitor && $_record->__get('state') != 'GREEN') {
         $_record->__set('state', 'ORANGE');
     }
     $op = $_record->getForeignRecordBreakNull('op_id', Billing_Controller_OpenItem::getInstance());
     if ($op) {
         $_record->__set('state', 'GREEN');
     } else {
         if ($debitor) {
             $openItems = Billing_Controller_OpenItem::getInstance()->getByDebitor($debitor->getId());
             $openItem = $openItems->getFirstRecord();
             if ($openItem) {
                 $openItemId = $openItem->getId();
                 $opAmount = $openItem->__get('open_sum');
                 if (abs($amount) > abs($opAmount)) {
                     $overpay = abs($amount) - abs($opAmount);
                 }
                 if ($overpay == 0) {
                     $_record->__set('state', 'GREEN');
                 }
             } else {
                 if ($_record->__get('overpay') == 'DONATION') {
                     $_record->__set('state', 'GREEN');
                 }
             }
         }
         // means there are multiple assigned within GUI
         if ($_record->hasMultipleOpenItems()) {
             $_record->__set('state', 'GREEN');
         }
     }
     //$_record->__set('job_nr', Tinebase_NumberBase_Controller::getInstance()->getNextNumber('job_nr'));
 }
예제 #2
0
 /**
  * inspect update of one record
  * 
  * @param   Tinebase_Record_Interface $_record      the update record
  * @param   Tinebase_Record_Interface $_oldRecord   the current persistent record
  * @return  void
  */
 protected function _inspectUpdate($_record, $_oldRecord)
 {
     if ($_record->__get('order_id')) {
         $order = $_record->getForeignRecord('order_id', Billing_Controller_Order::getInstance());
         if ($order->__get('payment_state') != $_record->__get('payment_state')) {
             $order->__set('payment_state', $_record->__get('payment_state'));
             Billing_Controller_Order::getInstance()->update($order);
         }
     }
     $openItem = null;
     if ($_record->__get('payment_state') == 'PAYED') {
         try {
             $openItem = Billing_Controller_OpenItem::getInstance()->getByReceiptId($_record->getId());
             if ($openItem->__get('state') != 'DONE') {
                 $openItem->__set('state', 'DONE');
                 $openItem->__set('open_sum', 0);
                 $openItem->__set('payed_sum', $_record->__get('total_brutto'));
                 $openItem->__set('payment_method_id', $_record->getForeignId('payment_method_id'));
             }
         } catch (Exception $e) {
             // silent failure, as open item might not exist already
         }
     }
     if ($_record->isCancelled()) {
         if (is_null($openItem)) {
             $openItem = Billing_Controller_OpenItem::getInstance()->getByReceiptId($_record->getId());
         }
         $openItem->__set('is_cancelled', true);
         $reversionReceiptId = $_record->getForeignId('reversion_record_id');
         try {
             $reversionOpenItem = Billing_Controller_OpenItem::getInstance()->getByReceiptId($reversionReceiptId);
             $openItem->__set('open_sum', $openItem->__get('total_brutto') + $reversionOpenItem->__get('total_brutto'));
             $openItem->__set('payed_sum', -1 * $reversionOpenItem->__get('payed_sum'));
             $openItem->__set('reversion_record_id', $reversionOpenItem->getId());
         } catch (Exception $e) {
             //failure OK: open item for reversion record might not already exist
             // will be set in on of the next update calls, as soon, the open item exists.
         }
     }
     if (!$_record->getForeignIdBreakNull('payment_method_id')) {
         $_record->__set('payment_method_id', 'BANKTRANSFER');
     }
     if ($openItem) {
         if (!$openItem->getForeignIdBreakNull('payment_method_id')) {
             $openItem->__set('payment_method_id', 'BANKTRANSFER');
         }
         Billing_Controller_OpenItem::getInstance()->update($openItem);
     }
 }