Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 23
CRAP
0.00% covered (danger)
0.00%
0 / 220
DutyLeaveService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 23
2256.00
0.00% covered (danger)
0.00%
0 / 220
 __construct
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 3
 __clone
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 5
 createCategory
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 12
 updateDutyLeaveCategory
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 deleteDutyLeaveCategory
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 11
 getAllDutyLeaveCategory
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 getDutyLeaveCategoryById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 getDutyLeaveCategoryByParentId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 assignStaffToCategory
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 15
 getCategoryAssignedStaffsByCategoryId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 deleteCategoryAssignedStaffsByCategoryId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 getDLRulesById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 getAllDLRules
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 assignDLRulesToCategory
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 15
 getDLRulesAssignedToCategoryByCategoryId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 getDLRulesAssignedByCategoryId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 deleteAssignDLRulesToCategory
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 deleteCategoryByParentId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 9
 getCategories
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 15
 getLeaveTypeById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 getStaffAssignedCategoriesByStaffId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
 getStaffAssignedLeaveTypeByStaffId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 10
<?php
namespace com\linways\core\ams\professional\service;
use com\linways\core\ams\professional\exception\ProfessionalException;
use com\linways\core\ams\professional\dto\DutyLeaveCategory;
use com\linways\core\ams\professional\mapper\DutyLeaveServiceMapper;
class DutyLeaveService extends BaseService
{
    
    // private $batchService = BatchService::getInstance();
    // /Condition 1 - Presence of a static member variable
    private static $_instance = null;
    
    private $mapper = [];
    
    // /Condition 2 - Locked down the constructor
    private function __construct()
    {
        $this->mapper = DutyLeaveServiceMapper::getInstance()->getMapper();
    }
    
    // Prevent any oustide instantiation of this class
    
    // /Condition 3 - Prevent any object or instance of that class to be cloned
    private function __clone()
    {}
    
    // Prevent any copy of this object
    
    // /Condition 4 - Have a single globally accessible static method
    public static function getInstance()
    {
        if (! is_object(self::$_instance)) // or if( is_null(self::$_instance) ) or if( self::$_instance == null )
            self::$_instance = new self();
            return self::$_instance;
    }
    
    /**
     * Create duty leave category
     * @param DutyLeaveCategory $dutyLeaveCategory
     * @throws ProfessionalException
     * @return \com\linways\base\connection\Object
     */
    
