Ankündigung

Einklappen
Keine Ankündigung bisher.

Steuerung an Hand von Werktagen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Steuerung an Hand von Werktagen

    Guten Tag,

    ich muss mein Skript etwas anpassen.

    Über das GET Element kommt der Wert Hotline 0 oder 1
    0 Wäre Morgens 1 wäre Abends.
    Freitags muss das Skript einen anderen SQL String aufbauen und am Wochenende soll es erst gar nicht laufen.

    Habe aber einen Fehler wenn der Wochentag Freitag bzw Samstag Sonntag ist.

    Hat einer einen Tipp warum, und wie ich das ggf. etwas kürzen und verbessern kann?

    Besten Dank.

    PHP-Code:
    $Werktage = array(1,2,3,4); //Montag bis Donnerstag als Array


          //am Vormittag
    if ($Hotline == 0){
    //if($current_hour >= 6 && $current_hour <= 10){  // War vor der Anforderung das das Skript egal wann am Tag umleiten kann
     
    $result $db->query("SELECT * from tbl_Telefone Where HPUUID is NULL AND STOPAction = 0 AND ZeitUMLMorgen Between '" .$Zeitminus"' AND '".$Zeitplus."'");

    //}else{
    }elseif ($Hotline == 1){

    if (
    Date("w") == 5){
     
    //Wenn Freitag ist
     
    $result $db->query("SELECT * from tbl_Telefone Where HPUUID is NULL AND STOPAction = 0 AND ZeitUMLAbendFR Between '" .$Zeitminus"' AND '".$Zeitplus."'");

    //}else{ 
    }elseif(in_array(Date("w"), $Werktage)){

     
    // Alle anderen Werktage
     
    $result $db->query("SELECT * from tbl_Telefone Where HPUUID is NULL AND STOPAction = 0 AND ZeitUMLAbend Between '" .$Zeitminus"' AND '".$Zeitplus."'");
    }

         }else {  
    // Wenn kein Werktag abbruch des Skripts
          
    $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','Kein Werktag','XXX','Kein Werktag, Skript Ende','')");
          exit;
         } 


  • #2
    Na das ist vielleicht ein wirrer Chaos-Code. Ich würde das wegwerfen und neu schreiben.

    Es fehlt außerdem die Fehlerbeschreibung sowie Tabellenstruktur und Testdaten als SQL-Code, um sinnvoll helfen zu können.

    Kommentar


    • #3
      Zum Glück läuft das wirre Chaos Problem los...

      Gut bis auf die Änderung, da weiss ich noch nicht wie rum ich das Schweinchen drehen soll.....


      Wahrscheinlich muss ich erstmal prüfen ob Wochenende ist... und dann weitergehen...

      Also andersrum wie jetzt...


      Ich kann gern mal den ganze Code einfügen...

      Ist aber bissl was... der läuft aber.

      Kommentar


      • #4
        Wenn etwas über $_GET reinkommt ist immer ein String, du fragst aber eine Zahl ab.

        Ob das dein Fehler ist, weiss ich nicht da weitere Infos fehlen.

        Kommentar


        • #5
          Überlege hier aber, den nochmal nach neuem Wissen und Gewissen, etwas anders zu verpacken.

          Meine Änderung ist aber erstmal unabhängig von der o.g. neu Anpassung.

          PHP-Code:
          <?php
          error_reporting
          (E_ALL);
          ini_set("display_errors"1);


          include_once 
          __DIR__ '/fc_betriebsferien.php';
          include_once 
          __DIR__ '/fc_Sonderfrei.php';
          require_once 
          __DIR__ '/HolidayCalendar/HolidayCalendar.php';
          require_once(
          "../include/connect_cucm.inc.php");
          require_once(
          "../include/connect_Sqlite.inc.php");




          // Wenn Hotline nicht via HTTP GET, dann abbruch
          if (!array_key_exists('HL'$_GET)) {
            die();
          }
          //HTTP GET MUSS MORGENS 0 SEIN UND ABENDS 1
          $Hotline $_GET['HL'];

          // Einstellungen für den Feiertagskalender
          $holiday = new HolidayCalendar('de.php');
          $today = (new DateTime('now'))->format('Y-m-d');

          //Wenn keine Betriebsferien laut tbl_Betriebsferien dann Code ausführen, sonst ans Ende Springen und Meldung loggen.
          if ($Betriebsferien == false){




          $date date("H:i:s");
          $currentDate strtotime($date);
          $futureDate $currentDate+(60*1);  // 1 Minute
          $Zeitplus date("H:i:s"$futureDate);
          $futureDate2 $currentDate-(60*1); // 1 Minute
          $Zeitminus date("H:i:s"$futureDate2);
          $current_hour date("H");
          $Werktage = array(1,2,3,4); //Montag bis Donnerstag als Array


          if ($Hotline == 0){      //am Vormittag
          //if($current_hour >= 6 && $current_hour <= 8){  // War vor der Anforderung das das Skript egal wann am Tag umleiten kann
           
          $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLMorgen Between '" .$Zeitminus"' AND '".$Zeitplus."'");

           
          //}else{
          }elseif ($Hotline == 1){

          if (
          Date("w") == 5)
          {
           
          //Wenn Freitag ist
           
          $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLAbendFR Between '" .$Zeitminus"' AND '".$Zeitplus."'");

          //}else{ 
          }elseif(in_array(Date("w"), $Werktage)){

           
          // Alle anderen Werktage
           
          $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLAbend Between '" .$Zeitminus"' AND '".$Zeitplus."'");
          }

               }else {  
          // Wenn kein Werktag abbruch des Skripts
                
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','Kein Werktag','XXX','Kein Werktag, Skript Ende','')");
                exit;
               }

          //$result = $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction != 'X'");
              
          foreach($result as $row)
              {

           
          //Prüfen ob die Niederlassung einen Sondertag frei hat.
           
          if (getSonderfrei($row['ID']) == false) {


           
          $holiday->setFilter([$row['BUNDESLAND']]);

              
          $aHolidays $holiday->findHolidayByDate($today);
              foreach (
          $aHolidays as $aHoliday) {
              
          $FeiertagName $aHoliday['name'];}

           
          //Wenn kein Feiertag ist:
           
          if (!$holiday->isHoliday($today)) {



          // GET HuntPilot Sammeln von Daten wie CSS für updateHuntPilot

          try {

           
          $response $client->getHuntPilot(
              array(
            
          'pattern' => '\\'.trim($row['HPUUID']),
                  
          'routePartitionName' => 'PT_Endgeraete',
                  
          'returnedTags' => array(
            
          'uuid' => true,
                  
          'forwardHuntNoAnswer' => array(
                    
          'callingSearchSpaceName' => true,
              
          'destination' => true,
              )
                )
              )
            );

          }


          //Fehlerbehandlung
                  
          catch (SoapFault $sf) {
                      echo 
          "SoapFault: " $sf "<BR>";
                  }
                  catch (
          Exception $e) {
                      echo 
          "Exception: " $e "<br>";
                  }

          $UUID $response->return->huntPilot->uuid;
          $CSS=$response->return->huntPilot->forwardHuntNoAnswer->callingSearchSpaceName->_;
          $currentDestination=$response->return->huntPilot->forwardHuntNoAnswer->destination;




            if (
          $Hotline == 0){ // MORGENS

             //Wenn umleitung schon korrekt gesetzt ist, UPDATE überspringen
            
          if ($currentDestination != $row['UMLMorgen'])  {

          // Update HuntPilot 

          try {
          $responseUpdate $client->updateHuntPilot(
                  array(
                    
          'uuid' => $UUID,

                    
          'forwardHuntNoAnswer' => array(
                      
          'destination' => trim($row['UMLMorgen']),
                      
          'callingSearchSpaceName' => $CSS
                      
          ),
             
          'forwardHuntBusy' => array(
                      
          'destination' => trim($row['UMLMorgenFHB']),
                      
          'callingSearchSpaceName' => $CSS
                      
          )//,
             //'maxHuntduration' => ''
                  
          )
                );
            
          // echo "HuntPilot erfolgreich auf " . $row['UMLMorgen'] . " umgeleitet!";
             //LogDatei schreiben
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','FnA: ".$row['UMLMorgen']."','".$row['Info']."','".$row['BUNDESLAND']."')");
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','FHB: ".$row['UMLMorgenFHB']."','".$row['Info']."','".$row['BUNDESLAND']."')");


          }
          //Fehlerbehandlung
                  
          catch (SoapFault $sf) {
                      echo 
          "SoapFault: " $sf "<BR>";
                  }
                  catch (
          Exception $e) {
                      echo 
          "Exception: " $e "<br>";
                 }






           
          //Ende currentDestination
            
          }else{
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Bemerkung, Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','".$row['UMLMorgen']."','Umleitung war korrekt gesetzt', '".$row['Info']."','".$row['BUNDESLAND']."')");

            }


           
          // Bis hier ist der Code für MORGENS
             
          } elseif ($Hotline == 1) { //ABENDS

            //Wenn umleitung schon korrekt gesetzt ist, UPDATE überspringen
            
          if ($currentDestination != $row['UMLAbend'])  { 


          // UPDATE HuntPilot  forwardHuntNoAnswer
          try {
          $responseUpdate $client->updateHuntPilot(
                  array(
                    
          'uuid' => $UUID,

                    
          'forwardHuntNoAnswer' => array(
                      
          'destination' => trim($row['UMLAbend']),
                      
          'callingSearchSpaceName' => $CSS
                      
          ),
             
          'forwardHuntBusy' => array(
                      
          'destination' => trim($row['UMLAbendFHB']),
                      
          'callingSearchSpaceName' => $CSS
                      
          )//,
             //'maxHuntduration' => '1'
                  
          )
                );
            
          // echo "HuntPilot erfolgreich auf " . $row['UMLAbend'] . " umgeleitet!";
             //LogDatei schreiben
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','FnA: ".$row['UMLAbend']."','".$row['Info']."','".$row['BUNDESLAND']."')");
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','FHB: ".$row['UMLAbendFHB']."','".$row['Info']."','".$row['BUNDESLAND']."')");


          }
          //Fehlerbehandlung
                  
          catch (SoapFault $sf) {
                      echo 
          "SoapFault: " $sf "<BR>";
                  }
                  catch (
          Exception $e) {
                      echo 
          "Exception: " $e "<br>";
                 }



          //Ende currentDestination
           
          }else{
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Bemerkung, Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','".$row['UMLAbend']."','Umleitung war korrekt gesetzt', '".$row['Info']."','".$row['BUNDESLAND']."')");

            }

            
          // Bis hier der Code für den Abend
             
          } else {
               die();
              }


          // Ende if Feiertag  
           
          }else {
          // Feiertag
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Bemerkung, Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','XXX','Feiertag: ".$FeiertagName."', '".$row['Info']."','".$row['BUNDESLAND']."')");

            }

          // Ende Sonderfrei  
           
          }else{
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Bemerkung, Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','HP: ".$row['HPUUID']."','XXX','Sonderfrei', '".$row['Info']."','".$row['BUNDESLAND']."')");

           }



           
          // Ende foreach
           
          }


          }else {
          // Betriebsferien
          $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','Betriebsferien','XXX','Betriebsferien','')");
          }


           
          // close the database connection
              
          $db NULL;

          ?>

          Kommentar


          • #6
            Die Crontab Syntax eignet sich hervorragend um Zeitpunkte und Zeitintervalle festzulegen und so ein if else Spagetti mit Wochentagen, Stunden usw. zu vermeiden.
            Zum Beisipel wird Freitag Nachmittag (12:00-23:59) einfach als String "* 12-23 * * 5" geschrieben. Die Abfrage ob eine Zeit die Bedingung erfüllt ist auch relativ einfach zu realisieren:
            PHP-Code:
            $FrPM "* 12-23 * * 5";  //fr 12:00-23:59

            $isFrPM dt::create('Now')->isCron($FrPM); 
            Nur mal so als Anregung.

            LG jspit
            PHP-Klassen auf github

            Kommentar


            • #7
              Versuchs mal damit (um in Deiner Syntax zu bleiben)

              PHP-Code:
              $currentDay date("w");

              if(
              $currentDay == OR $currentDay == 6)
              {
                   
              //Sonntag = 0 | Samstag = 6
              }

              if(
              $currentDay >= AND $currentDay <=5)
              {
                   
              //Montag bis Freitag
                   
              Hier dann den $_GET prüfen auf 1 oder 0

              Kommentar


              • #8
                PHP-Code:
                if($currentDay == OR $currentDay == 6)
                {
                     
                //Sonntag = 0 | Samstag = 6


                if (Date("w") == 5)
                {
                 
                //Wenn Freitag ist 
                Ev. Geschmackssache, aber wenn man so viel mit Wochentagen arbeitet würde ich mir da für das Script Konstanten anlegen, statt alles mit Kommentaren zu machen

                PHP-Code:
                define('SUNDAY',  0);  // oder 'WEEKDAY_SUNDAY' wie auch immer, etc..
                define('MONDAY',  1);
                define('TUESDAY'2);
                // ...
                define('SATURDAY'6);

                // ...

                if ($currentDay == SUNDAY OR $currentDay == SATURDAY) {
                // ... 
                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Ich habe es mal nach einem Bsp von euch, so umgesetzt.


                  PHP-Code:
                  $currentDay date("w");

                  if(
                  $currentDay == OR $currentDay == 6)
                  {
                       
                  //Sonntag = 0 | Samstag = 6
                    
                  $db->exec("INSERT INTO tbl_Ereignisse (Datum,Device,Umleitung,Ort,BUNDESLAND) VALUES ('".date('Y-m-d H:i:s')."','Kein Werktag','XXX','Kein Werktag, Skript Ende','')");
                        exit;
                  }

                  if(
                  $currentDay >= AND $currentDay <=5)
                  {
                       
                  //Montag bis Freitag
                       
                  if ($Hotline == 0){      //am Vormittag

                   
                  $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLMorgen Between '" .$Zeitminus"' AND '".$Zeitplus."'");


                    }elseif (
                  $Hotline == 1){

                  if (
                  Date("w") == 5)
                  {
                   
                  //Wenn Freitag ist
                   
                  $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLAbendFR Between '" .$Zeitminus"' AND '".$Zeitplus."'");

                  }else{

                   
                  // Alle anderen Wochentage
                   
                  $result $db->query("SELECT * from tbl_Telefone Where Device is NULL AND STOPAction = 0 AND ZeitUMLAbend Between '" .$Zeitminus"' AND '".$Zeitplus."'");
                  }

                       }

                  Kommentar


                  • #10
                    Zitat von hausl Beitrag anzeigen
                    Ev. Geschmackssache, aber wenn man so viel mit Wochentagen arbeitet würde ich mir da für das Script Konstanten anlegen, statt alles mit Kommentaren zu machen

                    PHP-Code:
                    define('SUNDAY'0); // oder 'WEEKDAY_SUNDAY' wie auch immer, etc..
                    define('MONDAY'1);
                    define('TUESDAY'2);
                    // ...
                    define('SATURDAY'6);

                    // ...

                    if ($currentDay == SUNDAY OR $currentDay == SATURDAY) {
                    // ... 
                    Ich dachte die Zahlen zu den Wochen Tagen wären fix?! Du meinst das aber der Übersichtlichkeit halber oder?

                    Kommentar


                    • #11
                      Das kleine L liefert auch direkt den Wochentag ausgeschrieben.
                      Dann kann man auch eine Switch case Bedingung nehmen

                      Beispiel:
                      PHP-Code:
                      <?php

                      $day 
                      date("l");
                      echo 
                      'today is ' $day "<br>\n";

                      switch (
                      $day) {
                          case 
                      "Friday":
                              echo 
                      "We are open from 8:00 to 12:00";
                              break;
                          case 
                      "Saturday":
                          case 
                      "Sunday":
                              echo 
                      "We are closed";
                              break;
                          default:
                              echo 
                      "We are open from 8:00 to 12:00 and from 15:00 to 18:00";
                              break;    
                      }
                      ?>

                      Kommentar


                      • #12
                        PHP-Code:
                        if($currentDay >= AND $currentDay <=5
                        Und sowas würde einfacher gehen, wenn man statt w das N nimmt für den Wochentag.

                        N Numerische Repräsentation des Wochentages gemäß ISO-8601 (in PHP 5.1.0 hinzugefügt) 1 (für Montag) bis 7 (für Sonntag)
                        PHP-Code:
                        // Mo - Fr.
                        if ($currendWeekday 6)

                        // oder mit entsprechenden Konstanten
                        if ($currendWeekday SATURDAY
                        Nur so als Info.
                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar


                        • #13
                          Zitat von Matze1708 Beitrag anzeigen
                          Ich dachte die Zahlen zu den Wochen Tagen wären fix?! Du meinst das aber der Übersichtlichkeit halber oder?
                          Jein, je nachdem .. siehe oben, wenn du mit "N" arbeitest ist es für uns wie wir es gewoht sind einfacher.

                          Ich meinte aber eher sowas.. Nachdem du schon im Titel .. an Hand von Wochentagen schreibst, würde ich es mir dahintehend einfacher machen.. wie zB hier im Beitrag darüber #13 bzw. statt sowas..

                          PHP-Code:
                          if($currentDay == OR $currentDay == 6)

                          if(
                          $currentDay >= AND $currentDay <=5)

                          if (
                          Date("w") == 5
                          es dir leichter lesbareres machen, wie zB:

                          PHP-Code:
                          const
                             
                          MONDAY    1,
                             
                          TUESDAY   2,
                             
                          WEDNESDAY 3,
                             
                          THURSDAY  4,
                             
                          FRIDAY    5,
                             
                          SATURDAY  6,
                             
                          SUNDAY    7
                          ;
                          $currentWeekday date('N');  //  2 (heute ist Dienstag)

                          var_dump$currentWeekday == TUESDAY );
                          // bool(true)  (heute ist Dienstag)

                          var_dump$currentWeekday SATURDAY );
                          // bool(true)  (Di. ist unter der Woche)

                          var_dump$currentWeekday FRIDAY );
                          // bool(false)  (weil heute Di. kein Wochenende) 

                          Und warum auch immer du oben $currentDay initialsierst und dann trotzdem wieder date('w') anwendest. Das macht alles nicht gerade leserlicher.
                          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                          PHP.de Wissenssammlung | Kein Support per PN

                          Kommentar


                          • #14
                            Ok, Danke. Probiere ich mal aus.

                            das unten wieder date('w') steht war ein kopierter Fehler. Ist schon geändert.

                            Kommentar

                            Lädt...
                            X