src/Service/Akimedia.php line 316

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use Carbon\Carbon;
  4. use Pimcore\Model\WebsiteSetting;
  5. use GuzzleHttp\Client;
  6. class Akimedia {
  7.     public static function login() {
  8.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  9.         $login WebsiteSetting::getByName('akimedia-login')->getData();
  10.         $password WebsiteSetting::getByName('akimedia-password')->getData();
  11.         $body = [
  12.             "email" => $login,
  13.             "password" => $password,
  14.         ];
  15.         $client = new Client();
  16.         $response $client->request('POST'"$url/api/login", [
  17.             'headers' => [
  18.                 'Content-Type' => 'application/x-www-form-urlencoded',
  19.             ],
  20.             'body' => json_encode($body)
  21.         ]);
  22.         $results json_decode($response->getBody(), true);
  23.         if($results['success']){
  24.             return $results['token'];
  25.         }else{
  26.             return $results['error'];
  27.         }
  28.     }
  29.     public static function getSites($request) {
  30.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  31.         $session $request->getSession();
  32.         $token $session->get('akimedia-token');
  33.         $client = new Client();
  34.         $response $client->request('GET'"$url/api/getPublicSites", [
  35.             'headers' => [
  36.                 'Content-Type' => 'application/x-www-form-urlencoded',
  37.                 'Authorization' => 'Bearer '.$token,
  38.             ]
  39.         ]);
  40.         $results json_decode($response->getBody(), true);
  41.         if($results['success']){
  42.             $siteArray = [];
  43.             foreach($results['sites'] as $region){
  44.                 $siteArray array_merge($siteArray$region);
  45.             }
  46.             return $siteArray;
  47.         }else{
  48.             return $results['error'];
  49.         }
  50.     }
  51.     public static function getSitesByProvinces($request) {
  52.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  53.         $session $request->getSession();
  54.         $token $session->get('akimedia-token');
  55.         $client = new Client();
  56.         $response $client->request('GET'"$url/api/getPublicSites", [
  57.             'headers' => [
  58.                 'Content-Type' => 'application/x-www-form-urlencoded',
  59.                 'Authorization' => 'Bearer '.$token,
  60.             ]
  61.         ]);
  62.         $results json_decode($response->getBody(), true);
  63.         if($results['success']){
  64.             return $results['sites'];
  65.         }else{
  66.             return $results['error'];
  67.         }
  68.     }
  69.     public static function getCollectesAndSites($request) {
  70.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  71.         $session $request->getSession();
  72.         $token $session->get('akimedia-token');
  73.         if($request->get('cp')){
  74.             $distanceMax \Pimcore\Model\WebsiteSetting::getByName('rayon-max-recherche'null)->getData();
  75.         }else{
  76.             $distanceMax \Pimcore\Model\WebsiteSetting::getByName('rayon-max-si-pas-lieu'null)->getData();
  77.         }
  78.         if(strpos($request->get('du'), "/") !== false){
  79.             $du Carbon::createFromFormat('d/m/Y'$request->get('du'))->format("Y-m-d");
  80.         } else{
  81.             $du Carbon::parse($request->get('du'))->format("Y-m-d");
  82.         }
  83.         if(strpos($request->get('au'), "/") !== false){
  84.             $au Carbon::createFromFormat('d/m/Y'$request->get('au'))->format("Y-m-d");
  85.         } else{
  86.             $au Carbon::parse($request->get('au'))->format("Y-m-d");
  87.         }
  88.         $sang false;
  89.         $plasma true;
  90.         $plaquette false;
  91.         $body = [
  92.             "zip" => intval($request->get('cp')) ? intval($request->get('cp')) : 1000,
  93.             "distance" => $distanceMax,
  94.             "date_begin" => $du,
  95.             "date_end" => $au,
  96.             "types" => [
  97.                 "sang" => $sang,
  98.                 "plaquette" => $plasma,
  99.                 "plasma" => $plaquette,
  100.             ],
  101.         ];
  102.         $client = new Client();
  103.         $response $client->request('GET'"$url/api/getPublicSearch", [
  104.             'headers' => [
  105.                 'Content-Type' => 'application/x-www-form-urlencoded',
  106.                 'Authorization' => 'Bearer '.$token,
  107.             ],
  108.             'body' => json_encode($body)
  109.         ]);
  110.         $results json_decode($response->getBody(), true);
  111.         if($results['success']){
  112.             $return = [
  113.                 "collectes" => $results["collectes"],
  114.                 "sites" => $results["sites"]
  115.             ];
  116.             return $return;
  117.         }else{
  118.             return $results['error'];
  119.         }
  120.     }
  121.     public static function getCollectesByCode($request) {
  122.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  123.         $session $request->getSession();
  124.         $token $session->get('akimedia-token');
  125.         $body = [
  126.             "code" => $request->get('code'),
  127.             "lang" => strtoupper($request->getLocale())
  128.         ];
  129.         $client = new Client();
  130.         $response $client->request('GET'"$url/api/getPublicCollecteByCode", [
  131.             'headers' => [
  132.                 'Content-Type' => 'application/x-www-form-urlencoded',
  133.                 'Authorization' => 'Bearer '.$token,
  134.             ],
  135.             'body' => json_encode($body)
  136.         ]);
  137.         $results json_decode($response->getBody(), true);
  138.         if($results['success']){
  139.             $return = [
  140.                 "collectes" => $results["collectes"]
  141.             ];
  142.             return $return;
  143.         }else{
  144.             return $results['error'];
  145.         }
  146.     }
  147.     public static function getCollectesByCodeAndDate($request$collecteCode$date) {
  148.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  149.         $session $request->getSession();
  150.         $token $session->get('akimedia-token');
  151.         $body = [
  152.             "code" => $collecteCode,
  153.             "date" => $date,
  154.             "lang" => strtoupper($request->getLocale())
  155.         ];
  156.         $client = new Client();
  157.         $response $client->request('GET'"$url/api/getPublicCollecteByDateAndCode", [
  158.             'headers' => [
  159.                 'Content-Type' => 'application/x-www-form-urlencoded',
  160.                 'Authorization' => 'Bearer '.$token,
  161.             ],
  162.             'body' => json_encode($body)
  163.         ]);
  164.         $results json_decode($response->getBody(), true);
  165.         if($results['success']){
  166.             return $results;
  167.         }else{
  168.             return $results['error'];
  169.         }
  170.     }
  171.     public static function getSiteHoraire($request$siteid) {
  172.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  173.         $session $request->getSession();
  174.         $token $session->get('akimedia-token');
  175.         $body = [
  176.             "site_id" => $siteid,
  177.             "lang" => strtoupper($request->getLocale()),
  178.         ];
  179.         $client = new Client();
  180.         $response $client->request('GET'"$url/api/getPublicSiteInfo", [
  181.             'headers' => [
  182.                 'Content-Type' => 'application/x-www-form-urlencoded',
  183.                 'Authorization' => 'Bearer '.$token,
  184.             ],
  185.             'body' => json_encode($body)
  186.         ]);
  187.         $results json_decode($response->getBody(), true);
  188.         if($results['success']){
  189.             return $results["days"] ;
  190.         }else{
  191.             return $results['error'];
  192.         }
  193.     }
  194.     public static function getSiteAvailabilities($request$siteid) {
  195.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  196.         $session $request->getSession();
  197.         $token $session->get('akimedia-token');
  198.         $body = [
  199.             "site_id" => $siteid,
  200.             "lang" => strtoupper($request->getLocale()),
  201.         ];
  202.         $client = new Client();
  203.         $response $client->request('GET'"$url/api/getPublicSiteInfo", [
  204.             'headers' => [
  205.                 'Content-Type' => 'application/x-www-form-urlencoded',
  206.                 'Authorization' => 'Bearer '.$token,
  207.             ],
  208.             'body' => json_encode($body)
  209.         ]);
  210.         $results json_decode($response->getBody(), true);
  211.         if($results['success']){
  212.             $dates = [];
  213.             foreach($results["dates_available"] as $month){
  214.                 if($month){
  215.                     foreach($month as $key => $date){
  216.                         if($date["template_id"] > 0){
  217.                             $dates[] = $key;
  218.                         }
  219.                     }
  220.                 }
  221.             }
  222.             return $dates;
  223.         }else{
  224.             return $results['error'];
  225.         }
  226.     }
  227.     public static function getSiteHorairesByDate($request$siteid) {
  228.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  229.         $session $request->getSession();
  230.         $token $session->get('akimedia-token');
  231.         $date $request->get("date");
  232.         $body = [
  233.             "site_id" => $siteid,
  234.             "date" => $date,
  235.             "type" => "plasma"
  236.         ];
  237.         $client = new Client();
  238.         $response $client->request('GET'"$url/api/getPublicSiteHorairesByDate", [
  239.             'headers' => [
  240.                 'Content-Type' => 'application/x-www-form-urlencoded',
  241.                 'Authorization' => 'Bearer '.$token,
  242.             ],
  243.             'body' => json_encode($body)
  244.         ]);
  245.         $results json_decode($response->getBody(), true);
  246.         if($results['success']){
  247.             return $results;
  248.         }else{
  249.             if(isset($results['errorCode']) && $results['errorCode'] == "NO_SCHEDULE_FOUND"){
  250.                 return [];
  251.             }
  252.             return $results['error'];
  253.         }
  254.     }
  255.     public static function getSiteInfos($request$siteid) {
  256.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  257.         $session $request->getSession();
  258.         $token $session->get('akimedia-token');
  259.         $body = [
  260.             "site_id" => $siteid,
  261.             "lang" => strtoupper($request->getLocale()),
  262.         ];
  263.         $client = new Client();
  264.         $response $client->request('GET'"$url/api/getPublicSiteInfo", [
  265.             'headers' => [
  266.                 'Content-Type' => 'application/x-www-form-urlencoded',
  267.                 'Authorization' => 'Bearer '.$token,
  268.             ],
  269.             'body' => json_encode($body)
  270.         ]);
  271.         $results json_decode($response->getBody(), true);
  272.         if($results['success']){
  273.             return $results;
  274.         }else{
  275.             return $results['error'];
  276.         }
  277.     }
  278.     public static function sendIncriptionCollecte($request$data$collecteID) {
  279.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  280.         $session $request->getSession();
  281.         $token $session->get('akimedia-token');
  282.         if($data["alreadyBlood"]=="blood_yes"){
  283.             $data["dejaDonne"] = "OUI";
  284.         }else{
  285.             $data["dejaDonne"] = "NON";
  286.         }
  287.         $body = [
  288.             "collecte_id" => $collecteID,
  289.             "horaire" => $data['heure'],
  290.             "firstname" => $data['firstname'],
  291.             "lastname" => $data['lastname'],
  292.             "birthdate" => $data['datenaissance'],
  293.             "email" => $data['email'],
  294.             "phone" => $data['phone'],
  295.             "has_already_donated" => $data["dejaDonne"]
  296.         ];
  297.         $client = new Client();
  298.         $response $client->request('GET'"$url/api/getPublicInscriptionCollecte", [
  299.             'headers' => [
  300.                 'Content-Type' => 'application/x-www-form-urlencoded',
  301.                 'Authorization' => 'Bearer '.$token,
  302.             ],
  303.             'body' => json_encode($body)
  304.         ]);
  305.         $results json_decode($response->getBody(), true);
  306.         if($results['success']){
  307.             return true;
  308.         }else{
  309.             $message "";
  310.             switch ($results['errorCode']){
  311.                 case "MISSING_SITE_ID":
  312.                     $message "Il manque l'id du site";
  313.                     break;
  314.                 case "MISSING_SCHEDULE":
  315.                     $message "Il manque l'horaire";
  316.                     break;
  317.                 case "MISSING_DATE":
  318.                     $message "Il manque la date";
  319.                     break;
  320.                 case "RDV_DATE_PAST":
  321.                     $message "La date ne peut être dans le passé";
  322.                     break;
  323.                 case "MISSING_LASTNAME":
  324.                     $message "Il manque le nom du donneur";
  325.                     break;
  326.                 case "MISSING_FIRSTNAME":
  327.                     $message "Il manque le prénom du donneur";
  328.                     break;
  329.                 case "MISSING_BIRTHDATE":
  330.                     $message "Il manque la date de naissance du donneur";
  331.                     break;
  332.                 case "MISSING_EMAIL_OR_PHONE":
  333.                     $message "Vous devez compléter soit l'email, soit le téléphone";
  334.                     break;
  335.                 case "EXISTING_DONOR":
  336.                     $message "Un donneur existe déjà avec les mêmes Nom / Prénom / Date de naissance";
  337.                     break;
  338.                 case "BUG_CREATE_DONOR":
  339.                     $message "Problème lors de la sauvegarde";
  340.                     break;
  341.                 case "BUG_DONOR_ID":
  342.                     $message "Id du donneur manquant.";
  343.                     break;
  344.                 case "BUG_GET_SCHEDULES":
  345.                     $message "Erreur lors de la récupération des horaires";
  346.                     break;
  347.                 case "RDV_SCHEDULE_NOT_FOUND":
  348.                     $message "Cet horaire n'existe pas pour cette journée.";
  349.                     break;
  350.                 case "RDV_ALREADY_BOOKED":
  351.                     $message "Il n'y a plus de disponibilité pour cet horaire.";
  352.                     break;
  353.             }
  354.             return $message;
  355.         }
  356.     }
  357.     public static function sendIncriptionSite($request$data$siteid) {
  358.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  359.         $session $request->getSession();
  360.         $token $session->get('akimedia-token');
  361.         $body = [
  362.             "site_id" => $siteid,
  363.             "date" => $data['date'],
  364.             "horaire" => $data['heure'],
  365.             "firstname" => $data['firstname'],
  366.             "lastname" => $data['lastname'],
  367.             "birthdate" => Carbon::createFromFormat("d/m/Y"$data['datenaissance'])->format("Y-m-d"),
  368.             "email" => $data['email'],
  369.             "phone" => $data['phone'],
  370.             "has_already_donated" => $data["dejaDonnePlasma"],
  371.             //"has_already_donated" => $data["dejaDonneSang"],
  372.             //"has_already_donated_plasma" => $data["dejaDonnePlasma"],
  373.             "type" => $data["type"],
  374.             "language" => strtoupper($request->getLocale()),
  375.             "origine" => "donneurdeplasma.be",
  376.         ];
  377.         $client = new Client();
  378.         $response $client->request('GET'"$url/api/getPublicInscriptionSite", [
  379.             'headers' => [
  380.                 'Content-Type' => 'application/x-www-form-urlencoded',
  381.                 'Authorization' => 'Bearer '.$token,
  382.             ],
  383.             'body' => json_encode($body)
  384.         ]);
  385.         $results json_decode($response->getBody(), true);
  386.         if($results['success']){
  387.             return true;
  388.         }else{
  389.             $message "";
  390.             switch ($results['errorCode']){
  391.                 case "MISSING_SITE_ID":
  392.                     $message "Il manque l'id du site";
  393.                     break;
  394.                 case "MISSING_SCHEDULE":
  395.                     $message "Il manque l'horaire";
  396.                     break;
  397.                 case "MISSING_DATE":
  398.                     $message "Il manque la date";
  399.                     break;
  400.                 case "RDV_DATE_PAST":
  401.                     $message "La date ne peut être dans le passé";
  402.                     break;
  403.                 case "MISSING_LASTNAME":
  404.                     $message "Il manque le nom du donneur";
  405.                     break;
  406.                 case "MISSING_FIRSTNAME":
  407.                     $message "Il manque le prénom du donneur";
  408.                     break;
  409.                 case "MISSING_BIRTHDATE":
  410.                     $message "Il manque la date de naissance du donneur";
  411.                     break;
  412.                 case "MISSING_EMAIL_OR_PHONE":
  413.                     $message "Vous devez compléter soit l'email, soit le téléphone";
  414.                     break;
  415.                 case "EXISTING_DONOR":
  416.                     $message "Un donneur existe déjà avec les mêmes Nom / Prénom / Date de naissance";
  417.                     break;
  418.                 case "BUG_CREATE_DONOR":
  419.                     $message "Problème lors de la sauvegarde";
  420.                     break;
  421.                 case "BUG_DONOR_ID":
  422.                     $message "Id du donneur manquant.";
  423.                     break;
  424.                 case "BUG_GET_SCHEDULES":
  425.                     $message "Erreur lors de la récupération des horaires";
  426.                     break;
  427.                 case "RDV_SCHEDULE_NOT_FOUND":
  428.                     $message "Cet horaire n'existe pas pour cette journée.";
  429.                     break;
  430.                 case "RDV_ALREADY_BOOKED":
  431.                     $message "Il n'y a plus de disponibilité pour cet horaire.";
  432.                     break;
  433.             }
  434.             return $message;
  435.         }
  436.     }
  437.     public static function getPlasmaPlages($request$translator) {
  438.         $url WebsiteSetting::getByName('akimedia-url')->getData();
  439.         $session $request->getSession();
  440.         $token $session->get('akimedia-token');
  441.         $body = [
  442.         ];
  443.         $client = new Client();
  444.         $response $client->request('GET'"$url/api/getPublicBarometre", [
  445.             'headers' => [
  446.                 'Content-Type' => 'application/x-www-form-urlencoded',
  447.                 'Authorization' => 'Bearer '.$token,
  448.             ],
  449.             'body' => json_encode($body)
  450.         ]);
  451.         $results json_decode($response->getBody(), true);
  452.         $slots $results["sfs_slots_availables"];
  453.         if($results["rate"] == 1){
  454.             $txtstatus $translator->trans("Largement insuffisant");
  455.             $status "tres-critique";
  456.         }
  457.         elseif($results["rate"] == 2){
  458.             $txtstatus $translator->trans("Insuffisant");
  459.             $status "critique";
  460.         }
  461.         elseif($results["rate"] == 3){
  462.             $txtstatus $translator->trans("Faible");
  463.             $status "tres-fragile";
  464.         }
  465.         elseif($results["rate"] == 4){
  466.             $txtstatus $translator->trans("Bonne");
  467.             $status "fragile";
  468.         }
  469.         elseif($results["rate"] == 5){
  470.             $txtstatus $translator->trans("Au Top");
  471.             $status "stable";
  472.         }
  473.         return [
  474.             "status" => $status,
  475.             "texte_status" => $txtstatus,
  476.             "plages" => $slots
  477.         ];
  478.     }
  479. }