<?php
namespace App\Table;

use App\Services\Table\Table;

class PresenceCurrentmonthTable extends Table
{
    /**
     * Retourne un tableau de présences en fonction d'un siteId, d'une semaine définie par son lundi et son dimanche
     * @param $siteId
     * @param $monday
     * @param $sunday
     * @return array|mixed
     */
    public function getAllOfTheYearBySiteId($siteId, $monday, $sunday)
    {
        return $this->query("
            SELECT pc.*, em.firstname, em.lastname
            FROM presence_currentmonth as pc
            LEFT JOIN employees AS em
                ON pc.reference = em.reference AND pc.company = em.company
            WHERE DATE(pc.day) >= ? AND DATE(pc.day) <= ? AND pc.site = ?", [$monday, $sunday, $siteId]
        , true);
    }

    /**
     * Récupère les heures personnelles d'un salarié par date, reference, site et compagnie
     * @param $siteId
     * @param $day
     * @param $reference
     * @param $companyId
     * @return array|mixed
     */
    public function getSalaryPersonalPresence($siteId, $day, $reference, $companyId)
    {
        return $this->query("
            SELECT pc.*, em.firstname, em.lastname
            FROM presence_currentmonth as pc
            LEFT JOIN employees AS em
                ON pc.reference = em.reference AND pc.company = em.company
            WHERE DATE(pc.day) = ? AND pc.site = ? AND pc.reference = ? AND pc.company = ? AND pc.begin_work IS NOT NULL AND pc.end_work IS NOT NULL AND pc.pause_work IS NOT NULL AND pc.comment_work IS NOT NULL AND pc.personal_hours = ?", [$day, $siteId, $reference, $companyId, 1]
            , false);
    }

    /**
     * Recherche la présence d'un salarié par son numéro de référence, une compagnie, un site et une date.
     * @param $reference
     * @param $company
     * @param $site
     * @param $day
     * @return array|mixed
     */
    public function checkIfFoundSalary($reference, $company, $site, $day)
    {
        return $this->query("SELECT * FROM presence_currentmonth WHERE reference = ? AND company = ? AND site = ? AND DATE(day) = ?", [$reference, $company, $site, $day]);
    }

    /**
     * Met à jour la présence d'un salarié sélectionné par son numér ode référence, une compagnie, un site et un jour.
     * @param $reference
     * @param $company
     * @param $site
     * @param $day
     * @param $status
     * @return array|mixed
     */
    public function updateSalaryStatus($reference, $company, $site, $day, $status)
    {
        return $this->query("UPDATE presence_currentmonth SET etat = ? WHERE reference = ? AND company = ? AND site = ? AND DATE(day) = ?", [$status, $reference, $company, $site, $day]);
    }

    /**
     * Sauvegarde des définitions horaires pour chaque employé étant en statut P (présent) pour le jour en question.
     *
     * Si personal_hours = à 1 alors des horaires personnalisées ont été affectées à l'employé. On ne le met pas à jour
     * avec les heures globales.
     * @param $begin
     * @param $end
     * @param $pause
     * @param $date
     * @param $siteId
     * @param string $comment
     * @return mixed
     */
    public function updateHoursBySiteAndDate($begin, $end, $pause, $date, $siteId, $comment = "")
    {
        return $this->query("UPDATE presence_currentmonth SET begin_work = ?, end_work = ?, pause_work = ?, comment_work = ? WHERE site = ? AND DATE(day) = ? AND etat = ? AND personal_hours = ?", [$begin, $end, $pause, $comment, $siteId, $date, "P", 0]);
    }

    /**
     * Fonction sauvegarde les heures personnalisées par salariés.
     * @param $begin
     * @param $end
     * @param $pause
     * @param $date
     * @param $siteId
     * @param $reference
     * @param $company
     * @param string $comment
     * @return array|mixed
     */
    public function updateHoursPerSalary($begin, $end, $pause, $date, $siteId, $reference, $company, $comment = "")
    {
        return $this->query("UPDATE presence_currentmonth SET begin_work = ?, end_work = ?, pause_work = ?, comment_work = ?, personal_hours = ? WHERE site = ? AND DATE(day) = ? AND etat = ? AND reference = ? AND company = ?", [$begin, $end, $pause, $comment, 1, $siteId, $date, "P", $reference, $company]);
    }
}
