Overview
  • Package
  • Class
  • Tree
  • Deprecated
  • Todo
  • Hook Reference
  • Docs Home

Packages

  • BKAP
    • Addons
    • Admin-Bookings
    • Attribute-Lockout
    • Block-Pricing
    • Booking-Box
    • Booking-Confirmation
    • Booking-Process
    • Cancel-Order
    • Cart
    • Checkout-Process
    • Core
    • Date-Time
    • Emails
    • Functions
    • Global-Function
    • Global-Settings
    • Google-Calendar-Sync
    • ICS
    • Import-Booking
    • Labels
    • License
    • Menus
    • Meta-Boxes
    • Reschedule
    • Resources
    • Search-Widget
    • Special-Price
    • Uninstall
    • Validation
    • Variation-Lockout
    • Vendors
      • Dokan
      • WC-Vendors
    • View-Bookings
  • None

Classes

  • bkap_addon_compatibility_class
  • bkap_admin_bookings
  • bkap_approve_booking
  • bkap_attributes
  • bkap_block_booking
  • BKAP_Booking
  • bkap_booking_box_class
  • bkap_booking_confirmation
  • bkap_booking_process
  • BKAP_Bookings_View
  • bkap_calendar_sync
  • bkap_cancel_order
  • bkap_cart
  • bkap_checkout
  • bkap_common
  • BKAP_Customer_Meta_Box
  • BKAP_Details_Meta_Box
  • bkap_dokan_calendar_class
  • bkap_dokan_class
  • bkap_dokan_orders_class
  • bkap_dokan_products_class
  • bkap_edit_bookings_class
  • BKAP_Email_Booking_Cancelled
  • BKAP_Email_Booking_Confirmed
  • BKAP_Email_Booking_Rescheduled_Admin
  • BKAP_Email_Imported_Event
  • BKAP_Email_Manager
  • BKAP_Email_New_Booking
  • BKAP_Gcal
  • BKAP_Gcal_Event
  • bkap_gcal_sync_settings
  • bkap_global_settings
  • BKAP_Google_Events_View
  • bkap_ics
  • bkap_license
  • bkap_load_scripts_class
  • BKAP_OPC_Addon
  • BKAP_Payment_Gateway
  • BKAP_Product_Resource
  • bkap_rescheduled_order_class
  • BKAP_Resource_Details_Meta_Box
  • BKAP_Save_Meta_Box
  • bkap_special_booking_price
  • bkap_timeslot_price
  • bkap_validation
  • bkap_variations
  • BKAP_Vendors
  • bkap_wc_vendors
  • bkap_wcv_product
  • Booking_Information_In_Voucher_Template
  • Class_Bkap_Product_Resource
  • Custom_WooCommerce_Widget_Product_Search
  • EDD_BOOK_Plugin_Updater
  • global_menu
  • import_bookings
  • product_gcal_settings
  • view_bookings
  • WAPBK_Import_Bookings_Table
  • WAPBK_View_Bookings_Table
  • woocommerce_booking

