/** * Build all the reports data * * @access public * @since 1.4 * @return arr $reports_data All the data for customer reports */ public function reports_data() { $stats = new MDJM_Stats(); $dates = mdjm_get_report_dates(); $stats->setup_dates($dates['range']); $cached_reports = false; if (false !== $cached_reports) { $reports_data = $cached_reports; } else { $reports_data = array(); $term_args = array('parent' => 0, 'hierarchical' => 0); $packages = mdjm_get_packages(); if ($packages) { foreach ($packages as $package) { $event_count = 0; $total_value = 0; $event_args = array('fields' => 'ids', 'meta_query' => array('relation' => 'AND', array('key' => '_mdjm_event_package', 'value' => $package->ID, 'type' => 'NUMERIC'), array('key' => '_mdjm_event_date', 'value' => array(date('Y-m-d', $stats->start_date), date('Y-m-d', $stats->end_date)), 'type' => 'date', 'compare' => 'BETWEEN'))); $events = mdjm_get_events($event_args); if ($events) { foreach ($events as $event) { $event_count++; $event_date = get_post_meta($event, '_mdjm_event_date', true); $total_value += mdjm_get_package_price($package->ID, $event_date); } } else { continue; } $reports_data[] = array('ID' => $package->ID, 'package' => mdjm_get_package_name($package->ID), 'events' => $event_count, 'value' => mdjm_currency_filter(mdjm_format_amount($total_value)), 'value_raw' => $total_value); } } } return $reports_data; }
/** * Calculate the event cost as event elements change * * @since 1.0 * @return void */ function mdjm_update_event_cost_ajax() { $mdjm_event = new MDJM_Event($_POST['event_id']); $mdjm_travel = new MDJM_Travel(); $event_cost = $mdjm_event->price; $event_date = $event_date = !empty($_POST['event_date']) ? $_POST['event_date'] : NULL; $base_cost = '0.00'; $package = $mdjm_event->get_package(); $package_price = $package ? mdjm_get_package_price($package, $event_date) : '0.00'; $addons = $mdjm_event->get_addons(); $travel_data = $mdjm_event->get_travel_data(); $employee_id = $_POST['employee_id']; $dest = $_POST['venue']; $dest = maybe_unserialize($dest); if ($event_cost) { $event_cost = (double) $event_cost; $base_cost = $package_price ? $event_cost - $package_price : $event_cost; } if ($package) { $base_cost = $event_cost - $package_price; } if ($addons) { foreach ($addons as $addon) { $addon_price = mdjm_get_addon_price($addon, $event_date); $base_cost = $base_cost - (double) $addon_price; } } if ($travel_data && !empty($travel_data['cost'])) { $base_cost = $base_cost - (double) $travel_data['cost']; } $new_package = !empty($_POST['package']) ? $_POST['package'] : false; $new_addons = !empty($_POST['addons']) ? $_POST['addons'] : false; $cost = $base_cost; if ($new_package) { $new_package_price = mdjm_get_package_price($new_package, $event_date); $cost += (double) $new_package_price; } if ($new_addons) { foreach ($new_addons as $new_addon) { $new_addon_price = mdjm_get_addon_price($new_addon, $event_date); $cost += (double) $new_addon_price; } } if ($mdjm_travel->add_travel_cost) { if (!empty($employee_id)) { $mdjm_travel->__set('start_address', $mdjm_travel->get_employee_address($employee_id)); } $mdjm_travel->set_destination($dest); $mdjm_travel->get_travel_data(); $new_travel = !empty($mdjm_travel->data) ? $mdjm_travel->get_cost() : false; if ($new_travel && (double) preg_replace('/[^0-9.]*/', '', $mdjm_travel->data['distance']) >= mdjm_get_option('travel_min_distance')) { $cost += (double) $new_travel; } } if (!empty($cost)) { $result['type'] = 'success'; $result['cost'] = mdjm_sanitize_amount((double) $cost); } else { $result['type'] = 'success'; $result['cost'] = mdjm_sanitize_amount(0); } wp_send_json($result); }
/** * List all available addons. If an employee ID is provided, list what that * employee can provide only. * * @since 1.4 * @param int $employee_id An employee user ID, otherwise query current user. * @param bool $price True to display the formatted package price * @return str HTML formatted string listing package information */ function mdjm_list_available_addons($employee_id = 0, $price = false) { if (!mdjm_packages_enabled()) { return __('No addons available', 'mobile-dj-manager'); } if (!empty($employee_id)) { $addons = mdjm_get_addons_by_employee($employee_id, false); } else { $addons = mdjm_get_addons(); } if (!$addons) { return __('No addons available', 'mobile-dj-manager'); } $return = array(); foreach ($addons as $addon) { $addon_price = ''; if ($price) { $addon_price = ' ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_package_price($addon->ID))); } $return[] = get_the_title($addon->ID) . '' . $addon_price; } $return = apply_filters('mdjm_list_available_addons', $return, $price); return implode('<br />', $return); }
/** * Renders a dropdown list of packages. * * @since 1.3.7 * @param arr $args @see $default * @return str */ public function packages_dropdown($args = array()) { $defaults = array('name' => '_mdjm_event_package', 'id' => '', 'class' => '', 'selected' => '', 'show_option_none' => __('No Package', 'mobile-dj-manager'), 'show_option_all' => false, 'chosen' => false, 'employee' => false, 'event_type' => false, 'event_date' => false, 'placeholder' => __('Select a Package', 'mobile-dj-manager'), 'multiple' => false, 'cost' => true, 'titles' => false, 'options_only' => false, 'blank_first' => true, 'data' => array()); $args = wp_parse_args($args, $defaults); $options = array(); $args['id'] = !empty($args['id']) ? $args['id'] : $args['name']; $packages = mdjm_get_packages(); if ($packages) { foreach ($packages as $package) { if ($args['employee']) { if (!mdjm_employee_has_package($package->ID, $args['employee'])) { continue; } } if ($args['event_type']) { if (!mdjm_package_is_available_for_event_type($package->ID, $args['event_type'])) { continue; } } if ($args['event_date']) { if (!mdjm_package_is_available_for_event_date($package->ID, $args['event_date'])) { continue; } } else { $args['event_date'] = NULL; } $price = ''; if ($args['cost'] == true) { $price .= ' - ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_package_price($package->ID, $args['event_date']))); } $args['options'][$package->ID] = $package->post_title . '' . $price; if ($args['titles']) { $titles[$package->ID] = mdjm_get_package_excerpt($package->ID); } } } if (empty($args['options'])) { $args['placeholder'] = __('No Packages Available', 'mobile-dj-manager'); } if (!empty($titles)) { $args['titles'] = $titles; } $output = $this->select($args); return $output; }
/** * Creates an event * * @since 1.3 * @param arr $data Array of attributes for an event. See $defaults. * @return mixed false if data isn't passed and class not instantiated for creation, or New Event ID */ public function create($data = array(), $meta = array()) { if ($this->id != 0) { return false; } remove_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); $defaults = array('post_type' => 'mdjm-event', 'post_author' => 1, 'post_content' => '', 'post_status' => 'mdjm-enquiry', 'post_title' => __('New Event', 'mobile-dj-manager')); $default_meta = array('_mdjm_event_date' => date('Y-m-d'), '_mdjm_event_dj' => !mdjm_get_option('employer') ? 1 : 0, '_mdjm_event_playlist_access' => mdjm_generate_playlist_guest_code(), '_mdjm_event_playlist' => mdjm_get_option('enable_playlists') ? 'Y' : 'N', '_mdjm_event_contract' => mdjm_get_default_event_contract(), '_mdjm_event_cost' => 0, '_mdjm_event_deposit' => 0, '_mdjm_event_deposit_status' => __('Due', 'mobile-dj-manager'), '_mdjm_event_balance_status' => __('Due', 'mobile-dj-manager'), 'mdjm_event_type' => mdjm_get_option('event_type_default'), 'mdjm_enquiry_source' => mdjm_get_option('enquiry_source_default'), '_mdjm_event_venue_id' => 'Manual'); $data = wp_parse_args($data, $defaults); $meta = wp_parse_args($meta, $default_meta); do_action('mdjm_event_pre_create', $data, $meta); $id = wp_insert_post($data, true); $event = WP_Post::get_instance($id); if ($event) { if (!empty($meta['mdjm_event_type'])) { mdjm_set_event_type($event->ID, $meta['mdjm_event_type']); $meta['_mdjm_event_name'] = get_term($meta['mdjm_event_type'], 'event-types')->name; $meta['_mdjm_event_name'] = apply_filters('mdjm_event_name', $meta['_mdjm_event_name'], $id); } if (!empty($meta['mdjm_enquiry_source'])) { mdjm_set_enquiry_source($event->ID, $meta['mdjm_enquiry_source']); } if (!empty($meta['_mdjm_event_start']) && !empty($meta['_mdjm_event_finish'])) { if (date('H', strtotime($meta['_mdjm_event_finish'])) > date('H', strtotime($meta['_mdjm_event_start']))) { $meta['_mdjm_event_end_date'] = $meta['_mdjm_event_date']; } else { $meta['_mdjm_event_end_date'] = date('Y-m-d', strtotime('+1 day', strtotime($meta['_mdjm_event_date']))); } } if (!empty($meta['_mdjm_event_package'])) { $meta['_mdjm_event_cost'] += mdjm_get_package_price($meta['_mdjm_event_package'], $meta['_mdjm_event_date']); } if (!empty($meta['_mdjm_event_addons'])) { foreach ($meta['_mdjm_event_addons'] as $addon) { $meta['_mdjm_event_cost'] += mdjm_get_addon_price($addon); } } if (empty($meta['_mdjm_event_deposit'])) { $meta['_mdjm_event_deposit'] = mdjm_calculate_deposit($meta['_mdjm_event_cost']); } mdjm_update_event_meta($event->ID, $meta); wp_update_post(array('ID' => $id, 'post_title' => mdjm_get_event_contract_id($id), 'post_name' => mdjm_get_event_contract_id($id))); } do_action('mdjm_event_post_create', $id, $data); add_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); return $this->setup_event($event); }
/** * Define the data to be displayed in each of the custom columns for the Package post types * * @since 1.4 * @param str $column_name The name of the column to display * @param int $post_id The current post ID * @return */ function mdjm_package_posts_custom_column($column_name, $post_id) { global $post; switch ($column_name) { // Items case 'items': $items = mdjm_get_package_addons($post_id); if ($items) { $i = 0; foreach ($items as $item) { echo '<a href="' . admin_url("post.php?post={$item}&action=edit") . '">' . mdjm_get_addon_name($item) . '</a>'; $i++; if ($i < count($items)) { echo '<br />'; } } } break; // Category // Category case 'package_category': echo get_the_term_list($post_id, 'package-category', '', ', ', ''); break; // Availability // Availability case 'availability': $output = array(); if (!mdjm_package_is_restricted_by_date($post_id)) { $output[] = __('Always', 'mobile-dj-manager'); } else { $availability = mdjm_get_package_months_available($post_id); if (!$availability) { $output[] = __('Always', 'mobile-dj-manager'); } else { $i = 0; foreach ($availability as $month) { $output[] = mdjm_month_num_to_name($availability[$i]); $i++; } } } echo implode(', ', $output); break; // Event Types // Event Types case 'event_types': $output = array(); $event_label = mdjm_get_label_singular(); $event_types = mdjm_get_package_event_types($post_id); if (in_array('all', $event_types)) { $output[] = sprintf(__('All %s Types', 'mobile-dj-manager'), $event_label); } else { foreach ($event_types as $event_type) { $term = get_term($event_type, 'event-types'); if (!empty($term)) { $output[] = $term->name; } } } echo implode(', ', $output); break; // Employees // Employees case 'employees': $employees = mdjm_get_employees_with_package($post_id); $output = array(); if (in_array('all', $employees)) { $output[] .= __('All Employees', 'mobile-dj-manager'); } else { foreach ($employees as $employee) { if ('all' == $employee) { continue; } $output[] = '<a href="' . get_edit_user_link($employee) . '">' . mdjm_get_employee_display_name($employee) . '</a>'; } } echo implode('<br />', $output); break; // Price // Price case 'price': if (mdjm_package_has_variable_prices($post_id)) { $range = mdjm_get_package_price_range($post_id); echo mdjm_currency_filter(mdjm_format_amount($range['low'])); echo ' — '; echo mdjm_currency_filter(mdjm_format_amount($range['high'])); } else { echo mdjm_currency_filter(mdjm_format_amount(mdjm_get_package_price($post_id))); } break; case 'usage': $count = mdjm_count_events_with_package($post_id); echo $count . ' ' . _n(mdjm_get_label_singular(), mdjm_get_label_plural(), $count, 'mobile-dj-manager'); break; } // switch }
/** * Calculate the event cost as the package changes * * @since 1.0 * @return void */ function mdjm_update_event_cost_from_package_ajax() { _deprecated_function(__FUNCTION__, '1.4'); $mdjm_event = new MDJM_Event($_POST['event_id']); $package = $mdjm_event->get_package(); $addons = $mdjm_event->get_addons(); $event_cost = $mdjm_event->price; $event_date = !empty($_POST['event_date']) ? $_POST['event_date'] : NULL; $base_cost = '0.00'; $package_price = $package ? (double) mdjm_get_package_price($package->ID, $event_date) : false; if ($event_cost) { $event_cost = (double) $event_cost; $base_cost = $package_price ? $event_cost - $package_price : $event_cost; } if ($addons) { foreach ($addons as $addon) { $addon_cost = mdjm_get_package_price($addon->ID, $event_date); $base_cost = $base_cost - (double) $addon_cost; } } $cost = $base_cost; $new_package = $_POST['package']; $new_package_price = !empty($new_package) ? mdjm_get_package_price($new_package, $event_date) : false; if ($new_package_price) { $cost = $base_cost + (double) $new_package_price; } if (!empty($cost)) { $result['type'] = 'success'; $result['cost'] = mdjm_sanitize_amount((double) $cost); } else { $result['type'] = 'success'; $result['cost'] = mdjm_sanitize_amount(0); } $result = json_encode($result); echo $result; die; }
/** * Output the package availability pricing options row * * @since 1.4 * @param int $post The WP_Post object. * @return str */ function mdjm_package_metabox_pricing_options_row($post) { $month = 1; $price = mdjm_get_package_price($post->ID); $variable = mdjm_package_has_variable_prices($post->ID); $prices = mdjm_get_package_variable_prices($post->ID); $variable_display = $variable ? '' : ' style="display:none;"'; $currency_position = mdjm_get_option('currency_format', 'before'); ?> <div class="mdjm_field_wrap mdjm_form_fields"> <div id="mdjm-package-regular-price-field" class="mdjm_pricing_fields"> <?php $price_args = array('name' => '_package_price', 'value' => isset($price) ? esc_attr(mdjm_format_amount($price)) : '', 'class' => 'mdjm-currency', 'desc' => __('Will be used if variable pricing is not in use, or for months that are not defined within variable pricing', 'mobile-dj-manager'), 'placeholder' => mdjm_format_amount('10.00')); ?> <p><label for="<?php echo $price_args['name']; ?> "><?php _e('Standard Price', 'mobile-dj-manager'); ?> </label><br /> <?php if ($currency_position == 'before') { ?> <?php echo mdjm_currency_filter(''); ?> <?php echo MDJM()->html->text($price_args); ?> <?php } else { ?> <?php echo MDJM()->html->text($price_args); ?> <?php echo mdjm_currency_filter(''); ?> <?php } ?> </p> <?php do_action('mdjm_package_price_field', $post->ID); ?> </div> <?php do_action('mdjm_after_package_price_field', $post->ID); ?> <div id="package-variable-price"> <p><?php echo MDJM()->html->checkbox(array('name' => '_package_variable_pricing', 'current' => $variable)); ?> <label for="_package_variable_pricing"><?php _e('Enable variable pricing', 'mobile-dj-manager'); ?> </label></p> </div> <?php do_action('mdjm_after_package_variable_pricing_field', $post->ID); ?> </div> <div id="mdjm-package-variable-price-fields" class="mdjm_pricing_fields" <?php echo $variable_display; ?> > <input type="hidden" id="mdjm_variable_prices" class="mdjm_variable_prices_name_field" value="" /> <div id="mdjm_price_fields" class="mdjm_meta_table_wrap"> <table class="widefat mdjm_repeatable_table"> <thead> <tr> <th style="width: 50px;"><?php _e('Month', 'mobile-dj-manager'); ?> </th> <th style="width: 100px;"><?php _e('Price', 'mobile-dj-manager'); ?> </th> <?php do_action('mdjm_package_price_table_head', $post->ID); ?> <th style="width: 2%"></th> </tr> </thead> <tbody> <?php if (!empty($prices)) { foreach ($prices as $key => $value) { $months = isset($value['months']) ? $value['months'] : ''; $amount = isset($value['amount']) ? $value['amount'] : ''; $index = isset($value['index']) ? $value['index'] : $key; $args = apply_filters('mdjm_price_row_args', compact('months', 'amount'), $value); ?> <tr class="mdjm_variable_prices_wrapper mdjm_repeatable_row" data-key="<?php echo esc_attr($key); ?> "> <?php do_action('mdjm_render_package_price_row', $key, $args, $post->ID, $index); ?> </tr> <?php } } else { ?> <tr class="mdjm_variable_prices_wrapper mdjm_repeatable_row" data-key="1"> <?php do_action('mdjm_render_package_price_row', 1, array(), $post->ID, 1); ?> </tr> <?php } ?> <tr> <td class="submit" colspan="3" style="float: none; clear:both; background:#fff;"> <a class="button-secondary mdjm_add_repeatable" style="margin: 6px 0;"><?php _e('Add New Price', 'mobile-dj-manager'); ?> </a> </td> </tr> </tbody> </table> </div> </div> <?php }
/** * Content tag: event_package_cost. * The package attached to the event and it's cost. * * @param int The event ID. * @return str The package name and cost or "No Package". */ function mdjm_content_tag_event_package_cost($event_id = '') { $return = '0.00'; if (!empty($event_id)) { $mdjm_event = new MDJM_Event($event_id); $package_id = $mdjm_event->get_package(); $package_price = mdjm_get_package_price($package_id, $mdjm_event->date); if (!empty($package_price)) { $return = $package_price; } } return mdjm_currency_filter(mdjm_format_amount($return)); }