payment-links-view.blade.php 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338
  1. @extends('layouts.app')
  2. @section('css')
  3. @endsection
  4. @php
  5. $resto = \App\Models\Restaurants::find(\App\Helpers\CommonMethods::getRestuarantID());
  6. $lang = $resto->default_lang;
  7. app()->setLocale($lang);
  8. if(session('app_lang') !==null){
  9. $lang = session('app_lang');
  10. app()->setLocale($lang);
  11. }
  12. $restuarant1 =$resto;
  13. $resto_meta = isset($restuarant1->resto_metas)?$restuarant1->resto_metas:null;
  14. //dump($resto_meta);
  15. $resto_metas = [];
  16. $billing = [];
  17. if(isset($resto_meta)){
  18. foreach($resto_meta as $meta){
  19. if($meta->outlet_id!=""){
  20. continue;
  21. }
  22. $index_name = isset($meta->resto_meta_defs->parents)?$meta->resto_meta_defs->parents->meta_def_name:$meta->resto_meta_defs->meta_def_name;
  23. // dump($meta->resto_meta_defs);
  24. if($index_name=="BILLING_GATEWAY"){
  25. // dump($meta->resto_meta_defs->meta_def_name);
  26. // $resto_metas['BILLING_GATEWAY'][] = $meta->meta_val;
  27. $billing[] = array('id'=>$meta->meta_id,'value'=>$meta->meta_val);
  28. }
  29. $resto_metas[$index_name] = $meta->meta_val;
  30. }
  31. }
  32. $resto_metas['BILLING_GATEWAY'] = $billing;
  33. $currency = isset($resto_metas['BUSSINESS_CCY'])?$resto_metas['BUSSINESS_CCY']:"IQD";
  34. @endphp
  35. @section('content')
  36. <link href="{!! env('APP_ASSETS') !!}vendor_components/bootstrap-datepicker/dist/css/bootstrap-datepicker.min.css" rel="stylesheet"/>
  37. <link href="{!! env('APP_ASSETS') !!}vendor_components/bootstrap-datepicker/dist/css/bootstrap-datepicker3.min.css" rel="stylesheet"/>
  38. <link href="{!! env('APP_ASSETS') !!}/css/jquery.timepicker.min.css" rel="stylesheet"/>
  39. <link href="{!! env('APP_ASSETS') !!}vendor_components/select2/dist/css/select2.min.css" rel="stylesheet">
  40. <style>
  41. .datepicker-days{
  42. display: block !important;
  43. }
  44. .alert {
  45. display: none;
  46. }
  47. .border-red {
  48. border: 1px solid #F00 !important;
  49. }
  50. .tab-pane{}
  51. .container-full,.content-wrapper{
  52. background-color: transparent !important;
  53. }
  54. #image-preview {
  55. width: 700px;
  56. border-radius: 20px;
  57. height: 341px;
  58. position: relative;
  59. overflow: hidden;
  60. background-color: #f9f9f9;
  61. color: #ecf0f1;
  62. background-position: center !important;
  63. background-size: cover !important;
  64. }
  65. #image-preview input {
  66. line-height: 200px;
  67. font-size: 200px;
  68. position: absolute;
  69. opacity: 0;
  70. z-index: 10;
  71. }
  72. #image-preview label {
  73. position: absolute;
  74. z-index: 5;
  75. opacity: 0.8;
  76. cursor: pointer;
  77. background-color: #bdc3c7;
  78. width: 200px;
  79. height: 50px;
  80. font-size: 20px;
  81. line-height: 50px;
  82. text-transform: uppercase;
  83. top: 0;
  84. left: 0;
  85. right: 0;
  86. bottom: 0;
  87. margin: auto;
  88. text-align: center;
  89. }
  90. .select2-container .select2-selection--multiple{
  91. min-height: 46px;
  92. }
  93. .form-control, .form-select {
  94. height: 46px !important;
  95. border-color: #E4E6EB !important;
  96. border-radius: 7px !important;
  97. }
  98. .select2-container--default .select2-selection--single{
  99. height: 40px !important;
  100. border-color: #E4E6EB !important;
  101. border-radius: 7px !important;
  102. padding: 9px 12px;
  103. }
  104. .outlet-section,.item-section{
  105. display: none;
  106. }
  107. .outlets.selected .outlet-section, .items.selected .item-section{
  108. display: inline-flex;
  109. }
  110. .select2 {width: 100% !important;}
  111. </style>
  112. <div class="content-wrapper">
  113. <div class="container-full">
  114. <section class="content pt-3">
  115. <div class="row">
  116. <div class="col-xl-8">
  117. <div class="card mb-4">
  118. <div class="card-body">
  119. <div class="row">
  120. <div class="col-sm-12 col-md-9">
  121. <h1>Payment link #{!! $payment_link->unique_id !!}</h1>
  122. <p class="mt-40 mb-1"> {!! \Carbon\Carbon::parse($payment_link->created_at)->format('M d, Y') !!}</p>
  123. <h5 class="fw-bold">{!! $payment_link->amount !!} {!! $currency !!}</h5>
  124. <div class="d-flex">
  125. <div style="width: 90%">
  126. <div class="progress mt-20 ">
  127. <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
  128. </div>
  129. </div>
  130. <div class="m-10 pt-5">
  131. {!! $payment_link->payments_count?$payment_link->payments_count:0 !!} / {!! $payment_link->number_of_uses !!}
  132. </div>
  133. </div>
  134. <p class="text-danger mt-0">{!! $payment_link->number_of_uses - $payment_link->payments_count !!} {{__('label.payment_left')}}</p>
  135. <dl class="row mt-30">
  136. <dt class="col-sm-3">{{__('label.purpose_of_payment')}}</dt>
  137. <dd class="col-sm-9">{!! $payment_link->purpose_payment !!}</dd>
  138. <dt class="col-sm-3">{{__('label.payment_message')}}</dt>
  139. <dd class="col-sm-9">{!! $payment_link->payment_message !!}</dd>
  140. <dt class="col-sm-3">{{__('label.outlet')}}</dt>
  141. <dd class="col-sm-9">{!! isset($payment_link->outlets)?$payment_link->outlets->name:"" !!}</dd>
  142. <dt class="col-sm-3">{{__('label.created_at')}}</dt>
  143. <dd class="col-sm-9">{!! \Carbon\Carbon::parse($payment_link->created_at)->format('d, M Y') !!}</dd>
  144. </dl>
  145. <div class="row mt-20">
  146. <div class="col-sm-12">
  147. <?php $paymentLink = env('QRCODE_PAYMENTLINK')."/".$payment_link->restuarents->resto_unique_name."/paymentLink/".$payment_link->unique_id;
  148. ?>
  149. <h3 class="link"><a href="{!! $paymentLink !!}" target="_blank">{!! $paymentLink !!}</a> </h3>
  150. </div>
  151. </div>
  152. <div class="row mt-10">
  153. <div class="col-m-12">
  154. <button class="btn btn-primary copy-link" data-link="{!! $paymentLink !!}">
  155. <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-back" viewBox="0 0 16 16">
  156. <path d="M0 2a2 2 0 0 1 2-2h8a2 2 0 0 1 2 2v2h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-2H2a2 2 0 0 1-2-2V2zm2-1a1 1 0 0 0-1 1v8a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V2a1 1 0 0 0-1-1H2z"/>
  157. </svg> &nbsp; Copy Link</button>
  158. <button class="btn btn-primary copy-whatsapp-link" data-link="{!! $paymentLink !!}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-whatsapp" viewBox="0 0 16 16">
  159. <path d="M13.601 2.326A7.854 7.854 0 0 0 7.994 0C3.627 0 .068 3.558.064 7.926c0 1.399.366 2.76 1.057 3.965L0 16l4.204-1.102a7.933 7.933 0 0 0 3.79.965h.004c4.368 0 7.926-3.558 7.93-7.93A7.898 7.898 0 0 0 13.6 2.326zM7.994 14.521a6.573 6.573 0 0 1-3.356-.92l-.24-.144-2.494.654.666-2.433-.156-.251a6.56 6.56 0 0 1-1.007-3.505c0-3.626 2.957-6.584 6.591-6.584a6.56 6.56 0 0 1 4.66 1.931 6.557 6.557 0 0 1 1.928 4.66c-.004 3.639-2.961 6.592-6.592 6.592zm3.615-4.934c-.197-.099-1.17-.578-1.353-.646-.182-.065-.315-.099-.445.099-.133.197-.513.646-.627.775-.114.133-.232.148-.43.05-.197-.1-.836-.308-1.592-.985-.59-.525-.985-1.175-1.103-1.372-.114-.198-.011-.304.088-.403.087-.088.197-.232.296-.346.1-.114.133-.198.198-.33.065-.134.034-.248-.015-.347-.05-.099-.445-1.076-.612-1.47-.16-.389-.323-.335-.445-.34-.114-.007-.247-.007-.38-.007a.729.729 0 0 0-.529.247c-.182.198-.691.677-.691 1.654 0 .977.71 1.916.81 2.049.098.133 1.394 2.132 3.383 2.992.47.205.84.326 1.129.418.475.152.904.129 1.246.08.38-.058 1.171-.48 1.338-.943.164-.464.164-.86.114-.943-.049-.084-.182-.133-.38-.232z"/>
  160. </svg> &nbsp; Share Link via whatsapp</button>
  161. <button class="btn btn-primary qrcode-link" data-link="{!! $paymentLink !!}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-qr-code-scan" viewBox="0 0 16 16">
  162. <path d="M0 .5A.5.5 0 0 1 .5 0h3a.5.5 0 0 1 0 1H1v2.5a.5.5 0 0 1-1 0v-3Zm12 0a.5.5 0 0 1 .5-.5h3a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-1 0V1h-2.5a.5.5 0 0 1-.5-.5ZM.5 12a.5.5 0 0 1 .5.5V15h2.5a.5.5 0 0 1 0 1h-3a.5.5 0 0 1-.5-.5v-3a.5.5 0 0 1 .5-.5Zm15 0a.5.5 0 0 1 .5.5v3a.5.5 0 0 1-.5.5h-3a.5.5 0 0 1 0-1H15v-2.5a.5.5 0 0 1 .5-.5ZM4 4h1v1H4V4Z"/>
  163. <path d="M7 2H2v5h5V2ZM3 3h3v3H3V3Zm2 8H4v1h1v-1Z"/>
  164. <path d="M7 9H2v5h5V9Zm-4 1h3v3H3v-3Zm8-6h1v1h-1V4Z"/>
  165. <path d="M9 2h5v5H9V2Zm1 1v3h3V3h-3ZM8 8v2h1v1H8v1h2v-2h1v2h1v-1h2v-1h-3V8H8Zm2 2H9V9h1v1Zm4 2h-1v1h-2v1h3v-2Zm-4 2v-1H8v1h2Z"/>
  166. <path d="M12 9h2V8h-2v1Z"/>
  167. </svg> &nbsp; View via QR Code</button>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </section>
  177. </div>
  178. </div>
  179. <div class="modal center-modal fade" id="qrcode-modal" tabindex="-1">
  180. <div class="modal-dialog modal-lg">
  181. <div class="modal-content">
  182. <div class="modal-body text-center pt-50">
  183. <div id="qrcode"></div>
  184. <div id="download" style="display: none"></div>
  185. </div>
  186. <div class="modal-footer modal-footer-uniform">
  187. <button type="button" class="btn btn-danger" data-bs-dismiss="modal">{{__('label.close')}}</button>
  188. <button type="button" class="btn btn-primary float-end download_qrcode">{{__('label.download_qrcode')}}</button>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. @endsection
  194. @section('js')
  195. <script src="{!! env('APP_ASSETS') !!}js/jquery.qrcode.min.js"></script>
  196. <script type="text/javascript">
  197. $(function(){
  198. $("body").on("click",".copy-link",function(){
  199. var _link = $("h3.link a").text();
  200. $("h3.link a").select();
  201. navigator.clipboard.writeText(_link);
  202. });
  203. $("body").on("click",".copy-whatsapp-link",function(){
  204. var _link = $("h3.link a").text();
  205. window.open("https://api.whatsapp.com/send?text="+(_link),"_blank");
  206. });
  207. $("body").on("click",".qrcode-link",function(){
  208. var _link = $("h3.link a").text();
  209. $('#qrcode').html('');
  210. $('#download').html('');
  211. $('#qrcode').qrcode({
  212. render: "canvas",
  213. text: _link,
  214. width: 350,
  215. height: 350,
  216. background: "#ffffff",
  217. foreground: "#000000",
  218. imgWidth: 50,
  219. imgHeight: 50
  220. });
  221. $('#download').qrcode({
  222. render: "canvas",
  223. text: _link,
  224. width: 2000,
  225. height: 2000,
  226. background: "#ffffff",
  227. foreground: "#000000",
  228. imgWidth: 500,
  229. imgHeight: 500
  230. });
  231. $("#qrcode-modal").modal('show');
  232. });
  233. $(".download_qrcode").click(function () {
  234. var canvas = $('#download canvas')[0];
  235. var _this = $(this);
  236. var _link = $("h3.link a").text();
  237. // Change here
  238. $.ajax({
  239. url: "{!! env('APP_URL') !!}download/qrcode",
  240. type: "POST",
  241. data: {
  242. resto:"payment-link-"+"{!! $payment_link->restuarents->resto_unique_name !!}",
  243. data: canvas.toDataURL(),
  244. '_token': "{!! csrf_token() !!}"
  245. },
  246. success: function (response) {
  247. console.log(response);
  248. var link = document.createElement('a');
  249. link.href = response;
  250. link.download = "payment-link-{!! $payment_link->restuarents->resto_unique_name !!}-qrcode.png";
  251. link.click();
  252. }
  253. });
  254. });
  255. $("body").on("click",".save-payment-link",function(){
  256. if($("#payment-link-form").valid()){
  257. $("#payment-link-form").ajaxForm(function(response){
  258. response = $.parseJSON(response);
  259. if(response.type=="success"){
  260. $.toast({
  261. heading: "{{__('label.payment_saved')}}",
  262. text: response.message,
  263. position: 'top-right',
  264. loaderBg: '#ff6849',
  265. icon: 'success',
  266. hideAfter: 3000,
  267. stack: 1
  268. });
  269. setTimeout(function () {
  270. window.location = "{!! env('APP_URL') !!}payment/links";
  271. },2000);
  272. }else{
  273. $.toast({
  274. heading:"{{__('label.payment_error')}}",
  275. text: response.message,
  276. position: 'top-right',
  277. loaderBg: '#ff6849',
  278. icon: 'error',
  279. hideAfter: 3000,
  280. stack: 1
  281. });
  282. }
  283. }).submit();
  284. }
  285. });
  286. })
  287. </script>
  288. @endsection