Пример #1
0
 /**
  * appends sql to given select statement
  *
  * @param Zend_Db_Select                $_select
  * @param Tinebase_Backend_Sql_Abstract $_backend
  */
 public function appendFilterSql($_select, $_backend)
 {
     $filterData = array('field' => $this->_field, 'operator' => $this->_operator, 'value' => array($this->_value));
     //print_r($filterData);
     $oFilter = new Billing_Model_OrderFilter(array(), 'AND');
     $oFilter->addFilter($oFilter->createFilter($this->_field, $this->_operator, $this->_value));
     /*Filter = $oFilter->toArray();
      	print_r($aFilter);
      	*/
     $orderIds = Billing_Controller_Order::getInstance()->search($oFilter, null, false, true);
     //print_r($orderIds);
     $filter = new Billing_Model_ReceiptFilter(array(), 'AND');
     if (count($orderIds) > 0) {
         $filter->addFilter(new Tinebase_Model_Filter_Id('order_id', 'in', $orderIds));
     } else {
         $filter->addFilter(new Tinebase_Model_Filter_Id('order_id', 'in', array(0 => null)));
     }
     $receiptIds = Billing_Controller_Receipt::getInstance()->search($filter, null, false, true);
     if (count($receiptIds) > 0) {
         $filter1 = new Billing_Model_ArticleSoldFilter(array(), 'AND');
         $filter1->addFilter(new Tinebase_Model_Filter_Id('receipt_id', 'in', $receiptIds));
         Tinebase_Backend_Sql_Filter_FilterGroup::appendFilters($_select, $filter1, $_backend);
     } else {
         $filter1 = new Billing_Model_ArticleSoldFilter(array(), 'AND');
         $filter1->addFilter(new Tinebase_Model_Filter_Id('receipt_id', 'in', array(0 => null)));
         Tinebase_Backend_Sql_Filter_FilterGroup::appendFilters($_select, $filter1, $_backend);
     }
     //	echo $_select->assemble();
 }
Пример #2
0
 /**
  * inspect create of one record
  * 
  * @param   Tinebase_Record_Interface $_record      the update record
  * @param   Tinebase_Record_Interface $_oldRecord   the current persistent record
  * @return  void
  */
 protected function _inspectCreate($_record, $_oldRecord)
 {
     $_record->__set('payment_date', new Zend_Date($_record->__get('payment_date')));
     $order = $_record->getForeignRecordBreakNull('order_id', Billing_Controller_Order::getInstance());
     if (!$_record->__get('erp_context_id') && $order) {
         $_record->__set('erp_context_id', $order->__get('erp_context_id'));
     }
     $this->handleReturnDebit($_record);
 }
Пример #3
0
 protected function _inspectCreate($_record)
 {
     if (!$_record->__get('booking_nr')) {
         $_record->__set('booking_nr', Tinebase_NumberBase_Controller::getInstance()->getNextNumber('booking_nr'));
     }
     $receipt = $_record->getForeignRecordBreakNull('receipt_id', Billing_Controller_Receipt::getInstance());
     $order = $_record->getForeignRecordBreakNull('order_id', Billing_Controller_Order::getInstance());
     if ($order) {
         $_record->__set('erp_context_id', $order->__get('erp_context_id'));
     }
     if ($_record->__get('booking_date')) {
         if (!$_record->__get('booking_receipt_date')) {
             $_record->__set('booking_receipt_date', $_record->__get('booking_date'));
         }
     }
 }
Пример #4
0
 public function toArray($_valueToJson = false)
 {
     $result = parent::toArray($_valueToJson);
     foreach ($result as &$filterData) {
         if ($filterData['field'] == 'id' && $_valueToJson == true && !empty($filterData['value'])) {
             //if (Tinebase_Core::isLogLevel(Zend_Log::DEBUG)) Tinebase_Core::getLogger()->debug(__METHOD__ . '::' . __LINE__ . ' value:' . print_r($filterData['value'], true));
             try {
                 $filterData['value'] = Billing_Controller_Order::getInstance()->get($filterData['value'])->toArray();
             } catch (Tinebase_Exception_NotFound $nfe) {
                 if (Tinebase_Core::isLogLevel(Zend_Log::INFO)) {
                     Tinebase_Core::getLogger()->INFO(__METHOD__ . '::' . __LINE__ . " could not find and resolve timeaccount {$filterData['value']}");
                 }
             }
         }
     }
     return $result;
 }
Пример #5
0
 public function exportFibu($filters, $simulation)
 {
     error_reporting(E_ALL);
     ini_set('display_errors', 'on');
     Billing_Controller_Order::getInstance()->exportFibu($filters, strtolower(trim($simulation)) == 'false' ? false : true);
 }
