templates/layout_admin_new.html.twig line 1

Open in your IDE?
  1. {% extends "@SonataAdmin/standard_layout.html.twig" %}
  2. {% block sonata_head_title %}
  3. {% block title %} CTLF {% endblock %}
  4. {% endblock %}
  5. {% block meta_tags %}
  6. {{ parent() }}
  7. <meta name="keywords" content="<?=SITE_KEYS?>">
  8. <meta name="description" content="<?=SITE_DESC?>">
  9. <link rel="shortcut icon" href="{{ asset(settings_service.faviconSite) }}">
  10. {% endblock %}
  11. {% block stylesheets %}
  12. {{ parent() }}
  13. <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300italic,400italic,300,400,500,700,900">
  14. <!-- <link rel="stylesheet" href="{{ asset('bundles/admin/css/bootstrap.css') }}"/> -->
  15. <link rel="stylesheet" href="{{ asset('bundles/admin/css/materialadmin.css') }}"/>
  16. <link rel="stylesheet" href="{{ asset('bundles/admin/css/font-awesome.css') }}"/>
  17. <link rel="stylesheet" href="{{ asset('bundles/admin/css/material-design-iconic-font.css') }}"/>
  18. <!-- <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/select2/select2.css') }}"/> -->
  19. <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/clockpicker-gh-pages/dist/bootstrap-clockpicker.css') }}"/>
  20. <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/bootstrap-datepicker/datepicker3.css') }}"/>
  21. <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/intl-tel-input/css/intlTelInput.css') }}"/>
  22. <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/typeahead/typeahead.css') }}"/>
  23. <!-- <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/jquery-ui/jquery-ui-theme.css') }}"/> -->
  24. <link rel="stylesheet" href="{{ asset('thirdparty/jquery-ui/jquery-ui.css') }}"/>
  25. <link rel="stylesheet" href="{{ asset('bundles/admin/css/libs/DataTables/jquery.dataTables.css') }}"/>
  26. <link rel="stylesheet" href="{{ asset('bundles/admin/css/layout.css') }}"/>
  27. {% if main_location == 'US' %}
  28. <link href="{{ asset('bundles/admin/css/location_us.css') }}" type="text/css" rel="stylesheet" />
  29. {% endif %}
  30. <style>
  31. #header {
  32. z-index: 2000;
  33. }
  34. .fa-check-square:before {
  35. content: "\f14a" !important;
  36. }
  37. .fa-pencil:before {
  38. content: "\f040" !important;
  39. }
  40. .fa-mobile-phone:before, .fa-mobile:before {
  41. content: "\f10b" !important;
  42. }
  43. .fa-map-marker:before {
  44. content: "\f041" !important;
  45. }
  46. .fa-exchange:before {
  47. content: "\f0ec" !important;
  48. }
  49. .fa-pencil:before {
  50. content: "\f040" !important;
  51. }
  52. .fa-external-link:before {
  53. content: "\f08e" !important;
  54. }
  55. .fa-level-up:before {
  56. content: "\f148" !important;
  57. }
  58. .fa-trash:before {
  59. content: "\f1f8" !important;
  60. }
  61. .btn-floating-action .fa,
  62. .btn-floating-action .md,
  63. .btn-floating-action .glyphicon {
  64. line-height: 31px !important;
  65. }
  66. .d-flex {
  67. display: flex;
  68. }
  69. .sonata-filter-form .form-control {
  70. font-size: 12px;
  71. }
  72. .content-wrapper {
  73. margin-left: 0 !important;
  74. }
  75. .navbar-header .navbar-brand {
  76. color: #0aa89e !important;
  77. }
  78. .header-nav .btn-icon-toggle {
  79. margin-top: -8px;
  80. }
  81. .btn-icon-toggle {
  82. justify-content: center;
  83. display: flex;
  84. }
  85. .top-pagination .text-center {
  86. text-align: left !important;
  87. }
  88. .results-text {
  89. display: flex;
  90. min-height: 35px;
  91. flex-direction: column;
  92. justify-content: center;
  93. }
  94. .pb-10 {
  95. padding-bottom: 10px;
  96. }
  97. .mb-10 {
  98. margin-bottom: 10px;
  99. }
  100. #filter_bookingDate_value, #filter_pickUpDate_value {
  101. display: flex !important;
  102. justify-content: space-between;
  103. }
  104. #filter_bookingDate_value > div:first-of-type,
  105. #filter_pickUpDate_value > div:first-of-type {
  106. padding-right: 10px;
  107. }
  108. .input-group {
  109. display: flex !important;
  110. }
  111. .filter-wrapper {
  112. display: flex;
  113. justify-content: space-between;
  114. }
  115. .filter-label {
  116. font-size: 12px;
  117. display: flex;
  118. flex-direction: column;
  119. justify-content: space-around;
  120. height: 100%;
  121. margin-top: 0 !important;
  122. margin-bottom: 0 !important;
  123. }
  124. .advanced-filter .filter-label {
  125. justify-content: end;
  126. }
  127. .sonata-ba-list-field-choice,
  128. .sonata-ba-list-field-datetime,
  129. .sonata-ba-list-field-number,
  130. .sonata-ba-list-field-float,
  131. .sonata-ba-list-field-float,
  132. .sonata-ba-list-field-orm_many_to_one,
  133. .passenger-icons {
  134. text-align: center;
  135. }
  136. .sonata-ba-list-field-actions,
  137. .sonata-ba-list-field-header-actions {
  138. text-align: right;
  139. }
  140. .pick-up-address .switch-address {
  141. top: 0 !important;
  142. right: -21px !important;
  143. }
  144. .pick-up-address .pick-up-address-icon {
  145. float: left;
  146. left: -15px !important;
  147. position: absolute;
  148. top: 3px!important;
  149. }
  150. .copy-vias,
  151. .copy-pick-up-address,
  152. .copy-destination-address {
  153. z-index: 1061 !important;
  154. right: 20px;
  155. }
  156. .delete-vias .remove_button {
  157. position: absolute;
  158. left: -5px;
  159. top: -3px;
  160. font-size: 13px;
  161. width: 30px;
  162. text-align: center;
  163. height: 30px;
  164. }
  165. .broadcast-icon {
  166. padding: 2px 3px;
  167. }
  168. .vias-row .btn-success.active.focus,
  169. .vias-row .btn-success.active:focus,
  170. .vias-row .btn-success.active:hover,
  171. .vias-row .btn-success:active.focus,
  172. .vias-row .btn-success:active:focus,
  173. .vias-row .btn-success:active:hover {
  174. background-color: #c77bd4;
  175. color: #ffffff;
  176. border-color: #c77bd4;
  177. }
  178. .vias-row .select2-selection__placeholder:before {
  179. content: 'Select vias address';
  180. }
  181. .pick-up-address .select2-selection__placeholder:before {
  182. content: 'Type the pick-up address';
  183. }
  184. .destination-address-booking .select2-selection__placeholder:before {
  185. content: 'Type the destination address';
  186. }
  187. .destination-address-booking {
  188. display: flex;
  189. margin-top: -20px !important;
  190. }
  191. .copy-vias {
  192. top: 12px;
  193. right: 60px;
  194. }
  195. .multiple-buttons {
  196. margin-bottom: 0 !important;
  197. padding-left: 12px;
  198. }
  199. .extras-row {
  200. display: flex;
  201. margin-top: 0 !important;
  202. }
  203. .extras-row .form-group:first-child {
  204. padding-top: 0 !important;
  205. }
  206. .vias-row {
  207. margin-top: -1px !important;
  208. text-align: right;
  209. }
  210. .vias-row .form-group {
  211. margin-bottom: 7px;
  212. }
  213. .select2-selection__rendered {
  214. text-align: justify;
  215. }
  216. .modal,
  217. .popover,
  218. .select2-container,
  219. .clockpicker-popover,
  220. .bootstrap-datetimepicker-widget {
  221. z-index: 1061 !important;
  222. }
  223. .select2-container--default .select2-selection--single .select2-selection__clear {
  224. right: 20px;
  225. }
  226. .select2-container--bootstrap .select2-selection--single {
  227. min-height: 25px;
  228. height: unset;
  229. padding: 1px 24px 1px 12px !important;
  230. }
  231. .select2-container--bootstrap .select2-selection--multiple {
  232. min-height: 23px;
  233. }
  234. .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field {
  235. height: 23px;
  236. padding: 0 5px;
  237. }
  238. .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice {
  239. margin: 1px 0 0 1px;
  240. }
  241. .select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered {
  242. padding: 0;
  243. }
  244. .form-group[id*="_addressD"] .select2-container,
  245. .form-group[id*="_pickUpAddressD"] .select2-container,
  246. .form-group[id*="_destinationAddressD"] .select2-container {
  247. width: 100% !important;
  248. max-width: 100%;
  249. min-width: 100%;
  250. }
  251. .select2-dropdown--below:has(span):has(input[aria-controls*="_addressD"]),
  252. .select2-dropdown--below:has(span):has(input[aria-controls*="pickUpAddressD"]),
  253. .select2-dropdown--below:has(span):has(input[aria-controls*="destinationAddressD"]) {
  254. top: -24px;
  255. }
  256. .checkbox.btn {
  257. padding: 0;
  258. margin: 0;
  259. }
  260. .checkbox label, .radio label {
  261. margin-right: 10px;
  262. }
  263. .modal-backdrop {
  264. z-index: -100 !important;
  265. }
  266. .form .form-group > label,
  267. .form-inline .form-group > label {
  268. position: absolute;
  269. top: 2px !important;
  270. left: 0;
  271. }
  272. .info-box {
  273. margin-top: 0 !important;
  274. }
  275. .style-default-bright {
  276. position: static !important;
  277. height: 100%;
  278. }
  279. table.sonata-ba-list {
  280. font-size: 12px !important;
  281. }
  282. .dashViewMap .content {
  283. min-height: unset !important;
  284. padding: 0 !important;
  285. }
  286. .dashViewMap .form-dashboard {
  287. margin-top: -50px;
  288. }
  289. .form-dashboard {
  290. margin-top: 25px;
  291. }
  292. td.sonata-ba-list-field {
  293. text-align: center !important;
  294. }
  295. td {
  296. text-align: center;
  297. }
  298. .left {
  299. text-align: left;
  300. }
  301. th {
  302. text-align: center !important;
  303. }
  304. .btn-icon-toggle i.fa {
  305. padding: 5px;
  306. padding-left: 6px;
  307. padding-right: 6px;
  308. }
  309. .modal-body {
  310. height: fit-content !important;
  311. overflow: auto !important;
  312. }
  313. .modal-body .style-default-bright {
  314. padding-top: 0 !important;
  315. }
  316. .box-header {
  317. background-color: #0aa89e;
  318. border-color: #0aa89e;
  319. color: #ffffff;
  320. }
  321. .p10 {
  322. padding: 0 0 0 10px
  323. }
  324. .btn {
  325. margin-bottom: 1px;
  326. font-size: 12px;
  327. padding: 5px 10px
  328. }
  329. .btn-ctlf {
  330. color: #000;
  331. color: #313534;
  332. background-color: #0aa89e;
  333. border-color: #0aa89e;
  334. }
  335. .popover-title {
  336. display: none;
  337. }
  338. .col-icon {
  339. padding-top: 21px !important;
  340. }
  341. .form-control {
  342. height: 25px !important;
  343. }
  344. .pagination-top .results-text {
  345. min-height: 28px !important;
  346. }
  347. .pagination-top .pagination>li>a,
  348. .pagination-top .pagination>li>span {
  349. padding: 3px 8px;
  350. }
  351. @media (min-width: 992px) {
  352. .col-ruby {
  353. display: ruby;
  354. }
  355. }
  356. @media (max-width: 768px) {
  357. .col-ruby {
  358. display: block;
  359. }
  360. .headerbar {
  361. position: unset;
  362. min-height: unset;
  363. padding: 0;
  364. }
  365. .headerbar-left {
  366. z-index: 1011;
  367. left: 0;
  368. right: 0;
  369. height: 35px;
  370. background: #ffffff;
  371. border-bottom: 1px solid #e5e6e6;
  372. }
  373. .headerbar-right {
  374. position: unset;
  375. left: 0;
  376. right: 0;
  377. min-height: 64px;
  378. top: 30px;
  379. float: left;
  380. background: #ffffff;
  381. -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
  382. box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.33);
  383. }
  384. .header-nav {
  385. margin: 0;
  386. }
  387. .header-nav .header-nav-brand .brand-holder {
  388. padding-top: 4px;
  389. }
  390. .headerbar-right .header-nav-profile {
  391. position: absolute;
  392. float: left;
  393. top: 2px;
  394. right: 0;
  395. }
  396. .headerbar-right .header-nav-toggle {
  397. position: absolute;
  398. z-index: 1012;
  399. top: 0px;
  400. left: 85px;
  401. }
  402. .headerbar-right .header-nav-options {
  403. margin-right: 0;
  404. float: right;
  405. }
  406. .header-nav-profile .dropdown img {
  407. width: 30px;
  408. height: 30px;
  409. border-radius: 35px;
  410. opacity: 1;
  411. }
  412. #header {
  413. position: relative;
  414. height: auto;
  415. }
  416. .style-default-bright {
  417. padding-top: 0 !important;
  418. }
  419. body.fixed .content-header nav.navbar.stuck {
  420. margin: 0;
  421. position: fixed;
  422. float: left;
  423. left: 0;
  424. top: 0;
  425. }
  426. div .sonata-actions {
  427. float: unset;
  428. }
  429. .navbar-nav>li>a {
  430. padding-bottom: 2px;
  431. padding-top: 2px;
  432. }
  433. .navbar-brand {
  434. height: 30px;
  435. padding: 5px 15px;
  436. }
  437. .top-pagination {
  438. display: flex;
  439. justify-content: center;
  440. width: 100%;
  441. }
  442. .list_right_actions {
  443. float: unset !important;
  444. display: flex;
  445. justify-content: center;
  446. }
  447. #admin_admin_driver_create .col-md-offset-4,
  448. #admin_admin_car_create .col-md-offset-4 {
  449. margin-left: 0;
  450. }
  451. .booking-half-panel {
  452. width: auto !important;
  453. }
  454. .col-flex, .sonata-date {
  455. display: flex !important;
  456. }
  457. .multiple-buttons {
  458. display: ruby !important;
  459. }
  460. .input-group {
  461. display: flex !important;
  462. width: 100%;
  463. }
  464. #primary_nav_wrap ul ul {
  465. z-index: 1063;
  466. }
  467. .offcanvas {
  468. position: absolute;
  469. top: 0;
  470. bottom: 0;
  471. right: 0;
  472. z-index: 1063;
  473. }
  474. .offcanvas-head {
  475. position: relative;
  476. margin: 0 19px 5px 6px;
  477. border-top: 1px solid #ccc;
  478. padding-top: 10px;
  479. }
  480. .offcanvas-pane.active {
  481. transform: translate(-282px, 100px) !important;
  482. }
  483. .offcanvas-head .navbar-search.expanded {
  484. margin-top: -5px !important;
  485. width: 100% !important;
  486. }
  487. }
  488. .form-inline .radio, .form-inline .checkbox, .form-inline .btn {
  489. margin-top: 0 !important;
  490. }
  491. </style>
  492. {% endblock %}
  493. {% block javascripts %}
  494. {{ parent() }}
  495. <script src="https://cdn.jsdelivr.net/npm/sweetalert2@8"></script>
  496. <!-- <script src="{{ asset('bundles/admin/js/libs/jquery/jquery-1.11.2.js') }}"></script> -->
  497. <!-- <script src="https://malsup.github.io/jquery.form.js"></script> -->
  498. <!-- <script src="{{ asset('bundles/admin/js/libs/jquery-ui/jquery-ui.min.js') }}"></script> -->
  499. <script src="{{ asset('thirdparty/jquery-ui/jquery-ui.min.js') }}"></script>
  500. <!-- <script src="{{ asset('bundles/admin/js/libs/jquery/jquery-migrate-1.2.1.min.js') }}"></script> -->
  501. <!-- <script src="{{ asset('bundles/admin/js/libs/bootstrap/bootstrap.js') }}"></script> -->
  502. <script src="{{ asset('bundles/admin/js/libs/jquery.mask.min.js') }}"></script>
  503. <script src="{{ asset('bundles/admin/js/libs/spin.js/spin.js') }}"></script>
  504. <script src="{{ asset('bundles/admin/js/libs/DataTables/jquery.dataTables.js') }}"></script>
  505. <script src="{{ asset('bundles/admin/js/libs/utils.js') }}"></script>
  506. <script src="{{ asset('bundles/admin/js/libs/intlTelInput.min.js') }}"></script>
  507. <script src="{{ asset('bundles/admin/js/libs/AppDesign/App.js') }}"></script>
  508. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppNavigation.js') }}"></script>
  509. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppOffcanvas.js') }}"></script>
  510. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppCard.js') }}"></script>
  511. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppForm.js') }}"></script>
  512. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppNavSearch.js') }}"></script>
  513. <script src="{{ asset('bundles/admin/js/libs/AppDesign/AppVendor.js') }}"></script>
  514. <script src="{{ asset('bundles/admin/js/libs/bootstrap-datepicker/bootstrap-datepicker.js') }}"></script>
  515. <script src="{{ asset('thirdparty/sonatacore/vendor/moment/min/moment-with-locales.min.js') }}"></script>
  516. <!-- <script src="{{ asset('bundles/admin/js/libs/select2/select2.js') }}"></script> -->
  517. <script src="{{ asset('bundles/admin/js/libs/clockpicker-gh-pages/dist/bootstrap-clockpicker.js') }}"></script>
  518. <script src="{{ asset('thirdparty/sonatacore/vendor/eonasdan-bootstrap-datetimepicker/build/js/bootstrap-datetimepicker.min.js') }}"></script>
  519. <script src="{{ asset('bundles/admin/js/layout.js') }}"></script>
  520. <script>
  521. function s2Init($parent) {
  522. s2Detect($parent);
  523. $parent.find('.modal').on('shown.bs.modal', function (e) {
  524. let m = $(e.target);
  525. s2Detect(m);
  526. if (m.s2Ids.length > 0) {
  527. s2Clean($parent);
  528. }
  529. });
  530. $parent.find('.modal').on('hidden.bs.modal', function (e) {
  531. let m = $(e.target);
  532. s2Detect(m);
  533. if (m.s2Ids.length > 0) {
  534. s2Clean($parent);
  535. }
  536. });
  537. }
  538. function s2Detect($parent) {
  539. $parent.s2Ids = [];
  540. $parent.find('.select2').each(function(x) {
  541. let sid = $(this).data('select2-id');
  542. if ($.inArray(sid, $parent.s2Ids) === -1) {
  543. $parent.s2Ids.push(sid);
  544. }
  545. });
  546. }
  547. function s2Clean($parent) {
  548. $parent.find('>*:not(.modal.in)').find('.select2').each(function(x) {
  549. let s2 = $(this);
  550. let sid = s2.data('select2-id');
  551. if ($.inArray(sid, $parent.s2Ids) === -1) {
  552. s2.remove();
  553. }
  554. });
  555. }
  556. $(document).ready(function () {
  557. s2Init($('body'));
  558. });
  559. function trackInputChange(inputElement) {
  560. const propertyName = 'value';
  561. const {get: originalGetter, set: originalSetter} =
  562. findPropertyDescriptor(inputElement, propertyName);
  563. const newPropertyDescriptor = ((_originalGetter, _originalSetter) => {
  564. return {
  565. set: function(value) {
  566. const currentValue = originalGetter.call(inputElement);
  567. _originalSetter.call(inputElement, value);
  568. if (currentValue !== value) {
  569. inputElement.dispatchEvent(new Event('change'));
  570. }
  571. },
  572. get: function() {
  573. return _originalGetter.call(inputElement);
  574. }
  575. }
  576. })(originalGetter, originalSetter);
  577. Object.defineProperty(inputElement, propertyName, newPropertyDescriptor);
  578. };
  579. function findPropertyDescriptor(object, propertyName) {
  580. if (object === null) {
  581. return null;
  582. }
  583. if (object.hasOwnProperty(propertyName)) {
  584. return Object.getOwnPropertyDescriptor(object, propertyName);
  585. } else {
  586. const parentClass = Object.getPrototypeOf(object);
  587. return findPropertyDescriptor(parentClass, propertyName);
  588. }
  589. }
  590. </script>
  591. {% endblock %}
  592. {% block body_attributes %}
  593. {{ parent() }}
  594. id="{{ app.request.attributes.get('_route') }}"
  595. {% endblock %}
  596. {% block sonata_header %}
  597. <div id="modal"></div>
  598. {% block layout_header %}
  599. <header id="header">
  600. <div class="headerbar">
  601. {% if app.request.attributes.get('_route') =='admin_homepage' or app.request.attributes.get('_route') =='sonata_admin_dashboard' %}
  602. <ul class="header-nav header-nav-toggle">
  603. <li id="offf"> <a class="btn btn-icon-toggle btn-default active" href="#" data-backdrop="false"> <i class="fa fa-ellipsis-v"></i> </a> </li>
  604. </ul>
  605. {% endif %}
  606. <div class="headerbar-left">
  607. <ul class="header-nav header-nav-options">
  608. <li class="header-nav-brand">
  609. <div class="brand-holder">
  610. <a href="{{ path('admin_homepage') }}">
  611. <span class="text-lg text-bold text-primary">
  612. <img src="{{ asset(settings_service.logoSiteMedium) }}" width="46" height="27">
  613. </span>
  614. </a>
  615. </div>
  616. </li>
  617. </ul>
  618. </div>
  619. <div class="headerbar-right">
  620. <div class="headerbar-menu">
  621. <ul class="header-nav header-nav-options">
  622. <nav id="primary_nav_wrap">
  623. <ul>
  624. <li>
  625. <a href="{{ path('sonata_admin_dashboard') }}">Main location <span class="text-info map-location-center">{{ settings_service.getMainMapLocation }}</span></a>
  626. </li>
  627. <li>
  628. <a href="{{ path('sonata_admin_dashboard') }}">Dashboard</a>
  629. </li>
  630. <li>
  631. <a href="{{ path('admin_admin_booking_list') }}">Bookings</a>
  632. <ul>
  633. <li>
  634. <a href="{{ path('admin_admin_booking_create') }}">
  635. Add Booking
  636. </a>
  637. </li>
  638. <li>
  639. <a href="{{ path('admin_admin_payment_list') }}">
  640. Payments
  641. </a>
  642. </li>
  643. <li>
  644. <a href="{{ path('admin.booking_plan') }}">
  645. Jobs plan
  646. </a>
  647. </li>
  648. <li>
  649. <a href="{{ path('admin_admin_bookingrequest_list') }}">
  650. Bookings ASAP
  651. </a>
  652. </li>
  653. <li>
  654. <a href="{{ path('admin_admin_bookingreview_list') }}">
  655. Reviews
  656. </a>
  657. </li>
  658. <li>
  659. <a href="{{ path('admin_admin_ticket_list') }}">
  660. Tickets
  661. </a>
  662. </li>
  663. {% if is_granted('ROLE_OPERATOR') %}
  664. <li>
  665. <a href="{{ path('bookings_processed_list') }}">
  666. Processed Bookings
  667. </a>
  668. </li>
  669. {% endif %}
  670. </ul>
  671. </li>
  672. <li>
  673. <a href="{{ path('admin_admin_driver_list') }}">Drivers</a>
  674. <ul>
  675. {% if is_granted('ROLE_COMPANY') or is_granted('ROLE_OPERATOR_ADMIN') %}
  676. <li>
  677. <a href="{{ path('admin_admin_driverinvoices_list') }}">
  678. Invoices
  679. </a>
  680. </li>
  681. <li>
  682. <a href="{{ path('admin_driver_queues_list') }}">
  683. Queues
  684. </a>
  685. </li>
  686. <li>
  687. <a href="{{ path('admin_admin_questionnaire_list') }}">
  688. Questionnaires
  689. </a>
  690. </li>
  691. <li>
  692. <a href="{{ path('admin_admin_driver_create') }}">
  693. Add Driver
  694. </a>
  695. </li>
  696. {% endif %}
  697. </ul>
  698. </li>
  699. <li>
  700. <a href="{{ path('admin_admin_car_list') }}">Vehicles</a>
  701. <ul>
  702. <li>
  703. <a href="{{ path('admin_admin_cartype_list') }}">
  704. Vehicles Types
  705. </a>
  706. </li>
  707. {% if is_granted('ROLE_COMPANY') or is_granted('ROLE_OPERATOR_ADMIN') %}
  708. <li>
  709. <a href="{{ path('admin_admin_car_create') }}">
  710. Add Vehicle
  711. </a>
  712. </li>
  713. {% endif %}
  714. {% if is_granted('ROLE_COMPANY') %}
  715. <li>
  716. <a href="{{ path('admin_admin_cartypeprice_list') }}">
  717. Vehicle Variable Pricing
  718. </a>
  719. </li>
  720. <li>
  721. <a href="{{ path('admin_admin_cartypeareaprice_list') }}">
  722. Vehicle Zone/Plot Pricing
  723. </a>
  724. </li>
  725. <li>
  726. <a href="{{ path('admin_admin_pricethreshold_list') }}">
  727. Distance Thresholds
  728. </a>
  729. </li>
  730. {% endif %}
  731. </ul>
  732. </li>
  733. <li><a href="#">Users</a>
  734. <ul>
  735. {% if is_granted('ROLE_COMPANY') %}
  736. <li>
  737. <a href="{{ path('admin_admin_operator_list') }}">
  738. Operators
  739. </a>
  740. </li>
  741. <li>
  742. <a href="{{ path('admin_admin_operator_admin_list') }}">
  743. Operator Admins
  744. </a>
  745. </li>
  746. {% endif %}
  747. <li>
  748. <a href="{{ path('admin_admin_company_list') }}">
  749. Companies
  750. </a>
  751. </li>
  752. <li>
  753. <a href="{{ path('admin_admin_account_list') }}">
  754. Accounts
  755. </a>
  756. </li>
  757. <li>
  758. <a href="{{ path('admin_admin_groupaccounts_list') }}">
  759. Account Groups
  760. </a>
  761. </li>
  762. <li>
  763. <a href="{{ path('admin_admin_companyinvoice_list') }}">
  764. Company Invoices
  765. </a>
  766. </li>
  767. <li>
  768. <a href="{{ path('admin_admin_clientinvoices_list') }}">
  769. Client Invoices
  770. </a>
  771. </li>
  772. <li>
  773. <a href="{{ path('admin_admin_clientchangerequest_list') }}">
  774. Client Change Requests
  775. </a>
  776. </li>
  777. <li>
  778. <a href="{{ path('admin_admin_mobileads_list') }}">
  779. Mobile Ads
  780. </a>
  781. </li>
  782. <li>
  783. <a href="{{ path('admin_admin_news_list') }}">
  784. News
  785. </a>
  786. </li>
  787. </ul>
  788. </li>
  789. <li><a href="#">Settings</a>
  790. <ul>
  791. {% if is_granted('ROLE_COMPANY') or is_granted('ROLE_OPERATOR_ADMIN') %}
  792. <li>
  793. <a href="{{ path('admin_admin_department_list') }}">
  794. Departments
  795. </a>
  796. </li>
  797. <li>
  798. <a href="{{ path('admin_admin_periodsettings_list') }}">
  799. Period Surcharge
  800. </a>
  801. </li>
  802. {% if main_location == 'UK' %}
  803. <li>
  804. <a href="{{ path('admin_paf_pafaddress_list') }}">
  805. Paf Address
  806. </a>
  807. </li>
  808. <li>
  809. <a href="{{ path('admin_paf_buildingname_list') }}">
  810. Paf Building Names
  811. </a>
  812. </li>
  813. <li>
  814. <a href="{{ path('admin_paf_locality_list') }}">
  815. Paf Localities
  816. </a>
  817. </li>
  818. {% endif %}
  819. {% if main_location == 'US' %}
  820. <li>
  821. <a href="{{ path('admin_paf_pafaddressus_list') }}">
  822. Paf Address US
  823. </a>
  824. </li>
  825. {% endif %}
  826. {% endif %}
  827. {% if is_granted('ROLE_COMPANY') %}
  828. <li>
  829. <a href="{{ path('admin_admin_bookingextra_list') }}">
  830. Booking Extras
  831. </a>
  832. </li>
  833. <li>
  834. <a href="{{ path('admin_admin_zone_list') }}">
  835. Fixed Routes
  836. </a>
  837. </li>
  838. <li>
  839. <a href="{{ path('admin_admin_zonecartype_list') }}">
  840. Fixed Prices
  841. </a>
  842. </li>
  843. <li>
  844. <a href="{{ path('admin_area_settings') }}">
  845. Draw Zone/Plot
  846. </a>
  847. </li>
  848. <li>
  849. <a href="{{ path('admin_admin_area_list') }}">
  850. Zone/Plot Charges
  851. </a>
  852. </li>
  853. <!-- <li><a href="{{ path('admin_admin_voucher_list') }}">Promo Codes</a></li>-->
  854. <li>
  855. <a href="{{ path('admin_admin_invoiceadjustmentreasons_list') }}">
  856. Invoice Adjustment Reasons
  857. </a>
  858. </li>
  859. <li>
  860. <a href="{{ path('admin_admin_bookingcancelreason_list') }}">
  861. Booking Cancel Reasons
  862. </a>
  863. </li>
  864. <li>
  865. <a href="{{ path('admin_admin_settings_list') }}">
  866. General Settings
  867. </a>
  868. </li>
  869. <li>
  870. <a href="{{ path('admin_admin_tours_list') }}">
  871. Tours
  872. </a>
  873. </li>
  874. <li>
  875. <a href="{{ path('admin_admin_objectives_list') }}">
  876. Objectives
  877. </a>
  878. </li>
  879. <li>
  880. <a href="{{ path('admin_admin_changerequests_list') }}">
  881. Change Requests
  882. </a>
  883. </li>
  884. {% endif %}
  885. <li>
  886. <a href="{{ path('admin_admin_voucher_list') }}">
  887. Promo Codes
  888. </a>
  889. </li>
  890. <li>
  891. <a href="{{ path('admin_driver_history_reason_list') }}">
  892. Driver Actions List
  893. </a>
  894. </li>
  895. <li>
  896. <a href="{{ path('admin_admin_clientcancellationfee_list') }}">
  897. Client Cancellation Fee
  898. </a>
  899. </li>
  900. {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_OPERATOR_ADMIN') %}
  901. <li>
  902. <a href="{{ path('admin_admin_email_template_list') }}">
  903. Test Email
  904. </a>
  905. </li>
  906. <li>
  907. <a href="{{ path('admin_admin_socket_events_list') }}">
  908. Socket Events
  909. </a>
  910. </li>
  911. {% endif %}
  912. </ul>
  913. </li>
  914. {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_OPERATOR_ADMIN') %}
  915. <li>
  916. <a href="#">Reports</a>
  917. <ul>
  918. {% if is_granted('ROLE_ADMIN') or is_granted('ROLE_OPERATOR_ADMIN') %}
  919. <li>
  920. <a href="{{ path('reports_list') }}">
  921. Bookings Report
  922. </a>
  923. </li>
  924. <li>
  925. <a href="{{ path('admin_reports_driver_work') }}">
  926. Driver Work Report
  927. </a>
  928. </li>
  929. <li>
  930. <a href="{{ path('completed_jobs_report_list') }}">
  931. Drivers Completed Jobs
  932. </a>
  933. </li>
  934. <li>
  935. <a href="{{ path('reports-stats_list') }}">
  936. Booking Statistics
  937. </a>
  938. </li>
  939. <li>
  940. <a href="{{ path('bookings_processed_list') }}">
  941. Processed Bookings
  942. </a>
  943. </li>
  944. {% endif %}
  945. {% if is_granted('ROLE_ADMIN') %}
  946. <li>
  947. <a href="{{ path('reports-refund_list') }}">
  948. Booking Refund
  949. </a>
  950. </li>
  951. <li>
  952. <a href="{{ path('reports-confirmed_list') }}">
  953. Booking Confirmed
  954. </a>
  955. </li>
  956. {% endif %}
  957. </ul>
  958. </li>
  959. {% endif %}
  960. </ul>
  961. </nav>
  962. </ul>
  963. </div>
  964. <ul class="header-nav header-nav-profile" style="z-index:2;">
  965. <li class="dropdown">
  966. <a href="javascript:void(0);" class="dropdown-toggle ink-reaction" data-toggle="dropdown">
  967. <img src="{{ asset('bundles/admin/img/avatar-logo.png') }}" width="140" height="140">
  968. <span class="profile-info">
  969. {{ app.user.email }}
  970. <small>
  971. {% if is_granted('ROLE_ADMIN') %}
  972. Administrator
  973. {% elseif is_granted('ROLE_COMPANY') %}
  974. Company
  975. {% elseif is_granted('ROLE_OPERATOR_ADMIN') %}
  976. Operator Administrator
  977. {% elseif is_granted('ROLE_OPERATOR') %}
  978. Operator
  979. {% elseif is_granted('ROLE_DRIVER') %}
  980. Driver
  981. {% elseif is_granted('ROLE_CLIENT') %}
  982. Client
  983. {% else %}
  984. Anonymous
  985. {% endif %}
  986. </small>
  987. </span>
  988. </a>
  989. <ul class="dropdown-menu animation-dock">
  990. {% if is_granted('ROLE_ADMIN') %}
  991. <li>
  992. <a href="{{ path('admin_admin_profile') }}">
  993. Profile
  994. </a>
  995. </li>
  996. {% elseif is_granted('ROLE_COMPANY') %}
  997. <li>
  998. <a href="{{ path('admin_company_profile') }}">
  999. Profile
  1000. </a>
  1001. </li>
  1002. {% else %}
  1003. <li>
  1004. <a href="#PROFILE" style="pointer-events: none;cursor: default;color: #969c9c">
  1005. Profile
  1006. </a>
  1007. </li>
  1008. {% endif %}
  1009. {#
  1010. <li class="dropdown-header">Config</li>
  1011. <li>
  1012. <a href="#MESSAGES" style="pointer-events: none;cursor: default;color: #969c9c">
  1013. Messages
  1014. <span class="badge style-danger pull-right">20</span>
  1015. </a>
  1016. </li>
  1017. <li>
  1018. <a href="#LOGS" style="pointer-events: none;cursor: default;color: #969c9c">
  1019. Logs
  1020. </a>
  1021. </li>
  1022. #}
  1023. <li class="divider"></li>
  1024. <li>
  1025. <a href="{{ path('sonata_user_admin_security_logout') }}">
  1026. <i class="fa fa-fw fa-power-off text-danger"></i>
  1027. Logout
  1028. </a>
  1029. </li>
  1030. {% if is_granted('IS_IMPERSONATOR') %}
  1031. <li class="divider"></li>
  1032. <li>
  1033. <a href="{{ path('driver_homepage', {'_switch_user': '_exit'}) }}">
  1034. Exit impersonation
  1035. </a>
  1036. </li>
  1037. {% endif %}
  1038. </ul>
  1039. </li>
  1040. </ul>
  1041. {% block menu_right %}
  1042. {% endblock %}
  1043. </div>
  1044. </div>
  1045. </header>
  1046. {% endblock %}
  1047. {% endblock %}
  1048. {% block sonata_left_side %}
  1049. {% endblock %}
  1050. {% block sonata_admin_content %}
  1051. {% block notice %}
  1052. {% include '@SonataTwig/FlashMessage/render.html.twig' %}
  1053. {% endblock notice %}
  1054. {% if _preview is not empty %}
  1055. <div class="sonata-ba-preview">{{ _preview|raw }}</div>
  1056. {% endif %}
  1057. {% if _content is not empty %}
  1058. <div class="sonata-ba-content">{{ _content|raw }}</div>
  1059. {% endif %}
  1060. {% if _show is not empty %}
  1061. <div class="sonata-ba-show">{{ _show|raw }}</div>
  1062. {% endif %}
  1063. {% if _form is not empty %}
  1064. <div class="sonata-ba-form">{{ _form|raw }}</div>
  1065. {% endif %}
  1066. {% if _list_filters is not empty %}
  1067. <div class="row">
  1068. {{ _list_filters|raw }}
  1069. </div>
  1070. {% endif %}
  1071. {% if _list_table is not empty %}
  1072. <div class="row">
  1073. {{ _list_table|raw }}
  1074. </div>
  1075. {% endif %}
  1076. </section>
  1077. {% endblock %}
  1078. {% block simple_page %}
  1079. <div class="content-wrapper">
  1080. <section class="content">
  1081. <section class="style-default-bright" style="height: 100%; padding-top:24px">
  1082. {% block simple_page_content %}{% endblock %}
  1083. </section>
  1084. </section>
  1085. </div>
  1086. {% endblock %}
  1087. {% block sonata_wrapper %}
  1088. <section class="style-default-bright" style="height: 100%;">
  1089. {% block sonata_page_content %}
  1090. {{ parent() }}
  1091. {% endblock %}
  1092. </section>
  1093. {% endblock %}
  1094. {% block sonata_page_content_header %}
  1095. {% block sonata_page_content_nav %}
  1096. {% if _navbar_title is not empty
  1097. or _tab_menu is not empty
  1098. or _actions is not empty
  1099. or _list_filters_actions is not empty
  1100. %}
  1101. <nav class="navbar navbar-default" role="navigation">
  1102. <div class="container-fluid">
  1103. {% block tab_menu_navbar_header %}
  1104. {% if _navbar_title is not empty %}
  1105. <div class="navbar-header">
  1106. <a class="navbar-brand" href="#">{{ _navbar_title|raw }}</a>
  1107. </div>
  1108. {% endif %}
  1109. {% endblock %}
  1110. <div class="navbar-collapse">
  1111. {% if _tab_menu is not empty %}
  1112. <div class="navbar-left">
  1113. {{ _tab_menu|raw }}
  1114. </div>
  1115. {% endif %}
  1116. {% if admin is defined and action is defined and action == 'list' and admin.listModes|length > 1 %}
  1117. <div class="nav navbar-right btn-group">
  1118. {% for mode, settings in admin.listModes %}
  1119. <a href="{{ admin.generateUrl('list', app.request.query.all|merge({_list_mode: mode})) }}" class="btn btn-default navbar-btn btn-sm{% if admin.getListMode() == mode %} active{% endif %}">
  1120. {# NEXT_MAJOR: Remove the if and keep the else part #}
  1121. {% if settings.icon is not defined and settings.class is defined %}
  1122. {% deprecated 'Relying on the "class" setting is deprecated since sonata-project/admin-bundle 4.9, use the "icon" setting instead' %}
  1123. <i class="{{ settings.class }}" aria-hidden="true"></i>
  1124. {% else %}
  1125. {{ settings.icon|default('')|parse_icon }}
  1126. {% endif %}
  1127. </a>
  1128. {% endfor %}
  1129. </div>
  1130. {% endif %}
  1131. {% block sonata_admin_content_actions_wrappers %}
  1132. {% if not admin.hideActions %}
  1133. {% if _actions|replace({ '<li>': '', '</li>': '' })|trim is not empty %}
  1134. <ul class="nav navbar-nav navbar-right">
  1135. {% if _actions|split('</a>')|length > 2 %}
  1136. <li class="dropdown sonata-actions">
  1137. <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ 'link_actions'|trans({}, 'SonataAdminBundle') }} <b class="caret"></b></a>
  1138. <ul class="dropdown-menu" role="menu">
  1139. {{ _actions|raw }}
  1140. </ul>
  1141. </li>
  1142. {% else %}
  1143. {{ _actions|raw }}
  1144. {% endif %}
  1145. </ul>
  1146. {% endif %}
  1147. {% endif %}
  1148. {% endblock sonata_admin_content_actions_wrappers %}
  1149. {% if _list_filters_actions is not empty %}
  1150. {{ _list_filters_actions|raw }}
  1151. {% endif %}
  1152. </div>
  1153. {% block sonata_page_content_header_pagination %}
  1154. {% endblock sonata_page_content_header_pagination %}
  1155. {% if admin.hasTemplate('top_pagination') %}
  1156. {% include 'top_pagination.html.twig' %}
  1157. {% endif %}
  1158. </div>
  1159. </nav>
  1160. {% endif %}
  1161. {% endblock sonata_page_content_nav %}
  1162. {% endblock sonata_page_content_header %}