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 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 87
AttendanceMarkSwappingService
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 10
650.00
0.00% covered (danger)
0.00%
0 / 87
 __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 / 2
 getInstance
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 7
 addAttendanceSwappingRequest
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 9
 updateAttendanceMarkingRequestCompleted
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 updateAttendanceMarkingStaff
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 removeAttendanceSwappingRequestById
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 addAttendanceConfirmingStaff
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 14
 removeAttendanceConfirmingStaffByRequestId
0.00% covered (danger)
0.00%
0 / 1
6.00
0.00% covered (danger)
0.00%
0 / 8
 getAttendanceSwappingRequest
0.00% covered (danger)
0.00%
0 / 1
30.00
0.00% covered (danger)
0.00%
0 / 20
<?php
namespace com\linways\core\ams\professional\service;
use com\linways\core\ams\professional\dto\AttendaneSwappingDetails;
use com\linways\core\ams\professional\exception\ProfessionalException;
use com\linways\core\ams\professional\dto\AttendanceConfirmingStaff;
use com\linways\core\ams\professional\mapper\AttendanceMarkSwappingServiceMapper;
use com\linways\base\util\SecurityUtils;
class AttendanceMarkSwappingService extends BaseService
{
    // /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 = AttendanceMarkSwappingServiceMapper::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;
    }
    
    /**
     * add attendance swapping request
     * @param AttendaneSwappingDetails $attendaneSwappingDetails
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function addAttendanceSwappingRequest(AttendaneSwappingDetails $attendaneSwappingDetails)
    {
        $attendaneSwappingDetails = $this->realEscapeObject($attendaneSwappingDetails);
        $sql ="INSERT INTO attendance_swapping_details (assigned_staff_id, rule, hour, date, sbs_id, ps_id, created_by, created_date, updated_by, updated_date) VALUES ('$attendaneSwappingDetails->assignedStaffId', ".($attendaneSwappingDetails->rule?"'".SecurityUtils::prepareSafeHTML($attendaneSwappingDetails->rule)."'":"null").", '$attendaneSwappingDetails->hour', '$attendaneSwappingDetails->date', ".($attendaneSwappingDetails->sbsId?"'$attendaneSwappingDetails->sbsId'":"null").", ".($attendaneSwappingDetails->psId?"'$attendaneSwappingDetails->psId'":"null").", '$attendaneSwappingDetails->createdBy', utc_timestamp(), '$attendaneSwappingDetails->updatedBy', utc_timestamp())";
        
        try {
            
            return $this->executeQuery($sql,TRUE);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    
    public function updateAttendanceMarkingRequestCompleted($requestId)
    {
        try {
            $sql = "UPDATE attendance_swapping_details SET request_completed=1 WHERE id='$requestId'";
            return $this->executeQuery($sql);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    public function updateAttendanceMarkingStaff($requestId, $staffId)
    {
        try {
            $sql = "UPDATE attendance_confirming_staff SET is_confirmed=1 WHERE id='$requestId' AND staff_id=$staffId";
            return $this->executeQuery($sql);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    public function removeAttendanceSwappingRequestById($requestId)
    {
        $sql ="DELETE FROM attendance_swapping_details WHERE id='$requestId'";
        try {
            
            $this->executeQuery($sql);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    
    /**
     * add attendance confirming staff
     * @param array $attendanceConfirmingStaffList
     * @throws ProfessionalException
     */
    public function addAttendanceConfirmingStaff($attendanceConfirmingStaffList)
    {
        $sql ="INSERT INTO attendance_confirming_staff (attendance_swapping_details_id, staff_id, created_by, created_date, updated_by, updated_date) VALUES ";
        $values=[];
        foreach($attendanceConfirmingStaffList as $attendanceConfirmingStaff)
        {
            $values[]="('$attendanceConfirmingStaff->attendanceSwappingDetailsId', '$attendanceConfirmingStaff->staffId', '$attendanceConfirmingStaff->createdBy', '$attendanceConfirmingStaff->createdDate', '$attendanceConfirmingStaff->updatedBy', '$attendanceConfirmingStaff->updatedDate')";
        }
        
        $sql .=implode(', ',$values);
        try {
            
            $this->executeQuery($sql);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    
    public function removeAttendanceConfirmingStaffByRequestId($requestId)
    {
        $sql ="DELETE FROM attendance_confirming_staff WHERE attendance_swapping_details_id='$requestId'";
        try {
            
            $this->executeQuery($sql);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
    
    /**
     * get attendance swapping request details
     * @param AttendaneSwappingDetails $attendaneSwappingDetails
     * @throws ProfessionalException
     * @return object|NULL|\com\linways\base\util\$objectList[]
     */
    public function getAttendanceSwappingRequest(AttendaneSwappingDetails $attendaneSwappingDetails)
    {
        $sql ="select asd.id, asd.assigned_staff_id, asd.date, asd.hour, asd.sbs_id, asd.ps_id, asd.request_completed, asd.rule, acs.staff_id, acs.is_confirmed from attendance_swapping_details asd inner join attendance_confirming_staff acs ON asd.id=acs.attendance_swapping_details_id WHERE asd.date='$attendaneSwappingDetails->date' AND asd.hour='$attendaneSwappingDetails->hour'";
        if($attendaneSwappingDetails->psId)
        {
            $sql .=" AND asd.ps_id='$attendaneSwappingDetails->psId'";
        }
        else if($attendaneSwappingDetails->sbsId)
        {
            $sql .=" AND asd.sbs_id='$attendaneSwappingDetails->sbsId'";
        }
        if($attendaneSwappingDetails->assignedStaffId)
        {
            $sql .=" AND asd.assigned_staff_id='$attendaneSwappingDetails->assignedStaffId'";
        }
        try {
            
            return $this->executeQueryForObject($sql,false,$this->mapper[AttendanceMarkSwappingServiceMapper::GET_ATTENDANCE_SWAPPING_REQUEST]);
            
        } catch (Exception $e) {
            throw new ProfessionalException($e->getCode(),$e->getMessage());
        }
    }
}