Réclamaposte, Creation d'un fichier csv pour envoi à la poste |
Bienvenue invité ( Connexion | Inscription )
Réclamaposte, Creation d'un fichier csv pour envoi à la poste |
20 Jul 2010, 10:33
Message
#1
|
|
Ceinture verte OSC Groupe : Membres Messages : 645 Inscrit : 27-May 04 Membre no 2547 |
Bonjour a tous,
j'essaye en vain de corriger un fichier qui doit créer un fichier csv des colis arrivés en retard qui se base sur la contribution réclamaposte. cependant au vu des dernières modifications lié à la poste je n'arrive pas à trouver pourquoi mon script ne fonctionne pas. Voici le script au complet : Si besoin je peux également poster le contenu des fichier en include, bien que je ne pense pas que le problème vienne de la. Merci d'avance Decad7 Code [Nouveau code en bas]
Ce message a été modifié par decad7 - 20 Jul 2010, 12:25. -------------------- Osc version ms2fr avec les contributions suivantes - BTS - SiteMap - Product on Order - Enable / Disable Category - Next_Prev Link + modif perso - Wysiwing - Envoi de mail sous format HTML - SaleMaker - Header Tag - News par catégories - Product Description - Point de parrainage + visu des filleuls (coté client) - Gestion des admins - All products - Sitemap (compatible Yazu)- Latest News v1.1.4 - Pdf Catalog - New par categorie - Promo par categorie - Quickupdate - Menu déroulant pour date de naissance - Big Image - Catégorie Description - Menu déroulant pour Quantité - Icon de suppression de produit dans panier - Mailinglist V2.0 (Compatible avec OSC & Newsletters Unsubscribe ) - Salesreport - Menu Catégorie déroulant - Yazu - dropdownlist - Print order - Generation auto de newsletter + Des modifications perso .
Ip Tools - Tous sur Datetime en PHP |
|
20 Jul 2010, 12:24
Message
#2
|
|
Ceinture verte OSC Groupe : Membres Messages : 645 Inscrit : 27-May 04 Membre no 2547 |
Bon j'ai fait quelques modifications épuré un peu le truc, suivi quelques conseil présent sur le forum, cependant cela ne fonctionne toujours pas, si quelqu'un pouvait me donner quelques conseils.
Merci d'avance decad7 Code <?php
include('includes/application_top.php'); include('reclamaposte_dates.php'); include('reclamaposte_ocr.php'); if ($HTTP_GET_VARS['act'] == '') { $HTTP_GET_VARS['act'] = 0; } ini_set ('max_execution_time', 0); switch ($HTTP_GET_VARS['act']) { case 1 : //Check that we have a file if((!empty($_FILES["userfile"])) && ($_FILES['userfile']['error'] == 0)) { //Check if the file is JPEG image and it's size is less than 350Kb $filename = basename($_FILES['userfile']['name']); if ($_FILES["uploaded_file"]["size"] < 350000) { //Determine the path to which we want to save this file $uploaddir = DIR_FS_TMP; $uploadfile = $uploaddir . $filename; //Check if the file with the same name is already exists on the server if (!(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile))) { echo "Error: A problem occurred during file upload!"; } } else { echo "Error: Only .txt files under 350Kb are accepted for upload"; } } else { echo "Error: No file uploaded"; } // Enregistrement des donnees du fichier $handle = fopen ($uploadfile, "r"); if ($handle) { while (!feof($handle)) { $lines[] = fgets($handle, 4096); } fclose($handle); } /* Section de paramétrage */ if (function_exists('ini_get') && function_exists('ini_set') ) { set_time_limit(300); // Eviter le timeout PHP - Ne fonctionne pas en safe_mode } // Répertoire Temporaire $tmp_dir = DIR_FS_TMP; // en mutualisé // Fichiers temporaraires $cookie_filename = $tmp_dir . '/laposte.txt'; // Fichiers de traitement $fremboursements = $tmp_dir . "/laposte.remboursements.txt"; $flist = $tmp_dir . "/laposte.list.txt"; // Status livré $status['0']['description'] = 'Votre colis est livré.'; $status['0']['md5'] = '6db6d5691e50dddfc752bc072766f414'; $status['0']['remboursable'] = 'true'; $status['0']['initial_transit'] = 'false'; $status['1']['description'] = 'Votre colis est livré au gardien ou à un des voisins.'; $status['1']['md5'] = 'e61cd96b5a3ed2289eabfbe7d458f5a0'; $status['1']['remboursable'] = 'true'; $status['1']['initial_transit'] = 'false'; $status['2']['description'] = 'Votre colis est livré au gardien ou à un des voisins.'; $status['2']['md5'] = '8c87ec27d85bda245b2665a790d832be'; $status['2']['remboursable'] = 'true'; $status['2']['initial_transit'] = 'false'; // Status présentés $status['3']['description'] = 'Le destinataire était absent lors de la première livraison. Votre colis sera presenté une nouvelle fois le prochain jour ouvré'; $status['3']['md5'] = '9ac0f6da590b74ff569a497ead419c6a'; $status['3']['remboursable'] = 'true'; $status['3']['initial_transit'] = 'false'; $status['4']['description'] = 'Votre colis est disponible au bureau de poste. Le destinataire, une fois l\'avis d\'instance reçu, dispose de 15 jours consecutifs pour retirer le colis sur présentation de son bon de retrait et d\'une pièce d\'identité.'; $status['4']['md5'] = '1cc984f62d70fd3e3ab995851723c513'; $status['4']['remboursable'] = 'true'; $status['4']['initial_transit'] = 'false'; $status['5']['description'] = 'Colis ou accusé de réception à signer mis à disposition dans la boîte postale'; $status['5']['md5'] = 'e4ecccd056a93d33ec845cdd89c163a4'; $status['5']['remboursable'] = 'true'; $status['5']['initial_transit'] = 'false'; // Status non remboursable $status['6']['description'] = 'Votre colis est arrivé par erreur sur un site. Il est en cours de réacheminement vers son site de distribution.'; $status['6']['md5'] = 'fd8d6ce7ed7af2b1c343f9eb633b526d'; $status['6']['remboursable'] = 'true'; $status['6']['initial_transit'] = 'true'; $status['7']['description'] = 'Le destinataire du colis n\'habite pas à l\'adresse indiquée. Le colis est retourné à l\'expéditeur. '; $status['7']['md5'] = 'b5beef7a53c647e996c04da8d40ca303'; $status['7']['remboursable'] = 'false'; $status['7']['initial_transit'] = 'false'; // Status en transit $status['8']['description'] = 'Votre colis a été déposé au bureau de poste d\'expédition.'; $status['8']['md5'] = '221506256f93578778fd2790217d6eb1'; $status['8']['remboursable'] = 'true'; $status['8']['initial_transit'] = 'true'; $status['9']['description'] = 'Votre colis a été déposé au bureau de poste après l\'heure limite de dépôt. Il sera expédié dès le prochain jour ouvré.'; $status['9']['md5'] = '2c0b1941f438c49339f7e77b99d5fd14'; $status['9']['remboursable'] = 'true'; $status['9']['initial_transit'] = 'true'; $status['10']['description'] = 'Votre colis est arrivé sur son site de distribution'; $status['10']['md5'] = '44134c9ababf7da385ba00d4cad50a6c'; $status['10']['remboursable'] = 'true'; $status['10']['initial_transit'] = 'true'; $status['11']['description'] = 'Votre colis est pris en charge par La Poste. Il est en cours d\'acheminement.'; $status['11']['md5'] = '25ad5b7a6511fba97b00e514b8cb770a'; $status['11']['remboursable'] = 'true'; $status['11']['initial_transit'] = 'true'; /* FIN : Section de paramétrage */ if(!function_exists('file_put_contents')) { function file_put_contents($filename, $data, $file_append = false) { $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); if(!$fp) { trigger_error('file_put_contents - erreur écriture dans.', E_USER_ERROR); return; } fputs($fp, $data); fclose($fp); } } function curl_file_get_contents($URL, $header = 0) { global $ch, $cookie_filename; $agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"; curl_setopt($ch, CURLOPT_USERAGENT, $agent); curl_setopt($ch, CURLOPT_HEADER, $header); curl_setopt($ch, CURLOPT_URL, $URL); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_filename); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_filename); $data = curl_exec($ch); return $data; } function grab_coliposte_statuses($noColis, $firstOnly = false) { global $status, $status_page, $main_url, $tmp_dir; $status_page = grab_coliposte($noColis); // Statut de la livraison //$count = preg_match_all('#<img src=\'(imageio\?styleBold=true&width=260&id=' . substr($noColis,3,-1) . '_libe_[0-9].*?)\'#', $status_page, $result); $count = preg_match_all('#<img src=\'(imageio\?styleBold=true&width=260&id=(.)*_libe_[0-9].*?)\'#', $status_page, $result); //file_put_contents($tmp_dir."/debug.txt", '#<img src=\'(imageio\?styleBold=true&width=75&id=' . substr($noColis,3,-1) . '_date.*?)\'#'); if (!$count) { if ( preg_match_all('#Numéro de colis datant de plus de 30 jour#', $status_page, $result) ) return(-2); else return -1; } // We retrieve all statuses displayed on the tracking page $statuses_found= array(); for($x = 0; $x < sizeof( $result[1]); $x++) { //file_put_contents($tmp_dir."/debug.txt", $main_url. '/portail_colissimo/' . $result[1][$x]); if ( ! $img = @curl_file_get_contents($main_url. '/portail_colissimo/' . $result[1][$x], 0, 1) ) { return -1; } else { $statuses_found[]=md5($img); if ($firstOnly) break; //file_put_contents($tmp_dir."/debug.txt", sizeof( $result[1]) . ' | '.$main_url . '/portail_colissimo/'.$result[1][$x]); } } return $statuses_found; } function grab_coliposte_date($noColis, $last_status) { global $ch, $main_url, $status_page, $tmp_dir; //preg_match_all('#<img src=\'(imageio\?styleBold=true&width=75&id=' . substr($noColis,3,-1) . '_date_[0-9].*?)\'#', $status_page, $result); preg_match_all('#<img src=\'(imageio\?styleBold=true&width=75&id=(.)*_date_[0-9].*?)\'#', $status_page, $result); file_put_contents($tmp_dir."/debug.txt", $main_url.'/portail_colissimo/' . $result[1][$last_status]); if (!$date = @curl_file_get_contents($main_url.'/portail_colissimo/' . $result[1][$last_status], 0, 1) ) return -1; return $date; } function merci_la_poste($noColis) { global $status, $ch, $tmp_dir, $tmpfname; $url = "http://www.colissimo.fr/portail_colissimo/"; $ch = curl_init(); $status_page = curl_file_get_contents($url . 'suivre.do?m=10003005&colispart=' . $noColis); // Statut de la livraison // preg_match_all('#imageio\?styleBold=true&width=260&id=' . $noColis . '_libe_[0-9].*?#', $status_page, $result); echo " - result - " .$result; // We retrieve all statuses displayed on the tracking page $statuses_found= array(); for($x = 0; $x < sizeof($result); $x++) { if ( ! $img = @curl_file_get_contents($url . $result[0][$x], 0, 1) ) { return -1; } else { for($i = 0; $i < sizeof( $status ); $i++) { if ( $status[$i]['md5'] = md5($img)) break; } } $statuses_found[]=$i; } $last_status = 0; $case = $i; // now we treat all statuses found if (sizeof($statuses_found) > 1) { for($y = 0; $y < sizeof( $statuses_found); $y++) { if ($status[$statuses_found[$y]]['remboursable'] == 'false') { $case = 9; break; } if ($status[$statuses_found[$y]]['initial_transit'] == 'false') $last_status = $y; } } switch( $case ) { case 0 : // La date // preg_match_all('#imageio\?styleBold=true&width=75&id=' . $noColis . '_date_[0-9].*?#', $status_page, $result); if ( ! $date = @curl_file_get_contents($url . $result[0][$last_status], 0, 1) ) break; curl_close($ch); $tmpfname = tempnam($tmp_dir, "laposte"); file_put_contents($tmpfname, $date); return(1); break; // // Cas dans lesquels la commande n'est pas remboursable // case 9 : curl_close($ch); return(-1); // // Ni livrée ni non-remboursable, on remets ça pour la prochaine fois ! // default : curl_close($ch); return(0); } } function filter($string) { $string = str_replace(CHR(10), "", $string); $string = str_replace(CHR(13), "", $string); $string = str_replace(CHR(9), "", $string); $string = str_replace("|", "", $string); $string = str_replace("\"", "", $string); return ($string); } header("Content-Type: application/csv-tab-delimited-table"); header("Content-disposition: filename=retardcolissimo.csv"); echo "Compte client :;;Raison sociale:;\r\n"; echo "SIRET :; -xxxxxxxxxxx- \r\n"; echo "Compte; Date dépôt colis;N° colis;Nom Prénom Destinataire;Adresse;Code postal;Ville\r\n";// Entete fichier foreach ($lines as $id => $line) { $shipping = explode(";", $line); if ($shipping[0] != "") { $noColis = filter($shipping[0]); $typecolissimo = substr($noColis,0,2); if ($typecolissimo == '8V' || $typecolissimo == '8L' || $typecolissimo == '8P' || $typecolissimo == '7D') { // C'est un colis livrable en 48H $num_commande = $shipping[1]; $nom = filter($shipping[3]); $adresse1 = filter($shipping[4]); $adresse2 = filter($shipping[5]); $codepostal = $shipping[6]; $ville = filter($shipping[7]); $date_expedition = filter($shipping[8]); $num_compte = $shipping[11]; if ($nom != 'CACHE' && $nom != 'CACHE') // si c'est un colis retour, on ne fait pas de réclamation { $d = substr($date_expedition, 0, 2); $m = substr($date_expedition, 3, 2); $y = substr($date_expedition, 8, 2); $date_p = strtotime(sprintf('20%02d-%02d-%02d', $y, $m, $d)); $date = merci_la_poste($noColis); echo "la date = " . $date . " du colis " . $noColis . "- "; if( $date != 0 && $date != -1 ) // Le colis est verifiable { // Processus OCR sur l'image 'date'; if ( ! $img = @imagecreatefrompng($tmpfname) ) continue; // arret de la boucle // Masquage des slashes sur l'image $yellow = imagecolorallocate($img, 255, 234, 153); imagefilledrectangle($img, 12, 0, 14, 12, $yellow); imagefilledrectangle($img, 26, 0, 29, 12, $yellow); // Fichier de sortie temporaire $comparefile = tempnam($tmp_dir, "laposte"); if ( ! @imagepng($img, $comparefile) ) continue; // arret de la boucle /* PHP OCR */ //This is the main function. Format of the output array is $retmas[$line_number][$letter_number][$type] //where $type is 0 for digit and 1 for relative closeness $retmas = parse_image($comparefile,$conf['font_file']); $date = print_output_text($retmas,$tmpfname, 0); unlink($comparefile); unlink($tmpfname); $d = substr($date, 0, 2); $m = substr($date, 2, 2); $y = substr($date, 4, 2); $date_livraison = strtotime(sprintf('20%02d-%02d-%02d', $y, $m, $d)); // date de livraison du colis $nb_jours_ouvres = get_nb_open_days($date_p, $date_livraison); if ($nb_jours_ouvres > 2) { echo $num_compte . ";"; echo $date_expedition . ";"; echo $noColis . ";"; echo $nom . ";"; echo $adresse1 ." ". $adresse2 . ";"; echo $codepostal . ";"; echo $ville . "\r\n"; // echo date("d-m-Y", $datep) . ";"; // echo $date_arrivee . ";"; // echo "retard" . "\r\n"; } } } } } if ( $i % 10 ) usleep(300); } break; case 0 : ?> <!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"> <html <?php echo HTML_PARAMS; ?>> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"> <title><?php echo "retardcolissimo" ?></title> <link rel="stylesheet" type="text/css" href="includes/stylesheet.css"> </head> <body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF"> <?php require(DIR_WS_INCLUDES . 'header.php'); ?> <table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top" height="27"> <table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"> <?php require(DIR_WS_INCLUDES . 'column_left.php');?> </table></td> <td class="pageHeading" valign="top"> <?php echo "retardcolissimo";?> <FORM enctype="multipart/form-data" action="retardcolissimov3.php?act=1" method="post"> <INPUT TYPE ="file" name="userfile" size="60"> <P> <INPUT TYPE = "submit" name="Transfert" value="Envoyer le fichier"> </FORM> <?php require(DIR_WS_INCLUDES . 'footer.php'); ?> </p></body> </html> <?php require(DIR_WS_INCLUDES . 'application_bottom.php'); } ?> -------------------- Osc version ms2fr avec les contributions suivantes - BTS - SiteMap - Product on Order - Enable / Disable Category - Next_Prev Link + modif perso - Wysiwing - Envoi de mail sous format HTML - SaleMaker - Header Tag - News par catégories - Product Description - Point de parrainage + visu des filleuls (coté client) - Gestion des admins - All products - Sitemap (compatible Yazu)- Latest News v1.1.4 - Pdf Catalog - New par categorie - Promo par categorie - Quickupdate - Menu déroulant pour date de naissance - Big Image - Catégorie Description - Menu déroulant pour Quantité - Icon de suppression de produit dans panier - Mailinglist V2.0 (Compatible avec OSC & Newsletters Unsubscribe ) - Salesreport - Menu Catégorie déroulant - Yazu - dropdownlist - Print order - Generation auto de newsletter + Des modifications perso .
Ip Tools - Tous sur Datetime en PHP |
|
4 Aug 2010, 09:15
Message
#3
|
|
Ceinture orange OSC Groupe : Membres Messages : 225 Inscrit : 25-May 08 Membre no 21918 |
Salut,
Si ton problème concerne uniquement l'export en csv dans reclamaposte alors regarde ma solution. Par contre, si ton problème concerne des bugs avec reclamaposte alors regarde le post sur reclamaposte. Donc voici ce que j'ai rajouté à reclamaposte pour exporter en un clic les colis en retard : Lorsque l'on clique sur 1, cela exporte les colis avec un drapeau rouge. Lorsque tu clique en 2, cela exporte les colis pour lesquels une reclamation est déja envoyée, mais pour lesquels je n'ai pas eu de remboursement. Desfois 50% des colis que l'on m'avait refusé une première fois, passe la deuxième. Donc c'est bien utile. Voici le code à rajouter dans admin/reclamaposte.php pour avoir ces deux options : Code <tr class="dataTableHeadingRow"><td class="dataTableHeadingContent" colspan="4"><a href="exportcoliposte.php?lapstatus=5">Exporter liste colis en retard</a> || <a href="exportcoliposte.php?lapstatus=35">Exporter liste colis non pris en compte</a></td></tr> Il faut également créer un fichier exportcoliposte.php et le mettre dans admin. Voici le contenu de ce nouveau fichier : Code <? require('includes/application_top.php'); $lapstatus = $_GET['lapstatus']; //Requete SQL $query="SELECT DATE_FORMAT(c.date_added, '%d-%m-%Y') as date_added, a.orders_id, a.track_num, b.delivery_name, '' as prenom, concat(concat(b.delivery_street_address, ' '), b.delivery_suburb) as adresseX, b.delivery_postcode, b.delivery_city FROM orders_status_history a Left join orders b on a.orders_id=b.orders_id Left join (select orders_id, date_added from orders_status_history x where orders_status_id = 3) c on a.orders_id = c.orders_id WHERE a.laposte_status = "; $query .= $lapstatus; $result = mysql_query($query) or die(mysql_error()); //Boucle sur les resultats while($row = mysql_fetch_array($result)) { $txt_output .= "$row[date_added];$row[track_num];$row[delivery_name];$row[prenom];$row[adresseX];$row[delivery_postcode];$row[delivery_city]\r\n"; } // send headers for download header("Content-type: application/vnd.ms-excel"); header("Content-disposition: attachment; filename=Export_Colisposte.csv"); //header("Content-Type: plain/text"); //header("Content-Disposition: Attachment; filename=Factures_Clients_" . $moisX . "_" . $AnneeR . ".txt"); //header("Pragma: no-cache"); print $txt_output; exit; ?> Ce n'est pas du développement de haut niveau mais ca a le mérite de fonctionner. Je n'ai ensuite plus qu'à copier les données et à les coller dans la matrice de coliposte dont les colonnes sont les mêmes. Seule hic, je ne suis pas arriver à isoler le prenom et le nom. En effet, dans la table "orders", dans le champ delivery_name tu as le nom et le prenom dans la même colonne... Donc il faut faire la séparation manuellement. Mais je pense qu'en rajoutant une jointure avec la table customers ca doit se faire. N'oublie pas de modifier le orders_status_id car tu n'as peut-être pas les même que moi. Voila si tu fais la modification pour séparer le nom et le prenom, ca serait sympa de m'en faire profiter.... Merci et bon code Ce message a été modifié par Johnny124 - 4 Aug 2010, 09:18. |
|
22 Feb 2011, 21:13
Message
#4
|
|
Ceinture jaune+ OSC Groupe : Membres Messages : 151 Inscrit : 30-September 06 Lieu : paris Membre no 12378 |
Bonsoir,
Super pratique cet export .csv. As-tu une piste pour la traduction des accents, chez moi il passe illisible sur mon excel... Merci. |
|
24 Feb 2011, 11:02
Message
#5
|
|
Ceinture orange+ OSC Groupe : Membres Messages : 301 Inscrit : 9-December 09 Membre no 26687 |
Bonsoir, Super pratique cet export .csv. As-tu une piste pour la traduction des accents, chez moi il passe illisible sur mon excel... Merci. Mets tes accents en code octal code octal é => \351 è => \350 ê => \352 à => \340 Ce message a été modifié par brouillard - 24 Feb 2011, 12:29. |
|
24 Feb 2011, 13:04
Message
#6
|
|
Ceinture jaune+ OSC Groupe : Membres Messages : 151 Inscrit : 30-September 06 Lieu : paris Membre no 12378 |
Désolée mais moi pas avoir tout compris, c'est quoi l'octal ?
Merci de ton aide. |
|
24 Feb 2011, 13:28
Message
#7
|
|
Ceinture orange+ OSC Groupe : Membres Messages : 301 Inscrit : 9-December 09 Membre no 26687 |
code octal
le "é" en code octal = \351 è => \350 ê => \352 à => \340 |
|
5 May 2012, 19:02
Message
#8
|
|
Ceinture jaune+ OSC Groupe : Membres Messages : 126 Inscrit : 28-February 10 Lieu : Montargis Membre no 27166 |
Bonjour,
Afin de donner une uniformité au document, j'ai modifié les lignes suivantes : Code <tr class="dataTableHeadingRow"><td class="dataTableHeadingContent" colspan="4"><a href="exportcoliposte.php?lapstatus=5">Exporter liste colis en retard</a> || <a href="exportcoliposte.php?lapstatus=35">Exporter liste colis non pris en compte</a></td></tr> en les remplaçant par celles-ci :Code <tr> Que j'ai placé après cette ligne :<td class="smallText" colspan="4"> Télécharger au format CSV la liste des colis en retard <a href="exportcoliposte.php?lapstatus=5"><input type="submit" name="Exporter la liste des colis en retard" /></a> Télécharger au format CSV la liste des colis non pris en compte <a href="exportcoliposte.php?lapstatus=35"><input type="submit" name="Exporter la liste des colis non pris en compte" /></a> </td> </tr> Code <tr><td class="pageHeading"><?php echo 'Réclamations La Poste'; ?></td></tr>
Ce message a été modifié par Quentin de Montargis - 5 May 2012, 19:03. |
|
Version bas débit | Nous sommes le : 30th March 2024 - 06:50 |
Ce site est déclaré auprès de la commision Nationale de l'Informatique et des Libertés (déclaration n°: 1043896) |