Пример #6
0
 public static function import($fileName)
 {
     $result = array('failcount' => 0, 'totalcount' => 0, 'duplicatecount' => 0, 'status' => 'success');
     try {
         $reader = new Reader();
         $statements = $reader->getStatements(file_get_contents($fileName));
         foreach ($statements as $statement) {
             foreach ($statement->getTransactions() as $transaction) {
                 //echo $transaction->getAmount() . "\n";
                 $amount = (double) $transaction->getAmount();
                 $description = $transaction->getDescription();
                 $accountNumber = $statement->getAccount()->getNumber();
                 //echo $accountNumber;
                 $num = null;
                 $debitorNr = null;
                 $memberNr = null;
                 $receiptNr = null;
                 $context = 'ERP';
                 $cdesc = strtolower($description);
                 $opNr = null;
                 $openItemId = null;
                 $debitorId = null;
                 $opId = null;
                 $type = null;
                 $state = 'RED';
                 $opAmount = 0;
                 $overpay = 0;
                 if ($amount < 0) {
                     $type = 'DEBIT';
                 } else {
                     $type = 'CREDIT';
                 }
                 if (strpos($cdesc, 'mitg') || strpos($cdesc, 'tgli') || strpos($cdesc, 'beitr')) {
                     $context = 'MEMBERSHIP';
                 } elseif (strpos($cdesc, 'spend')) {
                     $context = 'DONATOR';
                 }
                 $isReturnDebit = false;
                 if (strpos($cdesc, 'rueckbelast')) {
                     $isReturnDebit = true;
                 }
                 $numDesc = $transaction->getDescriptionConcat(1, 7);
                 $numDescCheck = strtolower($numDesc);
                 $pos = strpos($numDescCheck, 'mitg');
                 if (!$pos) {
                     $pos = strpos($numDescCheck, 'tgli');
                 }
                 if (!pos) {
                     $pos = strpos($numDescCheck, 'beitr');
                 }
                 if (!pos) {
                     $pos = strpos($numDescCheck, 'rech');
                 }
                 if ($numDesc && $pos) {
                     if (preg_match('/([0-9]{5,7})/', substr($numDesc, $pos), $match)) {
                         $num = $match[1];
                     }
                 }
                 if ($num && !$isReturnDebit) {
                     if (strpos($cdesc, 'rech')) {
                         try {
                             $receiptNr = $num;
                             $receiptId = Billing_Controller_Receipt::getInstance()->getIdByProperty('invoice_nr', $num);
                             $receipt = Billing_Controller_Receipt::getInstance()->get($receiptId);
                             $context = $receipt->getForeignId('erp_context_id');
                             $order = $receipt->getForeignRecordBreakNull('order_id', Billing_Controller_Order::getInstance());
                             $debitor = $order->getForeignRecordBreakNull('debitor_id', Billing_Controller_Debitor::getInstance());
                             if ($debitor) {
                                 $debitorId = $debitor->getId();
                                 $state = 'ORANGE';
                                 $openItems = Billing_Controller_OpenItem::getInstance()->getByDebitor($debitorId);
                                 foreach ($openItems as $op) {
                                     if ($op->__get('state') != 'DONE') {
                                         $openItem = $op;
                                         break;
                                     }
                                 }
                                 //$openItem = $openItems->getFirstRecord();
                                 $openItemId = $openItem->getId();
                                 $opAmount = $openItem->__get('open_sum');
                             }
                             if (abs($amount) > abs($opAmount)) {
                                 $overpay = abs($amount) - abs($opAmount);
                             }
                             if ($overpay == 0) {
                                 $state = 'GREEN';
                             }
                             /*if((float)abs($openItem->__get('total_brutto')) == (float)abs($amount)){
                             			$state = 'GREEN';
                             		}*/
                         } catch (Exception $e) {
                         }
                     } elseif (strpos($cdesc, 'mitg')) {
                         $memberNr = $num;
                         try {
                             $member = Membership_Controller_SoMember::getInstance()->getSoMemberByMemberNr($memberNr);
                             $contactId = $member->getForeignId('contact_id');
                             $debitorId = Billing_Controller_Debitor::getInstance()->getIdByContactId($contactId);
                             $state = 'ORANGE';
                             $openItems = Billing_Controller_OpenItem::getInstance()->getByDebitor($debitorId);
                             foreach ($openItems as $op) {
                                 if ($op->__get('state') != 'DONE') {
                                     $openItem = $op;
                                     break;
                                 }
                             }
                             //$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) {
                                     $state = 'GREEN';
                                 }
                             }
                             /*if((float)abs($openItem->__get('total_brutto')) == (float)abs($amount)){
                             			$state = 'GREEN';
                             		}*/
                         } catch (Exception $e) {
                         }
                     } else {
                         try {
                             $contactId = (int) trim($num);
                             $debitorId = Billing_Controller_Debitor::getInstance()->getIdByContactId($contactId);
                             $state = 'ORANGE';
                             $openItems = Billing_Controller_OpenItem::getInstance()->getByDebitor($debitorId);
                             foreach ($openItems as $op) {
                                 if ($op->__get('state') != 'DONE') {
                                     $openItem = $op;
                                     break;
                                 }
                             }
                             // changed behviour: was only correct in first period :-/
                             //$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) {
                                 $state = 'GREEN';
                             }
                             //if((float)abs($openItem->__get('total_brutto')) == (float)abs($amount)){
                             //	$state = 'GREEN';
                             //}
                         } catch (Exception $e) {
                         }
                     }
                 }
                 if ($isReturnDebit) {
                     $returnDebitFee = (double) Tinebase_Core::getPreference('Billing')->getValue(Billing_Preference::DEBIT_RETURN_FEE);
                     if ($num) {
                         $contactId = (int) trim($num);
                         $debitorId = null;
                         try {
                             $debitorId = Billing_Controller_Debitor::getInstance()->getIdByContactId($contactId);
                             $state = 'ORANGE';
                         } catch (Exception $e) {
                             $state = 'RED';
                         }
                         try {
                             $toReturnPayment = Billing_Controller_Payment::getInstance()->getDebitToReturn($debitorId, $amount, $returnDebitFee, 'DEBIT');
                             $returnPaymentId = $toReturnPayment->getId();
                             if ($returnPaymentId && $debitorId && $toReturnPayment->__get('is_cancelled') == false) {
                                 $state = 'GREEN';
                             }
                             if ($toReturnPayment->__get('is_cancelled') == true) {
                                 $returnPaymentId = null;
                             }
                         } catch (Exception $e) {
                             $returnPaymentId = null;
                         }
                     }
                 }
                 $id = md5($cdesc);
                 try {
                     $payment = Billing_Controller_MT940Payment::getInstance()->get($id);
                 } catch (Exception $e) {
                     $payment = Billing_Controller_MT940Payment::getInstance()->getEmptyMT940Payment();
                     $bankAccount = Billing_Controller_AccountSystem::getInstance()->getDefaultBankAccount();
                     $fordAccount = Billing_Controller_AccountSystem::getInstance()->getByNumber('14000');
                     if (!$isReturnDebit) {
                         if ($type == 'DEBIT') {
                             $payment->__set('account_system_id', $bankAccount->getId());
                             $payment->__set('account_system_id_haben', $fordAccount->getId());
                         } else {
                             $payment->__set('account_system_id', $fordAccount->getId());
                             $payment->__set('account_system_id_haben', $bankAccount->getId());
                         }
                     } else {
                         $debitSettleAccount = Tinebase_Core::getPreference('Billing')->getValue(Billing_Preference::FIBU_KTO_DEBITOR);
                         $payment->__set('account_system_id', $debitSettleAccount);
                         $payment->__set('account_system_id_haben', $bankAccount->getId());
                         $payment->__set('is_return_debit', true);
                         $payment->__set('print_inquiry', true);
                         $payment->__set('set_accounts_banktransfer', true);
                         $payment->__set('return_inquiry_fee', $returnDebitFee);
                         $payment->__set('return_debit_base_payment_id', $returnPaymentId);
                     }
                     $payment->__set('id', $id);
                     $payment->__set('erp_context_id', $context);
                     if ($opNr) {
                         $payment->__set('op_nr', $opNr);
                     }
                     if ($openItemId) {
                         $payment->__set('op_id', $openItemId);
                         $payment->__set('due_date', new Zend_Date($openItem->__get('due_date')));
                         $payment->__set('op_amount', $openItem->__get('total_brutto'));
                     }
                     if ($debitorId) {
                         $payment->__set('debitor_id', $debitorId);
                     }
                     $payment->__set('type', $type);
                     $payment->__set('payment_date', new Zend_Date($transaction->getBookDate()->format('Y-m-d H:i:s')));
                     $payment->__set('payment_amount', abs($amount));
                     $payment->__set('state', $state);
                     $payment->__set('usage_payment', $description);
                     $payment->__set('usage', $numDesc);
                     $payment->__set('overpay_amount', $overpay);
                     Billing_Controller_MT940Payment::getInstance()->create($payment);
                 }
             }
             /*echo $statement->getOpeningBalance()->getAmount() . "\n";
               
                  foreach ($statement->getTransactions() as $transaction) {
                      echo $transaction->getAmount() . "\n";
                  }
               
                  echo $statement->getClosingBalance()->getAmount() . "\n";*/
         }
     } catch (Exception $e) {
         Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' ' . 'TD-Import - Es trat ein Fehler auf. Nicht ausgeführt.' . print_r($e->__toString(), true));
         $result['status'] = 'error';
         $result['errorInfo'] = $e->getMessage();
         $result['errorTrace'] = $e->getTrace();
     }
     return $result;
 }
