<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.2
 *
 * Copyright (C) 2006-2015  Sylvain FATOME
 * This program is free software; you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation;
 * either version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program
 * (in the directory docs);
 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA.
 *
 * Contact : galawa@free.fr
 *
 * Web : http://smi.no-ip.org
 ****************************************************************************************/


// Vérification des tentatives de hack
$pos = strpos($_SERVER['PHP_SELF'], "inc.php");
if ($pos === FALSE)
    $ok_inc = TRUE;
else
    $ok_inc = FALSE;
if ($ok_inc == FALSE) header("Location: ../index.php");

include_once("../inc/func_txt.inc.php");
include_once("../inc/func.inc.php");
include_once("../inc/func_geo.inc.php");
include_once("../classes/ezSQL/shared/ez_sql_core.php");
include_once("../classes/ezSQL/mysqli/ez_sql_mysqli.php");
include_once("../inc/func_sql.inc.php");
Archivelog(@$_SESSION["code_log"]);
// Variables Formulaire
fix_magic_quotes();
$_GET = clean_str($_GET);
$_POST = clean_str($_POST);

$export_ok = TRUE;
$export_valid = TRUE;

if (isset($_GET['td']))
    $td = $_GET['td'];
else
    $td = $_POST['td'];

if ($td == "") // Si vide, c'est une erreur
    $export_ok = FALSE;

// Vérification du type de demande
switch ($td) {
    case "cli" :
    case "art" :
    case "logs" :
    case "scli" :
    case "int" :
        break;
    default :
        $export_ok = FALSE;
        break;
}

// Vérification du mode du connecté (pour éviter les hacks)
switch ($td) {
    case "cli" :
    case "scli" :
        if (@$_SESSION["niv_log"] <= 3)
            $export_ok = FALSE;
        break;
    case "art" :
    case "logs" :
    case "int" :
        // Les agences n'ont droit qu'aux exports clients et interventions
        if (@$_SESSION["niv_log"] <= 4)
            $export_ok = FALSE;
        break;
    default :
        $export_ok = FALSE;
        break;
}

