2019-03-04 17:44:48 +01:00
< ? php
namespace Grocy\Services ;
use \Grocy\Services\StockService ;
use \Grocy\Services\TasksService ;
use \Grocy\Services\ChoresService ;
use \Grocy\Services\BatteriesService ;
2019-09-17 16:28:11 +02:00
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 ();
$this -> StockService = new StockService ();
$this -> TasksService = new TasksService ();
$this -> ChoresService = new ChoresService ();
$this -> BatteriesService = new BatteriesService ();
2019-10-12 10:22:17 +02:00
$this -> UrlManager = new UrlManager ( GROCY_BASE_URL );
2019-03-04 17:44:48 +01:00
}
protected $StockService ;
protected $TasksService ;
protected $ChoresService ;
protected $BatteriesService ;
2019-10-12 10:22:17 +02:00
protected $UrlManager ;
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-02-09 10:22:54 -06:00
$products = $this -> Database -> products ();
$titlePrefix = $this -> LocalizationService -> __t ( 'Product expires' ) . ': ' ;
foreach ( $this -> StockService -> 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 ,
'date_format' => 'date'
);
}
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-02-09 10:22:54 -06:00
$titlePrefix = $this -> LocalizationService -> __t ( 'Task due' ) . ': ' ;
foreach ( $this -> TasksService -> GetCurrent () as $currentTaskEntry )
{
$taskEvents [] = array (
'title' => $titlePrefix . $currentTaskEntry -> name ,
'start' => $currentTaskEntry -> due_date ,
'date_format' => 'date'
);
}
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-02-09 10:22:54 -06:00
$usersService = new UsersService ();
$users = $usersService -> GetUsersAsDto ();
2019-09-17 16:28:11 +02:00
2020-02-09 10:22:54 -06:00
$chores = $this -> Database -> chores ();
$titlePrefix = $this -> LocalizationService -> __t ( 'Chore due' ) . ': ' ;
foreach ( $this -> ChoresService -> 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 ))
{
$assignedToText = ' (' . $this -> LocalizationService -> __t ( 'assigned to %s' , FindObjectInArrayByPropertyValue ( $users , 'id' , $currentChoreEntry -> next_execution_assigned_to_user_id ) -> display_name ) . ')' ;
}
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 ,
'date_format' => 'datetime'
);
}
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-02-09 10:22:54 -06:00
$batteries = $this -> Database -> batteries ();
$titlePrefix = $this -> LocalizationService -> __t ( 'Battery charge cycle due' ) . ': ' ;
foreach ( $this -> BatteriesService -> GetCurrent () as $currentBatteryEntry )
{
$batteryEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $batteries , 'id' , $currentBatteryEntry -> battery_id ) -> name ,
'start' => $currentBatteryEntry -> next_estimated_charge_time ,
'date_format' => 'datetime'
);
}
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-02-09 17:27:46 +01:00
$recipes = $this -> Database -> recipes ();
$mealPlanDayRecipes = $this -> Database -> recipes () -> where ( 'type' , 'mealplan-day' );
$titlePrefix = $this -> LocalizationService -> __t ( 'Meal plan recipe' ) . ': ' ;
foreach ( $mealPlanDayRecipes as $mealPlanDayRecipe )
2019-09-24 09:40:56 +02:00
{
2020-02-09 17:27:46 +01:00
$recipesOfCurrentDay = $this -> Database -> recipes_nestings_resolved () -> where ( 'recipe_id = :1 AND includes_recipe_id != :1' , $mealPlanDayRecipe -> id );
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' ,
'description' => $this -> UrlManager -> ConstructUrl ( '/mealplan' . '?week=' . FindObjectInArrayByPropertyValue ( $recipes , 'id' , $recipeOfCurrentDay -> recipe_id ) -> name )
);
}
2019-09-24 09:40:56 +02:00
}
2020-02-09 17:27:46 +01:00
$mealPlanDayNotes = $this -> Database -> meal_plan () -> where ( 'type' , 'note' );
$titlePrefix = $this -> LocalizationService -> __t ( 'Meal plan note' ) . ': ' ;
$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-02-09 17:27:46 +01:00
$products = $this -> Database -> products ();
$mealPlanDayProducts = $this -> Database -> meal_plan () -> where ( 'type' , 'product' );
$titlePrefix = $this -> LocalizationService -> __t ( 'Meal plan product' ) . ': ' ;
$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
}
}