Supprimer un filtre sur une extraction

Eléphanteau du PHP | 16 Messages

27 févr. 2024, 16:10

Bonjour,

Voilà je récupère une application php qui me permet de faire des exports en fonction des sociétés. J'ai besoin de le modifier ou de créer une nouvelle page en supprimant la sélection des sociétés, il faut que je puisse faire une extraction sur l'ensemble des sociétés.

export.php :
<?php
header('Content-Type: text/html; charset=utf-8');

//cas de la tâche planifiée
if (!empty($argv[1]) && $argv[1] === 'planif') {
    $url = 'passerelle_carburant';
    require_once dirname(__FILE__) . '/../../config.php';
    require_once dirname(__FILE__) . '/../../model/common/Utils.php';
    \Common\Utils::initAutoloader();
    try {
        $nameFile = date('Ymd_His') . '_export.txt';
        $pathLog = dirname(__FILE__) . '/../../log/' . $nameFile;
        if (file_exists($pathLog)) {
            unlink($pathLog);
        }
        $fileLog = fopen($pathLog, 'c+b');
        $cpyMan = new \Admin\Company\CompanyManager(new Common\DAO(DB_CONFIG));
        $tabCpy = $cpyMan->getAll();
        $expMan = new Report\ExportManager(new Common\DAO(DB_EPACK));
		foreach ($tabCpy as $cpy) {
            $dataRes = $expMan->getAll(['month' => date('m') - 1, 'year' => date('Y'), 'cpy' => $cpy]);
            fwrite($fileLog, 'Société : ' . $cpy->getName() . "\r\n");
            fwrite($fileLog, '- Consommation : ' . $dataRes['conso'] . "\r\n");
            fwrite($fileLog, '- Refacturation : ' . $dataRes['refact'] . "\r\n");
        }
        fclose($fileLog);
        $mail = new Common\Mail('Passerelle carburant - Export automatique', 'L\'export mensuel s\'est déroulé avec succès', DEST_MAIL, ['sigmail' => 'Service informatique']);
        $mail->addFile(['name' => $nameFile, 'tmp_name' => $pathLog, 'type' => 'application/txt', 'size' => filesize($pathLog)]);
        $mail->sendMail();

        // Lancer le script PowerShell à la fin de l'export
        exec('powershell.exe -ExecutionPolicy Bypass -File C:\Intranet\Passerelle_carburant\script\convert_crlf.ps1');
        
    } catch (\Admin\AdminException | Exception | Swift_SwiftException $exc) {
        fwrite($fileLog, 'Erreur lors de l\'export mensuel ' . $exc->getMessage());
        $mail = new Common\Mail('Passerelle carburant - Erreur', 'Une erreur est survenue lors de l\'export mensuel : ' . $exc->getMessage(), DEST_MAIL, ['sigmail' => 'Service informatique']);
        $mail->sendMail();
    }
} else {
    require_once(dirname(__FILE__) . '/../../view/template/header.php');
    if (empty($_SESSION['authentPasserelleCarburant']['authent']) && empty(filter_input(INPUT_GET, 'planif'))) {
        require(dirname(__FILE__) . '/../../view/template/noaccess.php');
    } else {
        try {
            $safePost = filter_input_array(INPUT_POST);
            $yearSel = empty($safePost['year']) ? date('Y') : $safePost['year'];
            $monthSel = empty($safePost['month']) ? date('m') - 1 : $safePost['month'];
            if (!empty($safePost)) {
                $cpy = unserialize(urldecode($safePost['cpy']));
                $expMan = new Report\ExportManager(new Common\DAO(DB_EPACK));
                $dataRes = $expMan->getAll(['month' => $monthSel, 'year' => $yearSel, 'cpy' => $cpy]);
            }
		// Lancer le script PowerShell à la fin de l'export
        exec('powershell.exe -ExecutionPolicy Bypass -File C:\Intranet\Passerelle_carburant\script\convert_crlf.ps1');
        } catch (Admin\AdminException $ex) {
            echo new \Common\Alert($ex->getMessage(), 'error');
        }
    }
    include (dirname(__FILE__) . '/../../view/export/v_export.php');
    include (dirname(__FILE__) . '/../../view/template/footer.php');
}
?>
v_export.php :
<h1 class="text-primary text-center">Export</h1>
<!--Formulaire de sélection du mois et de l'année à exporter-->
<form name="form" method="POST" id="form" class="mb-3">
    <fieldset class='w-25 m-auto border p-3'>
        <legend class='text-info'>Paramètres</legend>

        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="cpy">Société</label>
            </div>
            <div class="col-4">
                <select id="cpy" name="cpy" class="form-select form-control form-control-sm" required>
                    <?= Admin\Company\Company::printOptionSelect($safePost, unserialize($_SESSION['authentPasserelleCarburant']['usr'])->getTabCpy()) ?>
                </select>
            </div>
        </div>

        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="year">Année</label>
            </div>
            <div class="col-4">
                <select id="year" name="year" class="form-select form-control form-control-sm" required>
                    <option value="" disabled hidden>Défaut</option>
                    <?php
                    for ($i = 2011; $i <= $yearSel; $i++) {
                        if ($i === (integer) $yearSel) {
                            ?>
                            <option selected value="<?= $i ?>"><?= $i ?></option>
                            <?php
                        } else {
                            ?>
                            <option value="<?= $i ?>"><?= $i ?></option>
                            <?php
                        }
                    }
                    ?>
                </select>
            </div>
        </div>
        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="month">Mois</label>
            </div>
            <div class="col-4">
                <select id="month" name="month" class="form-select form-control form-control-sm" required>
                    <option value="" disabled hidden>Défaut</option>
                    <?php
                    foreach (TAB_MONTH as $key => $month) {
                        if ($key === (integer) $monthSel) {
                            ?>
                            <option selected value="<?= $key ?>"><?= $month ?></option>
                            <?php
                        } else {
                            ?>
                            <option value="<?= $key ?>"><?= $month ?></option>
                            <?php
                        }
                    }
                    ?>
                </select>
            </div>
        </div>
        <div class="text-center">
            <input type="submit" value="Exporter" name="validForm" title="Export vers FTP : <?= FTP_ACTIF ? 'Actif' : 'Inactif' ?>" id="validForm" class="btn btn-sm btn-primary">
        </div>
    </fieldset>
