Ferengi-Masters Terminverwaltung V1

Soo, und auch das Löschen geht jetzt - wieder ein Fehler in Deiner Doku. Laut Deiner Beschreibung soll die IPSYMID „loes“ heissen, im Script heisst die aber „loe“.

Wieder ein Klops auf Deiner Seite, damit sind wir wieder ausgeglichen :wink:

Also soweit klappt das dann bei mir, ich hoffe mal dass ich morgen noch ein bisschen zum Testen komme.

Danke für´s Iconset :slight_smile:

Weil Du es gerade ansprichst. Das mit dem Tab ist eine Sache die hat paresy erst vor noch nicht langer Zeit geändert. Früher mußte man immer Enter im Edit Feld drücken um die Eingabe zu speichern. Du kannst aber die Tabreihenfolge z.B. innerhalb eines Panels über den Wert TabOrder festlegen. So werden aller Felder ordentlich nacheinender angesprungen.

Soo, und auch das Löschen geht jetzt - wieder ein Fehler in Deiner Doku. Laut Deiner Beschreibung soll die IPSYMID „loes“ heissen, im Script heisst die aber „loe“.

Wieder ein Klops auf Deiner Seite, damit sind wir wieder ausgeglichen

Dafür steht auch das „b“ hinter V1.1. Soll heißen Beta.:wink:

Danke für den Hinweiß ändere das gleich mal. Habe auch noch einen kleinen Fehler in einem array gefunden. Der führt aber nur an einem Tag im Jahr zu Problemen. Da muß ich nochmal ran.

Klar, kein Problem :slight_smile:
Und noch ein „Bug“ in Deinem Iconset-Archiv: statt des Doppelpfeils nach links hat sich einfacher Pfeil nach links eingeschlichen.

Ich mach dann erstmal Schluss für heute - schönen Abend.

Ach ja, die Meldungen vom Kollegen Hollowman kann ich nicht nachvollziehen, die müssen noch woanders herkommen.

Und noch ein „Bug“ in Deinem Iconset-Archiv: statt des Doppelpfeils nach links hat sich einfacher Pfeil nach links eingeschlichen.

Behoben.:wink:

Hallo Thmas,
Ich habe mich auch mal an Dein Script versucht, habe aber Probleme.
Es wird bei mir keine termine.txt angelegt.
Ich versuche es im Designer, wenn ich einen Termin eingebe und im Edit Fenster mit Tab bestätige wird kein Datensatz angelegt. Die Datensatz Summe bleibt auf 0.
Was läuft hier falsch ?

cu uwe :confused:

Hallo Uwe,

der Datensatz wird auch erst gespeichert, wenn er logisch und komplett ist. Das wird vorher geprüft. Und Du mußt natürlich auf speichern klicken.:wink:

Hallo Thomas,
Auf speichern drücke ich natürlich, aber was heißt vollständig und logisch ?
Ich habe z. B. einen Termin jährlich-Datum-Text eingegeben, ist da noch mehr zu beachten ?

cu uwe

Hallo uwe,

bei jährlich reicht z.b. Haken bei jährlich, Datum eintragen, Termin > 3 Bustaben und dann speichern. Bringt er denn irgentwelche Fehler im Debug?
Hast Du aller IPSYMID Werte im Designer richtig eingetragen und alle Event Aufrufe eingefügt?

Hallo Thomas,
ich bekomme es einfach nicht hin. Habe die einträge schon mehrmals geprüft, kann nichts falsches finden. Wenn ich die scripte über executive starte bekomme ich als Fehlermeldung das die Datei termin.txt fehlt. Das ist ja klar sie wird ja nicht angelegt. Wenn ich die variablen nach speichern ansehe ist
err_date und err_woch immer auf TRUE. Hier müßte der Fehler doch liegen,
aber ich kann da nicht finden. Ich habe mit einen jährlichen Termin geübt, da dürfte doch err_woch garnicht abgefragt werden, oder ?

cu uwe

Hallo Uwe,

err_date und err_woch dürfen nach speichern nicht true sein, dafür muß es einen Grund geben, diese Prüfung findet hier statt:


   //wenn jährlicher Termin und Monat >12 oder <1 oder es den Tag nicht gibt
   if(
   $term_jaerlich == true and (int)$term_monat > 12 or
   $term_jaerlich == true and (int)$term_monat < 1 or
   $term_jaerlich == true and (int)$term_tag > $mon_arr[(int)$term_monat])
   {
      SetValueBoolean("err_date", true);
      SetValueBoolean("err_woch", true);
      return;
   }
   //wenn einmaliger Termin und wenn Monat >12 oder <1 oder es den Tag nicht gibt
   if(
   $term_einmalig == true and (int)$term_monat > 12 or
   $term_einmalig == true and (int)$term_monat < 1 or
   $term_einmalig == true and (int)$term_tag > $mon_arr[(int)$term_monat])
   {
      SetValueBoolean("err_date", true);
      SetValueBoolean("err_woch", true);
      return;
   }

