2019-03-04 17:44:48 +01:00
< ? php
namespace Grocy\Services ;
2020-08-31 20:40:31 +02:00
use Grocy\Helpers\UrlManager ;
2019-03-04 17:44:48 +01:00
class CalendarService extends BaseService
{
public function GetEvents ()
{
2020-08-31 20:40:31 +02:00
$stockEvents = [];
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' ) . ': ' ;
2020-08-31 20:40:31 +02:00
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 )
{
2020-08-31 20:40:31 +02:00
$stockEvents [] = [
2020-02-09 10:22:54 -06:00
'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-08-31 20:40:31 +02:00
];
2020-02-09 10:22:54 -06:00
}
2019-03-04 17:44:48 +01:00
}
}
2020-08-31 20:40:31 +02:00
$taskEvents = [];
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' ) . ': ' ;
2020-08-31 20:40:31 +02:00
foreach ( $this -> getTasksService () -> GetCurrent () as $currentTaskEntry )
2020-02-09 10:22:54 -06:00
{
2020-08-31 20:40:31 +02:00
$taskEvents [] = [
2020-02-09 10:22:54 -06:00
'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-08-31 20:40:31 +02:00
];
2020-02-09 10:22:54 -06:00
}
2019-03-04 17:44:48 +01:00
}
2020-08-31 20:40:31 +02:00
$choreEvents = [];
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' ) . ': ' ;
2020-08-31 20:40:31 +02:00
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 = '' ;
2020-08-31 20:40:31 +02:00
2020-02-09 10:22:54 -06:00
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-08-31 20:40:31 +02:00
$choreEvents [] = [
2020-02-09 10:22:54 -06:00
'title' => $titlePrefix . $chore -> name . $assignedToText ,
'start' => $currentChoreEntry -> next_estimated_execution_time ,
2020-04-22 12:03:05 -04:00
'date_format' => 'datetime' ,
2020-08-24 18:27:40 +02:00
'link' => $this -> UrlManager -> ConstructUrl ( '/choresoverview' ),
'allDay' => $chore -> track_date_only == 1
2020-08-31 20:40:31 +02:00
];
2020-02-09 10:22:54 -06:00
}
2019-03-04 17:44:48 +01:00
}
2020-08-31 20:40:31 +02:00
$batteryEvents = [];
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' ) . ': ' ;
2020-08-31 20:40:31 +02:00
foreach ( $this -> getBatteriesService () -> GetCurrent () as $currentBatteryEntry )
2020-02-09 10:22:54 -06:00
{
2020-08-31 20:40:31 +02:00
$batteryEvents [] = [
2020-02-09 10:22:54 -06:00
'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-08-31 20:40:31 +02:00
];
2020-02-09 10:22:54 -06:00
}
2019-03-04 17:44:48 +01:00
}
2020-08-31 20:40:31 +02:00
$mealPlanRecipeEvents = [];
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
2020-08-31 20:40:31 +02: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-08-31 20:40:31 +02:00
2020-02-09 17:27:46 +01:00
foreach ( $recipesOfCurrentDay as $recipeOfCurrentDay )
{
2020-08-31 20:40:31 +02:00
$mealPlanRecipeEvents [] = [
2020-02-09 17:27:46 +01:00
'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 ),
2020-08-31 20:40:31 +02:00
'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-08-31 20:40:31 +02:00
$mealPlanNotesEvents = [];
foreach ( $mealPlanDayNotes as $mealPlanDayNote )
2020-02-09 17:27:46 +01:00
{
2020-08-31 20:40:31 +02:00
$mealPlanNotesEvents [] = [
2020-02-09 17:27:46 +01:00
'title' => $titlePrefix . $mealPlanDayNote -> note ,
'start' => $mealPlanDayNote -> day ,
'date_format' => 'date'
2020-08-31 20:40:31 +02:00
];
2020-02-09 17:27:46 +01:00
}
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-08-31 20:40:31 +02:00
$mealPlanProductEvents = [];
foreach ( $mealPlanDayProducts as $mealPlanDayProduct )
2020-02-09 17:27:46 +01:00
{
2020-08-31 20:40:31 +02:00
$mealPlanProductEvents [] = [
2020-02-09 17:27:46 +01:00
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $products , 'id' , $mealPlanDayProduct -> product_id ) -> name ,
'start' => $mealPlanDayProduct -> day ,
'date_format' => 'date'
2020-08-31 20:40:31 +02:00
];
2020-02-09 17:27:46 +01:00
}
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
}
2020-08-31 20:40:31 +02:00
public function __construct ()
{
parent :: __construct ();
$this -> UrlManager = new UrlManager ( GROCY_BASE_URL );
}
2019-03-04 17:44:48 +01:00
}