</form>
<?php
if (!empty($safePost) && !empty($dataRes)) {
    ?>
    <!--Le formulaire est soumis, on affiche le résultat de l'export-->
    <!--Tableau de données-->
    <fieldset class='w-25 m-auto border p-3'>
        <legend class='text-info'>Résultat de l'export pour la société <?= $cpy->getName() ?> sur la période <?= mb_strtolower(TAB_MONTH[$monthSel]) ?> <?= $yearSel ?></legend>
        <p>Consommation : <?= $dataRes['conso'] ?></p>
        <p>Refacturation : <?= $dataRes['refact'] ?></p>
    </fieldset>
    <?php
}
    
Modifié en dernier par matthieudu57 le 27 févr. 2024, 17:43, modifié 1 fois.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 févr. 2024, 16:17

Bonjour,

Quel est le problème ?
Qu'as tu essayé ?
Qu'est-ce qui ne fonctionne pas ? Quel est le message d'erreur ?

Je pose ces questions car PHPfrance est un forum d'entraide entre développeurs, nous pouvons te débloquer, mais nous n'allons pas faire le boulot à ta place :)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 16 Messages

27 févr. 2024, 17:51

Le problème c'est que ma modification ne semble pas correct car ça n'exporte plus rien...
j'ai essayé ça :

export.php :
<?php
header('Content-Type: text/html; charset=utf-8');