Das passiert wenn z.B. bei einem jährlichen Termin ein Wochenhacken gesetzt ist oder ein Datumfehler vorliegt.

Das würde auch erklären warum er keinen Datensatz anlegt, denn dorthin kommt er ja nicht…

Moin,

ich bin´s mal wieder :slight_smile:

Wollte nur vermelden dass ich mal wieder ein bisschen Zeit hatte und nun auch die ToniTools mitsamt der Feiertagsfunktion in Deinem Script an´s Laufen gekriegt habe.

Das Ganze ist mittlerweile auch im produktiven Einsatz - ich habe bei unserer Küchenrenovierung einen Touchscreen mitintegriert auf dem nun ein rudimentärer Designer mit ein paar Lichtszenen und Deiner Terminverwaltung läuft.

Sehr schöne Sache :slight_smile:

Grüße, Hocky

Hallo Hocky,

freut mich sehr das mein nun schon etwas „angestaubtes Script“:rolleyes: einige produktiv einsetzen. Habe es schon weiterentwickelt und mit einem Weckerscript für den Designer kombiniert. Aber ist mitlerweilen ganz schön lang geworden und da sich meine PHP Kenntnisse im Laufe der Zeit ein ganzes Stück weiterentwickelt haben werde ich die ganze Sache mal optimieren und vieleicht demnächst mal V2 tauglich machen. Aber da muß der Winter für herhalten. Und erst wenn der Mediaplayer in der V2 stabil läuft werde ich auf V2 umsteigen. Da freu ich mich schon drauf.

Moin,

Wecker bräuchte ich nicht, aber ich habe einen anderen Feature-Request. :slight_smile:

Ich würde gerne im Designer sowohl die Termine des heutigen Tages als auch die von morgen sehen (damit man sich darauf schonmal einstellen kann).
Ist das mit wenig Aufwand machbar?

Grüße, Hocky

OK ist auf meinem Zettel.:wink:

OK, Du hast das Wochenende. :wink:

