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