Ejemplo n.º 1
0
 public function updateBalance(ELTransaction $eltrans)
 {
     $cc = new ConstraintChain();
     $id = $this->{$this->idField};
     $cc->add(new Constraint('employee_id', '=', $id));
     $amount = $eltrans->outstandingBalance($cc);
     if ($this->update($id, 'expenses_balance', $amount)) {
         return true;
     }
     return false;
 }
Ejemplo n.º 2
0
 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();
     }
 }
Ejemplo n.º 3
0
 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();
 }