Пример #7
0
 private function createReceipt()
 {
     try {
         $receipt = $this->_receiptController->get($this->receiptId);
         //$receiptPositions = $this->_receiptController->getOrderPositions($this->receiptId)->toArray();
         $receiptPositions = $receipt->getPositions()->toArray();
         if (!$receipt->isMonition()) {
             $receiptSumValues = $this->_receiptController->getReceiptSumValues($this->receiptId);
         } else {
             $receiptSumValues = array();
         }
         $orderId = $receipt->__get('order_id');
         $order = Billing_Controller_Order::getInstance()->get($orderId);
         $contact = $order->__get('debitor_id')->__get('contact_id');
         $contactId = $contact['id'];
         $contact = Addressbook_Controller_Contact::getInstance()->get($contactId);
         $receiptId = $receipt->id;
         $this->map[$contactId][] = $receiptId;
         $this->sortedMap[] = array($contactId => $receiptId);
         $this->count += 1;
         $templateId = $this->templateId;
         if (!Billing_Custom_Template::isToPrint($receipt, $this->matchReceiptType($receipt->__get('type')), &$templateId)) {
             --$this->count;
         }
         // get data for template from custom template
         $replaceTextBlocks = $this->templateController->getTextBlocks($templateId);
         $user = $receipt->__get('created_by');
         $userContact = Addressbook_Controller_Contact::getInstance()->getContactByUserId($user->getId());
         $data = $this->getData($receipt->__get('type'), array('contact' => $contact, 'receipt' => $receipt, 'order' => $order, 'debitor' => $order->__get('debitor_id'), 'positions' => $receiptPositions, 'sums' => $receiptSumValues, 'user' => Tinebase_Core::get(Tinebase_Core::USER), 'currentuser' => Tinebase_Core::getUser(), 'user' => $receipt->__get('created_by'), 'userContact' => $userContact), $replaceTextBlocks);
         $tempInFile = $this->tempFilePath . md5(serialize($receipt) . microtime()) . '_in.odt';
         $tempOutFile = $this->tempFilePath . md5(serialize($receipt) . microtime()) . '_out.odt';
         $this->templateController->renderTemplateToFile($templateId, $data, $tempInFile, $tempOutFile, $replaceTextBlocks);
         // move file into storage: cleans up tempfile at once
         $this->printJobStorage->moveIn($tempOutFile, "//in/{$contactId}/{$receiptId}/odt/temp");
         //$watermarkFile = '/srv/www/vhosts/dev/projects/sopen/web/vdst/customize/data/template/documents/preview.pdf';
         if (!$this->preview && !$this->copy) {
             $receipt->__set('print_date', new Zend_Date(strftime('%Y-%m-%d')));
             $receipt->flatten();
             $this->_receiptController->update($receipt);
         }
         if (Membership_Api_JobManager::getInstance()->hasJob()) {
             Membership_Api_JobManager::getInstance()->updateJobFromArray(array('job_name2', 'PRINTING... ' . $count));
         }
     } catch (Exception $e) {
         throw $e;
         //
         //echo $e->__toString();
         //throw new Billing_Exception_Order("Creating receipt document failed. - order: ".$this->receiptId, 0, $e);
     }
 }
