%PDF- %GIF98; %PNG;
Server : ApacheSystem : Linux host.digitalbabaji.in 4.18.0-513.11.1.el8_9.x86_64 #1 SMP Wed Jan 17 02:00:40 EST 2024 x86_64 User : addictionfreeind ( 1003) PHP Version : 7.2.34 Disable Function : exec,passthru,shell_exec,system Directory : /home/addictionfreeind/public_html/admin1/app/Console/Commands/ |
Upload File : |
<?php
namespace App\Console\Commands;
use App\Events\TaskEvent;
use App\Models\Company;
use App\Models\Task;
use Illuminate\Console\Command;
class AutoCreateRecurringTasks extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'recurring-task-create';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Create recurring tasks';
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$companies = Company::select('id', 'timezone', 'default_task_status')->get();
foreach ($companies as $company) {
$now = now($company->timezone);
$repeatedTasks = Task::withCount('recurrings')
->with('labels', 'users')
->where('repeat', 1)
->whereDate('start_date', '<', $now->toDateString())
->where('repeat_complete', 0)
->where('company_id', $company->id)
->get();
$repeatedTasks->each(function ($task) use ($now, $company) {
if ($task->repeat_cycles == -1 || $task->recurrings_count < ($task->repeat_cycles - 1)) { // Subtract 1 to include original task
$startDate = $task->start_date->copy();
$endDate = (!is_null($task->due_date)) ? $task->due_date->copy() : null;
$repeatCount = $task->repeat_count + ($task->recurrings_count * $task->repeat_count);
$repeatStartDate = null;
$repeatDueDate = null;
if ($task->repeat_type == 'day' && $now->toDateString() == $startDate->copy()->addDays($repeatCount)->toDateString()) {
$repeatStartDate = $startDate->copy()->addDays($repeatCount);
$repeatDueDate = (!is_null($endDate)) ? $endDate->addDays($repeatCount) : null;
}
elseif ($task->repeat_type == 'week' && $now->toDateString() == $startDate->copy()->addWeeks($repeatCount)->toDateString()) {
$repeatStartDate = $startDate->copy()->addWeeks($repeatCount);
$repeatDueDate = (!is_null($endDate)) ? $endDate->addWeeks($repeatCount) : null;
}
elseif ($task->repeat_type == 'month' && $now->toDateString() == $startDate->copy()->addMonths($repeatCount)->toDateString()) {
$repeatStartDate = $startDate->copy()->addMonths($repeatCount);
$repeatDueDate = (!is_null($endDate)) ? $endDate->addMonths($repeatCount) : null;
}
elseif ($task->repeat_type == 'year' && $now->toDateString() == $startDate->copy()->addYears($repeatCount)->toDateString()) {
$repeatStartDate = $startDate->copy()->addYears($repeatCount);
$repeatDueDate = (!is_null($endDate)) ? $endDate->addYears($repeatCount) : null;
}
if (isset($repeatStartDate) || isset($repeatDueDate)) {
$this->createTask($task, $repeatStartDate, $repeatDueDate, $company->default_task_status);
// Mark repeat complete if cycles are complete
if ($task->repeat_cycles != -1 && ($task->recurrings_count + 2) == $task->repeat_cycles) { // Add 2 to include newly created task and the original task
$task->repeat_complete = 1;
$task->save();
}
}
}
});
}
}
protected function createTask($task, $startDate, $endDate, $taskStatus)
{
$newTask = new Task();
$newTask->heading = $task->heading;
$newTask->company_id = $task->company_id;
$newTask->description = $task->description;
$newTask->start_date = $startDate->format('Y-m-d');
$newTask->due_date = (!is_null($endDate)) ? $endDate->format('Y-m-d') : null;
$newTask->project_id = $task->project_id;
$newTask->task_category_id = $task->category_id;
$newTask->priority = $task->priority;
$newTask->board_column_id = $taskStatus;
$newTask->recurring_task_id = $task->id;
$newTask->is_private = $task->is_private;
$newTask->billable = $task->billable;
$newTask->estimate_hours = $task->estimate_hours;
$newTask->estimate_minutes = $task->estimate_minutes;
$newTask->save();
$newTask->users()->sync($task->users->pluck('id')->toArray());
$newTask->labels()->sync($task->labels->pluck('id')->toArray());
foreach ($newTask->users as $key => $user) {
event(new TaskEvent($newTask, $user, 'NewTask'));
}
}
}