<?php
/*
 * Calcul du coût des pointages de la session
 * 
*/
function cout_pointages( $sid )
{
  $sql=new DB();
  $sql2=new DB();
  $sql3=new DB();

  $sql->query("SELECT po.id,
                      po.employe,
                      pe.taux_smic,
                      pe.salissure,
                      pe.coeff_charge,
                      pe.indemnite_conge,
                      pe.taux_horaire,
                      pe.panier,
                      pe.coupure
               FROM pointage po,
                    personnel pe
               WHERE po.employe = pe.id
                 AND sid = " . $sid ."
               GROUP BY id" );  
  while( $sql->next_row_assoc() )
    {
        $sql2->query("UPDATE pointage
        	      SET taux_smic = " . $sql->row['taux_smic'] . ",
                          taux_salissure = " . $sql->row['salissure'] . ",
                          coeff_charge = " . $sql->row['coeff_charge'] . ",
                          indemnite_conge = " . $sql->row['indemnite_conge'] . ",
                          taux_horaire = " . $sql->row['taux_horaire'] . ",
                          indemnite_panier = " . $sql->row['panier'] . ",
                          indemnite_coupure = " . $sql->row['coupure'] . "
                      WHERE id = " . $sql->row["id"] );
    }

  /** 
   * Calcul du nombre d'heures travaillée
   */

  $sql->query("UPDATE pointage
               SET nb_heures = ( TIME_TO_SEC( fin ) - TIME_TO_SEC( debut ) ) / 3600
               WHERE sid = " . $sid );

  /** 
   * Attribution des paniers
   * La quantité est égale au nombre de jour travaillé
   * 1 ou 2 services = 1 seul panier
   * Dans le cas de 2 services le coût est inputé au service du soir
   */

  $sql->query("SELECT MAX(id) id FROM pointage WHERE sid = $sid GROUP BY employe" );  
  while( $sql->next_row_assoc() )
    {
        $sql2->query("UPDATE pointage
                      SET panier = 1
                      WHERE id = " . $sql->row["id"] );  
    }

  /** 
   * Attribution des coupures
   * La quantité est égale à 1 pour un employé ayant effectué les 2
   * services d'une même journée
   * 2 services / jour = 1 coupure , 1 seul service = 0 coupure
   * Son coût est inputé au service du soir
   */
  
  $sql->query("SELECT MAX(id) id,
                      COUNT(id) nb_services
               FROM pointage
               WHERE sid = $sid
               GROUP BY employe" );  
  while( $sql->next_row_assoc() )
    {
        if( $sql->row["nb_services"] == 2 )
          {
              $sql2->query("UPDATE pointage
                            SET coupure = 1
                            WHERE id = " . $sql->row["id"] );
          }
    }

  /** 
   * Calcul du coût salarial non chargé de chaque plage horaire
   * Somme de :
   * Nb heures travaillées par taux de base horaire (SMIC)
   * Indemnité de panier si elle existe
   * Nb heures travaillées par taux de salissure
   * Indemnité de coupure si elle existe
   */

  $sql->query("UPDATE pointage
               SET cout_non_charge = ( nb_heures * taux_smic )
                        + ( panier * indemnite_panier )
                        + ( nb_heures * taux_salissure )
                        + ( coupure * indemnite_coupure )
               WHERE sid = " . $sid );

  /** 
   * Calcul du coût salarial chargé de chaque plage horaire
   * Somme de :
   * Nb heures travaillées par taux horaire
   * Indemnité de panier si elle existe
   * Nb heures travaillées par taux de salissure
   * Indemnité de coupure si elle existe
   */

  $sql->query("UPDATE pointage
               SET cout_charge = ( nb_heures * taux_horaire )
                        + ( panier * indemnite_panier )
                        + ( coupure * indemnite_coupure )
               WHERE sid = " . $sid );
}
function requete_pointages_mensuels_cumules( $annee, $mois, $debut=false )
{
    if( !$annee )
      $annee = date("%Y");
    if( !$mois )
      $mois = date("%m");
    
    /** 
     * Récupértion des numéros de sessions bornes correspondant au mois
     * sélectionné
     */
    $sql = new DB();
    $sid_min = 0;
    $sid_max = 0;
    $sql->query( "SELECT MIN(sid), MAX(sid) FROM commande WHERE date LIKE '" . $annee . "-" . sprintf( "%02s" , $mois ) . "-%'" );
    $sql->next_row();
    $sid_min = $sql->row[0];
    $sid_max = $sql->row[1];
    $requete = "SELECT UNIX_TIMESTAMP(date_ouv) AS mois, 
                 employe, 
                 nom, 
                 prenom, 
                 fonction, 
                 SUM( po.nb_heures ) AS heure_quantite, 
                       po.taux_smic AS heure_taux, 
                       SUM( po.nb_heures ) * po.taux_smic AS heure_montant, 
                       po.indemnite_panier AS panier_taux, 
                       IF( indemnite_panier <> 0 , SUM( po.panier ) , 0 ) AS panier_quantite, 
                       taux_salissure AS salissure_taux, 
                       IF( taux_salissure <> 0 , SUM( po.nb_heures ) , 0 ) AS salissure_quantite, 
                       indemnite_coupure AS coupure_taux, 
                       IF( indemnite_coupure <> 0 , SUM( po.coupure ) , 0 ) AS coupure_quantite, 
                       SUM( cout_non_charge ) AS estimation
                FROM personnel, 
                     pointage po, 
                     session 
                WHERE personnel.id = po.employe 
                  AND po.sid = session.sid";
    if( $debut )
      $requete .= " AND date_ouv BETWEEN '$début' AND '$fin'";
    else
      $requete .= " AND po.sid BETWEEN " . $sid_min . " AND " . $sid_max ;
    $requete .= " GROUP BY po.employe
                ORDER BY nom";
    return $requete;
}
function requete_pointages_mensuels_detailles( $mois , $employe )
{
  $sql=new DB();
    /** 
     * Récupération des bornes des sessions concernées, les dates
     * d'ouverture et de fermeture de session n'étant pas fiables
     */
    $sql->query( "SELECT MIN(sid),
                         MAX(sid)
                  FROM commande
                  WHERE date LIKE '" . date( 'Y-m' , $mois ) . "-%'");
    $sql->next_row();
    return "SELECT prenom,
                   nom,
                   UNIX_TIMESTAMP(commande.date) AS jour,
                   po.sid,
                   debut,
                   fin,
                   nb_heures AS total,
                   po.taux_smic AS heure_taux,
                   SUM( nb_heures ) * po.taux_smic AS heure_montant,
                   po.indemnite_panier AS panier_taux,
                   IF( indemnite_panier<>0 , po.panier , 0 ) AS panier_quantite,
                   po.panier * indemnite_panier AS panier_montant,
                   taux_salissure AS salissure_taux,
                   IF( taux_salissure<>0 , nb_heures ,0) AS salissure_quantite,
                   nb_heures * salissure AS salissure_montant,
                   indemnite_coupure AS coupure_taux,
                   IF( indemnite_coupure<>0 , po.coupure , 0 ) AS coupure_quantite,
                   po.coupure * indemnite_coupure AS coupure_montant
            FROM personnel,
                 pointage po,
                 commande
            WHERE personnel.id=po.employe
              AND po.sid=commande.sid 
              AND po.sid BETWEEN " . $sql->row[0] . " AND " . $sql->row[1] . "
              AND employe = " . $employe . "
            GROUP BY po.id";
}
function requete_pointages_mensuels_totaux( $mois , $employe )
{
  $sql=new DB();
    /** 
     * Récupération des bornes des sessions concernées, les dates
     * d'ouverture et de fermeture de session n'étant pas fiables
     */
    $sql->query( "SELECT MIN(sid),
                         MAX(sid)
                  FROM commande
                  WHERE date LIKE '" . date( 'Y-m' , $mois ) . "-%'");
    $sql->next_row();
    return "SELECT SUM( po.panier ) AS panier_quantite,
                   SUM( po.coupure ) AS coupure_quantite
            FROM personnel,
                 pointage po,
                 commande
            WHERE personnel.id = po.employe
              AND po.sid=commande.sid 
              AND po.sid BETWEEN " . $sql->row[0] . " AND " . $sql->row[1] . "
              AND employe = " . $employe . "
            GROUP BY employe";
}
?>