Пример #8
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);
     }
 }
Пример #9
0
 /**
  * Returns registry data of addressbook.
  * @see Tinebase_Application_Json_Abstract
  * 
  * @return mixed array 'variable name' => 'data'
  */
 public function getRegistryData()
 {
     $filter = new Tinebase_Model_ImportExportDefinitionFilter(array(array('field' => 'plugin', 'operator' => 'equals', 'value' => 'Billing_Import_BankCsv')));
     $importDefinitions = Tinebase_ImportExportDefinition::getInstance()->search($filter);
     //print_r($importDefinitions);
     try {
         $defaultDefinitionArray = Tinebase_ImportExportDefinition::getInstance()->getByName('bank_import_csv')->toArray();
     } catch (Tinebase_Exception_NotFound $tenf) {
         if (count($importDefinitions) > 0) {
             $defaultDefinitionArray = $importDefinitions->getFirstRecord()->toArray();
         } else {
             Tinebase_Core::getLogger()->warn(__METHOD__ . '::' . __LINE__ . ' No import definitions found for Banks');
             $defaultDefinitionArray = array();
         }
     }
     $registryData = array('Order' => Billing_Controller_Order::getInstance()->getRegistryData(), 'StockLocation' => Billing_Controller_StockLocation::getInstance()->getRegistryData(), 'PaymentMethods' => $this->getPaymentMethodsAsSimpleArray(), 'Context' => $this->getContextsAsSimpleArray(), 'ArticleGroups' => Billing_Controller_ArticleGroup::getInstance()->getArticleGroupsAsSimpleArray(), 'DebitorGroups' => Billing_Controller_DebitorGroup::getInstance()->getDebitorGroupsAsSimpleArray(), 'ArticleSeriess' => Billing_Controller_ArticleSeries::getInstance()->getArticleSeriessAsSimpleArray(), 'AccountSystems' => Billing_Controller_AccountSystem::getInstance()->getAccountSystemsAsSimpleArray(), 'AccountClasss' => Billing_Controller_AccountClass::getInstance()->getAccountClasssAsSimpleArray(), 'defaultBankImportDefinition' => $defaultDefinitionArray, 'importDefinitions' => array('results' => $importDefinitions->toArray(), 'totalcount' => count($importDefinitions)));
     return $registryData;
 }
Пример #10
0
 private function createReceipt()
 {
     $receipt = $this->_receiptController->get($this->receiptId);
     $receiptPositions = $this->_receiptController->getOrderPositions($this->receiptId)->toArray();
     $receiptSumValues = $this->_receiptController->getReceiptSumValues($this->receiptId);
     $receiptId = $receipt->id;
     $this->map[] = $receiptId;
     $orderId = $receipt->__get('order_id');
     $order = Billing_Controller_Order::getInstance()->get($orderId);
     $contact = $order->__get('debitor_id')->__get('contact_id');
     $contactId = $contact['id'];
     $contact = Addressbook_Controller_Contact::getInstance()->get($contactId);
     $this->count += 1;
     if (!Billing_Custom_Template::isToPrint($receipt, $this->matchReceiptType($receipt->__get('type')), &$templateId)) {
         --$this->count;
     }
     // get data for template from custom template
     $replaceTextBlocks = $this->templateController->getTextBlocks($templateId);
     $data = $this->getData($receipt->__get('type'), array('contact' => $contact, 'receipt' => $receipt, 'order' => $order, 'debitor' => $order->__get('debitor_id'), 'positions' => $receiptPositions, 'sums' => $receiptSumValues, 'user' => Tinebase_Core::getUser()), $replaceTextBlocks);
     $tempInFile = $this->tempFilePath . md5(serialize($receipt) . microtime()) . '_in.odt';
     $tempOutFile = $this->tempFilePath . md5(serialize($receipt) . microtime()) . '_out.odt';
     $this->templateController->renderTemplateToFile($templateId, $data, $tempInFile, $tempOutFile, $replaceTextBlocks);
     // move file into storage: cleans up tempfile at once
     $this->printJobStorage->moveIn($tempOutFile, "//in/receipt/{$receiptId}/odt/temp");
     //$watermarkFile = '/srv/www/vhosts/dev/projects/sopen/web/vdst/customize/data/template/documents/preview.pdf';
     if ($this->printJobStorage->fileExists("//in/receipt/{$receiptId}/odt/temp")) {
         $inFile = $this->printJobStorage->resolvePath("//in/receipt/{$receiptId}/odt/temp");
         $outFile = $this->printJobStorage->getCreateIfNotExist("//out/result/{$receiptId}/pdf/final");
         $this->pdfServer->convertDocumentToPdf($inFile, $outFile);
         //$previewOutFile = $this->printJobStorage->getCreateIfNotExist( "//out/preview/$receiptId/pdf/final" );
         //$this->pdfServer->watermarkPdf($outFile, $watermarkFile, $previewOutFile);
     }
 }
