diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 2313703..701a4c5 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -15,9 +15,12 @@ declare(strict_types=1); namespace Modules\EventManagement\Controller; use Modules\EventManagement\Models\EventMapper; +use Modules\EventManagement\Models\ProgressType; use phpOMS\Asset\AssetType; use phpOMS\Contract\RenderableInterface; +use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\OrderType; +use phpOMS\Math\Number\Numbers; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Views\View; @@ -51,9 +54,58 @@ final class BackendController extends Controller $view->setTemplate('/Modules/EventManagement/Theme/Backend/eventmanagement-list'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004201001, $request, $response); - /** @var \Modules\EventManagement\Models\Event[] $events */ - $events = EventMapper::getAll()->sort('id', OrderType::DESC)->limit(25)->executeGetArray(); - $view->data['events'] = $events; + $view->data['events'] = EventMapper::getAll() + ->sort('id', OrderType::DESC) + ->limit(25)->executeGetArray(); + + // Evaluate progress + $view->data['progress'] = []; + + $taskProgress = []; + + $now = new \DateTime('now'); + + /** @var \Modules\EventManagement\Models\Event $event */ + foreach ($view->data['events'] as $event) { + if ($event->progressType === ProgressType::TASKS) { + $taskProgress[] = $event->id; + } elseif ($event->progressType === ProgressType::LINEAR) { + $duration = (int) $event->start->diff($event->end)->format('%a'); + $progress = (int) $event->start->diff($now)->format('%a'); + + $view->data['progress'][$event->id] = (int) \min(100, $duration / $progress * 100); + } elseif ($event->progressType === ProgressType::EXPONENTIAL) { + $duration = (int) $event->start->diff($event->end)->format('%a'); + $progress = (int) $event->start->diff($now)->format('%a'); + + $view->data['progress'][$event->id] = (int) Numbers::remapRangeExponentially($progress, $duration); + } elseif ($event->progressType === ProgressType::LOG) { + $duration = (int) $event->start->diff($event->end)->format('%a'); + $progress = (int) $event->start->diff($now)->format('%a'); + + $view->data['progress'][$event->id] = (int) Numbers::remapRangeLog($progress, $duration); + } else { + $view->data['progress'][$event->id] = $event->progress; + } + } + + // Count tasks per event where tasks are used as progress indication + $eventIds = \implode(',', $taskProgress); + + $sql = <<app->dbPool->get()); + $results = $query->raw($sql)->execute()?->fetchAll(\PDO::FETCH_ASSOC) ?? []; + foreach ($results as $result) { + $view->data['progress'][$result['id']] = (int) (($result['total_tasks'] - $result['open_tasks']) / $result['total_tasks']); + } return $view; } diff --git a/Models/Event.php b/Models/Event.php index 15e4c9a..fb143ae 100755 --- a/Models/Event.php +++ b/Models/Event.php @@ -27,6 +27,9 @@ use phpOMS\Stdlib\Base\FloatInt; * @license OMS License 2.0 * @link https://jingga.app * @since 1.0.0 + * + * @feature Add milestones + * https://github.com/Karaka-Management/oms-EventManagement/issues/2 */ class Event { diff --git a/Theme/Backend/eventmanagement-list.tpl.php b/Theme/Backend/eventmanagement-list.tpl.php index edff992..4d7fa76 100755 --- a/Theme/Backend/eventmanagement-list.tpl.php +++ b/Theme/Backend/eventmanagement-list.tpl.php @@ -12,11 +12,6 @@ */ declare(strict_types=1); -$footerView = new \phpOMS\Views\PaginationView($this->l11nManager, $this->request, $this->response); -$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig'); -$footerView->setPages(20); -$footerView->setPage(1); - $events = $this->data['events']; echo $this->data['nav']->render(); ?> @@ -29,19 +24,22 @@ echo $this->data['nav']->render(); ?> + - $value) : ++$count; - $url = \phpOMS\Uri\UriFactory::build('eventmanagement/view?{?}&id=' . $value->id); ?> + $value) : ++$count; + $url = \phpOMS\Uri\UriFactory::build('{/base}/eventmanagement/view?{?}&id=' . $value->id); ?> +
getHtml('Progress'); ?> getHtml('Title'); ?> getHtml('Start'); ?> getHtml('End'); ?>
data['progress'][$value->id] ?? 0; ?> % printHtml($value->name); ?> printHtml($value->start?->format('Y-m-d')); ?> printHtml($value->end?->format('Y-m-d')); ?> -
getHtml('Empty', '0', '0'); ?> +
getHtml('Empty', '0', '0'); ?>