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; }
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)); } }
/** * 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(); } }
public function reverseBooking($bookingId) { return Billing_Controller_Booking::getInstance()->reverseBooking($bookingId)->toArray(); }
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); } }