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