Functions

  • addDayswithdate
  • bkap_400_create_meta
  • bkap_400_recurring_data
  • bkap_400_update_db_tab
  • bkap_400_update_enable_specific
  • bkap_400_update_enable_week_blocking
  • bkap_400_update_holidays
  • bkap_400_update_ranges
  • bkap_400_update_recurring_lockout
  • bkap_400_update_settings
  • bkap_400_update_special
  • bkap_400_update_specific
  • bkap_410_create_meta
  • bkap_410_update_block_pricing_option_values_in_new_way
  • bkap_410_update_fixed_blocks
  • bkap_410_update_price_ranges
  • bkap_410_update_settings
  • bkap_420_add_gcal_posts
  • bkap_420_add_gcal_tour_posts
  • bkap_420_gcal_batch_size
  • bkap_420_gcal_meta
  • bkap_420_update_settings
  • bkap_add_days_to_date
  • bkap_array_of_given_date_range
  • bkap_booked_resources
  • bkap_booking_posts_for_resource
  • bkap_calculate_bookings_for_resource
  • bkap_check_booking_available
  • bkap_check_day_booking_available
  • bkap_check_for_max_date
  • bkap_check_for_min_date
  • bkap_check_holiday
  • bkap_check_in_custom_holiday_range
  • bkap_check_resource_available
  • bkap_check_resource_booked_in_date_range
  • bkap_db_420_1
  • bkap_db_420_2
  • bkap_delete_event_from_gcal
  • bkap_delete_folder_and_files
  • bkap_delete_options
  • bkap_delete_tables
  • bkap_find_matching_product_variation
  • bkap_generate_bookable_data
  • bkap_get_book_arrays
  • bkap_get_book_t
  • bkap_get_booked
  • bkap_get_booked_checkout
  • bkap_get_custom_posts
  • bkap_get_dateToCal
  • bkap_get_day_between_Week
  • bkap_get_db_count
  • bkap_get_escapeString
  • bkap_get_lockout
  • bkap_get_month_range
  • bkap_get_post_meta
  • bkap_get_posted_availability
  • bkap_get_total_timeslot_maximum_booking
  • bkap_get_week_range
  • bkap_import_events_cron
  • bkap_insert_event_to_gcal
  • bkap_manual_db_update_v420
  • bkap_orderby_date_key
  • bkap_save_resources
  • bkap_sort_by_from_time
  • bkap_update_po_file
  • bkap_vendors_get_bookings
  • bkap_widgets_init
  • bkapSortByPriority
  • calback_bkap_max_date
  • check_in_fixed_block_booking
  • check_in_range
  • check_in_range_abp
  • check_in_range_holidays
  • check_in_range_weekdays
  • create_posts
  • get_availability_for_date
  • get_booked_multiple
  • get_bookings_for_date
  • get_bookings_for_range
  • get_date_lockout
  • get_slot_availability
  • get_slot_lockout
  • get_standard_decimal_thousand_separator_price
  • is_booking_active
  • woocommerce_bkap_add_cron_schedule
  1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57  58  59  60  61  62  63  64  65  66  67  68  69  70  71  72  73  74  75  76  77  78  79  80  81  82  83  84  85  86  87  88  89  90  91  92  93  94  95  96  97  98  99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 
<?php

/**
 * Bookings and Appointment Plugin for WooCommerce
 *
 * Create related orders for Rescheduled Bookings
 *
 * @author      Tyche Softwares
 * @package     BKAP/Reschedule
 * @category    Classes
 */

