/** * 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); }
/** * Payment form total price. * * @since 1.3.8 * @return str */ function mdjm_get_payment_total() { $event_id = $_POST['event_id']; $type = $_POST['mdjm_payment_amount']; $total = false; $mdjm_event = new MDJM_Event($event_id); if ('deposit' == $type) { $type = mdjm_get_deposit_label(); $total = $mdjm_event->get_remaining_deposit(); } elseif ('balance' == $type) { $type = mdjm_get_balance_label(); $total = $mdjm_event->get_balance(); } else { $type = mdjm_get_other_amount_label(); $total = !empty($_POST['part_payment']) ? $_POST['part_payment'] : false; } return $total; }
/** * Displays the signed contract for review. * * @since 1.3.6 * @param int $event_id The event ID. * @return void */ function mdjm_review_signed_contract() { if (empty($_GET['mdjm_action'])) { return; } if ('review_contract' !== $_GET['mdjm_action']) { return; } if (!mdjm_employee_can('manage_events')) { return; } $mdjm_event = new MDJM_Event($_GET['event_id']); if (!mdjm_is_admin()) { if (!array_key_exists(get_current_user_id(), $mdjm_event->get_all_employees())) { return; } } if (!$mdjm_event->get_contract_status()) { printf(__('The contract for this %s is not signed', 'mobile-dj-manager'), mdjm_get_label_singular()); exit; } $contract_id = $mdjm_event->get_contract(); if (empty($contract_id)) { return; } echo mdjm_show_contract($contract_id, $mdjm_event); exit; }
/** * 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; }
/** * Lists an events addons. * * @since 1.4 * @param int $event_id The event ID. * @param bool $price True to include the addon price. * @return int|false The event addons or false if no addons. */ function mdjm_list_event_addons($event_id, $price = false) { $output = __('No addons are assigned to this event', 'mobile-dj-manager'); if (!mdjm_packages_enabled()) { return $output; } $mdjm_event = new MDJM_Event($event_id); $event_addons = $mdjm_event->get_addons(); $event_date = $mdjm_event->date; if ($event_addons) { $addons = array(); foreach ($event_addons as $addon_id) { $addon_price = ''; if ($price) { $addon_price = ' ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_addon_price($addon_id, $event_date))); } $addons[] = mdjm_get_addon_name($addon_id) . '' . $addon_price; } $output = implode('<br />', $addons); } return apply_filters('mdjm_list_event_addons', $output); }
/** * Set the destination address. * * @since 1.4 * @param int|arr|obj $destination An event ID or object, or a venue post ID or an address array. * @return void */ public function set_destination($dest) { if (is_array($dest)) { // Address array is passed $dest = implode(',', array_filter($dest)); $this->destination_address = $dest; } elseif (is_object($dest)) { // Event object is passed $mdjm_event = new MDJM_Event($event); $this->destination_address = $this->get_venue_address($mdjm_event->get_venue_id()); } elseif (is_numeric($dest)) { // Event or Venue ID is passed $this->destination_address = $this->get_venue_address($dest); } }
/** * Log the primary employees payment settings and update if employee or wage changes. * * @since 1.3 * @param int $event_id Event ID. * @param arr $old_meta Old meta values from before event save. * @param arr $new_meta New meta values after event save. * @return void */ function mdjm_manage_primary_employee_payment_status($event_id, $old_meta, $new_meta) { if (!mdjm_get_option('enable_employee_payments')) { return; } $mdjm_event = new MDJM_Event($event_id); $employee_id = $mdjm_event->get_employee(); if (empty($employee_id)) { return; } $payment_amount = mdjm_get_employees_event_wage($event_id, $employee_id); $payment_status = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true); if (empty($payment_status)) { if (empty($payment_amount) || $payment_amount < 1) { return; } $mdjm_txn = new MDJM_Txn(); $mdjm_txn->create(array('post_title' => sprintf(__('Wage payment to %s for %d', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $event_id), 'post_status' => 'mdjm-expenditure', 'post_author' => 1, 'post_parent' => $event_id), array('_mdjm_txn_status' => 'Pending', '_mdjm_payment_to' => $employee_id, '_mdjm_txn_total' => $payment_amount)); if (!empty($mdjm_txn)) { $data['txn_id'] = $mdjm_txn->ID; } mdjm_set_txn_type($mdjm_txn->ID, mdjm_get_txn_cat_id('slug', 'mdjm-employee-wages')); $payment_data = array('payment_status' => 'unpaid', 'payment_date' => '', 'txn_id' => $mdjm_txn->ID, 'payment_amount' => ''); update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data); } else { if ($payment_status['payment_status'] == 'paid') { return; } if (in_array($mdjm_event->post_status, array('mdjm-cancelled', 'mdjm-rejected', 'mdjm-failed'))) { update_post_meta($mdjm_txn->ID, '_mdjm_txn_status', 'Cancelled'); } $mdjm_txn = new MDJM_Txn($payment_status['txn_id']); if ($mdjm_txn->recipient_id != $employee_id) { update_post_meta($mdjm_txn->ID, '_mdjm_payment_to', $employee_id); } if ($payment_amount != $mdjm_txn->price) { update_post_meta($mdjm_txn->ID, '_mdjm_txn_total', $payment_amount); } } }
/** * Content tag: venue_telephone. * The event venue phone number. * * @param * * @return str Phone number of the event venue. */ function mdjm_content_tag_venue_telephone($event_id = '') { if (empty($event_id)) { return; } $mdjm_event = new MDJM_Event($event_id); return mdjm_get_event_venue_meta($mdjm_event->get_venue_id(), 'phone'); }
/** * Manage checkboxes on event save. * When an event is saved on the event screen and a checkbox is not checked, * no value is posted and therefore the event meta key is not updated. * * @params obj $post The events WP_POST object * @return void */ function manage_custom_fields_on_event_save($post) { $mdjm_event = new MDJM_Event($post->ID); $query = mdjm_get_custom_fields(); $custom_fields = $query->get_posts(); foreach ($custom_fields as $custom_field) { if ('checkbox' != get_post_meta($custom_field->ID, '_mdjm_field_type', true)) { continue; } $key = '_mdjm_event_' . str_replace('-', '_', $custom_field->post_name); if ($mdjm_event->get_meta($key) && empty($_POST[$key])) { $meta[$key] = ''; } } if (!empty($meta)) { mdjm_update_event_meta($mdjm_event->ID, $meta); } }
/** * MDJM Contract Shortcode. * * Displays the MDJM contract page to allow the client to review and sign their event contract. * * @since 1.3 * * @return string */ function mdjm_shortcode_contract($atts) { if (isset($_GET['event_id']) && mdjm_event_exists($_GET['event_id'])) { if (is_user_logged_in()) { global $mdjm_event; $mdjm_event = new MDJM_Event($_GET['event_id']); $status = !$mdjm_event->get_contract_status() ? '' : 'signed'; if ($mdjm_event) { ob_start(); mdjm_get_template_part('contract', $status); // Do not replace tags in a signed contract if ($status == 'signed') { $output = mdjm_do_content_tags(ob_get_contents(), $mdjm_event->ID, $mdjm_event->client); } else { $output = mdjm_do_content_tags(ob_get_contents(), $mdjm_event->ID, $mdjm_event->client); } ob_get_clean(); } else { return sprintf(__("Ooops! There seems to be a slight issue and we've been unable to find your %s.", 'mobile-dj-manager'), mdjm_get_label_singular(true)); } // Reset global var $mdjm_event = ''; return $output; } else { echo mdjm_login_form(mdjm_get_current_page_url()); } } else { return sprintf(__("Ooops! There seems to be a slight issue and we've been unable to find your %s.", 'mobile-dj-manager'), mdjm_get_label_singular(true)); } }
/** * Returns the primary employee ID. * * @since 1.3 * @param int $event_id The event ID. * @return int The user ID of the events primary employee. */ function mdjm_get_event_primary_employee_id($event_id) { if (empty($event_id)) { return false; } $event = new MDJM_Event($event_id); return $event->get_employee(); }
/** * Determine if the event contract is signed. * * @since 1.3 * @param $event_id The event ID. * @return int|bool The signed contracted post ID or false if not signed yet. */ function mdjm_contract_is_signed($event_id) { $event = new MDJM_Event($event_id); return $event->get_contract_status(); }
/** * 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); $categories = get_terms('enquiry-source', $term_args); foreach ($categories as $category_id => $category) { $conversions = 0; $ratio = 0; $event_count = 0; $category_slugs = array($category->slug); $all_event_args = array('post_status' => 'any', 'fields' => 'ids', 'tax_query' => array(array('taxonomy' => 'enquiry-source', 'field' => 'slug', 'terms' => $category_slugs)), 'date_query' => array(array('after' => date('Y-m-d', $stats->start_date), 'before' => date('Y-m-d', $stats->end_date), 'inclusive' => true))); $value = 0.0; $events = mdjm_get_events($all_event_args); $statuses = mdjm_active_event_statuses(); $statuses[] = 'mdjm-completed'; $statuses[] = 'mdjm-cancelled'; if ($events) { foreach ($events as $event) { $event_count++; $mdjm_event = new MDJM_Event($event); if (in_array($mdjm_event->post_status, $statuses)) { $current_value = $mdjm_event->get_total_profit(); $value += $current_value; } } } else { continue; } $conversions += $stats->get_conversions($events, 'enquiry-source', $category_slugs, $stats->start_date, $stats->end_date); $ratio = round((double) ($conversions / $event_count) * 100); $reports_data[] = array('ID' => $category->term_id, 'source' => $category->name, 'total_events' => $event_count, 'total_conversions' => $conversions, 'conversion_ratio' => $ratio . '%', 'total_value' => mdjm_currency_filter(mdjm_format_amount($value)), 'total_value_raw' => $value, 'is_child' => false); $this->total_enquiries += $event_count; $this->total_value += $value; $this->total_conversions += $conversions; } } return $reports_data; }
/** * 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); $categories = get_terms('event-types', $term_args); foreach ($categories as $category_id => $category) { $event_count = 0; $category_slugs = array($category->slug); $all_event_args = array('post_status' => apply_filters('mdjm_events_by_type_statuses', array('mdjm-contract', 'mdjm-approved', 'mdjm-completed')), 'fields' => 'ids', 'tax_query' => array(array('taxonomy' => 'event-types', 'field' => 'slug', 'terms' => $category_slugs)), 'meta_query' => array(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'))); $earnings = 0.0; $avg_earnings = 0.0; $events = mdjm_get_events($all_event_args); if ($events) { foreach ($events as $event) { $event_count++; $mdjm_event = new MDJM_Event($event); $current_average_earnings = $current_earnings = $mdjm_event->get_total_profit(); $received_date = get_post_field('post_date', $event); $diff = abs(current_time('timestamp') - strtotime($received_date)); $months = floor($diff / (30 * 60 * 60 * 24)); // Number of months since publication if ($months > 0) { $current_average_earnings = $current_earnings / $months; //$current_average_events = ( $events / $months ); } $earnings += $current_earnings; $avg_earnings += $current_average_earnings; } } else { continue; } $avg_earnings = round($avg_earnings / $event_count, mdjm_currency_decimal_filter()); $reports_data[] = array('ID' => $category->term_id, 'type' => $category->name, 'total_events' => $event_count, 'total_earnings' => mdjm_currency_filter(mdjm_format_amount($earnings)), 'total_earnings_raw' => $earnings, 'avg_earnings' => mdjm_currency_filter(mdjm_format_amount($avg_earnings)), 'is_child' => false); } } return $reports_data; }