/**
  * Parse les pleins et remplit le tableau $pleins.
  *
  * @param \SplFileObject $file Fichier CSV fourni par MyCars.
  */
 public function parse(\SplFileObject $file)
 {
     // Repository
     $vehiculeRepository = $this->em->getRepository('ComptesBundle:Vehicule');
     // Configuration du handler
     $configuration = $this->configuration['mycars.csv'];
     // Tableau de correspondance entre le nom du véhicule dans MyCars et l'objet Vehicule
     $vehicules = array();
     foreach ($configuration['vehicules'] as $vehiculeLabel => $vehiculeID) {
         $vehicules[$vehiculeLabel] = $vehiculeRepository->find($vehiculeID);
     }
     // Lignes du fichier CSV qui représentent des pleins
     $refuels = array();
     // Les en-têtes de colonnes
     $headers = array();
     // Numéros de ligne
     $currentLine = 0;
     $headersLine = false;
     while (($cols = $file->fgetcsv()) !== null) {
         // Recherche de la ligne d'en-têtes
         if ($cols[0] == "#entity: refuel") {
             $headersLine = $currentLine + 1;
         }
         // Si la ligne d'en-têtes a été trouvée et qu'on l'a dépassée
         if ($headersLine !== false && $currentLine > $headersLine) {
             // La ligne en cours est un plein
             $refuel = array_combine($headers, $cols);
             $refuels[] = $refuel;
         } elseif ($currentLine == $headersLine) {
             $headers = $cols;
         }
         $currentLine++;
     }
     foreach ($refuels as $refuel) {
         $plein = new Plein();
         // Véhicule
         $vehiculeName = (string) $refuel['##car_name'];
         $vehicule = $vehicules[$vehiculeName];
         $plein->setVehicule($vehicule);
         // Date
         $date = \DateTime::createFromFormat('Y-m-d G:i', (string) $refuel['refuelDate']);
         $plein->setDate($date);
         // Distance parcourue
         $distanceParcourue = (string) $refuel['distance'];
         $plein->setDistanceParcourue($distanceParcourue);
         // Montant
         $montant = (string) $refuel['price'] * (string) $refuel['quantity'];
         $plein->setMontant($montant);
         // Prix au litre
         $prixLitre = (string) $refuel['price'];
         $plein->setPrixLitre($prixLitre);
         // Quantité
         $quantite = (string) $refuel['quantity'];
         $plein->setQuantite($quantite);
         // Classification
         $classification = $this->getClassification($plein);
         $this->classify($plein, $classification);
     }
 }
 /**
  * Parse les pleins et remplit le tableau $pleins.
  *
  * @param \SplFileObject $file Fichier XML fourni par MyCars.
  */
 public function parse(\SplFileObject $file)
 {
     // Repository
     $vehiculeRepository = $this->em->getRepository('ComptesBundle:Vehicule');
     // Configuration du handler
     $configuration = $this->configuration['mycars.xml'];
     // Tableau de correspondance entre le nom du véhicule dans MyCars et l'objet Vehicule
     $vehicules = array();
     foreach ($configuration['vehicules'] as $vehiculeLabel => $vehiculeID) {
         $vehicules[$vehiculeLabel] = $vehiculeRepository->find($vehiculeID);
     }
     $filename = $file->getPathname();
     $xml = simplexml_load_file($filename);
     foreach ($xml->refuel as $refuel) {
         $plein = new Plein();
         // Véhicule
         $vehiculeName = (string) $refuel->car_name;
         $vehicule = $vehicules[$vehiculeName];
         $plein->setVehicule($vehicule);
         // Date
         $date = \DateTime::createFromFormat('Y-m-d G:i', (string) $refuel->refuelDate);
         $plein->setDate($date);
         // Distance parcourue
         $distanceParcourue = (string) $refuel->distance;
         $plein->setDistanceParcourue($distanceParcourue);
         // Montant
         $montant = (string) $refuel->price * (string) $refuel->quantity;
         $plein->setMontant($montant);
         // Prix au litre
         $prixLitre = (string) $refuel->price;
         $plein->setPrixLitre($prixLitre);
         // Quantité
         $quantite = (string) $refuel->quantity;
         $plein->setQuantite($quantite);
         // Classification
         $classification = $this->getClassification($plein);
         $this->classify($plein, $classification);
     }
 }
 /**
  * Détermine la classification d'un plein, parmi :
  *      - self::VALID
  *      - self::WAITING
  *
  * @param Plein $plein
  *
  * @return int
  */
 protected function getClassification(Plein $plein)
 {
     // Recherche d'un éventuel doublon
     $criteria = array('date' => $plein->getDate(), 'vehicule' => $plein->getVehicule());
     $pleinRepository = $this->em->getRepository('ComptesBundle:Plein');
     $similarPlein = $pleinRepository->findOneBy($criteria);
     if ($similarPlein !== null) {
         $classification = self::WAITING;
     } else {
         $classification = self::VALID;
     }
     return $classification;
 }