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 ()
{
$products = $this -> Database -> products ();
2019-05-02 20:20:18 +02:00
$titlePrefix = $this -> LocalizationService -> __t ( 'Product expires' ) . ': ' ;
2019-03-04 17:44:48 +01:00
$stockEvents = array ();
foreach ( $this -> StockService -> GetCurrentStock () as $currentStockEntry )
{
if ( $currentStockEntry -> amount > 0 )
{
$stockEvents [] = array (
'title' => $titlePrefix . FindObjectInArrayByPropertyValue ( $products , 'id' , $currentStockEntry -> product_id ) -> name ,
'start' => $currentStockEntry -> best_before_date ,
'date_format' => 'date'
);
}
}
2019-05-02 20:20:18 +02:00
$titlePrefix = $this -> LocalizationService -> __t ( 'Task due' ) . ': ' ;
2019-03-04 17:44:48 +01:00
$taskEvents = array ();
foreach ( $this -> TasksService -> GetCurrent () as $currentTaskEntry )
{
$taskEvents [] = array (
'title' => $titlePrefix . $currentTaskEntry -> name ,
'start' => $currentTaskEntry -> due_date ,
'date_format' => 'date'
);
}
2019-09-17 16:28:11 +02:00
$usersService = new UsersService ();
$users = $usersService -> GetUsersAsDto ();
2019-03-04 17:44:48 +01:00
$chores = $this -> Database -> chores ();
2019-05-02 20:20:18 +02:00
$titlePrefix = $this -> LocalizationService -> __t ( 'Chore due' ) . ': ' ;
2019-03-04 17:44:48 +01:00
$choreEvents = array ();
foreach ( $this -> ChoresService -> GetCurrent () as $currentChoreEntry )
{
2019-09-17 16:28:11 +02: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-03-04 17:44:48 +01:00
$choreEvents [] = array (
2019-09-17 16:28:11 +02:00
'title' => $titlePrefix . $chore -> name . $assignedToText ,
2019-03-04 17:44:48 +01:00
'start' => $currentChoreEntry -> next_estimated_execution_time ,
'date_format' => 'datetime'
);
}
$batteries = $this -> Database -> batteries ();
2019-05-02 20:20:18 +02:00
$titlePrefix = $this -> LocalizationService -> __t ( 'Battery charge cycle due' ) . ': ' ;
2019-03-04 17:44:48 +01:00
$batteryEvents = array ();
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-09-24 09:40:56 +02:00
$recipes = $this -> Database -> recipes ();
$mealPlanDayRecipes = $this -> Database -> recipes () -> where ( 'type' , 'mealplan-day' );
$titlePrefix = $this -> LocalizationService -> __t ( 'Meal plan' ) . ': ' ;
$mealPlanRecipeEvents = array ();
foreach ( $mealPlanDayRecipes as $mealPlanDayRecipe )
{
$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 ,
2019-10-12 03:16:06 -05:00
'date_format' => 'date' ,
2019-10-12 10:22:17 +02:00
'description' => $this -> UrlManager -> ConstructUrl ( '/mealplan' . '?week=' . FindObjectInArrayByPropertyValue ( $recipes , 'id' , $recipeOfCurrentDay -> recipe_id ) -> name )
2019-09-24 09:40:56 +02:00
);
}
}
return array_merge ( $stockEvents , $taskEvents , $choreEvents , $batteryEvents , $mealPlanRecipeEvents );
2019-03-04 17:44:48 +01:00
}
}