/** * Pay the rent of tenant's premises for a specified period * @param object $rentObj * @param string $start The start period of the month * @param string $end The end period of the month * @return boolean */ public function payRent(Rent $rentObj, $start, $end) { $db = Database::getInstance(); $mysqli = $db->getConnection(); $monthly_rent = Room::findByTenantId($this->id)->getRent(); $monthly_rent = $this->_sanitizeMoneyString($monthly_rent); $rent_paid = $rentObj->getPaymentAmount(); $rent_paid = $this->_sanitizeMoneyString($rent_paid); if ($monthly_rent == $rent_paid) { // No outstanding arrears $pst = new PaymentStatus(); $pst->setTenantId($this->id); $pst->setStartPeriod($start); $pst->setEndPeriod($end); $pst->setStatus(1); $mysqli->autocommit(false); $rentObj->save(); $pst->save(); if (!$mysqli->commit()) { $mysqli->rollback(); $mysqli->autocommit(true); return false; } else { $mysqli->autocommit(true); return true; } } elseif ($rent_paid < $monthly_rent) { // Tenant has arrears $bal = $monthly_rent - $rent_paid; $arrears = new Arrears(); $arrears->setTenantId($this->id); $arrears->setAmountOwed($bal); $arrears->setStartPeriod($start); $arrears->setEndPeriod($end); // Payment Status set to 0 - denoting incompletion $pst = new PaymentStatus(); $pst->setTenantId($this->id); $pst->setStartPeriod($start); $pst->setEndPeriod($end); $pst->setStatus(0); // Save changes to database $mysqli->autocommit(false); $rentObj->save(); $arrears->save(); $pst->save(); if (!$mysqli->commit()) { $mysqli->rollback(); $mysqli->autocommit(true); return false; } else { $mysqli->autocommit(true); return true; } } }