Esempio n. 1
0
 public static function accountBookingToExternalArray(Billing_Model_AccountBooking $accountBooking, &$debSum, &$credSum)
 {
     $booking = $accountBooking->getForeignRecord('booking_id', Billing_Controller_Booking::getInstance());
     //$accountSystem = $accountSystem->getForeignRecord('account_system_id', Billing_Controller_Booking::getInstance());
     $debitorNr = '';
     $debitor = $accountBooking->getForeignRecordBreakNull('debitor_id', Billing_Controller_Debitor::getInstance());
     if ($debitor) {
         $debitorNr = $debitor->__get('debitor_nr');
     }
     $contraBookings = $accountBooking->getContraBookings();
     $aContraText = array();
     foreach ($contraBookings as $contraBooking) {
         $accountSystem = $contraBooking->getForeignRecord('account_system_id', Billing_Controller_AccountSystem::getInstance());
         $accountSystemNr = $accountSystem->__get('number') . ' (' . number_format($contraBooking->__get('value'), 2, ',', '.') . ') ';
         $aContraText[] = $accountSystemNr;
     }
     $strContraText = implode(',', $aContraText);
     $debSum += $accountBooking->__get('debit_value') ? $accountBooking->__get('debit_value') : 0;
     $credSum += (double) ($accountBooking->__get('credit_value') ? $accountBooking->__get('credit_value') : 0);
     $bDate = new Zend_Date($accountBooking->__get('booking_date'));
     $result = array('bnr' => $booking->__get('booking_nr'), 'receipt_nr' => $booking->__get('booking_receipt_nr'), 'usage' => $booking->__get('booking_text'), 'debitor_nr' => $debitorNr, 'contra_account' => $strContraText, 'date' => $bDate->toString('dd.MM.yyyy'), 'deb_value' => $accountBooking->__get('debit_value'), 'deb_value_f' => $accountBooking->__get('debit_value') != 0 ? number_format($accountBooking->__get('debit_value'), 2, ',', '.') : '', 'cred_value' => $accountBooking->__get('credit_value'), 'cred_value_f' => $accountBooking->__get('credit_value') != 0 ? number_format($accountBooking->__get('credit_value'), 2, ',', '.') : '');
     return $result;
 }
Esempio n. 2
0
 public function onPaymentCreated($payment)
 {
     if (!$payment->isBookingAllowed()) {
         return;
     }
     $cKto = $payment->getForeignId('account_system_id_haben');
     $dKto = $payment->getForeignId('account_system_id');
     // multi create bookings
     if ($dKto && $cKto) {
         $booking = new Billing_Model_Booking(null, true);
         $booking->__set('booking_date', new Zend_Date($payment->__get('payment_date')));
         $booking->__set('booking_text', $payment->__get('usage'));
         $booking->__set('erp_context_id', $payment->__get('erp_context_id'));
         $booking->__set('receipt_unique_nr', ' ');
         $booking->__set('receipt_id', $payment->getForeignId('receipt_id'));
         $booking->__set('donation_id', $payment->getForeignId('donation_id'));
         $booking->__set('is_cancelled', $payment->__get('is_cancelled'));
         $booking->__set('is_cancellation', $payment->__get('is_cancellation'));
         $value = abs($payment->__get('amount'));
         $creditValue = $value;
         $debitValue = $value;
         $credits = array(array('kto' => $cKto, 'value' => $value, 'debitor' => $payment->getForeignIdBreakNull('debitor_id')));
         if ($payment->__get('is_return_debit')) {
             $debitReturnFee = abs($payment->__get('return_inquiry_fee'));
             $debitReturnFeeAccount = Tinebase_Core::getPreference('Billing')->getValue(Billing_Preference::FIBU_KTO_DTA_RETURN_FEE);
             $debitValue -= $debitReturnFee;
             $debits = array(array('kto' => $dKto, 'value' => $debitValue, 'debitor' => $payment->getForeignIdBreakNull('debitor_id')));
             $debits[] = array('kto' => $debitReturnFeeAccount, 'value' => $debitReturnFee, 'debitor' => $payment->getForeignIdBreakNull('debitor_id'));
         } else {
             $debits = array(array('kto' => $dKto, 'value' => $value, 'debitor' => $payment->getForeignIdBreakNull('debitor_id')));
         }
         $data = array('credits' => $credits, 'debits' => $debits);
         $booking = Billing_Controller_Booking::getInstance()->create($booking);
         Billing_Controller_AccountBooking::getInstance()->multiCreateAccountBookings($booking->getId(), $data);
         Tinebase_Event::fireEvent(new Billing_Events_PaymentBooked($payment, $booking));
     }
 }