if( ! class_exists( 'bkap_rescheduled_order_class' ) ) {

    /**
     * Class for creating related orders for rescheduled bookings
     * 
     * @since 4.2.0
     */

    class bkap_rescheduled_order_class {

        /**
         * Default Constructor. Attach functions to hooks
         * 
         * @since 4.2.0
         */
        function __construct() {

            add_filter( 'woocommerce_hidden_order_itemmeta', array( &$this, 'bkap_rescheduled_hidden_order_itemmeta'), 10, 1 );
            add_action( 'woocommerce_after_order_itemmeta', array( &$this, 'bkap_button_after_order_meta' ), 10, 3 );
        }

        /**
         * Add hidden meta fields to order for reschedule details
         * 
         * @param array $meta_keys Existing Meta Keys Array
         * @return array Meta Keys
         * 
         * @since 4.2.0
         * @hook woocommerce_hidden_order_itemmeta
         */

        public function bkap_rescheduled_hidden_order_itemmeta( $meta_keys ) {
            
            $meta_keys[] = '_bkap_resch_orig_order_id';
            $meta_keys[] = '_bkap_resch_rem_bal_order_id';

            return $meta_keys;
        }

        /**
         * Add meta box on order page to display related order
         * 
         * @param string $original_order_id Parent Order ID
         * @param WC_Order_Item $item Order Item Object
         * 
         * @return string New Order ID
         * 
         * @since 4.2.0
         */

        public static function bkap_rescheduled_create_order( $original_order_id, $item ) {
            
            $original_order = wc_get_order( $original_order_id );
            $new_remaining_order = wc_create_order( array( 
                'status'        => 'wc-pending',
                'customer_id'   => $original_order->get_user_id(),
            ));

            $new_remaining_order->set_address( array(
                'first_name'    => $original_order->get_billing_first_name(),
                'last_name'     => $original_order->get_billing_last_name(),
                'company'       => $original_order->get_billing_company(),
                'address_1'     => $original_order->get_billing_address_1(),
                'address_2'     => $original_order->get_billing_address_2(),
                'city'          => $original_order->get_billing_city(),
                'state'         => $original_order->get_billing_state(),
                'postcode'      => $original_order->get_billing_postcode(),
                'country'       => $original_order->get_billing_country(),
                'email'         => $original_order->get_billing_email(),
                'phone'         => $original_order->get_billing_phone()
            ) );

            $new_remaining_order->set_address( array(
                'first_name'    => $original_order->get_shipping_first_name(),
                'last_name'     => $original_order->get_shipping_last_name(),
                'company'       => $original_order->get_shipping_company(),
                'address_1'     => $original_order->get_shipping_address_1(),
                'address_2'     => $original_order->get_shipping_address_2(),
                'city'          => $original_order->get_shipping_city(),
                'state'         => $original_order->get_shipping_state(),
                'postcode'      => $original_order->get_shipping_postcode(),
                'country'       => $original_order->get_shipping_country(),
            ) );

            $item_id = $new_remaining_order->add_product( $item['product'], $item['qty'], array(
                'totals' => array(
                    'subtotal'  => $item['amount'],
                    'total'     => $item['amount']
                )
            ));

            wc_update_order_item_meta( $item_id, '_bkap_resch_orig_order_id', $original_order_id, '' );
            wc_update_order_item( $item_id, array( 'order_item_name' => sprintf( __( 'Additional Payment for %s (Order #%d )' ) ,$item['product']->get_title(), $original_order_id ) ) );

            $new_remaining_order->calculate_totals();

            $new_remaining_order_post = array (
                'ID'            => $new_remaining_order->get_id(),
                'post_date'     => date( 'Y-m-d H:i:s', current_time( 'timestamp' ) ),
                'post_parent'   => $original_order_id
            );

            wp_update_post( $new_remaining_order_post );

            return $new_remaining_order->get_id();
        }

        /**
         * Add link for related order in admin side for rescheduled orders where there is an additional payment
         * 
         * @param string|int $item_id Order Item ID
         * @param WC_Order_Item $item Order Item Object
         * @param WC_Product $product Product Object
         * 
         * @since 4.2.0
         * 
         * @hook woocommerce_after_order_itemmeta
         */
        
        public function bkap_button_after_order_meta( $item_id, $item, $product ){

            if ( $item['_bkap_resch_rem_bal_order_id'] !== '' && $item['_bkap_resch_rem_bal_order_id'] !== null ){
                ?>
                    <a href="<?php echo esc_url( admin_url( 'post.php?post=' . $item['_bkap_resch_rem_bal_order_id'] . '&action=edit' ) ); ?>" class="button button-small">
                        <?php _e( 'Related Order', 'woocommerce-booking' ); ?>
                    </a>
                <?php
            }elseif ( $item['_bkap_resch_orig_order_id'] !== '' && $item['_bkap_resch_orig_order_id'] !== null ) {
                ?>
                    <a href="<?php echo esc_url( admin_url( 'post.php?post=' . $item['_bkap_resch_orig_order_id'] . '&action=edit' ) ); ?>" class="button button-small">
                        <?php _e( 'Parent Order', 'woocommerce-booking' ); ?>
                    </a>
                <?php
            }
        }
    }
}

$bkap_rescheduled_order_class = new bkap_rescheduled_order_class();
API documentation generated by ApiGen