Пример #11
0
 public function onBillableReceiptCreated($receipt)
 {
     $receipt->flatten();
     $openItem = new Billing_Model_OpenItem(null, true);
     //$order = Billing_Controller_Order::getInstance()->get($receipt->__get('order_id'));
     $order = $receipt->getForeignRecord('order_id', Billing_Controller_Order::getInstance());
     $debitorId = $order->getForeignId('debitor_id');
     $openItem->__set('order_id', $receipt->__get('order_id'));
     $openItem->__set('receipt_id', $receipt->getId());
     $openItem->__set('debitor_id', $debitorId);
     $openItem->__set('payment_method_id', $receipt->getForeignId('payment_method_id'));
     $rNr = $receipt->__get('invoice_nr');
     $rDate = $receipt->__get('invoice_date');
     $openItem->__set('is_cancellation', $receipt->__get('is_cancellation'));
     $openItem->__set('is_cancelled', $receipt->__get('is_cancelled'));
     if ($receipt->__get('is_cancellation')) {
         $openItem->__set('state', 'DONE');
     }
     if ($receipt->isCredit()) {
         $rNr = $receipt->__get('credit_nr');
         $rDate = $receipt->__get('credit_date');
         $openItem->__set('type', 'CREDIT');
     } else {
         $openItem->__set('type', 'DEBIT');
     }
     $openItem->__set('receipt_nr', $rNr);
     $openItem->__set('receipt_date', $rDate);
     $openItem->__set('total_netto', 0);
     $openItem->__set('total_brutto', 0);
     // TODO: check this -->
     // $openItem->__set('open_sum', $receipt->__get('total_brutto'));
     // changed to:
     $openItem->__set('open_sum', $receipt->__get('open_sum'));
     // <--
     $openItem->__set('payed_sum', $receipt->__get('payed_sum'));
     $openItem->__set('erp_context_id', $receipt->__get('erp_context_id'));
     $openItem->__set('usage', $receipt->__get('usage'));
     if ($receipt->isDonation()) {
         $openItem->__set('donation_id', $receipt->getForeignId('donation_id'));
     }
     $this->create($openItem);
 }
Пример #12
0
 public function getBookingData($fibuKto)
 {
     $orderPositions = Billing_Controller_ReceiptPosition::getInstance()->getByReceiptId($this->getId());
     $order = $this->getForeignRecord('order_id', Billing_Controller_Order::getInstance());
     $debitorId = $order->getForeignId('debitor_id');
     $totalBrutto = abs((double) $this->__get('total_brutto'));
     $articleKtos = array();
     foreach ($orderPositions as $orderPosition) {
         $article = $orderPosition->getForeignRecordBreakNull('article_id', Billing_Controller_Article::getInstance());
         $kto = $article->getForeignId('rev_account_vat_in');
         $value = abs((double) $orderPosition->__get('total_brutto'));
         if ($article->createsDonation()) {
             $donAmount = abs($orderPosition->__get('amount')) * $article->__get('donation_amount');
             $campaignId = $article->getForeignId('donation_campaign_id');
             $value -= $donAmount;
             $campaign = Donator_Controller_Campaign::getInstance()->get($campaignId);
             $dErloesKto = $campaign->getForeignId('erp_proceed_account_id');
             $articleKtos[] = array('kto' => $dErloesKto, 'value' => $donAmount, 'debitor' => $debitorId);
         }
         $articleKtos[] = array('kto' => $kto, 'value' => $value, 'debitor' => $debitorId);
     }
     if ($this->isInvoice()) {
         return array('credits' => $articleKtos, 'debits' => array(array('kto' => $fibuKto, 'value' => $totalBrutto, 'debitor' => $debitorId)));
     } else {
         return array('debits' => $articleKtos, 'credits' => array(array('kto' => $fibuKto, 'value' => $totalBrutto, 'debitor' => $debitorId)));
     }
 }
Пример #13
0
 public function onBillableReceiptBooked($receipt, $openItem, $booking)
 {
     if ($receipt->isCredit() || $receipt->isInvoice()) {
         // suchen und neu oder update -> debitor account
         $receipt = Billing_Controller_Receipt::getInstance()->get($receipt->getId());
         $totalBrutto = $receipt->__get('total_brutto');
         try {
             $debitorAccount = Billing_Controller_DebitorAccount::getInstance()->getByReceiptId($receipt->getId());
             if (!$debitorAccount) {
                 throw new Exception('');
             }
             $debitorAccount->__set('s_brutto', $totalBrutto);
             Billing_Controller_DebitorAccount::getInstance()->update($debitorAccount);
         } catch (Exception $e) {
             $debitorAccount = Billing_Controller_DebitorAccount::getInstance()->getEmptyDebitorAccount();
             $order = $receipt->getForeignRecord('order_id', Billing_Controller_Order::getInstance());
             $debitorAccount->__set('receipt_id', $receipt->getId());
             $debitorAccount->__set('debitor_id', $order->getForeignId('debitor_id'));
             $debitorAccount->__set('erp_context_id', $receipt->__get('erp_context_id'));
             $debitorAccount->__set('usage', $receipt->__get('usage'));
             $debitorAccount->__set('booking_id', $booking->getId());
             //$debitorAccount->__set('open_item_id', $openItem->getId());
             $debitorAccount->__set('is_cancelled', $receipt->__get('is_cancelled'));
             $debitorAccount->__set('is_cancellation', $receipt->__get('is_cancellation'));
             if ($receipt->isInvoice()) {
                 $debitorAccount->__set('item_type', 'DEBIT');
                 $debitorAccount->__set('create_date', new Zend_Date($receipt->__get('invoice_date')));
                 $debitorAccount->__set('value_date', new Zend_Date($receipt->__get('invoice_date')));
                 $debitorAccount->__set('s_brutto', $totalBrutto);
             }
             if ($receipt->isCredit()) {
                 $debitorAccount->__set('item_type', 'CREDIT');
                 $debitorAccount->__set('create_date', new Zend_Date($receipt->__get('credit_date')));
                 $debitorAccount->__set('value_date', new Zend_Date($receipt->__get('credit_date')));
                 $debitorAccount->__set('h_brutto', $totalBrutto * -1);
             }
             $this->create($debitorAccount);
         }
     }
 }