    public function createCategory($dutyLeaveCategory)
    {
        $dutyLeaveCategory= $this->realEscapeObject($dutyLeaveCategory);
                
        $sql = "INSERT INTO dutyLeaveCategory (categoryName, parentCatId, leaveTypeId,createdBy, createdDate, updatedBy, updatedDate) VALUES('$dutyLeaveCategory->categoryName', '$dutyLeaveCategory->parentCategoryId',$dutyLeaveCategory->leaveTypeId, '$dutyLeaveCategory->createdBy', utc_timestamp(), '$dutyLeaveCategory->updatedBy', utc_timestamp())";
        
        try 
        {
            return $this->executeQuery($sql);
        } 
        catch (\Exception $e) 
        {    
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
            
        }
    }
    /**
     * update duty leave category
     * @param DutyLeaveCategory $dutyLeaveCategory
     * @throws ProfessionalException
     * @return \com\linways\base\dto\MySqlResult
     */
    public function updateDutyLeaveCategory($dutyLeaveCategory)
    {
        $dutyLeaveCategory = $this->realEscapeObject($dutyLeaveCategory);
        
        $sql = "UPDATE dutyLeaveCategory SET categoryName = '$dutyLeaveCategory->categoryName', parentCatId = $dutyLeaveCategory->parentCategoryId, leaveTypeId = $dutyLeaveCategory->leaveTypeId ,updatedBy = $dutyLeaveCategory->updatedBy, updatedDate = utc_timestamp WHERE id = $dutyLeaveCategory->id";
        
        try {
            
            return $this->executeQuery($sql);
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
    }
    /**
     * Delete duty leave category
     * @param int $categoryId
     * @throws ProfessionalException
     * @return \com\linways\base\dto\MySqlResult
     */
    public function deleteDutyLeaveCategory($categoryId)
    {
        $categoryId = $this->realEscapeString($categoryId);
        
        $sql = "DELETE FROM dutyLeaveCategory WHERE id = $categoryId";
        
        try {
            
            $this->executeQuery($sql);
            $this->deleteCategoryByParentId($categoryId);
            return ;
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
            
        }
    }
    /**
     * Get  all duty leave category
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getAllDutyLeaveCategory()
    {
        $sql = "SELECT dlc.id, dlc.categoryName, dlc.parentCatId, dlc.leaveTypeId, lt.code, lt.name, dlc_parent.categoryName as parentCategory  FROM dutyLeaveCategory dlc left join dutyLeaveCategory dlc_parent on dlc.parentCatId = dlc_parent.id left join student_leave_type lt on lt.id = dlc.leaveTypeId and lt.isActive=1 order by dlc.id";
        
        try {
            $categoryDetails = $this->executeQueryForList($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $categoryDetails;
    }
    /**
     * Get duty leave category by id
     * @param int $id
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function getDutyLeaveCategoryById($id)
    {
        $id = $this->realEscapeString($id);
        
        $sql = "SELECT dlc.id, dlc.categoryName, dlc.parentCatId, dlc.leaveTypeId, lt.code, lt.name, dlc_parent.categoryName as parentCategory  FROM dutyLeaveCategory dlc left join dutyLeaveCategory dlc_parent on dlc.parentCatId = dlc_parent.id left join student_leave_type lt on lt.id = dlc.leaveTypeId and lt.isActive=1 WHERE dlc.id = $id";
        
        try {
            $categoryDetails = $this->executeQueryForObject($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $categoryDetails;
    }
    /**
     * Get duty leave category by parentId
     * @param int $parentId
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function getDutyLeaveCategoryByParentId($parentId)
    {
        $parentId = $this->realEscapeString($parentId);
        
        $sql = "SELECT id, categoryName  FROM dutyLeaveCategory WHERE parentCatId = $parentId";
        
        try {
            $categoryDetails = $this->executeQueryForList($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $categoryDetails;
    }
    /**
     * Assign staff to dutyleave category
     * @param int $categoryId
     * @param array $staffIds
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function assignStaffToCategory($categoryId, $staffIds)
    {
        $categoryId = $this->realEscapeString($categoryId);
        $staffIds = $this->realEscapeArray($staffIds);
        
        foreach ($staffIds as $staffId)
        {
            $sql_values.= " ($categoryId$staffId, '1', utc_timestamp(), '1', utc_timestamp()), ";
        }
        $sql_values = rtrim($sql_values, ", ");
        
        $sql = "INSERT INTO dutyLeaveCategoryAssignedStaff (dutyLeaveCategoryId, staffId, createdBy, createdDate, updatedBy, updatedDate) VALUES $sql_values";
        
        try {
                return $this->executeQueryForObject($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
    }
    /**
     * Get category assigned staffs by categoryId
     * @param int $categoryId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getCategoryAssignedStaffsByCategoryId($categoryId)
    {
        $categoryId = $this->realEscapeString($categoryId);
        
        $sql = "SELECT dlc.id AS categoryId, categoryName, parentCatId, sa.staffId, staffName FROM dutyLeaveCategory dlc LEFT JOIN dutyLeaveCategoryAssignedStaff cas ON  dlc.id= cas.dutyLeaveCategoryId LEFT JOIN staffaccounts sa ON sa.staffID = cas.staffId WHERE dlc.id  = $categoryId";
        
        try {
            $staffIds = $this->executeQueryForList($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $staffIds;
    }
    /**
     * Delete category assigned staffs by category id
     * @param int $categoryId
     * @throws ProfessionalException
     * @return \com\linways\base\dto\MySqlResult
     */
    public function deleteCategoryAssignedStaffsByCategoryId($categoryId)
    {
        $categoryId = $this->realEscapeString($categoryId);
        
        $sql = "DELETE FROM dutyLeaveCategoryAssignedStaff WHERE dutyLeaveCategoryId = $categoryId";
        
        try {
            
            return $this->executeQuery($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
            
        }
    }
    /**
     * Get DL rules by id
     * @param int $id
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function getDLRulesById($id)
    {
        $id = $this->realEscapeString($id);
        
        $sql = "SELECT ruleName, ruleDefinition FROM DLRules WHERE id = $id";
        
        try {
            $rules =  $this->executeQueryForObject($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $rules;
    }
    /**
     * Get all DL rules
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getAllDLRules()
    {
        $sql = "SELECT id, ruleName, ruleDefinition FROM DLRules";
        try {
            
            $rules = $this->executeQueryForList($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        
        return $rules;
    }
    /**
     * Assign DL rules to category
     * @param int $categoryId
     * @param array $ruleIds
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function assignDLRulesToCategory($categoryId, $ruleIds)
    {
        $categoryId = $this->realEscapeString($categoryId);
        $ruleIds = $this->realEscapeArray($ruleIds);
        
        foreach ($ruleIds as $ruleId)
        {
            $sql_values.= " ($categoryId$ruleId, '1', utc_timestamp(), '1', utc_timestamp()), ";
        }
        $sql_values = rtrim($sql_values, ", ");
        
        $sql = "INSERT INTO dutyLeaveCategoryRule (dutyLeaveCategoryId, DLRulesId, createdBy, createdDate, updatedBy, updatedDate) VALUES $sql_values";
        
        try {
            
            return $this->executeQueryForObject($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
    }
    /**
     * Get DL rules assigned to category by categoryId
     * @param int $categoryId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getDLRulesAssignedToCategoryByCategoryId($categoryId)
    {
        $sql = "SELECT DLRulesId, ruleName, ruleDefinition FROM DLRules dlr left join dutyLeaveCategoryRule cr on cr.DLRulesId = dlr.id  WHERE dutyLeaveCategoryId = $categoryId";
        
        try {
            
            $rules = $this->executeQueryForList($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        
        return $rules;
    }
    /**
     * Get DL rules assigned by categoryId
     * @param int $categoryId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getDLRulesAssignedByCategoryId($categoryId)
    {
        $categoryId = $this->realEscapeString($categoryId);
        
        $sql = "select dlr.id as ruleId, ruleName, ruleDefinition, DLRulesId, dutyLeaveCategoryId from DLRules dlr left join dutyLeaveCategoryRule cr on dlr.id = cr.DLRulesId and dutyLeaveCategoryId = $categoryId";
        
        try {
            $ruleDetails = $this->executeQueryForList($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $ruleDetails;
    }
    /**
     * delete Assign DLRules To Category 
     * @param int $categoryId
     * @throws ProfessionalException
     * @return \com\linways\base\dto\MySqlResult
     */
    public function deleteAssignDLRulesToCategory($categoryId)
    {
        $categoryId = $this->realEscapeString($categoryId);
        
        $sql = "DELETE FROM dutyLeaveCategoryRule WHERE dutyLeaveCategoryId = $categoryId";
        
        try {
            
            return $this->executeQuery($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
    }
    /**
     * Delete category by parentId
     * @param int $parentId
     * @throws ProfessionalException
     * @return \com\linways\base\dto\MySqlResult
     */
    public function deleteCategoryByParentId($parentId)
    {
        $parentId = $this->realEscapeString($parentId);
        
        $sql = "DELETE FROM dutyLeaveCategory WHERE parentCatId = $parentId";
        try {
            
            return $this->executeQuery($sql);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
    }
    /**
     * get category details
     * @param int $staffId
     * @param int $leaveTypeId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getCategories($leaveTypeId, $staffId = null)
    {
        $staffId = $this->realEscapeString($staffId);
        $leaveTypeId = $this->realEscapeString($leaveTypeId);
        
        $sql = "SELECT dlc.id, dlc.categoryName, dlc.parentCatId, dlp.categoryName as parentCategory from  dutyLeaveCategory dlp inner join dutyLeaveCategory dlc on dlp.id = dlc.parentCatId left join dutyLeaveCategoryAssignedStaff cas on cas.dutyLeaveCategoryId= dlc.id where dlc.leaveTypeId = $leaveTypeId";
        
        if($staffId)
        {
            $sql.=" and staffId = $staffId";
        }
        try {
            
            $categories = $this->executeQueryForList($sql, $this->mapper[DutyLeaveServiceMapper::GET_CATEGORY]);
            
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        
        return $categories;
    }
    /**
     * Get leave type by id
     * @param int $id
     * @throws ProfessionalException
     */
    public function getLeaveTypeById($id)
    {
        $id = $this->realEscapeString($id);
        $sql = "SELECT * from student_leave_type WHERE id = $id and isActive=1";
        
        try {
            
            $leaveType = $this->executeQueryForObject($sql);
            
        } catch (\Exception $e) {
            
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $leaveType;
    }
    /**
     * Get staff assigned categories by staff
     * @param int $staffId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getStaffAssignedCategoriesByStaffId($staffId)
    {
        $staffId = $this->realEscapeString($staffId);
        
        $sql = "select dlc.id, staffId, categoryName from dutyLeaveCategoryAssignedStaff cas inner join dutyLeaveCategory dlc on cas.dutyLeaveCategoryId = dlc.id where staffId = $staffId";
        
        try {
            $categoryDetails = $this->executeQueryForList($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $categoryDetails;
    }
    /**
     * get staff assigned leave types by staffId
     * @param int $staffId
     * @throws ProfessionalException
     * @return object|array|\com\linways\base\util\$objectList[]
     */
    public function getStaffAssignedLeaveTypeByStaffId($staffId)
    {
        $staffId = $this->realEscapeString($staffId);
        $sql = "select distinct slt.id, slt.code, slt.name, staffId from student_leave_type slt left join dutyLeaveCategory dlc on dlc.leaveTypeId=slt.id left join  dutyLeaveCategoryAssignedStaff cas on cas.dutyLeaveCategoryId = dlc.id where staffId = $staffId and slt.isActive=1 order by slt.id";
        
        try {
            $leaveTypes = $this->executeQueryForList($sql);
        } catch (\Exception $e) {
            throw new ProfessionalException( $e->getCode (), $e->getMessage ());
        }
        return $leaveTypes;
    }
}