public static function getFromRegularDonation(Donator_Model_RegularDonation $regDon) { $obj = new self($regDon->__get('bank_account_nr'), $regDon->__get('account_name'), $regDon->__get('bank_name'), $regDon->__get('bank_code'), $regDon->getForeignId('donation_payment_method')); $fundMaster = $regDon->getForeignRecord('fundmaster_id', Donator_Controller_FundMaster::getInstance()); $obj->setContactId($fundMaster->getForeignId('contact_id')); $contact = $fundMaster->getForeignRecord('contact_id', Addressbook_Controller_Contact::getInstance()); $countryCode = $contact->getLetterDrawee()->getPostalAddress()->getCountryCode('DE'); $obj->setCountryCode($countryCode); if (trim($obj->getName()) == '') { $obj->setName($contact->__get('n_fileas')); } return $obj; }
public function bookPayments($payments) { //throw new Zend_Exception('Temporarily disabled'); foreach ($payments as $payment) { if ($payment->hasAdditionalItem('donation')) { $donationData = $payment->getAdditionalItem('donation'); } else { $donationData = null; } if ($payment->hasMultipleOpenItems()) { $additionalData = $payment->getAdditionalData(); if ($payment->hasAdditionalItem('openItems')) { $data = $payment->getAdditionalItem('openItems'); $donationData = $payment->getAdditionalItem('donation'); $payment->flatten(); $paymentRecord = $payment->toArray(); $paymentRecord['amount'] = $paymentRecord['payment_amount']; Billing_Controller_OpenItem::getInstance()->payOpenItems($data, $paymentRecord, $donationData); } } else { $pExtract = clone $payment; $pExtract->flatten(); $paymentRecord = $pExtract->toArray(); $paymentO = Billing_Controller_Payment::getInstance()->getEmptyPayment(); if (array_key_exists('id', $paymentRecord)) { unset($paymentRecord['id']); } $paymentO->setFromArray($paymentRecord); $paymentO->__set('amount', $payment->__get('payment_amount')); $openItem = $payment->getForeignRecordBreakNull('op_id', Billing_Controller_OpenItem::getInstance()); if ($openItem) { if ($payment->__get('overpay') == 'DONATION' && !$payment->__get('is_return_debit') && $donationData) { $opAmount = abs((double) $openItem->__get('open_sum')); $pAmount = abs((double) $payment->__get('payment_amount')); if ($pAmount > $opAmount) { $donationAmount = $pAmount - $opAmount; $payment2 = clone $paymentO; $payment2->__set('id', null); $payment2->__set('amount', $donationAmount); $payment2->__set('erp_context_id', 'DONATOR'); $payment2 = Billing_Controller_Payment::getInstance()->create($payment2); $paymentDebitor = $payment2->getForeignRecord('debitor_id', Billing_Controller_Debitor::getInstance()); $contactId = $paymentDebitor->getForeignId('contact_id'); if ($donationData) { $campaignId = $donationData['campaign']; } else { $campaign = Donator_Controller_Campaign::getInstance()->getDefaultCampaign(); $campaignId = $campaign->getId(); } $usage = 'Spende Adress-Nr: ' . $paymentDebitor->__get('debitor_nr'); $date = $payment->__get('payment_date'); $donation = Donator_Controller_FundMaster::getInstance()->donateByContactId($contactId, $donationAmount, $campaignId, $date, $usage, $payment2); $paymentO->__set('amount', $pAmount - $donationAmount); } } // in case of overpay if ($paymentO->__get('amount') != 0) { $paymentO = Billing_Controller_Payment::getInstance()->create($paymentO); Billing_Controller_OpenItem::getInstance()->payOpenItem($openItem->getId(), $paymentO, abs((double) $openItem->__get('open_sum'))); } } else { // can be donation or prepay of member fee if ($payment->__get('is_return_debit')) { $paymentO = Billing_Controller_Payment::getInstance()->create($paymentO); // prepay member fee } elseif ($payment->__get('overpay') == 'PREPAYMEMBERFEE') { // do nothing else, payment is stored with context membership // so balance is positive $paymentO->__set('erp_context_id', 'MEMBERSHIP'); $paymentO = Billing_Controller_Payment::getInstance()->create($paymentO); } else { // donation $paymentO->__set('erp_context_id', 'DONATOR'); //$paymentO = Billing_Controller_Payment::getInstance()->create($paymentO); $donationData = $payment->getAdditionalItem('donation'); $donationAmount = abs((double) $payment->__get('payment_amount')); $payment2 = clone $paymentO; $payment2->__set('id', null); $payment2->__set('amount', $donationAmount); $payment2->__set('erp_context_id', 'DONATOR'); $payment2 = Billing_Controller_Payment::getInstance()->create($payment2); $paymentDebitor = $payment2->getForeignRecord('debitor_id', Billing_Controller_Debitor::getInstance()); $contactId = $paymentDebitor->getForeignId('contact_id'); if ($donationData) { $campaignId = $donationData['campaign']; } else { $campaign = Donator_Controller_Campaign::getInstance()->getDefaultCampaign(); $campaignId = $campaign->getId(); } $usage = 'Spende Adress-Nr: ' . $paymentDebitor->__get('debitor_nr'); $date = $payment->__get('payment_date'); $donation = Donator_Controller_FundMaster::getInstance()->donateByContactId($contactId, $donationAmount, $campaignId, $date, $usage, $payment2); } } } } }
public function payOpenItems($data, $paymentRecord, $donationData) { try { if (!is_array($data)) { $data = Zend_Json::decode($data); } if (!is_array($paymentRecord)) { $paymentRecord = Zend_Json::decode($paymentRecord); } if (!is_array($donationData)) { $donationData = Zend_Json::decode($donationData); } $payment = Billing_Controller_Payment::getInstance()->getEmptyPayment(); if (array_key_exists('id', $paymentRecord)) { unset($paymentRecord['id']); } $payment->setFromArray($paymentRecord); $paymentAmount = $payment->__get('amount'); $donationAmount = $donationData['donation_amount']; if (count($data) > 0) { if ($donationAmount > 0) { $paymentAmount -= min($donationAmount, $paymentAmount); $payment->__set('amount', $paymentAmount); } $payment = Billing_Controller_Payment::getInstance()->create($payment); $paymentId = $payment->getId(); foreach ($data as $item) { $this->payOpenItem($item['id'], $payment, $item['amount']); $paymentAmount -= $item['amount']; } } // if donation should be made if (is_array($donationData) && array_key_exists('donation_amount', $donationData)) { if ($donationAmount > 0) { $payment2 = clone $payment; $payment2->__set('id', null); $payment2->__set('amount', $donationAmount); $payment2->__set('erp_context_id', 'DONATOR'); $payment2 = Billing_Controller_Payment::getInstance()->create($payment2); $paymentDebitor = $payment2->getForeignRecord('debitor_id', Billing_Controller_Debitor::getInstance()); $contactId = $paymentDebitor->getForeignId('contact_id'); $campaignId = $donationData['campaign']; $usage = 'Spende Adress-Nr: ' . $paymentDebitor->__get('debitor_nr'); $date = $payment->__get('payment_date'); $donation = Donator_Controller_FundMaster::getInstance()->donateByContactId($contactId, $donationAmount, $campaignId, $date, $usage, $payment2); } } return array('success' => true, 'payment' => $payment->toArray()); } catch (Exception $e) { return array('success' => false, 'payment' => null, 'errorInfo' => $e->getTrace(), 'errorMessage' => $e->getMessage()); } }
public function getBankAccountForDebitor($debitor, $paymentMethod = null) { if (!$debitor instanceof Billing_Model_Debitor) { $debitor = $this->get($debitor); } $bankAccount = Billing_Api_BankAccount::createEmpty(); $contact = $debitor->getForeignRecord('contact_id', Addressbook_Controller_Contact::getInstance()); $memberships = Membership_Controller_SoMember::getInstance()->getByContactId($contact->getId()); foreach ($memberships as $membership) { $bankAccount = Billing_Api_BankAccount::getFromSoMember($membership); // if($bankAccount->isValidForPaymentMethod($paymentMethod)){ if ($bankAccount->isValid()) { break; } } //if(!$bankAccount->isValidForPaymentMethod($paymentMethod)){ if (!$bankAccount->isValid()) { try { $fundMaster = Donator_Controller_FundMaster::getInstance()->getByContactId($contact->getId()); $bankAccount = Billing_Api_BankAccount::getFromFundMaster($fundMaster); } catch (Exception $e) { } } if (!$bankAccount->isValid()) { $bankAccount = Billing_Api_BankAccount::getFromContact($contact); } //if(!$bankAccount->isValidForPaymentMethod($paymentMethod)){ /*if(!$bankAccount->isValid()){ throw new Billing_Exception_BankAccountInvalidForPaymentMethod('No valid bankaccount for debitor '.$debitor->getId(). ' and payment method '.$paymentMethod. ' log: '.$log); }*/ return $bankAccount; }
public function onDonationBooked($donation, $booking, $receipt = null, $openItem = null, $context = 'DONATOR') { $fundMaster = $donation->getForeignRecordBreakNull('fundmaster_id', Donator_Controller_FundMaster::getInstance()); $contact = $fundMaster->getForeignRecordBreakNull('contact_id', Addressbook_Controller_Contact::getInstance()); $debitor = Billing_Controller_Debitor::getInstance()->getByContactOrCreate($contact->getId()); $debitorId = $debitor->getId(); $debitorAccount = new Billing_Model_DebitorAccount(null, true); $debitorAccount->__set('debitor_id', $debitorId); if ($receipt) { $debitorAccount->__set('receipt_id', $receipt->getId()); } if ($openItem) { $debitorAccount->__set('open_item_id', $openItem->getId()); } $value = abs((double) $donation->__get('donation_amount')); $debitorAccount->__set('item_type', 'DEBIT'); if ($donation->__get('is_cancellation')) { $debitorAccount->__set('item_type', 'CREDIT'); $debitorAccount->__set('h_brutto', $value); } else { $debitorAccount->__set('s_brutto', $value); } $prefix = ''; if ($donation->__get('is_cancellation')) { $debitorAccount->__set('item_type', 'CREDIT'); $prefix = 'STORNO '; } $debitorAccount->__set('is_cancelled', $donation->__get('is_cancelled')); $debitorAccount->__set('is_cancellation', $donation->__get('is_cancellation')); $debitorAccount->__set('usage', $prefix . $donation->__get('donation_usage') . ' Sollstellung Spende: Sp.nr ' . $donation->__get('donation_nr') . ' Adress-Nr ' . $contact->getId()); $debitorAccount->__set('debitor_id', $debitorId); $debitorAccount->__set('erp_context_id', $context); $debitorAccount->__set('object_id', $donation->getId()); $debitorAccount->__set('donation_id', $donation->getId()); $date = new Zend_Date($donation->__get('donation_date')); //$date = $date->toString('yyyy-MM-dd'); $debitorAccount->__set('create_date', $date); $debitorAccount->__set('value_date', $date); $debitorAccount->__set('debitor_id', $debitorId); Billing_Controller_DebitorAccount::getInstance()->create($debitorAccount); }
private static function doSepa($contact) { try { $memberships = Membership_Controller_SoMember::getInstance()->getByContactId($contact->getId()); foreach ($memberships as $membership) { $memKind = $membership->__get('membership_type'); if ($memKind == 'MEMBER_EX' || $memKind == 'INTERESTED') { continue; } if ($memKind == 'MEMBER_GESCHENK') { $parentMembership = $membership->getForeignRecord('parent_member_id', Membership_Controller_SoMember::getInstance()); $bankAccount = Billing_Api_BankAccount::getFromSoMember($parentMembership); } else { $bankAccount = Billing_Api_BankAccount::getFromSoMember($membership); } $objBankAccount = $bankAccount->convertSepa(); if (!is_null($objBankAccount)) { $usage = $objBankAccount->addUsageMembership($membership); $membership->__set('bank_account_id', $objBankAccount->getId()); $membership->__set('bank_account_usage_id', $usage->getId()); Membership_Controller_SoMember::getInstance()->update($membership); $paymentMethod = $bankAccount->getPaymentMethod(); if ($paymentMethod == 'DEBIT' || $paymentMethod == 'DEBIT_GM') { Billing_Controller_SepaMandate::getInstance()->generateSepaMandateForBankAccountUsage($usage); } } } $fundMasters = Donator_Controller_FundMaster::getInstance()->getAllByContactIdBreakNull($contact->getId()); if (!is_null($fundMasters)) { foreach ($fundMasters as $fundMaster) { if ($fundMaster instanceof Donator_Model_FundMaster) { //regular donations $regularDonations = Donator_Controller_RegularDonation::getInstance()->getByFundMasterId($fundMaster->getId()); foreach ($regularDonations as $regDon) { if (!$regDon->__get('terminated') && !$regDon->__get('on_hold')) { $bankAccount = Billing_Api_BankAccount::getFromRegularDonation($regDon); $objBankAccount = $bankAccount->convertSepa(); if (!is_null($objBankAccount)) { $usage = $objBankAccount->addUsageRegularDonation($regDon); $regDon->__set('bank_account_id', $objBankAccount->getId()); $regDon->__set('bank_account_usage_id', $usage->getId()); Donator_Controller_RegularDonation::getInstance()->update($regDon); $paymentMethod = $bankAccount->getPaymentMethod(); if ($paymentMethod == 'DEBIT' || $paymentMethod == 'DEBIT_GM') { Billing_Controller_SepaMandate::getInstance()->generateSepaMandateForBankAccountUsage($usage); } } } } } } } //$bankAccount = Billing_Api_BankAccount::getFromFundMaster($fundMaster); //$bankAccountCollection->attach($bankAccount); $bankAccount = Billing_Api_BankAccount::getFromContact($contact); $objBankAccount = $bankAccount->convertSepa(); if (!is_null($objBankAccount)) { $objBankAccount->addUsageAll(); } } catch (Exception $e) { \org\sopen\dev\DebugLogger::log('error ' . self::$errorCounter++ . ' contactId: ' . $contact->getId() . $e->getMessage()); return; } }