Esempio n. 1
0
 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;
 }
Esempio n. 2
0
 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);
                 }
             }
         }
     }
 }
Esempio n. 3
0
 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());
     }
 }
Esempio n. 4
0
 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;
 }
Esempio n. 5
0
 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);
 }
Esempio n. 6
0
 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;
     }
 }