Пример #14
0
 /**
  * 
  * Export to DATEV
  * @param string $filters Json encoded filters
  */
 public function exportFibu($filters)
 {
     set_time_limit(0);
     $db = Tinebase_Core::getDb();
     $tm = Tinebase_TransactionManager::getInstance();
     $tId = $tm->startTransaction($db);
     try {
         $filters = Zend_Json::decode($filters);
         $checkFilter = new Billing_Model_OpenItemFilter($filters, 'AND');
         $pagination = array('sort' => 'op_nr', 'dir' => 'ASC');
         $oIController = Billing_Controller_OpenItem::getInstance();
         $debController = Billing_Controller_Debitor::getInstance();
         $rController = Billing_Controller_Receipt::getInstance();
         $oController = Billing_Controller_Order::getInstance();
         $oPController = Billing_Controller_OrderPosition::getInstance();
         $aController = Billing_Controller_Article::getInstance();
         $cController = Addressbook_Controller_Contact::getInstance()->_setRightChecks(false)->_setContainerACLChecks(false);
         // if filter contains fibu_exp_date-filter -> force reexport!
         if (!$checkFilter->isFilterSet('fibu_exp_date')) {
             $fibuFilter = array('field' => 'fibu_exp_date', 'operator' => 'isnull', 'value' => '');
             $filters[] = $fibuFilter;
         }
         $filter = new Billing_Model_OpenItemFilter($filters, 'AND');
         $openItemIds = $oIController->search($filter, new Tinebase_Model_Pagination($pagination), false, true);
         /*
         			 *
         					- Rechnungsnummer (redundant für alle Positionen)
         					
         					- Rechnungsdatum (redundant für alle Positionen)
         					
         					- Datum Fälligkeit (redundant für alle Positionen)
         					
         					- Debitorennummer (redundant für alle Positionen)
         					
         					- Betrag netto
         					
         					- MWST
         					
         					- Betrag brutto
         					
         					- Artikelnummer
         					
         					- Artikelbezeichnung
         					
         					- Erlöskonto (aus Artikelstamm gemäß MWST = 0 oder > 0)
         *
         
         Umsatz (mit Soll/Haben-Kz)	Konto	Gegenkonto (ohne BU-Schl�ssel)	Belegdatum	Belegfeld 1	Buchungstext	Kennzeichen			D_Opos
         299,22						1000200	440000							12.01.2012	101			Rechnung101		Forderungsart "1"	D_Opos
         
         
         
         *
         */
         $csvArray = array('Umsatz (mit Soll/Haben-Kz)', 'Konto', 'Gegenkonto (ohne BU-Schlüssel)', 'Belegdatum', 'Belegfeld', 'Buchungstext', 'Kennzeichen', 'D_Opos');
         /*
         	    	 * 
         	    	 * 
         	    	  	- Debitorennummer
         
         				- Vorname
         				
         				- Name
         				
         				- Anrede
         				
         				- Titel
         				
         				- Firma 1
         				
         				- Firma 2
         				
         				- Zusatz
         				
         				- Straße
         				
         				- PLZ
         				
         				- Ort
         				
         				- Land
         				
         Kontonummer	Unternehmen			Anrede	Titel		Vorname	Name1	Adressattyp	UST ID	Stra�e	Postfach	Postleitzahl	Ort	Land	Bankleitzahl 1	Bankbez. 1	Bank-Kontonummer 1	Bank-L�nderkennz. 1	IBAN-Nr. 1	SWIFT-Code 1	Bankleitzahl 2	Bankbez. 2	Bank-Kontonummer2	Bank-L�nderkennz. 2	IBAN-Nr. 2	SWIFT-Code 2
         5841100		Acuarios Jandia Sotavento Beach Club B.Lehmann				Lehmann & Buschmann	2	DE111667148	Wefelen 27		35627	Costa-Calma/Fuerte.	Spanien	70050000	Bayern LB M�nchen	2034343	DE	DE14700500000002034343	BYLADEMM						
         5841200							Herr	Prof. Dr.	Hansi	Gustavo	1	DE111667148	Wefelen 29		52134	Herzogenrath		39050000	Sparkasse Aachen	47176987									
         */
         $debsArray = array('Kontonummer', 'Unternehmen', 'Anrede', 'Titel', 'Vorname', 'Name1', 'Adressattyp', 'UST ID', 'Straße', 'Postfach', 'Postleitzahl', 'Ort', 'Land', 'Bankleitzahl 1', 'Bankbez. 1', 'Bank-Kontonummer 1', 'Bank-Länderkennz. 1', 'IBAN-Nr. 1', 'SWIFT-Code 1', 'Bankbez. 2', 'Bank-Kontonummer 2', 'Bank-Länderkennz. 2', 'IBAN-Nr. 2', 'SWIFT-Code 2');
         $tempFilePath = CSopen::instance()->getCustomerPath() . '/customize/data/documents/temp/';
         $itemsFilename = $tempFilePath . strftime('%Y%m%d%H%M%S') . 'items_temp.csv';
         $debsFilename = $tempFilePath . strftime('%Y%m%d%H%M%S') . 'debs_temp.csv';
         $zipFilename = $tempFilePath . strftime('%Y%m%d%H%M%S') . 'archive_temp.csv';
         if (file_exists($itemsFilename)) {
             unlink($itemsFilename);
         }
         $itemsFileHandle = fopen($itemsFilename, 'w');
         //$filePointer, $dataArray, $delimiter=',', $enclosure='"', $escapeEnclosure='"'
         Tinebase_Export_Csv::fputcsvEncoding('ISO-8859-1//TRANSLIT', $itemsFileHandle, $csvArray, chr(9), '"', '');
         if (file_exists($debsFilename)) {
             unlink($debsFilename);
         }
         $debsFileHandle = fopen($debsFilename, 'w');
         Tinebase_Export_Csv::fputcsvEncoding('ISO-8859-1//TRANSLIT', $debsFileHandle, $debsArray, chr(9), '"', '');
         $zeroVat = Billing_Controller_Vat::getInstance()->getByName('0');
         $creditorZeroAccount = $zeroVat->__get('credit_account');
         $fibuExpDate = new Zend_Date(strftime('%Y-%m-%d'));
         $adType = 1;
         foreach ($openItemIds as $openItemId) {
             $oI = Billing_Controller_OpenItem::getInstance()->get($openItemId);
             $oI->flatten();
             $receiptId = $oI->__get('receipt_id');
             $receipt = $rController->get($receiptId);
             if (!$receipt->__get('fibu_exp_date')) {
                 $receipt->__set('fibu_exp_date', $fibuExpDate);
                 $receipt->flatten();
                 //print_r($receipt);
                 $rController->update($receipt);
             }
             $oI->__set('fibu_exp_date', $fibuExpDate);
             $oIController->update($oI);
             $positions = $rController->getOrderPositions($receiptId);
             //$sums = $rController->getReceiptSumValues($receiptId);
             $orderId = $receipt->__get('order_id');
             $order = $oController->get($orderId);
             $debitor = $order->__get('debitor_id');
             $debitorNr = $debitor->__get('debitor_nr');
             $contact = $debitor->getForeignRecord('contact_id', $cController);
             $debitor->flatten();
             $contactId = $debitor->__get('contact_id');
             $name = $contact->__get('n_fileas');
             $receiptNr = $oI->__get('receipt_nr');
             $adType = 1;
             if ($contact->__get('org_name') && $contact->getLetterDrawee()->isCompany()) {
                 $adType = 2;
             }
             $dueDate = $receipt->__get('due_date');
             if (!$debitor->__get('fibu_exp_date')) {
                 $drawee = $contact->getInvoiceDrawee();
                 $postal = $drawee->getPostalAddress();
                 $pf = '';
                 $street = '';
                 if (strpos($postal->getStreet(), 'Post')) {
                     $pf = $postal->getStreet();
                 } else {
                     $street = $postal->getStreet();
                 }
                 // export debitor
                 $debsArray = array($debitorNr, $contact->__get('org_name'), $drawee->getSalutationText(), $drawee->getTitle(), $contact->__get('n_given'), $contact->__get('n_family'), $adType, $debitor->__get('ust_id'), $street, $pf, $postal->getPostalCode(), $postal->getLocation(), $postal->getCountryCode('DE'), $contact->__get('bank_code'), $contact->__get('bank_name'), $contact->__get('bank_account_number'), trim($contact->__get('bank_code')) ? $postal->getCountryCode() : '', '', '', '', '', '', '', '', '');
                 Tinebase_Export_Csv::fputcsvEncoding('ISO-8859-1//TRANSLIT', $debsFileHandle, $debsArray, chr(9), '"', '');
                 $debitor->__set('fibu_exp_date', new Zend_Date());
                 $debController->update($debitor);
             }
             //	    		$values = array();
             //	    		$values[] = array(
             //				'value' => $sums['total']['sum']['netto'],
             //				'credit_account' => $creditorZeroAccount
             //	    		);
             //
             //	    		foreach($sums['vat_sums'] as $vatSum){
             //	    			$values[] = array(
             //					'value' =>  $vatSum['sum']['netto'],
             //					'credit_account' =>  $vatSum['sum']['vatcreditaccount']
             //	    			);
             //	    		}
             //Umsatz (mit Soll/Haben-Kz)	Konto	Gegenkonto (ohne BU-Schl�ssel)	Belegdatum	Belegfeld 1	Buchungstext	Kennzeichen			D_Opos
             //299,22						1000200	440000							12.01.2012	101			Rechnung101		Forderungsart "1"	D_Opos
             $receiptText = '';
             if ($receipt->__get('type') == Billing_Model_Receipt::TYPE_INVOICE) {
                 $receiptText = 'Rechnung';
                 $receiptDate = $receipt->__get('invoice_date');
                 $receiptNr = $receipt->__get('invoice_nr');
             } else {
                 $receiptText = 'Gutschrift';
                 $receiptDate = $receipt->__get('credit_date');
                 $receiptNr = $receipt->__get('credit_nr');
             }
             $bookingText = $receiptText . $receiptNr;
             /*if($oI->__get('usage')){
             			$bookingText = $oI->__get('usage');
             		}*/
             $paymentMethodId = $receipt->getForeignId('payment_method_id');
             $mapPaymentMethod = array('PREPAYMENT' => 1, 'BANKTRANSFER' => 2, 'DEBIT' => 3, 'CASH' => 4, 'CREDITCARD' => 5, 'PAYPAL' => 6, 'IMMEDIATETRANSFER' => 7);
             $intPaymentMethod = $mapPaymentMethod[$paymentMethodId];
             foreach ($positions as $position) {
                 $brutto = $position->__get('total_brutto');
                 //$vatSum = $oPController->getVatSum($position);
                 //$article = $position->getForeignRecord('article_id', $aController);
                 //$articleName = $article->__get('name');
                 //$articleNr = $article->__get('article_nr');
                 $revAccount = $oPController->getRevenueAccountAccordingToVat($position) . '00';
                 $csvArray = array(number_format($brutto, 2, ',', '.'), $debitorNr, $revAccount, \org\sopen\app\util\format\Date::format($receiptDate), $receiptNr, $bookingText, 'Forderungsart ' . $intPaymentMethod, 'D_Opos');
                 Tinebase_Export_Csv::fputcsvEncoding('ISO-8859-1//TRANSLIT', $itemsFileHandle, $csvArray, chr(9), '"', '');
             }
         }
         fclose($itemsFileHandle);
         fclose($debsFileHandle);
         // -> generate zip archive containing Debitoren.csv and Forderungen.csv
         $zip = new ZipArchive();
         $zipFile = $zipFilename . ".zip";
         if ($zip->open($zipFile, ZIPARCHIVE::CREATE) !== TRUE) {
             exit("cannot open <{$zipFile}>\n");
         }
         $zip->addFile($debsFilename, 'Debitoren.csv');
         $zip->addFile($itemsFilename, 'Forderungen.csv');
         $zip->close();
         $tm->commitTransaction($tId);
     } catch (Exception $e) {
         $tm->rollback($tId);
         echo $e->__toString();
         exit;
     }
     header("Content-type: application/zip;\n");
     header("Content-Transfer-Encoding: binary");
     $len = filesize($zipFile);
     header("Content-Length: {$len};\n");
     header("Content-Disposition: attachment; filename=\"DATEV.zip\";\n\n");
     readfile($zipFile);
     unlink($zipFile);
     unlink($debsFilename);
     unlink($itemsFilename);
 }