Esempio n. 3
0
 /**
  * event handler function
  *
  * all events get routed through this function
  *
  * @param Tinebase_Event_Abstract $_eventObject the eventObject
  *
  * @todo    write test
  */
 public function handleEvents(Tinebase_Event_Abstract $_eventObject)
 {
     try {
         if ($_eventObject instanceof Billing_Events_BillableReceiptCreated) {
             // create open item out of invoice or credit
             $db = Tinebase_Core::getDb();
             $tm = Tinebase_TransactionManager::getInstance();
             $tId = $tm->startTransaction($db);
             try {
                 $receipt = Billing_Controller_Receipt::getInstance()->get($_eventObject->receipt->getId());
                 // set payed and open sum
                 Billing_Controller_Receipt::getInstance()->onBillableReceiptCreated($receipt);
                 // create according open item
                 Billing_Controller_OpenItem::getInstance()->onBillableReceiptCreated($receipt);
                 if (Tinebase_Core::getPreference('Billing')->getValue(Billing_Preference::FIBU_INSTANT_BOOK_BILLABLE)) {
                     // do fibu booking -> fire event: BillableReceiptBooked
                     Billing_Controller_Booking::getInstance()->onBillableReceiptCreated($receipt);
                 }
                 $tm->commitTransaction($tId);
             } catch (Exception $e) {
                 $tm->rollback($tId);
                 throw $e;
             }
         }
         if ($_eventObject instanceof Billing_Events_PaymentReverted) {
             // TODO: NRW
             //Billing_Controller_OpenItem::getInstance()->onOpenItemPayed($_eventObject->payment);
         }
         if ($_eventObject instanceof Billing_Events_PaymentCreated) {
             // TODO: NRW
             try {
                 $payment = $_eventObject->payment;
                 Billing_Controller_Booking::getInstance()->onPaymentCreated($payment);
                 if ($payment->__get('receipt_id')) {
                     $receipt = $payment->getForeignRecord('receipt_id', Billing_Controller_Receipt::getInstance());
                     $openItem = Billing_Controller_OpenItem::getInstance()->getByReceiptId($receipt->getId());
                     Billing_Controller_OpenItem::getInstance()->payOpenItem($openItem->getId(), $payment);
                 }
                 if ($payment->isReturnDebit()) {
                     Tinebase_Event::fireEvent(new Billing_Events_PaymentDebitReturnCreated($payment));
                 }
             } catch (Exception $e) {
                 echo $e->__toString();
             }
             //Billing_Controller_OpenItem::getInstance()->onOpenItemPayed($_eventObject->payment);
         }
         if ($_eventObject instanceof Billing_Events_PaymentDebitReturnCreated) {
             // TODO: NRW
             try {
                 $payment = $_eventObject->payment;
                 Billing_Controller_OpenItem::getInstance()->onPaymentDebitReturnCreated($payment);
             } catch (Exception $e) {
                 echo $e->__toString();
             }
             //Billing_Controller_OpenItem::getInstance()->onOpenItemPayed($_eventObject->payment);
         }
         if ($_eventObject instanceof Billing_Events_PaymentBooked) {
             // TODO: NRW
             try {
                 $payment = $_eventObject->payment;
                 $booking = $_eventObject->booking;
                 Billing_Controller_DebitorAccount::getInstance()->onPaymentBooked($payment, $booking);
             } catch (Exception $e) {
                 echo $e->__toString();
             }
         }
         if ($_eventObject instanceof Billing_Events_PaymentDonationDetected) {
             // TODO: NRW
             try {
                 $payment = $_eventObject->payment;
                 Billing_Controller_DebitorAccount::getInstance()->onPaymentDonationDetected($payment);
             } catch (Exception $e) {
                 echo $e->__toString();
             }
         }
         if ($_eventObject instanceof Billing_Events_BillableReceiptBooked) {
             try {
                 // TODO: NRW
                 $receipt = Billing_Controller_Receipt::getInstance()->get($_eventObject->receipt->getId());
                 $openItem = $_eventObject->openItem;
                 $booking = $_eventObject->booking;
                 // after booking -> debitor account gets  created
                 Billing_Controller_DebitorAccount::getInstance()->onBillableReceiptBooked($receipt, $openItem, $booking);
                 $receipt->__set('booking_id', $booking->getId());
                 $openItem->__set('booking_id', $booking->getId());
                 Billing_Controller_Receipt::getInstance()->update($receipt);
                 Billing_Controller_OpenItem::getInstance()->update($openItem);
             } catch (Exception $e) {
                 echo $e->__toString();
             }
         }
         if ($_eventObject instanceof Billing_Events_BillableReceiptReverted) {
             try {
                 // TODO: NRW
                 $receipt = $_eventObject->revertedReceipt;
                 $reversionReceipt = $_eventObject->reversionReceipt;
                 // after booking -> debitor account gets  created
                 Billing_Controller_DebitorAccount::getInstance()->onBillableReceiptReverted($receipt, $reversionReceipt);
             } catch (Exception $e) {
                 echo $e->__toString();
             }
         }
     } catch (Exception $e) {
         Tinebase_Core::getLogger()->warn($e->__toString());
         echo $e->__toString();
     }
 }
