CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/HrWeb/IllnessLog/IllnessLogsPage.php

Summary

Maintainability
D
1 day
Test Coverage
<?php

include(__DIR__ . '/../../../../config.php');
if (!class_exists('FannieAPI')) {
    include(__DIR__ . '/../../../../classlib2.0/FannieAPI.php');
}

use COREPOS\Fannie\Plugin\HrWeb\sql\HrEmployeesModel as EmployeesModel;
use COREPOS\Fannie\Plugin\HrWeb\sql\IllnessTypesModel as IllnessTypesModel;
use COREPOS\Fannie\Plugin\HrWeb\sql\IllnessLogsModel as IllnessLogsModel;
use COREPOS\Fannie\Plugin\HrWeb\sql\IllnessLogsIllnessTypesModel as LogTypeMapModel;
use COREPOS\Fannie\API\lib\FannieUI;

class IllnessLogsPage extends FannieRESTfulPage
{
    protected $header = 'Illness Logs';
    protected $title = 'Illness Logs';
    public $default_db = 'wfc_hr';
    protected $must_authenticate = true;
    protected $auth_classes = array('hr_editor', 'illness_editor', 'illness_entry');

    protected function post_id_handler()
    {
        $uid = FannieAuth::getUID($this->current_user);
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $dbc = FannieDB::get($settings['HrWebDB']);
        $model = new IllnessLogsModel($dbc);
        $model->illnessLogID($this->id);
        $model->illnessDate(FormLib::get('iDate'));
        $model->exclusionary(FormLib::get('ex') ? 1 : 0);
        $model->MDHContacted(FormLib::get('mdh') ? 1 : 0);
        $model->comments(FormLib::get('comment'));
        $model->lastModified(date('Y-m-d H:i:s'));
        $model->modifiedBy($uid);
        $model->returnToWorkDate(FormLib::get('rtw'));
        $model->finalFormSubmitted(FormLib::get('ffs') ? 1 : 0);
        $model->inactive(FormLib::get('close') ? 1 : 0);
        $model->save();

        return 'IllnessLogsPage.php?id=' . $this->id;
    }

    protected function post_handler()
    {
        $uid = FannieAuth::getUID($this->current_user);
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $dbc = FannieDB::get($settings['HrWebDB']);
        $model = new IllnessLogsModel($dbc);
        $model->employeeID(FormLib::get('emp'));
        $model->illnessDate(FormLib::get('idate'));
        $model->exclusionary(FormLib::get('ex') ? 1 : 0);
        $model->MDHContacted(FormLib::get('mdh') ? 1 : 0);
        $model->dateCreated(date('Y-m-d H:i:s'));
        $model->createdBy($uid);
        $model->lastModified(date('Y-m-d H:i:s'));
        $model->modifiedBy($uid);
        $model->comments(FormLib::get('comment'));
        $iID = $model->save();
        $dbc->startTransaction();
        $model = new LogTypeMapModel($dbc);
        foreach (FormLib::get('type') as $t) {
            $model->illnessLogID($iID);
            $model->illnessTypeID($t);
            $model->save();
        }
        $dbc->commitTransaction();

        return 'IllnessLogsPage.php';
    }