Пример #15
0
 protected function appendDependentRecords($record)
 {
     if ($record->__get('debitor_id')) {
         $this->appendForeignRecordToRecord($record, 'debitor_id', 'debitor_id', 'id', new Billing_Backend_Debitor());
         $debitor = $record->__get('debitor_id');
         try {
             if (is_object($debitor)) {
                 $contactId = $debitor->__get('contact_id');
             } else {
                 $contactId = $debitor->contact_id;
             }
             $contact = Addressbook_Controller_Contact::getInstance()->get($contactId);
             if (is_object($debitor)) {
                 $debitor->__set('contact_id', $contact->toArray());
             } else {
                 $debitor->contact_id = $contact->toArray();
             }
         } catch (Exception $e) {
         }
         $record->__set('debitor_id', $debitor);
     }
     if ($record->__get('order_id')) {
         $this->appendForeignRecordToRecord($record, 'order_id', 'order_id', 'id', new Billing_Backend_Order());
         $order = $record->__get('order_id');
         try {
             if ($order instanceof Billing_Model_Order) {
                 $debitorId = $order->__get('debitor_id');
             } else {
                 $debitorId = $order->debitor_id;
             }
             $debitor = Billing_Controller_Debitor::getInstance()->get($debitorId);
             if ($order instanceof Billing_Model_Order) {
                 $order->__set('debitor_id', $debitor->toArray());
             } else {
                 $order->debitor_id = $debitor->toArray();
             }
         } catch (Exception $e) {
         }
         $record->__set('order_id', $order);
     }
     if ($record->__get('receipt_id')) {
         $this->appendForeignRecordToRecord($record, 'receipt_id', 'receipt_id', 'id', new Billing_Backend_Receipt());
         $receipt = $record->getForeignRecordBreakNull('receipt_id', Billing_Controller_Receipt::getInstance());
         if ($receipt) {
             try {
                 if ($receipt instanceof Billing_Model_Order) {
                     $orderId = $receipt->__get('order_id');
                 } else {
                     $orderId = $receipt->order_id;
                 }
                 $order = Billing_Controller_Order::getInstance()->get($orderId);
                 if ($order instanceof Billing_Model_Order) {
                     $receipt->__set('order_id', $order->toArray());
                 } else {
                     $receipt->order_id = $order->toArray();
                 }
             } catch (Exception $e) {
             }
             $record->__set('receipt_id', $receipt);
         }
     }
     if ($record->__get('account_system_id')) {
         $this->appendForeignRecordToRecord($record, 'account_system_id', 'account_system_id', 'id', new Billing_Backend_AccountSystem());
     }
     if ($record->__get('account_system_id_haben')) {
         $this->appendForeignRecordToRecord($record, 'account_system_id_haben', 'account_system_id_haben', 'id', new Billing_Backend_AccountSystem());
     }
     if ($record->__get('booking_id')) {
         $this->appendForeignRecordToRecord($record, 'booking_id', 'booking_id', 'id', new Billing_Backend_Booking());
     }
     if ($record->__get('account_booking_id')) {
         $this->appendForeignRecordToRecord($record, 'account_booking_id', 'account_booking_id', 'id', new Billing_Backend_AccountBooking());
     }
     if ($record->__get('payment_method_id')) {
         $this->appendForeignRecordToRecord($record, 'payment_method_id', 'payment_method_id', 'id', new Billing_Backend_PaymentMethod());
     }
     if ($record->__get('open_item_id')) {
         $this->appendForeignRecordToRecord($record, 'open_item_id', 'open_item_id', 'id', new Billing_Backend_OpenItem());
     }
     if ($record->__get('return_debit_base_payment_id')) {
         $this->appendForeignRecordToRecord($record, 'return_debit_base_payment_id', 'return_debit_base_payment_id', 'id', new Billing_Backend_Payment());
     }
     /*if($record->__get('batch_job_dta_id')){
     		$this->appendForeignRecordToRecord($record, 'batch_job_dta_id', 'batch_job_dta_id', 'id', new Billing_Backend_BatchJobDta());
         } */
 }