Esempio n. 4
0
 public function reverseBooking($bookingId)
 {
     return Billing_Controller_Booking::getInstance()->reverseBooking($bookingId)->toArray();
 }
Esempio n. 5
0
 public function multiCreateAccountBookings($bookingId, $data)
 {
     if (!is_array($data)) {
         $data = Zend_Json::decode($data);
     }
     $booking = Billing_Controller_Booking::getInstance()->get($bookingId);
     $credits = $data['credits'];
     $debits = $data['debits'];
     $val = $val2 = 0;
     foreach ($credits as $credit) {
         $cval = (double) $credit['value'];
         if ($credit['kto'] && $credit['value'] != 0) {
             $accountBooking = $this->getEmptyAccountBooking();
             $accountBooking->__set('account_system_id', $credit['kto']);
             if (array_key_exists('debitor', $credit) && $credit['debitor']) {
                 $accountBooking->__set('debitor_id', $credit['debitor']);
             }
             $accountBooking->__set('booking_id', $bookingId);
             $accountBooking->__set('value', (double) $credit['value']);
             $accountBooking->__set('booking_date', $booking->__get('booking_date'));
             $accountBooking->__set('type', 'CREDIT');
             $this->create($accountBooking);
             $val += $cval;
         }
     }
     foreach ($debits as $debit) {
         $dVal = (double) $credit['value'];
         if ($debit['kto'] && $debit['value'] != 0) {
             $accountBooking = $this->getEmptyAccountBooking();
             $accountBooking->__set('account_system_id', $debit['kto']);
             if (array_key_exists('debitor', $debit) && $debit['debitor']) {
                 $accountBooking->__set('debitor_id', $debit['debitor']);
             }
             $accountBooking->__set('booking_id', $bookingId);
             $accountBooking->__set('value', (double) $debit['value']);
             $accountBooking->__set('booking_date', $booking->__get('booking_date'));
             $accountBooking->__set('type', 'DEBIT');
             $this->create($accountBooking);
         }
         $val2 += $dVal;
     }
     if ($val > 0) {
         $add = $booking->__get('value');
         $booking->__set('value', $val + (double) $add);
         Billing_Controller_Booking::getInstance()->update($booking);
     }
 }