admin-functions.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. ;(function($, window, document, undefined) {
  2. var $win = $(window);
  3. var $doc = $(document);
  4. $doc.ready(function() {
  5. $(document).on("booked-on-new-app", function(event) {
  6. $field_container = $('.field.field-paid-service');
  7. booked_wc_products_field();
  8. });
  9. booked_wc_add_new_options();
  10. booked_wc_reorder_custom_field_values();
  11. $('body').on('click','button.mark-paid',function(){
  12. var thisAppt = $(this).data('appt-id'),
  13. apptBlock = $(this).parents('.appt-block');
  14. if (thisAppt){
  15. var confirm_mark_paid = confirm(booked_wc_variables.i18n_mark_paid);
  16. if (confirm_mark_paid){
  17. var data = {
  18. 'action': 'booked_wc_mark_paid',
  19. 'appt_id': parseInt(thisAppt)
  20. };
  21. $.post(
  22. booked_wc_variables.ajaxurl,
  23. data,
  24. function(response) {
  25. if (response != 'no_order'){
  26. apptBlock.find('.booked-wc_status-text').removeClass('awaiting').addClass('paid');
  27. apptBlock.find('.booked-wc_status-text').html('<a target="_blank" href="' + response + '"><i class="booked-icon booked-icon-pencil"></i>&nbsp;&nbsp;' + booked_wc_variables.i18n_paid + '</a>');
  28. }
  29. }
  30. );
  31. } else {
  32. return false;
  33. }
  34. }
  35. return false;
  36. });
  37. });
  38. $win.on('load', function() {
  39. init_booked_cf_payment_sortables();
  40. $('.booked-cf-block').on('click','.cfButton',function(e){
  41. init_booked_cf_payment_sortables();
  42. });
  43. });
  44. function update_CF_Data(CF_SortablesForm){
  45. var sortableContent = JSON.stringify(CF_SortablesForm.serializeArray());
  46. $('#booked_custom_fields').val(sortableContent);
  47. }
  48. function init_booked_cf_payment_sortables(){
  49. if (typeof jQuery.ui.sortable == 'function') {
  50. var CF_SortablesForm = $('#booked-cf-sortables-form');
  51. $('#booked-cf-paid-service').sortable({
  52. handle: ".sub-handle",
  53. stop: function(){
  54. update_CF_Data(CF_SortablesForm);
  55. }
  56. });
  57. }
  58. }
  59. function booked_wc_products_field() {
  60. var $dropdown = $('select', $field_container);
  61. $dropdown.on('change', function() {
  62. var $this = $(this),
  63. product_id = $this.val(),
  64. field_name = $this.attr('name'),
  65. $variations_container = $this.parent().find('.paid-variations');
  66. booked_wc_load_variations(product_id, field_name, $variations_container);
  67. });
  68. }
  69. function booked_wc_load_variations( product_id, field_name, variations_container ) {
  70. if ( !product_id ) {
  71. variations_container.html('');
  72. return;
  73. };
  74. var data = {
  75. 'action': 'booked_wc_load_variations',
  76. 'product_id': parseInt(product_id),
  77. 'field_name': field_name
  78. };
  79. $.post(
  80. booked_wc_variables.ajaxurl,
  81. data,
  82. function(response) {
  83. variations_container.html(response);
  84. }
  85. );
  86. }
  87. function booked_wc_add_new_options() {
  88. // Custom Fields
  89. var CF_SortablesTemplatesContainer = $('#booked-cf-sortable-templates'),
  90. separator = '---';
  91. $doc.on("booked-on-cbutton-click", function(event, params) {
  92. var $this = params.button_object,
  93. $this_parent = $this.parents('li'),
  94. button_type = params.button_type,
  95. unique_number = params.random_number; // $this_parent.length ? $this_parent.find('input[type=text]:first').attr('name').split(separator)[1] : '';
  96. if ( button_type === 'single-paid-service' ) {
  97. var $options_list = $this.parent().find('#booked-cf-paid-service');
  98. $( '> li', $options_list).each(function() {
  99. var $this_li = $(this),
  100. $option_field = $this_li.find('select'),
  101. this_name = $option_field.attr('name');
  102. if ( !booked_wc_strpos(this_name, separator) ) {
  103. var field_name = this_name + separator + unique_number;
  104. $option_field.attr('name', field_name);
  105. };
  106. });
  107. booked_wc_update_data();
  108. };
  109. });
  110. $doc.on('change', '#bookedCFTemplate-single-paid-service select', function() {
  111. booked_wc_update_data();
  112. });
  113. }
  114. function booked_wc_strpos(haystack, needle, offset) {
  115. var i = (haystack+'').indexOf(needle, (offset || 0));
  116. return i === -1 ? false : i;
  117. }
  118. function booked_wc_update_data(CF_SortablesForm){
  119. var sortables_form = $('#booked-cf-sortables-form'),
  120. sortableContent = JSON.stringify(sortables_form.serializeArray());
  121. $('#booked_custom_fields').val(sortableContent);
  122. }
  123. function booked_wc_reorder_custom_field_values() {
  124. var $order_items = $('#order_line_items > .item');
  125. if ( !$order_items.length ) {
  126. return;
  127. };
  128. $order_items.each(function() {
  129. var $this = $(this),
  130. $metas = $('div.view > table > tbody > tr', $this);
  131. $metas.each(function() {
  132. var $this = $(this),
  133. $label = $this.find('th'),
  134. $value = $this.find('td');
  135. if ( $label.text()==='Form Field:' ) {
  136. $label.text( $value.text().replace(/:.+/, ':') );
  137. $value.text( $value.text().replace(/^[^:]+:/, '') );
  138. };
  139. });
  140. });
  141. }
  142. })(jQuery, window, document);