Пример #1
0
 function revalue($data, &$errors = array())
 {
     if (empty($data['transaction_date'])) {
         $data['transaction_date'] = date(DATE_FORMAT);
     }
     $glperiod = GLPeriod::getPeriod(fix_date($data['transaction_date']));
     if (!$glperiod || count($glperiod) == 0) {
         $errors[] = 'No period exists for this date';
         return false;
     }
     $data['value'] = bcsub($this->glbalance(), $data['new_balance']);
     $data['glperiods_id'] = $glperiod['id'];
     $data['source'] = 'C';
     $data['type'] = 'V';
     $data['glaccount_id'] = $this->currency_detail->writeoff_glaccount_id;
     $data['glcentre_id'] = $this->currency_detail->glcentre_id;
     GLTransaction::setTwinCurrency($data);
     $gl_trans[] = GLTransaction::Factory($data, $errors);
     $data['value'] = bcmul($data['value'], -1);
     $data['glaccount_id'] = $this->glaccount_id;
     $data['glcentre_id'] = $this->glcentre_id;
     GLTransaction::setTwinCurrency($data);
     $gl_trans[] = GLTransaction::Factory($data, $errors);
     $db = DB::Instance();
     $db->StartTrans();
     if (count($errors) == 0 && GLTransaction::saveTransactions($gl_trans, $errors)) {
         return $db->CompleteTrans();
     }
     $errors[] = 'Failed to save GL Transaction';
     $db->FailTrans();
     $db->CompleteTrans();
     return false;
 }
Пример #2
0
 public function post($errors = array())
 {
     $db = db::Instance();
     // Check it hasn't been posted!
     if (!$this->isUnposted()) {
         $errors[] = 'Journal has already been posted';
         return FALSE;
     }
     // Check it is a standard journal
     if (!$this->isStandardJournal()) {
         $errors[] = 'Template Journal cannot be posted';
         return FALSE;
     }
     // Get all unposted transcations
     $this->NewTransactions();
     $sh = new SearchHandler($this->transactions, false);
     $sh->addConstraint($this->childConstraint());
     $unposted = $this->transactions->load($sh, null, RETURN_ROWS);
     // Save transactions to GL Transactions
     $db->startTrans();
     foreach ($unposted as $transaction) {
         unset($transaction['id']);
         $transaction['transaction_date'] = un_fix_date($this->transaction_date);
         $transaction['glperiods_id'] = $this->glperiods_id;
         GLTransaction::setTwinCurrency($transaction);
         $gltransaction = GLTransaction::Factory($transaction);
         if (!$gltransaction->save()) {
             $errors[] = 'Error saving journal transaction : ' . $db->ErrorMsg();
         } elseif (!$gltransaction->updateBalance($errors)) {
             $errors[] = 'Error updating GL balance : ' . $db->ErrorMsg();
         }
         if ($this->accrual == 't') {
             $transaction['glperiods_id'] = $this->accrual_period_id;
             $transaction['comment'] = 'Reverse ' . $transaction['comment'];
             $transaction['value'] = bcmul($transaction['value'], -1);
             $gltransaction = GLTransaction::Factory($transaction);
             if (!$gltransaction->save()) {
                 $errors[] = 'Error saving journal transaction : ' . $db->ErrorMsg();
             } elseif (!$gltransaction->updateBalance($errors)) {
                 $errors[] = 'Error updating GL balance : ' . $db->ErrorMsg();
             }
         }
     }
     // Update the header status if no errors so far
     if (empty($errors) && !$this->update($this->{$this->idField}, 'status', $this->postedStatus())) {
         $errors[] = 'Error updating journal header status : ' . $db->ErrorMsg();
     }
     // Delete the unposted transactions if posted OK
     if (count($errors) > 0 || !$this->transactions->delete($sh)) {
         $errors[] = 'Error updating posted journals : ' . $db->ErrorMsg();
         $db->FailTrans();
     }
     return $db->CompleteTrans();
 }
Пример #3
0
 function loadJournals($data, &$errors = array(), &$warnings = array())
 {
     $system = system::Instance();
     $data_in = $this->convertData($data);
     if (is_array($data_in) && count($data_in) > 0) {
         $db = DB::Instance();
         $docref = $db->GenID('gl_transactions_docref_seq');
         $gl_transactions = array();
         foreach ($data_in as $gl_data) {
             foreach ($gl_data as $model => $fields) {
                 $glperiod = GLPeriod::getPeriod(fix_date($fields['transaction_date']));
                 if (!$glperiod || count($glperiod) == 0) {
                     $errors[] = 'No period exists for this date';
                     break;
                 }
                 $fields['source'] = 'G';
                 $fields['type'] = 'J';
                 $fields['docref'] = $docref;
                 $fields['glperiods_id'] = $glperiod['id'];
                 GLTransaction::setTwinCurrency($fields);
                 $gl_transaction = GLTransaction::Factory($fields, $errors);
                 $gl_transactions[] = $gl_transaction;
             }
         }
         if (count($gl_transactions) > 0 && !GLTransaction::saveTransactions($gl_transactions, $errors)) {
             $errors[] = 'Failed to save journal import';
         }
     } else {
         $errors[] = 'No data found or error converting data';
     }
     if (count($errors) > 0) {
         return false;
     }
     return array('internal_id' => $gl_transaction->id, 'internal_identifier_field' => 'docref', 'internal_identifier_value' => $docref);
 }
Пример #4
0
 public static function makeFromVATJournalEntry($gl_data, &$errors = array())
 {
     $db = DB::Instance();
     $net = $gl_data['value']['net'];
     $vat = $gl_data['value']['vat'];
     $gl_transactions = array();
     // Write Net Value
     $gl_data['docref'] = $db->GenID('gl_transactions_docref_seq');
     $gl_data['value'] = $net;
     GLTransaction::setTwinCurrency($gl_data);
     $gl_transactions[] = GLTransaction::Factory($gl_data, $errors);
     // Write Vat Value
     $gl_data['value'] = $vat;
     GLTransaction::setTwinCurrency($gl_data);
     $gl_transactions[] = GLTransaction::Factory($gl_data, $errors);
     // Write Net contra entry
     $gl_data['docref'] = $db->GenID('gl_transactions_docref_seq');
     $gl_data['value'] = bcmul($net, -1);
     GLTransaction::setTwinCurrency($gl_data);
     $gl_transactions[] = GLTransaction::Factory($gl_data, $errors);
     // Write Vat control entry
     $gl_data['value'] = bcmul($vat, -1);
     $gl_data['glaccount_id'] = $gl_data['vat_account'];
     $glparams = DataObjectFactory::Factory('GLParams');
     $gl_data['glcentre_id'] = $glparams->balance_sheet_cost_centre();
     GLTransaction::setTwinCurrency($gl_data);
     $gl_transactions[] = GLTransaction::Factory($gl_data, $errors);
     return $gl_transactions;
 }