if ($export_ok == TRUE) {
    $table_name = '';
    switch ($td) {
        /******************************************************/
        /**                    CLIENTS                       **/
        /******************************************************/
        case "cli" :
            $table_name = TBCLI;
            $cat = @$_POST["cat"];
            if (@$_SESSION["niv_log"] == 4)
                $age = @$_SESSION["code_age"];
            else
                $age = @$_POST["age"];
            $dep = @$_POST["deptxt"];

            $rech = "SELECT";
            if (count($_POST["champs"]) <> 0) // Il doit y avoir au moins un champ
            {
                // On construit la chaîne de recherche
                for ($i = 0; $i < count($_POST["champs"]); $i++) {
                    $rech .= " " . $_POST["champs"][$i] . ",";
                }
                $rech = substr($rech, 0, strlen($rech) - 1); // On enlève la dernière virgule
                $rech .= " FROM `" . TBCLI . "`";
                if ($cat <> "*") {
                    $rech .= " WHERE cli_cat = '" . $cat . "'";
                }
                if ($age <> "*") {
                    if (!stristr($rech, "WHERE "))
                        $rech .= " WHERE cli_prop = '" . $age . "'";
                    else
                        $rech .= " AND cli_prop = '" . $age . "'";
                }
                $dep_tab = explode("_", $dep);
                if (!stristr($rech, "WHERE ")) {
                    if (count($dep_tab) == 1)
                        $rech .= " WHERE";
                    else
                        $rech .= " WHERE (";
                } else {
                    if (count($dep_tab) == 1)
                        $rech .= " AND";
                    else
                        $rech .= " AND (";
                }

                for ($i = 0; $i < count($dep_tab); $i++) {
                    $rech .= " cli_dep = '" . $dep_tab[$i] . "' OR";
                }
                $rech = substr($rech, 0, strlen($rech) - 3); // On enlève le dernier OR
                if (count($dep_tab) > 1)
                    $rech .= ")";
                $fname = "export_cli.csv";
            }
            break;
        /******************************************************/
        /**                 SITES CLIENTS                    **/
        /******************************************************/
        case "scli" :
            $table_name = TBSCLI;
            $cat = @$_POST["cat"];
            if (@$_SESSION["niv_log"] == 4)
                $age = @$_SESSION["code_age"];
            else
                $age = @$_POST["age"];
            $dep = @$_POST["deptxt"];

            $rech = "SELECT";
            if (count($_POST["champs"]) <> 0) // Il doit y avoir au moins un champ
            {
                // On construit la chaîne de recherche
                for ($i = 0; $i < count($_POST["champs"]); $i++) {
                    $rech .= " " . $_POST["champs"][$i] . ",";
                }
                $rech = substr($rech, 0, strlen($rech) - 1); // On enlève la dernière virgule
                $rech .= " FROM `" . TBCLI . "` ,`" . TBSCLI . "`";
                if ($cat <> "*") {
                    $rech .= " WHERE cli_cat = '" . $cat . "'";
                }
                if ($age <> "*") {
                    if (!stristr($rech, "WHERE "))
                        $rech .= " WHERE cli_prop = '" . $age . "'";
                    else
                        $rech .= " AND cli_prop = '" . $age . "'";
                }
                $dep_tab = explode("_", $dep);
                if (!stristr($rech, "WHERE ")) {
                    if (count($dep_tab) == 1)
                        $rech .= " WHERE";
                    else
                        $rech .= " WHERE (";
                } else {
                    if (count($dep_tab) == 1)
                        $rech .= " AND";
                    else
                        $rech .= " AND (";
                }

                for ($i = 0; $i < count($dep_tab); $i++) {
                    $rech .= " cli_dep = '" . $dep_tab[$i] . "' OR";
                }
                $rech = substr($rech, 0, strlen($rech) - 3); // On enlève le dernier OR
                if (count($dep_tab) > 1)
                    $rech .= ")";
                if (!stristr($rech, "WHERE "))
                    $rech .= " WHERE scli_codecli = cli_code";
                else
                    $rech .= " AND scli_codecli = cli_code";
                $fname = "export_scli.csv";
            }
            break;
        /******************************************************/
        /**                    ARTICLES                      **/
        /******************************************************/
        case "art" :
            $table_name = TBPDT;
            $cat = @$_POST["cat"];
            $fam = @$_POST["famtxt"];

            $rech = "SELECT";
            if (count($_POST["champs"]) <> 0) // Il doit y avoir au moins un champ
            {
                // On construit la chaîne de recherche
                for ($i = 0; $i < count($_POST["champs"]); $i++) {
                    $rech .= " " . $_POST["champs"][$i] . ",";
                }
                $rech = substr($rech, 0, strlen($rech) - 1); // On enlève la dernière virgule
                $rech .= " FROM `" . TBPDT . "`";
                if ($cat <> "*") {
                    $rech .= " WHERE pdt_vendu = '" . $cat . "'";
                }
                $fam_tab = explode("_", $fam);
                if (!stristr($rech, "WHERE ")) {
                    if (count($fam_tab) == 1)
                        $rech .= " WHERE";
                    else
                        $rech .= " WHERE (";
                } else {
                    if (count($fam_tab) == 1)
                        $rech .= " AND";
                    else
                        $rech .= " AND (";
                }

                for ($i = 0; $i < count($fam_tab); $i++) {
                    $rech .= " pdt_fam = '" . $fam_tab[$i] . "' OR";
                }
                $rech = substr($rech, 0, strlen($rech) - 3); // On enlève le dernier OR
                if (count($fam_tab) > 1)
                    $rech .= ")";
                $fname = "export_art.csv";
            }
            break;
        /**************************************************/
        /**              INTERVENTIONS                   **/
        /**************************************************/
        case "int" :
            $table_name = TBINT;
            $rech = "SELECT * FROM `" . TBINT . "`";
            // On ne prend que les intervention closes
            // $rech.= " WHERE int_datefin <> '0000-00-00'";
            $rech .= " ORDER BY int_datedde";
            $fname = "export_int.csv";
            break;
        /******************************************************/
        /**              LOGS DE CONNEXION                   **/
        /******************************************************/
        case "logs" :
            $table_name = TBLOG;
            $rech = "SELECT * FROM `" . TBLOG . "` ORDER BY log_date";
            $fname = "export_log.csv";
            break;
        default :
            break;
    }

    // Variable d'encadrement
    switch ($_POST["cadre"]) {
        case "A" :
            $encadre = "'";
            break;
        case "R" :
            $encadre = "";
            break;
        default :
            $encadre = "\"";
            break;
    }

    // Délimiteur
    switch ($_POST["sep"]) {
        case "V" :
            $delimiteur = ",";
            break;
        default :
            $delimiteur = ";";
            break;
    }

    // Fin de ligne
    switch ($_POST["fl"]) {
        case "R" :
            $finligne = "\r";
            break;
        case "RN" :
            $finligne = "\r\n";
            break;
        default :
            $finligne = "\n";
            break;
    }

    // Définition des entêtes de page
    header('Content-Encoding: UTF-8');
    header("Content-Type: application/csv-tab-delimited-table; charset=UTF-8");
    // header("Content-Type: application/csv-tab-delimited-table");
    header("Content-disposition: filename=" . $fname);
    header("Pragma: no-cache");
    header("Expires: 0");

    $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

    // Construction de ligne des titres
    if ($_POST["ligtitre"] == "O") {
        $rech2 = "DESCRIBE `" . $table_name . "`";
        $fields = $db->get_results($rech2, ARRAY_A);
        $ligne = "";
        foreach ($fields as $field) {
            $field_name = $field['Field'];
            switch ($td) {
                case "cli" :
                    switch ($field_name) {
                        case "cli_ville" :
                            $ligne = $ligne . $encadre . "cli_cp" . $encadre . $delimiteur;
                            $ligne = $ligne . $encadre . "cli_ville" . $encadre . $delimiteur;
                            break;
                        default:
                            $ligne = $ligne . $encadre . $field_name . $encadre . $delimiteur;
                            break;
                    }
                    break;
                case "scli" :
                    switch ($field_name) {
                        case "scli_ville" :
                            $ligne = $ligne . $encadre . "scli_cp" . $encadre . $delimiteur;
                            $ligne = $ligne . $encadre . "scli_ville" . $encadre . $delimiteur;
                            break;
                        default:
                            $ligne = $ligne . $encadre . $field_name . $encadre . $delimiteur;
                            break;
                    }
                    break;
                default :
                    $ligne = $ligne . $encadre . $field_name . $encadre . $delimiteur;
                    break;
            }
        }
        $ligne = substr($ligne, 0, strlen($ligne) - 1);
        echo $ligne . $finligne;
    }

    // Lignes à exporter
    $rows = $db->get_results($rech, ARRAY_A);
    $num = count($rows);
    if ($num <> 0) {
        // Données
        foreach ($rows as $row) {
            $row = encode_str($row);
            $ligne = "";
            if ($td <> "int") {
                foreach ($row as $key => $value) {
                    switch ($td) {
                        case "cli" :
                            switch ($key) {
                                case "cli_ville" :
                                    // Ecriture Code Postal
                                    $ligne = $ligne . $encadre . Retournecp_Id($row["cli_ville"], FALSE) . $encadre . $delimiteur;

                                    // Ecriture Ville
                                    $ligne = $ligne . $encadre . Retourneville_Id($row["cli_ville"], FALSE, FALSE) . $encadre . $delimiteur;
                                    break;
                                default :
                                    $ligne = $ligne . $encadre . $value . $encadre . $delimiteur;
                                    break;
                            }
                            break;
                        case "scli" :
                            switch ($key) {
                                case "scli_ville" :
                                    // Ecriture Code Postal
                                    $ligne = $ligne . $encadre . Retournecp_Id($row["scli_ville"], FALSE) . $encadre . $delimiteur;

                                    // Ecriture Ville
                                    $ligne = $ligne . $encadre . Retourneville_Id($row["scli_ville"], FALSE, FALSE) . $encadre . $delimiteur;
                                    break;
                                default :
                                    $ligne = $ligne . $encadre . $value . $encadre . $delimiteur;
                                    break;
                            }
                            break;
                        default :
                            $ligne .= $encadre . $value . $encadre . $delimiteur;
                            break;
                    }
                }
                $ligne = substr($ligne, 0, strlen($ligne) - 1);
                $ligne = decode_str($ligne);
                echo $ligne . $finligne;
            } else {
                extract($row);
                ////// ENTETE D'ENREGISTREMENT POUR INTERVENTION //////

                // Code entête (H = Header = début)
                $ligne .= $encadre . 'H' . $encadre . $delimiteur;

                // Code intervention
                $ligne .= $encadre . $int_code . $encadre . $delimiteur;

                // Code compta agence
                $rech2 = "SELECT age_ccpta FROM `" . TBAGE . "` WHERE `age_code` = '$int_codeage'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                    $ligne .= $encadre . $age_ccpta . $encadre . $delimiteur;
                } else
                    $ligne .= $encadre . $encadre . $delimiteur;

                // Codes fixes
                $ligne .= $encadre . 'RP' . $encadre . $delimiteur;
                $ligne .= $encadre . 'RP' . $encadre . $delimiteur;

                // Code compta client
                $rech2 = "SELECT cli_ccpta, cli_ccptasp FROM `" . TBCLI . "` WHERE `cli_code` = '$int_codecli'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    $row2 = encode_str($row2);
                    extract($row2);
                    $ligne .= $encadre . $cli_ccpta . $encadre . $delimiteur;
                } else
                    $ligne .= $encadre . $encadre . $delimiteur;

                // Code compta site d'intervention
                if (intval($int_idsite) == 0) // Site principal
                    $ligne .= $encadre . $cli_ccptasp . $encadre . $delimiteur;
                else // Site secondaire
                {
                    $rech2 = "SELECT scli_ccpta FROM `" . TBSCLI . "` WHERE `scli_id` = '$int_idsite'";
                    $row2 = $db->get_row($rech2, ARRAY_A);
                    if ($row2) {
                        $row2 = encode_str($row2);
                        extract($row2);
                        $ligne .= $encadre . $scli_ccpta . $encadre . $delimiteur;
                    } else
                        $ligne .= $encadre . $encadre . $delimiteur;
                }

                // Devise
                $codeadev = give_dev_codea_defaut_int($int_code, $_SESSION["lng"], FALSE);
                $ligne .= $encadre . $codeadev . $encadre . $delimiteur;

                // Date (aaaammjj)
                $ligne .= $encadre . str_replace('-', '', $int_datedde) . $encadre . $delimiteur;

                //N° ordre client
                $ligne .= $encadre . $int_codeocli . $encadre . $delimiteur;

                //Code intervention
                $ligne .= $encadre . $int_code . $encadre . $delimiteur;

                $ligne = substr($ligne, 0, strlen($ligne) - 1);
                $ligne = decode_str($ligne);
                echo $ligne . $finligne;

                ////// DETAIL DES ARTICLES POUR INTERVENTION //////

                // Articles sur détails interventions
                $rech2 = "SELECT * FROM `" . TBPDTIH . "` WHERE pdtih_codeint='" . $int_code . "' ORDER BY pdtih_id";
                $rows2 = $db->get_results($rech2, ARRAY_A);
                if ($rows2) {
                    foreach ($rows2 as $row2) {
                        $row2 = encode_str($row2);
                        $ligne = "";
                        extract($row2);

                        // Code entête (D = Détail)
                        $ligne .= $encadre . 'D' . $encadre . $delimiteur;

                        //Code article
                        $ligne .= $encadre . $pdtih_codepdt . $encadre . $delimiteur;

                        // Quantité
                        $ligne .= $encadre . $pdtih_qte . $encadre . $delimiteur;

                        // Code fixe
                        $ligne .= $encadre . 'PRO' . $encadre . $delimiteur;

                        // Code compta catégorie Intervention
                        $rech3 = "SELECT intc_ccpta FROM `" . TBINTC . "` WHERE `intc_code` = '$int_codecat'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $intc_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $int_codecat . $encadre . $delimiteur;


                        // Code compta client
                        $rech3 = "SELECT cli_ccpta, cli_ccptasp FROM `" . TBCLI . "` WHERE `cli_code` = '$int_codecli'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $cli_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $encadre . $delimiteur;

                        // Code technicien traitant
                        $ligne .= $encadre . $int_codetec . $encadre . $delimiteur;

                        // Code compta agence
                        $rech3 = "SELECT age_ccpta FROM `" . TBAGE . "` WHERE `age_code` = '$int_codeage'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $age_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $encadre . $delimiteur;

                        // Code technicien
                        $rech3 = "SELECT inth_codetec FROM `" . TBINTH . "` WHERE `inth_id` = '$pdtih_idhisto'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $inth_codetec . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $encadre . $delimiteur;

                        $ligne = substr($ligne, 0, strlen($ligne) - 1);
                        $ligne = decode_str($ligne);
                        echo $ligne . $finligne;
                    }
                }

                // Articles complémentaires
                $rech2 = "SELECT * FROM `" . TBPDTI . "` WHERE pdti_codeint='" . $int_code . "' ORDER BY pdti_id";
                $rows2 = $db->get_results($rech2, ARRAY_A);
                if ($rows2) {
                    foreach ($rows2 as $row2) {
                        $row2 = encode_str($row2);
                        $ligne = "";
                        extract($row2);

                        // Code entête (D = Détail)
                        $ligne .= $encadre . 'D' . $encadre . $delimiteur;

                        // Code article
                        $ligne .= $encadre . $pdti_codepdt . $encadre . $delimiteur;

                        // Quantité
                        $ligne .= $encadre . $pdti_qte . $encadre . $delimiteur;

                        // Code fixe
                        $ligne .= $encadre . 'PRO' . $encadre . $delimiteur;

                        // Code compta catégorie Intervention
                        $rech3 = "SELECT intc_ccpta FROM `" . TBINTC . "` WHERE `intc_code` = '$int_codecat'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $intc_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $int_codecat . $encadre . $delimiteur;

                        // Code compta client
                        $rech3 = "SELECT cli_ccpta, cli_ccptasp FROM `" . TBCLI . "` WHERE `cli_code` = '$int_codecli'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $cli_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $encadre . $delimiteur;

                        // Code technicien traitant
                        $ligne .= $encadre . $int_codetec . $encadre . $delimiteur;

                        // Code compta agence
                        $rech3 = "SELECT age_ccpta FROM `" . TBAGE . "` WHERE `age_code` = '$int_codeage'";
                        $row3 = $db->get_row($rech3, ARRAY_A);
                        if ($row3) {
                            $row3 = encode_str($row3);
                            extract($row3);
                            $ligne .= $encadre . $age_ccpta . $encadre . $delimiteur;
                        } else
                            $ligne .= $encadre . $encadre . $delimiteur;

                        // Code technicien
                        $ligne .= $encadre . $encadre . $delimiteur;

                        $ligne = substr($ligne, 0, strlen($ligne) - 1);
                        $ligne = decode_str($ligne);
                        echo $ligne . $finligne;
                    }
                }
            }
        }
    }
    $db->disconnect();
}
