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