//cas de la tâche planifiée
if (!empty($argv[1]) && $argv[1] === 'planif') {
    $url = 'passerelle_carburant';
    require_once dirname(__FILE__) . '/../../config.php';
    require_once dirname(__FILE__) . '/../../model/common/Utils.php';
    \Common\Utils::initAutoloader();
    try {
        $nameFile = date('Ymd_His') . '_export.txt';
        $pathLog = dirname(__FILE__) . '/../../log/' . $nameFile;
        if (file_exists($pathLog)) {
            unlink($pathLog);
        }
        $fileLog = fopen($pathLog, 'c+b');
        $cpyMan = new \Admin\Company\CompanyManager(new Common\DAO(DB_CONFIG));
        $tabCpy = $cpyMan->getAll();
        $expMan = new Report\ExportManager(new Common\DAO(DB_EPACK));
        foreach ($tabCpy as $cpy) {
            $dataRes = $expMan->getAll(['month' => date('m') - 1, 'year' => date('Y'), 'cpy' => $cpy]);
            fwrite($fileLog, 'Société : ' . $cpy->getName() . "\r\n");
            fwrite($fileLog, '- Consommation : ' . $dataRes['conso'] . "\r\n");
            fwrite($fileLog, '- Refacturation : ' . $dataRes['refact'] . "\r\n");
        }
        fclose($fileLog);
        $mail = new Common\Mail('Passerelle carburant - Export automatique', 'L\'export mensuel s\'est déroulé avec succès', DEST_MAIL, ['sigmail' => 'Service informatique']);
        $mail->addFile(['name' => $nameFile, 'tmp_name' => $pathLog, 'type' => 'application/txt', 'size' => filesize($pathLog)]);
        $mail->sendMail();

        // Lancer le script PowerShell à la fin de l'export
        exec('powershell.exe -ExecutionPolicy Bypass -File C:\Intranet\Passerelle_carburant\script\convert_crlf.ps1');
        
    } catch (\Admin\AdminException | Exception | Swift_SwiftException $exc) {
        fwrite($fileLog, 'Erreur lors de l\'export mensuel ' . $exc->getMessage());
        $mail = new Common\Mail('Passerelle carburant - Erreur', 'Une erreur est survenue lors de l\'export mensuel : ' . $exc->getMessage(), DEST_MAIL, ['sigmail' => 'Service informatique']);
        $mail->sendMail();
    }
} else {
    require_once(dirname(__FILE__) . '/../../view/template/header.php');
    if (empty($_SESSION['authentPasserelleCarburant']['authent']) && empty(filter_input(INPUT_GET, 'planif'))) {
        require(dirname(__FILE__) . '/../../view/template/noaccess.php');
    } else {
        try {
            $safePost = filter_input_array(INPUT_POST);
            $yearSel = empty($safePost['year']) ? date('Y') : $safePost['year'];
            $monthSel = empty($safePost['month']) ? date('m') - 1 : $safePost['month'];
            if (!empty($safePost)) {
                // Lancer le script PowerShell à la fin de l'export
                exec('powershell.exe -ExecutionPolicy Bypass -File C:\Intranet\Passerelle_carburant\script\convert_crlf.ps1');
                $expMan = new Report\ExportManager(new Common\DAO(DB_EPACK));
                $dataRes = $expMan->getAll(['month' => $monthSel, 'year' => $yearSel, 'cpy' => 'all']);
            }
        } catch (Admin\AdminException $ex) {
            echo new \Common\Alert($ex->getMessage(), 'error');
        }
    }
    include (dirname(__FILE__) . '/../../view/export/v_export.php');
    include (dirname(__FILE__) . '/../../view/template/footer.php');
}
?>
v_export.php :
<h1 class="text-primary text-center">Export</h1>
<!--Formulaire de sélection du mois et de l'année à exporter-->
<form name="form" method="POST" id="form" class="mb-3">
    <fieldset class='w-25 m-auto border p-3'>
        <legend class='text-info'>Paramètres</legend>

        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="cpy">Société</label>
            </div>
            <div class="col-4">
                <!-- Supprimez le sélecteur de société -->
                <!-- <select id="cpy" name="cpy" class="form-select form-control form-control-sm" required>
                    <?= Admin\Company\Company::printOptionSelect($safePost, unserialize($_SESSION['authentPasserelleCarburant']['usr'])->getTabCpy()) ?>
                </select> -->
                <input type="hidden" name="cpy" value="all"> <!-- Ajoutez une valeur pour indiquer toutes les sociétés -->
            </div>
        </div>

        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="year">Année</label>
            </div>
            <div class="col-4">
                <select id="year" name="year" class="form-select form-control form-control-sm" required>
                    <option value="" disabled hidden>Défaut</option>
                    <?php
                    for ($i = 2011; $i <= $yearSel; $i++) {
                        if ($i === (integer) $yearSel) {
                            ?>
                            <option selected value="<?= $i ?>"><?= $i ?></option>
                            <?php
                        } else {
                            ?>
                            <option value="<?= $i ?>"><?= $i ?></option>
                            <?php
                        }
                    }
                    ?>
                </select>
            </div>
        </div>
        <div class="mb-3 row justify-content-center align-items-center">
            <div class="col-3 text-end">
                <label class="fs-5" for="month">Mois</label>
            </div>
            <div class="col-4">
                <select id="month" name="month" class="form-select form-control form-control-sm" required>
                    <option value="" disabled hidden>Défaut</option>
                    <?php
                    foreach (TAB_MONTH as $key => $month) {
                        if ($key === (integer) $monthSel) {
                            ?>
                            <option selected value="<?= $key ?>"><?= $month ?></option>
                            <?php
                        } else {
                            ?>
                            <option value="<?= $key ?>"><?= $month ?></option>
                            <?php
                        }
                    }
                    ?>
                </select>
            </div>
        </div>
        <div class="text-center">
            <input type="submit" value="Exporter" name="validForm" title="Export vers FTP : <?= FTP_ACTIF ? 'Actif' : 'Inactif' ?>" id="validForm" class="btn btn-sm btn-primary">
        </div>
    </fieldset>