    protected function get_id_view()
    {
        if (!FannieAuth::validateUserQuiet('hr_editor') && !FannieAuth::validateUserQuiet('illness_editor')) {
            return '<div class="alert alert-danger">You do not have access to this</div>';
        }
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $dbc = FannieDB::get($settings['HrWebDB']);
        $model = new IllnessLogsModel($dbc);
        $model->illnessLogID($this->id);
        if (!$model->load()) {
            return '<div class="alert alert-danger">No entry found</div>';
        }
        $emp = new EmployeesModel($dbc);
        $emp->employeeID($model->employeeID());
        $emp->load();

        $ret = '<p>
            <a href="IllnessLogsPage.php" class="btn btn-default">Back</a>
            </p> 
            <form method="post" action="IllnessLogsPage.php">
            <input type="hidden" name="id" value="' . $this->id . '" />';
        $ret .= '<p>
            <strong>Employee</strong>: ' . $emp->lastName() . ', ' . $emp->firstName() . '<br />
            <strong>Illness Date</strong>: ' . $model->illnessDate() . '<br />
            </p>';
        $ret .= sprintf('<div class="form-group">
            <label>Illness Date</label>
            <input type="text" name="iDate" class="form-control date-field" value="%s" />
            </div>', $model->illnessDate());
        $chkP = $dbc->prepare('SELECT illnessLogID FROM IllnessLogsIllnessTypes WHERE illnessLogID=? AND illnessTypeID=?');
        $type = new IllnessTypesModel($dbc);
        $ret .= '<div class="form-group">
            <label>Type(s)</label>
            <select name="type[]" class="form-control" multiple required size="5">';
        foreach ($type->find() as $t) {
            $selected = $dbc->getValue($chkP, array($this->id, $t->illnessTypeID())) ? 'selected' : '';
            $ret .= sprintf('<option %s value="%d">%s</option>',
                $selected, $t->illnessTypeID(), $t->illnessType());
        }
        $ret .= '</select></div>';
        $ret .= sprintf('<div class="form-group">
            <label><input type="checkbox" name="ex" value="1" %s />
            Exclusionary</label></div>',
            $model->exclusionary() ? 'checked' : '');
        $ret .= sprintf('<div class="form-group">
            <label><input type="checkbox" name="mdh" value="1" %s />
            MDH</label></div>',
            $model->MDHContacted() ? 'checked' : '');
        $ret .= '<div class="form-group"><label>Comments</label>
            <textarea name="comment" class="form-control" rows="5">'
            . $model->comments() . '</textarea></div>';
        $ret .= '<hr />';
        $ret .= sprintf('<div class="form-group"><label>Return to Work Date</label>
            <input type="text" name="rtw" value="%s" class="form-control date-field" /></div>',
            $model->returnToWorkDate());
        $ret .= sprintf('<div class="form-group">
            <label><input type="checkbox" name="ffs" value="1" %s />
            Final Form from Manager</label></div>',
            $model->finalFormSubmitted() ? 'checked' : '');
        $ret .= sprintf('<div class="form-group">
            <label><input type="checkbox" name="close" value="1" %s />
            Close out Entry</label></div>',
            $model->inactive() ? 'checked' : '');
        $ret .= '<p>
            <button type="submit" class="btn btn-default">Save Changes</button>
            <button type="reset" class="btn btn-default btn-reset">Reset Form</button>
            </p></form>';

        return $ret;
    }

    private function getAccess()
    {
        $uid = FannieAuth::getUID($this->current_user);
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $dbc = FannieDB::get($settings['HrWebDB']);
        $prep = $this->connection->prepare("SELECT * FROM AccessIllness WHERE userId=?");
        $res = $this->connection->execute($prep, array($uid));
        $perms = array();
        while ($row = $this->connection->fetchRow($res)) {
            $key = $row['storeID'] . ':' . $row['deptID'];
            $perms[$key] = array('edit' => $row['canEdit'], 'view' => $row['canView']);
        }

        return $perms;
    }

    private function getEmployeeAreas($empID)
    {
        $prep = $this->connection->prepare("SELECT storeID FROM EmployeeStores WHERE employeeID=?");
        $stores = $this->connection->getAllValues($prep, array($empID));

        $prep = $this->connection->prepare("SELECT departmentID FROM EmployeeDepartments WHERE employeeID=?");
        $depts = $this->connection->getAllValues($prep, array($empID));

        $ret = array();
        foreach ($stores as $sID) {
            foreach ($depts as $dID) {
                $ret[$sID . ':' . $dID] = true;
            }
        }

        return $ret;
    }

    protected function get_view()
    {
        $editCSS = 'collapse';
        $includeList = false;
        if (FannieAuth::validateUserQuiet('hr_editor') || FannieAuth::validateUserQuiet('illness_editor')) {
            $editCSS = '';
            $includeList = true;
        }
        $access = $this->getAccess();
        $allAccess = FannieAuth::validateUserQuiet('hr_editor');
        $settings = $this->config->get('PLUGIN_SETTINGS');
        $dbc = FannieDB::get($settings['HrWebDB']);

        $openR = $dbc->query('
            SELECT i.illnessLogID,
                i.illnessDate,
                e.firstName,
                e.lastName,
                e.employeeID,
                i.exclusionary,
                i.MDHContacted,
                MAX(i.comments) AS comments,
                GROUP_CONCAT(t.illnessType, \', \') AS types
            FROM IllnessLogs AS i
                LEFT JOIN IllnessLogsIllnessTypes AS m ON i.illnessLogID=m.illnessLogID
                LEFT JOIN IllnessTypes AS t ON m.illnessTypeID=t.illnessTypeID
                LEFT JOIN Employees AS e ON i.employeeID = e.employeeID
            WHERE i.inactive=0
                AND i.finalFormSubmitted=0
            GROUP BY i.illnessLogID,
                i.illnessDate,
                e.firstName,
                e.lastName,
                i.exclusionary,
                i.MDHContacted
            ORDER BY i.illnessDate DESC');
        $open = '';
        $empAreas = array();
        while ($row = $dbc->fetchRow($openR)) {
            $eID = $row['employeeID'];
            if (!isset($empAreas[$eID])) {
                $empAreas[$eID] = $this->getEmployeeAreas($eID);
            }
            $hasAccess = false;
            $userEditCSS = 'collapse';
            if ($allAccess) {
                $hasAccess = true;
                $userEditCSS = '';
            } else {
                foreach ($access as $area => $type) {
                    if (isset($empAreas[$eID][$area])) {
                        $hasAccess = true;
                        if ($type['edit']) {
                            $userEditCSS = '';
                        }
                    }
                }
            }
            if (!$hasAccess) continue;
            $open .= sprintf('<tr><td>%s</td>
                <td>%s, %s</td><td>%s</td>
                <td>%s</td><td>%s</td>
                <td>%s</td>
                <td class="%s"><a href="?id=%d">%s</a></td>
                </tr>',
                $row['illnessDate'],
                $row['lastName'], $row['firstName'], $row['types'],
                ($row['exclusionary'] ? 'Yes' : 'No'),
                ($row['MDHContacted'] ? 'Yes' : 'n/a'),
                htmlentities($row['comments']),
                $userEditCSS, $row['illnessLogID'], FannieUI::editIcon()
            );
        }
        if (!$includeList) {
            $open = '<tr><td colspan="7">Greater access required</td></tr>';
        }

        $types = new IllnessTypesModel($dbc);
        $tOpts = $types->toOptions();
        $eOpts = '<option value="">Select one...</option>';
        $res = $dbc->query('SELECT employeeID, firstName, lastName FROM Employees WHERE deleted=0 ORDER BY lastName, firstName');
        while ($row = $dbc->fetchRow($res)) {
            $eOpts .= sprintf('<option value="%d">%s, %s</option>', $row['employeeID'], $row['lastName'], $row['firstName']);
        }
        return <<<HTML
<p><a href="../HrMenu.php" class="btn btn-default">Main Menu</a></p>
<table class="table table-bordered table-striped">
<tr><th colspan="6">Currently Open Entries</th><th class="{$editCSS}"></th></tr>
<tr>
    <th>Illness Date</th>
    <th>Employee</th>
    <th>Type(s)</th>
    <th>Exclusionary</th>
    <th>MDH</th>
    <th>Comments</th>
    <th class="{$editCSS}">Edit</th>
</tr>
    {$open}
</table>
<div class="panel panel-default {$editCSS}">
    <div class="panel-heading">New Log Entry</div>
    <div class="panel-body">
    <form method="post" action="IllnessLogsPage.php">
        <div class="form-group">
            <label>Employee *</label>
            <select name="emp" class="form-control" required>
                {$eOpts}
            </select>
        </div>
        <div class="form-group">
            <label>Illness Date *</label>
            <input type="text" name="idate" required class="form-control date-field" />
        </div>
        <div class="form-group">
            <label>Illness Type(s) *</label>
            <select name="type[]" class="form-control" multiple required size="5">
                {$tOpts}
            </select>
        </div>
        <div class="form-group">
            <label>Exclusionary
                <input type="checkbox" name="ex" value="1" />
            </label>
        </div>
        <div class="form-group">
            <label>MDH Contacted
                <input type="checkbox" name="mdh" value="1" />
            </label>
        </div>
        <div class="form-group">
            <label>Comments</label>
            <textarea name="comment" rows="5" class="form-control"></textarea>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-default">Create Log Entry</button>
        </div>
    </form>
    </div>
</div>
<p><a href="../HrMenu.php" class="btn btn-default">Main Menu</a></p>
HTML;
    }
}

FannieDispatch::conditionalExec();