public function execute() { PHPWS_Core::initModClass('hms', 'HMS_Lottery.php'); PHPWS_Core::initModClass('hms', 'LotteryProcess.php'); $lotteryTerm = PHPWS_Settings::get('hms', 'lottery_term'); /******************************* * Gross number of application * *******************************/ $this->data['LOTTERY_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm); $this->data['SOPH_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SOPHOMORE); $this->data['SOPH_M_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SOPHOMORE, MALE); $this->data['SOPH_F_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SOPHOMORE, FEMALE); $this->data['JR_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_JUNIOR); $this->data['JR_M_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_JUNIOR, MALE); $this->data['JR_F_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_JUNIOR, FEMALE); $this->data['SR_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SENIOR); $this->data['SR_M_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SENIOR, MALE); $this->data['SR_F_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, CLASS_SENIOR, FEMALE); $this->data['M_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, null, MALE); $this->data['F_APPS'] = LotteryProcess::countGrossApplicationsByClassGender($lotteryTerm, null, FEMALE); /******************** * Net Applications * ********************/ $this->data['NET_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, null, null); $this->data['NET_SO_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SOPHOMORE); $this->data['NET_SO_M_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SOPHOMORE, MALE); $this->data['NET_SO_F_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SOPHOMORE, FEMALE); $this->data['NET_JR_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_JUNIOR); $this->data['NET_JR_M_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_JUNIOR, MALE); $this->data['NET_JR_F_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_JUNIOR, FEMALE); $this->data['NET_SR_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SENIOR); $this->data['NET_SR_M_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SENIOR, MALE); $this->data['NET_SR_F_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, CLASS_SENIOR, FEMALE); $this->data['NET_M_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, null, MALE); $this->data['NET_F_APPS'] = LotteryProcess::countNetAppsByClassGender($lotteryTerm, null, FEMALE); /**************** * Invites Sent * ****************/ $this->data['SO_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SOPHOMORE); $this->data['SO_M_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SOPHOMORE, MALE); $this->data['SO_F_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SOPHOMORE, FEMALE); $this->data['JR_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_JUNIOR); $this->data['JR_M_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_JUNIOR, MALE); $this->data['JR_F_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_JUNIOR, FEMALE); $this->data['SR_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SENIOR); $this->data['SR_M_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SENIOR, MALE); $this->data['SR_F_INVITES'] = LotteryProcess::countInvitesByClassGender($lotteryTerm, CLASS_SENIOR, FEMALE); //TODO make this based on lottery assignment reason $db = new PHPWS_DB('hms_assignment'); $db->addWhere('term', $lotteryTerm); $db->addWhere('reason', 'lottery'); $numLotteryAssigned = $db->select('count'); /*********************** * Outstanding Invites * */ $this->data['ROOMMATE_INVITES'] = LotteryProcess::countOutstandingRoommateInvites($lotteryTerm); $this->data['PENDING_SOPH_INVITES'] = LotteryProcess::countOutstandingInvites($lotteryTerm, CLASS_SOPHOMORE); $this->data['PENDING_JR_INVITES'] = LotteryProcess::countOutstandingInvites($lotteryTerm, CLASS_JUNIOR); $this->data['PENDING_SR_INVITES'] = LotteryProcess::countOutstandingInvites($lotteryTerm, CLASS_SENIOR); // Assignments $this->data['LOTTERY_ASSIGNED'] = $numLotteryAssigned; // Assignments by class $this->data['SOPH_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SOPHOMORE); $this->data['SOPH_MALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SOPHOMORE, MALE); $this->data['SOPH_FEMALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SOPHOMORE, FEMALE); $this->data['JR_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_JUNIOR); $this->data['JR_MALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_JUNIOR, MALE); $this->data['JR_FEMALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_JUNIOR, FEMALE); $this->data['SR_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SENIOR); $this->data['SR_MALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SENIOR, MALE); $this->data['SR_FEMALE_ASSIGNED'] = LotteryProcess::countLotteryAssignedByClassGender($lotteryTerm, CLASS_SENIOR, FEMALE); /*************************************** * Remaining unaffiliated applications * ***************************************/ $this->data['SO_M_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_SOPHOMORE, MALE); $this->data['SO_F_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_SOPHOMORE, FEMALE); $this->data['SO_ENTRIES_REMAIN'] = $this->data['SO_M_ENTRIES_REMAIN'] + $this->data['SO_F_ENTRIES_REMAIN']; $this->data['JR_M_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_JUNIOR, MALE); $this->data['JR_F_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_JUNIOR, FEMALE); $this->data['JR_ENTRIES_REMAIN'] = $this->data['JR_M_ENTRIES_REMAIN'] + $this->data['JR_F_ENTRIES_REMAIN']; $this->data['SR_M_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_SENIOR, MALE); $this->data['SR_F_ENTRIES_REMAIN'] = LotteryProcess::countRemainingApplicationsByClassGender($lotteryTerm, CLASS_SENIOR, FEMALE); $this->data['SR_ENTRIES_REMAIN'] = $this->data['SR_M_ENTRIES_REMAIN'] + $this->data['SR_F_ENTRIES_REMAIN']; $this->data['REMAINING_ENTRIES'] = LotteryProcess::countRemainingApplications($lotteryTerm); }
public function sendInvites() { HMS_Activity_Log::log_activity('hms', ACTIVITY_LOTTERY_EXECUTED, 'hms'); $this->output[] = "Lottery system invoked on " . date("d M, Y @ g:i:s", $this->now) . " ({$this->now})"; /** * ** * Check the hard cap. * Don't do anything if it's been reached. */ if (LotteryProcess::hardCapReached($this->term)) { $this->output[] = 'Hard cap reached. Done!'; return; } /** * ***************** * Reminder Emails * * ***************** */ $output = array(); if ($this->sendReminders) { $this->output[] = "Sending invite reminder emails..."; $this->sendWinningReminderEmails(); $output[] = "Sending roommate invite reminder emails..."; $this->sendRoommateReminderEmails(); } // check the jr/sr soft caps if (LotteryProcess::jrSoftCapReached($this->term)) { $this->inviteCounts[CLASS_JUNIOR][MALE] = 0; $this->inviteCounts[CLASS_JUNIOR][FEMALE] = 0; } if (LotteryProcess::srSoftCapReached($this->term)) { $this->inviteCounts[CLASS_SENIOR][MALE] = 0; $this->inviteCounts[CLASS_SENIOR][FEMALE] = 0; } /** * **** * Count the number of remaining entries * ******* */ try { // Count remaining applications by class and gender $this->applicationsRemaining = array(); foreach ($this->classes as $c) { foreach ($this->genders as $g) { $this->applicationsRemaining[$c][$g] = LotteryProcess::countRemainingApplicationsByClassGender($this->term, $c, $g); } } } catch (Exception $e) { $this->output[] = 'Error counting outstanding lottery entires, quitting. Exception: ' . $e->getMessage(); return; } $this->output[] = "{$this->applicationsRemaining[CLASS_SENIOR][MALE]} senior male lottery entries remaining"; $this->output[] = "{$this->applicationsRemaining[CLASS_SENIOR][FEMALE]} senior female lottery entries remaining"; $this->output[] = "{$this->applicationsRemaining[CLASS_JUNIOR][MALE]} junior male lottery entries remaining"; $this->output[] = "{$this->applicationsRemaining[CLASS_JUNIOR][FEMALE]} junior female lottery entries remaining"; $this->output[] = "{$this->applicationsRemaining[CLASS_SOPHOMORE][MALE]} sophomore male lottery entries remaining"; $this->output[] = "{$this->applicationsRemaining[CLASS_SOPHOMORE][FEMALE]} sophomore female lottery entries remaining"; /** * **************** * Send magic winner invites */ if ($this->sendMagicWinners) { $this->output[] = "Sending magic winner invites..."; while (($magicWinner = $this->getMagicWinner()) != null) { $student = StudentFactory::getStudentByBannerId($magicWinner['banner_id'], $this->term); $this->sendInvite($student); } } /** * **************** * Send Invites */ foreach ($this->classes as $c) { foreach ($this->genders as $g) { $this->output[] = "Sending {$this->inviteCounts[$c][$g]} invites for class: {$c}, gender: {$g}"; $this->output[] = "There are {$this->applicationsRemaining[$c][$g]} remaining applicants of that class and gender."; // While we need to send an invite and there is an applicant remaining // And we haven't exceeded our batch size while ($this->inviteCounts[$c][$g] > $this->numInvitesSent[$c][$g] && $this->applicationsRemaining[$c][$g] >= 1 && $this->numInvitesSent['TOTAL'] <= MAX_INVITES_PER_BATCH) { // Send an invite to the proper class & gender $winningRow = $this->chooseWinner($c, $g); $student = StudentFactory::getStudentByBannerId($winningRow['banner_id'], $this->term); $this->sendInvite($student); // Update counts $this->numInvitesSent[$c][$g]++; $this->applicationsRemaining[$c][$g]--; } } } $this->output[] = "Done. Sent {$this->numInvitesSent['TOTAL']} invites total."; }