So hab mal schnell die Termin.ips geupdatet. Ist jetzt auf dem aktuellen Stand und zeigt auch Termine für morgen an.:smiley:
Deine Sprachausgabe oder was Du für die einzelnen Terminmodis so machst bitte wieder einfügen.


 include(IPS_GetScriptFile("Konstanten"));

 //--------------------- Termine für Designer bereinigen -----------------------

 $var_integer = array
 (
 "term_anz1_stunde",
 "term_anz1_minute",
 "term_anz1_tag",
 "term_anz1_monat",
 "term_anz2_stunde",
 "term_anz2_minute",
 "term_anz2_tag",
 "term_anz2_monat",
 "term_anz3_stunde",
 "term_anz3_minute",
 "term_anz3_tag",
 "term_anz3_monat",
 "term_anz4_stunde",
 "term_anz4_minute",
 "term_anz4_tag",
 "term_anz4_monat",
 "term_anz5_stunde",
 "term_anz5_minute",
 "term_anz5_tag",
 "term_anz5_monat"
 );

 foreach($var_integer as $value)
 {
   SetValueInteger($value, 0);
 }

 $var_string = array
 (
 "term_anz1_inhalt",
 "term_anz2_inhalt",
 "term_anz3_inhalt",
 "term_anz4_inhalt",
 "term_anz5_inhalt"
 );

 foreach($var_string as $value)
 {
   SetValueString($value, "-");
 }

 $var_bool = array
 (
 "Term",
 "Term_mor",
 "Term_mod1_Ansage",
 "Term_mod2_Ansage",
 "Term_mod3_Ansage",
 "Term_mod4_Ansage",
 "Term_mod5_Ansage",
 "Term_mod6_Ansage"
 );

 foreach($var_bool as $value)
 {
   SetValueBoolean($value, false);
 }

 //------------------------------ Daten holen ----------------------------------

 $termfile = file_get_contents(IPS_GetKernelDir()."termine.txt"); //Termine in Variable einlesen
 $term_arr_komplett = explode("
", $termfile); // nach Zeilenumbruch trennen und in array

 //----------------------------- Termine suchen --------------------------------

 $Term_Zahl = 0;
 $erg       = "";

 //alle Termine durchlaufen
 foreach($term_arr_komplett as $value)
 {
   $term_arr = explode(",", $value); // einzelnen Datensatz in Daten zerlegen

   $term_mo         = (bool)$term_arr[3];
   $term_di         = (bool)$term_arr[4];
   $term_mi         = (bool)$term_arr[5];
   $term_do         = (bool)$term_arr[6];
   $term_fr         = (bool)$term_arr[7];
   $term_sa         = (bool)$term_arr[8];
   $term_so         = (bool)$term_arr[9];
   $term_aktiv      = (bool)$term_arr[10];
   $term_stunde     = (int)$term_arr[11];
   $term_minute     = (int)$term_arr[12];
   $term_tag        = (int)$term_arr[13];
   $term_monat      = (int)$term_arr[14];
   $term_inhalt     = $term_arr[15];

   if($term_aktiv) //wenn aktiver Termin gefunden => prüfen
   {
      //Timestamp von heute
      $heute        = mktime (0,0,0,date("m"),date("d"),date("y"));
      //Timestamp des Termins aus der for Schleife
      $termin_dat   = mktime (0,0,0, $term_monat, $term_tag ,date("y"));
      //schauen ob Termin auf heute($erg = 0) oder morgen fällt ($erg = -1)
      $diff         = $heute-$termin_dat;
      $erg          = $diff/((60*60)*24);
      //heutigen Tag ermitteln
      $tag          = (date("w"));

      //wiederkehrende Wöchentliche Termine die auf heute fallen prüfen
      if ($tag == 0 and $term_so == 1 or $tag == 1 and $term_mo == 1 or
          $tag == 2 and $term_di == 1 or $tag == 3 and $term_mi == 1 or
          $tag == 4 and $term_do == 1 or $tag == 5 and $term_fr == 1 or
          $tag == 6 and $term_sa == 1)
      {
         $erg = 0;
      }
      //wiederkehrende Wöchentliche Termine die auf morgen fallen prüfen
      if ($tag == 6 and $term_so == 1 or $tag == 0 and $term_mo == 1 or
          $tag == 1 and $term_di == 1 or $tag == 2 and $term_mi == 1 or
          $tag == 3 and $term_do == 1 or $tag == 4 and $term_fr == 1 or
          $tag == 5 and $term_sa == 1)
      {
         $erg = -1;
      }

      //------------------ Termine für den Designer Startscreen ----------------

      if ($erg == 0 or $erg == -1)
      {
         SetValueInteger("Term_Zahl", $Term_Zahl+1);
         $Term_Zahl = GetValueInteger("Term_Zahl");

         SetValueInteger("term_anz".$Term_Zahl."_stunde",$term_stunde);
         SetValueInteger("term_anz".$Term_Zahl."_minute",$term_minute);
         SetValueInteger("term_anz".$Term_Zahl."_tag",$term_tag);
         SetValueInteger("term_anz".$Term_Zahl."_monat",$term_monat);
         SetValueString("term_anz".$Term_Zahl."_inhalt",$term_inhalt);
      }

      //------------------- Termine für die einzelnen Modi vorlesen ------------

      $Terminmodus = GetValueInteger("Terminmodus");

      //---------------------- jährliche Termine ermitteln ---------------------

      if((int)$term_arr[11] != 0) //einmaliger Termin zu einer bestimmten Zeit
      {
         $jetzt    = mktime (date("H"),date("i"),0,date("m"),date("d"),date("y"));
         $term_ber = mktime ((int)$term_arr[11],(int)$term_arr[12],0,date("m"),date("d"),date("y"));
      }
      else  //jährlicher Termin
      {
         $term_ber =0;
         $jetzt    =0;
      }

      //--- Terminmodus 1 ---------

      if($Terminmodus == 1 and $erg == -1)
      {
         SetValueBoolean("Term_mod1_Ansage", true);
      }

      //--- Terminmodus 2 ---------

      if($Terminmodus == 2 and $erg == -1)
      {
         SetValueBoolean("Term_mod2_Ansage", true);
         SetValueBoolean("Term_mor", true);
      }

      //--- Terminmodus 3 ---------

      if($Terminmodus == 3 and $erg == 0 and $term_ber >= $jetzt)
      {
         SetValueBoolean("Term_mod3_Ansage", true);
      }

      //--- Terminmodus 4 ---------

      if ($Terminmodus == 4 and $erg == 0 and $term_ber >= $jetzt)
      {
         SetValueBoolean("Term_mod4_Ansage", true);
      }

      //--- Terminmodus 5 ---------

      if ($Terminmodus == 5 and $erg == 0 and $term_ber >= $jetzt)
      {
         SetValueBoolean("Term_mod5_Ansage", true);
         SetValueString("Ansagetext_wav_SK2", "Achtung Termin heute".$term_inhalt.",Sprache");
         SK2_wait(2); // Laufzeit der Winamp Ausgabe
      }

      //--- Terminmodus 6 ---------

      if ($Terminmodus == 6 and $erg == 0 and $term_ber >= $jetzt)
      {
         SetValueBoolean("Term_mod6_Ansage", true);
      }
   }
   //---------------------------------------------------------------------------

 } // foreach Schleife beenden

 //---------------------------- Feiertage --------------------------------------

 $feiertag = array
 (
 "Ostersonntag",
 "Ostermontag",
 "Karfreitag",
 "Christi Himmelfahrt",
 "Pfingstsonntag",
 "Pfingstmontag",
 "Neujahr",
 "Tag der Arbeit",
 "Tag der deutschen Einheit",
 "Reformationstag",
 "Heiligabend",
 "1. Weihnachtsfeiertag",
 "2. Weihnachtsfeiertag",
 "Silvester"
 );

 foreach($feiertag as $value)
 {
   $feiert = explode(".", TT_Feiertage($value, (int)date("Y"))); // in array (tag.monat.jahr)
   //Timestamp von heute
   $heute      = mktime (0,0,0,date("m"),date("d"),date("y"));
   //Timestamp des Feiertages
   $termin_dat = mktime (0,0,0,(int)$feiert[1],(int)$feiert[0],date("y"));
   //schauen ob Termin auf heute($erg = 0) oder morgen fällt ($erg = -1)
   $diff       = $heute-$termin_dat;
   $erg        = $diff/((60*60)*24);

   //Feiertag gefunden => hier speichern
   if ($erg == 0)
   {
      SetValueInteger("Term_Zahl", $Term_Zahl+1);
      $Term_Zahl = GetValueInteger("Term_Zahl");

      SetValueInteger("term_anz".$Term_Zahl."_stunde", 0);
      SetValueInteger("term_anz".$Term_Zahl."_minute", 0);
      SetValueInteger("term_anz".$Term_Zahl."_tag", (int)date("d"));
      SetValueInteger("term_anz".$Term_Zahl."_monat", (int)date("m"));
      SetValueString("term_anz".$Term_Zahl."_inhalt",$value);
   }

   //--------------------- Feiertag für die einzelnen Modi vorlesen ------------

   //--- Terminmodus 1 ---------

   if($erg == -1 and $Terminmodus == 1)
   {
      SetValueBoolean("Term_mod1_Ansage", true);
   }

   //--- Terminmodus 2 ---------

   if($erg == -1 and $Terminmodus == 2)
   {
      SetValueBoolean("Term_mod2_Ansage", true);
   }

   //--- Terminmodus 3 ---------

   if($erg == 0 and $Terminmodus == 3)
   {
      SetValueBoolean("Term_mod3_Ansage", true);
   }

   //--- Terminmodus 4 ---------

   if ($erg == 0 and $Terminmodus == 4)
   {
      SetValueBoolean("Term_mod4_Ansage", true);
   }

   //--- Terminmodus 5 ---------

   if ($erg == 0 and $Terminmodus == 5)
   {
      SetValueBoolean("Term_mod5_Ansage", true);
   }

   //--- Terminmodus 6 ---------

   if ($erg == 0 and $Terminmodus == 6)
   {
      SetValueBoolean("Term_mod6_Ansage", true);
   }

   //---------------------------------------------------------------------------

   if ("term_anz1_inhalt" != "-")
   {
      SetValueBoolean("Term", true);
   }

 } //for Schleife beenden

 //------------------------- Terminmodus beenden -------------------------------

 SetValueInteger("Terminmodus", 0);
 IPS_SetScriptTimer("Termin", 0);

 //-----------------------------------------------------------------------------


Hui, das ging ja fix.
Ich steh ein bisschen auf dem Schlauch wie ich jetzt im Designer die Termine für morgen anzeige. Ich habe momentan einfach eine Liste der Termine für heute, daneben möchte ich die Termine für morgen anzeigen.
Welche Variablen muss ich denn dafür im Designer anzeigen.

Ansagen möchte ich die eigentlich gar nicht, nur anzeigen.

Das Programm ist so ausgelegt das es bis 5 Termine anzeigt (kann ich gern auch erweitern) und zwar ganz einfach in diesen Variablen:
Bespiel für ersten Termin:

„term_anz1_stunde“,
„term_anz1_minute“,
„term_anz1_tag“,
„term_anz1_monat“,
„term_anz1_inhalt“

Jau, so hab ich das ja auch schon im Designer angelegt.
Ich zeige für term_anz1 - term_anz5 jeweils die Werte für stunde, minute, etc. an.
Aber in welchen Variablen finde ich die Werte für die Termine von morgen?