Calcul sur date dans scénario pour plugin calendrier

Bonjour à tous
Dans le cadre de la mise au point d’un scénario d’arrosage auto, je voudrais calculer une opération sur la date courante au format AAAA-MM-JJ tel que demandé par les actions calendriers dispos dans un scénario (les commandes « Ajouter une date » et « Retirer une date »)
A savoir si pas d’arrosage :

  • supprimer l’occurrence du jour (#year#-#month#-« day »)
    Le problème est que le tag renvoi le mois sans 0 alors que le scénario demande le format sur 2 chiffres, idem pour le jour
  • refixer une prochaine occurence à J+1. Comment faire le calcul dans le scénario ?

A savoir si arrosage OK

  • refixer la prochaine occurence à J+3. Idem comment faire le calcul

Merci

Hello
Avec un bloc code tu peux faire cela facilement
$oldDate = "2020-02-27"; $date1 = date("Y-m-d", strtotime($oldDate.'+ 1 days'));

1 « J'aime »

Merci
Et quelle est la fonction en code php ou ajouter ou retirer une occurence d’un évènement ?
J’ai mon calendrier en PHP, mes evènements dans le calendrier mais je ne trouve pas la fonction ajout/retirer une occurence.
J’ai lu que @Mips l’avait fait mais pas trouvé d’exemple.
En gros je voudrais pouvoir faire ça :

$oldDate = "2020-02-27"; $date1 = date("Y-m-d", strtotime($oldDate.'+ 1 days'));
$id=921; //ID du calendrier Arrosage
$event="arrosage GAZON"; // Nom de l'évènement dans le calendrier
$events=[];
$calendar=eqLogic::byId($id);
$events=$calendar->getEvents();
$events[$event]->[RETIRER ou AJOUTER DATE]($date1);

Il suffit d’exécuter la commande correspondante de l’équipement en passant dans le tableau d’options la date voulue (en utilisant la clé « message » dans le tableau puisque le plug-in s’attend à une commande message)

Ca n’explue pas ma date.
Le format est le bon YYYY-MM-JJ
Pas sur en revanche des parametres…
Pas d’erreur dans les logs si ce n’est que je passe bien dans le IF
le nom de l’évènement est bien bon

$cmdremoveoccurence = cmd::byString('#[Arrosage][Arrosage Auto Calendrier][Retirer une date]#');
  if(isset($cmdremoveoccurence)) {
  	$cmdremoveoccurence->execCmd(array('eventName' => 'arrosage GAZON', 'excludeDate' => date("Y-m-d")));
    $scenario->setLog('suppression occurence Ok');
  }

Pourquoi tu mets ces deux clés dans ton array?
J’ai parlé d’une clé « message » avec la date :wink:

Ok mais comment tu spécifies l’événement a utiliser dans la calendrier ?
Pour mémo on a le calendrier (equipement ou eqLogic vue php), l’événement dans le calendrier puis les évènements (ou occurrences).

Si je met juste la clé date comment va t-il choisir le bon événement ?

Oui tu as raisons, j’ai oublié l’évènement.
Je ne sais plus par coeur et je suis sur mobile mais si tu regardes le code du plug-in tu devrais trouver sinon je regarde demain.

Ceci dit, je ne vois pas l’intérêt de le faire en bloc code plutôt que bloc action standard, c’est ce compliquer la vie non ? Mais c’est un autre débat.

Le code de quel plugin ? Plugin agenda ?
Pas trouvé et pas trop habitué au bloc code.
Pourquoi le faire en bloc code car je dois programmer une occurence à + 3 jours dans l’événement et je ne sais pas faire dans le scénario un date = datecourante + X jours

Je réponds à moi même après après avoir regardé le log d’exectution du scénario lui meme sans passer par un bloc code.
Voici la bonne syntaxe

// Supression de l'occurence du jour car pas eu d'arrosage
// Et ajout de la prochaine occurence
// Attention l'occurence d'origine du calendrier ne peut pas être supprimée

$datejour = date("Y-m-d");	// Date courante au format YYYY-MM-DD
$id=921; 					//ID du calendrier Arrosage
$event="arrosage GAZON"; 	// Nom de l'évènement dans le calendrier à utiliser
$tags = $scenario->getTags();
/*$tags["#event1#"] = $tags["#event2#"] = $tags["#event3#"] = '';*/

$calendar=eqLogic::byId($id);
$scenario->setLog("id callendrier arrosage:".$id);
$events=[];
if(isset($calendar)) {
	$events=$calendar->getEvents();
	$scenario->setLog("Nombre Events trouvé dans le calendrier Arrosage: ".count($events));
}
if(isset($events) && is_array($events) && count($events)>0) {
	foreach ($events as $event) {
		$scenario->setLog("Nom: ".$event->getName()." Start: ".$event->getStartDate()." Stop: ".$event->getEndDate()." Repeat? ".($event->getRepeat()['enable'] == 1 ?'Oui':'Non'));
	}
  	unset($events);
}

// Calcul du prochain cycle	pour le prochain jour (pas eu d'arrosage ce jour)
$nextoccurence = date("Y-m-d", strtotime($datejour.'+ 1 days'));
$cmdaddoccurence = cmd::byString('#[Arrosage][Arrosage Auto Calendrier][Ajouter une date]#');
if(isset($cmdaddoccurence)) {
  $cmdaddoccurence->execCmd(array('title' => $event, 'message' => $nextoccurence));
  $scenario->setLog('ajout occurence Ok le '.$nextoccurence);
}

// Supression cycle du jour
$cmdremoveoccurence = cmd::byString('#[Arrosage][Arrosage Auto Calendrier][Retirer une date]#');
if(isset($cmdremoveoccurence)) {
  $cmdremoveoccurence->execCmd(array('title' => $event, 'message' => $datejour));
  $scenario->setLog('suppression occurence du jour Ok ('.$datejour.')');
}

unset($event);