public function savePayment() { $flash = Flash::Instance(); $errors = array(); if (!$this->checkParams('CBTransaction')) { sendBack(); } $data = $this->_data['CBTransaction']; $data['source'] = 'E'; $gl_params = DataObjectFactory::Factory('GLParams'); $data['glaccount_id'] = $gl_params->expenses_control_account(); $data['glcentre_id'] = $gl_params->balance_sheet_cost_centre(); if (!isset($data['employee_id'])) { $employee = $this->_uses[$this->modeltype]; $employee->loadBy('person_id', $data['person_id']); $data['employee_id'] = $employee->id; } $result = ELTransaction::saveTransaction($data, $errors); if ($result !== false) { $flash->addMessage('Expense Payment saved'); if (isset($data['employee_id']) && !empty($data['employee_id'])) { sendTo($this->name, 'view', $this->_modules, array('id' => $data['employee_id'])); } else { sendTo($this->name, 'index', $this->_modules); } } else { $flash->addErrors($errors); if (isset($data['employee_id']) && !empty($data['employee_id'])) { $this->_data['employee_id'] = $data['employee_id']; } $this->refresh(); } }
public function pay_claim($data, &$errors = array()) { if ($this->paid()) { $errors[] = 'Expense Claim has already been paid'; return false; } $db = DB::Instance(); $db->StartTrans(); // TODO: may be able to reuse some of this code // but see EmployeesController::save_payment and EmployeesController::save_allocation $gl_params = DataObjectFactory::Factory('GLParams'); $data['glaccount_id'] = $gl_params->expenses_control_account(); $data['glcentre_id'] = $gl_params->balance_sheet_cost_centre(); $data['source'] = 'E'; $result = ELTransaction::saveTransaction($data, $errors); // Match the payment to the expense claim if (empty($errors)) { $exptrans = DataObjectFactory::Factory('ELTransaction'); $exptrans->loadBy(array('employee_id', 'transaction_type', 'status', 'our_reference'), array($this->employee_id, 'E', 'O', $this->expense_number)); if (!$exptrans->isLoaded()) { $errors[] = 'Error matching Expense Transaction to Payment'; $db->FailTrans(); } $paytrans = DataObjectFactory::Factory('ELTransaction'); $paytrans->load($data['ledger_transaction_id']); if (!$paytrans->isLoaded()) { $errors[] = 'Error loading payment : ' . $db->ErrorMsg(); $db->Failtrans(); } else { $base_total = bcmul($exptrans->gross_base_total, $paytrans->gross_base_total); $paytrans->status = $exptrans->status = 'P'; $exptrans->os_value = 0; $exptrans->twin_os_value = 0; $exptrans->base_os_value = 0; $exptrans->for_payment = 'f'; // Update the EL Transactions - Expense and matching Payment if (!$exptrans->saveForPayment($errors) || !$paytrans->saveForPayment($errors)) { $db->Failtrans(); } } } // Check for any currency conversion credit/debit if (empty($errors) && $base_total != 0) { $data = array(); $data['docref'] = $this->employee_id; $data['value'] = $base_total * -1; if (!ELTransaction::currencyAdjustment($data, $errors)) { $db->FailTrans(); } } // Update the Expense Claim header status if (empty($errors)) { $this->status = $this->statusPaid(); if (!$this->save()) { $message = $db->ErrorMsg(); if (!empty($message)) { $errors[] = $message; } $db->FailTrans(); } } return $db->CompleteTrans(); }