/** * Set the CSV columns * * @access public * @since 1.4 * @return arr $cols All the columns */ public function csv_cols() { if (!empty($_POST['mdjm_export_event'])) { $cols = array('first_name' => __('First Name', 'mobile-dj-manager'), 'last_name' => __('Last Name', 'mobile-dj-manager'), 'email' => __('Email', 'mobile-dj-manager'), 'date' => sprintf(__('%s Date', 'mobile-dj-manager'), mdjm_get_label_singular())); } else { $cols = array(); if ('emails' != $_POST['mdjm_export_option']) { $cols['name'] = __('Name', 'mobile-dj-manager'); } $cols['email'] = __('Email', 'mobile-dj-manager'); if ('full' == $_POST['mdjm_export_option']) { $cols['events'] = sprintf(__('Total %s', 'mobile-dj-manager'), mdjm_get_label_plural()); $cols['amount'] = __('Total Value', 'mobile-dj-manager') . ' (' . html_entity_decode(mdjm_currency_filter('')) . ')'; } } return $cols; }
/** * List the event transactions for client view * * @params int $eventID Required. Post ID of the event * str $display Optional: 'list' to list each payment date, amount and reason * * @return str 'No Payments Received' if no txns, otherwise txn detail as specified by $display */ function list_event_transactions($eventID, $display = 'list') { $txns = $this->get_transactions($eventID, 'mdjm-income', 'Completed', 'obj'); if (empty($txns)) { return __('No Payments Found', 'mobile-dj-manager'); } $i = 1; switch ($display) { case 'list': foreach ($txns as $txn) { $types = wp_get_object_terms($txn->ID, 'transaction-types'); $txn_type = !is_wp_error($types) && !empty($types) ? $types[0]->name : ''; $output = mdjm_currency_filter(mdjm_sanitize_amount(get_post_meta($txn->ID, '_mdjm_txn_total', true))); $output .= ' '; $output .= 'on ' . date(MDJM_SHORTDATE_FORMAT, strtotime($txn->post_date)) . ' (' . $txn_type . ')'; if ($i < count($txns)) { $output .= '<br />'; } $i++; } break; } return $output; }
/** * Define the data to be displayed in each of the custom columns for the Transaction post types * * @since 0.9 * @param str $column_name The name of the column to display * @param int $post_id The current post ID * @return */ function mdjm_event_posts_custom_column($column_name, $post_id) { global $post; if (mdjm_employee_can('edit_txns') && ($column_name == 'value' || $column_name == 'balance')) { $value = mdjm_get_event_price($post_id); } switch ($column_name) { // Event Date case 'event_date': if (mdjm_employee_can('read_events')) { echo '<strong><a href="' . admin_url('post.php?post=' . $post_id . '&action=edit') . '">' . date('d M Y', strtotime(get_post_meta($post_id, '_mdjm_event_date', true))) . '</a>'; } else { echo '<strong>' . date('d M Y', strtotime(get_post_meta($post_id, '_mdjm_event_date', true))) . '</strong>'; } break; // Client // Client case 'client': $client = get_userdata(get_post_meta($post->ID, '_mdjm_event_client', true)); if (!empty($client)) { if (mdjm_employee_can('send_comms')) { printf('<a href="%s">%s</a>', add_query_arg(array('recipient' => $client->ID, 'event_id' => $post_id), admin_url('admin.php?page=mdjm-comms')), $client->display_name); } else { echo $client->display_name; } } else { _e('<span class="mdjm-form-error">Not Assigned</span>', 'mobile-dj-manager'); } break; // Employees // Employees case 'employees': global $wp_roles; $primary = get_userdata(mdjm_get_event_primary_employee($post->ID)); $employees = mdjm_get_event_employees_data($post->ID); if (!empty($primary)) { if (mdjm_employee_can('send_comms')) { printf('<a href="%s" title="%s">%s</a>', add_query_arg(array('recipient' => $primary->ID, 'event_id' => $post_id), admin_url('admin.php?page=mdjm-comms')), mdjm_get_option('artist', __('DJ', 'mobile-dj-manager')), $primary->display_name); } else { echo '<a title="' . mdjm_get_option('artist', __('DJ', 'mobile-dj-manager')) . '">' . $primary->display_name . '</a>'; } } else { _e('<span class="mdjm-form-error">Not Assigned</span>', 'mobile-dj-manager'); } if (!empty($employees)) { echo '<br />'; $i = 1; foreach ($employees as $employee) { echo '<em>'; if (mdjm_employee_can('send_comms')) { printf('<a href="%s" title="%s">%s</a>', add_query_arg(array('recipient' => $employee['id'], 'event_id' => $post_id), admin_url('admin.php?page=mdjm-comms')), translate_user_role($wp_roles->roles[$employee['role']]['name']), mdjm_get_employee_display_name($employee['id'])); } else { echo '<a title="' . translate_user_role($wp_roles->roles[$employee['role']]['name']) . '">' . mdjm_get_employee_display_name($employee['id']) . '</a>'; } echo '</em>'; if ($i != count($employees)) { echo '<br />'; } } } break; // Status // Status case 'event_status': echo get_post_status_object($post->post_status)->label; break; // Event Type // Event Type case 'event_type': $event_types = get_the_terms($post_id, 'event-types'); if (is_array($event_types)) { foreach ($event_types as $key => $event_type) { $event_types[$key] = $event_type->name; } echo implode("<br/>", $event_types); } break; // Value // Value case 'value': if (mdjm_employee_can('edit_txns')) { if (!empty($value) && $value != '0.00') { echo mdjm_currency_filter(mdjm_format_amount($value)); echo '<br />'; } else { echo '<span class="mdjm-form-error">' . mdjm_currency_filter(mdjm_format_amount('0.00')) . '</span>'; } } else { echo '—'; } break; // Balance // Balance case 'balance': if (mdjm_employee_can('edit_txns')) { echo mdjm_currency_filter(mdjm_format_amount(mdjm_get_event_balance($post_id))); echo '<br />'; $deposit_status = mdjm_get_event_deposit_status($post_id); if ('Paid' == mdjm_get_event_deposit_status($post_id)) { printf(__('<i title="%s %s paid" class="fa fa-check-square-o" aria-hidden="true">', 'mobile-dj-manager'), mdjm_currency_filter(mdjm_format_amount(mdjm_get_event_deposit($post_id))), mdjm_get_deposit_label()); } } else { echo '—'; } break; // Playlist // Playlist case 'playlist': if (mdjm_employee_can('read_events')) { $total = mdjm_count_playlist_entries($post_id); echo '<a href="' . mdjm_get_admin_page('playlists') . $post_id . '">' . $total . ' ' . _n('Song', 'Songs', $total, 'mobile-dj-manager') . '</a>' . "\r\n"; } else { echo '—'; } break; // Journal // Journal case 'journal': if (mdjm_employee_can('read_events_all')) { $total = wp_count_comments($post_id)->approved; echo '<a href="' . admin_url('/edit-comments.php?p=' . $post_id) . '">' . $total . ' ' . _n('Entry', 'Entries', $total, 'mobile-dj-manager') . '</a>' . "\r\n"; } else { echo '—'; } break; } // switch }
public function single_event() { global $clientzone, $mdjm, $my_mdjm, $mdjm_settings, $post; if (isset($_POST['submit']) && $_POST['submit'] == 'Submit Changes') { $this->update_event(); } $event = isset($_GET['event_id']) ? get_post($_GET['event_id']) : $my_mdjm['next'][0]; $post = $event; if (!MDJM()->events->is_my_event($event->ID)) { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('ERROR: ' . get_current_user_id() . ' is attempting to access event ID ' . $event->ID . ' which is not theirs. In ' . __METHOD__, true); } wp_die($clientzone->display_message(9, 5), 'Event Ownership Error'); } $eventinfo = MDJM()->events->event_detail($event->ID); $expired = array('mdjm-failed', 'mdjm-cancelled', 'mdjm-completed'); // Event not active if (in_array($event->post_status, $expired)) { echo $clientzone->__text('home_notactive', '<p>The selected event is no longer active. <a href="' . mdjm_get_formatted_url(MDJM_CONTACT_PAGE, false) . '" title="Begin planning your next event with us">Contact us now</a> begin planning your next event.</p>'); } else { echo '<div id="mdjm_event_updated"></div>'; echo '<p>' . __('Below are the details of your upcoming event on ' . date('l, jS F Y', $eventinfo['date']) . '.') . '</p>' . "\r\n"; echo '<p>If any of the event details are incorrect, please <a href="mailto:' . $mdjm_settings['email']['system_email'] . '">contact me now</a>.</p>' . "\r\n"; // Incomplete Profile warning if (!$clientzone->client_profile_complete($my_mdjm['me']->ID) && $clientzone->warn_profile()) { $clientzone->display_notice(3, 'Your <a href="' . mdjm_get_formatted_url(MDJM_PROFILE_PAGE, false) . '">profile</a> appears to be incomplete. Please <a href="' . mdjm_get_formatted_url(MDJM_PROFILE_PAGE, false) . '">click here</a> to update it now. Incorrect <a href="' . mdjm_get_formatted_url(MDJM_PROFILE_PAGE, false) . '">profile</a> information can cause problems with your booking.'); } // Display the event details echo '<form name="mdjm_event" id="mdjm_event" method="post">' . "\r\n"; echo '<input type="hidden" name="event_id" id="event_id" value="' . $event->ID . '" />' . "\r\n"; wp_nonce_field('manage_client_event', '__mdjm_event'); $this->display_action_buttons($event->ID, $event->post_status); echo '<div id="mdjm-event-container">' . "\r\n"; echo '<div id="mdjm-event-table">' . "\r\n"; echo '<table id="mdjm-event-listing">' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th colspan="4"><span style="text-decoration: underline;">' . __('Event Details') . '</span> ' . $this->edit_event_link('edit', $event->ID) . '</th>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 20%;">' . __('Event Name:') . '</th>' . "\r\n"; echo '<td colspan="3">' . (!empty($eventinfo['name']) ? esc_attr($eventinfo['name']) : $eventinfo['type']) . '</span> ' . $this->edit_event_link('change', $event->ID) . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Status:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . __(get_post_status_object($event->post_status)->label) . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Your ' . MDJM_DJ . ':') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . (!empty($eventinfo['dj']->display_name) ? $eventinfo['dj']->display_name : $eventinfo['dj']) . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Event Date:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . date(MDJM_SHORTDATE_FORMAT, $eventinfo['date']) . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Event Type:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . __($eventinfo['type']) . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Start Time:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $eventinfo['start'] . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('End Time:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $eventinfo['finish'] . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; if (MDJM_PACKAGES == true) { echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Package:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">'; if (!empty($eventinfo['package'])) { $eventinfo['package'] = get_package_details($eventinfo['package']); echo !empty($eventinfo['package']) ? '<a title="' . (!empty($eventinfo['package']['desc']) ? $eventinfo['package']['desc'] : '') . (!empty($mdjm_settings['clientzone']['package_prices']) ? ' - ' . mdjm_currency_filter(mdjm_sanitize_amount($eventinfo['package']['cost'])) : '') . '">' . $eventinfo['package']['name'] . '</a>' : 'None'; } else { echo 'None'; } echo '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Addons:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">'; $eventinfo['addons'] = get_post_meta($event->ID, '_mdjm_event_addons', true); if (!empty($eventinfo['addons'])) { $i = 1; foreach ($eventinfo['addons'] as $addon) { $item = get_addon_details($addon); echo '<a title="' . (!empty($item['desc']) ? $item['desc'] : '') . (!empty($mdjm_settings['clientzone']['package_prices']) ? ' - ' . mdjm_currency_filter(mdjm_sanitize_amount($item['cost'])) : '') . '">' . $item['name'] . '</a>'; echo $i < count($eventinfo['addons']) ? '<br />' : ''; $i++; } } else { echo 'None'; } '</td>' . "\r\n"; echo '</tr>' . "\r\n"; } // if( MDJM_PACKAGES == true ) echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Total Cost:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $eventinfo['cost'] . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __(mdjm_get_deposit_label()) . ':</th>' . "\r\n"; echo '<td style="width: 35%;">' . $eventinfo['deposit'] . ' (' . __($eventinfo['deposit_status']) . ')</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __(mdjm_get_balance_label()) . ':</th>' . "\r\n"; echo '<td colspan="3">' . $eventinfo['balance'] . ' (' . __($eventinfo['balance_status']) . ')</td>' . "\r\n"; echo '</tr>' . "\r\n"; if (!empty($eventinfo['notes'])) { echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Information:') . '</th>' . "\r\n"; echo '<td colspan="3">' . stripslashes($eventinfo['notes']) . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; } echo '<tr>' . "\r\n"; echo '<td colspan="4"> </td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th colspan="4"><span style="text-decoration: underline;">' . __('Your Contact Details') . '</span> <a href="' . mdjm_get_formatted_url(MDJM_PROFILE_PAGE, false) . '">' . __('edit') . '</a></th>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Name:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $my_mdjm['me']->display_name . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Phone:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $my_mdjm['me']->phone1 . ' ' . (!empty($my_mdjm['me']->phone2) ? $my_mdjm['me']->phone2 : '') . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Email:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $my_mdjm['me']->user_email . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Address:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . $clientzone->get_client_address() . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<td colspan="4"> </td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '<tr>' . "\r\n"; echo '<th colspan="4"><span style="text-decoration: underline;">' . __('Venue Details') . '</span></th>' . "\r\n"; echo '</tr>' . "\r\n"; $venue_details = MDJM()->events->mdjm_get_venue_details(get_post_meta($event->ID, '_mdjm_event_venue_id', true), $event->ID); echo '<tr>' . "\r\n"; echo '<th style="width: 15%;">' . __('Venue:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . stripslashes($venue_details['name']) . '</td>' . "\r\n"; echo '<th style="width: 15%;">' . __('Address:') . '</th>' . "\r\n"; echo '<td style="width: 35%;">' . implode('<br />', $venue_details['full_address']) . '</td>' . "\r\n"; echo '</tr>' . "\r\n"; echo '</table>' . "\r\n"; echo '</div>' . "\r\n"; // End div mdjm-event-table echo '</div>' . "\r\n"; // End div mdjm-event-container echo '</form>' . "\r\n"; } // foreach( $posts as $post ) }
/** * 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); $employees = mdjm_get_employees(); foreach ($employees as $employee) { $event_count = 0; $employee_id = $employee->ID; $event_args = array('post_status' => apply_filters('mdjm_events_by_type_statuses', array('mdjm-contract', 'mdjm-approved', 'mdjm-completed')), 'fields' => 'ids', 'meta_query' => array('relation' => 'AND', 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'), array('relation' => 'OR', array('key' => '_mdjm_event_dj', 'value' => $employee_id, 'compare' => '=', 'type' => 'numeric'), array('key' => '_mdjm_event_employees', 'value' => sprintf(':"%s";', $employee_id), 'compare' => 'LIKE')))); $wages = 0.0; $paid = 0.0; $owed = 0.0; $events = mdjm_get_events($event_args); if ($events) { foreach ($events as $event) { $event_count++; $payment_status = mdjm_event_employees_paid($event, $employee_id); $current_wages = mdjm_get_employees_event_wage($event, $employee_id); $current_paid_wages = 0; $current_owed_wages = 0; $wages += $current_wages; $paid += $payment_status ? $current_wages : 0.0; $owed += $payment_status ? 0.0 : $current_wages; } } else { continue; } $reports_data[] = array('ID' => $employee->ID, 'employee' => $employee->display_name, 'total_events' => $event_count, 'total_wages' => mdjm_currency_filter(mdjm_format_amount($wages)), 'total_wages_raw' => $wages, 'wages_paid' => mdjm_currency_filter(mdjm_format_amount($paid)), 'wages_owed' => mdjm_currency_filter(mdjm_format_amount($owed)), 'is_child' => false); } } return $reports_data; }
public function event_detail($post_id) { global $mdjm; if (empty($post_id) || !is_string(get_post_status($post_id))) { return; } $event_stati = mdjm_all_event_status(); $name = get_post_meta($post_id, '_mdjm_event_name', true); $date = get_post_meta($post_id, '_mdjm_event_date', true); $end_date = get_post_meta($post_id, '_mdjm_event_end_date', true); $client = get_post_meta($post_id, '_mdjm_event_client', true); $dj = get_post_meta($post_id, '_mdjm_event_dj', true); $dj_wage = get_post_meta($post_id, '_mdjm_event_dj_wage', true); $cost = get_post_meta($post_id, '_mdjm_event_cost', true); $deposit = get_post_meta($post_id, '_mdjm_event_deposit', true); $deposit_status = get_post_meta($post_id, '_mdjm_event_deposit_status', true); $paid = MDJM()->txns->get_transactions($post_id, 'mdjm-income'); $balance_status = get_post_meta($post_id, '_mdjm_event_balance_status', true); $start = get_post_meta($post_id, '_mdjm_event_start', true); $finish = get_post_meta($post_id, '_mdjm_event_finish', true); $status = !empty($event_stati[get_post_status($post_id)]) ? $event_stati[get_post_status($post_id)] : ''; $setup_date = get_post_meta($post_id, '_mdjm_event_djsetup', true); $setup_time = get_post_meta($post_id, '_mdjm_event_djsetup_time', true); $contract = get_post_meta($post_id, '_mdjm_event_contract', true); $contract_date = get_post_meta($post_id, '_mdjm_event_contract_approved', true); $signed_contract = get_post_meta($post_id, '_mdjm_event_signed_contract', true); $notes = get_post_meta($post_id, '_mdjm_event_notes', true); $dj_notes = get_post_meta($post_id, '_mdjm_event_dj_notes', true); $admin_notes = get_post_meta($post_id, '_mdjm_event_admin_notes', true); $package = get_post_meta($post_id, '_mdjm_event_package', true); $addons = get_post_meta($post_id, '_mdjm_event_addons', true); $online_quote = get_post_meta($post_id, '_mdjm_online_quote', true); $guest_playlist = get_post_meta($post_id, '_mdjm_event_playlist_access', true); $eventinfo = array('name' => !empty($name) ? $name : '', 'date' => !empty($date) && is_int(strtotime($date)) ? strtotime($date) : __('Not Specified', 'mobile-dj-manager'), 'end_date' => !empty($end_date) && is_int(strtotime($end_date)) ? strtotime($end_date) : __('Not Specified', 'mobile-dj-manager'), 'client' => !empty($client) ? get_userdata($client) : '', 'dj' => !empty($dj) ? get_userdata($dj) : __('Not Assigned', 'mobile-dj-manager'), 'dj_wage' => !empty($dj_wage) ? mdjm_currency_filter(mdjm_sanitize_amount($dj_wage)) : __('Not Specified', 'mobile-dj-manager'), 'start' => !empty($start) ? date(MDJM_TIME_FORMAT, strtotime($start)) : __('Not Specified', 'mobile-dj-manager'), 'finish' => !empty($finish) ? date(MDJM_TIME_FORMAT, strtotime($finish)) : __('Not Specified', 'mobile-dj-manager'), 'status' => !empty($status) ? $status : '', 'setup_date' => !empty($setup_date) ? strtotime($setup_date) : __('Not Specified', 'mobile-dj-manager'), 'setup_time' => !empty($setup_time) ? date(MDJM_TIME_FORMAT, strtotime($setup_time)) : __('Not Specified', 'mobile-dj-manager'), 'cost' => !empty($cost) ? mdjm_currency_filter(mdjm_sanitize_amount($cost)) : __('Not Specified', 'mobile-dj-manager'), 'deposit' => !empty($deposit) ? mdjm_currency_filter(mdjm_sanitize_amount($deposit)) : '0.00', 'balance' => !empty($paid) && $paid != '0.00' && !empty($cost) ? mdjm_currency_filter(mdjm_sanitize_amount($cost - $paid)) : mdjm_currency_filter(mdjm_sanitize_amount($cost)), 'deposit_status' => !empty($deposit_status) ? $deposit_status : __('Due', 'mobile-dj-manager'), 'balance_status' => !empty($balance_status) ? $balance_status : __('Due', 'mobile-dj-manager'), 'payment_history' => MDJM()->txns->list_event_transactions($post_id), 'type' => $this->get_event_type($post_id), 'online_quote' => mdjm_get_option('online_enquiry', false) && !empty($online_quote) ? $online_quote : '', 'contract' => !empty($contract) ? $contract : '', 'contract_date' => !empty($contract_date) ? date(MDJM_SHORTDATE_FORMAT, strtotime($contract_date)) : date(MDJM_SHORTDATE_FORMAT), 'signed_contract' => !empty($signed_contract) ? $signed_contract : '', 'notes' => !empty($notes) ? $notes : '', 'dj_notes' => !empty($dj_notes) ? $dj_notes : '', 'admin_notes' => !empty($admin_notes) ? $admin_notes : '', 'package' => !empty($package) ? $package : '', 'addons' => !empty($addons) ? implode("\n", $addons) : '', 'guest_playlist' => !empty($guest_playlist) ? mdjm_get_formatted_url(MDJM_PLAYLIST_PAGE) . 'mdjmeventid=' . $guest_playlist : ''); // Allow the $eventinfo array to be filtered $eventinfo = apply_filters('mdjm_event_info', $eventinfo); return $eventinfo; }
/** * Define the data to be displayed in each of the custom columns for the Transaction post types * * @since 0.9 * @param str $column_name The name of the column to display * @param int $post_id The current post ID * @return */ function mdjm_transaction_posts_custom_column($column_name, $post_id) { switch ($column_name) { // Details case 'detail': $trans_types = get_the_terms($post_id, 'transaction-types'); if (is_array($trans_types)) { foreach ($trans_types as $key => $trans_type) { $trans_types[$key] = $trans_type->name; } echo implode("<br/>", $trans_types); } break; // Date // Date case 'txn_date': echo get_post_time('d M Y'); break; // Direction // Direction case 'direction': if ('mdjm-income' == get_post_status($post_id)) { echo '<span style="color:green">' . __('In', 'mobile-dj-manager') . '</span>'; } else { echo '<span style="color:red"> ' . __('Out', 'mobile-dj-manager') . '</span>'; } break; // Source // Source case 'payee': echo mdjm_get_txn_recipient_name($post_id); break; // Event // Event case 'event': $parent = wp_get_post_parent_id($post_id); if (!empty($parent)) { printf('<a href="%s">%s</a>', admin_url("/post.php?post={$parent}&action=edit"), mdjm_get_option('') . $parent); } else { echo __('N/A', 'mobile-dj-manager'); } break; // Value // Value case 'txn_value': echo mdjm_currency_filter(mdjm_format_amount(get_post_meta($post_id, '_mdjm_txn_total', true))); break; // Status // Status case 'txn_status': echo get_post_meta($post_id, '_mdjm_txn_status', true); break; } // switch }
/** * 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; }
/** * Updates an event once a payment is completed. * * @since 1.3.8 * @param arr $txn_data Transaction data from gateway. * @return void */ function mdjm_update_event_after_payment($txn_data) { $type = mdjm_get_txn_type($txn_data['txn_id']); if ($type == mdjm_get_deposit_label()) { $meta['_mdjm_event_deposit_status'] = 'Paid'; } else { if ($type == mdjm_get_balance_label()) { $meta['_mdjm_event_deposit_status'] = 'Paid'; $meta['_mdjm_event_balance_status'] = 'Paid'; } else { if (mdjm_get_event_remaining_deposit($txn_data['event_id']) < 1) { $meta['_mdjm_event_deposit_status'] = 'Paid'; } if (mdjm_get_event_balance($txn_data['event_id']) < 1) { $meta['_mdjm_event_deposit_status'] = 'Paid'; $meta['_mdjm_event_balance_status'] = 'Paid'; } } } mdjm_update_event_meta($txn_data['event_id'], $meta); // Update the journal mdjm_add_journal(array('user_id' => $txn_data['client_id'], 'event_id' => $txn_data['event_id'], 'comment_content' => sprintf(__('%s of %s received via %s', 'mobile-dj-manager'), $type, mdjm_currency_filter(mdjm_format_amount($txn_data['total'])), mdjm_get_gateway_admin_label($txn_data['gateway'])))); }
/** * Mark an event employee as paid. * * @since 1.3 * @param int $employee_id User ID of employee * @param int $event_id Event ID * @param int $txn_id The transaction ID associated with this payment. * @return bool True if payment data updated for event employee, otherwise false. */ function mdjm_set_employee_paid($employee_id, $event_id, $txn_id = '') { global $wp_roles; if (!mdjm_get_option('enable_employee_payments')) { return; } if (!mdjm_is_employee($employee_id)) { return false; } $return = false; if ($employee_id == mdjm_get_event_primary_employee($event_id)) { /** * * Hook fires before marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. */ do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id); $role = 'dj'; $payment = mdjm_get_txn_price($txn_id); $payment_data = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true); $payment_data['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid'; $payment_data['payment_date'] = current_time('mysql'); $payment_data['txn_id'] = $txn_id; $payment_data['payment_amount'] = $payment; $payment_update = update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data); if (!empty($payment_update)) { MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id)); $return = true; } else { MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id)); $return = false; } } else { $payment_data = get_post_meta($event_id, '_mdjm_event_employees_data', true); if (!mdjm_employee_working_event($event_id, $employee_id)) { MDJM()->debug->log_it('Employee not working this event'); return false; } else { /** * * Hook fires before marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. */ do_action("mdjm_pre_mdjm_set_employee_paid_{$employee_id}", $event_id); $role = $payment_data[$employee_id]['role']; $payment = mdjm_get_txn_price($payment_data[$employee_id]['txn_id']); $payment_data[$employee_id]['payment_status'] = mdjm_get_employees_event_wage($event_id, $employee_id) > $payment ? 'part-paid' : 'paid'; $payment_data[$employee_id]['payment_date'] = current_time('mysql'); $payment_data[$employee_id]['payment_amount'] = $payment; $payment_update = mdjm_update_txn_meta($payment_data[$employee_id]['txn_id'], array('_mdjm_txn_status' => 'Completed')); if (!empty($payment_update)) { $payment_update = update_post_meta($event_id, '_mdjm_event_employees_data', $payment_data); } if (!empty($payment_update)) { MDJM()->debug->log_it(sprintf('%s successfully paid %s for Event %d', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_get_txn_price($txn_id)), $event_id)); $return = true; } else { MDJM()->debug->log_it(sprintf('Unable to pay %s for Event %d', mdjm_get_employee_display_name($employee_id), $event_id)); $return = false; } } } if (!empty($return)) { $journal_args = array('user_id' => 1, 'event_id' => $event_id, 'comment_content' => sprintf(__('Employee %s paid %s for their role as %s', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $payment, translate_user_role($wp_roles->roles[$role]['name']))); $journal_meta = array('mdjm_visibility' => !empty($meta['visibility']) ? $meta['visibility'] : '2'); mdjm_add_journal($journal_args, $journal_meta); /** * * Hook fires after successfully marking event employee as paid. * * @since 1.3 * @param int $event_id The event ID. * @param int $txn_id The transaction ID associated with the payment */ do_action("mdjm_post_mdjm_set_employee_paid_{$employee_id}", $event_id, $txn_id); } return $return; }
/** * Individual Price Row * * Used to output a table row for each price associated with an add-on. * Can be called directly, or attached to an action. * * @since 1.3.9 * * @param int $key * @param arr $args * @param int $post_id * @param int $index */ function mdjm_addon_metabox_price_row($key, $args, $post_id, $index) { $defaults = array('name' => null, 'amount' => null); $args = wp_parse_args($args, $defaults); $currency_position = mdjm_get_option('currency_format', 'before'); ?> <td> <?php echo MDJM()->html->month_dropdown(array('name' => '_addon_variable_prices[' . $key . '][months]', 'selected' => !empty($args['months']) ? $args['months'] : '', 'fullname' => true, 'multiple' => true, 'chosen' => true, 'placeholder' => __('Select Months', 'mobile-dj-manager'))); ?> </td> <td> <?php $price_args = array('name' => '_addon_variable_prices[' . $key . '][amount]', 'value' => mdjm_format_amount($args['amount']), 'placeholder' => mdjm_format_amount(10.0), 'class' => 'mdjm-price-field'); ?> <?php if ($currency_position == 'before') { ?> <span><?php echo mdjm_currency_filter(''); ?> </span> <?php echo MDJM()->html->text($price_args); ?> <?php } else { ?> <?php echo MDJM()->html->text($price_args); ?> <?php echo mdjm_currency_filter(''); ?> <?php } ?> </td> <?php do_action('mdjm_addon_price_table_row', $post_id, $key, $args); ?> <td> <a href="#" class="mdjm_remove_repeatable" data-type="price" style="background: url(<?php echo admin_url('/images/xit.gif'); ?> ) no-repeat;">×</a> </td> <?php }
/** * Load Admin Scripts * * Enqueues the required scripts for admin. * * @since 1.3 * @return void */ function mdjm_register_admin_scripts($hook) { $js_dir = MDJM_PLUGIN_URL . '/assets/js/'; wp_register_script('jquery-chosen', $js_dir . 'chosen.jquery.js', array('jquery'), MDJM_VERSION_NUM); wp_enqueue_script('jquery-chosen'); wp_enqueue_script('jquery-ui-datepicker', array('jquery')); if (strpos($hook, 'mdjm')) { wp_enqueue_script('jquery'); } $editing_event = false; $require_validation = array('mdjm-event_page_mdjm-comms'); $sortable = array('admin_page_mdjm-custom-event-fields', 'admin_page_mdjm-custom-client-fields'); if ('post.php' == $hook || 'post-new.php' == $hook) { if (isset($_GET['post']) && 'mdjm-addon' == get_post_type($_GET['post'])) { $sortable[] = 'post.php'; $sortable[] = 'post-new.php'; } if (isset($_GET['post']) && 'mdjm-event' == get_post_type($_GET['post'])) { $editing_event = true; } if (isset($_GET['post_type']) && 'mdjm-event' == $_GET['post_type']) { $editing_event = true; } if ($editing_event) { $require_validation[] = 'post.php'; $require_validation[] = 'post-new.php'; } } if (in_array($hook, $require_validation)) { wp_register_script('jquery-validation-plugin', '//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js', false); wp_enqueue_script('jquery-validation-plugin'); } if (in_array($hook, $sortable)) { wp_enqueue_script('jquery-ui-sortable'); } wp_register_script('mdjm-admin-scripts', $js_dir . 'admin-scripts.js', array('jquery'), MDJM_VERSION_NUM); wp_enqueue_script('mdjm-admin-scripts'); wp_localize_script('mdjm-admin-scripts', 'mdjm_admin_vars', apply_filters('mdjm_admin_script_vars', array('ajaxurl' => mdjm_get_ajax_url(), 'current_page' => $hook, 'editing_event' => $editing_event, 'load_recipient' => isset($_GET['recipient']) ? $_GET['recipient'] : false, 'ajax_loader' => MDJM_PLUGIN_URL . '/assets/images/loading.gif', 'no_client_first_name' => __('Enter a first name for the client', 'mobile-dj-manager'), 'no_client_email' => __('Enter an email address for the client', 'mobile-dj-manager'), 'no_txn_amount' => __('Enter a transaction value', 'mobile-dj-manager'), 'no_txn_date' => __('Enter a transaction date', 'mobile-dj-manager'), 'no_txn_for' => __('What is the transaction for?', 'mobile-dj-manager'), 'no_txn_src' => __('Enter a transaction source', 'mobile-dj-manager'), 'no_venue_name' => __('Enter a name for the venue', 'mobile-dj-manager'), 'currency' => mdjm_get_currency(), 'currency_symbol' => mdjm_currency_symbol(), 'currency_sign' => mdjm_currency_filter(''), 'currency_position' => mdjm_get_option('currency_format', 'before'), 'currency_decimals' => mdjm_currency_decimal_filter(), 'deposit_is_pct' => 'percentage' == mdjm_get_event_deposit_type() ? true : false, 'update_deposit' => 'percentage' == mdjm_get_event_deposit_type() ? true : false, 'select_months' => __('Select Months', 'mobile-dj-manager'), 'one_month_min' => __('You must have a pricing option for at least one month', 'mobile-dj-manager'), 'one_item_min' => __('Select at least one Add-on', 'mobile-dj-manager'), 'min_travel_distance' => mdjm_get_option('travel_min_distance'), 'update_travel_cost' => mdjm_get_option('travel_add_cost', false)))); wp_register_script('jquery-flot', $js_dir . 'jquery.flot.js'); wp_enqueue_script('jquery-flot'); }
/** * Content tag: travel_cost. * The travel cost for the event. * * @param int The event ID. * * @return str Formatted event travel cost. */ function mdjm_content_tag_travel_cost($event_id = '') { if (empty($event_id)) { return; } $travel_cost = mdjm_get_event_travel_data($event_id); if (!empty($travel_cost)) { return mdjm_currency_filter(mdjm_format_amount($travel_cost)); } }
/** * Addons List Shortcode. * * @param arr $atts Shortcode attributes. See $atts. * @param str|int $filter_value The value to which to filter $filter_by. Default false (all). * @param str $list List type to display. li for bulleted. Default p. * @param bool $cost Whether or not display the price. Default false. * * */ function mdjm_shortcode_addons_list($atts) { global $post; $atts = shortcode_atts(array('filter_by' => false, 'filter_value' => false, 'list' => 'p', 'desc' => false, 'desc_length' => mdjm_get_option('package_excerpt_length', 55), 'cost' => false, 'addon_class' => false, 'cost_class' => false, 'desc_class' => false), $atts, 'mdjm-addons'); ob_start(); $output = ''; if (!empty($post) && 'mdjm-package' == get_post_type($post->ID)) { $package_addons = mdjm_get_package_addons($post->ID); $addons = array(); foreach ($package_addons as $package) { $addons[] = mdjm_get_addon($package); } } elseif (!empty($atts['filter_by']) && !empty($atts['filter_value']) && $atts['filter_by'] != 'false' && $atts['filter_value'] != 'false') { // Filter addons by user if ($atts['filter_by'] == 'category') { $addons = mdjm_get_addons_in_category($atts['filter_value']); } elseif ($atts['filter_by'] == 'package') { if (!is_numeric($atts['filter_value'])) { // For backwards compatibility $package = mdjm_get_package_by('slug', $atts['filter_value']); if ($package) { $atts['filter_value'] = $package->ID; } } $package_addons = mdjm_get_package_addons($atts['filter_value']); $addons = array(); foreach ($package_addons as $package) { $addons[] = mdjm_get_addon($package); } } elseif ($atts['filter_by'] == 'user') { $addons = mdjm_get_addons_by_employee($atts['filter_value']); } } else { $addons = mdjm_get_addons(); } /** * Output the results */ if (!$addons) { $output .= '<p>' . __('No addons available', 'mobile-dj-manager') . '</p>'; } else { // Check to start bullet list if ($atts['list'] == 'li') { $output .= '<ul>'; } foreach ($addons as $addon) { // Output the remaining addons if (!empty($atts['list'])) { $output .= '<' . $atts['list'] . '>'; } if (!empty($atts['addon_class']) && $atts['addon_class'] != 'false') { $output = '<span class="' . $atts['addon_class'] . '">'; } $output .= $addon->post_title; if (!empty($atts['addon_class']) && $atts['addon_class'] != 'false') { $output = '</span>'; } $cost = mdjm_get_addon_price($addon->ID); if (!empty($atts['cost']) && $atts['cost'] != 'false' && !empty($cost)) { if (!empty($atts['cost_class']) && $atts['cost_class'] != 'false') { $output = '<span class="' . $atts['cost_class'] . '">'; } $output .= ' – ' . mdjm_currency_filter(mdjm_format_amount($cost)); if (!empty($atts['cost_class']) && $atts['cost_class'] != 'false') { $output = '</span>'; } } $desc = mdjm_get_addon_excerpt($addon->ID, $atts['desc_length']); if (!empty($atts['desc']) && $atts['desc'] != 'false' && !empty($desc)) { $output .= '<br />'; if (!empty($atts['desc_class']) && $atts['desc_class'] != 'false') { $output = '<span class="' . $atts['desc_class'] . '">'; } else { $output .= '<span style="font-style: italic; font-size: smaller;">'; } $output .= $desc; $output .= '</span>'; } if (!empty($atts['list'])) { $output .= '</' . $atts['list'] . '>'; } } // Check to end bullet list if ($atts['list'] == 'li') { $output .= '</ul>'; } } echo apply_filters('mdjm_shortcode_addons_list', $output); return ob_get_clean(); }
/** * Displays all event transactions within a table. * * @since 1.3.7 * @global obj $mdjm_event MDJM_Event class object * @param int $event_id * @return str */ function mdjm_do_event_txn_table($event_id) { global $mdjm_event; $event_txns = apply_filters('mdjm_event_txns', mdjm_get_event_txns($event_id, array('orderby' => 'post_status'))); $in = 0; $out = 0; ?> <table class="widefat mdjm_event_txn_list"> <thead> <tr> <th style="width: 20%"><?php _e('Date', 'mobile-dj-manager'); ?> </th> <th style="width: 20%"><?php _e('To/From', 'mobile-dj-manager'); ?> </th> <th style="width: 15%"><?php _e('In', 'mobile-dj-manager'); ?> </th> <th style="width: 15%"><?php _e('Out', 'mobile-dj-manager'); ?> </th> <th><?php _e('Details', 'mobile-dj-manager'); ?> </th> <?php do_action('mdjm_event_txn_table_head', $event_id); ?> </tr> </thead> <tbody> <?php if ($event_txns) { ?> <?php foreach ($event_txns as $event_txn) { ?> <?php $txn = new MDJM_Txn($event_txn->ID); ?> <tr class="mdjm_field_wrapper"> <td><a href="<?php echo get_edit_post_link($txn->ID); ?> "><?php echo mdjm_format_short_date($txn->post_date); ?> </a></td> <td><?php echo esc_attr(mdjm_get_txn_recipient_name($txn->ID)); ?> </td> <td> <?php if ($txn->post_status == 'mdjm-income') { ?> <?php $in += mdjm_sanitize_amount($txn->price); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($txn->price)); ?> <?php } else { ?> <?php echo '–'; ?> <?php } ?> </td> <td> <?php if ($txn->post_status == 'mdjm-expenditure') { ?> <?php $out += mdjm_sanitize_amount($txn->price); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($txn->price)); ?> <?php } else { ?> <?php echo '–'; ?> <?php } ?> </td> <td><?php echo $txn->get_type(); ?> </td> </tr> <?php } ?> <?php } else { ?> <tr> <td colspan="5"><?php printf(__('There are currently no transactions for this %s', 'mobile-dj-manager'), mdjm_get_label_singular(true)); ?> </td> </tr> <?php } ?> </tbody> <tfoot> <tr> <th style="width: 20%"> </th> <th style="width: 20%"> </th> <th style="width: 15%"><strong><?php echo mdjm_currency_filter(mdjm_format_amount($in)); ?> </strong></th> <th style="width: 15%"><strong><?php echo mdjm_currency_filter(mdjm_format_amount($out)); ?> </strong></th> <th><strong><?php printf(__('%s Earnings:', 'mobile-dj-manager'), mdjm_get_label_singular()); ?> <?php echo mdjm_currency_filter(mdjm_format_amount($in - $out)); ?> </strong></th> </tr> <?php do_action('mdjm_event_txn_table_foot', $event_id); ?> </tfoot> </table> <?php }
/** * Renders a dropdown list of equipment add-ons. * * @since 1.3.7 * @param arr $args @see $default * @return str */ public function addons_dropdown($args = array()) { $defaults = array('name' => 'event_addons', 'id' => '', 'class' => '', 'selected' => '', 'show_option_none' => __('No Addons', 'mobile-dj-manager'), 'show_option_all' => false, 'chosen' => false, 'employee' => false, 'event_type' => false, 'event_date' => false, 'placeholder' => null, 'multiple' => true, 'package' => '', 'cost' => true, 'desc' => false, 'titles' => false, 'options_only' => false, 'blank_first' => false, 'data' => array()); $args = wp_parse_args($args, $defaults); $options = array(); $titles = array(); $addons = mdjm_get_addons(); if ($addons) { foreach ($addons as $addon) { if (!empty($args['package'])) { if (is_numeric($args['package'])) { $package = mdjm_get_package($args['package']); } else { $package = mdjm_get_package_by('slug', $args['package']); } if ($package) { $package_items = mdjm_get_package_addons($package->ID); } if (!empty($package_items) && in_array($addon->ID, $package_items)) { continue; } } if (!empty($args['employee'])) { if (!mdjm_employee_has_addon($addon->ID, $args['employee'])) { continue; } } if ($args['event_type']) { if (!mdjm_addon_is_available_for_event_type($addon->ID, $args['event_type'])) { continue; } } if ($args['event_date']) { if (!mdjm_addon_is_available_for_event_date($addon->ID, $args['event_date'])) { continue; } } else { $args['event_date'] = NULL; } $price = ''; if ($args['cost'] == true) { $price .= ' - ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_addon_price($addon->ID, $args['event_date']))); } $desc = ''; if ($args['desc']) { $desc .= ' - ' . mdjm_get_addon_excerpt($addon->ID, $args['desc']); } $term = ''; $terms = get_the_terms($addon->ID, 'addon-category'); if (!empty($terms)) { $term = esc_html($terms[0]->name); } $args['options']['groups'][$term][] = array($addon->ID => $addon->post_title . $price . $desc); if ($args['titles']) { $titles[$addon->ID] = mdjm_get_addon_excerpt($addon->ID); } } } if (!empty($args['options']['groups'])) { ksort($args['options']['groups']); } if (!empty($titles)) { $args['titles'] = $titles; } $output = $this->select($args); return $output; }
/** * Adds the travel data row to the venue details metabox on the event screen. * * @since 1.4 * @param int|arr|obj $dest An address array, event ID, event object or venue ID. * @param int $employee_id An employee user ID. * @return void */ function mdjm_show_travel_data_row($dest, $employee_id = '') { $mdjm_travel = new MDJM_Travel(); if (!empty($employee_id)) { $mdjm_travel->__set('start_address', $mdjm_travel->get_employee_address($employee_id)); } $mdjm_travel->set_destination($dest); if (empty($employee_id)) { if (is_object($dest)) { $mdjm_travel->__set('start_address', $mdjm_travel->get_employee_address($dest->employee_id)); } elseif (is_numeric($dest)) { if ('mdjm-event' == get_post_type($dest)) { $mdjm_travel->__set('start_address', $mdjm_travel->get_employee_address(mdjm_get_event_primary_employee_id($dest))); } } } $mdjm_travel->get_travel_data(); $distance = ''; $duration = ''; $cost = ''; $directions_url = ''; $directions = $mdjm_travel->get_directions_url(); $class = 'mdjm-hidden'; if (!empty($mdjm_travel->data)) { $distance = mdjm_format_distance($mdjm_travel->data['distance'], false, true); $duration = mdjm_seconds_to_time($mdjm_travel->data['duration']); $cost = mdjm_currency_filter(mdjm_format_amount($mdjm_travel->get_cost())); $directions_url = $directions ? $directions : ''; $class = ''; } ob_start(); ?> <tr id="mdjm-travel-data" class="<?php echo $class; ?> "> <td><i class="fa fa-car" aria-hidden="true" title="<?php _e('Distance', 'mobile-dj-manager'); ?> "></i> <span class="mdjm-travel-distance"><?php echo $distance; ?> </span></td> <td><i class="fa fa-clock-o" aria-hidden="true" title="<?php _e('Travel Time', 'mobile-dj-manager'); ?> "></i> <span class="mdjm-travel-time"><?php echo $duration; ?> </span></td> <td><i class="fa fa-money" aria-hidden="true" title="<?php _e('Cost', 'mobile-dj-manager'); ?> "></i> <span class="mdjm-travel-cost"><?php echo $cost; ?> </span></td> </tr> <tr id="mdjm-travel-directions" class="<?php echo $class; ?> "> <td colspan="3"><i class="fa fa-map-signs" aria-hidden="true" title="<?php _e('Directions', 'mobile-dj-manager'); ?> "></i> <span class="mdjm-travel-directions"><a id="travel_directions" href="<?php echo $directions_url; ?> " target="_blank"><?php _e('Directions', 'mobile-dj-manager'); ?> </a></span></td> </tr> <?php $travel_data_row = ob_get_contents(); ob_end_clean(); echo $travel_data_row; }
/** * Get the package information for the given event * * @param int $event_id The event ID * @param bool $price True to include the package price. * @return str */ function get_event_package($event_id, $price = false) { _deprecated_function(__FUNCTION__, '1.4', 'mdjm_get_event_package()'); $return = __('No package is assigned to this event', 'mobile-dj-manager'); $package_price = ''; $event_package = mdjm_get_event_package($event_id); if (!empty($event_package)) { $return = mdjm_get_package_name($event_id); if (!empty($price)) { $return .= ' ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_package_price($event_package))); } } return $return; }
/** * Generate and display the content for the Events Overview dashboard widget. * * @since 1.3 * @param * @return */ function mdjm_widget_events_overview() { global $current_user; if (mdjm_employee_can('manage_mdjm')) { $stats = new MDJM_Stats(); $enquiry_counts = array('month' => 0, 'this_year' => 0, 'last_year' => 0); $conversion_counts = array('month' => 0, 'this_year' => 0, 'last_year' => 0); $enquiry_periods = array('month' => date('Y-m-01'), 'this_year' => date('Y-01-01'), 'last_year' => date('Y-01-01', strtotime('-1 year'))); foreach ($enquiry_periods as $period => $date) { $current_count = mdjm_count_events(array('start-date' => $date, 'end-date' => $period != 'last_year' ? date('Y-m-d') : date('Y-12-31', strtotime('-1 year')))); foreach ($current_count as $status => $count) { $enquiry_counts[$period] += $count; if (in_array($status, array('mdjm-approved', 'mdjm-contract', 'mdjm-completed', 'mdjm-cancelled'))) { $conversion_counts[$period] += $count; } } } $completed_counts = array('month' => 0, 'this_year' => 0, 'last_year' => 0); $event_periods = array('month' => array(date('Y-m-01'), date('Y-m-d')), 'this_year' => array(date('Y-01-01'), date('Y-m-d')), 'last_year' => array(date('Y-m-01', strtotime('-1 year')), date('Y-12-31', strtotime('-1 year')))); foreach ($event_periods as $period => $date) { $current_count = mdjm_count_events(array('date' => $date, 'status' => 'mdjm-completed')); foreach ($current_count as $status => $count) { $completed_counts[$period] += $count; } } $income_month = $stats->get_income_by_date(null, date('n'), date('Y')); $income_year = $stats->get_income_by_date(null, '', date('Y')); $income_last = $stats->get_income_by_date(null, '', date('Y') - 1); $expense_month = $stats->get_expenses_by_date(null, date('n'), date('Y')); $expense_year = $stats->get_expenses_by_date(null, '', date('Y')); $expense_last = $stats->get_expenses_by_date(null, '', date('Y') - 1); $earnings_month = $income_month - $expense_month; $earnings_year = $income_year - $expense_year; $earnings_last = $income_last - $expense_last; ?> <div class="mdjm_stat_grid"> <?php do_action('mdjm_before_events_overview'); ?> <table> <thead> <tr> <th> </th> <th><?php _e('MTD', 'mobile-dj-manager'); ?> </th> <th><?php _e('YTD', 'mobile-dj-manager'); ?> </th> <th><?php echo date('Y', strtotime('-1 year')); ?> </th> </tr> </thead> <tbody> <tr> <th><?php printf(__('%s Received', 'mobile-dj-manager'), get_post_status_object('mdjm-enquiry')->plural); ?> </th> <td><?php echo $enquiry_counts['month']; ?> </td> <td><?php echo $enquiry_counts['this_year']; ?> </td> <td><?php echo $enquiry_counts['last_year']; ?> </td> </tr> <tr> <th><?php printf(__('%s Converted', 'mobile-dj-manager'), get_post_status_object('mdjm-enquiry')->plural); ?> </th> <td><?php echo $conversion_counts['month']; ?> </td> <td><?php echo $conversion_counts['this_year']; ?> </td> <td><?php echo $conversion_counts['last_year']; ?> </td> </tr> <tr> <th><?php printf(__('%s Completed', 'mobile-dj-manager'), mdjm_get_label_plural()); ?> </th> <td><?php echo $completed_counts['month']; ?> </td> <td><?php echo $completed_counts['this_year']; ?> </td> <td><?php echo $completed_counts['last_year']; ?> </td> </tr> <tr> <th><?php _e('Income', 'mobile-dj-manager'); ?> </th> <td><?php echo mdjm_currency_filter(mdjm_format_amount($income_month)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($income_year)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($income_last)); ?> </td> </tr> <tr> <th><?php _e('Outgoings', 'mobile-dj-manager'); ?> </th> <td><?php echo mdjm_currency_filter(mdjm_format_amount($expense_month)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($expense_year)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($expense_last)); ?> </td> </tr> <tr> <th><?php _e('Earnings', 'mobile-dj-manager'); ?> </th> <td><?php echo mdjm_currency_filter(mdjm_format_amount($earnings_month)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($earnings_year)); ?> </td> <td><?php echo mdjm_currency_filter(mdjm_format_amount($earnings_last)); ?> </td> </tr> </tbody> </table> <p> <?php printf(__('<a href="%s">Create %s</a>', 'mobile-dj-manager'), admin_url('post-new.php?post_type=mdjm-event'), mdjm_get_label_singular()); ?> | <?php printf(__('<a href="%s">Manage %s</a>', 'mobile-dj-manager'), admin_url('edit.php?post_type=mdjm-event'), mdjm_get_label_plural()); ?> | <?php printf(__('<a href="%s">Transactions</a>', 'mobile-dj-manager'), admin_url('edit.php?post_type=mdjm-transaction')); ?> | <?php printf(__('<a href="%s">Settings</a>', 'mobile-dj-manager'), admin_url('admin.php?page=mdjm-settings')); ?> </p> <?php $sources = $stats->get_enquiry_sources_by_date('this_month'); ?> <?php if (!empty($sources)) { ?> <?php foreach ($sources as $count => $source) { ?> <p> <?php printf(__('<p>Most enquiries have been received via <strong>%s (%d)</strong> so far this month.', 'mobile-dj-manager'), $source, (int) $count); ?> </p> <?php } ?> <?php } else { ?> <p><?php _e('No enquiries yet this month.', 'mobile-dj-manager'); ?> </p> <?php } ?> <?php do_action('mdjm_after_events_overview'); ?> </div> <?php } }
/** * Define the data to be displayed in each of the custom columns for the Addon 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_addon_posts_custom_column($column_name, $post_id) { global $post; switch ($column_name) { // Category case 'addon_category': echo get_the_term_list($post_id, 'addon-category', '', ', ', ''); break; // Availability // Availability case 'availability': $output = array(); if (!mdjm_addon_is_restricted_by_date($post_id)) { $output[] = __('Always', 'mobile-dj-manager'); } else { $availability = mdjm_get_addon_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_addon_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_addon($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_addon_has_variable_prices($post_id)) { $range = mdjm_get_addon_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_addon_price($post_id))); } break; // Usage // Usage case 'usage': $packages = mdjm_count_packages_with_addon($post_id); $events = mdjm_count_events_with_addon($post_id); echo $packages . _n(' Package', ' Packages', $packages, 'mobile-dj-manager') . '<br />'; echo $events . ' ' . _n(mdjm_get_label_singular(), mdjm_get_label_plural(), $events, 'mobile-dj-manager'); break; } // switch }
/** * Set the CSV columns * * @access public * @since 1.4 * @return srr $cols All the columns */ public function csv_cols() { $cols = array('date' => __('Date', 'mobile-dj-manager'), 'earnings' => __('Earnings', 'mobile-dj-manager') . ' (' . html_entity_decode(mdjm_currency_filter('')) . ')'); return $cols; }
echo esc_html(mdjm_get_deposit_label()); ?> – <?php echo mdjm_currency_filter(mdjm_format_amount($mdjm_event->get_remaining_deposit())); ?> <br /> <input type="radio" name="mdjm_payment_amount" id="mdjm-payment-balance" value="balance"<?php echo $balance_disabled; checked($selected, 'balance'); ?> /> <?php echo esc_html(mdjm_get_balance_label()); ?> – <?php echo mdjm_currency_filter(mdjm_format_amount($mdjm_event->get_balance())); ?> <br /> <input type="radio" name="mdjm_payment_amount" id="mdjm-payment-part" value="part_payment"<?php checked($selected, 'part_payment'); ?> /> <?php echo mdjm_get_other_amount_label(); ?> <span id="mdjm-payment-custom"<?php echo $other_amount_style; ?> ><?php echo mdjm_currency_symbol(); ?>
/** * Display graph totals. * * @since 1.4 */ public function graph_totals() { ?> <p class="mdjm_graph_totals"> <strong> <?php _e('Total transactions for period shown: ', 'mobile-dj-manager'); echo $this->total_txn_count; ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Income for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($this->total_txn_income)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Expenses for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($this->total_txn_expense)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Earnings for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($this->total_txn_income - $this->total_txn_expense)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Total turnover for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($this->total_txn_income + $this->total_txn_expense)); ?> </strong> </p> <?php }
/** * Renders the HTML code for an Addons checkbox list * * @since 1.0 * @param arr $args See @defaultsSettings for the dropdown * @return HTML output for checkboxes */ function mdjm_addons_checkboxes($args = array()) { global $current_user; $defaults = array('name' => 'event_addons', 'id' => '', 'class' => '', 'current' => array(), 'employee' => is_user_logged_in() && !current_user_can('client') ? $current_user->ID : '', 'package' => '', 'event_type' => false, 'event_date' => false, 'title' => true, 'cost' => false); $args = wp_parse_args($args, $defaults); $output = ''; $options = array(); $addons = mdjm_get_addons(); if (empty($args['id'])) { $args['id'] = $args['name']; } // For backwards compatibility if (isset($args['dj'])) { $args['employee'] = $args['dj']; } if ($addons) { foreach ($addons as $addon) { if (!empty($args['package'])) { if (is_numeric($args['package'])) { $package = mdjm_get_package($args['package']); } else { $package = mdjm_get_package_by('slug', $args['package']); } if ($package) { $package_items = mdjm_get_package_addons($package->ID); } if (!empty($package_items) && in_array($addon->ID, $package_items)) { continue; } } if (!empty($args['employee'])) { if (!mdjm_employee_has_addon($addon->ID, $args['employee'])) { continue; } } if ($args['event_type']) { if (!mdjm_addon_is_available_for_event_type($addon->ID, $args['event_type'])) { continue; } } if ($args['event_date']) { if (!mdjm_addon_is_available_for_event_date($addon->ID, $args['event_date'])) { continue; } } else { $args['event_date'] = NULL; } $price = ''; if ($args['cost'] == true) { $price .= ' - ' . mdjm_currency_filter(mdjm_format_amount(mdjm_get_addon_price($addon->ID, $args['event_date']))); } $term = ''; $terms = get_the_terms($addon->ID, 'addon-category'); if (!empty($terms)) { $term = esc_html($terms[0]->name); } $options[$term][] = array($addon->ID => $addon->post_title . $price); } } if (!empty($options)) { ksort($options); $i = 0; foreach ($options as $term => $addons) { if ($i == 0) { $output .= '<strong>' . $term . '</strong><br />' . "\n"; } foreach ($addons as $items) { foreach ($items as $item_id => $item) { $output .= sprintf('<input type="checkbox" name="%1$s[]" id="%1$s-%2$d" class="%3$s" value="%2$d" %4$s />', esc_attr($args['name']), $item_id, sanitize_html_class($args['class']), checked(in_array($item_id, $args['current']), true, false)); $output .= '<label for="' . esc_attr($args['name']) . '-' . $item_id . '" title="' . mdjm_get_addon_excerpt($item_id) . '">'; $output .= esc_html($item); $output .= '</label>'; $output .= '<br />'; $i++; if ($i >= count($items)) { $i = 0; } } } } } else { $output .= __('No add-ons are available', 'mobile-dj-manager'); } return $output; }
/** * Retrieves the total of all transactions over the given date period. * Total income - total expenditure if $status = any * * @since 1.4 * @param str $period The date period for which to collect the stats * @param int $status The transaction status' for which to collect the stats * @return int $total The total value for all transactions that meet the criteria */ public function get_txns_total_by_date($period = 'this_week', $status = 'any') { $this->setup_dates($period); $args = array('post_status' => $status, 'date_query' => array($this->start_date), 'meta_query' => array(array('key' => '_mdjm_txn_status', 'value' => 'Completed'))); $txns = mdjm_get_txns($args); $total = 0; if ($txns) { foreach ($txns as $txn) { if ($args['post_status'] == 'any') { if ($txn->post_status == 'mdjm-income') { $total += mdjm_sanitize_amount(get_post_meta($txn->ID, '_mdjm_txn_total', true)); } else { $total -= mdjm_sanitize_amount(get_post_meta($txn->ID, '_mdjm_txn_total', true)); } } else { $total += mdjm_sanitize_amount(get_post_meta($txn->ID, '_mdjm_txn_total', true)); } } } $total = apply_filters('get_txns_total_by_date', $total, $period, $status); return mdjm_currency_filter(mdjm_format_amount($total)); }
/** * Show report graphs for earnings. * * @since 1.4 * @return void */ function mdjm_transactions_reports_graph() { // Retrieve the queried dates $dates = mdjm_get_report_dates(); $stats = new MDJM_Stats(); // Determine graph options switch ($dates['range']) { case 'today': case 'yesterday': $day_by_day = true; break; case 'last_year': case 'this_year': $day_by_day = false; break; case 'last_quarter': case 'this_quarter': $day_by_day = true; break; case 'other': if ($dates['m_end'] - $dates['m_start'] >= 3 || $dates['year_end'] > $dates['year'] && $dates['m_start'] - $dates['m_end'] != 10) { $day_by_day = false; } else { $day_by_day = true; } break; default: $day_by_day = true; break; } $income_totals = 0.0; // Total income for time period shown $expense_totals = 0.0; // Total expense for time period shown $events_totals = 0; // Total events for the time period shown if ($dates['range'] == 'today' || $dates['range'] == 'yesterday') { // Hour by hour $hour = 1; $month = $dates['m_start']; while ($hour <= 23) { $income = $stats->get_income_by_date($dates['day'], $month, $dates['year'], $hour); $expense = $stats->get_expenses_by_date($dates['day'], $month, $dates['year'], $hour); $events = $stats->get_events_by_date($dates['day'], $month, $dates['year'], $hour); $income_totals += $income; $expense_totals += $expense; $events_totals += $events; $date = mktime($hour, 0, 0, $month, $dates['day'], $dates['year']) * 1000; $income_data[] = array($date, $income); $expense_data[] = array($date, $expense); $events_data[] = array($date, $events); $hour++; } } elseif ($dates['range'] == 'this_week' || $dates['range'] == 'last_week') { $num_of_days = cal_days_in_month(CAL_GREGORIAN, $dates['m_start'], $dates['year']); $report_dates = array(); $i = 0; while ($i <= 6) { if ($dates['day'] + $i <= $num_of_days) { $report_dates[$i] = array('day' => (string) $dates['day'] + $i, 'month' => $dates['m_start'], 'year' => $dates['year']); } else { $report_dates[$i] = array('day' => (string) $i, 'month' => $dates['m_end'], 'year' => $dates['year_end']); } $i++; } foreach ($report_dates as $report_date) { $income = $stats->get_income_by_date($report_date['day'], $report_date['month'], $report_date['year']); $income_totals += $income; $expense = $stats->get_expenses_by_date($report_date['day'], $report_date['month'], $report_date['year']); $expense_totals += $expense; $events = $stats->get_events_by_date($report_date['day'], $report_date['month'], $report_date['year']); $events_totals += $events; $date = mktime(0, 0, 0, $report_date['month'], $report_date['day'], $report_date['year']) * 1000; $income_data[] = array($date, $income); $expense_data[] = array($date, $expense); $events_data[] = array($date, $events); } } else { $y = $dates['year']; $temp_data = array('income' => array(), 'expense' => array()); while ($y <= $dates['year_end']) { $last_year = false; if ($dates['year'] == $dates['year_end']) { $month_start = $dates['m_start']; $month_end = $dates['m_end']; $last_year = true; } elseif ($y == $dates['year']) { $month_start = $dates['m_start']; $month_end = 12; } elseif ($y == $dates['year_end']) { $month_start = 1; $month_end = $dates['m_end']; } else { $month_start = 1; $month_end = 12; } $i = $month_start; while ($i <= $month_end) { $d = $dates['day']; if ($i == $month_end) { $num_of_days = $dates['day_end']; if ($month_start < $month_end) { $d = 1; } } else { $num_of_days = cal_days_in_month(CAL_GREGORIAN, $i, $y); } while ($d <= $num_of_days) { $income = $stats->get_income_by_date($d, $i, $y); $income_totals += $income; $expense = $stats->get_expenses_by_date($d, $i, $y); $expense_totals += $expense; $events = $stats->get_events_by_date($d, $i, $y); $events_totals += $events; $temp_data['income'][$y][$i][$d] = $income; $temp_data['expense'][$y][$i][$d] = $expense; $temp_data['events'][$y][$i][$d] = $events; $d++; } $i++; } $y++; } $income_data = array(); $expense_data = array(); // When using 3 months or smaller as the custom range, show each day individually on the graph if ($day_by_day) { foreach ($temp_data['income'] as $year => $months) { foreach ($months as $month => $days) { foreach ($days as $day => $income) { $date = mktime(0, 0, 0, $month, $day, $year) * 1000; $income_data[] = array($date, $income); } } } foreach ($temp_data['expense'] as $year => $months) { foreach ($months as $month => $days) { foreach ($days as $day => $expense) { $date = mktime(0, 0, 0, $month, $day, $year) * 1000; $expense_data[] = array($date, $expense); } } } foreach ($temp_data['events'] as $year => $months) { foreach ($months as $month => $days) { foreach ($days as $day => $events) { $date = mktime(0, 0, 0, $month, $day, $year) * 1000; $events_data[] = array($date, $events); } } } // When showing more than 3 months of results, group them by month, by the first (except for the last month, group on the last day of the month selected) } else { foreach ($temp_data['income'] as $year => $months) { $month_keys = array_keys($months); $last_month = end($month_keys); foreach ($months as $month => $days) { $day_keys = array_keys($days); $last_day = end($day_keys); $consolidated_date = $month === $last_month ? $last_day : 1; $income = array_sum($days); $date = mktime(0, 0, 0, $month, $consolidated_date, $year) * 1000; $income_data[] = array($date, $income); } } foreach ($temp_data['expense'] as $year => $months) { $month_keys = array_keys($months); $last_month = end($month_keys); foreach ($months as $month => $days) { $day_keys = array_keys($days); $last_day = end($day_keys); $consolidated_date = $month === $last_month ? $last_day : 1; $expense = array_sum($days); $date = mktime(0, 0, 0, $month, $consolidated_date, $year) * 1000; $expense_data[] = array($date, $expense); } } foreach ($temp_data['events'] as $year => $months) { $month_keys = array_keys($months); $last_month = end($month_keys); foreach ($months as $month => $days) { $day_keys = array_keys($days); $last_day = end($day_keys); $consolidated_date = $month === $last_month ? $last_day : 1; $events = array_sum($days); $date = mktime(0, 0, 0, $month, $consolidated_date, $year) * 1000; $events_data[] = array($date, $events); } } } } $data = array(__('Income', 'mobile-dj-manager') => $income_data, __('Expense', 'mobile-dj-manager') => $expense_data, mdjm_get_label_plural() => $events_data); // start our own output buffer ob_start(); ?> <div id="mdjm-dashboard-widgets-wrap"> <div class="metabox-holder" style="padding-top: 0;"> <div class="postbox"> <h3><span><?php _e('Transactions Over Time', 'mobile-dj-manager'); ?> </span></h3> <div class="inside"> <?php mdjm_reports_graph_controls(); $graph = new MDJM_Graph($data); $graph->set('x_mode', 'time'); $graph->set('multiple_y_axes', false); $graph->display(); ?> <p class="mdjm_graph_totals"> <strong> <?php _e('Total income for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($income_totals)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Total expense for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($expense_totals)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php _e('Total earnings for period shown: ', 'mobile-dj-manager'); echo mdjm_currency_filter(mdjm_format_amount($income_totals - $expense_totals)); ?> </strong> </p> <p class="mdjm_graph_totals"> <strong> <?php printf(__('Total %s for period shown: ', 'mobile-dj-manager'), mdjm_get_label_plural()); echo $events_totals; ?> </strong> </p> <?php do_action('mdjm_reports_transactions_graph_additional_stats'); ?> <p class="mdjm-graph-notes"> <span> <em><sup>†</sup> <?php printf(__('Stats include all %s taking place within the date period selected.', 'mobile-dj-manager'), mdjm_get_label_plural(true)); ?> </em> </span> </p> </div> </div> </div> </div> <?php // get output buffer contents and end our own buffer $output = ob_get_contents(); ob_end_clean(); echo $output; }
/** * Save the event transaction * * */ function mdjm_save_event_transaction_ajax() { global $mdjm_event; $result = array(); $mdjm_event = new MDJM_Event($_POST['event_id']); $mdjm_txn = new MDJM_Txn(); $txn_data = array('post_parent' => $_POST['event_id'], 'post_author' => $mdjm_event->client, 'post_status' => $_POST['direction'] == 'Out' ? 'mdjm-expenditure' : 'mdjm-income', 'post_date' => date('Y-m-d H:i:s', strtotime($_POST['date']))); $txn_meta = array('_mdjm_txn_status' => 'Completed', '_mdjm_payment_from' => $mdjm_event->client, '_mdjm_txn_total' => $_POST['amount'], '_mdjm_payer_firstname' => mdjm_get_client_firstname($mdjm_event->client), '_mdjm_payer_lastname' => mdjm_get_client_lastname($mdjm_event->client), '_mdjm_payer_email' => mdjm_get_client_email($mdjm_event->client), '_mdjm_payment_from' => mdjm_get_client_display_name($mdjm_event->client), '_mdjm_txn_source' => $_POST['src']); if ($_POST['direction'] == 'In') { if (!empty($_POST['from'])) { $txn_meta['_mdjm_payment_from'] = sanitize_text_field($_POST['from']); } else { $txn_meta['_mdjm_payment_from'] = mdjm_get_client_display_name($mdjm_event->client); } } if ($_POST['direction'] == 'Out') { if (!empty($_POST['to'])) { $txn_meta['_mdjm_payment_to'] = sanitize_text_field($_POST['to']); } else { $txn_meta['_mdjm_payment_to'] = mdjm_get_client_display_name($mdjm_event->client); } } $mdjm_txn->create($txn_data, $txn_meta); if ($mdjm_txn->ID > 0) { $result['type'] = 'success'; mdjm_set_txn_type($mdjm_txn->ID, $_POST['for']); $args = array('user_id' => get_current_user_id(), 'event_id' => $_POST['event_id'], 'comment_content' => sprintf(__('%1$s payment of %2$s received for %3$s %4$s.', 'mobile-dj-manager'), $_POST['direction'] == 'In' ? __('Incoming', 'mobile-dj-manager') : __('Outgoing', 'mobile-dj-manager'), mdjm_currency_filter(mdjm_format_amount($_POST['amount'])), mdjm_get_label_singular(true), mdjm_get_event_contract_id($_POST['event_id']))); mdjm_add_journal($args); // Email overide if (empty($_POST['send_notice']) && mdjm_get_option('manual_payment_cfm_template')) { $manual_email_template = mdjm_get_option('manual_payment_cfm_template'); mdjm_update_option('manual_payment_cfm_template', 0); } $payment_for = $mdjm_txn->get_type(); $amount = mdjm_currency_filter(mdjm_format_amount($_POST['amount'])); mdjm_add_content_tag('payment_for', __('Reason for payment', 'mobile-dj-manager'), function () use($payment_for) { return $payment_for; }); mdjm_add_content_tag('payment_amount', __('Payment amount', 'mobile-dj-manager'), function () use($amount) { return $amount; }); mdjm_add_content_tag('payment_date', __('Date of payment', 'mobile-dj-manager'), 'mdjm_content_tag_ddmmyyyy'); /** * Allow hooks into this payment. The hook is suffixed with 'in' or 'out' depending * on the payment direction. i.e. mdjm_post_add_manual_txn_in and mdjm_post_add_manual_txn_out * * @since 1.3.7 * @param int $event_id * @param obj $txn_id */ do_action('mdjm_post_add_manual_txn_' . strtolower($_POST['direction']), $_POST['event_id'], $mdjm_txn->ID); // Email overide if (empty($_POST['send_notice']) && isset($manual_email_template)) { mdjm_update_option('manual_payment_cfm_template', $manual_email_template); } $result['deposit_paid'] = 'N'; $result['balance_paid'] = 'N'; if ($mdjm_event->get_remaining_deposit() < 1) { mdjm_update_event_meta($mdjm_event->ID, array('_mdjm_event_deposit_status' => 'Paid')); $result['deposit_paid'] = 'Y'; } if ($mdjm_event->get_balance() < 1) { mdjm_update_event_meta($mdjm_event->ID, array('_mdjm_event_balance_status' => 'Paid')); mdjm_update_event_meta($mdjm_event->ID, array('_mdjm_event_deposit_status' => 'Paid')); $result['balance_paid'] = 'Y'; $result['deposit_paid'] = 'Y'; } } else { $result['type'] = 'error'; $result['msg'] = __('Unable to add transaction', 'mobile-dj-manager'); } ob_start(); mdjm_do_event_txn_table($_POST['event_id']); $result['transactions'] = ob_get_contents(); ob_get_clean(); echo json_encode($result); die; }
public function notification_content($task) { global $mdjm, $mdjm_settings; if (empty($task)) { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('ERROR: No task was parsed ' . __METHOD__); } } else { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Creating notification content for ' . $task['taskinfo']['name']); } } /* -- Start the email content -- */ $content = 'The ' . $task['taskinfo']['name'] . ' scheduled task from ' . MDJM_COMPANY . ' has completed. ' . "\r\n" . "\r\n" . 'Task Start time: ' . date('H:i:s l, jS F Y', $task['start']) . "\r\n" . "\r\n"; /* Build the email content relating to the current task */ switch ($task['taskinfo']['slug']) { case 'complete-events': // Notification content for Complete Events task $content .= $task['total'] . ' event(s) have been marked as completed...' . "\r\n" . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; /* -- List each event -- */ foreach ($task['data'] as $eventinfo) { $content .= 'Event ID: ' . $eventinfo['id'] . "\r\n" . 'Date: ' . $eventinfo['date'] . "\r\n" . 'Venue: ' . $eventinfo['venue'] . "\r\n" . 'Client: ' . $eventinfo['client'] . "\r\n" . 'DJ: ' . $eventinfo['djinfo']->display_name . "\r\n" . 'Link: ' . get_edit_post_link($eventinfo['id'], '') . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; } // End Foreach break; case 'fail-enquiry': $content .= $task['total'] . ' enquiry(s) have been marked as lost...' . "\r\n" . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; foreach ($task['data'] as $eventinfo) { $content .= 'Event ID: ' . $eventinfo['id'] . "\r\n" . 'Date: ' . $eventinfo['date'] . "\r\n" . 'Client: ' . $eventinfo['client'] . "\r\n" . 'DJ: ' . $eventinfo['djinfo']->display_name . "\r\n" . 'Link: ' . get_edit_post_link($eventinfo['id'], '') . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; } // End Foreach break; case 'request-deposit': $content .= $task['total'] . ' deposit requests ' . (!empty($task['taskinfo']['options']['email_client']) && $task['taskinfo']['options']['email_client'] == 'Y' ? ' have been sent' : ' need to be requested') . "\r\n" . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; foreach ($task['data'] as $eventinfo) { $content .= 'Event ID: ' . $eventinfo['id'] . "\r\n" . 'Date: ' . $eventinfo['date'] . "\r\n" . 'Client: ' . $eventinfo['client'] . "\r\n" . 'DJ: ' . $eventinfo['djinfo']->display_name . "\r\n" . mdjm_get_deposit_label() . ': ' . mdjm_currency_filter(mdjm_sanitize_amount($eventinfo['deposit'])) . "\r\n" . 'Link: ' . get_edit_post_link($eventinfo['id'], '') . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; } // End Foreach break; case 'balance-reminder': $content .= $task['total'] . ' balance requests have been sent' . "\r\n" . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; foreach ($task['data'] as $eventinfo) { $content .= 'Event ID: ' . $eventinfo['id'] . "\r\n" . 'Date: ' . $eventinfo['date'] . "\r\n" . 'Client: ' . $eventinfo['client'] . "\r\n" . 'DJ: ' . $eventinfo['djinfo']->display_name . "\r\n" . mdjm_get_balance_label() . ' Due: ' . mdjm_currency_filter(mdjm_sanitize_amount($eventinfo['cost'] - $eventinfo['deposit'])) . "\r\n" . 'Link: ' . get_edit_post_link($eventinfo['id'], '') . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; } // End Foreach break; case 'client-feedback': $content .= $task['total'] . ' client feedback requests have been sent' . "\r\n" . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; foreach ($task['data'] as $eventinfo) { $content .= 'Event ID: ' . $eventinfo['id'] . "\r\n" . 'Date: ' . $eventinfo['date'] . "\r\n" . 'Client: ' . $eventinfo['client'] . "\r\n" . 'DJ: ' . $eventinfo['djinfo']->display_name . "\r\n" . '----------------------------------------' . '----------------------------------------' . "\r\n"; } break; } // Switch /* -- Complete the email content -- */ $content .= 'Task End time: ' . date('H:i:s l, jS F Y', $task['end']) . "\r\n" . "\r\n" . 'This email was generated by the MDJM Event Management for WordPress plugin - http://mdjm.co.uk'; /* -- Return the content -- */ return $content; }
/** * Define the data to be displayed in each of the custom columns for the Quote post types * * @since 0.9 * @param str $column_name The name of the column to display * @param int $post_id The current post ID * @return */ function mdjm_quote_posts_custom_column($column_name, $post_id) { if ($column_name == 'quote_event' || $column_name == 'quote_value') { $parent = wp_get_post_parent_id($post_id); } switch ($column_name) { // Quote Date case 'date': echo get_the_date('d M Y H:i:s'); break; // Event // Event case 'quote_event': if (!empty($parent)) { printf('<a href="%s">%s</a><br /><em>%s</em>', admin_url('/post.php?post={$parent}&action=edit'), mdjm_get_event_contract_id($parent), mdjm_get_event_date($parent)); } else { _e('N/A', 'mobile-dj-manager'); } break; // Client // Client case 'quote_client': global $post; echo '<a href="' . admin_url('admin.php?page=mdjm-clients&action=view_client&client_id=' . $post->post_author) . '">' . get_the_author() . '</a>'; break; // Cost // Cost case 'quote_value': echo mdjm_currency_filter(mdjm_get_event_price($parent)); break; // Date Viewed // Date Viewed case 'quote_view_date': if ('mdjm-quote-viewed' == get_post_status($post_id)) { echo date('d M Y H:i:s', strtotime(get_post_meta($post_id, '_mdjm_quote_viewed_date', true))); } else { _e('N/A', 'mobile-dj-manager'); } break; // View Count // View Count case 'quote_view_count': $count = get_post_meta($post_id, '_mdjm_quote_viewed_count', true); if (empty($count)) { $count = 0; } echo $count . _n(' time', ' times', $count, 'mobile-dj-manager'); break; } // switch }
/** * Mark event employees salaries as paid. * * @since 1.3 * @param int $event_id The event ID. * @param int $_employee_id User ID of employee to pay. * @param str $amount Amount to pay. * @return mixed Array of 'success' and 'failed' payments or if individual employee, true or false. */ function mdjm_pay_event_employees($event_id, $_employee_id = 0, $amount = 0) { if (!mdjm_get_option('enable_employee_payments')) { return; } $mdjm_event = mdjm_get_event($event_id); if (!$mdjm_event) { return false; } $employees = $mdjm_event->get_all_employees(); if (!$employees) { return false; } do_action('mdjm_pre_pay_event_employees', $event_id, $_employee_id, $mdjm_event); foreach ($employees as $employee_id => $employee_data) { if ($employee_data['payment_status'] == 'paid') { MDJM()->debug->log_it(sprintf('Skipping payment to %s. Employee already paid.', mdjm_get_employee_display_name($employee_id))); } $mdjm_txn = new MDJM_Txn($employee_data['txn_id']); if (!$mdjm_txn) { return false; } MDJM()->debug->log_it(sprintf('Starting payment to %s for %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price))), true); if (!mdjm_set_employee_paid($employee_id, $event_id, $mdjm_txn->ID)) { MDJM()->debug->log_it(sprintf('Payment to %s failed', mdjm_get_employee_display_name($employee_id))); if (!empty($_employee_id)) { $return = false; } else { $return['failed'] = $employee_id; } } else { MDJM()->debug->log_it(sprintf('%s successfully paid %s', mdjm_get_employee_display_name($employee_id), mdjm_currency_filter(mdjm_format_amount($mdjm_txn->price)))); mdjm_update_txn_meta($mdjm_txn->ID, array('_mdjm_txn_status' => 'Completed')); if (!empty($_employee_id)) { $return = true; } else { $return['success'] = $employee_id; } } } do_action('mdjm_post_pay_event_employees', $event_id, $_employee_id, $mdjm_event, $mdjm_txn->ID); return $return; }