/** * Record a payment of an outstanding rent balance * @param int $arrears_id The ID used to identify the arrears * @param int $amount The amount payed to settle the arrears * @param string $start Date specifying start of a month * @param string $end Date specifying end of a month * @param string $mode The mode of payment for the transaction * @param object $session A session object declared in global scope * @return boolean */ public function payArrears($arrears_id, $amount, $start, $end, $mode, $session) { $arrears = Arrears::findById($arrears_id); $bal = $arrears->getAmountOwed(); $bal = (int) $this->_sanitizeMoneyString($bal); $db = Database::getInstance(); $mysqli = $db->getConnection(); // Initialize object to keep track of transaction details $ap = new ArrearsPaid(); $ap->setTenantId($this->id); $ap->setPaymentAmount($amount); $ap->setStartPeriod($start); $ap->setEndPeriod($end); $ap->setDatePaid(); $ap->generateReceiptNo(); $ap->setPaymentMode($mode); $ap->setReceivingAgent($session); if ($amount == $bal) { // All arrears cleared $status = PaymentStatus::findByPeriod($this->id, $start, $end); $status->setStatus(1); $mysqli->autocommit(false); $ap->save(); $arrears->delete(); $_SESSION['arrears_obj'] = $this->arrears_obj = serialize($arrears); $status->save(); if (!$mysqli->commit()) { $mysqli->rollback(); $mysqli->autocommit(true); return false; } else { $mysqli->autocommit(true); return true; } } elseif ($amount < $bal) { // Arrears partially cleared $new_arrears = (int) $bal - (int) $amount; $arrears->setAmountOwed($new_arrears); $mysqli->autocommit(false); $ap->save(); $arrears->save(); if (!$mysqli->commit()) { $mysqli->rollback(); $mysqli->autocommit(true); return false; } else { $mysqli->autocommit(true); return true; } } }