Refactoring

This commit is contained in:
gamonoid
2017-09-03 20:39:22 +02:00
parent af40881847
commit a7274d3cfd
5075 changed files with 238202 additions and 16291 deletions

152
src/Model/ApproveModel.php Normal file
View File

@@ -0,0 +1,152 @@
<?php
namespace Model;
use Classes\Approval\ApprovalStatus;
use Classes\BaseService;
use Classes\IceResponse;
use Classes\SettingsManager;
use Employees\Common\Model\EmployeeApproval;
use Travel\Common\Model\EmployeeTravelRecord;
abstract class ApproveModel extends BaseModel
{
public function isMultiLevelApprovalsEnabled()
{
return false;
}
public function executePreSaveActions($obj)
{
$preApprove = SettingsManager::getInstance()->getSetting($this->preApproveSettingName);
$sendNotificationEmail = true;
if (empty($obj->status)) {
if ($preApprove == "1") {
$obj->status = "Approved";
$sendNotificationEmail = false;
} else {
$obj->status = "Pending";
}
}
if ($preApprove) {
return new IceResponse(IceResponse::SUCCESS, $obj);
}
$currentEmpId = BaseService::getInstance()->getCurrentProfileId();
//Auto approve if the current user is an admin
if (!empty($currentEmpId)) {
$employee = BaseService::getInstance()->getElement('Employee', $currentEmpId);
if (!empty($employee->supervisor)) {
$notificationMsg = "A new ".$this->notificationUnitName." has been added by " . $employee->first_name . " " . $employee->last_name . ". Please visit ".$this->notificationModuleName." module to review it";
BaseService::getInstance()->notificationManager->addNotification($employee->supervisor, $notificationMsg, '{"type":"url","url":"'.$this->notificationUnitAdminUrl.'"}', $this->notificationModuleName, null, false, $sendNotificationEmail);
} else {
$user = BaseService::getInstance()->getCurrentUser();
if ($user->user_level == "Admin") {
//Auto approve
$obj->status = "Approved";
$notificationMsg = "Your ".$this->notificationUnitName." is auto approved since you are an administrator and do not have any supervisor assigned";
BaseService::getInstance()->notificationManager->addNotification(null, $notificationMsg, '{"type":"url","url":"'.$this->notificationUnitAdminUrl.'"}', $this->notificationModuleName, $user->id, false, $sendNotificationEmail);
} else {
//If the user do not have a supervisor, notify all admins
$admins = BaseService::getInstance()->getAllAdmins();
foreach ($admins as $admin) {
$notificationMsg = "A new ".$this->notificationUnitName." has been added by " . $employee->first_name . " " . $employee->last_name . ". Please visit ".$this->notificationModuleName." module to review it. You are getting this notification since you are an administrator and the user do not have any supervisor assigned.";
BaseService::getInstance()->notificationManager->addNotification(null, $notificationMsg, '{"type":"url","url":"'.$this->notificationUnitAdminUrl.'"}', $this->notificationModuleName, $admin->id, false, $sendNotificationEmail);
}
}
}
}
return new IceResponse(IceResponse::SUCCESS, $obj);
}
public function executePreUpdateActions($obj)
{
$preApprove = SettingsManager::getInstance()->getSetting($this->preApproveSettingName);
$sendNotificationEmail = true;
$fieldsToCheck = $this->fieldsNeedToBeApproved();
$travelRequest = new EmployeeTravelRecord();
$travelRequest->Load('id = ?', array($obj->id));
$needToApprove = false;
if ($preApprove != "1") {
foreach ($fieldsToCheck as $field) {
if ($obj->$field != $travelRequest->$field) {
$needToApprove = true;
break;
}
}
} else {
$sendNotificationEmail = false;
}
if ($preApprove) {
return new IceResponse(IceResponse::SUCCESS, $obj);
}
if ($needToApprove && $obj->status != 'Pending') {
$currentEmpId = BaseService::getInstance()->getCurrentProfileId();
//Auto approve if the current user is an admin
if (!empty($currentEmpId)) {
$employee = BaseService::getInstance()->getElement('Employee', $currentEmpId);
if (!empty($employee->supervisor)) {
$notificationMsg = $this->notificationUnitPrefix." ".$this->notificationUnitName." has been updated by " . $employee->first_name . " " . $employee->last_name . ". Please visit ".$this->notificationModuleName." module to review it";
BaseService::getInstance()->notificationManager->addNotification($employee->supervisor, $notificationMsg, '{"type":"url","url":"'.$this->notificationUnitAdminUrl.'"}', $this->notificationModuleName, null, false, $sendNotificationEmail);
} else {
$user = BaseService::getInstance()->getCurrentUser();
if ($user->user_level == "Admin") {
} else {
//If the user do not have a supervisor, notify all admins
$admins = BaseService::getInstance()->getAllAdmins();
foreach ($admins as $admin) {
$notificationMsg = $this->notificationUnitPrefix." ".$this->notificationUnitName." request has been updated by " . $employee->first_name . " " . $employee->last_name . ". Please visit ".$this->notificationModuleName." module to review it. You are getting this notification since you are an administrator and the user do not have any supervisor assigned.";
BaseService::getInstance()->notificationManager->addNotification(null, $notificationMsg, '{"type":"url","url":"g=admin&n=travel&m=admin_Employees"}', "Travel Module", $admin->id, false, $sendNotificationEmail);
}
}
}
}
}
return new IceResponse(IceResponse::SUCCESS, $obj);
}
public function executePostSaveActions($obj)
{
$directAppr = ApprovalStatus::getInstance()->isDirectApproval($obj->employee);
if (!$directAppr && $this->isMultiLevelApprovalsEnabled()) {
$classPaths = explode("\\", get_called_class());
ApprovalStatus::getInstance()->initializeApprovalChain($classPaths[count($classPaths) - 1], $obj->id);
}
}
abstract public function getType();
public function findApprovals($obj, $whereOrderBy, $bindarr = false, $pkeysArr = false, $extra = array())
{
$currentEmployee = BaseService::getInstance()->getCurrentProfileId();
$approveal = new EmployeeApproval();
$approveals = $approveal->Find("type = ? and approver = ? and status = -1 and active = 1", array($this->getType(), $currentEmployee));
$ids = array();
foreach ($approveals as $appr) {
$ids[] = $appr->element;
}
$data = $obj->Find("id in (".implode(",", $ids).")", array());
return $data;
}
}