</form>
<?php
if (!empty($safePost) && !empty($dataRes)) {
    ?>
    <!--Le formulaire est soumis, on affiche le résultat de l'export-->
    <!--Tableau de données-->
    <fieldset class='w-25 m-auto border p-3'>
        <legend class='text-info'>Résultat de l'export pour la société <?= $cpy->getName() ?> sur la période <?= mb_strtolower(TAB_MONTH[$monthSel]) ?> <?= $yearSel ?></legend>
        <p>Consommation : <?= $dataRes['conso'] ?></p>
        <p>Refacturation : <?= $dataRes['refact'] ?></p>
    </fieldset>
    <?php
}
    

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

27 févr. 2024, 19:36

Il faut que tu avances davantage dans ton débugage.
A quel endroit ça ne fonctionne pas comme prévu dans ton code ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 16 Messages

28 févr. 2024, 11:08

Lorsque je clique sur exporter ça charge, le menu disparaît et ma page est ensuite vide, pas de message d'erreur ou de succès.

Eléphanteau du PHP | 16 Messages

01 mars 2024, 10:23

Personne ?

ynx
Mammouth du PHP | 586 Messages

01 mars 2024, 11:49

Bonjour,

Nous ne pouvons pas tester ton code car nous n'avons pas accès à l'ensemble du projet, nous ne pouvons donc pas deviner l'erreur que tu rencontres.

Il faut que tu avances dans ton débugage : ajoute des traces (echo, var_dump, print_r, error_log...) pour comprendre le fil d'exécution de ton code.
Si ce n'est pas déjà le cas, active l'affichage des erreurs pendant le développement et/ou consulte les logs du serveur web : tutoriels/page-blanche-script-php-comme ... 73178.html

Eléphanteau du PHP | 16 Messages

01 mars 2024, 12:48

PHP Fatal error: Uncaught TypeError: Argument 1 passed to Admin\Company\CompanyManager::getFiltreAna() must be an instance of Admin\Company\Company, string given, called in C:\Intranet\Passerelle_Carburant\model\report\ExportManager.php on line 52 and defined in C:\Intranet\Passerelle_Carburant\model\admin\company\CompanyManager.php:132
Stack trace:
#0 C:\Intranet\Passerelle_Carburant\model\report\ExportManager.php(52): Admin\Company\CompanyManager->getFiltreAna()
#1 C:\Intranet\Passerelle_Carburant\controller\export\test.php(65): Report\ExportManager->getAll()
#2 {main}
thrown in C:\Intranet\Passerelle_Carburant\model\admin\company\CompanyManager.php on line 132

ynx
Mammouth du PHP | 586 Messages

01 mars 2024, 13:22

L'erreur indique que, dans le fichier ExportManager.php ligne 52, le paramètre passé à la méthode getFiltreAna() devrait être une instance (un objet) de la classe Company, or c'est une chaine de caractère qui est passée en paramètre.
Difficile de comprendre l'erreur sans analyser le code, il faut encore débugger pour comprendre comment fonctionne le code des fichiers ExportManager.php et CompanyManager.php.
Si tu ne trouves pas la solution, partage nous le code des fichiers test.php, CompanyManager.php et ExportManager.php