X-Git-Url: http://wagnertech.de/git?a=blobdiff_plain;f=plugins%2FMonthlyQuota.class.php;h=c8559ad46371f1cb0166034923044fde0e746291;hb=61284ea9e69220c9fc6a537bf0437584b1525367;hp=a4be6ee32d8578a75fd254a2404ff294373bc4c6;hpb=bf5ddc4f34213ffe75d6d601c16148a3fe506455;p=timetracker.git diff --git a/plugins/MonthlyQuota.class.php b/plugins/MonthlyQuota.class.php index a4be6ee3..c8559ad4 100644 --- a/plugins/MonthlyQuota.class.php +++ b/plugins/MonthlyQuota.class.php @@ -32,21 +32,24 @@ import('ttTimeHelper'); class MonthlyQuota { var $db; // Database connection. - var $team_id; // Team id. + var $group_id; // Group id. + var $org_id; // Organization id. function __construct() { $this->db = getConnection(); global $user; - $this->team_id = $user->team_id; + $this->group_id = $user->getGroup(); + $this->org_id = $user->org_id; } // update - deletes a quota, then inserts a new one. public function update($year, $month, $minutes) { - $team_id = $this->team_id; - $deleteSql = "DELETE FROM tt_monthly_quotas WHERE year = $year AND month = $month AND team_id = $team_id"; + $deleteSql = "delete from tt_monthly_quotas". + " where year = $year and month = $month and group_id = $this->group_id and org_id = $this->org_id"; $this->db->exec($deleteSql); if ($minutes){ - $insertSql = "INSERT INTO tt_monthly_quotas (team_id, year, month, minutes) values ($team_id, $year, $month, $minutes)"; + $insertSql = "insert into tt_monthly_quotas (group_id, org_id, year, month, minutes)". + " values ($this->group_id, $this->org_id, $year, $month, $minutes)"; $affected = $this->db->exec($insertSql); return (!is_a($affected, 'PEAR_Error')); } @@ -64,8 +67,8 @@ class MonthlyQuota { // getSingle - obtains a quota for a single month. private function getSingle($year, $month) { - $team_id = $this->team_id; - $sql = "SELECT minutes FROM tt_monthly_quotas WHERE year = $year AND month = $month AND team_id = $team_id"; + $sql = "select minutes from tt_monthly_quotas". + " where year = $year and month = $month and group_id = $this->group_id and org_id = $this->org_id"; $reader = $this->db->query($sql); if (is_a($reader, 'PEAR_Error')) { return false; @@ -78,13 +81,42 @@ class MonthlyQuota { // If we did not find a record, return a calculated monthly quota. $numWorkdays = $this->getNumWorkdays($month, $year); global $user; - return $numWorkdays * $user->workday_minutes; + return $numWorkdays * $user->getWorkdayMinutes(); } - // getMany - returns an array of quotas for a given year for team. + // getUserQuota - obtains a quota for user for a single month. + // This quota is adjusted by quota_percent value for user. + public function getUserQuota($year, $month) { + global $user; + + $minutes = $this->getSingle($year, $month); + $userMinutes = (int) $minutes * $user->getQuotaPercent() / 100; + return $userMinutes; + } + + // getUserQuotaFrom1st - obtains a quota for user + // from 1st of the month up to and inclusive of $selected_date. + public function getUserQuotaFrom1st($selected_date) { + // TODO: we may need a better algorithm here. Review. + $monthQuotaMinutes = $this->getUserQuota($selected_date->mYear, $selected_date->mMonth); + $workdaysInMonth = $this->getNumWorkdays($selected_date->mMonth, $selected_date->mYear); + + // Iterate from 1st up to selected date. + $workdaysFrom1st = 0; + for ($i = 1; $i <= $selected_date->mDate; $i++) { + $date = ttTimeHelper::dateInDatabaseFormat($selected_date->mYear, $selected_date->mMonth, $i); + if (!ttTimeHelper::isWeekend($date) && !ttTimeHelper::isHoliday($date)) { + $workdaysFrom1st++; + } + } + $quotaMinutesFrom1st = (int) ($monthQuotaMinutes * $workdaysFrom1st / $workdaysInMonth); + return $quotaMinutesFrom1st; + } + + // getMany - returns an array of quotas for a given year for group. private function getMany($year){ - $team_id = $this->team_id; - $sql = "SELECT month, minutes FROM tt_monthly_quotas WHERE year = $year AND team_id = $team_id"; + $sql = "select month, minutes from tt_monthly_quotas". + " where year = $year and group_id = $this->group_id and org_id = $this->org_id"; $result = array(); $res = $this->db->query($sql); if (is_a($res, 'PEAR_Error')) { @@ -107,6 +139,7 @@ class MonthlyQuota { // Iterate through the entire month. for ($i = 1; $i <= $daysInMonth; $i++) { $date = "$year-$month-$i"; + $date = ttTimeHelper::dateInDatabaseFormat($year, $month, $i); if (!ttTimeHelper::isWeekend($date) && !ttTimeHelper::isHoliday($date)) { $workdaysInMonth++; } @@ -128,7 +161,7 @@ class MonthlyQuota { } global $user; - $localizedPattern = '/^([0-9]{1,3})?['.$user->decimal_mark.'][0-9]{1,4}h?$/'; + $localizedPattern = '/^([0-9]{1,3})?['.$user->getDecimalMark().'][0-9]{1,4}h?$/'; if (preg_match($localizedPattern, $value )) { // decimal values like 000.5, 999.25h, ... .. 999.9999h (or with comma) return true; } @@ -149,11 +182,11 @@ class MonthlyQuota { } global $user; - $localizedPattern = '/^([0-9]{1,3})?['.$user->decimal_mark.'][0-9]{1,4}h?$/'; + $localizedPattern = '/^([0-9]{1,3})?['.$user->getDecimalMark().'][0-9]{1,4}h?$/'; if (preg_match($localizedPattern, $value )) { // decimal values like 000.5, 999.25h, ... .. 999.9999h (or with comma) // Strip optional h in the end. $value = trim($value, 'h'); - if ($user->decimal_mark == ',') + if ($user->getDecimalMark() == ',') $value = str_replace(',', '.', $value); return (float) $value; }