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; }
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(); }
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); }
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; }