2019-03-04 17:44:48 +01:00
< ? php
namespace Grocy\Services ;
2020-03-01 23:47:47 +07:00
#use \Grocy\Services\StockService;
#use \Grocy\Services\TasksService;
#use \Grocy\Services\ChoresService;
#use \Grocy\Services\BatteriesService;
#use \Grocy\Services\UsersService;
2019-10-12 10:22:17 +02:00
use \Grocy\Helpers\UrlManager ;
2019-03-04 17:44:48 +01:00
class CalendarService extends BaseService
{
public function __construct ()
{
parent :: __construct ();
2019-10-12 10:22:17 +02:00
$this -> UrlManager = new UrlManager ( GROCY_BASE_URL );
2019-03-04 17:44:48 +01:00
}
public function GetEvents ()
{
$stockEvents = array ();
2020-02-09 10:22:54 -06:00
if ( GROCY_FEATURE_FLAG_STOCK_BEST_BEFORE_DATE_TRACKING )
2019-03-04 17:44:48 +01:00
{
2020-03-01 23:47:47 +07:00
$products = $this -> getDatabase () -> products ();
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Product expires' ) . ': ' ;
foreach ( $this -> getStockService () -> GetCurrentStock () as $currentStockEntry )
2019-03-04 17:44:48 +01:00
{
2020-02-09 10:22:54 -06:00
if ( $currentStockEntry -> amount > 0 )
{
$stockEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $products , 'id' , $currentStockEntry -> product_id ) -> name ,
'start' => $currentStockEntry -> best_before_date ,
2020-04-22 12:03:05 -04:00
'date_format' => 'date' ,
'link' => $this -> UrlManager -> ConstructUrl ( '/stockoverview' )
2020-02-09 10:22:54 -06:00
);
}
2019-03-04 17:44:48 +01:00
}
}
$taskEvents = array ();
2020-02-09 10:22:54 -06:00
if ( GROCY_FEATURE_FLAG_TASKS )
2019-03-04 17:44:48 +01:00
{
2020-03-01 23:47:47 +07:00
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Task due' ) . ': ' ;
foreach ( $this -> getTasksService () -> GetCurrent () as $currentTaskEntry )
2020-02-09 10:22:54 -06:00
{
$taskEvents [] = array (
'title' => $titlePrefix . $currentTaskEntry -> name ,
'start' => $currentTaskEntry -> due_date ,
2020-04-22 12:03:05 -04:00
'date_format' => 'date' ,
'link' => $this -> UrlManager -> ConstructUrl ( '/tasks' )
2020-02-09 10:22:54 -06:00
);
}
2019-03-04 17:44:48 +01:00
}
$choreEvents = array ();
2020-02-09 10:22:54 -06:00
if ( GROCY_FEATURE_FLAG_CHORES )
2019-03-04 17:44:48 +01:00
{
2020-03-01 23:47:47 +07:00
$users = $this -> getUsersService () -> GetUsersAsDto ();
2019-09-17 16:28:11 +02:00
2020-03-01 23:47:47 +07:00
$chores = $this -> getDatabase () -> chores ();
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Chore due' ) . ': ' ;
foreach ( $this -> getChoresService () -> GetCurrent () as $currentChoreEntry )
2019-09-17 16:28:11 +02:00
{
2020-02-09 10:22:54 -06:00
$chore = FindObjectInArrayByPropertyValue ( $chores , 'id' , $currentChoreEntry -> chore_id );
$assignedToText = '' ;
if ( ! empty ( $currentChoreEntry -> next_execution_assigned_to_user_id ))
{
2020-03-01 23:47:47 +07:00
$assignedToText = ' (' . $this -> getLocalizationService () -> __t ( 'assigned to %s' , FindObjectInArrayByPropertyValue ( $users , 'id' , $currentChoreEntry -> next_execution_assigned_to_user_id ) -> display_name ) . ')' ;
2020-02-09 10:22:54 -06:00
}
2019-09-17 16:28:11 +02:00
2020-02-09 10:22:54 -06:00
$choreEvents [] = array (
'title' => $titlePrefix . $chore -> name . $assignedToText ,
'start' => $currentChoreEntry -> next_estimated_execution_time ,
2020-04-22 12:03:05 -04:00
'date_format' => 'datetime' ,
'link' => $this -> UrlManager -> ConstructUrl ( '/choresoverview' )
2020-02-09 10:22:54 -06:00
);
}
2019-03-04 17:44:48 +01:00
}
$batteryEvents = array ();
2020-02-09 10:22:54 -06:00
if ( GROCY_FEATURE_FLAG_BATTERIES )
2019-03-04 17:44:48 +01:00
{
2020-03-01 23:47:47 +07:00
$batteries = $this -> getDatabase () -> batteries ();
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Battery charge cycle due' ) . ': ' ;
foreach ( $this -> getBatteriesService () -> GetCurrent () as $currentBatteryEntry )
2020-02-09 10:22:54 -06:00
{
$batteryEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $batteries , 'id' , $currentBatteryEntry -> battery_id ) -> name ,
'start' => $currentBatteryEntry -> next_estimated_charge_time ,
2020-04-22 12:03:05 -04:00
'date_format' => 'datetime' ,
'link' => $this -> UrlManager -> ConstructUrl ( '/batteriesoverview' )
2020-02-09 10:22:54 -06:00
);
}
2019-03-04 17:44:48 +01:00
}
2019-09-24 09:40:56 +02:00
$mealPlanRecipeEvents = array ();
2020-02-09 17:33:02 +01:00
if ( GROCY_FEATURE_FLAG_RECIPES )
2019-09-24 09:40:56 +02:00
{
2020-03-01 23:47:47 +07:00
$recipes = $this -> getDatabase () -> recipes ();
$mealPlanDayRecipes = $this -> getDatabase () -> recipes () -> where ( 'type' , 'mealplan-day' );
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Meal plan recipe' ) . ': ' ;
2020-02-09 17:27:46 +01:00
foreach ( $mealPlanDayRecipes as $mealPlanDayRecipe )
2019-09-24 09:40:56 +02:00
{
2020-03-01 23:47:47 +07:00
$recipesOfCurrentDay = $this -> getDatabase () -> recipes_nestings_resolved () -> where ( 'recipe_id = :1 AND includes_recipe_id != :1' , $mealPlanDayRecipe -> id );
2020-02-09 17:27:46 +01:00
foreach ( $recipesOfCurrentDay as $recipeOfCurrentDay )
{
$mealPlanRecipeEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $recipes , 'id' , $recipeOfCurrentDay -> includes_recipe_id ) -> name ,
'start' => FindObjectInArrayByPropertyValue ( $recipes , 'id' , $recipeOfCurrentDay -> recipe_id ) -> name ,
'date_format' => 'date' ,
2020-04-22 12:03:05 -04:00
'description' => $this -> UrlManager -> ConstructUrl ( '/mealplan' . '?week=' . FindObjectInArrayByPropertyValue ( $recipes , 'id' , $recipeOfCurrentDay -> recipe_id ) -> name ),
'link' => $this -> UrlManager -> ConstructUrl ( '/recipes' . '?recipe=' . $recipeOfCurrentDay -> includes_recipe_id . " #fullscreen " )
2020-02-09 17:27:46 +01:00
);
}
2019-09-24 09:40:56 +02:00
}
2020-03-01 23:47:47 +07:00
$mealPlanDayNotes = $this -> getDatabase () -> meal_plan () -> where ( 'type' , 'note' );
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Meal plan note' ) . ': ' ;
2020-02-09 17:27:46 +01:00
$mealPlanNotesEvents = array ();
foreach ( $mealPlanDayNotes as $mealPlanDayNote )
{
$mealPlanNotesEvents [] = array (
'title' => $titlePrefix . $mealPlanDayNote -> note ,
'start' => $mealPlanDayNote -> day ,
'date_format' => 'date'
);
}
2020-01-26 01:50:44 -06:00
2020-03-01 23:47:47 +07:00
$products = $this -> getDatabase () -> products ();
$mealPlanDayProducts = $this -> getDatabase () -> meal_plan () -> where ( 'type' , 'product' );
$titlePrefix = $this -> getLocalizationService () -> __t ( 'Meal plan product' ) . ': ' ;
2020-02-09 17:27:46 +01:00
$mealPlanProductEvents = array ();
foreach ( $mealPlanDayProducts as $mealPlanDayProduct )
{
$mealPlanProductEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $products , 'id' , $mealPlanDayProduct -> product_id ) -> name ,
'start' => $mealPlanDayProduct -> day ,
'date_format' => 'date'
);
}
2020-01-26 01:50:44 -06:00
}
return array_merge ( $stockEvents , $taskEvents , $choreEvents , $batteryEvents , $mealPlanRecipeEvents , $mealPlanNotesEvents , $mealPlanProductEvents );
2019-03-04 17:44:48 +01:00
}
}