示例#1
0
/**
 * 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);
        }
    }
}
示例#8
0
/**
 * 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');
}
示例#9
0
 /**
  * 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);
     }
 }
示例#10
0
/**
 * 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));
    }
}
示例#11
0
/**
 * 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;
 }