diff --git a/fid/config/vufind/fid.ini b/fid/config/vufind/fid.ini index e4dc39af80b575f5187f5482d3398832567d246f..fd434cd589fa8a65605fcd57f7a053e40205f53d 100644 --- a/fid/config/vufind/fid.ini +++ b/fid/config/vufind/fid.ini @@ -36,4 +36,30 @@ user_list_export_file_prefix = 'export' ; provides a comma separated list of available options e.g. "0,2,1" will result ; in having options job_title_0, job_title_2, job_title_1 in that particular order ; of not given, options will be job_title_0, job_title_1 -;jobTitleOptions = "0,1" \ No newline at end of file +;jobTitleOptions = "0,1" + +; examples on configure admin order listings +;[OrderList] +;displayCols[] = 'type' +;displayCols[] = 'status' +;displayCols[] = 'dueDate' +;displayCols[] = 'edit' +;displayCols[] = 'delete' + +;examples on enabling order edit forms +;[pdaEdit] +;form = 'complete' +;first of statusOptions[] is assumed as default status +;statusOptions[] = 'open' +;statusOptions[] = 'processing' +;statusOptions[] = 'loan' +;statusOptions[] = 'completed' +;statusOptions[] = 'closed' + +;[digitizationEdit] +;form = 'basic' +;first of statusOptions[] is assumed as default status +;statusOptions[] = 'open' +;statusOptions[] = 'processing' +;statusOptions[] = 'completed' +;statusOptions[] = 'closed' \ No newline at end of file diff --git a/fid/config/vufind/permissions.ini b/fid/config/vufind/permissions.ini index c3bee6a1bf0a94cfd6e1bbbb32492ea96b83275e..b5978a3f5be74a7338e83ca37186137c194d40df 100644 --- a/fid/config/vufind/permissions.ini +++ b/fid/config/vufind/permissions.ini @@ -31,6 +31,11 @@ role[] = loggedin FidApiPermission[] = edit_user permission = fid.EditUser +[fid.EditOrder] +role[] = loggedin +FidApiPermission[] = edit_order +permission = fid.EditOrder + [fid.LimitedAccess] role[] = loggedin FidApiPermission[] = limited_access diff --git a/module/fid/config/module.config.php b/module/fid/config/module.config.php index 74b728b9c8cd91cf378cf6c3b389dc022150af7a..bca6c65dbd6880b3885dfb686d62f04ed1ef4eb0 100644 --- a/module/fid/config/module.config.php +++ b/module/fid/config/module.config.php @@ -73,6 +73,8 @@ $config = [ 'fid-acquisition-subito-partial-copy-form' => require 'fid-acquisition-subito-partial-copy-form.php', 'fid-acquisition-digitization-form' => require 'fid-acquisition-digitization-form.php', 'fid-acquisition-digitization-missing-record-form' => require 'fid-acquisition-digitization-missing-record-form.php', + 'order-edit-form-basic' => require 'order-edit-form-basic.php', + 'order-edit-form-complete' => require 'order-edit-form-complete.php', PasswordResetModel::class => require 'password-reset-form.php', PasswordChangeModel::class => require 'password-change-form.php', UsernameChangeModel::class => require 'username-change-form.php', @@ -402,6 +404,17 @@ $config = [ ], ], ], + 'editOrder' => [ + 'type' => 'Zend\Router\Http\Segment', + 'options' => [ + 'route' => '/editOrder/[:orderid]', + 'defaults' => [ + 'controller' => UserController::class, + 'action' => 'editOrder', + 'orderid' => null + ], + ], + ], ], ], ], diff --git a/module/fid/config/order-edit-form-basic.php b/module/fid/config/order-edit-form-basic.php new file mode 100644 index 0000000000000000000000000000000000000000..8f2e97fda941b2cfd7eda803991f7ef23b55e768 --- /dev/null +++ b/module/fid/config/order-edit-form-basic.php @@ -0,0 +1,58 @@ +<?php +/** + * Copyright (C) 2021 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Alexander Purr <purr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ +use fid\Hydrator\OrderUpdateHydrator; +use Zend\Form\Element\Submit; +use Zend\Form\Element\Date; + +return [ + 'name' => 'order-edit-form-basic', + 'hydrator' => OrderUpdateHydrator::class, + 'elements' => [ + 'status' => [ + 'spec' => [ + 'name' => 'status', + 'type' => Select::class, + 'options' => [ + 'label' => 'order_label_status', + ], + ], + ], + 'submit' => [ + 'spec' => [ + 'name' => 'submit', + 'type' => Submit::class, + 'attributes' => [ + 'value' => 'label_submit', + ], + ], + ], + ], + 'input_filter' => [ + 'status' => [ + 'name' => 'format', + 'required' => true, + ], + 'submit' => [ + 'name' => 'submit', + 'required' => true, + ], + ], +]; diff --git a/module/fid/config/order-edit-form-complete.php b/module/fid/config/order-edit-form-complete.php new file mode 100644 index 0000000000000000000000000000000000000000..17ece4d8cf4ec61f363778f5c93be0af8e1c3aa9 --- /dev/null +++ b/module/fid/config/order-edit-form-complete.php @@ -0,0 +1,47 @@ +<?php +/** + * Copyright (C) 2021 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Alexander Purr <purr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ +use Zend\Form\Element\Date; + +$main_config = require 'order-edit-form-basic.php'; +unset($main_config['name']); + +$additional_config = [ + 'name' => 'order-edit-form-complete', + 'elements' => [ + 'due_date' => [ + 'spec' => [ + 'name' => 'due_date', + 'type' => Date::class, + 'options' => [ + 'label' => 'order_label_due_date', + ], + ], + ], + ], + 'input_filter' => [ + 'due_date' => [ + 'name' => 'due_date', + 'required' => false, + ], + ], +]; + +return array_merge_recursive($main_config, $additional_config); diff --git a/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php b/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php index 8316015bc9293cd5c91939cd3908d8b95bf2822c..85832745a15ac0db4f92d909f70cee892920a21f 100644 --- a/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php +++ b/module/fid/src/Controller/CustomTraits/FidAcquisitionTrait.php @@ -35,6 +35,7 @@ use fid\Validator\SubitoPartialCopyPageSelection; use finc\View\Helper\Root\Citation; use VuFind\Controller\AbstractBase; use VuFind\Exception\Forbidden as ForbiddenException; +use Zend\Config\Config; use Zend\Form\Form; /** @@ -126,7 +127,8 @@ trait FidAcquisitionTrait $url = $this->getRecordUrl($recordId); $label = $this->getOrderLabel($driver); $type = $this->type; - $hydratorData = compact('type', 'driver', 'user', 'url', 'label'); + $status = $this->getDefaultStatus(); + $hydratorData = compact('type', 'driver', 'user', 'url', 'label', 'status'); $hydratorData += $this->addTypeSpecificOrderInformation($form); $form->getHydrator()->hydrate($hydratorData, $order = new Order()); $this->client->requestOrderCreation($order); @@ -247,6 +249,15 @@ trait FidAcquisitionTrait { } + protected function getDefaultStatus() { + /** @var Config $config */ + $config = $this->getConfig('fid'); + if (isset($config[$this->type.'Edit']['statusOptions'])) { + return $this->getConfig('fid')[$this->type . 'Edit']['statusOptions'][0]; + } + else return null; + } + protected function runDigitizationMissingRecord() { if (!($user = $this->getUser())) { diff --git a/module/fid/src/Controller/UserController.php b/module/fid/src/Controller/UserController.php index a8abdbb83ec6692d5c3792fd45291bd359b95f4b..63db4919009f0e511905549777a993f789af7806 100644 --- a/module/fid/src/Controller/UserController.php +++ b/module/fid/src/Controller/UserController.php @@ -29,6 +29,7 @@ use fid\FormModel\UsernameChangeModel; use fid\Service\Client; use fid\Service\ClientException; use fid\Service\DataTransferObject\Library; +use fid\Service\DataTransferObject\Order; use fid\Service\DataTransferObject\User; use fid\Service\UserNotAuthorizedException; use VuFind\Auth\Manager as AuthManager; @@ -790,9 +791,11 @@ class UserController extends AbstractBase return $this->forceLogin(); } try { - $user = $this->client->requestUserDetails(); + $user = $this->client->requestUserDetails(null, true); $viewModel = $this->createViewModel(); - $viewModel->setVariable('orders', $user->getOrders()); + $orders = $user->getOrders(); + $displayCols = $this->config['OrderList']['displayCols']; + $viewModel->setVariables(compact('orders','displayCols')); $viewModel->setTemplate('fid/user/orders'); return $viewModel; } catch (ClientException $exception) { @@ -809,7 +812,8 @@ class UserController extends AbstractBase try { $orders = $this->client->requestOrderList(); $viewModel = $this->createViewModel(); - $viewModel->setVariables(compact('orders')); + $displayCols = $this->config['OrderList']['displayCols']; + $viewModel->setVariables(compact('orders','displayCols')); $viewModel->setTemplate('fid/user/admin-orders'); return $viewModel; } catch (UserNotAuthorizedException $exception) { @@ -892,4 +896,92 @@ class UserController extends AbstractBase $jobTitleElement->setValueOptions($options); } } + + public function editOrderAction() + { + if (!$this->getUser()) { + return $this->forceLogin(); + } + + /** @var Request $request */ + $request = $this->getRequest(); + $orderId = $this->params()->fromRoute('orderid'); + if (empty($orderId)) { + // if no order ID is set the call is not valid + return $this->redirect()->toRoute('fid/admin/orders'); + } + + try { + $this->permission()->check('fid.EditOrder', 'exception'); + $order = $this->client->requestOrder($orderId); + } catch (\Exception $ex) { + $this->getMessenger() + ->addErrorMessage($this->translate('fid::edit_order_error')); + return $this->redirect()->toRoute('fid/admin/orders'); + } + + $recordId = $order->getRecordId(); + $driver = $recordId ? $this->getRecordLoader()->load($recordId) : null; + + /** @var Form $form */ + /** @var Select $statusElement */ + $form = $this->config[$order->getType()."Edit"]['form'] + ? $this->serviceLocator->get('order-edit-form-'.$this->config[$order->getType()."Edit"]['form']) + : null; + $this->applyStatusOptions($form,$order->getType()); + + if ($this->formWasSubmitted()) { + $form->setData($request->getPost()); + if ($form->isValid()) { + return $this->updateOrder($form, $order); + } + } else { + $form->setData($form->getHydrator()->extract($order)); + } + + $action = $this->url()->fromRoute('fid/admin/editOrder', [ + 'orderid' => $order->getId() + ]); + $form->setAttribute('action', $action); + $form->prepare(); + + $config = $this->config; + $viewModel = $this->createViewModel(); + $viewModel->setVariables(compact('config', 'form', 'order', 'driver')); + $viewModel->setTemplate('fid/order/order-edit'); + + return $viewModel; + } + + protected function applyStatusOptions($form, $type) + { + if ($statusOptions = $this->config["{$type}Edit"]['statusOptions'] ?? null) { + $options = []; + foreach ($statusOptions as $statusOption) { + $options[] = [ + 'value' => $statusOption, + 'label' => $this->translate('fid::status_'.$statusOption), + ]; + } + $statusElement = $form->get('status'); + $statusElement->setValueOptions($options); + } + } + + protected function updateOrder(Form $form, Order $order) { + $data = $form->getData(); + $messenger = $this->getMessenger(); + + try { + $form->getHydrator()->hydrate($data, $order); + $this->client->requestOrderUpdate($order); + $message = $this->translate('fid::order_update_success'); + $messenger->addSuccessMessage($message); + } catch (\Exception $ex) { + $message = $this->translate('fid::order_update_error'); + $messenger->addErrorMessage($message); + } + + return $this->redirect()->toRoute('fid/admin/orders'); + } } diff --git a/module/fid/src/Hydrator/OrderHydrator.php b/module/fid/src/Hydrator/OrderHydrator.php index 43c1dbc3e729be596e86e6d629cfad5b8b63cb33..e1acefc7b887e929320100e5e3ba631aeff2698c 100644 --- a/module/fid/src/Hydrator/OrderHydrator.php +++ b/module/fid/src/Hydrator/OrderHydrator.php @@ -72,6 +72,7 @@ class OrderHydrator extends AbstractHydrator { ); $object->setData(compact('record','partialCopy','digitization','pda')); + $object->setStatus($data['status']); $object->setLabel($data['label']); return; } diff --git a/module/fid/src/Hydrator/OrderUpdateHydrator.php b/module/fid/src/Hydrator/OrderUpdateHydrator.php new file mode 100644 index 0000000000000000000000000000000000000000..8a28353c8b1f303c61c10b1ec3e5b3740c05f067 --- /dev/null +++ b/module/fid/src/Hydrator/OrderUpdateHydrator.php @@ -0,0 +1,31 @@ +<?php +namespace fid\Hydrator; + +use fid\Service\DataTransferObject\Order; +use Zend\Hydrator\AbstractHydrator; + +class OrderUpdateHydrator extends AbstractHydrator { + + const DATE_FORMAT = 'Y-m-d'; + + public function extract($object) + { + $retval['due_date'] = $object->getDueDate() ? $object->getDueDate()->format(self::DATE_FORMAT) : ''; + $retval['status'] = $object->getStatus() ?? 'open'; + return $retval; + } + + /** + * @param array $data + * @param Order|object $object + * @return Order|object|void + */ + public function hydrate(array $data, $object) + { + $data['status'] ? $object->setStatus($data['status']) : null; + !empty($data['due_date']) + ? $object->setDueDate(\DateTime::createFromFormat(self::DATE_FORMAT, $data['due_date'])) + : null; + return $object; + } +} diff --git a/module/fid/src/Service/Client.php b/module/fid/src/Service/Client.php index 531e760e3f96869f00cb708d3f68e14b0c67fdee..ca678cb2781eeaa67a2e0087990003ef8809b93b 100644 --- a/module/fid/src/Service/Client.php +++ b/module/fid/src/Service/Client.php @@ -287,6 +287,46 @@ class Client return array_combine($keys, $list); } + /** + * @return Order|null + * @throws ClientException + * @throws UserNotAuthorizedException + */ + public function requestOrder($orderId = null): ?Order + { + $request = $this->buildRequest('get', "orders/$orderId"); + $response = $this->sendAuthenticatedRequest($request); + + if ($response->getStatusCode() !== 200) { + $this->throwException($response); + } + + /** @var Order $order */ + $order = $this->serializer->deserialize((string)$response->getBody(), + Order::class, 'json'); + + return $order; + } + + /** + * @param Order $user + * @return bool + * @throws ClientException + */ + public function requestOrderUpdate(Order $order) : bool + { + $body = $this->serializer->serialize($order, 'json', ['groups' => ['order:update:request']]); + $request = $this->buildRequest('put', "orders/{$order->getId()}", $body); + $response = $this->sendAuthenticatedRequest($request); + + if ($response->getStatusCode() !== 200) { + $this->throwException($response); + return false; + } + + return true; + } + /** * @param string $baseUrl * @param string $username diff --git a/module/fid/src/Service/DataTransferObject/Order.php b/module/fid/src/Service/DataTransferObject/Order.php index 51863f887a8ea3918357a8662023cfbd21177222..caf48778a971acf3b7f7e449259199a89cbcea08 100644 --- a/module/fid/src/Service/DataTransferObject/Order.php +++ b/module/fid/src/Service/DataTransferObject/Order.php @@ -32,6 +32,7 @@ class Order * @Groups({ * "order:creation:response", * "order:list:response", + * "order:update:request", * "user:details:response", * "user:creation:response", * "user:update:response" @@ -44,6 +45,7 @@ class Order * @Groups({ * "order:creation:request", * "order:creation:response", + * "order:update:request", * "order:list:response", * "user:details:response", * "user:creation:response", @@ -58,6 +60,7 @@ class Order * "order:creation:request", * "order:creation:response", * "order:list:response", + * "order:update:request", * "user:details:response", * "user:creation:response", * "user:update:response" @@ -71,6 +74,7 @@ class Order * "order:creation:request", * "order:creation:response", * "order:list:response", + * "order:update:request", * "user:details:response", * "user:creation:response", * "user:update:response" @@ -83,6 +87,7 @@ class Order * @Groups({ * "order:creation:request", * "order:creation:response", + * "order:update:request", * "order:list:response", * "user:details:response", * "user:creation:response", @@ -96,6 +101,7 @@ class Order * @Groups({ * "order:creation:response", * "order:list:response", + * "order:update:request", * "user:details:response", * "user:creation:response", * "user:update:response" @@ -103,6 +109,8 @@ class Order */ protected $createdAt; + const DATETIME_FORMAT = 'Y-m-d H:i:s'; + /** * @return string|null */ @@ -203,4 +211,60 @@ class Order { return $this->getLabel(); } + + public function getDueDate(): ? \DateTime + { + return (!empty($this->data['dueDate'])) + ? \DateTime::createFromFormat(self::DATETIME_FORMAT,$this->data['dueDate']) + : null; + } + + /** + * @param \DateTime $dueDate + */ + public function setDueDate(\DateTime $date) + { + $data = $this->getData(); + $data['dueDate'] = $date->format(self::DATETIME_FORMAT); + $this->setData($data); + } + + public function displayDueDate(): String + { + return $this->getDueDate() ? $this->getDueDate()->format('d.m.Y') : ''; + } + + public function isOverdue () : bool + { + if ($duedate = $this->getDueDate()) + { + $now = new \DateTime(); + return $now > $duedate ? true : false; + } + else { + return false; + } + } + + /** + * @return string + */ + public function getStatus(): ? string + { + return $this->data['status'] ?? null; + } + + /** + * @param string $status + */ + public function setStatus(?string $status): void + { + if($status != null) { + $this->data['status'] = $status; + } + } + + public function getRecordId() { + return $this->data['record']['id'] ?? null; + } } \ No newline at end of file diff --git a/themes/fid/languages/fid/de.ini b/themes/fid/languages/fid/de.ini index 0a3fee6dac272d902870c7d7531427e88eedd530..69dd4b1f2c967135d74704519c20b2ca0900a94b 100644 --- a/themes/fid/languages/fid/de.ini +++ b/themes/fid/languages/fid/de.ini @@ -183,4 +183,19 @@ acquisition_permission_denied = "Ihr Konto ist für Bestellungen zurzeit gesperr number_of_pages = "Seiten" -FID_services = "FID Services" \ No newline at end of file +FID_services = "FID Services" + +status_open = "offen" +status_processing = "wird bearbeitet" +status_loan = "ausgeliehen" +status_completed = "erfolgreich erledigt" +status_closed = "geschlossen" + +order_label_status = "Status" +order_label_due_date = "Leihfrist" + +order_list = "Liste aller Bestellungen" +edit_order_error = "Bestellung kann nicht bearbeitet werden" +order_update_success = "Bestellung aktualisiert" +order_update_error = "Fehler beim Aktualisierne der Bestellung" +order_type = "Typ" \ No newline at end of file diff --git a/themes/fid/languages/fid/en.ini b/themes/fid/languages/fid/en.ini index 01cd367904a8b26b3886d97ca5cca59e5ed3696b..6e12cc06afe719d7a3b7e4f6a71c2e0fb2e668b6 100644 --- a/themes/fid/languages/fid/en.ini +++ b/themes/fid/languages/fid/en.ini @@ -179,4 +179,19 @@ acquisition_permission_denied = "Your account is currently blocked for orders." number_of_pages = "Pages" -FID_services = "FID Services" \ No newline at end of file +FID_services = "FID Services" + +status_open = "open" +status_processing = "is processed" +status_loan = "lent" +status_completed = "successfully completed" +status_closed = "closed" + +order_label_status = "Status" +order_label_due_date = "Due date" + +order_list = "List of all orders" +edit_order_error = "Order cannot be processed" +order_update_success = "Order updated" +order_update_error = "Error on updating order" +order_type = "Type" \ No newline at end of file diff --git a/themes/fid/templates/fid/order/order-edit-form-basic.phtml b/themes/fid/templates/fid/order/order-edit-form-basic.phtml new file mode 100644 index 0000000000000000000000000000000000000000..0f9decad5a4a0772b9e30ff8f5e7e5e69c0e7ed3 --- /dev/null +++ b/themes/fid/templates/fid/order/order-edit-form-basic.phtml @@ -0,0 +1,73 @@ +<!-- fid: fid - order - order-edit-form-basic --> +<?php +/** + * Copyright (C) 2021 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Alexander Purr <purr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ + +use Zend\Form\Element; +use Zend\Form\Form; +use Zend\Form\View\Helper\FormElementErrors; +use Zend\Form\View\Helper\FormLabel; +use Zend\Form\View\Helper\FormSubmit; + +/** @var Form $form */ +/** @var FormLabel $formLabel */ +/** @var FormSubmit $formSubmit */ +/** @var FormElementErrors $formElementErrors */ +$form = $this->form; +$formLabel = $this->formLabel(); +$formLabel->setTranslatorTextDomain('fid'); +$formSubmit = $this->formSubmit(); +$formSubmit->setTranslatorTextDomain('fid'); +$formElementErrors = $this->formElementErrors(); +$formElementErrors->setTranslatorTextDomain('fid'); +?> + +<?= $this->form()->openTag($form) ?> + +<?php /* status */ ?> +<?php +/** @var Element\Select $elemStatus */ +$elemStatus = $form->get('status'); +$elemStatus->setAttributes(['class' => 'form-control']); +?> + <div class="form-group"> + <?= $this->formElementErrors($elemStatus) ?> + <?= $this->formLabel($elemStatus) ?> + <?= $this->formSelect($elemStatus) ?> + </div> + +<?php /* submit button */ ?> +<?php +/** @var Element\Submit $elemSubmit */ +$elemSubmit = $form->get('submit'); +$elemSubmit->setAttributes(['class' => 'btn btn-primary']); +?> + <div class="form-group"> + <div class="col-lg-11 col-md-9 col-sm-11 col-xs-12"> + <?= $this->formSubmit($elemSubmit) ?> + <a href="<?= $this->url('fid/admin/orders') ?>" + class="btn btn-primary"> + <?= $this->transEsc('Cancel') ?> + </a> + </div> + </div> + +<?= $this->form()->closeTag($form) ?> +<!-- fid: fid - order - order-edit-form-basic -END --> diff --git a/themes/fid/templates/fid/order/order-edit-form-complete.phtml b/themes/fid/templates/fid/order/order-edit-form-complete.phtml new file mode 100644 index 0000000000000000000000000000000000000000..833487b43d235a882e7d4c37f9c2c7ae4b381142 --- /dev/null +++ b/themes/fid/templates/fid/order/order-edit-form-complete.phtml @@ -0,0 +1,85 @@ +<!-- fid: fid - order - order-edit-form-complete --> +<?php +/** + * Copyright (C) 2021 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Alexander Purr <purr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ + +use Zend\Form\Element; +use Zend\Form\Form; +use Zend\Form\View\Helper\FormElementErrors; +use Zend\Form\View\Helper\FormLabel; +use Zend\Form\View\Helper\FormSubmit; + +/** @var Form $form */ +/** @var FormLabel $formLabel */ +/** @var FormSubmit $formSubmit */ +/** @var FormElementErrors $formElementErrors */ +$form = $this->form; +$formLabel = $this->formLabel(); +$formLabel->setTranslatorTextDomain('fid'); +$formSubmit = $this->formSubmit(); +$formSubmit->setTranslatorTextDomain('fid'); +$formElementErrors = $this->formElementErrors(); +$formElementErrors->setTranslatorTextDomain('fid'); +?> + +<?= $this->form()->openTag($form) ?> + + <?php /* status */ ?> + <?php + /** @var Element\Select $elemStatus */ + $elemStatus = $form->get('status'); + $elemStatus->setAttributes(['class' => 'form-control']); + ?> + <div class="form-group"> + <?= $this->formElementErrors($elemStatus) ?> + <?= $this->formLabel($elemStatus) ?> + <?= $this->formSelect($elemStatus) ?> + </div> + + <?php /* due date */ ?> + <?php + /** @var Element\Date $elemDueDate */ + $elemDueDate = $form->get('due_date'); + $elemDueDate->setAttributes(['class' => 'form-control']); + ?> + <div class="form-group"> + <?= $this->formElementErrors($elemDueDate) ?> + <?= $this->formLabel($elemDueDate) ?> + <?= $this->formElement($elemDueDate) ?> + </div> + + <?php /* submit button */ ?> + <?php + /** @var Element\Submit $elemSubmit */ + $elemSubmit = $form->get('submit'); + $elemSubmit->setAttributes(['class' => 'btn btn-primary']); + ?> + <div class="form-group"> + <div class="col-lg-11 col-md-9 col-sm-11 col-xs-12"> + <?= $this->formSubmit($elemSubmit) ?> + <a href="<?= $this->url('fid/admin/orders') ?>" + class="btn btn-primary"> + <?= $this->transEsc('Cancel') ?> + </a> + </div> + </div> + +<?= $this->form()->closeTag($form) ?> +<!-- fid: fid - order - order-edit-form-complete --> diff --git a/themes/fid/templates/fid/order/order-edit.phtml b/themes/fid/templates/fid/order/order-edit.phtml new file mode 100644 index 0000000000000000000000000000000000000000..4b48b8ee68a0cb23d810342f33452436b840ed13 --- /dev/null +++ b/themes/fid/templates/fid/order/order-edit.phtml @@ -0,0 +1,66 @@ +<!-- fid: fid - order - order-edit --> +<?php +/** + * Copyright (C) 2011 Leipzig University Library + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * @author Alexander Purr <purr@ub.uni-leipzig.de> + * @license http://opensource.org/licenses/gpl-2.0.php GNU GPLv2 + */ + +use Zend\Form\Element; +use Zend\Form\Form; +use Zend\Form\View\Helper\FormElementErrors; +use Zend\Form\View\Helper\FormLabel; +use Zend\Form\View\Helper\FormSubmit; + +$driver = $this->driver; +$order = $this->order; +$this->user = $order->getUser(); +/** @var Form $form */ +$form = $this->form; +$this->headTitle($title = $this->translate("fid::acquisition_{$order->getType()}")); +?> +<h1><?= $title ?></h1> +<?= $this->flashmessages() ?> + +<?=$this->render('fid/record/acquisition-contact-details'); ?> + +<?php + $driver = $this->driver; + $formatter = $this->recordDataFormatter(); + $this->coreFields = $formatter->getData($driver, $formatter->getDefaults('fid-acquisition-general')); +?> +<?=$this->render('fid/record/acquisition-record-details'); ?> + +<h2><?=$this->translate("Status")?></h2> + + <div class="form-group"> + <label><?= $this->translate('Ordered on') ?></label> + <div class="form-control"><?= $this->escapeHtml($order->getCreatedAt()->format('d.m.Y')) ?></div> + </div> + +<?php if ($form instanceof Form): ?> + <?=$this->render("fid/order/{$form->getName()}"); ?> +<?php else: ?> + <div class="form-group"> + <a href="<?= $this->url('fid/admin/orders') ?>" + class="btn btn-primary"> + <?= $this->transEsc('Cancel') ?> + </a> + </div> + </div> +<?php endif; ?> +<!-- fid: fid - order - order-edit - END --> diff --git a/themes/fid/templates/fid/record/acquisition-contact-details.phtml b/themes/fid/templates/fid/record/acquisition-contact-details.phtml new file mode 100644 index 0000000000000000000000000000000000000000..86df40cd37ce0eb314b45cd41e87fe9449f6003a --- /dev/null +++ b/themes/fid/templates/fid/record/acquisition-contact-details.phtml @@ -0,0 +1,18 @@ +<!-- fid: fid - record - acquisition-contact-details --> +<?php +/** @var \fid\Service\DataTransferObject\User $user */ +?> +<h2><?=$this->translate("fid::acquisition_delivery_to")?></h2> +<table class="table table-striped"> + <tbody> + <tr> + <th><?= $this->translate("fid::acquisition_order_delivery_name") ?></th> + <td><?= $this->user->getFirstname() ?> <?= $this->user->getLastname() ?></td> + </tr> + <tr> + <th><?= $this->translate("Email Address") ?></th> + <td><?= $this->user->getUsername() ?></td> + </tr> + </tbody> +</table> +<!-- fid: fid - record - acquisition-contact-details - END --> diff --git a/themes/fid/templates/fid/user/admin-orders.phtml b/themes/fid/templates/fid/user/admin-orders.phtml index 3caca066e03db0a678264b53d1d15f7cab8c689b..69ecaa94b96fd61764d029916ea48eae0df1bfa8 100644 --- a/themes/fid/templates/fid/user/admin-orders.phtml +++ b/themes/fid/templates/fid/user/admin-orders.phtml @@ -1,26 +1,43 @@ -<!-- fid: fid - admin - order-list --> +<!-- fid: fid - admin - orders --> +<?php + use fid\Controller\RecordController; +?> + +<h1><?= $this->translate('fid::order_list') ?></h1> +<?= $this->flashmessages() ?> + <?php if (empty($orders)): ?> <?=$this->translate('fid::user_orders_empty')?> <?php else: ?> <table class="table"> + <tr> + <?= in_array('type',$this->displayCols) + ? "<th>{$this->translate('fid::order_type')}</th>" + : ''?> <th><?=$this->translate('Date')?></th> - - <!-- fid: fid - admin - order-list - additionals-headers --> <th><?=$this->translate('fid::order_record')?></th> <th><?=$this->translate('fid::order_user')?></th> - <!-- fid: fid - admin - order-list - additionals-headers - END --> - + <?= in_array('status',$this->displayCols) + ? "<th>{$this->translate('fid::order_label_status')}</th>" + : ''?> + <?= in_array('dueDate',$this->displayCols) + ? "<th>{$this->translate('fid::order_label_due_date')}</th>" + : '' ?> + <?= in_array('edit',$this->displayCols) + ? "<th></th>" + : ''?> </tr> + <?php foreach ($orders as $order): /** @var $order \fid\Service\DataTransferObject\Order */?> - <!-- fid: fid - admin - order-list - entry --> <tr name="order-<?=$this->escapeHtml($order->getId())?>"> + <?= in_array('status',$this->displayCols) + ? "<td>" . $this->translate("fid::acquisition_{$order->getType()}") . "</td>" + : '' ?> <td><?=$this->escapeHtml($order->getCreatedAt()->format('d.m.Y'))?></td> - <?php $data = $order->getData() ?> - <!-- fid: fid - admin - order-list - data --> <?=$this->render('fid/user/orders/additionals-data', compact('order'))?> <td> <?php @@ -31,12 +48,20 @@ <?= $this->translate('fid::user_deleted') ?> <?php endif; ?> </td> - <!-- fid: fid - admin - order-list - data - END --> - + <?= in_array('status',$this->displayCols) + ? "<td>" . ($order->getStatus() ? $this->translate('fid::status_'.$order->getStatus()) : '' . "</td>") + : '' ?> + <?php if(in_array('dueDate',$this->displayCols)): ?> + <?= ($order->getType() == RecordController::PDA) && ($order->isOverdue()) && ($order->getStatus() != 'completed') + ? "<td><div class=\"alert alert-danger\" role=\"alert\">{$this->icon('warning')}{$order->displayDueDate()}</div></td>" + : "<td>{$order->displayDueDate()}</td>" ?> + <?php endif; ?> + <?= in_array('edit',$this->displayCols) + ? "<td><a href=\"{$this->url('fid/admin/editOrder', ['orderid' => $order->getId()])}\">{$this->icon('pen')}</td>" + : '' ?> </tr> - <!-- fid: fid - admin - order-list - entry - END --> <?php endforeach; ?> </table> <?php endif; ?> -<!-- fid: fid - admin - order-list - END --> \ No newline at end of file +<!-- fid: fid - admin - orders - END --> \ No newline at end of file diff --git a/themes/fid/templates/fid/user/orders.phtml b/themes/fid/templates/fid/user/orders.phtml index b67efccf49ff82234e7c54ac1a542efe6f8a3d74..9c3448e863909d0770a1218aacb3f37b1d4c1d86 100644 --- a/themes/fid/templates/fid/user/orders.phtml +++ b/themes/fid/templates/fid/user/orders.phtml @@ -6,9 +6,12 @@ <tr> <th><?=$this->translate('Date')?></th> <?=$this->render('fid/user/orders/additionals-headers');?> + <?= in_array('status',$this->displayCols) + ? "<th>{$this->translate('fid::order_label_status')}</th>" + : ''?> </tr> <?php foreach ($orders as $order): ?> - <?=$this->render('fid/user/orders/entry', compact('order'))?> + <?=$this->render('fid/user/orders/entry', compact('order','displayCols'))?> <?php endforeach; ?> </table> <?php endif; ?> diff --git a/themes/fid/templates/fid/user/orders/entry.phtml b/themes/fid/templates/fid/user/orders/entry.phtml index 580b7b8b65a6662cdba5721a8e048155f08c6a23..daecf9de8e5104e2c4bca6451b0ad0ecb82a4878 100644 --- a/themes/fid/templates/fid/user/orders/entry.phtml +++ b/themes/fid/templates/fid/user/orders/entry.phtml @@ -2,5 +2,8 @@ <tr name="order-<?=$this->escapeHtml($this->order->getId())?>"> <td><?=$this->escapeHtml($this->order->getCreatedAt()->format('d.m.Y'))?></td> <?=$this->render('fid/user/orders/additionals-data', compact('order'))?> + <?= in_array('status',$this->displayCols) + ? "<td>" . ($order->getStatus() ? $this->translate('fid::status_'.$order->getStatus()) : '' . "</td>") + : '' ?> </tr> <!-- fid: fid - user - orders - entry - END --> \ No newline at end of file